/* ==========================================================================
   CE Digital — v2  ·  "THE FEED IS THE GRID"

   Art direction: industrial-editorial. Near-black ground, one acid accent,
   violent light/dark contrast. The page is constructed out of the agency's
   own ad inventory — vertical 9:16 columns are the structural unit, not just
   a component. Type is set enormous and tight; metadata is set in mono.

   Four voices:
     Bricolage Grotesque  display   heavy, tight, ink traps
     Instrument Serif     accent    italic counterpoint on key phrases
     Geist                body
     Geist Mono           metadata  labels, stats, numerals, ad chrome
   ========================================================================== */

*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}

:root{
  /* ---- ground: pushed much darker than v1 for real contrast ---- */
  --void:#04050f;
  --ink:#07091a;
  --ink-2:#0c0f24;
  --ink-3:#141833;
  --ink-4:#1e2340;

  /* ---- paper ---- */
  --paper:#f2f0e9;
  --paper-2:#e3e0d5;
  --paper-line:rgba(7,9,26,.14);
  --paper-ink:#07091a;
  --paper-mute:#5a5b6b;

  /* ---- accent ---- */
  --signal:#e3f000;
  --signal-deep:#b9c400;

  /* ---- AdCrush co-brand ---- */
  --crush:#7018e0;
  --crush-lift:#b583ff;

  /* ---- type on dark ---- */
  --text:#f4f4fb;
  --text-2:#9ea1bb;
  --text-3:#6b6e8a;
  --hair:rgba(244,244,251,.13);
  --hair-2:rgba(244,244,251,.07);

  /* ---- families ---- */
  --display:'Bricolage Grotesque','Helvetica Neue',sans-serif;
  --serif:'Instrument Serif',Georgia,serif;
  --body:'Geist','Helvetica Neue',sans-serif;
  --mono:'Geist Mono',ui-monospace,monospace;

  /* ---- measure ---- */
  --rail:clamp(0px,4.6vw,66px);      /* left index rail */
  --pad:clamp(20px,4.2vw,58px);
  --sect:clamp(80px,10vw,150px);
  --maxw:1560px;
}

html{-webkit-text-size-adjust:100%;scroll-behavior:smooth}
body{
  background:var(--void);color:var(--text);
  font-family:var(--body);font-weight:400;line-height:1.55;
  overflow-x:hidden;-webkit-font-smoothing:antialiased;
  font-size:16px;
}

/* ---- display: set big, tight, and uppercase for the loud moments ---- */
.d,h1,h2{
  font-family:var(--display);
  font-variation-settings:'wght' 800,'wdth' 100,'opsz' 96;
  letter-spacing:-.035em;line-height:.9;text-transform:uppercase;
  text-wrap:balance;
}
h3,h4{
  font-family:var(--display);
  font-variation-settings:'wght' 700,'wdth' 100,'opsz' 24;
  letter-spacing:-.02em;line-height:1.06;
}
h1{font-size:clamp(34px,6.6vw,92px)}
h2{font-size:clamp(32px,5.6vw,76px)}
h3{font-size:clamp(19px,1.7vw,25px)}

/* The counterpoint voice. Used sparingly — one phrase per section at most.
   Set slightly smaller than its display sibling: an italic serif at the same
   point size optically reads larger and starts competing instead of answering. */
em.s,.serif{
  font-family:var(--serif);font-style:italic;font-weight:400;
  text-transform:none;letter-spacing:-.01em;
}
h2 em.s{font-size:.94em;line-height:1.02}

/* Mono carries every piece of metadata on the site. */
.m{
  font-family:var(--mono);font-size:11px;font-weight:500;
  letter-spacing:.14em;text-transform:uppercase;
  font-variant-numeric:tabular-nums;
}
.m-lo{font-family:var(--mono);font-size:12px;letter-spacing:.02em;text-transform:none}

p{font-size:clamp(15px,1.05vw,17px);color:var(--text-2);line-height:1.68;max-width:62ch}
p strong,p b{color:var(--text);font-weight:500}
img,video{display:block;max-width:100%}
a{color:inherit;text-decoration:none}
::selection{background:var(--signal);color:var(--void)}
:focus-visible{outline:2px solid var(--signal);outline-offset:3px}

/* ==========================================================================
   ATMOSPHERE — grain + mesh. No image weight; both are generated.
   ========================================================================== */
body::after{
  content:'';position:fixed;inset:0;z-index:9999;pointer-events:none;
  opacity:.038;mix-blend-mode:overlay;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='180' height='180'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='3'/%3E%3C/filter%3E%3Crect width='180' height='180' filter='url(%23n)'/%3E%3C/svg%3E");
}
.mesh{position:absolute;inset:0;z-index:0;pointer-events:none;overflow:hidden}
.mesh::before,.mesh::after{content:'';position:absolute;border-radius:50%;filter:blur(90px)}
.mesh::before{
  width:56vw;height:56vw;top:-22%;right:-14%;
  background:radial-gradient(circle,rgba(227,240,0,.11),transparent 66%);
}
.mesh::after{
  width:48vw;height:48vw;bottom:-26%;left:-16%;
  background:radial-gradient(circle,rgba(60,80,220,.16),transparent 66%);
}

/* Technical grid — a real ruled plane, not a faint dot field. */
.ruled{position:relative;isolation:isolate}
.ruled::before{
  content:'';position:absolute;inset:0;z-index:-1;pointer-events:none;
  background-image:
    linear-gradient(to right,var(--hair-2) 1px,transparent 1px),
    linear-gradient(to bottom,var(--hair-2) 1px,transparent 1px);
  background-size:clamp(60px,7vw,104px) clamp(60px,7vw,104px);
  mask-image:radial-gradient(ellipse 120% 90% at 30% 20%,#000 10%,transparent 76%);
}

/* ==========================================================================
   LEFT INDEX RAIL — persistent, editorial, carries scroll progress
   ========================================================================== */
#rail{
  position:fixed;top:0;left:0;bottom:0;width:var(--rail);z-index:400;
  display:flex;flex-direction:column;align-items:center;justify-content:space-between;
  padding:96px 0 24px;border-right:1px solid var(--hair-2);
  background:linear-gradient(to right,rgba(4,5,15,.7),transparent);
  backdrop-filter:blur(2px);pointer-events:none;
}
#rail .tick{
  font-family:var(--mono);font-size:9.5px;letter-spacing:.2em;
  color:var(--text-3);writing-mode:vertical-rl;text-orientation:mixed;
  text-transform:uppercase;
}
#rail .bar{position:relative;flex:1;width:1px;background:var(--hair-2);margin:20px 0}
#rail .bar span{
  position:absolute;top:0;left:-1px;width:3px;background:var(--signal);
  height:var(--p,0%);transition:height .12s linear;
}
@media (max-width:1080px){ #rail{display:none} :root{--rail:0px} }

/* ==========================================================================
   NAV
   ========================================================================== */
#nav{
  position:fixed;top:0;left:0;right:0;z-index:500;
  display:flex;align-items:center;justify-content:space-between;gap:20px;
  padding:22px var(--pad) 22px calc(var(--rail) + var(--pad));
  transition:background .4s,border-color .4s,padding .4s;
  border-bottom:1px solid transparent;
}
#nav.stuck{
  background:rgba(4,5,15,.86);backdrop-filter:blur(16px) saturate(1.4);
  border-bottom-color:var(--hair-2);padding-top:13px;padding-bottom:13px;
}
.nav-logo img{height:27px;width:auto}
.nav-links{display:flex;align-items:center;gap:clamp(12px,1.7vw,30px)}
.nav-links a{
  font-family:var(--mono);font-size:10.5px;font-weight:500;
  letter-spacing:.16em;text-transform:uppercase;color:var(--text-2);
  transition:color .2s;white-space:nowrap;position:relative;padding:4px 0;
}
.nav-links a::after{
  content:'';position:absolute;left:0;right:100%;bottom:0;height:1px;
  background:var(--signal);transition:right .3s cubic-bezier(.2,.7,.3,1);
}
.nav-links a:hover{color:var(--text)}
.nav-links a:hover::after{right:0}
.nav-links a.cta,.nav-links a.cta:hover{color:var(--void)}
.nav-links a.cta::after{display:none}
/* `.nav-links a` (0,1,1) sets `padding:4px 0` and out-specifies `.btn-sm`
   (0,1,0), which left the nav CTA with zero horizontal padding — the text sat
   flush against both edges. Restate it at matching specificity. */
