/* ============================================================
   POWDERHOUSE v16 — SITE SYSTEM
   Deep-ocean chassis · one stylesheet, every page.
   Copy governed by Build Spec v1_9. Do not deploy before
   written go from Chad, Andrew copied.
   ============================================================ */

/* ---- FONTS — LOCKED (canonical; Rylian does NOT edit) -------
   The @font-face block below is complete and final. Rylian's
   entire font task is dropping the licensed Klim .woff2 files
   into /assets/fonts/ under these exact names (see the README
   in that directory). No stylesheet edit is needed or permitted
   — a font declaration edit is stylesheet divergence. Until the
   files exist, system fallbacks render and powderhouse-nav.js
   logs a console warning per missing file. TEST FONTS NEVER
   DEPLOY (approval-only licence).
   ------------------------------------------------------------ */
@font-face { font-family:'Soehne'; src:url(assets/fonts/Sohne-Buch.woff2) format('woff2');
  font-weight:400; font-style:normal; font-display:swap; }
@font-face { font-family:'Soehne'; src:url(assets/fonts/Sohne-Halbfett.woff2) format('woff2');
  font-weight:600; font-style:normal; font-display:swap; }
@font-face { font-family:'Soehne'; src:url(assets/fonts/Sohne-Dreiviertelfett.woff2) format('woff2');
  font-weight:700; font-style:normal; font-display:swap; }
@font-face { font-family:'Financier Display'; src:url(assets/fonts/FinancierDisplay-Light.woff2) format('woff2');
  font-weight:300; font-style:normal; font-display:swap; }
@font-face { font-family:'Financier Display'; src:url(assets/fonts/FinancierDisplay-Regular.woff2) format('woff2');
  font-weight:400; font-style:normal; font-display:swap; }
@font-face { font-family:'Financier Display'; src:url(assets/fonts/FinancierDisplay-Semibold.woff2) format('woff2');
  font-weight:600; font-style:normal; font-display:swap; }

:root {
  --black:#0A0A0A;
  /* depth motif — deep-ocean anchor (supersedes cobalt sitewide) */
  --depth-0:#0A4C74; --depth-1:#003C5F; --depth-2:#002B43; --depth-3:#001E2F; --depth-4:#00080F;
  --type:#EDEEE7; --dim:#B9C0C9; --faint:#8C97A8; --grey:#74828F;
  --lime:#CDFF1A; --hair:rgba(237,238,231,0.12);
  --serif:'Financier Display', Georgia, 'Times New Roman', serif;
  --sans:'Soehne', -apple-system, "Segoe UI", Helvetica, Arial, sans-serif;
  /* headline system (site-wide; homepage overrides weight per Template A) */
  --h-weight:600; --h-track:-0.03em; --h-leading:0.92;
  /* spacing token — major content groups step by 24px */
  --step:24px;
}
* { margin:0; padding:0; box-sizing:border-box; }
html { scroll-behavior:smooth; }
@media (prefers-reduced-motion:reduce) { html { scroll-behavior:auto; } }
body {
  color:var(--type); font-family:var(--sans); -webkit-font-smoothing:antialiased;
  background:var(--black);
}
/* Depth scope — the descent belongs to pages that take the deeper dive:
   Homepage, Massif, EON, How It Learns, Why We Exist, Access, Architecture. */
/* DEPTH GRADIENT SYSTEM (CANONICAL, Chad 2026-08-04)
   The deep-ocean field is not a reusable hero treatment — it is spatial hierarchy.
   Surface pages (homepage): black chassis only; the atmosphere comes from the
   photograph. Depth pages: the field expresses conceptual descent, and must never
   read as a panel behind the copy. Therefore the field is graded on TWO axes —
   the canonical vertical crown, multiplied by a horizontal rise toward the
   photograph. The copy zone stays neutral black; blue lives with the atmosphere.
   Acceptance: no locatable point where "blue starts." */
/* DEPTH GRADIENT SYSTEM (CANONICAL, Chad 2026-08-04)
   There is no gradient layer and no overlay. The chassis is black on every page.
   Depth is expressed ENVIRONMENTALLY: on deeper pages the photograph itself is
   graded colder — sky, haze, mist, distant ridges — so the visitor feels they
   have descended rather than seeing a blue effect.
   LITMUS: hide the photograph. If any blue remains, it is an overlay and wrong.
   Depth frames are baked by grade_env.py with COOL=1. Never add a CSS depth field. */
body.depth { background:var(--black); }
/* HOMEPAGE HERO — BLACK CHASSIS CANON (LOCKED, Chad 2026-08-04).
   The homepage is NOT a depth page. The opening viewport is the surface:
   true black chassis, the mountain dissolving into it through the photograph's
   own atmosphere (baked via grade_env.py ENV_BLACK -> hero-mountain-env.jpg).
   No blue field, panel, or gradient behind the typography. If a viewer can
   identify "the blue area," the implementation has failed.
   The descent is a SITE-level journey: the visitor meets the deep-ocean crown
   on the pages reached after the homepage, not further down the homepage.
   Surface -> Atmosphere -> Descent. */
.wrap { max-width:1080px; margin:0 auto; padding:0 1.5rem; }
a { color:inherit; text-decoration:none; }
:focus-visible { outline:2px solid var(--type); outline-offset:3px; }

/* [hidden] GUARD — the UA's [hidden]{display:none} is user-agent origin and LOSES to any
   author display rule (.pmenu{display:flex}, .pcard{display:block}, ...). Without this,
   "hidden" elements render invisibly and intercept input — the closed mobile menu blocked
   the page beneath it (defect on record, v23_8–v23_12). Every controller shows elements by
   REMOVING the attribute, so !important here is safe and canonical. Do not remove. */
[hidden] { display:none !important; }


/* ---------- NAVIGATION (locked) ---------- */
nav.top { background:transparent; }
nav.top .wrap { display:flex; align-items:center; justify-content:space-between; padding-top:1.6rem; padding-bottom:1.4rem; }
.logo-img { height:20px; width:auto; display:block; }
.brandlock { display:block; }
.brandlock .tagline { display:block; margin-top:0.55rem; font-size:0.62rem; letter-spacing:0.3em; text-transform:uppercase; color:var(--faint); font-weight:600; padding-left:2px; }
.topnav { display:flex; align-items:center; font-size:0.84rem; color:var(--dim); }
.topnav > * + * { margin-left:1.7rem; }
.topnav a:hover { color:var(--type); }
.topnav a.access { color:var(--black); background:var(--type); padding:0.5rem 1.1rem; font-weight:600; }
/* Location bar — exactly one indicator sitewide; none on utility pages.
   Tiers: top-level 100% · parent-of-subpage 40% · parent-of-editorial 20%.
   1px stroke, same color and offset at every tier. */
.topnav a.loc { position:relative; color:var(--type); font-weight:600; padding-bottom:2px; }
.topnav a.loc::after { content:""; position:absolute; left:0; bottom:0; height:1px; background:var(--type); width:100%; }
.topnav a.loc.p40::after { width:40%; }
.topnav a.loc.p20::after { width:20%; }
/* Narrow screens: same menu, wrapped — nothing hidden, nothing added */



/* ---------- LIQUID GLASS DROPDOWNS (System · Company) ----------
   Reinstated by Chad's explicit approval (July 29) as dropdown panels only;
   the transparent bar itself is unchanged. Panel = true glass: backdrop blur
   over whatever sits behind it. Solid deep-ink fallback where unsupported. */
.navgroup { position:relative; display:inline-flex; }
.topnav button.tab { display:inline-flex; align-items:center;
  background:none; border:none; cursor:pointer; font:inherit; color:inherit; padding:0; }
.topnav button.tab:hover { color:var(--type); }
.topnav button.tab .chev { margin-left:0.4rem; opacity:0.6; transition:transform .18s ease; }
.navgroup.open button.tab .chev { transform:rotate(180deg); }
.topnav button.tab.loc { position:relative; color:var(--type); font-weight:600; padding-bottom:2px; }
.topnav button.tab.loc::after { content:""; position:absolute; left:0; bottom:0; height:1px; background:var(--type); width:100%; }
.topnav button.tab.loc.p40::after { width:40%; }
.topnav button.tab.loc.p20::after { width:20%; }
.glass { display:none; position:absolute; top:calc(100% + 0.9rem); left:50%; transform:translateX(-50%);
  min-width:13.5rem; padding:0.6rem 0; z-index:80;
  background:rgba(10,15,27,0.96); border:1px solid var(--hair);
  box-shadow:0 18px 50px rgba(0,8,15,0.5); }
@supports ((backdrop-filter:blur(1px)) or (-webkit-backdrop-filter:blur(1px))) {
  .glass { background:rgba(10,10,10,0.35);
    -webkit-backdrop-filter:blur(20px) saturate(140%);
    backdrop-filter:blur(20px) saturate(140%); }
}
.navgroup.open .glass { display:block; }
.glass a { display:block; padding:0.55rem 1.2rem; font-size:0.84rem; color:var(--dim); white-space:nowrap; }
.glass a:hover { color:var(--type); background:rgba(237,238,231,0.06); }
.glass a:first-child { color:var(--type); font-weight:600; }
@media (max-width:920px) {
  .navgroup { position:static; }
  .glass { position:static; transform:none; min-width:0; width:100%; margin-top:0.4rem; }
}


/* ---------- MOBILE MENU — Liquid Glass sheet (<=920px) ----------
   Desktop unchanged. Trigger is the word "Menu" (no hamburger glyph).
   Sheet = full-screen glass; System/Company children expanded inline. */
.menu-trigger, .menu-close { display:none; background:none; border:none; cursor:pointer;
  font:inherit; color:var(--dim); font-size:0.84rem; letter-spacing:0.08em; padding:0; }
.menu-trigger:hover, .menu-close:hover { color:var(--type); }
@media (max-width:920px) {
  nav.top .wrap { flex-direction:row; align-items:center; gap:1rem; }
  .menu-trigger { display:inline-block; }
  .nav-actions { display:flex; align-items:center; gap:1.2rem; }
  .topnav { display:none; }
  body.menu-open { overflow:hidden; }
  /* RETIRED: body.menu-open overlay superseded by the .pmenu accordion (menu-trigger now
     opens .pmenu; nothing sets menu-open). Rules kept inert pending removal sweep. */
  body.menu-open .topnav { display:flex; position:fixed; inset:0; z-index:100;
    flex-direction:column; align-items:flex-start; justify-content:flex-start;
    gap:0; padding:5.5rem 2rem 2.5rem; font-size:1.15rem; overflow-y:auto;
    background:rgba(10,15,27,0.97); }
  @supports ((backdrop-filter:blur(1px)) or (-webkit-backdrop-filter:blur(1px))) {
    body.menu-open .topnav { background:rgba(10,10,10,0.5);
      -webkit-backdrop-filter:blur(26px) saturate(140%);
      backdrop-filter:blur(26px) saturate(140%); } }
  body.menu-open .topnav > * + * { margin-left:0; }
  body.menu-open .topnav > a, body.menu-open .navgroup { width:100%; border-top:1px solid var(--hair); }
  body.menu-open .topnav > a { padding:1.05rem 0; }
  body.menu-open .navgroup { display:block; padding:1.05rem 0; }
  body.menu-open .navgroup button.tab { font-size:1.15rem; }
  body.menu-open .navgroup .chev { display:none; }
  body.menu-open .glass { display:block; position:static; transform:none; min-width:0;
    background:none; border:none; box-shadow:none; backdrop-filter:none; -webkit-backdrop-filter:none;
    padding:0.5rem 0 0 1.1rem; }
  body.menu-open .glass a { padding:0.5rem 0; font-size:0.95rem; }
  body.menu-open .glass a:hover { background:none; }
  body.menu-open .glass a:first-child { display:none; } /* parent already the group label */
  body.menu-open .topnav a.access { margin-top:1.6rem; align-self:stretch; text-align:center; padding:0.95rem 1.1rem; }
  body.menu-open .menu-close { display:block; position:fixed; top:1.7rem; right:1.5rem; z-index:101; color:var(--type); }
  body.menu-open .topnav a.loc::after, body.menu-open .topnav button.tab.loc::after { bottom:0.75rem; }
}

/* ---------- HERO — Templates B/C ---------- */
.hero { padding:calc(8.5rem + var(--step)) 0 calc(4rem + var(--step)); position:relative; }
@media (min-width:720px) { .hero { padding-top:4.8rem; } }
/* Hero Image Principle (GD 2026-07-31): environmental, not illustrative.
   Every edge masked to invisibility or carried beyond the viewport — realized
   by the locked full-bleed construction below. */
/* ============================================================================
   HERO TREATMENT — APPROVED STANDARD. LOCKED 2026-08-04 (Chad).
   Shared by Homepage, Massif, EON and every hero-photograph page.
   THE FADE GEOMETRY IS FROZEN. Per-page variation is limited to exactly two
   custom properties: --hero-img (the frame) and --hero-pos (focal position).
   Do not alter the gradient stops, the release point, the vignette, the widths,
   or the offsets. Do not add a dark layer, reduce opacity, or filter the image.
   Approved behaviour: black reads as part of the photograph, not a panel; the
   mountain emerges with no detectable edge; the right side keeps detail,
   contrast and scale; copy stays legible without the image looking dimmed.

   FROZEN HERO SET (approved 2026-08-04):
     Homepage  hero-mountain-hero.jpg       --hero-pos 68% center (CSS default)
     Massif    massif-env.jpg               --hero-pos 70% center
     EON       eon-env.jpg (MIRRORED)       --hero-pos 78% center
   Gradient, crop, brightness, opacity, focal position and mirroring are frozen
   for these three; they reopen only if the photograph is formally replaced.
   Reproduce frames with rebake-heroes.sh — never re-derive by hand.
   ============================================================================ */
