/* deckhaus — case study pages (v6). Shared primitives only; each case owns its own choreography. */
body{background:var(--bg-base);color:var(--text-primary)}
.cs-prog{position:fixed;top:0;left:0;height:2px;width:0;background:var(--lime-500);z-index:60;pointer-events:none}
/* chapter rail — ticks only, parked in the right margin; label appears on hover/active */
.cs-rail{position:fixed;right:max(10px,calc((100vw - var(--maxw-wide,1480px))/2 - 44px));top:50%;transform:translateY(-50%);z-index:40;display:flex;flex-direction:column;align-items:flex-end;gap:14px;width:30px}
.cs-rail a{display:flex;align-items:center;justify-content:flex-end;gap:10px;height:12px;font-family:var(--font-mono);font-size:10px;letter-spacing:.14em;text-transform:uppercase;color:var(--text-muted);white-space:nowrap}
.cs-rail a span{opacity:0;transform:translateX(6px);transition:opacity .3s ease,transform .36s cubic-bezier(.16,1,.3,1);pointer-events:none;background:var(--sand-050);border:1px solid var(--border-subtle);border-radius:4px;padding:5px 8px}
.cs-rail a i{display:block;width:12px;height:1px;background:currentColor;opacity:.5;transition:width .36s cubic-bezier(.16,1,.3,1),opacity .3s ease;flex:none}
.cs-rail a:hover i{opacity:1;width:20px}
.cs-rail a:hover span{opacity:1;transform:none}
.cs-rail a.on{color:var(--text-accent)}
.cs-rail a.on i{width:26px;opacity:1;background:var(--lime-500)}
.cs-rail.dark a{color:rgba(244,244,239,.7)}
.cs-rail.dark a span{background:rgba(10,10,11,.86);border-color:rgba(244,244,239,.18);color:var(--paper)}
.cs-rail.dark a.on{color:var(--lime-500)}
@media(max-width:1400px){.cs-rail a span{display:none}}
@media(max-width:1180px){.cs-rail{display:none}}
/* boot — whatever is already on screen arrives complete, with no entrance animation */
html.cs-boot .rv.in,html.cs-boot .rv.in figure img,html.cs-boot figure.rv.in img,html.cs-boot .cs-quote.seen blockquote{transition:none}
/* reveal — soft, staggered section entrances */
.rv{opacity:0;transform:translateY(26px);transition:opacity 1s cubic-bezier(.22,1,.28,1),transform 1.2s cubic-bezier(.16,1,.3,1);transition-delay:calc(var(--i,0)*80ms);will-change:opacity,transform}
.rv.in{opacity:1;transform:none;will-change:auto}
.rv figure img,.rv.cs-gal>figure img,figure.rv img{transform:scale(1.045);transition:transform 1.6s cubic-bezier(.16,1,.3,1);transition-delay:calc(var(--i,0)*80ms)}
.rv.in figure img,figure.rv.in img{transform:none}
.cs-quote blockquote{opacity:0;transform:translateY(20px);transition:opacity 1.2s cubic-bezier(.22,1,.28,1),transform 1.4s cubic-bezier(.16,1,.3,1)}
.cs-quote.seen blockquote{opacity:1;transform:none}
@media (prefers-reduced-motion:reduce){.rv{opacity:1;transform:none;transition:none}.rv figure img,figure.rv img{transform:none;transition:none}.cs-quote blockquote{opacity:1;transform:none;transition:none}}
/* type */
.cs-k{font-family:var(--font-mono);font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:var(--text-muted);font-variant-numeric:tabular-nums}
.cs-h1{font-family:var(--font-display);font-weight:400;letter-spacing:0;line-height:1.02;margin:0;text-wrap:balance}
.cs-h2{font-family:var(--font-display);font-weight:400;letter-spacing:0;line-height:1.1;margin:0;font-size:clamp(32px,4.4vw,72px);text-wrap:balance}
.cs-h3{font-family:var(--font-display);font-weight:400;letter-spacing:0;line-height:1.14;margin:0;font-size:clamp(23px,2.2vw,34px)}
.cs-lead{font-size:clamp(18px,1.5vw,22px);line-height:1.6;color:var(--text-secondary);max-width:54ch;margin:0;text-wrap:pretty}
.cs-body{font-size:16.5px;line-height:1.62;color:var(--text-secondary);max-width:52ch;margin:0;text-wrap:pretty}
.cs-sec{padding:clamp(64px,9vw,136px) 0;position:relative}
.cs-two{display:grid;grid-template-columns:minmax(0,.3fr) minmax(0,.7fr);gap:clamp(26px,5vw,84px);align-items:start}
@media(max-width:940px){.cs-two{grid-template-columns:1fr;gap:26px}}
.cs-hair{height:1px;background:var(--border-subtle);border:0;margin:0}
/* ledger rows — the numbered structure signature */
.cs-led{border-top:1px solid var(--border-subtle)}
.cs-led>div{display:grid;grid-template-columns:46px minmax(0,.9fr) minmax(0,1.3fr);gap:clamp(14px,2.4vw,40px);padding:clamp(16px,1.9vw,26px) 0;border-bottom:1px solid var(--border-subtle);align-items:baseline}
.cs-led b{font-family:var(--font-mono);font-weight:400;font-size:12px;letter-spacing:.14em;color:var(--text-accent);font-variant-numeric:tabular-nums}
.cs-led h4{font-family:var(--font-sans);font-weight:700;font-size:16px;letter-spacing:0;margin:0;color:var(--text-primary)}
.cs-led p{font-size:15.5px;line-height:1.58;color:var(--text-secondary);margin:0;max-width:52ch}
@media(max-width:720px){.cs-led>div{grid-template-columns:34px 1fr;gap:12px}.cs-led p{grid-column:2}}
/* before → after */
.cs-shift{display:grid;grid-template-columns:1fr 34px 1fr;gap:clamp(16px,2.4vw,38px);align-items:stretch;margin-top:clamp(26px,3vw,44px)}
.cs-shift .sc{padding:clamp(20px,2.4vw,32px);border:1px solid var(--border-subtle);border-radius:12px;background:var(--surface-card);display:flex;flex-direction:column;gap:14px}
.cs-shift .sc.after{background:var(--ink-900);border-color:var(--ink-900)}
.cs-shift .sc.after p{color:#C2C2CB}
.cs-shift .sc.after .cs-k{color:var(--lime-500)}
.cs-shift .sc p{font-size:clamp(17px,1.5vw,21px);line-height:1.5;margin:0;color:var(--text-primary);max-width:30ch}
.cs-shift .ar{display:flex;align-items:center;justify-content:center;font-family:var(--font-mono);font-size:19px;color:var(--text-accent)}
@media(max-width:820px){.cs-shift{grid-template-columns:1fr;gap:12px}.cs-shift .ar{transform:rotate(90deg);height:26px}}
/* dark quote slab — the one loud moment */
.cs-quote{position:relative;overflow:hidden;background:var(--ink-900);padding:clamp(70px,11vw,170px) 0}
.cs-quote .tex{position:absolute;inset:0;pointer-events:none;background-image:linear-gradient(rgba(244,244,239,.045) 1px,transparent 1px),linear-gradient(90deg,rgba(244,244,239,.045) 1px,transparent 1px);background-size:72px 72px}
.cs-quote blockquote{font-family:var(--font-display);font-weight:400;letter-spacing:0;font-size:clamp(34px,5.6vw,92px);line-height:1.08;color:var(--paper);margin:clamp(22px,2.6vw,40px) 0 0;max-width:19ch;text-wrap:balance}
.cs-quote blockquote em{font-style:normal;color:var(--lime-500)}
.cs-quote .qm{font-family:var(--font-mono);font-size:26px;color:rgba(244,244,239,.4);line-height:1}
.cs-quote figcaption{font-family:var(--font-mono);font-size:11px;letter-spacing:.18em;text-transform:uppercase;color:rgba(244,244,239,.52);margin-top:clamp(28px,3.4vw,52px);display:flex;align-items:center;gap:12px}
.cs-quote figcaption::before{content:"";width:34px;height:1px;background:var(--lime-500)}
/* gallery — 12 col editorial stack */
.cs-gal{display:grid;grid-template-columns:repeat(12,1fr);gap:clamp(12px,1.4vw,22px)}
.cs-gal figure{position:relative;margin:0;overflow:hidden;border-radius:12px;border:1px solid var(--border-subtle);background:var(--surface-sand)}
.cs-gal img{width:100%;height:100%;object-fit:cover;display:block;transition:transform 1.2s cubic-bezier(.16,1,.3,1)}
.cs-gal figure:hover img{transform:scale(1.03)}
.cs-gal figcaption{position:absolute;left:12px;bottom:11px;display:flex;align-items:center;gap:9px;font-family:var(--font-mono);font-size:10.5px;letter-spacing:.12em;text-transform:uppercase;color:rgba(244,244,239,.94);background:rgba(10,10,11,.66);backdrop-filter:blur(8px);padding:6px 10px;border-radius:4px}
.cs-gal figcaption b{font-weight:400;color:var(--lime-500)}
@media(max-width:900px){.cs-gal{grid-template-columns:1fr 1fr}.cs-gal figure{grid-column:span 1!important;aspect-ratio:4/3!important}}
/* stat row */
.cs-stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:clamp(20px,3vw,56px);border-top:1px solid var(--border-subtle);padding-top:clamp(22px,2.6vw,36px)}
.cs-stats>div{position:relative}
.cs-stats .n{font-family:var(--font-display);font-weight:400;letter-spacing:0;font-size:clamp(40px,4.6vw,80px);line-height:1;display:flex;align-items:baseline;gap:6px;color:var(--text-primary)}
.cs-stats .n s{text-decoration:none;font-family:var(--font-mono);font-size:clamp(14px,1.2vw,19px);color:var(--text-accent)}
.cs-stats p{font-family:var(--font-mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--text-muted);margin:14px 0 0;max-width:22ch;line-height:1.5}
[data-theme="dark"] .cs-stats{border-color:rgba(244,244,239,.16)}
[data-theme="dark"] .cs-stats .n{color:var(--paper)}
/* next case — full bleed */
.cs-next{position:relative;display:block;min-height:clamp(360px,46vw,620px);overflow:hidden;background:var(--ink-900);color:var(--paper)}
.cs-next img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;opacity:.44;transform:scale(1.04);transition:transform 1.6s cubic-bezier(.16,1,.3,1),opacity .6s ease}
.cs-next:hover img{transform:scale(1.08);opacity:.56}
.cs-next .in{position:relative;display:flex;flex-direction:column;justify-content:flex-end;min-height:clamp(360px,46vw,620px);padding:clamp(34px,4.6vw,76px) clamp(20px,6vw,96px);max-width:1480px;margin:0 auto;background:linear-gradient(90deg,rgba(10,10,11,.88),rgba(10,10,11,.3) 70%,transparent)}
.cs-next .t{font-family:var(--font-display);font-weight:400;letter-spacing:0;font-size:clamp(30px,4.4vw,72px);line-height:1.06;margin:16px 0 0;max-width:22ch;color:var(--paper)}
.cs-next .go{display:inline-flex;align-items:center;gap:10px;font-family:var(--font-mono);font-size:11.5px;letter-spacing:.18em;text-transform:uppercase;color:var(--lime-500);margin-top:clamp(22px,2.6vw,36px)}
.cs-next:hover .go i{transform:translateX(6px)}
.cs-next .go i{font-style:normal;transition:transform .3s cubic-bezier(.16,1,.3,1)}
/* cta + footer */
.cs-cta{border-top:1px solid var(--border-subtle);padding:clamp(48px,6vw,96px) 0}
.cs-cta .in{display:flex;align-items:flex-end;justify-content:space-between;gap:clamp(24px,4vw,64px);flex-wrap:wrap}
.cs-foot{background:var(--ink-900);color:var(--text-secondary);padding:clamp(44px,5vw,72px) 0 clamp(24px,2.6vw,36px);position:relative;overflow:hidden}
.cs-foot .tex{position:absolute;inset:0;pointer-events:none;background-image:linear-gradient(rgba(244,244,239,.035) 1px,transparent 1px),linear-gradient(90deg,rgba(244,244,239,.035) 1px,transparent 1px);background-size:52px 52px}
.cs-foot .cols{position:relative;display:flex;justify-content:space-between;gap:clamp(26px,4vw,72px);flex-wrap:wrap;padding-bottom:clamp(26px,3vw,40px);border-bottom:1px solid rgba(244,244,239,.1)}
.cs-foot .lk{display:flex;flex-direction:column;gap:10px;font-size:14.5px}
.cs-foot .lk a{color:var(--text-secondary)}
.cs-foot .lk a:hover{color:var(--paper)}
.cs-foot .bot{position:relative;display:flex;justify-content:space-between;gap:20px;flex-wrap:wrap;padding-top:clamp(18px,2vw,26px)}
/* scroll cue */
.cs-cue{display:inline-flex;align-items:center;gap:10px;font-family:var(--font-mono);font-size:10.5px;letter-spacing:.18em;text-transform:uppercase}
.cs-cue i{font-style:normal;animation:cs-bob 2.4s cubic-bezier(.16,1,.3,1) infinite}
@keyframes cs-bob{0%,100%{transform:translateY(0)}50%{transform:translateY(5px)}}
@media (prefers-reduced-motion:reduce){.cs-cue i{animation:none}}
/* sequence engine — sticky frame + stepped list (laid out per case) */
.seq{position:relative;height:calc(100vh + (var(--steps) - 1)*68vh)}
.seq-sticky{position:sticky;top:0;height:100vh;display:grid;align-items:center;gap:clamp(24px,4vw,72px)}
.seq-frames{position:relative}
.seq-frames figure{position:absolute;inset:0;margin:0;overflow:hidden;opacity:0;transition:opacity .7s cubic-bezier(.16,1,.3,1)}
.seq-frames figure img{width:100%;height:100%;object-fit:cover;display:block;transform:scale(1.05);transition:transform 1.8s cubic-bezier(.16,1,.3,1)}
.seq-frames figure.on{opacity:1}
.seq-frames figure.on img{transform:scale(1)}
.seq-step{opacity:.34;transition:opacity .4s ease,color .4s ease}
.seq-step.on{opacity:1}
@media(max-width:1100px){.seq{height:auto}.seq-sticky{position:static;height:auto;display:block;padding:clamp(40px,7vw,70px) 0}.seq-frames{position:relative;height:auto}.seq-frames figure{position:relative;opacity:1;aspect-ratio:4/3;border-radius:12px;margin-bottom:14px}.seq-frames figure img{transform:none}.seq-step{opacity:1}}
