/* Charte 42 · étude de cas. Habillage portfolio commun : Geist, monochrome (papier clair, scène sombre).
   Idée propre au projet : un turquoise qui s'ouvre en spectre. Les couleurs de 42 restent dans les pièces montrées (bandes, nuancier, exemples, captures). */
@font-face{font-family:"Geist";font-weight:400;font-display:swap;src:url(fonts/geist-sans-latin-400-normal.woff2) format("woff2")}
@font-face{font-family:"Geist";font-weight:500;font-display:swap;src:url(fonts/geist-sans-latin-500-normal.woff2) format("woff2")}
@font-face{font-family:"Geist";font-weight:600;font-display:swap;src:url(fonts/geist-sans-latin-600-normal.woff2) format("woff2")}
@font-face{font-family:"Geist Mono";font-weight:400;font-display:swap;src:url(fonts/geist-mono-latin-400-normal.woff2) format("woff2")}
/* Jost tient lieu de Futura PT dans les exemples (remplacée à l'harmonisation finale) */
@font-face{font-family:"Jost";font-weight:400;font-display:swap;src:url(fonts/jost-latin-400-normal.woff2) format("woff2")}
@font-face{font-family:"Jost";font-weight:500;font-display:swap;src:url(fonts/jost-latin-500-normal.woff2) format("woff2")}
@font-face{font-family:"Jost";font-weight:700;font-display:swap;src:url(fonts/jost-latin-700-normal.woff2) format("woff2")}
@font-face{font-family:"Jost";font-weight:700;font-style:italic;font-display:swap;src:url(fonts/jost-latin-700-italic.woff2) format("woff2")}
:root{
  color-scheme:only light;
  --paper:#ececea; --ink:#121314; --muted:#5d5f64; --line:rgba(18,19,20,.14);
  --stage:#0b0c0d; --stage-ink:#ebebe8; --stage-muted:#9a9da3; --stage-line:rgba(235,235,232,.14);
  --sans:"Geist",ui-sans-serif,system-ui,-apple-system,"Segoe UI",sans-serif;
  --mono:"Geist Mono",ui-monospace,"SF Mono",Menlo,monospace;
  --brand:"Jost","Futura PT",Futura,sans-serif;
  --ease:cubic-bezier(.22,1,.36,1);--ease-out:cubic-bezier(.23,1,.32,1);
  --frame:1920px;
  --gutter:max(20px, env(safe-area-inset-left, 0px), calc((100vw - var(--frame)) / 2 + 20px));
  --gutter-r:max(20px, env(safe-area-inset-right, 0px), calc((100vw - var(--frame)) / 2 + 20px));
  --sec:clamp(96px, 12vw, 200px);
  /* charte 42, octobre 2025 */
  --k-black:#1B1B1B;--k-blue:#00BABC;--k-bubbles:#E7FEFE;--k-bright:#E6F4F1;--k-slate:#324B4B;--k-cadet:#95B0B0;
  --k-cobalt:#96A3EB;--k-cg:#04809F;--k-pink:#ED3491;--k-cerulean:#173D7A;--k-violet:#6000BC;
}
@media (min-width:861px){:root{--gutter:max(48px, calc((100vw - var(--frame)) / 2 + 48px));--gutter-r:max(64px, calc((100vw - var(--frame)) / 2 + 64px))}}
*{box-sizing:border-box;margin:0;padding:0}
html{background:var(--paper)}
html.lenis,html.lenis body{height:auto}
.lenis.lenis-smooth{scroll-behavior:auto!important}
body{background:var(--paper);color:var(--ink);font-family:var(--sans);font-size:clamp(16px, 10px + .45vw, 20px);line-height:1.55;-webkit-font-smoothing:antialiased;overflow-x:clip}
img{display:block;max-width:100%;height:auto}
a{color:inherit}
ul,ol{list-style:none}
button{font:inherit;color:inherit;background:none;border:0;cursor:pointer}
:focus-visible{outline:2px solid currentColor;outline-offset:4px;border-radius:2px}
.wrap{padding-left:var(--gutter);padding-right:var(--gutter-r)}
.mono{font-family:var(--mono);font-size:clamp(12px, 9px + .22vw, 14px);letter-spacing:.01em;line-height:1.45}
.muted{color:var(--muted)}
.line{display:block;overflow:hidden;padding-bottom:.08em;margin-bottom:-.08em}
.line>span{display:block}
section[data-cs-theme=dark]{background:var(--stage);color:var(--stage-ink)}
section[data-cs-theme=dark] .muted{color:var(--stage-muted)}
figure{margin:0}
figcaption{margin-top:12px;color:var(--muted)}
[data-cs-theme=dark] figcaption{color:var(--stage-muted)}
figcaption b{font-weight:400;color:var(--ink)}
[data-cs-theme=dark] figcaption b{color:var(--stage-ink)}