.heroimg { position:absolute; top:-120px; right:calc(50% - 50vw); width:100vw;
  height:calc(100% + 120px); z-index:0;
  background-image:var(--hero-img, url(../img/hero-mountain-hero.jpg));
  background-size:cover; background-position:var(--hero-pos, 68% center);
  background-repeat:no-repeat; }
/* directional black — the only source of darkness */
.heroimg::before { content:""; position:absolute; inset:0; z-index:1; pointer-events:none;
  background:linear-gradient(90deg,
    rgba(3,5,7,1) 0%, rgba(3,5,7,0.99) 18%, rgba(3,5,7,0.96) 28%,
    rgba(3,5,7,0.82) 38%, rgba(3,5,7,0.52) 47%, rgba(3,5,7,0.22) 56%,
    rgba(3,5,7,0.06) 65%, rgba(3,5,7,0) 74%); }
/* bottom vignette — separate and subtle */
.heroimg::after { content:""; position:absolute; inset:0; z-index:1; pointer-events:none;
  background:linear-gradient(180deg,
    rgba(3,5,7,0) 58%, rgba(3,5,7,0.16) 76%, rgba(3,5,7,0.58) 100%); }
.hero > *:not(.heroimg) { position:relative; z-index:2; }
nav.top { position:relative; z-index:10; }
/* Mobile: reframed, never removed — same atmospheric function (GD responsive application). */
@media (max-width:900px) { .heroimg, .hero.editorial .heroimg, .home .heroimg {
  display:block; width:100vw; top:-160px; height:calc(100% + 160px);
  background-position:72% center; }
  .heroimg::before { background:linear-gradient(90deg,
    rgba(3,5,7,1) 0%, rgba(3,5,7,0.99) 16%, rgba(3,5,7,0.95) 28%,
    rgba(3,5,7,0.84) 40%, rgba(3,5,7,0.58) 52%, rgba(3,5,7,0.28) 64%,
    rgba(3,5,7,0.08) 76%, rgba(3,5,7,0) 88%); } }

.eyebrow { font-size:0.68rem; letter-spacing:0.3em; text-transform:uppercase; color:var(--faint); font-weight:600; margin-bottom:1.4rem; }
h1 { font-family:var(--sans); font-weight:var(--h-weight); font-size:2.7rem; font-size:clamp(2.1rem,4.4vw,3.3rem);
  line-height:var(--h-leading); letter-spacing:var(--h-track); max-width:20ch; margin-bottom:1.5rem; }
.hero.editorial h1 { font-size:clamp(2.1rem,4vw,3rem); max-width:18ch; }
h1 em { font-style:italic; font-weight:400; font-family:var(--serif); }
.setup { font-family:var(--serif); font-weight:300; font-size:1.45rem; font-size:clamp(1.25rem,3vw,1.7rem); line-height:1.4; color:var(--dim); margin:0 0 1.1rem; max-width:52ch; }
.hero.editorial .setup { font-size:clamp(1.2rem,2.6vw,1.5rem); line-height:1.55; max-width:58ch; }
.lede { font-size:1.14rem; line-height:1.5; color:var(--dim); max-width:56ch; margin-bottom:1.6rem; }
.hero.editorial .lede { font-size:1.08rem; line-height:1.65; margin-bottom:1.8rem; }
.cta a.p { display:inline-block; font-size:0.9rem; font-weight:600; color:var(--black); background:var(--type); padding:0.85rem 1.6rem; }
.cta a.s { display:inline-block; font-size:0.9rem; color:var(--type); margin-left:1.5rem; border-bottom:1px solid var(--hair); padding-bottom:0.2rem; }

