/* ══════════════════════════════════════════════════════════════
   TECH IQ — design system
   © 2026 Matt Laframboise / The Raspberry Company. All rights reserved.

   One stylesheet, no build step. Organised as:
     1  tokens            9  labs + engine surfaces
     2  base + a11y      10  virtual computer (VOS)
     3  nav + chrome     11  diagnostic
     4  buttons/cards    12  licence + road test
     5  states           13  readiness
     6  login            14  knowledge, paths, saved
     7  academy/lesson   15  enterprise + admin
     8  dashboard        16  dark, high contrast, print, responsive

   BRAND: exactly two hues change between IQ products. Everything else derives.
   The values below are MEASURED, not chosen — every pairing the design system
   uses clears WCAG AA, and the family design audit records the ratios.

   That claim used to be checked by nobody, and it was FALSE in dark mode for
   every filled accent control. tools/check-data.js now resolves these tokens
   out of this file and re-measures nine pairings across all four ramps on every
   run — because a contrast table with no ramp column has measured a quarter of
   the product and reported on all of it.
   ══════════════════════════════════════════════════════════════ */

/* ── 1. TOKENS ────────────────────────────────────────────── */
:root{
  --lp:#3a2a80;--lp-d:#241a56;--lp-m:#513ab0;--lp-t:rgba(58,42,128,.07);
  --lo:#c026a3;--lo-h:#9d1d85;--lo-l:rgba(192,38,163,.13);--lo-p:rgba(192,38,163,.06);

  /* THE ACCENT AS A FOREGROUND on dark brand surfaces. --lo measures 2.22:1 on
     --lp and is unreadable there. HR IQ discovered this token; Tech IQ does not
     merely inherit it, it requires it. #fbb2ec measures 6.96 on --lp, 9.34 on
     --lp-d and 4.91 on --lp-m. ANY rule putting the accent on a dark brand
     surface must use this one. */
  --lo-od:#fbb2ec;
  /* The PRIMARY used as a foreground. Same shape of problem as --lo-od:
     in the dark ramps --lp is #2b1f60, DARKER than the card it would sit
     on, and the axe audit measured it at 1.18:1 across 28 rules. */
  --lp-ink:#3a2a80;

  /* THE MIRROR CASE, and the one the family had never named: the foreground for
     text sitting ON an accent FILL. Every primary button in the product is this
     pairing.

     It has to be a token rather than a literal because --lo moves in opposite
     directions between the ramps. Light mode darkens the accent, so white is
     correct (5.19:1). Dark mode LIGHTENS it to #e468c8 so the accent still
     reads as a foreground elsewhere — and white on that measures 2.95:1, below
     the AA floor this product targets. Hard-coding `color:#fff` meant every
     filled accent control failed in dark mode, silently, because the light ramp
     it was measured in was fine.

     Set per ramp below. ANY rule putting text on --lo or --lo-h must use it. */
  --lo-fg:#fff;

  --bg:#f5f4f9;--wh:#fff;--g100:#edecf3;--g200:#dcd9e6;--g400:#8b86a4;--g600:#57516e;
  --tx:#181428;--txs:#3d3757;--txm:#57516e;--bdr:#e0dcea;
  /* --txm darkened from #8b86a4 to clear WCAG AA (~5.4:1) on --bg. Dark mode
     overrides it below rather than reusing it. */

  --ok:#0b7d63;--ok-l:#d7f3ea;--er:#c2410c;--er-l:#fdece3;
  --wa:#a3690a;--wa-l:#fbf0d8;--inf:#4c2f9e;--inf-l:#e9e3fa;
  /* Badge text. The hues above are tuned to read as icons and borders against
     the page, not as 0.68rem bold text on their own tint. These are the same
     hues darkened to clear 4.5:1 for status pills. Overridden in dark mode. */
  --ok-bt:#065f46;--wa-bt:#7c4a02;--er-bt:#9a3412;

  --fd:'Playfair Display',Georgia,serif;
  --fb:'Nunito',system-ui,sans-serif;
  --fm:'JetBrains Mono',ui-monospace,Menlo,Consolas,monospace;
  --heading:var(--lp);

  --r:10px;--rs:6px;--rl:16px;
  --sh:0 2px 12px rgba(36,26,86,.08);
  --shm:0 4px 20px rgba(36,26,86,.12);
  --shl:0 8px 32px rgba(36,26,86,.17);

  /* Z-INDEX SCALE — single source of truth. Each layer leaves room above for
     related elements (a popover on top of its modal). Use these rather than
     raw numbers. */
  --z-base:1;
  --z-vos-win:400;       /* windows inside the virtual computer */
  --z-vos-bar:900;
  --z-sticky:1040;       /* main nav, sticky bars */
  --z-dropdown:1100;
  --z-fab:2000;
  --z-mob-nav:9000;
  --z-a11y:9998;
  --z-toast:9999;
  --z-modal:10000;
  --z-modal-popover:10001;
  --z-boot-error:99999;
}
*,*::before,*::after{box-sizing:border-box}

/* color-scheme tells the browser what native UI (form controls, scrollbars,
   open <select> lists) should match. Default light; body.liq-dark remaps. */
:root{color-scheme:light}

/* ── 2. BASE ──────────────────────────────────────────────── */
body{font-family:var(--fb);background:var(--bg);color:var(--tx);font-size:1rem;line-height:1.65}
h1,h2,h3,h4,h5{font-family:var(--fd);line-height:1.22;color:var(--heading)}
a{color:var(--lo);text-decoration:none}a:hover{color:var(--lo-h)}
code,.mono{font-family:var(--fm);font-size:.88em}
.liq-page{display:none}.liq-page.active{display:block}
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;
  clip:rect(0,0,0,0);white-space:nowrap;border:0}

/* FOCUS. Strong, visible, and never removed. In a product that teaches
   accessibility, an invisible focus ring would be self-refuting. */
:focus-visible{outline:3px solid var(--lo);outline-offset:2px;border-radius:3px}
.lnav :focus-visible,.section-hero :focus-visible,.login-card :focus-visible,
.vos-win-bar :focus-visible{outline-color:var(--lo-od)}