.top{position:fixed;inset:0 0 auto;z-index:50;display:flex;justify-content:space-between;align-items:center;
  padding:calc(18px + env(safe-area-inset-top,0px)) var(--gutter-r) 18px var(--gutter);color:#fff;mix-blend-mode:difference;pointer-events:none;transition:transform .5s var(--ease-out)}
.cs-on .top{transform:translateY(-110%)}
.top a{pointer-events:auto;text-decoration:none}
.top .name{font-weight:500;font-size:15px;letter-spacing:-.01em}
.top nav{display:flex;gap:28px;font-size:14px}
@media (max-width:560px){.top nav{gap:16px;font-size:13px}}

.chap{display:grid;grid-template-columns:minmax(0,1fr);gap:18px;margin-bottom:clamp(40px,6vw,88px)}
.chap-n{display:flex;align-items:center;gap:12px;color:var(--muted)}
[data-cs-theme=dark] .chap-n{color:var(--stage-muted)}
.chap-n i{display:block;width:32px;height:1.5px;background:currentColor}
.chap h2{font-weight:500;font-size:clamp(36px, 18px + 3.6vw, 88px);line-height:1;letter-spacing:-.035em;max-width:14ch}
.txt{display:grid;gap:1em;max-width:36em}
.lede{font-size:clamp(19px, 13px + .7vw, 26px);line-height:1.4;letter-spacing:-.012em}
.pair{display:grid;grid-template-columns:minmax(0,1fr);gap:clamp(28px,4vw,72px);align-items:end}
@media (min-width:1100px){.pair{grid-template-columns:minmax(0,7fr) minmax(0,5fr)}}
section{position:relative;padding-top:var(--sec);padding-bottom:var(--sec)}
.src{margin-top:28px}
.tbc{display:inline-block;margin-left:6px;padding:1px 7px;border:1px solid currentColor;border-radius:999px;font-size:11px;opacity:.7;vertical-align:1px}

/* Apparitions */
.js .reveal-lines .line>span{transform:translateY(105%)}
.js .reveal-lines.in .line>span{transform:none;transition:transform .9s var(--ease)}
.js .reveal-lines.in .line:nth-child(2)>span{transition-delay:.08s}
.js .rv{opacity:0;transform:translateY(28px)}
.js .rv.in{opacity:1;transform:none;transition:opacity .9s var(--ease-out) var(--d,0s),transform 1.1s var(--ease) var(--d,0s)}

/* ── Ouverture : le spectre ── */
.hero{position:relative;height:100vh;height:100svh;min-height:640px;max-height:1300px;padding:0;overflow:hidden}
.hero-title{position:absolute;left:var(--gutter);top:44%;transform:translateY(-50%);max-width:min(34vw,560px);z-index:4}
.hero-title .kick{color:rgba(255,255,255,.56);margin:0 0 22px}
.hero-title h1{font-size:clamp(64px,7vw,112px);font-weight:500;letter-spacing:-.05em;line-height:.88;padding-bottom:.04em;margin:0 0 0 -.03em}
.hero-title .desc{margin:28px 0 0;font-size:clamp(17px,1.35vw,21px);line-height:1.4;color:rgba(255,255,255,.74);letter-spacing:-.01em;max-width:22em}
.hero-meta{position:absolute;left:var(--gutter);right:var(--gutter-r);bottom:calc(28px + env(safe-area-inset-bottom,0px));display:grid;grid-template-columns:1fr 1.3fr 1fr 1.2fr;gap:24px;margin:0;color:rgba(255,255,255,.86);z-index:4}
.hero-meta dt{color:rgba(255,255,255,.5);margin-bottom:4px}
.hero-meta dd{margin:0;font-size:15px;line-height:1.35}

/* Les bandes : à l'état initial, le seul turquoise occupe tout le champ ; puis le spectre s'ouvre (largeurs égales, hauteurs décalées comme dans le nuancier de la charte). */
.prism{position:absolute;z-index:1;top:clamp(88px,12vh,140px);bottom:clamp(150px,20vh,210px);left:42vw;right:var(--gutter-r);display:flex;align-items:center}
.band{position:relative;flex:1 1 0;height:var(--h,78%);background:var(--c);min-width:0;transition:flex-grow 1.3s var(--ease),height 1.3s var(--ease)}
.band span{position:absolute;left:10px;bottom:10px;font-family:var(--mono);font-size:11px;letter-spacing:.02em;line-height:1.2;color:#fff;writing-mode:vertical-rl;transform:rotate(180deg);opacity:.9;white-space:nowrap}
.band.b-bright span,.band.b-bubbles span,.band[style*="95B0B0"] span,.band[style*="96A3EB"] span{color:var(--k-black)}
.band:nth-of-type(1){--h:70%}.band:nth-of-type(2){--h:74%}.band:nth-of-type(3){--h:92%}.band:nth-of-type(4){--h:70%}.band:nth-of-type(5){--h:70%}
.band:nth-of-type(6){--h:80%}.band:nth-of-type(7){--h:72%}.band:nth-of-type(8){--h:72%}.band:nth-of-type(9){--h:80%}.band:nth-of-type(10){--h:72%}
.js .prism:not(.open) .band{flex-grow:0;height:92%}
.js .prism:not(.open) .band.is-root{flex-grow:1}
.js .prism:not(.open) .band span{opacity:0}
.js .prism.open .band span{transition:opacity .6s ease .9s}
.js .prism.open .band{transition-delay:calc(var(--i,0) * 45ms)}
.prism::after{content:"";position:absolute;left:0;right:0;bottom:-34px;height:1px;background:var(--stage-line)}

@media (max-width:860px){
  .hero{height:auto;min-height:100svh;max-height:none;display:flex;flex-direction:column;justify-content:flex-end;padding:calc(76px + env(safe-area-inset-top,0px)) 0 calc(28px + env(safe-area-inset-bottom,0px))}
  .prism{position:relative;inset:auto;height:min(64vw,330px);margin:0 var(--gutter-r) 0 var(--gutter)}
  .band span{display:none}
  .prism::after{display:none}
  .hero-title{position:relative;left:auto;top:auto;transform:none;max-width:none;margin-top:36px;padding:0 var(--gutter-r) 0 var(--gutter)}
  .hero-title .kick{margin-bottom:14px}
  .hero-title h1{font-size:clamp(60px,18vw,100px)}
  .hero-title .desc{margin-top:16px;font-size:16px}
  .hero-meta{position:relative;left:auto;right:auto;bottom:auto;margin-top:28px;padding:0 var(--gutter-r) 0 var(--gutter);grid-template-columns:1fr 1fr;gap:12px 16px}
  .hero-meta dd{font-size:14px}
}
.js .hero-title>*,.js .hero-meta{opacity:0;transform:translateY(16px)}
.js .hero.in .hero-title>*,.js .hero.in .hero-meta{opacity:1;transform:none;transition:opacity .8s ease,transform 1s var(--ease)}
.js .hero.in .hero-title>:nth-child(2){transition-delay:.06s}.js .hero.in .hero-title>:nth-child(3){transition-delay:.14s}.js .hero.in .hero-meta{transition-delay:.24s}

/* ── 01 · Avant ── */
.rule{border-left:1.5px solid var(--ink);padding:4px 0 4px 22px;max-width:30em}
.rule p{font-size:clamp(18px,12px + .6vw,24px);line-height:1.35;letter-spacing:-.01em}
.rule cite{display:block;margin-top:12px;font-style:normal;color:var(--muted)}
.chips{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));margin:clamp(48px,6vw,96px) 0 clamp(40px,5vw,72px)}
.chips li{background:var(--c);color:#fff;aspect-ratio:1/1.05;padding:14px;display:flex;flex-direction:column;justify-content:flex-end;gap:2px;font-family:var(--mono);font-size:12px;line-height:1.3}
.chips li b{font-weight:400}
.chips li.light{color:var(--ink);box-shadow:inset 0 0 0 1px var(--line)}
@media (max-width:700px){.chips{grid-template-columns:repeat(3,minmax(0,1fr))}.chips li{aspect-ratio:1/1;font-size:11px;padding:10px}}
.plates{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));gap:clamp(16px,2vw,32px)}
.plate img{box-shadow:0 1px 0 rgba(0,0,0,.04),0 18px 40px -24px rgba(0,0,0,.35)}
.p-a{grid-column:1/span 7}.p-b{grid-column:8/span 5;align-self:end}
.p-c{grid-column:2/span 5}.p-d{grid-column:7/span 6;margin-top:clamp(0px,6vw,120px)}
@media (max-width:860px){.p-a,.p-b,.p-c,.p-d{grid-column:1/-1;margin-top:0}}

