/* ═══════════════════════════════════════════════════════════
   ThunderCube Services — Strike System
   Tokens → Base → Primitives → Bands → Motion → Responsive
   ═══════════════════════════════════════════════════════════ */

/* ── 1. TOKENS ─────────────────────────────────────────── */
:root{
  /* colour */
  --ink:#0B0B0F;
  --ink-2:#141419;
  --ink-3:#2A2A31;
  --bone:#F4F2ED;
  --bone-2:#E7E4DC;
  --grey:#9A978F;
  --grey-d:#5C5A56;
  --voltage:#E8FE4A;
  --storm:#3C2FE8;

  /* semantic (light band default) */
  --bg:var(--bone);
  --fg:var(--ink);
  --fg-mute:var(--grey-d);
  --line:color-mix(in srgb, var(--ink) 14%, transparent);
  --line-soft:color-mix(in srgb, var(--ink) 8%, transparent);

  /* type */
  --f-display:"Bricolage Grotesque","Archivo",system-ui,sans-serif;
  --f-body:"Inter Tight",system-ui,-apple-system,sans-serif;
  --f-mono:"JetBrains Mono",ui-monospace,SFMono-Regular,monospace;

  --t-display:clamp(2.85rem,11.2vw,9.5rem);
  --t-h2:clamp(2.1rem,6.2vw,5rem);
  --t-h3:clamp(1.3rem,2.4vw,1.85rem);
  --t-lede:clamp(1.02rem,1.55vw,1.28rem);
  --t-body:clamp(.97rem,1.05vw,1.06rem);
  --t-mono:clamp(.66rem,.78vw,.75rem);

  /* space */
  --s1:4px; --s2:8px; --s3:12px; --s4:16px; --s5:24px;
  --s6:32px; --s7:48px; --s8:64px; --s9:96px; --s10:128px;
  --band:clamp(72px,11vw,180px);
  --gutter:clamp(20px,4.2vw,48px);
  --shell:1320px;

  /* shape */
  --r-sm:4px; --r-card:18px; --r-pill:999px;

  /* motion */
  --e-strike:cubic-bezier(.16,1,.3,1);
  --e-snap:cubic-bezier(.65,0,.35,1);
  --e-exit:cubic-bezier(.5,0,.9,.4);
  --d-quick:160ms; --d-ui:320ms; --d-slow:720ms;

  --nav-h:72px;
}

/* dark bands re-map the same semantics */
.is-dark{
  --bg:var(--ink);
  --fg:var(--bone);
  --fg-mute:var(--grey);
  --line:color-mix(in srgb, var(--bone) 16%, transparent);
  --line-soft:color-mix(in srgb, var(--bone) 8%, transparent);
  background:var(--bg);
  color:var(--fg);
}

/* ── 2. BASE ───────────────────────────────────────────── */
*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%;scroll-behavior:smooth}
@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}}

body{
  margin:0;
  background:var(--bone);
  color:var(--ink);
  font-family:var(--f-body);
  font-size:var(--t-body);
  line-height:1.55;
  letter-spacing:-.01em;
  -webkit-font-smoothing:antialiased;
  overflow-x:hidden;
}
body.is-locked{overflow:hidden}

h1,h2,h3{margin:0;font-family:var(--f-display);font-weight:800;letter-spacing:-.035em;line-height:.92}
p{margin:0}
ul,ol{margin:0;padding:0;list-style:none}
a{color:inherit;text-decoration:none}
img,svg,canvas{display:block;max-width:100%}
button{font:inherit;color:inherit;background:none;border:0;cursor:pointer}

:focus-visible{
  outline:3px solid var(--storm);
  outline-offset:3px;
  border-radius:var(--r-sm);
}
.is-dark :focus-visible{outline-color:var(--voltage)}

.shell{width:100%;max-width:var(--shell);margin-inline:auto;padding-inline:var(--gutter)}

.skip-link{
  position:fixed;top:10px;left:10px;z-index:200;
  transform:translateY(-200%);
  background:var(--ink);color:var(--voltage);
  padding:12px 18px;border-radius:var(--r-pill);font-weight:600;
  transition:transform var(--d-ui) var(--e-strike);
}
.skip-link:focus-visible{transform:translateY(0)}

.mono{
  font-family:var(--f-mono);font-size:var(--t-mono);
  text-transform:uppercase;letter-spacing:.18em;color:var(--fg-mute);
}

