:root{
  --midnight:#1C2B3A; --ink-deep:#0E1822; --ocean:#5F8190;
  --ocean-lt:#8AADB8; --ocean-dk:#2E4A5A;
  --mist:#E2F0F0; --white:#FFFFFF; --off:#F7F7F5; --stone:#EDECEA;
  --grid:rgba(28,43,58,.045); --grid-dk:rgba(95,129,144,.07);
  --rule:rgba(28,43,58,.09); --rule-dk:rgba(95,129,144,.12);
  --charcoal:#141414; --ink:rgba(20,20,20,.94); --ink-mut:rgba(20,20,20,.82);
  --f-disp:'Source Sans 3','Nimbus Sans','Helvetica Neue',sans-serif;
  --f-nav:'Inter','Nimbus Sans','Helvetica Neue',sans-serif;
  --f-mono:'JetBrains Mono','Roboto Mono',monospace;
  --f-body:'Roboto','Source Sans 3',sans-serif;
  --ease:cubic-bezier(.16,1,.3,1);
  --ease-in:cubic-bezier(.7,0,.84,0);
  --gx:64px;
}
*,*::before,*::after{box-sizing:border-box;margin:0;padding:0;}
html{font-size:16px;overflow-x:hidden;scroll-behavior:smooth;}
body{background:var(--off);color:var(--charcoal);font-family:var(--f-body);font-weight:300;overflow-x:hidden;cursor:none;}
img{display:block;max-width:100%;}

/* Visually-hidden helper — used to attach screen-reader-only
   announce regions (aria-live) to interactive diagrams. Preserves
   reader access while keeping the element out of the visual flow. */
.a11y-only{
  position:absolute !important;
  width:1px !important;height:1px !important;
  padding:0 !important;margin:-1px !important;
  overflow:hidden !important;
  clip:rect(0,0,0,0) !important;
  white-space:nowrap !important;
  border:0 !important;
}

/* CURSOR — z-indexes raised above any modal (99999) so the
   follower remains visible over the booking and principal modals
   instead of stacking under their backdrops. pointer-events:none
   means they never block clicks even when on top. */
#cd{position:fixed;top:0;left:0;width:6px;height:6px;background:var(--ocean);border-radius:50%;pointer-events:none;z-index:2147483647;transition:width .2s,height .2s,background .2s;will-change:transform;}
#cr{position:fixed;top:0;left:0;width:32px;height:32px;border:1px solid rgba(95,129,144,.45);border-radius:50%;pointer-events:none;z-index:2147483646;transition:width .35s var(--ease),height .35s var(--ease);will-change:transform;}
body.ch #cd{width:11px;height:11px;background:var(--ocean-lt);}
body.ch #cr{width:48px;height:48px;}

/* CANVAS */
#cvs{position:fixed;inset:0;pointer-events:none;z-index:1;opacity:.32;}

/* FIXED HIMARK WORDMARK (top center) */
/* Plain text wordmark — replaces the image logo.
   Cream-on-dark by default; flips to midnight when `body.light-nav`
   activates as the page scrolls past the hero. The wordmark sits
   centered at the top, sized for restrained editorial presence. */
#brand-mark{
  position:fixed;top:8px;left:50%;transform:translateX(-50%);
  z-index:1000;
  font-family:var(--f-disp);
  font-size:15px;
  font-weight:700;
  letter-spacing:.32em;
  text-transform:uppercase;
  color:var(--off);
  text-decoration:none;cursor:none;
  display:inline-block;
  line-height:1;
  padding:6px 14px 4px;
  transition:color .55s var(--ease), opacity .4s var(--ease);
}
.brand-svg{display:none;}
.brand-wm{
  /* now visible — the wordmark IS the brand mark */
  display:inline-block;
}
/* Inverted V — a real "V" character rotated 180° inside a nested
   span, so the upside-down V has identical stroke weight, height,
   and width to the surrounding HIM_RK letters (which the bare Λ
   glyph does not — its cap-height and stroke are off in many fonts).

   transform-origin math for Source Sans 3 with line-height:1:
     baseline at  0.75em from box top
     cap-line at  0.09em from box top
     V optical centre = (0.09 + 0.75) / 2 ≈ 0.42em → 42%
   Putting the pivot at the V's optical centre means after 180°
   rotation the V's wings land exactly on the baseline with the
   rest of HIM_RK.

   Horizontal spacing fix:
   Browsers stop applying the parent's letter-spacing at inline-block
   boundaries, so the rotated V loses tracking on both sides — visibly
   pinching it against R. Setting letter-spacing:0 inside removes any
   internal trailing space, and margin-inline:0.32em restores symmetric
   tracking that matches the .32em letter-spacing on the rest of HIM_RK. */
.brand-v{
  display:inline-block;
  transform:rotate(180deg);
  transform-origin:50% 42%;
  letter-spacing:0;
  margin-left:.18em;
  margin-right:.4em;    /* push it away from R */
}
body.light-nav #brand-mark{
  /* cream-on-dark → midnight-on-light when the page scrolls past the hero */
  color:var(--midnight);
}

/* Image-based brand mark — replaces the text wordmark.
   The PNG is a white-on-transparent logo, so filter:invert(1) flips
   it to dark when the page scrolls past the hero (body.light-nav). */
#brand-mark img{
  display:block;
  height:28px;
  width:auto;
  user-select:none;
  -webkit-user-drag:none;
  transition:filter .55s var(--ease), opacity .4s var(--ease);
}
body.light-nav #brand-mark img{
  filter:invert(1);
}

/* ============================================================
   FLOATING GLASS MENU
   Trigger is a small fixed pill in the top-right; clicking it opens
   a frosted-glass panel that floats below the trigger with all index
   links. HIMARK keeps its mono-coord, italic-em, ocean-accent details
   inside an Apple-style Liquid Glass surface.
   Backwards-compatible with the existing markup (same IDs / class
   names) so no per-page HTML changes were needed.
   ============================================================ */

/* ---------- TRIGGER: small floating glass pill (bottom-centre) ----------
   Vertical centre is aligned with the #mute-btn (50px circle at bottom:36px
   → centre at 61px from viewport bottom). Trigger pill is ~35px tall, so
   bottom:43px puts its centre at 60.5px — visually flush with the music
   button. Mobile uses the same alignment math against the 42px circle
   at bottom:18px → bottom:23px on the trigger. */
#menu-trigger{
  position:fixed;
  bottom:43px;
  left:50%;
  top:auto; right:auto;
  transform:translateX(-50%);
  z-index:9998;
  height:auto; width:auto;          /* override the old full-height layout */
  display:inline-flex;
  flex-direction:row;
  align-items:center;
  justify-content:center;
  gap:10px;
  padding:10px 18px 11px;
  /* Glass */
  background:rgba(28,43,58,.42);
  -webkit-backdrop-filter:blur(20px) saturate(140%);
          backdrop-filter:blur(20px) saturate(140%);
  border:1px solid rgba(255,255,255,.14);
  border-radius:999px;
  box-shadow:
    0 8px 24px rgba(0,0,0,.22),
    0 1px 0 rgba(255,255,255,.06) inset;
  cursor:none;
  transition:
    background .35s var(--ease),
    border-color .35s var(--ease),
    transform .35s var(--ease),
    bottom .4s var(--ease),
    box-shadow .35s var(--ease);
}
#menu-trigger::before{ content:none; }   /* kill the old big-pill background */

/* When the cookies banner is visible, lift the trigger above it.
   :has() is supported in all current evergreen browsers. */
body:has(#cookies-banner.on) #menu-trigger{ bottom:200px; }
body:has(#cookies-banner.on) #menu-panel { bottom:252px; }
@media (max-width:880px){
  body:has(#cookies-banner.on) #menu-trigger{ bottom:280px; }
  body:has(#cookies-banner.on) #menu-panel { bottom:332px; }
}

/* Subtle attention pulse — a hairline ring grows outward from the
   pill boundary and fades, then repeats. Uses ::after with a
   transparent fill (only the border is visible) so the trigger's
   own text isn't covered. */
#menu-trigger::after{
  content:'';
  position:absolute;
  inset:-1px;
  border-radius:999px;
  border:1px solid transparent;
  pointer-events:none;
  animation:menuPulse 2.8s var(--ease-out) infinite;
}
@keyframes menuPulse{
  0%{
    transform:scale(1);
    border-color:rgba(138,173,184,.55);
    opacity:.9;
  }
  85%, 100%{
    transform:scale(1.32);
    border-color:rgba(138,173,184,0);
    opacity:0;
  }
}
body.light-nav #menu-trigger::after{
  /* switch to the darker-tint ring on light backgrounds */
  animation-name:menuPulseLight;
}
@keyframes menuPulseLight{
  0%{
    transform:scale(1);
    border-color:rgba(28,43,58,.42);
    opacity:.85;
  }
  85%, 100%{
    transform:scale(1.32);
    border-color:rgba(28,43,58,0);
    opacity:0;
  }
}
/* Pause the pulse while the user is interacting with the trigger */
#menu-trigger:hover::after{
  animation:none;
  opacity:0;
}

#menu-trigger:hover{
  background:rgba(28,43,58,.62);
  border-color:rgba(255,255,255,.22);
  /* Lift slightly while keeping the horizontal centring */
  transform:translateX(-50%) translateY(-2px);
  box-shadow:
    0 14px 32px rgba(0,0,0,.30),
    0 1px 0 rgba(255,255,255,.10) inset;
}
body.light-nav #menu-trigger{
  background:rgba(247,247,245,.55);
  border-color:rgba(28,43,58,.10);
  box-shadow:
    0 8px 24px rgba(28,43,58,.10),
    0 1px 0 rgba(255,255,255,.45) inset;
}
body.light-nav #menu-trigger:hover{
  background:rgba(247,247,245,.78);
  border-color:rgba(28,43,58,.16);
  box-shadow:
    0 14px 32px rgba(28,43,58,.14),
    0 1px 0 rgba(255,255,255,.55) inset;
}

/* Pieces inside the trigger pill — flip orientation back to horizontal,
   restyle for a compact mono+sans pairing. */
.mt-num,
.mt-line,
.mt-label{ position:relative; z-index:1; }

.mt-num{
  font-family:var(--f-mono);
  font-size:9px; font-weight:500;
  letter-spacing:.12em;
  color:rgba(247,247,245,.62);
  writing-mode:horizontal-tb;
  transform:none;
  transition:color .3s;
}
.mt-line{
  width:1px; height:11px;
  background:rgba(247,247,245,.32);
  transition:background .3s, height .3s;
}
.mt-label{
  font-family:var(--f-nav);
  font-size:11px; font-weight:600;
  letter-spacing:.22em;
  text-transform:uppercase;
  color:rgba(247,247,245,.92);
  writing-mode:horizontal-tb;
  transform:none;
  transition:color .3s;
}
body.light-nav .mt-num   { color:rgba(28,43,58,.55); }
body.light-nav .mt-line  { background:rgba(28,43,58,.30); }
body.light-nav .mt-label { color:var(--midnight); }

#menu-trigger:hover .mt-label{ color:var(--off); }
#menu-trigger:hover .mt-line { background:rgba(247,247,245,.55); }
body.light-nav #menu-trigger:hover .mt-label{ color:var(--midnight); }
body.light-nav #menu-trigger:hover .mt-line { background:rgba(28,43,58,.45); }

/* ---------- OVERLAY: very subtle — just enough to dim, not blackout ---------- */
.menu-overlay{
  position:fixed; inset:0;
  background:rgba(8,15,22,0);
  z-index:9989;
  pointer-events:none;
  transition:background .45s var(--ease);
}
.menu-overlay.on{
  background:rgba(8,15,22,.22);
  pointer-events:all;
}

/* ---------- PANEL: floating glass card (pops up from the trigger) ---------- */
#menu-panel{
  position:fixed;
  /* Sits just above the trigger pill at bottom-centre.
     trigger bottom 43px + trigger height ~35px + 15px gap = 93px */
  bottom:93px;
  left:50%;
  top:auto; right:auto;
  width:340px;
  max-width:calc(100vw - 44px);
  height:auto;
  max-height:calc(100vh - 120px);
  overflow:hidden;
  z-index:9990;

  /* Glass surface */
  background:rgba(20,32,46,.55);
  -webkit-backdrop-filter:blur(28px) saturate(150%);
          backdrop-filter:blur(28px) saturate(150%);
  border:1px solid rgba(255,255,255,.12);
  border-radius:22px;
  box-shadow:
    0 28px 64px rgba(0,0,0,.36),
    0 1px 0 rgba(255,255,255,.08) inset;

  /* Hidden state: nudged DOWN + slightly smaller so it grows up
     from the trigger when .open. translateX(-50%) handles
     horizontal centring at all times. */
  transform:translateX(-50%) translateY(10px) scale(.96);
  transform-origin:bottom center;
  opacity:0;
  pointer-events:none;
  padding:0;
  display:flex;
  flex-direction:column;
  transition:
    opacity .35s var(--ease),
    transform .4s var(--ease),
    bottom .4s var(--ease);
}
#menu-panel.open{
  opacity:1;
  transform:translateX(-50%) translateY(0) scale(1);
  pointer-events:auto;
}
body.light-nav #menu-panel{
  background:rgba(247,247,245,.68);
  border-color:rgba(28,43,58,.10);
  box-shadow:
    0 28px 64px rgba(28,43,58,.18),
    0 1px 0 rgba(255,255,255,.65) inset;
}

/* Decorative grid lines from the old fullscreen layout — not needed
   on a small floating panel. */
.menu-bg-grid{ display:none; }

/* Panel header: coord on the left, close on the right. */
.menu-coord-tl{
  position:static;
  display:block;
  padding:14px 18px 4px;
  font-family:var(--f-mono);
  font-size:9px; font-weight:500;
  letter-spacing:.16em;
  color:rgba(138,173,184,.78);
  text-transform:uppercase;
}
.menu-coord-tr{
  position:absolute;
  top:10px; right:10px;
  display:inline-flex; align-items:center; justify-content:center;
  width:28px; height:28px;
  padding:0;
  font-family:var(--f-mono);
  font-size:0;                                /* hide the "CLOSE" text */
  letter-spacing:0;
  color:rgba(247,247,245,.7);
  background:transparent;
  border:1px solid rgba(255,255,255,.16);
  border-radius:999px;
  cursor:none;
  transition:background .25s, color .25s, border-color .25s;
}
.menu-coord-tr::before{
  content:'\00d7';                             /* clean × glyph */
  font-family:var(--f-disp);
  font-size:18px; font-weight:300;
  line-height:1;
}
.menu-coord-tr:hover{
  background:rgba(255,255,255,.10);
  color:var(--off);
  border-color:rgba(255,255,255,.30);
}
body.light-nav .menu-coord-tl{ color:rgba(46,74,90,.78); }
body.light-nav .menu-coord-tr{
  color:rgba(28,43,58,.62);
  border-color:rgba(28,43,58,.16);
}
body.light-nav .menu-coord-tr:hover{
  background:rgba(28,43,58,.08);
  color:var(--midnight);
  border-color:rgba(28,43,58,.30);
}

/* Index list — compact rows inside the glass card. */
.menu-list{
  list-style:none;
  margin:6px 0 0;
  padding:6px 8px 8px;
  position:relative; z-index:1;
  display:flex; flex-direction:column;
  gap:2px;
}
.menu-list li{ margin:0; }

.menu-item{
  display:grid;
  grid-template-columns:34px 1fr 18px;
  gap:12px;
  align-items:center;
  padding:10px 12px;
  border:none;
  border-radius:12px;
  cursor:none;
  text-decoration:none;
  position:relative;
  overflow:hidden;
  background:transparent;
  transition:
    background .25s ease,
    transform .35s var(--ease),
    padding-left .35s var(--ease);
}
.menu-item:first-child{ border-top:none; }
.menu-item::before{
  content:none;            /* drop the swipe background — using BG only now */
}
.menu-item:hover{
  background:rgba(255,255,255,.08);
  padding-left:16px;
}
body.light-nav .menu-item:hover{
  background:rgba(28,43,58,.06);
}
.menu-item > *{ position:relative; z-index:1; }

.mi-num{
  font-family:var(--f-mono);
  font-size:10px; font-weight:500;
  letter-spacing:.10em;
  color:rgba(138,173,184,.65);
  transition:color .3s;
}
.mi-name{
  display:inline-flex;
  align-items:baseline;
  gap:8px;
  font-family:var(--f-disp);
  font-size:17px;
  font-weight:600;
  letter-spacing:-.002em;
  color:rgba(247,247,245,.95);
  line-height:1.15;
  transition:color .3s, transform .35s var(--ease);
}
.mi-name em{
  font-style:italic;
  font-weight:300;
  font-size:11px;
  letter-spacing:.06em;
  color:rgba(138,173,184,.7);
}
.mi-arrow{
  font-family:var(--f-mono);
  font-size:13px;
  color:rgba(138,173,184,.55);
  opacity:0;
  transform:translateX(-6px);
  transition:opacity .25s, transform .35s var(--ease), color .25s;
}
.menu-item:hover .mi-name{ color:var(--off); }
.menu-item:hover .mi-num { color:rgba(226,240,240,.85); }
.menu-item:hover .mi-arrow{
  opacity:1;
  transform:translateX(0);
  color:var(--off);
}
body.light-nav .mi-num   { color:rgba(46,74,90,.7); }
body.light-nav .mi-name  { color:var(--midnight); }
body.light-nav .mi-name em{ color:rgba(46,74,90,.55); }
body.light-nav .mi-arrow { color:rgba(46,74,90,.55); }
body.light-nav .menu-item:hover .mi-name { color:var(--midnight); }
body.light-nav .menu-item:hover .mi-num  { color:var(--ocean-dk); }
body.light-nav .menu-item:hover .mi-arrow{ color:var(--midnight); }

/* SUB-ITEMS — indented under a parent menu item. Used for Counsel
   sitting under Intake. Hidden by default; revealed when the user
   hovers the parent (Intake) <li> or the sub <li> itself. On touch
   devices (no :hover capability) the sub stays visible permanently.
   When the user is ON the sessions page (body[data-page="sessions"])
   Counsel stays visible so the menu reflects current location. */

/* Hidden state */
.menu-item-sub{
  padding-left:48px;
  grid-template-columns:48px 1fr 18px;
  opacity:0;
  max-height:0;
  padding-top:0;
  padding-bottom:0;
  margin:0;
  pointer-events:none;
  transform:translateX(-10px);
  overflow:hidden;
  transition:
    opacity .35s var(--ease),
    max-height .4s var(--ease),
    transform .4s var(--ease),
    padding .3s var(--ease);
}
/* Reveal — when the previous <li> (containing Intake) is hovered,
   or when the user is hovering the Counsel <li> itself. Uses :has()
   to walk up to the parent <li> from the .menu-item child. */
li:has(> .menu-item[data-page="intake"]):hover + li > .menu-item-sub,
li:has(> .menu-item-sub):hover > .menu-item-sub,
li:has(> .menu-item-sub):focus-within > .menu-item-sub{
  opacity:1;
  max-height:64px;
  padding-top:10px;
  padding-bottom:10px;
  pointer-events:auto;
  transform:translateX(0);
}
/* Touch / no-hover devices — keep Counsel visible permanently */
@media (hover:none){
  .menu-item-sub{
    opacity:1;
    max-height:64px;
    padding-top:10px;
    padding-bottom:10px;
    pointer-events:auto;
    transform:translateX(0);
  }
}
/* On the sessions page itself, Counsel always shows */
body[data-page="sessions"] .menu-item-sub{
  opacity:1;
  max-height:64px;
  padding-top:10px;
  padding-bottom:10px;
  pointer-events:auto;
  transform:translateX(0);
}

/* The hairline tie-line connecting Counsel to Intake */
.menu-item-sub::after{
  content:'';
  position:absolute;
  left:24px; top:50%;
  width:16px; height:1px;
  background:rgba(138,173,184,.3);
  z-index:0;
}
.menu-item-sub .mi-num{
  font-size:9px;
  color:rgba(138,173,184,.5);
}
.menu-item-sub .mi-name{
  font-size:14px;
  color:rgba(247,247,245,.78);
}
.menu-item-sub .mi-name em{
  font-size:10px;
  color:rgba(138,173,184,.55);
}
.menu-item-sub:hover{padding-left:54px;}
body.light-nav .menu-item-sub::after{background:rgba(46,74,90,.28);}
body.light-nav .menu-item-sub .mi-name{color:rgba(28,43,58,.72);}
body.light-nav .menu-item-sub .mi-name em{color:rgba(46,74,90,.5);}

/* Panel footer — compact single row inside the glass card. */
.menu-footer{
  position:relative; z-index:1;
  display:grid;
  grid-template-columns:1fr 1fr;
  gap:14px 22px;
  padding:12px 18px 14px;
  margin-top:4px;
  border-top:1px solid rgba(255,255,255,.08);
}
body.light-nav .menu-footer{ border-top-color:rgba(28,43,58,.08); }
.mf-block{ min-width:0; }
.mf-label{
  font-family:var(--f-mono);
  font-size:8px; font-weight:600;
  letter-spacing:.16em;
  text-transform:uppercase;
  color:rgba(138,173,184,.75);
  margin-bottom:4px;
}
.mf-text{
  font-family:var(--f-body);
  font-size:11px; line-height:1.45;
  color:rgba(247,247,245,.78);
  font-weight:400;
  overflow:hidden;
  text-overflow:ellipsis;
  white-space:nowrap;
}
.mf-link{
  color:var(--off);
  text-decoration:none;
  cursor:none;
  border-bottom:1px solid rgba(138,173,184,.5);
  transition:color .3s, border-color .3s;
}
.mf-link:hover{
  color:var(--ocean-lt);
  border-bottom-color:var(--ocean-lt);
}
body.light-nav .mf-label{ color:rgba(46,74,90,.78); }
body.light-nav .mf-text { color:rgba(28,43,58,.72); }
body.light-nav .mf-link {
  color:var(--midnight);
  border-bottom-color:var(--ocean);
}
body.light-nav .mf-link:hover{
  color:var(--ocean);
  border-bottom-color:var(--ocean);
}

/* PAGE SYSTEM */
.page{
  position:fixed;inset:0;
  overflow-y:auto;overflow-x:hidden;
  z-index:10;opacity:0;
  transform:translateY(14px);
  pointer-events:none;
  transition:opacity .55s var(--ease),transform .55s var(--ease);
  will-change:transform,opacity;
}
.page.active{opacity:1;transform:none;pointer-events:all;z-index:11;}
.page.exit{opacity:0;transform:translateY(-8px);pointer-events:none;transition:opacity .35s var(--ease-in),transform .35s var(--ease-in);}

/* SNAP-SCROLL on home */
#page-home.snap-on{scroll-snap-type:y mandatory;}
#page-home.snap-on .snap-section{scroll-snap-align:start;scroll-snap-stop:always;}

/* COORD MARKS */
.coord{font-family:var(--f-mono);font-size:9px;font-weight:500;letter-spacing:.06em;color:var(--ocean);}

/* SECTION NUMBER BAR */
.s-num-bar{
  display:flex;justify-content:space-between;align-items:center;
  padding:18px var(--gx);border-top:1px solid var(--rule);border-bottom:1px solid var(--rule);
  font-family:var(--f-mono);font-size:9px;font-weight:500;letter-spacing:.08em;
  color:var(--ocean);text-transform:uppercase;background:var(--off);
}
.s-num-bar.dk{border-top-color:var(--rule-dk);border-bottom-color:var(--rule-dk);background:var(--ink-deep);color:rgba(95,129,144,.7);}
.s-num-bar > span:nth-child(2){color:var(--charcoal);font-weight:700;}
.s-num-bar.dk > span:nth-child(2){color:var(--off);}

/* EYEBROW */
.eyebrow{font-family:var(--f-nav);font-size:10px;font-weight:600;letter-spacing:.22em;text-transform:uppercase;color:var(--ocean);display:flex;align-items:center;gap:14px;margin-bottom:28px;}
.eyebrow::before{content:'';display:block;width:24px;height:1px;background:var(--ocean);}
.eyebrow.light{color:rgba(226,240,240,.7);}
.eyebrow.light::before{background:rgba(95,129,144,.6);}

/* REVEALS */
.r3d{opacity:0;transform:translateY(28px);transition:opacity .8s var(--ease),transform .8s var(--ease);}
.r3d.in{opacity:1;transform:none;}
.r3d.d1{transition-delay:.08s}.r3d.d2{transition-delay:.16s}.r3d.d3{transition-delay:.24s}.r3d.d4{transition-delay:.32s}.r3d.d5{transition-delay:.40s}.r3d.d6{transition-delay:.48s}
.r3d-l{opacity:0;transform:translateX(-28px);transition:opacity .8s var(--ease),transform .8s var(--ease);}
.r3d-l.in{opacity:1;transform:none;}
.r3d-r{opacity:0;transform:translateX(28px);transition:opacity .8s var(--ease),transform .8s var(--ease);}
.r3d-r.in{opacity:1;transform:none;}
.r3d-l.d1,.r3d-r.d1{transition-delay:.12s}
.r3d-l.d2,.r3d-r.d2{transition-delay:.24s}

/* BUTTONS */
.btn{display:inline-flex;align-items:center;gap:14px;font-family:var(--f-nav);font-size:10px;font-weight:600;letter-spacing:.18em;text-transform:uppercase;padding:16px 36px;text-decoration:none;cursor:none;border:1px solid transparent;transition:background .3s,color .3s,border-color .3s,transform .35s var(--ease);position:relative;}
.btn-dk{color:var(--off);background:var(--midnight);}
.btn-dk:hover{background:var(--ocean);transform:translateY(-2px);}
.btn-lt{color:var(--midnight);background:transparent;border-color:rgba(28,43,58,.3);}
.btn-lt:hover{background:var(--midnight);color:var(--off);border-color:var(--midnight);transform:translateY(-2px);}
.btn-ghost{font-family:var(--f-nav);font-size:10px;font-weight:500;letter-spacing:.16em;text-transform:uppercase;color:rgba(247,247,245,.82);text-decoration:none;cursor:none;display:inline-flex;align-items:center;gap:12px;transition:color .3s,gap .35s var(--ease);}
.btn-ghost:hover{color:var(--off);gap:22px;}
.btn-ghost::after{content:'→';}
.btn::before{content:attr(data-num);font-family:var(--f-mono);font-size:9px;font-weight:500;letter-spacing:.05em;opacity:.6;}

/* HOME — HERO with VIDEO */
#page-home{background:var(--off);}
.hero{position:relative;height:100vh;min-height:680px;background:var(--ink-deep);overflow:hidden;}
.hero-video{
  position:absolute;inset:0;
  width:100%;height:100%;
  object-fit:cover;object-position:center;
  z-index:0;
  /* zoom is driven from JS via this CSS variable; defaults to 1 if JS off */
  transform:scale(var(--hero-zoom,1));
  transform-origin:center;
  will-change:transform;
  transition:transform .12s linear;
}

/* HOME PAGE — cinematic sticky hero. The hero video stays as a backdrop
   while subsequent sections layer over it on scroll. Mirrors the pattern
   used on doctrine, mandates, method, airass, principals, and intake. */