/* ── 02 · Le spectre (système) ── */
.sys{margin-top:clamp(56px,7vw,120px)}
.sys-tabs{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:24px}
.sys-tabs button{font-family:var(--mono);font-size:13px;padding:10px 16px;min-height:44px;border:1px solid var(--stage-line);border-radius:999px;color:var(--stage-muted);transition:color .2s,border-color .2s,background-color .2s}
.sys-tabs button:hover{color:var(--stage-ink);border-color:rgba(235,235,232,.4)}
.sys-tabs button[aria-pressed=true]{color:var(--stage);background:var(--stage-ink);border-color:var(--stage-ink)}
.strip{display:flex;height:clamp(260px,34vw,460px);gap:2px}
.strip li{flex:1 1 0;min-width:0;background:var(--c);color:#fff;padding:14px 12px;display:flex;flex-direction:column;justify-content:flex-end;gap:2px;font-family:var(--mono);font-size:12px;line-height:1.3;overflow:hidden;
  transition:flex-grow .8s var(--ease),opacity .5s ease,filter .5s ease}
.strip li.light{color:var(--k-black)}
.strip li b{font-family:var(--brand);font-style:italic;font-weight:700;font-size:clamp(14px,1.1vw,19px);line-height:1.05;margin-bottom:auto;letter-spacing:0}
.strip li span{white-space:nowrap;transition:opacity .4s ease}
.strip li.key{flex-grow:1.35}
.sys:not([data-p=all]) .strip li{flex-grow:.18;opacity:.32}
.sys:not([data-p=all]) .strip li b,.sys:not([data-p=all]) .strip li span{opacity:0}
.sys[data-p=min] .strip li[data-in~=min],.sys[data-p=sle] .strip li[data-in~=sle],.sys[data-p=bub] .strip li[data-in~=bub]{flex-grow:2;opacity:1}
.sys[data-p=min] .strip li[data-in~=min] :is(b,span),.sys[data-p=sle] .strip li[data-in~=sle] :is(b,span),.sys[data-p=bub] .strip li[data-in~=bub] :is(b,span){opacity:1}
.sys-desc{margin-top:22px;max-width:44em;min-height:3.2em;color:var(--stage-muted)}
.sys-desc b{font-weight:500;color:var(--stage-ink)}
@media (max-width:700px){
  .strip{flex-direction:column;height:auto;gap:2px}
  .strip li{flex:none;height:56px;flex-direction:row;align-items:center;justify-content:flex-start;gap:12px;padding:0 14px;transition:height .6s var(--ease),opacity .5s ease}
  .strip li b{margin:0 auto 0 0}
  .strip li span:last-child{display:none}
  .sys:not([data-p=all]) .strip li{height:10px;opacity:.32}
  .sys[data-p=min] .strip li[data-in~=min],.sys[data-p=sle] .strip li[data-in~=sle],.sys[data-p=bub] .strip li[data-in~=bub]{height:64px}
}
.grads{margin-top:clamp(64px,8vw,128px);display:grid;gap:28px}
.rings{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:clamp(16px,3vw,48px)}
.rings li{display:grid;gap:14px;justify-items:start}
.rings i{display:block;width:100%;max-width:220px;aspect-ratio:1;border-radius:50%;
  background:conic-gradient(from var(--r,0deg),var(--a),var(--b),var(--a));
  -webkit-mask:radial-gradient(closest-side,transparent 63%,#000 64%);mask:radial-gradient(closest-side,transparent 63%,#000 64%)}
@property --r{syntax:"<angle>";inherits:false;initial-value:0deg}
.js .grads.in .rings i{animation:spin 9s linear infinite}
.rings li:nth-child(2) i{animation-duration:11s!important;animation-direction:reverse!important}
.rings li:nth-child(3) i{animation-duration:13s!important}
@keyframes spin{to{--r:360deg}}
@media (max-width:700px){.rings{grid-template-columns:repeat(2,minmax(0,1fr))}}

/* ── 03 · Exemples fictifs ── */
.fict{display:flex;gap:12px;align-items:center;flex-wrap:wrap;color:var(--muted);margin:-32px 0 clamp(32px,4vw,56px)}
.fict .tag{color:var(--ink);border:1px solid var(--ink);border-radius:999px;padding:2px 10px}
.cr-grid{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));gap:clamp(16px,2vw,32px);align-items:start}
.cr-key{grid-column:1/-1}
.cr-rep{grid-column:1/span 5}
.cr-post{grid-column:7/span 6;margin-top:clamp(0px,8vw,160px)}
@media (max-width:860px){.cr-rep,.cr-post{grid-column:1/-1;margin-top:0}}
.art{position:relative;overflow:hidden;container-type:inline-size;font-family:var(--brand);box-shadow:0 30px 60px -36px rgba(0,0,0,.45)}