.nav-links a.btn{padding:12px 22px;padding-right:calc(22px + .15em)}
.nav-toggle{display:none;background:none;border:0;color:var(--text);cursor:pointer;padding:8px}
.nav-toggle svg{width:23px;height:23px;stroke:currentColor;stroke-width:1.6;fill:none}

/* ==========================================================================
   BUTTONS
   ========================================================================== */
.btn{
  display:inline-flex;align-items:center;justify-content:center;gap:10px;
  font-family:var(--mono);font-size:11.5px;font-weight:600;
  letter-spacing:.15em;text-transform:uppercase;
  padding:16px 28px;padding-right:calc(28px + .15em);border:1px solid transparent;cursor:pointer;
  transition:background .24s,color .24s,border-color .24s,transform .24s,box-shadow .24s;
  white-space:nowrap;position:relative;overflow:hidden;
}
.btn-fill{background:var(--signal);color:var(--void)}
.btn-fill:hover{transform:translateY(-2px);box-shadow:0 12px 30px rgba(227,240,0,.24)}
.btn-line{background:transparent;color:var(--text);border-color:var(--hair)}
.btn-line:hover{border-color:var(--signal);color:var(--signal)}
.btn-dark{background:var(--paper-ink);color:var(--paper)}
.btn-dark:hover{transform:translateY(-2px)}
.btn-sm{padding:12px 22px;padding-right:calc(22px + .15em);font-size:10.5px}
.lnk{
  display:inline-flex;align-items:center;gap:9px;
  font-family:var(--mono);font-size:11px;font-weight:600;
  letter-spacing:.15em;text-transform:uppercase;color:var(--signal);
  transition:gap .25s;padding-bottom:3px;border-bottom:1px solid transparent;
}
.lnk:hover{gap:15px;border-bottom-color:currentColor}
.on-paper .lnk{color:var(--paper-ink)}

/* ==========================================================================
   REVEAL
   ========================================================================== */
.r{opacity:0;transform:translateY(26px);transition:opacity .85s cubic-bezier(.16,.8,.3,1),transform .85s cubic-bezier(.16,.8,.3,1)}
.r.in{opacity:1;transform:none}
.d1{transition-delay:.06s}.d2{transition-delay:.13s}.d3{transition-delay:.2s}.d4{transition-delay:.27s}.d5{transition-delay:.34s}
/* Display type reveals by clipping upward — reads as typeset, not faded in. */
.rt{clip-path:inset(0 0 105% 0);transition:clip-path 1s cubic-bezier(.16,.8,.3,1)}
.rt.in{clip-path:inset(0 0 -10% 0)}
@media (prefers-reduced-motion:reduce){
  .r,.rt{opacity:1;transform:none;clip-path:none;transition:none}
  html{scroll-behavior:auto}
  .col-drift{animation:none!important}
  .tick-row{animation:none!important}
}

/* ==========================================================================
   SECTION SHELL
   ========================================================================== */
.s{padding:var(--sect) var(--pad) var(--sect) calc(var(--rail) + var(--pad));position:relative}
.s-in{max-width:var(--maxw);margin:0 auto;position:relative;z-index:1}
.s-void{background:var(--void)}
.s-ink{background:var(--ink)}
.s-paper{background:var(--paper);color:var(--paper-ink)}
.s-paper h1,.s-paper h2,.s-paper h3,.s-paper h4{color:var(--paper-ink)}
.s-paper p{color:var(--paper-mute)}

/* Oversized outlined section numeral, parked in the margin. */
.numeral{
  position:absolute;top:calc(var(--sect) * .42);right:var(--pad);
  font-family:var(--display);font-variation-settings:'wght' 800,'wdth' 100;
  font-size:clamp(90px,15vw,230px);line-height:.7;letter-spacing:-.06em;
  color:transparent;-webkit-text-stroke:1px var(--hair-2);
  pointer-events:none;user-select:none;z-index:0;
}
.s-paper .numeral{-webkit-text-stroke-color:rgba(7,9,26,.09)}

/* Section head: mono kicker + big display + lede. The kicker is mono and
   sits INLINE with a rule, so it reads as a spec label, not an eyebrow. */
.head{max-width:min(1100px,92%);margin-bottom:clamp(44px,5.4vw,80px)}
.head h2{margin-bottom:24px}
.lede{font-size:clamp(16px,1.25vw,19.5px);line-height:1.62;max-width:56ch}

/* ==========================================================================
   HERO — type block over a drifting field of the agency's own ads
   ========================================================================== */