.skip-link{position:absolute;left:-999px;top:0;z-index:var(--z-boot-error);
  background:var(--lp);color:#fff;padding:.7rem 1.2rem;border-radius:0 0 var(--r) 0;font-weight:700}
.skip-link:focus{left:0;color:#fff}

/* ── ACCESSIBILITY PANEL ── */
.a11y-wrap{position:fixed;right:1rem;bottom:1rem;z-index:var(--z-a11y)}
.a11y-btn{width:3rem;height:3rem;border-radius:50%;border:none;background:var(--lp);color:var(--lo-od);
  font-size:1.35rem;box-shadow:var(--shl);cursor:pointer;display:flex;align-items:center;justify-content:center;
  transition:transform .18s,background .18s}
.a11y-btn:hover{transform:scale(1.06);background:var(--lp-m)}
.a11y-panel{position:absolute;right:0;bottom:3.6rem;width:min(21rem,calc(100vw - 2rem));background:var(--wh);
  border:1px solid var(--bdr);border-radius:var(--rl);box-shadow:var(--shl);display:none;overflow:hidden}
.a11y-panel.show{display:block}
.a11y-panel-hdr{display:flex;align-items:center;justify-content:space-between;padding:.85rem 1rem;
  background:var(--lp);color:#fff}
.a11y-panel-title{font-weight:800;font-size:.95rem;display:flex;align-items:center;gap:.5rem}
.a11y-close{background:none;border:none;color:#fff;font-size:1.4rem;line-height:1;cursor:pointer;padding:0 .2rem}
.a11y-body{padding:.6rem .95rem 1rem}
.a11y-row{display:flex;align-items:center;justify-content:space-between;gap:.6rem;padding:.55rem 0;
  border-bottom:1px solid var(--g100)}
.a11y-row:last-of-type{border-bottom:none}
.a11y-row-lbl{font-size:.87rem;font-weight:700;color:var(--txs);display:flex;align-items:center;gap:.45rem}
.a11y-toggle{width:2.6rem;height:1.45rem;border-radius:99px;border:none;background:var(--g200);position:relative;
  cursor:pointer;flex-shrink:0;transition:background .2s}
.a11y-toggle::after{content:'';position:absolute;top:.19rem;left:.19rem;width:1.07rem;height:1.07rem;
  border-radius:50%;background:#fff;transition:transform .2s;box-shadow:0 1px 3px rgba(0,0,0,.25)}
.a11y-toggle.on{background:var(--lo)}
.a11y-toggle.on::after{transform:translateX(1.15rem);background:var(--lo-fg)}
.a11y-step{display:flex;align-items:center;gap:.35rem}
.a11y-step-btn{width:1.9rem;height:1.9rem;border-radius:var(--rs);border:1px solid var(--bdr);background:var(--wh);
  font-weight:800;cursor:pointer;color:var(--txs)}
.a11y-step-btn:disabled{opacity:.35;cursor:not-allowed}
.a11y-step-val{font-size:.78rem;font-weight:700;min-width:2.8rem;text-align:center;color:var(--txm)}
.a11y-font-row{flex-direction:column;align-items:flex-start;gap:.45rem}
.a11y-font-chips{display:flex;flex-wrap:wrap;gap:.35rem}
.a11y-font-chip{padding:.3rem .65rem;border-radius:99px;border:1px solid var(--bdr);background:var(--wh);
  font-size:.76rem;font-weight:700;cursor:pointer;color:var(--txs)}
.a11y-font-chip.active{background:var(--lo-l);border-color:var(--lo);color:var(--lo-h)}
.a11y-note{font-size:.74rem;color:var(--txm);margin:.7rem 0 .5rem;font-style:italic}
.a11y-reset{width:100%;padding:.5rem;border-radius:var(--rs);border:1px solid var(--bdr);background:var(--g100);
  font-size:.8rem;font-weight:700;cursor:pointer;color:var(--txs)}

/* ── 3. NAV ───────────────────────────────────────────────── */
.lnav{background:var(--lp);border-bottom:3px solid var(--lo);position:sticky;top:0;z-index:var(--z-sticky)}
/* The logo's wordmark is 52% of its viewBox height — the bracket occupies the
   rest, above it. The mark it replaced carried its weight in a tile, so the
   same CSS height renders this one noticeably lighter; these values are set
   from the wordmark's cap height rather than the box. See img/techiq-logo.svg. */
.tiq-logo{height:2.5rem;width:auto}
.lnav .nav-link{color:rgba(255,255,255,.72)!important;font-weight:700;font-size:.88rem;
  padding:.5rem .85rem!important;border-radius:var(--rs);transition:all .2s}
.lnav .nav-link:hover,.lnav .nav-link.active{color:#fff!important;background:rgba(192,38,163,.24)}
.lnav .dropdown-menu{background:var(--lp-m);border:1px solid rgba(255,255,255,.13);border-radius:var(--r);
  box-shadow:var(--shl);padding:.4rem;max-height:70vh;overflow-y:auto}
.lnav .dropdown-item{color:rgba(255,255,255,.8);font-size:.85rem;font-weight:600;border-radius:var(--rs);
  padding:.5rem .85rem;display:flex;align-items:center;gap:.6rem;transition:all .18s}
.lnav .dropdown-item:hover{background:rgba(255,255,255,.14);color:#fff}
.lnav .dropdown-item .di{color:var(--lo-od);width:1.2rem;text-align:center;flex-shrink:0}
.dd-pillar-header{font-size:.62rem;font-weight:800;letter-spacing:.13em;text-transform:uppercase;
  color:rgba(255,255,255,.6);padding:.5rem .85rem .3rem;display:flex;align-items:center;list-style:none}
.navbar-toggler{border-color:rgba(255,255,255,.3)}.navbar-toggler-icon{filter:invert(1)}
.nav-badge{display:inline-flex;min-width:1.15rem;height:1.15rem;padding:0 .3rem;border-radius:99px;
  background:var(--lo);color:var(--lo-fg);font-size:.66rem;font-weight:800;align-items:center;justify-content:center;
  margin-left:.3rem}
.nav-search-btn{background:rgba(255,255,255,.09);border:1px solid rgba(255,255,255,.16);color:rgba(255,255,255,.8);
  border-radius:99px;padding:.35rem .85rem;font-size:.82rem;font-weight:600;align-items:center;gap:.45rem;cursor:pointer}
.nav-search-btn:hover{background:rgba(255,255,255,.16);color:#fff}
.nav-search-btn kbd{background:rgba(0,0,0,.28);border-radius:4px;padding:.05rem .35rem;font-size:.7rem;
  font-family:var(--fm);color:rgba(255,255,255,.75)}
.nav-login-btn{background:var(--lo);border:none;color:var(--lo-fg);border-radius:var(--rs);padding:.45rem 1rem;
  font-weight:700;font-size:.85rem;cursor:pointer}
.nav-login-btn:hover{background:var(--lo-h)}
.nav-xp{display:flex;align-items:center;gap:.5rem;background:rgba(255,255,255,.09);border-radius:2rem;
  padding:.3rem .7rem;cursor:pointer;border:none}
.nav-xp:hover{background:rgba(255,255,255,.16)}
.nav-xp-bar{width:56px;height:5px;background:rgba(255,255,255,.18);border-radius:99px;overflow:hidden}
.nav-xp-fill{height:100%;background:var(--lo-od);border-radius:99px;transition:width .6s ease}
.nav-xp-lbl{font-size:.76rem;font-weight:700;color:rgba(255,255,255,.88);white-space:nowrap}
.nav-user-wrap{position:relative}
.nav-user-dropdown{position:absolute;right:0;top:calc(100% + .55rem);width:16.5rem;background:var(--lp-m);
  border:1px solid rgba(255,255,255,.14);border-radius:var(--r);box-shadow:var(--shl);padding:.4rem;
  display:none;z-index:var(--z-dropdown)}
.nav-user-wrap:hover .nav-user-dropdown,.nav-user-wrap:focus-within .nav-user-dropdown{display:block}
.nav-user-header{padding:.6rem .7rem .7rem;border-bottom:1px solid rgba(255,255,255,.12);margin-bottom:.35rem}
.nav-user-name{font-weight:800;color:#fff;font-size:.92rem}
.nav-user-email{font-size:.76rem;color:rgba(255,255,255,.6)}
.nav-user-role{display:inline-block;margin-top:.35rem;font-size:.66rem;font-weight:800;text-transform:uppercase;
  letter-spacing:.08em;padding:.15rem .5rem;border-radius:99px;background:rgba(251,178,236,.2);color:var(--lo-od)}
.nav-user-tenant{margin-top:.35rem;font-size:.74rem;color:rgba(255,255,255,.72);display:flex;align-items:center;gap:.35rem}
.nav-user-section{padding:.2rem 0}
.nav-user-section-hdr{font-size:.6rem;font-weight:800;letter-spacing:.12em;text-transform:uppercase;
  color:rgba(255,255,255,.42);padding:.35rem .7rem .2rem}
.nav-user-item{width:100%;text-align:left;background:none;border:none;color:rgba(255,255,255,.82);
  font-size:.84rem;font-weight:600;padding:.45rem .7rem;border-radius:var(--rs);display:flex;
  align-items:center;gap:.55rem;cursor:pointer}
.nav-user-item:hover{background:rgba(255,255,255,.13);color:#fff}
.nav-user-item.danger:hover{background:rgba(194,65,12,.35)}
.nav-user-section-foot{border-top:1px solid rgba(255,255,255,.12);margin-top:.3rem;padding-top:.3rem}
.nav-tenant-btn{display:flex;align-items:center;gap:.45rem;background:rgba(255,255,255,.09);
  border:1px solid rgba(255,255,255,.16);border-radius:99px;padding:.28rem .7rem .28rem .3rem;cursor:pointer;
  color:#fff;font-size:.8rem;font-weight:700;margin-right:.5rem}
/* The tenant pair, or the product pair. --tenant-accent-fg is computed against
   the tenant's accent in js/09 and only ever set alongside it, so the two
   var() fallbacks resolve together: either both tenant values, or neither. */
.nav-tenant-mark{width:1.4rem;height:1.4rem;border-radius:50%;background:var(--tenant-accent,var(--lo));
  display:flex;align-items:center;justify-content:center;font-size:.72rem;font-weight:800;
  color:var(--tenant-accent-fg,var(--lo-fg))}

/* ── HEROES ── */
.section-hero{background:var(--lp);color:#fff;padding:2.4rem 0 2rem}
.section-hero h1{font-size:clamp(1.6rem,4vw,2.4rem);margin-bottom:.4rem;color:#fff}
.section-hero p{color:rgba(255,255,255,.72);max-width:680px;margin:0;font-size:.95rem}
.back-btn{display:inline-flex;align-items:center;gap:.35rem;color:var(--lo-od);font-size:.83rem;font-weight:700;
  cursor:pointer;border:none;background:none;padding:0;margin-bottom:.9rem}
.back-btn:hover{color:#fff}
.s-lbl{display:inline-block;font-size:.66rem;font-weight:800;letter-spacing:.13em;text-transform:uppercase;
  color:var(--lo-od);margin-bottom:.4rem}
.lab-hero{background:linear-gradient(120deg,var(--lp-d),var(--lp));border-bottom:3px solid var(--lab,var(--lo))}

/* ── 4. BUTTONS + CARDS ───────────────────────────────────── */
.btn-liq{font-family:var(--fb);font-weight:700;font-size:.92rem;border-radius:var(--rs);padding:.62rem 1.4rem;
  display:inline-flex;align-items:center;gap:.45rem;cursor:pointer;border:2px solid transparent;
  transition:all .2s;text-decoration:none;white-space:nowrap}
.btn-or{background:var(--lo);color:var(--lo-fg);border-color:var(--lo)}
.btn-or:hover{background:var(--lo-h);border-color:var(--lo-h);color:var(--lo-fg)}
.btn-pu{background:var(--lp);color:#fff;border-color:var(--lp)}.btn-pu:hover{background:var(--lp-m);color:#fff}
.btn-out{background:transparent;color:var(--txs);border-color:var(--bdr)}
.btn-out:hover{border-color:var(--lp);color:var(--lp-ink)}
.btn-out.danger{color:var(--er-bt);border-color:var(--er-l)}
.btn-out.danger:hover{border-color:var(--er);background:var(--er-l)}
.btn-sm{font-size:.82rem;padding:.4rem .95rem}
.btn-liq:disabled{opacity:.45;cursor:not-allowed}

.callout{display:flex;gap:.75rem;padding:.9rem 1.1rem;border-radius:var(--r);font-size:.88rem;line-height:1.6;
  border-left:4px solid}
.callout i{font-size:1.05rem;flex-shrink:0;margin-top:.1rem}
.cl-info{background:var(--inf-l);border-color:var(--inf);color:var(--txs)}
.cl-info i{color:var(--inf)}
.cl-warn{background:var(--wa-l);border-color:var(--wa);color:var(--txs)}
.cl-warn i{color:var(--wa-bt)}

/* ── CHIP INK ──────────────────────────────────────────────
   A chip puts small bold text on a 13% tint of its OWN colour. Doing that with
   the raw colour as the foreground is the single most common contrast failure
   in this product's design language: the axe audit found 48 instances of it
   across seven pages, at ratios from 2.36:1 to 4.41:1 against a 4.5:1 floor,
   in the twelve competency hues, the five attainment states and the six
   readiness bands.

   The design system had already solved this once and not generalised it:
   --ok-bt / --wa-bt / --er-bt exist precisely because "the status hues are
   tuned for icons and borders, not for small bold text on their own tint", and
   .rd-decay already uses that pairing correctly.

   --chip-ink generalises it WITHOUT adding twenty-three hand-tuned tokens.
   The fill keeps the true hue; the text is the same hue driven toward black
   (light ramps) or white (dark ramps) far enough to clear AA. Because it is
   computed in CSS rather than at render time, it follows a live theme toggle —
   a JS-computed value would not, and the accessibility panel switches theme
   without re-rendering.

   Worst case across all 23 colours: 5.80 light, 5.40 dark, 5.80 high contrast,
   6.37 high-contrast dark. Asserted in tools/check-data.js. */
:root{ --chip-ink-target:#000; --chip-ink-mix:62%; }
.comp-chip{display:inline-flex;align-items:center;gap:.3rem;padding:.2rem .55rem;border-radius:99px;
  background:color-mix(in srgb,var(--ck) 12%,var(--wh));
  color:color-mix(in srgb,var(--ck) var(--chip-ink-mix),var(--chip-ink-target));
  border:1px solid color-mix(in srgb,var(--ck) 30%,transparent);
  font-size:.72rem;font-weight:700;white-space:nowrap}
.comp-chip.lg{font-size:.82rem;padding:.3rem .75rem}
.comp-chip.muted{opacity:.55}
.att-chip{display:inline-flex;align-items:center;gap:.28rem;padding:.16rem .5rem;border-radius:99px;
  background:color-mix(in srgb,var(--att) 13%,var(--wh));
  color:color-mix(in srgb,var(--att) var(--chip-ink-mix),var(--chip-ink-target));
  border:1px solid color-mix(in srgb,var(--att) 32%,transparent);font-size:.7rem;font-weight:800;white-space:nowrap}
.att-chip.sm{font-size:.66rem;padding:.1rem .42rem}
.att-chip.muted{--att:#8b86a4}
.rd-band{display:inline-flex;align-items:center;padding:.16rem .55rem;border-radius:99px;
  background:color-mix(in srgb,var(--band) 13%,var(--wh));
  color:color-mix(in srgb,var(--band) var(--chip-ink-mix),var(--chip-ink-target));
  border:1px solid color-mix(in srgb,var(--band) 32%,transparent);font-size:.72rem;font-weight:800;white-space:nowrap}
.rd-decay{display:inline-flex;align-items:center;gap:.28rem;padding:.14rem .5rem;border-radius:99px;
  background:var(--wa-l);color:var(--wa-bt);font-size:.68rem;font-weight:800;white-space:nowrap}

/* Two-channel readiness bar: fill = score, thin track = coverage. */
.rd-bar-wrap{flex:1;min-width:100px;max-width:220px}
.rd-bar{height:8px;border-radius:99px;background:var(--g200);overflow:hidden}
.rd-bar-fill{height:100%;background:var(--band);border-radius:99px;transition:width .5s ease}
.rd-cov{height:3px;border-radius:99px;background:var(--g100);overflow:hidden;margin-top:2px}
.rd-cov-fill{height:100%;background:var(--g400);border-radius:99px}

/* ── 5. STATES ────────────────────────────────────────────── */
.state-block{text-align:center;padding:2.5rem 1.5rem;border-radius:var(--rl);background:var(--wh);
  border:1px dashed var(--bdr)}
.state-block i{font-size:2.2rem;color:var(--g400);display:block;margin-bottom:.7rem}
.state-block h3{font-size:1.1rem;margin-bottom:.4rem}
.state-block p{color:var(--txm);font-size:.9rem;max-width:38rem;margin:0 auto}
.state-error{border-style:solid;border-color:var(--er-l);background:var(--er-l)}
.state-error i{color:var(--er)}
.state-locked i{color:var(--lp-m)}
.state-planned{background:var(--g100);border-color:var(--g200)}
.state-spinner{width:2rem;height:2rem;border:3px solid var(--g200);border-top-color:var(--lo);border-radius:50%;
  margin:0 auto .7rem;animation:spin .8s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}

/* ── TOASTS ── */
.toast-box{position:fixed;bottom:1rem;left:50%;transform:translateX(-50%);z-index:var(--z-toast);
  display:flex;flex-direction:column;gap:.5rem;pointer-events:none;width:min(24rem,calc(100vw - 2rem))}
.ltoast{background:var(--lp);color:#fff;border-radius:var(--r);padding:.75rem 1rem;box-shadow:var(--shl);
  display:flex;gap:.7rem;align-items:flex-start;animation:toastIn .3s ease;border-left:4px solid var(--lo)}
.ltoast.out{animation:toastOut .35s ease forwards}
.ltoast-ico{font-size:1.1rem;color:var(--lo-od)}
.ltoast-lbl{font-size:.85rem;font-weight:700;line-height:1.45}
.ltoast-sub{font-size:.72rem;color:var(--lo-od);font-weight:700}
@keyframes toastIn{from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:none}}
@keyframes toastOut{to{opacity:0;transform:translateY(10px)}}

.lu-overlay{position:fixed;inset:0;background:rgba(36,26,86,.72);z-index:var(--z-modal);display:none;
  align-items:center;justify-content:center;padding:1.5rem;backdrop-filter:blur(3px)}
.lu-overlay.show{display:flex}
.lu-card{background:var(--wh);border-radius:var(--rl);padding:2rem 2.4rem;text-align:center;max-width:22rem;
  box-shadow:var(--shl);animation:toastIn .35s ease}
.lu-ico{font-size:2.8rem}
.lu-ttl{font-size:.7rem;font-weight:800;letter-spacing:.15em;text-transform:uppercase;color:var(--lo);margin:.4rem 0}
.lu-name{font-family:var(--fd);font-size:1.5rem;color:var(--lp-ink)}
.lu-sub{color:var(--txm);font-size:.88rem;margin-bottom:1.2rem}

/* ── 6. LOGIN ─────────────────────────────────────────────── */
.liq-login-page{min-height:100vh;background:var(--lp-d);align-items:center;justify-content:center;
  padding:2rem 1rem;position:relative;overflow:hidden}
.login-fx-canvas{position:absolute;inset:0;width:100%;height:100%;opacity:.85}
.login-wrap{position:relative;z-index:2;width:min(27rem,100%)}
.login-logo-row{text-align:center;margin-bottom:1.5rem}
.tiq-logo-login{height:4rem;width:auto}
.login-card{background:rgba(58,42,128,.72);backdrop-filter:blur(14px);border:1px solid rgba(255,255,255,.14);
  border-radius:var(--rl);padding:1.9rem 1.8rem;box-shadow:var(--shl)}
.login-title{font-family:var(--fd);font-size:1.5rem;color:#fff;margin-bottom:.35rem}
.login-sub{font-size:.87rem;color:rgba(255,255,255,.7);margin-bottom:1.3rem;line-height:1.6}
.login-field{margin-bottom:.95rem}
.login-label{display:block;font-size:.76rem;font-weight:800;letter-spacing:.05em;text-transform:uppercase;
  color:rgba(255,255,255,.62);margin-bottom:.35rem}
.login-inp{width:100%;background:rgba(0,0,0,.24);border:1px solid rgba(255,255,255,.18);border-radius:var(--rs);
  padding:.65rem .85rem;color:#fff;font-size:.92rem}
.login-inp::placeholder{color:rgba(255,255,255,.35)}
.login-inp:focus{outline:2px solid var(--lo-od);border-color:transparent}
.login-btn{width:100%;background:var(--lo);border:none;color:var(--lo-fg);border-radius:var(--rs);padding:.7rem;
  font-weight:800;font-size:.95rem;cursor:pointer;display:flex;align-items:center;justify-content:center;gap:.5rem}
.login-btn:hover{background:var(--lo-h)}
.login-error{display:none;background:rgba(194,65,12,.22);border:1px solid rgba(194,65,12,.5);
  border-radius:var(--rs);padding:.6rem .8rem;color:#ffd9c7;font-size:.84rem;margin-bottom:.9rem;
  align-items:center;gap:.5rem}
.login-error.show{display:flex}
.login-maint{margin-top:.9rem;background:rgba(163,105,10,.2);border:1px solid rgba(163,105,10,.5);
  border-radius:var(--rs);padding:.6rem .8rem;color:#ffe9c2;font-size:.8rem;line-height:1.55}
.login-divider{border-color:rgba(255,255,255,.12);margin:1.3rem 0 1rem}
.login-admin-box{background:rgba(0,0,0,.26);border:1px solid rgba(255,255,255,.12);border-radius:var(--rs);
  padding:.85rem 1rem}
.login-admin-title{font-size:.76rem;font-weight:800;color:var(--lo-od);margin-bottom:.6rem;
  display:flex;align-items:center;gap:.4rem}
.login-admin-grp{font-size:.66rem;font-weight:800;letter-spacing:.1em;text-transform:uppercase;
  color:rgba(255,255,255,.42);margin:.6rem 0 .25rem}
.login-admin-row{display:flex;justify-content:space-between;gap:.7rem;font-size:.78rem;padding:.12rem 0}
.login-admin-key{color:rgba(255,255,255,.5)}
.login-admin-val{color:#fff;font-family:var(--fm);font-size:.74rem;cursor:pointer;text-decoration:underline dotted}
.login-admin-hint{font-size:.7rem;color:rgba(255,255,255,.5);margin-top:.7rem;line-height:1.5}
.liq-login-attribution{text-align:center;margin-top:1.4rem;font-size:.74rem;color:rgba(255,255,255,.42)}

/* ── 7. ACADEMY + LESSON ──────────────────────────────────── */
.acad-hd{display:flex;align-items:flex-start;justify-content:space-between;gap:1rem;flex-wrap:wrap;
  margin-bottom:1.6rem}
.acad-count{font-size:.95rem;color:var(--txs)}
.acad-count strong{font-family:var(--fd);font-size:1.5rem;color:var(--lp-ink)}
.acad-count-note{display:block;font-size:.78rem;color:var(--txm);max-width:34rem;margin-top:.2rem}
.acad-toggle{display:flex;gap:.3rem;background:var(--g100);padding:.25rem;border-radius:99px}
.acad-tog{border:none;background:none;padding:.4rem .9rem;border-radius:99px;font-size:.83rem;font-weight:700;
  color:var(--txm);cursor:pointer;display:flex;align-items:center;gap:.4rem}
.acad-tog.on{background:var(--wh);color:var(--lp-ink);box-shadow:var(--sh)}
.acad-lead{color:var(--txs);font-size:.94rem;max-width:52rem;margin-bottom:1.6rem}

.acad-stage{margin-bottom:2.4rem;border-radius:var(--rl);overflow:hidden;border:1px solid var(--bdr);
  background:var(--wh)}
.acad-stage-hd{display:flex;gap:1rem;align-items:flex-start;padding:1.2rem 1.4rem;
  background:color-mix(in srgb,var(--sk) 8%,transparent);border-left:5px solid var(--sk)}
.acad-stage-glyph{width:2.9rem;height:2.9rem;border-radius:var(--r);background:var(--sk);color:#fff;
  display:flex;align-items:center;justify-content:center;font-size:1.4rem;flex-shrink:0}
.acad-stage-meta{flex:1;min-width:0}
.acad-stage-meta h2{font-size:1.35rem;margin:0 0 .15rem}
.acad-stage-tag{font-size:.86rem;font-weight:700;
  color:color-mix(in srgb,var(--sk) var(--chip-ink-mix),var(--chip-ink-target));margin:0 0 .3rem}
.acad-stage-blurb{font-size:.85rem;color:var(--txm);margin:0;max-width:44rem;line-height:1.55}
.acad-stage-prog{text-align:right;flex-shrink:0}
.acad-stage-n{font-family:var(--fd);font-size:1.4rem;font-weight:700;color:color-mix(in srgb,var(--sk) var(--chip-ink-mix),var(--chip-ink-target))}
.acad-stage-bar{width:6rem;height:5px;background:var(--g200);border-radius:99px;overflow:hidden;margin-top:.3rem}
.acad-stage-bar div{height:100%;background:var(--sk);border-radius:99px}
.acad-mods{padding:.65rem}
.acad-mod{width:100%;display:flex;align-items:center;gap:.85rem;padding:.7rem .85rem;border-radius:var(--r);
  border:1px solid transparent;background:none;text-align:left;cursor:pointer;transition:all .16s}
.acad-mod:hover{background:var(--g100);border-color:var(--bdr)}
.acad-mod.done{background:color-mix(in srgb,var(--ok) 6%,transparent)}
.acad-mod.planned{opacity:.55;cursor:default}
.acad-mod-ico{font-size:1.1rem;flex-shrink:0;width:1.4rem;text-align:center}
.acad-mod-body{flex:1;min-width:0}
.acad-mod-title{display:block;font-weight:700;font-size:.92rem;color:var(--tx)}
.acad-mod-sub{display:block;font-size:.79rem;color:var(--txm);line-height:1.45}
.acad-mod-meta{display:flex;align-items:center;gap:.5rem;flex-shrink:0}
.acad-mod-dom{font-size:.68rem;font-weight:800;
  color:color-mix(in srgb,var(--ck) var(--chip-ink-mix),var(--chip-ink-target));white-space:nowrap}
.acad-mod-dur{font-size:.72rem;color:var(--txm);white-space:nowrap}
.acad-mod-planned{font-size:.7rem;font-weight:800;color:var(--txm);text-transform:uppercase;letter-spacing:.06em}

.acad-pillar{margin-bottom:2.6rem}
.acad-pillar-hd{display:flex;gap:1rem;align-items:flex-start;margin-bottom:1.1rem;padding:1rem 1.2rem;
  border-radius:var(--rl);background:color-mix(in srgb,var(--pk) 8%,transparent);border-left:5px solid var(--pk)}
.acad-pillar-glyph{width:2.7rem;height:2.7rem;border-radius:50%;background:var(--pk);color:#fff;
  display:flex;align-items:center;justify-content:center;font-size:1.3rem;flex-shrink:0}
.acad-pillar-hd h2{font-size:1.3rem;margin:0 0 .1rem}
.acad-pillar-tag{font-size:.85rem;font-weight:700;color:color-mix(in srgb,var(--pk) var(--chip-ink-mix),var(--chip-ink-target));margin:0 0 .25rem}
.acad-pillar-blurb{font-size:.84rem;color:var(--txm);margin:0;max-width:46rem}
.acad-track{margin-bottom:.6rem;border:1px solid var(--bdr);border-radius:var(--rl);background:var(--wh);
  overflow:hidden}
.acad-track.track-flash{box-shadow:0 0 0 3px color-mix(in srgb,var(--tk) 40%,transparent)}
.acad-track-hd{width:100%;display:flex;align-items:center;gap:.7rem;padding:.85rem 1rem;background:none;
  border:none;cursor:pointer;text-align:left}
.acad-track-hd:hover{background:var(--g100)}
.acad-track-glyph{font-size:1.05rem;color:var(--tk)}
.acad-track-name{font-weight:800;font-size:.95rem;color:var(--tx);flex:1}
.acad-track-count{font-size:.78rem;color:var(--txm);white-space:nowrap}
.acad-track-chev{font-size:.8rem;color:var(--txm);transition:transform .22s}
.acad-track-chev.open{transform:rotate(180deg)}
.acad-track-body{display:none;border-top:1px solid var(--bdr)}
.acad-track-body.open{display:block}
.acad-track-blurb{padding:.85rem 1rem 0;font-size:.86rem;color:var(--txs);margin:0}
.acad-track-scope{padding:.5rem 1rem 0;font-size:.79rem;color:var(--txm);margin:0;font-style:italic}

/* ── LESSON ── */
.mod-hero-sub{color:rgba(255,255,255,.72);font-size:.95rem;margin:0}
.mod-tag{display:inline-flex;align-items:center;gap:.35rem;padding:.2rem .6rem;border-radius:99px;
  background:rgba(255,255,255,.13);color:#fff;font-size:.74rem;font-weight:700}
.mod-tag.plain{background:rgba(255,255,255,.08);color:rgba(255,255,255,.75)}
.mod-tag.warn{background:rgba(163,105,10,.3);color:#ffe0aa}
.bm-btn-hero{background:rgba(255,255,255,.12);border:1px solid rgba(255,255,255,.22);color:#fff;
  border-radius:var(--rs);padding:.4rem .8rem;font-size:.8rem;font-weight:700;cursor:pointer;
  display:flex;align-items:center;gap:.4rem}
.mod-tabs{display:flex;gap:.35rem;background:var(--g100);padding:.3rem;border-radius:var(--r);
  margin-bottom:1.4rem;flex-wrap:wrap}
.mod-tab{flex:1;min-width:8rem;border:none;background:none;padding:.6rem .9rem;border-radius:var(--rs);
  font-size:.87rem;font-weight:700;color:var(--txm);cursor:pointer;display:flex;align-items:center;
  justify-content:center;gap:.4rem}
.mod-tab.active{background:var(--wh);color:var(--lp-ink);box-shadow:var(--sh)}
.mod-panel{display:none}.mod-panel.active{display:block}

.lsn-sec{background:var(--wh);border:1px solid var(--bdr);border-radius:var(--rl);padding:1.6rem 1.8rem;
  margin-bottom:1.2rem}
.lsn-h{font-size:1.3rem;margin-bottom:.85rem}
.lsn-body{font-size:1rem;line-height:1.75;color:var(--txs)}
.lsn-body p{margin-bottom:.9rem}
.lsn-body ul{margin-bottom:.9rem;padding-left:1.3rem}
.lsn-body li{margin-bottom:.4rem}
.lsn-body code{background:var(--g100);padding:.1rem .35rem;border-radius:4px;color:var(--lp-m)}
.lesson-path,.lesson-chain{background:var(--lp-t);border-left:3px solid var(--lp-m);padding:.7rem 1rem;
  border-radius:0 var(--rs) var(--rs) 0;overflow-x:auto}
.lesson-principle{background:var(--lo-l);border-left:4px solid var(--lo);padding:.9rem 1.1rem;
  border-radius:0 var(--rs) var(--rs) 0;font-weight:700;font-size:1.02rem;color:var(--lo-h)}
.lsn-table{width:100%;border-collapse:collapse;font-size:.88rem;margin-bottom:1rem;display:block;overflow-x:auto}
.lsn-table th,.lsn-table td{border:1px solid var(--bdr);padding:.5rem .7rem;text-align:left;vertical-align:top}
.lsn-table thead th{background:var(--g100);font-weight:800;font-size:.8rem;color:var(--txm)}
.lsn-table tbody th{background:var(--lp-t);font-weight:800;white-space:nowrap;color:var(--lp-ink)}
.lesson-badpair{display:flex;gap:.6rem;flex-wrap:wrap;margin-bottom:.7rem}
.lp-bad,.lp-good{flex:1;min-width:14rem;padding:.5rem .8rem;border-radius:var(--rs);font-size:.87rem}
.lp-bad{background:var(--er-l);color:var(--er-bt)}
.lp-good{background:var(--ok-l);color:var(--ok-bt)}
.lsn-take{display:flex;gap:.7rem;margin-top:1.1rem;padding:.85rem 1rem;background:var(--lo-p);
  border-radius:var(--r);border-left:4px solid var(--lo);font-size:.92rem;color:var(--txs);line-height:1.6}
.lsn-take i{color:var(--lo);font-size:1rem;flex-shrink:0;margin-top:.15rem}
.lsn-take-lbl{display:block;font-size:.66rem;font-weight:800;letter-spacing:.11em;text-transform:uppercase;
  color:var(--lo);margin-bottom:.2rem}
.lsn-scope{display:flex;gap:.7rem;padding:.85rem 1.1rem;background:var(--g100);border-radius:var(--r);
  font-size:.86rem;color:var(--txm);margin-bottom:1.2rem}
.lsn-scope i{color:var(--lp-m);flex-shrink:0;margin-top:.15rem}
.lsn-next{margin-top:.5rem}
.lsn-done{display:inline-flex;align-items:center;gap:.5rem;padding:.6rem 1.1rem;background:var(--ok-l);
  color:var(--ok-bt);border-radius:var(--rs);font-weight:700;font-size:.9rem}

.scn{background:var(--wh);border:1px solid var(--bdr);border-radius:var(--rl);padding:1.6rem 1.8rem}
.scn-setup{display:flex;gap:.8rem;background:var(--lp-t);border-radius:var(--r);padding:1rem 1.2rem;
  margin-bottom:1.2rem;font-size:.95rem;line-height:1.7;color:var(--txs)}
.scn-setup i{font-size:1.2rem;color:var(--lp-m);flex-shrink:0}
.scn-q{font-size:1.15rem;margin-bottom:1rem}
.scn-opts{display:flex;flex-direction:column;gap:.6rem}
.scn-opt{text-align:left;background:var(--wh);border:2px solid var(--bdr);border-radius:var(--r);
  padding:.9rem 1.1rem;cursor:pointer;transition:all .18s;width:100%}
.scn-opt:hover:not(:disabled){border-color:var(--lo);background:var(--lo-p)}
.scn-opt:disabled{cursor:default}
.scn-opt.dim{opacity:.68}
.scn-opt.right{border-color:var(--ok);background:var(--ok-l)}
.scn-opt.wrong{border-color:var(--wa);background:var(--wa-l)}
.scn-opt-t{display:block;font-weight:700;font-size:.94rem;color:var(--tx)}
.scn-fb{display:block;margin-top:.6rem;font-size:.88rem;line-height:1.65;color:var(--txs)}
.scn-after{margin-top:1.2rem;display:flex;flex-direction:column;gap:.7rem;align-items:flex-start}
.scn-after-note{font-size:.85rem;color:var(--txm);margin:0}

.qz{background:var(--wh);border:1px solid var(--bdr);border-radius:var(--rl);padding:1.6rem 1.8rem}
.qz-lead{color:var(--txm);font-size:.9rem;margin-bottom:1.3rem}
.qz-q{border:none;padding:0;margin:0 0 1.4rem}
.qz-q legend{font-weight:700;font-size:.98rem;color:var(--tx);margin-bottom:.6rem;display:flex;gap:.6rem;
  align-items:flex-start;float:none;width:100%}
.qz-n{width:1.6rem;height:1.6rem;border-radius:50%;background:var(--lp-t);color:var(--lp-m);
  display:inline-flex;align-items:center;justify-content:center;font-size:.8rem;font-weight:800;flex-shrink:0}
.qz-opt{display:flex;align-items:flex-start;gap:.6rem;padding:.6rem .85rem;border-radius:var(--rs);
  border:1px solid var(--bdr);cursor:pointer;margin-bottom:.4rem;font-size:.9rem;transition:all .15s}
.qz-opt:hover{border-color:var(--lo);background:var(--lo-p)}
.qz-opt.on{border-color:var(--lo);background:var(--lo-l)}
.qz-submit{margin-top:.6rem}
.qz-result{background:var(--wh);border:1px solid var(--bdr);border-radius:var(--rl);padding:1.6rem 1.8rem}
.qz-score{text-align:center;margin-bottom:1.5rem}
.qz-score-n{font-family:var(--fd);font-size:3.4rem;font-weight:700;color:var(--lp-ink)}
.qz-score-p{font-size:1.4rem;color:var(--txm)}
.qz-score-l{display:block;font-size:.85rem;color:var(--txm)}
.qz-rev{border-left:3px solid var(--wa);background:var(--wa-l);padding:.8rem 1rem;border-radius:0 var(--rs) var(--rs) 0;
  margin-bottom:.8rem}
.qz-rev.ok{border-color:var(--ok);background:var(--ok-l)}
.qz-rev-q{font-weight:700;font-size:.92rem;display:flex;gap:.5rem;align-items:flex-start;color:var(--tx)}
.qz-rev-yours,.qz-rev-right{font-size:.84rem;margin-top:.35rem;color:var(--txs)}
.qz-rev-right{font-weight:700}
.qz-rev-why{font-size:.86rem;color:var(--txs);margin:.45rem 0 0;line-height:1.6}

.lsn-complete{background:var(--wh);border:2px solid var(--ok);border-radius:var(--rl);padding:1.4rem 1.6rem;
  margin-top:1.4rem}
.lsn-complete-hd{display:flex;align-items:center;gap:.6rem;font-size:1.1rem;font-weight:800;color:var(--ok-bt);
  margin-bottom:.9rem}
.lsn-attain{background:color-mix(in srgb,var(--att) 8%,transparent);border-left:4px solid var(--att);
  border-radius:0 var(--r) var(--r) 0;padding:.9rem 1.1rem;font-size:.92rem;color:var(--txs)}
.lsn-attain p{font-size:.87rem;color:var(--txm);margin:.5rem 0 0;line-height:1.6}
.lsn-complete-next{display:flex;gap:.6rem;flex-wrap:wrap;margin-top:1.1rem}

/* ── 8. DASHBOARD ─────────────────────────────────────────── */
.hd-greet{display:flex;align-items:center;justify-content:space-between;gap:1rem;flex-wrap:wrap}
.hd-hello{font-size:clamp(1.5rem,3.4vw,2.1rem);margin:0}
.hd-sub{color:var(--txm);font-size:.92rem;margin:.15rem 0 0}
.hd-streak{display:flex;align-items:center;gap:.45rem;background:var(--lo-l);color:var(--lo-h);
  padding:.4rem .9rem;border-radius:99px;font-weight:800;font-size:.85rem}
.hd-first{background:linear-gradient(125deg,var(--lp),var(--lp-m));color:#fff;border-radius:var(--rl);
  padding:2rem 2.2rem;margin-bottom:1.6rem;box-shadow:var(--shm)}
.hd-first-mark{width:3.2rem;height:3.2rem;border-radius:var(--r);background:rgba(255,255,255,.15);
  display:flex;align-items:center;justify-content:center;font-size:1.6rem;color:var(--lo-od);margin-bottom:1rem}
.hd-first h2{color:#fff;font-size:1.6rem;margin-bottom:.5rem}
.hd-first p{color:rgba(255,255,255,.82);font-size:.96rem;max-width:44rem;line-height:1.7;margin-bottom:1.2rem}
.hd-first .btn-out{color:#fff;border-color:rgba(255,255,255,.35)}
.hd-first .btn-out:hover{border-color:#fff;color:#fff;background:rgba(255,255,255,.1)}
.hd-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,22rem),1fr));gap:1.1rem}
.hd-card{background:var(--wh);border:1px solid var(--bdr);border-radius:var(--rl);padding:1.3rem 1.4rem}
.hd-readiness{grid-column:span 2}
.hd-card-hd{display:flex;align-items:center;justify-content:space-between;gap:.7rem;margin-bottom:1rem}
.hd-card-hd h2{font-size:1.05rem;margin:0;display:flex;align-items:center;gap:.5rem}
.hd-card-hd h2 i{color:var(--lo)}
.hd-more{background:none;border:none;color:var(--lo);font-size:.8rem;font-weight:700;cursor:pointer;
  display:flex;align-items:center;gap:.3rem;white-space:nowrap}
.hd-rd-top{display:flex;align-items:center;justify-content:space-between;gap:1rem;margin-bottom:1rem;flex-wrap:wrap}
.hd-rd-band{display:flex;flex-direction:column;gap:.15rem}
.hd-rd-label{font-family:var(--fd);font-size:1.6rem;font-weight:700;color:color-mix(in srgb,var(--band) var(--chip-ink-mix),var(--chip-ink-target))}
.hd-rd-cover{font-size:.8rem;color:var(--txm)}
.hd-lattice{border-radius:var(--rs);background:var(--g100)}
.hd-rd-bars{display:flex;flex-direction:column;gap:.5rem}
.hd-rd-row{display:flex;align-items:center;gap:.7rem}
.hd-rd-name{font-size:.82rem;font-weight:700;color:var(--txs);width:6.5rem;flex-shrink:0}
.hd-empty{color:var(--txm);font-size:.88rem;margin:0}
.hd-lic-held{display:flex;align-items:center;gap:.9rem;padding:.9rem;background:var(--ok-l);border-radius:var(--r)}
.hd-lic-held i{font-size:2rem;color:var(--ok)}
.hd-lic-held strong{display:block;font-size:1.05rem;color:var(--ok-bt)}
.hd-lic-held span{font-size:.82rem;color:var(--txm)}
.hd-lic-prog{display:flex;gap:1rem;align-items:center}
.hd-lic-ring{width:4rem;height:4rem;border-radius:50%;border:4px solid var(--lo-l);display:flex;
  align-items:baseline;justify-content:center;flex-shrink:0;background:var(--lo-p)}
.hd-lic-ring span{font-family:var(--fd);font-size:1.6rem;font-weight:700;color:var(--lo)}
.hd-lic-ring small{font-size:.8rem;color:var(--txm)}
.hd-lic-body{flex:1;min-width:0;display:flex;flex-direction:column;gap:.25rem;align-items:flex-start}
.hd-lic-body strong{font-size:.98rem;color:var(--tx)}
.hd-lic-body span{font-size:.8rem;color:var(--txm)}
.hd-lic-next{font-style:italic}
.hd-recs,.hd-decay-list,.hd-assign-list{display:flex;flex-direction:column;gap:.5rem}
.hd-rec,.hd-decay-item,.hd-assign,.dg-rec,.rt-rec{width:100%;display:flex;align-items:center;gap:.7rem;
  padding:.7rem .85rem;border:1px solid var(--bdr);border-radius:var(--r);background:var(--wh);
  text-align:left;cursor:pointer;transition:all .16s}
.hd-rec:hover,.hd-decay-item:hover,.hd-assign:hover,.dg-rec:hover,.rt-rec:hover{
  border-color:var(--lo);background:var(--lo-p);transform:translateX(2px)}
.hd-rec-body,.dg-rec-body,.rt-rec-body{flex:1;min-width:0}
.hd-rec-title,.dg-rec-title,.rt-rec-title{display:block;font-weight:700;font-size:.9rem;color:var(--tx)}
.hd-rec-why,.dg-rec-why,.rt-rec-why{display:block;font-size:.78rem;color:var(--txm)}
.hd-alt{width:100%;margin-top:.7rem;background:none;border:1px dashed var(--bdr);border-radius:var(--r);
  padding:.55rem;font-size:.83rem;font-weight:700;color:var(--txm);cursor:pointer;display:flex;
  align-items:center;justify-content:center;gap:.45rem}
.hd-alt:hover{border-color:var(--lo);color:var(--lo)}
.hd-decay-lead{font-size:.83rem;color:var(--txm);margin-bottom:.8rem;line-height:1.6}
.hd-decay-age{font-size:.74rem;color:var(--wa-bt);font-weight:700;white-space:nowrap}
.hd-assign-title{font-weight:700;font-size:.88rem;flex:1}
.hd-assign-due{font-size:.76rem;color:var(--txm);white-space:nowrap}
.hd-acts{list-style:none;padding:0;margin:0}
.hd-acts li{display:flex;justify-content:space-between;gap:.7rem;padding:.4rem 0;
  border-bottom:1px solid var(--g100);font-size:.85rem}
.hd-acts li:last-child{border-bottom:none}
.hd-act-lbl{color:var(--txs)}
.hd-act-xp{color:var(--lo);font-weight:800;white-space:nowrap}
.edu-disclaimer-foot{font-size:.78rem;color:var(--txm);background:var(--g100);border-radius:var(--r);
  padding:.75rem 1rem;margin-bottom:1rem;line-height:1.6}
.liq-attribution{display:flex;gap:.5rem;flex-wrap:wrap;justify-content:center;font-size:.76rem;color:var(--txm)}
.liq-attr-mark{font-family:var(--fd);font-weight:700;color:var(--lp-ink)}
.liq-attr-sep{opacity:.4}

/* ── ABOUT ── */
.about{max-width:52rem}
.about-sec{margin-bottom:2rem}
.about-lead{font-size:1.05rem;color:var(--txs);line-height:1.75}
.about-family{display:flex;flex-direction:column;gap:.4rem;margin:1rem 0}
.about-fam{display:flex;align-items:center;gap:.8rem;padding:.6rem .9rem;border-radius:var(--r);
  border:1px solid var(--bdr);border-left:4px solid var(--fk);background:var(--wh);flex-wrap:wrap}
.about-fam.self{background:var(--lo-p);border-color:var(--lo)}
.about-fam-name{font-weight:800;font-size:.95rem;min-width:8rem}
.about-fam-domain{font-size:.85rem;color:var(--txm);flex:1}
.about-fam-you{font-size:.7rem;font-weight:800;text-transform:uppercase;letter-spacing:.08em;
  background:var(--lo);color:var(--lo-fg);padding:.15rem .55rem;border-radius:99px}
.about-fam-h{font-size:.74rem;color:var(--lo-h);font-style:italic;width:100%}
.about-note{font-size:.87rem;color:var(--txm);line-height:1.65}
.about-attr{display:flex;gap:.7rem;align-items:center;flex-wrap:wrap;padding-top:1.2rem;
  border-top:1px solid var(--bdr);font-size:.8rem;color:var(--txm)}
.about-mark{font-family:var(--fd);font-weight:700;color:var(--lp-ink)}

/* ── 9. LABS ──────────────────────────────────────────────── */
.lab-intro{max-width:54rem;margin-bottom:1.6rem}
.lab-intro p{color:var(--txs);font-size:.95rem;line-height:1.7}
.lab-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,20rem),1fr));gap:1.1rem}
.lab-card{background:var(--wh);border:1px solid var(--bdr);border-top:4px solid var(--lab);
  border-radius:var(--rl);padding:1.3rem 1.4rem;display:flex;flex-direction:column;transition:all .2s}
.lab-card:hover{box-shadow:var(--shl);transform:translateY(-3px)}
.lab-card-top{display:flex;align-items:center;justify-content:space-between;margin-bottom:.9rem}
.lab-glyph{width:2.6rem;height:2.6rem;border-radius:var(--r);background:color-mix(in srgb,var(--lab) 13%,transparent);
  color:color-mix(in srgb,var(--lab) var(--chip-ink-mix),var(--chip-ink-target));display:flex;align-items:center;justify-content:center;font-size:1.25rem}
.lab-best,.lab-new,.lab-demo{font-size:.72rem;font-weight:800;padding:.22rem .6rem;border-radius:99px}
.lab-best{background:var(--lo-l);color:var(--lo-h)}
.lab-new{background:var(--g100);color:var(--txm)}
.lab-demo{background:var(--ok-l);color:var(--ok-bt);display:inline-flex;align-items:center;gap:.3rem}
.lab-card h2{font-size:1.15rem;margin-bottom:.3rem}
.lab-tagline{font-size:.88rem;font-weight:700;
  color:color-mix(in srgb,var(--lab) var(--chip-ink-mix),var(--chip-ink-target));margin-bottom:.6rem}
.lab-blurb{font-size:.86rem;color:var(--txm);line-height:1.6;flex:1;margin-bottom:.8rem}
.lab-meta{display:flex;gap:.9rem;flex-wrap:wrap;font-size:.76rem;color:var(--txm);margin-bottom:.7rem}
.lab-screen-hint{color:var(--lp-ink)}
/* Bootstrap's default `code` colour (#d63384) measures 3.76:1 on the dark
   card. Nothing here had ever set one, so the framework default applied
   everywhere inline code appears outside a lesson body. */
code{color:var(--lp-ink)}
.lab-comps{display:flex;gap:.35rem;flex-wrap:wrap;margin-bottom:.9rem}
.lab-card-actions{display:flex;gap:.5rem;align-items:center}
.lab-save{width:2.3rem;height:2.3rem;border-radius:var(--rs);border:1px solid var(--bdr);background:var(--wh);
  color:var(--txm);cursor:pointer}
.lab-save.active{color:var(--lo);border-color:var(--lo)}
.lab-footer{margin-top:1.4rem;padding:1rem 1.2rem;background:var(--g100);border-radius:var(--r);
  font-size:.87rem;color:var(--txs);line-height:1.6}

.lab-chooser{max-width:58rem;margin:0 auto}
.lab-caution{display:flex;gap:.75rem;padding:.9rem 1.1rem;background:var(--inf-l);border-left:4px solid var(--inf);
  border-radius:0 var(--r) var(--r) 0;font-size:.87rem;color:var(--txs);line-height:1.6;margin-bottom:1.6rem}
.lab-caution i{color:var(--inf);flex-shrink:0;margin-top:.15rem}
.lab-chooser-h{font-size:1.5rem;margin-bottom:.4rem}
.lab-chooser-lead{color:var(--txm);font-size:.92rem;margin-bottom:1.4rem}
.lab-modes{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,16rem),1fr));gap:.9rem}
.lab-mode{background:var(--wh);border:2px solid var(--bdr);border-radius:var(--rl);padding:1.1rem 1.2rem;
  text-align:left;cursor:pointer;display:flex;flex-direction:column;gap:.5rem;transition:all .2s}
.lab-mode:hover{border-color:var(--lo);transform:translateY(-2px);box-shadow:var(--shm)}
.lab-mode.suggested{border-color:var(--lo);background:var(--lo-p)}
.lab-mode-top{display:flex;align-items:center;gap:.5rem}
.lab-mode-top i{font-size:1.1rem;color:var(--lo)}
.lab-mode-name{font-weight:800;font-size:1rem;color:var(--tx)}
.lab-mode-sug{font-size:.66rem;font-weight:800;text-transform:uppercase;letter-spacing:.07em;
  background:var(--lo);color:var(--lo-fg);padding:.12rem .45rem;border-radius:99px;margin-left:auto}
.lab-mode-tag{font-size:.84rem;font-weight:700;color:var(--txs)}
.lab-mode-blurb{font-size:.82rem;color:var(--txm);line-height:1.6;flex:1}
.lab-mode-ev{display:flex;align-items:center;gap:.4rem;font-size:.78rem;color:color-mix(in srgb,var(--att) var(--chip-ink-mix),var(--chip-ink-target));font-weight:600;
  padding-top:.5rem;border-top:1px dashed var(--bdr)}
.lab-history{margin-top:1.8rem}
.lab-history h2{font-size:1.05rem;margin-bottom:.7rem}
.lab-hist-row{display:flex;gap:1rem;align-items:center;padding:.5rem .8rem;background:var(--wh);
  border:1px solid var(--bdr);border-radius:var(--rs);margin-bottom:.35rem;font-size:.83rem;flex-wrap:wrap}
.lab-hist-mode{font-weight:700;color:var(--lp-ink);min-width:6rem}
.lab-hist-score{font-family:var(--fd);font-weight:700;font-size:1rem;color:var(--lo)}
.lab-hist-when,.lab-hist-hints,.lab-hist-rec{color:var(--txm);font-size:.78rem}
.lab-hist-rec{color:var(--ok-bt);font-weight:700}

/* ── The running lab: stage + objective panel ── */
.lab-run{display:grid;grid-template-columns:1fr 21rem;gap:1rem;align-items:start}
.lab-stage{min-height:34rem}
.lab-panel{background:var(--wh);border:1px solid var(--bdr);border-radius:var(--rl);padding:1.1rem;
  position:sticky;top:5.5rem;max-height:calc(100vh - 7rem);overflow-y:auto}
.lp-hd{display:flex;align-items:center;justify-content:space-between;gap:.6rem;margin-bottom:.9rem}
.lp-mode{display:inline-flex;align-items:center;gap:.35rem;font-size:.74rem;font-weight:800;
  background:color-mix(in srgb,var(--m) 13%,transparent);color:color-mix(in srgb,var(--m) var(--chip-ink-mix),var(--chip-ink-target));padding:.2rem .6rem;border-radius:99px}
.lp-count{font-size:.8rem;font-weight:800;color:var(--txm)}
.lp-brief{margin-bottom:1.1rem}
.lp-brief h2{font-size:1.05rem;margin-bottom:.5rem}
.lp-brief p{font-size:.86rem;color:var(--txs);line-height:1.65;margin-bottom:.6rem}
.lp-qs{font-size:.86rem;color:var(--txs);padding-left:1.2rem;line-height:1.6}
.lp-goals{list-style:none;padding:0;margin:0 0 1.1rem;counter-reset:g}
.lp-goal{display:flex;gap:.6rem;padding:.6rem 0;border-bottom:1px solid var(--g100)}
.lp-goal:last-child{border-bottom:none}
.lp-goal-tick i{font-size:1.05rem;color:var(--g400)}
.lp-goal.met .lp-goal-tick i{color:var(--ok)}
.lp-goal-body{flex:1;min-width:0}
.lp-goal-lbl{display:block;font-size:.88rem;font-weight:700;color:var(--tx);line-height:1.45}
.lp-goal.met .lp-goal-lbl{color:var(--txm);text-decoration:line-through;text-decoration-color:var(--g400)}
.lp-guide{margin-top:.4rem;font-size:.81rem;color:var(--txs);background:var(--lp-t);padding:.5rem .7rem;
  border-radius:var(--rs);line-height:1.55;display:flex;gap:.4rem}
.lp-guide i{color:var(--lp-m);flex-shrink:0}
.lp-guide kbd{background:var(--wh);border:1px solid var(--bdr);border-radius:3px;padding:0 .3rem;
  font-family:var(--fm);font-size:.72rem}
.lp-hint-shown{margin-top:.4rem;font-size:.81rem;color:var(--txs);background:var(--wa-l);padding:.5rem .7rem;
  border-radius:var(--rs);line-height:1.55;display:flex;gap:.4rem}
.lp-hint-shown i{color:var(--wa-bt);flex-shrink:0}
.lp-hint-btn{margin-top:.4rem;background:none;border:1px dashed var(--bdr);border-radius:var(--rs);
  padding:.3rem .65rem;font-size:.78rem;font-weight:700;color:var(--txm);cursor:pointer;
  display:inline-flex;align-items:center;gap:.35rem}
.lp-hint-btn:hover{border-color:var(--lo);color:var(--lo)}
.lp-hint-n{font-size:.7rem;opacity:.65}
.lp-safety{background:var(--ok-l);border-radius:var(--r);padding:.8rem .9rem;margin-bottom:1rem}
.lp-safety-hd{font-size:.8rem;font-weight:800;color:var(--ok-bt);display:flex;align-items:center;gap:.4rem;
  margin-bottom:.6rem}
.lp-safety-btns{display:flex;gap:.4rem;flex-wrap:wrap}
.lp-safe-btn{background:var(--wh);border:1px solid var(--bdr);border-radius:var(--rs);padding:.35rem .6rem;
  font-size:.76rem;font-weight:700;color:var(--txs);cursor:pointer;display:inline-flex;align-items:center;gap:.3rem}
.lp-safe-btn:hover:not(:disabled){border-color:var(--ok);color:var(--ok-bt)}
.lp-safe-btn:disabled{opacity:.4;cursor:not-allowed}
.lp-safe-btn kbd{font-family:var(--fm);font-size:.66rem;opacity:.6}
.lp-recovered{margin-top:.6rem;font-size:.77rem;color:var(--ok-bt);line-height:1.5}
.lp-finish{width:100%;justify-content:center}
.lp-finish-note{font-size:.74rem;color:var(--txm);margin:.5rem 0 0;line-height:1.5;text-align:center}

/* ── Safe-failure panel ── */
.lab-mistake{position:fixed;bottom:1rem;left:50%;transform:translateX(-50%) translateY(140%);
  z-index:var(--z-toast);width:min(34rem,calc(100vw - 2rem));transition:transform .32s cubic-bezier(.2,.8,.3,1)}
.lab-mistake.show{transform:translateX(-50%) translateY(0)}
.lm-card{background:var(--wh);border:2px solid var(--lp-m);border-radius:var(--rl);padding:1.1rem 1.3rem;
  box-shadow:var(--shl)}
.lm-hd{display:flex;align-items:center;gap:.5rem;font-weight:800;font-size:.9rem;color:var(--lp-ink);
  margin-bottom:.7rem}
.lm-hd i{color:var(--lp-m)}
.lm-x{margin-left:auto;background:none;border:none;color:var(--txm);cursor:pointer;font-size:.9rem}
.lm-what{font-weight:700;font-size:.95rem;color:var(--tx);margin-bottom:.5rem;line-height:1.5}
.lm-why{font-size:.87rem;color:var(--txs);line-height:1.65;margin-bottom:.7rem}
.lm-fix{font-size:.86rem;color:var(--ok-bt);background:var(--ok-l);border-radius:var(--rs);padding:.6rem .8rem;
  display:flex;gap:.5rem;line-height:1.6}
.lm-fix i{flex-shrink:0;margin-top:.15rem}
.lm-actions{display:flex;gap:.5rem;flex-wrap:wrap;margin-top:.9rem}
.lm-foot{font-size:.74rem;color:var(--txm);margin:.7rem 0 0;font-style:italic}

/* ── Debrief ── */
.lab-debrief{max-width:56rem;margin:0 auto}
.lab-debrief-head{display:flex;gap:1.4rem;align-items:flex-start;background:var(--wh);border:1px solid var(--bdr);
  border-top:5px solid var(--lab);border-radius:var(--rl);padding:1.6rem 1.8rem;margin-bottom:1.2rem;flex-wrap:wrap}
.lab-score{display:flex;align-items:baseline}
.lab-score-num{font-family:var(--fd);font-size:3.6rem;font-weight:700;color:color-mix(in srgb,var(--lab) var(--chip-ink-mix),var(--chip-ink-target));line-height:1}
.lab-score-pct{font-size:1.3rem;color:var(--txm)}
.lab-score-meta{flex:1;min-width:14rem}
.lab-band{font-size:.72rem;font-weight:800;letter-spacing:.12em;text-transform:uppercase;color:color-mix(in srgb,var(--lab) var(--chip-ink-mix),var(--chip-ink-target))}
.lab-score-meta p{font-size:.92rem;color:var(--txs);line-height:1.65;margin:.3rem 0 .6rem}
.lab-prev{font-size:.8rem;color:var(--txm);margin-bottom:.5rem}
.lab-xp{display:inline-flex;align-items:center;gap:.35rem;background:var(--lo-l);color:var(--lo-h);
  padding:.25rem .7rem;border-radius:99px;font-size:.8rem;font-weight:800}
.lab-attain{background:color-mix(in srgb,var(--att) 8%,transparent);border-left:4px solid var(--att);
  border-radius:0 var(--rl) var(--rl) 0;padding:1.1rem 1.3rem;margin-bottom:1.2rem}
.lab-attain-hd{font-size:1rem;color:color-mix(in srgb,var(--att) var(--chip-ink-mix),var(--chip-ink-target));display:flex;align-items:center;gap:.5rem;margin-bottom:.5rem}
.lab-attain p{font-size:.88rem;color:var(--txs);line-height:1.65;margin:0 0 .5rem}
.lab-attain-next{background:var(--wh);border-radius:var(--rs);padding:.6rem .8rem;font-size:.86rem!important}
.lab-breakdown,.lab-teaching,.lab-process,.lab-evidence,.lab-related{background:var(--wh);
  border:1px solid var(--bdr);border-radius:var(--rl);padding:1.4rem 1.6rem;margin-bottom:1.2rem}
.lab-breakdown h2,.lab-process h2,.lab-evidence h2,.lab-related h2{font-size:1.1rem;margin-bottom:.9rem}
.lab-bd-row{padding:.6rem 0;border-bottom:1px solid var(--g100)}
.lab-bd-row:last-child{border-bottom:none}
.lab-bd-top{display:flex;justify-content:space-between;gap:.7rem;align-items:center}
.lab-bd-lbl{font-size:.9rem;font-weight:700;color:var(--tx);display:flex;align-items:center;gap:.5rem}
.lab-bd-row.met .lab-bd-lbl i{color:var(--ok)}
.lab-bd-row.pen .lab-bd-lbl{color:var(--er-bt)}
.lab-bd-row.pen .lab-bd-lbl i{color:var(--er)}
.lab-bd-pts{font-size:.82rem;font-weight:800;color:var(--txm);white-space:nowrap}
.lab-bd-bar{height:5px;background:var(--g200);border-radius:99px;overflow:hidden;margin:.4rem 0 .3rem}
.lab-bd-bar div{height:100%;background:var(--lab);border-radius:99px}
.lab-bd-note{font-size:.84rem;color:var(--txs);line-height:1.6;margin:.3rem 0 0}
.lab-teaching h3{font-size:1.1rem;margin:1.1rem 0 .6rem}
.lab-teaching h3:first-child{margin-top:0}
.lab-teaching p{font-size:.92rem;color:var(--txs);line-height:1.75;margin-bottom:.8rem}
.db-list{font-size:.9rem;color:var(--txs);line-height:1.7;padding-left:1.2rem}
.db-list li{margin-bottom:.5rem}
.lab-process-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(6rem,1fr));gap:.7rem;margin-bottom:.9rem}
.lab-proc{text-align:center;padding:.8rem .5rem;background:var(--g100);border-radius:var(--r)}
.lab-proc.hi{background:var(--ok-l)}
.lab-proc-n{display:block;font-family:var(--fd);font-size:1.7rem;font-weight:700;color:var(--lp-ink)}
.lab-proc.hi .lab-proc-n{color:var(--ok-bt)}
.lab-proc-l{font-size:.74rem;color:var(--txm)}
.lab-process-note{font-size:.86rem;color:var(--txs);line-height:1.65;margin:0}
.lab-related-list{display:flex;flex-direction:column;gap:.4rem}
.lab-related-item{display:flex;align-items:center;gap:.6rem;padding:.6rem .8rem;border:1px solid var(--bdr);
  border-radius:var(--rs);background:var(--wh);cursor:pointer;font-size:.88rem;font-weight:700;color:var(--tx);
  text-align:left;width:100%}
.lab-related-item:hover{border-color:var(--lo);color:var(--lo)}
.lab-debrief-actions{display:flex;gap:.6rem;flex-wrap:wrap;justify-content:center}

/* ── 10. THE VIRTUAL COMPUTER ─────────────────────────────── */
.vos{display:flex;flex-direction:column;border-radius:var(--rl);overflow:hidden;border:1px solid var(--bdr);
  box-shadow:var(--shm);background:var(--lp-d);height:min(38rem,72vh);min-height:26rem}
.vos-screen{position:relative;flex:1;overflow:hidden}
.vos-wallpaper{position:absolute;inset:0;
  background:radial-gradient(ellipse 70% 90% at 20% 10%,rgba(81,58,176,.55),transparent 62%),
             radial-gradient(ellipse 60% 70% at 85% 90%,rgba(192,38,163,.28),transparent 60%),
             linear-gradient(140deg,#241a56,#181236)}
.vos-icons{position:absolute;top:.7rem;left:.7rem;display:flex;flex-direction:column;flex-wrap:wrap;
  gap:.25rem;max-height:calc(100% - 1.4rem);align-content:flex-start;z-index:2}
/* The list wrapper carries the semantics and none of the layout, so the grid
   still lays out the buttons directly. display:contents is exposed correctly by
   current engines when the element has an explicit non-generic role, which this
   one does; the accessibility tree is checked rather than assumed. */
.vos-icon-li{display:contents}
.vos-icon{width:5.6rem;padding:.5rem .3rem;border:1px solid transparent;border-radius:var(--rs);
  background:none;cursor:pointer;display:flex;flex-direction:column;align-items:center;gap:.25rem;color:#fff}
.vos-icon:hover{background:rgba(255,255,255,.1)}
.vos-icon.sel{background:rgba(192,38,163,.3);border-color:var(--lo-od)}
.vos-icon i{font-size:1.5rem;color:var(--lo-od)}
.vos-icon-bin i{color:rgba(255,255,255,.6)}
.vos-icon-lbl{font-size:.66rem;line-height:1.25;text-align:center;word-break:break-word;
  text-shadow:0 1px 3px rgba(0,0,0,.7);max-height:2.6em;overflow:hidden}
.vos-windows{position:absolute;inset:0;pointer-events:none}
.vos-win{position:absolute;background:var(--wh);border-radius:var(--r);box-shadow:0 12px 44px rgba(0,0,0,.45);
  display:flex;flex-direction:column;overflow:hidden;pointer-events:auto;border:1px solid rgba(0,0,0,.25)}
.vos-win.max{border-radius:0}
.vos-win-bar{display:flex;align-items:center;gap:.5rem;padding:.45rem .6rem;background:var(--app,var(--lp));
  color:#fff;cursor:move;user-select:none;flex-shrink:0}
.vos-win-title{font-size:.82rem;font-weight:700;flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.vos-win-btns{display:flex;gap:.15rem}
.vos-win-btns button{width:1.5rem;height:1.5rem;border:none;background:rgba(255,255,255,.14);color:#fff;
  border-radius:4px;cursor:pointer;font-size:.68rem;display:flex;align-items:center;justify-content:center}
.vos-win-btns button:hover{background:rgba(255,255,255,.3)}
.vos-win-body{flex:1;overflow:auto;background:var(--wh)}
.vos-bar{display:flex;align-items:center;gap:.5rem;padding:.35rem .5rem;background:rgba(0,0,0,.4);
  backdrop-filter:blur(8px);border-top:1px solid rgba(255,255,255,.1);flex-shrink:0;z-index:var(--z-vos-bar)}
.vos-launch{display:flex;align-items:center;gap:.4rem;background:var(--lo);border:none;color:var(--lo-fg);
  border-radius:var(--rs);padding:.35rem .75rem;font-size:.8rem;font-weight:700;cursor:pointer}
.vos-tasks{display:flex;gap:.3rem;flex:1;overflow-x:auto}
.vos-task{display:flex;align-items:center;gap:.35rem;background:rgba(255,255,255,.09);border:none;
  border-bottom:2px solid transparent;color:rgba(255,255,255,.85);border-radius:var(--rs);
  padding:.3rem .7rem;font-size:.76rem;font-weight:600;cursor:pointer;white-space:nowrap}
.vos-task.active{background:rgba(255,255,255,.2);border-bottom-color:var(--app);color:#fff}
.vos-task.min{opacity:.6}
.vos-tray{display:flex;align-items:center;gap:.5rem}
.vos-tray-btn{background:none;border:none;color:rgba(255,255,255,.75);cursor:pointer;font-size:.95rem}
.vos-clock{font-size:.78rem;font-weight:700;color:rgba(255,255,255,.85);font-family:var(--fm)}
.vos-launcher{position:absolute;bottom:2.6rem;left:.5rem;width:min(24rem,calc(100% - 1rem));
  background:var(--lp);border:1px solid rgba(255,255,255,.16);border-radius:var(--r);box-shadow:var(--shl);
  padding:.7rem;display:none;z-index:var(--z-modal)}
.vos-launcher.open{display:block}
.vos-launcher-hd{font-size:.66rem;font-weight:800;letter-spacing:.12em;text-transform:uppercase;
  color:rgba(255,255,255,.5);padding:0 .3rem .5rem}
.vos-launcher-grid{display:grid;grid-template-columns:1fr;gap:.25rem;max-height:16rem;overflow-y:auto}
.vos-launch-item{display:grid;grid-template-columns:auto 1fr;grid-template-rows:auto auto;gap:.1rem .6rem;
  background:none;border:none;border-radius:var(--rs);padding:.5rem .6rem;cursor:pointer;text-align:left;color:#fff}
.vos-launch-item:hover{background:rgba(255,255,255,.12)}
.vos-launch-item i{grid-row:span 2;font-size:1.2rem;color:var(--app);align-self:center}
.vos-launch-name{font-size:.85rem;font-weight:700}
.vos-launch-desc{font-size:.73rem;color:rgba(255,255,255,.6);line-height:1.4}
.vos-notifs{position:absolute;top:.7rem;right:.7rem;display:flex;flex-direction:column;gap:.4rem;
  width:min(16rem,60%);z-index:var(--z-vos-win)}
.vos-notif{display:flex;gap:.5rem;align-items:flex-start;background:rgba(36,26,86,.95);color:#fff;
  border-left:3px solid var(--lo-od);border-radius:var(--rs);padding:.55rem .7rem;font-size:.78rem;
  line-height:1.45;box-shadow:var(--shm);animation:toastIn .3s ease}
.vos-notif.out{animation:toastOut .35s ease forwards}
.vos-notif i{color:var(--lo-od);flex-shrink:0;margin-top:.1rem}
.vos-modal{position:absolute;inset:0;background:rgba(24,18,54,.6);display:flex;align-items:center;
  justify-content:center;padding:1rem;z-index:var(--z-modal);backdrop-filter:blur(2px)}
.vos-modal-card{background:var(--wh);border-radius:var(--rl);width:min(30rem,100%);max-height:90%;
  overflow:auto;box-shadow:var(--shl)}
.vos-modal-hd{display:flex;align-items:center;justify-content:space-between;padding:.8rem 1rem;
  background:var(--lp);color:#fff;font-weight:700;font-size:.92rem;position:sticky;top:0}
.vos-modal-hd button{background:none;border:none;color:#fff;cursor:pointer}
.vos-modal-body{padding:1.1rem 1.2rem}
.vos-dlg-lead{font-size:.88rem;color:var(--txs);line-height:1.65;margin-bottom:.9rem}
.vos-dlg-lbl{display:block;font-size:.76rem;font-weight:800;text-transform:uppercase;letter-spacing:.06em;
  color:var(--txm);margin-bottom:.3rem}
.vos-dlg-inp{width:100%;border:1px solid var(--bdr);border-radius:var(--rs);padding:.55rem .75rem;
  font-size:.9rem;margin-bottom:.8rem;font-family:inherit}
.vos-dlg-help{font-size:.78rem;color:var(--txm);margin:-.5rem 0 .8rem}
.vos-dlg-actions{display:flex;gap:.5rem;flex-wrap:wrap;margin-top:.5rem}
.vos-dlg-foot{font-size:.78rem;color:var(--txm);margin:.8rem 0 0;display:flex;gap:.4rem;line-height:1.55}
.vos-dlg-list{font-size:.87rem;color:var(--txs);padding-left:1.2rem;margin-bottom:.9rem}
.vos-dest-list{display:flex;flex-direction:column;gap:.3rem;max-height:16rem;overflow-y:auto}
.vos-dest{display:flex;align-items:center;gap:.6rem;padding:.55rem .7rem;border:1px solid var(--bdr);
  border-radius:var(--rs);background:var(--wh);cursor:pointer;text-align:left;width:100%}
.vos-dest:hover{border-color:var(--lo);background:var(--lo-p)}
.vos-dest i{color:var(--lp-m)}
.vos-dest-name{font-weight:700;font-size:.87rem;color:var(--tx)}
.vos-dest-path{font-size:.72rem;color:var(--txm);margin-left:auto;font-family:var(--fm)}
.vos-dlg-choice{display:flex;flex-direction:column;gap:.5rem;margin-top:.6rem}
.vos-choice{text-align:left;padding:.8rem 1rem;border-radius:var(--r);border:2px solid var(--bdr);
  background:var(--wh);cursor:pointer}
.vos-choice strong{display:block;font-size:.92rem;color:var(--tx);margin-bottom:.2rem}
.vos-choice span{font-size:.82rem;color:var(--txm);line-height:1.55}
.vos-choice.ok:hover{border-color:var(--ok)}
.vos-choice.risk:hover{border-color:var(--wa)}
.vos-keys{width:100%;font-size:.85rem}
.vos-keys th{text-align:left;padding:.35rem .6rem .35rem 0;width:9rem}
.vos-keys td{padding:.35rem 0;color:var(--txs)}
.vos-keys kbd{background:var(--g100);border:1px solid var(--bdr);border-radius:4px;padding:.1rem .4rem;
  font-family:var(--fm);font-size:.76rem}

/* Files */
.fx{display:flex;height:100%;font-size:.87rem}
.fx-side{width:9.5rem;flex-shrink:0;background:var(--g100);border-right:1px solid var(--bdr);padding:.5rem .35rem;
  display:flex;flex-direction:column;gap:.15rem;overflow-y:auto}
.fx-place{display:flex;align-items:center;gap:.5rem;padding:.42rem .55rem;border-radius:var(--rs);border:none;
  background:none;font-size:.8rem;font-weight:600;color:var(--txs);cursor:pointer;text-align:left;width:100%}
.fx-place:hover{background:var(--wh)}
.fx-place.active{background:var(--lo-l);color:var(--lo-h);font-weight:800}
.fx-main{flex:1;min-width:0;display:flex;flex-direction:column}
.fx-toolbar{padding:.5rem .7rem;border-bottom:1px solid var(--bdr);display:flex;flex-direction:column;gap:.5rem}
.fx-crumbs{display:flex;align-items:center;gap:.2rem;flex-wrap:wrap;font-size:.8rem}
.fx-crumb{background:none;border:none;color:var(--lp-m);font-weight:700;cursor:pointer;padding:.1rem .2rem;
  border-radius:3px}
.fx-crumb:hover{background:var(--lp-t)}
.fx-crumb-sep{color:var(--g400)}
.fx-tools{display:flex;gap:.35rem;flex-wrap:wrap}
.fx-tool{display:inline-flex;align-items:center;gap:.35rem;padding:.3rem .6rem;border:1px solid var(--bdr);
  border-radius:var(--rs);background:var(--wh);font-size:.76rem;font-weight:700;color:var(--txs);cursor:pointer}
.fx-tool:hover:not(:disabled){border-color:var(--lo);color:var(--lo)}
.fx-tool:disabled{opacity:.4;cursor:not-allowed}
.fx-tool.danger:hover:not(:disabled){border-color:var(--er);color:var(--er-bt)}
.fx-tool kbd{font-family:var(--fm);font-size:.66rem;opacity:.55;margin-left:.15rem}
.fx-binnote{padding:.55rem .8rem;background:var(--ok-l);color:var(--ok-bt);font-size:.79rem;line-height:1.5}
.fx-list{flex:1;overflow-y:auto}
.fx-head,.fx-row{display:grid;grid-template-columns:1fr 7rem 5rem;gap:.6rem;padding:.4rem .8rem;
  align-items:center}
.fx-head{font-size:.7rem;font-weight:800;text-transform:uppercase;letter-spacing:.06em;color:var(--txm);
  border-bottom:1px solid var(--bdr);position:sticky;top:0;background:var(--wh);z-index:1}
.fx-row{border-bottom:1px solid var(--g100);cursor:pointer}
.fx-row:hover{background:var(--g100)}
.fx-row.sel{background:var(--lo-l)}
.fx-name{display:flex;align-items:center;gap:.5rem;min-width:0;font-weight:600;color:var(--tx)}
.fx-name i:first-child{color:var(--lp-m);flex-shrink:0}
.fx-shared{color:var(--lo);font-size:.75rem}
.fx-ro{color:var(--txm);font-size:.72rem}
.fx-mod,.fx-type{font-size:.76rem;color:var(--txm)}
.fx-empty{padding:2rem;text-align:center;color:var(--txm);font-size:.85rem}

/* Mail */
.mx{display:flex;height:100%;font-size:.87rem}
.mx-list{width:16rem;flex-shrink:0;border-right:1px solid var(--bdr);overflow-y:auto;background:var(--g100)}
.mx-item{display:grid;grid-template-columns:1fr auto;gap:.15rem .5rem;width:100%;text-align:left;
  padding:.6rem .7rem;border:none;border-bottom:1px solid var(--bdr);background:none;cursor:pointer}
.mx-item:hover{background:var(--wh)}
.mx-item.active{background:var(--wh);box-shadow:inset 3px 0 0 var(--lo)}
.mx-from{font-weight:700;font-size:.82rem;color:var(--tx);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.mx-item.unread .mx-from::before{content:'';display:inline-block;width:.4rem;height:.4rem;border-radius:50%;
  background:var(--lo);margin-right:.35rem;vertical-align:middle}
.mx-time{font-size:.7rem;color:var(--txm);white-space:nowrap}
.mx-subj{grid-column:1/-1;font-size:.8rem;color:var(--txs);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.mx-prev{grid-column:1/-1;font-size:.73rem;color:var(--txm);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.mx-clip{position:absolute;right:.6rem;bottom:.6rem;font-size:.7rem;color:var(--txm)}
.mx-verdict{grid-column:1/-1;justify-self:start;font-size:.66rem;font-weight:800;padding:.1rem .4rem;
  border-radius:99px;margin-top:.15rem}
.v-safe{background:var(--ok-l);color:var(--ok-bt)}
.v-verify{background:var(--inf-l);color:var(--inf)}
.v-suspicious{background:var(--wa-l);color:var(--wa-bt)}
.v-report{background:var(--lo-l);color:var(--lo-h)}
.mx-read{flex:1;min-width:0;overflow-y:auto;padding:1rem 1.2rem}
.mx-none{display:flex;align-items:center;justify-content:center;color:var(--txm)}
.mx-hd h3{font-size:1.05rem;margin-bottom:.5rem}
.mx-meta{display:flex;align-items:center;gap:.7rem;flex-wrap:wrap;margin-bottom:.9rem;
  padding-bottom:.8rem;border-bottom:1px solid var(--bdr)}
.mx-sender{display:flex;align-items:center;gap:.4rem;background:var(--g100);border:1px dashed var(--bdr);
  border-radius:var(--rs);padding:.3rem .6rem;font-size:.8rem;font-weight:700;color:var(--txs);cursor:pointer}
.mx-sender:hover{border-color:var(--lo)}
.mx-sender.checked{border-style:solid;border-color:var(--lo);background:var(--lo-p)}
.mx-real{font-family:var(--fm);font-size:.74rem;color:var(--lo-h);font-weight:600}
.mx-hint{font-size:.7rem;color:var(--txm);font-style:italic;font-weight:400}
.mx-when{font-size:.76rem;color:var(--txm)}
.mx-body{font-size:.88rem;line-height:1.7;color:var(--txs)}
.mx-body p{margin-bottom:.7rem}
.mx-qr{font-family:var(--fm);font-size:.9rem;letter-spacing:.2em;line-height:1.1;color:var(--tx)}
.mx-links{margin-top:1rem;padding:.7rem .85rem;background:var(--g100);border-radius:var(--r)}
.mx-links-hd{font-size:.7rem;font-weight:800;text-transform:uppercase;letter-spacing:.07em;color:var(--txm);
  margin-bottom:.45rem}
.mx-link{display:flex;align-items:center;gap:.4rem;flex-wrap:wrap;width:100%;text-align:left;
  background:var(--wh);border:1px dashed var(--bdr);border-radius:var(--rs);padding:.4rem .6rem;
  font-size:.8rem;cursor:pointer;margin-bottom:.3rem}
.mx-link:hover{border-color:var(--lo)}
.mx-link.checked{border-style:solid;border-color:var(--lo)}
.mx-link-text{font-weight:700;color:var(--lp-m)}
.mx-link-real{font-family:var(--fm);font-size:.73rem;color:var(--er-bt);width:100%;word-break:break-all}
.mx-attach{display:flex;align-items:center;gap:.6rem;margin-top:.9rem;padding:.6rem .8rem;
  border:1px solid var(--bdr);border-radius:var(--r);background:var(--g100)}
.mx-att-name{font-size:.82rem;font-weight:700;flex:1;font-family:var(--fm)}
.mx-actions{display:flex;gap:.4rem;flex-wrap:wrap;margin-top:1.2rem;padding-top:1rem;border-top:1px solid var(--bdr)}
.mx-del{--v:var(--er);margin-left:auto}
.mx-act{display:inline-flex;align-items:center;gap:.35rem;padding:.45rem .8rem;border-radius:var(--rs);
  border:2px solid color-mix(in srgb,var(--v) 30%,transparent);
  background:color-mix(in srgb,var(--v) 8%,transparent);color:var(--v);
  font-size:.8rem;font-weight:700;cursor:pointer}
.mx-act:hover{border-color:var(--v)}
.mx-act.on{background:var(--v);color:#fff}

/* Sheets */
.sx{display:flex;flex-direction:column;height:100%;font-size:.84rem}
.sx-bar{display:flex;align-items:center;gap:.4rem;padding:.45rem .7rem;border-bottom:1px solid var(--bdr);
  flex-wrap:wrap;flex-shrink:0}
.sx-name{font-weight:800;font-size:.83rem;color:var(--lp-ink);display:flex;align-items:center;gap:.4rem;margin-right:.4rem}
.sx-tool{display:inline-flex;align-items:center;gap:.3rem;padding:.28rem .6rem;border:1px solid var(--bdr);
  border-radius:var(--rs);background:var(--wh);font-size:.76rem;font-weight:700;color:var(--txs);cursor:pointer}
.sx-tool:hover{border-color:var(--lo);color:var(--lo)}
.sx-tool.warn{border-color:var(--wa);color:var(--wa-bt);background:var(--wa-l)}
.sx-filterbar{padding:.45rem .8rem;background:var(--wa-l);color:var(--wa-bt);font-size:.79rem;line-height:1.5}
/* Printing. Reuses .dx-iss-state for the verdict rather than defining a second
   warning look, so the "this is out of date" and "this is 117 pages" callouts
   read as the same kind of thing — which they are. */
.hx-chan-item{margin-bottom:1rem}
.hx-chan-item:last-child{margin-bottom:0}
.hx-chan .dx-iss-state{margin-top:.6rem;margin-bottom:0}
.lab-xp-note{font-weight:500;opacity:.8}
/* A replay that earns nothing is reported as a practice run, not as zero. */
.lab-xp-none{background:var(--inf-l);color:var(--tx);font-weight:600}
.sx-print{padding:.7rem .8rem;border-bottom:1px solid var(--bdr);background:var(--bg)}
.sx-print-row{display:flex;align-items:center;gap:.6rem;flex-wrap:wrap;margin-bottom:.6rem}
.sx-print-row:last-child{margin-bottom:0}
.sx-print .dx-iss-state{margin-bottom:.6rem}
.sx-scrambled{padding:.55rem .8rem;background:var(--er-l);color:var(--er-bt);font-size:.8rem;line-height:1.55}
.sx-scroll{flex:1;overflow:auto}
.sx-table{border-collapse:collapse;width:100%;font-size:.79rem}
.sx-table th,.sx-table td{border:1px solid var(--bdr);padding:.25rem .5rem;white-space:nowrap}
.sx-table thead th{background:var(--g100);position:sticky;top:0;font-weight:700;text-align:left;z-index:1}
.sx-col{display:inline-block;font-family:var(--fm);font-size:.68rem;color:var(--txm);margin-right:.35rem}
.sx-rn{background:var(--g100);color:var(--txm);font-family:var(--fm);font-size:.7rem;text-align:right;
  font-weight:400;position:sticky;left:0}
.sx-num{text-align:right;font-family:var(--fm);font-size:.76rem}
.sx-txt{text-align:left}
.sx-fi{color:var(--wa-bt);margin-left:.25rem;font-size:.68rem}
.sx-si{color:var(--lo);margin-left:.25rem;font-size:.68rem}
.sx-frow td{background:var(--lo-p)}
.sx-f{font-family:var(--fm);font-size:.74rem;color:var(--lp-m)}
.sx-fv{font-weight:800;color:var(--lo-h);margin-left:.7rem}
.sx-status{display:flex;gap:1rem;padding:.4rem .8rem;border-top:1px solid var(--bdr);font-size:.76rem;
  color:var(--txm);flex-shrink:0}
.sx-ok{color:var(--ok-bt)}.sx-bad{color:var(--er-bt);font-weight:700}

/* Documents + sharing */
.dx{display:flex;height:100%;font-size:.87rem}
.dx-side{width:12rem;flex-shrink:0;background:var(--g100);border-right:1px solid var(--bdr);
  padding:.5rem .35rem;overflow-y:auto}
.dx-doc{display:flex;align-items:center;gap:.45rem;width:100%;text-align:left;padding:.45rem .55rem;
  border:none;background:none;border-radius:var(--rs);font-size:.79rem;font-weight:600;color:var(--txs);
  cursor:pointer;margin-bottom:.15rem}
.dx-doc:hover{background:var(--wh)}
.dx-doc.active{background:var(--lo-l);color:var(--lo-h)}
.dx-doc span{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.dx-sh{color:var(--lo);font-size:.7rem}
.dx-main{flex:1;min-width:0;overflow-y:auto;padding:1rem 1.2rem}
.dx-hd{display:flex;align-items:center;gap:.7rem;flex-wrap:wrap;margin-bottom:.7rem}
.dx-hd h3{font-size:1.02rem;margin:0}
.dx-sens{font-size:.72rem;font-weight:800;background:var(--er-l);color:var(--er-bt);padding:.15rem .55rem;
  border-radius:99px;display:inline-flex;align-items:center;gap:.3rem}
.dx-preview{padding:.8rem 1rem;background:var(--g100);border-radius:var(--r);margin-bottom:.8rem}
.dx-plain{font-size:.84rem;color:var(--txm);margin:0;line-height:1.6}
.dx-brief{display:flex;gap:.6rem;padding:.7rem .9rem;background:var(--inf-l);border-left:3px solid var(--inf);
  border-radius:0 var(--rs) var(--rs) 0;font-size:.84rem;color:var(--txs);line-height:1.6;margin-bottom:1rem}
.dx-brief i{color:var(--inf);flex-shrink:0;margin-top:.1rem}
/* Issuing a document — export, form check, signature. Matches .dx-share's
   shape deliberately: it is the same kind of panel doing the same kind of job,
   and a second visual language here would read as a different application. */
.dx-issue{margin-top:1rem;padding-top:.9rem;border-top:1px solid var(--bdr)}
.dx-issue h4{font-size:.92rem;margin-bottom:.7rem;display:flex;align-items:center;gap:.4rem}
.dx-iss-row{display:flex;align-items:center;gap:.7rem;flex-wrap:wrap;margin-bottom:.6rem}
.dx-iss-note{font-size:.78rem;color:var(--txm);flex:1;min-width:12rem}
.dx-iss-state{display:flex;gap:.55rem;align-items:flex-start;padding:.6rem .8rem;border-radius:var(--rs);
  font-size:.82rem;line-height:1.5;margin-bottom:.7rem;
  background:var(--ok-l);border-left:3px solid var(--ok);color:var(--tx)}
.dx-iss-state i{color:var(--ok);flex-shrink:0;margin-top:.1rem}
.dx-iss-state.stale{background:var(--wa-l);border-left-color:var(--wa)}
.dx-iss-state.stale i{color:var(--wa)}
.dx-sign{margin-top:.2rem}
.dx-share h4{font-size:.92rem;margin-bottom:.7rem;display:flex;align-items:center;gap:.4rem}
.dx-dials{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,13rem),1fr));gap:.8rem}
.dx-dial{border:1px solid var(--bdr);border-radius:var(--r);padding:.6rem .7rem;margin:0}
.dx-dial legend{font-size:.7rem;font-weight:800;text-transform:uppercase;letter-spacing:.07em;color:var(--txm);
  padding:0 .3rem;width:auto;float:none}
.dx-opt{display:block;padding:.45rem .55rem;border-radius:var(--rs);border:1px solid transparent;cursor:pointer;
  margin-bottom:.2rem}
.dx-opt:hover{background:var(--g100)}
.dx-opt.on{background:var(--lo-p);border-color:var(--lo)}
.dx-opt input{margin-right:.4rem}
.dx-opt-lbl{font-weight:700;font-size:.82rem;color:var(--tx)}
.dx-opt-note{display:block;font-size:.73rem;color:var(--txm);line-height:1.45;margin-left:1.2rem}
.dx-extras{margin-top:.7rem;display:flex;flex-direction:column;gap:.5rem}
.dx-check{font-size:.82rem;font-weight:700;color:var(--txs);cursor:pointer}
.dx-check-note{display:block;font-size:.73rem;color:var(--txm);font-weight:400;line-height:1.45;margin-left:1.35rem}
.dx-current{margin-top:.9rem;padding:.55rem .8rem;background:var(--ok-l);color:var(--ok-bt);border-radius:var(--rs);
  font-size:.81rem;display:flex;align-items:center;gap:.4rem;flex-wrap:wrap}
.dx-current.dx-none{background:var(--g100);color:var(--txm)}

/* Writer — structure, not appearance */
.wx{display:flex;flex-direction:column;height:100%;font-size:.87rem}
.wx-bar{display:flex;align-items:center;gap:.4rem;padding:.45rem .7rem;border-bottom:1px solid var(--bdr);
  flex-wrap:wrap;flex-shrink:0}
.wx-name{font-weight:800;font-size:.83rem;color:var(--lp-ink);display:flex;align-items:center;gap:.4rem;margin-right:.4rem}
.wx-tool{display:inline-flex;align-items:center;gap:.35rem;padding:.28rem .6rem;border:1px solid var(--bdr);
  border-radius:var(--rs);background:var(--wh);font-size:.76rem;font-weight:700;color:var(--txs);cursor:pointer}
.wx-tool:hover{border-color:var(--lo);color:var(--lo)}
.wx-tool.sm{font-size:.72rem;padding:.24rem .5rem;white-space:nowrap}
.wx-sel{border:1px solid var(--bdr);border-radius:var(--rs);padding:.24rem .5rem;font-size:.78rem;margin-left:auto}
.wx-check{display:flex;gap:.6rem;padding:.7rem .9rem;background:var(--ok-l);color:var(--ok-bt);font-size:.83rem;
  line-height:1.55;border-bottom:1px solid var(--bdr)}
.wx-check.has{background:var(--wa-l);color:var(--wa-bt)}
.wx-check i{flex-shrink:0;margin-top:.1rem}
.wx-check ul{margin:.35rem 0 0;padding-left:1.1rem}
.wx-hist{border:1px solid var(--bdr);border-radius:var(--r);margin:.6rem 0;overflow:hidden}
.wx-hist-hd{display:flex;align-items:center;gap:.4rem;padding:.5rem .7rem;background:var(--g100);
  font-size:.8rem;font-weight:800;color:var(--lp-ink)}
.wx-ver{display:flex;align-items:center;gap:.6rem;padding:.45rem .7rem;
  border-top:1px solid var(--g100);font-size:.79rem;flex-wrap:wrap}
.wx-ver.on{background:var(--ok-l)}
.wx-ver-when{font-family:var(--fm);font-size:.72rem;color:var(--txm);min-width:4.2rem}
.wx-ver-who{font-weight:800;min-width:7rem}
.wx-ver-what{flex:1;min-width:10rem;color:var(--txs)}
.wx-ver-btn{background:none;border:1px solid var(--bdr);border-radius:var(--rs);
  padding:.15rem .5rem;font-size:.72rem;font-weight:700;color:var(--lp-ink);cursor:pointer}
.wx-ver-cur{font-size:.7rem;font-weight:800;text-transform:uppercase;letter-spacing:.05em;color:var(--txm)}
.wx-hist-note{font-size:.76rem;color:var(--txm);line-height:1.55;margin:0;padding:.5rem .7rem;
  border-top:1px solid var(--g100)}
.wx-check-note{font-size:.78rem;margin:.5rem 0 0;opacity:.85;line-height:1.5}
.wx-toc{margin:.7rem .9rem 0;padding:.7rem .9rem;background:var(--lp-t);border-radius:var(--r)}
.wx-toc-hd{font-size:.7rem;font-weight:800;letter-spacing:.1em;text-transform:uppercase;color:var(--lp-m);
  margin-bottom:.35rem}
.wx-toc ol{margin:0;padding-left:1.1rem;font-size:.82rem;color:var(--txs)}
.wx-toc li.lvl-h2{margin-left:.9rem;font-size:.79rem}
.wx-toc li.lvl-h3{margin-left:1.8rem;font-size:.77rem}
.wx-doc{flex:1;overflow-y:auto;padding:.7rem .9rem 1rem}
.wx-block{display:flex;gap:.7rem;align-items:flex-start;padding:.6rem .7rem;border:1px solid transparent;
  border-radius:var(--r);margin-bottom:.3rem}
.wx-block:hover{background:var(--g100);border-color:var(--bdr)}
.wx-block-body{flex:1;min-width:0}
.wx-block-ctl{flex-shrink:0}
.wx-block-ctl.wx-stack{display:flex;flex-direction:column;gap:.25rem}
.wx-text{margin:0 0 .3rem;color:var(--tx);line-height:1.6;font-size:.87rem}
.wx-text.manual{font-size:1.15rem;font-weight:800}
.wx-text.s-h1{font-family:var(--fd);font-size:1.35rem;font-weight:700;color:var(--heading)}
.wx-text.s-h2{font-family:var(--fd);font-size:1.12rem;font-weight:700;color:var(--heading)}
.wx-text.s-h3{font-family:var(--fd);font-size:1rem;font-weight:700;color:var(--heading)}
.wx-linktext{color:var(--lo);text-decoration:underline}
/* The state line: what the block IS, beside what it looks like. */
.wx-state{display:flex;align-items:flex-start;gap:.35rem;font-size:.74rem;color:var(--txm);line-height:1.45}
.wx-state.warn{color:var(--wa-bt);font-weight:700}
.wx-state i{flex-shrink:0;margin-top:.1rem}
.wx-style{border:1px solid var(--bdr);border-radius:var(--rs);padding:.25rem .45rem;font-size:.76rem;
  background:var(--wh);min-width:7.5rem}
.wx-img{display:flex;align-items:center;gap:.5rem;padding:.7rem .85rem;background:var(--g100);
  border:1px dashed var(--bdr);border-radius:var(--rs);margin-bottom:.35rem;font-size:.82rem;color:var(--txs)}
.wx-img i{font-size:1.2rem;color:var(--lp-m)}
.wx-opts{display:flex;flex-direction:column;gap:.25rem;margin-top:.45rem}
.wx-opt{text-align:left;padding:.4rem .6rem;border:1px solid var(--bdr);border-radius:var(--rs);
  background:var(--wh);font-size:.79rem;color:var(--txs);cursor:pointer;line-height:1.45}
.wx-opt:hover{border-color:var(--lo)}
.wx-opt.on{background:var(--lo-p);border-color:var(--lo);color:var(--lo-h);font-weight:700}
.wx-dec{font-style:italic}
.wx-tbl-cap{font-size:.78rem;font-weight:700;color:var(--txs);display:flex;align-items:center;gap:.35rem;
  margin-bottom:.35rem}
.wx-tbl{border-collapse:collapse;font-size:.76rem;margin-bottom:.35rem}
.wx-tbl th,.wx-tbl td{border:1px solid var(--bdr);padding:.2rem .45rem;text-align:left}
.wx-tbl th{background:var(--g100);font-weight:700}
.wx-status{display:flex;gap:.4rem;flex-wrap:wrap;margin-bottom:.35rem}
.wx-chip{display:inline-flex;align-items:center;min-width:2.2rem;min-height:1.3rem;padding:.15rem .5rem;
  border-radius:99px;background:var(--c);color:#fff;font-size:.74rem;font-weight:700}

/* The fault chain — Modern Technology Concepts, used rather than recited. */
.hx-chain .hx-layers{display:flex;flex-direction:column;gap:.3rem;margin-bottom:.6rem}
.hx-layer{display:grid;grid-template-columns:auto 1fr;grid-template-rows:auto auto;gap:.05rem .6rem;
  text-align:left;padding:.5rem .7rem;border:1px solid var(--bdr);border-radius:var(--r);background:var(--wh);
  cursor:pointer}
.hx-layer:hover{border-color:var(--lo)}
.hx-layer.on{background:var(--lo-p);border-color:var(--lo)}
.hx-layer i{grid-row:span 2;font-size:1.1rem;color:var(--lp-m);align-self:center}
.hx-layer.on i{color:var(--lo)}
.hx-layer-name{font-weight:700;font-size:.84rem;color:var(--tx)}
.hx-layer-eg{font-size:.75rem;color:var(--txm);line-height:1.4}

/* Settings */
.stx{padding:1rem 1.2rem;font-size:.87rem}
.stx-sec{margin-bottom:1.4rem}
.stx-sec h4{font-size:.92rem;margin-bottom:.6rem;display:flex;align-items:center;gap:.45rem;color:var(--lp-ink)}
.stx-row{display:flex;align-items:center;justify-content:space-between;gap:1rem;padding:.6rem 0;
  border-bottom:1px solid var(--g100)}
.stx-lbl{font-weight:700;font-size:.85rem;color:var(--tx)}
/* ── CALENDAR ───────────────────────────────────────────── */
.cx{display:flex;flex-direction:column;gap:.9rem;padding:.9rem 1rem;font-size:.85rem}
.cx-grid{border:1px solid var(--bdr);border-radius:var(--r);overflow:hidden}
.cx-row{display:flex;align-items:stretch;border-bottom:1px solid var(--g100);min-height:2.1rem}
.cx-row:last-child{border-bottom:none}
.cx-row.on{background:var(--lo-p)}
.cx-head{background:var(--g100);font-size:.72rem;font-weight:800;color:var(--txm);min-height:1.7rem;align-items:center}
.cx-who{width:7.5rem;flex-shrink:0;display:flex;align-items:center;gap:.35rem;padding:.2rem .5rem;
  background:none;border:none;font-size:.78rem;font-weight:700;color:var(--tx);cursor:pointer;text-align:left}
.cx-head .cx-who{cursor:default;font-size:.72rem;color:var(--txm)}
.cx-h{flex:1;text-align:left;padding-left:.2rem}
.cx-lane{position:relative;flex:1;margin:.2rem .3rem}
.cx-ev{position:absolute;top:0;bottom:0;border-radius:3px;background:var(--g200);
  color:var(--tx);font-size:.66rem;line-height:1.55;padding:0 .3rem;overflow:hidden;
  white-space:nowrap;text-overflow:ellipsis;border:1px solid var(--g400)}
.cx-ev.clash{background:var(--er-l);border-color:var(--er);color:var(--er-bt);font-weight:700}
/* The proposed slot is a translucent overlay so an existing commitment
   underneath stays readable — the overlap is the whole point of the view. */
.cx-prop{position:absolute;top:-2px;bottom:-2px;border:2px dashed var(--lo);
  background:color-mix(in srgb,var(--lo) 12%,transparent);border-radius:4px;pointer-events:none}
.cx-compose{border:1px solid var(--bdr);border-radius:var(--r);padding:.8rem .9rem;
  display:flex;flex-direction:column;gap:.55rem}
.cx-line{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap}
.cx-lbl{font-size:.74rem;font-weight:800;color:var(--txm);min-width:3.6rem}
.cx-in{flex:1;min-width:8rem;border:1px solid var(--bdr);border-radius:var(--rs);
  padding:.32rem .5rem;font-size:.82rem;font-family:inherit;background:var(--wh);color:var(--tx)}
.cx-in.short{flex:0 0 auto;min-width:6rem}
.cx-avail{border:1px solid var(--bdr);border-radius:var(--rs);padding:.5rem .6rem;
  display:flex;align-items:flex-start;gap:.6rem;flex-wrap:wrap}
.cx-avail.good{background:var(--ok-l);border-color:color-mix(in srgb,var(--ok) 34%,transparent)}
.cx-avail.bad{background:var(--er-l);border-color:color-mix(in srgb,var(--er) 34%,transparent)}
.cx-avail-msg{flex:1;min-width:12rem;font-size:.79rem;line-height:1.55;color:var(--txs)}
.cx-avail-msg.muted{color:var(--txm);font-style:italic}
.cx-alt{background:none;border:none;padding:0;font:inherit;font-weight:800;
  color:var(--lp-ink);text-decoration:underline;cursor:pointer}
.cx-send{align-self:flex-start}
.cx-sent h4{font-size:.85rem;margin:0 0 .4rem}
.cx-sent-row{display:flex;align-items:center;gap:.6rem;padding:.35rem .5rem;
  border:1px solid var(--bdr);border-radius:var(--rs);margin-bottom:.3rem;flex-wrap:wrap}
.cx-sent-row.clash{border-color:var(--er);background:var(--er-l)}
.cx-sent-t{font-family:var(--fm);font-size:.74rem;font-weight:700;color:var(--txm)}
.cx-sent-n{font-weight:700;flex:1;min-width:8rem}
.cx-sent-a{font-size:.74rem;color:var(--txm)}
.cx-sent-w{font-size:.68rem;font-weight:800;text-transform:uppercase;letter-spacing:.06em;
  background:var(--wa-l);color:var(--wa-bt);padding:.1rem .4rem;border-radius:99px}
@media (max-width:640px){
  .cx-who{width:5.5rem}
  .cx-head .cx-h:nth-child(n+5){display:none}
}

.stx-note{font-size:.76rem;color:var(--txm);line-height:1.5;max-width:26rem}
.stx-toggle{width:2.6rem;height:1.45rem;border-radius:99px;border:none;background:var(--g200);position:relative;
  cursor:pointer;flex-shrink:0;transition:background .2s}
.stx-toggle::after{content:'';position:absolute;top:.19rem;left:.19rem;width:1.07rem;height:1.07rem;
  border-radius:50%;background:#fff;transition:transform .2s;box-shadow:0 1px 3px rgba(0,0,0,.25)}
.stx-toggle.on{background:var(--lo)}
.stx-toggle.on::after{transform:translateX(1.15rem);background:var(--lo-fg)}
.stx-sel{border:1px solid var(--bdr);border-radius:var(--rs);padding:.3rem .55rem;font-size:.82rem;flex-shrink:0}
.stx-dev{display:flex;align-items:center;gap:.5rem;padding:.5rem 0;border-bottom:1px solid var(--g100);
  flex-wrap:wrap}
.stx-dev-dot{width:.6rem;height:.6rem;border-radius:50%;flex-shrink:0}
.stx-dev-name{font-weight:700;font-size:.84rem;flex:1;min-width:8rem}
.stx-dev-state{font-size:.76rem;color:var(--txm)}
.stx-dev-btn{padding:.22rem .55rem;border:1px solid var(--bdr);border-radius:var(--rs);background:var(--wh);
  font-size:.74rem;font-weight:700;color:var(--txs);cursor:pointer}
.stx-dev-btn.primary{border-color:var(--lo);color:var(--lo)}
.stx-dev-detail{width:100%;font-size:.77rem;color:var(--txs);background:var(--g100);border-radius:var(--rs);
  padding:.4rem .6rem;margin-top:.3rem;line-height:1.5}

/* Assistant */
.ax{padding:1rem 1.2rem;font-size:.87rem}
.ax-prompts{display:flex;flex-direction:column;gap:.3rem;margin-bottom:1rem}
.ax-prompt{display:flex;align-items:center;gap:.5rem;text-align:left;padding:.5rem .75rem;
  border:1px solid var(--bdr);border-radius:var(--r);background:var(--wh);font-size:.83rem;font-weight:600;
  color:var(--txs);cursor:pointer}
.ax-prompt:hover{border-color:var(--lo)}
.ax-prompt.active{background:var(--lo-p);border-color:var(--lo);color:var(--lo-h);font-weight:700}
.ax-answer{border:1px solid var(--bdr);border-radius:var(--rl);padding:1rem 1.1rem;background:var(--g100)}
.ax-avatar{display:flex;align-items:center;gap:.4rem;font-size:.74rem;font-weight:800;text-transform:uppercase;
  letter-spacing:.08em;color:var(--lo);margin-bottom:.7rem}
.ax-text{font-size:.87rem;line-height:1.7;color:var(--txs);background:var(--wh);border-radius:var(--r);
  padding:.9rem 1rem}
.ax-text h4{font-size:.98rem;margin-bottom:.5rem}
.ax-text p{margin-bottom:.65rem}
.ax-claims{margin-top:1rem}
.ax-claims-hd{font-size:.82rem;font-weight:800;color:var(--lp-ink);display:flex;align-items:center;gap:.4rem;
  flex-wrap:wrap;margin-bottom:.55rem}
.ax-claims-note{width:100%;font-size:.75rem;font-weight:400;color:var(--txm);line-height:1.5}
.ax-claim{display:flex;gap:.55rem;align-items:flex-start;width:100%;text-align:left;padding:.5rem .7rem;
  border:1px solid var(--bdr);border-radius:var(--rs);background:var(--wh);cursor:pointer;margin-bottom:.3rem}
.ax-claim:hover{border-color:var(--lo)}
.ax-claim.flagged{border-color:var(--wa);background:var(--wa-l)}
.ax-claim i{color:var(--txm);flex-shrink:0;margin-top:.15rem}
.ax-claim.flagged i{color:var(--wa-bt)}
.ax-claim-text{font-size:.82rem;color:var(--txs);line-height:1.55}
.ax-paste{margin-top:1.1rem;border:1px dashed var(--bdr);border-radius:var(--r);padding:.8rem .9rem}
.ax-paste-hd{font-size:.8rem;font-weight:800;color:var(--lp-ink);display:flex;align-items:center;gap:.4rem;
  margin-bottom:.6rem}
.ax-paste-row{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap;padding:.45rem 0;
  border-bottom:1px solid var(--g100)}
.ax-paste-row span{flex:1;min-width:12rem;font-size:.83rem;color:var(--txs)}

/* Help */
.hx{padding:1rem 1.2rem;font-size:.87rem}
.hx-sec{margin-bottom:1.5rem}
.hx-sec h4{font-size:.95rem;margin-bottom:.5rem;display:flex;align-items:center;gap:.45rem;color:var(--lp-ink)}
.hx-lead{font-size:.83rem;color:var(--txm);line-height:1.6;margin-bottom:.8rem}
.hx-ask{margin-bottom:.6rem}
.hx-answer{margin-top:.5rem;padding:.6rem .8rem;background:var(--inf-l);border-left:3px solid var(--inf);
  border-radius:0 var(--rs) var(--rs) 0;font-size:.84rem;color:var(--txs);line-height:1.6;display:flex;gap:.5rem}
.hx-answer i{color:var(--inf);flex-shrink:0}
.hx-lbl{display:block;font-size:.74rem;font-weight:800;text-transform:uppercase;letter-spacing:.06em;
  color:var(--txm);margin-bottom:.25rem}
.hx-inp{width:100%;border:1px solid var(--bdr);border-radius:var(--rs);padding:.5rem .7rem;font-size:.85rem;
  margin-bottom:.7rem;font-family:inherit}
.hx-area{resize:vertical}
.hx-tickets{margin-top:1rem}
.hx-tickets-hd{font-size:.72rem;font-weight:800;text-transform:uppercase;letter-spacing:.07em;color:var(--txm);
  margin-bottom:.4rem}
.hx-ticket{padding:.55rem .75rem;background:var(--g100);border-radius:var(--rs);margin-bottom:.35rem}
.hx-ticket strong{font-size:.85rem}
.hx-ticket p{font-size:.79rem;color:var(--txm);margin:.2rem 0 0;line-height:1.5}

/* ── 11. DIAGNOSTIC ───────────────────────────────────────── */
.dg-intro,.dg-result{max-width:46rem;margin:0 auto}
.dg-intro-mark,.dg-result-mark,.rt-intro-mark,.rt-report-mark{width:3.4rem;height:3.4rem;border-radius:var(--r);
  background:var(--lo-l);color:var(--lo);display:flex;align-items:center;justify-content:center;font-size:1.7rem;
  margin-bottom:1rem}
.dg-intro h2,.dg-result-hd h2{font-size:1.7rem;margin-bottom:.5rem}
.dg-lead{font-size:1rem;color:var(--txs);line-height:1.7;margin-bottom:1.4rem}
.dg-promises{display:flex;flex-direction:column;gap:.7rem;margin-bottom:1.6rem}
.dg-promise{display:flex;gap:.75rem;padding:.85rem 1rem;background:var(--wh);border:1px solid var(--bdr);
  border-radius:var(--r);font-size:.88rem;color:var(--txs);line-height:1.6}
.dg-promise i{color:var(--lo);font-size:1.05rem;flex-shrink:0;margin-top:.15rem}
.dg-prev{padding:.7rem .9rem;background:var(--g100);border-radius:var(--r);font-size:.84rem;color:var(--txm);
  margin-bottom:1.2rem;display:flex;gap:.5rem;line-height:1.55}
.dg-start,.rt-start{font-size:1rem;padding:.75rem 1.7rem}
.dg-run{max-width:44rem;margin:0 auto}
.dg-progress{display:flex;align-items:center;gap:.8rem;margin-bottom:1.2rem}
.dg-progress-bar{flex:1;height:6px;background:var(--g200);border-radius:99px;overflow:hidden}
.dg-progress-bar div{height:100%;background:var(--lo);border-radius:99px;transition:width .35s ease}
.dg-progress-lbl{font-size:.78rem;font-weight:700;color:var(--txm);white-space:nowrap}
.dg-card{background:var(--wh);border:1px solid var(--bdr);border-radius:var(--rl);padding:1.5rem 1.7rem}
.dg-domain{display:inline-flex;align-items:center;gap:.35rem;font-size:.72rem;font-weight:800;color:color-mix(in srgb,var(--ck) var(--chip-ink-mix),var(--chip-ink-target));
  background:color-mix(in srgb,var(--ck) 12%,transparent);padding:.2rem .6rem;border-radius:99px;margin-bottom:.8rem}
.dg-stem{font-size:1.15rem;line-height:1.55;margin-bottom:1.1rem}
.dg-stem code{background:var(--g100);padding:.1rem .35rem;border-radius:4px;font-size:.9em}
.dg-opts{display:flex;flex-direction:column;gap:.5rem}
.dg-opt{display:flex;align-items:center;gap:.65rem;text-align:left;padding:.8rem 1rem;border:2px solid var(--bdr);
  border-radius:var(--r);background:var(--wh);cursor:pointer;font-size:.93rem;color:var(--tx);transition:all .16s}
.dg-opt:hover{border-color:var(--lo);background:var(--lo-p)}
.dg-opt i{color:var(--lp-m);font-size:1.05rem;flex-shrink:0}
.dg-skip{width:100%;margin-top:.9rem;background:none;border:1px dashed var(--bdr);border-radius:var(--r);
  padding:.6rem;font-size:.83rem;font-weight:700;color:var(--txm);cursor:pointer}
.dg-skip:hover{border-color:var(--lo);color:var(--lo)}
.dg-skip-note{display:block;font-size:.74rem;font-weight:400;margin-top:.2rem}
.dg-mail{border:1px solid var(--bdr);border-radius:var(--r);padding:.85rem 1rem;background:var(--g100);
  margin-bottom:1rem}
.dg-mail-from,.dg-mail-link{display:flex;align-items:center;gap:.4rem;flex-wrap:wrap;background:var(--wh);
  border:1px dashed var(--bdr);border-radius:var(--rs);padding:.4rem .6rem;font-size:.83rem;font-weight:700;
  color:var(--txs);cursor:pointer;width:100%;text-align:left;margin-bottom:.5rem}
.dg-mail-from.shown,.dg-mail-link.shown{border-style:solid;border-color:var(--lo)}
.dg-reveal{font-size:.72rem;font-weight:400;font-style:italic;color:var(--txm)}
.dg-revealed{display:none;font-family:var(--fm);font-size:.75rem;color:var(--er-bt);width:100%;word-break:break-all}
.shown .dg-reveal{display:none}
.shown .dg-revealed{display:block}
.dg-mail-subj{font-weight:800;font-size:.92rem;color:var(--tx);margin-bottom:.4rem}
.dg-mail-body{font-size:.85rem;color:var(--txs);line-height:1.6;margin-bottom:.6rem}
.dg-share{display:flex;flex-direction:column;gap:.8rem}
.dg-dial{border:1px solid var(--bdr);border-radius:var(--r);padding:.7rem .85rem;margin:0}
.dg-dial legend{font-size:.72rem;font-weight:800;text-transform:uppercase;letter-spacing:.07em;color:var(--txm);
  width:auto;float:none;padding:0 .3rem}
.dg-radio{display:block;padding:.4rem .5rem;border-radius:var(--rs);cursor:pointer;font-size:.88rem}
.dg-radio:hover{background:var(--g100)}
.dg-radio input{margin-right:.5rem}
.dg-share-go{align-self:flex-start}
.dg-fb{display:flex;gap:1rem;background:var(--wh);border:1px solid var(--bdr);border-radius:var(--rl);
  padding:1.4rem 1.6rem}
.dg-fb-ok{border-left:5px solid var(--ok)}
.dg-fb-no{border-left:5px solid var(--lp-m)}
.dg-fb-skip{border-left:5px solid var(--g400)}
.dg-fb-mark{width:2.4rem;height:2.4rem;border-radius:50%;display:flex;align-items:center;justify-content:center;
  font-size:1.2rem;flex-shrink:0}
.dg-fb-ok .dg-fb-mark{background:var(--ok-l);color:var(--ok-bt)}
.dg-fb-no .dg-fb-mark{background:var(--lp-t);color:var(--lp-m)}
.dg-fb-skip .dg-fb-mark{background:var(--g100);color:var(--txm)}
.dg-fb-hd{font-weight:800;font-size:1rem;color:var(--tx);margin-bottom:.4rem}
.dg-fb-body p{font-size:.9rem;color:var(--txs);line-height:1.7;margin-bottom:.7rem}
.dg-fb-domain{display:inline-flex;align-items:center;gap:.3rem;font-size:.72rem;font-weight:800;color:color-mix(in srgb,var(--ck) var(--chip-ink-mix),var(--chip-ink-target))}
.dg-next{margin-top:1rem}
.dg-sec{margin-bottom:1.8rem}
.dg-sec h3{font-size:1.1rem;margin-bottom:.7rem;display:flex;align-items:center;gap:.5rem}
.dg-sec h3 i{color:var(--lo)}
.dg-chips{display:flex;gap:.45rem;flex-wrap:wrap;margin-bottom:.6rem}
.dg-sec-note{font-size:.86rem;color:var(--txm);line-height:1.65;margin:0}
.dg-recs{display:flex;flex-direction:column;gap:.5rem}
.dg-cta{display:flex;gap:.6rem;flex-wrap:wrap;margin-top:2rem;padding-top:1.4rem;border-top:1px solid var(--bdr)}

/* ── 12. LICENCE + ROAD TEST ──────────────────────────────── */
.ddl-card{background:linear-gradient(130deg,var(--lp-d),var(--lp) 55%,var(--lp-m));border-radius:var(--rl);
  padding:3px;box-shadow:var(--shl);margin-bottom:1.8rem;position:relative;overflow:hidden}
.ddl-card.held{background:linear-gradient(130deg,var(--lp-d),var(--lo-h) 70%,var(--lo))}
.ddl-card-inner{background:rgba(24,18,54,.55);border-radius:calc(var(--rl) - 3px);padding:1.6rem 1.8rem;
  color:#fff;backdrop-filter:blur(2px)}
.ddl-head{display:flex;align-items:center;gap:1rem;flex-wrap:wrap;margin-bottom:1.2rem}
.ddl-mark{width:3rem;height:3rem;border-radius:var(--r);background:rgba(255,255,255,.14);color:var(--lo-od);
  display:flex;align-items:center;justify-content:center;font-size:1.5rem;flex-shrink:0}
.ddl-issuer{font-size:.68rem;font-weight:800;letter-spacing:.14em;text-transform:uppercase;
  color:rgba(255,255,255,.55)}
.ddl-name{font-size:1.55rem;color:#fff;margin:0}
.ddl-status{margin-left:auto;font-size:.74rem;font-weight:800;padding:.28rem .8rem;border-radius:99px;
  background:rgba(255,255,255,.15);color:#fff;white-space:nowrap}
.ddl-status-held{background:var(--lo-od);color:var(--lp-d)}
.ddl-status-ready{background:rgba(251,178,236,.25);color:var(--lo-od)}
.ddl-body{display:flex;gap:2rem;flex-wrap:wrap}
.ddl-holder{display:flex;flex-direction:column;gap:.1rem}
.ddl-lbl{font-size:.66rem;font-weight:800;letter-spacing:.1em;text-transform:uppercase;color:rgba(255,255,255,.5)}
.ddl-val{font-size:.98rem;font-weight:700;color:#fff}
.ddl-val.mono{font-family:var(--fm);font-size:.85rem}
.ddl-progress-body{align-items:center}
.ddl-ring{width:4.6rem;height:4.6rem;border-radius:50%;border:4px solid rgba(251,178,236,.28);
  display:flex;align-items:baseline;justify-content:center;flex-shrink:0}
.ddl-ring-n{font-family:var(--fd);font-size:1.9rem;font-weight:700;color:var(--lo-od)}
.ddl-ring-d{font-size:.85rem;color:rgba(255,255,255,.55)}
.ddl-progress-note{font-size:.85rem;color:rgba(255,255,255,.7);margin:0}
.ddl-disclaim{margin:1.3rem 0 0;padding-top:1rem;border-top:1px solid rgba(255,255,255,.16);
  font-size:.79rem;color:rgba(255,255,255,.68);line-height:1.6;display:flex;gap:.5rem}
.ddl-disclaim i{flex-shrink:0;margin-top:.15rem}
.ddl-sec{background:var(--wh);border:1px solid var(--bdr);border-radius:var(--rl);padding:1.5rem 1.7rem;
  margin-bottom:1.2rem}
.ddl-sec h3{font-size:1.2rem;margin-bottom:.6rem;display:flex;align-items:center;gap:.5rem}
.ddl-lead{font-size:.92rem;color:var(--txs);line-height:1.7;margin-bottom:1.1rem;max-width:52rem}
.ddl-domains{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,19rem),1fr));gap:.5rem}
.ddl-domain{display:flex;align-items:center;gap:.6rem;padding:.6rem .8rem;border:1px solid var(--bdr);
  border-radius:var(--r);background:var(--wh);flex-wrap:wrap}
.ddl-domain.met{background:var(--ok-l);border-color:color-mix(in srgb,var(--ok) 30%,transparent)}
.ddl-domain.allow{background:var(--wa-l);border-color:color-mix(in srgb,var(--wa) 30%,transparent)}
.ddl-domain>i:first-child{color:color-mix(in srgb,var(--ck) var(--chip-ink-mix),var(--chip-ink-target));font-size:1.05rem;flex-shrink:0}
.ddl-domain-name{font-weight:700;font-size:.86rem;flex:1;min-width:8rem;color:var(--tx)}
.ddl-tick{color:var(--ok);font-size:1.05rem}
.ddl-domain-go{background:var(--lo);border:none;color:var(--lo-fg);border-radius:var(--rs);padding:.22rem .6rem;
  font-size:.74rem;font-weight:700;cursor:pointer;white-space:nowrap}
.ddl-allow-note{font-size:.84rem;color:var(--txm);line-height:1.6;margin:1rem 0 0}
.ddl-prereqs{list-style:none;padding:0;margin:0;counter-reset:p}
.ddl-prereq{display:flex;gap:.7rem;align-items:center;padding:.7rem 0;border-bottom:1px solid var(--g100);
  flex-wrap:wrap}
.ddl-prereq:last-child{border-bottom:none}
.ddl-prereq-tick i{font-size:1.1rem;color:var(--g400)}
.ddl-prereq.met .ddl-prereq-tick i{color:var(--ok)}
.ddl-prereq-body{flex:1;min-width:12rem}
.ddl-prereq-lbl{display:block;font-size:.89rem;font-weight:700;color:var(--tx);margin-bottom:.25rem}
.ddl-prereq-bar{height:5px;background:var(--g200);border-radius:99px;overflow:hidden;max-width:16rem}
.ddl-prereq-bar div{height:100%;background:var(--lo);border-radius:99px}
.ddl-prereq-count{font-size:.76rem;color:var(--txm)}
.ddl-prereq-go{background:none;border:1px solid var(--bdr);border-radius:var(--rs);padding:.28rem .7rem;
  font-size:.77rem;font-weight:700;color:var(--txs);cursor:pointer;white-space:nowrap}
.ddl-prereq-go:hover{border-color:var(--lo);color:var(--lo)}
.ddl-rt-go{display:flex;align-items:center;gap:1rem;flex-wrap:wrap;padding:1rem;background:var(--lo-p);
  border-radius:var(--r)}
.ddl-rt-note{font-size:.82rem;color:var(--txm)}
.ddl-attempts{margin-top:1.4rem;padding-top:1.2rem;border-top:1px solid var(--bdr)}
.ddl-attempts h4{font-size:.95rem;margin-bottom:.6rem}
.ddl-attempt{display:flex;align-items:center;gap:1rem;padding:.5rem .8rem;border:1px solid var(--bdr);
  border-radius:var(--rs);margin-bottom:.35rem;font-size:.84rem;flex-wrap:wrap}
.ddl-attempt.pass{background:var(--ok-l);border-color:color-mix(in srgb,var(--ok) 30%,transparent)}
.ddl-att-score{font-family:var(--fd);font-size:1.15rem;font-weight:700;color:var(--lp-ink);min-width:3rem}
.ddl-att-date,.ddl-att-seg{color:var(--txm);font-size:.79rem}
.ddl-att-day{font-size:.75rem;font-weight:700;color:var(--lo-h);background:var(--lo-l);
  border-radius:99px;padding:.15rem .55rem}
.ddl-att-view{margin-left:auto;background:none;border:none;color:var(--lo);font-weight:700;font-size:.79rem;
  cursor:pointer}
.ddl-att-note{font-size:.8rem;color:var(--txm);margin:.7rem 0 0;line-height:1.55}
.ddl-actions{display:flex;gap:.6rem;flex-wrap:wrap}

.rt-intro{max-width:48rem;margin:0 auto}
.rt-intro h2{font-size:1.8rem;margin-bottom:.5rem}
.rt-lead{font-size:1rem;color:var(--txs);line-height:1.7;margin-bottom:1.4rem}
.rt-facts{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,15rem),1fr));gap:.7rem;
  margin-bottom:1.6rem}
.rt-fact{display:flex;gap:.7rem;padding:.85rem 1rem;background:var(--wh);border:1px solid var(--bdr);
  border-radius:var(--r)}
.rt-fact i{color:var(--lo);font-size:1.1rem;flex-shrink:0;margin-top:.1rem}
.rt-fact strong{display:block;font-size:.89rem;color:var(--tx)}
.rt-fact span{font-size:.79rem;color:var(--txm);line-height:1.5}
.rt-segments-preview{background:var(--wh);border:1px solid var(--bdr);border-radius:var(--rl);
  padding:1.2rem 1.4rem;margin-bottom:1.6rem}
.rt-segments-preview h3{font-size:1.05rem;margin-bottom:.7rem}
.rt-segments-preview ol{list-style:none;padding:0;margin:0}
.rt-segments-preview li{display:flex;gap:1rem;padding:.35rem 0;font-size:.88rem;color:var(--txs);
  border-bottom:1px solid var(--g100)}
.rt-segments-preview li:last-child{border-bottom:none}
.rt-time{font-family:var(--fm);font-size:.83rem;font-weight:600;color:var(--lo);min-width:3.4rem}
.rt-foot{font-size:.78rem;color:var(--txm);margin-top:1rem;font-style:italic}

/* ── The day pool ──────────────────────────────────────────
   Shown before the day itself. A candidate on a retake needs to know they are
   not about to sit the same test twice — and that they cannot go looking for
   an easier one, which is why the selection rule is stated rather than
   implied. */
.rt-daypool{background:var(--wh);border:1px solid var(--bdr);border-radius:var(--rl);
  padding:1.1rem 1.3rem;margin-bottom:1.6rem}
.rt-daypool-hd{display:flex;gap:.75rem;margin-bottom:.9rem}
.rt-daypool-hd>i{color:var(--lo);font-size:1.15rem;flex-shrink:0;margin-top:.15rem}
.rt-daypool-hd strong{display:block;font-size:.95rem;color:var(--tx);margin-bottom:.15rem}
.rt-daypool-hd span{font-size:.82rem;color:var(--txm);line-height:1.6}
.rt-daylist{display:flex;flex-direction:column;gap:.4rem}
.rt-dayrow{display:flex;align-items:center;gap:.75rem;padding:.55rem .7rem;border:1px solid var(--bdr);
  border-radius:var(--r);flex-wrap:wrap}
.rt-dayrow.now{border-color:var(--lo);background:var(--lo-p)}
/* The accent is used as a FOREGROUND on a tint here rather than as a filled
   background with white on it. Both `--lo` and `--lo-l` shift with the theme,
   so accent-on-tint clears AA in all four ramps — light, dark, and both
   high-contrast ones — without a per-theme override. */
.rt-day-letter{font-family:var(--fm);font-weight:800;font-size:.9rem;color:var(--txm);
  width:1.7rem;height:1.7rem;flex-shrink:0;display:grid;place-items:center;
  border-radius:50%;background:var(--g100)}
.rt-dayrow.now .rt-day-letter{background:var(--lo-l);color:var(--lo-h)}
.rt-day-body{flex:1;min-width:11rem}
.rt-day-nm{display:block;font-size:.87rem;font-weight:700;color:var(--tx)}
.rt-day-sum{display:block;font-size:.79rem;color:var(--txm);line-height:1.5}
.rt-day-tag{font-size:.72rem;font-weight:700;letter-spacing:.02em;text-transform:uppercase;
  padding:.18rem .5rem;border-radius:99px;background:var(--lo-l);color:var(--lo-h);
  border:1px solid var(--lo);flex-shrink:0}
.rt-day-tag.done{background:var(--g100);color:var(--txm);border-color:var(--bdr)}
.rt-daypool-note{font-size:.8rem;color:var(--txm);line-height:1.6;margin:.85rem 0 0;
  padding-top:.75rem;border-top:1px solid var(--g100)}
.rt-tl-day{font-size:.72rem;font-weight:700;letter-spacing:.04em;text-transform:uppercase;
  color:var(--txm);align-self:center;padding-right:.7rem;margin-right:.3rem;
  border-right:1px solid var(--bdr);white-space:nowrap}
.rt-report-day{display:inline-flex;align-items:center;gap:.35rem;font-size:.8rem;font-weight:700;
  color:var(--lo-h);background:var(--lo-l);border:1px solid var(--lo);border-radius:99px;
  padding:.2rem .65rem;margin-bottom:.55rem}
.rt-run{display:flex;flex-direction:column;gap:.8rem}
.rt-clock{background:var(--wh);border:1px solid var(--bdr);border-radius:var(--r);padding:.6rem .8rem;
  overflow-x:auto}
.rt-timeline{display:flex;gap:.3rem;min-width:max-content}
.rt-tl-item{display:flex;flex-direction:column;gap:.15rem;padding:.35rem .6rem;border-radius:var(--rs);
  min-width:7rem;opacity:.45;border-top:3px solid var(--g200)}
.rt-tl-item.done{opacity:.8;border-top-color:var(--ok)}
.rt-tl-item.now{opacity:1;border-top-color:var(--lo);background:var(--lo-p)}
.rt-tl-time{font-family:var(--fm);font-size:.75rem;font-weight:700;color:var(--lp-ink)}
.rt-tl-title{font-size:.73rem;color:var(--txm);line-height:1.3}
.rt-body{display:grid;grid-template-columns:1fr 21rem;gap:1rem;align-items:start}
.rt-stage{min-height:34rem}
.rt-panel{background:var(--wh);border:1px solid var(--bdr);border-radius:var(--rl);padding:1.1rem;
  position:sticky;top:5.5rem;max-height:calc(100vh - 7rem);overflow-y:auto}
.rt-report{max-width:54rem;margin:0 auto}
.rt-report-hd{margin-bottom:1.6rem}
.rt-report-hd h2{font-size:1.8rem;margin-bottom:.4rem}
.rt-rep-sec{background:var(--wh);border:1px solid var(--bdr);border-radius:var(--rl);padding:1.4rem 1.6rem;
  margin-bottom:1.2rem}
.rt-rep-sec h3{font-size:1.15rem;margin-bottom:.9rem}
.rt-comps{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,17rem),1fr));gap:.45rem}
.rt-comp{display:flex;align-items:center;gap:.55rem;padding:.5rem .7rem;border:1px solid var(--bdr);
  border-radius:var(--rs);flex-wrap:wrap}
.rt-comp>i:first-child{color:color-mix(in srgb,var(--ck) var(--chip-ink-mix),var(--chip-ink-target))}
.rt-comp-name{font-size:.84rem;font-weight:700;flex:1;min-width:7rem}
.rt-comp-note{font-size:.85rem;color:var(--txm);line-height:1.6;margin:.9rem 0 0}
.rt-day{display:flex;flex-direction:column;gap:.6rem}
.rt-day-seg{border:1px solid var(--bdr);border-radius:var(--r);overflow:hidden}
.rt-day-seg.full{border-color:color-mix(in srgb,var(--ok) 35%,transparent)}
.rt-day-hd{display:flex;align-items:center;gap:.8rem;padding:.6rem .85rem;background:var(--g100)}
.rt-day-seg.full .rt-day-hd{background:var(--ok-l)}
.rt-day-title{font-weight:700;font-size:.9rem;flex:1;color:var(--tx)}
.rt-day-score{font-size:.82rem;font-weight:800;color:var(--txm)}
.rt-day-goals{list-style:none;padding:.5rem .85rem;margin:0}
.rt-day-goals li{display:flex;gap:.5rem;padding:.3rem 0;font-size:.85rem}
.rt-day-goals li i{flex-shrink:0;margin-top:.2rem;color:var(--g400)}
.rt-day-goals li.met i{color:var(--ok)}
.rt-day-goals li.pen i{color:var(--er)}
.rt-goal-lbl{color:var(--tx);font-weight:600}
.rt-day-goals li.met .rt-goal-lbl{color:var(--txm)}
.rt-goal-note{font-size:.82rem;color:var(--txs);line-height:1.6;margin:.25rem 0 0}
.rt-recs{display:flex;flex-direction:column;gap:.5rem}
.rt-outcome-card{border-radius:var(--r);padding:1.2rem 1.4rem;border:2px solid var(--bdr)}
.rt-outcome-card.held{background:var(--ok-l);border-color:var(--ok)}
.rt-outcome-card.pass{background:var(--lo-p);border-color:var(--lo)}
.rt-outcome-card.practice{background:var(--wa-l);border-color:var(--wa)}
.rt-outcome-card h3{font-size:.72rem;font-weight:800;letter-spacing:.12em;text-transform:uppercase;
  color:var(--txm);margin-bottom:.4rem}
.rt-outcome-label{font-family:var(--fd);font-size:1.5rem;font-weight:700;color:var(--lp-ink);margin-bottom:.5rem}
.rt-outcome-card p{font-size:.89rem;color:var(--txs);line-height:1.7;margin-bottom:.7rem}
.rt-outcome-score{font-size:.8rem;color:var(--txm);font-family:var(--fm)}
.rt-report-actions{display:flex;gap:.6rem;flex-wrap:wrap;justify-content:center}

/* ── 13. READINESS ────────────────────────────────────────── */
.rd-head{display:flex;gap:1.6rem;align-items:center;flex-wrap:wrap;background:var(--wh);
  border:1px solid var(--bdr);border-radius:var(--rl);padding:1.4rem 1.6rem;margin-bottom:1.1rem}
.rd-head-main{flex:1;min-width:16rem}
.rd-head-lbl{font-size:.68rem;font-weight:800;letter-spacing:.13em;text-transform:uppercase;color:var(--txm)}
.rd-head-band{display:block;font-family:var(--fd);font-size:2.1rem;font-weight:700;color:color-mix(in srgb,var(--band) var(--chip-ink-mix),var(--chip-ink-target));
  line-height:1.15;margin:.15rem 0 .4rem}
.rd-head-note{font-size:.86rem;color:var(--txm);line-height:1.65;margin:0;max-width:34rem}
.rd-lattice{border-radius:var(--r);background:var(--g100);max-width:100%;height:auto}
.rd-method{background:var(--wh);border:1px solid var(--bdr);border-radius:var(--rl);margin-bottom:1.1rem}
.rd-method summary{padding:.9rem 1.2rem;cursor:pointer;font-weight:700;font-size:.9rem;color:var(--lp-ink);
  display:flex;align-items:center;gap:.5rem}
.rd-method-body{padding:0 1.4rem 1.2rem}
.rd-method-body p{font-size:.88rem;color:var(--txs);line-height:1.7;margin-bottom:.7rem}
.rd-method-doc{font-size:.82rem!important;color:var(--txm)!important}
.rd-legend{display:flex;gap:.4rem;flex-wrap:wrap;margin-bottom:1.2rem}
.rd-pillar{margin-bottom:1.6rem}
.rd-pillar-h{font-size:1.05rem;display:flex;align-items:center;gap:.5rem;margin-bottom:.6rem;color:color-mix(in srgb,var(--pk) var(--chip-ink-mix),var(--chip-ink-target))}
.rd-domain{border:1px solid var(--bdr);border-radius:var(--r);background:var(--wh);margin-bottom:.4rem;
  overflow:hidden}
.rd-domain-hd{width:100%;display:flex;align-items:center;gap:.7rem;padding:.7rem .9rem;background:none;
  border:none;cursor:pointer;text-align:left;flex-wrap:wrap}
.rd-domain-hd:hover{background:var(--g100)}
.rd-domain-glyph{color:color-mix(in srgb,var(--ck) var(--chip-ink-mix),var(--chip-ink-target));font-size:1.05rem;flex-shrink:0}
.rd-domain-name{font-weight:700;font-size:.9rem;color:var(--tx);min-width:9rem;flex:1}
.rd-chev{font-size:.78rem;color:var(--txm);transition:transform .22s;margin-left:auto}
.rd-chev.open{transform:rotate(180deg)}
.rd-domain-body{display:none;padding:.9rem 1.1rem 1.1rem;border-top:1px solid var(--g100)}
.rd-domain-body.open{display:block}
.rd-domain-blurb{font-size:.86rem;color:var(--txs);line-height:1.65;margin-bottom:.9rem}
.rd-stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(5rem,1fr));gap:.5rem;margin-bottom:1rem}
.rd-stat{text-align:center;padding:.6rem .3rem;background:var(--g100);border-radius:var(--rs)}
.rd-stat-n{display:block;font-family:var(--fd);font-size:1.4rem;font-weight:700;color:var(--lp-ink)}
.rd-stat-l{font-size:.71rem;color:var(--txm)}
.rd-ev-h{font-size:.9rem;margin-bottom:.5rem}
.rd-evidence{list-style:none;padding:0;margin:0 0 1rem}
.rd-ev{display:flex;align-items:center;gap:.6rem;padding:.4rem 0;border-bottom:1px solid var(--g100);
  font-size:.82rem;flex-wrap:wrap}
.rd-ev-ref{flex:1;min-width:9rem;color:var(--tx);font-weight:600}
.rd-ev-kind,.rd-ev-age{color:var(--txm);font-size:.75rem}
.rd-ev-score{font-family:var(--fm);font-weight:700;color:var(--lp-ink)}
.rd-ev-more{font-size:.78rem;color:var(--txm);padding-top:.4rem}
.rd-nothing{font-size:.86rem;color:var(--txm);line-height:1.65;margin-bottom:1rem}
.rd-domain-actions{display:flex;gap:.5rem;flex-wrap:wrap}
.rd-consent,.rd-export{background:var(--wh);border:1px solid var(--bdr);border-radius:var(--rl);
  padding:1.3rem 1.5rem;margin-top:1.4rem}
.rd-consent h3,.rd-export h3{font-size:1.05rem;margin-bottom:.5rem;display:flex;align-items:center;gap:.5rem}
.rd-consent-lead{font-size:.87rem;color:var(--txm);line-height:1.65;margin-bottom:1rem}
.rd-consent-rows{display:flex;flex-direction:column;gap:.4rem}
.rd-consent-row{display:flex;align-items:center;justify-content:space-between;gap:1rem;padding:.7rem 0;
  border-bottom:1px solid var(--g100)}
.rd-consent-row:last-child{border-bottom:none}
.rd-consent-lbl{font-weight:700;font-size:.88rem;color:var(--tx)}
.rd-consent-note{font-size:.79rem;color:var(--txm);line-height:1.55;max-width:36rem}
.rd-export p{font-size:.87rem;color:var(--txs);line-height:1.65}
.rd-export-btns{display:flex;gap:.5rem;flex-wrap:wrap}

/* ── 14. KNOWLEDGE, PATHS, SAVED ──────────────────────────── */
.kb-search{position:relative;margin-bottom:1rem}
.kb-search>i{position:absolute;left:1rem;top:50%;transform:translateY(-50%);color:var(--txm)}
.kb-input{width:100%;border:1px solid var(--bdr);border-radius:99px;padding:.75rem 2.6rem;font-size:.95rem;
  background:var(--wh)}
.kb-clear{position:absolute;right:.8rem;top:50%;transform:translateY(-50%);background:none;border:none;
  color:var(--txm);cursor:pointer}
.kb-cats{display:flex;gap:.35rem;flex-wrap:wrap;margin-bottom:1.4rem}
.kb-cat{display:inline-flex;align-items:center;gap:.35rem;padding:.35rem .8rem;border-radius:99px;
  border:1px solid var(--bdr);background:var(--wh);font-size:.79rem;font-weight:700;color:var(--txs);cursor:pointer}
.kb-cat.on{background:var(--lo);border-color:var(--lo);color:var(--lo-fg)}
.kb-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,24rem),1fr));gap:1rem}
.kb-card{background:var(--wh);border:1px solid var(--bdr);border-radius:var(--rl);padding:1.2rem 1.4rem}
.kb-card.kb-flash{box-shadow:0 0 0 3px var(--lo-l);border-color:var(--lo)}
.kb-card-hd{display:flex;align-items:center;gap:.6rem;margin-bottom:.8rem;flex-wrap:wrap}
.kb-card-hd h2{font-size:1.05rem;margin:0;flex:1;min-width:10rem}
.kb-card-cat{font-size:.7rem;font-weight:700;color:var(--txm);display:inline-flex;align-items:center;gap:.3rem}
.kb-save{background:none;border:1px solid var(--bdr);border-radius:var(--rs);width:1.9rem;height:1.9rem;
  color:var(--txm);cursor:pointer}
.kb-save.on{color:var(--lo);border-color:var(--lo)}
.kb-def{margin-bottom:.7rem}
.kb-def-lbl{display:block;font-size:.66rem;font-weight:800;letter-spacing:.1em;text-transform:uppercase;
  color:var(--txm);margin-bottom:.15rem}
.kb-def p{font-size:.89rem;line-height:1.65;color:var(--txs);margin:0}
.kb-plain p{font-weight:600;color:var(--tx)}
.kb-precise p{font-size:.84rem;color:var(--txm)}
.kb-matters{display:flex;gap:.6rem;padding:.7rem .85rem;background:var(--lo-p);border-radius:var(--r);
  font-size:.85rem;color:var(--txs);line-height:1.6}
.kb-matters i{color:var(--lo);flex-shrink:0;margin-top:.15rem}
.kb-matters-lbl{display:block;font-size:.66rem;font-weight:800;letter-spacing:.1em;text-transform:uppercase;
  color:var(--lo);margin-bottom:.15rem}
.kb-see{display:flex;gap:.4rem;flex-wrap:wrap;margin-top:.8rem}
.kb-see-btn{display:inline-flex;align-items:center;gap:.35rem;padding:.28rem .65rem;border:1px solid var(--bdr);
  border-radius:var(--rs);background:var(--wh);font-size:.77rem;font-weight:700;color:var(--txs);cursor:pointer}
.kb-see-btn:hover{border-color:var(--lo);color:var(--lo)}

.paths-lead{font-size:.95rem;color:var(--txs);max-width:48rem;margin-bottom:1.6rem}
.paths-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,20rem),1fr));gap:1.1rem}
.path-card{background:var(--wh);border:1px solid var(--bdr);border-top:4px solid var(--pk);border-radius:var(--rl);
  padding:1.3rem 1.4rem;display:flex;flex-direction:column;position:relative;transition:all .2s}
.path-card:hover{box-shadow:var(--shl);transform:translateY(-3px)}
.path-card.flagship{border-color:var(--lo);box-shadow:var(--shm)}
.path-flag,.path-premium{position:absolute;top:-.6rem;right:1rem;font-size:.66rem;font-weight:800;
  text-transform:uppercase;letter-spacing:.08em;padding:.2rem .65rem;border-radius:99px;color:#fff}
.path-flag{background:var(--lo);color:var(--lo-fg)}
.path-premium{background:var(--lp-m)}
.path-glyph{width:2.6rem;height:2.6rem;border-radius:var(--r);background:color-mix(in srgb,var(--pk) 13%,transparent);
  color:color-mix(in srgb,var(--pk) var(--chip-ink-mix),var(--chip-ink-target));display:flex;align-items:center;justify-content:center;font-size:1.25rem;margin-bottom:.8rem}
.path-glyph.lg{width:3.2rem;height:3.2rem;font-size:1.6rem}
.path-card h3{font-size:1.15rem;margin-bottom:.3rem}
.path-tag{font-size:.86rem;font-weight:700;color:color-mix(in srgb,var(--pk) var(--chip-ink-mix),var(--chip-ink-target));margin-bottom:.5rem}
.path-blurb{font-size:.85rem;color:var(--txm);line-height:1.6;flex:1;margin-bottom:.7rem}
.path-partial{font-size:.79rem;color:var(--wa-bt);background:var(--wa-l);border-radius:var(--rs);
  padding:.45rem .65rem;line-height:1.5;margin-bottom:.7rem}
.path-prog{display:flex;align-items:center;gap:.6rem;margin-bottom:.9rem}
.path-bar{flex:1;height:5px;background:var(--g200);border-radius:99px;overflow:hidden}
.path-bar div{height:100%;background:var(--pk);border-radius:99px}
.path-prog span{font-size:.76rem;color:var(--txm);white-space:nowrap}
.path-detail{background:var(--wh);border:1px solid var(--bdr);border-radius:var(--rl);padding:1.5rem 1.7rem;
  margin-top:1rem}
.path-detail-hd{display:flex;gap:1rem;align-items:flex-start;margin-bottom:1.4rem;flex-wrap:wrap}
.path-detail-hd h2{font-size:1.5rem;margin-bottom:.3rem}
.path-detail-hd p{font-size:.9rem;color:var(--txm);line-height:1.65;margin:0;max-width:42rem}
.path-steps{list-style:none;padding:0;margin:0}
.path-step{display:flex;align-items:center;gap:.8rem;padding:.6rem 0;border-bottom:1px solid var(--g100);
  flex-wrap:wrap}
.path-step:last-child{border-bottom:none}
.path-step-n{width:2rem;height:2rem;border-radius:50%;background:var(--g100);color:var(--txm);
  display:flex;align-items:center;justify-content:center;font-size:.83rem;font-weight:800;flex-shrink:0}
.path-step.done .path-step-n{background:var(--ok-l);color:var(--ok-bt)}
.path-step.lab .path-step-n{background:var(--lo-l);color:var(--lo-h)}
.path-step.capstone .path-step-n{background:var(--lo);color:var(--lo-fg)}
.path-step-body{flex:1;min-width:12rem;background:none;border:none;text-align:left;cursor:pointer;padding:0}
.path-step-body:disabled{cursor:default;opacity:.55}
.path-step-title{display:block;font-weight:700;font-size:.9rem;color:var(--tx)}
.path-step-sub{display:block;font-size:.79rem;color:var(--txm);line-height:1.45}
.path-step-kind{font-size:.72rem;font-weight:800;color:var(--txm);text-transform:uppercase;letter-spacing:.06em;
  white-space:nowrap}

.lib-sec{margin-bottom:1.8rem}
.lib-sec h3{font-size:1.05rem;margin-bottom:.7rem;display:flex;align-items:center;gap:.5rem}
.lib-items{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,18rem),1fr));gap:.6rem}
.lib-item{text-align:left;padding:.8rem 1rem;border:1px solid var(--bdr);border-radius:var(--r);
  background:var(--wh);cursor:pointer}
.lib-item:hover{border-color:var(--lo)}
.lib-item-title{display:block;font-weight:700;font-size:.9rem;color:var(--tx)}
.lib-item-sub{display:block;font-size:.8rem;color:var(--txm);line-height:1.5}

/* ── SEARCH OVERLAY ── */
.search-overlay{position:fixed;inset:0;background:rgba(24,18,54,.6);z-index:var(--z-modal);display:none;
  align-items:flex-start;justify-content:center;padding:5rem 1rem 1rem;backdrop-filter:blur(3px)}
.search-overlay.open{display:flex}
.search-modal{background:var(--wh);border-radius:var(--rl);width:min(38rem,100%);box-shadow:var(--shl);
  overflow:hidden;max-height:80vh;display:flex;flex-direction:column}
.search-input-row{display:flex;align-items:center;gap:.7rem;padding:.9rem 1.1rem;border-bottom:1px solid var(--bdr)}
.search-input-icon{color:var(--txm)}
.search-input{flex:1;border:none;outline:none;font-size:1rem;background:none}
.search-kbd{font-size:.7rem;font-family:var(--fm);background:var(--g100);border-radius:4px;padding:.15rem .4rem;
  color:var(--txm);cursor:pointer}
.search-results{flex:1;overflow-y:auto;padding:.4rem}
.search-res{display:flex;align-items:center;gap:.7rem;width:100%;text-align:left;padding:.6rem .8rem;
  border:none;background:none;border-radius:var(--rs);cursor:pointer}
.search-res:hover,.search-res.sel{background:var(--lo-p)}
.search-res>i{color:var(--lp-m);flex-shrink:0}
.search-res-body{flex:1;min-width:0}
.search-res-title{display:block;font-weight:700;font-size:.88rem;color:var(--tx)}
.search-res-sub{display:block;font-size:.78rem;color:var(--txm);white-space:nowrap;overflow:hidden;
  text-overflow:ellipsis}
.search-res-kind{font-size:.68rem;font-weight:800;text-transform:uppercase;letter-spacing:.06em;color:var(--txm)}
.search-hint{padding:1rem;display:flex;flex-direction:column;gap:.35rem}
.search-hint p{font-size:.83rem;color:var(--txm);margin-bottom:.3rem}
.search-sugg{display:flex;align-items:center;gap:.5rem;padding:.45rem .7rem;border:1px solid var(--bdr);
  border-radius:var(--rs);background:var(--wh);font-size:.84rem;color:var(--txs);cursor:pointer;text-align:left}
.search-sugg:hover{border-color:var(--lo);color:var(--lo)}
.search-none{padding:2rem 1.2rem;text-align:center;color:var(--txm)}
.search-none i{font-size:1.8rem;display:block;margin-bottom:.5rem;opacity:.5}
.search-none-note{font-size:.8rem;line-height:1.6;max-width:26rem;margin:.5rem auto 0}
.search-footer{display:flex;gap:1rem;padding:.6rem 1.1rem;border-top:1px solid var(--bdr);background:var(--g100)}
.search-footer-hint{font-size:.74rem;color:var(--txm)}
.search-footer-hint kbd{background:var(--wh);border:1px solid var(--bdr);border-radius:3px;padding:0 .3rem;
  font-family:var(--fm)}

/* ── 15. ENTERPRISE + ADMIN ───────────────────────────────── */
/* --tenant-accent, not a second --tenant of its own: one tenant colour, one
   custom property, set in one place (js/09). See .nav-tenant-mark above. */
.oa-hero{background:linear-gradient(120deg,var(--lp-d),var(--lp));
  border-bottom:3px solid var(--tenant-accent,var(--lo))}
.oa-brand{display:flex;align-items:center;gap:1rem}
.oa-mark{width:3.2rem;height:3.2rem;border-radius:var(--r);background:var(--tenant-accent,var(--lo));
  color:var(--tenant-accent-fg,var(--lo-fg));
  display:flex;align-items:center;justify-content:center;font-size:1.5rem;font-weight:800;flex-shrink:0}
.oa-note,.team-note{display:flex;gap:.75rem;padding:1rem 1.2rem;background:var(--inf-l);
  border-left:4px solid var(--inf);border-radius:0 var(--r) var(--r) 0;font-size:.88rem;color:var(--txs);
  line-height:1.65;margin-bottom:1.4rem}
.oa-note i,.team-note i{color:var(--inf);flex-shrink:0;margin-top:.15rem}
.oa-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,20rem),1fr));gap:1.1rem}
.oa-card{background:var(--wh);border:1px solid var(--bdr);border-radius:var(--rl);padding:1.3rem 1.4rem}
.oa-card h3{font-size:1.05rem;margin-bottom:.8rem;display:flex;align-items:center;gap:.5rem}
.oa-card p{font-size:.87rem;color:var(--txs);line-height:1.65;margin-bottom:.9rem}
.oa-assigns{display:flex;flex-direction:column;gap:.45rem;margin-bottom:.9rem}
.oa-assign{display:flex;align-items:center;gap:.7rem;width:100%;text-align:left;padding:.6rem .8rem;
  border:1px solid var(--bdr);border-radius:var(--rs);background:var(--wh);cursor:pointer}
.oa-assign:hover{border-color:var(--lo)}
.oa-assign-title{font-weight:700;font-size:.87rem;flex:1}
.oa-assign-due{font-size:.76rem;color:var(--txm)}
.oa-empty,.team-empty,.adm-empty{font-size:.87rem;color:var(--txm);margin:0}
.asg-list{display:flex;flex-direction:column;gap:.5rem}
.asg{display:flex;align-items:center;gap:.8rem;padding:.8rem 1rem;background:var(--wh);border:1px solid var(--bdr);
  border-radius:var(--r);flex-wrap:wrap}
.asg.done{background:var(--ok-l);border-color:color-mix(in srgb,var(--ok) 28%,transparent)}
.asg.overdue{background:var(--er-l);border-color:color-mix(in srgb,var(--er) 28%,transparent)}
.asg>i{font-size:1.15rem;color:var(--g400)}
.asg.done>i{color:var(--ok)}.asg.overdue>i{color:var(--er)}
.asg-body{flex:1;min-width:12rem}
.asg-title{display:block;font-weight:700;font-size:.9rem}
.asg-meta{display:block;font-size:.78rem;color:var(--txm)}
.asg-state{font-size:.78rem;font-weight:800;color:var(--ok-bt)}
.team-sec{background:var(--wh);border:1px solid var(--bdr);border-radius:var(--rl);padding:1.4rem 1.6rem;
  margin-bottom:1.2rem}
.team-sec h3{font-size:1.15rem;margin-bottom:.7rem;display:flex;align-items:center;gap:.5rem}
.team-lead{font-size:.88rem;color:var(--txm);line-height:1.65;margin-bottom:1rem}
.team-suppressed{display:flex;gap:.8rem;padding:1rem 1.2rem;background:var(--g100);border-radius:var(--r);
  font-size:.89rem;color:var(--txs);line-height:1.65}
.team-suppressed i{font-size:1.3rem;color:var(--txm);flex-shrink:0}
.team-domains{display:flex;flex-direction:column;gap:.4rem}
.team-domain{display:flex;align-items:center;gap:.7rem;padding:.5rem .3rem;flex-wrap:wrap}
.team-domain>i:first-child{color:color-mix(in srgb,var(--ck) var(--chip-ink-mix),var(--chip-ink-target));flex-shrink:0}
.team-dom-name{font-size:.86rem;font-weight:700;min-width:11rem;flex:1}
.team-dom-bar{flex:2;min-width:6rem;height:8px;background:var(--g200);border-radius:99px;overflow:hidden}
.team-dom-bar div{height:100%;border-radius:99px}
.team-dom-pct{font-size:.82rem;font-weight:800;color:var(--txs);min-width:2.6rem;text-align:right}
.team-dom-band{font-size:.72rem;font-weight:800;color:color-mix(in srgb,var(--band) var(--chip-ink-mix),var(--chip-ink-target));min-width:6.5rem}
.team-invest{margin-top:1.2rem;padding:.9rem 1.1rem;background:var(--lo-p);border-radius:var(--r)}
.team-invest h4{font-size:.92rem;margin-bottom:.4rem}
.team-invest p{font-size:.88rem;color:var(--txs);line-height:1.7;margin:0}
.team-people{display:flex;flex-direction:column;gap:.4rem}
.team-person{display:flex;align-items:center;gap:.8rem;padding:.5rem .3rem;flex-wrap:wrap}
.team-person-name{font-weight:700;font-size:.88rem;min-width:9rem}
.team-person-role{font-size:.78rem;color:var(--txm);min-width:9rem;flex:1}
.team-person-bar{flex:1;min-width:5rem;height:6px;background:var(--g200);border-radius:99px;overflow:hidden}
.team-person-bar div{height:100%;background:var(--lo);border-radius:99px}
.team-person-count{font-size:.78rem;color:var(--txm);white-space:nowrap}

.adm-tabs{display:flex;gap:.3rem;flex-wrap:wrap;margin-bottom:1.2rem;border-bottom:2px solid var(--bdr)}
.adm-tab{display:inline-flex;align-items:center;gap:.4rem;padding:.55rem .95rem;border:none;background:none;
  font-size:.85rem;font-weight:700;color:var(--txm);cursor:pointer;border-bottom:3px solid transparent;
  margin-bottom:-2px}
.adm-tab.on{color:var(--lo);border-bottom-color:var(--lo)}
.adm-sec{background:var(--wh);border:1px solid var(--bdr);border-radius:var(--rl);padding:1.4rem 1.6rem}
.adm-sec h3{font-size:1.2rem;margin-bottom:.6rem}
.adm-h4{font-size:1rem;margin:1.4rem 0 .6rem}
.adm-lead{font-size:.89rem;color:var(--txs);line-height:1.7;margin-bottom:1.1rem;max-width:52rem}
.adm-note{font-size:.83rem;color:var(--txm);line-height:1.65;margin-top:1rem;padding:.7rem .9rem;
  background:var(--g100);border-radius:var(--rs)}
.adm-stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(8rem,1fr));gap:.6rem;margin-bottom:1.2rem}
.adm-stat{text-align:center;padding:.8rem .5rem;background:var(--g100);border-radius:var(--r)}
.adm-stat.warn{background:var(--wa-l)}
.adm-stat-n{display:block;font-family:var(--fd);font-size:1.8rem;font-weight:700;color:var(--lp-ink)}
.adm-stat.warn .adm-stat-n{color:var(--wa-bt)}
.adm-stat-l{font-size:.74rem;color:var(--txm)}
.adm-table{width:100%;border-collapse:collapse;font-size:.83rem;display:block;overflow-x:auto;white-space:nowrap}
.adm-table th{text-align:left;padding:.5rem .7rem;background:var(--g100);font-weight:800;font-size:.72rem;
  text-transform:uppercase;letter-spacing:.05em;color:var(--txm)}
.adm-table td{padding:.45rem .7rem;border-bottom:1px solid var(--g100);color:var(--txs)}
.adm-row-warn td{background:var(--wa-l)}
.adm-badge{display:inline-block;font-size:.68rem;font-weight:800;padding:.12rem .5rem;border-radius:99px;
  background:var(--g100);color:var(--txm)}
.adm-published{background:var(--ok-l);color:var(--ok-bt)}
.adm-draft{background:var(--wa-l);color:var(--wa-bt)}
.adm-role-admin{background:var(--lo-l);color:var(--lo-h)}
.adm-role-manager{background:var(--inf-l);color:var(--inf)}
.adm-caps{white-space:normal}
.adm-cap{display:inline-block;font-size:.66rem;font-family:var(--fm);background:var(--g100);color:var(--txm);
  padding:.08rem .4rem;border-radius:3px;margin:.1rem .15rem .1rem 0}
.adm-scen-list{display:flex;flex-direction:column;gap:.4rem;margin-bottom:1rem}
.adm-scen{display:flex;align-items:center;gap:.7rem;padding:.6rem .8rem;border:1px solid var(--bdr);
  border-radius:var(--rs);flex-wrap:wrap}
.adm-scen>i{color:var(--lo)}
.adm-scen-name{display:block;font-weight:700;font-size:.88rem}
.adm-scen-meta{display:block;font-size:.77rem;color:var(--txm)}
.adm-scen>div{flex:1;min-width:12rem}
.adm-code{width:100%;font-family:var(--fm);font-size:.78rem;border:1px solid var(--bdr);border-radius:var(--rs);
  padding:.7rem .85rem;background:var(--g100);resize:vertical;line-height:1.55}
.adm-actions{display:flex;gap:.5rem;flex-wrap:wrap;margin-top:.7rem}
.adm-result{margin-top:.8rem}
.adm-ok,.adm-err{padding:.7rem .9rem;border-radius:var(--rs);font-size:.85rem;line-height:1.6}
.adm-ok{background:var(--ok-l);color:var(--ok-bt)}
.adm-err{background:var(--er-l);color:var(--er-bt)}
.adm-err ul{margin:.4rem 0 0;padding-left:1.2rem}
.adm-form{display:flex;flex-direction:column;gap:.15rem;max-width:26rem;margin-bottom:1.4rem}
.adm-lbl{font-size:.73rem;font-weight:800;text-transform:uppercase;letter-spacing:.06em;color:var(--txm);
  margin-top:.5rem}
.adm-inp{border:1px solid var(--bdr);border-radius:var(--rs);padding:.45rem .65rem;font-size:.86rem;
  font-family:inherit;margin-bottom:.3rem}
.adm-x{background:none;border:none;color:var(--er-bt);cursor:pointer}
.adm-row{display:flex;align-items:center;justify-content:space-between;gap:1rem;padding:.8rem 0;
  border-bottom:1px solid var(--g100)}
.adm-row-lbl{font-weight:700;font-size:.89rem}
.adm-row-note{font-size:.79rem;color:var(--txm);line-height:1.55;max-width:32rem}
.adm-scopes{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,17rem),1fr));gap:.7rem;
  margin-bottom:1.1rem}