/* Keynote · Minimalist */
.key{aspect-ratio:16/9;background:var(--k-bubbles);color:var(--k-black)}
.k-dots{position:absolute;left:4cqw;top:6cqw;width:22cqw;height:12cqw;background-image:radial-gradient(var(--k-blue) 1.1px,transparent 1.6px);background-size:1.6cqw 1.6cqw;opacity:.75}
.k-logo{position:absolute;right:4cqw;top:3.6cqw;width:5.4cqw;height:3.8cqw;fill:var(--k-black)}
.k-lab{position:absolute;left:5cqw;top:5cqw;font-size:1.1cqw;letter-spacing:.14em;text-transform:uppercase;font-weight:500}
.k-t{position:absolute;left:5cqw;top:19cqw;font-weight:700;font-style:italic;font-size:6.2cqw;line-height:.98;letter-spacing:-.01em}
.k-t span{display:block}
.k-bar{position:absolute;left:5cqw;top:36.5cqw;width:9cqw;height:.5cqw;background:var(--k-blue);transform-origin:left}
.k-s{position:absolute;left:5cqw;top:39cqw;font-size:1.5cqw;line-height:1.35;max-width:30cqw;font-weight:400}
.k-ph{position:absolute;right:4cqw;top:10cqw;bottom:4cqw;width:44cqw;overflow:hidden;background:var(--k-blue)}
.k-ph img{width:100%;height:100%;object-fit:cover;object-position:50% 38%;filter:grayscale(1) contrast(1.08);mix-blend-mode:multiply}
.k-ph::after{content:"";position:absolute;inset:0;background:var(--k-bright);mix-blend-mode:screen;opacity:.18}