.hero{
  position:relative;min-height:100svh;display:flex;flex-direction:column;
  justify-content:flex-end;overflow:hidden;background:var(--void);
  padding:150px var(--pad) 34px calc(var(--rail) + var(--pad));
}
/* The feed field. Sits behind everything, dimmed, drifting. */
.field{
  position:absolute;inset:0;z-index:0;display:flex;gap:14px;
  padding-left:calc(var(--rail) + var(--pad));
  justify-content:flex-end;
  mask-image:linear-gradient(100deg,transparent 10%,#000 52%);
  opacity:.62;
}
.col{width:clamp(130px,11.4vw,186px);flex:0 0 auto;overflow:hidden}
.col-drift{
  display:flex;flex-direction:column;gap:14px;will-change:transform;
  animation:drift var(--dur,48s) linear infinite;
}
.col.rev .col-drift{animation-direction:reverse}
@keyframes drift{from{transform:translateY(-2%)}to{transform:translateY(-52%)}}
@keyframes sweep{from{transform:translateX(0)}to{transform:translateX(-50%)}}
.cell{position:relative;aspect-ratio:9/16;flex:0 0 auto;overflow:hidden;background:var(--ink-3)}
.cell video,.cell img{width:100%;height:100%;object-fit:cover}
/* Three stacked veils: keep the type column near-solid, darken the top band so
   the nav stays legible over the feed, and ground the bottom. */
.hero-veil{
  position:absolute;inset:0;z-index:1;pointer-events:none;
  background:
    linear-gradient(to bottom,var(--void) 0,rgba(4,5,15,.82) 74px,transparent 190px),
    linear-gradient(82deg,var(--void) 30%,rgba(4,5,15,.9) 50%,rgba(4,5,15,.3) 100%),
    linear-gradient(to top,var(--void) 1%,rgba(4,5,15,.5) 20%,transparent 44%);
}

.hero-in{position:relative;z-index:2;max-width:var(--maxw);margin:0 auto;width:100%}
.hero h1{margin-bottom:0}
.hero h1 .ln{display:block;white-space:nowrap}
.hero h1 .hi{color:var(--signal)}
.hero-foot{
  display:grid;grid-template-columns:minmax(0,1fr) auto;gap:clamp(24px,4vw,64px);
  align-items:end;margin-top:clamp(30px,3.6vw,50px);
  padding-top:clamp(24px,3vw,38px);border-top:1px solid var(--hair);
}
.hero-lede{font-size:clamp(16px,1.28vw,20px);color:var(--text-2);line-height:1.6;max-width:46ch}
.hero-lede b{color:var(--text);font-weight:500}
.hero-cta{display:flex;gap:11px;flex-wrap:wrap;flex-shrink:0}

/* Stat strip — mono, ruled, tabular. Reads like an instrument panel. */
/* width:100% is load-bearing — as a column-flex child, `margin:auto` would
   otherwise centre this and break alignment with the headline above it. */
.strip{
  position:relative;z-index:2;width:100%;max-width:var(--maxw);
  margin:clamp(26px,3vw,40px) auto 0;
  display:grid;grid-template-columns:repeat(3,minmax(0,auto));
  gap:clamp(20px,4vw,72px);justify-content:start;
}
.stat .v{
  font-family:var(--display);font-variation-settings:'wght' 800,'wdth' 100;
  font-size:clamp(30px,3.4vw,48px);line-height:.86;letter-spacing:-.045em;
  color:var(--signal);font-variant-numeric:tabular-nums;margin-bottom:9px;
}
.stat .k{font-family:var(--mono);font-size:9.5px;font-weight:500;letter-spacing:.17em;text-transform:uppercase;color:var(--text-3);line-height:1.5}
.s-paper .stat .v{color:var(--paper-ink)}
.s-paper .stat .k{color:var(--paper-mute)}

/* ==========================================================================
   AD UNIT — the atom of the whole site.
   Media ratio is set inline per unit (9:16, 1:1, 4:5).
   ========================================================================== */
.ad{
  background:#fff;border:1px solid var(--paper-line);
  display:flex;flex-direction:column;overflow:hidden;position:relative;
  transition:transform .38s cubic-bezier(.16,.8,.3,1),box-shadow .38s;
}
.ad:hover{transform:translateY(-6px);box-shadow:0 26px 60px rgba(4,5,15,.24)}
.ad-top{display:flex;align-items:center;gap:9px;padding:11px 12px}
.ad-av{
  width:25px;height:25px;border-radius:50%;flex:0 0 auto;
  background:var(--paper-ink);color:var(--signal);
  display:flex;align-items:center;justify-content:center;
  font-family:var(--mono);font-size:9px;font-weight:600;letter-spacing:0;
}
.ad-who{min-width:0;line-height:1.2}
.ad-brand{font-family:var(--display);font-variation-settings:'wght' 700,'wdth' 100;font-size:11.5px;color:var(--paper-ink);letter-spacing:-.01em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ad-sp{font-family:var(--mono);font-size:8.5px;color:var(--paper-mute);letter-spacing:.06em}
.ad-fmt{
  margin-left:auto;flex:0 0 auto;font-family:var(--mono);font-size:8px;font-weight:600;
  letter-spacing:.13em;text-transform:uppercase;background:var(--signal);color:var(--void);padding:3px 6px;
}
.ad-media{position:relative;aspect-ratio:9/16;background:var(--paper-2);overflow:hidden}
.ad-media.is-video{cursor:pointer}
.ad-media video,.ad-media img{width:100%;height:100%;object-fit:cover}
.ad-media.is-video::after{
  content:'';position:absolute;inset:0;
  background:rgba(4,5,15,.34) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23fff'%3E%3Cpath d='M8 5v14l11-7z'/%3E%3C/svg%3E") no-repeat 50% 50%/38px;
  opacity:0;transition:opacity .28s;
}
.ad-media.is-video:hover::after{opacity:1}
.ad-bot{padding:11px 12px 12px;border-top:1px solid var(--paper-line);margin-top:auto}
.ad-hook{font-size:12.5px;color:var(--paper-ink);line-height:1.42;margin-bottom:9px;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.ad-meta{display:flex;align-items:center;justify-content:space-between;gap:8px}
.ad-res{font-family:var(--mono);font-size:9px;font-weight:600;letter-spacing:.09em;text-transform:uppercase;color:var(--paper-ink);border-left:2px solid var(--signal);padding-left:7px}
.ad-ratio{flex:0 0 auto;font-family:var(--mono);font-size:8.5px;color:var(--paper-mute);border:1px solid var(--paper-line);padding:2px 5px}

/* ==========================================================================
   ROSTER — full-bleed paper wall, immediately after the black hero
   ========================================================================== */
.roster{background:var(--paper);color:var(--paper-ink);padding:clamp(56px,6.4vw,92px) var(--pad) clamp(56px,6.4vw,92px) calc(var(--rail) + var(--pad))}
.roster-in{max-width:var(--maxw);margin:0 auto}
.roster-top{display:flex;align-items:baseline;justify-content:space-between;gap:22px;flex-wrap:wrap;margin-bottom:clamp(26px,3vw,42px)}
.roster-top h2{font-size:clamp(24px,2.9vw,40px)}
.roster-top .m{color:var(--paper-mute)}
.wall{display:grid;grid-template-columns:repeat(5,1fr);gap:1px;background:var(--paper-line)}
.wall-c{
  background:var(--paper);display:flex;align-items:center;justify-content:center;
  padding:clamp(18px,2.2vw,32px) 14px;min-height:clamp(78px,7.4vw,108px);
  transition:background .32s;
}
.wall-c:hover{background:#fff}
.wall-c img{
  width:auto;max-width:100%;object-fit:contain;
  /* Source logos are a mix of white, black and colour artwork. Un-filtered,
     the white ones disappear against the paper ground. brightness(0) flattens
     every mark to one ink, which is the standard logo-wall treatment. */
  filter:brightness(0);opacity:.8;transition:opacity .32s;
}
.wall-c:hover img{opacity:1}

/* ==========================================================================
   SERVICES — deliberately asymmetric. 01 dominates.
   ========================================================================== */
.svc-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:1px;background:var(--hair-2);border-top:1px solid var(--hair-2)}
.svc{background:var(--void);padding:clamp(26px,2.9vw,44px);display:flex;flex-direction:column;position:relative;transition:background .34s}
.svc:hover{background:var(--ink-2)}
.svc-n{font-family:var(--mono);font-size:10px;font-weight:600;letter-spacing:.22em;color:var(--signal);margin-bottom:clamp(28px,3.4vw,54px)}
.svc h3{margin-bottom:14px}
.svc p{font-size:14.5px;margin-bottom:26px;flex:1}
.chips{display:flex;flex-wrap:wrap;gap:6px;padding-top:20px;border-top:1px solid var(--hair-2)}
.chip{font-family:var(--mono);font-size:9px;font-weight:500;letter-spacing:.11em;text-transform:uppercase;color:var(--text-3);border:1px solid var(--hair-2);padding:5px 8px}

/* Buying platforms. Set louder than the plain .chip rows in the other two
   cards — the marks are the recognisable part, so they lead and the wordmark
   trails as a label. Single-colour paths inherit currentColor, which keeps
   the row one material instead of seven competing brand palettes. */
.plats{display:flex;flex-wrap:wrap;gap:7px;margin-top:18px}
.plat{
  display:inline-flex;align-items:center;gap:7px;
  font-family:var(--mono);font-size:9.5px;font-weight:600;letter-spacing:.12em;
  text-transform:uppercase;color:var(--text-2);
  border:1px solid var(--hair-2);padding:7px 10px;
  transition:color .22s,border-color .22s;
}
.plat svg{width:13px;height:13px;flex:none;fill:currentColor}
.svc:hover .plat{color:var(--text);border-color:var(--hair)}


/* ==========================================================================
   WORK — a screening wall.

   No cards, no borders, no brand chrome, no captions. Fourteen pieces of real
   creative, gapless and edge-to-edge on near-black, playing at once. The feed
   chrome that used to wrap each unit (avatar / brand / "Sponsored" / format
   chip / hook / result / ratio) added seven pieces of UI per tile and made the
   work read as a screenshot of a post instead of a piece of film. The proof it
   carried lives in the logo wall and the case studies already.

   Row spans come from each piece's true aspect ratio, so nothing is cropped —
   the 1:1 and 4:5 units are visibly different shapes, which shows format range
   without having to label it.
   ========================================================================== */
.work{background:var(--void);padding:var(--sect) 0;position:relative;overflow:hidden}
.work .head{
  padding-left:calc(var(--rail) + var(--pad));padding-right:var(--pad);
  max-width:var(--maxw);margin-left:auto;margin-right:auto;
}

/* Gapless, edge to edge, one uniform ratio. Column count is set explicitly
   rather than by auto-fill because it has to divide the tile count evenly —
   an auto-filled wall leaves a hole in the last row, and a hole in a gapless
   wall reads as a missing tile, not as space. */
.wall-work{
  display:grid;
  grid-template-columns:repeat(6,1fr);
  gap:0;
  /* Starts at the index rail, bleeds off the right edge. The rail is fixed and
     translucent — running creative underneath it puts a gradient and a vertical
     wordmark on top of somebody's ad. */
  margin:clamp(34px,4vw,56px) 0 0 var(--rail);
  background:var(--void);
}
.tile{
  position:relative;overflow:hidden;background:var(--ink-2);
  aspect-ratio:9/16;isolation:isolate;
}
.tile video,.tile img{
  width:100%;height:100%;object-fit:cover;display:block;
  transition:transform .7s cubic-bezier(.16,.8,.3,1),filter .45s,opacity .45s;
}
/* Dim the wall on hover so the piece you're looking at is the only lit one. */
.wall-work:hover .tile video,.wall-work:hover .tile img{filter:brightness(.42) saturate(.75)}
.tile:hover video,.tile:hover img{filter:none;transform:scale(1.05)}
.tile::after{
  content:'';position:absolute;inset:0;z-index:1;pointer-events:none;
  box-shadow:inset 0 0 0 1px rgba(244,244,251,.06);
}
/* Caption is opt-in: it appears only for the tile under the cursor. */
.tile-cap{
  position:absolute;left:0;right:0;bottom:0;z-index:2;pointer-events:none;
  padding:34px 14px 13px;
  background:linear-gradient(to top,rgba(4,5,15,.94) 12%,rgba(4,5,15,.6) 55%,transparent);
  opacity:0;transform:translateY(8px);
  transition:opacity .32s ease,transform .32s cubic-bezier(.16,.8,.3,1);
}
.tile:hover .tile-cap,.tile:focus-visible .tile-cap{opacity:1;transform:none}
.tile-cap .b{
  font-family:var(--mono);font-size:9px;font-weight:600;letter-spacing:.18em;
  text-transform:uppercase;color:var(--signal);margin-bottom:6px;
}
.tile-cap .h{font-size:12.5px;color:var(--text);line-height:1.42;font-weight:450}
.tile-cap .r{
  display:inline-block;margin-top:8px;
  font-family:var(--mono);font-size:9px;font-weight:600;letter-spacing:.1em;
  text-transform:uppercase;color:var(--void);background:var(--signal);padding:2px 6px;
}
/* Play affordance, only on video tiles, only on hover */

.work-foot{
  display:flex;justify-content:space-between;align-items:center;gap:22px;
  flex-wrap:wrap;margin-top:clamp(26px,3vw,40px);
}
.work-foot p{font-size:13.5px;max-width:46ch;margin:0;color:var(--text-2)}
.work-foot .lnk{color:var(--signal)}

/* ==========================================================================
   ADCRUSH — violet, container-breaking image
   ========================================================================== */
.crush{background:var(--ink);position:relative;overflow:hidden}
.crush .mesh::before{background:radial-gradient(circle,rgba(112,24,224,.34),transparent 64%);top:-16%;right:-8%;width:60vw;height:60vw}
.crush .mesh::after{display:none}
.crush-grid{display:grid;grid-template-columns:1.06fr .94fr;gap:clamp(30px,4.4vw,66px);align-items:center}
.co{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-bottom:24px}
.co .ce{font-family:var(--mono);font-size:11px;font-weight:600;letter-spacing:.2em;text-transform:uppercase;color:var(--text-2)}
.co .x{color:var(--text-3);font-size:13px}
.co img{height:21px;width:auto}
.co .tag{font-family:var(--mono);font-size:9px;font-weight:600;letter-spacing:.17em;text-transform:uppercase;color:var(--void);background:var(--signal);padding:4px 9px}
/* Long two-clause headline in a half-width column. At the section default it
   ran to five and six lines and the setup/payoff rhythm disappeared. */
/* These two sections are two-up, so they cannot take the full 76px display
   size. 41px left too big a jump from the full-width headings; 54px closes
   most of it while still fitting the column. */
.crush h2,.signl h2{font-size:clamp(28px,3.9vw,54px)}
.crush h2 em.s{color:var(--crush-lift)}
.pts{list-style:none;display:flex;flex-direction:column;margin-top:32px}
.pts li{display:grid;grid-template-columns:auto 1fr;gap:15px;padding:17px 0;border-bottom:1px solid var(--hair-2);font-size:14.5px;color:var(--text-2);line-height:1.6}
.pts li:first-child{border-top:1px solid var(--hair-2)}
.pts li b{color:var(--text);font-weight:500}
.pts li .no{font-family:var(--mono);font-size:9.5px;color:var(--crush-lift);letter-spacing:.1em;padding-top:4px}
/* breaks the container on the right */
.shot{position:relative;border:1px solid var(--hair);overflow:hidden;background:var(--ink-3);margin-right:calc(var(--pad) * -1)}
.shot img{width:100%}
.shot figcaption{padding:13px 16px;border-top:1px solid var(--hair);font-family:var(--mono);font-size:10.5px;line-height:1.55;color:var(--text-3);letter-spacing:.02em}
.flow{display:grid;grid-template-columns:repeat(3,1fr);gap:1px;background:var(--hair-2);margin-top:clamp(38px,4.6vw,62px);border-top:1px solid var(--hair-2)}
.step{background:var(--ink);padding:clamp(22px,2.6vw,34px)}
.step .n{font-family:var(--mono);font-size:9.5px;font-weight:600;letter-spacing:.2em;text-transform:uppercase;color:var(--crush-lift);margin-bottom:15px}
.step h4{font-size:16.5px;margin-bottom:9px}
.step p{font-size:13.5px}
.note{margin-top:clamp(30px,3.6vw,44px);padding:24px 28px;border-left:2px solid var(--crush);background:rgba(112,24,224,.08)}
.note p{font-size:14.5px;max-width:none}

/* ==========================================================================
   CASES — paper, enormous numerals
   ========================================================================== */
.port{display:flex;align-items:baseline;gap:18px;flex-wrap:wrap;margin-bottom:clamp(34px,4vw,52px);padding:24px 28px;background:var(--paper-ink);color:var(--paper)}
.port b{font-family:var(--display);font-variation-settings:'wght' 800,'wdth' 100;font-size:clamp(28px,3.4vw,48px);line-height:.86;letter-spacing:-.045em;color:var(--signal)}
.port span{font-size:13.5px;color:rgba(242,240,233,.74);max-width:46ch;line-height:1.55}
.cases{display:grid;grid-template-columns:repeat(3,1fr);gap:1px;background:var(--paper-line);border:1px solid var(--paper-line)}
.case{background:var(--paper);cursor:pointer;display:flex;flex-direction:column;transition:background .32s;position:relative;overflow:hidden}
.case:hover{background:#fff}
.case img{width:100%;aspect-ratio:3/2;object-fit:cover;filter:saturate(.9) contrast(1.03);transition:filter .4s,transform .6s cubic-bezier(.16,.8,.3,1)}
.case:hover img{filter:none;transform:scale(1.03)}
.case-b{padding:clamp(22px,2.5vw,32px);display:flex;flex-direction:column;flex:1}
.case-cat{font-family:var(--mono);font-size:9px;font-weight:500;letter-spacing:.2em;text-transform:uppercase;color:var(--paper-mute);margin-bottom:14px}
.case h3{margin-bottom:12px}
.case p{font-size:13.5px;margin-bottom:24px;flex:1}
.case-st{display:flex;gap:26px;flex-wrap:wrap;padding-top:20px;border-top:1px solid var(--paper-line)}
.case-st .v{font-family:var(--display);font-variation-settings:'wght' 800,'wdth' 100;font-size:clamp(21px,2.1vw,30px);line-height:.9;letter-spacing:-.04em;color:var(--paper-ink);margin-bottom:6px;font-variant-numeric:tabular-nums}
.case-st .k{font-family:var(--mono);font-size:8.5px;font-weight:500;letter-spacing:.13em;text-transform:uppercase;color:var(--paper-mute);line-height:1.45}
.case-go{display:flex;align-items:center;gap:8px;margin-top:24px;font-family:var(--mono);font-size:10px;font-weight:600;letter-spacing:.16em;text-transform:uppercase;color:var(--paper-ink);opacity:0;transform:translateX(-6px);transition:opacity .3s,transform .3s}
.case:hover .case-go{opacity:1;transform:none}
.disc{margin-top:24px;font-family:var(--mono);font-size:10.5px;color:var(--paper-mute);letter-spacing:.02em}

/* ==========================================================================
   ADSIGNL — terminal register
   ========================================================================== */
.signl{background:var(--void);position:relative;overflow:hidden}
.signl-grid{display:grid;grid-template-columns:1fr 1.04fr;gap:clamp(30px,4.4vw,66px);align-items:start}
/* Left column is now a hierarchy, not three equal paragraphs. Sizes and
   opacity step down so a five-second skim lands the headline, the access
   line, and the two stats — the previous version set every paragraph at the
   same weight next to a highly scannable panel, so the eye went right and
   never came back. */
/* AdSignl reads as its own product that sits with CE Digital, not as a
   feature of the agency — so it gets a lockup rather than a mono eyebrow. */
.lock{display:flex;align-items:baseline;gap:11px;flex-wrap:wrap;margin-bottom:24px}
.lock .mk{
  font-family:var(--display);font-variation-settings:'wght' 800,'wdth' 100;
  font-size:clamp(23px,2.5vw,33px);letter-spacing:-.035em;
  color:var(--signal);text-transform:none;
}
.lock .by{
  font-family:var(--mono);font-size:10px;font-weight:500;letter-spacing:.17em;
  text-transform:uppercase;color:var(--text-3);
}
.signl h2 em.s{color:var(--signal)}

/* Both paragraphs share one treatment. The earlier version stepped size and
   colour down between them for scan hierarchy, which read as inconsistent
   type rather than as emphasis. */
.signl-b{font-size:clamp(15px,1.05vw,16.5px);color:var(--text-2);line-height:1.68;margin-top:20px;max-width:58ch}
.signl-b:first-of-type{margin-top:24px}

/* The sentence the section exists to deliver. */
.signl-access{
  font-size:clamp(16.5px,1.4vw,20px);color:var(--text);line-height:1.45;
  margin-top:26px;padding-top:22px;border-top:1px solid var(--hair-2);max-width:none;
}


.signl-cta{display:flex;align-items:center;gap:clamp(16px,2vw,28px);flex-wrap:wrap;margin-top:32px}
.signl-cta .lnk{color:var(--text-2)}
.signl-cta .lnk:hover{color:var(--signal)}

/* Promoted out of the 11px monospace fine print it was buried in. */
.con-col{min-width:0}
.con-say{font-size:13.5px;color:var(--text-2);line-height:1.6;margin-top:16px;max-width:52ch}

/* the console */
.con{background:var(--ink-2);border:1px solid var(--hair);position:relative}
.con-bar{display:flex;align-items:center;gap:9px;padding:12px 16px;border-bottom:1px solid var(--hair-2)}
.con-bar .dot{width:7px;height:7px;border-radius:50%;background:var(--signal)}
.con-bar .t{font-family:var(--mono);font-size:9.5px;font-weight:500;letter-spacing:.18em;text-transform:uppercase;color:var(--text-3)}
.con-body{padding:20px 18px}
.ask{
  margin:0 0 15px auto;max-width:80%;width:fit-content;
  background:var(--ink-4);padding:11px 15px;
  font-family:var(--mono);font-size:12.5px;color:var(--text);letter-spacing:.01em;
}
.ans{background:transparent;border-left:2px solid var(--signal);padding:0 0 0 16px;margin-bottom:22px}
.ans .mo{font-family:var(--mono);font-size:9px;font-weight:600;letter-spacing:.19em;text-transform:uppercase;color:var(--signal);margin-bottom:9px}
.ans p{font-size:13px;line-height:1.62;max-width:none}
.ans:last-child{margin-bottom:0}
.con-foot{padding:14px 18px;border-top:1px solid var(--hair-2);font-family:var(--mono);font-size:10px;line-height:1.6;color:var(--text-3);letter-spacing:.02em}

/* ==========================================================================
   APPROACH
   ========================================================================== */
.steps{display:grid;grid-template-columns:repeat(3,1fr);gap:1px;background:var(--hair-2);border-top:1px solid var(--hair-2);margin-bottom:clamp(50px,6vw,84px)}
.stp{background:var(--void);padding:clamp(26px,3vw,42px)}
.stp .n{font-family:var(--display);font-variation-settings:'wght' 800,'wdth' 100;font-size:clamp(40px,5vw,72px);line-height:.8;letter-spacing:-.055em;color:transparent;-webkit-text-stroke:1px rgba(227,240,0,.34);margin-bottom:22px}
.stp h3{margin-bottom:11px}
.stp p{font-size:14px}
.fit{display:grid;grid-template-columns:1fr 1fr;gap:clamp(30px,4.6vw,70px);align-items:start}
.fit-l{list-style:none;display:flex;flex-direction:column;margin-bottom:32px}
.fit-l li{display:flex;gap:14px;align-items:flex-start;padding:15px 0;border-bottom:1px solid var(--hair-2);font-size:15px;color:var(--text)}
.fit-l li:first-child{border-top:1px solid var(--hair-2)}
.fit-l li::before{content:'';width:6px;height:6px;background:var(--signal);flex:0 0 auto;margin-top:8px}
.nofit{border-left:2px solid var(--text-3);padding:6px 0 6px 22px;margin-bottom:32px}
.nofit p{font-family:var(--serif);font-style:italic;font-size:17px;color:var(--text-2);line-height:1.62;max-width:52ch}
.rec{background:var(--ink-2);border:1px solid var(--hair-2);padding:26px 28px}
.rec p{font-size:14.5px}
/* comparison */
/* Their column vs ours, in the page's own dark vocabulary — no new palette.
   The differentiation is material, not hue: theirs sits flush at the section
   colour and fades, ours is raised to --ink-3 with the 2px acid left edge the
   AdSignl answers already use, and full-strength type. Hairline gaps show the
   grid beneath, same construction as .steps and .team.

   Earlier passes failed two ways: identical columns (no contrast at all), and
   a cream card (a palette the section doesn't use). */
.vs{
  display:grid;grid-template-columns:1fr 1fr;gap:1px;
  background:var(--hair-2);border:1px solid var(--hair-2);
}
.vs-c{min-width:0}
.vs-c.left{background:var(--ink)}
.vs-c.right{background:var(--ink-3);box-shadow:inset 2px 0 0 var(--signal)}

.vs-h{padding:16px 19px;border-bottom:1px solid var(--hair-2)}
.vs-h .t{
  font-family:var(--display);font-variation-settings:'wght' 700,'wdth' 100;
  font-size:15px;letter-spacing:-.015em;color:var(--text);
}
.vs-h .t.old{color:var(--text-3)}

.vs-s{padding:0;display:flex;flex-direction:column}
.vstep{
  padding:13px 19px;border-bottom:1px solid var(--hair-2);
  opacity:0;transform:translateX(-8px);transition:opacity .45s,transform .45s;
}
.vs-c.right .vstep{transform:translateX(8px)}
.vs-s .vstep:last-child{border-bottom:0}
.vstep.on{opacity:1;transform:none}
.vstep .nm{
  font-family:var(--display);font-variation-settings:'wght' 700,'wdth' 100;
  font-size:12.5px;margin-bottom:3px;letter-spacing:-.01em;color:var(--text-3);
}
.vs-c.right .vstep .nm{color:var(--text)}
.vstep .de{font-size:11.5px;color:var(--text-3);line-height:1.45}
.vs-c.right .vstep .de{color:var(--text-2)}

/* ==========================================================================
   TEAM
   ========================================================================== */
/* Six across, two deep, no scrolling. Twelve cells for eleven people, and
   the twelfth is the hiring tile — which is what fills the hole rather than
   leaving a gap. 1fr columns mean the portraits shrink to fit instead of
   overflowing, so there is no scrollbar to fight. */
.team{
  display:grid;grid-template-columns:repeat(6,1fr);
  gap:1px;background:var(--hair-2);border-top:1px solid var(--hair-2);
}
/* The hiring tile mirrors a person card: copy sits in the square where the
   portrait would be, and an empty strip below holds the same space the name
   and role occupy, so the row stays aligned. */
.mem-open{background:var(--ink-2);display:flex;flex-direction:column;transition:background .32s}
.mem-open:hover{background:var(--ink-3)}
.mo-sq{
  aspect-ratio:1;display:flex;flex-direction:column;justify-content:center;
  gap:14px;padding:0 clamp(16px,1.5vw,24px);
  border-bottom:1px solid var(--hair-2);
}
.mo-l{
  font-family:var(--mono);font-size:9px;font-weight:600;letter-spacing:.19em;
  text-transform:uppercase;color:var(--signal);
}
.mo-t{
  font-family:var(--display);font-variation-settings:'wght' 700,'wdth' 100,'opsz' 24;
  font-size:clamp(17px,1.5vw,21px);letter-spacing:-.025em;line-height:1.12;color:var(--text);
}
.mem-open:hover .mo-t{color:var(--signal)}
/* Matches .mem-b's box so both cards in the column bottom out together. */
.mo-b{display:block;padding:16px 18px 20px;min-height:1px}
.mem:hover{background:var(--ink-2)}
/* Headshots run in colour. Grayscale was right for the old environmental
   portraits, but the new studio set is shot on a flat #dcdefd ground — B&W
   flattened eleven tiles into identical grey blocks with black-clad subjects
   and drained the whole section. Colour restores skin tone; hover lifts. */
.mem img{width:100%;aspect-ratio:1;object-fit:cover;filter:saturate(.94) brightness(.97);transition:filter .5s}
.mem:hover img{filter:saturate(1.04) brightness(1.03)}
.mem-b{padding:16px 18px 20px}
.mem-n{font-family:var(--display);font-variation-settings:'wght' 700,'wdth' 100;font-size:16px;margin-bottom:4px;letter-spacing:-.02em}
.mem-r{font-family:var(--mono);font-size:9px;font-weight:500;letter-spacing:.15em;text-transform:uppercase;color:var(--signal);margin-bottom:11px;line-height:1.45}
.team-foot{margin-top:32px;display:flex;justify-content:space-between;align-items:center;gap:22px;flex-wrap:wrap}
.team-foot p{font-size:14px;max-width:52ch;margin:0}

/* ==========================================================================
   APPLY
   ========================================================================== */
.apply-grid{display:grid;grid-template-columns:1fr 1fr;gap:clamp(34px,5vw,80px);align-items:start}
/* This form is the conversion target for paid traffic, so it gets read by
   people who did not choose to be here. Measured before the rework: labels
   9.5px at 3.81:1, placeholders 4.08:1, and field borders at 1.28:1 — the
   inputs did not visually read as inputs at all. Everything below is a
   legibility fix, not decoration. */
.form{
  background:var(--ink-2);border:1px solid var(--hair);
  padding:clamp(28px,3.2vw,46px);
  box-shadow:0 30px 70px -34px rgba(0,0,0,.9);
  position:relative;
}
/* One acid edge so the card reads as the thing to act on. */
.form::before{content:'';position:absolute;top:-1px;left:-1px;right:-1px;height:3px;background:var(--signal)}

.fg{display:flex;flex-direction:column;gap:9px;margin-bottom:20px}
.fg label{
  font-family:var(--mono);font-size:11px;font-weight:500;
  letter-spacing:.12em;text-transform:uppercase;color:var(--text-2);
}
.fg input,.fg select,.fg textarea{
  background:var(--ink-3);border:1px solid var(--text-3);color:var(--text);
  /* --ink-4 measured 1.13:1 against the field fill — the boundary was
     invisible. --text-3 is the lightest token that clears the 3:1
     non-text contrast threshold (3.49:1 on the fill, 3.81:1 on the card). */
  font-family:var(--body);font-size:15px;padding:15px 16px;outline:none;width:100%;
  transition:border-color .22s,box-shadow .22s,background .22s;
}
.fg select{appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%239ea1bb' stroke-width='2'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 14px center;background-size:16px;padding-right:40px}
.fg input:hover,.fg select:hover,.fg textarea:hover{border-color:var(--text-2)}
.fg input:focus,.fg select:focus,.fg textarea:focus{
  border-color:var(--signal);background:var(--ink-2);
  box-shadow:0 0 0 3px rgba(227,240,0,.16);
}
.fg input::placeholder,.fg textarea::placeholder{color:#868aa8}
.fg textarea{resize:vertical;min-height:104px;line-height:1.6}
.frow{display:grid;grid-template-columns:1fr 1fr;gap:16px}
.fsub{width:100%;margin-top:8px;font-size:13px;padding-top:19px;padding-bottom:19px}
.fnote{
  font-family:var(--mono);font-size:10.5px;letter-spacing:.07em;text-transform:uppercase;
  color:var(--text-2);text-align:center;margin-top:16px;line-height:1.7;
}
.fnote a{color:var(--text);border-bottom:1px solid var(--text-3)}
.req{color:var(--signal)}

/* ==========================================================================
   MODALS
   ========================================================================== */
.ov{position:fixed;inset:0;background:rgba(4,5,15,.94);z-index:600;display:flex;align-items:center;justify-content:center;padding:clamp(16px,4vw,40px);opacity:0;pointer-events:none;transition:opacity .32s;backdrop-filter:blur(12px)}
.ov.open{opacity:1;pointer-events:all}
.cm{background:var(--ink-2);border:1px solid var(--hair);max-width:780px;width:100%;max-height:88vh;overflow-y:auto;position:relative;transform:translateY(20px);transition:transform .38s cubic-bezier(.16,.8,.3,1)}
.ov.open .cm{transform:none}
.cm-h{padding:clamp(28px,4vw,48px) clamp(24px,4vw,52px) 28px;border-bottom:1px solid var(--hair-2);position:sticky;top:0;background:var(--ink-2);z-index:1}
.cm-h .cat{font-family:var(--mono);font-size:9.5px;font-weight:500;letter-spacing:.19em;text-transform:uppercase;color:var(--signal);margin-bottom:14px;display:block}
.cm-b{padding:clamp(24px,3.4vw,40px) clamp(24px,4vw,52px) clamp(32px,4vw,48px)}
.cm-b p{font-size:15px;line-height:1.75;margin-bottom:18px}
.x{position:absolute;top:16px;right:16px;width:37px;height:37px;z-index:2;background:var(--ink-4);border:1px solid var(--hair-2);color:var(--text);font-size:19px;line-height:1;cursor:pointer;transition:background .22s,color .22s}
.x:hover{background:var(--signal);color:var(--void)}
.cm-st{display:flex;gap:clamp(20px,3vw,40px);flex-wrap:wrap;margin-top:26px;padding-top:24px;border-top:1px solid var(--hair-2)}
.cm-st .v{font-family:var(--display);font-variation-settings:'wght' 800,'wdth' 100;font-size:clamp(20px,2.2vw,29px);line-height:.9;letter-spacing:-.04em;color:var(--signal);margin-bottom:6px}
.cm-st .k{font-family:var(--mono);font-size:8.5px;font-weight:500;letter-spacing:.14em;text-transform:uppercase;color:var(--text-3);line-height:1.45}
.vsh{position:relative;width:min(430px,92vw);max-height:88vh;aspect-ratio:9/16;background:#000;border:1px solid var(--hair)}
.vsh video{width:100%;height:100%;object-fit:contain;background:#000}
.vmeta{position:absolute;left:0;right:0;bottom:0;padding:28px 18px 16px;background:linear-gradient(to top,rgba(4,5,15,.96),transparent);pointer-events:none}
.vmeta .b{font-family:var(--display);font-variation-settings:'wght' 700,'wdth' 100;font-size:13.5px;margin-bottom:4px}
.vmeta .h{font-family:var(--mono);font-size:11px;color:var(--text-2);line-height:1.5}

/* ==========================================================================
   NEWSLETTER
   ========================================================================== */
.nl{position:fixed;bottom:22px;right:22px;z-index:550;width:min(340px,calc(100vw - 36px));background:var(--ink-2);border:1px solid var(--hair);padding:26px 24px 22px;opacity:0;transform:translateY(18px) scale(.97);pointer-events:none;transition:opacity .42s,transform .42s;box-shadow:0 28px 64px rgba(0,0,0,.5)}
.nl.open{opacity:1;transform:none;pointer-events:all}
.nl .m{color:var(--signal);margin-bottom:12px;display:block}
.nl p{font-size:13px;margin-bottom:17px;max-width:none}
.nl-f{display:flex}
.nl-f input{flex:1;min-width:0;background:var(--void);border:1px solid var(--hair-2);border-right:0;color:var(--text);font-family:var(--body);font-size:13px;padding:12px 13px;outline:none}
.nl-f input:focus{border-color:var(--signal)}
.nl-x{position:absolute;top:9px;right:11px;background:none;border:0;color:var(--text-3);font-size:18px;cursor:pointer;padding:4px 6px}
.nl-x:hover{color:var(--signal)}
.nl-n{font-family:var(--mono);font-size:10.5px;color:var(--signal);margin-top:11px;min-height:15px;letter-spacing:.02em}

/* ==========================================================================
   FOOTER
   ========================================================================== */
footer{background:var(--void);border-top:1px solid var(--hair-2);padding:clamp(52px,6.4vw,84px) var(--pad) 30px calc(var(--rail) + var(--pad))}
.f-grid{max-width:var(--maxw);margin:0 auto;display:grid;grid-template-columns:1.6fr 1fr 1fr 1fr;gap:clamp(28px,4vw,56px)}
.f-b img{height:29px;margin-bottom:18px}
.f-b p{font-size:13.5px;max-width:32ch}
.f-c h4{font-family:var(--mono);font-size:9.5px;font-weight:600;letter-spacing:.19em;text-transform:uppercase;color:var(--signal);margin-bottom:17px}
.f-c ul{list-style:none;display:flex;flex-direction:column;gap:10px}
/* Eight nav links in one column set the footer's height on its own. Two
   columns halve it without dropping anything. */
.f-c ul.two-up{display:grid;grid-template-columns:1fr 1fr;gap:10px 20px}
.f-c a{font-size:13.5px;color:var(--text-2);transition:color .2s}
.f-c a:hover{color:var(--signal)}
.f-a{font-family:var(--mono);font-size:11.5px;color:var(--text-3);line-height:1.65;letter-spacing:.02em}
.f-a b{color:var(--text-2);font-weight:500;display:block;font-family:var(--body);letter-spacing:0;font-size:13px}
.f-bar{max-width:var(--maxw);margin:clamp(40px,5vw,62px) auto 0;padding-top:24px;border-top:1px solid var(--hair-2);display:flex;justify-content:space-between;gap:16px;flex-wrap:wrap;font-family:var(--mono);font-size:10.5px;color:var(--text-3);letter-spacing:.04em}

/* ==========================================================================
   RESPONSIVE
   ========================================================================== */
@media (max-width:1240px){
  .wall{grid-template-columns:repeat(4,1fr)}
  .team{grid-template-columns:repeat(4,1fr)}
  .f-grid{grid-template-columns:1fr 1fr}
  .svc-grid{grid-template-columns:1fr 1fr}
}
@media (max-width:1024px){
  .crush-grid,.signl-grid,.fit,.apply-grid{grid-template-columns:1fr}
  .flow,.steps{grid-template-columns:1fr}
  .cases{grid-template-columns:1fr 1fr}
  .shot{margin-right:0}
  .nav-links{display:none}
  .nav-links.open{
    display:flex;flex-direction:column;align-items:flex-start;
    position:absolute;top:100%;left:0;right:0;
    background:rgba(4,5,15,.98);backdrop-filter:blur(16px);
    padding:24px var(--pad) 30px;gap:20px;border-bottom:1px solid var(--hair-2);
  }
  .nav-toggle{display:block}
  #nav .btn{display:none}
  #nav .nav-links.open .btn{display:inline-flex;margin-top:6px}
  /* Hero re-flows: copy first, then the feed as a single horizontal band.
     Order is explicit because the field precedes the copy in the DOM. */
  .hero{min-height:0;padding-top:118px;justify-content:flex-start}
  .hero-in{order:1}
  .strip{order:2}
  .field{
    order:3;position:relative;inset:auto;opacity:1;height:auto;width:100%;
    justify-content:flex-start;padding:0;
    margin:clamp(28px,5vw,44px) calc(var(--pad) * -1) 0 calc((var(--rail) + var(--pad)) * -1);
    mask-image:linear-gradient(to right,transparent,#000 7%,#000 93%,transparent);
    overflow:hidden;
  }
  .col{width:max-content}
  .col:not(:first-child){display:none}
  .col-drift{flex-direction:row;gap:11px;animation-name:sweep;animation-duration:46s!important;animation-direction:normal!important}
  .cell{width:clamp(112px,30vw,158px)}
  .hero-veil{display:none}
  .hero h1 .ln{white-space:normal}
}

/* Below ~515px the global h1 clamp stops scaling and pins at its 34px floor,
   which is 6px too wide for "You run the business." on a 390px screen — it
   broke after "the" and left an orphan. Keep the hero line scaling past that
   floor so both lines hold together down to a 320px viewport. */
@media (max-width:515px){
  .hero-in h1{font-size:clamp(25px,8.2vw,34px)}
}
@media (max-width:760px){
  .svc-grid{grid-template-columns:1fr}
  .wall{grid-template-columns:repeat(3,1fr)}
  .cases{grid-template-columns:1fr}
  .team{grid-template-columns:repeat(3,1fr)}
  .vs{grid-template-columns:1fr}
  .frow{grid-template-columns:1fr}
  .f-grid{grid-template-columns:1fr}
  .strip{gap:20px 28px;grid-template-columns:repeat(2,auto)}
  .hero-foot{grid-template-columns:1fr}
  .port{flex-direction:column;gap:9px}
  .numeral{font-size:clamp(70px,20vw,120px)}
  .signl-cta{align-items:stretch;flex-direction:column}
  .signl-cta .btn{width:100%;text-align:center}
}
/* 12 tiles, so every column count below divides evenly: 6x2 / 4x3 / 3x4 / 2x6 */
@media (max-width:1080px){ .wall-work{grid-template-columns:repeat(4,1fr)} }
@media (max-width:760px){  .wall-work{grid-template-columns:repeat(3,1fr)} }
@media (max-width:480px){  .wall-work{grid-template-columns:repeat(2,1fr)} }

@media (max-width:430px){
  .wall{grid-template-columns:repeat(2,1fr)}
  .wall-c{min-height:72px;padding:15px 11px}
  .team{grid-template-columns:repeat(2,1fr)}
  .hero-cta{flex-direction:column;align-items:stretch;width:100%}
  .hero-cta .btn{width:100%}
}