.adm-scope{border:1px solid var(--bdr);border-radius:var(--r);padding:.85rem 1rem}
.adm-scope-hd{display:flex;justify-content:space-between;gap:.5rem;margin-bottom:.3rem}
.adm-scope-size{font-family:var(--fm);font-size:.76rem;color:var(--txm)}
.adm-scope-desc{font-size:.79rem;color:var(--txm);line-height:1.5;margin-bottom:.5rem}
.adm-keys{display:flex;flex-wrap:wrap;gap:.2rem;margin-bottom:.6rem}
.adm-key{font-family:var(--fm);font-size:.66rem;background:var(--g100);color:var(--g400);padding:.08rem .35rem;
  border-radius:3px}
.adm-key.on{background:var(--lo-l);color:var(--lo-h)}

/* ── 16. DARK MODE ────────────────────────────────────────── */
body.liq-dark{--bg:#141024;--wh:#1e1836;--g100:#282041;--g200:#372c56;--g400:#8a80ab;--g600:#b3a9cc;
  --tx:#f2eefb;--txs:#cfc6e4;--txm:#a79ec2;--bdr:#372c56;--heading:#e8dffb;
  --lp:#2b1f60;--lp-d:#191238;--lp-m:#513ab0;--lp-t:rgba(129,101,214,.14);
  --lo:#e468c8;--lo-h:#f191dd;--lo-l:rgba(228,104,200,.17);--lo-p:rgba(228,104,200,.09);
  /* The accent is lightened here so it reads as a foreground on dark surfaces,
     which inverts what belongs on top of it: 6.00:1 on --lo, 8.26:1 on --lo-h.
     White would be 2.95:1. */
  --lo-fg:#191238;
  /* Chip ink drives toward white on a dark card, for the same reason. */
  --chip-ink-target:#fff;--chip-ink-mix:55%;
  --lp-ink:#c9bbf5;
  --ok:#34d399;--ok-l:rgba(52,211,153,.18);--er:#f87171;--er-l:rgba(248,113,113,.18);
  --wa:#fbbf24;--wa-l:rgba(251,191,36,.18);--inf:#a78bfa;--inf-l:rgba(167,139,250,.18);
  --ok-bt:#6ee7b7;--wa-bt:#fcd34d;--er-bt:#fca5a5;
  --sh:0 2px 12px rgba(0,0,0,.35);--shm:0 4px 20px rgba(0,0,0,.45);--shl:0 8px 32px rgba(0,0,0,.55);
  color-scheme:dark}