.eyebrow{
  display:flex;align-items:center;gap:10px;
  font-family:var(--f-mono);font-size:var(--t-mono);
  text-transform:uppercase;letter-spacing:.2em;color:var(--fg-mute);
  margin-bottom:var(--s5);
}
.pulse{
  width:7px;height:7px;border-radius:50%;background:var(--storm);
  box-shadow:0 0 0 0 color-mix(in srgb,var(--storm) 60%,transparent);
  animation:pulse 2.6s var(--e-strike) infinite;
}
@keyframes pulse{
  0%{box-shadow:0 0 0 0 color-mix(in srgb,var(--storm) 55%,transparent)}
  70%,100%{box-shadow:0 0 0 12px transparent}
}

/* grain */
.grain{
  position:fixed;inset:0;width:100%;height:100%;
  pointer-events:none;z-index:90;opacity:.035;mix-blend-mode:overlay;
}

/* ── 3. CURSOR ─────────────────────────────────────────── */
.cursor{position:fixed;top:0;left:0;z-index:150;pointer-events:none;display:none}
@media (hover:hover) and (pointer:fine){
  .cursor{display:block}
  body{cursor:none}
  a,button,.case,.svc__row{cursor:none}
}
.cursor__dot,.cursor__ring{position:absolute;top:0;left:0;border-radius:50%;translate:-50% -50%}
.cursor__dot{width:6px;height:6px;background:var(--storm)}
.cursor__ring{
  width:34px;height:34px;border:1px solid color-mix(in srgb,var(--ink) 35%,transparent);
  transition:width var(--d-ui) var(--e-strike),height var(--d-ui) var(--e-strike),
             background var(--d-ui) var(--e-strike),border-color var(--d-ui) var(--e-strike);
}
.cursor.on-dark .cursor__dot{background:var(--voltage)}
.cursor.on-dark .cursor__ring{border-color:color-mix(in srgb,var(--bone) 40%,transparent)}
.cursor.is-hot .cursor__ring{
  width:58px;height:58px;
  background:color-mix(in srgb,var(--storm) 12%,transparent);
  border-color:var(--storm);
}
.cursor.on-dark.is-hot .cursor__ring{
  background:color-mix(in srgb,var(--voltage) 14%,transparent);
  border-color:var(--voltage);
}

/* ── 4. BOOT ───────────────────────────────────────────── */
.boot{position:fixed;inset:0;z-index:180;display:grid;place-items:center;pointer-events:none}
.boot__panel{position:absolute;inset:0;background:var(--ink);z-index:-1}
.boot__mark{position:relative;z-index:1}
.boot__bolt{stroke-dasharray:190;stroke-dashoffset:190}
.boot.is-done{display:none}

/* ── 5. NAV ────────────────────────────────────────────── */
.nav{
  position:fixed;inset-inline:0;top:0;z-index:120;
  height:var(--nav-h);display:flex;align-items:center;
  transition:background var(--d-ui) var(--e-strike),
             border-color var(--d-ui) var(--e-strike),
             transform var(--d-ui) var(--e-strike);
  border-bottom:1px solid transparent;
}
.nav.is-stuck{
  background:color-mix(in srgb,var(--bone) 86%,transparent);
  backdrop-filter:blur(14px) saturate(1.2);
  border-bottom-color:var(--line-soft);
}
.nav.is-stuck.on-dark{
  background:color-mix(in srgb,var(--ink) 82%,transparent);
  border-bottom-color:color-mix(in srgb,var(--bone) 12%,transparent);
}
.nav.is-hidden{transform:translateY(-102%)}
.nav.on-dark{color:var(--bone)}
.nav__inner{display:flex;align-items:center;gap:var(--s6);width:100%}

.logo{display:inline-flex;align-items:center;gap:10px;font-family:var(--f-display);font-weight:800;letter-spacing:-.04em;font-size:1.06rem}
.logo__mark{color:var(--storm);transition:transform var(--d-ui) var(--e-strike),color var(--d-ui) var(--e-strike)}
.nav.on-dark .logo__mark,.foot .logo__mark{color:var(--voltage)}
.logo:hover .logo__mark{transform:rotate(-12deg) scale(1.1)}
.logo__word em{font-style:normal;color:var(--fg-mute)}
.nav.on-dark .logo__word em{color:var(--grey)}

