:root{
  --bg:        #000000;
  --fg:        #f5f3ee;
  --fg-1:      rgba(245,243,238,.95);
  --fg-2:      rgba(245,243,238,.62);
  --fg-3:      rgba(245,243,238,.34);
  --fg-4:      rgba(245,243,238,.14);
  --line:      rgba(245,243,238,.08);
  --line-hi:   rgba(245,243,238,.20);
  --accent:    #e8dec8;
  /* Tweakable defaults, mutated at runtime via the Tweaks panel. */
  --skyline-opacity: 0.14;
  --office-focal-x:  25%;

  --sans:  "Inter Tight", ui-sans-serif, system-ui, -apple-system, "Segoe UI", sans-serif;
  --serif: "Newsreader", "Iowan Old Style", "Times New Roman", serif;

  --gut: clamp(20px, 4vw, 56px);
  --rail: 56px;
  --section-y: clamp(80px, 9vw, 140px);
  --max-w: 1400px;
}

*{box-sizing:border-box;margin:0;padding:0;-webkit-tap-highlight-color:transparent}
html,body{background:var(--bg);color:var(--fg)}
body{
  font-family:var(--sans);font-size:15.5px;line-height:1.55;
  -webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;
  overflow-x:hidden;letter-spacing:-.005em;
}
body.intro-lock{overflow:hidden}
::selection{background:var(--accent);color:#000}
a{color:inherit;text-decoration:none}
button{font:inherit;color:inherit;background:none;border:0;padding:0;cursor:pointer}
img,canvas,svg{display:block;max-width:100%}

.serif{font-family:var(--serif)}
.serif-it{font-family:var(--serif);font-style:italic;font-weight:400;color:var(--accent);letter-spacing:-.015em}
.em{color:var(--accent);font-weight:500}
.label-faint{font-size:11.5px;letter-spacing:.14em;color:var(--fg-3);text-transform:uppercase}

.h1{font-family:var(--sans);font-weight:300;font-size:clamp(38px,5.2vw,76px);line-height:.98;letter-spacing:-.025em;color:var(--fg)}
.h2{font-family:var(--sans);font-weight:300;font-size:clamp(28px,3.6vw,52px);line-height:1.05;letter-spacing:-.022em;color:var(--fg)}
.lead{font-family:var(--serif);font-size:clamp(16px,1.25vw,19px);line-height:1.55;color:var(--fg-2);max-width:60ch;font-weight:300}

/* ─── Intro overlay ─────────────────────────────────────────── */
.cintro{
  position:fixed;inset:0;z-index:9000;background:#000;
  display:flex;flex-direction:column;align-items:center;justify-content:center;
  color:var(--fg);overflow:hidden;
}
/* Blip streaks: three horizontal accent lines that flash from edge to edge
   as each letter (K, A, V) arrives — like motion-blur trails. */
.cintro-blip{
  position:absolute;left:0;height:1px;width:0;
  background:linear-gradient(90deg, transparent, var(--accent) 30%, var(--accent));
  opacity:0;pointer-events:none;
}
.cintro-blip-1{top:46%}
.cintro-blip-2{top:50%}
.cintro-blip-3{top:54%}
@keyframes blipStreak{
  0%{width:0;opacity:0;transform:translateX(0)}
  10%{width:100%;opacity:1}
  60%{width:100%;opacity:.7}
  100%{width:0;opacity:0;transform:translateX(60%)}
}
.cintro.phase-1 .cintro-blip-1, .cintro.phase-2 .cintro-blip-1,
.cintro.phase-3 .cintro-blip-1, .cintro.phase-4 .cintro-blip-1{
  animation:blipStreak .85s cubic-bezier(.2,.7,.18,1) .05s forwards;
}
.cintro.phase-1 .cintro-blip-2, .cintro.phase-2 .cintro-blip-2,
.cintro.phase-3 .cintro-blip-2, .cintro.phase-4 .cintro-blip-2{
  animation:blipStreak .85s cubic-bezier(.2,.7,.18,1) .55s forwards;
}
.cintro.phase-1 .cintro-blip-3, .cintro.phase-2 .cintro-blip-3,
.cintro.phase-3 .cintro-blip-3, .cintro.phase-4 .cintro-blip-3{
  animation:blipStreak .85s cubic-bezier(.2,.7,.18,1) 1.05s forwards;
}

.cintro-wordmark{
  position:relative;z-index:2;
  font-family:var(--sans);font-weight:700;
  font-size:clamp(72px, 14vw, 220px);
  letter-spacing:-.045em;line-height:1;
  display:flex;align-items:baseline;
  color:var(--fg);
  transform:translate(0,0) scale(1);
  transform-origin:left center;
  transition:transform 1.2s cubic-bezier(.6,0,.2,1), opacity 1s cubic-bezier(.6,0,.2,1);
}
/* Each letter starts off-screen-right, skewed and blurred (motion blur),
   then settles into position. Staggered by transition-delay. */
.cw-letter{
  display:inline-block;opacity:0;
  transform:translateX(120vw) skewX(-12deg);
  filter:blur(8px);
  transition:transform .7s cubic-bezier(.18,.7,.16,1),
             opacity .35s ease,
             filter .55s ease;
}
.cintro.phase-1 .cw-K, .cintro.phase-2 .cw-K,
.cintro.phase-3 .cw-K, .cintro.phase-4 .cw-K{
  opacity:1;transform:translateX(0) skewX(0);filter:blur(0);transition-delay:.05s;
}
.cintro.phase-1 .cw-A, .cintro.phase-2 .cw-A,
.cintro.phase-3 .cw-A, .cintro.phase-4 .cw-A{
  opacity:1;transform:translateX(0) skewX(0);filter:blur(0);transition-delay:.55s;
}
.cintro.phase-1 .cw-V, .cintro.phase-2 .cw-V,
.cintro.phase-3 .cw-V, .cintro.phase-4 .cw-V{
  opacity:1;transform:translateX(0) skewX(0);filter:blur(0);transition-delay:1.05s;
}

.cw-suffix{
  display:inline-block;font-size:.42em;margin-left:.16em;
  color:var(--fg-2);font-weight:300;letter-spacing:.04em;
  opacity:0;transform:translateX(28px);
  transition:opacity .8s cubic-bezier(.2,.7,.18,1), transform .8s cubic-bezier(.2,.7,.18,1);
  align-self:baseline;
}
.cintro.phase-2 .cw-suffix, .cintro.phase-3 .cw-suffix,
.cintro.phase-4 .cw-suffix{opacity:.7;transform:translateX(0)}

.cintro-sub{
  position:absolute;bottom:calc(50% - 10vw);left:50%;
  transform:translateX(-50%) translateY(14px);
  display:inline-flex;align-items:center;gap:14px;
  font-family:var(--sans);font-size:11px;letter-spacing:.32em;color:var(--accent);
  text-transform:uppercase;opacity:0;
  transition:opacity .8s cubic-bezier(.2,.7,.18,1), transform .8s cubic-bezier(.2,.7,.18,1);
}
.cintro-sub-sep{color:var(--fg-3)}
.cintro.phase-3 .cintro-sub, .cintro.phase-4 .cintro-sub{opacity:.9;transform:translateX(-50%) translateY(0)}

.cintro-exit{
  clip-path:inset(0 0 100% 0);
  transition:clip-path 1.1s cubic-bezier(.7,0,.25,1);
  pointer-events:none;
}
.cintro-exit .cintro-wordmark{transform:translate(calc(-50vw + 56px), calc(-50vh + 36px)) scale(.06);opacity:0}
.cintro-exit .cintro-sub{opacity:0;transform:translateX(-50%) translateY(-12px)}

/* ─── Side rail ─────────────────────────────────────────────── */
.siderail{
  position:fixed;top:0;left:0;bottom:0;width:var(--rail);
  display:flex;flex-direction:column;justify-content:space-between;align-items:center;
  padding:24px 0;z-index:40;
  border-right:1px solid var(--line);background:#000;
}
.siderail-brand{
  width:34px;height:34px;display:flex;align-items:center;justify-content:center;
  color:var(--accent);border:1px solid var(--line-hi);text-decoration:none;
  overflow:hidden;
}
.siderail-brand-glyph{
  font-family:var(--serif);font-weight:400;font-style:italic;
  font-size:21px;line-height:1;
  display:block;
  /* Optical centering: italic K leans right and rides slightly low.
     Nudge left and up so its visual center matches the square's. */
  transform:translate(-1px,-1px);
}
.siderail-bottom{display:flex;flex-direction:column;align-items:center;gap:14px}
.lang-toggle{display:flex;flex-direction:column;align-items:center;gap:4px}
.lang-opt{
  appearance:none;background:transparent;border:0;padding:2px 4px;cursor:pointer;
  font-family:var(--sans);font-size:10px;letter-spacing:.18em;color:var(--fg-3);
  transition:color .2s;
}
.lang-opt:hover{color:var(--fg-1)}
.lang-opt.is-on{color:var(--accent)}
.lang-opt.is-soon{color:var(--fg-4);cursor:not-allowed}
.lang-opt.is-soon:hover{color:var(--fg-3)}
.siderail-foot{font-family:var(--sans);font-size:10px;color:var(--fg-3);letter-spacing:.18em;writing-mode:vertical-rl;transform:rotate(180deg);text-transform:uppercase}
.siderail-items{display:flex;flex-direction:column;gap:22px;align-items:center}
.siderail-item{
  display:flex;flex-direction:column;align-items:center;gap:6px;
  font-family:var(--sans);font-size:11px;letter-spacing:.1em;color:var(--fg-3);
  position:relative;cursor:pointer;transition:color .25s;
  padding:2px 0;font-weight:500;
}
.siderail-item:hover{color:var(--fg)}
.siderail-item .si-num{font-variant-numeric:tabular-nums}
.siderail-item .si-tick{width:1px;height:14px;background:var(--fg-4);transition:height .3s, background .25s}
.siderail-item.active{color:var(--accent)}
.siderail-item.active .si-tick{background:var(--accent);height:28px}
.siderail-item .si-name{
  position:absolute;left:calc(100% + 10px);top:50%;transform:translateY(-50%);
  white-space:nowrap;font-family:var(--sans);font-size:11.5px;letter-spacing:.12em;color:var(--fg);
  background:#000;border:1px solid var(--line);padding:6px 10px;
  opacity:0;transition:opacity .2s;pointer-events:none;text-transform:uppercase;
}
.siderail-item:hover .si-name{opacity:1}

/* ─── Page ──────────────────────────────────────────────────── */
.page{padding-left:var(--rail)}
.section{
  position:relative;padding:var(--section-y) var(--gut);
  width:100%;max-width:var(--max-w);margin:0 auto;
}
.section-head{
  display:flex;align-items:baseline;gap:14px;
  padding-bottom:18px;margin-bottom:48px;border-bottom:1px solid var(--line);
}
.section-num{font-family:var(--sans);font-size:11.5px;letter-spacing:.18em;color:var(--accent);text-transform:uppercase;font-variant-numeric:tabular-nums;font-weight:500}
.section-name{font-family:var(--sans);font-size:11.5px;letter-spacing:.18em;color:var(--fg-2);text-transform:uppercase;font-weight:500}

/* ─── Scene scroll choreography ─────────────────────────────── */
html{scroll-behavior:smooth}
.scene{
  --p:0;--enter:1;--exit:0;--ix:1;
  perspective:1600px;
  perspective-origin:50% 35%;
}
.scene > .section-head,
.scene > .platform-grid,
.scene > .pillars-intro,
.scene > .pillars-grid,
.scene > .hero-stage,
.scene > .speak-grid{
  will-change:transform, opacity, filter;
  transform:
    translate3d(0,
      calc((1 - var(--enter)) * 60px - var(--exit) * 90px),
      calc(var(--exit) * -180px)
    )
    rotateX(calc(var(--exit) * -8deg))
    scale(calc(1 - var(--exit) * 0.06));
  opacity:calc(0.30 + var(--enter) * 0.70 - var(--exit) * 0.95);
  filter:blur(calc(var(--exit) * 8px));
  transform-origin:center top;
}
.scene::before{
  content:"";position:absolute;top:0;left:var(--gut);right:var(--gut);height:1px;
  background:var(--accent);transform-origin:center center;
  transform:scaleX(calc(var(--enter)));
  opacity:calc(var(--enter) * 0.45 - var(--exit) * 0.4);
  transition:transform .18s linear, opacity .18s linear;
  pointer-events:none;z-index:2;
}
.scene-hero::before{display:none}
.network::before{display:none}

/* Hero stage uses the same scheme so the headline pushes back as you scroll. */
.scene-hero .hero-stage{
  transform:
    translate3d(0, calc(var(--exit) * -80px), calc(var(--exit) * -180px))
    rotateX(calc(var(--exit) * -8deg));
  opacity:calc(1 - var(--exit) * 0.9);
  will-change:transform, opacity;
}
.scene-hero .hero-banner{
  opacity:calc(1 - var(--exit) * 0.6);
  transition:opacity .2s linear;
}

/* ─── Buttons ───────────────────────────────────────────────── */
.btn{
  display:inline-flex;align-items:center;gap:10px;
  padding:13px 22px;border-radius:2px;
  font-size:13px;font-weight:500;letter-spacing:.04em;
  font-family:var(--sans);
  transition:transform .15s, background .2s, color .2s, border-color .2s;
  white-space:nowrap;
}
.btn-primary{background:var(--accent);color:#000;border:1px solid var(--accent)}
.btn-primary:hover{background:transparent;color:var(--accent)}
.btn-ghost{background:transparent;border:1px solid var(--line-hi);color:var(--fg)}
.btn-ghost:hover{border-color:var(--accent);color:var(--accent)}
.btn .arrow{transition:transform .2s}
.btn:hover .arrow{transform:translateX(4px)}

/* ─── Reveal ────────────────────────────────────────────────── */
.reveal{opacity:0;transform:translateY(18px);transition:opacity .9s cubic-bezier(.2,.7,.18,1), transform .9s cubic-bezier(.2,.7,.18,1)}
.reveal.in{opacity:1;transform:translateY(0)}
.reveal-d1{transition-delay:.06s}.reveal-d2{transition-delay:.16s}
.reveal-d3{transition-delay:.28s}.reveal-d4{transition-delay:.42s}

/* Replay button removed. */
.replay-btn{display:none !important}

/* ─── HERO ──────────────────────────────────────────────────── */
/* The hero spans the FULL viewport width so the skyline image can
   reach both edges at any monitor size. Inner content rows
   (hero-top, hero-stage, hero-bot) get their own max-width track
   so type and layout stay anchored to the page's editorial grid. */
.hero{
  position:relative;
  min-height:100vh;
  width:100%;
  margin:0;
  padding:36px 0 36px;
  overflow:hidden;
  display:grid;
  grid-template-rows:auto 1fr auto;
  row-gap:32px;
  isolation:isolate;
}
.hero-top,
.hero-stage,
.hero-bot{
  width:100%;
  max-width:var(--max-w);
  margin-left:auto;margin-right:auto;
  padding-left:var(--gut);
  padding-right:var(--gut);
}
.hero-top{grid-row:1;align-self:start;z-index:2;position:relative;
  display:grid;grid-template-columns:1fr auto;gap:24px;align-items:center;
}
.hero-coord{
  font-family:var(--sans);font-size:11.5px;letter-spacing:.18em;color:var(--fg-3);
  text-transform:uppercase;font-weight:500;font-variant-numeric:tabular-nums;
}

/* ─── §03 PILLARS ─────────────────────────────────────────────── */
.pillars-intro{max-width:760px;margin-bottom:64px;display:flex;flex-direction:column;gap:18px}
.pillars-intro .h2 .serif-it{display:block}
.pillars-grid{
  list-style:none;display:grid;grid-template-columns:repeat(3, 1fr);gap:0;
  border-top:1px solid var(--line);border-left:1px solid var(--line);
}
.pillar{
  position:relative;display:flex;flex-direction:column;gap:14px;
  padding:36px 32px;
  border-right:1px solid var(--line);border-bottom:1px solid var(--line);
  background:transparent;
  transition:background .35s ease;
}
.pillar:hover{background:rgba(232,222,200,.025)}
.pl-tag{
  font-family:var(--sans);font-size:10.5px;letter-spacing:.18em;color:var(--accent);
  text-transform:uppercase;font-weight:600;
}
.pl-num{
  position:absolute;top:24px;right:28px;
  font-family:var(--sans);font-size:11px;letter-spacing:.18em;
  color:var(--fg-4);font-variant-numeric:tabular-nums;font-weight:500;
}
.pl-title{
  font-family:var(--serif);font-weight:400;
  font-size:clamp(22px, 1.9vw, 28px);line-height:1.15;letter-spacing:-.018em;color:var(--fg);
  margin-top:8px;
}
.pl-body{
  font-family:var(--serif);font-weight:300;font-size:15.5px;line-height:1.55;color:var(--fg-2);
  letter-spacing:-.003em;
}
@media (max-width:1100px){.pillars-grid{grid-template-columns:repeat(2,1fr)}}
@media (max-width:680px){.pillars-grid{grid-template-columns:1fr}}

/* ── Hero skyline background (São Paulo) ─────────────────────
   Low-opacity ambient backdrop for the whole hero — gives the
   header a São Paulo feel without competing with the content.
   Breaks out of the hero's max-width box via 100vw anchoring so
   high-res screens get a full-bleed photo instead of black bars. */
.hero .hero-skyline{
  position:absolute;
  inset:-1px 0;
  background:url('assets/saopaulo.png') center 35% / cover no-repeat;
  z-index:0;pointer-events:none;
  opacity:0;
  filter:grayscale(1) contrast(1.05) brightness(.9);
  -webkit-mask-image:linear-gradient(180deg, transparent 0%, #000 22%, #000 78%, transparent 100%);
  mask-image:linear-gradient(180deg, transparent 0%, #000 22%, #000 78%, transparent 100%);
  transform:translateY(20px) scale(1.02);
  transition:opacity 2.2s cubic-bezier(.2,.7,.18,1) .35s, transform 2.4s cubic-bezier(.2,.7,.18,1) .35s;
}
.hero.scene-hero[data-intro-done] .hero-skyline{opacity:var(--skyline-opacity, .14);transform:translateY(0) scale(1)}
/* Veil: darkens the corners and the bottom so the headline stays
   legible against the photo. Stronger on the left (copy side),
   lighter on the right (globe side). */
.hero .hero-skyline-veil{
  position:absolute;
  inset:0;
  z-index:0;pointer-events:none;
  background:
    radial-gradient(ellipse 60% 55% at 25% 55%, rgba(0,0,0,.55), transparent 72%),
    linear-gradient(180deg, rgba(0,0,0,.55) 0%, rgba(0,0,0,.15) 28%, rgba(0,0,0,.15) 65%, #000 100%);
}
.hero-stage{grid-row:2;align-self:end;z-index:2;position:relative;
  width:100%;
  display:flex;flex-direction:column;gap:30px;padding-bottom:56px;
}
.hero-stage-grid{
  display:grid;grid-template-columns:minmax(0, 1.1fr) minmax(0, 1.2fr);
  gap:48px;align-items:start;
}
@media (max-width:1100px){
  .hero-stage-grid{grid-template-columns:1fr;gap:32px}
}
.hero-stage-left{display:flex;flex-direction:column;gap:28px;min-width:0}

.hero-globe-stage{
  position:relative;
  width:100%;max-width:620px;
  justify-self:end;align-self:start;
  margin-top:-40px;
  opacity:0;transform:translateY(20px);
  transition:opacity 1s cubic-bezier(.2,.7,.18,1) .5s, transform 1s cubic-bezier(.2,.7,.18,1) .5s;
  pointer-events:auto;
}
.scene-hero[data-intro-done] .hero-globe-stage{opacity:1;transform:translateY(0)}
@media (max-width:1100px){.hero-globe-stage{justify-self:start;max-width:520px}}

.hero-globe-wrap{
  position:relative;width:100%;aspect-ratio:1/1;
  cursor:pointer;
}
.hero-globe{
  position:absolute;inset:0;width:100%;height:100%;
  display:block;
}
.hg-pin{
  position:absolute;transform:translate(0, 0);
  pointer-events:none;
  opacity:0;transition:opacity .25s ease;
  font-family:var(--sans);
  border-left:1px solid var(--accent);
  padding:2px 0 2px 8px;
  display:flex;flex-direction:column;gap:2px;
  white-space:nowrap;
}
.hg-pin.is-left{
  /* Right-anchored label: border becomes a right edge, text shifts to the
     left so the line still touches the pin at its closest corner. */
  border-left:0;border-right:1px solid var(--accent);
  padding:2px 8px 2px 0;
  text-align:right;
  transform:translateX(-100%);
}
.hg-pin.is-secondary{opacity:.85}
.hg-pin.is-secondary .hg-pin-mark{color:var(--fg-2);font-weight:500}
.hg-pin.visible{opacity:1}
.hg-pin.is-secondary.visible{opacity:.9}
.hg-pin-mark{font-size:11px;letter-spacing:.18em;color:var(--accent);text-transform:uppercase;font-weight:600}
.hg-pin-coord{font-size:10px;letter-spacing:.14em;color:var(--fg-3);text-transform:uppercase;font-weight:500}
.hg-caption{
  position:absolute;left:50%;bottom:-26px;
  transform:translateX(-50%);
  display:inline-flex;align-items:center;justify-content:center;
  font-family:var(--sans);font-size:11px;letter-spacing:.18em;color:var(--fg-3);
  text-transform:uppercase;font-weight:500;white-space:nowrap;
}
.hero-bot{grid-row:3;align-self:end;z-index:2;position:relative}
.hero-banner{position:absolute;inset:0;width:100%;height:100%;z-index:0;pointer-events:none;display:block}

/* Headline emphasis word — italic serif accent, slightly larger.
   Reference: editorial pull quotes (Apoc Revelations, The Atlantic),
   used sparingly on one word per headline to carry the emphasis. */
.hero-emph{
  font-style:italic;font-weight:500;color:var(--accent);
  letter-spacing:-.035em;font-feature-settings:"liga","calt";
  position:relative;display:inline-block;padding:0 .04em;
}

/* ── Hero background editorial glyph ─────────────────────────────
   Sits aligned with the content track (not the viewport edge), so
   even though the hero now spans the full viewport, the glyph stays
   within the editorial gutter. */
.hero-bg-glyph{
  position:absolute;
  left:max(calc(var(--gut) - 12px), calc(50vw - var(--max-w) / 2 + var(--gut) - 12px));
  bottom:14%;
  font-family:var(--serif);font-style:italic;font-weight:300;
  font-size:clamp(160px, 26vw, 420px);line-height:.82;letter-spacing:-.05em;
  color:transparent;
  -webkit-text-stroke:1px rgba(232,222,200,.09);
  text-stroke:1px rgba(232,222,200,.09);
  pointer-events:none;user-select:none;
  z-index:0;
  opacity:0;transform:translateY(40px);
  transition:opacity 1.4s cubic-bezier(.2,.7,.18,1) .25s, transform 1.6s cubic-bezier(.2,.7,.18,1) .25s;
  display:flex;flex-direction:column;align-items:flex-start;
}
.scene-hero[data-intro-done] .hero-bg-glyph{opacity:1;transform:translateY(0)}
.hbg-line{display:block}
.hbg-line-2{
  /* "Kav." — the editorial wordmark glyph. Stroke is faintly stronger
     so the reference reads as intentional, not accidental. */
  -webkit-text-stroke:1px rgba(232,222,200,.13);
  text-stroke:1px rgba(232,222,200,.13);
  letter-spacing:-.06em;
}

/* Hero live board removed. */
.hero-body, .hero-board, .hb-corner, .hb-head, .hb-rows, .hbr, .hbr-bar, .hbr-idx, .hbr-meta, .hbr-name, .hbr-role, .hbr-spark, .hbr-val, .hbr-v, .hbr-l, .hb-foot, .hb-dot, .hb-clock, .hb-head-l{display:none !important}
.hero-body{
  flex:1;display:grid;grid-template-columns:1fr 1.05fr;gap:64px;
  align-items:end;margin-top:auto;position:relative;z-index:1;
}
@media (max-width:1100px){.hero-body{grid-template-columns:1fr;gap:48px;align-items:start}}
.hero-board{
  position:relative;
  display:flex;flex-direction:column;gap:0;
  border:1px solid var(--line);
  background:rgba(0,0,0,.42);
  backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);
  opacity:0;transform:translateY(30px);
  transition:opacity 1s cubic-bezier(.2,.7,.18,1) .45s, transform 1s cubic-bezier(.2,.7,.18,1) .45s;
  align-self:end;
}
.scene-hero[data-intro-done] .hero-board{opacity:1;transform:translateY(0)}
.hb-corner{position:absolute;width:12px;height:12px;pointer-events:none}
.hb-corner::before,.hb-corner::after{content:"";position:absolute;background:var(--accent)}
.hb-corner::before{width:12px;height:1px}.hb-corner::after{width:1px;height:12px}
.hb-corner-tl{top:-1px;left:-1px}
.hb-corner-tr{top:-1px;right:-1px}.hb-corner-tr::before{right:0}.hb-corner-tr::after{right:0}
.hb-corner-bl{bottom:-1px;left:-1px}.hb-corner-bl::before{bottom:0}.hb-corner-bl::after{bottom:0}
.hb-corner-br{bottom:-1px;right:-1px}.hb-corner-br::before{right:0;bottom:0}.hb-corner-br::after{right:0;bottom:0}

.hb-head{
  display:flex;justify-content:space-between;align-items:center;
  padding:14px 20px;border-bottom:1px solid var(--line);
  font-family:var(--sans);font-size:10.5px;letter-spacing:.16em;color:var(--fg-3);
  text-transform:uppercase;font-weight:500;
}
.hb-head-l{display:inline-flex;align-items:center;gap:10px;color:var(--fg-2)}
.hb-dot{display:inline-block;width:6px;height:6px;border-radius:50%;background:var(--accent);box-shadow:0 0 10px var(--accent);animation:hbPulse 1.8s ease-in-out infinite}
@keyframes hbPulse{0%,100%{opacity:1}50%{opacity:.35}}
.hb-clock{font-variant-numeric:tabular-nums;color:var(--accent);letter-spacing:.14em}

.hb-rows{display:flex;flex-direction:column}
.hbr{
  position:relative;display:grid;
  grid-template-columns:4px 28px 1fr 120px 96px;
  gap:14px;align-items:center;
  padding:14px 20px 14px 16px;
  border-bottom:1px solid var(--line);
  transition:background .3s ease;
}
.hbr:last-child{border-bottom:0}
.hbr-bar{
  width:2px;height:80%;align-self:center;background:transparent;
  transition:background .3s ease;
}
.hbr.is-hi{background:rgba(232,222,200,.04)}
.hbr.is-hi .hbr-bar{background:var(--accent)}
.hbr-idx{
  font-family:var(--sans);font-size:10.5px;letter-spacing:.16em;
  color:var(--fg-4);font-variant-numeric:tabular-nums;font-weight:500;
  transition:color .3s ease;
}
.hbr.is-hi .hbr-idx{color:var(--accent)}
.hbr-meta{display:flex;flex-direction:column;gap:2px;min-width:0}
.hbr-name{
  font-family:var(--serif);font-weight:400;font-size:20px;line-height:1.05;
  color:var(--fg);letter-spacing:-.01em;
  transition:color .3s ease;
}
.hbr.is-hi .hbr-name{color:var(--accent)}
.hbr-role{
  font-family:var(--sans);font-size:10.5px;letter-spacing:.14em;color:var(--fg-3);
  text-transform:uppercase;font-weight:500;
}
.hbr-spark{width:120px;height:36px;display:block}
.hbr-val{display:flex;flex-direction:column;align-items:flex-end;gap:1px;min-width:0}
.hbr-v{
  font-family:var(--serif);font-weight:400;font-size:18px;line-height:1;
  color:var(--fg);font-variant-numeric:tabular-nums;letter-spacing:-.01em;
  transition:color .3s ease;
}
.hbr.is-hi .hbr-v{color:var(--accent)}
.hbr-l{
  font-family:var(--sans);font-size:9.5px;letter-spacing:.14em;color:var(--fg-4);
  text-transform:uppercase;font-weight:500;text-align:right;
}

.hb-foot{
  display:flex;justify-content:space-between;
  padding:11px 20px;border-top:1px solid var(--line);
  font-family:var(--sans);font-size:10px;letter-spacing:.18em;color:var(--fg-4);
  text-transform:uppercase;font-weight:500;
}

@media (max-width:780px){
  .hero-bg-glyph{font-size:clamp(160px, 60vw, 320px);bottom:30vh;opacity:.4 !important}
  .hbr{grid-template-columns:24px 1fr 80px;padding:10px 14px}
  .hbr-bar, .hbr-spark{display:none}
}

.hero > *{position:relative;z-index:1}
.hero-top{display:grid;grid-template-columns:1fr auto;gap:24px;align-items:start}
.hero-loc{font-family:var(--sans);font-size:11.5px;letter-spacing:.12em;color:var(--fg-3);text-transform:uppercase;display:flex;align-items:center;gap:12px;flex-wrap:wrap;font-weight:500}
.hero-loc .dot{display:inline-block;width:6px;height:6px;background:var(--accent);margin-right:6px;border-radius:50%}
.hero-loc .sep{color:var(--fg-4)}
.hero-title{
  margin:0;font-family:var(--serif);font-weight:300;
  font-size:clamp(42px,6.6vw,108px);line-height:1.0;letter-spacing:-.025em;color:var(--fg);
}
.hero-title .row{
  display:block;overflow:hidden;opacity:0;transform:translateY(36px) skewY(2.5deg);
  transition:opacity .9s cubic-bezier(.2,.7,.18,1), transform 1s cubic-bezier(.2,.7,.18,1);
}
.scene-hero[data-intro-done] .hero-title .row{opacity:1;transform:translateY(0) skewY(0)}
.scene-hero[data-intro-done] .row-1{transition-delay:.06s}
.scene-hero[data-intro-done] .row-2{transition-delay:.22s}
.scene-hero[data-intro-done] .row-3{transition-delay:.40s}

.hero-ctas{
  display:flex;gap:12px;flex-wrap:wrap;margin-top:6px;
  opacity:0;transform:translateY(20px);
  transition:opacity .8s cubic-bezier(.2,.7,.18,1) .58s, transform .8s cubic-bezier(.2,.7,.18,1) .58s;
}
.scene-hero[data-intro-done] .hero-ctas{opacity:1;transform:translateY(0)}

.hero-bot{
  display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:16px;
  padding-top:18px;border-top:1px solid var(--line);margin-top:42px;
  font-family:var(--sans);font-size:12.5px;color:var(--fg-3);letter-spacing:.02em;
}
.hero-bot .hb-l{font-style:italic;font-family:var(--serif);color:var(--fg-2);font-size:15px;letter-spacing:0}
.hero-bot .scroll-hint{display:inline-flex;align-items:center;gap:10px;color:var(--fg-2);text-transform:uppercase;letter-spacing:.14em;font-weight:500;font-size:11.5px}
.scroll-hint .sh-arrow{width:12px;height:1px;background:var(--accent);position:relative;display:inline-block;animation:shArrow 2.4s ease-in-out infinite}
.scroll-hint .sh-arrow::after{content:"";position:absolute;right:-2px;top:-3px;width:6px;height:6px;border-right:1px solid var(--accent);border-bottom:1px solid var(--accent);transform:rotate(-45deg)}
@keyframes shArrow{0%,100%{transform:translateY(0)}50%{transform:translateY(3px)}}

/* ─── PLATFORM ──────────────────────────────────────────────── */
.platform-grid{display:grid;grid-template-columns:1fr 1.1fr;gap:64px;align-items:start}
@media (max-width:1000px){.platform-grid{grid-template-columns:1fr;gap:32px}}
.platform-bullets{list-style:none;display:flex;flex-direction:column}
.platform-bullets li{
  display:grid;grid-template-columns:42px 1fr;gap:14px;align-items:start;
  padding:18px 0;border-top:1px solid var(--line);font-size:15px;color:var(--fg-2);line-height:1.55;
}
.platform-bullets li:last-child{border-bottom:1px solid var(--line)}
.platform-bullets li b{color:var(--fg);font-weight:500}
.platform-bullets li .chk{font-family:var(--sans);font-size:11.5px;color:var(--accent);letter-spacing:.16em;padding-top:3px;font-weight:600}

/* ─── NETWORK · horizontal scroll-locked strip ──────────────── */
.network{position:relative;height:300vh;padding:0;max-width:none;margin:0}
.network-pin{position:sticky;top:0;height:100vh;width:100%;overflow:hidden;display:flex;align-items:center;background:#000}
.network-strip{display:flex;align-items:stretch;flex-shrink:0;height:100%;padding:80px 0 60px;will-change:transform}

.net-intro{
  flex:0 0 auto;width:56vw;padding:0 var(--gut);
  display:flex;flex-direction:column;justify-content:center;gap:22px;
  border-right:1px solid var(--line);
}
.net-intro .ni-num{font-family:var(--sans);font-size:11.5px;color:var(--accent);letter-spacing:.18em;text-transform:uppercase;font-weight:600}
.net-intro h2{font-family:var(--serif);font-weight:300;font-size:clamp(38px,5.2vw,76px);line-height:1.0;letter-spacing:-.025em}
.net-intro p{font-family:var(--serif);font-size:18px;line-height:1.5;color:var(--fg-2);max-width:42ch}
.net-intro .ni-meta{font-family:var(--sans);font-size:11px;color:var(--fg-3);letter-spacing:.16em;text-transform:uppercase;margin-top:auto;padding-top:18px;border-top:1px solid var(--line);width:fit-content}

.dossier{
  flex:0 0 auto;width:62vw;max-width:960px;
  padding:0 calc(var(--gut) + 18px);position:relative;
  display:flex;flex-direction:column;gap:16px;
  border-right:1px solid var(--line);
  transition:filter .6s ease;
  filter:saturate(0.85) brightness(0.92);
  justify-content:center;
}
.dossier.is-active{filter:none}

.dossier .d-wm{
  position:absolute;top:36px;right:calc(var(--gut) + 18px);
  font-family:var(--serif);font-weight:300;font-style:italic;
  font-size:clamp(160px,20vw,280px);line-height:1;letter-spacing:-.04em;
  color:rgba(245,243,238,.045);pointer-events:none;user-select:none;z-index:0;
}
.dossier > *{position:relative;z-index:1}

.d-head{
  display:grid;grid-template-columns:auto 1fr auto;gap:18px;align-items:center;
  padding-bottom:12px;border-bottom:1px solid var(--line);
  font-family:var(--sans);font-size:11.5px;letter-spacing:.14em;text-transform:uppercase;font-weight:500;
}
.d-h-l{display:flex;align-items:center;gap:14px}
.d-id{color:var(--accent);font-variant-numeric:tabular-nums}
.d-role{color:var(--fg-2)}
.d-domain{color:var(--fg-3);text-transform:lowercase;letter-spacing:.02em}

.d-body{display:flex;flex-direction:column;gap:14px;max-width:46ch}
/* Dossier logo — appears above the company name. Real logos render as
   <img>; companies without a logo get a square placeholder showing the
   first letter (so the column still reads as a logo slot). */
.d-logo{
  display:inline-flex;align-items:center;justify-content:flex-start;
  height:40px;width:auto;
  margin-bottom:4px;
  border-radius:3px;
  overflow:hidden;
}
.d-logo img{
  display:block;height:100%;width:auto;object-fit:contain;
  filter:brightness(1) contrast(1.02);
}
.d-logo[style*="background"]{padding:0 12px}
.d-logo-placeholder{
  height:40px;width:40px;
  align-items:center;justify-content:center;
  border:1px solid var(--line-hi);
  color:var(--fg-3);font-family:var(--serif);font-style:italic;
  font-size:22px;line-height:1;font-weight:400;
}
.d-name{font-family:var(--serif);font-weight:300;font-size:clamp(56px,7vw,108px);line-height:.96;letter-spacing:-.03em;color:var(--fg)}
.d-sector{font-family:var(--sans);font-size:11.5px;color:var(--accent);letter-spacing:.16em;text-transform:uppercase;font-weight:600}
.d-headline{font-family:var(--serif);font-style:italic;font-weight:300;font-size:clamp(20px,1.8vw,26px);line-height:1.25;color:var(--fg);letter-spacing:-.012em;max-width:34ch}
.d-desc{color:var(--fg-2);font-size:15px;line-height:1.6;max-width:48ch}

.d-foot{
  display:grid;grid-template-columns:1fr auto;gap:16px;align-items:center;
  padding-top:14px;margin-top:6px;border-top:1px solid var(--line);
  font-family:var(--sans);font-size:11.5px;color:var(--fg-3);letter-spacing:.06em;text-transform:uppercase;font-weight:500;
}
.d-visit{
  color:var(--accent);border-bottom:1px solid var(--accent);padding-bottom:2px;
  transition:letter-spacing .2s;
}
.d-visit:hover{letter-spacing:.1em}
.d-visit.is-muted{color:var(--fg-4);border-bottom-color:var(--fg-4);cursor:default}
.d-visit.is-muted:hover{letter-spacing:.06em}

/* ── Network · mobile vertical stack ─────────────────────────────
   On phones, the horizontal scroll-locked filmstrip collapses to a
   normal column. The pin is unpinned; each company becomes a card. */
@media (max-width:780px){
  .network{height:auto;min-height:0}
  .network-pin{position:static;height:auto;display:block;padding:48px 0 24px}
  .network-strip{
    flex-direction:column;align-items:stretch;
    height:auto;padding:0;
    will-change:auto;
    transform:none !important;
  }
  .net-intro{
    width:100%;padding:0 var(--gut) 32px;
    border-right:0;border-bottom:1px solid var(--line);
    margin-bottom:24px;
  }
  .net-intro h2{font-size:clamp(32px,8vw,48px)}
  .dossier{
    width:100%;max-width:none;
    padding:32px var(--gut);
    border-right:0;border-bottom:1px solid var(--line);
    filter:none;justify-content:flex-start;
    gap:14px;
  }
  .dossier:last-of-type{border-bottom:0}
  .dossier .d-wm{
    position:absolute;top:18px;right:var(--gut);
    font-size:clamp(110px,30vw,160px);
  }
  .d-name{font-size:clamp(44px,11vw,68px)}
  .d-headline{font-size:18px}
  .d-desc{font-size:14.5px}
}

.network-progress{position:absolute;left:var(--gut);right:var(--gut);bottom:28px;height:1px;background:var(--line)}
.network-progress .np-fill{display:block;height:100%;background:var(--accent);transform-origin:left center;transform:scaleX(0);transition:transform .12s linear}
.network-progress .np-current{
  position:absolute;top:-26px;left:0;
  font-family:var(--sans);font-size:11px;letter-spacing:.16em;color:var(--fg-2);text-transform:uppercase;font-weight:500;
}

/* ─── SPEAK ─────────────────────────────────────────────────── */
.speak-grid{display:grid;grid-template-columns:1.15fr 1fr;gap:64px;align-items:start}
@media (max-width:1000px){.speak-grid{grid-template-columns:1fr;gap:40px}}
.speak-statement{
  font-family:var(--serif);font-weight:300;
  font-size:clamp(30px,4.2vw,64px);line-height:1.04;letter-spacing:-.025em;
}
.speak-statement .row{display:block;overflow:hidden}
.speak-rows{display:flex;flex-direction:column;border-top:1px solid var(--line)}
.speak-row{
  display:grid;grid-template-columns:120px 1fr auto;gap:18px;align-items:center;
  padding:20px 0;border-bottom:1px solid var(--line);
  transition:padding .2s, background .2s;
}
.speak-row:hover{background:#080808;padding-left:12px;padding-right:12px}
.speak-row .sr-l{font-family:var(--sans);font-size:11.5px;letter-spacing:.16em;color:var(--accent);text-transform:uppercase;font-weight:600}
.speak-row .sr-m{font-size:14.5px;color:var(--fg)}
.speak-row .sr-r{font-family:var(--sans);font-size:12px;letter-spacing:.02em;color:var(--fg-2)}
.speak-locs{margin-top:22px;display:flex;flex-direction:column;gap:6px;font-family:var(--sans);font-size:11.5px;letter-spacing:.06em;color:var(--fg-3);text-transform:uppercase;font-weight:500}

/* Interlude: full-bleed photo, breaks out of the max-width track. */
.interlude{
  position:relative;
  width:100vw;
  /* Break out of the page's --rail padding so the photo reaches both
     viewport edges. The page itself is just `padding-left:--rail`, so
     a negative left margin matching that pushes us back to viewport
     x=0; width:100vw then carries us all the way across. */
  margin-left:calc(-1 * var(--rail));
  margin-right:0;
  height:clamp(420px, 62vh, 720px);
  overflow:hidden;
  display:flex;align-items:flex-end;
  isolation:isolate;
  /* Vertical breathing room separates the photo from the
     sections above and below it. */
  margin-top:calc(var(--section-y) * 0.4);
  margin-bottom:calc(var(--section-y) * 0.4);
}
@media (max-width:780px){
  .interlude{
    /* --rail is 0 on mobile, so the breakout simplifies to viewport
       edges automatically. Just adjust height. */
    height:clamp(340px, 56vh, 520px);
  }
  /* Mobile: anchor the photo's left edge so the "K" wall enters the
     frame regardless of the desktop focal slider. Overrides the
     --office-focal-x CSS var. */
  .interlude-media{background-position:0% center !important}
}
.interlude-media{
  position:absolute;inset:0;
  /* Focal point biased toward the left of the source photo by default
     so the "K" letter on the office wall stays anchored. Tweakable via
     --office-focal-x. */
  background-position:var(--office-focal-x, 25%) center;
  background-size:cover;
  background-repeat:no-repeat;
  filter:grayscale(1) contrast(1.05) brightness(.78);
  z-index:0;
  /* Slow Ken-Burns drift so the still photo has subtle life. */
  transform:scale(1.04);
  transition:transform 2.4s cubic-bezier(.2,.7,.18,1);
}
.interlude:hover .interlude-media{transform:scale(1.06)}
.interlude-veil{
  position:absolute;inset:0;z-index:1;pointer-events:none;
  background:
    linear-gradient(180deg, rgba(0,0,0,.55) 0%, rgba(0,0,0,.0) 18%, rgba(0,0,0,.0) 55%, rgba(0,0,0,.85) 100%),
    linear-gradient(90deg, rgba(0,0,0,.55) 0%, rgba(0,0,0,.0) 40%, rgba(0,0,0,.0) 60%, rgba(0,0,0,.5) 100%);
}
.interlude-grid{
  position:relative;z-index:2;
  width:100%;max-width:var(--max-w);
  margin:0 auto;
  padding:0 var(--gut) clamp(32px, 5vw, 64px);
  display:grid;
  grid-template-columns:auto 1fr auto;
  gap:32px;align-items:end;
}
@media (max-width:780px){
  .interlude-grid{
    grid-template-columns:1fr;gap:14px;
    padding-bottom:28px;
  }
}
.il-eyebrow{
  font-family:var(--sans);font-size:11.5px;letter-spacing:.18em;
  color:var(--accent);text-transform:uppercase;font-weight:600;
  padding-bottom:6px;border-bottom:1px solid var(--accent);
  align-self:end;
  white-space:nowrap;
}
.il-caption{
  font-family:var(--serif);font-style:italic;font-weight:300;
  font-size:clamp(20px, 2.2vw, 32px);line-height:1.25;
  color:var(--fg);letter-spacing:-.015em;
  max-width:48ch;text-wrap:pretty;
}
.il-meta{
  font-family:var(--sans);font-size:11px;letter-spacing:.18em;
  color:var(--fg-3);text-transform:uppercase;font-weight:500;
  align-self:end;
  white-space:nowrap;
}
/* The interlude participates in the scene scroll choreography. We
   target the grid (caption rail) and the media (photo) so both
   recede/blur on exit, but the photo with a gentler curve so it
   stays atmospheric while the text gets out of the way. */
.scene-interlude .interlude-grid{
  will-change:transform, opacity, filter;
  transform:
    translate3d(0,
      calc((1 - var(--enter)) * 30px - var(--exit) * 60px),
      calc(var(--exit) * -120px)
    )
    rotateX(calc(var(--exit) * -6deg));
  opacity:calc(0.45 + var(--enter) * 0.55 - var(--exit) * 0.95);
  filter:blur(calc(var(--exit) * 6px));
  transform-origin:center top;
}
.scene-interlude::before{display:none}
.end-slate{padding:56px var(--gut) 28px;border-top:1px solid var(--line);max-width:var(--max-w);margin:0 auto;display:flex;flex-direction:column;gap:32px}
.end-top{display:grid;grid-template-columns:2fr 1fr 1fr;gap:36px}
@media (max-width:780px){.end-top{grid-template-columns:1fr 1fr}}
.end-col h5{font-family:var(--sans);font-size:11px;letter-spacing:.16em;color:var(--fg-3);text-transform:uppercase;margin-bottom:14px;font-weight:600}
.end-col ul{list-style:none;display:flex;flex-direction:column;gap:8px}
.end-col a{font-size:14px;color:var(--fg-2);transition:color .15s}
.end-col a:hover{color:var(--fg)}
.end-lead{font-family:var(--serif);color:var(--fg-2);font-size:15.5px;line-height:1.5;max-width:36ch}
.end-bot{display:flex;justify-content:space-between;padding-top:18px;border-top:1px solid var(--line);font-family:var(--sans);font-size:11.5px;letter-spacing:.06em;color:var(--fg-3);text-transform:uppercase;flex-wrap:wrap;gap:14px;font-weight:500}

@media (max-width:780px){
  :root{--rail:0px}
  .siderail{display:none}
  .page{padding-left:0}
}

/* ─── Tweakable visibility toggles ─────────────────────────────
   Body classes mutated by the Tweaks panel hide individual
   decorative layers without re-rendering the page. */
body.hide-kav-glyph .hero-bg-glyph{display:none}
body.hide-skyline .hero-skyline,
body.hide-skyline .hero-skyline-veil{display:none}
body.hide-bench #bench{display:none}