#page-home > .hero{
  position:sticky;
  top:0;
  height:100vh;
  min-height:100vh;
  z-index:0;
}
#page-home > .s-num-bar,
#page-home > .monolith,
#page-home > .metrics,
#page-home > .home-svc-section,
#page-home > .quote-mono,
#page-home > .img-marquee,
#page-home > .footer{
  position:relative;
  z-index:1;
}
#page-home > .s-num-bar:nth-of-type(1){
  /* the first section to arrive over the hero — soft top edge for "lift" */
  box-shadow:0 -24px 60px rgba(28,43,58,.10), 0 -1px 0 rgba(28,43,58,.06);
}
@media (prefers-reduced-motion:reduce){
  #page-home > .hero{position:relative;height:100vh;}
  .hero-video{transform:none;transition:none;}
  /* Disable the menu trigger's attention pulse for users who've
     requested reduced motion. */
  #menu-trigger::after{animation:none !important; opacity:0 !important;}
}
.hero::before{content:'';position:absolute;inset:0;background:rgba(8,15,22,.62);z-index:1;}
.hero::after{content:'';position:absolute;bottom:0;left:0;right:0;height:75%;background:linear-gradient(to top,rgba(6,12,18,.97) 0%,rgba(6,12,18,.55) 50%,transparent 100%);z-index:1;}
.hero-grid{position:absolute;inset:0;z-index:2;pointer-events:none;display:grid;grid-template-columns:var(--gx) repeat(6,1fr) var(--gx);}
.hero-grid > div{border-right:1px solid rgba(95,129,144,.08);}
.hero-grid > div:first-child,.hero-grid > div:last-child{border-right:none;}
.hero-coords-top{position:absolute;top:108px;left:0;right:0;display:flex;justify-content:space-between;padding:0 var(--gx);z-index:3;}
.hero-coords-bottom{position:absolute;bottom:32px;left:0;right:0;display:flex;justify-content:space-between;padding:0 var(--gx);z-index:3;}
.hero-coord{font-family:var(--f-mono);font-size:9px;font-weight:500;letter-spacing:.08em;color:rgba(95,129,144,.5);text-transform:uppercase;}
.hero-coord-line{flex:1;height:1px;margin:8px 24px 0;background:linear-gradient(to right,rgba(95,129,144,.2),transparent);align-self:flex-start;}

.hero-c{position:absolute;left:var(--gx);right:var(--gx);bottom:90px;z-index:3;}
.hero-eyebrow{font-family:var(--f-nav);font-size:10px;font-weight:600;letter-spacing:.24em;text-transform:uppercase;color:var(--ocean-lt);margin-bottom:24px;display:flex;align-items:center;gap:14px;opacity:0;animation:fuA .8s var(--ease) .4s forwards;}
.hero-eyebrow::before{content:'';display:block;width:32px;height:1px;background:var(--ocean);}
.hero-hl{font-family:var(--f-disp);font-size:clamp(54px,8vw,128px);font-weight:800;line-height:.92;color:var(--off);letter-spacing:-.015em;opacity:0;animation:fuA .9s var(--ease) .55s forwards;}
.hero-hl span{display:block;font-style:italic;color:rgba(247,247,245,.7);font-weight:300;}
.hero-meta-row{display:grid;grid-template-columns:1fr 1fr;margin-top:48px;padding-top:32px;border-top:1px solid rgba(95,129,144,.18);opacity:0;animation:fuA .9s var(--ease) .85s forwards;}
.hero-meta-l{font-family:var(--f-body);font-weight:300;font-size:14px;line-height:1.7;color:rgba(247,247,245,.82);max-width:360px;}
.hero-meta-r{display:flex;align-items:flex-end;justify-content:flex-end;gap:32px;}
@keyframes fuA{from{opacity:0;transform:translateY(20px)}to{opacity:1;transform:none}}

/* MONOLITH STATEMENT */
.monolith{background:var(--midnight);padding:160px var(--gx);position:relative;overflow:hidden;border-bottom:1px solid var(--rule-dk);}
.monolith::before{content:'';position:absolute;inset:0;background-image:linear-gradient(to right,var(--grid-dk) 1px,transparent 1px);background-size:calc((100vw - 128px) / 6) 100%;background-position:64px 0;pointer-events:none;opacity:.55;}
.mono-coord-tl,.mono-coord-tr,.mono-coord-bl,.mono-coord-br{position:absolute;font-family:var(--f-mono);font-size:9px;font-weight:500;letter-spacing:.08em;color:rgba(95,129,144,.55);text-transform:uppercase;}
.mono-coord-tl{top:32px;left:var(--gx);} .mono-coord-tr{top:32px;right:var(--gx);}
.mono-coord-bl{bottom:32px;left:var(--gx);} .mono-coord-br{bottom:32px;right:var(--gx);}
.mono-grid{display:grid;grid-template-columns:1fr 1fr;gap:96px;align-items:center;position:relative;z-index:1;}
.mono-word{font-family:var(--f-disp);font-size:clamp(80px,12vw,200px);font-weight:800;line-height:.92;color:var(--off);letter-spacing:-.02em;display:block;}
.mono-word em{font-style:italic;font-weight:300;color:var(--ocean);display:block;}

/* PRECISION · NOT · VOLUME — scroll-driven word reveal */
.mono-line{
  display:block;
  opacity:0;
  transform:translateY(0.42em);
  /* clip mask creates a "lifted from below the line" effect */
  clip-path:inset(0 0 100% 0);
  -webkit-clip-path:inset(0 0 100% 0);
  transition:
    opacity 1.15s cubic-bezier(.16,1,.3,1),
    transform 1.25s cubic-bezier(.16,1,.3,1),
    clip-path 1.25s cubic-bezier(.16,1,.3,1),
    -webkit-clip-path 1.25s cubic-bezier(.16,1,.3,1);
  will-change:opacity,transform,clip-path;
  /* tighter vertical rhythm between lines */
  margin-top:.04em;
}
.mono-line:first-child{margin-top:0;}
.mono-line.is-revealed{
  opacity:1;
  transform:translateY(0);
  clip-path:inset(-10% 0 -10% 0);
  -webkit-clip-path:inset(-10% 0 -10% 0);
}
.mono-line-em{
  font-style:italic;
  font-weight:300;
  color:var(--ocean);
}
.mono-text{font-family:var(--f-body);font-weight:300;font-size:15px;line-height:1.9;color:rgba(247,247,245,.84);margin-bottom:16px;}
.mono-rule{width:48px;height:1px;background:var(--ocean);margin:36px 0;}
.mono-mini{font-family:var(--f-mono);font-size:10px;font-weight:500;letter-spacing:.12em;text-transform:uppercase;color:var(--ocean-lt);}

/* METRICS */
.metrics{background:var(--off);padding:0;border-bottom:1px solid var(--rule);}
.metrics-inner{display:grid;grid-template-columns:repeat(5,1fr);}
.metric-cell{padding:64px 36px;border-right:1px solid var(--rule);text-align:left;position:relative;transition:background .3s;}
.metric-cell:hover{background:var(--white);}
.metric-cell:last-child{border-right:none;}
.metric-cell::before{content:attr(data-idx);position:absolute;top:18px;right:18px;font-family:var(--f-mono);font-size:9px;font-weight:500;letter-spacing:.08em;color:rgba(95,129,144,.5);}
.metric-n{font-family:var(--f-disp);font-size:64px;font-weight:800;color:var(--midnight);line-height:.95;margin-bottom:18px;letter-spacing:-.01em;}
.metric-l{font-family:var(--f-nav);font-size:10px;font-weight:600;letter-spacing:.16em;text-transform:uppercase;color:var(--ocean);}

/* IMAGE MARQUEE */
.img-marquee{
  background:var(--off);padding:80px 0;
  border-top:1px solid var(--rule);border-bottom:1px solid var(--rule);
  overflow:hidden;position:relative;
}
.img-marquee-coord{position:absolute;top:32px;left:var(--gx);font-family:var(--f-mono);font-size:9px;color:var(--ocean);letter-spacing:.1em;z-index:2;}
.img-marquee-coord-r{position:absolute;top:32px;right:var(--gx);font-family:var(--f-mono);font-size:9px;color:rgba(95,129,144,.5);letter-spacing:.1em;z-index:2;}
.imgm-track{
  display:flex;gap:24px;
  width:max-content;
  animation:imgmScroll 38s linear infinite;
  will-change:transform;
}
.imgm-track:hover{animation-play-state:paused;}
.imgm-card{
  flex-shrink:0;width:380px;height:240px;
  position:relative;overflow:hidden;
  perspective:1000px;
  transition:transform .5s var(--ease);
}
.imgm-card-inner{
  position:absolute;inset:0;
  background-size:cover;background-position:center;
  transition:transform .8s var(--ease),filter .5s;
  filter:grayscale(.2) brightness(.95);
}
.imgm-card:hover .imgm-card-inner{
  transform:scale(1.08) translateZ(20px);
  filter:grayscale(0) brightness(1);
}
.imgm-card::after{
  content:attr(data-label);position:absolute;bottom:14px;left:18px;
  font-family:var(--f-mono);font-size:10px;color:var(--off);
  letter-spacing:.14em;text-transform:uppercase;
  background:rgba(28,43,58,.7);padding:6px 12px;
  z-index:1;
}
@keyframes imgmScroll{from{transform:translateX(0)}to{transform:translateX(-50%)}}

/* HOME SERVICES PREVIEW */
.home-svc-section{background:var(--white);padding:140px var(--gx);border-bottom:1px solid var(--rule);position:relative;}
.home-svc-header{display:grid;grid-template-columns:1fr 1fr;gap:80px;align-items:end;margin-bottom:80px;}
.svc-hl{font-family:var(--f-disp);font-size:clamp(44px,5vw,76px);font-weight:800;line-height:1.0;color:var(--midnight);letter-spacing:-.01em;}
.svc-hl em{font-style:italic;font-weight:300;color:var(--ocean);}

/* TYPEWRITER — shared cursor styling (used by both the looping headline
   and the one-time quote reveal) */
.tw-cursor{
  display:inline-block;
  width:.06em;
  height:.86em;
  margin-left:.05em;
  background:currentColor;
  vertical-align:-0.08em;
  /* steps(1) gives a clean, deliberate blink (no fade smear) */
  animation:twBlink 1.05s steps(1) infinite;
  transform:translateZ(0);
}
.tw-cursor.tw-cursor-done{
  /* permanent removal — fade then hide */
  animation:none;
  opacity:0;
  transition:opacity .6s var(--ease);
  width:0;margin:0;
}
@keyframes twBlink{0%,49%{opacity:1}50%,100%{opacity:0}}
@media (prefers-reduced-motion:reduce){
  .tw-cursor{animation:none;opacity:.55;}
}

/* "Three levels of engagement." — looping headline */
.typewriter-h2{
  /* lock the line space so the page doesn't re-flow as text types */
  min-height:2.05em;
  white-space:normal;
}
.typewriter-h2 .tw-out{
  /* preserve <br> + spaces inside the typed output */
  white-space:pre-wrap;
}
.typewriter-h2 .tw-out em{font-style:italic;font-weight:300;color:var(--ocean);}
.typewriter-h2 .tw-cursor{
  /* override colour for the headline — ocean accent on the light section */
  background:var(--ocean);
}
.typewriter-h2.tw-paused .tw-cursor{animation-duration:1.4s;}

/* Quote-body one-time reveal. The cursor inherits the cream text colour
   via currentColor so it sits naturally on the dark blue background. */
.quote-body[data-typewriter-once] .tw-out{
  white-space:pre-wrap;
}
.quote-body[data-typewriter-once] .tw-cursor{
  /* slightly thinner so it doesn't distract at large display sizes */
  width:.04em;
  height:.78em;
  vertical-align:-0.05em;
}

/* CURSOR GHOST TRAIL — grid-tile illumination that sits ON the dark section
   backgrounds. Screen blend means the trail brightens dark pixels (the
   monolith / hero / quote backgrounds) but barely touches light text — so
   readability is preserved while the tiles read as "lit ground" not overlay. */
#ghost-trail{
  position:fixed;
  inset:0;
  pointer-events:none;
  z-index:12; /* just above .page (z-index 11), below all floating UI */
  mix-blend-mode:screen;
  -webkit-mix-blend-mode:screen;
  display:none;
}
@media (hover:hover) and (pointer:fine){
  #ghost-trail{display:block;}
}
body.auth-mode #ghost-trail{display:none;}
.svc-note{font-family:var(--f-body);font-weight:400;font-size:14px;line-height:1.8;color:var(--ink-mut);max-width:420px;}
/* TIER FLIP CARDS — same .svc-card class on Home and Mandates */
.svc-grid-3{
  display:grid;grid-template-columns:repeat(3,1fr);
  /* Each card now stands on its own with a gap between them so the
     trio reads as three engineered modules instead of one welded slab. */
  gap:24px;
  /* deeper perspective + isolation prevents stacking-context bleed during flip */
  perspective:2400px;
  perspective-origin:50% 30%;
  isolation:isolate;
}
.svc-card{
  position:relative;
  border:1px solid var(--rule);
  cursor:none;
  background:transparent;
  min-height:560px;
  /* GPU-promote + 3D context. translateZ(0) forces compositing layer
     which removes mid-rotation tearing/aliasing on most renderers. */
  transform:translateZ(0);
  transform-style:preserve-3d;
  -webkit-transform-style:preserve-3d;
  will-change:transform,box-shadow;
  transition:transform 1s cubic-bezier(.2,.7,.15,1), box-shadow .6s var(--ease);
  /* premium ambient depth at rest — soft, layered, never harsh */
  box-shadow:
    0 1px 2px rgba(28,43,58,.035),
    0 6px 14px rgba(28,43,58,.05),
    0 22px 48px rgba(28,43,58,.07);
}
.svc-card:hover,
.svc-card.flipped{
  transform:rotateY(180deg) translateZ(0);
  /* lift + glow on flip */
  box-shadow:
    0 2px 4px rgba(28,43,58,.05),
    0 12px 28px rgba(28,43,58,.08),
    0 40px 72px rgba(28,43,58,.13),
    0 0 0 1px rgba(95,129,144,.08);
  z-index:3; /* keep flipping card above its neighbours during rotation */
}
/* TIER FLIP CARDS — puzzle detachment. Each card pulls outward
   while flipping, so the trio reads as three engineered pieces
   separating from a single system. Translate-before-rotateY
   moves the card in local space, then the flip rotates around it. */
.svc-grid-3 > .svc-card:nth-child(1):hover,
.svc-grid-3 > .svc-card:nth-child(1).flipped{
  transform:translate3d(-12px,-7px,0) rotateY(180deg) translateZ(0);
}
.svc-grid-3 > .svc-card:nth-child(2):hover,
.svc-grid-3 > .svc-card:nth-child(2).flipped{
  transform:translate3d(0,-10px,0) rotateY(180deg) translateZ(0);
}
.svc-grid-3 > .svc-card:nth-child(3):hover,
.svc-grid-3 > .svc-card:nth-child(3).flipped{
  transform:translate3d(12px,-7px,0) rotateY(180deg) translateZ(0);
}
.svc-card-face{
  position:absolute;inset:0;
  padding:56px 44px 48px;
  -webkit-backface-visibility:hidden;
  backface-visibility:hidden;
  display:flex;flex-direction:column;
  transition:background .4s;
  /* nudge faces onto their own compositing layer to remove flicker
     and the brief "both faces visible" flash some browsers show */
  transform:translateZ(0);
  -webkit-transform:translateZ(0);
  /* fixes 1px shimmer on rotated edges on Chromium */
  outline:1px solid transparent;
}
.svc-card-face.front{
  background:var(--white);
  /* sit slightly forward so it never z-fights with the back face mid-rotation */
  transform:translateZ(.1px);
  -webkit-transform:translateZ(.1px);
}
.svc-card-face.back{
  background:var(--midnight);color:var(--off);
  transform:rotateY(180deg) translateZ(.1px);
  -webkit-transform:rotateY(180deg) translateZ(.1px);
  overflow:hidden;
}
.svc-card-face.back::before{
  /* gridded backdrop on the dark side */
  content:'';position:absolute;inset:0;
  background-image:linear-gradient(to right,var(--grid-dk) 1px,transparent 1px);
  background-size:33.333% 100%;
  pointer-events:none;opacity:.6;
}
.svc-card-face.front::before{
  /* idx label */
  content:attr(data-idx);position:absolute;top:24px;right:24px;
  font-family:var(--f-mono);font-size:9px;font-weight:500;letter-spacing:.08em;color:rgba(95,129,144,.5);
}
.svc-card-face.front::after{
  content:'';position:absolute;top:0;left:0;right:0;height:2px;
  background:var(--ocean);transform:scaleX(0);transform-origin:left;
  transition:transform .5s var(--ease);
}
.svc-card:hover .svc-card-face.front::after{transform:scaleX(1);}

/* Hover hint */
.svc-flip-hint{
  position:absolute;bottom:18px;left:44px;
  font-family:var(--f-mono);font-size:9px;letter-spacing:.18em;text-transform:uppercase;
  color:rgba(95,129,144,.5);
  display:flex;align-items:center;gap:8px;
  opacity:0;transition:opacity .35s .1s;
  pointer-events:none;
}
.svc-flip-hint::before{content:'⤴';font-size:12px;}
.svc-card:not(:hover):not(.flipped) .svc-flip-hint{opacity:.85;animation:flipHint 3.5s ease-in-out infinite;}
@keyframes flipHint{0%,100%{transform:translateX(0);opacity:.5}50%{transform:translateX(4px);opacity:.85}}

/* Front-side typography (existing classes preserved) */
.svc-tag{font-family:var(--f-mono);font-size:10px;font-weight:500;letter-spacing:.1em;text-transform:uppercase;color:var(--ocean);margin-bottom:24px;}
.svc-title{font-family:var(--f-disp);font-size:34px;font-weight:800;color:var(--midnight);line-height:1;margin-bottom:32px;letter-spacing:-.01em;}
.svc-rule{width:100%;height:1px;background:var(--rule);margin-bottom:28px;}
.svc-desc{font-family:var(--f-body);font-weight:400;font-size:14px;line-height:1.8;color:var(--ink-mut);margin-bottom:32px;}
.svc-feats{list-style:none;display:flex;flex-direction:column;gap:11px;}
.svc-feats li{font-family:var(--f-body);font-weight:400;font-size:13px;line-height:1.7;color:var(--ink-mut);display:flex;gap:14px;align-items:flex-start;}
.svc-feats li::before{content:'';display:block;width:16px;height:1px;background:var(--ocean);margin-top:9px;flex-shrink:0;}
.svc-cta{display:inline-flex;align-items:center;gap:10px;font-family:var(--f-nav);font-size:9px;font-weight:600;letter-spacing:.18em;text-transform:uppercase;color:var(--ocean);text-decoration:none;cursor:none;margin-top:auto;transition:color .3s,gap .35s var(--ease);}
.svc-cta:hover{color:var(--midnight);gap:18px;}
.svc-cta::after{content:'→';}

/* Back-side typography */
.svc-back-coord{
  position:absolute;top:24px;right:24px;
  font-family:var(--f-mono);font-size:9px;letter-spacing:.1em;color:rgba(95,129,144,.6);
  z-index:1;
}
.svc-back-tag{
  font-family:var(--f-mono);font-size:9px;font-weight:500;letter-spacing:.18em;
  text-transform:uppercase;color:var(--ocean-lt);margin-bottom:18px;
  display:flex;align-items:center;gap:14px;position:relative;z-index:1;
}
.svc-back-tag::before{content:'';display:block;width:24px;height:1px;background:var(--ocean);}
.svc-back-h{
  font-family:var(--f-disp);font-size:24px;font-weight:800;
  color:var(--off);line-height:1.1;margin-bottom:24px;letter-spacing:-.005em;position:relative;z-index:1;
}
.svc-back-h em{font-style:italic;font-weight:300;color:var(--ocean-lt);}
.svc-back-block{
  position:relative;z-index:1;
  padding:14px 0;border-top:1px solid rgba(95,129,144,.15);
  display:grid;grid-template-columns:90px 1fr;gap:16px;
}
.svc-back-block:last-of-type{border-bottom:1px solid rgba(95,129,144,.15);}
.svc-back-l{
  font-family:var(--f-mono);font-size:9px;font-weight:500;letter-spacing:.14em;
  text-transform:uppercase;color:rgba(95,129,144,.7);
}
.svc-back-v{
  font-family:var(--f-body);font-size:12px;line-height:1.55;
  color:rgba(247,247,245,.78);font-weight:300;
}
.svc-back-v strong{color:var(--off);font-weight:600;}
.svc-back-cta{
  margin-top:auto;position:relative;z-index:1;
  display:inline-flex;align-items:center;justify-content:space-between;gap:10px;
  font-family:var(--f-nav);font-size:10px;font-weight:600;letter-spacing:.18em;text-transform:uppercase;
  color:var(--ink-deep);background:var(--off);
  padding:14px 22px;text-decoration:none;cursor:none;
  border:none;
  transition:background .3s,color .3s;
}
.svc-back-cta:hover{background:var(--ocean);color:var(--off);}
.svc-back-cta::after{content:'→';font-family:var(--f-mono);}

/* QUOTE MONOLITH */
.quote-mono{background:var(--ink-deep);padding:140px var(--gx);position:relative;overflow:hidden;}
.quote-mono::before{content:'';position:absolute;inset:0;background-image:linear-gradient(to right,var(--grid-dk) 1px,transparent 1px);background-size:calc((100vw - 128px) / 6) 100%;background-position:64px 0;pointer-events:none;opacity:.4;}
.quote-mono-coord-tl{position:absolute;top:32px;left:var(--gx);font-family:var(--f-mono);font-size:9px;color:rgba(95,129,144,.5);letter-spacing:.08em;}
.quote-mono-coord-tr{position:absolute;top:32px;right:var(--gx);font-family:var(--f-mono);font-size:9px;color:rgba(95,129,144,.5);letter-spacing:.08em;}
.quote-grid{display:grid;grid-template-columns:80px 1fr;gap:56px;align-items:start;position:relative;z-index:1;}
.quote-mark{font-family:var(--f-disp);font-size:140px;line-height:.55;color:rgba(95,129,144,.18);font-weight:800;user-select:none;}
.quote-body{font-family:var(--f-disp);font-size:clamp(24px,2.6vw,40px);font-weight:300;font-style:italic;line-height:1.4;color:var(--off);max-width:880px;margin-bottom:44px;}
.quote-attr{display:flex;align-items:center;gap:18px;}
.qa-line{width:32px;height:1px;background:var(--ocean);}
.qa-name{font-family:var(--f-nav);font-size:10px;font-weight:600;letter-spacing:.16em;text-transform:uppercase;color:var(--off);}
.qa-role{font-family:var(--f-body);font-size:12px;color:var(--ocean);}

/* DOCTRINE PAGE (was About) */
#page-doctrine{background:var(--off);}
.doc-split{display:grid;grid-template-columns:5fr 4fr;min-height:calc(100vh - 0px);border-bottom:1px solid var(--rule);}
.doc-left{background:#5F8190;padding:160px var(--gx) 100px;position:relative;overflow:hidden;}
.doc-left::before{content:'';position:absolute;inset:0;background-image:linear-gradient(to right,var(--grid-dk) 1px,transparent 1px);background-size:calc((100% - 0px)/4) 100%;pointer-events:none;}
.doc-left-coord{position:absolute;font-family:var(--f-mono);font-size:9px;font-weight:500;letter-spacing:.08em;color:rgba(95,129,144,.55);text-transform:uppercase;}
.doc-left .tl{top:32px;left:var(--gx);}.doc-left .tr{top:32px;right:32px;}
.doc-left-content{position:relative;z-index:1;}
.doc-hl{font-family:var(--f-disp);font-size:clamp(64px,8vw,128px);font-weight:800;line-height:.88;color:var(--off);letter-spacing:-.02em;}
.doc-hl span{display:block;font-style:italic;font-weight:300;color:var(--ocean-lt);}
.doc-sub{font-family:var(--f-body);font-weight:300;font-size:15px;line-height:1.85;color:rgba(247,247,245,.85);max-width:400px;margin-top:36px;}
.doc-meta{margin-top:80px;padding-top:32px;border-top:1px solid rgba(95,129,144,.2);display:grid;grid-template-columns:1fr 1fr;gap:32px;}
.doc-meta-l{font-family:var(--f-mono);font-size:9px;font-weight:500;letter-spacing:.12em;text-transform:uppercase;color:var(--ocean);margin-bottom:8px;}
.doc-meta-v{font-family:var(--f-disp);font-size:18px;font-weight:600;color:var(--off);}
.doc-right{position:relative;min-height:560px;overflow:hidden;background:var(--midnight);}
.doc-right-bg{
  position:absolute;inset:0;
  background-image:url('../images/about-hero.jpg');
  background-size:cover;
  background-position:center;
  /* zoom is driven from JS via CSS variable; defaults to 1 if JS off */
  transform:scale(var(--hero-zoom,1));
  transform-origin:center;
  will-change:transform;
  transition:transform .12s linear;
}

/* DOCTRINE PAGE — cinematic sticky hero. The hero stays as a backdrop while
   subsequent sections layer over it. Subsequent sections need z-index >= 1
   so their solid backgrounds occlude the sticky hero as they pass over. */
#page-doctrine .doc-split{
  position:sticky;
  top:0;
  height:100vh;
  min-height:100vh;
  z-index:0;
  overflow:hidden;
}
#page-doctrine .s-num-bar,
#page-doctrine .doc-decl,
#page-doctrine .doc-pillars,
#page-doctrine .quote-mono,
#page-doctrine .footer{
  position:relative;
  z-index:1;
}
#page-doctrine .doc-decl{
  /* the first section that arrives "over" the hero — soft top shadow lifts it */
  box-shadow:0 -24px 60px rgba(28,43,58,.10), 0 -1px 0 rgba(28,43,58,.06);
}
@media (prefers-reduced-motion:reduce){
  #page-doctrine .doc-split{position:relative;height:auto;min-height:100vh;}
  .doc-right-bg{transform:none;transition:none;}
}
.doc-right::before{content:'';position:absolute;inset:0;background:rgba(28,43,58,.06);}

.doc-decl{background:var(--white);padding:140px var(--gx);border-bottom:1px solid var(--rule);position:relative;}
.doc-decl-coord{position:absolute;top:48px;left:var(--gx);font-family:var(--f-mono);font-size:9px;letter-spacing:.08em;color:var(--ocean);}
.doc-decl-coord-r{position:absolute;top:48px;right:var(--gx);font-family:var(--f-mono);font-size:9px;letter-spacing:.08em;color:rgba(95,129,144,.5);}
.docl-inner{max-width:1100px;margin:60px auto 0;}
.docl-text{font-family:var(--f-disp);font-size:clamp(28px,3.4vw,52px);font-weight:300;line-height:1.32;color:var(--midnight);letter-spacing:-.005em;}
.docl-text strong{font-weight:800;}
.docl-text em{font-style:italic;color:var(--ocean);}

.doc-pillars{background:var(--off);padding:120px var(--gx);border-bottom:1px solid var(--rule);}
.dpl-grid{
  display:grid;grid-template-columns:1fr 1fr;
  border-top:1px solid var(--rule);border-left:1px solid var(--rule);
  margin-top:60px;
  /* containing block for the detaching cells; prevents shadow clipping */
  position:relative;
  isolation:isolate;
}
.dpl-cell{
  padding:64px 56px;
  border-right:1px solid var(--rule);border-bottom:1px solid var(--rule);
  position:relative;
  background:transparent;
  /* GPU-promote so the lift stays sub-pixel sharp */
  transform:translate3d(0,0,0);
  will-change:transform,box-shadow;
  transition:
    transform .55s cubic-bezier(.2,.7,.15,1),
    box-shadow .55s cubic-bezier(.2,.7,.15,1),
    background .35s ease,
    border-color .35s ease;
}
.dpl-cell::before{content:attr(data-idx);position:absolute;top:24px;right:28px;font-family:var(--f-mono);font-size:9px;font-weight:500;letter-spacing:.08em;color:rgba(95,129,144,.5);}

/* PUZZLE DETACHMENT — the hovered piece lifts away from the cluster, in the
   direction of the corner it occupies. Neighbours stay perfectly still, so
   the whole cluster reads as a precision-machined system from which one
   piece has been pulled. Translation is small (~10px), rotation is tiny
   (≤0.5deg) and a layered shadow does the heavy lifting on depth. */
.dpl-cell:hover{
  background:var(--white);
  z-index:5;
  /* subtle ocean-tinted ring + layered ambient — never harsh */
  box-shadow:
    0 1px 2px rgba(28,43,58,.04),
    0 12px 28px rgba(28,43,58,.08),
    0 36px 64px rgba(28,43,58,.12),
    0 0 0 1px rgba(95,129,144,.10);
  border-right-color:transparent;
  border-bottom-color:transparent;
}
/* corner-aware translation — each cell pulls toward its outer corner */
.dpl-cell:nth-child(1):hover{transform:translate3d(-10px,-10px,0) rotate(-0.4deg);}
.dpl-cell:nth-child(2):hover{transform:translate3d(10px,-10px,0) rotate(0.4deg);}
.dpl-cell:nth-child(3):hover{transform:translate3d(-10px,10px,0) rotate(0.4deg);}
.dpl-cell:nth-child(4):hover{transform:translate3d(10px,10px,0) rotate(-0.4deg);}