.nav__links{display:flex;gap:var(--s6);margin-left:auto;font-size:.92rem;font-weight:500}
.nav__links a{position:relative;padding:4px 0}
.nav__links a::after{
  content:"";position:absolute;left:0;right:0;bottom:0;height:2px;
  background:var(--storm);transform:scaleX(0);transform-origin:left;
  transition:transform var(--d-quick) var(--e-snap);
}
.nav.on-dark .nav__links a::after{background:var(--voltage)}
.nav__links a:hover::after,.nav__links a:focus-visible::after{transform:scaleX(1)}

.burger{display:none;width:44px;height:44px;margin-left:auto;position:relative}
.burger span{
  position:absolute;left:11px;width:22px;height:2px;background:currentColor;
  transition:transform var(--d-ui) var(--e-strike),opacity var(--d-quick) linear;
}
.burger span:nth-child(1){top:19px}
.burger span:nth-child(2){top:25px}
.burger[aria-expanded="true"] span:nth-child(1){transform:translateY(3px) rotate(45deg)}
.burger[aria-expanded="true"] span:nth-child(2){transform:translateY(-3px) rotate(-45deg)}

.mobile-menu{
  position:fixed;inset:0;z-index:115;background:var(--ink);color:var(--bone);
  display:flex;flex-direction:column;justify-content:center;gap:var(--s6);
  padding:var(--nav-h) var(--gutter) var(--s8);
}
.mobile-menu[hidden]{display:none}
.mobile-menu nav{display:flex;flex-direction:column;gap:var(--s4)}
.mobile-menu a{
  display:flex;align-items:baseline;gap:var(--s4);
  font-family:var(--f-display);font-weight:800;letter-spacing:-.04em;
  font-size:clamp(2rem,10vw,3.2rem);line-height:1;
  padding-block:6px;border-bottom:1px solid color-mix(in srgb,var(--bone) 12%,transparent);
}
.mobile-menu a i{font-family:var(--f-mono);font-style:normal;font-size:.7rem;letter-spacing:.2em;color:var(--voltage)}
/* Needs to out-specify `.mobile-menu a`, which sets the display size. */
.mobile-menu a.mobile-menu__mail{
  display:block;font-family:var(--f-mono);font-size:.8rem;font-weight:500;
  letter-spacing:.14em;line-height:1.4;color:var(--grey);border-bottom:0;padding-block:0;
}

/* The bar floats above the open menu, so it has to invert with it. */
.nav.is-menu-open{color:var(--bone)}
.nav.is-menu-open .logo__mark{color:var(--voltage)}
.nav.is-menu-open .logo__word em{color:var(--grey)}

/* ── 6. BUTTONS & LINKS ────────────────────────────────── */
.btn{
  position:relative;display:inline-flex;align-items:center;gap:10px;
  padding:14px 24px;border-radius:var(--r-pill);
  font-weight:600;font-size:.94rem;letter-spacing:-.01em;
  border:1px solid var(--line);
  overflow:hidden;isolation:isolate;
  transition:color var(--d-ui) var(--e-strike),border-color var(--d-ui) var(--e-strike),
             transform var(--d-quick) var(--e-snap);
}
.btn::before{
  content:"";position:absolute;inset:0;z-index:-1;
  background:var(--ink);
  transform:translateY(101%);
  transition:transform var(--d-ui) var(--e-strike);
}
.btn:hover::before,.btn:focus-visible::before{transform:translateY(0)}
.btn:active{transform:scale(.97)}
.btn svg{transition:transform var(--d-ui) var(--e-strike)}
.btn:hover svg{transform:translate(3px,-3px)}

.btn--sm{padding:10px 18px;font-size:.86rem}
.btn--lg{padding:20px 34px;font-size:clamp(1rem,1.9vw,1.35rem)}

.btn--accent{background:var(--ink);color:var(--bone);border-color:var(--ink)}
.btn--accent::before{background:var(--voltage)}
.btn--accent:hover,.btn--accent:focus-visible{color:var(--ink)}

.btn--ghost{color:var(--fg)}
.btn--ghost::before{background:var(--ink)}
.btn--ghost:hover,.btn--ghost:focus-visible{color:var(--bone);border-color:var(--ink)}

.is-dark .btn{border-color:var(--line)}
.is-dark .btn--accent{background:var(--voltage);color:var(--ink);border-color:var(--voltage)}
.is-dark .btn--accent::before{background:var(--bone)}
.is-dark .btn--accent:hover,.is-dark .btn--accent:focus-visible{color:var(--ink)}