body.liq-dark .lnav{background:var(--lp-d)}
body.liq-dark .section-hero{background:var(--lp-d)}
body.liq-dark .lnav .dropdown-menu{background:#2a2050}
body.liq-dark .login-card{background:rgba(43,31,96,.8)}
body.liq-dark .vos{background:#120e26}
body.liq-dark .vos-wallpaper{background:radial-gradient(ellipse 70% 90% at 20% 10%,rgba(81,58,176,.4),transparent 62%),
  radial-gradient(ellipse 60% 70% at 85% 90%,rgba(192,38,163,.2),transparent 60%),linear-gradient(140deg,#191238,#0e0a1e)}
body.liq-dark .sx-table thead th{background:var(--g100)}
body.liq-dark .fx-side,body.liq-dark .dx-side,body.liq-dark .mx-list{background:var(--g100)}

/* ── HIGH CONTRAST — TWO INDEPENDENT RAMPS ────────────────
   The light ramp and the dark ramp are separate rules. Collapsing them into
   one is the defect three sibling products still ship: a single ramp makes
   body text near-invisible for exactly the users who enabled the setting.
   Hospital IQ fixed it; every fork since inherits the fix. DO NOT MERGE. */
body.liq-hc{--bg:#fff;--wh:#fff;--tx:#000;--txs:#000;--txm:#1a1a1a;--bdr:#000;--g100:#f0f0f0;--g200:#c8c8c8;
  --g400:#3a3a3a;--lo:#8a0072;--lo-h:#6b0059;--lp:#1a0f4d;--lp-d:#100930;--lp-m:#33218a;
  /* Stated rather than inherited from :root. The ramps are independent by
     policy, and a token whose correctness here depends on a rule two hundred
     lines away is a token waiting to break. */
  --lo-fg:#fff;
  --chip-ink-target:#000;--chip-ink-mix:62%;
  --lp-ink:#1a0f4d;
  --ok-bt:#004d33;--wa-bt:#5c3600;--er-bt:#7a2408}
body.liq-hc *{border-color:currentColor}
body.liq-hc .rd-bar,body.liq-hc .path-bar,body.liq-hc .team-dom-bar{border:1px solid #000}
body.liq-hc .btn-out{border-width:2px}

body.liq-hc.liq-dark{--bg:#000;--wh:#0a0a0a;--tx:#fff;--txs:#fff;--txm:#e6e6e6;--bdr:#fff;--g100:#141414;
  --g200:#3a3a3a;--g400:#c8c8c8;--lo:#ff9de8;--lo-h:#ffc4f0;--lo-l:rgba(255,157,232,.2);
  --lp:#0a0a0a;--lp-d:#000;--lp-m:#241a56;--heading:#fff;
  /* The accent is near-white in this ramp, so the fill foreground is black.
     Without this the :root default of white would carry through and produce
     the single worst pairing in the product, in the ramp whose users can
     least afford it. */
  --lo-fg:#000;
  --chip-ink-target:#fff;--chip-ink-mix:55%;
  --lp-ink:#fff;
  --ok-bt:#7dffd0;--wa-bt:#ffd97a;--er-bt:#ffb3a0}
body.liq-hc.liq-dark .lnav,body.liq-hc.liq-dark .section-hero{background:#000;border-bottom-color:#fff}

/* ── REDUCED MOTION ── */
body.liq-reduced-motion *,body.liq-reduced-motion *::before,body.liq-reduced-motion *::after{
  animation-duration:.001ms!important;animation-iteration-count:1!important;
  transition-duration:.001ms!important;scroll-behavior:auto!important}
@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:.001ms!important;animation-iteration-count:1!important;
    transition-duration:.001ms!important;scroll-behavior:auto!important}
}

/* ── PRINT ── */
@media print{
  .lnav,.mob-nav,.a11y-wrap,.toast-box,.search-overlay,.back-btn,.cert-actions,.section-hero{display:none!important}
  body{background:#fff}
  .cert-card{break-inside:avoid;box-shadow:none;border:2px solid #3a2a80}
  body.printing-cert .cert-card:not(.print-me){display:none}
}

/* ── CERTIFICATES ── */
.cert-lead{font-size:.92rem;color:var(--txs);max-width:50rem;line-height:1.7;margin-bottom:1.6rem}
.cert-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,23rem),1fr));gap:1.2rem}
.cert-card{background:var(--wh);border:1px solid var(--bdr);border-radius:var(--rl);overflow:hidden;
  box-shadow:var(--sh)}
.cert-card.flagship{border:2px solid var(--lo);box-shadow:var(--shm)}
.cert-inner{padding:1.5rem 1.6rem;border-top:5px solid var(--ck)}
.cert-hd{display:flex;align-items:center;justify-content:space-between;margin-bottom:1rem}
.cert-issuer{font-size:.66rem;font-weight:800;letter-spacing:.13em;text-transform:uppercase;color:var(--txm)}
.cert-glyph{font-size:1.5rem;color:color-mix(in srgb,var(--ck) var(--chip-ink-mix),var(--chip-ink-target))}
.cert-name{font-size:1.2rem;margin-bottom:.7rem}
.cert-awarded{font-size:.76rem;color:var(--txm);margin:0}
.cert-holder{font-family:var(--fd);font-size:1.5rem;font-weight:700;color:var(--lp-ink);margin:0 0 .6rem}
.cert-blurb{font-size:.85rem;color:var(--txs);line-height:1.6;margin-bottom:.9rem}
.cert-covers{margin-bottom:1rem}
.cert-covers-lbl{display:block;font-size:.64rem;font-weight:800;letter-spacing:.1em;text-transform:uppercase;
  color:var(--txm);margin-bottom:.3rem}
.cert-cov{display:inline-block;font-size:.73rem;background:var(--g100);color:var(--txs);padding:.12rem .5rem;
  border-radius:99px;margin:.12rem .15rem .12rem 0}
.cert-meta{display:flex;gap:1.2rem;flex-wrap:wrap;padding-top:.8rem;border-top:1px solid var(--bdr)}
.cert-meta-l{display:block;font-size:.64rem;font-weight:800;letter-spacing:.08em;text-transform:uppercase;
  color:var(--txm)}
.cert-meta-v{font-size:.8rem;font-weight:700;color:var(--txs)}
.cert-disclaim{font-size:.74rem;color:var(--txm);line-height:1.55;margin:.9rem 0 0;padding-top:.7rem;
  border-top:1px dashed var(--bdr)}
.cert-actions{display:flex;gap:.5rem;padding:.8rem 1.6rem;background:var(--g100);flex-wrap:wrap}
.cert-pending{margin-top:2rem}
.cert-pending h3{font-size:1.1rem;margin-bottom:.7rem}
.cert-pend-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,18rem),1fr));gap:.6rem}
.cert-pend{display:flex;gap:.7rem;padding:.8rem 1rem;border:1px dashed var(--bdr);border-radius:var(--r)}
.cert-pend i{font-size:1.2rem;color:color-mix(in srgb,var(--ck) var(--chip-ink-mix),var(--chip-ink-target));flex-shrink:0}
.cert-pend-name{display:block;font-weight:700;font-size:.89rem}
.cert-pend-blurb{display:block;font-size:.79rem;color:var(--txm);line-height:1.5}