.dpl-num{font-family:var(--f-disp);font-size:68px;font-weight:800;color:rgba(95,129,144,.14);line-height:1;margin-bottom:20px;letter-spacing:-.01em;transition:color .35s ease;}
.dpl-cell:hover .dpl-num{color:rgba(95,129,144,.32);}
.dpl-title{font-family:var(--f-nav);font-size:13px;font-weight:700;letter-spacing:.14em;text-transform:uppercase;color:var(--midnight);margin-bottom:14px;}
.dpl-desc{font-family:var(--f-body);font-weight:400;font-size:14px;line-height:1.8;color:var(--ink-mut);max-width:440px;}

/* MANDATES PAGE (was Services) */
#page-mandates{background:var(--off);}
.mnd-cards{background:var(--white);padding:120px var(--gx);border-bottom:1px solid var(--rule);}
.cap-section{background:var(--off);padding:100px var(--gx);border-top:1px solid var(--rule);border-bottom:1px solid var(--rule);}
.cap-grid{
  display:grid;grid-template-columns:repeat(4,1fr);
  border-top:1px solid var(--rule);border-left:1px solid var(--rule);
  margin-top:60px;
  position:relative;
  isolation:isolate;
}
.cap-cell{
  padding:48px 36px;
  border-right:1px solid var(--rule);border-bottom:1px solid var(--rule);
  background:var(--off);
  position:relative;
  transform:translate3d(0,0,0);
  will-change:transform,box-shadow;
  transition:
    transform .55s cubic-bezier(.2,.7,.15,1),
    box-shadow .55s cubic-bezier(.2,.7,.15,1),
    background .35s ease,
    border-color .35s ease;
}
.cap-cell::before{content:attr(data-idx);position:absolute;top:18px;right:20px;font-family:var(--f-mono);font-size:9px;font-weight:500;letter-spacing:.08em;color:rgba(95,129,144,.5);}

/* CAPABILITY MATRIX — puzzle detachment. Four cells in a single row;
   the hovered cell pulls outward toward its position relative to centre.
   End cells get the strongest pull, middle cells lift slightly so the
   whole cluster reads as engineered, separating from a system. */
.cap-cell:hover{
  background:var(--white);
  z-index:5;
  box-shadow:
    0 1px 2px rgba(28,43,58,.04),
    0 12px 28px rgba(28,43,58,.08),
    0 36px 64px rgba(28,43,58,.12),
    0 0 0 1px rgba(95,129,144,.10);
  border-right-color:transparent;
  border-bottom-color:transparent;
}
.cap-cell:nth-child(1):hover{transform:translate3d(-10px,-6px,0) rotate(-0.4deg);}
.cap-cell:nth-child(2):hover{transform:translate3d(-3px,-8px,0) rotate(-0.18deg);}
.cap-cell:nth-child(3):hover{transform:translate3d(3px,-8px,0) rotate(0.18deg);}
.cap-cell:nth-child(4):hover{transform:translate3d(10px,-6px,0) rotate(0.4deg);}

.cap-t{font-family:var(--f-nav);font-size:11px;font-weight:700;letter-spacing:.16em;text-transform:uppercase;color:var(--midnight);margin-bottom:14px;}
.cap-d{font-family:var(--f-body);font-weight:400;font-size:14px;line-height:1.8;color:var(--ink-mut);}

/* MANDATES PAGE — section layering for sections following the
   .np-hero so their solid backgrounds occlude the sticky hero. */
#page-mandates .s-num-bar,
#page-mandates .mnd-cards,
#page-mandates .cap-section,
#page-mandates .footer{
  position:relative;
  z-index:1;
}
#page-mandates .mnd-cards{
  /* first section to arrive over the hero — soft top edge for "lift" */
  box-shadow:0 -24px 60px rgba(28,43,58,.10), 0 -1px 0 rgba(28,43,58,.06);
}

/* ===== TIER DEEP DIVE — detailed tier architecture, services.html ===== */
.tier-deep-dive{
  background:var(--white);
  padding:110px var(--gx) 130px;
  border-bottom:1px solid var(--rule);
  position:relative;
}
.tier-deep-dive::before{
  content:'';
  position:absolute;inset:0;
  background-image:
    linear-gradient(rgba(28,43,58,.022) 1px,transparent 1px),
    linear-gradient(90deg,rgba(28,43,58,.022) 1px,transparent 1px);
  background-size:80px 80px;
  pointer-events:none;
  z-index:0;
}
.tier-deep-dive > *{position:relative;z-index:1;}

.tier-block{
  margin-top:96px;
  padding:64px 56px 56px;
  background:var(--off);
  border:1px solid var(--rule);
  position:relative;
  isolation:isolate;
  transform:translate3d(0,0,0);
  will-change:transform,box-shadow;
  transition:
    transform .6s cubic-bezier(.2,.7,.15,1),
    box-shadow .6s var(--ease),
    border-color .35s ease;
}
.tier-block:first-of-type{margin-top:72px;}
.tier-block::before{
  content:'';
  position:absolute;left:0;top:0;bottom:0;width:3px;
  background:var(--midnight);
  transition:background .4s ease;
}
.tier-block.d2::before{background:var(--ocean-dk);}
.tier-block.d3::before{
  background:linear-gradient(180deg,var(--ocean) 0%,var(--midnight) 100%);
  width:4px;
}
.tier-block.d3{
  background:linear-gradient(180deg,#FAFAF8 0%,var(--off) 60%);
  border-color:rgba(95,129,144,.22);
}
/* Hover effects on the large .tier-block panels were removed — the
   pop-up lift now lives only on the smaller .tier-cat cells inside
   each panel. The base .tier-block style is the resting state. */

.tier-block-head{
  display:grid;
  grid-template-columns:auto 1fr;
  gap:40px;
  align-items:start;
  padding-bottom:36px;
  border-bottom:1px solid var(--rule);
  margin-bottom:40px;
}
.tier-coord{
  position:absolute;top:18px;right:22px;
  font-family:var(--f-mono);font-size:10px;font-weight:500;letter-spacing:.10em;
  color:rgba(95,129,144,.55);
}
.tier-num{
  font-family:var(--f-disp);
  font-size:clamp(72px,9vw,128px);
  font-weight:200;
  line-height:.85;
  color:var(--midnight);
  letter-spacing:-.04em;
  font-feature-settings:'tnum' 1;
  padding-right:24px;
  border-right:1px solid var(--rule);
}
.tier-block.d3 .tier-num{
  background:linear-gradient(135deg,var(--midnight) 0%,var(--ocean) 100%);
  -webkit-background-clip:text;background-clip:text;
  -webkit-text-fill-color:transparent;
}
.tier-block-titles{display:flex;flex-direction:column;gap:6px;padding-top:6px;}
.tier-psy{
  font-family:var(--f-nav);font-size:10px;font-weight:600;letter-spacing:.24em;text-transform:uppercase;
  color:var(--ocean);
}
.tier-name{
  font-family:var(--f-disp);
  font-size:clamp(38px,4.6vw,60px);
  font-weight:700;
  line-height:.98;
  color:var(--charcoal);
  letter-spacing:-.018em;
  margin:2px 0 4px;
}
.tier-sub{
  font-family:var(--f-body);font-weight:300;font-style:italic;
  font-size:clamp(15px,1.4vw,18px);
  color:var(--ink-mut);
  letter-spacing:.005em;
}

.tier-objective{
  margin-bottom:44px;
  max-width:780px;
}
.tier-objective p{
  font-family:var(--f-body);font-weight:300;
  font-size:16px;line-height:1.78;color:var(--ink);
}

.tier-meta-grid{
  display:grid;
  grid-template-columns:280px 1fr;
  gap:48px;
  padding:32px 0;
  border-top:1px solid var(--rule);
  border-bottom:1px solid var(--rule);
  margin-bottom:48px;
}
.tier-meta-l{
  font-family:var(--f-mono);font-size:10px;font-weight:500;letter-spacing:.10em;
  color:rgba(95,129,144,.65);margin-bottom:14px;
}
.tier-meta-ul{list-style:none;padding:0;}
.tier-meta-ul li{
  font-family:var(--f-body);font-weight:400;
  font-size:14px;line-height:1.85;color:var(--ink);
  padding-left:18px;position:relative;
}
.tier-meta-ul li::before{
  content:'';position:absolute;left:0;top:.9em;
  width:8px;height:1px;background:var(--ocean);
}
.tier-tags{display:flex;flex-wrap:wrap;gap:8px;}
.tier-tag{
  display:inline-block;
  padding:7px 14px;
  font-family:var(--f-mono);font-size:11px;font-weight:500;letter-spacing:.04em;
  color:var(--midnight);
  background:var(--white);
  border:1px solid var(--rule);
  transition:background .3s ease,color .3s ease,border-color .3s ease;
}
.tier-tag:hover{
  background:var(--midnight);color:var(--off);border-color:var(--midnight);
}
.tier-block.d3 .tier-tag{
  background:transparent;border-color:rgba(95,129,144,.30);
}

.tier-services{margin-bottom:48px;}
.tier-services-h{
  font-family:var(--f-nav);font-size:11px;font-weight:700;letter-spacing:.18em;text-transform:uppercase;
  color:var(--midnight);margin-bottom:32px;
  display:flex;align-items:baseline;gap:14px;flex-wrap:wrap;
}
.tier-incl{
  font-family:var(--f-body);font-weight:300;font-style:italic;
  font-size:12px;letter-spacing:.02em;text-transform:none;
  color:var(--ink-mut);
}
.tier-cat-grid{
  display:grid;
  grid-template-columns:repeat(3,1fr);
  gap:0;
  border-top:1px solid var(--rule);
  border-left:1px solid var(--rule);
}
.tier-cat{
  padding:32px 28px;
  border-right:1px solid var(--rule);
  border-bottom:1px solid var(--rule);
  background:var(--white);
  position:relative;
  transform:translate3d(0,0,0);
  will-change:transform,box-shadow;
  transition:
    transform .55s cubic-bezier(.2,.7,.15,1),
    box-shadow .55s cubic-bezier(.2,.7,.15,1),
    background .35s ease,
    border-color .35s ease;
}
/* TIER CAT — puzzle detachment. Five cells per grid in a 3-col / 2-row
   layout (one cell sits alone in the bottom-left). Each cell pulls
   in the direction of its position so the grid reads as five
   interlocking pieces engineered to detach independently. */
.tier-cat:hover{
  background:var(--off);
  z-index:5;
  box-shadow:
    0 1px 2px rgba(28,43,58,.04),
    0 12px 28px rgba(28,43,58,.08),
    0 36px 64px rgba(28,43,58,.12),
    0 0 0 1px rgba(95,129,144,.10);
  border-right-color:transparent;
  border-bottom-color:transparent;
}
.tier-cat-grid > .tier-cat:nth-child(1):hover{transform:translate3d(-10px,-6px,0) rotate(-0.4deg);}
.tier-cat-grid > .tier-cat:nth-child(2):hover{transform:translate3d(0,-9px,0) rotate(0);}
.tier-cat-grid > .tier-cat:nth-child(3):hover{transform:translate3d(10px,-6px,0) rotate(0.4deg);}
.tier-cat-grid > .tier-cat:nth-child(4):hover{transform:translate3d(-10px,6px,0) rotate(-0.28deg);}
.tier-cat-grid > .tier-cat:nth-child(5):hover{transform:translate3d(0,8px,0) rotate(0.18deg);}
.tier-cat-h{
  font-family:var(--f-nav);font-size:10px;font-weight:700;letter-spacing:.16em;text-transform:uppercase;
  color:var(--ocean-dk);margin-bottom:18px;
  display:flex;align-items:center;gap:10px;
}
.tier-cat-h::before{
  content:'';display:block;width:14px;height:1px;background:var(--ocean);
}
.tier-cat ul{list-style:none;padding:0;}
.tier-cat li{
  font-family:var(--f-body);font-weight:400;
  font-size:14px;line-height:1.7;color:var(--ink);
  padding:5px 0 5px 16px;position:relative;
}
.tier-cat li::before{
  content:'·';position:absolute;left:4px;top:5px;
  color:var(--ocean);font-weight:700;
}

.tier-clients{
  padding:28px 0 36px;
  border-top:1px solid var(--rule);
  margin-bottom:44px;
}
.tier-clients-ul{list-style:none;padding:0;display:grid;grid-template-columns:repeat(2,1fr);gap:6px 32px;}
.tier-clients-ul li{
  font-family:var(--f-body);font-weight:400;
  font-size:14px;line-height:1.8;color:var(--ink);
  padding-left:18px;position:relative;
}
.tier-clients-ul li::before{
  content:'→';position:absolute;left:0;top:0;
  color:var(--ocean);font-size:11px;
}

.tier-pull{
  margin:0;
  padding:40px 44px;
  background:var(--midnight);
  color:var(--off);
  position:relative;
  display:grid;
  grid-template-columns:auto 1fr;
  gap:28px;
  align-items:center;
}
.tier-block.d3 .tier-pull{
  background:linear-gradient(135deg,var(--ink-deep) 0%,var(--midnight) 50%,var(--ocean-dk) 100%);
}
.tier-pull-mark{
  font-family:var(--f-disp);font-size:90px;font-weight:700;line-height:.6;
  color:rgba(226,240,240,.22);
  align-self:start;
}
.tier-pull p{
  font-family:var(--f-disp);
  font-size:clamp(20px,2.2vw,28px);
  font-weight:400;
  line-height:1.32;
  color:var(--off);
  letter-spacing:-.005em;
}
.tier-pull p em{font-style:italic;font-weight:300;color:var(--ocean-lt);}
.tier-pull-attr{
  display:block;margin-top:14px;
  font-family:var(--f-mono);font-size:10px;font-weight:500;letter-spacing:.18em;
  color:rgba(226,240,240,.55);
}

/* Tier deep dive — responsive */
@media (max-width: 1024px){
  .tier-cat-grid{grid-template-columns:repeat(2,1fr);}
  .tier-meta-grid{grid-template-columns:1fr;gap:32px;}
}
@media (max-width: 720px){
  .tier-deep-dive{padding:72px 24px 88px;}
  .tier-block{padding:40px 24px 32px;margin-top:64px;}
  .tier-block-head{grid-template-columns:1fr;gap:18px;}
  .tier-num{font-size:88px;padding-right:0;border-right:none;border-bottom:1px solid var(--rule);padding-bottom:12px;}
  .tier-cat-grid{grid-template-columns:1fr;}
  .tier-clients-ul{grid-template-columns:1fr;}
  .tier-pull{padding:28px 24px;grid-template-columns:1fr;gap:14px;}
  .tier-pull-mark{font-size:60px;}
  /* Disable puzzle pulls in single-column mobile — keep just the lift on .tier-cat cells */
  .tier-cat-grid > .tier-cat:nth-child(1):hover,
  .tier-cat-grid > .tier-cat:nth-child(2):hover,
  .tier-cat-grid > .tier-cat:nth-child(3):hover,
  .tier-cat-grid > .tier-cat:nth-child(4):hover,
  .tier-cat-grid > .tier-cat:nth-child(5):hover{
    transform:translate3d(0,-2px,0);
  }
}
/* Respect motion preferences — disable puzzle pulls but keep visual changes */
@media (prefers-reduced-motion:reduce){
  .svc-grid-3 > .svc-card:nth-child(1):hover,
  .svc-grid-3 > .svc-card:nth-child(2):hover,
  .svc-grid-3 > .svc-card:nth-child(3):hover,
  .svc-grid-3 > .svc-card:nth-child(1).flipped,
  .svc-grid-3 > .svc-card:nth-child(2).flipped,
  .svc-grid-3 > .svc-card:nth-child(3).flipped{
    transform:rotateY(180deg) translateZ(0);
  }
  .tier-cat-grid > .tier-cat:nth-child(1):hover,
  .tier-cat-grid > .tier-cat:nth-child(2):hover,
  .tier-cat-grid > .tier-cat:nth-child(3):hover,
  .tier-cat-grid > .tier-cat:nth-child(4):hover,
  .tier-cat-grid > .tier-cat:nth-child(5):hover{transform:none;}
}

/* ============================================================
   NEW-PAGE HERO — used across every content page except home.
   Full-bleed dark background image + tint overlay + bottom gradient
   for readability. The .np-hero-bg div takes the image via inline style.
   ============================================================ */
.np-hero{
  /* Compact page-header hero — sits at the top of the page at
     ~65vh so the content below is visible without scrolling, then
     pins as a sticky cover while subsequent sections scroll up
     over it. Deliberately not full-screen: the home page owns
     the only full-viewport hero on the site. */
  position:sticky;
  top:0;
  height:65vh;
  min-height:65vh;
  background:var(--midnight);
  overflow:hidden;
  display:flex;
  align-items:center;
  padding:0 var(--gx);
  border-bottom:1px solid var(--rule-dk);
  z-index:0;
}
/* Sections that follow .np-hero need to layer above it so the
   scroll-cover effect reads cleanly. */
#page-journal .s-num-bar,
#page-journal .cap-section,
#page-journal .footer,
#page-engagements .s-num-bar,
#page-engagements .cap-section,
#page-engagements .footer,
#page-direct .s-num-bar,
#page-direct .cap-section,
#page-direct .footer{
  position:relative;
  z-index:1;
}
#page-journal .s-num-bar:nth-of-type(1),
#page-engagements .s-num-bar:nth-of-type(1),
#page-direct .s-num-bar:nth-of-type(1){
  /* Soft top edge on the first section that arrives over the hero */
  box-shadow:0 -24px 60px rgba(28,43,58,.10), 0 -1px 0 rgba(28,43,58,.06);
}
/* Reduced-motion fallback: drop the sticky-cover so the hero
   sits as a plain block at the top of the page. */
@media (prefers-reduced-motion:reduce){
  .np-hero{position:relative;height:auto;min-height:65vh;}
}
.np-hero-bg{
  position:absolute; inset:0;
  background-size:cover;
  background-position:center;
  z-index:0;
  /* Zoom is driven from JS via this CSS variable as the user scrolls
     past the hero — see the sticky-hero registry in main.js. Defaults
     to 1 when JS is off so the image still renders correctly. */
  transform:scale(var(--hero-zoom,1));
  transform-origin:center;
  will-change:transform;
  transition:transform .12s linear;
}
.np-hero::before{
  content:'';
  position:absolute; inset:0;
  background:rgba(8,15,22,.55);
  z-index:0;
}
.np-hero::after{
  content:'';
  position:absolute; bottom:0; left:0; right:0;
  height:60%;
  background:linear-gradient(to top, rgba(4,9,14,.95) 0%, rgba(4,9,14,.4) 60%, transparent 100%);
  z-index:0;
}
.np-hero-coord-tl{
  position:absolute; top:108px; left:var(--gx);
  font-family:var(--f-mono); font-size:9px;
  letter-spacing:.08em; color:var(--ocean-lt);
  z-index:2;
}
.np-hero-coord-tr{
  position:absolute; top:108px; right:var(--gx);
  font-family:var(--f-mono); font-size:9px;
  letter-spacing:.08em; color:rgba(138,173,184,.5);
  z-index:2;
}
.np-hero-content{
  position:relative; z-index:2;
  max-width:900px;
  width:100%;
}
.np-hero-eyebrow{
  font-family:var(--f-mono);
  font-size:10px; font-weight:600;
  letter-spacing:.22em;
  text-transform:uppercase;
  color:var(--ocean-lt);
  margin-bottom:28px;
  display:flex; align-items:center; gap:14px;
}
.np-hero-eyebrow::before{
  content:''; display:block;
  width:32px; height:1px; background:var(--ocean-lt);
}
.np-hl{
  font-family:var(--f-disp);
  font-size:clamp(46px, 6vw, 88px);
  font-weight:800; line-height:.92;
  letter-spacing:-.015em;
  color:var(--off);
  margin-bottom:32px;
}
.np-hl span{
  display:block;
  font-style:italic; font-weight:300;
  color:rgba(226,240,240,.7);
}
.np-meta{
  display:grid;
  grid-template-columns:repeat(3, auto);
  column-gap:64px; row-gap:18px;
  margin-top:36px;
}
.np-meta-l{
  font-family:var(--f-mono);
  font-size:9px; font-weight:500;
  letter-spacing:.16em;
  text-transform:uppercase;
  color:var(--ocean-lt);
  margin-bottom:8px;
}
.np-meta-v{
  font-family:var(--f-disp);
  font-size:15px; font-weight:600;
  color:var(--off);
}
@media (max-width:768px){
  .np-hero{
    min-height:70vh;
    padding:0 22px;
  }
  .np-hero-coord-tl,
  .np-hero-coord-tr{ top:88px; }
  .np-hero-coord-tl{ left:22px; }
  .np-hero-coord-tr{ right:22px; }
  .np-meta{
    grid-template-columns:1fr;
    column-gap:0; row-gap:16px;
  }
}

/* METHOD PAGE */
#page-method{background:var(--white);}
.mth-intro{background:var(--white);padding:140px var(--gx);display:grid;grid-template-columns:1fr 1fr;gap:96px;align-items:start;border-bottom:1px solid var(--rule);position:relative;}
.mth-intro-coord-l{position:absolute;top:48px;left:var(--gx);font-family:var(--f-mono);font-size:9px;letter-spacing:.08em;color:var(--ocean);}
.mth-intro-hl{font-family:var(--f-disp);font-size:clamp(40px,4.5vw,68px);font-weight:800;line-height:1.0;color:var(--midnight);letter-spacing:-.01em;}
.mth-intro-hl em{font-style:italic;font-weight:300;color:var(--ocean);}
.mth-intro-body{font-family:var(--f-body);font-weight:400;font-size:16px;line-height:1.85;color:var(--ink);max-width:480px;}
.mth-steps{background:var(--off);padding:0 var(--gx);border-bottom:1px solid var(--rule);}
.mth-step{display:grid;grid-template-columns:140px 1fr 1fr;gap:64px;align-items:start;padding:72px 0;border-bottom:1px solid var(--rule);position:relative;transition:background .3s;}
.mth-step:first-child{border-top:1px solid var(--rule);}
.mth-step::after{content:'';position:absolute;left:0;top:0;bottom:0;width:0;background:rgba(95,129,144,.04);transition:width .5s var(--ease);}
.mth-step:hover::after{width:100%;}
.mth-step-coord{position:relative;z-index:1;font-family:var(--f-mono);font-size:9px;font-weight:500;letter-spacing:.08em;color:var(--ocean);text-transform:uppercase;padding-top:8px;}
.mth-step-n{font-family:var(--f-disp);font-size:96px;font-weight:800;color:rgba(95,129,144,.1);line-height:1;transition:color .4s;position:relative;z-index:1;margin-top:28px;letter-spacing:-.01em;}
.mth-step:hover .mth-step-n{color:rgba(95,129,144,.22);}
.mth-step-main{position:relative;z-index:1;}
.mth-step-title{font-family:var(--f-nav);font-size:14px;font-weight:700;letter-spacing:.14em;text-transform:uppercase;color:var(--midnight);margin-bottom:14px;}
.mth-step-desc{font-family:var(--f-body);font-weight:400;font-size:15px;line-height:1.8;color:var(--ink);}
.mth-step-aside{position:relative;z-index:1;border-left:1px solid var(--rule);padding-left:28px;}
.mth-step-aside-l{font-family:var(--f-mono);font-size:10px;font-weight:500;letter-spacing:.1em;text-transform:uppercase;color:var(--ocean);margin-bottom:12px;}
.mth-step-aside-t{font-family:var(--f-body);font-weight:400;font-size:14px;line-height:1.8;color:var(--ink-mut);}
.mth-cta-mono{background:var(--midnight);padding:120px var(--gx);display:flex;align-items:center;justify-content:space-between;gap:60px;position:relative;overflow:hidden;}
.mth-cta-mono::before{content:'';position:absolute;inset:0;background-image:linear-gradient(to right,var(--grid-dk) 1px,transparent 1px);background-size:calc((100vw - 128px)/6) 100%;background-position:64px 0;pointer-events:none;opacity:.5;}
.mth-cta-mono > *{position:relative;z-index:1;}
.mth-cta-hl{font-family:var(--f-disp);font-size:clamp(36px,3.5vw,60px);font-weight:800;line-height:.95;color:var(--off);letter-spacing:-.01em;}
.mth-cta-hl em{font-style:italic;font-weight:300;color:var(--ocean-lt);}

/* METHOD PAGE — section layering for sections following the
   .np-hero so their solid backgrounds occlude the sticky hero. */
#page-method .s-num-bar,
#page-method .mth-intro,
#page-method .mth-steps,
#page-method .mth-cta-mono,
#page-method .footer{
  position:relative;
  z-index:1;
}
#page-method .mth-intro{
  /* first section to arrive over the hero — soft top edge for "lift" */
  box-shadow:0 -24px 60px rgba(28,43,58,.10), 0 -1px 0 rgba(28,43,58,.06);
}

/* THE FOUR-STEP SEQUENCE — alternating directional reveal.
   Odd rows enter from the left, even rows enter from the right. Staggered
   timing creates an architectural rhythm; rows hold position with no
   overshoot. Implemented as transform+opacity only for GPU stability. */
.mth-step{
  /* baseline state: hidden + offset. When `.is-in` is added, slides to home. */
  opacity:0;
  transform:translate3d(-72px,0,0);
  will-change:transform,opacity;
  transition:
    opacity .9s cubic-bezier(.16,1,.3,1),
    transform 1.05s cubic-bezier(.16,1,.3,1);
}
.mth-step:nth-child(even){
  transform:translate3d(72px,0,0);
}
.mth-step.is-in{
  opacity:1;
  transform:translate3d(0,0,0);
}
@media (prefers-reduced-motion:reduce){
  .mth-step{opacity:1;transform:none;transition:none;}
}

/* AIRASS */
#page-airass{background:var(--white);}
.air-body{background:var(--white);padding:140px var(--gx);display:grid;grid-template-columns:1fr 1fr;gap:96px;align-items:start;border-bottom:1px solid var(--rule);position:relative;}
.air-body-coord{position:absolute;top:48px;left:var(--gx);font-family:var(--f-mono);font-size:9px;letter-spacing:.08em;color:var(--ocean);}
.air-hl{font-family:var(--f-disp);font-size:clamp(40px,4.5vw,64px);font-weight:800;line-height:1.0;color:var(--midnight);margin-bottom:28px;letter-spacing:-.01em;}
.air-hl em{font-style:italic;font-weight:300;color:var(--ocean);}
.air-desc{font-family:var(--f-body);font-weight:300;font-size:15px;line-height:1.9;color:var(--ink);margin-bottom:18px;max-width:480px;}
.air-channels{display:flex;flex-direction:column;gap:0;border-top:1px solid var(--rule);position:relative;}
.air-ch{display:grid;grid-template-columns:50px 1fr auto;gap:20px;align-items:center;padding:24px 24px 24px 0;border-bottom:1px solid var(--rule);background:var(--off);transition:background .3s,padding-left .3s;position:relative;}
.air-ch::before{content:attr(data-idx);position:absolute;left:14px;font-family:var(--f-mono);font-size:9px;letter-spacing:.08em;color:rgba(95,129,144,.5);top:22px;}
.air-ch:hover{background:var(--white);padding-left:30px;}
.air-ch-icon{width:32px;height:32px;border:1px solid rgba(95,129,144,.3);display:flex;align-items:center;justify-content:center;margin-left:30px;}
.air-ch-title{font-family:var(--f-nav);font-size:11px;font-weight:700;letter-spacing:.14em;text-transform:uppercase;color:var(--midnight);margin-bottom:4px;}
.air-ch-desc{font-family:var(--f-body);font-weight:400;font-size:13px;line-height:1.7;color:var(--ink-mut);}
.air-ch-arrow{font-family:var(--f-mono);font-size:14px;color:var(--ocean);}

