  :root{
    /* Tells the browser to render its own native UI chrome (dropdown
       popups, scrollbars, etc.) using dark-appropriate system colors
       instead of defaulting to light - without this, a <select>'s open
       option list ignores custom background-color in most browsers and
       renders forced-white, which combined with this theme's light text
       color is illegible. */
    color-scheme: dark;
    --bg:#000000;
    --surface:#0A0D0B;
    --surface-raised: rgba(255,255,255,0.035);
    --tile-bg: rgba(255,255,255,0.035);
    --masthead-bg: rgba(255,255,255,0.035);
    /* Floating overlays (dropdowns, popovers, expanding panels) need to
       fully obscure whatever's behind them for readability - unlike
       --surface-raised/--tile-bg, which are deliberately near-transparent
       for static cards sitting in normal page flow. */
    --overlay-bg: rgba(8,11,9,0.94);
    /* User-provided wallpaper (dark mode only) */
    --hero-wallpaper: url('data:image/jpeg;base64,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');
    --hero-scrim: linear-gradient(100deg, rgba(0,0,0,0.35), rgba(0,0,0,0));
    --line:#243B2C;
    --text:#E6F3EA;
    --text-muted:#6FA083;
    --accent-signal:#01A982;
    --accent-secure:#017F63;
    --accent-critical:#D6685F;
    --accent-violet:#A855F7;
    --accent-amber:#E0A94A;
    --accent-pop:#FF5FA2;
    --accent-electric:#2F6FFF;
    --text-on-accent:#04140A;
    --tint-signal: rgba(1,169,130,0.14);
    --tint-signal-soft: rgba(1,169,130,0.08);
    --tint-signal-strong: rgba(1,169,130,0.22);
    --tint-secure: rgba(1,127,99,0.14);
    --mono: 'IBM Plex Mono', monospace;
    --sans: 'IBM Plex Sans', sans-serif;
    --radius-pill: 999px;
    --radius-card: 20px;
    --radius-input: 14px;
    --radius-nav: 24px;
  }
  html[data-theme="light"]{
    color-scheme: light;
    --bg:#FFFFFF;
    --surface:#F5F9F6;
    --surface-raised: rgba(0,0,0,0.035);
    --tile-bg: #F5F9F6;
    --masthead-bg: rgba(255,255,255,0.65);
    --overlay-bg: rgba(255,255,255,0.94);
    --line:#D2E1D7;
    --text:#132018;
    --text-muted:#5C7266;
    --accent-signal:#01A982;
    --accent-secure:#017F63;
    --accent-critical:#B5443C;
    --accent-violet:#A855F7;
    --accent-amber:#A8710A;
    --accent-pop:#C9186B;
    --accent-electric:#2F6FFF;
    --text-on-accent:#04140A;
    --tint-signal: rgba(1,169,130,0.12);
    --tint-signal-soft: rgba(1,169,130,0.07);
    --tint-signal-strong: rgba(1,169,130,0.20);
    --tint-secure: rgba(1,127,99,0.12);
  }
  *{box-sizing:border-box;}
  /* overflow-x:hidden on the real scrolling element (html, not body) is a
     deliberate safety net, not a fix for a known cause - nothing on this
     site is meant to scroll horizontally at the page level (wide content
     like .data-table already gets its own contained .table-wrap scroll
     region), so this just guarantees that any stray sub-viewport-width
     overflow can never surface as an actual horizontal scrollbar/gap on
     mobile, regardless of what causes it. */
  html{overflow-x:hidden;}
  html,body{margin:0;padding:0;}
  body{
    color:var(--text);
    font-family:var(--sans);
    min-height:100vh;
    line-height:1.5;
    transition:background-color .2s ease, color .2s ease;
  }
  #bgLayer{ position:fixed; inset:0; z-index:-1; pointer-events:none; background:var(--bg); }
  #bgCanvas{ width:100%; height:100%; display:block; }
  *{ transition:background-color .15s ease, border-color .15s ease, color .15s ease; }

  /* --- global rounded-corner treatment for all card/tile/section elements --- */
  .section-tile, .page-intro, .hero-banner, .fw-card, .acc-card, .case-card,
  .industry-card, .region-chip, .site-tile, .start-link, .phase-card,
  .rubric-card, .toc-list, .delta-box, .info-box, .note-box,
  .news-card, .tier-row, .phase-row, .stage-band, .resource-group, .osint-item,
  .footer-social-icon, .region-note, .ot-skip-note, .ot-likely-note,
  .exploit-card, .exploit-score-box, .exploit-safety{
    border-radius:var(--radius-card);
  }
  select, input[type="text"], input[type="file"]{
    border-radius:var(--radius-input);
  }
  .q-badge, .priority-tag, .alpha-chip, .news-cat,
  .footer-social-icon, .icon-badge, .exploit-ransomware-badge, .exploit-sector-chip, .gap-tier{
    border-radius:var(--radius-pill);
  }
  .checkbox{ border-radius:4px; }
  .icon-badge, .footer-social-icon{ border-radius:50%; }

  /* --- anchor reset for nav elements retagged from button/div to <a> per
     ROUTING-FIX-BRIEF.md, so real hrefs support right-click/middle-click
     open-in-new-tab. None of these were ever meant to look like a link -
     each already defines its own complete visual treatment, so the
     browser's default underline/blue/inline just needs suppressing.
     Placed before each class's own rule so a class that already sets its
     own display (e.g. .tab-btn's display:flex) still wins for that
     property specifically. --- */
  .tab-btn, .dropdown-link, .mobile-nav-link, .mobile-nav-sublink,
  .search-result, .site-tile, .cta-btn, .history-link{
    display:block; text-decoration:none; color:inherit;
  }
  /* --- genuine glass (not flat color) for the larger --surface-raised
     containers; small decorative elements and form/table chrome are
     deliberately excluded --- */
  .phase-card, .rubric-card, .fw-card, .industry-card, .region-chip,
  .acc-card, .stage-band, .info-box, .delta-box, .filter-pill, .toc-list{
    backdrop-filter:blur(14px);
    -webkit-backdrop-filter:blur(14px);
  }
  .app{
    max-width:1200px;
    margin-left:auto;
    margin-right:auto;
    padding:20px clamp(24px, 4vw, 64px) 80px;
  }
  /* Floating inset nav (Niva-inspired layout pass) - sized to match
     .hero-banner exactly (same margin/width formula: cancel .app's own
     side padding so both reach .app's full max-width:1200, not just its
     padded content box). A viewport-relative full-bleed version was
     tried and reverted for being wider than the rest of the page - this
     ties the header's width to the same, already-proven-safe formula the
     hero banner uses instead, so the two visually match and it degrades
     the same way on narrow screens (no overflow risk, unlike vw-based
     breakouts). */
  .masthead{
    position:sticky;
    top:16px;
    z-index:10;
    margin-top:8px;
    margin-bottom:16px;
    margin-left:calc(-1 * clamp(24px, 4vw, 64px));
    margin-right:calc(-1 * clamp(24px, 4vw, 64px));
    width:calc(100% + 2 * clamp(24px, 4vw, 64px));
    border:1px solid var(--line);
    border-radius:var(--radius-nav);
    background:var(--masthead-bg);
    backdrop-filter:blur(16px);
    -webkit-backdrop-filter:blur(16px);
    box-shadow:0 8px 24px rgba(0,0,0,0.12);
  }
  .masthead-inner{
    display:flex;
    align-items:center;
    justify-content:space-between;
    gap:20px;
    flex-wrap:wrap;
    padding:14px 24px;
  }
  .masthead-brand{ flex-shrink:0; text-decoration:none; display:flex; align-items:center; gap:10px; }
  .brand-logo{ width:34px; height:34px; display:block; }
  .masthead-right{ display:flex; align-items:center; gap:16px; flex-wrap:wrap; }
  .masthead .eyebrow{
    font-family:var(--mono);
    font-size:10px;
    letter-spacing:0.12em;
    color:var(--text-muted);
    text-transform:uppercase;
  }
  .masthead h1{
    font-family:var(--mono);
    font-size:21px;
    font-weight:600;
    margin:4px 0 0;
    letter-spacing:0.06em;
  }
  /* FOLLOWUP-CORRECTIONS-BRIEF.md §1: CONSOLIDATED-WORK-BRIEF.md's
     "interchange the current colors" was ambiguous about which side was
     which, and its gradient treatment for "implified" is cancelled
     outright now that the original is confirmed precisely (S was
     signal-green, CS was critical-red). The corrected, simpler
     instruction: swap only S and CS's colors (S->critical/red,
     CS->signal/green - the reverse of the original), and put "implified"
     back to its original plain, ungradiented styling. The S/CS swap
     itself already matched this exact assignment from the earlier pass,
     so only .brand-mid's gradient needed reverting here. */
  /* "S" white per WORDMARK-COLOR-BRIEF.md - reuses --text rather than a
     literal #fff so it stays legible in light mode too, where the masthead
     background is white (a literal white "S" would be invisible there).
     --text already reads as white/off-white against the dark masthead
     (#E6F3EA), the same token .brand-mid already uses, so "S" and
     "implified" now render as one continuous color - only "CS" stays
     distinct. */
  .brand-s{ color:var(--text); }
  .brand-mid{ color:var(--text); }
  .brand-cs{ color:var(--accent-signal); }
  .theme-toggle{
    display:flex; align-items:center; flex-shrink:0;
    background:transparent; border:none; padding:0; cursor:pointer;
  }
  .theme-switch-track{
    position:relative; display:block;
    width:58px; height:31px; border-radius:999px;
    background:var(--surface-raised); border:1px solid var(--line);
    transition:background .2s ease, border-color .2s ease;
  }
  .theme-toggle:hover .theme-switch-track{ border-color:var(--accent-signal); }
  .theme-toggle[aria-checked="true"] .theme-switch-track{ background:var(--tint-signal); border-color:var(--accent-signal); }
  .theme-switch-thumb{
    position:absolute; top:1px; left:1px;
    width:27px; height:27px; border-radius:50%;
    background:var(--surface); color:var(--text);
    display:flex; align-items:center; justify-content:center;
    box-shadow:0 1px 3px rgba(0,0,0,0.3);
    transition:transform .2s ease, color .2s ease;
  }
  .theme-toggle[aria-checked="true"] .theme-switch-thumb{ transform:translateX(29px); color:var(--accent-signal); }
  .theme-switch-thumb svg{ width:19px; height:19px; }
  .assessment-serial{
    font-family:var(--mono);
    font-size:11px;
    color:var(--text-muted);
    margin-bottom:20px;
  }
  .layout{
    display:grid;
    grid-template-columns:180px 1fr;
    gap:40px;
  }
  /* ASSESSMENT-REPORT-DEPTH-BRIEF.md §1: the landing and sample-report
     phases render no rail content at all - without this, the grid still
     reserved the 180px + 40px column for an empty div, leaving the panel
     visibly shifted right instead of centered. */
  .rail.rail-empty{ display:none; }
  .layout:has(.rail.rail-empty){ grid-template-columns:minmax(0,1fr); }
  @media (max-width:720px){
    /* minmax(0,1fr), not bare 1fr - same gotcha already fixed for
       .phase4-grid (PR #34): a bare 1fr track's minimum is auto (its
       content's own max-content size), not 0. .report-meta-fields (the
       "Company / firm name" / "Report requested by" fields on the results
       screen) is a flex row with flex-wrap:wrap that DOES correctly wrap
       its two ~220px fields onto separate lines - but that wrapping
       happens after this track is already sized, using the max-content
       (un-wrapped, ~456px) contribution as if nothing could wrap. The
       track - and .rail, which shares this same single column - was
       rendering wider than the viewport as a result. minmax(0,_) makes the
       track actually respect the available width first, letting flex-wrap
       do its job as intended. */
    .layout{grid-template-columns:minmax(0,1fr);}
    .rail{margin-bottom:24px;}
  }

  /* --- tab navigation --- */
  .tabnav{
    display:flex;
    gap:4px;
    align-items:center;
    flex-wrap:wrap;
    transition:filter .2s ease, opacity .2s ease;
  }
  .tab-item{ position:relative; display:flex; }
  .tab-btn{
    font-family:var(--mono);
    font-size:12px;
    letter-spacing:0.05em;
    text-transform:uppercase;
    color:var(--text-muted);
    background:transparent;
    border:none;
    padding:11px 12px;
    cursor:pointer;
    white-space:nowrap;
    display:flex;
    align-items:center;
    gap:6px;
  }
  .tab-btn:hover{ color:var(--accent-signal); background:var(--tint-signal-soft); }
  .tab-btn.active{ border-radius:var(--radius-pill); }
  .tab-btn.active{ background:var(--accent-signal); color:var(--text-on-accent); }
  .tab-caret{ font-size:9px; opacity:0.8; padding:4px; margin:-4px; }
  .tab-btn-icon{ display:flex; align-items:center; }
  .tab-btn-icon svg{ width:17px; height:17px; }
  .tab-dropdown{
    position:absolute;
    top:100%;
    left:0;
    margin-top:8px;
    min-width:190px;
    background:var(--overlay-bg);
    backdrop-filter:blur(16px);
    -webkit-backdrop-filter:blur(16px);
    border:1px solid var(--line);
    border-radius:var(--radius-card);
    overflow:hidden;
    display:flex;
    flex-direction:column;
    opacity:0;
    visibility:hidden;
    transform:translateY(-4px);
    transition:opacity .15s ease, transform .15s ease, visibility .15s ease;
    z-index:20;
    max-height:70vh;
    overflow-y:auto;
  }
  .tab-item.has-dropdown:hover .tab-dropdown,
  .tab-item.has-dropdown:focus-within .tab-dropdown,
  .tab-item.has-dropdown.open .tab-dropdown{
    opacity:1; visibility:visible; transform:translateY(0);
  }
  .dropdown-link{
    font-family:var(--mono);
    font-size:11.5px;
    letter-spacing:0.03em;
    color:var(--text-muted);
    background:transparent;
    border:none;
    border-bottom:1px solid var(--line);
    padding:11px 14px;
    text-align:left;
    cursor:pointer;
  }
  .dropdown-link:last-child{ border-bottom:none; }
  .dropdown-link:hover{ color:var(--accent-signal); background:var(--tint-signal-soft); }
  .dropdown-link.active{ color:var(--accent-signal); }

  /* HEADER-REDESIGN-BRIEF.md: every dropdown now holds real page
     destinations (Home/Framework/Learn/Resources/Insights), not just
     Home's old mega-menu - all of them read better in the sans/14px
     treatment used for body copy than the mono/nav-chrome sizing.
     Assessment's dropdown (Take Assessment / History) is excluded on
     purpose - it's two simple actions, not content navigation, so it
     keeps the original compact mono style. Framework/Learn/Resources/
     Insights render their trigger as a <button> (categoryOnly - see
     renderTabNav()), so targeting that tag catches all four without
     naming each one; Home stays an <a data-tab="home"> since it's also a
     real page. Scoped via :has() so it stays correct as dropdown
     contents change. */
  .tab-item:has(> a.tab-btn[data-tab="home"]) .tab-dropdown .dropdown-link,
  .tab-item:has(> button.tab-btn) .tab-dropdown .dropdown-link{
    font-family:var(--sans);
    font-size:14px;
  }

  /* --- search widget: icon that expands into a floating overlay input
     (absolutely positioned so it never adds flex-row width - expanding it
     must not push the masthead into wrapping), with a floating results
     dropdown below --- */
  .search-widget{ position:relative; display:flex; align-items:center; flex-shrink:0; z-index:5; }
  .search-toggle-btn{
    display:flex; align-items:center; justify-content:center;
    width:36px; height:36px; min-width:0; padding:0; flex-shrink:0; border-radius:50%;
    background:transparent; border:1px solid var(--line); color:var(--text); cursor:pointer;
    transition:border-color .15s ease, color .15s ease;
  }
  .search-toggle-btn:hover{ border-color:var(--accent-signal); color:var(--accent-signal); }
  .search-toggle-btn svg{ width:19px; height:19px; }
  .search-input{
    position:absolute; top:50%; right:40px; transform:translateY(-50%);
    width:0; opacity:0; padding:0; border:none; outline:none; pointer-events:none;
    background:var(--overlay-bg); backdrop-filter:blur(16px); -webkit-backdrop-filter:blur(16px);
    color:var(--text); font-family:var(--sans); font-size:13px;
    transition:width .22s ease, opacity .18s ease, padding .22s ease, border-color .15s ease;
  }
  .search-widget.expanded .search-input{
    width:220px; opacity:1; padding:8px 12px; pointer-events:auto;
    border:1px solid var(--line); border-radius:999px;
  }
  .search-widget.expanded .search-input:focus{ border-color:var(--accent-signal); }
  .search-results{
    position:absolute; top:calc(100% + 8px); right:0; width:280px; max-height:60vh; overflow-y:auto;
    background:var(--overlay-bg); backdrop-filter:blur(16px); -webkit-backdrop-filter:blur(16px);
    border:1px solid var(--line); z-index:20;
    opacity:0; visibility:hidden; transform:translateY(-4px);
    transition:opacity .15s ease, transform .15s ease, visibility .15s ease;
  }
  .search-results.open{ opacity:1; visibility:visible; transform:translateY(0); }
  .search-result{
    display:flex; flex-direction:column; align-items:flex-start; gap:2px; width:100%;
    padding:10px 14px; background:transparent; border:none; border-bottom:1px solid var(--line);
    text-align:left; cursor:pointer; color:var(--text);
  }
  .search-result:last-child{ border-bottom:none; }
  .search-result:hover{ background:var(--tint-signal-soft); }
  .search-result-type{ font-family:var(--mono); font-size:9.5px; letter-spacing:0.06em; text-transform:uppercase; color:var(--accent-signal); }
  .search-result-title{ font-size:13px; }
  .search-empty{ padding:14px; font-size:12.5px; color:var(--text-muted); }

  /* --- mobile nav: hamburger + flat dropdown panel, swapped in for
     .tabnav below the masthead breakpoint --- */
  .nav-hamburger{
    display:none; align-items:center; justify-content:center;
    width:36px; height:36px; min-width:0; padding:0; flex-shrink:0; border-radius:50%;
    background:transparent; border:1px solid var(--line); color:var(--text); cursor:pointer;
    transition:border-color .15s ease, color .15s ease, filter .2s ease, opacity .2s ease;
  }
  .nav-hamburger svg{ width:20px; height:20px; }
  .nav-hamburger:hover{ border-color:var(--accent-signal); color:var(--accent-signal); }

  /* While search is expanded, dim/blur whichever nav control is currently
     visible (.tabnav on wide viewports, .nav-hamburger below the
     breakpoint) instead of letting the expanding input push it around.
     .tabnav is a sibling of .masthead-right now (HEADER-REDESIGN-BRIEF.md -
     moved out so the nav sits between the brand and the actions cluster,
     not bundled inside it), so reaching it needs :has() on their shared
     parent rather than a plain descendant selector. */
  .masthead-inner:has(.masthead-right.search-active) .tabnav,
  .masthead-right.search-active .nav-hamburger{
    filter:blur(3px); opacity:0.4; pointer-events:none;
  }
  .mobile-nav-panel{
    position:absolute; top:100%; left:0; right:0; z-index:15;
    background:var(--overlay-bg); backdrop-filter:blur(16px); -webkit-backdrop-filter:blur(16px);
    border-bottom:1px solid var(--line);
    display:flex; flex-direction:column; padding:8px 0;
    opacity:0; transform:translateY(-6px); transition:opacity .18s ease, transform .18s ease;
    max-height:calc(100vh - 60px); overflow-y:auto;
  }
  .mobile-nav-panel.open{ opacity:1; transform:translateY(0); }
  /* Same type size/weight/spacing as .mobile-nav-heading below (13px bold
     vs. 11px regular used to make Home/Assessment look like a different
     kind of control than Framework/Learn/Resources/Insights, for no
     reason tied to actual page state) - now the two only ever differ by
     color/background, driven purely by whether this is the active page. */
  .mobile-nav-link{
    font-family:var(--mono); font-size:11px; text-transform:uppercase; letter-spacing:0.08em;
    color:var(--text-muted); background:transparent; border:none; border-left:2px solid transparent; text-align:left;
    padding:12px clamp(24px, 4vw, 64px); cursor:pointer;
  }
  .mobile-nav-link.active{ color:var(--text); background:var(--tint-signal-soft); border-left-color:var(--accent-signal); }
  /* A sub-page under this link is active, but not this link's own page -
     a lighter cue than .active (no background/border), just enough to
     show "you're in here" at the collapsed level too. */
  .mobile-nav-link.contains-active{ color:var(--accent-signal); }
  /* categoryOnly tabs (Framework/Learn/Resources/Insights) have no page of
     their own on mobile either - a plain, non-interactive section label
     above their sublinks, not a link to a page that doesn't exist. */
  .mobile-nav-heading{
    font-family:var(--mono); font-size:11px; font-weight:400; text-transform:uppercase; letter-spacing:0.08em;
    color:var(--text-muted); padding:12px clamp(24px, 4vw, 64px) 4px;
  }
  .mobile-nav-heading.contains-active{ color:var(--accent-signal); }
  /* No font:inherit here (removed) - it was silently overriding
     .mobile-nav-heading's own font-family/size/letter-spacing on the
     shared <button class="mobile-nav-heading mobile-nav-toggle">
     element (same specificity, declared later wins), so the category
     headers rendered at the browser's inherited ~16px instead of the
     intended 11px - the real cause of Home/Assessment and the category
     headers visibly not matching in size. .mobile-nav-toggle-caret (the
     other .mobile-nav-toggle usage) has no text of its own to inherit a
     font for - its chevron sets its own font-size already - so nothing
     here relied on the inherited font. */
  .mobile-nav-toggle{
    background:transparent; border:none; width:100%; cursor:pointer;
    display:flex; align-items:center; justify-content:space-between;
  }
  /* Home/Assessment have their own real page AND dropdown sub-pages, so
     unlike the categoryOnly headers above (where the whole button IS the
     toggle), the link and the toggle need to be separate click targets
     sharing one row - unclickable-into-the-wrong-thing, matching how the
     desktop nav gives these same two tabs a real link plus a separate
     caret. */
  .mobile-nav-heading-row{ display:flex; align-items:center; }
  .mobile-nav-link-with-toggle{ flex:1; padding-right:8px; }
  .mobile-nav-toggle-caret{
    width:auto; flex-shrink:0; padding:12px clamp(24px, 4vw, 64px) 12px 12px; justify-content:center;
  }
  .mobile-nav-chevron{ transition:transform .2s ease; font-size:10px; }
  .mobile-nav-toggle[aria-expanded="true"] .mobile-nav-chevron{ transform:rotate(180deg); }
  .mobile-nav-sublist{ max-height:0; overflow:hidden; transition:max-height .25s ease; }
  .mobile-nav-sublist.open{ max-height:400px; }
  .mobile-nav-sublink{
    font-family:var(--mono); font-size:13px; color:var(--text-muted);
    background:transparent; border:none; text-align:left;
    padding:9px clamp(24px, 4vw, 64px) 9px calc(clamp(24px, 4vw, 64px) + 16px); cursor:pointer;
  }
  .mobile-nav-sublink.active{ color:var(--accent-signal); }
  .mobile-nav-link:hover, .mobile-nav-sublink:hover{ background:var(--tint-signal-soft); color:var(--accent-signal); }

  /* Full nav (6 tabs + search + theme toggle) needs well under 1152px
     alongside the brand lockup at default padding (measured with real
     margin to spare after the tab/gap tightening below). .masthead's
     width formula matches .hero-banner's (see the comment on .masthead
     above), which tops out at .app's own max-width:1200 - so once the
     viewport is wide enough to show the tabnav at all, the header's
     available content width is pinned at 1200 - 2*24 padding = 1152px
     and never shrinks as the window grows further, so this cutoff
     doesn't need to track viewport width past this point. */
  @media (max-width:1200px){
    .tabnav{ display:none; }
    .nav-hamburger{ display:flex; }
    .search-widget.expanded .search-input{ width:150px; }
  }
  /* Even with the nav collapsed to a hamburger, the brand lockup plus
     search+hamburger+theme-toggle still doesn't fit a phone-width screen
     at the desktop gap/padding/logo sizing - compact all of it together
     rather than relying on flex-wrap to paper over the gap. */
  @media (max-width:480px){
    .masthead-inner{ gap:10px; padding:14px 16px; }
    .masthead-brand{ gap:6px; }
    .brand-logo{ width:26px; height:26px; }
    .masthead h1{ font-size:15px; }
    .masthead-right{ gap:8px; }
    .masthead{ margin-top:6px; border-radius:16px; }
  }
  /* The 480px compaction above still doesn't leave enough room on the
     smallest real phone widths (iPhone SE 1st-gen at 320px, and similar
     ~320-340px Android devices) once the icon/toggle sizes were bumped up
     for visibility - brand + search + theme-toggle + hamburger together
     need ~299px at that sizing, more than a 320px screen has after
     padding. Trim just the right-side controls a bit further here rather
     than shrinking them for the much larger, unaffected 360px+ population. */
  @media (max-width:340px){
    .masthead-inner{ padding-left:10px; padding-right:10px; }
    .masthead h1{ font-size:14px; }
    .masthead-right{ gap:6px; }
    .search-toggle-btn, .nav-hamburger{ width:32px; height:32px; }
    .search-toggle-btn svg{ width:17px; height:17px; }
    .nav-hamburger svg{ width:18px; height:18px; }
    .theme-switch-track{ width:46px; height:25px; }
    .theme-switch-thumb{ width:21px; height:21px; }
    .theme-toggle[aria-checked="true"] .theme-switch-thumb{ transform:translateX(21px); }
    .theme-switch-thumb svg{ width:14px; height:14px; }
  }

  /* --- rail / schematic trace --- */
  .rail{
    position:relative;
    padding-left:4px;
  }
  .rail-line{
    position:absolute;
    left:11px;
    top:10px;
    bottom:10px;
    width:1px;
    background:var(--line);
  }
  .node{
    position:relative;
    display:flex;
    align-items:center;
    gap:12px;
    padding:14px 0;
    cursor:default;
  }
  .node .dot{
    width:9px;
    height:9px;
    border:1.5px solid var(--text-muted);
    background:var(--bg);
    transform:rotate(45deg);
    flex-shrink:0;
    z-index:1;
    transition:all .3s ease;
  }
  .node.done .dot{ background:var(--accent-secure); border-color:var(--accent-secure); }
  .node.active .dot{ background:var(--accent-signal); border-color:var(--accent-signal); box-shadow:0 0 0 4px var(--tint-signal-strong); }
  .node .label{
    font-family:var(--mono);
    font-size:11px;
    letter-spacing:0.06em;
    color:var(--text-muted);
    text-transform:uppercase;
  }
  .node.active .label{ color:var(--text); }
  .node.done .label{ color:var(--text-muted); }
  /* Current-step readout for the horizontal mobile rail below - hidden here
     since the desktop vertical rail already shows every label in place. */
  .rail-active-label{ display:none; }
  /* Below 720px .rail turns into a horizontal dot trail (see .layout's own
     media query above) - with 8-15+ steps depending on which profile
     screens are visible (§5.2 branching), a per-dot text label has nowhere
     near enough room and was previously forcing the whole rail (and page)
     wider than the viewport. Dots alone, evenly spaced by flex:1, always
     fit; .rail-active-label carries the one label that actually matters at
     a glance - the current step - as its own centered line below the
     trail, so nothing is lost, it just isn't all shown at once anymore.
     .rail-active-label is a plain block sibling AFTER .rail-dots rather
     than a flex:1 0 100% item inside the same flex row - with flex-basis:0
     on every .node, their combined hypothetical size is ~0, so the wrap
     algorithm judged the row (nodes + a 100%-basis label) as never
     exceeding the container and never actually wrapped, rendering the
     label on top of the dots instead of below them. Normal block flow
     doesn't have that edge case. */
  @media (max-width:720px){
    .rail-line{ left:0; right:0; top:14px; bottom:auto; width:auto; height:1px; }
    .rail-dots{ display:flex; flex-direction:row; }
    .node{ flex:1 1 0; min-width:0; gap:0; padding:8px 0; justify-content:center; }
    .node .label{ display:none; }
    .rail-active-label{
      display:block; width:100%;
      margin-top:8px; text-align:center; overflow-wrap:break-word;
    }
  }

  /* --- main panel --- */
  .panel{
    background:var(--tile-bg);
    backdrop-filter:blur(14px);
    -webkit-backdrop-filter:blur(14px);
    border:1px solid var(--line);
    border-radius:var(--radius-card);
    padding:32px;
    min-height:420px;
    display:flex;
    flex-direction:column;
  }
  .step-eyebrow{
    font-family:var(--mono);
    font-size:11px;
    color:var(--accent-signal);
    letter-spacing:0.08em;
    text-transform:uppercase;
    margin-bottom:8px;
  }
  .step-title{
    font-size:24px;
    font-weight:600;
    margin:0 0 6px;
  }
  .step-sub{
    color:var(--text-muted);
    font-size:14px;
    margin:0 0 28px;
  }
  .question{
    margin-bottom:28px;
  }
  .question:last-child{margin-bottom:0;}
  .question p{
    font-size:15px;
    margin:0 0 12px;
    font-weight:500;
  }
  .options{
    display:flex;
    flex-direction:column;
    gap:8px;
  }
  .option{
    display:flex;
    align-items:center;
    gap:12px;
    border:1px solid var(--line);
    background:var(--surface-raised);
    padding:12px 14px;
    cursor:pointer;
    font-size:14px;
    transition:border-color .15s ease, background .15s ease;
  }
  .option:hover{ border-color:var(--accent-signal); }
  .option.selected{
    border-color:var(--accent-secure);
    background:var(--tint-secure);
  }
  .option .radio{
    width:14px;height:14px;border:1.5px solid var(--text-muted);border-radius:50%;
    flex-shrink:0; position:relative;
  }
  .option.selected .radio{ border-color:var(--accent-secure); }
  .option.selected .radio::after{
    content:''; position:absolute; inset:2.5px; background:var(--accent-secure); border-radius:50%;
  }
  .nav{
    display:flex;
    justify-content:space-between;
    flex-wrap:wrap;
    gap:12px;
    margin-top:32px;
    padding-top:24px;
    border-top:1px solid var(--line);
  }
  button{
    font-family:var(--sans);
    font-size:14px;
    font-weight:600;
    padding:11px 22px;
    border:1px solid var(--line);
    background:transparent;
    color:var(--text);
    cursor:pointer;
    transition:all .15s ease;
  }
  button.primary{
    background:var(--accent-signal);
    border-color:var(--accent-signal);
    color:var(--text-on-accent);
  }
  button.primary:hover{ filter:brightness(1.08); }
  button:not(.primary):hover{ border-color:var(--accent-signal); }
  button:disabled{ opacity:0.35; cursor:not-allowed; }
  /* #viewHistoryBtn sits next to two real <button> siblings that get their
     entire look from the bare button{} rule above - it was retagged to <a>
     per ROUTING-FIX-BRIEF.md so it carries a real href, so it needs the
     same declarations explicitly since button{} can't match it anymore. */
  a#viewHistoryBtn{
    font-family:var(--sans); font-size:14px; font-weight:600; padding:11px 22px;
    border:1px solid var(--line); background:transparent; color:var(--text);
    cursor:pointer; transition:all .15s ease; text-decoration:none; display:inline-block;
  }
  a#viewHistoryBtn:hover{ border-color:var(--accent-signal); }

  /* --- results --- */
  .results{ display:none; }
  .results.show{ display:block; }
  /* ASSESSMENT-REPORT-DEPTH-BRIEF.md §9: a one-time, prominent legend
     clarifying score direction - not repeated next to every bar. */
  .score-direction-legend{ font-size:13px; color:var(--text-muted); background:var(--surface-raised); border:1px solid var(--line); border-radius:8px; padding:10px 14px; margin:0 0 20px; }
  .score-direction-legend b{ color:var(--text); }
  .gauge-row{
    display:grid;
    grid-template-columns:200px 1fr;
    gap:36px;
    align-items:center;
    margin-bottom:36px;
  }
  .gauge{
    width:180px;height:180px;border-radius:50%;
    display:flex; align-items:center; justify-content:center;
    position:relative;
  }
  .gauge::before{
    content:'';
    position:absolute; inset:14px;
    background:var(--surface);
    border-radius:50%;
  }
  .gauge-inner{
    position:relative; z-index:1; text-align:center;
  }
  .gauge-inner .pct{
    font-family:var(--mono); font-size:32px; font-weight:600;
  }
  .gauge-inner .verdict{
    font-family:var(--mono); font-size:10px; letter-spacing:0.08em;
    color:var(--text-muted); text-transform:uppercase; margin-top:4px;
  }
  .func-bars{ display:flex; flex-direction:column; gap:10px; }
  .func-bar-row{ display:grid; grid-template-columns:90px 1fr 40px; align-items:center; gap:12px; font-size:12px; }
  .func-bar-row .fname{ font-family:var(--mono); color:var(--text-muted); letter-spacing:0.04em; }
  .func-bar-track{ height:6px; background:var(--surface-raised); position:relative; }
  .func-bar-fill{ height:100%; transition:width .6s ease; }
  .func-bar-row .fpct{ font-family:var(--mono); text-align:right; color:var(--text-muted); }

  /* .gauge-row's fixed 200px gauge column + func-bars' own min-content
     (func-bar-row's fixed 90px/40px columns put a ~154px floor under the
     1fr column) don't fit together once the available width drops below
     ~200+36+154=390px plus card padding - confirmed via live testing to
     overflow starting around 420px wide. Stack to one column below 480px
     (an existing breakpoint used elsewhere in this file) so the gauge and
     func-bars each get the full row width instead of splitting it. */
  @media (max-width:480px){
    .gauge-row{ grid-template-columns:minmax(0,1fr); }
  }

  .flags{ margin-bottom:28px; }
  .flags h3, .priorities h3, .snapshot h3{
    font-family:var(--mono); font-size:12px; letter-spacing:0.08em; text-transform:uppercase;
    color:var(--text-muted); margin:0 0 14px; font-weight:500;
  }
  .flag-item{
    border-left:2px solid var(--accent-critical);
    background:rgba(214,104,95,0.06);
    padding:12px 16px; margin-bottom:10px; font-size:13.5px;
  }
  .flag-item b{ color:var(--accent-critical); }
  .vendor-note-item{
    border-left:2px solid var(--accent-signal);
    background:var(--tint-signal-soft);
    padding:12px 16px; margin-bottom:10px; font-size:13.5px;
  }
  .vendor-note-item b{ color:var(--accent-signal); }
  .priority-item{
    display:flex; gap:14px; padding:14px 0; border-bottom:1px solid var(--line);
    font-size:13.5px;
  }
  .priority-item:last-child{ border-bottom:none; }
  .priority-rank{
    font-family:var(--mono); color:var(--accent-signal); font-weight:600; flex-shrink:0; width:20px;
  }
  /* Control-impact tier on each ranked gap (src/data/control-weights.js) -
     same bordered mono pill as .exploit-ransomware-badge; red/amber are the
     page's existing severity colors, standard stays neutral. */
  .gap-tier{
    display:inline-block; font-family:var(--mono); font-size:9.5px; letter-spacing:0.05em; text-transform:uppercase;
    padding:1px 7px; margin-left:4px; vertical-align:1px; max-width:100%;
    color:var(--text-muted); border:1px solid var(--line);
  }
  .gap-tier-3{ color:var(--accent-critical); border-color:var(--accent-critical); }
  .gap-tier-2{ color:var(--accent-amber); border-color:var(--accent-amber); }
  /* Full gap register - one row per gap inside each area's accordion. These
     accordions have no icon badge, so the body doesn't need .acc-body's
     74px icon-aligned left inset - on a phone that inset alone would eat
     most of the row. */
  .gap-register .acc-body{ padding:4px 18px 14px; }
  @media (max-width:480px){
    .gap-register .acc-body{ padding:4px 12px 12px; }
    .gap-row{ gap:10px; }
  }
  .gap-row{
    display:flex; gap:14px; padding:12px 0; border-bottom:1px solid var(--line); font-size:13.5px;
  }
  .gap-row:last-child{ border-bottom:none; }
  .gap-row-body{ min-width:0; overflow-wrap:break-word; }
  .gap-row-answer{ font-size:12.5px; color:var(--text-muted); margin-top:4px; }
  .gap-row-fix{ font-size:12.5px; margin-top:6px; line-height:1.55; }
  .gap-row-fix b{ color:var(--accent-signal); font-weight:600; }
  .note-box{
    margin-top:32px; padding:16px 18px; border:1px dashed var(--line);
    font-size:12.5px; color:var(--text-muted); font-family:var(--mono); line-height:1.6;
  }
  .note-box b{ color:var(--text); }

  /* --- results panel: AI-Enhanced Insights (AI-RAG-HYBRID-BRIEF.md) - opt-in
     second pass alongside the deterministic report above. .ai-badge follows
     the same bordered-pill pattern as .exploit-ransomware-badge, in
     --accent-violet specifically so it reads as distinct from every other
     semantic color already in use (green/amber/red/signal are all spoken
     for elsewhere on the results page) - the whole point is that a reader
     can tell at a glance which content came from the tested rules engine
     versus the live-generated layer. --- */
  .ai-insights-section{ margin-top:28px; padding-top:24px; border-top:1px solid var(--line); }
  .ai-insights-intro{ display:flex; justify-content:space-between; align-items:flex-start; gap:20px; flex-wrap:wrap; margin-bottom:16px; }
  .ai-insights-intro h3{ font-size:15px; margin:0 0 6px; display:flex; align-items:center; gap:10px; flex-wrap:wrap; }
  .ai-insights-intro .body-text{ margin:0; }
  .ai-badge{ font-family:var(--mono); font-size:9.5px; letter-spacing:0.05em; text-transform:uppercase; color:var(--accent-violet); border:1px solid var(--accent-violet); padding:2px 8px; }
  .ai-insights-section h4{
    font-family:var(--mono); font-size:12px; letter-spacing:0.08em; text-transform:uppercase;
    color:var(--text-muted); margin:18px 0 10px; font-weight:500;
  }
  .ai-insights-section h4:first-child{ margin-top:0; }
  .ai-source{ font-size:12px; color:var(--text-muted); }

  /* --- scope screen --- */
  .industry-grid{
    display:grid;
    grid-template-columns:1fr 1fr;
    gap:8px;
    margin-bottom:32px;
  }
  @media (max-width:560px){ .industry-grid{ grid-template-columns:1fr; } }
  .industry-card{
    border:1px solid var(--line);
    background:var(--surface-raised);
    padding:12px 14px;
    font-size:13.5px;
    cursor:pointer;
    transition:border-color .15s ease, background .15s ease;
  }
  .industry-card:hover{ border-color:var(--accent-signal); }
  .industry-card.selected{
    border-color:var(--accent-signal);
    background:var(--tint-signal);
  }
  .fw-section-label{
    font-family:var(--mono); font-size:12px; letter-spacing:0.08em; text-transform:uppercase;
    color:var(--text-muted); margin:0 0 12px; font-weight:500;
  }
  .fw-baseline{
    border:1px solid var(--line);
    background:var(--surface-raised);
    padding:12px 14px;
    font-size:13px;
    color:var(--text-muted);
    margin-bottom:16px;
  }
  .fw-baseline b{ color:var(--text); }
  .fw-card{
    display:flex;
    justify-content:space-between;
    align-items:flex-start;
    gap:12px;
    border:1px solid var(--line);
    background:var(--surface-raised);
    padding:14px 16px;
    margin-bottom:8px;
    cursor:pointer;
    transition:border-color .15s ease, background .15s ease;
  }
  .fw-card:hover{ border-color:var(--accent-signal); }
  .fw-card.selected{
    border-color:var(--accent-secure);
    background:var(--tint-secure);
  }
  .fw-card .fw-name{ font-weight:600; font-size:14px; margin-bottom:4px; }
  .fw-card .fw-desc{ font-size:12.5px; color:var(--text-muted); }
  .fw-card .checkbox{
    width:16px; height:16px; border:1.5px solid var(--text-muted); flex-shrink:0; position:relative; margin-top:2px;
  }
  .fw-card.selected .checkbox{ border-color:var(--accent-secure); background:var(--accent-secure); }
  .fw-card.selected .checkbox::after{
    content:'✓'; position:absolute; inset:0; display:flex; align-items:center; justify-content:center;
    font-size:11px; color:var(--text-on-accent); font-weight:700;
  }
  .fw-badge{
    display:inline-block; font-family:var(--mono); font-size:9.5px; letter-spacing:0.05em;
    text-transform:uppercase; color:var(--accent-signal); border:1px solid var(--accent-signal);
    padding:2px 6px; margin-left:8px; vertical-align:middle;
  }
  .priority-tag{
    display:inline-block; font-family:var(--mono); font-size:9.5px; color:var(--accent-signal); letter-spacing:0.04em; text-transform:uppercase;
    border:1px solid var(--accent-signal); padding:2px 7px; margin:4px 6px 0 0; background:var(--tint-signal-soft);
  }
  .fw-card.fw-top-priority{ border-color:var(--accent-signal); background:var(--tint-signal-soft); }
  .q-badge{
    display:inline-block; font-family:var(--mono); font-size:9px; letter-spacing:0.05em;
    text-transform:uppercase; color:var(--text-muted); border:1px solid var(--line);
    padding:2px 5px; margin-left:8px; vertical-align:middle;
  }
  .scope-hint{ font-size:12.5px; color:var(--text-muted); margin:-8px 0 20px; }

  .region-grid{ display:grid; grid-template-columns:repeat(auto-fill, minmax(180px, 1fr)); gap:8px; margin:14px 0 8px; }
  .region-chip{
    display:flex; align-items:center; gap:10px; padding:11px 14px; border:1px solid var(--line);
    background:var(--surface-raised); cursor:pointer; font-size:13px; transition:border-color .15s ease, background .15s ease;
  }
  .region-chip:hover{ border-color:var(--accent-signal); }
  .region-chip.selected{ border-color:var(--accent-secure); background:var(--tint-secure); }
  .region-chip .checkbox{ flex-shrink:0; width:16px; height:16px; border:1.5px solid var(--text-muted); position:relative; }
  .region-chip.selected .checkbox{ border-color:var(--accent-secure); background:var(--accent-secure); }
  .region-chip.selected .checkbox::after{
    content:'✓'; position:absolute; inset:0; display:flex; align-items:center; justify-content:center;
    font-size:11px; color:var(--text-on-accent); font-weight:700;
  }
  .region-note{
    font-size:12.5px; color:var(--text-muted); margin:8px 0 0; padding:10px 14px;
    border-left:2px solid var(--accent-secure); background:var(--tint-secure); line-height:1.6;
  }
  .region-note b{ color:var(--text); }

  /* --- pre-assessment fields --- */
  .field{ margin-bottom:20px; }
  .field label{ display:block; font-size:13.5px; font-weight:500; margin-bottom:8px; }
  .opt-tag{ font-family:var(--mono); font-size:9.5px; color:var(--text-muted); font-weight:400; text-transform:uppercase; letter-spacing:0.05em; }
  .field select, .field input[type=text]{
    width:100%; background:var(--surface-raised); border:1px solid var(--line); color:var(--text);
    font-family:var(--sans); font-size:14px; padding:11px 12px;
  }
  /* color-scheme (set at :root) tells the browser to use its own dark
     native chrome for the popup list, but that's a hint, not a guarantee -
     some browsers/versions still ignore it for the actual <option> rows.
     Setting an explicit background/color directly on <option> is layered
     on top for exactly those cases; harmless where color-scheme already
     has it covered, since the two agree. */
  .field select option{ background-color:var(--bg); color:var(--text); }
  .field select:focus, .field input[type=text]:focus{ outline:none; border-color:var(--accent-secure); }
  .field input[type=text]::placeholder{ color:var(--text-muted); }

  /* --- results page: optional report-header metadata (company/requester) --- */
  .report-meta-fields{ display:flex; gap:16px; flex-wrap:wrap; margin:20px 0 28px; }
  .report-meta-fields .field{ flex:1 1 220px; margin-bottom:0; }

  /* --- infrastructure snapshot --- */
  .snapshot{ margin-bottom:28px; }
  .snapshot-row{ display:grid; grid-template-columns:180px 1fr; gap:12px; padding:8px 0; border-bottom:1px solid var(--line); font-size:13px; }
  .snapshot-row:last-child{ border-bottom:none; }
  .snapshot-row .skey{ font-family:var(--mono); color:var(--text-muted); letter-spacing:0.03em; }

  .info-box{
    border:1px solid var(--line); background:var(--surface-raised); padding:14px 16px;
    font-size:13px; color:var(--text-muted); margin-bottom:22px; line-height:1.6;
  }
  .info-box b{ color:var(--text); }
  .ot-skip-note{
    font-size:12.5px; color:var(--text-muted); margin:-16px 0 24px; padding:12px 14px;
    border:1px dashed var(--line); line-height:1.6;
  }
  .ot-skip-note b{ color:var(--text); }
  .ot-likely-note{
    font-size:12.5px; color:var(--text-muted); margin:-16px 0 24px; padding:12px 14px;
    border-left:2px solid var(--accent-signal); background:var(--tint-signal-soft); line-height:1.6;
  }
  .ot-likely-note b{ color:var(--text); }
  .ot-override-label{
    display:flex; align-items:center; gap:8px; margin-top:10px; cursor:pointer;
    font-family:var(--mono); font-size:11px; letter-spacing:0.03em; color:var(--accent-secure);
  }
  .ot-override-label input{ cursor:pointer; }

  .history-link{ font-size:12.5px; color:var(--accent-secure); margin:-16px 0 24px; cursor:pointer; }
  .history-list{ margin:20px 0 8px; }
  .history-row{ display:flex; justify-content:space-between; align-items:center; flex-wrap:wrap; gap:8px 14px; padding:10px 0; border-bottom:1px solid var(--line); font-size:13.5px; }
  .history-row:last-child{ border-bottom:none; }
  .history-row-actions{ display:flex; align-items:center; gap:14px; }
  .history-score{ font-family:var(--mono); color:var(--accent-secure); font-weight:600; }
  .history-view-btn{ padding:6px 12px; font-size:12.5px; }
  .trend-chart{ width:100%; height:auto; margin-bottom:24px; display:block; }
  .delta-box{ border:1px solid var(--line); background:var(--surface-raised); padding:16px 18px; margin-bottom:28px; }
  .delta-box h3{ font-family:var(--mono); font-size:12px; letter-spacing:0.08em; text-transform:uppercase; color:var(--text-muted); margin:0 0 10px; font-weight:500; }
  .delta-score{ font-family:var(--mono); font-size:20px; font-weight:600; margin-bottom:8px; }
  .delta-score.up{ color:var(--accent-secure); }
  .delta-score.down{ color:var(--accent-critical); }
  .delta-resolved{ font-size:13px; color:var(--accent-secure); margin-bottom:4px; }
  .delta-resolved b{ color:var(--accent-secure); }
  .delta-new{ font-size:13px; color:var(--accent-signal); }
  .delta-new b{ color:var(--accent-signal); }

  /* --- content pages (Home / Methodology / Maturity / News) --- */
  .page{ display:flex; flex-direction:column; gap:36px; }
  .page-intro{ background:var(--tile-bg); backdrop-filter:blur(14px); -webkit-backdrop-filter:blur(14px); border:1px solid var(--line); padding:36px 40px; }
  @media (max-width:720px){ .page-intro{ padding:22px 20px; } }
  .page-intro-row{ display:flex; align-items:center; justify-content:space-between; gap:28px; flex-wrap:wrap; }
  .page-intro-row .page-intro-text{ flex:1; min-width:260px; }

  /* --- "stamp" badges: original text/icon marks referencing frameworks this
     site draws on, not reproductions of any organization's real logo --- */
  .stamp-row{ display:flex; flex-wrap:wrap; justify-content:center; gap:12px; flex-shrink:0; max-width:100%; }
  .stamp{ position:relative; width:74px; height:74px; border-radius:50%; border:1.6px solid var(--stamp-color); display:flex; flex-direction:column; align-items:center; justify-content:center; gap:2px; padding:6px; box-sizing:border-box; text-align:center; }
  .stamp-ring{ position:absolute; inset:5px; border:1px dashed var(--stamp-color); border-radius:50%; opacity:0.45; }
  .stamp-icon{ position:relative; z-index:1; width:16px; height:16px; color:var(--stamp-color); display:flex; }
  .stamp-icon svg{ width:100%; height:100%; }
  .stamp-label{ position:relative; z-index:1; font-family:var(--mono); font-size:7.5px; line-height:1.15; letter-spacing:0.01em; text-transform:uppercase; color:var(--stamp-color); }
  @media (max-width:480px){ .stamp{ width:64px; height:64px; } }
  /* min-width:0 - .page is a column flex container (see .page below), so
     .section-tile is a flex item and gets an implicit min-width:auto by
     default. A descendant that needs real width (e.g. .data-table's own
     min-width:640px inside .table-wrap) would otherwise force the tile,
     and the whole page, wider than the viewport on mobile instead of
     scrolling within .table-wrap's own overflow-x:auto as intended -
     the same class of bug already fixed for grid tracks elsewhere in
     this file (bare 1fr / .phase4-grid), just via flexbox's own version
     of the same implicit-minimum-size default. */
  .section-tile{ background:var(--tile-bg); backdrop-filter:blur(14px); -webkit-backdrop-filter:blur(14px); border:1px solid var(--line); padding:36px 40px; min-width:0; }
  @media (max-width:720px){ .section-tile{ padding:22px 20px; } }
  .section-tile .section-h:first-child{ margin-top:0; }
  /* .page is a flex container, and its .section-tile children have
     z-index:auto - a z-indexed overlay nested inside one can't escape to
     paint above the NEXT sibling .section-tile (a flex item with
     z-index:auto still paints in document order relative to its siblings,
     regardless of a descendant's own z-index). Elevating the container
     itself, only while it holds an open overlay, fixes that. */
  .section-tile.has-open-overlay{ position:relative; z-index:6; }

  /* --- scroll-reveal + tab transitions --- */
  .section-tile, .page-intro{
    opacity:0;
    transform:translateY(18px);
    transition:opacity .55s ease, transform .55s ease;
  }
  .section-tile.revealed, .page-intro.revealed{
    opacity:1;
    transform:translateY(0);
  }
  #tabContent{ transition:opacity .18s ease, transform .18s ease; }
  #tabContent.tab-fade{ opacity:0; transform:translateY(10px); }
  @media (prefers-reduced-motion: reduce){
    .section-tile, .page-intro{ opacity:1; transform:none; transition:none; }
    #tabContent{ transition:none; }
  }

  .page-eyebrow{
    font-family:var(--mono); font-size:11px; color:var(--accent-signal);
    letter-spacing:0.08em; text-transform:uppercase; margin-bottom:10px;
  }
  /* clamp(), not a flat 54px - on narrow mobile widths, a single long
     unbroken word in a title (e.g. "SimplifiedCS", "Methodology") could
     overflow past the card's edge instead of wrapping, since there's no
     space to break on. overflow-wrap is a safety net for the same case;
     the clamp is the real fix, since it keeps a comfortable margin
     instead of a font size that only barely happens to fit. */
  .page h2.page-title{ font-size:clamp(32px, 9vw, 54px); font-weight:700; margin:0 0 14px; line-height:1.1; overflow-wrap:break-word; word-break:break-word; }
  .page .page-lede{ color:var(--text-muted); font-size:15.5px; max-width:640px; margin:0 0 32px; line-height:1.6; }
  .page-lede + .page-lede{ margin-top:-16px; }
  /* METRICS-ANIMATION-ABOUT-FIXES-BRIEF.md §3, broadened per
     ABOUT-PAGE-ALIGNMENT-BRIEF.md: .page-lede/.body-text already cap their
     own width, but never center themselves - on a page whose content is
     almost entirely paragraphs and a short list (About), that left the
     reading column pinned to the left edge with a large empty gap on the
     right. Originally applied only to the page's two lede blocks, which
     left the technical-highlights list and closing section flush-left/
     full-width by contrast - genuinely inconsistent alignment down the
     same page. Now wraps every text block on the page (see
     renderAboutTab()), without changing .page-lede/.body-text's own
     shared rules, still used un-centered everywhere else on the site. */
  .about-narrative{ max-width:640px; margin:0 auto; }
  .page h3.section-h{ font-size:24px; font-weight:600; margin:36px 0 14px; }
  .page h3.section-h:first-of-type{ margin-top:0; }
  .page p.body-text{ font-size:14px; color:var(--text-muted); line-height:1.7; max-width:680px; margin:0 0 14px; }
  .inline-link{ color:var(--accent-signal); cursor:pointer; text-decoration:underline; text-underline-offset:2px; }
  .inline-link:hover{ color:var(--accent-secure); }
  .page p.body-text b{ color:var(--text); }

  .cta-row{ display:flex; gap:12px; margin-top:28px; flex-wrap:wrap; }
  .cta-btn{
    font-family:var(--sans); font-size:14px; font-weight:600; padding:13px 26px;
    border:1px solid var(--accent-signal); background:var(--accent-signal); color:var(--text-on-accent); cursor:pointer;
    border-radius:var(--radius-pill);
  }
  .cta-btn:hover{ filter:brightness(1.08); }
  .cta-btn.secondary{ background:transparent; color:var(--text); border-color:var(--line); }
  .cta-btn.secondary:hover{ border-color:var(--accent-signal); color:var(--accent-signal); }

  .value-grid{ display:grid; grid-template-columns:repeat(3,1fr); gap:14px; margin:24px 0 36px; }
  @media (max-width:720px){ .value-grid{ grid-template-columns:1fr; } }
  .value-card{ background:var(--tile-bg); backdrop-filter:blur(14px); -webkit-backdrop-filter:blur(14px); border:1px solid var(--line); padding:22px; }
  .value-card .vnum{ font-family:var(--mono); color:var(--accent-signal); font-size:12px; margin-bottom:10px; }
  .value-card h4{ font-size:14.5px; margin:0 0 8px; }
  .value-card p{ font-size:13px; color:var(--text-muted); line-height:1.6; margin:0; }

  .func-legend{ display:grid; grid-template-columns:repeat(2,1fr); gap:10px 24px; margin:20px 0 32px; }
  @media (max-width:640px){ .func-legend{ grid-template-columns:1fr; } }
  .func-legend-row{ display:flex; gap:12px; align-items:flex-start; font-size:13px; }
  .func-legend-dot{ width:10px; height:10px; margin-top:4px; flex-shrink:0; transform:rotate(45deg); }
  .func-legend-row b{ display:block; margin-bottom:2px; font-size:13.5px; }
  .func-legend-row span{ color:var(--text-muted); }

  .verdict-scale{ display:grid; grid-template-columns:repeat(4,1fr); gap:14px; margin:20px 0 32px; }
  @media (max-width:640px){ .verdict-scale{ grid-template-columns:1fr; } }
  .verdict-cell{ background:var(--tile-bg); backdrop-filter:blur(14px); -webkit-backdrop-filter:blur(14px); border:1px solid var(--line); padding:16px; text-align:center; }
  .verdict-cell .vrange{ font-family:var(--mono); font-size:11px; color:var(--text-muted); margin-bottom:6px; }
  .verdict-cell .vlabel{ font-size:13.5px; font-weight:600; }

  .tier-track{ position:relative; margin:24px 0 36px; padding-left:4px; }
  .tier-row{ display:flex; gap:16px; padding:16px 0; border-bottom:1px solid var(--line); }
  .tier-row:last-child{ border-bottom:none; }
  .tier-num{ font-family:var(--mono); font-size:20px; color:var(--accent-signal); font-weight:600; flex-shrink:0; width:32px; }
  .tier-body h4{ font-size:14.5px; margin:0 0 6px; }
  .tier-body p{ font-size:13px; color:var(--text-muted); line-height:1.6; margin:0; }

  .news-filters{ display:flex; gap:8px; margin-bottom:24px; flex-wrap:wrap; }
  .filter-pill{
    font-family:var(--mono); font-size:11px; letter-spacing:0.04em; text-transform:uppercase;
    color:var(--text-muted); background:var(--surface-raised); border:1px solid var(--line);
    padding:7px 14px; cursor:pointer; transition:all .15s ease;
    border-radius:var(--radius-pill);
  }
  .filter-pill:hover{ border-color:var(--accent-signal); color:var(--accent-signal); }
  .filter-pill.active{ border-color:var(--accent-signal); color:var(--accent-signal); }
  .news-grid{ display:flex; flex-direction:column; gap:14px; }
  .news-card{ background:var(--tile-bg); backdrop-filter:blur(14px); -webkit-backdrop-filter:blur(14px); border:1px solid var(--line); padding:20px 22px; }
  .news-meta{ display:flex; gap:10px; align-items:center; margin-bottom:8px; font-family:var(--mono); font-size:10.5px; color:var(--text-muted); letter-spacing:0.04em; text-transform:uppercase; }
  .news-cat{ padding:2px 8px; border:1px solid var(--line); }
  .news-card h4{ font-size:15px; margin:0 0 8px; }
  .news-card p{ font-size:13.5px; color:var(--text-muted); line-height:1.65; margin:0 0 8px; }
  .news-source{ font-size:11.5px; color:var(--text-muted); font-style:italic; }
  .news-source-exploit-link{
    font-family:var(--sans); font-size:11.5px; font-style:italic; font-weight:400;
    background:transparent; border:none; padding:0; cursor:pointer;
    color:var(--accent-signal); text-decoration:underline; text-underline-offset:2px;
  }
  .news-freshness{ font-size:12px; color:var(--text-muted); margin-bottom:20px; padding:10px 14px; border:1px dashed var(--line); }

  /* --- exploits (KEV + EPSS) --- */
  .exploits-grid{ display:flex; flex-direction:column; gap:16px; }
  .exploit-card{ background:var(--tile-bg); backdrop-filter:blur(14px); -webkit-backdrop-filter:blur(14px); border:1px solid var(--line); padding:22px 24px; }
  .exploit-meta{ display:flex; gap:10px; align-items:center; margin-bottom:6px; flex-wrap:wrap; }
  .exploit-cve{ font-family:var(--mono); font-size:11px; letter-spacing:0.04em; color:var(--accent-signal); }
  .exploit-ransomware-badge{ font-family:var(--mono); font-size:9.5px; letter-spacing:0.05em; text-transform:uppercase; color:var(--accent-critical); border:1px solid var(--accent-critical); padding:2px 8px; }
  .exploit-card h4{ font-size:15.5px; margin:0 0 6px; }
  .exploit-vendor{ font-size:12.5px; color:var(--text-muted); margin-bottom:14px; }
  .exploit-scores{ display:flex; gap:14px; margin-bottom:16px; flex-wrap:wrap; }
  .exploit-score-box{ flex:1; min-width:160px; background:var(--surface-raised); padding:12px 14px; }
  .exploit-score-value{ display:block; font-family:var(--mono); font-size:22px; font-weight:600; color:var(--accent-signal); }
  .exploit-score-label{ display:block; font-size:10.5px; color:var(--text-muted); line-height:1.4; margin-top:4px; }
  .exploit-sectors{ display:flex; gap:6px; flex-wrap:wrap; margin-bottom:14px; }
  .exploit-sector-chip{ font-family:var(--mono); font-size:9.5px; letter-spacing:0.04em; text-transform:uppercase; color:var(--text-muted); border:1px solid var(--line); padding:2px 8px; }
  .exploit-card p{ font-size:13.5px; color:var(--text-muted); line-height:1.65; margin:0 0 10px; overflow-wrap:break-word; }
  .exploit-safety{ padding:12px 14px; background:var(--surface-raised); border-left:2px solid var(--accent-signal); }
  .exploit-safety b{ color:var(--text); }
  .exploit-footer{ display:flex; justify-content:space-between; align-items:center; flex-wrap:wrap; gap:8px; margin-top:12px; padding-top:12px; border-top:1px solid var(--line); }
  .exploit-dates{ font-size:11px; color:var(--text-muted); }
  .exploit-footer a{ font-size:12px; color:var(--accent-signal); text-decoration:none; }
  .exploit-footer a:hover{ text-decoration:underline; }
  @media (max-width:600px){ .exploit-scores{ flex-direction:column; } }

  /* --- icons --- */
  .icon-badge{
    width:40px; height:40px; flex-shrink:0; display:flex; align-items:center; justify-content:center;
    border-radius:50%;
    /* --icon-accent is unset (and these fall back to the original muted
       default) everywhere except the Runbooks/Playbooks accordions, which
       set it inline per item - see accentIconStyle() in main.js. */
    border:1px solid var(--icon-accent, var(--line)); background:transparent; color:var(--icon-accent, var(--text-muted));
    transition:color .2s ease, border-color .2s ease, background .2s ease;
  }

  /* --- accordion cards (runbooks / foundational docs) --- */
  .acc-card{ border:1px solid var(--line); background:var(--surface-raised); margin-bottom:10px; }
  .acc-head{ display:flex; align-items:center; gap:14px; padding:16px 18px; cursor:pointer; transition:background .15s ease; }
  .acc-head:hover{ background:var(--surface); }
  .acc-head:hover .icon-badge{ background:var(--icon-accent, var(--accent-signal)); border-color:var(--icon-accent, var(--accent-signal)); color:var(--text-on-accent); }
  .acc-head:hover h4{ color:var(--accent-signal); }
  .acc-head h4{ font-size:14.5px; margin:0; transition:color .15s ease; }
  .acc-head .acc-sub{ font-size:12px; color:var(--text-muted); margin-top:2px; }
  .acc-chevron{ margin-left:auto; font-family:var(--mono); color:var(--text-muted); transition:transform .2s ease; flex-shrink:0; }
  .acc-card.open .acc-chevron{ transform:rotate(90deg); }
  .acc-body{ display:none; padding:0 18px 18px 74px; }
  .acc-card.open .acc-body{ display:block; }
  .acc-body ol{ margin:0; padding-left:18px; }
  .acc-body li{ font-size:13.5px; color:var(--text-muted); line-height:1.65; margin-bottom:10px; }
  .acc-body ul{ margin:0; padding-left:18px; }
  .acc-body ul li{ margin-bottom:10px; }

  /* §2: MITRE + compensating-controls expander nested under a flag/priority
     item in the results panel - same acc-card/acc-head/acc-body pattern,
     just without the icon-badge, so the body's left padding is reset to
     match the head (no 74px icon offset) and it sits close to the item
     above it instead of reading as its own top-level section. */
  .mitre-panel{ margin-top:-4px; margin-bottom:14px; }
  .mitre-panel .acc-head{ padding:10px 16px; }
  .mitre-panel .acc-head h4{ font-size:12.5px; color:var(--text-muted); font-family:var(--mono); text-transform:uppercase; letter-spacing:0.04em; }
  .mitre-panel.open .acc-head h4{ color:var(--accent-signal); }
  .mitre-panel .acc-body{ padding:0 16px 16px; }

  /* --- roadmap --- */
  .stage-band{ display:flex; align-items:center; gap:12px; margin:0 0 4px; padding:12px 16px; border-left:3px solid var(--stage-color, var(--accent-signal)); background:var(--surface-raised); }

  .stage-band .stage-label{ font-family:var(--mono); font-size:19px; font-weight:700; color:var(--stage-color, var(--accent-signal)); margin:0 0 2px; }
  .stage-band .stage-range{ font-family:var(--mono); font-size:11px; color:var(--text-muted); }
  .stage-band p{ font-size:12.5px; color:var(--text-muted); margin:0; flex:1; }
  @media (max-width:640px){ .stage-band{ flex-direction:column; align-items:flex-start; gap:4px; } }
  .phase-row{ display:flex; gap:16px; padding:16px 0 16px 16px; border-bottom:1px solid var(--line); position:relative; }
  .phase-row:last-child{ border-bottom:none; }
  .phase-row::before{ content:''; position:absolute; left:0; top:0; bottom:0; width:2px; background:var(--phase-color, var(--line)); }
  .phase-num{ font-family:var(--mono); font-size:22px; font-weight:600; color:var(--phase-color, var(--accent-signal)); flex-shrink:0; width:34px; }
  .phase-row h4{ font-size:14.5px; margin:0 0 6px; }
  .phase-row p{ font-size:13px; color:var(--text-muted); line-height:1.6; margin:0; }
  .roadmap-loop{ margin-top:28px; padding:16px 18px; border:1px dashed var(--line); font-size:13px; color:var(--text-muted); display:flex; gap:12px; align-items:center; }
  .roadmap-log-grid{ display:grid; grid-template-columns:repeat(auto-fill, minmax(240px, 1fr)); gap:14px; margin-top:16px; }
  .roadmap-log-card{ background:var(--tile-bg); backdrop-filter:blur(14px); -webkit-backdrop-filter:blur(14px); border:1px solid var(--line); border-left-width:3px; padding:18px 20px; }
  .roadmap-log-card h4{ font-size:15px; margin:6px 0 8px; }
  .roadmap-log-card p{ font-size:12.5px; color:var(--text-muted); line-height:1.6; margin:0; }
  .roadmap-log-date{ font-family:var(--mono); font-size:10.5px; letter-spacing:0.05em; text-transform:uppercase; }
  .roadmap-log-shipped{ border-left-color:var(--accent-secure); }
  .roadmap-log-shipped .roadmap-log-date{ color:var(--accent-secure); }
  .roadmap-log-progress{ border-left-color:var(--accent-amber, #E0A94A); }
  .roadmap-log-progress .roadmap-log-date{ color:var(--accent-amber, #E0A94A); }
  .roadmap-log-planned{ border-left-color:var(--text-muted); }
  .roadmap-log-planned .roadmap-log-date{ color:var(--text-muted); }
  .principles-grid{ display:grid; grid-template-columns:repeat(auto-fill, minmax(280px, 1fr)); gap:16px; margin-bottom:8px; }
  .principle-card{ background:var(--tile-bg); backdrop-filter:blur(14px); -webkit-backdrop-filter:blur(14px); border:1px solid var(--line); padding:24px 22px; }
  .principle-num{ font-family:var(--mono); color:var(--accent-signal); font-size:15px; font-weight:600; margin-bottom:10px; }
  .principle-card h4{ font-size:15.5px; margin:0 0 10px; }
  .principle-card p{ font-size:12.5px; color:var(--text-muted); line-height:1.65; margin:0; }
  .tech-highlights-list{ margin:0; padding-left:20px; }
  .tech-highlights-list li{ font-size:13.5px; color:var(--text-muted); line-height:1.7; margin-bottom:12px; }
  .tech-highlights-list li:last-child{ margin-bottom:0; }
  .tech-highlights-list b{ color:var(--text); font-weight:600; }
  .logo-assembly-wrap{ display:flex; justify-content:center; padding:32px 0 8px; }
  .logo-assembly-stage{ position:relative; width:260px; height:260px; display:flex; align-items:center; justify-content:center; }
  /* ICON-THEME-QUALITY-BRIEF_1.md Part 3: unlike the other five animations
     on this site (hero infinity, maturity climb, exploit radar, lifecycle
     loop), the fragments here fly in from fixed pixel offsets up to
     -250px from center (see renderLogoAssembly()'s `fragments` array) -
     verified live at mobile widths, several genuinely clip against the
     real viewport edge below ~760px since nothing here previously scaled
     down. A transform:scale() on the whole stage shrinks the fragments'
     travel distance proportionally without touching their JS-generated
     per-fragment offsets. */
  @media (max-width:760px){ .logo-assembly-stage{ transform:scale(0.62); } }
  @media (max-width:400px){ .logo-assembly-stage{ transform:scale(0.5); } }
  .assembly-logo{
    width:150px; height:150px; position:relative; z-index:2;
    animation:assemblyLogoIn 4.2s ease-out infinite;
  }
  .assembly-fragment{
    position:absolute; top:50%; left:50%; z-index:1;
    background:linear-gradient(135deg, #2196f3, #6fd88a);
    animation:assemblyFragmentIn 4.2s ease-out infinite;
    animation-delay:var(--fdelay);
  }
  @keyframes assemblyFragmentIn{
    0%{ transform:translate(calc(-50% + var(--fx)), calc(-50% + var(--fy))) scale(1); opacity:0.9; }
    55%{ transform:translate(-50%, -50%) scale(0.3); opacity:0.5; }
    70%, 100%{ transform:translate(-50%, -50%) scale(0.3); opacity:0; }
  }
  @keyframes assemblyLogoIn{
    0%, 45%{ opacity:0; transform:scale(0.85); }
    75%, 100%{ opacity:1; transform:scale(1); }
  }
  @media (prefers-reduced-motion: reduce){
    .assembly-logo, .assembly-fragment{ animation:none; opacity:1; }
    .assembly-fragment{ display:none; }
  }
  .fb-error{ color:var(--accent-critical); font-size:12.5px; margin-bottom:14px; }
  .roadmap-loop svg{ flex-shrink:0; animation:spin 6s linear infinite; }
  @keyframes spin{ from{ transform:rotate(0deg);} to{ transform:rotate(360deg);} }
  @media (prefers-reduced-motion: reduce){
    .roadmap-loop svg{ animation:none; }
  }

  /* --- animated document lifecycle diagram --- */
  .lifecycle-row{ display:flex; align-items:center; gap:24px; margin:24px 0 32px; flex-wrap:wrap; }
  .lifecycle-row .body-text{ flex:1 1 180px; min-width:180px; max-width:360px; margin:0; }
  .lifecycle-wrap{ display:flex; justify-content:center; flex-shrink:0; }
  .lifecycle-wrap svg{ width:410px; max-width:100%; height:auto; display:block; }
  .lifecycle-node-label{ font-family:var(--mono); font-size:11px; fill:var(--text-muted); text-transform:uppercase; letter-spacing:0.03em; }
  @media (max-width:760px){ .lifecycle-row{ flex-direction:column; } .lifecycle-wrap{ order:2; } .lifecycle-row .body-text{ order:1; } }
  /* RUNBOOKS-SECTION-LAYOUT-FIX-BRIEF.md: Runbooks' own lifecycle-row now
     carries a full multi-paragraph column (the original one-liner plus
     two explanatory paragraphs added in an earlier brief, previously
     stuck below the row as a disconnected full-width block) instead of
     Playbooks' single short paragraph - .lifecycle-text wraps all of it
     as one flex item so .lifecycle-row's existing align-items:center
     centers the diagram against this column's full height, same as it
     already does for Playbooks' shorter one. The plain .lifecycle-row
     .body-text rule above (margin:0, no wrapper) is untouched and still
     governs Playbooks' row exactly as before. */
  .lifecycle-text{ flex:1 1 180px; min-width:180px; max-width:360px; }
  .lifecycle-text p.body-text{ margin:0 0 14px; }
  .lifecycle-text p.body-text:last-child{ margin-bottom:0; }
  @media (max-width:760px){ .lifecycle-text{ order:1; } }
  /* Centered against .lifecycle-text's now-taller column, the diagram at
     its original 410px width reads noticeably short relative to it
     (measured ~60% of the text column's height) - a modest bump closes
     that gap without changing Playbooks' own shorter row, which still
     uses plain .lifecycle-wrap unmodified. */
  .lifecycle-wrap--tall svg{ width:460px; }

  /* --- Maturity Model intro: climbing/progression bars (ANIMATIONS-BRIEF.md)
     - staggered per-bar CSS animation, not JS-per-frame, scaling each bar
     up from its own bottom edge (transform-box:fill-box pins the origin to
     the shape's own box rather than the SVG viewport). --- */
  .maturity-climb-wrap{ flex-shrink:0; width:280px; max-width:100%; }
  .maturity-climb-wrap svg{ width:100%; height:auto; display:block; }
  @keyframes climbGrow{
    0%, 100%{ transform:scaleY(0.55); }
    50%{ transform:scaleY(1); }
  }
  .climb-bar{ transform-box:fill-box; transform-origin:50% 100%; animation:climbGrow 3s ease-in-out infinite; }
  @keyframes climbPeakPulse{
    0%, 100%{ opacity:0.6; transform:scale(1); }
    50%{ opacity:1; transform:scale(1.3); }
  }
  .climb-peak-dot{ transform-box:fill-box; transform-origin:50% 50%; animation:climbPeakPulse 3s ease-in-out infinite; animation-delay:0.8s; }
  @media (prefers-reduced-motion: reduce){
    .climb-bar{ animation:none; transform:scaleY(1); }
    .climb-peak-dot{ animation:none; opacity:1; transform:scale(1); }
  }

  /* --- Exploits intro: live-threat radar pulse (ANIMATIONS-BRIEF.md) -
     concentric rings expanding+fading plus a few blips fading in at fixed
     points, all CSS @keyframes. Sits in .page-intro-row next to the page
     title, same slot .maturity-climb-wrap uses on the Maturity page. --- */
  .exploit-radar-wrap{ flex-shrink:0; width:170px; max-width:100%; }
  .exploit-radar-wrap svg{ width:100%; height:auto; display:block; }
  .radar-ring{ fill:none; stroke:var(--accent-critical); stroke-width:2; transform-box:fill-box; transform-origin:50% 50%; animation:radarPulse 3s ease-out infinite; }
  @keyframes radarPulse{
    0%{ transform:scale(0.3); opacity:0.85; }
    100%{ transform:scale(4.4); opacity:0; }
  }
  .radar-center{ fill:var(--accent-critical); transform-box:fill-box; transform-origin:50% 50%; animation:radarHeartbeat 2s ease-in-out infinite; }
  @keyframes radarHeartbeat{
    0%, 100%{ transform:scale(1); }
    50%{ transform:scale(1.18); }
  }
  .radar-blip{ fill:var(--accent-amber); animation-name:blipFade; animation-timing-function:ease-in-out; animation-iteration-count:infinite; }
  @keyframes blipFade{
    0%, 100%{ opacity:0; }
    50%{ opacity:1; }
  }
  @media (prefers-reduced-motion: reduce){
    .radar-ring{ animation:none; opacity:0; }
    .radar-center{ animation:none; }
    .radar-blip{ animation:none; opacity:0.7; }
  }

  /* --- Roadmap intro: three-stage pipeline flow (ROADMAP-FIX-BRIEF.md) -
     three static nodes colored to match this page's own roadmap-log-
     shipped/progress/planned card accents, connected by a static line, with
     one small dot animating along it left to right on a loop. Sits in
     .page-intro-row next to the page title, same slot .maturity-climb-wrap
     and .exploit-radar-wrap use on their own pages. --- */
  .roadmap-pipeline-wrap{ flex-shrink:0; width:220px; max-width:100%; }
  .roadmap-pipeline-wrap svg{ width:100%; height:auto; display:block; }
  .pipeline-flow-dot{ animation:pipelineFlow 3s ease-in-out infinite; }
  @keyframes pipelineFlow{
    0%{ transform:translateX(0); opacity:0; }
    10%{ opacity:1; }
    90%{ opacity:1; }
    100%{ transform:translateX(200px); opacity:0; }
  }
  @media (prefers-reduced-motion: reduce){
    .pipeline-flow-dot{ animation:none; opacity:0; }
  }

  /* --- Metrics intro (and Home's Risk Score Matrix): scored-answers-into-
     a-gauge (METRICS-ANIMATION-REVISION-BRIEF.md) - dots travel their own
     SMIL <animateMotion> path (built in buildScoringRubricSvg()) into a
     radial gauge whose arc/needle/readout are the CSS-driven parts here.
     Sits in .page-intro-row same as the other three intro animations. --- */
  .metrics-rubric-wrap{ flex-shrink:0; width:260px; max-width:100%; }
  .metrics-rubric-wrap svg{ width:100%; height:auto; display:block; }
  @keyframes metricsArcFill{
    0%, 8%{ stroke-dashoffset:107; }
    55%, 85%{ stroke-dashoffset:24; }
    100%{ stroke-dashoffset:107; }
  }
  .metrics-gauge-arc{ animation:metricsArcFill 5s ease-in-out infinite; }
  @keyframes metricsNeedleSweep{
    0%, 8%{ transform:rotate(-75deg); }
    55%, 85%{ transform:rotate(47deg); }
    100%{ transform:rotate(-75deg); }
  }
  .metrics-gauge-needle{ animation:metricsNeedleSweep 5s ease-in-out infinite; }
  @keyframes metricsReadoutFade{
    0%, 50%{ opacity:0; }
    60%, 85%{ opacity:1; }
    95%, 100%{ opacity:0; }
  }
  .metrics-gauge-readout{ font-family:var(--mono); font-size:16px; font-weight:600; fill:var(--accent-signal); animation:metricsReadoutFade 5s ease-in-out infinite; }
  /* Settled, not hidden - a completed gauge reading is the meaningful
     resting state here (matching the lifecycle dot's own "deliberate
     resting position, not a truncated animation" convention above),
     unlike the purely decorative radar-ring pulses this page doesn't use. */
  @media (prefers-reduced-motion: reduce){
    .metrics-gauge-arc{ animation:none; stroke-dashoffset:24; }
    .metrics-gauge-needle{ animation:none; transform:rotate(47deg); }
    .metrics-gauge-readout{ animation:none; opacity:1; }
  }

  /* --- Threat Modeling & Forensics intro: split attack-tree/timeline
     visual (CONSOLIDATED-WORK-BRIEF.md §5) - the tree's leaf nodes pulse
     in sequence (same staggered-delay technique as .climb-bar/
     .rubric-glow above, applied to a small scale/opacity pop) as if
     exploring each branch in turn; the scattered forensic points drift
     gently, distinct from the already-aligned dots on the timeline line
     beneath them, before settling back. Sits in .page-intro-row same as
     the other four intro animations. --- */
  .tmf-wrap{ flex-shrink:0; width:260px; max-width:100%; }
  .tmf-wrap svg{ width:100%; height:auto; display:block; }
  @keyframes tmfLeafPop{
    0%, 100%{ opacity:0.55; transform:scale(1); }
    15%{ opacity:1; transform:scale(1.35); }
    30%{ opacity:0.55; transform:scale(1); }
  }
  .tmf-leaf{ transform-box:fill-box; transform-origin:50% 50%; animation:tmfLeafPop 2.8s ease-in-out infinite; }
  @keyframes tmfScatterDrift{
    0%, 100%{ transform:translateY(0); opacity:0.85; }
    50%{ transform:translateY(-3px); opacity:1; }
  }
  .tmf-scatter circle{ transform-box:fill-box; transform-origin:50% 50%; animation:tmfScatterDrift 3.4s ease-in-out infinite; }
  .tmf-scatter circle:nth-child(2){ animation-delay:0.5s; }
  .tmf-scatter circle:nth-child(3){ animation-delay:1s; }
  @media (prefers-reduced-motion: reduce){
    .tmf-leaf{ animation:none; opacity:1; }
    .tmf-scatter circle{ animation:none; }
  }

  /* --- learning resources (News tab) --- */
  .resource-groups{ display:grid; grid-template-columns:1fr 1fr; gap:28px; margin-top:20px; }
  @media (max-width:720px){ .resource-groups{ grid-template-columns:1fr; } }
  .resource-group h4{ font-family:var(--mono); font-size:12px; letter-spacing:0.06em; text-transform:uppercase; color:var(--accent-signal); margin:0 0 12px; }
  .resource-item{ margin-bottom:14px; }
  .resource-item b{ display:block; font-size:13.5px; margin-bottom:3px; }
  .resource-item span{ font-size:12.5px; color:var(--text-muted); line-height:1.55; }

  /* --- home hero: infinity loop + live percentage counter --- */
  .hero-banner{
    display:flex; align-items:center; gap:36px; flex-wrap:wrap;
    min-height:25vh;
    padding:36px clamp(24px, 4vw, 64px);
    margin:0 calc(-1 * clamp(24px, 4vw, 64px));
    width:calc(100% + 2 * clamp(24px, 4vw, 64px));
    background-color:var(--tile-bg);
    background-image:var(--hero-wallpaper);
    background-size:cover;
    background-position:center;
    position:relative;
    overflow:hidden;
  }
  .hero-banner::before{
    content:'';
    position:absolute; inset:0;
    background:var(--hero-scrim);
    pointer-events:none;
  }
  .hero-banner::after{
    content:'';
    position:absolute; inset:0;
    pointer-events:none;
    box-shadow: inset 0 70px 50px -40px #000000, inset 0 -70px 50px -40px #000000;
  }
  .hero-banner-inner{ position:relative; z-index:1; flex:1; min-width:260px; }
  .hero-banner .hero-infinity{ position:relative; z-index:1; }
  /* Wallpaper now renders in both themes, so the hero's light text applies unconditionally */
  .hero-banner .page-title{ color:#FFFFFF; }
  .hero-banner .page-lede{ color:rgba(255,255,255,0.82); }
  @media (max-width:760px){ .hero-banner{ flex-direction:column; min-height:auto; } }
  .hero-infinity{ position:relative; flex-shrink:0; width:390px; max-width:100%; }
  .hero-infinity svg{ width:100%; height:auto; display:block; }
  .infinity-flow{ stroke-dasharray:18 26; animation:infinityFlow 6s linear infinite; }
  @keyframes infinityFlow{ to{ stroke-dashoffset:-445; } }
  @media (prefers-reduced-motion: reduce){
    .infinity-flow{ animation:none; }
  }
  .infinity-caption{ display:flex; justify-content:space-between; gap:14px; margin-top:12px; font-family:var(--mono); font-size:16px; letter-spacing:0.03em; font-weight:600; }
  .infinity-caption span{ white-space:nowrap; }
  .site-tile-grid{ display:grid; grid-template-columns:repeat(4,1fr); gap:14px; margin:28px 0 8px; }
  @media (max-width:760px){ .site-tile-grid{ grid-template-columns:repeat(2,1fr); } }
  .site-tile{ background:var(--tile-bg); backdrop-filter:blur(14px); -webkit-backdrop-filter:blur(14px); border:1px solid var(--line); padding:20px 16px; cursor:pointer; transition:background .15s ease; }
  .site-tile:hover{ background:var(--surface-raised); }
  .site-tile:hover .icon-badge{ background:var(--accent-signal); border-color:var(--accent-signal); color:var(--text-on-accent); }
  .site-tile:hover h4{ color:var(--accent-signal); }
  .site-tile .icon-badge{ margin-bottom:12px; }
  .site-tile h4{ font-size:13.5px; margin:0 0 6px; transition:color .15s ease; }
  .site-tile p{ font-size:12px; color:var(--text-muted); margin:0; line-height:1.5; }

  .hero-links{ display:flex; gap:14px; margin-top:24px; flex-wrap:wrap; }

  /* --- reusable rounded icon-pill link component --- */
  .link-pill{
    display:inline-flex; align-items:center; gap:9px;
    padding:8px 16px 8px 8px;
    border-radius:999px;
    border:1px solid var(--line);
    background:transparent;
    color:var(--text);
    text-decoration:none;
    font-family:var(--mono);
    font-size:12.5px;
    font-weight:600;
    letter-spacing:0.02em;
    cursor:pointer;
    transition:background .2s ease, border-color .2s ease, color .2s ease, transform .15s ease;
  }
  .link-pill-icon{
    display:flex; align-items:center; justify-content:center;
    width:26px; height:26px; flex-shrink:0;
    border-radius:50%;
    background:var(--surface-raised);
    /* --icon-accent is unset (falls back to the original muted default)
       everywhere except the footer's five link-pills, which set it inline
       per item - see the footer markup in shell-body.html and
       ICON_ACCENT_CYCLE/accentIconStyle() in main.js for the same pattern
       used on Runbooks/Playbooks' icon-badges. */
    color:var(--icon-accent, var(--text-muted));
    transition:background .2s ease, color .2s ease;
  }
  .link-pill-icon svg{ width:14px; height:14px; }
  .link-pill:hover{
    background:var(--accent-signal);
    border-color:var(--accent-signal);
    color:var(--text-on-accent);
    transform:translateY(-1px);
  }
  .link-pill:hover .link-pill-icon{
    background:rgba(255,255,255,0.28);
    color:var(--text-on-accent);
  }
  .hero-banner .link-pill{ border-color:rgba(255,255,255,0.3); color:#FFFFFF; }
  .hero-banner .link-pill-icon{ background:rgba(255,255,255,0.12); color:#FFFFFF; }
  .hero-banner .link-pill:hover{ background:var(--accent-signal); border-color:var(--accent-signal); color:var(--text-on-accent); }
  .hero-banner .link-pill:hover .link-pill-icon{ background:rgba(255,255,255,0.28); color:var(--text-on-accent); }

  /* Niva's own "What we build for you" section (confirmed live) is a plain
     2-column grid - icon, title, description, a highlighted outcome tag -
     not a bordered card, so .hiw-item deliberately carries no
     background/border of its own. */
  .hiw-grid{ display:grid; grid-template-columns:1fr 1fr; gap:40px 48px; margin:24px 0 8px; }
  .hiw-item{
    display:flex; flex-direction:column; align-items:flex-start; gap:14px;
    opacity:0; transform:translateY(16px); transition:opacity .5s ease, transform .5s ease;
  }
  .section-tile.revealed .hiw-item{ opacity:1; transform:translateY(0); }
  .hiw-icon{
    width:64px; height:64px; border-radius:18px; flex-shrink:0;
    background:linear-gradient(150deg, var(--surface-raised), var(--surface));
    border:1px solid var(--line); color:var(--accent-signal);
    box-shadow:inset 0 1px 1px rgba(255,255,255,0.15), inset 0 -2px 4px rgba(0,0,0,0.25), 0 8px 20px rgba(0,0,0,0.2);
    display:flex; align-items:center; justify-content:center;
  }
  .hiw-icon svg{ width:30px; height:30px; }
  .hiw-item h4{ font-size:19px; margin:0; overflow-wrap:break-word; }
  .hiw-item p{ font-size:14px; color:var(--text-muted); line-height:1.6; margin:0; text-align:left; }
  .hiw-outcome{
    display:inline-block; font-family:var(--mono); font-size:11.5px; letter-spacing:0.02em; padding:8px 14px;
    background:var(--tile-bg); border:1px solid var(--line); border-radius:var(--radius-input); color:var(--accent-signal);
  }
  @media (max-width:640px){
    .hiw-grid{ grid-template-columns:1fr; gap:32px; }
  }

  .phases-runway{ position:relative; height:145vh; margin:20px 0 32px; }
  .phases-stage{ position:sticky; top:96px; }
  .phases-row{ display:flex; align-items:center; justify-content:center; gap:20px; }
  .phase-card{
    background:var(--surface-raised); border:1px solid var(--line); padding:18px 20px; text-align:center;
    width:220px; flex-shrink:0; cursor:pointer;
    opacity:0; transform:translateX(50px); pointer-events:none;
    transition:opacity .5s ease, transform .5s ease, background .18s ease;
    position:relative;
  }
  .phase-card.in{ opacity:1; transform:translateX(0); pointer-events:auto; }
  .phase-card:hover{ background:var(--tint-signal-soft); }
  .phase-card.stage-active{ background:var(--tint-signal); box-shadow:inset 0 -2px 0 var(--accent-signal); }
  .phase-arrow{
    display:flex; align-items:center; justify-content:center; color:var(--accent-electric); flex-shrink:0;
    opacity:0; transform:scale(0.6); transition:opacity .3s ease, transform .3s ease;
  }
  .phase-arrow.in{ opacity:1; transform:scale(1); }
  /* Scoped to the phases-stage instance only - .method-link-row is shared
     with the always-visible link rows elsewhere on this page (e.g. under
     How It Works), which should never fade. */
  .phases-stage .method-link-row{ opacity:0; transform:translateY(10px); pointer-events:none; transition:opacity .5s ease, transform .5s ease; }
  .phases-stage .method-link-row.in{ opacity:1; transform:translateY(0); pointer-events:auto; }
  @media (max-width:760px){
    .phases-runway{ height:auto; }
    .phases-stage{ position:static; top:auto; }
    .phases-row{ flex-direction:column; }
    .phase-card{ width:100%; max-width:320px; }
    .phase-arrow{ transform:scale(0.6) rotate(90deg); }
    .phase-arrow.in{ transform:scale(1) rotate(90deg); }
    /* Below this breakpoint the panel becomes a flex child of .phases-row
       itself (re-parented next to whichever card opened it, so it reads as
       "under the selected card" instead of always trailing Optimize once
       cards stack in a column) - needs the same explicit width .phase-card
       gets, since .phases-row's align-items:center no longer stretches it. */
    .stage-detail-panel{ width:100%; max-width:320px; }
  }
  /* Desktop: a normal in-flow sibling right after .phases-row, inside
     .phases-stage (always the same spot, regardless of which card was
     clicked - reads fine there since the row is horizontal). Mobile
     re-parents it next to the clicked card instead - see the click handler
     in renderHomeTab() for why both are correct on their own breakpoint. */
  .stage-detail-panel{
    text-align:left;
    margin-top:16px; padding:20px 22px; background:var(--overlay-bg); backdrop-filter:blur(14px); -webkit-backdrop-filter:blur(14px); border:1px solid var(--line);
    opacity:0; max-height:0; overflow:hidden; transition:opacity .22s ease, max-height .3s ease, margin-top .3s ease;
    pointer-events:none;
  }
  .stage-detail-panel.open{ opacity:1; max-height:600px; pointer-events:auto; }
  .stage-detail-panel:empty{ margin-top:0; }
  .stage-detail-panel h4{ font-size:15px; margin:0 0 10px; }
  .risk-slider-wrap{ margin-top:28px; padding-top:20px; border-top:1px solid var(--line); position:relative; }
  .risk-slider-label{ font-size:12.5px; color:var(--text-muted); margin-bottom:14px; }
  .risk-slider-track{ display:flex; height:38px; border:1px solid var(--line); position:relative; }
  .risk-slider-fill{
    position:absolute; inset:0;
    background:linear-gradient(90deg, var(--accent-signal) 0%, #E0A94A 50%, var(--accent-critical) 100%);
    opacity:0.85;
  }
  .risk-slider-tick{
    flex:1; position:relative; display:flex; align-items:center; justify-content:center;
    font-family:var(--mono); font-size:12px; font-weight:600; color:#fff; text-shadow:0 1px 2px rgba(0,0,0,0.4);
    border:none; border-right:1px solid rgba(255,255,255,0.25); background:transparent; cursor:pointer; padding:0;
    transition:transform .15s ease;
  }
  .risk-slider-tick:last-child{ border-right:none; }
  .risk-slider-tick:hover{ transform:scaleY(1.12); }
  .risk-slider-tick.active{ outline:2px solid var(--text); outline-offset:-2px; z-index:1; }
  .risk-slider-ends{ display:flex; justify-content:space-between; margin-top:8px; font-family:var(--mono); font-size:11px; color:var(--text-muted); }
  /* In-flow, not position:absolute - unlike stage-detail-panel/
     start-link-dropdown-panel, this is the last thing in its section-tile
     with another section-tile always immediately after it at every
     viewport width, so a floating overlay here has nowhere to expand
     into except the next tile. Letting it push that tile down instead
     keeps it from visually overlapping "Things to get you started". */
  .risk-slider-desc{
    margin-top:16px; padding:16px 18px; background:var(--overlay-bg); backdrop-filter:blur(14px); -webkit-backdrop-filter:blur(14px); border:1px solid var(--line);
    font-size:13px; color:var(--text-muted); line-height:1.6; min-height:0;
    opacity:0; transform:translateY(-6px); transition:opacity .2s ease, transform .2s ease; display:none;
    pointer-events:none;
  }
  .risk-slider-desc:empty{ display:none; }
  .risk-slider-desc.open{ opacity:1; transform:translateY(0); display:block; pointer-events:auto; }
  .risk-slider-desc b{ color:var(--text); }
  .workflow-phase-tag{ font-family:var(--mono); font-size:10px; letter-spacing:0.06em; text-transform:uppercase; color:var(--text-muted); margin-bottom:8px; }
  .phase-card h4{ font-size:14.5px; margin:0 0 8px; font-family:var(--mono); text-transform:uppercase; letter-spacing:0.03em; }
  .phase-card p{ font-size:12.5px; color:var(--text-muted); line-height:1.6; margin:0; text-align:left; }
  .stage-illustration{ display:flex; justify-content:center; margin-bottom:10px; }
  .stage-illustration-sm{ margin-bottom:0; flex-shrink:0; }
  .stage-illustration-sm svg{ width:40px; height:40px; }

  .framework-badges{ display:flex; gap:10px; flex-wrap:wrap; margin:16px 0 20px; }
  .framework-badge{ font-family:var(--mono); font-size:12px; letter-spacing:0.03em; border:1px solid var(--accent-signal); color:var(--accent-signal); padding:8px 14px; }
  .framework-badge-pipeline{ border:1px dashed var(--text-muted); color:var(--text-muted); }
  .method-link-row{ display:flex; gap:12px; flex-wrap:wrap; margin-top:20px; }

  .start-links{ display:flex; flex-direction:column; gap:14px; margin:20px 0 32px; }
  .start-link{ display:flex; align-items:center; gap:14px; background:var(--tile-bg); backdrop-filter:blur(14px); -webkit-backdrop-filter:blur(14px); border:1px solid var(--line); padding:16px 18px; text-decoration:none; color:var(--text); position:relative; transition:background .15s ease; }
  .start-link:hover{ background:var(--surface); }
  .start-link:hover .icon-badge{ background:var(--accent-signal); border-color:var(--accent-signal); color:var(--text-on-accent); }
  .start-link h4{ font-size:14px; margin:0 0 4px; color:var(--text); }
  .start-link p{ font-size:12.5px; color:var(--text-muted); margin:0; }
  .ext-mark{ margin-left:auto; color:var(--text-muted); font-family:var(--mono); font-size:14px; flex-shrink:0; }

  .start-link-dropdown{ position:relative; }
  .start-link-dropdown-toggle{ width:100%; font-family:var(--sans); text-align:left; cursor:pointer; }
  .start-link-dropdown-caret{ transition:transform .18s ease; }
  .start-link-dropdown.open .start-link-dropdown-caret{ transform:rotate(180deg); }
  .start-link-dropdown-panel{
    position:absolute; top:100%; left:0; right:0; z-index:5; margin-top:6px;
    background:var(--overlay-bg); backdrop-filter:blur(14px); -webkit-backdrop-filter:blur(14px);
    border:1px solid var(--line);
    opacity:0; visibility:hidden; transform:translateY(-6px);
    transition:opacity .18s ease, transform .18s ease, visibility .18s ease;
  }
  .start-link-dropdown.open .start-link-dropdown-panel{ opacity:1; visibility:visible; transform:translateY(0); }
  .official-source-item{
    display:flex; align-items:center; justify-content:space-between; gap:12px;
    padding:12px 16px; text-decoration:none; color:var(--text);
    border-bottom:1px solid var(--line); transition:background .15s ease;
  }
  .official-source-item:last-child{ border-bottom:none; }
  .official-source-item:hover{ background:var(--tint-signal-soft); }
  .official-source-item b{ display:block; font-size:13px; margin-bottom:2px; }
  .official-source-item span:not(.official-source-domain){ font-size:12px; color:var(--text-muted); }
  .official-source-domain{ flex-shrink:0; font-family:var(--mono); font-size:11px; color:var(--accent-signal); }

  /* --- Case Studies tab --- */
  .case-grid{ display:flex; flex-direction:column; gap:14px; margin:20px 0 32px; }
  .case-card{ background:var(--tile-bg); backdrop-filter:blur(14px); -webkit-backdrop-filter:blur(14px); border:1px solid var(--line); padding:20px 22px; }
  .case-year{ font-family:var(--mono); font-size:11px; color:var(--accent-signal); letter-spacing:0.04em; margin-bottom:6px; }
  .case-card h4{ font-size:15.5px; margin:0 0 10px; }
  .case-card p{ font-size:13px; color:var(--text-muted); line-height:1.65; margin:0 0 10px; }
  .case-lesson{ font-size:12.5px; padding:10px 14px; border-left:2px solid var(--accent-signal); background:var(--tint-signal-soft); color:var(--text-muted); margin-bottom:10px; }
  .case-lesson b{ color:var(--text); }
  .case-section{ font-size:13px; color:var(--text-muted); line-height:1.65; margin:0 0 10px; }
  .case-section b{
    display:block; margin-bottom:2px; color:var(--text);
    font-family:var(--mono); font-size:10.5px; text-transform:uppercase; letter-spacing:0.06em;
  }
  .case-detail{ margin-bottom:12px; }
  .case-detail summary{
    font-family:var(--mono); font-size:11px; text-transform:uppercase; letter-spacing:0.06em;
    color:var(--accent-signal); cursor:pointer; padding:4px 0; list-style:none;
  }
  .case-detail summary::-webkit-details-marker{ display:none; }
  .case-detail summary::before{ content:'▸ '; }
  .case-detail[open] summary::before{ content:'▾ '; }
  .case-detail[open] summary{ margin-bottom:8px; }

  /* --- Case Studies tab: Simulated Engagement (AI-READINESS-GOVERNANCE-BRIEF.md §3) --- */
  .sim-highlight{ border-left:3px solid var(--accent-signal); }
  .sim-highlight-row{ display:flex; align-items:center; gap:24px; flex-wrap:wrap; }
  .sim-highlight-row > div{ flex:1 1 320px; }
  .sim-highlight-link{ flex-shrink:0; }
  .sim-engagement{ margin-top:24px; }
  .sim-banner{ margin-top:4px; }
  .sim-subhead{ font-family:var(--mono); font-size:12px; letter-spacing:0.06em; text-transform:uppercase; color:var(--accent-signal); margin:24px 0 10px; }
  .sim-arch-wrap{ background:var(--surface-raised); border:1px solid var(--line); padding:20px; margin:4px 0 20px; overflow-x:auto; }
  .sim-arch-svg{ width:100%; min-width:680px; height:auto; display:block; }
  .sim-arch-legend{ font-size:11.5px; color:var(--text-muted); line-height:1.7; margin:14px 0 0; }
  .sim-arch-legend b{ color:var(--text); font-weight:600; }
  .sim-severity-summary{ font-family:var(--mono); font-size:12.5px; color:var(--text-muted); letter-spacing:0.02em; margin:0 0 14px; }
  .sim-findings-list .acc-card{ margin-bottom:10px; }
  .sim-sev-badge{ display:inline-block; font-family:var(--mono); font-size:10px; letter-spacing:0.04em; text-transform:uppercase; border:1px solid; padding:1px 7px; margin-left:8px; }
  .sim-finding-technique{ font-size:12px; margin:12px 0 0; }
  .sim-finding-technique a{ color:var(--accent-signal); text-decoration:underline; text-underline-offset:2px; }


  /* --- Maturity Model tab --- */
  .toc-list{ list-style:none; margin:0 0 32px; padding:0; border:1px solid var(--line); background:var(--surface-raised); }
  .toc-list li{ border-bottom:1px solid var(--line); }
  .toc-list li:last-child{ border-bottom:none; }
  .toc-list a{ display:block; padding:10px 16px; color:var(--text-muted); text-decoration:none; font-family:var(--mono); font-size:12.5px; }
  .toc-list a:hover{ color:var(--accent-signal); background:var(--tint-signal-soft); }

  .table-wrap{ overflow-x:auto; margin:20px 0 32px; border-radius:var(--radius-card); border:1px solid var(--line); }
  .data-table{ width:100%; border-collapse:collapse; font-size:12.5px; min-width:640px; }
  .data-table th{ text-align:left; font-family:var(--mono); font-size:10.5px; text-transform:uppercase; letter-spacing:0.04em; color:var(--text-muted); padding:10px 12px; border-bottom:1px solid var(--line); background:var(--surface-raised); }
  .data-table td{ padding:12px; border-bottom:1px solid var(--line); vertical-align:top; color:var(--text-muted); line-height:1.55; }
  .data-table td.dt-level{ font-family:var(--mono); font-weight:600; color:var(--text); }
  .data-table td.dt-title{ color:var(--text); font-weight:500; }
  .data-table tr:hover td{ background:var(--tint-signal-soft); }

  .glance-table td{ min-width:150px; }
  .glance-table td:nth-child(4), .glance-table td:nth-child(5), .glance-table td:nth-child(6){ min-width:190px; }
  .stage-chip{ display:inline-block; font-family:var(--mono); font-size:10.5px; text-transform:uppercase; letter-spacing:0.04em; padding:3px 8px; border:1px solid var(--stage-color); color:var(--stage-color); white-space:nowrap; border-radius:var(--radius-pill); }

  .rubric-card{ border:1px solid var(--line); background:var(--surface-raised); padding:18px 20px; margin-bottom:12px; }
  .rubric-head{ display:flex; align-items:baseline; gap:14px; margin-bottom:12px; flex-wrap:wrap; }
  .rubric-range{ font-family:var(--mono); font-size:17px; font-weight:600; color:var(--accent-signal); }
  .rubric-verdict{ font-family:var(--mono); font-size:11px; text-transform:uppercase; letter-spacing:0.05em; color:var(--text-muted); }
  .rubric-row{ display:grid; grid-template-columns:90px 1fr; gap:12px; margin-bottom:9px; font-size:13px; }
  @media (max-width:600px){ .rubric-row{ grid-template-columns:1fr; } }
  .rubric-row b{ font-family:var(--mono); font-size:10.5px; text-transform:uppercase; color:var(--text-muted); letter-spacing:0.03em; }
  .rubric-row span{ color:var(--text-muted); line-height:1.6; }

  /* --- ASSESSMENT-EXPERIENCE-BRIEF.md §2: one-time save-to-browser toast --- */
  .save-toast{
    position:fixed; left:50%; bottom:24px; transform:translate(-50%, 12px);
    display:flex; align-items:center; gap:14px; max-width:min(440px, calc(100vw - 32px));
    padding:13px 16px; background:var(--overlay-bg); border:1px solid var(--line);
    border-radius:var(--radius-card); font-size:13px; color:var(--text); line-height:1.5;
    box-shadow:0 8px 28px rgba(0,0,0,0.28); opacity:0; transition:opacity .25s ease, transform .25s ease;
    z-index:500; pointer-events:none;
  }
  .save-toast.visible{ opacity:1; transform:translate(-50%, 0); pointer-events:auto; }
  .save-toast-close{ flex-shrink:0; width:22px; height:22px; border:none; background:transparent; color:var(--text-muted); font-size:16px; line-height:1; cursor:pointer; }
  .save-toast-close:hover{ color:var(--text); }

  /* --- ASSESSMENT-EXPERIENCE-BRIEF.md §5: mode-selection landing screen --- */
  .resume-banner{ display:flex; align-items:center; justify-content:space-between; gap:16px; flex-wrap:wrap; padding:14px 18px; margin-bottom:22px; border:1px solid var(--accent-signal); border-radius:var(--radius-card); background:var(--tint-signal-soft); }
  .resume-banner-text b{ color:var(--text); }
  .resume-banner-actions{ display:flex; gap:10px; flex-shrink:0; }
  .mode-grid{ display:grid; grid-template-columns:repeat(3, 1fr); gap:16px; margin:22px 0; }
  .mode-card{ display:flex; flex-direction:column; gap:10px; padding:22px 20px; border:1px solid var(--line); border-radius:var(--radius-card); background:var(--tile-bg); cursor:pointer; text-align:left; }
  .mode-card:hover{ border-color:var(--accent-signal); }
  /* UX-VISUAL-CREDIBILITY-BRIEF.md §5: icon + naturally-worded text ("~5
     minutes") instead of an all-caps abbreviated badge ("~5 MIN") - the
     de-abbreviated wording is the point, so this deliberately drops the
     uppercase transform the original badge style had. */
  .mode-card-time{ display:flex; align-items:center; gap:6px; font-family:var(--mono); font-size:12px; letter-spacing:0.02em; color:var(--accent-signal); }
  .mode-card-time svg{ width:14px; height:14px; flex-shrink:0; }
  .mode-card h4{ font-size:16px; margin:0; }
  .mode-card p{ font-size:13px; color:var(--text-muted); line-height:1.55; margin:0; }
  .mode-card-cta{ margin-top:auto; padding-top:6px; font-size:13px; font-weight:600; color:var(--accent-signal); }
  @media (max-width:760px){ .mode-grid{ grid-template-columns:1fr; } }

  /* --- ASSESSMENT-EXPERIENCE-BRIEF.md §4: progress/skip/transition micro-copy --- */
  .progress-meta{ display:flex; flex-wrap:wrap; gap:6px 14px; font-size:12.5px; color:var(--text-muted); margin:2px 0 14px; }
  .progress-meta b{ color:var(--text); }
  .skip-note{ font-size:12.5px; color:var(--text-muted); margin:0 0 16px; }
  .section-transition{ font-size:14px; color:var(--accent-signal); margin:0 0 10px; }

  /* --- ASSESSMENT-EXPERIENCE-BRIEF.md §6: sample report banner --- */
  .sample-banner{ display:flex; align-items:center; gap:10px; padding:12px 16px; margin-bottom:18px; border:1px solid var(--accent-amber); border-radius:var(--radius-card); background:var(--surface-raised); font-size:13px; color:var(--text); }
  .sample-banner b{ text-transform:uppercase; letter-spacing:0.04em; font-size:11px; font-family:var(--mono); color:var(--accent-amber); }

  /* --- footer --- */
  /* UX-VISUAL-CREDIBILITY-BRIEF.md §6: same glass/blur tile treatment
     every other content section on the site uses (CLAUDE.md: "the
     glass/blur tile treatment... should be reused, not reinvented"),
     rather than floating on the plain page background. */
  .site-footer{ margin-top:40px; padding:32px clamp(20px, 4vw, 36px) 20px; background:var(--tile-bg); backdrop-filter:blur(14px); -webkit-backdrop-filter:blur(14px); border:1px solid var(--line); }
  @media (max-width:720px){ .site-footer{ padding:24px 20px 20px; } }

  /* FOOTER-REDESIGN-BRIEF.md, trimmed and re-aligned per
     FOOTER-TRIM-BRIEF.md: brand block anchored and text-aligned left;
     the three remaining categories (Framework/Resources/About - Home,
     Learn, and Insights and their links were dropped entirely, not
     folded elsewhere) sit right-aligned as a group. */
  .footer-top{ display:flex; justify-content:space-between; gap:40px clamp(24px, 5vw, 64px); flex-wrap:wrap; padding-bottom:24px; border-bottom:1px solid var(--line); margin-bottom:16px; }
  .footer-left{ display:flex; flex-direction:column; gap:10px; flex-shrink:0; max-width:260px; text-align:left; }
  /* Text-only echo of the masthead's brand.brand-s/brand-mid/brand-cs
     treatment, not the full logo image again (avoids a second ~36KB
     inline base64 payload for a purely decorative footer repeat). */
  .footer-brand{ font-family:var(--mono); font-size:16px; font-weight:600; letter-spacing:0.04em; }
  .footer-tagline{ font-size:12.5px; color:var(--text-muted); margin:0; }
  .footer-social{ display:flex; gap:10px; margin-top:6px; }
  .footer-social-icon{
    display:flex; align-items:center; justify-content:center;
    width:34px; height:34px;
    border-radius:50%;
    border:1px solid var(--line);
    background:transparent;
    color:var(--text-muted);
    text-decoration:none;
    transition:background .2s ease, border-color .2s ease, color .2s ease, transform .15s ease;
  }
  .footer-social-icon:hover{ background:var(--accent-signal); border-color:var(--accent-signal); color:var(--text-on-accent); transform:translateY(-1px); }
  .footer-links{ display:flex; gap:32px clamp(24px, 4vw, 48px); flex-wrap:wrap; text-align:right; }
  .footer-col{ display:flex; flex-direction:column; gap:9px; min-width:130px; }
  .footer-col-title{ font-family:var(--mono); font-size:10.5px; text-transform:uppercase; letter-spacing:0.08em; color:var(--text-muted); margin-bottom:3px; }
  .footer-col a{ font-size:13px; color:var(--text); text-decoration:none; }
  .footer-col a:hover{ color:var(--accent-signal); }
  @media (max-width:720px){
    .footer-top{ flex-direction:column; gap:28px; }
    .footer-left{ max-width:none; }
    /* .footer-links' right-align is a deliberate desktop choice (see the
       comment above it) that only makes sense while it sits opposite
       .footer-left in a row - once .footer-top stacks to a column above,
       right-aligning link text against the left-aligned brand block
       above it just reads as misaligned, so flip to left here. */
    .footer-links{ text-align:left; }
  }
  .footer-bottom{ text-align:center; font-size:11px; color:var(--text-muted); padding-top:10px; font-family:var(--mono); }

  /* --- glossary page --- */
  .alpha-index{ display:flex; flex-wrap:wrap; gap:6px; margin:16px 0 28px; }
  .alpha-chip{ font-family:var(--mono); font-size:11.5px; min-width:28px; text-align:center; padding:6px 8px; border:1px solid var(--line); color:var(--text-muted); text-decoration:none; cursor:pointer; background:transparent; }
  .alpha-chip:hover{ color:var(--accent-signal); border-color:var(--accent-signal); }
  .alpha-chip.disabled{ opacity:0.28; pointer-events:none; }
  .glossary-letter-group{ margin-bottom:28px; }
  .glossary-letter{ font-family:var(--mono); font-size:20px; font-weight:600; color:var(--accent-signal); border-bottom:1px solid var(--line); padding-bottom:6px; margin-bottom:14px; }
  .glossary-entry{ margin-bottom:16px; }
  .glossary-entry b{ display:block; font-size:14px; color:var(--text); margin-bottom:4px; }
  .glossary-entry span{ font-size:13px; color:var(--text-muted); line-height:1.6; }
  .ordered-list{ margin:0; padding-left:20px; }
  .ordered-list li{ font-size:13px; color:var(--text-muted); line-height:1.65; margin-bottom:10px; }
  .osint-grid{ display:grid; grid-template-columns:1fr 1fr; gap:16px 28px; margin-top:16px; }
  @media (max-width:640px){ .osint-grid{ grid-template-columns:1fr; } }
  .osint-item b{ display:block; font-size:13px; color:var(--text); margin-bottom:3px; }
  .osint-item span{ font-size:12.5px; color:var(--text-muted); line-height:1.55; }
  .ref-list{ list-style:none; margin:0; padding:0; }
  .ref-list li{ padding:14px 0; border-bottom:1px solid var(--line); font-size:13px; color:var(--text-muted); }
  .ref-list li:last-child{ border-bottom:none; }
  /* --- §5.1: standalone Global region toggle + country checklist --- */
  .region-global-standalone{
    display:flex; align-items:center; gap:10px; padding:13px 16px; border:1.5px dashed var(--line);
    background:var(--surface-raised); cursor:pointer; font-size:13.5px; margin:14px 0 10px;
    transition:border-color .15s ease, background .15s ease;
  }
  .region-global-standalone:hover{ border-color:var(--accent-signal); }
  .region-global-standalone.selected{ border-style:solid; border-color:var(--accent-secure); background:var(--tint-secure); }
  .region-global-standalone .checkbox{ flex-shrink:0; width:16px; height:16px; border:1.5px solid var(--text-muted); position:relative; }
  .region-global-standalone.selected .checkbox{ border-color:var(--accent-secure); background:var(--accent-secure); }
  .region-global-standalone.selected .checkbox::after{
    content:'✓'; position:absolute; inset:0; display:flex; align-items:center; justify-content:center;
    font-size:11px; color:var(--text-on-accent); font-weight:700;
  }
  .country-checklist{ display:grid; grid-template-columns:repeat(auto-fill, minmax(160px, 1fr)); gap:4px 12px; max-height:280px; overflow-y:auto; }
  .country-check-item{ display:flex; align-items:center; gap:8px; font-size:12.5px; color:var(--text-muted); padding:4px 2px; cursor:pointer; }
  .country-check-item:hover{ color:var(--text); }
  .country-check-item input{ accent-color:var(--accent-secure); }

  /* --- multiselect checkbox-group fields (e.g. §5.2 day-to-day management) --- */
  .checkbox-group{ display:flex; flex-direction:column; gap:6px; }
  .checkbox-option{
    display:flex; align-items:center; gap:10px; padding:11px 14px; border:1px solid var(--line);
    background:var(--surface-raised); cursor:pointer; font-size:13px; transition:border-color .15s ease, background .15s ease;
  }
  .checkbox-option:hover{ border-color:var(--accent-signal); }
  .checkbox-option.selected{ border-color:var(--accent-secure); background:var(--tint-secure); }
  .checkbox-option input{ accent-color:var(--accent-secure); }
  .ref-list li:last-child{ border-bottom:none; }