/* Massif — Telluride Architecture lockup + definition (Chad-authorized July 29) */
.arch-lockup { font-size:0.78rem; letter-spacing:0.22em; text-transform:uppercase; color:var(--faint); font-weight:600; margin:-0.6rem 0 1.4rem; }
.telluride-def { font-family:var(--serif); font-weight:300; font-size:1.05rem; line-height:1.75; color:#9AA3AF; max-width:60ch; margin:-0.4rem 0 1.6rem; }

/* ---------- BODY SECTIONS — Template C ---------- */
.body-sections { padding-top:calc(2rem + var(--step)); padding-bottom:calc(5rem + var(--step)); }
.section { padding:calc(3rem + var(--step)) 0; border-top:1px solid var(--hair); }
.section .label { font-size:0.68rem; letter-spacing:0.26em; text-transform:uppercase; color:var(--faint); font-weight:600; margin-bottom:1.1rem; }
.section p { font-family:var(--serif); font-weight:300; font-size:1.15rem; line-height:1.75; color:#9AA3AF; max-width:60ch; }
.section p + p { margin-top:1rem; }
.section p.k { color:var(--type); }
.section p a { border-bottom:1px solid var(--hair); padding-bottom:0.15rem; }
.section p a:hover { color:var(--type); }
.section .stack p { margin-top:0.2rem; }
.section .grid-2col { display:grid; grid-template-columns:1fr 1fr; gap:2.5rem; margin:1.5rem 0; }
@media (max-width:680px) { .section .grid-2col { grid-template-columns:1fr; } }
.section .col-h { font-size:0.68rem; letter-spacing:0.26em; text-transform:uppercase; color:var(--faint); font-weight:600; margin-bottom:0.9rem; }
.section .col-i { font-family:var(--serif); font-weight:300; font-size:1.15rem; line-height:1.9; color:#9AA3AF; }
.section .capline { font-size:0.85rem; color:var(--grey); margin-top:1.4rem; font-family:var(--sans); }
.section .marks { display:flex; flex-wrap:wrap; margin-top:1rem; }
.section .marks span { margin:0 1.2rem 0.5rem 0; }
.section .marks span { font-size:0.8rem; color:var(--faint); border-bottom:1px solid var(--hair); padding-bottom:0.15rem; font-family:var(--sans); }
.section .status { font-size:0.68rem; letter-spacing:0.2em; text-transform:uppercase; color:var(--grey); font-weight:600; margin:0.3rem 0 0.9rem; font-family:var(--sans); }
.section h3.ph { font-family:var(--sans); font-weight:600; font-size:1.15rem; margin-bottom:0.2rem; color:var(--type); }
.section .decl { font-family:var(--serif); font-weight:300; font-size:clamp(1.6rem,3.4vw,2.2rem); line-height:1.3; color:var(--type); }
.section .decl .sig { color:var(--dim); }
.section a.more { font-size:0.84rem; color:var(--type); border-bottom:1px solid var(--hair); padding-bottom:0.2rem; font-family:var(--sans); }

.lineage p.k { font-family:var(--sans); font-size:1rem; font-weight:600; }
.lineage p.ldown { color:var(--faint); margin:0.3rem 0; font-family:var(--sans); }

/* ---------- TEMPLATE D — utility ---------- */
.hero.utility { padding:7rem 0 3rem; }
.hero.utility h1 { font-size:clamp(1.9rem,3.6vw,2.7rem); }

/* ---------- ACCESS FORM (restyle only — markup untouched) ---------- */
.intake-form { max-width:720px; margin:1rem 0 2rem; }
.intake-section-label { font-size:0.68rem; letter-spacing:0.26em; text-transform:uppercase; color:var(--faint); font-weight:600; margin:2.6rem 0 1rem; padding-top:1.6rem; border-top:1px solid var(--hair); }
.intake-form .intake-section-label:first-child { border-top:none; margin-top:0; padding-top:0; }
.intake-row { display:grid; grid-template-columns:1fr 1fr; gap:1.2rem; }
@media (max-width:680px) { .intake-row { grid-template-columns:1fr; } }
.field-group { margin-bottom:1.2rem; }
.field-label { display:block; font-size:0.86rem; font-weight:600; color:var(--type); margin-bottom:0.45rem; }
.field-sublabel { font-size:0.8rem; color:var(--grey); line-height:1.5; margin-bottom:0.6rem; max-width:58ch; }
.field-input, .field-select, .field-textarea {
  width:100%; background:rgba(237,238,231,0.04); border:1px solid var(--hair);
  color:var(--type); font-family:var(--sans); font-size:0.92rem; padding:0.7rem 0.85rem; border-radius:0; }
.field-textarea { min-height:150px; resize:vertical; }
.field-input::placeholder, .field-textarea::placeholder { color:var(--grey); }
.field-input:focus, .field-select:focus, .field-textarea:focus { border-color:var(--faint); }
.field-input:focus-visible, .field-select:focus-visible, .field-textarea:focus-visible { outline:2px solid var(--type); outline-offset:2px; }
.field-select { appearance:none; -webkit-appearance:none; }
.checkbox-group { display:grid; gap:0.7rem; }
.checkbox-item { display:flex; align-items:flex-start; border:1px solid var(--hair); padding:0.9rem 1rem; cursor:pointer; }
.checkbox-item input { margin-top:0.25rem; margin-right:0.8rem; accent-color:var(--type); }
.checkbox-item-text { display:flex; flex-direction:column; gap:0.15rem; }
.checkbox-item-name { font-size:0.9rem; font-weight:600; color:var(--type); }
.checkbox-item-desc { font-size:0.8rem; color:var(--grey); line-height:1.5; }
.confidentiality-note { border-left:1px solid var(--hair); padding:0.2rem 0 0.2rem 1.2rem; margin:2rem 0; }
.confidentiality-label { font-size:0.68rem; letter-spacing:0.26em; text-transform:uppercase; color:var(--faint); font-weight:600; margin-bottom:0.4rem; }
.confidentiality-text { font-size:0.84rem; color:var(--grey); line-height:1.6; max-width:60ch; }
.intake-footer { margin-top:2rem; }
/* Submit buttons (defect fix, v23): the six audience-intake pages use
   <button type="submit" class="p">, but the only .p rule was .cta a.p — an
   anchor-only selector — so they rendered as unstyled native buttons. The primary
   action treatment now covers buttons wherever .p is used. */
button.p, .cta button.p {
  display:inline-block; font-size:0.9rem; font-weight:600; font-family:var(--sans);
  color:var(--black); background:var(--type); padding:0.85rem 1.6rem;
  border:none; cursor:pointer; line-height:1.2;
}
.intake-submit { font-size:0.9rem; font-weight:600; color:var(--black); background:var(--type); padding:0.85rem 1.6rem; border:none; cursor:pointer; font-family:var(--sans); }
.intake-note { font-size:0.8rem; color:var(--grey); line-height:1.7; margin-top:1.1rem; }

/* ---------- FORM STATES (CANONICAL — deployment supplies endpoint values only) ----------
   Validation, loading, success, and error states are owned by the canonical
   controller in assets/js/powderhouse-nav.js. The status line is injected at
   runtime as the form's last child, so no form markup changes. Monochrome by
   canon: severity is carried by weight and rule strength, never by colour. */
.form-status { margin-top:1.1rem; font-size:0.86rem; line-height:1.6; color:var(--dim);
  border-left:1px solid var(--hair); padding:0.15rem 0 0.15rem 1rem; max-width:60ch; }
.form-status.is-error { color:var(--type); font-weight:600; border-left-color:var(--type); }
.form-status.is-success { color:var(--type); border-left-color:var(--faint); }
.form-status:focus-visible { outline:2px solid var(--type); outline-offset:4px; }
form.is-busy { opacity:0.55; }
form.is-busy .field-input, form.is-busy .field-select, form.is-busy .field-textarea,
form.is-busy .checkbox-item { pointer-events:none; }
.field-input.field-invalid, .field-select.field-invalid, .field-textarea.field-invalid {
  border-color:var(--type); }

/* ---------- HOMEPAGE (Template A) ---------- */
.home h1 { font-weight:700; line-height:1.1; letter-spacing:-0.015em; } /* Template-A override per hero build spec v16 */
.home .hero { padding:calc(8.5rem + var(--step)) 0 calc(4rem + var(--step)); }
@media (min-width:720px) { .home .hero { padding-top:4.8rem; } }
.doctrine { padding:calc(3rem + var(--step)) 0 calc(4.5rem + var(--step)); border-top:1px solid var(--hair); }
.litany { border-left:1px solid var(--hair); padding-left:1.4rem; margin:2rem 0; }
.litany p { font-size:1.02rem; line-height:1.9; color:var(--dim); }
.litany.neg p span { color:var(--type); font-weight:600; }
.aphorism { font-family:var(--serif); font-weight:300; font-size:1.3rem; line-height:1.5; margin:2rem 0 2.6rem; }
.aphorism b { font-weight:600; }
.aphorism b.lime { color:var(--lime); }
.hero-aph { margin:2.4rem 0 0; }
.lede span { color:var(--type); }
.ladder { padding:calc(5rem + var(--step)) 0; border-top:1px solid var(--hair); }
.ladder p.big { font-family:var(--serif); font-weight:300; font-size:clamp(1.5rem,3.4vw,2.15rem); line-height:1.5; max-width:26ch; }
.ladder p.big b { font-weight:600; }
section.sys { padding:calc(5.5rem + var(--step)) 0; border-top:1px solid var(--hair); }
h2 { font-family:var(--serif); font-weight:400; font-size:clamp(1.9rem,4.4vw,2.8rem); line-height:1.15; max-width:22ch; margin-bottom:1.1rem; }
p.sect { font-size:1rem; line-height:1.7; color:var(--dim); max-width:54ch; }
.grid4 { display:grid; grid-template-columns:repeat(auto-fit,minmax(215px,1fr)); gap:2.4rem 2.2rem; margin-top:3.2rem; }
.cell { border-top:1px solid var(--hair); padding-top:1.3rem; }
.cell .n { font-family:var(--serif); font-weight:300; font-size:1.6rem; color:var(--faint); display:block; margin-bottom:0.9rem; }
.cell h3 { font-size:1rem; font-weight:600; margin-bottom:0.35rem; }
.cell p { font-size:0.88rem; line-height:1.6; color:var(--dim); margin-bottom:0.7rem; }
.cell a { font-size:0.8rem; color:var(--faint); border-bottom:1px solid var(--hair); padding-bottom:0.15rem; }
.cell a:hover { color:var(--type); }
.arch { padding:calc(5.5rem + var(--step)) 0; border-top:1px solid var(--hair); position:relative; overflow:hidden; }
/* .depthfield RETIRED 2026-08-04 — a standalone blue field behind content is the
   exact overlay mechanism the environmental-depth canon rejects. Depth lives inside
   the photography. Do not reinstate. */
.arch > * { position:relative; }
.flow { margin:3rem 0 2.6rem; border:1px solid var(--hair); display:flex; flex-wrap:wrap; }
.flow .fstep { flex:1 1 190px; padding:1.5rem 1.4rem; border-right:1px solid var(--hair); font-size:0.92rem; font-weight:600; }
.flow .fstep:last-child { border-right:none; }
.flow .fstep small { display:block; font-weight:400; font-size:0.78rem; color:var(--faint); margin-top:0.4rem; }
.arch p.echo { font-family:var(--serif); font-weight:300; font-size:1.25rem; line-height:1.75; color:var(--dim); max-width:34ch; }
.aud { display:grid; grid-template-columns:repeat(auto-fit,minmax(280px,1fr)); gap:2.5rem; padding:calc(5.5rem + var(--step)) 0; border-top:1px solid var(--hair); }
.aud h3 { font-family:var(--serif); font-weight:400; font-size:1.55rem; line-height:1.3; margin:0.7rem 0 0.6rem; max-width:20ch; }
.aud p { font-size:0.95rem; line-height:1.65; color:var(--dim); margin-bottom:1rem; }
.aud a { font-size:0.84rem; border-bottom:1px solid var(--hair); padding-bottom:0.2rem; color:var(--type); }
.close { padding:calc(7rem + var(--step)) 0; border-top:1px solid var(--hair); text-align:left; }
.close p { font-family:var(--serif); font-weight:300; font-size:clamp(1.9rem,4.6vw,3rem); line-height:1.25; margin-bottom:2rem; }
.close p .lime { color:var(--lime); font-weight:400; }
.close a { display:inline-block; font-size:0.9rem; font-weight:600; color:var(--black); background:var(--type); padding:0.85rem 1.6rem; }

/* ---------- FOOTER ---------- */
footer { border-top:1px solid var(--hair); padding:3.2rem 0 4rem; margin-top:4rem; }
.home footer { margin-top:0; }
.fgrid { display:grid; grid-template-columns:2fr 1fr 1fr; gap:2rem; }
footer h4 { font-size:0.66rem; letter-spacing:0.2em; text-transform:uppercase; color:var(--grey); margin-bottom:0.9rem; }
footer ul { list-style:none; }
footer li { font-size:0.84rem; color:var(--dim); margin-bottom:0.5rem; }
footer li a:hover { color:var(--type); }
.legal { font-size:0.72rem; color:var(--grey); line-height:1.8; }
footer .legal { margin-top:2.6rem; }
footer.simple .legal { margin-top:0; }
@media (max-width:680px) { .fgrid { grid-template-columns:1fr 1fr; } }


/* ---------- PAPER REGISTER (locked July 2026) ----------
   White editorial surfaces: reflective long-form only, per register map.
   Same design system, same components — background moves from charcoal to paper.
   Accent rule: deep-ocean teal carries navigational, structural, and typographic
   emphasis. Lime appears only as a bounded non-textual marker behind or adjacent
   to dark ink — never as body, label, or display type on paper. */
body.paper {
  --paper:#F7F6F2;
  --ink:#171C22;
  background:var(--paper);
  color:var(--ink);
}
body.paper .topnav,
body.paper .setup { color:#3E4750; }
body.paper .tagline,
body.paper .lede,
body.paper .legal { color:var(--grey); }
body.paper .eyebrow,
body.paper .section .label { color:#0A4C74; }
body.paper .section p { color:#3E4750; line-height:1.75; }
body.paper .section p.k,
body.paper h1 { color:var(--ink); }
body.paper .section { max-width:41rem; }
body.paper .hero,
body.paper .section,
body.paper footer.simple { border-color:rgba(23,28,34,0.14); }
body.paper .topnav a.access { color:var(--paper); background:var(--ink); }
/* DARK HERO ON PAPER PAGES (defect fix, v23).
   The paper register was written for a paper-surfaced hero. Every paper page that
   carries a hero also carries a dark photographic .heroimg, so the register was
   inking the headline, setup, lede, eyebrow and nav dark against a dark photograph —
   effectively invisible. Scoped to body.paper.hero-dark — the explicit
   marker on paper pages that carry a dark photographic hero. Paper pages WITHOUT one
   (the report template) keep the pure paper register, nav included. The original
   body-level scoping regressed the report page to light-on-white nav; the class
   makes the intent enforceable instead of documented. nav.top is position:relative,
   so on hero-dark pages it scrolls away with the hero and never sits over paper. */
body.paper.hero-dark .hero h1 { color:var(--type); }
body.paper.hero-dark .hero .setup,
body.paper.hero-dark .hero .lede { color:var(--dim); }
body.paper.hero-dark .hero .eyebrow { color:var(--faint); }
/* Pure-paper nav (no dark hero — the report template): the location tab and the mobile
   trigger were never covered by the paper register because no nav-on-white page existed
   before. Ink them; hero-dark pages keep the light treatment. */
body.paper:not(.hero-dark) .topnav .loc { color:var(--ink); }
body.paper:not(.hero-dark) .topnav .loc::after { background:var(--ink); }
body.paper:not(.hero-dark) .menu-trigger { color:#3E4750; }
body.paper:not(.hero-dark) .menu-trigger:hover { color:var(--ink); }
body.paper.hero-dark .topnav { color:var(--dim); }
body.paper.hero-dark .brandlock .tagline { color:var(--faint); }
body.paper.hero-dark .topnav a.access { color:var(--black); background:var(--type); }
body.paper.hero-dark .hero .cta a.p { color:var(--black); background:var(--type); }

body.paper .lime-mark {
  display:inline;
  background:linear-gradient(transparent 62%, var(--lime) 62%);
  padding:0 2px;
}



/* ---------- LATEST PERSPECTIVES — editorial archive grid ----------
   The featured band above is the feature mechanism; THIS grid is where readers
   choose other work. Cards are typographic for written pieces; FILM cards may
   carry a thumbnail. Do not add carousels, thumbnail rails inside the video
   band, autoplay, exposed playlists, or a "Select video" control — the page is
   an institution publishing a considered body of intelligence, not a media
   center. Filters (ALL / FILM / MARKET INTELLIGENCE / FORMATION / CAPITAL)
   arrive only once the library warrants them. */
.persp-grid { display:grid; grid-template-columns:repeat(3, 1fr); gap:0 2rem; margin-top:2.2rem; border-top:1px solid var(--hair); }
.pcard { display:block; padding:1.6rem 0 1.9rem; border-bottom:1px solid var(--hair); }
.pcard:hover .pcard-title { color:var(--type); }
.section .pcard-label { font-size:0.66rem; letter-spacing:0.26em; text-transform:uppercase; color:var(--faint); font-weight:600; margin-bottom:0.9rem; }
.section .pcard-title { font-family:var(--serif); font-weight:400; font-size:1.35rem; line-height:1.3; color:var(--dim); margin-bottom:0.7rem; transition:color .25s ease; }
.section .pcard-abs { font-size:0.92rem; line-height:1.65; color:var(--grey); margin-bottom:0.9rem; }
.section .pcard-meta { font-size:0.72rem; color:var(--faint); }
.section .pcard-action { font-size:0.72rem; color:var(--faint); transition:color .25s ease; }
.pcard:hover .pcard-action { color:var(--type); }
.pcard-thumb { aspect-ratio:16/9; background:#050505; border:1px solid var(--hair); margin-bottom:1.1rem; background-size:cover; background-position:center; }
@media (max-width:1080px) { .persp-grid { grid-template-columns:repeat(2, 1fr); } }
@media (max-width:700px) { .persp-grid { grid-template-columns:1fr; } }

/* ---------- SOCIAL ROW (footer) ----------
   Icons as punctuation, not catalog. Monochrome only: meta grey, type on hover.
   No lime — the lime budget per page is spent elsewhere. */
footer .social { display:flex; gap:1.1rem; align-items:center; margin-bottom:0.9rem; color:var(--grey); }
footer .social a { color:inherit; display:inline-flex; }
footer .social a:hover { color:var(--type); }
body.paper footer .social { color:var(--grey); }
body.paper footer .social a:hover { color:var(--ink); }


/* legal links row */
footer .legal-links { font-size:0.72rem; color:var(--grey); margin-bottom:0.55rem; line-height:1.9; }
footer .legal-links a { color:inherit; }
footer .legal-links a:hover { color:var(--type); }
body.paper footer .legal-links a:hover { color:var(--ink); }


/* ---------- SCROLL REVEAL (Perspectives) ---------- */
.reveal { opacity:0; transform:translateY(14px); transition:opacity .6s ease, transform .6s ease; }
.reveal.in { opacity:1; transform:none; }
@media (prefers-reduced-motion:reduce) { .reveal { opacity:1; transform:none; transition:none; } }

/* ---------- FEATURED FILM ---------- */
.film-frame { position:relative; aspect-ratio:16/9; background:#050505; border:1px solid var(--hair); display:flex; align-items:center; justify-content:center; overflow:hidden; }
.film-frame iframe { position:absolute; inset:0; width:100%; height:100%; border:0; }
.film-play { background:none; border:0; color:var(--type); cursor:pointer; opacity:.85; transition:opacity .3s ease; }
.film-play:hover { opacity:1; }
.film-band[data-video-id=""] { display:none; }

/* ---------- FEATURED PERSPECTIVES — selectable editorial carousel ----------
   Blackstone-pattern editorial selection. Advance only on user interaction — never
   automatic rotation. Active pagination = outlined ring, NEVER lime. One icon
   geometry system (1.5px stroke circles) across every control. */
.sr-only { position:absolute; width:1px; height:1px; padding:0; margin:-1px; overflow:hidden; clip:rect(0,0,0,0); white-space:nowrap; border:0; }
.carousel { outline-offset:4px; }
.cviewport { overflow:hidden; }
.cslides { display:flex; transition:transform .5s ease; }
.fslide { flex:0 0 100%; min-width:100%; display:grid; grid-template-columns:3fr 2fr; gap:2.4rem; align-items:center; }
.fmedia { position:relative; aspect-ratio:16/9; background:#050505; border:1px solid var(--hair); overflow:hidden; }
.fstill { position:absolute; inset:0; background:#050505 center/cover no-repeat; }
.fmedia .film-play { position:absolute; inset:0; margin:auto; width:64px; height:64px; z-index:2; }
.fmedia iframe { position:absolute; inset:0; width:100%; height:100%; border:0; z-index:3; }
.fslide.playing .film-play, .fslide.playing .fstill { visibility:hidden; }
.section .ftype { font-size:0.66rem; letter-spacing:0.26em; text-transform:uppercase; color:var(--faint); font-weight:600; margin-bottom:1rem; }
.section .ftitle { font-family:var(--serif); font-weight:400; font-size:clamp(1.5rem, 2.4vw, 2.1rem); line-height:1.25; color:var(--type); margin-bottom:0.9rem; max-width:22ch; }
.section .fabs { font-size:0.95rem; line-height:1.7; color:var(--grey); margin-bottom:1rem; max-width:44ch; }
.section .fmeta { font-size:0.72rem; color:var(--faint); margin-bottom:1.3rem; }
.fcta { display:inline-flex; align-items:center; gap:0.8rem; background:none; border:0; padding:0; cursor:pointer; font-family:var(--sans); font-size:0.84rem; font-weight:600; color:var(--type); }
.fcta .cicon { display:inline-flex; color:var(--dim); transition:color .25s ease; }
.fcta:hover .cicon { color:var(--type); }
.ccontrols { display:flex; align-items:center; gap:1.1rem; margin-top:1.6rem; }
.cbtn { display:inline-flex; align-items:center; justify-content:center; width:44px; height:44px; border-radius:50%; border:1px solid var(--hair); background:none; color:var(--dim); cursor:pointer; transition:color .25s ease, border-color .25s ease; }
.cbtn:hover { color:var(--type); border-color:var(--faint); }
.cdots { display:flex; align-items:center; gap:0.7rem; }
.cdot { position:relative; width:24px; height:24px; border:0; background:none; cursor:pointer; padding:0; }
.cdot::after { content:""; position:absolute; inset:0; margin:auto; width:7px; height:7px; border-radius:50%; background:var(--faint); opacity:.55; transition:opacity .25s ease; }
.cdot:hover::after { opacity:.9; }
.cdot.active::after { width:11px; height:11px; background:none; border:1.5px solid var(--type); opacity:1; }
@media (prefers-reduced-motion:reduce) { .cslides { transition:none; } }
@media (max-width:1080px) { .fslide { grid-template-columns:1fr; gap:1.4rem; align-items:start; } .ftitle { max-width:none; } }
@media (max-width:700px) { .ccontrols { justify-content:space-between; } }

/* ---------- RESEARCH & DOCUMENTS — larger document cards, download posture ---------- */
.doc-grid { display:grid; grid-template-columns:repeat(2, 1fr); gap:0 2.4rem; margin-top:2.2rem; border-top:1px solid var(--hair); }
.doc-card { display:block; padding:2rem 0 2.2rem; border-bottom:1px solid var(--hair); }
.section .doc-type { font-size:0.66rem; letter-spacing:0.26em; text-transform:uppercase; color:var(--faint); font-weight:600; margin-bottom:1rem; }
.section .doc-title { font-family:var(--serif); font-weight:400; font-size:1.65rem; line-height:1.25; color:var(--dim); margin-bottom:0.8rem; transition:color .25s ease; }
.doc-card:hover .doc-title { color:var(--type); }
.section .doc-abs { font-size:0.92rem; line-height:1.65; color:var(--grey); margin-bottom:0.9rem; max-width:44ch; }
.section .doc-meta { font-size:0.72rem; color:var(--faint); margin-bottom:0.9rem; }
.section .doc-action { font-size:0.72rem; color:var(--faint); transition:color .25s ease; }
.doc-card:hover .doc-action { color:var(--type); }
@media (max-width:900px) { .doc-grid { grid-template-columns:1fr; } }

/* ---------- POWDERHOUSE IN THE NEWS — external coverage, Powderhouse chrome only ---------- */
.news-grid { display:grid; grid-template-columns:repeat(3, 1fr); gap:0 2rem; margin-top:2.2rem; border-top:1px solid var(--hair); }
.news-card { display:block; padding:1.6rem 0 1.9rem; border-bottom:1px solid var(--hair); }
.section .news-pub { font-size:0.66rem; letter-spacing:0.26em; text-transform:uppercase; color:var(--type); font-weight:600; margin-bottom:0.5rem; }
.section .news-date { font-size:0.72rem; color:var(--faint); margin-bottom:0.9rem; }
.section .news-title { font-family:var(--serif); font-weight:400; font-size:1.35rem; line-height:1.3; color:var(--dim); margin-bottom:0.7rem; transition:color .25s ease; }
.news-card:hover .news-title { color:var(--type); }
.section .news-abs { font-size:0.92rem; line-height:1.65; color:var(--grey); margin-bottom:0.9rem; }
.section .news-action { font-size:0.72rem; color:var(--faint); transition:color .25s ease; }
.news-card:hover .news-action { color:var(--type); }
@media (max-width:1080px) { .news-grid { grid-template-columns:repeat(2, 1fr); } }
@media (max-width:700px) { .news-grid { grid-template-columns:1fr; } }

/* ---------- BRIEFINGS & WEBCASTS — institutional events, not editorial stream ----------
   One event, one card: state changes LIVE → ON DEMAND in place; never a second card for the
   replay. External provider links carry ↗ and open in a new tab. */
.brief-grid { display:grid; grid-template-columns:repeat(2, 1fr); gap:0 2.4rem; margin-top:2.2rem; border-top:1px solid var(--hair); }
.brief-card { padding:2rem 0 2.2rem; border-bottom:1px solid var(--hair); }
.section .brief-type { font-size:0.66rem; letter-spacing:0.26em; text-transform:uppercase; color:var(--faint); font-weight:600; margin-bottom:1rem; }
.section .brief-title { font-family:var(--serif); font-weight:400; font-size:1.65rem; line-height:1.25; color:var(--dim); margin-bottom:0.8rem; }
.section .brief-meta { font-size:0.72rem; color:var(--faint); margin-bottom:1rem; }
.brief-action a { font-size:0.78rem; font-weight:600; color:var(--dim); transition:color .25s ease; }
.brief-action a:hover { color:var(--type); }
@media (max-width:900px) { .brief-grid { grid-template-columns:1fr; } }

/* Institutional event bundle — one event, every representation, one module. */
.event-bundle { margin-top:2.6rem; padding:2rem 0 2.2rem; border-top:1px solid var(--hair); border-bottom:1px solid var(--hair); }
.section .eb-type { font-size:0.66rem; letter-spacing:0.26em; text-transform:uppercase; color:var(--type); font-weight:600; margin-bottom:0.5rem; }
.section .eb-meta { font-size:0.72rem; color:var(--faint); margin-bottom:1.3rem; }

/* Grouped actions — document bundles and event bundles share one list system; actions stack
   vertically, each names its destination and file format directly. */
.bundle-actions { list-style:none; margin:0; padding:0; }
.bundle-actions li { margin:0; }
.bundle-actions a { display:inline-block; padding:0.55rem 0; min-height:44px; box-sizing:border-box; font-size:0.78rem; font-weight:600; color:var(--dim); transition:color .25s ease; }
.bundle-actions a:hover { color:var(--type); }



/* ---------- SUBSCRIBE ---------- */
.subscribe { max-width:32rem; }
.subscribe form { margin-top:1.4rem; }
.subscribe button.p { margin-top:.4rem; }
.sub-note { font-size:.74rem; color:var(--grey); margin-top:.9rem; }
.sub-note a { text-decoration:underline; }


/* fresh powder research disclaimer */
.research-disclaimer { font-size:.74rem; color:var(--grey); line-height:1.7; max-width:52rem; }


/* fresh powder seal */
.fp-seal { width:150px; height:auto; display:block; margin:0 0 1.8rem; }


/* fresh powder issue-architecture feature names */
.k-inline { color:var(--type); font-weight:600; }


/* reveal fails visible without JS */


/* fresh powder recurring features — 2x2 editorial grid, hairline separated */
.feature-grid { display:grid; grid-template-columns:1fr 1fr; margin:2.4rem 0 0; border-top:1px solid var(--hair); }
.feature { padding:1.8rem 2rem 1.8rem 0; border-bottom:1px solid var(--hair); border-top:1px solid var(--hair); margin-top:-1px;
  break-inside:avoid; page-break-inside:avoid; -webkit-column-break-inside:avoid; }
.feature:nth-child(even) { padding-left:2rem; padding-right:0; border-left:1px solid var(--hair); }
.feature-name, .feature-line { break-after:avoid; page-break-after:avoid; }
.feature-name { font-size:0.7rem; letter-spacing:0.18em; text-transform:uppercase; color:var(--type); font-weight:600; margin-bottom:0.6rem; }
.feature-line { color:var(--dim); font-weight:600; margin-bottom:0.8rem; }
.feature p:last-child { color:var(--grey); font-size:0.94rem; line-height:1.7; }
body.paper .feature-name { color:var(--ink); }
body.paper .feature p:last-child { color:#3E4750; }
@media (max-width:760px) {
  .feature-grid { grid-template-columns:1fr; }
  .feature, .feature:nth-child(even) { padding:1.6rem 0; border-left:0; }
}


/* print / PDF: the architecture resolves as one complete section */
@media print {
  .feature-grid { display:grid; grid-template-columns:1fr 1fr; break-inside:avoid; page-break-inside:avoid; }
  .feature { break-inside:avoid; page-break-inside:avoid; }
  .feature-name, .feature-line { break-after:avoid; page-break-after:avoid; }
  .section.reveal { break-inside:auto; }
  #fresh-powder-subscribe { break-before:page; page-break-before:always; }
  .reveal { opacity:1 !important; transform:none !important; }
}
.cell .poweredby { display:block; margin-top:0.1rem; font-size:0.72rem; letter-spacing:0.05em; color:var(--faint); font-family:var(--sans); }

/* Compound line — cycling word crossfade. Driven by #compoundline in powderhouse-nav.js;
   the fade belongs here so it survives a JS refactor and is visible to anyone reading the CSS. */
.cw { transition:opacity .4s ease; }
/* Homepage lime details per approved comp */
/* LIME PUNCTUATION — LOCKED 2026-08-04 (Chad).
   Exactly ONE lime period on the homepage: the H1 terminal period, which is the
   declarative signature. Every other period on the page stays neutral, including
   the setup line ("...how companies are understood."). Do not extend lime
   punctuation to any other sentence or page. */
.tp{color:var(--lime);}
.cta-arr{color:var(--lime);margin-left:0.45rem;font-weight:600;}
/* LIME WORDMARK IN THE COMPOUND LINE — LOCKED 2026-08-04 (Chad).
   "Markets compound capital. Powderhouse compounds understanding."
   The lime carries the company name, not punctuation. Distinct mechanism from
   the H1 terminal period; both are sanctioned and both stay. Do not remove. */
.hero-aph b{color:var(--lime);}

/* ---------- LEADERSHIP — interactive biography drawer ----------
   Blackstone mechanism, Powderhouse language. Directory: black, names are the interface —
   no cards, no portraits, no tiles. Drawer: deep-sea identity header (#041A27 family, flat
   solid — an identity field, not the environmental Access descent), white biography body,
   56px mobile / 60px desktop circular close. No lime inside the drawer. */
.leader-list { margin-top:1.4rem; border-top:1px solid var(--hair); }
.section a.leader-entry { display:block; padding:1.9rem 0 2rem; border-bottom:1px solid var(--hair); cursor:pointer; }
.section .leader-name { display:inline; font-family:var(--serif); font-weight:400; font-size:clamp(1.9rem, 3.4vw, 3rem); line-height:1.15; color:var(--type);
  background-image:linear-gradient(currentColor, currentColor); background-repeat:no-repeat;
  background-size:0 1px; background-position:0 100%; transition:background-size 220ms ease;
  padding-bottom:3px; }
.section a.leader-entry:hover .leader-name, .section a.leader-entry:focus-visible .leader-name { background-size:100% 1px; }
.section .leader-role { display:block; margin-top:0.55rem; font-family:var(--sans); font-size:clamp(0.95rem, 1.3vw, 1.1rem); color:var(--dim); }

/* Veil — underlying page subdued, context preserved */
.bio-veil { position:fixed; inset:0; background:rgba(5,7,10,0.62); opacity:0; transition:opacity 300ms ease; z-index:120; }
.bio-veil.open { opacity:1; }

/* Drawer — enters from the right as an architectural panel; no bounce, no spring */
.bio-drawer { position:fixed; top:0; right:0; height:100vh; height:100dvh;
  width:clamp(640px, 54vw, 880px); max-width:100vw; /* 52–56vw band — a drawer, not a split page; more Leadership stays visible at left */
  background:#F7F6F2; z-index:130;
  transform:translateX(100%); transition:transform 320ms ease; overflow:hidden; }
.bio-drawer.open { transform:translateX(0); }
.bio-scroll { height:100%; overflow-y:auto; -webkit-overflow-scrolling:touch; overscroll-behavior:contain; }

/* Identity header — deep sea. Name and role only: no portrait, no background image,
   no biography text, no lime. */
.bio-head { background:#041A27; /* LOCKED (Chad, 2026-08-04): deep-sea teal identity header, #041A27 family,
     flat solid — no gradient, no glow, no photographic treatment. This is an intentional
     solid INSTITUTIONAL surface: deep sea used as an identity field. Distinct mechanism
     from Access, where deep sea runs as an environmental DESCENT carried by imagery.
     Both are valid; do not conflate them and do not swap this to black or to a gradient.
     The prior same-day black ruling (#050607) is REVERSED; #050607 is not a canonical
     header color. (Restored 2026-08-12 after tree regression to the reversed ruling.) */
  min-height:272px; box-sizing:border-box; display:flex; flex-direction:column; justify-content:flex-end;
  padding:6.2rem 3.2rem 3.4rem; padding-top:calc(6.2rem + env(safe-area-inset-top, 0px)); } /* greater vertical authority — the name sits lower inside a larger field */
.bio-eyebrow { font-size:0.66rem; letter-spacing:0.26em; text-transform:uppercase; color:var(--faint); font-weight:600; margin-bottom:1.5rem; }
.bio-name { font-family:var(--serif); font-weight:400; font-size:clamp(2.6rem, 4.6vw, 4.2rem); line-height:1.08; color:var(--type); margin:0 0 0.9rem; outline:none; }
.bio-role { font-family:var(--sans); font-size:clamp(1rem, 1.4vw, 1.2rem); color:rgba(255,255,255,0.78); } /* softened white — no second blue signal */

/* Close — LOCKED ruling: large white circular field, black X (two 1.5px strokes, never a
   text glyph), no border, no shadow, no lime. Primary compositional element of the drawer,
   anchored in the upper-right of the deep-sea identity header and moving with it as one
   architectural piece. Never a small corner X, the word Close, a back arrow, an icon in the
   white body, or backdrop-only dismissal. 56px mobile · 60px desktop. */
.bio-head { position:relative; }
.bio-close { position:absolute; top:2.1rem; top:max(2.1rem, calc(env(safe-area-inset-top, 0px) + 20px));
  right:2.4rem; width:60px; height:60px; /* attached to the header geometry — lower and inboard, never floating at the viewport edge; mobile keeps the off-edge bleed */ border-radius:50%; border:0; box-shadow:none;
  background:#F7F6F2; color:#171C22;
  display:flex; align-items:center; justify-content:center; cursor:pointer; z-index:2; }
.bio-close:focus-visible { outline:2px solid #F7F6F2; outline-offset:3px; }

/* Biography body — institutional record on paper. Söhne, comfortable measure,
   generous separation. Never justified, never oversized serif body copy. */
.bio-body { background:#F7F6F2; min-height:40vh; }
.bio-copy { padding:4.5rem 3.2rem 3.8rem; /* ~72px body opening before the first paragraph */ padding-right:clamp(3.2rem, 6vw, 5rem); max-width:60ch; } /* stronger reading-surface transition: deeper top padding, narrower measure, right-side air */
.bio-copy p { font-family:var(--sans); font-weight:400; font-size:clamp(1.05rem, 1.35vw, 1.15rem); line-height:1.6; color:#171C22; margin:0 0 1.9rem; } /* measured: leading ~1.6, paragraph spacing ~30px */
.bio-copy p:last-child { margin-bottom:0; }
.bio-copy a { color:#171C22; text-decoration:underline; }
.bio-copy .bio-pending { color:#5A636E; }

/* Motion discipline */
@media (prefers-reduced-motion:reduce) {
  .bio-drawer, .bio-veil { transition:none; }
}

/* Mobile — near-full-width side sheet attached to the right edge; a narrow strip of the
   directory stays visible at the left so the layer reads as a drawer, not a page. */
@media (max-width:760px) {
  .bio-drawer { width:calc(100vw - 64px); min-width:0; } /* measured strip: ~64px of the directory stays visible */
  .bio-head { padding:4.4rem 1.9rem 3.2rem; padding-top:calc(4.4rem + env(safe-area-inset-top, 0px)); }
  .bio-copy { padding:2.2rem 1.9rem 2.8rem; }
  /* Close circle fully inset inside the header — reference-corrected (Chad, 2026-08-05):
     the Blackstone drawer keeps the circle wholly inside with clear air on all sides.
     The earlier -7px edge bleed misread the reference and rendered as clipping on device. */
  .bio-close { top:max(1.4rem, calc(env(safe-area-inset-top, 0px) + 16px)); right:1.2rem; width:56px; height:56px; }
}

/* ---------- MOBILE NAVIGATION — accordion + 100/40/20 line system ----------
   Full-viewport black overlay: wordmark left, plain line-icon X right (the white circular
   X belongs to the Leadership biography drawer only). Two distinct line kinds that must
   never merge: the STRUCTURAL separator (full menu width, very low contrast, beneath every
   main row) and the ACTIVE underline (attached to one label, 100/40/20% of its width,
   higher contrast, exactly one anywhere). Chevron = open/closed only; it never marks
   location. No lime, no pills, no filled rows, no checkmarks, no breadcrumbs. */
.pmenu { position:fixed; inset:0; background:#0A0A0A; z-index:150; display:flex; flex-direction:column;
  opacity:0; transition:opacity 240ms ease; }
.pmenu.open { opacity:1; }
.pm-head { display:flex; align-items:center; justify-content:space-between; flex:0 0 auto;
  padding:1.4rem 1.5rem 1.2rem; padding-top:calc(1.4rem + env(safe-area-inset-top, 0px));
  background:#0A0A0A; border-bottom:1px solid var(--hair); }
.pm-head .logo-img { height:22px; width:auto; display:block; }
.pm-x { background:none; border:0; color:var(--type); cursor:pointer; padding:11px; margin:-11px; }
.pm-body { flex:1 1 auto; overflow-y:auto; -webkit-overflow-scrolling:touch; overscroll-behavior:contain;
  padding:0 1.5rem calc(2rem + env(safe-area-inset-bottom, 0px)); }
.pm-list { list-style:none; margin:0; padding:0; }
.pm-row { border-bottom:1px solid rgba(237,238,231,0.08); } /* structural separator — NOT the active line */
.pm-top { display:flex; align-items:center; justify-content:space-between; width:100%;
  min-height:76px; padding:0; background:none; border:0; cursor:pointer; text-align:left;
  font-family:var(--sans); font-size:1.02rem; letter-spacing:0.14em; font-weight:600; color:var(--type); }
a.pm-top { text-decoration:none; }
.pm-chev { color:var(--dim); transition:transform 240ms ease; flex:0 0 auto; margin-left:1rem; }
.pm-top[aria-expanded="true"] .pm-chev { transform:rotate(180deg); }
.pm-label { position:relative; display:inline-block; padding-bottom:6px; }
/* Active underline — one neutral 1px line, leading-edge aligned; only the length changes. */
.pm-label::after { content:""; position:absolute; left:0; bottom:0; height:1px; background:var(--type);
  width:0; transition:width 200ms ease; }
.pm-label.line-100::after { width:100%; }
.pm-label.line-40::after { width:40%; }
.pm-label.line-20::after { width:20%; }
/* Accordion body — height via grid rows; chevron rotates simultaneously. */
.pm-sub { display:grid; grid-template-rows:0fr; transition:grid-template-rows 260ms ease; }
.pm-sub.open { grid-template-rows:1fr; }
.pm-subinner { overflow:hidden; min-height:0; }
.pm-group { font-family:var(--sans); font-weight:600; font-size:0.72rem; letter-spacing:0.22em;
  text-transform:uppercase; color:var(--type); margin:1.6rem 0 0.4rem; }
.pm-children { list-style:none; margin:0 0 1.4rem; padding:0; }
.pm-child { display:block; min-height:46px; display:flex; align-items:center; /* tightened ~12% per lock ruling; group-heading separation (1.6rem) stays generous */
  font-family:var(--sans); font-weight:400; font-size:1.05rem; color:var(--dim); text-decoration:none; }
.pm-child:hover .pm-label, .pm-child:focus-visible .pm-label { color:var(--type); }
@media (prefers-reduced-motion:reduce) {
  .pmenu, .pm-chev, .pm-sub, .pm-label::after { transition:none; }
}
/* The accordion menu is the mobile navigation; desktop keeps the glass system. */
@media (min-width:921px) { .pmenu { display:none; } } /* matches the trigger breakpoint */

/* ---------- RESEARCH REPORT PAGE — institutional publishing system ----------
   A major report is a first-class HTML publication with a PDF as the portable artifact —
   the HTML page is not a preview of the PDF. Alternating reading surfaces correspond to
   intellectual transitions, never decoration: white (reading) → pale paper (takeaways) →
   black (major analytical chapters) → deep sea (institutional synthesis) → black
   (disclosures). Reading accordions manage optional depth, not essential conclusions, and
   NEVER use the navigation 100/40/20 line system — that system marks route location only.
   No decorative charts, no placeholder modules on live surfaces, no card boxes, no
   app-style sticky tab bars. Lime: the sanctioned once-per-document closing line only. */
.report { color:#171C22; background:#FFFFFF; }
.rp-surface { padding:calc(3.4rem + 1vw) 0; }
.rp-white { background:#FFFFFF; color:#171C22; }
.rp-paper { background:#F7F6F2; color:#171C22; }
.rp-black { background:#0A0A0A; color:var(--type); }
.rp-deepsea { background:linear-gradient(180deg, #0C1E44 0%, #0A0F1B 100%); color:var(--type); }
.rp-inner { max-width:46rem; margin:0 auto; padding:0 1.6rem; }
.rp-inner-wide { max-width:60rem; margin:0 auto; padding:0 1.6rem; }

/* Hero */
.rp-hero { padding:calc(4.6rem + 2vw) 0 3.2rem; }
.rp-type { font-family:var(--sans); font-size:0.68rem; letter-spacing:0.26em; text-transform:uppercase; font-weight:600; color:#5A636E; margin-bottom:1.4rem; }
.rp-black .rp-type, .rp-deepsea .rp-type { color:var(--faint); }
.rp-title { font-family:var(--serif); font-weight:400; font-size:clamp(2.3rem, 5vw, 3.8rem); line-height:1.12; margin:0 0 1rem; max-width:18ch; }
.rp-date { font-family:var(--sans); font-size:0.78rem; color:#5A636E; margin-bottom:1.4rem; }
.rp-abstract { font-family:var(--serif); font-weight:300; font-size:1.2rem; line-height:1.65; color:#3A424C; max-width:52ch; margin-bottom:2rem; }
.rp-actions { display:flex; gap:1.8rem; flex-wrap:wrap; align-items:center; }
.rp-actions a { font-family:var(--sans); font-size:0.84rem; font-weight:600; color:#171C22; text-decoration:none; border-bottom:1px solid #171C22; padding-bottom:3px; }

/* Reading index — separate from global navigation; never a sticky app tab bar. */
.rp-index { border-top:1px solid rgba(23,28,34,0.14); border-bottom:1px solid rgba(23,28,34,0.14); padding:1.2rem 0; }
.rp-index-label { font-family:var(--sans); font-size:0.68rem; letter-spacing:0.26em; text-transform:uppercase; font-weight:600; color:#5A636E; margin:0 0 0.7rem; }
.rp-index ol { list-style:none; margin:0; padding:0; display:flex; flex-wrap:wrap; gap:0.4rem 1.8rem; }
.rp-index a { font-family:var(--sans); font-size:0.88rem; color:#3A424C; text-decoration:none; }
.rp-index a:hover { color:#171C22; text-decoration:underline; }

/* Body prose */
.rp-h2 { font-family:var(--serif); font-weight:400; font-size:clamp(1.7rem, 3vw, 2.3rem); line-height:1.2; margin:0 0 1.3rem; }
.rp-kicker { font-family:var(--sans); font-size:0.68rem; letter-spacing:0.26em; text-transform:uppercase; font-weight:600; color:#5A636E; margin:0 0 1rem; }
.rp-black .rp-kicker, .rp-deepsea .rp-kicker { color:var(--faint); }
.rp-prose p { font-family:var(--sans); font-size:1.02rem; line-height:1.7; margin:0 0 1.35rem; color:#242B33; max-width:66ch; }
.rp-black .rp-prose p, .rp-deepsea .rp-prose p { color:#B9C0C9; }
.rp-prose p:last-child { margin-bottom:0; }
sup.rp-fn { font-size:0.72em; } sup.rp-fn a { color:inherit; text-decoration:none; border-bottom:1px solid currentColor; }

/* Key takeaways — pale paper, numerals + vertical rule, no boxes. */
.rp-takeaway { display:grid; grid-template-columns:auto 1px 1fr; gap:0 1.4rem; padding:1.5rem 0; border-bottom:1px solid rgba(23,28,34,0.12); align-items:start; }
.rp-takeaway:last-child { border-bottom:0; }
.rp-tk-num { font-family:var(--serif); font-weight:300; font-size:2.2rem; line-height:1; color:#171C22; min-width:2.6rem; }
.rp-tk-rule { background:rgba(23,28,34,0.25); height:100%; min-height:2.4rem; }
.rp-tk-text { font-family:var(--sans); font-size:1.05rem; line-height:1.6; color:#242B33; align-self:center; }
@media (max-width:600px) { .rp-takeaway { grid-template-columns:auto 1px 1fr; gap:0 1rem; } .rp-tk-num { font-size:1.7rem; min-width:2rem; } }

/* Figures — authored, numbered evidence; every figure supports a stated conclusion. */
.rp-figure { margin:2.4rem 0; }
.rp-fig-num { font-family:var(--sans); font-size:0.68rem; letter-spacing:0.26em; text-transform:uppercase; font-weight:600; color:#5A636E; margin-bottom:0.5rem; }
.rp-black .rp-fig-num { color:var(--faint); }
.rp-fig-title { font-family:var(--serif); font-weight:400; font-size:1.3rem; line-height:1.3; margin:0 0 0.3rem; }
.rp-fig-sub { font-family:var(--sans); font-size:0.85rem; color:#5A636E; margin:0 0 1.4rem; }
.rp-black .rp-fig-sub { color:var(--grey); }
.rp-chart { width:100%; height:auto; display:block; max-width:680px; }
/* SVG text sized in CSS pixels so labels stay legible at every width — never scaled by viewBox. */
.rp-chart text { font-size:13px; }
@media (max-width:600px) { .rp-chart text { font-size:10.5px; } }
.rp-fig-source { font-family:var(--sans); font-size:0.74rem; color:#5A636E; margin-top:0.9rem; line-height:1.6; }
.rp-black .rp-fig-source { color:var(--grey); }
.rp-fig-interp { font-family:var(--sans); font-size:0.98rem; line-height:1.65; color:#242B33; margin-top:1rem; max-width:66ch; }
.rp-black .rp-fig-interp { color:#B9C0C9; }
.rp-fig-table { width:100%; border-collapse:collapse; margin-top:0.6rem; font-family:var(--sans); font-size:0.85rem; }
.rp-fig-table th, .rp-fig-table td { text-align:left; padding:0.55rem 0.8rem 0.55rem 0; border-bottom:1px solid rgba(23,28,34,0.12); }
.rp-black .rp-fig-table th, .rp-black .rp-fig-table td { border-color:var(--hair); color:#B9C0C9; }

/* Reading accordions — optional depth. Chevron = open/closed; no route lines here. */
.ra { border-top:1px solid rgba(23,28,34,0.14); }
.rp-black .ra, .rp-deepsea .ra { border-color:var(--hair); }
.ra-item { border-bottom:1px solid rgba(23,28,34,0.14); }
.rp-black .ra-item, .rp-deepsea .ra-item { border-color:var(--hair); }
.ra-row { display:flex; align-items:center; justify-content:space-between; width:100%; min-height:64px;
  background:none; border:0; cursor:pointer; text-align:left; padding:0;
  font-family:var(--serif); font-weight:400; font-size:1.25rem; color:inherit; }
.ra-chev { color:#5A636E; transition:transform 240ms ease; flex:0 0 auto; margin-left:1rem; }
.rp-black .ra-chev, .rp-deepsea .ra-chev { color:var(--dim); }
.ra-row[aria-expanded="true"] .ra-chev { transform:rotate(180deg); }
.ra-sub { display:grid; grid-template-rows:0fr; transition:grid-template-rows 260ms ease; }
.ra-sub.open { grid-template-rows:1fr; }
.ra-subinner { overflow:hidden; min-height:0; }
.ra-subinner > :first-child { margin-top:0.4rem; }
.ra-subinner > :last-child { margin-bottom:1.6rem; }

/* Grouped publication assets — one publication, one module (shared .bundle-actions list). */
.rp-bundle { border-top:1px solid rgba(23,28,34,0.14); border-bottom:1px solid rgba(23,28,34,0.14); padding:1.6rem 0; }
.rp-black .rp-bundle { border-color:var(--hair); }
.rp-action-pending { font-family:var(--sans); font-size:0.84rem; font-weight:600; color:#8C97A8; cursor:default; }
.bundle-actions .rp-action-pending { display:inline-block; padding:0.55rem 0; min-height:44px; box-sizing:border-box; font-size:0.78rem; }
.rp-bundle .bundle-actions a { color:#3A424C; }
.rp-bundle .bundle-actions a:hover { color:#171C22; }
.rp-black .rp-bundle .bundle-actions a { color:var(--dim); }
.rp-black .rp-bundle .bundle-actions a:hover { color:var(--type); }

/* Disclosures — fully designed, black surface, readable type. */
.rp-disclosure .rp-prose p { font-size:0.92rem; color:#9AA3AF; max-width:70ch; }
.rp-endnotes { list-style:none; margin:1.4rem 0 0; padding:0; counter-reset:fn; }
.rp-endnotes li { counter-increment:fn; font-family:var(--sans); font-size:0.85rem; line-height:1.7; color:#9AA3AF; margin-bottom:0.8rem; padding-left:1.8rem; position:relative; }
.rp-endnotes li::before { content:counter(fn) "."; position:absolute; left:0; color:var(--faint); }

@media (prefers-reduced-motion:reduce) { .ra-chev, .ra-sub { transition:none; } html { scroll-behavior:auto; } }

/* ---------- FOOTER INSTITUTIONAL LOCKUP — "Institutions are built." ----------
   LOCKED, measured geometry (screenshot-derived from the approved reference): ONE compact
   interlocked tiered signature in the footer's upper-left — never a left/right split, never
   full-width. Grid: line one at the grid edge; line two indented 64px; the wordmark sits in
   the second row's second column, completing the phrase (18-24px gap), baseline-aligned.
   The whole construction stays within roughly the left half; the space to its right stays
   deliberately empty; the rule begins below the entire lockup. Desktop phrase 52-60px,
   wordmark 250-300px wide; mobile phrase 38-44px, indent 24-32px, wordmark 150-180px,
   same-line with the phrase down to ~390px, wrapping beneath at the same indent below.
   No lime period - the wordmark's slash carries the only lime; the phrase is text, never a
   link or CTA; the wordmark alone links home. */
.flock { display:grid; grid-template-columns:auto auto; grid-template-rows:auto auto;
  justify-content:start; align-items:end; column-gap:20px; width:max-content; max-width:100%;
  padding:clamp(6rem, 8vw, 7.5rem) 0 0; margin-bottom:clamp(4.5rem, 6vw, 5.5rem); }
.flock-phrase { display:contents; font-family:var(--serif); font-weight:300; color:var(--type); margin:0; }
.flock-phrase .fl1, .flock-phrase .fl2 { font-size:clamp(3.25rem, 4.2vw, 3.75rem); line-height:1.08;
  font-family:var(--serif); font-weight:300; color:inherit; }
.flock-phrase .fl1 { grid-column:1; grid-row:1; }
.flock-phrase .fl2 { grid-column:1; grid-row:2; margin-left:64px; }
.flock-mark { grid-column:2; grid-row:2; align-self:end; display:block; margin-bottom:0.45rem; }
.flock-mark img { width:clamp(250px, 20vw, 300px); height:auto; display:block; }
.flock-rule { border-top:1px solid var(--hair); margin-bottom:clamp(2.4rem, 4vw, 3.4rem); }
body.paper .flock-phrase { color:var(--ink); }
body.paper .flock-rule { border-color:rgba(23,28,34,0.14); }
@media (max-width:680px) {
  .flock { padding-top:clamp(5.5rem, 12vw, 6.5rem); column-gap:12px; }
  .flock-phrase .fl1, .flock-phrase .fl2 { font-size:clamp(2.4rem, 10vw, 2.75rem); }
  .flock-phrase .fl2 { margin-left:28px; }
  .flock-mark { margin-bottom:0.35rem; }
  .flock-mark img { width:clamp(150px, 42vw, 180px); }
}
@media (max-width:390px) {
  /* Below ~390px the wordmark wraps beneath, preserving the second-line indent. */
  .flock-mark { grid-column:1; grid-row:3; margin-left:28px; margin-top:1.3rem; align-self:start; }
}

/* ---------- PERSPECTIVES ARCHIVE FILTERS — restrained editorial filter bar ----------
   Capability adopted, press-release-database styling rejected: no panels, no outlined
   cards, no rounded app controls, no oversized blurred menus. Thin neutral rules, Söhne
   labels, paper selector fields with deep-sea text, simple down chevrons. Native selects
   only — the OS sheet is the accessible fallback and the only popup. Focus keeps the
   browser's accessible ring. Sits above LATEST PERSPECTIVES, never above the featured
   carousel. SELF-ENFORCED THRESHOLD: the controller reveals the bar only when the archive
   holds 12+ items; below that it never renders. Results update in place, the URL records
   state (replaceState — no history spam), the page never jumps, results stay in the
   approved editorial card system. */
.pfilter { display:flex; align-items:flex-end; gap:2.2rem; flex-wrap:wrap;
  padding:1.3rem 0 1.5rem; border-top:1px solid var(--hair); border-bottom:1px solid var(--hair); margin-bottom:0.2rem; }
.pf-group { display:flex; flex-direction:column; gap:0.45rem; }
.pf-label { font-family:var(--sans); font-size:0.62rem; letter-spacing:0.26em; text-transform:uppercase; font-weight:600; color:var(--faint); }
.pf-select { appearance:none; -webkit-appearance:none; font-family:var(--sans); font-size:0.88rem;
  color:#0C1E44; background:#F7F6F2 url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6'%3E%3Cpath d='M1 1l4 4 4-4' fill='none' stroke='%230C1E44' stroke-width='1.2'/%3E%3C/svg%3E") no-repeat right 0.8rem center;
  border:0; border-radius:0; padding:0.55rem 2.2rem 0.55rem 0.8rem; min-width:11rem; cursor:pointer; }
.pf-clear { background:none; border:0; padding:0.55rem 0; cursor:pointer;
  font-family:var(--sans); font-size:0.78rem; font-weight:600; color:var(--dim); border-bottom:1px solid var(--hair); }
.pf-clear:hover { color:var(--type); }
.section .pf-count { font-family:var(--sans); font-size:0.74rem; letter-spacing:0.08em; color:var(--faint); margin:0.9rem 0 0; width:100%; }
.section .pf-count b { color:var(--dim); font-weight:600; letter-spacing:0.2em; text-transform:uppercase; }
@media (max-width:700px) {
  .pfilter { flex-direction:column; align-items:stretch; gap:1.1rem; }
  .pf-select { width:100%; min-width:0; }
}



/* ============================================================
   ACCESS DESCENT FIELD  (route-scoped exception, Chad 2026-08-04)
   Scope: routes carrying no environmental photograph. The environmental-depth
   canon expresses descent by grading the image; Access has no image, so the
   canon's mechanism has no vehicle here. Confined to body.access; must not be
   generalised to any route that ships a photograph.
   Eleven stops: interpolated midpoints so no band is locatable on OLED.
   ============================================================ */
body.access { background:#0A0A0A; }
.access-field {
  position:absolute; top:0; left:0; right:0; height:1600px; z-index:0; pointer-events:none;
  background:linear-gradient(180deg,
    #063047 0%,  #062D42 7%,  #052A3D 14%, #042638 21%, #042334 28%,
    #041E2E 36%, #041A27 44%, #041722 53%, #03141D 62%, #060F14 81%, #0A0A0A 100%);
}
/* Descent tracks progress: each step begins deeper than the last. */
body.at-2 .access-field { background:linear-gradient(180deg,
  #042334 0%, #041E2E 12%, #041A27 26%, #041722 40%, #03141D 55%, #060F14 78%, #0A0A0A 100%); }
body.at-3 .access-field { background:linear-gradient(180deg,
  #03141D 0%, #051218 25%, #060F14 50%, #080C0F 75%, #0A0A0A 100%); }
/* Anti-banding only. Delete this rule if the grain is ever visible. */
.access-field::after {
  content:""; position:absolute; top:0; left:0; right:0; bottom:0; opacity:0.022;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='140' height='140'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='3'/%3E%3C/filter%3E%3Crect width='140' height='140' filter='url(%23n)'/%3E%3C/svg%3E"); }
/* Content and the tiered footer sit above the field; the footer is always black. */
body.access nav.top, body.access .wrap { position:relative; z-index:1; }
/* menu-open must win every scoped stacking demotion (access pages set nav.top to z:1,
   which trapped the fixed z:100 menu overlay beneath page content). v39.1 fix. */
body.menu-open nav.top { z-index:200; }
body.access footer { position:relative; z-index:1; background:#0A0A0A; }

/* ============================================================
   ACCESS ROUTE — workflow components
   Narrow editorial column inside the global 1080 shell. The route's atmosphere
   is carried by the descent field above; the workflow itself stays unboxed —
   no panel, no card, no coloured section background.
   ============================================================ */
.access-col { max-width:700px; }
.access-head { padding:5.5rem 0 2.4rem; }
.access-head h1 { font-size:clamp(1.65rem,3vw,2.25rem); max-width:22ch; margin-bottom:1.2rem; }
.access-head .lede { font-size:1.05rem; line-height:1.6; max-width:54ch; margin-bottom:0; }
.access-step { display:none; }
.access-step.is-active { display:block; }

/* --- fields --- */
.access-col .field-group { margin-bottom:1.8rem; }
.access-col .field-input,
.access-col .field-textarea {
  width:100%; font-family:var(--sans); font-size:16px; line-height:1.5; color:var(--type);
  background:transparent; border:1px solid var(--hair); border-radius:1px;
  padding:0.85rem 0.95rem; }
.access-col .field-textarea { resize:none; min-height:92px; }
.access-col .field-input::placeholder,
.access-col .field-textarea::placeholder { color:var(--grey); }
.access-col .field-input:focus,
.access-col .field-textarea:focus { border-color:var(--faint); outline:none; }
.access-col .field-input:-webkit-autofill {
  -webkit-text-fill-color:var(--type); -webkit-box-shadow:0 0 0 60px var(--black) inset;
  caret-color:var(--type); }
.field-count { float:right; font-size:0.78rem; font-weight:400; color:var(--grey); }

/* --- actions --- */
.access-actions { margin-top:2.2rem; display:flex; align-items:center; gap:1.5rem; flex-wrap:wrap; }
.act-primary { font-size:0.9rem; font-weight:600; color:var(--black); background:var(--type);
  padding:0.85rem 1.6rem; border:none; border-radius:1px; cursor:pointer; font-family:var(--sans);
  min-height:44px; transition:opacity .15s; }
.act-primary:hover { opacity:0.86; }
.act-text { font-size:0.86rem; color:var(--dim); background:none; border:none; cursor:pointer;
  font-family:var(--sans); padding:0.4rem 0; border-bottom:1px solid var(--hair); min-height:44px; }
.act-text:hover { color:var(--type); }
.access-note { font-size:0.8rem; color:var(--grey); line-height:1.7; margin-top:1.4rem; max-width:56ch; }

/* --- resolved record --- */
.record { border-top:1px solid var(--hair); }
.rec-row { border-bottom:1px solid var(--hair); padding:1.15rem 0; }
.rec-head { display:grid; grid-template-columns:1fr auto; gap:0.3rem 1rem; align-items:end; }
.rec-key { grid-column:1/-1; font-size:0.68rem; letter-spacing:0.26em; text-transform:uppercase;
  color:var(--faint); font-weight:600; }
.rec-val { font-size:1.02rem; font-weight:600; letter-spacing:-0.015em; line-height:1.35; }
.rec-edit { background:none; border:none; padding:0.4rem 0; cursor:pointer; font-family:var(--sans);
  font-size:0.8rem; color:var(--grey); border-bottom:1px solid var(--hair); min-height:44px;
  white-space:nowrap; }
.rec-edit:hover { color:var(--type); }
.rec-src { display:flex; align-items:center; gap:0.65rem; margin-top:0.5rem; flex-wrap:wrap; }
.rec-src span { font-size:0.76rem; color:var(--grey); line-height:1.5; }
.rec-corrected { color:var(--dim); }
.conf { width:34px; height:1px; background:var(--hair); position:relative; flex:0 0 auto; }
.conf i { position:absolute; top:0; bottom:0; left:0; background:var(--faint); }

/* inline correction — opens beneath its row, never a modal or separate screen */
.rec-editor { display:none; padding:1.1rem 0 0.2rem 1.2rem; border-left:1px solid var(--hair);
  margin-top:0.9rem; }
.rec-row.is-editing .rec-editor { display:block; }
.rec-row.is-editing .rec-val { color:var(--grey); }
.rec-editor .was { font-size:0.76rem; color:var(--grey); margin-bottom:0.55rem; }
.rec-editor .note { font-size:0.76rem; color:var(--grey); line-height:1.6; margin-top:0.6rem;
  max-width:52ch; }
.rec-editor .row-actions { margin-top:1rem; display:flex; align-items:center; gap:1.2rem; }

/* --- status ledger --- */
.ledger { border-top:1px solid var(--hair); }
.led { display:grid; grid-template-columns:2.4rem 1fr; padding:1.15rem 0;
  border-bottom:1px solid var(--hair); }
.led .n { font-size:0.72rem; color:var(--grey); line-height:1.75; }
.led .t { font-size:1rem; font-weight:600; letter-spacing:-0.015em; }
.led .d { grid-column:2; font-size:0.82rem; color:var(--grey); margin-top:0.35rem; line-height:1.6; }
.led.is-done .t { color:var(--faint); font-weight:400; }
.led.is-current .t { color:var(--type); font-weight:600; }
.led.is-current .d { color:var(--dim); }

/* --- closing signature: the single lime instance in the flow --- */
.access-close { margin-top:4rem; padding-top:2rem; border-top:1px solid var(--hair); }
.access-close p { font-family:var(--serif); font-weight:300; font-size:1.55rem; line-height:1.35;
  color:var(--lime); max-width:22ch; }

@media (max-width:640px) {
  .access-head { padding:2.6rem 0 1.8rem; }
  .access-actions { gap:1rem; }
  .act-primary { width:100%; }
  .rec-val { font-size:0.98rem; }
}


/* ---------- MOBILE HERO TYPOGRAPHY — reference-corrected (Chad, 2026-08-05) ----------
   The homepage mock is desktop; on phones the H1 floor was underpowered and the
   desktop-authored <br> breaks produced a ragged rag. H1 gets a stronger floor;
   hero body copy flows naturally below 640px. */
@media (max-width:640px) {
  .home .hero h1 { font-size:2.55rem; line-height:1.08; letter-spacing:-0.02em; }
  .hero .setup br, .hero .lede br { display:none; }
}


/* ---------- LEADERSHIP TIERS + DIRECTORY (Blackstone-derived, Chad 2026-08-05) ---------- */
.board-mark { color:var(--faint); font-weight:400; margin-left:0.15em; }
.leader-note { font-size:0.78rem; color:var(--faint); margin-top:1.4rem; }
.dir-search { margin:0.4rem 0 1.6rem; position:relative; max-width:34rem; }
.dir-search input { width:100%; background:#12161B; border:1px solid #2A3138;
  color:var(--type); font-family:var(--sans); font-size:0.95rem; padding:0.95rem 3rem 0.95rem 1.1rem; border-radius:0; }
.dir-search-icon { position:absolute; right:1rem; top:50%; transform:translateY(-50%); color:var(--dim); pointer-events:none; }
.dir-search input::placeholder { color:var(--faint); }
.dir-search input:focus { outline:none; border-color:var(--dim); }
.dir-empty { font-size:0.85rem; color:var(--faint); padding:1rem 0; }


/* ---------- DIRECTORY DISCLOSURE (Blackstone-faithful, Chad 2026-08-05) ----------
   Collapsed: name only, white on chassis. Arrow circle at right. Expanded: the arrow
   rotates and the row opens an inline lifted field carrying the record in grey —
   reference behavior; drawer remains available via the Biography link. */
.dir-row { border-bottom:1px solid var(--hair); }
.dir-head { display:flex; align-items:center; justify-content:space-between; gap:1rem; padding:1.15rem 0; }
.dir-name { font-size:1rem; color:var(--type); letter-spacing:-0.01em; }
.dir-toggle { width:44px; height:44px; border-radius:50%; border:1px solid var(--hair);
  background:transparent; color:var(--dim); display:flex; align-items:center; justify-content:center;
  cursor:pointer; flex:0 0 auto; transition:transform 200ms ease, border-color 200ms ease; }
.dir-toggle:hover, .dir-toggle:focus-visible { border-color:var(--dim); outline:none; }
.dir-row.open .dir-toggle { transform:rotate(180deg); border-color:var(--dim); }
.dir-panel { background:#12161B; padding:1.4rem 1.5rem 1.6rem; margin:0 0 1.15rem; }
.dir-panel .dp-k { font-size:0.66rem; letter-spacing:0.22em; text-transform:uppercase;
  color:var(--faint); font-weight:600; margin:0 0 0.3rem; }
.dir-panel .dp-v { font-size:0.92rem; color:var(--dim); margin:0 0 1.15rem; }
.dir-panel .dp-v:last-child { margin-bottom:0; }
.dir-panel a { color:var(--type); text-decoration:underline; text-underline-offset:3px; }
@media (prefers-reduced-motion:reduce){ .dir-toggle { transition:none; } }


/* ---------- DIRECTORY FILTER SHEET (Blackstone-faithful, Chad 2026-08-05: forward-looking) ---------- */
.dir-filter-trigger { display:flex; align-items:center; gap:0.7rem; background:transparent; border:none;
  color:var(--type); font-family:var(--sans); font-size:0.95rem; padding:0.2rem 0 1.4rem; cursor:pointer; }
.dir-filter-trigger:hover span { text-decoration:underline; text-underline-offset:3px; }
.filter-veil { position:fixed; inset:0; background:rgba(4,6,8,0.6); z-index:70; }
.filter-sheet { position:fixed; inset:0; z-index:71; background:#0A0A0A; display:flex; flex-direction:column;
  padding:1.6rem 1.4rem calc(1.2rem + env(safe-area-inset-bottom)); overflow-y:auto; }
@media (min-width:720px){ .filter-sheet { inset:auto 0 0 auto; width:26rem; height:100%;
  border-left:1px solid var(--hair); } }
.fs-head { position:relative; padding-bottom:1.2rem; }
.fs-head h2 { font-family:var(--serif); font-weight:400; font-size:1.7rem; color:var(--type); margin:0 0 0.5rem; }
.fs-count { font-size:0.85rem; color:var(--dim); margin:0; }
.fs-close { position:absolute; top:0; right:0; width:44px; height:44px; border-radius:50%;
  border:1px solid var(--hair); background:transparent; color:var(--type); display:flex;
  align-items:center; justify-content:center; cursor:pointer; }
.fs-close:hover, .fs-close:focus-visible { border-color:var(--dim); outline:none; }
.fs-cats { flex:1; }
.fs-cat { border-bottom:1px solid var(--hair); }
.fs-cat-head { width:100%; display:flex; align-items:center; justify-content:space-between;
  background:transparent; border:none; color:var(--type); font-family:var(--sans); font-size:1.05rem;
  padding:1.35rem 0; cursor:pointer; }
.fs-cat-head svg { transition:transform 200ms ease; color:var(--dim); }
.fs-cat-head.open svg { transform:rotate(90deg); }
.fs-opts { padding:0 0 1.2rem; }
.fs-opt { display:flex; align-items:center; gap:0.8rem; padding:0.55rem 0; cursor:pointer;
  font-size:0.92rem; color:var(--dim); }
.fs-opt input { position:absolute; opacity:0; }
.fs-box { width:18px; height:18px; border:1px solid #2A3138; background:#12161B; flex:0 0 auto; position:relative; }
.fs-opt input:checked + .fs-box { border-color:var(--type); }
.fs-opt input:checked + .fs-box::after { content:""; position:absolute; inset:3px; background:var(--type); }
.fs-opt input:focus-visible + .fs-box { outline:1px solid var(--dim); outline-offset:2px; }
.fs-foot { display:flex; align-items:center; justify-content:space-between; padding-top:1.4rem;
  border-top:1px solid var(--hair); }
.fs-clear { background:transparent; border:none; color:var(--faint); font-family:var(--sans);
  font-size:0.95rem; cursor:pointer; padding:0.6rem 0; }
.fs-clear:not(:disabled) { color:var(--type); }
.fs-clear:disabled { cursor:default; }
.fs-apply { display:flex; align-items:center; gap:0.9rem; background:transparent; border:none;
  color:var(--type); font-family:var(--sans); font-size:1rem; cursor:pointer; padding:0.4rem 0; }
.fs-apply-circle { width:48px; height:48px; border-radius:50%; border:1px solid var(--type);
  display:flex; align-items:center; justify-content:center; }
.fs-apply:hover .fs-apply-circle, .fs-apply:focus-visible .fs-apply-circle { background:var(--type); color:#0A0A0A; outline:none; }
@media (prefers-reduced-motion:reduce){ .fs-cat-head svg { transition:none; } }

.fs-planned { font-style:normal; font-size:0.66rem; letter-spacing:0.18em; text-transform:uppercase;
  color:var(--faint); margin-left:0.6rem; }


/* ---------- GOVERNANCE SECTION TREATMENT (Chad 2026-08-05: governance reads as
   governance, not another employment tier) ---------- */
.section.governance { border-top:1px solid #2A3138; padding-top:2.6rem; margin-top:3.2rem; }
.gov-note { font-family:var(--serif); font-size:1.02rem; color:var(--dim); max-width:34rem;
  margin:0.2rem 0 1.8rem; }


/* ---------- SECTION LABEL EMPHASIS — MOBILE (Chad, 2026-08-12) ----------
   Eyebrow restraint held on desktop but crossed into under-emphasis on
   device: labels nearly vanished against body copy. Caps and tracking
   preserved; size and color lifted so each section gets a real anchor. */
@media (max-width:640px) {
  /* Section anchors — every class whose job is to anchor a content section */
  .eyebrow, .section .label, .bio-eyebrow, .intake-section-label,
  .confidentiality-label, .rec-key, .pf-label {
    font-size:0.76rem; color:var(--dim); letter-spacing:0.24em; }
  /* Architecture lockup — already sized; lifts color only */
  .arch-lockup { color:var(--dim); }
  /* Deliberately untouched: .brandlock (brand lockup, quiet by design),
     .dir-panel keys and .fs-planned (subordinate metadata beside their values),
     .feature-name (already full-strength color). */
}


/* ---------- ARCHITECTURAL SPINE v2 (Chad, 2026-08-12 — visual pass) ----------
   The hierarchy drawn, not typed: one hairline rail, four tiers set as tight name+descriptor
   units (8–12px apart), generous separation between units (34–42px), faint microtype tier
   index as coordinates — not badges — and tick length increasing subtly by tier (restrained
   drafting-language cue). Evaluation layer is a deliberate 2×2 composition via <br>, never a
   wrapped paragraph. Rail draws ahead of each tier reveal. No hover, pulse, or glow once
   settled — the one-shot motion is the entire animation budget. */
.spine-sub { font-family:var(--serif); font-weight:300; font-size:clamp(1.1rem,1.8vw,1.3rem);
  color:var(--dim); margin:0.5rem 0 2rem; }
.spine { position:relative; padding-left:2.1rem; margin-top:0.2rem; }
.spine::before { content:""; position:absolute; left:0; top:0.4rem; bottom:0.4rem;
  width:1px; background:var(--hair); transform-origin:top;
  transform:scaleY(var(--spine-draw,1)); transition:transform 700ms ease; }
.spine-tier { position:relative; padding:0; margin-bottom:38px; }
.spine-tier:last-child { margin-bottom:0; }
.spine-ix { position:absolute; left:-2.1rem; top:0.18rem; width:1.6rem; text-align:right;
  font-family:var(--sans); font-size:0.52rem; letter-spacing:0.06em; color:var(--grey);
  opacity:0.62; } /* drafting coordinates, not peer labels (Chad, 2026-08-12): smaller, quieter */
/* tick length increases subtly by tier — restrained drafting-language progression */
.spine-tier::after { content:""; position:absolute; left:-2.1rem; top:0.62rem;
  height:1px; background:var(--hair); }
.spine-tier:nth-child(1)::after { width:0.55rem; }
.spine-tier:nth-child(2)::after { width:0.72rem; }
.spine-tier:nth-child(3)::after { width:0.9rem; }
.spine-tier:nth-child(4)::after { width:1.08rem; }
.spine-tier:nth-child(4) .spine-name { font-size:0.98rem; line-height:1.2; } /* four names
  in this tier read heavier than the others by default; controlled, not bulky (Chad, 2026-08-12) */
.spine-tier .spine-name { font-family:var(--sans); font-weight:600; font-size:1.05rem;
  color:var(--type); line-height:1.28; margin-top:0; } /* higher specificity: defeats the
  sitewide .section p + p rule (1rem), which otherwise wins on cascade specificity alone */
.spine-tier .spine-desc { font-family:var(--sans); font-weight:400; font-size:0.72rem;
  color:var(--grey); letter-spacing:0.01em; margin-top:10px; } /* one step dimmer than --faint
  (Chad, 2026-08-12): descriptors were competing with names; --grey recedes properly */
/* sequenced reveal — rail leads, tier labels follow just behind its progress */
[data-spine] .spine-tier { opacity:0; transform:translateY(6px);
  transition:opacity 450ms ease, transform 450ms ease; }
[data-spine].spine-on .spine-tier { opacity:1; transform:none; }
[data-spine].spine-on .spine-tier:nth-child(1) { transition-delay:160ms; }
[data-spine].spine-on .spine-tier:nth-child(2) { transition-delay:360ms; }
[data-spine].spine-on .spine-tier:nth-child(3) { transition-delay:560ms; }
[data-spine].spine-on .spine-tier:nth-child(4) { transition-delay:760ms; }
[data-spine]:not(.spine-on)::before { --spine-draw:0; }
@media (prefers-reduced-motion:reduce) {
  [data-spine] .spine-tier { opacity:1; transform:none; transition:none; }
  .spine::before { transform:none; transition:none; }
}


/* Standalone biography pages — mobile paragraph rhythm (Chad, 2026-08-12).
   Scoped to .leadership-bio-page so site-wide paragraph rhythm is untouched.
   Copy, column width, font size, line height, hero, label, footer, and the whole
   desktop layout stay exactly as they are — this is breathing room only.
   Body paragraphs 1.4rem · closing mandate and contact line 1.8rem, because those
   function as the close, not a continuation of the résumé. */
@media (max-width:640px) {
  .leadership-bio-page .body-sections .section > p:not(.label) + p { margin-top:1.4rem; }
  /* The closing mandate lines and the contact line get more air than the résumé body.
     These carry the adjacent-sibling context so they outrank the 1.4rem rule above —
     without it the body rule wins on specificity and the close reads as continuation. */
  .leadership-bio-page .body-sections .section > p:not(.label) + p:nth-last-child(3) { margin-top:1.8rem; }
  .leadership-bio-page .body-sections .section > p:not(.label) + p:last-child { margin-top:1.8rem; }
}

/* ---------- PRODUCT IDENTITY TIER (v38) ----------
   See CHANGE-SPEC-v38-product-identity.md §0 before altering any mark.
   Sized by HEIGHT, not width — aspects run 2.83:1 to 4.70:1.
   Clearspace is inside each asset; do not add padding here. */
.hero .product-mark {
  display: block;
  height: clamp(58px, 7.2vw, 96px);
  width: auto;
  max-width: 100%;
  margin: 0.5rem 0 2.7rem;
}
@media (max-width: 900px) {
  .hero .product-mark { height: clamp(46px, 12vw, 68px); margin: 0.25rem 0 1.9rem; }
}


/* ---------- IP REGISTER (body.ip — patents.html only) ----------
   Chad ruling, Aug 2026: this surface should read as a register maintained by a
   permanent institution, not as a long-form legal disclosure. Three adjustments,
   all scoped to body.ip so no other utility page moves:
   (a) the hero-to-first-section gap is pulled up — on a formal record, tall black
       space reads as content failing to load, not as luxury;
   (b) the register table gains rule strength and a real header row. Authority by
       weight and rule, never by colour — the monochrome canon is unchanged;
   (c) the closing declaration gains size and air above it. It is the page's thesis
       and previously sat at the same weight as the prose leading into it. */
body.ip .hero.utility { padding-bottom:1.6rem; }
body.ip .body-sections { padding-top:0.4rem; }
body.ip .body-sections > .section:first-child { padding-top:calc(2rem + var(--step)); }

/* Registry data is Söhne, explicitly — never left to inherit and never Financier.
   Financier carries the institutional/editorial voice on this page; the register is
   engineered data and stays in the sans. Declared on every cell type so no future
   edit to the shared .rp-fig-table base can silently change what the register is set in. */
body.ip .rp-fig-table,
body.ip .rp-fig-table th[scope="col"],
body.ip .rp-fig-table th[scope="row"],
body.ip .rp-fig-table td,
body.ip .rp-fig-source { font-family:var(--sans); }
body.ip .rp-fig-table { font-size:0.92rem; margin-top:1.1rem;
  font-variant-numeric:tabular-nums lining-nums;
  font-feature-settings:"tnum" 1, "lnum" 1; }
body.ip .rp-fig-table th[scope="col"] {
  font-size:0.71rem; letter-spacing:0.16em; text-transform:uppercase; font-weight:600;
  color:var(--type); padding:0 0.9rem 0.7rem 0; vertical-align:bottom;
  border-bottom:1px solid rgba(237,238,231,0.34); }
body.ip .rp-fig-table th[scope="row"] {
  font-weight:600; color:var(--type); padding:0.85rem 0.9rem 0.85rem 0;
  font-variant-numeric:tabular-nums lining-nums;
  font-feature-settings:"tnum" 1, "lnum" 1;
  border-bottom:1px solid rgba(237,238,231,0.16); }
/* Registry data, not prose: lining tabular figures so application numbers and dates
   align column-wise down the register and read as a record rather than as a sentence. */
body.ip .rp-fig-table td {
  color:#9AA3AF; padding:0.85rem 0.9rem 0.85rem 0;
  font-variant-numeric:tabular-nums lining-nums;
  font-feature-settings:"tnum" 1, "lnum" 1;
  letter-spacing:0.035em;
  border-bottom:1px solid rgba(237,238,231,0.16); }
body.ip .rp-fig-table tr:last-child th[scope="row"],
body.ip .rp-fig-table tr:last-child td { border-bottom:1px solid rgba(237,238,231,0.30); }
body.ip .rp-fig-source { color:var(--faint); margin-top:1.1rem; }

body.ip .section .decl { font-size:clamp(1.85rem,4.1vw,2.55rem); line-height:1.24; }
body.ip .body-sections .section > p.decl { margin-top:2.6rem; }
/* Below 640px the register stops being a table and becomes stacked records — a
   four-column filing register compressed to a phone reads as a squeezed spreadsheet,
   not as an institutional record. The table markup is unchanged: thead is clipped
   rather than removed so the column semantics survive for assistive technology,
   and each cell carries its own label from data-label. Type does not shrink. */
@media (max-width:640px) {
  body.ip .rp-fig-table, body.ip .rp-fig-table tbody,
  body.ip .rp-fig-table tr, body.ip .rp-fig-table th, body.ip .rp-fig-table td { display:block; }
  body.ip .rp-fig-table { font-size:0.95rem; border-top:1px solid rgba(237,238,231,0.34); }
  body.ip .rp-fig-table thead {
    position:absolute; width:1px; height:1px; overflow:hidden;
    clip:rect(0 0 0 0); clip-path:inset(50%); white-space:nowrap; }
  body.ip .rp-fig-table tr {
    padding:1.35rem 0 1.45rem; border-bottom:1px solid rgba(237,238,231,0.16); }
  body.ip .rp-fig-table tr:last-child { border-bottom:1px solid rgba(237,238,231,0.34); }
  /* The family name is the head of its own record, not a heading above a list —
     it binds tighter to the first data line than the data lines do to each other. */
  body.ip .rp-fig-table th[scope="row"] {
    font-size:1.05rem; padding:0 0 0.42rem 0; border:0; letter-spacing:0; }
  body.ip .rp-fig-table td {
    padding:0.28rem 0 0 0; border:0; white-space:normal; color:#9AA3AF; }
  body.ip .rp-fig-table td::before {
    content:attr(data-label) ": "; color:var(--grey);
    font-variant-numeric:normal; letter-spacing:0.02em; }
  /* The desktop last-row rule carries higher specificity (tr:last-child) and was
     drawing a rule under every line of the final stacked record. Cancelled here. */
  body.ip .rp-fig-table tr:last-child th[scope="row"],
  body.ip .rp-fig-table tr:last-child td { border-bottom:0; }
}
}

/* The two portfolio entries are separate records, not one paragraph block. */
body.ip .body-sections > .section:nth-child(2) > p:not(.label) + p { margin-top:2.3rem; }

/* Legal-administrative tail (Patent Notice, Scope, Marks, Stewardship): the IP story
   is complete by the closing declaration. These four carry the same rules and voice
   but not the same air — the page should not keep opening after it has finished. */
body.ip .body-sections > .section:nth-child(n+5) { padding:calc(1.7rem + var(--step)) 0; }
body.ip .body-sections > .section:nth-child(n+5) p:not(.label) { font-size:1.05rem; line-height:1.7; }


/* ---------- BASECAMP HERO MARK (basecamp.html only) ----------
   Chad ruling, Aug 2026: the identity block sits a step below the headline in
   assertiveness — a system identity, not a campaign masthead. ~7% smaller than
   the shared product-mark scale, with added air before the h1 so identity and
   proposition read as two distinct layers. Scoped: other product pages keep the
   shared scale; revisit only if the same reading problem appears on their marks. */
body.basecamp .hero .product-mark { height: clamp(54px, 6.7vw, 89px); margin: 0.5rem 0 3.4rem; }
/* Wordmark-only lockups (SherpaX 5.4:1; Ascent 4.9:1 since the v39 identity refresh)
   run far wider than the glyph-led marks (~3.7:1), so at the shared height they render
   visually larger. One step down (~7%) and more air below, so the headline owns the
   proposition. Chad rulings, Aug 2026 (SherpaX) and Aug 2026 (Ascent refresh). */
body.sherpax .hero .product-mark,
body.ascent .hero .product-mark { height: clamp(50px, 6.2vw, 83px); margin: 0.5rem 0 3.9rem; }
@media (max-width:900px) {
  body.basecamp .hero .product-mark { height: clamp(43px, 11.2vw, 63px); margin: 0.25rem 0 2.4rem; }
  body.sherpax .hero .product-mark,
  body.ascent .hero .product-mark { height: clamp(40px, 10.4vw, 58px); margin: 0.25rem 0 2.8rem; }
}


/* --- SYSTEM PAGE GRID + CLOSING BAND (scoped: routesense, pressureline,
       everest, denali) — v39. No existing rule modified. --- */
body.routesense .body-sections, body.pressureline .body-sections,
body.everest .body-sections, body.denali .body-sections,
body.k2 .body-sections {
  display:grid; grid-template-columns:repeat(3,1fr); gap:0 3.2rem;
  align-items:start;
}
body.routesense .body-sections .section, body.pressureline .body-sections .section,
body.everest .body-sections .section, body.denali .body-sections .section,
body.k2 .body-sections .section {
  border-top:1px solid var(--hair); padding-top:1.15rem; margin-top:2.2rem;
}
body.routesense .body-sections .section p, body.pressureline .body-sections .section p,
body.everest .body-sections .section p, body.denali .body-sections .section p,
body.k2 .body-sections .section p {
  font-size:0.94rem; line-height:1.6;
}
.closeband { border-top:1px solid var(--hair); }
.closeband .wrap {
  display:flex; align-items:center; justify-content:space-between;
  gap:3rem; padding-top:4.5rem; padding-bottom:4.5rem;
}
.closeband .decl {
  font-family:var(--serif); font-weight:300;
  font-size:clamp(1.7rem,3.6vw,2.5rem); line-height:1.3; margin:0;
}
.closeband .decl .sig { color:var(--dim); }
.closeband .decl .lm { color:var(--lime); font-style:italic; font-weight:600; }
.closeband .band-glyph { height:clamp(84px,10vw,128px); width:auto; flex:0 0 auto; }
@media (max-width:900px){
  body.routesense .body-sections, body.pressureline .body-sections,
  body.everest .body-sections, body.denali .body-sections,
body.k2 .body-sections { grid-template-columns:1fr; }
  .closeband .wrap { flex-direction:column; align-items:flex-start; }
}


/* ===== BRAND MARK v45 — P/owderhouse =====
   The stroke marks the threshold between what is and what comes next.

   PRINCIPLE: when colour is available, lime identifies the threshold.
   Exceptions sit underneath the principle, never replace it:
     dark ground   -> ivory P + #CDFF1A stroke   (16.9:1)
     light ground  -> ink P   + #6B8600 stroke   (3.3:1 on ivory; #CDFF1A is 1.08:1 and fails)
     one colour    -> monochrome P/              (engraving, embroidery, fax, single-plate print)
   The stroke never disappears. Never colour the P. Never colour the letters.
   Never set the mark on a lime ground: the stroke ceases to read as the threshold
   and the reduced mark collapses to P.

   Stroke geometry (locked): 16 degrees from vertical; 95 units wide (0.83x the
   P stem); terminals cut halfway to perpendicular; cap height, 10-unit overshoot.
   If the stroke fails against a photograph, fix the environment behind the mark.
   Do not thicken the stroke. */
:root{ --lime-deep:#6B8600; }
.ph-lock{display:inline-block;text-decoration:none;line-height:0;}
.ph-lock .ph-mark{height:19px;width:auto;display:block;}
.ph-lock .ph-ink{fill:var(--type);}
.ph-lock .ph-stroke{fill:var(--lime);}
.ph-lock.on-light .ph-ink{fill:var(--black);}
.ph-lock.on-light .ph-stroke{fill:var(--lime-deep);}
.ph-lock.one-colour .ph-stroke{fill:currentColor;}
.ph-lock.one-colour .ph-ink{fill:currentColor;}
.flock-mark .ph-lock .ph-mark{height:clamp(26px,2.6vw,38px);}
@media(max-width:760px){ .flock-mark .ph-lock .ph-mark{height:23px;} }
@media print{ .ph-lock .ph-ink{fill:#000;} .ph-lock .ph-stroke{fill:#000;} }

/* mobile menu header uses the same lockup */
.pm-head .ph-lock .ph-mark{height:20px;}


/* ===== NAV TERMINAL STROKE (v46.1) =====
   Sanctioned ruling: the stroke may terminate the navigation. Meaning, one
   sentence: "more follows" — the public nav ends at the threshold; what comes
   next is behind Access. It is a link to access.html, never a divider between
   items, and appears at most once per nav. Same geometry family as the mark:
   16 degrees, lime on dark. */
.topnav a.nav-stroke{display:inline-flex;align-items:center;padding:0 .15rem;line-height:1;}
.topnav a.nav-stroke .sl{display:inline-block;width:0.10em;height:0.95em;font-size:1.05rem;
  background:var(--lime);transform:skewX(-16deg);border-radius:0.5px;}
.topnav a.nav-stroke:hover .sl{background:var(--type);}

/* Desktop-only line break: on mobile the text reflows, so the break
   must render as a space instead of collapsing two words together. */
@media (max-width:680px){ br.dbr { display:none; } }