/* Image popup that appears on channel hover — anchored above the channel list */
.air-ch-popup{
  position:absolute;
  top:50%;left:50%;
  width:340px;height:220px;
  transform:translate(-50%,-50%) scale(.88);
  pointer-events:none;
  opacity:0;
  z-index:5;
  transition:opacity .45s var(--ease),transform .55s var(--ease);
  overflow:hidden;
  border:1px solid var(--rule);
  box-shadow:0 30px 60px rgba(8,15,22,.25);
  background-size:cover;background-position:center;
  background-color:var(--midnight);
}
.air-ch-popup::after{
  content:attr(data-popup-label);
  position:absolute;bottom:12px;left:14px;
  font-family:var(--f-mono);font-size:9px;
  color:var(--off);background:rgba(28,43,58,.78);
  padding:5px 10px;letter-spacing:.12em;text-transform:uppercase;
}
.air-ch-popup.on{
  opacity:1;
  transform:translate(-50%,-50%) scale(1) rotate(-1.5deg);
}
.air-features{background:var(--off);padding:120px var(--gx);border-bottom:1px solid var(--rule);}
.air-feat-grid{
  display:grid;grid-template-columns:repeat(3,1fr);
  border-top:1px solid var(--rule);border-left:1px solid var(--rule);
  margin-top:60px;
  position:relative;
  isolation:isolate;
}
.af-cell{
  padding:48px 40px;
  border-right:1px solid var(--rule);border-bottom:1px solid var(--rule);
  background:var(--off);
  cursor:none;
  position:relative;
  transform:translate3d(0,0,0);
  will-change:transform,box-shadow;
  transition:
    transform .55s cubic-bezier(.2,.7,.15,1),
    box-shadow .55s cubic-bezier(.2,.7,.15,1),
    background .35s ease,
    border-color .35s ease;
}
.af-cell::before{content:attr(data-idx);position:absolute;top:18px;right:20px;font-family:var(--f-mono);font-size:9px;font-weight:500;letter-spacing:.08em;color:rgba(95,129,144,.5);}

/* AIRaaS / "Powered by LeadSense" — puzzle detachment for the 3×2 cluster.
   Each cell pulls toward its position relative to the cluster centre.
   Top row pulls up + corner-out; bottom row pulls down + corner-out;
   middle column gets a subtle vertical lift only. Neighbours stay still. */
.af-cell:hover{
  background:var(--white);
  z-index:5;
  box-shadow:
    0 1px 2px rgba(28,43,58,.04),
    0 12px 28px rgba(28,43,58,.08),
    0 36px 64px rgba(28,43,58,.12),
    0 0 0 1px rgba(95,129,144,.10);
  border-right-color:transparent;
  border-bottom-color:transparent;
}
.af-cell:nth-child(1):hover{transform:translate3d(-10px,-8px,0) rotate(-0.4deg);}  /* top-left  */
.af-cell:nth-child(2):hover{transform:translate3d(0,-10px,0) rotate(0deg);}        /* top-mid   */
.af-cell:nth-child(3):hover{transform:translate3d(10px,-8px,0) rotate(0.4deg);}    /* top-right */
.af-cell:nth-child(4):hover{transform:translate3d(-10px,8px,0) rotate(0.4deg);}    /* bot-left  */
.af-cell:nth-child(5):hover{transform:translate3d(0,10px,0) rotate(0deg);}         /* bot-mid   */
.af-cell:nth-child(6):hover{transform:translate3d(10px,8px,0) rotate(-0.4deg);}    /* bot-right */

.af-num{font-family:var(--f-disp);font-size:56px;font-weight:800;color:rgba(95,129,144,.16);line-height:1;margin-bottom:18px;transition:color .3s;letter-spacing:-.01em;}
.af-cell:hover .af-num{color:rgba(95,129,144,.32);}
.af-title{font-family:var(--f-nav);font-size:11px;font-weight:700;letter-spacing:.14em;text-transform:uppercase;color:var(--midnight);margin-bottom:14px;}
.af-desc{font-family:var(--f-body);font-weight:400;font-size:14px;line-height:1.8;color:var(--ink-mut);}

/* PRODUCT (AIRaaS) PAGE — section layering for sections following the
   .np-hero so their solid backgrounds occlude the sticky hero. */
#page-airass .s-num-bar,
#page-airass .air-body,
#page-airass .air-features,
#page-airass .footer{
  position:relative;
  z-index:1;
}
#page-airass .air-body{
  /* first section to arrive over the hero — soft top edge for "lift" */
  box-shadow:0 -24px 60px rgba(28,43,58,.10), 0 -1px 0 rgba(28,43,58,.06);
}

/* HOME PAGE — cinematic sticky hero with scroll-scrubbed canvas frame-
   sequence playback. The hero pins via sticky (defined separately above);
   an invisible .hero-spacer below it (300vh) gives the user enough scroll
   distance for the JS to scrub through 150 sequential frames on a <canvas>.
   After the spacer ends, the rest of the page resumes normal flow. */
.hero-canvas{
  /* sits ON TOP of .hero-video, BEHIND the geometric grid + text overlays.
     starts hidden; JS adds .is-ready once first frame paints, and the
     canvas fades in over the looping video fallback. */
  position:absolute;inset:0;
  width:100%;height:100%;
  z-index:0;
  opacity:0;
  transition:opacity .65s cubic-bezier(.16,1,.3,1);
  pointer-events:none;
  will-change:opacity;
}
.hero-canvas.is-ready{opacity:1;}
.hero-canvas.is-scrubbing{
  /* very gentle blur during fast scrub — premium, never muddy */
  filter:blur(.6px) saturate(1.05);
}
.hero-spacer{
  /* invisible scroll runway. 300vh = three full viewport heights of scroll
     during which the canvas sequence scrubs from frame 0 → frame 149. */
  height:300vh;
  pointer-events:none;
  /* keep this at the same stacking level as the hero — its job is purely
     to add scrollable height inside the sticky's containing block. */
  position:relative;
  z-index:0;
}
@media (prefers-reduced-motion:reduce){
  /* people who opt out of motion get the looping video fallback only —
     spacer collapses, canvas stays hidden. */
  .hero-spacer{height:0;}
  .hero-canvas{display:none;}
}
/* PRINCIPALS PAGE — section layering for sections following the
   .np-hero so their solid backgrounds occlude the sticky hero. */
#page-principals{background:var(--off);}
#page-principals .s-num-bar,
#page-principals .prn-section,
#page-principals .quote-mono,
#page-principals .footer{
  position:relative;
  z-index:1;
}
#page-principals .prn-section{
  /* first section to arrive over the hero — soft top edge for "lift" */
  box-shadow:0 -24px 60px rgba(28,43,58,.10), 0 -1px 0 rgba(28,43,58,.06);
}

.prn-section{background:var(--white);padding:140px var(--gx);border-bottom:1px solid var(--rule);position:relative;overflow:hidden;}
/* Subtle architectural pattern in section background */
.prn-section::before{
  content:'';position:absolute;inset:0;
  background-image:
    linear-gradient(to right,var(--grid) 1px,transparent 1px),
    linear-gradient(to bottom,var(--grid) 1px,transparent 1px);
  background-size:120px 120px;
  pointer-events:none;opacity:.7;
  mask-image:linear-gradient(to bottom,black 0%,black 70%,transparent 100%);
  -webkit-mask-image:linear-gradient(to bottom,black 0%,black 70%,transparent 100%);
}
.prn-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:24px;margin-top:80px;position:relative;}
@media (max-width:1280px){.prn-grid{grid-template-columns:repeat(2,1fr);}}

/* Each principal is a "dossier" — vertical stack of plates with line-art glyph */
.principal-card{
  position:relative;
  background:var(--off);
  border:1px solid var(--rule);
  display:flex;flex-direction:column;
  cursor:pointer;
  /* Scroll-driven transform vars (set by JS choreography) */
  --px:0px; --py:0px; --pr:0deg; --po:1; --ps:1;
  transform:translate(var(--px),var(--py)) rotate(var(--pr)) scale(var(--ps));
  opacity:var(--po);
  will-change:transform,opacity;
  transition:border-color .5s var(--ease);
}
/* When scroll-anim is active, JS sets --tx via direct prop and disables transition */
.principal-card.scroll-anim{transition:none;}
.principal-card.scroll-rest{
  transition:transform .9s var(--ease),opacity .9s var(--ease),border-color .5s var(--ease);
}
.principal-card::before{
  /* Top accent rule */
  content:'';position:absolute;top:0;left:0;right:0;height:2px;
  background:var(--ocean);transform:scaleX(0);transform-origin:left;
  transition:transform .8s var(--ease);
  z-index:2;
}
.principal-card.in-view::before{transform:scaleX(1);}
.principal-card:hover{border-color:rgba(95,129,144,.55);}

/* PRINCIPAL MODAL — appears on hover with blurred backdrop */
.prn-modal-backdrop{
  position:fixed;inset:0;z-index:9994;
  background:rgba(8,15,22,0);backdrop-filter:blur(0px);
  -webkit-backdrop-filter:blur(0px);
  pointer-events:none;
  transition:background .45s var(--ease),backdrop-filter .45s var(--ease),-webkit-backdrop-filter .45s var(--ease);
}
.prn-modal-backdrop.on{
  background:rgba(8,15,22,.55);
  backdrop-filter:blur(14px);
  -webkit-backdrop-filter:blur(14px);
  pointer-events:all;
}
.prn-modal{
  position:fixed;top:50%;left:50%;
  /* start slightly higher + slightly smaller — gives the open animation a
     subtle "settling into place" feel instead of a hard appearance */
  transform:translate(-50%,-48%) scale(.94);
  width:min(94vw,1160px);
  max-height:90vh;
  z-index:9995;
  background:var(--off);
  border:1px solid var(--rule);
  box-shadow:0 60px 140px rgba(8,15,22,.55), 0 0 0 1px rgba(95,129,144,.18);
  /* visibility:hidden (not display:none) so the transition can animate
     opacity + transform from the closed state to the open state */
  visibility:hidden;
  opacity:0;
  pointer-events:none;
  display:grid;grid-template-columns:5fr 7fr;
  transition:
    opacity .42s cubic-bezier(.16,1,.3,1),
    transform .55s cubic-bezier(.16,1,.3,1),
    visibility 0s linear .42s;
  overflow:hidden;
  will-change:transform,opacity;
}
.prn-modal.on{
  visibility:visible;
  opacity:1;
  transform:translate(-50%,-50%) scale(1);
  pointer-events:all;
  transition:
    opacity .42s cubic-bezier(.16,1,.3,1),
    transform .55s cubic-bezier(.16,1,.3,1),
    visibility 0s linear 0s;
}
.prn-modal-coord{
  position:absolute;top:20px;left:24px;z-index:3;
  font-family:var(--f-mono);font-size:10px;font-weight:500;letter-spacing:.16em;
  color:rgba(247,247,245,.7);text-transform:uppercase;
}
.prn-modal-status{
  position:absolute;top:20px;right:140px;z-index:3;
  display:flex;align-items:center;gap:8px;
  font-family:var(--f-mono);font-size:10px;letter-spacing:.16em;
  color:rgba(247,247,245,.7);text-transform:uppercase;
}
.prn-modal-status::before{
  content:'';width:6px;height:6px;background:#4ade80;border-radius:50%;
  animation:pcBlink 2s ease-in-out infinite;
}
.prn-modal-close{
  position:absolute;top:16px;right:16px;
  width:42px;height:42px;
  background:rgba(28,43,58,.85);color:var(--off);
  display:flex;align-items:center;justify-content:center;
  cursor:none;z-index:5;
  font-family:var(--f-mono);font-size:18px;font-weight:300;
  border:1px solid rgba(95,129,144,.25);
  transition:background .3s,transform .3s var(--ease),border-color .3s;
}
.prn-modal-close:hover{background:var(--ocean);transform:rotate(90deg);border-color:var(--ocean);}

.prn-modal-image{
  position:relative;
  background:var(--midnight);
  display:flex;align-items:center;justify-content:center;
  min-height:520px;
  overflow:hidden;
}
.prn-modal-image::before{
  /* gridded backdrop */
  content:'';position:absolute;inset:0;
  background-image:
    linear-gradient(to right,var(--grid-dk) 1px,transparent 1px),
    linear-gradient(to bottom,var(--grid-dk) 1px,transparent 1px);
  background-size:60px 60px;
  pointer-events:none;opacity:.5;
}
.prn-modal-image::after{
  content:'';position:absolute;inset:0;
  background:linear-gradient(135deg,rgba(95,129,144,.1) 0%,transparent 60%);
  pointer-events:none;
}
.prn-modal-glyph{
  position:relative;z-index:1;
  font-family:var(--f-disp);font-size:280px;font-weight:800;
  color:rgba(138,173,184,.55);line-height:.85;letter-spacing:-.02em;
  animation:prnGlyphIn .8s var(--ease) .15s both;
}
@keyframes prnGlyphIn{
  from{opacity:0;transform:scale(.86) translateY(8px)}
  to{opacity:1;transform:none}
}
.prn-modal-image-tag{
  position:absolute;bottom:24px;left:24px;
  font-family:var(--f-mono);font-size:9px;letter-spacing:.16em;
  color:rgba(95,129,144,.65);text-transform:uppercase;
  z-index:2;
}

.prn-modal-body{
  padding:60px 60px 56px;
  position:relative;
  display:flex;flex-direction:column;
  overflow-y:auto;
}
.prn-modal-body::-webkit-scrollbar{width:3px;}
.prn-modal-body::-webkit-scrollbar-thumb{background:rgba(95,129,144,.3);}
.prn-modal-eyebrow{
  font-family:var(--f-mono);font-size:10px;font-weight:500;letter-spacing:.18em;
  text-transform:uppercase;color:var(--ocean);margin-bottom:18px;
  display:flex;align-items:center;gap:14px;
  animation:prnContentIn .55s var(--ease) .25s both;
}
.prn-modal-eyebrow::before{content:'';display:block;width:24px;height:1px;background:var(--ocean);}
.prn-modal-name{
  font-family:var(--f-disp);font-size:clamp(40px,4.5vw,64px);font-weight:800;
  color:var(--midnight);line-height:.95;letter-spacing:-.015em;margin-bottom:12px;
  animation:prnContentIn .55s var(--ease) .32s both;
}
.prn-modal-role{
  font-family:var(--f-mono);font-size:11px;font-weight:500;letter-spacing:.18em;
  text-transform:uppercase;color:var(--ocean);margin-bottom:32px;
  animation:prnContentIn .55s var(--ease) .4s both;
}
.prn-modal-divider{
  width:48px;height:1px;background:var(--ocean);margin-bottom:32px;
  animation:prnDivider .7s var(--ease) .48s both;
}
@keyframes prnDivider{from{width:0}to{width:48px}}
.prn-modal-bio{
  font-family:var(--f-body);font-weight:300;font-size:15px;line-height:1.85;
  color:var(--ink);margin-bottom:24px;
  animation:prnContentIn .55s var(--ease) .55s both;
}
.prn-modal-bio strong{color:var(--midnight);font-weight:600;}
.prn-modal-bio:nth-of-type(2){animation-delay:.62s;}
.prn-modal-tags{
  display:flex;flex-wrap:wrap;gap:6px;margin-top:24px;
  animation:prnContentIn .55s var(--ease) .7s both;
}
.prn-modal-tag{
  font-family:var(--f-mono);font-size:9px;font-weight:500;letter-spacing:.12em;
  text-transform:uppercase;color:var(--ocean);
  border:1px solid rgba(95,129,144,.3);padding:7px 12px;
}
@keyframes prnContentIn{
  from{opacity:0;transform:translateY(12px)}
  to{opacity:1;transform:none}
}

/* DOSSIER HEADER — index, photo, line glyph */
.pc-photo{
  position:relative;
  height:240px;
  background:var(--midnight);
  overflow:hidden;
}
.pc-photo::after{
  /* corner identifier */
  content:attr(data-idx);
  position:absolute;top:18px;left:20px;
  font-family:var(--f-mono);font-size:10px;letter-spacing:.16em;
  color:rgba(95,129,144,.7);text-transform:uppercase;
  z-index:3;
}
.pc-status{
  position:absolute;top:18px;right:20px;z-index:3;
  display:flex;align-items:center;gap:8px;
  font-family:var(--f-mono);font-size:9px;letter-spacing:.14em;
  color:rgba(95,129,144,.7);text-transform:uppercase;
}
.pc-status::before{
  content:'';width:5px;height:5px;background:#4ade80;border-radius:50%;
  animation:pcBlink 2s ease-in-out infinite;
}
@keyframes pcBlink{0%,100%{opacity:1}50%{opacity:.4}}

/* The architectural line drawing — draws itself in */
.pc-line-art{
  position:absolute;inset:0;
  display:flex;align-items:center;justify-content:center;
  z-index:1;
  transition:opacity .8s var(--ease);
}
.pc-line-art svg{width:78%;height:auto;max-height:220px;overflow:visible;}
.pc-line-art svg path,
.pc-line-art svg line,
.pc-line-art svg polyline,
.pc-line-art svg circle,
.pc-line-art svg rect{
  stroke:rgba(95,129,144,.55);
  stroke-width:1.2;
  fill:none;
  stroke-dasharray:1200;
  stroke-dashoffset:1200;
  transition:stroke-dashoffset 1.6s var(--ease),stroke .5s;
}
.principal-card.in-view .pc-line-art svg path,
.principal-card.in-view .pc-line-art svg line,
.principal-card.in-view .pc-line-art svg polyline,
.principal-card.in-view .pc-line-art svg circle,
.principal-card.in-view .pc-line-art svg rect{stroke-dashoffset:0;}
.principal-card:hover .pc-line-art svg path,
.principal-card:hover .pc-line-art svg line,
.principal-card:hover .pc-line-art svg polyline,
.principal-card:hover .pc-line-art svg circle,
.principal-card:hover .pc-line-art svg rect{stroke:var(--ocean-lt);}

/* Initials glyph — sits behind line art, fades out on hover to let lines breathe */
.pc-photo-glyph{
  position:absolute;
  font-family:var(--f-disp);font-size:96px;font-weight:800;
  color:rgba(95,129,144,.18);line-height:.85;letter-spacing:-.02em;
  z-index:0;
  transition:color .5s,opacity .6s var(--ease);
}
.principal-card:hover .pc-photo-glyph{opacity:.4;}

/* META — name, role, divider */
.pc-meta{
  padding:28px 28px 0;
  position:relative;
  background:var(--off);
}
.pc-name{
  font-family:var(--f-disp);font-size:24px;font-weight:800;
  color:var(--midnight);line-height:1.05;letter-spacing:-.01em;margin-bottom:10px;
}
.pc-role{
  font-family:var(--f-mono);font-size:9px;font-weight:500;
  letter-spacing:.16em;text-transform:uppercase;
  color:var(--ocean);margin-bottom:18px;
}
.pc-divider{width:36px;height:1px;background:var(--ocean);margin-bottom:18px;}

.pc-bio{
  font-family:var(--f-body);font-weight:300;font-size:12px;line-height:1.7;
  color:var(--ink-mut);padding-bottom:22px;
  border-bottom:1px solid var(--rule);margin:0 28px;
}

/* DOCTRINE QUOTE — typed-in motion on hover */
.pc-doctrine{
  padding:22px 28px 28px;
  position:relative;
  display:flex;flex-direction:column;gap:12px;
}
.pc-doctrine-l{
  font-family:var(--f-mono);font-size:8px;font-weight:500;
  letter-spacing:.18em;text-transform:uppercase;color:var(--ocean);
  display:flex;justify-content:space-between;align-items:center;
}
.pc-doctrine-l::after{
  content:attr(data-counter);
  color:rgba(95,129,144,.5);
}
.pc-doctrine-q{
  font-family:var(--f-disp);font-size:13px;font-weight:300;font-style:italic;
  line-height:1.5;color:var(--midnight);
  position:relative;min-height:60px;
}
.pc-doctrine-q::after{
  /* blinking caret on hover */
  content:'';display:inline-block;width:2px;height:1em;
  background:var(--ocean);margin-left:3px;
  vertical-align:text-bottom;
  opacity:0;animation:pcCaret 1.05s steps(1) infinite;
}
.principal-card:hover .pc-doctrine-q::after{opacity:1;}
@keyframes pcCaret{50%{opacity:0}}

/* DOSSIER FOOTER — domain tags */
.pc-domains{
  display:flex;flex-wrap:wrap;gap:5px;
  padding:0 28px 24px;
}
.pc-tag{
  font-family:var(--f-mono);font-size:8px;font-weight:500;
  letter-spacing:.1em;text-transform:uppercase;
  color:var(--ocean);background:transparent;
  border:1px solid rgba(95,129,144,.3);
  padding:6px 11px;
  transition:background .3s,color .3s,border-color .3s;
}
.principal-card:hover .pc-tag{border-color:rgba(95,129,144,.6);}
.pc-tag:hover{background:var(--ocean);color:var(--off);border-color:var(--ocean);}

/* Removed: expand overlay, backdrop, close button, hint, extended */
.pc-close,.prn-backdrop,.pc-hint,.pc-extended{display:none!important;}

/* INTAKE PAGE (contact reimagined) */
#page-intake{background:var(--off);}
.itk-body{background:var(--white);padding:120px var(--gx) 160px;border-bottom:1px solid var(--rule);position:relative;}
.itk-body-coord{position:absolute;top:48px;left:var(--gx);font-family:var(--f-mono);font-size:9px;letter-spacing:.08em;color:var(--ocean);}
.itk-body-coord-r{position:absolute;top:48px;right:var(--gx);font-family:var(--f-mono);font-size:9px;letter-spacing:.08em;color:rgba(95,129,144,.5);}

.itk-intro{display:grid;grid-template-columns:1fr 1fr;gap:96px;margin-top:60px;margin-bottom:80px;}
.itk-intro-hl{font-family:var(--f-disp);font-size:clamp(36px,4vw,60px);font-weight:800;line-height:1.0;color:var(--midnight);letter-spacing:-.01em;}
.itk-intro-hl em{font-style:italic;font-weight:300;color:var(--ocean);}
.itk-intro-body{font-family:var(--f-body);font-weight:400;font-size:16px;line-height:1.85;color:var(--ink);}

/* INTAKE PAGE — section layering for sections following the
   .np-hero so their solid backgrounds occlude the sticky hero. */
#page-intake .s-num-bar,
#page-intake .ap-atlas,
#page-intake .itk-body,
#page-intake .footer{
  position:relative;
  z-index:1;
}
#page-intake .ap-atlas{
  /* first section to arrive over the hero — soft top edge for "lift" */
  box-shadow:0 -24px 60px rgba(28,43,58,.10), 0 -1px 0 rgba(28,43,58,.06);
}

/* ============================================================
   BEFORE-THE-FORM ATLAS PROMPT  (apply.html — §ap-atlas)
   Dark zone between the hero and the intake form, designed to
   nudge visitors into a 30-second conversation with Atlas
   before they commit to filling the formal application.
   Mirror of the chat panel on the right side plays a scripted
   demo conversation when the section scrolls into view.
   ============================================================ */