/* ── MOBILE NAV ── */
.mob-nav{display:none;position:fixed;bottom:0;left:0;right:0;background:var(--lp);z-index:var(--z-mob-nav);
  border-top:2px solid var(--lo);padding-bottom:env(safe-area-inset-bottom)}
.mob-nav-inner{display:flex}
.mob-nav-btn{flex:1;display:flex;flex-direction:column;align-items:center;gap:.15rem;padding:.5rem .2rem;
  background:none;border:none;color:rgba(255,255,255,.6);font-size:.65rem;font-weight:700;cursor:pointer;
  position:relative}
.mob-nav-btn i{font-size:1.15rem}
.mob-nav-btn.active{color:var(--lo-od)}
.mob-nav-badge{position:absolute;top:.3rem;right:22%;width:.5rem;height:.5rem;border-radius:50%;
  background:var(--lo-od);font-size:0}
body.has-mob-nav{padding-bottom:3.6rem}
/* THE FLOATING ACCESSIBILITY BUTTON SAT ON TOP OF THE BOTTOM NAV.
   .a11y-wrap is fixed at bottom:1rem; the mobile nav is 68px tall and fixed at
   bottom:0, so on a phone the 48px button covered the Readiness button, leaving
   a 75x16 strip of it tappable. A tap aimed at Readiness opened the
   accessibility panel instead.
   Measured with axe-core 4.10.2: target-size (WCAG 2.2 AA, SC 2.5.8) on
   #mbn-progress, "smallest space is 75px by 16px" — exactly the strip left
   below the button. Clean once the two stop overlapping.
   5rem clears the 68px nav with room to spare; the safe-area inset is added
   because the nav carries it too, so both lift together on a notched phone. */