/* Rapport · Sleek */
.rep{aspect-ratio:210/297;background:var(--k-slate);color:#fff}
.r-lines{position:absolute;inset:0;width:100%;height:100%}
.r-lines path{stroke-dasharray:1;stroke-dashoffset:0}
.r-logo{position:absolute;left:8cqw;top:8cqw;width:13cqw;height:9.2cqw;fill:#fff}
.r-txt{position:absolute;left:8cqw;right:8cqw;bottom:9cqw}
.r-k{font-size:2.6cqw;letter-spacing:.14em;text-transform:uppercase;color:var(--k-cadet);margin-bottom:3cqw}
.r-t{font-weight:500;font-size:12cqw;line-height:.95;letter-spacing:-.02em}
.r-s{margin-top:4cqw;font-size:3.4cqw;color:var(--k-cadet);line-height:1.3}

/* Publication · Bubbly */
.post{aspect-ratio:4/5;background:linear-gradient(160deg,var(--k-violet) 0%,var(--k-pink) 52%,var(--k-cg) 100%);color:#fff}
.p-ring{position:absolute;left:52cqw;top:50cqw;width:78cqw;aspect-ratio:1;margin:-39cqw 0 0 -39cqw;border-radius:50%;
  background:conic-gradient(from var(--r,0deg),var(--k-blue),var(--k-bubbles),var(--k-blue) 40%,transparent 60%,var(--k-blue));
  -webkit-mask:radial-gradient(closest-side,transparent 86%,#000 87%);mask:radial-gradient(closest-side,transparent 86%,#000 87%);opacity:.9}
.js .post.play .p-ring{animation:spin 14s linear infinite}
.p-dots{position:absolute;left:7cqw;top:17cqw;width:20cqw;height:14cqw;background-image:radial-gradient(#fff 1.2px,transparent 1.7px);background-size:2.6cqw 2.6cqw;opacity:.7}
.p-ph{position:absolute;left:-1cqw;width:102cqw;max-width:none;height:auto;bottom:24cqw}
.p-panel{position:absolute;left:0;right:0;bottom:0;height:46cqw;background:var(--k-violet);clip-path:polygon(0 18%,100% 0,100% 100%,0 100%)}
.p-chip{position:absolute;left:7cqw;top:7cqw;font-size:3.2cqw;font-weight:500;padding:.8cqw 3cqw;border-radius:99px;background:var(--k-blue);color:#fff}
.p-t{position:absolute;left:7cqw;right:7cqw;bottom:7cqw;font-weight:700;font-style:italic;font-size:10.4cqw;line-height:.96;letter-spacing:-.01em}
.p-t span{display:block}
.p-chev{position:absolute;right:7cqw;bottom:8.4cqw;font-weight:700;font-size:6cqw;color:var(--k-blue);letter-spacing:-.1em}
.p-logo{position:absolute;right:7cqw;top:7cqw;width:10cqw;height:7.1cqw;fill:#fff}
.p-t,.p-chev{z-index:2}
.replay{margin-top:28px;padding:10px 16px;min-height:44px;border:1px solid var(--line);border-radius:999px;color:var(--muted)}
.replay:hover{color:var(--ink);border-color:var(--ink)}

/* Animations des exemples : jouées une fois à l'entrée, rejouables */
.js [data-cr] .art :is(.k-t span,.k-lab,.k-s,.r-txt>*,.p-t span,.p-chip){opacity:0;transform:translateY(.6em)}
.js [data-cr] .art :is(.k-dots,.p-dots){clip-path:inset(0 100% 0 0)}
.js [data-cr] .k-bar{transform:scaleX(0)}
.js [data-cr] .k-ph{clip-path:inset(0 0 100% 0)}
.js [data-cr] .r-lines path{stroke-dashoffset:1}
.js [data-cr] .r-sq{opacity:0}
.js [data-cr] .p-ph{opacity:0;transform:translateY(5%)}.js [data-cr] .p-panel{transform:translateY(101%)}
.js [data-cr] .p-ring{opacity:0;scale:.9}
.js [data-cr] .p-chev{opacity:0;transform:translateX(-30%)}
.js [data-cr].play .art :is(.k-t span,.k-lab,.k-s,.r-txt>*,.p-t span,.p-chip){opacity:1;transform:none;transition:opacity .7s ease var(--t,0s),transform .9s var(--ease) var(--t,0s)}
.js [data-cr].play .art :is(.k-dots,.p-dots){clip-path:inset(0 0 0 0);transition:clip-path 1.1s var(--ease) .1s}
.js [data-cr].play .k-bar{transform:none;transition:transform .8s var(--ease) .55s}
.js [data-cr].play .k-ph{clip-path:inset(0 0 0 0);transition:clip-path 1.3s var(--ease) .2s}
.js [data-cr].play .r-lines path{stroke-dashoffset:0;transition:stroke-dashoffset 1.6s var(--ease) calc(.1s + var(--j,0) * .12s)}
.js [data-cr].play .r-sq{opacity:1;transition:opacity .6s ease 1s}
.js [data-cr].play .p-ph{opacity:1;transform:none;transition:opacity .8s ease .15s,transform 1.3s var(--ease) .15s}.js [data-cr].play .p-panel{transform:none;transition:transform .9s var(--ease) .3s}
.js [data-cr].play .p-ring{opacity:.9;scale:1;transition:opacity 1s ease,scale 1.4s var(--ease)}
.js [data-cr].play .p-chev{opacity:1;transform:none;transition:opacity .6s ease 1.1s,transform .8s var(--ease) 1.1s}
.k-t span:nth-child(2),.p-t span:nth-child(2){--t:.08s}
.k-s{--t:.5s}.k-lab{--t:.05s}.r-txt>:nth-child(1){--t:.7s}.r-txt>:nth-child(2){--t:.8s}.r-txt>:nth-child(3){--t:.95s}
.p-chip{--t:.6s}.p-t span{--t:.45s}.p-t span:nth-child(2){--t:.53s}

/* ── 04 · Sur le réseau ── */
.cmp{display:grid;grid-template-columns:minmax(0,4fr) minmax(0,8fr);gap:clamp(24px,3vw,56px);margin-top:clamp(56px,7vw,112px);align-items:start}
.cmp-old{position:sticky;top:96px}
.cmp-old img{opacity:.92}
@media (max-width:960px){.cmp{grid-template-columns:minmax(0,1fr)}.cmp-old{position:static}}
.wall{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:clamp(20px,2.4vw,40px) clamp(16px,2vw,32px)}
@media (max-width:640px){.wall{grid-template-columns:minmax(0,1fr)}}
.wall li:nth-child(even){margin-top:clamp(0px,5vw,96px)}
@media (max-width:640px){.wall li:nth-child(even){margin-top:0}}
.shot{background:#1a1b1d;border-radius:8px;overflow:hidden;box-shadow:0 0 0 1px var(--stage-line),0 24px 50px -30px rgba(0,0,0,.8)}
.shot .url{display:flex;align-items:center;gap:8px;height:30px;padding:0 12px;color:var(--stage-muted);font-size:11px;border-bottom:1px solid var(--stage-line)}
.shot .url::before{content:"";width:6px;height:6px;border-radius:50%;background:rgba(235,235,232,.25);box-shadow:10px 0 0 rgba(235,235,232,.25),20px 0 0 rgba(235,235,232,.25);margin-right:26px}
.wall figcaption{display:grid;grid-template-columns:auto auto 1fr;align-items:center;gap:6px 12px;margin-top:14px}
.wall figcaption>span:first-child{color:var(--stage-ink)}
.wall figcaption .muted{grid-column:1/-1}
.dots{display:flex;gap:4px}
.dots i{width:14px;height:14px;border-radius:50%;background:var(--c);box-shadow:inset 0 0 0 1px rgba(255,255,255,.18)}
.dots i.own{background:transparent;box-shadow:inset 0 0 0 2px var(--c)}

/* Fin */
.end{padding-bottom:calc(var(--sec) * .8)}
.end-logo{width:72px;height:51px;fill:var(--stage-ink);margin-bottom:40px}
.end h2{font-weight:500;font-size:clamp(32px, 16px + 3vw, 72px);letter-spacing:-.035em;line-height:1;max-width:16ch}
.credits{display:grid;gap:14px 28px;margin-top:48px;border-top:1px solid var(--stage-line);padding-top:24px}
@media (min-width:900px){.credits{grid-template-columns:repeat(4,minmax(0,1fr))}}
.credits dt{color:var(--stage-muted)}

@media (prefers-reduced-motion:reduce){
  .js .rv{transform:none}.js .rv.in{transition:opacity .6s ease-out}
  .js .reveal-lines .line>span{transform:none!important;transition:none!important}
  .band,.strip li{transition:none!important}
  .js .grads.in .rings i,.js .post.play .p-ring{animation:none}
  .js [data-cr] *{transition-duration:.01s!important;transition-delay:0s!important}
}

/* Légende des pastilles d'origine */
.chips-leg{display:grid;grid-template-columns:3fr 3fr;margin:clamp(48px,6vw,96px) 0 10px;color:var(--muted)}
.chips-leg span{border-top:1px solid var(--ink);padding-top:8px}
.chips-leg span+span{margin-left:2px}
.chips-leg+.chips{margin-top:0}
@media (max-width:700px){.chips-leg{grid-template-columns:1fr 1fr}}

/* ── 03 · Le système ── */
.goods{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:clamp(16px,2vw,32px);margin-top:clamp(48px,6vw,96px)}
.goods img,.adds img{box-shadow:0 1px 0 rgba(0,0,0,.04),0 18px 40px -24px rgba(0,0,0,.35)}
.goods figcaption{display:grid;gap:8px}
.goods q{font-size:clamp(18px,12px + .6vw,24px);line-height:1.3;letter-spacing:-.01em;color:var(--ink);quotes:"«\00a0" "\00a0»"}
.g-new{margin-top:clamp(0px,6vw,110px)}
.adds{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:clamp(24px,2.6vw,44px) clamp(16px,2vw,32px);margin-top:clamp(56px,7vw,120px)}
@media (max-width:860px){.goods{grid-template-columns:minmax(0,1fr)}.g-new{margin-top:0}.adds{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media (max-width:520px){.adds{grid-template-columns:minmax(0,1fr)}}
@media (max-width:700px){.chips-leg{display:none}.chips-leg+.chips{margin-top:clamp(48px,6vw,96px)}}

/* ═══ V2 ═══ */
/* Ouverture : l'invite du terminal, son curseur turquoise devient l'aplat, puis le spectre */
.term{position:absolute;left:0;top:50%;transform:translateY(-50%);margin:0;font-family:var(--mono);font-size:clamp(20px,2vw,30px);line-height:1;color:var(--stage-ink);white-space:nowrap;z-index:2;pointer-events:none;transition:opacity .4s ease}
.js .prism.s1 .term,.js .prism.open .term,html:not(.js) .term{opacity:0}
.js .prism.s0 .band.is-root{clip-path:inset(calc(50% - .62em) calc(100% - var(--cx,130px) - .62em) calc(50% - .62em) var(--cx,130px));font-size:clamp(20px,2vw,30px);animation:blink 1s steps(1) infinite}
.js .prism.s1 .band.is-root,.js .prism.open .band.is-root{clip-path:inset(0 0 0 0);font-size:clamp(20px,2vw,30px)}
.js .prism .band.is-root{transition:clip-path .9s var(--ease),flex-grow 1.3s var(--ease),height 1.3s var(--ease)}
@keyframes blink{50%{opacity:0}}
.hero-replay{position:absolute;z-index:5;right:var(--gutter-r);top:calc(100% - clamp(150px,20vh,210px) + 46px);padding:8px 14px;min-height:40px;border:1px solid var(--stage-line);border-radius:999px;color:var(--stage-muted);font-size:12px}
.hero-replay:hover{color:var(--stage-ink);border-color:rgba(235,235,232,.4)}
@media (max-width:860px){.hero-replay{position:relative;right:auto;top:auto;align-self:flex-end;margin:12px var(--gutter-r) 0 0}}

/* Avant : deux planches */
.p-a{grid-column:1/span 7}.p-c{grid-column:8/span 5;align-self:end}
@media (max-width:860px){.p-a,.p-c{grid-column:1/-1}}

/* Spectre : les décisions */
.decide{margin-top:clamp(64px,8vw,128px);border-top:1px solid var(--stage-line);padding-top:24px}
.decide h3{font-weight:400;margin-bottom:28px}
.decide ul{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:28px clamp(16px,2vw,32px)}
.decide li{display:grid;align-content:start;gap:10px;min-width:0}
.decide b{font-weight:500;font-size:clamp(17px,12px + .5vw,22px);letter-spacing:-.01em;line-height:1.2}
.decide p{color:var(--stage-muted);font-size:15px;line-height:1.45}
.grad-row{display:grid;grid-template-columns:repeat(4,1fr);gap:4px;margin-top:4px}
.grad-row i{height:28px;background:linear-gradient(90deg,var(--a),var(--b));background-size:200% 100%}
.js .decide.in .grad-row i{animation:slide 4s ease-in-out infinite alternate}
@keyframes slide{to{background-position:100% 0}}
@media (max-width:1100px){.decide ul{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media (max-width:520px){.decide ul{grid-template-columns:minmax(0,1fr)}}

/* Système : les labels redessinés, avec leurs repères de construction */
.locks{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:clamp(16px,2vw,32px);margin-top:clamp(56px,7vw,120px)}
@media (max-width:960px){.locks{grid-template-columns:minmax(0,1fr)}}
.lock{background:#fff;aspect-ratio:4/3;display:grid;place-items:center;container-type:inline-size;overflow:hidden;box-shadow:0 18px 40px -24px rgba(0,0,0,.35)}
.lk{position:relative;display:flex;align-items:flex-start;gap:4cqw;font-family:var(--brand);font-weight:700;font-style:italic;color:var(--k-black);--ch:8.6cqw}
.lk-p{position:relative;display:block;height:var(--ch);line-height:1;font-size:calc(var(--ch) * 1.42);letter-spacing:-.01em;white-space:nowrap}
.lk-w{transform:translateY(-.17em)}
.lk-l{display:block;height:var(--ch);width:auto;aspect-ratio:58/41;fill:var(--k-black)}
.lk-c small{position:absolute;left:.06em;top:calc(100% + .2em);font-size:.32em;font-style:normal;letter-spacing:0}
/* repères : lignes en tirets à la hauteur de capitale, verticales aux bords de chaque élément */
.lk::before,.lk::after{content:"";position:absolute;pointer-events:none;border:0 dashed var(--k-blue)}
.lk::before{left:-9cqw;right:-9cqw;top:0;bottom:0;border-top-width:1px;border-bottom-width:1px}
.lk::after{left:-9cqw;right:-9cqw;top:calc(var(--ch) / 2);border-top-width:1px;opacity:.5}
.lk-p::before{content:"";position:absolute;top:-7cqw;bottom:-7cqw;left:0;right:0;border:0 dashed var(--k-blue);border-left-width:1px;border-right-width:1px;pointer-events:none}
.js .locks .lk::before,.js .locks .lk::after{transform:scaleX(0);transition:transform 1s var(--ease)}
.js .locks .lk-p::before{transform:scaleY(0);transition:transform .9s var(--ease) .25s}
.js .locks .lk-p>*,.js .locks .lk-w{opacity:0;transition:opacity .7s ease .75s}
.js .locks.in .lk::before,.js .locks.in .lk::after{transform:none}
.js .locks.in .lk-p::before{transform:none}
.js .locks.in .lk-p>*,.js .locks.in .lk-w{opacity:1}
.js .locks li:nth-child(2) *{transition-delay:.15s}
.js .locks li:nth-child(3) *{transition-delay:.3s}

/* Réseau : Tirana en vedette */
.tir{margin-top:clamp(56px,7vw,112px)}
.tir-h{display:flex;flex-wrap:wrap;align-items:center;gap:8px 14px}
.tir-h b{font-weight:400;color:var(--stage-ink)}
.tir-h .muted{flex-basis:100%}
.tir-lede{margin:18px 0 clamp(28px,3vw,48px);max-width:40em;color:var(--stage-ink);font-size:clamp(17px,12px + .5vw,21px);line-height:1.45}
.tir-g{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));gap:clamp(16px,2vw,32px);align-items:start}
.tir-g .t0{grid-column:1/span 7}.tir-g .t1{grid-column:8/span 5;margin-top:clamp(0px,6vw,110px)}
.tir-g .t2{grid-column:1/span 6}.tir-g .t3{grid-column:7/span 6;margin-top:clamp(0px,4vw,72px)}
@media (max-width:860px){.tir-g>*{grid-column:1/-1!important;margin-top:0!important}}
.tpl{margin:clamp(64px,8vw,128px) 0 0;max-width:40em}
.cmp{margin-top:28px}
@media (prefers-reduced-motion:reduce){.js .prism .band.is-root{transition:none}.js .decide.in .grad-row i{animation:none}.js .locks *{transition:none!important}}
.lk{--ch:7.2cqw}
.lk-l{width:calc(var(--ch) * 58 / 41);flex:none;overflow:visible}
.lk-c small{top:calc(100% + .42em)}
.locks li:nth-child(3) .lk{--ch:6.2cqw}
.lk-c small{top:calc(100% + 1.2em)}
@media (max-width:960px){.lk{--ch:7.6cqw}.locks li:nth-child(3) .lk{--ch:6.6cqw}}
.lua{margin-top:clamp(80px,10vw,160px)}
.lua .tir-g .t3{grid-column:2/span 7;margin-top:clamp(0px,3vw,48px)}

/* Réalisations : une rangée, trois formats à hauteur égale sur une même ligne de base */
.real{margin-top:clamp(88px,10vw,152px);padding-top:clamp(28px,3vw,40px);border-top:1px solid var(--line)}
.fict .tag-real{background:var(--ink);color:var(--paper);border-color:var(--ink)}
.real-row{display:grid;grid-template-columns:.8fr .5625fr .8fr;gap:clamp(16px,2vw,32px);align-items:start;margin-top:clamp(24px,3vw,40px)}
.rl{margin:0;min-width:0}
.rl-media{position:relative;overflow:hidden;background:#f5f5f5;box-shadow:0 0 0 1px var(--line)}
.rl-kl .rl-media,.rl-eid .rl-media{aspect-ratio:4/5}
.rl-ss .rl-media{aspect-ratio:9/16;background:var(--k-violet)}
.rl figcaption{margin-top:10px;font-size:12px;line-height:1.45;color:var(--muted)}
.rl figcaption b{font-weight:400;color:var(--ink)}
@media (max-width:860px){.real-row{grid-template-columns:minmax(0,1fr)}.rl-ss{max-width:300px}}
.ctl{display:flex;align-items:center;gap:6px;margin-top:10px;min-height:30px}
.ctl button{font:inherit;font-size:12px;color:var(--ink);background:transparent;border:1px solid var(--line);padding:6px 10px;cursor:pointer;transition:border-color .2s ease}
@media (hover:hover) and (pointer:fine){.ctl button:hover{border-color:var(--ink)}}
.ctl button:active{transform:translateY(1px)}
.ctl button:focus-visible,.kl-track:focus-visible{outline:1px solid var(--ink);outline-offset:3px}
.ctl-n{margin-left:auto;font-size:12px;color:var(--muted)}
.kl-track{list-style:none;margin:0;padding:0;display:flex;height:100%;overflow-x:auto;scroll-snap-type:x mandatory;scrollbar-width:none;overscroll-behavior-x:contain}
.kl-track::-webkit-scrollbar{display:none}
.kl-track li{flex:0 0 100%;scroll-snap-align:start}
.kl-track img{display:block;width:100%;height:100%;object-fit:cover}
/* Student Stories : transition en pixels du bas vers le haut (storyboard) */
.ss-img{display:block;width:100%;height:100%;object-fit:cover}
.ss-bars{position:absolute;z-index:2;left:3%;right:3%;top:1.6%;display:flex;gap:3px}
.ss-bars i{flex:1;height:2px;background:rgba(255,255,255,.35);overflow:hidden}
.ss-bars i::after{content:"";display:block;height:100%;background:#fff;transform:scaleX(0);transform-origin:left}
.ss-bars i.done::after{transform:none}
.ss-bars i.on::after{animation:ssbar var(--dur,3.4s) linear forwards}
@keyframes ssbar{to{transform:none}}
.ss-pix{position:absolute;inset:0;z-index:1;display:grid;grid-template-columns:repeat(10,1fr);grid-template-rows:repeat(18,1fr);pointer-events:none}
.ss-pix b{background:var(--k-violet);opacity:0;transition:opacity 0s linear var(--d,0s)}
.ss-pix b.c{background:var(--k-blue)}
.ss-pix.cover b{opacity:1}
/* Eid : canevas recomposé ; l'image fixe reste en place sans JavaScript */
.eid-live canvas{position:absolute;inset:0;width:100%;height:100%;display:block}
.eid-still{display:block;width:100%;height:100%;object-fit:cover}
.eid-live.live .eid-still{visibility:hidden}