.ap-atlas{
  /* Misty-blue surface — sits between mist (#E2F0F0) and
     ocean-lt (#8AADB8) on the brand palette. Soft top-to-bottom
     gradient gives the field depth without going dark. */
  background:linear-gradient(160deg, #D5E3E7 0%, #B6CAD1 100%);
  padding:130px var(--gx) 140px;
  position:relative;
  overflow:hidden;
  border-bottom:1px solid rgba(28,43,58,.10);
}
.ap-atlas::before{
  /* Soft white wash in the top-left so the headline lifts off
     the surface without the field feeling flat. */
  content:'';
  position:absolute;
  top:-30%; left:-15%;
  width:60%; height:90%;
  background:radial-gradient(ellipse at center, rgba(255,255,255,.45) 0%, transparent 65%);
  pointer-events:none;
}
.ap-atlas::after{
  /* Deeper ocean wash in the opposite corner — keeps the gradient
     from reading as flat pastel. */
  content:'';
  position:absolute;
  bottom:-30%; right:-15%;
  width:55%; height:80%;
  background:radial-gradient(ellipse at center, rgba(95,129,144,.16) 0%, transparent 65%);
  pointer-events:none;
}
.ap-atlas-coord-tl{
  position:absolute;
  top:38px; left:var(--gx);
  font-family:var(--f-mono);
  font-size:9px; font-weight:500;
  letter-spacing:.14em;
  text-transform:uppercase;
  color:var(--ocean);
  z-index:2;
  opacity:0;
  animation:apCoordIn .8s var(--ease) .2s forwards;
}
.ap-atlas-coord-tr{
  position:absolute;
  top:38px; right:var(--gx);
  font-family:var(--f-mono);
  font-size:9px; font-weight:500;
  letter-spacing:.14em;
  text-transform:uppercase;
  color:rgba(95,129,144,.55);
  z-index:2;
  opacity:0;
  animation:apCoordIn .8s var(--ease) .35s forwards;
}
@keyframes apCoordIn{ to{ opacity:1; } }

.ap-atlas-inner{
  display:grid;
  grid-template-columns:1.15fr 1fr;
  gap:90px;
  align-items:center;
  max-width:1280px;
  margin:0 auto;
  position:relative;
  z-index:1;
}

/* ---------- Left column: copy + CTAs ---------- */
.ap-atlas-text{
  opacity:0;
  transform:translateX(-24px);
  transition:opacity .9s var(--ease), transform .9s var(--ease);
}
.ap-atlas.is-in .ap-atlas-text{ opacity:1; transform:translateX(0); }

.ap-atlas-eyebrow{
  font-family:var(--f-mono);
  font-size:10px; font-weight:600;
  letter-spacing:.22em;
  text-transform:uppercase;
  color:var(--ocean);
  margin-bottom:32px;
  display:flex; align-items:center; gap:14px;
}
.ap-atlas-eyebrow::before{
  content:''; display:block;
  width:32px; height:1px;
  background:var(--ocean);
}

.ap-atlas-hl{
  font-family:var(--f-disp);
  font-size:clamp(40px,5.4vw,78px);
  font-weight:800;
  line-height:.92;
  letter-spacing:-.015em;
  color:var(--midnight);
  margin-bottom:34px;
}
.ap-atlas-hl span{
  display:block;
  font-style:italic;
  font-weight:300;
  color:rgba(28,43,58,.55);
}

.ap-atlas-body{
  font-family:var(--f-body);
  font-weight:300;
  font-size:16px;
  line-height:1.85;
  color:rgba(28,43,58,.82);
  margin-bottom:38px;
  max-width:480px;
}

.ap-atlas-points{
  list-style:none;
  padding:0;
  margin:0 0 48px;
  display:flex;
  flex-direction:column;
  gap:16px;
  max-width:480px;
}
.ap-atlas-points li{
  display:flex;
  align-items:flex-start;
  gap:16px;
  font-family:var(--f-body);
  font-weight:300;
  font-size:14px;
  line-height:1.7;
  color:rgba(28,43,58,.78);
  opacity:0;
  transform:translateX(-12px);
  transition:opacity .55s var(--ease), transform .55s var(--ease);
}
.ap-atlas.is-in .ap-atlas-points li{ opacity:1; transform:translateX(0); }
.ap-atlas.is-in .ap-atlas-points li:nth-child(1){ transition-delay:.55s; }
.ap-atlas.is-in .ap-atlas-points li:nth-child(2){ transition-delay:.70s; }
.ap-atlas.is-in .ap-atlas-points li:nth-child(3){ transition-delay:.85s; }
.ap-atlas-arrow{
  color:var(--ocean);
  font-family:var(--f-mono);
  font-size:13px;
  flex-shrink:0;
  margin-top:2px;
}

/* ---------- CTAs ---------- */
.ap-atlas-ctas{
  display:flex;
  align-items:center;
  gap:32px;
  flex-wrap:wrap;
}
.ap-atlas-cta{
  background:var(--midnight);
  border:1px solid rgba(28,43,58,.85);
  padding:17px 28px;
  display:inline-flex;
  align-items:center;
  gap:22px;
  cursor:none;
  font-family:var(--f-mono);
  font-size:11px;
  font-weight:600;
  letter-spacing:.18em;
  text-transform:uppercase;
  color:var(--off);
  position:relative;
  overflow:hidden;
  transition:background .35s var(--ease), border-color .35s var(--ease), transform .35s var(--ease), box-shadow .35s var(--ease);
}
.ap-atlas-cta::before{
  /* Subtle shimmer that sweeps across the button every few
     seconds — calls attention without flashing. Light shimmer
     on the dark button reads cleanly against the misty surface. */
  content:'';
  position:absolute;
  top:0; left:-100%;
  width:60%; height:100%;
  background:linear-gradient(90deg, transparent, rgba(247,247,245,.22), transparent);
  animation:apShimmer 4.5s ease-in-out infinite;
}
@keyframes apShimmer{
  0%   { left:-60%; }
  60%  { left:120%; }
  100% { left:120%; }
}
.ap-atlas-cta:hover{
  background:#243749;
  border-color:#3a4f63;
  transform:translateY(-2px);
  box-shadow:0 18px 36px rgba(28,43,58,.28), 0 1px 0 rgba(247,247,245,.12) inset;
}
.ap-atlas-cta-dot{
  width:7px; height:7px;
  background:#4ade80;
  border-radius:50%;
  flex-shrink:0;
  box-shadow:0 0 0 0 rgba(74,222,128,.55);
  animation:apPulseDot 2s ease-in-out infinite;
}
@keyframes apPulseDot{
  0%, 100% { box-shadow:0 0 0 0 rgba(74,222,128,.55); }
  50%      { box-shadow:0 0 0 9px rgba(74,222,128,0); }
}
.ap-atlas-cta-label{
  position:relative; z-index:1;
}
.ap-atlas-cta-arrow{
  font-size:13px;
  transition:transform .35s var(--ease);
}
.ap-atlas-cta:hover .ap-atlas-cta-arrow{ transform:translate(3px,-3px); }

/* WhatsApp variant — secondary CTA paired with "Begin with Atlas".
   Same button DNA (size, padding, mono-uppercase label, arrow) so
   the two read as a matched pair, but ghost-treated by default
   (transparent bg, midnight outline) so Atlas stays visually
   primary. Hover flips to official WhatsApp green with a soft
   brand-tinted shadow — moment of recognition for visitors who
   prefer the WhatsApp channel. */
.ap-atlas-cta-wa{
  background:transparent;
  border-color:rgba(28,43,58,.32);
  color:var(--midnight);
  text-decoration:none;
}
/* Suppress the shimmer keyframes on the secondary — the primary
   CTA owns that attention pattern. */
.ap-atlas-cta-wa::before{ display:none; }
.ap-atlas-cta-wa-ic{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  width:18px;
  height:18px;
  color:#25D366;
  transition:color .35s var(--ease);
  flex-shrink:0;
}
.ap-atlas-cta-wa:hover{
  background:#25D366;
  border-color:#25D366;
  color:#ffffff;
  box-shadow:0 18px 36px rgba(0,80,30,.22), 0 1px 0 rgba(255,255,255,.18) inset;
}
.ap-atlas-cta-wa:hover .ap-atlas-cta-wa-ic{ color:#ffffff; }

.ap-atlas-skip{
  font-family:var(--f-mono);
  font-size:10px;
  font-weight:500;
  letter-spacing:.18em;
  text-transform:uppercase;
  color:rgba(28,43,58,.55);
  text-decoration:none;
  cursor:none;
  display:inline-flex;
  align-items:center;
  gap:12px;
  transition:color .3s var(--ease);
}
.ap-atlas-skip span{
  display:inline-block;
  transition:transform .3s var(--ease);
}
.ap-atlas-skip:hover{ color:var(--midnight); }
.ap-atlas-skip:hover span{ transform:translateY(3px); }

/* ---------- Right column: scripted Atlas demo ---------- */
.ap-atlas-demo{
  opacity:0;
  transform:translateX(24px);
  transition:opacity 1s var(--ease) .2s, transform 1s var(--ease) .2s;
}
.ap-atlas-demo-frame{
  /* Crisp, solid chat-panel mock-up. The live floating chat
     widget uses backdrop-filter because it floats over varied
     page content — but THIS demo is a static UI inside a
     section, so a solid surface reads as a real panel. The
     thin top-to-bottom gradient gives subtle depth. */
  background:linear-gradient(180deg, #1C2B3A 0%, #0E1822 100%);
  border:1px solid rgba(255,255,255,.10);
  border-radius:22px;
  padding:20px 22px 24px;
  box-shadow:
    0 28px 60px rgba(28,43,58,.28),
    0 8px 18px rgba(28,43,58,.14),
    0 1px 0 rgba(255,255,255,.08) inset;
  position:relative;
  max-width:420px;
  margin:0 auto;
}
.ap-atlas.is-in .ap-atlas-demo{ opacity:1; transform:translateX(0); }

.ap-atlas-demo-hdr{
  display:flex;
  align-items:center;
  gap:11px;
  padding-bottom:16px;
  border-bottom:1px solid rgba(255,255,255,.08);
  margin-bottom:18px;
}
.ap-atlas-demo-av{
  width:26px; height:26px;
  background:rgba(95,129,144,.4);
  border-radius:6px;
  display:flex; align-items:center; justify-content:center;
  flex-shrink:0;
}
.ap-atlas-demo-name{
  font-family:var(--f-mono);
  font-size:10px;
  letter-spacing:.12em;
  text-transform:uppercase;
  color:var(--off);
  font-weight:500;
  flex:1;
}
.ap-atlas-demo-st{
  font-family:var(--f-mono);
  font-size:9px;
  letter-spacing:.14em;
  color:var(--ocean-lt);
  text-transform:uppercase;
  display:flex;
  align-items:center;
  gap:6px;
}
.ap-atlas-demo-st-dot{
  width:5px; height:5px;
  background:#4ade80;
  border-radius:50%;
  animation:apPulseDot 2s ease-in-out infinite;
}

.ap-atlas-demo-msgs{
  display:flex;
  flex-direction:column;
  gap:9px;
  min-height:260px;
}
.ap-atlas-demo-msg{
  max-width:82%;
  opacity:0;
  transform:translateY(8px);
  transition:opacity .5s var(--ease), transform .5s var(--ease);
}
.ap-atlas-demo-msg.in{
  opacity:1;
  transform:translateY(0);
}
.ap-atlas-demo-b{
  padding:10px 14px;
  font-family:var(--f-body);
  font-weight:300;
  font-size:13px;
  line-height:1.55;
  border-radius:14px;
}
.ap-atlas-demo-msg.bot{ align-self:flex-start; }
.ap-atlas-demo-msg.bot .ap-atlas-demo-b{
  background:rgba(255,255,255,.07);
  color:rgba(247,247,245,.92);
  border:1px solid rgba(255,255,255,.10);
  border-top-left-radius:4px;
}
.ap-atlas-demo-msg.user{ align-self:flex-end; }
.ap-atlas-demo-msg.user .ap-atlas-demo-b{
  background:rgba(95,129,144,.55);
  color:var(--off);
  border:1px solid rgba(255,255,255,.10);
  border-top-right-radius:4px;
}
/* Typing indicator inside the final bot bubble */
.ap-atlas-demo-msg.typing .ap-atlas-demo-b{
  display:flex;
  align-items:center;
  gap:5px;
  padding:14px 16px;
  width:fit-content;
}
.ap-atlas-demo-msg.typing.in .ap-atlas-demo-b span{
  width:5px; height:5px;
  background:var(--ocean-lt);
  border-radius:50%;
  animation:apTypBounce 1.2s ease-in-out infinite;
}
.ap-atlas-demo-msg.typing.in .ap-atlas-demo-b span:nth-child(2){ animation-delay:.18s; }
.ap-atlas-demo-msg.typing.in .ap-atlas-demo-b span:nth-child(3){ animation-delay:.36s; }
@keyframes apTypBounce{
  0%, 60%, 100% { transform:translateY(0);  opacity:.5; }
  30%           { transform:translateY(-5px); opacity:1; }
}

/* ---------- Reduced motion ---------- */
@media (prefers-reduced-motion:reduce){
  .ap-atlas-text,
  .ap-atlas-demo,
  .ap-atlas-points li,
  .ap-atlas-demo-msg{
    opacity:1 !important;
    transform:none !important;
    transition:none !important;
  }
  .ap-atlas-cta::before,
  .ap-atlas-cta-dot,
  .ap-atlas-demo-st-dot,
  .ap-atlas-demo-msg.typing.in .ap-atlas-demo-b span{ animation:none !important; }
}

/* ---------- Mobile ---------- */
@media (max-width:960px){
  .ap-atlas{ padding:80px var(--gx) 90px; }
  .ap-atlas-inner{
    grid-template-columns:1fr;
    gap:56px;
  }
  .ap-atlas-coord-tl,
  .ap-atlas-coord-tr{ top:24px; }
  .ap-atlas-coord-tr{ display:none; }
  .ap-atlas-ctas{ gap:18px; }
  .ap-atlas-demo-frame{ max-width:none; }
  .ap-atlas-demo-msgs{ min-height:240px; }
}

.itk-form{
  background:var(--off);padding:64px;
  border:1px solid var(--rule);
  position:relative;
  margin:0;
}
.itk-form::before{
  content:'';position:absolute;inset:0;
  background:var(--ocean);transform:translate(16px,16px);
  z-index:-1;opacity:.18;
}

/* Two-column intake layout */
.itk-grid{
  display:grid;grid-template-columns:1.55fr .85fr;gap:64px;align-items:start;
}

/* Right-side panel — talk to Atlas via WhatsApp */
.itk-aside{
  display:flex;flex-direction:column;gap:24px;
  position:sticky;top:120px;
}
.itk-aside-card{
  background:var(--midnight);
  padding:48px 40px;
  position:relative;overflow:hidden;
  border:1px solid rgba(95,129,144,.18);
}
.itk-aside-card::before{
  content:'';position:absolute;inset:0;
  background-image:linear-gradient(to right,var(--grid-dk) 1px,transparent 1px);
  background-size:50% 100%;pointer-events:none;opacity:.4;
}
.itk-aside-coord{position:absolute;top:18px;right:24px;font-family:var(--f-mono);font-size:9px;color:rgba(95,129,144,.5);letter-spacing:.08em;}
.itk-aside-eyebrow{font-family:var(--f-mono);font-size:9px;font-weight:500;letter-spacing:.18em;text-transform:uppercase;color:var(--ocean-lt);margin-bottom:18px;position:relative;}
.itk-aside-hl{font-family:var(--f-disp);font-size:32px;font-weight:800;line-height:1.05;color:var(--off);letter-spacing:-.01em;margin-bottom:18px;position:relative;}
.itk-aside-hl em{font-style:italic;font-weight:300;color:var(--ocean-lt);display:block;}
.itk-aside-text{font-family:var(--f-body);font-weight:300;font-size:13px;line-height:1.85;color:rgba(247,247,245,.85);margin-bottom:32px;position:relative;}
.itk-wa-btn{
  display:flex;align-items:center;justify-content:space-between;gap:16px;
  background:transparent;color:rgba(247,247,245,.85);
  padding:16px 20px;text-decoration:none;cursor:none;
  font-family:var(--f-nav);font-size:10px;font-weight:600;letter-spacing:.16em;text-transform:uppercase;
  position:relative;
  border:1px solid rgba(95,129,144,.32);
  transition:background .35s,border-color .35s,color .35s;
}
.itk-wa-btn::before{
  /* live status indicator dot */
  content:'';position:absolute;top:50%;left:-1px;
  width:3px;height:32px;transform:translateY(-50%);
  background:#25D366;
  transition:width .35s var(--ease);
  box-shadow:0 0 12px rgba(37,211,102,.5);
}
.itk-wa-btn:hover{background:rgba(95,129,144,.06);border-color:rgba(95,129,144,.55);color:var(--off);}
.itk-wa-btn:hover::before{width:5px;}
.itk-wa-btn-l{display:flex;align-items:center;gap:12px;}
.itk-wa-btn svg{width:16px;height:16px;flex-shrink:0;color:#25D366;}
.itk-wa-btn-arrow{font-family:var(--f-mono);font-size:13px;color:rgba(95,129,144,.7);transition:color .3s,transform .35s var(--ease);}
.itk-wa-btn:hover .itk-wa-btn-arrow{color:var(--off);transform:translateX(4px);}
.itk-divider{display:flex;align-items:center;gap:16px;font-family:var(--f-mono);font-size:9px;letter-spacing:.18em;color:rgba(95,129,144,.5);text-transform:uppercase;position:relative;margin:4px 0;}
.itk-divider::before,.itk-divider::after{content:'';flex:1;height:1px;background:rgba(95,129,144,.18);}
.itk-aside-mini{
  background:var(--off);padding:32px;
  position:relative;border:1px solid var(--rule);
}
.itk-aside-mini-l{font-family:var(--f-mono);font-size:9px;font-weight:500;letter-spacing:.14em;text-transform:uppercase;color:var(--ocean);margin-bottom:10px;}
.itk-aside-mini-v{font-family:var(--f-disp);font-size:18px;font-weight:600;color:var(--midnight);line-height:1.4;letter-spacing:-.005em;}
.itk-aside-mini-v a{color:inherit;text-decoration:none;cursor:none;border-bottom:1px solid var(--ocean);transition:color .3s;}
.itk-aside-mini-v a:hover{color:var(--ocean);}
.itk-form-header{display:flex;justify-content:space-between;align-items:center;padding-bottom:24px;border-bottom:1px solid var(--rule);margin-bottom:48px;}
.itk-form-title{font-family:var(--f-mono);font-size:11px;font-weight:500;letter-spacing:.14em;text-transform:uppercase;color:var(--midnight);}
.itk-form-meta{font-family:var(--f-mono);font-size:10px;color:var(--ocean);letter-spacing:.1em;}
.itk-fields{display:flex;flex-direction:column;gap:36px;}
.itk-field{display:flex;flex-direction:column;gap:8px;position:relative;}
.itk-field-label{
  font-family:var(--f-mono);font-size:9px;font-weight:500;letter-spacing:.14em;
  text-transform:uppercase;color:var(--ocean);
  display:flex;justify-content:space-between;align-items:center;
}
.itk-field-label em{font-style:normal;color:rgba(95,129,144,.5);font-size:9px;}
.itk-input{
  background:transparent;border:none;
  border-bottom:1px solid rgba(28,43,58,.2);
  padding:14px 0;
  font-family:var(--f-disp);font-size:20px;font-weight:300;
  color:var(--midnight);outline:none;cursor:none;
  transition:border-color .3s;
}
.itk-input::placeholder{color:rgba(20,20,20,.25);font-weight:300;}
.itk-input:focus{border-bottom-color:var(--ocean);}
.itk-textarea{
  background:transparent;border:1px solid rgba(28,43,58,.2);
  padding:18px 20px;min-height:140px;resize:vertical;
  font-family:var(--f-body);font-size:14px;font-weight:300;line-height:1.7;
  color:var(--midnight);outline:none;cursor:none;
  transition:border-color .3s;
}
.itk-textarea::placeholder{color:rgba(20,20,20,.3);}
.itk-textarea:focus{border-color:var(--ocean);}
.itk-row{display:grid;grid-template-columns:1fr 1fr;gap:36px;}
.itk-select{
  background:transparent;border:none;
  border-bottom:1px solid rgba(28,43,58,.2);
  padding:14px 0;
  font-family:var(--f-disp);font-size:20px;font-weight:300;
  color:var(--midnight);outline:none;cursor:none;
  appearance:none;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8' fill='none'%3E%3Cpath d='M1 1L6 6L11 1' stroke='%235F8190' stroke-width='1.5' stroke-linecap='round'/%3E%3C/svg%3E");
  background-repeat:no-repeat;background-position:right 4px center;
}
.itk-form-foot{margin-top:56px;padding-top:32px;border-top:1px solid var(--rule);display:flex;justify-content:space-between;align-items:center;gap:32px;}
.itk-disclaimer{font-family:var(--f-body);font-weight:300;font-size:11px;line-height:1.65;color:var(--ink-mut);max-width:380px;}
.itk-disclaimer strong{color:var(--midnight);font-weight:600;}
.itk-submit{
  font-family:var(--f-nav);font-size:11px;font-weight:600;letter-spacing:.18em;
  text-transform:uppercase;color:var(--off);background:var(--midnight);
  padding:18px 36px;border:none;cursor:none;
  transition:background .3s,transform .35s var(--ease);
}
.itk-submit:hover{background:var(--ocean);transform:translateY(-2px);}

.itk-meta-row{
  display:grid;grid-template-columns:repeat(3,1fr);gap:1px;
  background:rgba(28,43,58,.08);
  margin-top:120px;
  border-top:1px solid var(--rule);
  border-bottom:1px solid var(--rule);
}
.itk-meta-cell{
  background:var(--off);padding:48px;
  position:relative;
}
.itk-meta-cell::before{content:attr(data-idx);position:absolute;top:18px;right:20px;font-family:var(--f-mono);font-size:9px;color:rgba(95,129,144,.5);letter-spacing:.08em;}
.itk-meta-l{font-family:var(--f-mono);font-size:9px;font-weight:500;letter-spacing:.14em;text-transform:uppercase;color:var(--ocean);margin-bottom:14px;}
.itk-meta-v{font-family:var(--f-disp);font-size:24px;font-weight:600;color:var(--midnight);line-height:1.3;letter-spacing:-.005em;}

/* LEGAL PAGES — Privacy & Terms */
#page-privacy,#page-terms{background:var(--off);}
.lgl-hero{
  padding:160px var(--gx) 0;
  border-bottom:1px solid var(--rule);
  position:relative;background:var(--white);
  display:grid;grid-template-columns:1.2fr 1fr;
  gap:64px;align-items:stretch;
  min-height:560px;
}
.lgl-hero-content{
  padding-bottom:80px;display:flex;flex-direction:column;justify-content:center;
}
.lgl-hero-image{
  position:relative;
  background-size:cover;background-position:center;
  background-color:var(--midnight);
  margin-right:calc(var(--gx) * -1);
  min-height:520px;
}
.lgl-hero-image::before{
  content:'';position:absolute;inset:0;
  background:linear-gradient(135deg,rgba(28,43,58,.18) 0%,transparent 50%);
  pointer-events:none;
}
.lgl-hero-image::after{
  /* coordinate tag overlaid on image */
  content:attr(data-coord);
  position:absolute;bottom:24px;right:32px;
  font-family:var(--f-mono);font-size:9px;letter-spacing:.16em;
  color:var(--off);text-transform:uppercase;
  background:rgba(28,43,58,.7);padding:6px 12px;backdrop-filter:blur(4px);
}
.lgl-hero-coord-tl{position:absolute;top:108px;left:var(--gx);font-family:var(--f-mono);font-size:9px;letter-spacing:.08em;color:var(--ocean);z-index:2;}
.lgl-hero-coord-tr{position:absolute;top:108px;right:var(--gx);font-family:var(--f-mono);font-size:9px;letter-spacing:.08em;color:rgba(95,129,144,.5);z-index:2;}
.lgl-hero-eyebrow{font-family:var(--f-mono);font-size:10px;font-weight:600;letter-spacing:.2em;text-transform:uppercase;color:var(--ocean);margin-bottom:24px;display:flex;align-items:center;gap:14px;}
.lgl-hero-eyebrow::before{content:'';display:block;width:32px;height:1px;background:var(--ocean);}
.lgl-hl{
  font-family:var(--f-disp);font-size:clamp(48px,5.5vw,88px);font-weight:800;line-height:.92;
  color:var(--midnight);letter-spacing:-.015em;
}
.lgl-hl span{display:block;font-style:italic;font-weight:300;color:var(--ocean);}
.lgl-meta{
  margin-top:48px;padding-top:28px;
  border-top:1px solid var(--rule);
  display:grid;grid-template-columns:repeat(3,1fr);gap:36px;
}
.lgl-meta-l{font-family:var(--f-mono);font-size:9px;font-weight:500;letter-spacing:.14em;text-transform:uppercase;color:var(--ocean);margin-bottom:8px;}
.lgl-meta-v{font-family:var(--f-disp);font-size:16px;font-weight:600;color:var(--midnight);letter-spacing:-.005em;}

.lgl-body{
  background:var(--off);padding:120px var(--gx) 140px;
  border-bottom:1px solid var(--rule);
  display:grid;grid-template-columns:280px minmax(0,1fr);gap:96px;align-items:start;
  position:relative;
}
.lgl-toc{
  position:sticky;top:120px;
}
.lgl-toc-l{font-family:var(--f-mono);font-size:9px;font-weight:500;letter-spacing:.16em;text-transform:uppercase;color:var(--ocean);margin-bottom:20px;padding-bottom:16px;border-bottom:1px solid var(--rule);}
.lgl-toc-list{list-style:none;display:flex;flex-direction:column;gap:0;}
.lgl-toc-item{
  display:grid;grid-template-columns:36px 1fr;gap:14px;align-items:start;
  padding:14px 0;border-bottom:1px solid var(--rule);
  text-decoration:none;cursor:none;
  transition:padding-left .35s var(--ease),background .3s;
  position:relative;
}
.lgl-toc-item::before{content:'';position:absolute;left:-12px;top:0;bottom:0;width:0;background:rgba(95,129,144,.1);transition:width .35s var(--ease);}
.lgl-toc-item:hover{padding-left:8px;}
.lgl-toc-item:hover::before{width:calc(100% + 24px);}
.lgl-toc-item.active::before{width:calc(100% + 24px);background:rgba(95,129,144,.15);}
.lgl-toc-num{font-family:var(--f-mono);font-size:10px;font-weight:500;color:rgba(95,129,144,.65);position:relative;}
.lgl-toc-t{font-family:var(--f-body);font-size:13px;font-weight:400;line-height:1.5;color:var(--ink);position:relative;transition:color .3s;}
.lgl-toc-item:hover .lgl-toc-t,.lgl-toc-item.active .lgl-toc-t{color:var(--midnight);}

.lgl-content{
  max-width:880px;
  width:100%;
  min-width:0;
  font-family:var(--f-body);font-weight:400;font-size:16px;line-height:1.8;color:var(--ink);
}
.lgl-section{
  padding-bottom:64px;margin-bottom:64px;
  border-bottom:1px solid var(--rule);
  scroll-margin-top:120px;
}
.lgl-section:last-child{border-bottom:none;margin-bottom:0;padding-bottom:0;}
.lgl-section-coord{
  font-family:var(--f-mono);font-size:10px;font-weight:500;letter-spacing:.14em;
  text-transform:uppercase;color:var(--ocean);margin-bottom:14px;
  display:flex;align-items:center;gap:14px;
}
.lgl-section-coord::before{content:'';display:block;width:24px;height:1px;background:var(--ocean);}
.lgl-section-h{
  font-family:var(--f-disp);font-size:clamp(28px,3vw,42px);font-weight:800;
  color:var(--midnight);line-height:1.1;letter-spacing:-.01em;margin-bottom:24px;
}
.lgl-section-h em{font-style:italic;font-weight:300;color:var(--ocean);}
.lgl-section p{margin-bottom:20px;}
.lgl-section p:last-child{margin-bottom:0;}
.lgl-section strong{color:var(--midnight);font-weight:600;}
.lgl-section a{color:var(--midnight);text-decoration:none;border-bottom:1px solid var(--ocean);cursor:none;transition:color .3s;}
.lgl-section a:hover{color:var(--ocean);}
.lgl-section ul{list-style:none;margin:20px 0;padding:0;}
.lgl-section ul li{
  display:flex;gap:12px;align-items:flex-start;
  padding:8px 0;
  min-width:0;
  word-break:normal;
  overflow-wrap:normal;
}
.lgl-section ul li::before{
  content:'';display:block;width:14px;height:1px;background:var(--ocean);margin-top:12px;flex:0 0 14px;
}
.lgl-section h4{
  font-family:var(--f-nav);font-size:12px;font-weight:700;letter-spacing:.14em;
  text-transform:uppercase;color:var(--midnight);margin:32px 0 12px;
}
.lgl-callout{
  background:var(--white);border:1px solid var(--rule);
  padding:32px;margin:32px 0;
  position:relative;
}
.lgl-callout::before{
  content:'';position:absolute;inset:0;background:var(--ocean);
  transform:translate(8px,8px);z-index:-1;opacity:.16;
}
.lgl-callout-l{
  font-family:var(--f-mono);font-size:9px;font-weight:500;letter-spacing:.14em;
  text-transform:uppercase;color:var(--ocean);margin-bottom:10px;
}
.lgl-callout p{font-size:14px;margin:0;}

/* FOOTER — glass treatment.
   Translucent dark gradient + backdrop-filter blur lets the content
   above (last section of the page) soft-blur through the top edge
   as the visitor scrolls. White rim border + inset highlight at the
   top reads as "this is a glass plate, not the page edge". The
   existing grid pattern overlay (::before) stays intact for the
   editorial signature. Single edit at the base rule covers every
   page — the per-page #page-* > .footer overrides only adjust
   positioning, not background. */
.footer{
  background:linear-gradient(180deg, rgba(14,24,34,.68) 0%, rgba(14,24,34,.88) 100%);
  -webkit-backdrop-filter:blur(24px) saturate(140%);
          backdrop-filter:blur(24px) saturate(140%);
  border-top:1px solid rgba(255,255,255,.08);
  box-shadow:
    0 -8px 24px -8px rgba(0,0,0,.30),
    0 1px 0 rgba(255,255,255,.10) inset;
  padding:88px var(--gx) 44px;
  position:relative;
  overflow:hidden;
}
.footer::before{content:'';position:absolute;inset:0;background-image:linear-gradient(to right,var(--grid-dk) 1px,transparent 1px);background-size:calc((100vw - 128px)/6) 100%;background-position:64px 0;pointer-events:none;opacity:.4;}
.footer-coord-tl,.footer-coord-tr{position:absolute;top:32px;font-family:var(--f-mono);font-size:9px;letter-spacing:.08em;color:rgba(95,129,144,.5);}
.footer-coord-tl{left:var(--gx);} .footer-coord-tr{right:var(--gx);}
.footer-top{position:relative;z-index:1;display:grid;grid-template-columns:2fr 1fr 1fr 1fr;gap:80px;padding-bottom:64px;border-bottom:1px solid rgba(95,129,144,.12);margin-bottom:40px;margin-top:30px;}
.ft-wm{font-family:var(--f-disp);font-size:17px;font-weight:800;letter-spacing:.26em;color:var(--off);display:flex;align-items:center;gap:12px;margin-bottom:16px;}
.ft-tag{font-family:var(--f-nav);font-size:9px;font-weight:600;letter-spacing:.18em;text-transform:uppercase;color:var(--ocean);margin-bottom:20px;}
.ft-blurb{font-family:var(--f-body);font-weight:300;font-size:12px;line-height:1.85;color:rgba(247,247,245,.28);max-width:280px;}
.ft-col-t{font-family:var(--f-mono);font-size:10px;font-weight:500;letter-spacing:.1em;text-transform:uppercase;color:var(--ocean);margin-bottom:20px;}
.ft-links{list-style:none;display:flex;flex-direction:column;gap:10px;}
.ft-links a{font-family:var(--f-body);font-weight:300;font-size:12px;color:rgba(247,247,245,.72);text-decoration:none;cursor:none;transition:color .3s;}
.ft-links a:hover{color:var(--off);}
.footer-bottom{position:relative;z-index:1;display:flex;justify-content:space-between;align-items:center;}
.ft-copy{font-family:var(--f-mono);font-size:9px;font-weight:500;letter-spacing:.08em;color:rgba(247,247,245,.55);}
.ft-legal{display:flex;gap:28px;}
.ft-legal a{font-family:var(--f-body);font-size:11px;color:rgba(247,247,245,.6);text-decoration:none;cursor:none;transition:color .3s;}
.ft-legal a:hover{color:var(--off);}


/* ════════════════════════════════════════════════════
   AUTHENTICATION PAGES — signin, mfa, register, reset
══════════════════════════════════════════════════════ */
#page-signin,#page-mfa,#page-register,#page-reset{background:var(--off);}

/* These pages override any nav/menu visibility — full-bleed */
#page-signin .grid-overlay,
#page-mfa .grid-overlay,
#page-register .grid-overlay,
#page-reset .grid-overlay{display:none;}

.auth-shell{
  position:absolute;inset:0;
  display:grid;grid-template-columns:1fr 1fr;
  background:var(--off);
  overflow:hidden;
}

/* LEFT SLAB — brand monolith */
.auth-brand{
  background:var(--ink-deep);
  position:relative;overflow:hidden;
  display:flex;flex-direction:column;
  padding:60px;
}
.auth-brand::before{
  content:'';position:absolute;inset:0;
  background-image:linear-gradient(to right,var(--grid-dk) 1px,transparent 1px);
  background-size:25% 100%;pointer-events:none;opacity:.55;
}
.auth-brand-coord-tl{
  position:absolute;top:32px;left:48px;z-index:2;
  font-family:var(--f-mono);font-size:9px;letter-spacing:.16em;
  color:rgba(95,129,144,.55);text-transform:uppercase;
}
.auth-brand-coord-bl{
  position:absolute;bottom:32px;left:48px;z-index:2;
  font-family:var(--f-mono);font-size:9px;letter-spacing:.16em;
  color:rgba(95,129,144,.55);text-transform:uppercase;
}
.auth-brand-coord-br{
  position:absolute;bottom:32px;right:48px;z-index:2;
  font-family:var(--f-mono);font-size:9px;letter-spacing:.16em;
  color:rgba(95,129,144,.55);text-transform:uppercase;
  display:flex;align-items:center;gap:8px;
}
.auth-brand-coord-br::before{
  content:'';width:5px;height:5px;background:#4ade80;border-radius:50%;
  animation:pcBlink 2s ease-in-out infinite;
}
.auth-brand-mark{
  font-family:var(--f-disp);font-size:18px;font-weight:800;letter-spacing:.34em;
  color:var(--off);position:relative;z-index:2;
}
.auth-brand-tag{
  font-family:var(--f-mono);font-size:9px;font-weight:600;letter-spacing:.18em;
  text-transform:uppercase;color:var(--ocean);margin-top:6px;position:relative;z-index:2;
}

/* The big monolith line drawing — center stage */
.auth-brand-glyph{
  flex:1;display:flex;align-items:center;justify-content:center;
  position:relative;z-index:1;
  margin:60px 0;
}
.auth-brand-glyph svg{
  width:80%;max-width:380px;height:auto;overflow:visible;
}
.auth-brand-glyph svg path,
.auth-brand-glyph svg line,
.auth-brand-glyph svg polyline,
.auth-brand-glyph svg circle,
.auth-brand-glyph svg rect{
  stroke:rgba(138,173,184,.4);stroke-width:1.2;fill:none;
  stroke-dasharray:3000;stroke-dashoffset:3000;
  animation:authDraw 3s var(--ease) .3s forwards;
}
@keyframes authDraw{to{stroke-dashoffset:0;}}

/* The doctrine carousel at the bottom */
.auth-brand-foot{
  position:relative;z-index:2;
  border-top:1px solid rgba(95,129,144,.18);
  padding-top:32px;
}
.auth-brand-foot-l{
  font-family:var(--f-mono);font-size:9px;font-weight:500;letter-spacing:.18em;
  text-transform:uppercase;color:var(--ocean);margin-bottom:12px;
}
.auth-doctrine{
  font-family:var(--f-disp);font-size:18px;font-weight:300;font-style:italic;
  line-height:1.5;color:rgba(247,247,245,.85);
  min-height:90px;
  transition:opacity .5s var(--ease);
}
.auth-doctrine.fading{opacity:0;}

/* RIGHT FORM PANEL */
.auth-form-pane{
  background:var(--off);
  display:flex;flex-direction:column;
  padding:60px;position:relative;
}
.auth-form-coord-tl{
  position:absolute;top:32px;left:48px;
  font-family:var(--f-mono);font-size:9px;letter-spacing:.16em;
  color:var(--ocean);text-transform:uppercase;
}
.auth-form-coord-tr{
  position:absolute;top:32px;right:48px;
  font-family:var(--f-mono);font-size:9px;letter-spacing:.16em;
  color:rgba(95,129,144,.55);text-transform:uppercase;
}
.auth-form-back{
  position:absolute;top:28px;right:48px;
  font-family:var(--f-mono);font-size:10px;font-weight:500;letter-spacing:.18em;
  text-transform:uppercase;color:rgba(20,20,20,.55);
  text-decoration:none;cursor:none;
  display:flex;align-items:center;gap:8px;
  transition:color .3s,gap .35s var(--ease);
}
.auth-form-back:hover{color:var(--midnight);gap:14px;}
.auth-form-back::before{content:'←';font-family:var(--f-mono);}

.auth-form{
  margin:auto;max-width:440px;width:100%;
  display:flex;flex-direction:column;gap:0;
}
.auth-eyebrow{
  font-family:var(--f-mono);font-size:10px;font-weight:600;letter-spacing:.22em;
  text-transform:uppercase;color:var(--ocean);margin-bottom:24px;
  display:flex;align-items:center;gap:14px;
}
.auth-eyebrow::before{content:'';display:block;width:24px;height:1px;background:var(--ocean);}
.auth-h{
  font-family:var(--f-disp);font-size:clamp(40px,3.6vw,52px);font-weight:800;
  line-height:.95;color:var(--midnight);letter-spacing:-.015em;margin-bottom:14px;
}
.auth-h em{font-style:italic;font-weight:300;color:var(--ocean);}
.auth-sub{
  font-family:var(--f-body);font-weight:300;font-size:14px;line-height:1.7;
  color:var(--ink-mut);margin-bottom:48px;max-width:380px;
}
.auth-fields{display:flex;flex-direction:column;gap:32px;margin-bottom:36px;}
.auth-field{display:flex;flex-direction:column;gap:6px;position:relative;}
.auth-field-l{
  font-family:var(--f-mono);font-size:9px;font-weight:500;letter-spacing:.16em;
  text-transform:uppercase;color:var(--ocean);
  display:flex;justify-content:space-between;align-items:center;
}
.auth-field-l em{font-style:normal;color:rgba(95,129,144,.5);font-weight:500;}
.auth-input{
  background:transparent;border:none;
  border-bottom:1px solid rgba(28,43,58,.22);
  padding:14px 0;
  font-family:var(--f-disp);font-size:18px;font-weight:300;
  color:var(--midnight);outline:none;cursor:none;
  transition:border-color .3s;
}
.auth-input::placeholder{color:rgba(20,20,20,.25);font-weight:300;}
.auth-input:focus{border-bottom-color:var(--ocean);}
.auth-row{display:flex;justify-content:space-between;align-items:center;gap:16px;font-family:var(--f-mono);font-size:11px;}
.auth-checkbox{
  display:flex;align-items:center;gap:10px;cursor:none;
  color:var(--ink-mut);
}
.auth-checkbox input{
  appearance:none;-webkit-appearance:none;
  width:14px;height:14px;border:1px solid rgba(95,129,144,.5);
  background:transparent;cursor:none;
  display:flex;align-items:center;justify-content:center;
  transition:background .2s,border-color .2s;
}
.auth-checkbox input:checked{background:var(--ocean);border-color:var(--ocean);}
.auth-checkbox input:checked::after{content:'✓';color:var(--ink-deep);font-size:10px;font-weight:700;}
.auth-link{
  color:var(--ocean);text-decoration:none;cursor:none;letter-spacing:.14em;
  text-transform:uppercase;transition:color .3s;
}
.auth-link:hover{color:var(--midnight);}
.auth-submit{
  width:100%;padding:18px 24px;
  font-family:var(--f-nav);font-size:11px;font-weight:600;letter-spacing:.18em;
  text-transform:uppercase;color:var(--off);background:var(--midnight);
  border:none;cursor:none;
  display:flex;align-items:center;justify-content:space-between;gap:14px;
  transition:background .35s,transform .4s var(--ease);
  margin-top:12px;
}
.auth-submit:hover{background:var(--ocean);transform:translateY(-2px);}
.auth-submit::after{content:'→';font-family:var(--f-mono);font-size:14px;}
.auth-submit:disabled{background:rgba(28,43,58,.4);cursor:not-allowed;}

.auth-foot{
  margin-top:48px;padding-top:28px;
  border-top:1px solid var(--rule);
  display:flex;justify-content:space-between;align-items:center;
  font-family:var(--f-mono);font-size:9px;letter-spacing:.14em;
  color:rgba(95,129,144,.6);text-transform:uppercase;
}
.auth-foot a{color:rgba(95,129,144,.85);text-decoration:none;cursor:none;transition:color .3s;}
.auth-foot a:hover{color:var(--midnight);}

.auth-compliance{
  position:absolute;bottom:32px;left:48px;right:48px;z-index:2;
  display:flex;justify-content:space-between;align-items:center;
  font-family:var(--f-mono);font-size:8px;letter-spacing:.16em;
  color:rgba(20,20,20,.32);text-transform:uppercase;
  padding-top:18px;border-top:1px solid var(--rule);
}
.auth-compliance-l{display:flex;align-items:center;gap:8px;}
.auth-compliance-l::before{
  content:'';width:6px;height:6px;background:#4ade80;border-radius:50%;
  animation:pcBlink 2s ease-in-out infinite;
}

/* Demo notice */
.auth-demo{
  margin-top:24px;padding:14px 16px;
  background:rgba(95,129,144,.06);
  border-left:2px solid var(--ocean);
  font-family:var(--f-mono);font-size:10px;font-weight:500;letter-spacing:.06em;
  color:var(--ink-mut);line-height:1.6;
}
.auth-demo strong{color:var(--midnight);font-weight:600;}

/* MFA-specific — 6-digit code input */
.auth-otp{
  display:grid;grid-template-columns:repeat(6,1fr);gap:12px;
  margin:8px 0 16px;
}
.auth-otp input{
  background:var(--white);border:1px solid var(--rule);
  padding:18px 0;
  font-family:var(--f-mono);font-size:24px;font-weight:600;
  color:var(--midnight);text-align:center;outline:none;cursor:none;
  letter-spacing:.05em;
  transition:border-color .25s,background .25s;
}
.auth-otp input:focus{border-color:var(--ocean);background:var(--off);}
.auth-otp input.filled{border-color:var(--ocean);}
.auth-otp-meta{
  display:flex;justify-content:space-between;align-items:center;
  font-family:var(--f-mono);font-size:10px;letter-spacing:.14em;
  color:var(--ink-mut);text-transform:uppercase;
}
.auth-otp-timer{color:var(--ocean);font-variant-numeric:tabular-nums;}

/* Mobile responsive */
@media (max-width:880px){
  .auth-shell{grid-template-columns:1fr;grid-template-rows:auto 1fr;}
  .auth-brand{padding:32px;min-height:280px;}
  .auth-form-pane{padding:48px 32px;}
  .auth-compliance{display:none;}
}

/* ════════════════════════════════════════════════════
   CLIENT DASHBOARD
══════════════════════════════════════════════════════ */
#page-dashboard{background:var(--off);}
#page-dashboard .grid-overlay{display:none;}

.dash-shell{
  position:absolute;inset:0;
  display:grid;grid-template-columns:240px 1fr;
  background:var(--off);
  overflow:hidden;
}

/* SIDEBAR */
.dash-side{
  background:var(--white);
  border-right:1px solid var(--rule);
  display:flex;flex-direction:column;
  padding:36px 24px;
  overflow-y:auto;
}
.dash-side-mark{
  display:flex;flex-direction:column;gap:4px;
  padding-bottom:32px;margin-bottom:32px;
  border-bottom:1px solid var(--rule);
}
.dash-side-wm{
  font-family:var(--f-disp);font-size:14px;font-weight:800;letter-spacing:.34em;
  color:var(--midnight);
}
.dash-side-tag{
  font-family:var(--f-mono);font-size:8px;font-weight:600;letter-spacing:.16em;
  text-transform:uppercase;color:var(--ocean);
}
.dash-side-section{
  margin-bottom:32px;
}
.dash-side-h{
  font-family:var(--f-mono);font-size:9px;font-weight:600;letter-spacing:.18em;
  text-transform:uppercase;color:var(--ocean);margin-bottom:14px;padding:0 4px;
}
.dash-side-nav{list-style:none;display:flex;flex-direction:column;gap:2px;}
.dash-side-nav a{
  display:grid;grid-template-columns:32px 1fr auto;gap:10px;align-items:center;
  padding:11px 12px;
  font-family:var(--f-nav);font-size:12px;font-weight:500;letter-spacing:.05em;
  color:var(--ink-mut);text-decoration:none;cursor:none;
  position:relative;
  transition:background .3s,color .3s;
}
.dash-side-nav a::before{
  content:attr(data-num);
  font-family:var(--f-mono);font-size:9px;color:rgba(95,129,144,.5);font-weight:500;
}
.dash-side-nav a:hover,
.dash-side-nav a.active{
  background:rgba(95,129,144,.07);color:var(--midnight);
}
.dash-side-nav a.active{background:var(--ocean);color:var(--off);}
.dash-side-nav a.active::before{color:rgba(247,247,245,.7);}
.dash-side-foot{
  margin-top:auto;padding-top:24px;
  border-top:1px solid var(--rule);
  display:flex;flex-direction:column;gap:14px;
}
.dash-principal{
  display:flex;align-items:center;gap:10px;
  padding:10px;background:var(--off);
  cursor:none;
  transition:background .3s;
}
.dash-principal:hover{background:rgba(95,129,144,.07);}
.dash-principal-glyph{
  width:32px;height:32px;
  background:var(--midnight);color:var(--ocean-lt);
  display:flex;align-items:center;justify-content:center;
  font-family:var(--f-disp);font-size:11px;font-weight:800;letter-spacing:-.01em;
  flex-shrink:0;
}
.dash-principal-info{display:flex;flex-direction:column;gap:1px;min-width:0;}
.dash-principal-l{
  font-family:var(--f-mono);font-size:8px;letter-spacing:.14em;
  color:rgba(95,129,144,.65);text-transform:uppercase;
}
.dash-principal-n{
  font-family:var(--f-disp);font-size:13px;font-weight:600;color:var(--midnight);
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
.dash-signout{
  display:flex;align-items:center;justify-content:space-between;gap:10px;
  padding:10px 12px;
  font-family:var(--f-mono);font-size:9px;font-weight:600;letter-spacing:.18em;
  text-transform:uppercase;color:rgba(20,20,20,.78);
  text-decoration:none;cursor:none;
  border:1px solid var(--rule);
  transition:background .3s,color .3s,border-color .3s;
}
.dash-signout::after{content:'→';font-family:var(--f-mono);}
.dash-signout:hover{background:var(--midnight);color:var(--off);border-color:var(--midnight);}

/* MAIN AREA */
.dash-main{
  overflow-y:auto;
  padding:0;
}

/* TOP BAR */
.dash-topbar{
  position:sticky;top:0;z-index:5;
  background:rgba(247,247,245,.92);
  backdrop-filter:blur(12px);
  border-bottom:1px solid var(--rule);
  padding:18px 48px;
  display:flex;justify-content:space-between;align-items:center;
}
.dash-breadcrumb{
  display:flex;align-items:center;gap:14px;
  font-family:var(--f-mono);font-size:10px;letter-spacing:.16em;
  text-transform:uppercase;color:var(--ocean);
}
.dash-breadcrumb-sep{color:rgba(95,129,144,.4);}
.dash-breadcrumb-active{color:var(--midnight);font-weight:600;}
.dash-topbar-r{display:flex;align-items:center;gap:24px;}
.dash-session{
  display:flex;align-items:center;gap:8px;
  font-family:var(--f-mono);font-size:9px;letter-spacing:.14em;
  text-transform:uppercase;color:rgba(95,129,144,.7);
}
.dash-session::before{
  content:'';width:5px;height:5px;background:#4ade80;border-radius:50%;
  animation:pcBlink 2s ease-in-out infinite;
}
.dash-search{
  display:flex;align-items:center;gap:10px;
  padding:8px 14px;
  background:var(--white);border:1px solid var(--rule);
  font-family:var(--f-mono);font-size:10px;letter-spacing:.14em;
  color:var(--ink-mut);text-transform:uppercase;
  cursor:none;
}

/* HEADER */
.dash-header{
  padding:48px 48px 32px;
  border-bottom:1px solid var(--rule);
  position:relative;
}
.dash-header-coord{
  position:absolute;top:32px;right:48px;
  font-family:var(--f-mono);font-size:10px;letter-spacing:.16em;
  color:rgba(95,129,144,.55);text-transform:uppercase;
}
.dash-header-eyebrow{
  font-family:var(--f-mono);font-size:10px;font-weight:600;letter-spacing:.18em;
  text-transform:uppercase;color:var(--ocean);margin-bottom:14px;
}
.dash-h{
  font-family:var(--f-disp);font-size:clamp(36px,3.5vw,54px);font-weight:800;
  line-height:.95;color:var(--midnight);letter-spacing:-.015em;
  margin-bottom:14px;
}
.dash-h em{font-style:italic;font-weight:300;color:var(--ocean);}
.dash-sub{
  font-family:var(--f-body);font-weight:300;font-size:14px;line-height:1.7;
  color:var(--ink-mut);max-width:540px;
}

/* METRICS GRID */
.dash-metrics{
  display:grid;grid-template-columns:repeat(4,1fr);
  border-bottom:1px solid var(--rule);
}
.dash-metric{
  padding:36px 32px;
  border-right:1px solid var(--rule);
  position:relative;
  background:var(--off);
  transition:background .3s;
}
.dash-metric:hover{background:var(--white);}
.dash-metric:last-child{border-right:none;}
.dash-metric::before{
  content:attr(data-idx);position:absolute;top:14px;right:16px;
  font-family:var(--f-mono);font-size:9px;color:rgba(95,129,144,.5);
  letter-spacing:.08em;
}
.dash-metric-l{
  font-family:var(--f-mono);font-size:9px;font-weight:500;letter-spacing:.16em;
  text-transform:uppercase;color:var(--ocean);margin-bottom:18px;
}
.dash-metric-v{
  font-family:var(--f-disp);font-size:42px;font-weight:800;
  color:var(--midnight);line-height:1;letter-spacing:-.01em;margin-bottom:8px;
}
.dash-metric-d{
  font-family:var(--f-mono);font-size:10px;letter-spacing:.06em;
  color:var(--ink-mut);
}
.dash-metric-d strong{color:#4ade80;font-weight:600;}
.dash-metric-d.down strong{color:#e57373;}

/* CONTENT GRID */
.dash-content{
  padding:48px;
  display:grid;grid-template-columns:1.6fr 1fr;gap:36px;
}
@media (max-width:1280px){
  .dash-content{grid-template-columns:1fr;}
}
.dash-block{
  background:var(--white);
  border:1px solid var(--rule);
  position:relative;
}
.dash-block-h{
  display:flex;justify-content:space-between;align-items:center;
  padding:20px 28px;
  border-bottom:1px solid var(--rule);
}
.dash-block-h-l{
  font-family:var(--f-mono);font-size:10px;font-weight:600;letter-spacing:.18em;
  text-transform:uppercase;color:var(--midnight);
}
.dash-block-h-r{
  font-family:var(--f-mono);font-size:9px;color:var(--ocean);letter-spacing:.14em;
  text-transform:uppercase;cursor:none;text-decoration:none;
  transition:color .3s;
}
.dash-block-h-r:hover{color:var(--midnight);}

/* PROJECT TIMELINE */
.dash-timeline{padding:32px 28px;}
.dash-phase{
  display:grid;grid-template-columns:60px 1fr auto;gap:20px;align-items:center;
  padding:18px 0;
  border-bottom:1px solid var(--rule);
  position:relative;
}
.dash-phase:last-child{border-bottom:none;}
.dash-phase-n{
  font-family:var(--f-mono);font-size:11px;font-weight:600;letter-spacing:.08em;
  color:var(--ocean);
}
.dash-phase-info{display:flex;flex-direction:column;gap:4px;}
.dash-phase-t{
  font-family:var(--f-disp);font-size:18px;font-weight:600;color:var(--midnight);
  letter-spacing:-.005em;
}
.dash-phase-d{
  font-family:var(--f-body);font-size:12px;color:var(--ink-mut);font-weight:300;
}
.dash-phase-status{
  font-family:var(--f-mono);font-size:9px;font-weight:600;letter-spacing:.16em;
  text-transform:uppercase;
  padding:6px 11px;
  border:1px solid;
}
.dash-phase-status.complete{
  color:#4ade80;border-color:rgba(74,222,128,.45);background:rgba(74,222,128,.05);
}
.dash-phase-status.active{
  color:var(--ocean);border-color:var(--ocean);background:rgba(95,129,144,.07);
}
.dash-phase-status.upcoming{
  color:rgba(95,129,144,.55);border-color:rgba(95,129,144,.25);
}

/* REPORTS / DOCUMENTS LIST */
.dash-list{padding:8px 0;}
.dash-item{
  display:grid;grid-template-columns:36px 1fr auto;gap:14px;align-items:center;
  padding:16px 28px;
  border-bottom:1px solid var(--rule);
  cursor:none;text-decoration:none;
  transition:background .3s,padding-left .35s var(--ease);
}
.dash-item:last-child{border-bottom:none;}
.dash-item:hover{background:var(--off);padding-left:36px;}
.dash-item-icon{
  width:32px;height:32px;
  border:1px solid var(--rule);
  display:flex;align-items:center;justify-content:center;
  color:var(--ocean);
  flex-shrink:0;
}
.dash-item-icon svg{width:14px;height:14px;}
.dash-item-info{display:flex;flex-direction:column;gap:2px;min-width:0;}
.dash-item-t{
  font-family:var(--f-disp);font-size:14px;font-weight:600;color:var(--midnight);
  letter-spacing:-.005em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
.dash-item-d{
  font-family:var(--f-mono);font-size:9px;letter-spacing:.1em;
  color:var(--ink-mut);text-transform:uppercase;
}
.dash-item-arrow{
  font-family:var(--f-mono);font-size:14px;color:var(--ocean);
  transition:transform .35s var(--ease);
}
.dash-item:hover .dash-item-arrow{transform:translateX(4px);}

/* MANDATE CARD */
.dash-mandate{
  background:var(--midnight);
  padding:32px 28px;
  position:relative;overflow:hidden;
}
.dash-mandate::before{
  content:'';position:absolute;inset:0;
  background-image:linear-gradient(to right,var(--grid-dk) 1px,transparent 1px);
  background-size:33% 100%;pointer-events:none;opacity:.5;
}
.dash-mandate-coord{
  position:absolute;top:16px;right:20px;
  font-family:var(--f-mono);font-size:9px;letter-spacing:.14em;
  color:rgba(95,129,144,.55);text-transform:uppercase;
}
.dash-mandate-eyebrow{
  font-family:var(--f-mono);font-size:9px;font-weight:600;letter-spacing:.18em;
  text-transform:uppercase;color:var(--ocean-lt);margin-bottom:14px;
  position:relative;
}
.dash-mandate-tier{
  font-family:var(--f-disp);font-size:28px;font-weight:800;color:var(--off);
  line-height:1;letter-spacing:-.01em;margin-bottom:6px;position:relative;
}
.dash-mandate-tier em{font-style:italic;font-weight:300;color:var(--ocean-lt);}
.dash-mandate-since{
  font-family:var(--f-mono);font-size:10px;letter-spacing:.12em;
  color:rgba(247,247,245,.78);text-transform:uppercase;margin-bottom:24px;
  position:relative;
}
.dash-mandate-stats{
  display:grid;grid-template-columns:1fr 1fr;gap:1px;
  background:rgba(95,129,144,.18);
  position:relative;
}
.dash-mandate-stat{
  padding:16px 18px;background:var(--midnight);
}
.dash-mandate-stat-l{
  font-family:var(--f-mono);font-size:9px;letter-spacing:.14em;
  color:rgba(95,129,144,.7);text-transform:uppercase;margin-bottom:4px;
}
.dash-mandate-stat-v{
  font-family:var(--f-disp);font-size:20px;font-weight:600;color:var(--off);
  letter-spacing:-.005em;
}
.dash-mandate-cta{
  display:flex;align-items:center;justify-content:space-between;gap:12px;
  width:100%;margin-top:24px;padding:14px 18px;
  background:var(--off);color:var(--midnight);
  font-family:var(--f-mono);font-size:10px;font-weight:600;letter-spacing:.16em;
  text-transform:uppercase;text-decoration:none;cursor:none;border:none;
  transition:background .3s;
  position:relative;z-index:1;
}
.dash-mandate-cta:hover{background:var(--ocean);color:var(--off);}
.dash-mandate-cta::after{content:'→';font-family:var(--f-mono);}

/* ATLAS QUICK-ASK CARD */
.dash-atlas{
  background:var(--off);
  border:1px solid var(--rule);
  padding:28px;margin-top:24px;
  position:relative;
}
.dash-atlas-eyebrow{
  font-family:var(--f-mono);font-size:9px;font-weight:600;letter-spacing:.18em;
  text-transform:uppercase;color:var(--ocean);margin-bottom:14px;
  display:flex;align-items:center;gap:10px;
}
.dash-atlas-eyebrow::before{
  content:'';width:6px;height:6px;background:#4ade80;border-radius:50%;
  animation:pcBlink 2s ease-in-out infinite;
}
.dash-atlas-q{
  font-family:var(--f-disp);font-size:18px;font-weight:300;font-style:italic;
  line-height:1.45;color:var(--midnight);margin-bottom:18px;
}
.dash-atlas-input{
  display:flex;align-items:center;gap:8px;
  background:var(--white);border:1px solid var(--rule);
  padding:10px 14px;
}
.dash-atlas-input input{
  flex:1;background:transparent;border:none;outline:none;cursor:none;
  font-family:var(--f-body);font-size:13px;font-weight:300;color:var(--midnight);
}
.dash-atlas-input input::placeholder{color:rgba(20,20,20,.3);}
.dash-atlas-send{
  background:var(--ocean);color:var(--off);
  width:30px;height:30px;border:none;cursor:none;
  display:flex;align-items:center;justify-content:center;
  font-family:var(--f-mono);font-size:14px;
  transition:background .3s;
}
.dash-atlas-send:hover{background:var(--midnight);}

/* COMPLIANCE BAR (footer of dashboard) */
.dash-compliance{
  padding:18px 48px;
  border-top:1px solid var(--rule);
  background:var(--white);
  display:flex;justify-content:space-between;align-items:center;gap:24px;
  font-family:var(--f-mono);font-size:9px;letter-spacing:.14em;
  color:rgba(20,20,20,.65);text-transform:uppercase;
}
.dash-compliance-l{display:flex;align-items:center;gap:24px;}
.dash-compliance-l span{display:flex;align-items:center;gap:8px;}
.dash-compliance-l span::before{
  content:'';width:5px;height:5px;background:#4ade80;border-radius:50%;
}

/* COOKIES BANNER */
#cookies-banner{
  position:fixed;left:32px;right:32px;bottom:32px;
  z-index:9000;
  background:#5F8190;
  border:1px solid rgba(95,129,144,.22);
  box-shadow:0 30px 80px rgba(0,0,0,.45);
  padding:28px 36px;
  display:none;
  align-items:center;gap:32px;
  transform:translateY(20px);opacity:0;
  transition:opacity .45s var(--ease),transform .55s var(--ease);
  max-width:1280px;margin:0 auto;
}
#cookies-banner.on{display:flex;opacity:1;transform:none;}
@media (max-width:880px){
  #cookies-banner{flex-direction:column;align-items:stretch;gap:20px;padding:24px;left:16px;right:16px;bottom:16px;}
}
.cb-coord{
  position:absolute;top:8px;left:18px;
  font-family:var(--f-mono);font-size:9px;letter-spacing:.16em;
  color:rgba(95,129,144,.55);text-transform:uppercase;
}
.cb-icon{
  flex-shrink:0;width:48px;height:48px;
  border:1px solid rgba(95,129,144,.3);
  display:flex;align-items:center;justify-content:center;
  position:relative;
}
.cb-icon::before{
  content:'';width:18px;height:18px;border-radius:50%;
  background:radial-gradient(circle at 35% 35%,#D2B48C 0%,#A0826D 100%);
  box-shadow:inset -1px -1px 2px rgba(0,0,0,.3);
}
.cb-icon::after{
  content:'';position:absolute;
  width:3px;height:3px;border-radius:50%;background:rgba(28,43,58,.6);
  top:38%;left:42%;
  box-shadow:5px 2px 0 rgba(28,43,58,.6),-3px 6px 0 rgba(28,43,58,.6),3px 8px 0 rgba(28,43,58,.6);
}
.cb-text{
  flex:1;display:flex;flex-direction:column;gap:6px;
}
.cb-eyebrow{
  font-family:var(--f-mono);font-size:9px;font-weight:600;letter-spacing:.18em;
  text-transform:uppercase;color:var(--ocean);
}
.cb-msg{
  font-family:var(--f-body);font-size:13px;line-height:1.6;font-weight:300;
  color:rgba(247,247,245,.78);
}
.cb-msg a{color:var(--off);border-bottom:1px solid var(--ocean);text-decoration:none;cursor:none;transition:color .3s;}
.cb-msg a:hover{color:var(--ocean-lt);}
.cb-actions{display:flex;gap:8px;flex-shrink:0;}
.cb-btn{
  font-family:var(--f-nav);font-size:9px;font-weight:600;letter-spacing:.16em;
  text-transform:uppercase;
  padding:13px 20px;cursor:none;border:1px solid transparent;
  background:transparent;
  transition:background .3s,color .3s,border-color .3s;
}
.cb-btn-primary{background:var(--ocean);color:var(--ink-deep);border-color:var(--ocean);}
.cb-btn-primary:hover{background:var(--ocean-lt);border-color:var(--ocean-lt);}
.cb-btn-secondary{color:rgba(247,247,245,.85);border-color:rgba(95,129,144,.4);}
.cb-btn-secondary:hover{background:rgba(95,129,144,.12);border-color:rgba(95,129,144,.65);color:var(--off);}
.cb-btn-ghost{color:rgba(247,247,245,.78);}
.cb-btn-ghost:hover{color:var(--off);}

/* Hide floating widgets + menu trigger on auth & dashboard pages */
body.auth-mode #menu-trigger,
body.auth-mode #mute-btn,
body.auth-mode .chat-toggle-btn,
body.auth-mode .chat-win,
body.auth-mode #cookies-banner{
  display:none!important;
}

/* FLOATING WIDGETS — glass surface matching #menu-panel and
   .chat-toggle-btn for visual consistency across the three
   pinned controls (menu pill, mute button, chat toggle). */
#mute-btn{
  position:fixed;
  bottom:36px;left:36px;
  width:50px;height:50px;
  background:rgba(20,32,46,.55);
  -webkit-backdrop-filter:blur(20px) saturate(140%);
          backdrop-filter:blur(20px) saturate(140%);
  border:1px solid rgba(255,255,255,.12);
  border-radius:50%;
  display:flex;align-items:center;justify-content:center;
  cursor:none;
  z-index:8000;
  box-shadow:
    0 12px 28px rgba(0,0,0,.36),
    0 1px 0 rgba(255,255,255,.08) inset;
  transition:background .3s, border-color .3s, transform .3s var(--ease), box-shadow .3s;
}
#mute-btn:hover{
  background:rgba(95,129,144,.45);
  border-color:rgba(255,255,255,.22);
  transform:translateY(-2px);
  box-shadow:
    0 18px 36px rgba(0,0,0,.42),
    0 1px 0 rgba(255,255,255,.12) inset;
}
.aw{display:flex;align-items:center;gap:2px;height:14px;}
.aw span{display:block;width:2px;background:var(--ocean);}
.aw span:nth-child(1){height:5px;animation:awave 1.1s ease-in-out infinite 0s}
.aw span:nth-child(2){height:10px;animation:awave 1.1s ease-in-out infinite .1s}
.aw span:nth-child(3){height:14px;animation:awave 1.1s ease-in-out infinite .2s}
.aw span:nth-child(4){height:9px;animation:awave 1.1s ease-in-out infinite .3s}
.aw span:nth-child(5){height:5px;animation:awave 1.1s ease-in-out infinite .4s}
#mute-btn.muted .aw span{animation:none;opacity:.2;height:3px!important;}
@keyframes awave{0%,100%{transform:scaleY(.4);opacity:.4}50%{transform:scaleY(1);opacity:1}}


/* Atlas chat widget. Hidden only on auth/dashboard pages via the
   body.auth-mode rule above. Otherwise visible site-wide. */
/* Floating toggle — glass surface matching #menu-panel. */
.chat-toggle-btn{
  position:fixed;
  bottom:36px;right:36px;
  width:54px;height:54px;
  background:rgba(20,32,46,.55);
  -webkit-backdrop-filter:blur(20px) saturate(140%);
          backdrop-filter:blur(20px) saturate(140%);
  border:1px solid rgba(255,255,255,.12);
  border-radius:50%;
  display:flex;align-items:center;justify-content:center;
  cursor:none;
  z-index:8000;
  box-shadow:
    0 12px 28px rgba(0,0,0,.36),
    0 1px 0 rgba(255,255,255,.08) inset;
  transition:background .3s, border-color .3s, transform .3s var(--ease), box-shadow .3s;
}
.chat-toggle-btn:hover{
  background:rgba(95,129,144,.45);
  border-color:rgba(255,255,255,.22);
  transform:translateY(-2px) scale(1.05);
  box-shadow:
    0 18px 36px rgba(0,0,0,.42),
    0 1px 0 rgba(255,255,255,.12) inset;
}
.chat-toggle-btn .ico-ch,.chat-toggle-btn .ico-cl{transition:opacity .2s,transform .2s var(--ease);}
.chat-toggle-btn .ico-cl{position:absolute;opacity:0;transform:rotate(-90deg);}
.chat-toggle-btn.open .ico-ch{opacity:0;transform:rotate(90deg);}
.chat-toggle-btn.open .ico-cl{opacity:1;transform:none;}

/* Chat panel — glass surface matching #menu-panel. Same blur,
   tint, border, inset highlight, and rounded corners. Definite
   height (not just max-height) so the inner flex chain has
   something to grow into. */
.chat-win{
  position:fixed;
  bottom:102px;right:36px;
  width:372px;
  height:min(570px,calc(100vh - 140px));
  background:rgba(20,32,46,.55);
  -webkit-backdrop-filter:blur(28px) saturate(150%);
          backdrop-filter:blur(28px) saturate(150%);
  border:1px solid rgba(255,255,255,.12);
  border-radius:22px;
  box-shadow:
    0 28px 64px rgba(0,0,0,.36),
    0 1px 0 rgba(255,255,255,.08) inset;
  display:flex;flex-direction:column;
  overflow:hidden;
  z-index:7999;
  transform:translateY(18px);
  transform-origin:bottom right;
  opacity:0;
  pointer-events:none;
  transition:transform .4s var(--ease), opacity .3s;
}
.chat-win.open{transform:none;opacity:1;pointer-events:all;}
.ch-hdr{
  background:rgba(28,43,58,.35);
  padding:15px 18px;
  display:flex;align-items:center;gap:10px;
  border-bottom:1px solid rgba(255,255,255,.06);
  flex-shrink:0;
}
.ch-av{width:32px;height:32px;background:rgba(95,129,144,.55);display:flex;align-items:center;justify-content:center;flex-shrink:0;border-radius:8px;}
.ch-nm{font-family:var(--f-mono);font-size:10px;font-weight:500;letter-spacing:.1em;text-transform:uppercase;color:var(--off);}
.ch-st{display:flex;align-items:center;gap:5px;font-family:var(--f-body);font-size:10px;color:var(--ocean-lt);margin-top:2px;}
.ch-st-dot{width:5px;height:5px;background:#4ade80;border-radius:50%;animation:bl 2s ease-in-out infinite;}
@keyframes bl{0%,100%{opacity:1}50%{opacity:.4}}
.ch-tabs{display:flex;border-bottom:1px solid rgba(255,255,255,.06);flex-shrink:0;background:rgba(0,0,0,.10);}
.ch-tab{flex:1;padding:10px;font-family:var(--f-mono);font-size:9px;font-weight:500;letter-spacing:.1em;text-transform:uppercase;color:rgba(247,247,245,.42);background:none;border:none;display:flex;align-items:center;justify-content:center;gap:6px;cursor:none;border-bottom:2px solid transparent;transition:color .2s,border-color .2s,background .2s;}
.ch-tab:hover{color:rgba(247,247,245,.78);}
.ch-tab.active{color:var(--ocean-lt);border-bottom-color:var(--ocean-lt);background:rgba(255,255,255,.05);}
/* cpanel is the chat column that wraps the message list + quick
   replies + input bar. It needs explicit flex layout so its
   children (ch-msgs / qreps / ch-inbar) size correctly inside the
   chat-win's max-height:570px, and so ch-msgs can actually scroll
   instead of pushing the input out of view. min-height:0 is
   required for the inner overflow:auto to trigger. */
#cpanel{display:flex;flex-direction:column;flex:1 1 0;min-height:0;}
.ch-msgs{flex:1 1 0;overflow-y:auto;padding:16px 14px;display:flex;flex-direction:column;gap:10px;min-height:0;}
.ch-msgs::-webkit-scrollbar{width:2px;}
.ch-msgs::-webkit-scrollbar-thumb{background:rgba(95,129,144,.25);}
.msg{max-width:83%;animation:mIn .3s var(--ease);}
@keyframes mIn{from{opacity:0;transform:translateY(7px)}to{opacity:1;transform:none}}
.msg-b{padding:10px 14px;font-family:var(--f-body);font-weight:300;font-size:13px;line-height:1.6;border-radius:14px;}
.msg.bot{align-self:flex-start;}
.msg.bot .msg-b{background:rgba(255,255,255,.07);color:rgba(247,247,245,.92);border:1px solid rgba(255,255,255,.10);border-top-left-radius:4px;}
.msg.user{align-self:flex-end;}
.msg.user .msg-b{background:rgba(95,129,144,.55);color:var(--off);border:1px solid rgba(255,255,255,.10);border-top-right-radius:4px;}
.msg-t{font-family:var(--f-mono);font-size:9px;color:rgba(247,247,245,.32);margin-top:5px;letter-spacing:.06em;padding:0 4px;}
.msg.user .msg-t{text-align:right;}
/* Quick-reply pill row beneath an Atlas bubble. Atlas attaches up
   to 3 labels via <wa-buttons>; main.js renders them as compact
   ocean-bordered pills. Tap → label is sent as the visitor's next
   message and the whole row fades out (.msg-actions-fade) so the
   chat thread reads clean. */
.msg-actions{
  display:flex;
  flex-wrap:wrap;
  gap:8px;
  padding:6px 0 4px;
  align-self:flex-start;
  max-width:90%;
  opacity:0;
  transform:translateY(6px);
  animation:msg-actions-in 320ms ease forwards 80ms;
}
@keyframes msg-actions-in{
  to{opacity:1;transform:translateY(0);}
}
.msg-actions-fade{
  opacity:0;
  transform:translateY(-2px);
  transition:opacity 200ms ease, transform 200ms ease;
}
.msg-action-btn{
  font-family:var(--f-body);
  font-size:12px;
  font-weight:500;
  letter-spacing:.02em;
  color:var(--off);
  background:transparent;
  border:1px solid rgba(138,173,184,.55);
  padding:7px 14px;
  border-radius:16px;
  cursor:pointer;
  transition:background .2s ease, color .2s ease, border-color .2s ease, transform .15s ease;
  white-space:nowrap;
}
.msg-action-btn:hover,
.msg-action-btn:focus-visible{
  background:var(--ocean);
  color:var(--off);
  border-color:var(--ocean);
  outline:none;
  transform:translateY(-1px);
}
.msg-action-btn:disabled{
  opacity:.4;
  cursor:default;
  transform:none;
}
/* Pending pulse — fired briefly when a button is tapped while Atlas
   is mid-reply (busy guard). Visually acknowledges the tap without
   firing the send (the visitor's expectation that the tap registered
   is preserved; they retry once the in-flight reply finishes). */
.msg-action-btn-pending{
  animation:msg-action-btn-pulse 320ms ease;
}
@keyframes msg-action-btn-pulse{
  0%  { background:rgba(95,129,144,.22); transform:scale(1.0); }
  40% { background:rgba(95,129,144,.42); transform:scale(.97); }
  100%{ background:transparent;          transform:scale(1.0); }
}
@media (prefers-reduced-motion: reduce){
  .msg-actions,.msg-actions-fade{animation:none;transition:none;opacity:1;transform:none;}
  .msg-action-btn{transition:none;}
}

/* INLINE FORM CARD — identity (Step 8) or session-booking capture.
   Renders as a single full-width card inside the chat-msgs list,
   between Atlas's last bubble and his next reply. Visual language
   mirrors the chat bubble (dark translucent surface, ocean
   accents, mono labels) so it reads as part of the conversation,
   not a popup. Field controls are the native inputs so iOS / Android
   surface their proper keyboards (email keyboard for email, numeric
   keypad for phone, date wheel for date, etc.) — accessibility +
   mobile UX wins without writing custom widgets. */
.msg-form{
  align-self:stretch;
  width:100%;
  background:rgba(255,255,255,.05);
  border:1px solid rgba(255,255,255,.10);
  border-radius:14px;
  border-top-left-radius:4px;
  padding:14px 14px 12px;
  display:flex;
  flex-direction:column;
  gap:10px;
  opacity:0;
  transform:translateY(6px);
  animation:msg-actions-in 320ms ease forwards 80ms;
}
.msg-form-h{
  font-family:var(--f-mono);
  font-size:10px;
  font-weight:500;
  letter-spacing:.12em;
  text-transform:uppercase;
  color:var(--ocean-lt);
}
.msg-form-sub{
  font-family:var(--f-body);
  font-size:12px;
  font-weight:300;
  color:rgba(247,247,245,.65);
  margin:0 0 4px;
  line-height:1.5;
}
.msg-form-row{
  display:flex;
  flex-direction:column;
  gap:5px;
}
.msg-form-l{
  font-family:var(--f-mono);
  font-size:9px;
  font-weight:500;
  letter-spacing:.10em;
  text-transform:uppercase;
  color:rgba(247,247,245,.62);
  display:flex;
  align-items:center;
  gap:4px;
}
.msg-form-req{
  color:#ef9b8a;
  font-size:11px;
  line-height:1;
  font-family:var(--f-body);
}
.msg-form-input,
.msg-form-select{
  font-family:var(--f-body);
  font-size:13px;
  font-weight:300;
  color:var(--off);
  background:rgba(0,0,0,.22);
  border:1px solid rgba(255,255,255,.12);
  padding:9px 11px;
  border-radius:8px;
  outline:none;
  width:100%;
  box-sizing:border-box;
  cursor:none;
  transition:border-color .15s ease, background .15s ease;
  -webkit-appearance:none;
  appearance:none;
}
.msg-form-select{
  /* Chevron rendered inline via SVG so the native select arrow style
     stays consistent across platforms without an extra image asset. */
  background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%238AADB8'><path d='M3.5 6 8 10.5 12.5 6z'/></svg>");
  background-repeat:no-repeat;
  background-position:right 10px center;
  background-size:14px 14px;
  padding-right:32px;
}
.msg-form-input:focus,
.msg-form-select:focus{
  border-color:var(--ocean-lt);
  background-color:rgba(0,0,0,.30);
}
.msg-form-input::placeholder{
  color:rgba(247,247,245,.32);
}
/* iOS Safari ignores ::placeholder on type=date when there's no value.
   This combo plus the min/max attrs gives the field a usable greyed
   look when empty. */
.msg-form-input[type="date"]{
  color-scheme:dark;
}
.msg-form-help{
  font-family:var(--f-body);
  font-size:11px;
  color:rgba(247,247,245,.45);
  font-weight:300;
  line-height:1.4;
}
.msg-form-radio{
  display:flex;
  flex-direction:column;
  gap:6px;
  padding:2px 0;
}
.msg-form-radio-opt{
  display:flex;
  align-items:center;
  gap:8px;
  font-family:var(--f-body);
  font-size:13px;
  font-weight:300;
  color:var(--off);
  cursor:pointer;
  padding:4px 0;
}
.msg-form-radio-opt input[type="radio"]{
  accent-color:var(--ocean-lt);
  margin:0;
  cursor:pointer;
  width:16px;
  height:16px;
  flex-shrink:0;
}
.msg-form-err{
  font-family:var(--f-body);
  font-size:12px;
  color:#ef9b8a;
  min-height:0;
  line-height:1.4;
}
.msg-form-err:empty{
  display:none;
}
.msg-form-submit{
  margin-top:4px;
  font-family:var(--f-mono);
  font-size:10px;
  font-weight:500;
  letter-spacing:.14em;
  text-transform:uppercase;
  color:var(--off);
  background:var(--ocean);
  border:1px solid var(--ocean);
  padding:11px 16px;
  border-radius:10px;
  cursor:pointer;
  transition:background .2s ease, border-color .2s ease, transform .15s ease;
}
.msg-form-submit:hover,
.msg-form-submit:focus-visible{
  background:var(--ocean-lt);
  border-color:var(--ocean-lt);
  outline:none;
  transform:translateY(-1px);
}
.msg-form-submit:disabled{
  opacity:.45;
  cursor:default;
  transform:none;
  background:var(--ocean-dk);
  border-color:var(--ocean-dk);
}
.msg-form-submitted{
  opacity:0;
  transform:translateY(-4px);
  transition:opacity 280ms ease, transform 280ms ease;
  pointer-events:none;
}
@media (prefers-reduced-motion: reduce){
  .msg-form{animation:none;opacity:1;transform:none;}
  .msg-form-submitted{transition:none;}
  .msg-form-input,.msg-form-select,.msg-form-submit{transition:none;}
}
.typing-i{align-self:flex-start;}
.typ-d{display:flex;gap:3px;padding:12px 14px;background:rgba(255,255,255,.07);border:1px solid rgba(255,255,255,.10);border-radius:14px;border-top-left-radius:4px;width:fit-content;}
.typ-d span{width:4px;height:4px;background:var(--ocean);border-radius:50%;animation:tb 1.2s ease-in-out infinite;}
.typ-d span:nth-child(2){animation-delay:.15s}.typ-d span:nth-child(3){animation-delay:.3s}
@keyframes tb{0%,60%,100%{transform:translateY(0);opacity:.5}30%{transform:translateY(-5px);opacity:1}}
.qreps{display:flex;flex-wrap:wrap;gap:6px;padding:0 13px 10px;flex-shrink:0;}
.qr{font-family:var(--f-mono);font-size:9px;font-weight:500;letter-spacing:.08em;color:var(--ocean-lt);border:1px solid rgba(255,255,255,.16);border-radius:999px;padding:5px 11px;background:rgba(255,255,255,.04);cursor:none;transition:background .2s,color .2s,border-color .2s;text-transform:uppercase;}
.qr:hover{background:rgba(95,129,144,.55);border-color:rgba(255,255,255,.28);color:var(--off);}
.ch-inbar{display:flex;gap:8px;padding:11px 13px;border-top:1px solid rgba(255,255,255,.06);background:rgba(0,0,0,.18);flex-shrink:0;}
.ch-inp{flex:1;background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.14);border-radius:10px;padding:9px 13px;font-family:var(--f-body);font-size:13px;font-weight:300;color:var(--off);outline:none;cursor:none;transition:border-color .2s,background .2s;}
.ch-inp::placeholder{color:rgba(247,247,245,.32);}
.ch-inp:focus{border-color:rgba(255,255,255,.32);background:rgba(255,255,255,.09);}
.ch-send{width:36px;height:36px;background:var(--ocean);border:none;border-radius:10px;display:flex;align-items:center;justify-content:center;cursor:none;transition:background .2s,transform .15s var(--ease);}
.ch-send:hover{background:var(--ocean-lt);transform:scale(1.04);}
.vp{display:none;flex-direction:column;align-items:center;justify-content:center;padding:36px 20px;flex:1;gap:20px;}
.vp.on{display:flex;}
.v-orb{width:84px;height:84px;border-radius:50%;background:radial-gradient(circle,rgba(95,129,144,.25) 0%,rgba(95,129,144,.04) 70%);border:1px solid rgba(95,129,144,.2);display:flex;align-items:center;justify-content:center;cursor:none;position:relative;transition:transform .3s var(--ease);}
.v-orb:hover{transform:scale(1.06);}
.v-orb.on{animation:vP 1.5s ease-in-out infinite;border-color:var(--ocean);}
@keyframes vP{0%,100%{box-shadow:0 0 0 0 rgba(95,129,144,.4)}50%{box-shadow:0 0 0 16px rgba(95,129,144,0)}}
.v-ring{position:absolute;inset:-16px;border-radius:50%;border:1px solid rgba(95,129,144,.1);animation:vR 2s ease-out infinite;}
.v-ring:nth-child(2){inset:-28px;animation-delay:.6s}.v-ring:nth-child(3){inset:-40px;animation-delay:1.2s}
@keyframes vR{0%{opacity:.4;transform:scale(.94)}100%{opacity:0;transform:scale(1.06)}}
.v-stat{font-family:var(--f-mono);font-size:9px;font-weight:500;letter-spacing:.14em;text-transform:uppercase;color:var(--ocean);}
.v-wave{display:flex;align-items:center;gap:2px;height:18px;opacity:0;transition:opacity .3s;}
.v-wave.on{opacity:1;}
.v-wave span{display:block;width:2px;background:var(--ocean);animation:wB 1s ease-in-out infinite;}
.v-wave span:nth-child(1){height:4px;animation-delay:0s}.v-wave span:nth-child(2){height:10px;animation-delay:.1s}.v-wave span:nth-child(3){height:16px;animation-delay:.2s}.v-wave span:nth-child(4){height:11px;animation-delay:.3s}.v-wave span:nth-child(5){height:6px;animation-delay:.4s}.v-wave span:nth-child(6){height:14px;animation-delay:.5s}.v-wave span:nth-child(7){height:9px;animation-delay:.6s}.v-wave span:nth-child(8){height:4px;animation-delay:.7s}
@keyframes wB{0%,100%{transform:scaleY(.4);opacity:.4}50%{transform:scaleY(1);opacity:1}}
.v-hint{font-family:var(--f-body);font-size:11px;color:rgba(247,247,245,.7);text-align:center;line-height:1.6;max-width:210px;}
.v-btn{font-family:var(--f-mono);font-size:9px;font-weight:500;letter-spacing:.1em;text-transform:uppercase;color:var(--midnight);background:var(--ocean);border:none;padding:11px 22px;cursor:none;transition:background .2s;}
.v-btn:hover{background:#7CA0AE;}
.v-btn.rec{background:#e05c5c;}

body::after{content:'';position:fixed;inset:0;background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");opacity:.018;pointer-events:none;z-index:9996;}

/* ════════════════════════════════════════════════════════════════════════
   ACCESSIBILITY PASS — skip link, focus visibility, semantic landmarks.
   The skip link is invisible until keyboard-focused (Tab on page load),
   then snaps in at the top-left so keyboard / screen-reader users can
   bypass the header chrome and jump straight to the main content. */
.skip-to-main{
  position:fixed;
  top:14px;left:14px;
  z-index:99999;
  padding:12px 18px;
  background:var(--midnight);
  color:var(--off);
  font-family:var(--f-nav);
  font-size:12px;letter-spacing:.16em;text-transform:uppercase;font-weight:600;
  text-decoration:none;
  border:1px solid var(--ocean);
  border-radius:2px;
  /* off-screen until focused */
  transform:translateY(-200%);
  transition:transform .25s cubic-bezier(.16,1,.3,1);
}
.skip-to-main:focus,
.skip-to-main:focus-visible{
  transform:translateY(0);
  outline:2px solid var(--ocean-lt);
  outline-offset:2px;
}

/* Visible focus indicator on keyboard navigation — only when focus is via
   keyboard (focus-visible), so mouse clicks don't get blue rings. */
a:focus-visible,
button:focus-visible,
input:focus-visible,
select:focus-visible,
textarea:focus-visible,
[tabindex]:focus-visible{
  outline:2px solid var(--ocean-lt);
  outline-offset:3px;
  border-radius:1px;
}

/* Honor prefers-reduced-motion — pause heavy ambient animations. */
@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{
    animation-duration:.01ms !important;
    animation-iteration-count:1 !important;
    transition-duration:.01ms !important;
    scroll-behavior:auto !important;
  }
  #cvs{display:none;}
  .hero-video{animation:none;}
}

/* ════════════════════════════════════════════════════════════════════════
   RESPONSIVE PASS — tablet + mobile breakpoints.
   Desktop-first layouts above are reflowed into single-column / stacked
   forms here so the site reads cleanly on phones and tablets. The
   editorial typography scales via clamp() throughout the rest of the
   stylesheet, so headlines already adapt; this block handles structural
   layout (grids, flex direction, padding, sidebars, modals, navigation).
   ════════════════════════════════════════════════════════════════════════ */

/* ──── TABLET (≤1024px) ─────────────────────────────────────────────── */
@media (max-width:1024px){
  :root{ --gx:36px; }

  /* Multi-column → 2-column collapses */
  .svc-grid-3{ grid-template-columns:1fr 1fr; }
  .svc-grid-3 > .svc-card:nth-child(3){ grid-column:1 / -1; }
  .air-feat-grid{ grid-template-columns:1fr 1fr; }
  .cap-grid{ grid-template-columns:1fr 1fr; }
  .prn-grid{ grid-template-columns:1fr 1fr; }

  /* Two-column splits → stack */
  .doc-split{ grid-template-columns:1fr; min-height:auto; }
  .doc-left{ padding:120px var(--gx) 80px; }
  .doc-right{ min-height:360px; order:-1; }
  .air-body{ grid-template-columns:1fr; gap:48px; padding:96px var(--gx); }
  .mth-intro{ grid-template-columns:1fr; gap:48px; padding:96px var(--gx); }
  .itk-intro{ grid-template-columns:1fr; gap:36px; }
  .itk-grid{ grid-template-columns:1fr; gap:48px; }
  .home-svc-header{ grid-template-columns:1fr; gap:32px; }
  .prn-section > div[style*="grid-template-columns:1fr 1fr"]{
    grid-template-columns:1fr !important; gap:36px;
  }

  /* Method steps */
  .mth-step{ grid-template-columns:120px 1fr; gap:36px; padding:56px 0; }
  .mth-step-aside{ grid-column:1 / -1; padding-left:0; border-left:none; padding-top:24px; border-top:1px solid var(--rule); }

  /* Metrics row 5→3 */
  .metrics-inner{ grid-template-columns:repeat(3,1fr); }
  .metric-cell:nth-child(4),
  .metric-cell:nth-child(5){ grid-column:span 1; }

  /* Footer */
  .footer-top{ grid-template-columns:1fr 1fr; gap:48px; }

  /* Quote — keep both columns but tighter */
  .quote-grid{ gap:36px; }

  /* Doctrine declaration paragraph */
  .docl-text{ font-size:clamp(22px,3.6vw,42px); }

  /* Engagement card min-height — let content drive */
  .svc-card{ min-height:520px; }
  .principal-card{ min-height:auto; }

  /* Dashboard — sidebar narrower */
  .dash-shell{ grid-template-columns:240px 1fr; }
}

/* ──── MOBILE (≤768px) ──────────────────────────────────────────────── */
@media (max-width:768px){
  :root{ --gx:22px; }
  html{ font-size:15px; }

  /* Single column for every multi-col grid */
  .svc-grid-3,
  .svc-grid-3 > .svc-card:nth-child(3),
  .air-feat-grid,
  .cap-grid,
  .dpl-grid,
  .prn-grid{ grid-template-columns:1fr; }

  /* Hero text & coords */
  .hero-c{ left:22px; right:22px; bottom:80px; }
  .hero-coords-top, .hero-coords-bottom{ padding:0 22px; }
  .hero-coords-top{ flex-direction:column; gap:8px; align-items:flex-start; }
  .hero-coord-line{ display:none; }
  .hero-meta-row{ flex-direction:column; align-items:flex-start; gap:24px; }
  .hero-meta-l{ max-width:none; }

  /* Doctrine */
  .doc-meta{ grid-template-columns:1fr 1fr; gap:18px 24px; }
  .doc-left{ padding:100px var(--gx) 64px; }

  /* Method steps — full single-column */
  .mth-step{ grid-template-columns:1fr; gap:18px; padding:40px 0; }
  .mth-step-aside{ padding-top:18px; }
  .mth-cta-mono{ flex-direction:column; align-items:flex-start; gap:32px; padding:80px var(--gx); min-height:auto; }

  /* Metrics row 5→2 */
  .metrics-inner{ grid-template-columns:1fr 1fr; }
  .metric-cell{ padding:36px 22px; }
  .metric-n{ font-size:clamp(40px,9vw,64px); }

  /* "Precision. Not. Volume." monolith — stack headline + paragraphs
     vertically instead of side-by-side so the supporting text appears
     beneath the headline on phone screens. */
  .mono-grid{
    grid-template-columns:1fr;
    gap:32px;
    align-items:start;
  }
  .r3d-l,
  .r3d-r{
    transform:translateY(20px);
  }
  .r3d-l.in,
  .r3d-r.in{
    transform:none;
  }

  /* Section padding — knock down vertical space */
  .monolith,
  .home-svc-section,
  .doc-decl,
  .doc-pillars,
  .quote-mono,
  .mnd-cards,
  .cap-section,
  .mth-intro,
  .mth-cta-mono,
  .air-body,
  .air-features,
  .prn-section,
  .itk-body{
    padding-top:80px;
    padding-bottom:80px;
    padding-left:22px;
    padding-right:22px;
  }
  .footer{ padding:64px 22px 36px; }

  /* Floating glass menu (bottom-centre) — smaller + scrollable on
     phones because the 10-item index would otherwise dominate the
     screen. The .menu-list takes flex:1 inside the panel's flex
     column, so the header and footer stay pinned while the list
     scrolls. */
  #menu-panel{
    width:calc(100% - 28px);
    max-width:320px;
    bottom:72px;
    top:auto;
    /* Hard cap so the panel never eats more than ~65% of the viewport */
    max-height:65vh;
    padding:0;
  }
  .menu-coord-tl{ padding:10px 14px 4px; font-size:8px; }
  .menu-coord-tr{ top:6px; right:6px; width:24px; height:24px; }
  .menu-coord-tr::before{ font-size:16px; }
  .menu-list{
    padding:4px 6px;
    flex:1;
    min-height:0;            /* required for overflow inside a flex column */
    overflow-y:auto;
    overscroll-behavior:contain;
    -webkit-overflow-scrolling:touch;
  }
  /* Hide the scrollbar for cleaner look but keep functionality */
  .menu-list::-webkit-scrollbar{ width:0; height:0; }
  .menu-list{ scrollbar-width:none; }
  .menu-item{
    grid-template-columns:26px 1fr 14px;
    gap:8px;
    padding:8px 10px;
  }
  .mi-num{ font-size:9px; }
  .mi-name{ font-size:14px; gap:6px; }
  .mi-name em{ font-size:10px; }
  .mi-arrow{ font-size:11px; }
  .menu-footer{
    grid-template-columns:1fr;
    gap:6px;
    padding:8px 14px 10px;
    flex-shrink:0;            /* keep footer visible when list scrolls */
  }
  .mf-label{ font-size:7px; margin-bottom:2px; }
  .mf-text{ font-size:10px; line-height:1.4; }

  /* Footer */
  .footer-top{ grid-template-columns:1fr; gap:32px; padding-bottom:32px; }
  .footer-bottom{ flex-direction:column; gap:16px; align-items:flex-start; }
  .ft-legal{ flex-wrap:wrap; gap:16px 22px; }

  /* Cookies banner */
  #cookies-banner{
    flex-direction:column;
    align-items:flex-start;
    gap:14px;
    padding:18px 22px;
    left:8px;right:8px;bottom:8px;
  }
  .cb-actions{ flex-wrap:wrap; gap:10px; width:100%; }
  .cb-btn{ flex:1 1 auto; }

  /* Brand mark — drop down a touch on phones.
     width/height are no longer forced; the wordmark is text now and
     auto-sizes to its content. */
  #brand-mark{ top:6px; padding:4px 12px 3px; font-size:13px; letter-spacing:.30em; }
  #brand-mark img{ height:22px; }

  /* Floating menu pill (bottom-centre) — tighter on mobile.
     Music button on mobile: 42px circle at bottom:18px → centre at 39px
     from viewport bottom. Trigger ~32px tall → bottom:23px puts centre
     at ~39px (visually aligned with the music button). */
  #menu-trigger{ bottom:23px; padding:9px 14px 10px; gap:8px; }
  .mt-label{ font-size:10px; letter-spacing:.18em; }
  .mt-num{ font-size:8px; }

  /* Mute / chat / floating widgets — pulled in from edges */
  #mute-btn{ left:18px; bottom:18px; width:42px; height:42px; }
  .chat-toggle-btn{ right:18px; bottom:18px; width:48px; height:48px; }
  /* Chat panel on mobile:
     - 100vh as a fallback for older browsers
     - 100dvh (dynamic viewport height) for browsers that support
       it — the panel shrinks correctly when the iOS / Android
       soft keyboard slides up, so the input stays in view
     - bottom offset slightly higher than the toggle */
  .chat-win{ right:8px; bottom:78px; left:8px; width:auto; height:min(570px, calc(100vh  - 100px)); }
  .chat-win{ height:min(570px, calc(100dvh - 100px)); }
  /* Inputs must be at least 16px on iOS or Safari zooms the
     page when the user focuses them. Bumping the chat input
     keeps the layout stable when typing. */
  .ch-inp{ font-size:16px; }

  /* Quote section */
  .quote-grid{ grid-template-columns:48px 1fr; gap:24px; }
  .quote-mark{ font-size:96px; }
  .quote-body{ font-size:clamp(20px,4.6vw,30px); }

  /* Headlines tighten across all heroes */
  .hero-hl, .doc-hl, .np-hl{
    font-size:clamp(40px,10vw,72px);
  }
  .svc-hl, .docl-text, .mnd-intro-hl, .air-hl, .mth-intro-hl, .itk-intro-hl{
    font-size:clamp(28px,6.5vw,46px);
  }
  .mono-word{ font-size:clamp(54px,13vw,108px); }

  /* Eyebrows / coords — slightly smaller */
  .eyebrow,
  .s-num-bar{ font-size:9px; }

  /* Section number bar — wrap if needed */
  .s-num-bar{ flex-wrap:wrap; gap:6px 12px; padding:14px 22px; }

  /* Doctrine pillars */
  .dpl-cell{ padding:48px 32px; }

  /* Capability + AIRaaS feature cells */
  .cap-cell{ padding:36px 28px; }
  .af-cell{ padding:40px 28px; }

  /* AIRaaS channels list */
  .air-ch{ padding:18px 0; }

  /* Auth pages — single column */
  .auth-grid,
  .auth-shell{ grid-template-columns:1fr !important; }
  .auth-aside{ display:none; }
  .auth-form{ padding:40px 24px; }

  /* Dashboard — sidebar collapses, stacks above main */
  .dash-shell{
    grid-template-columns:1fr;
    min-height:auto;
  }
  .dash-side{
    position:relative;
    height:auto;
    border-right:none;
    border-bottom:1px solid var(--rule);
    padding:24px;
  }
  .dash-side-foot{ margin-top:24px; }
  .dash-main{ padding:24px; }
  .dash-topbar{ flex-direction:column; gap:16px; align-items:flex-start; padding:18px 24px; }
  .dash-mandate{ padding:32px 24px; }
  .dash-mandate-stats{ grid-template-columns:1fr; gap:1px; }

  /* Modal scale */
  .prn-modal{
    width:calc(100vw - 24px);
    max-height:88vh;
    grid-template-columns:1fr;
    overflow-y:auto;
  }
  .prn-modal-image{
    aspect-ratio:16/9;
    height:auto;
  }

  /* Principals page hero section needs prn-section internal grid stack */
  .prn-section{ padding:80px var(--gx); }

  /* ITK form field rows */
  .itk-row{ grid-template-columns:1fr; gap:16px; }
  .itk-form{ padding:36px 24px; }
  .itk-aside-card{ padding:36px 24px; }

  /* Chat widget on auth pages already hidden via .auth-mode rules */

  /* Tier flip cards — keep the 3D flip on mobile (tap-to-flip is
     wired in main.js). Bump the min-height so the back face content
     (Cadence / Best Fit / Outcome / Term + CTA) fits within the
     absolute-positioned face and doesn't overflow onto the next
     card. Padding tightens to recover space for the content. */
  .svc-card{ min-height:600px; }
  .svc-card-face{ padding:40px 28px 32px; }

  /* Disable the hero-pin scrub spacer height on mobile so users don't
     have to scroll through 300vh of nothing — frames still play but
     compressed into ~150vh of scroll. */
  .hero-spacer{ height:150vh; }
}

/* ──── SMALL MOBILE (≤480px) ────────────────────────────────────────── */
@media (max-width:480px){
  :root{ --gx:18px; }

  /* Hero copy padding */
  .hero-c{ left:18px; right:18px; bottom:64px; }
  .hero-coords-top, .hero-coords-bottom{ padding:0 18px; }

  /* Headlines a touch smaller */
  .hero-hl, .doc-hl, .np-hl{
    font-size:clamp(34px,11vw,56px);
  }
  .mono-word{ font-size:clamp(44px,15vw,84px); }

  /* Section padding */
  .monolith, .home-svc-section, .doc-decl, .doc-pillars,
  .quote-mono, .mnd-cards, .cap-section, .mth-intro, .mth-cta-mono,
  .air-body, .air-features, .prn-section, .itk-body{
    padding-top:60px; padding-bottom:60px;
    padding-left:18px; padding-right:18px;
  }
  .footer{ padding:48px 18px 32px; }

  /* Brand mark a step smaller on tiny phones */
  #brand-mark{ top:4px; font-size:12px; letter-spacing:.28em; padding:4px 10px 3px; }
  #brand-mark img{ height:18px; }

  /* Cookies banner — stack actions vertically */
  .cb-actions{ flex-direction:column; }
  .cb-btn{ width:100%; }

  /* Doctrine meta — single column */
  .doc-meta{ grid-template-columns:1fr; }
}

/* ──── TOUCH DEVICES (no hover, coarse pointer) ─────────────────────── */
@media (hover:none), (pointer:coarse){
  /* Restore native cursor on touch devices and hide the custom one —
     the cd/cr dots only make sense with a real pointer. */
  body, a, button, input, select, textarea,
  .principal-card, .imgm-card, #brand-mark,
  .menu-item, .menu-coord-tr, .mf-link,
  #menu-trigger, #mute-btn, .chat-toggle-btn,
  .svc-card, .svc-cta, .svc-back-cta,
  .btn-dk, .btn-lt, .btn-ghost,
  .cb-btn, .ch-tab, .ch-send, .qr,
  .dash-side-nav a, .dash-signout, .dash-mandate-cta{
    cursor:auto !important;
  }
  /* Hide the custom-cursor dot + ring */
  #cd, #cr{ display:none !important; }
  /* Particles canvas — keep but reduce opacity for less battery drain */
  #cvs{ opacity:.18; }
  /* Cursor ghost trail makes no sense without a hover pointer */
  #ghost-trail{ display:none !important; }
}

/* ====================================================================
   PREMIUM REFINEMENT — silica grain texture + restrained soft corners
                       + ambient depth on nav and primary buttons
   ====================================================================
   Pass added to lift the site from "flat web" toward "printed luxury
   collateral". Three coordinated layers:

   1. SILICA GRAIN
      A whisper-quiet noise overlay (SVG fractalNoise → opacity .045)
      pinned to fixed-positioned body::before. The grain reads as
      paper texture under direct light without ever announcing
      itself; you feel it more than you see it. Standard trick on
      McKinsey, Cartier, Aman, etc. — premium-corporate vocabulary.

   2. SOFT CORNERS — restrained
      Bumped sharp 0px corners on the primary button class + nav
      list links to 4–6px. Far enough from sharp to read as
      considered; nowhere near consumer-app rounded. Pairs with
      the existing mono uppercase labels for a letterpress-card
      feel.

   3. AMBIENT DEPTH
      Soft layered ocean-tinted shadows on .btn-dk hover and on
      .topnav once the page has scrolled (.light-nav state). Lifts
      both elements off the page surface without resorting to glow
      or glass. Shadows use brand colours at low opacity so they
      read as "considered", not generic Material/Bootstrap.

   Targets are deliberately narrow: buttons + nav only, plus the
   body texture layer. Cards, sections, and editorial surfaces
   keep their existing sharp aesthetic — bumping radii everywhere
   would dilute the brand. ==================================== */

/* ---- 1. SILICA GRAIN ---- */
body::before{
  content:'';
  position:fixed;
  inset:0;
  pointer-events:none;
  /* z-index sits above the body background but below all named UI
     layers (nav z:100, modal z:99990, cursor z:2147483646+). The
     grain renders as a film over content; content remains
     interactive because pointer-events:none. */
  z-index:1;
  opacity:.045;
  /* SVG fractalNoise inlined as a data URI — no extra HTTP request,
     no font/asset loading delay. Tile size 240px so the pattern
     doesn't visibly repeat at typical viewports. baseFrequency
     .85 gives a fine silica grain (not the coarse linen you'd
     get at .35 — that would feel rustic, wrong register).
     feColorMatrix collapses RGB to a single alpha-modulated black
     channel so the grain reads identically on dark and light
     surfaces. */
  background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='240' height='240'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='2' stitchTiles='stitch'/%3E%3CfeColorMatrix values='0 0 0 0 0  0 0 0 0 0  0 0 0 0 0  0 0 0 .9 0'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
}
@media (prefers-reduced-motion: reduce){
  /* Some users describe SVG grain as visually noisy. Reduced-motion
     preference also implies reduced visual chrome, so we honour it
     by removing the texture entirely. */
  body::before{display:none;}
}

/* ---- 2. SOFT CORNERS — primary buttons + intake submit ---- */
.btn{
  border-radius:4px;
}
.btn-dk{
  /* Inset top highlight: a 1px white line at the very top edge,
     ~6% opacity. Almost imperceptible until removed — adds the
     "this button is a physical object catching light" cue from
     premium product UI. */
  box-shadow:inset 0 1px 0 rgba(255,255,255,.06);
}
.btn-dk:hover{
  /* Ambient lift on hover: two layered ocean-tinted shadows (one
     soft and far, one tight and close) plus the inset highlight
     carried over. Reads as elevation, not as a generic Material
     box-shadow. */
  box-shadow:
    inset 0 1px 0 rgba(255,255,255,.10),
    0 8px 22px -6px rgba(46,74,90,.36),
    0 2px 6px -2px rgba(46,74,90,.22);
}
.btn-lt:hover{
  /* Light/ghost border variant gets a matching lift with cooler
     midnight-toned shadows so it pairs visually with .btn-dk. */
  box-shadow:
    0 8px 22px -6px rgba(28,43,58,.22),
    0 2px 6px -2px rgba(28,43,58,.12);
}

/* Intake form submit shares button DNA but its own class — keep
   it cohesive. */
.itk-submit{
  border-radius:4px;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.06);
}
.itk-submit:hover{
  box-shadow:
    inset 0 1px 0 rgba(255,255,255,.10),
    0 8px 22px -6px rgba(46,74,90,.36),
    0 2px 6px -2px rgba(46,74,90,.22);
}

/* ---- 3. NAV BAR — full-height hover blocks + vertical separators
                       on desktop, ambient lift on scroll ---- */
/* Desktop pattern: each nav link fills the full 64px nav height
   so the hover background reads as a solid top-to-bottom block,
   not a pill floating inside whitespace. Items butt directly
   together and are separated by 1px ocean-tinted vertical
   hairlines — newspaper-masthead vocabulary. The hovered item's
   own left separator hides so the hover block reads clean-edged
   on both sides.

   Specificity note: the inline <style> block in each HTML file
   sets `.topnav-list a { padding:10px 14px; border-radius:2px }`
   with specificity (0,1,1) AFTER styles.css loads. To override
   those we use `.topnav .topnav-list a` here, specificity (0,2,1),
   which wins the cascade.

   Mobile drawer pattern (right-edge slide-out) is untouched —
   wrapped in min-width: 1025px to avoid disturbing the column-
   flexed mobile menu. */
@media (min-width: 1025px){
  .topnav .topnav-list{
    align-self: stretch;       /* fill the 64px topnav-inner height */
    align-items: stretch;      /* stretch li's to the ul's full height */
    gap: 0;                    /* items butt together; separators do the work */
    height: auto;
  }
  /* :not(.topnav-close-li) — the close-button li only exists in
     the mobile drawer markup. It's hidden by default via the inline
     `.topnav-close-li { display:none }` rule, but our (0,2,1)
     selector here would override that (0,1,0) default and unhide
     the X on desktop. Excluding it keeps the inline default
     winning. */
  .topnav .topnav-list li:not(.topnav-close-li){
    display: flex;             /* li stretches to ul height; a fills li */
  }
  .topnav .topnav-list a{
    padding: 0 20px;           /* kill vertical padding — height: 100% does it */
    height: 100%;              /* fill the li (= nav) height */
    border-radius: 0;          /* full-bleed block, no rounded pill */
    position: relative;        /* anchor for the ::before separator */
  }
  /* 1px vertical hairline on the LEFT edge of every nav link.
     The first visible link's hairline is suppressed below. */
  .topnav .topnav-list a::before{
    content: '';
    position: absolute;
    left: 0;
    top: 14px;
    bottom: 14px;
    width: 1px;
    background: rgba(95,129,144,.16);
    pointer-events: none;
    transition: background-color .2s ease;
  }
  /* Suppress the leading hairline on whichever <li> is the first
     visible link. Two cases:
       - topnav-close-li is rendered (it's display:none on desktop)
         → close-li is nth-child(1), first visible link is nth-child(2)
       - topnav-close-li is absent → first link is :first-child */
  .topnav .topnav-list li:first-child a::before,
  .topnav .topnav-list li:nth-child(2) a::before{
    display: none;
  }
  /* When you hover one item, hide the hairline of the IMMEDIATELY
     FOLLOWING item too — otherwise the separator floats inside the
     hover block's right edge and reads weird. */
  .topnav .topnav-list a:hover + li a::before,
  .topnav .topnav-list a:focus-visible + li a::before{
    background: transparent;
  }
}

/* Sticky nav: animate a subtle drop-shadow in once the page has
   scrolled past the hero (.light-nav is toggled by the existing
   updBodyTheme scroll handler in main.js). The unscrolled state
   stays flat — the nav lives on the page; the scrolled state
   lifts it as a fixed UI layer above content. Mirrors how a
   broadsheet masthead reads when the reader is mid-page. */
.topnav{
  transition:box-shadow .3s var(--ease), border-color .3s var(--ease);
}
body.light-nav .topnav{
  box-shadow:
    0 6px 24px -10px rgba(28,43,58,.18),
    0 2px 6px -2px rgba(28,43,58,.06);
  border-bottom-color:rgba(95,129,144,.10);
}

/* ====================================================================
   GLASS UI SWEEP — frosted-glass treatment on prominent surfaces
   ====================================================================
   Building on the existing glass language already used by the chat
   panel, mobile drawer, and tier cards (services). Extending the
   pattern to the navbar and the orbit shortcut cards as the first
   batch of a wider sitewide glass refresh.

   Pattern: translucent background (so what's behind tints through),
   heavy backdrop-filter blur (so the bg softens to a frosted bloom),
   1px rim border at low opacity (catches light, reads as glass edge),
   layered ambient shadow for depth. The contract: the surface is a
   thin plate suspended above content, not an opaque shelf.

   Browser support: -webkit-backdrop-filter prefixed for Safari.
   Browsers without backdrop-filter (Firefox <103, ancient Edge)
   still render the translucent fill — the blur just doesn't apply,
   which is acceptable degradation.
   ==================================================================== */

/* ---- 1. NAVBAR — frosted plate floating above the page ---- */
/* Every page's inline <style> sets `.topnav { background: var(--off) }`
   which is solid opaque off-white. Override with translucent so the
   content behind soft-blurs through. 72% opacity is enough for dark
   midnight text to stay readable on every page (light bg = stays
   light, dark hero = colour tints through but text stays anchored).
   `!important` because the inline rule loads after this file and
   sits at the same specificity. */
.topnav{
  background: rgba(247, 247, 245, 0.72) !important;
  -webkit-backdrop-filter: blur(24px) saturate(140%);
          backdrop-filter: blur(24px) saturate(140%);
  border-bottom-color: rgba(95, 129, 144, 0.16);
}
/* Mobile drawer (slide-out) keeps the inline solid bg — backdrop-
   filter on a fixed-position drawer the full height of the viewport
   creates visual confusion as the user scrolls inside the drawer.
   We restore opacity inside the @media block. */
@media (max-width: 1024px){
  .topnav .topnav-list{
    background: var(--off);
    -webkit-backdrop-filter: none;
            backdrop-filter: none;
  }
}

/* ---- 2. ORBIT SHORTCUT CARDS (home: Apply / WhatsApp / Atlas) ---- */
/* Sit on the dark .ink-deep orbit background, so glass-on-dark
   pattern: white tint .10 → .04 gradient, white rim at 12%, white
   top-edge inset highlight, black bottom-edge inset rule, layered
   ambient drop shadow. Hover deepens everything. */
.orbit-shortcut-card{
  background: linear-gradient(180deg, rgba(255,255,255,.10) 0%, rgba(255,255,255,.04) 100%) !important;
  -webkit-backdrop-filter: blur(22px) saturate(140%);
          backdrop-filter: blur(22px) saturate(140%);
  border: 1px solid rgba(255,255,255,.12) !important;
  border-radius: 12px;
  box-shadow:
    0 24px 48px -16px rgba(0,0,0,.45),
    0 1px 0 rgba(255,255,255,.10) inset,
    0 -1px 0 rgba(0,0,0,.18) inset;
}
.orbit-shortcut-card:hover,
.orbit-shortcut-card:focus-visible{
  background: linear-gradient(180deg, rgba(255,255,255,.16) 0%, rgba(255,255,255,.06) 100%) !important;
  border-color: rgba(138,173,184,.50) !important;
  box-shadow:
    0 36px 72px -16px rgba(0,0,0,.55),
    0 1px 0 rgba(255,255,255,.18) inset,
    0 -1px 0 rgba(0,0,0,.22) inset;
}

/* ---- 3. PRINCIPAL CARDS (home + team) ---- */
/* These carry scroll-driven choreography (--px / --py / --pr / --po
   / --ps custom properties set by the principals scatter→assemble
   animation in main.js). The transform stays untouched; we only
   replace the flat `background:var(--off)` + 1px rule border with a
   subtle glass treatment. Editorial weight is preserved by keeping
   the fill near-opaque (88% off) — visitors see the page tint just
   barely through, enough to read as "glass plate", not "translucent
   wash". */
.principal-card{
  background: linear-gradient(180deg, rgba(247,247,245,.92) 0%, rgba(247,247,245,.84) 100%) !important;
  -webkit-backdrop-filter: blur(18px) saturate(120%);
          backdrop-filter: blur(18px) saturate(120%);
  border: 1px solid rgba(28,43,58,.10) !important;
  border-radius: 8px;
  box-shadow:
    0 20px 44px -14px rgba(28,43,58,.18),
    0 1px 0 rgba(255,255,255,.55) inset,
    0 -1px 0 rgba(28,43,58,.04) inset;
}

/* ---- 4. IMGM-CARD (image marquee tiles) ---- */
/* Treatment is a glass frame around each photo: 1px white rim on top
   for "light catching the bezel", subtle ambient drop shadow below,
   slight corner radius. The image content remains the focal point;
   the frame just lifts it as a held object rather than a flat image. */
.imgm-card{
  border-radius: 8px;
  overflow: hidden;
  box-shadow:
    0 20px 40px -14px rgba(0,0,0,.32),
    0 1px 0 rgba(255,255,255,.18) inset,
    0 -1px 0 rgba(0,0,0,.20) inset,
    0 0 0 1px rgba(255,255,255,.08);
  transition: box-shadow .5s var(--ease), transform .5s var(--ease);
}
.imgm-card:hover{
  box-shadow:
    0 28px 56px -14px rgba(0,0,0,.42),
    0 1px 0 rgba(255,255,255,.28) inset,
    0 -1px 0 rgba(0,0,0,.20) inset,
    0 0 0 1px rgba(138,173,184,.35);
}

/* ---- 5. APPLY PAGE SECONDARY CTA (WhatsApp) ---- */
/* The previous "ghost outline" treatment is replaced with translucent
   glass: 60% white over the apply page's off-white surface gives a
   subtle frosted-card feel rather than just an outlined button.
   Hover still flips to WhatsApp green so the recognition cue stays. */
.ap-atlas-cta-wa{
  background: linear-gradient(180deg, rgba(255,255,255,.60) 0%, rgba(255,255,255,.40) 100%) !important;
  -webkit-backdrop-filter: blur(16px) saturate(140%);
          backdrop-filter: blur(16px) saturate(140%);
  border-color: rgba(28,43,58,.18) !important;
  box-shadow:
    0 14px 28px -10px rgba(28,43,58,.18),
    0 1px 0 rgba(255,255,255,.65) inset;
}
.ap-atlas-cta-wa:hover{
  /* On hover, lose the glass and become solid WhatsApp green — the
     "channel is now live" cue. Backdrop-filter doesn't apply once
     the bg is solid. The base rule above uses !important on
     background and border-color (to win against earlier non-glass
     declarations), so the hover state must also use !important to
     swap them — otherwise the white glass background sticks and
     the green never appears. */
  background: #25D366 !important;
  border-color: #25D366 !important;
  color: #ffffff !important;
  -webkit-backdrop-filter: none;
          backdrop-filter: none;
  box-shadow:
    0 22px 44px -10px rgba(0,80,30,.30),
    0 1px 0 rgba(255,255,255,.18) inset;
}

/* ---- 6. HOME DOCTRINE PILLAR CELLS (.hd-cell) ---- */
/* Currently open columns with just a 1px top rule and a number/text
   stack. Glass-up: subtle translucent fill so each pillar reads as a
   panel rather than a bare column. Padding + corner radius added so
   the new fill has structure. The existing scroll-trigger transforms
   (opacity/translate) keep firing exactly as before — we only touched
   the surface. */
.hd-cell{
  background: linear-gradient(180deg, rgba(255,255,255,.55) 0%, rgba(255,255,255,.25) 100%);
  -webkit-backdrop-filter: blur(14px) saturate(125%);
          backdrop-filter: blur(14px) saturate(125%);
  border: 1px solid rgba(28,43,58,.08);
  border-radius: 8px;
  /* override the original border-top-only rule */
  padding: 28px 22px 24px;
  box-shadow:
    0 16px 32px -14px rgba(28,43,58,.14),
    0 1px 0 rgba(255,255,255,.55) inset;
  transition:
    opacity 700ms ease,
    transform 700ms cubic-bezier(.2,.7,.2,1),
    box-shadow 350ms ease,
    border-color 350ms ease;
}
.hd-cell:hover{
  border-color: rgba(95,129,144,.22);
  box-shadow:
    0 24px 48px -14px rgba(28,43,58,.22),
    0 1px 0 rgba(255,255,255,.70) inset;
}

/* ---- 4. TYPOGRAPHIC POLISH ---- */
/* Compound legibility settings. None of these alone are visible;
   together they tighten the body text into a "set-in-print" finish.
   Kerning + standard ligatures + contextual alternates on. */
html{
  text-rendering:optimizeLegibility;
  font-feature-settings:'kern' 1, 'liga' 1, 'calt' 1;
  -webkit-font-smoothing:antialiased;
  -moz-osx-font-smoothing:grayscale;
}