body.has-mob-nav .a11y-wrap{bottom:calc(5rem + env(safe-area-inset-bottom))}

/* ── 17. RESPONSIVE ───────────────────────────────────────── */
@media (max-width:1200px){
  .lab-run,.rt-body{grid-template-columns:1fr}
  .lab-panel,.rt-panel{position:static;max-height:none;order:-1}
  .hd-readiness{grid-column:span 1}
}
@media (max-width:991px){
  .vos{height:min(32rem,66vh)}
  .vos-icon{width:4.6rem}
  .fx-side{width:7.5rem}
  .mx-list{width:12rem}
  .dx-side{width:9rem}
}
@media (max-width:767px){
  /* The virtual computer stays usable on a phone rather than being withheld.
     Windows are forced to fill the screen, the desktop icon grid becomes a
     scrolling row, and the taskbar remains the way between applications. The
     labs that genuinely read better on a larger screen say so on their card —
     they are not blocked, and nothing here breaks. */
  .vos{height:min(30rem,70vh)}
  .vos-win{inset:0!important;width:auto!important;height:auto!important;border-radius:0}
  .vos-icons{flex-direction:row;flex-wrap:nowrap;overflow-x:auto;max-height:none;width:calc(100% - 1.4rem);
    padding-bottom:.3rem}
  .vos-icon{flex-shrink:0}
  .wx-block{flex-direction:column;gap:.4rem}
  .wx-block-ctl{width:100%}
  .wx-style{width:100%}
  .wx-block-ctl.wx-stack{flex-direction:row;flex-wrap:wrap}
  .fx{flex-direction:column}
  .fx-side{width:100%;flex-direction:row;overflow-x:auto;border-right:none;border-bottom:1px solid var(--bdr)}
  .fx-place{white-space:nowrap;width:auto}
  .fx-head,.fx-row{grid-template-columns:1fr 4.5rem}
  .fx-type{display:none}
  .mx{flex-direction:column}
  .mx-list{width:100%;max-height:12rem;border-right:none;border-bottom:1px solid var(--bdr)}
  .dx{flex-direction:column}
  .dx-side{width:100%;display:flex;overflow-x:auto;border-right:none;border-bottom:1px solid var(--bdr)}
  .dx-doc{white-space:nowrap;width:auto}
  .lab-debrief-head{gap:1rem}
  .lab-score-num{font-size:2.8rem}
  .ddl-card-inner{padding:1.2rem 1.3rem}
  .rd-head{gap:1rem}
  .acad-stage-hd{flex-wrap:wrap}
  .acad-stage-prog{width:100%;text-align:left;display:flex;align-items:center;gap:.7rem}
  .acad-stage-bar{margin-top:0}
}
@media (max-width:560px){
  .section-hero{padding:1.6rem 0 1.4rem}
  .lsn-sec,.scn,.qz,.qz-result,.dg-card,.ddl-sec,.rt-rep-sec,.adm-sec{padding:1.1rem 1.1rem}
  .hd-card{padding:1.1rem}
  .lesson-badpair{flex-direction:column}
  .lab-modes{grid-template-columns:1fr}
  .rt-facts{grid-template-columns:1fr}
  .mod-tab{min-width:0;font-size:.8rem;padding:.5rem .4rem}
}