.link-arrow{
  display:inline-flex;align-items:center;gap:8px;
  font-weight:500;font-size:.94rem;
  padding-bottom:3px;border-bottom:1px solid var(--line);
  transition:border-color var(--d-ui) var(--e-strike),gap var(--d-ui) var(--e-strike);
}
.link-arrow:hover{border-bottom-color:currentColor;gap:14px}

/* ── 7. BAND HEADS ─────────────────────────────────────── */
.band-head{max-width:76ch;margin-bottom:clamp(40px,6vw,88px)}
.band-head--split{
  display:grid;gap:var(--s5);max-width:none;
  grid-template-columns:minmax(0,1.35fr) minmax(0,.65fr);
  align-items:end;
}
.band-title{font-size:var(--t-h2)}
.band-title span{color:var(--fg-mute)}
.band-sub{margin-top:var(--s5);font-size:var(--t-lede);color:var(--fg-mute);max-width:46ch}
.band-head--split .band-sub{margin-top:0;padding-bottom:6px}

/* ── 8. HERO ───────────────────────────────────────────── */
.hero{
  position:relative;min-height:100svh;
  display:flex;align-items:flex-end;
  padding-top:calc(var(--nav-h) + var(--s8));
  padding-bottom:clamp(48px,7vw,96px);
  overflow:hidden;
}
.hero__canvas{
  position:absolute;inset:0;width:100%;height:100%;
  z-index:0;opacity:0;pointer-events:none;
  /* The mark lives in the right margin — dissolve it before it reaches
     the text column so the headline never fights a wireframe. */
  -webkit-mask-image:linear-gradient(90deg,transparent 30%,#000 66%);
  mask-image:linear-gradient(90deg,transparent 30%,#000 66%);
}
/* Static mark: only below the WebGL breakpoint, where cube.js bails out. */
.hero__mark{display:none}
@media (max-width:860px){
  .hero__canvas{display:none}
  .hero__mark{
    display:block;position:absolute;z-index:1;pointer-events:none;
    top:calc(var(--nav-h) + 3vh);right:calc(var(--gutter) - 8px);
    /* Kept small enough to clear the eyebrow line below it. */
    width:min(34vw,170px);height:auto;color:var(--ink);
  }
}
.hero__inner{position:relative;z-index:2;width:100%}

.hero__title{
  font-size:var(--t-display);
  line-height:.88;
  margin-bottom:clamp(32px,5vw,64px);
  text-wrap:balance;
}
/* z-index:0 gives em its own stacking context so the -1 strike sits
   behind the glyphs instead of falling through to the section. */
.hero__title em{font-style:normal;position:relative;z-index:0;color:var(--storm)}
/* Anchored from the top, not the bottom: the .line mask clips anything
   below the 0.88 line box, and the glyph box overflows it. */
.hero__title em::after{
  content:"";position:absolute;left:-.03em;right:-.03em;top:.76em;height:.13em;
  background:var(--voltage);z-index:-1;
  transform:scaleX(0);transform-origin:left;
  transition:transform 640ms var(--e-strike);
}
.hero__title em.is-struck::after{transform:scaleX(1)}
/* No-JS / reduced-motion: the strike is simply already there. */
html:not(.js) .hero__title em::after{transform:scaleX(1)}

.line{display:block;overflow:hidden}
.line__in{display:block;will-change:transform}

.hero__foot{
  display:grid;gap:var(--s6);
  grid-template-columns:minmax(0,1fr) auto;
  align-items:end;
  padding-top:var(--s6);border-top:1px solid var(--line);
}
.hero__lede{font-size:var(--t-lede);color:var(--fg-mute);max-width:52ch}
.hero__lede strong{color:var(--fg);font-weight:600}
.hero__cta{display:flex;gap:var(--s3);flex-wrap:wrap}

.scroll-hint{
  position:absolute;right:var(--gutter);bottom:clamp(48px,7vw,96px);z-index:2;
  display:flex;flex-direction:column;align-items:center;gap:10px;
  font-family:var(--f-mono);font-size:.62rem;letter-spacing:.24em;
  text-transform:uppercase;color:var(--fg-mute);
}
.scroll-hint i{display:block;width:1px;height:52px;background:var(--line);position:relative;overflow:hidden}
.scroll-hint i::after{
  content:"";position:absolute;inset-inline:0;height:16px;background:var(--storm);
  animation:trickle 2.2s var(--e-strike) infinite;
}
@keyframes trickle{0%{top:-16px}100%{top:52px}}

/* ── 9. TRUST / MARQUEE ────────────────────────────────── */
.trust{padding-block:clamp(40px,5vw,72px);border-block:1px solid var(--line)}
.trust__meta{display:flex;align-items:center;gap:var(--s4);margin-bottom:var(--s6)}
.trust__meta .rule{flex:1;height:1px;background:var(--line)}

.marquee{overflow:hidden;width:100%;-webkit-mask-image:linear-gradient(90deg,transparent,#000 8%,#000 92%,transparent);mask-image:linear-gradient(90deg,transparent,#000 8%,#000 92%,transparent)}
.marquee__track{display:flex;align-items:center;gap:clamp(24px,3.4vw,52px);width:max-content;will-change:transform}
.marquee__item{
  font-family:var(--f-display);font-weight:600;
  font-size:clamp(1.25rem,3.2vw,2.4rem);letter-spacing:-.035em;
  color:var(--fg-mute);white-space:nowrap;
  transition:color var(--d-ui) var(--e-strike);
}
.marquee__item:hover{color:var(--fg)}
.marquee .dot{width:6px;height:6px;border-radius:50%;background:var(--voltage);flex:none}

/* ── 10. PROCESS RAIL ──────────────────────────────────── */
.process{padding-block:var(--band) 0;background:var(--bone)}
.rail{padding-bottom:var(--band)}
.rail__grid{
  display:grid;gap:clamp(32px,5vw,72px);
  grid-template-columns:minmax(0,1fr) minmax(0,300px);
  align-items:start;position:relative;
}
.rail__progress{
  position:absolute;left:calc(var(--gutter) - 1px);top:0;bottom:0;width:2px;
  background:var(--line-soft);
}
/* Full height, scaled from 0 — see main.js. transform, not layout. */
.rail__progress i{display:block;width:100%;height:100%;background:var(--storm);transform:scaleY(0);transform-origin:top;will-change:transform}

.steps{display:flex;flex-direction:column;gap:clamp(24px,4vw,56px);padding-left:clamp(28px,4vw,56px)}
/* Staging is done with colour and a rule, never by dimming the whole step.
   Fading muted body copy to 34% measured 1.66:1 — unreadable. Text stays at
   full opacity; "active" is carried by the numeral, heading and edge rule. */
.step{
  position:relative;
  display:grid;grid-template-columns:auto minmax(0,1fr);gap:clamp(18px,3vw,40px);
  padding-block:clamp(20px,3vw,34px);padding-left:clamp(14px,2vw,26px);
  border-top:1px solid var(--line);
}
.step::before{
  content:"";position:absolute;left:0;top:-1px;bottom:0;width:2px;
  background:var(--storm);transform:scaleY(0);transform-origin:top;
  transition:transform var(--d-slow) var(--e-strike);
}
.step.is-active::before{transform:scaleY(1)}

.step__num{
  font-family:var(--f-mono);font-size:clamp(.8rem,1.1vw,.95rem);
  letter-spacing:.12em;color:var(--fg-mute);padding-top:.5em;
  transition:color var(--d-ui) var(--e-strike);
}
.step.is-active .step__num{color:var(--storm)}

.step h3{
  font-size:var(--t-h3);margin-bottom:var(--s3);color:var(--fg-mute);
  transition:color var(--d-ui) var(--e-strike);
}
.step.is-active h3{color:var(--fg)}
.step p{color:var(--fg-mute);max-width:52ch}
.step__tags{display:flex;flex-wrap:wrap;gap:var(--s2);margin-top:var(--s4)}
.step__tags li{
  font-family:var(--f-mono);font-size:.62rem;text-transform:uppercase;letter-spacing:.14em;
  padding:6px 11px;border:1px solid var(--line);border-radius:var(--r-pill);color:var(--fg-mute);
}

.rail__aside{position:sticky;top:calc(var(--nav-h) + var(--s6))}
.rail__card{
  border:1px solid var(--line);border-radius:var(--r-card);
  padding:var(--s6);background:color-mix(in srgb,var(--bone-2) 55%,transparent);
}
.rail__big{
  font-family:var(--f-display);font-weight:800;letter-spacing:-.05em;
  font-size:clamp(3.6rem,7vw,5.4rem);line-height:.85;margin-block:var(--s4) var(--s2);
}
.rail__label{font-size:1.02rem;font-weight:600;color:var(--fg-mute)}
.rail__ticks{display:flex;gap:6px;margin-top:var(--s5)}
.rail__ticks i{flex:1;height:3px;background:var(--line);transition:background var(--d-ui) var(--e-strike)}
.rail__ticks i.on{background:var(--storm)}

/* ── 11. SERVICES (dark) ───────────────────────────────── */
.services{
  --bg:var(--ink);--fg:var(--bone);--fg-mute:var(--grey);
  --line:color-mix(in srgb,#F4F2ED 16%,transparent);
  --line-soft:color-mix(in srgb,#F4F2ED 8%,transparent);
  background:var(--ink);color:var(--bone);
  padding-block:var(--band);
}
.services .btn{border-color:var(--line)}

.svc{border-top:1px solid var(--line)}
.svc__row{
  position:relative;isolation:isolate;
  display:grid;align-items:start;
  grid-template-columns:auto minmax(0,.9fr) minmax(0,1.1fr) auto;
  gap:clamp(16px,3vw,40px);
  padding:clamp(26px,3.4vw,44px) clamp(14px,2vw,28px);
  border-bottom:1px solid var(--line);
  transition:color var(--d-ui) var(--e-strike);
}
.svc__row::before{
  content:"";position:absolute;inset:0;z-index:-1;background:var(--voltage);
  transform:scaleX(0);transform-origin:left;
  transition:transform 420ms var(--e-strike);
}
.svc__row:hover,.svc__row:focus-within{color:var(--ink)}
.svc__row:hover::before,.svc__row:focus-within::before{transform:scaleX(1)}

.svc__idx{padding-top:.75em;transition:color var(--d-ui) var(--e-strike)}
.svc__row:hover .svc__idx{color:color-mix(in srgb,var(--ink) 60%,transparent)}
.svc__name{font-size:clamp(1.55rem,3.4vw,2.9rem);letter-spacing:-.04em}
.svc__desc{color:var(--fg-mute);max-width:48ch;padding-top:.35em;transition:color var(--d-ui) var(--e-strike)}
.svc__row:hover .svc__desc,.svc__row:focus-within .svc__desc{color:color-mix(in srgb,var(--ink) 72%,transparent)}
.svc__arrow{align-self:center;transition:transform 420ms var(--e-strike)}
.svc__row:hover .svc__arrow{transform:translate(6px,-6px)}
.svc__detail{grid-column:2/-1}
.svc__detail ul{display:flex;flex-wrap:wrap;gap:var(--s2);margin-top:var(--s4)}
.svc__detail li{
  font-family:var(--f-mono);font-size:.62rem;text-transform:uppercase;letter-spacing:.14em;
  padding:6px 11px;border:1px solid currentColor;border-radius:var(--r-pill);opacity:.62;
}

.stats{
  display:grid;grid-template-columns:repeat(4,minmax(0,1fr));
  gap:var(--s5);margin-top:clamp(48px,6vw,96px);
}
.stat b{
  display:block;font-family:var(--f-display);font-weight:800;letter-spacing:-.05em;
  font-size:clamp(2.4rem,5.4vw,4rem);line-height:.9;color:var(--voltage);
  font-variant-numeric:tabular-nums;
}
.stat span{display:block;margin-top:var(--s3);font-size:.9rem;color:var(--fg-mute)}

/* ── 12. WORK ──────────────────────────────────────────── */
.work{padding-block:var(--band);background:var(--bone)}
.work__grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:clamp(18px,2.6vw,36px)}
.work__col{display:flex;flex-direction:column;gap:clamp(18px,2.6vw,36px);will-change:transform}
.work__col[data-col="b"]{padding-top:clamp(0px,6vw,96px)}

.case{display:block}
.case__frame{
  position:relative;aspect-ratio:4/3;overflow:hidden;border-radius:var(--r-card);
  display:grid;place-items:center;
  transition:transform 520ms var(--e-strike);
}
.case__frame::after{
  content:"";position:absolute;inset:0;
  background:linear-gradient(140deg,transparent 40%,color-mix(in srgb,var(--ink) 40%,transparent));
  opacity:0;transition:opacity var(--d-slow) var(--e-strike);
}
.case:hover .case__frame{transform:scale(1.02)}
.case:hover .case__frame::after{opacity:1}

.case__glyph{
  font-family:var(--f-display);font-weight:800;letter-spacing:-.06em;
  font-size:clamp(3.5rem,9vw,7rem);line-height:1;
  color:color-mix(in srgb,#0B0B0F 22%,transparent);
  transition:transform 620ms var(--e-strike);
}
.case:hover .case__glyph{transform:scale(1.08) rotate(-3deg)}

.case__frame[data-swatch="a"]{background:linear-gradient(150deg,#E8FE4A,#C9DE2E)}
.case__frame[data-swatch="b"]{background:linear-gradient(150deg,#2A2A31,#0B0B0F)}
.case__frame[data-swatch="c"]{background:linear-gradient(150deg,#3C2FE8,#2418A8)}
.case__frame[data-swatch="d"]{background:linear-gradient(150deg,#E7E4DC,#C6C2B6)}
.case__frame[data-swatch="e"]{background:linear-gradient(150deg,#0B0B0F,#3C2FE8)}
.case__frame[data-swatch="f"]{background:linear-gradient(150deg,#F4F2ED,#E8FE4A)}
.case__frame[data-swatch="b"] .case__glyph,
.case__frame[data-swatch="c"] .case__glyph,
.case__frame[data-swatch="e"] .case__glyph{color:color-mix(in srgb,#F4F2ED 26%,transparent)}

.case__meta{padding-top:var(--s4);display:flex;flex-direction:column;gap:6px}
.case__meta h3{font-size:clamp(1.1rem,1.9vw,1.5rem)}
.case__meta p{color:var(--fg-mute);font-size:.94rem}
.case__meta .mono{margin-top:4px;color:var(--fg)}

/* ── 13. VOICES ────────────────────────────────────────── */
.voices{padding-block:var(--band);background:var(--bone-2);border-block:1px solid var(--line)}
.voices__stage{position:relative;min-height:clamp(230px,26vw,300px)}
.quote{
  position:absolute;inset:0;margin:0;
  display:flex;flex-direction:column;justify-content:center;gap:var(--s6);
  opacity:0;visibility:hidden;
}
.quote.is-active{opacity:1;visibility:visible;position:relative}
.quote p{
  font-family:var(--f-display);font-weight:600;letter-spacing:-.035em;
  font-size:clamp(1.45rem,3.6vw,2.9rem);line-height:1.1;
  max-width:24ch;text-wrap:balance;
}
.quote p::before{content:"\201C"}
.quote p::after{content:"\201D"}
.quote footer{display:flex;flex-direction:column;gap:2px}
.quote footer b{font-weight:600;font-size:1rem}
.quote footer span{font-family:var(--f-mono);font-size:var(--t-mono);text-transform:uppercase;letter-spacing:.16em;color:var(--fg-mute)}

.voices__nav{display:flex;gap:10px;margin-top:var(--s7)}
.vdot{
  width:44px;height:44px;display:grid;place-items:center;border-radius:50%;
}
.vdot::after{
  content:"";width:10px;height:10px;border-radius:50%;
  border:1px solid var(--ink);
  transition:background var(--d-ui) var(--e-strike),transform var(--d-ui) var(--e-strike);
}
.vdot.is-active::after{background:var(--storm);border-color:var(--storm);transform:scale(1.25)}

/* ── 14. CTA ───────────────────────────────────────────── */
.cta{
  --fg-mute:var(--grey);
  --line:color-mix(in srgb,#F4F2ED 16%,transparent);
  background:var(--ink);color:var(--bone);
  padding-block:clamp(88px,13vw,200px);
  position:relative;overflow:hidden;
}
.cta::before{
  content:"";position:absolute;inset:-20% 40% -20% -20%;
  background:radial-gradient(60% 60% at 30% 50%,color-mix(in srgb,var(--storm) 34%,transparent),transparent 70%);
  pointer-events:none;
}
.cta__inner{position:relative;max-width:920px}
.cta__title{font-size:var(--t-h2);margin-bottom:var(--s5)}
.cta__title span{color:var(--voltage)}
.cta__sub{font-size:var(--t-lede);color:var(--grey);max-width:48ch;margin-bottom:var(--s7)}
.cta .btn--accent{background:var(--voltage);color:var(--ink);border-color:var(--voltage)}
.cta .btn--accent::before{background:var(--bone)}

.cta__facts{
  display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--s5);
  margin-top:clamp(48px,7vw,96px);padding-top:var(--s6);
  border-top:1px solid var(--line);
}
.cta__facts b{display:block;font-weight:600;font-size:.94rem}
.cta__facts span{display:block;margin-top:4px;font-family:var(--f-mono);font-size:var(--t-mono);text-transform:uppercase;letter-spacing:.14em;color:var(--grey)}

/* ── 15. FOOTER ────────────────────────────────────────── */
.foot{background:var(--ink);color:var(--bone);padding-block:var(--s8) var(--s6)}
.foot__inner{display:grid;gap:var(--s6)}
.foot__brand p{margin-top:var(--s3);color:var(--grey);font-family:var(--f-mono);font-size:var(--t-mono);text-transform:uppercase;letter-spacing:.18em}
.foot .logo__word em{color:var(--grey)}
.foot__nav{display:flex;flex-wrap:wrap;gap:var(--s5);font-size:.92rem}
.foot__nav a{color:var(--grey);transition:color var(--d-quick) var(--e-strike)}
.foot__nav a:hover{color:var(--voltage)}
.foot__legal{
  display:flex;flex-wrap:wrap;justify-content:space-between;gap:var(--s3);
  padding-top:var(--s5);border-top:1px solid color-mix(in srgb,#F4F2ED 12%,transparent);
  font-family:var(--f-mono);font-size:var(--t-mono);text-transform:uppercase;letter-spacing:.16em;color:var(--grey);
}

/* ── 16. REVEAL PRIMITIVES ─────────────────────────────── */
/* Hidden only until JS has measured and wrapped the lines; the splitter
   sets inline opacity:1 on the heading and masks the lines instead. */
.js .reveal-fade,
.js .reveal-lines{opacity:0}
/* No will-change here: there are dozens of words, and each masked line is
   already promoted via .rl-line__in. Promoting every word wastes memory. */

/* ── 17. RESPONSIVE ────────────────────────────────────── */
@media (max-width:1080px){
  .rail__grid{grid-template-columns:minmax(0,1fr)}
  .rail__aside{display:none}
  .svc__row{grid-template-columns:auto minmax(0,1fr) auto;}
  .svc__desc{grid-column:2/3}
  .svc__name{grid-column:2/3}
  .svc__detail{grid-column:2/-1}
}
/* Below this the hint collides with the hero CTAs — it is decorative, so it goes. */
@media (max-width:1220px){ .scroll-hint{display:none} }

@media (max-width:860px){
  :root{--nav-h:64px}
  .nav__links,.nav__cta{display:none}
  .burger{display:block}
  .band-head--split{grid-template-columns:minmax(0,1fr)}
  .hero__foot{grid-template-columns:minmax(0,1fr);gap:var(--s5)}
  .scroll-hint{display:none}
  .stats{grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--s6)}
  .work__grid{grid-template-columns:minmax(0,1fr)}
  .work__col[data-col="b"]{padding-top:0}
  .cta__facts{grid-template-columns:minmax(0,1fr)}
  .foot__legal{flex-direction:column}
}
@media (max-width:560px){
  .svc__row{grid-template-columns:minmax(0,1fr) auto;gap:var(--s3)}
  .svc__idx{grid-column:1/-1;padding-top:0}
  .svc__name,.svc__desc,.svc__detail{grid-column:1/2}
  .svc__arrow{grid-row:2;grid-column:2;align-self:start}
  .step{grid-template-columns:minmax(0,1fr);gap:var(--s3)}
  /* Side-by-side pills wrap their labels at this width — stack instead. */
  .hero__cta{flex-direction:column;align-items:stretch}
  .hero__cta .btn{justify-content:center}
}

/* ── 18. REDUCED MOTION ────────────────────────────────── */
@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{
    animation-duration:.001ms !important;
    animation-iteration-count:1 !important;
    transition-duration:.001ms !important;
  }
  .js .reveal-fade,.js .reveal-lines{opacity:1 !important;transform:none !important}
  .hero__title em::after{transform:scaleX(1) !important}
  .step::before{transform:scaleY(1)}
  .quote{position:relative;opacity:1;visibility:visible;margin-bottom:var(--s7)}
  .voices__nav{display:none}
  .boot{display:none}
  .hero__canvas{opacity:.9}
  .grain{display:none}
}

/* ── 19. PRINT ─────────────────────────────────────────── */
@media print{
  .nav,.cursor,.grain,.boot,.scroll-hint,.hero__canvas,.mobile-menu{display:none !important}
  body{background:#fff;color:#000}
  .services,.cta,.foot{background:#fff !important;color:#000 !important}
}