/* SCENARIO AUTHORING. The surface where "a scenario is data" stops being a
   claim in the architecture document and becomes something a customer can try.
   Everything here is ordinary form furniture on purpose - a fieldset per goal,
   a legend naming it, real labels - because the interesting part is the
   vocabulary in the dropdown, not the chrome around it. No drag affordances
   exist to be styled: goals move with buttons, so there is nothing here that
   works with a mouse and not with a keyboard. */
.scen-ed{margin-bottom:1.4rem}
.scen-fs{border:1px solid var(--bdr);border-radius:var(--r);padding:.9rem 1.1rem 1.1rem;
  margin:0 0 1rem;min-width:0}
.scen-lg{font-size:.78rem;font-weight:800;text-transform:uppercase;letter-spacing:.06em;
  color:var(--txm);padding:0 .4rem}
.scen-goal{border-left:3px solid var(--lo)}
.scen-goal-bar{display:flex;flex-wrap:wrap;gap:.4rem;margin-bottom:.6rem}
.scen-del{color:var(--er-bt)}
.scen-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,15rem),1fr));
  gap:0 1rem;align-items:start}
.scen-f{display:flex;flex-direction:column;min-width:0}
.scen-f .adm-inp{width:100%;box-sizing:border-box}
.scen-note{font-size:.76rem;color:var(--txs);line-height:1.5;margin:-.1rem 0 .5rem}
.scen-apps{display:flex;flex-wrap:wrap;gap:.4rem;margin:.35rem 0 .2rem}
.scen-app{display:inline-flex;align-items:center;gap:.35rem;font-size:.8rem;
  border:1px solid var(--bdr);border-radius:99px;padding:.28rem .7rem;cursor:pointer}
.scen-app.on{border-color:var(--lo);background:var(--lo-l);color:var(--lo-h)}
.scen-comps{display:flex;flex-wrap:wrap;gap:.4rem;align-items:center;margin:.35rem 0}
.scen-chip{display:inline-flex;align-items:center;gap:.3rem;font-size:.79rem;
  border:1px solid var(--bdr);border-radius:99px;padding:.2rem .3rem .2rem .7rem}
.scen-chip strong{font-family:var(--fm);font-size:.76rem;color:var(--txm)}
.scen-addcomp{display:flex;flex-wrap:wrap;gap:.4rem;align-items:center;margin:.2rem 0 .1rem}
.scen-addcomp .adm-inp{margin-bottom:0}
.scen-w{width:5.5rem}
.adm-json{margin-top:1.2rem;border-top:1px solid var(--g100);padding-top:.8rem}
.adm-json summary{font-size:.82rem;font-weight:700;color:var(--txm);cursor:pointer;padding:.2rem 0}
@media (max-width:600px){
  .scen-grid{grid-template-columns:1fr}
  .scen-fs{padding:.7rem .8rem .9rem}
}

/* READING MEASURE. The lesson reader had no measure at all: .lsn-body was
   max-width:none, so the line length was whatever Bootstrap's 1140px grid
   container happened to leave — 115 characters per line at a 1280px viewport,
   measured on real rendered prose. The comfortable range is 45–75 and WCAG
   1.4.8 caps at 80, so the primary reading surface of a product about digital
   literacy was around fifty per cent wider than any recommendation.

   Constrained on the text elements rather than on .lsn-body itself, so tables,
   figures and callouts keep the full column while prose does not. In `ch`
   rather than rem because the accessibility panel swaps the typeface — a rem
   measure would mean the characters-per-line changes for exactly the learners
   who chose a font to make reading easier. */
.lsn-body>p,.lsn-body>ul,.lsn-body>ol,.lsn-body>blockquote{max-width:75ch}

/* ── VERIFY A CREDENTIAL ─────────────────────────────────────
   Every colour is a token, so the four theme ramps (light, dark and the two
   high-contrast ones) get this for free. tools/check-data.js re-measures the
   pairings on every run and would fail the build on a literal here. */
.vfy-wrap{max-width:44rem}
.vfy-lead{color:var(--txs);line-height:1.62;margin-bottom:1.4rem}
.vfy-form{background:var(--wh);border:1px solid var(--bdr);border-radius:var(--rl);padding:1.4rem}
.vfy-field{display:block;margin-bottom:.9rem}
.vfy-field span{display:block;font-size:.68rem;font-weight:800;letter-spacing:.08em;text-transform:uppercase;
  color:var(--txm);margin-bottom:.3rem}
.vfy-field input{width:100%;font-family:var(--fb);font-size:.95rem;color:var(--tx);background:var(--bg);
  border:1px solid var(--bdr);border-radius:var(--rs);padding:.6rem .75rem}
.vfy-field input.mono{font-family:var(--fm);letter-spacing:.04em}
.vfy-field input:focus{outline:2px solid var(--lo);outline-offset:1px;border-color:var(--lo)}
.vfy-result{display:none;gap:.8rem;align-items:flex-start;margin-top:1.2rem;padding:1rem 1.1rem;
  border-radius:var(--rl);border:1px solid var(--bdr);line-height:1.55}
.vfy-result.vfy-ok,.vfy-result.vfy-no,.vfy-result.vfy-info{display:flex}
.vfy-result i{font-size:1.3rem;line-height:1;margin-top:.1rem}
.vfy-result strong{display:block;font-size:1rem;margin-bottom:.25rem}
.vfy-result p{margin:0;font-size:.88rem;color:var(--txs)}
.vfy-ok{background:var(--ok-l);border-color:var(--ok)}
.vfy-ok i,.vfy-ok strong{color:var(--ok)}
.vfy-no{background:var(--er-l);border-color:var(--er)}
.vfy-no i,.vfy-no strong{color:var(--er)}
.vfy-info{background:var(--g100)}
.vfy-info i,.vfy-info strong{color:var(--txs)}
.vfy-limits{margin-top:1.8rem;padding-top:1.2rem;border-top:1px dashed var(--bdr)}
.vfy-limits h2{font-size:1rem;font-weight:800;color:var(--tx);margin-bottom:.7rem}
.vfy-limits p{font-size:.86rem;color:var(--txm);line-height:1.6;margin-bottom:.6rem}
.cert-verify-btn{font:inherit;font-size:.8rem;font-weight:700;color:var(--lo);background:none;border:0;
  padding:0;text-decoration:underline;text-underline-offset:3px;cursor:pointer}
.cert-verify-btn:hover{color:var(--lo-h)}
