  :root{
    /* brand v0.3 (handoff §B) — dark hero ground, cream body */
    --ground:#15130E; --cream:#F3EEE2; --card:#FAF6EC; --cardline:#E4DBC8;
    /* 🔴 --muted AND --faint WERE DARKENED FOR CONTRAST (CH ruling 2026-08-13). They were #8B857A (3.16:1)
       and #9A9078 (2.73:1) on --cream, the binding ground — both under the 4.5:1 AA floor, and between them
       they carried 17 of the 21 failing selectors across both tools' report and Straight Read. Audited by
       compositing every rendered element against its real ground, not by reading the stylesheet.
       Now 5.5:1 and 4.8:1, kept a step apart on purpose so the muted/faint hierarchy still reads — flattening
       them to one tone would have fixed contrast by deleting a level of the type system.
       ✅ Safe to change globally: zero elements use either token on a dark ground (verified on the rendered
       pages), so darkening them cannot move anything the wrong way. */
    --ink:#1D1A14; --text:#3A352C; --muted:#655E52; --faint:#6E6759; --label:#B9B09B;
    --rule:#DCD8D0; --line:#E6E2DA;
    /* 🔴 --teal-deep #2E7D74 → #2A6F67 (2026-08-13). It is used as TEXT in 34 places and measured 4.22:1
       on --cream — a near miss that failed on nine 360 surfaces at once. Verified safe to move the token
       rather than patch call sites: ZERO elements render it on a dark ground, checked across both tools,
       both phases and both tiers. --gold could NOT have this treatment (see below). */
    --gold:#C7A15B; --sage:#6FAE8C; --teal:#3E8E84; --teal-deep:#2A6F67;
    /* 🔴 INK VARIANTS — the same hues, dark enough to be TEXT on a light ground.
       --gold and --sage are correct as they are: they are borders, rules and text on the DARK cards, where
       gold measures 7.67:1. It is only gold/sage TEXT on cream that fails (2.24:1 and 2.4:1). Retuning the
       base tokens would have dragged every border and every dark-card label with them, so the accent stays
       the accent and only the light-ground text uses point here. */
    /* --orange-ink is the CAUTIONARY tag's twin. --wl-orange itself is 4.38:1 on the card — a near miss
       the eye would never flag, and the reason the re-audit ran on four profiles instead of one: the
       cautionary tag only renders on some reads, so a single-profile check had merged it with the
       exemplar's and reported the worse of the two as fixed. The EOS panel keeps the base token. */
    /* --teal-ink is now redundant — --teal-deep itself passes. Kept as an ALIAS so existing call sites
       keep working and no second source of truth for the same colour can drift from it.
       --gold-ink and --sage-ink are NOT redundant: their base tokens are still correct on dark grounds
       (.sr-mono and .sr-flip-k render gold on near-black at 7.67:1), so only their LIGHT-ground text uses
       point at the ink variant. */
    /* The INK ramp: the same hues, dark enough to be TEXT. Values are set against --cream (#F3EEE2),
       the DARKER of the two light grounds and therefore the binding one — tuning against the card
       (#FAF6EC) is what left gold at 4.21:1 on the 360's paper-ground rows. */
    --gold-ink:#7E6228; --sage-ink:#376E52; --teal-ink:var(--teal-deep); --orange-ink:#AC5622;
    /* The three READ-CARD inks and the four QUADRANT inks. Both sets were bright brand literals used as
       TEXT (2.24-2.84:1 at 40px), and both were duplicated per tool — the read-card three were declared
       inside each tool's renderCalc, which is the component-duplication trap CH flagged today. */
    --read-good:var(--sage-ink); --read-mid:var(--gold-ink); --read-low:#8F4A31;
    --qc-blind-ink:#94402B; --qc-strength-ink:var(--sage-ink); --qc-deficit-ink:var(--gold-ink);
    --qc-underread-ink:var(--teal-deep);
    /* secondary brand (Wavelength orange + complement gold) — used by the EOS panel */
    /* CH REVERTED the darkened ground on 2026-08-13 — the deeper orange was not acceptable, and the
       contrast is addressed in the panel's TEXT instead (see details.eos .eos-sub and friends).
       Keep in mind what that costs: pure white is only 4.73:1 here, so this panel has ~0.2 of AA
       headroom in total and cannot absorb a lighter orange. */
    --wl-orange:#B35B26; --wl-gold:#B59258;
    --teal-soft:#7FC3B6; --blue:#3C6E8C; --slate:#46506E;
    /* zone words — body (dark-on-light) + hero (light-on-dark ground) variants */
    /* Band words on the LIGHT card ground (#FAF6EC). Measured 2026-08-08: Aligned was 3.0:1 and Resonant
       3.6:1 — both under the 4.5:1 needed for normal text, and the band word renders at 11px. Aligned is the
       most common result, so most readers saw the failing one. Darkened to clear the bar; the hues are
       unchanged (same gold, same teal, deeper). The -on variants below are for the dark hero and were already
       fine at 6.7-8.8:1 — do not "fix" those to match. */
    --z-diss:#A85636; --z-cons:#8A6B26; --z-reso:#2F6E66;
    --z-diss-on:#D08A6E; --z-cons-on:#C3B271; --z-reso-on:#6FAE8C;
    /* lens identity — you = slate, team = gold */
    --you:#5F5B53; --team:#B07D2E;
    --serif:"Spectral",Georgia,"Times New Roman",serif;
    --sans:"Hanken Grotesk",system-ui,-apple-system,Segoe UI,sans-serif;
  }
  *{box-sizing:border-box;}
  html,body{margin:0;}
  body{background:var(--cream);color:var(--text);font-family:var(--serif);
    -webkit-font-smoothing:antialiased;line-height:1.5;}
  button{font-family:inherit;}

  /* ===== masthead (dark) ===== */
  /* 🔴 PERSISTENT, AND IT COMPRESSES (CH 2026-08-09, mimicking Circles/Stance). The bar already rendered
     on every phase — it sits outside #app — but it scrolled away, so on a long page like the Straight Read
     the reader lost every trace of which product they were in. Behaviour and thresholds are taken from
     quickwave's `components/BrandHeader.tsx`, which was itself built to Circles' spec, so all three
     products now behave identically. Our lockup and the #7FC3B6 system line already matched theirs — that
     hex is the one literally shared across every Wavelength product — so this is persistence, not a
     redesign. Full height at rest so the system line is legible on arrival; wordmark alone once someone
     is reading. */
  .masthead{background:var(--ground);color:var(--cream);text-align:center;padding:20px 16px 22px;
    position:sticky;top:0;z-index:50;transition:padding .4s ease;}
  .masthead.compressed{padding:9px 16px 10px;}
  .masthead .lockup{transition:gap .4s ease;}
  .masthead.compressed .lockup{gap:0;}
  .masthead.compressed .lock-line2{max-height:0;opacity:0;overflow:hidden;transition:max-height .4s ease,opacity .25s ease;}
  .masthead .lock-line2{max-height:26px;opacity:1;transition:max-height .4s ease,opacity .3s ease;}
  @media print{ .masthead{position:static;} }
  @media (prefers-reduced-motion:reduce){ .masthead,.masthead .lockup,.masthead .lock-line2{transition:none;} }
  /* CH, 22 Aug: the PRODUCT mark sits beside the product, and the house mark LEADS the Prismatics line.
     So the lockup is a column again, and each line carries its own mark inline. */
  .lockup{display:inline-flex;flex-direction:column;align-items:center;gap:9px;}
  .lock-line1{display:inline-flex;align-items:center;gap:10px;}
  .lock-word{font-family:var(--sans);font-weight:600;letter-spacing:.22em;font-size:15px;
    text-indent:.22em;color:var(--cream);}
  .conv-mark{height:20px;width:auto;display:block;}
  /* The product mark is the one a person is here for, so it leads and it is the larger of the two.
     ⚠️ align-self, not the text baseline: the wordmark carries text-indent for its letter-spacing, which
     pushes its box off-centre against a sibling mark. Measured — centring on the text box was 2px out. */
  .prod-mark{height:22px;width:auto;display:block;flex:none;align-self:center;transition:height .4s ease;}
  .masthead.compressed .prod-mark{height:18px;}
  /* The house mark rides the 11px parent line. Smaller than the product mark on purpose: product leads.
     ⚠️ It therefore hides with that line when the masthead compresses on scroll — which is acceptable only
     because the product mark stays on the line above. A masthead with no mark at all would not be. */
  .lock-line2 .conv-mark{height:15px;flex:none;}

  /* 🔴 STROKE WEIGHT IS A SIZE DECISION, AND BOTH MARKS WERE SUB-PIXEL UNTIL THIS WAS MEASURED.
     The marks are drawn in a 96-unit box at their display weight. Rendered into a 15px or 22px line that
     scales the stroke down by the same factor: the house mark came out at 0.34 CSS px and the product mark
     at 0.64. Under one pixel a stroke does not get thinner, it gets FAINTER — the browser spreads it across
     a pixel at partial opacity — which is why the convergence mark has looked washed out in the masthead
     since the day it shipped, and no diff would ever have said so.
     Set here rather than in the SVGs so the geometry files stay exactly as drawn: the marks are the same
     drawing, and only their weight-at-size is a presentation choice. Targets ≥1 CSS px at each size, so it holds on a 1x
     display and not only on the 2x one it happened to be measured on. */
  .lock-line2 .conv-mark [stroke-width]{stroke-width:7;}
  .lock-line1 .prod-mark [stroke-width]{stroke-width:5;}
  .lock-sub .conv-mark [stroke-width]{stroke-width:7;}
  .lock-sub .conv-mark{height:15px;}
  .lock-line2{display:inline-flex;align-items:center;gap:8px;font-family:var(--sans);font-weight:600;
    letter-spacing:.18em;font-size:11px;color:var(--teal-soft);text-transform:uppercase;}
  .lock-w{height:15px;width:auto;display:block;}

  .sheet{max-width:760px;margin:0 auto;padding:40px 22px 30px;}

  .eyebrow{font-family:var(--sans);font-weight:600;letter-spacing:.22em;font-size:11px;
    color:var(--teal-deep);text-align:center;margin:0 0 14px;text-indent:.22em;text-transform:uppercase;}
  .display{font-weight:500;font-size:33px;line-height:1.14;text-align:center;margin:0 0 16px;
    letter-spacing:-.01em;color:var(--ink);}
  .lede{font-size:16.5px;color:#6f6a60;text-align:center;max-width:50ch;margin:0 auto 8px;font-style:italic;}
  .hr{height:1px;background:var(--rule);border:0;width:120px;margin:30px auto;}

  /* progress */
  .progress{display:flex;gap:6px;justify-content:center;margin:0 auto 26px;flex-wrap:wrap;max-width:340px;}
  .progress i{width:8px;height:8px;border-radius:50%;background:var(--rule);transition:background .3s,transform .3s;}
  .progress i.on{background:var(--teal);transform:scale(1.18);}
  .progress i.done{background:var(--sage);}

  /* buttons */
  .btn{display:inline-block;background:var(--ink);color:#fff;font-family:var(--sans);font-weight:600;
    letter-spacing:.04em;font-size:15px;border:0;cursor:pointer;padding:15px 30px;border-radius:10px;
    transition:transform .15s ease, background .15s ease;text-decoration:none;}
  .btn:hover:not(:disabled){background:#332e22;transform:translateY(-1px);}
  .btn:disabled{opacity:.38;cursor:not-allowed;}
  .btn:focus-visible{outline:3px solid var(--teal);outline-offset:3px;}
  .btn-ghost{background:transparent;color:var(--teal-ink);font-family:var(--sans);font-weight:600;
    font-size:13.5px;border:0;cursor:pointer;padding:12px 10px;letter-spacing:.03em;}
  .btn-ghost:hover{color:var(--text);}
  .center{text-align:center;}
  .navrow{display:flex;align-items:center;justify-content:center;gap:14px;margin-top:30px;flex-wrap:wrap;}

  /* ===== assessment — statement pair ===== */
  .q-eyebrow{font-family:var(--sans);font-weight:600;letter-spacing:.18em;font-size:11px;
    text-transform:uppercase;color:var(--muted);text-align:center;margin:0 0 6px;}
  .q-title{font-weight:500;font-size:30px;margin:0 0 4px;letter-spacing:-.01em;text-align:center;color:var(--ink);}
  .q-epi{font-family:var(--sans);font-size:10.5px;font-weight:600;letter-spacing:.16em;
    text-transform:uppercase;color:var(--faint);text-align:center;margin:0 0 26px;}

  .stmt{max-width:540px;margin:0 auto 24px;background:#fff;border:1px solid var(--rule);
    border-radius:14px;padding:20px 20px 22px;}
  .stmt-who{display:inline-flex;align-items:center;gap:8px;font-family:var(--sans);font-weight:700;
    font-size:11px;letter-spacing:.12em;text-transform:uppercase;margin:0;}
  .stmt-who .dot{width:9px;height:9px;border-radius:50%;}
  .sil-ic{vertical-align:-2px;flex:0 0 auto;}
  .stmt-who.you{color:var(--you);} .stmt-who.you .dot{background:var(--you);}
  .stmt-who.team{color:var(--team);} .stmt-who.team .dot{background:var(--team);}
  .stmt-text{font-size:16.5px;line-height:1.5;color:var(--text);margin:0 0 16px;}
  .stmt-head{display:flex;align-items:baseline;justify-content:space-between;gap:10px;margin:0 0 14px;}
  .slider-pos{font-family:var(--sans);font-weight:600;font-size:12px;letter-spacing:.02em;
    color:var(--text);white-space:nowrap;}
  .slider-pos b{font-variant-numeric:tabular-nums;}
  .slider-pos.unset{font-style:italic;font-weight:600;color:var(--teal-deep);}
  .srange{-webkit-appearance:none;appearance:none;width:100%;height:12px;border-radius:7px;cursor:pointer;
    margin:0;background:
      linear-gradient(90deg, currentColor, currentColor) 0/var(--p,50%) 100% no-repeat,
      linear-gradient(90deg, rgba(95,91,83,.13), rgba(176,125,46,.15));
    background-color:#fff;box-shadow:inset 0 0 0 1px var(--rule);}
  .srange.you{color:var(--you);} .srange.team{color:var(--team);}
  .srange.unset{color:transparent;}
  .srange:focus-visible{outline:2px solid var(--teal);outline-offset:3px;}
  .srange::-webkit-slider-thumb{-webkit-appearance:none;width:26px;height:26px;border-radius:50%;
    border:3px solid #fff;box-shadow:0 1px 5px rgba(0,0,0,.25);cursor:grab;}
  .srange.you::-webkit-slider-thumb{background:var(--you);}
  .srange.team::-webkit-slider-thumb{background:var(--team);}
  .srange.unset::-webkit-slider-thumb{background:#fff;border-color:var(--muted);border-style:dashed;box-shadow:none;}
  .srange::-moz-range-thumb{width:24px;height:24px;border-radius:50%;border:3px solid #fff;
    box-shadow:0 1px 5px rgba(0,0,0,.25);cursor:grab;}
  .srange.you::-moz-range-thumb{background:var(--you);}
  .srange.team::-moz-range-thumb{background:var(--team);}
  .srange.unset::-moz-range-thumb{background:#fff;border-color:var(--muted);border-style:dashed;box-shadow:none;}
  .scale-poles{display:flex;justify-content:space-between;font-family:var(--sans);font-size:10.5px;
    font-weight:600;color:#928a7c;margin:9px 2px 0;}
  .scale-poles span:nth-child(2){color:#a39a8a;}
  .assess-hint{font-family:var(--sans);font-size:12.5px;font-weight:600;letter-spacing:.02em;
    color:var(--faint);text-align:center;margin:12px 0 0;}

  .example{max-width:540px;margin:0 auto;}
  .example summary{font-family:var(--sans);font-size:13px;font-weight:600;color:var(--muted);
    cursor:pointer;list-style:none;padding:6px 2px;}
  .example summary::-webkit-details-marker{display:none;}
  .example summary:hover{color:var(--text);}
  .example textarea{width:100%;margin-top:8px;font-family:var(--serif);font-size:15px;padding:11px 13px;
    border:1px solid var(--rule);border-radius:10px;background:#fff;color:var(--text);resize:vertical;min-height:60px;}
  .example textarea:focus-visible{outline:2px solid var(--teal);outline-offset:1px;}
  .ex-note{font-family:var(--sans);font-size:11px;color:var(--faint);margin:6px 2px 0;}

  /* confidence options */
  .cert-list{display:flex;flex-direction:column;gap:11px;max-width:500px;margin:6px auto 0;}
  .cert-opt{display:flex;gap:13px;align-items:flex-start;text-align:left;background:#fff;
    border:1px solid var(--rule);border-radius:12px;padding:15px 17px;cursor:pointer;transition:all .14s ease;
    font-family:var(--serif);}
  .cert-opt:hover{border-color:var(--teal);}
  .cert-opt[aria-pressed="true"]{border-color:var(--ink);box-shadow:0 0 0 1px var(--ink) inset;}
  .cert-opt .rdot{flex:0 0 auto;width:14px;height:14px;border-radius:50%;border:2px solid var(--muted);margin-top:4px;}
  .cert-opt[aria-pressed="true"] .rdot{border-color:var(--ink);background:var(--ink);}
  .cert-opt .lab{display:block;font-weight:600;font-size:16px;color:var(--text);}
  .cert-opt .band{display:block;font-family:var(--sans);font-size:12px;color:var(--muted);margin-top:3px;letter-spacing:.04em;}

  /* email gate */
  .form{max-width:460px;margin:8px auto 0;text-align:left;}
  .field{margin:0 0 14px;}
  .field label{display:block;font-family:var(--sans);font-size:12px;font-weight:600;letter-spacing:.04em;
    color:var(--muted);text-transform:uppercase;margin:0 0 6px;}
  .field input{width:100%;font-family:var(--serif);font-size:16px;padding:13px 15px;border:1px solid var(--rule);
    border-radius:10px;background:#fff;color:var(--text);}
  .field input:focus-visible{outline:2px solid var(--teal);outline-offset:1px;}
  .consent{display:flex;gap:11px;align-items:flex-start;margin:18px 0 0;font-family:var(--sans);
    font-size:13px;line-height:1.5;color:#5d584f;cursor:pointer;}
  .consent input{margin-top:3px;flex:0 0 auto;width:17px;height:17px;accent-color:var(--teal-deep);}
  .consent a{color:var(--teal-deep);}

  /* calculating */
  .calc{display:flex;flex-direction:column;align-items:center;gap:22px;padding:60px 0;}
  .calc .ring{width:60px;height:60px;}
  .calc .ring circle{fill:none;stroke:var(--rule);stroke-width:5;}
  .calc .ring .arc{stroke:var(--teal);stroke-linecap:round;stroke-dasharray:60 140;
    transform-origin:center;animation:spin 1s linear infinite;}
  @keyframes spin{to{transform:rotate(360deg);}}
  .calc p{font-family:var(--sans);font-size:14px;color:var(--muted);letter-spacing:.04em;}

  /* ===== results ===== */
  .report{margin:0 auto;}
  /* Box tightened to match (CH: "make the whole box commensurately smaller") — putting the number on the
     word's baseline removed a whole line of height, so the surrounding air was sized for a taller block. */
  .r-hero{background:var(--ground);color:var(--cream);border-radius:16px;padding:22px 24px 22px;margin:0 0 26px;
    position:relative;overflow:hidden;}
  .r-hero .sub{font-family:var(--sans);font-size:11px;letter-spacing:.10em;color:#8E876F;margin:0 0 12px;text-transform:uppercase;}
  .r-hero .cre{font-family:var(--sans);font-weight:600;letter-spacing:.20em;font-size:11px;color:var(--sage);
    text-transform:uppercase;margin:0 0 6px;}
  .r-hero .cre-full{display:block;font-weight:500;letter-spacing:.06em;font-size:9.5px;text-transform:none;
    color:var(--faint);margin-top:3px;}
  /* #3: the acronym is a small tag, not the label — headline reads "Mission Resonance" / "Cultural Resonance" */
  /* 🔴 ON THE DARK HERO — so it must NOT follow --faint, which was darkened on 2026-08-13 for light
     grounds and made this WORSE (3.31:1). The dark-ground ramp runs the other way. This is the case my
     'no token uses on a dark ground' check missed, because that check only swept the solo Check and the
     360 hero was never rendered. */
  .r-hero .cre-tag{font-weight:600;letter-spacing:.10em;font-size:9px;color:#B9B09B;
    border:1px solid rgba(243,238,226,0.22);border-radius:4px;padding:1px 5px;margin-left:8px;}
  /* takeaway highlight panel (Report Upgrade v0.5) — opening at-a-glance */
  .takeaway{background:var(--card);border:1px solid var(--cardline);border-radius:18px;
    padding:22px 24px 24px;margin:0 0 34px;box-shadow:0 10px 30px rgba(58,53,44,.06);}
  .takeaway-eyebrow{font-family:var(--sans);font-weight:600;letter-spacing:.16em;font-size:11px;
    text-transform:uppercase;color:var(--teal-deep);margin:0 0 11px;}
  /* B3: the MAP at a glance — counts per populated cell, above the lead read */
  .map-counts{font-family:var(--sans);font-size:12.5px;color:var(--muted);margin:-4px 0 13px;line-height:1.5;letter-spacing:.01em;}
  .takeaway .lead-truth{margin:0 0 6px;}
  /* §E3: fill the lead card — the read's coordinate (positions) + a one-line "what this read means" */
  .lead-coord{font-family:var(--sans);font-weight:700;font-size:9.5px;letter-spacing:.10em;text-transform:uppercase;color:var(--muted);margin:0 0 8px;}
  .lead-explain{font-family:var(--sans);font-size:13px;line-height:1.55;color:var(--text);margin:0 0 4px;max-width:60ch;}
  .takeaway .sig-frame{margin:0 0 18px;}
  .lead-move{font-family:var(--sans);font-size:13.5px;line-height:1.55;color:var(--teal-deep);font-weight:600;margin:0 0 10px;}
  .lead-colead{font-family:var(--serif);font-size:16px;line-height:1.45;color:var(--text);margin:0 0 8px;
    padding-left:13px;border-left:3px solid var(--gold);}
  .lead-colead-k{font-family:var(--sans);font-weight:700;font-size:9.5px;letter-spacing:.12em;text-transform:uppercase;
    color:var(--muted);display:block;margin:0 0 2px;}
  /* v1.5 §4 — reflective prompt on the lead read (a question to sit with, not a prescription) */
  .lead-prompt{font-family:var(--serif);font-style:italic;font-size:15.5px;line-height:1.5;color:var(--text);
    margin:12px 0 2px;padding-left:13px;border-left:3px solid var(--teal-soft);max-width:64ch;}
  .lead-prompt-k{font-family:var(--sans);font-style:normal;font-weight:700;font-size:9.5px;letter-spacing:.12em;
    text-transform:uppercase;color:var(--muted);display:block;margin:0 0 3px;}
  /* S9 — stakes line appended under the reflective prompt (why it matters; say/do axis) */
  .lead-prompt-stake{display:block;margin-top:8px;font-family:var(--sans);font-style:normal;font-size:12.5px;
    line-height:1.55;color:var(--muted);}
  /* v1.5 §1 — surface-read note under Reading the Signals; ties the gap depth to 360 */
  .surface-note{font-family:var(--sans);font-size:12px;line-height:1.55;color:var(--muted);
    margin:16px 0 0;padding-top:13px;border-top:1px dashed var(--line);}
  /* v1.5 §1 — landing ladder led by the Brave-leaders prime (Check → 360 → longitudinal) */
  /* centered box: auto-margined + max-width (sits under the CTA), text left-aligned inside */
  .ladder-box{max-width:470px;margin:34px auto 0;padding:20px 26px 22px;border:1px solid var(--rule);
    border-radius:14px;background:var(--card);text-align:left;}
  .prime{font-family:var(--serif);font-style:italic;font-size:15px;line-height:1.5;color:var(--ink);
    border-left:3px solid var(--teal);padding-left:14px;margin:2px 0 20px;max-width:60ch;}
  .ladder-box .prime{border-left:0;padding-left:0;margin:0 0 16px;max-width:none;}
  .ladder-box .ladder{margin:0;max-width:none;}
  .ladder{list-style:none;counter-reset:rung;margin:0 0 26px;padding:0;display:flex;flex-direction:column;gap:11px;max-width:62ch;}
  .ladder li{display:flex;gap:11px;align-items:baseline;counter-increment:rung;}
  .ladder li::before{content:counter(rung);font-family:var(--sans);font-weight:700;font-size:10.5px;color:var(--label);
    border:1px solid var(--rule);border-radius:50%;width:20px;height:20px;line-height:18px;text-align:center;flex:0 0 auto;}
  .ladder li.on::before{background:var(--ink);color:#fff;border-color:var(--ink);}
  .ladder .rung-k{font-family:var(--sans);font-weight:700;font-size:11px;letter-spacing:.08em;text-transform:uppercase;
    color:var(--ink);flex:0 0 auto;width:84px;}
  .ladder .rung-d{font-family:var(--sans);font-size:13px;line-height:1.5;color:var(--muted);}
  .ladder .rung-d em{font-style:normal;font-weight:700;color:var(--teal-deep);}
  @media (max-width:520px){ .ladder li{flex-wrap:wrap;} .ladder .rung-k{width:auto;} .ladder .rung-d{flex-basis:100%;padding-left:31px;} }
  .lead-truth{font-family:var(--serif);font-weight:500;font-size:21px;line-height:1.4;color:var(--ink);
    margin:0 0 14px;max-width:64ch;}
  @media (max-width:600px){ .lead-truth{font-size:19px;} }
  .crq-row{display:flex;align-items:baseline;gap:14px;flex-wrap:wrap;}
  /* 🔴 THE STATE LEADS, THE NUMBER SITS BESIDE IT (CH ruling 2026-08-09). The band word was 19px stacked
     under a 64px number, so the hero's loudest element was the one thing the whole system calls secondary.
     Now: the word takes the Straight Read's size in the report's own sans — CH's split, "that typeface at
     that size" — and the number sits on the same baseline, a step smaller, as the supporting fact. */
  .crq-head{display:flex;align-items:baseline;gap:12px;flex-wrap:wrap;}
  .crq-num{font-family:var(--serif);font-weight:700;font-size:34px;line-height:1;color:var(--cream);}
  .crq-zone{font-family:var(--sans);font-weight:600;font-size:44px;line-height:1.05;letter-spacing:-.01em;}
  .crq-band{font-family:var(--sans);font-size:12px;color:#8E876F;margin-top:6px;}
  .zscale{margin:14px 0 6px;max-width:440px;}
  /* 🔴 The cap note — renders ONLY when the headline word and the scale's own stripe disagree, which is the
     one moment the hero needs a sentence rather than a number. Rides the dark hero, so the colour is measured
     against #15130E, not eyeballed: #E8A889 gives 6.6:1. The rule is the Discordant stroke because that is
     the band the reader is being moved INTO — a neutral rule read as decoration beside a scale full of them. */
  .cap-note{max-width:440px;margin:10px 0 0;padding-left:11px;border-left:2px solid #A85636;
    font-family:var(--sans);font-size:12px;line-height:1.55;color:#E8A889;}
  /* #7: HARD colour stops at the real band boundaries. 🔴 The stops are set INLINE by `zoneScale` from
     SCORING.thresholds.bands — they were hardcoded 50/75 here and did not move when v0.4 recut to 50/84.
     Do not reintroduce a background here: a literal in this file is exactly how that drift happened. */
  .zscale .track{position:relative;height:8px;border-radius:4px;}
  /* #4: ticks AT the boundaries so the eye can place the marker in the right band */
  .zscale .ztick{position:absolute;top:-3px;bottom:-3px;width:1.5px;background:rgba(43,39,31,.55);z-index:1;}
  .zscale .zband{position:absolute;top:-3px;bottom:-3px;background:rgba(243,238,226,0.15);border-radius:3px;box-shadow:inset 0 0 0 1px rgba(243,238,226,0.20);}
  .zscale .mark{position:absolute;top:-4px;width:3px;height:16px;border-radius:2px;background:var(--cream);transform:translateX(-50%);z-index:2;}
  .zband-cap{font-family:var(--sans);font-size:9px;letter-spacing:.06em;color:#8E876F;text-transform:uppercase;margin-top:7px;}
  /* #4: each label CENTERED in its own zone (Discordant≈25% · Aligned≈62% · Resonant≈88%), not at even thirds */
  .zscale .labs{position:relative;height:11px;font-family:var(--sans);font-size:8.5px;
    letter-spacing:.10em;color:#7E7660;text-transform:uppercase;margin-top:7px;}
  .zscale .zlab{position:absolute;transform:translateX(-50%);white-space:nowrap;}
  /* Same dark-hero case as .cre-tag above: 4.11:1 with the inherited tone, fixed by going LIGHTER. */
  .r-hero .zscale .zlab{color:#CFC7B4;}
  .r-def{font-family:var(--sans);font-size:12px;color:#A79F88;margin:10px 0 0;line-height:1.5;max-width:54ch;}
  .prism-hero{position:absolute;top:18px;right:18px;width:150px;height:84px;opacity:.96;}
  @media (max-width:600px){ .prism-hero{display:none;} }

  .sec-head{font-family:var(--sans);font-weight:600;letter-spacing:.16em;font-size:11px;text-transform:uppercase;
    color:var(--teal-deep);margin:34px 0 16px;}

  /* three reads */
  .reads{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;}
  .read-card{background:var(--card);border:1px solid var(--cardline);border-radius:14px;padding:17px 17px 18px;
    position:relative;overflow:hidden;display:flex;flex-direction:column;}
  .read-card::before{content:"";position:absolute;top:0;left:0;right:0;height:3px;background:var(--zc,var(--teal));}
  .read-card .k{font-family:var(--sans);font-size:8.5px;font-weight:600;letter-spacing:.12em;color:var(--faint);
    text-transform:uppercase;margin:2px 0 9px;line-height:1.4;}
  .read-card .k-full{display:block;font-size:9px;font-weight:500;letter-spacing:.02em;text-transform:none;
    color:var(--muted);margin-top:2px;}
  .read-card .big{font-family:var(--serif);font-weight:700;font-size:40px;line-height:1;color:var(--ink);
    display:flex;align-items:baseline;gap:9px;}
  .read-card .zw{font-family:var(--sans);font-weight:700;font-size:12px;letter-spacing:.05em;text-transform:uppercase;}
  .rmeter{position:relative;height:7px;border-radius:4px;margin:14px 0 2px;
    background:linear-gradient(90deg,#C58463 0%,#C89A66 46%,#C3B271 62%,#6FAE8C 100%);
    box-shadow:inset 0 0 0 1px rgba(58,53,44,.08);}
  .rmeter .mark{position:absolute;top:-4px;width:3px;height:15px;border-radius:2px;background:var(--ink);
    transform:translateX(-50%);box-shadow:0 0 0 2px var(--card);}
  .read-card .shift-svg{width:100%;max-width:150px;height:auto;display:block;margin:5px 0 9px;}
  .read-card .sqh{font-family:var(--serif);font-weight:600;font-size:22px;color:var(--ink);line-height:1.05;}
  /* the one-line read sits right under the zone label (compressed, top-aligned) — not bottom-justified */
  .read-card .one{font-family:var(--sans);font-size:11.5px;color:#6b6456;margin:6px 0 0;padding-top:9px;line-height:1.45;}
  @media (max-width:600px){ .reads{grid-template-columns:1fr;} }

  /* dimension expand (folded into signal rows) */
  .dim-toggle{font-family:var(--sans);font-size:11.5px;font-weight:600;letter-spacing:.03em;color:var(--teal-deep);
    background:none;border:0;cursor:pointer;padding:9px 2px 2px;margin-top:6px;}
  .dim-toggle:hover{color:var(--ink);}
  .dim-read{font-family:var(--sans);font-size:12.5px;line-height:1.55;color:#6b6456;text-align:left;
    margin:9px 0 0;padding-top:10px;border-top:1px solid var(--line);}
  .dim-read[hidden]{display:none;}
  .dim-read-text{margin:0;}
  /* compact per-Signal row (Tier 1.5): left = read stack, right = gauge; detail behind the caret */
  .sig-body{display:flex;gap:18px;align-items:center;margin:2px 0 0;}
  .sig-main,.sig-trackwrap{flex:1 1 auto;min-width:0;}
  .sig-gauge{flex:0 0 auto;}
  .sig-gauge svg{display:block;width:124px;height:auto;}
  @media (max-width:560px){ .sig-body{flex-direction:column;align-items:stretch;gap:8px;} .sig-gauge{align-self:center;} }
  /* collapsed drawer: the numeric You/Team power bars */
  .dim-bars{margin:0 0 2px;}
  .vbar{display:flex;align-items:center;gap:10px;margin:0 0 8px;}
  .vbar:last-child{margin-bottom:0;}
  .vbar .lb{flex:0 0 54px;font-family:var(--sans);font-size:9.5px;font-weight:700;letter-spacing:.05em;
    text-transform:uppercase;text-align:right;color:var(--muted);display:inline-flex;align-items:center;gap:5px;justify-content:flex-end;}
  .vbar.you .lb{color:var(--you);} .vbar.team .lb{color:var(--team);}
  .vbar .trk{position:relative;flex:1 1 auto;height:10px;border-radius:5px;background:#fff;
    box-shadow:inset 0 0 0 1px rgba(58,53,44,.12);overflow:hidden;}
  .vbar .fill{position:absolute;left:0;top:0;bottom:0;border-radius:5px;
    background:linear-gradient(90deg,var(--gold),var(--sage) 45%,var(--teal) 72%,var(--blue));}
  .vbar .val{flex:0 0 24px;font-family:var(--sans);font-weight:700;font-size:12px;color:var(--text);
    text-align:right;font-variant-numeric:tabular-nums;}

  /* signal list (Report Upgrade v0.4) */
  .sig-frame{font-family:var(--sans);font-size:12.5px;color:var(--faint);margin:-4px 0 16px;line-height:1.5;}
  .sig-list{display:flex;flex-direction:column;gap:12px;}
  .sig-row{background:var(--card);border:1px solid var(--cardline);border-radius:14px;padding:16px 18px;
    border-left:5px solid var(--muted);}
  .sig-row.warn{border-left-color:var(--z-diss);}
  .sig-row.pos{border-left-color:var(--teal);}
  .sig-row.pos.muted{border-left-color:var(--sage);}
  .sig-row.neutral{border-left-color:var(--label);}
  .sig-row.is-lead{box-shadow:0 0 0 1px var(--cardline),0 6px 18px rgba(58,53,44,.07);}
  .sig-head{display:flex;align-items:baseline;gap:9px;flex-wrap:wrap;margin:0 0 7px;}
  .sig-label{font-family:var(--sans);font-weight:700;font-size:10.5px;letter-spacing:.10em;text-transform:uppercase;}
  .sig-row.warn .sig-label{color:var(--z-diss);}
  .sig-row.pos .sig-label{color:var(--teal-deep);}
  .sig-row.neutral .sig-label{color:var(--muted);}
  .sig-nm{font-family:var(--serif);font-weight:600;font-size:19px;color:var(--ink);}
  /* category / conversational verb, wrapped under the Signal name */
  .sig-cat{flex-basis:100%;font-family:var(--sans);font-size:10px;font-weight:600;letter-spacing:.06em;
    text-transform:uppercase;color:var(--faint);margin:1px 0 0;}
  .sig-epi{margin-left:auto;font-family:var(--sans);font-weight:600;font-size:11px;letter-spacing:.02em;color:var(--muted);}
  /* tight You/Team pole stack (icons + Emerging/Established), the visible read */
  .sig-poles{display:flex;flex-direction:column;gap:3px;margin:0 0 3px;}
  .sig-poles .pole{font-family:var(--sans);font-size:12.5px;font-weight:600;color:var(--text);
    display:inline-flex;align-items:center;gap:6px;}
  .sig-poles .pole.you{color:var(--you);} .sig-poles .pole.team{color:var(--team);}
  .sig-line{font-family:var(--sans);font-size:13.5px;color:#5d584f;line-height:1.55;margin:6px 0 0;}
  .sig-row .dim-toggle{display:inline-block;}
  .sig-zone{font-weight:700;}
  /* Tier 1.5 round-2: poles under the gauge, three-reads gauges, collapsible anchors + assistant */
  .sig-gaugecol{flex:0 0 auto;display:flex;flex-direction:column;align-items:center;gap:6px;}
  .sig-gaugecol .sig-poles{margin:0;align-items:flex-start;}
  .rd-gauge{display:flex;justify-content:center;margin:4px 0 2px;}
  .rd-gauge svg{width:84px;height:auto;}
  .reads .read-card{align-items:center;text-align:center;padding:14px 14px 15px;}
  .reads .read-card .big{font-size:33px;}
  .reads .read-card .k{margin-bottom:5px;}
  .reads .read-card .sqh{font-size:19px;margin-top:2px;}
  details.anch-card{padding:0;overflow:hidden;}
  details.anch-card>summary{list-style:none;cursor:pointer;padding:15px 17px;display:flex;flex-direction:column;gap:4px;position:relative;}
  details.anch-card>summary::-webkit-details-marker{display:none;}
  details.anch-card>summary::after{content:"▾";position:absolute;top:12px;right:15px;font-family:var(--sans);font-weight:700;font-size:13px;color:var(--muted);display:inline-block;transition:transform .18s ease;}
  details.anch-card[open]>summary::after{transform:rotate(180deg);}
  details.anch-card .anch-detail{padding:2px 17px 15px;}
  /* assistant is a plain card with an always-visible input bar — type while collapsed */
  .assist-bar{display:flex;align-items:center;gap:14px;flex-wrap:wrap;}
  .assist-bar .k{margin:0;flex:0 0 auto;}
  .assist-bar .assist-form{flex:1 1 240px;}
  /* v1.5 §5 — Mission develop mode (Path B): fork launcher + the chat with Roger, the guide */
  .path-b{max-width:540px;margin:0 auto 20px;display:flex;flex-wrap:wrap;align-items:center;justify-content:center;
    gap:8px 12px;padding:12px 18px;border:1px dashed var(--rule);border-radius:12px;background:var(--card);}
  .path-b-lab{font-family:var(--sans);font-size:13px;color:var(--muted);}
  .path-b-btn{font-family:var(--sans);font-weight:600;font-size:13px;color:var(--teal-deep);background:transparent;
    border:0;cursor:pointer;text-decoration:underline;padding:0;}
  .dev-chat{max-width:600px;margin:18px auto 14px;display:flex;flex-direction:column;gap:10px;text-align:left;
    max-height:44vh;overflow-y:auto;padding:2px;}
  .dev-msg{font-family:var(--sans);font-size:14px;line-height:1.5;padding:11px 15px;border-radius:13px;max-width:85%;}
  .dev-msg.bot{background:var(--card);border:1px solid var(--cardline);color:var(--text);align-self:stretch;max-width:100%;border-bottom-left-radius:4px;}
  .dev-msg.user{background:var(--ink);color:var(--cream);align-self:flex-end;border-bottom-right-radius:4px;}
  .dev-msg.thinking{color:var(--muted);font-style:italic;background:transparent;border:0;padding:4px 6px;align-self:flex-start;}
  /* full-width input (centered in its 600px column); Send sits below so the button doesn't shove the field off-center */
  .dev-form{max-width:600px;margin:0 auto;display:flex;flex-direction:column;align-items:stretch;gap:10px;}
  .dev-form textarea{width:100%;font-family:var(--sans);font-size:14px;padding:11px 14px;border:1px solid var(--rule);
    border-radius:10px;background:#fff;color:var(--text);resize:vertical;min-height:48px;}
  .dev-form .btn{align-self:flex-end;}
  .assist-inner{padding:0;margin-top:14px;}
  /* hero score gauge */
  .r-hero .crq-row{align-items:center;}
  .crq-meta{display:flex;flex-direction:column;}
  .hero-gauge{margin-left:auto;flex:0 0 auto;}
  .hero-gauge svg{display:block;width:150px;height:auto;}
  /* B2: hero gauge cell = the level gauge + the real per-dimension gap number */
  .hero-gaugewrap{display:flex;flex-direction:column;align-items:center;gap:5px;}
  .hero-gaugewrap .hero-gauge{margin:0;}
  /* #8/#2: inline gauge legend — "shaded = spread of answers" (never "shaded band", which the BAR already uses) */
  .hero-glegend{display:flex;flex-wrap:wrap;justify-content:center;gap:5px 12px;margin:6px 0 0;
    font-family:var(--sans);font-size:9.5px;color:#8f876f;}
  .hero-glegend span{display:flex;align-items:center;gap:4px;white-space:nowrap;}
  .hero-glegend .sil-ic{opacity:.9;}
  /* #9: the honest number of a mixed profile — same visual weight as the band, not subordinate caption text */
  .hero-gapline{font-family:var(--sans);font-size:12px;color:#A79F88;margin:8px 0 0;letter-spacing:.02em;text-align:center;line-height:1.3;}
  .hero-gapline b{color:var(--cream);font-weight:600;font-size:19px;}
  /* §E5: inline ⓘ hint beside a hero element — hover on desktop; tap / keyboard-focus via .hh-open; never hover-only */
  .hh{position:relative;display:inline-flex;vertical-align:middle;margin-left:5px;}
  .hh-i{width:15px;height:15px;flex:0 0 auto;border-radius:50%;border:1px solid rgba(243,238,226,.42);
    background:transparent;color:#D9D2C0;font-family:var(--serif);font-style:italic;font-weight:700;font-size:10px;
    line-height:1;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;padding:0;}
  .hh-i:hover,.hh-i:focus-visible{border-color:var(--cream);color:var(--cream);outline:2px solid rgba(243,238,226,.5);outline-offset:1px;}
  /* position:FIXED so the hero card's overflow:hidden can't clip it (was: the box was cut at the card edge);
     JS (wireHints place()) sets top/left under the ⓘ and clamps to the viewport. */
  /* 🔴 left/top:0 IS LOAD-BEARING, not a reset. wireHints place() clamps the popover into the viewport when it
     OPENS — but a fixed element with no left/top keeps its STATIC position, and these sit inline next to text
     that can be anywhere across the line. At 380px a 280px-wide popover parked beside a right-hand ⓘ hung to
     x=557, so the document scrolled sideways on every phone: measured 1215px of scroll width against a 380px
     viewport, from five boxes the reader cannot even see (opacity:0). Parking them at the origin while hidden
     costs nothing — place() overwrites both the moment one is shown. */
  .hh-pop{position:fixed;left:0;top:0;width:min(280px,74vw);max-width:calc(100vw - 20px);
    background:#17352F;color:var(--cream);border:1px solid var(--teal);border-radius:10px;padding:11px 13px;
    box-shadow:0 10px 26px rgba(0,0,0,.45);z-index:60;text-align:left;
    opacity:0;visibility:hidden;pointer-events:none;transition:opacity .12s ease;}
  /* 🔴 A TOOLTIP IS A SENTENCE AND MUST READ LIKE ONE, WHEREVER ITS ⓘ SITS (CH: "should NOT SHOUT AT PEOPLE").
     `text-transform` and `letter-spacing` inherit, and the ⓘ beside the index label lives inside `.cre`, which
     is uppercase at .20em tracking — so a full paragraph of prose rendered in spaced capitals. Reset both on
     the popover and everything in it, for the same reason `white-space` is reset just below: a hint may be
     placed in any row, and none of that row's display styling belongs on its explanation. */
  .hh-pop,.hh-pop *{text-transform:none;letter-spacing:normal;}
  /* invisible bridge over the 8px gap so hovering from the ⓘ to the box never crosses dead space (was: the box vanished mid-travel) */
  .hh-pop::before{content:"";position:absolute;left:0;right:0;bottom:100%;height:16px;}
  /* 🔴 THE POPOVER'S TEXT MUST WRAP WHEREVER ITS ⓘ LIVES, and this needs the specificity to win. A ⓘ can sit
     inside a row that sets nowrap on its spans — `.hero-glegend span` does — and that selector (0,1,1) beats a
     plain `.hh-pop` (0,1,0) AND matches `.hh-txt` directly. One tooltip therefore laid its text out on a single
     827px line inside a 280px box, dragging the document to 955px wide against a 380px viewport. Scoping under
     `.hh` (0,2,0) wins; the descendant `*` covers .hh-txt and .hh-ask, which the legend rule also matched. */
  .hh .hh-pop,.hh .hh-pop *{white-space:normal;}
  .hh:hover .hh-pop,.hh:focus-within .hh-pop,.hh.hh-open .hh-pop{opacity:1;visibility:visible;pointer-events:auto;}
  .hh-txt{display:block;font-family:var(--sans);font-size:11.5px;line-height:1.5;color:#CFE3DE;}
  .hh-txt b{color:var(--cream);font-weight:600;}
  .hh-ask{margin-top:9px;font-family:var(--sans);font-weight:600;font-size:11px;color:var(--ground);
    background:var(--teal-soft);border:1px solid var(--teal-soft);border-radius:6px;padding:3px 10px;cursor:pointer;}
  .hh-ask:hover{background:var(--cream);border-color:var(--cream);}
  @media print{ .hh-i{display:none;} }
  /* B2: cancellation callout — averages coincide, dimensions don't (clay, on the dark hero) */
  .hero-cancel{font-family:var(--sans);font-size:12.5px;line-height:1.55;color:#F3EEE2;
    background:rgba(197,132,99,0.15);border:1px solid rgba(197,132,99,0.34);border-radius:12px;padding:12px 16px;margin:16px 0 0;
    -webkit-print-color-adjust:exact;print-color-adjust:exact;}
  .hero-cancel b{color:#F0C9A8;font-weight:600;}
  /* E4: "How to read this" hero decoder — under the hero, above the short version; open by default. One line per hero element. */
  .report-decoder{background:var(--card);border:1px solid var(--cardline);border-left:4px solid var(--gold);border-radius:12px;padding:11px 16px;margin:16px 0 0;}
  .report-decoder>summary{font-family:var(--sans);font-size:13px;color:var(--ink);cursor:pointer;
    list-style:none;display:flex;align-items:center;gap:8px;}
  .report-decoder>summary::-webkit-details-marker{display:none;}
  .report-decoder>summary::after{content:"▾";margin-left:auto;font-size:11px;color:var(--faint);font-weight:400;display:inline-block;transition:transform .18s ease;}
  .report-decoder[open]>summary::after{transform:rotate(180deg);}
  .rd-lines{margin:9px 0 0;display:flex;flex-direction:column;gap:8px;}
  .rd-line{font-family:var(--sans);font-size:12.5px;line-height:1.55;color:var(--muted);margin:0;}
  .rd-line b{color:var(--ink);font-weight:600;}
  /* 🔴 TWO COLUMNS THAT PACK THEMSELVES, NOT A 2×2 GRID (CH: "there's a lot of dead space now").
     It was a 2×2 grid, so row 1's height was set by its TALLEST cell — the 148px gauge — while the number
     block beside it is 70px. That left a 78px hole between the certainty line and the colour bar, and the
     hole grew the moment the number stopped being stacked. Each column now stacks its own two items and
     packs to the top, so the box is only as tall as its taller column. Mobile still stacks in source
     order; the bar now follows the number rather than the gauge, which is the better reading order. */
  .hero-main{display:grid;grid-template-columns:minmax(0,1fr) auto;column-gap:26px;align-items:start;margin-top:4px;}
  .hero-col{display:flex;flex-direction:column;min-width:0;}
  .hero-col-l{gap:10px;}
  /* The gauge sits a little below the top of the type column rather than level with it — CH: "the gauge and
     related text drop back down a bit". Optical, not structural: the band word's cap-height starts well
     below its own box top, so a gauge flush with the grid top reads as floating above the line it labels. */
  .hero-col-r{align-items:center;padding-top:14px;}
  .hero-main .hero-gaugewrap{margin:0;}
  /* The definition sits under the NUMBER it defines, and the bar under that — one column of type, each item
     close to the one above it. The bar keeps its original measure: run full-width it stretched across the
     whole card, which reads as a different object entirely (CH: "did NOT need to get dragged across the
     whole screen"). Balance now comes from the column being taller, not from the bar being wider. */
  .hero-main .r-def{margin:0;max-width:46ch;}
  .hero-main .zscale{margin:0;max-width:440px;}
  @media (max-width:600px){
    /* one column: the two wrappers stack, and each keeps its own internal order */
    .hero-main{display:flex;flex-direction:column;gap:16px;}
    .hero-col-r{align-items:flex-start;}
    .hero-main .hero-gaugewrap{justify-self:auto;margin:0;align-self:center;}
    .hero-main .r-def{max-width:none;}
  }
  /* B2/A2: the gauge now carries the honest gap number — keep the whole wrap visible on mobile (was: hide .hero-gauge, which orphaned the "Average gap per dimension" caption). */
  /* takeaway lead gauge (set-off beside the lead read) */
  .lead-row{display:flex;gap:20px;align-items:flex-start;}
  .lead-textcol{flex:1 1 auto;min-width:0;}
  .lead-gaugecol{flex:0 0 auto;display:flex;flex-direction:column;align-items:center;gap:4px;}
  .lead-gauge-k{font-family:var(--sans);font-size:9.5px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;
    color:var(--faint);text-align:center;max-width:130px;line-height:1.3;}
  .lead-gaugecol svg{display:block;width:132px;height:auto;}
  @media (max-width:560px){ .lead-row{flex-direction:column;} .lead-gaugecol{align-self:center;} }
  /* quadrant cell: names + aggregate gauge; tracks + consequence behind a caret */
  .qbody{display:flex;gap:10px;align-items:center;margin:7px 0 2px;}
  .qnames{flex:1 1 auto;min-width:0;display:flex;flex-direction:column;gap:5px;}
  .qgauge{flex:0 0 auto;}
  .qgauge svg{display:block;width:96px;height:auto;}
  /* v1.5 §8 fix — the expand fills the (equal-height) cell so the tracks + comment
     bottom-align across cells; the explanation stays at top, gap sits between them */
  .qmore{margin:7px 0 0;flex:1 1 auto;display:flex;flex-direction:column;min-height:0;}
  .qmore[open]>.qmore-in{flex:1 1 auto;display:flex;flex-direction:column;min-height:0;}
  .qtail{margin-top:auto;}
  .qmore>summary{list-style:none;cursor:pointer;font-family:var(--sans);font-size:11px;font-weight:600;
    letter-spacing:.03em;color:var(--teal-deep);padding:4px 0;}
  .qmore>summary::-webkit-details-marker{display:none;}
  .qmore>summary::after{content:" ▾";transition:transform .18s ease;}
  .qmore[open]>summary::after{transform:rotate(180deg);}
  .qdn2{font-family:var(--serif);font-weight:600;font-size:13.5px;color:var(--ink);display:block;margin-top:8px;}
  /* round-3: takeaway lead read set-off within the panel; quadrant gauge on top, smaller names + verb */
  .takeaway .lead-row{background:#fff;border:1px solid var(--cardline);border-radius:14px;padding:16px 18px;margin:0 0 16px;box-shadow:0 2px 8px rgba(58,53,44,.05);}
  .qgauge-top{display:flex;justify-content:center;margin:6px 0 8px;}
  .qgauge-top svg{display:block;width:104px;height:auto;}
  .qcell .qnames{gap:7px;}
  .qcell .qdn{font-size:12.5px;line-height:1.15;font-weight:600;}
  .qdn-verb{display:block;font-family:var(--sans);font-size:8.5px;font-weight:700;letter-spacing:.08em;
    text-transform:uppercase;color:var(--teal-deep);margin-top:1px;}
  /* round-4: gauge to the RIGHT of the names, tighter cells, substantial reveal text */
  .qbody{display:flex;gap:12px;align-items:center;margin:5px 0 0;}
  .qgauge svg{width:88px;height:auto;}
  .qmatrix .qcell{min-height:0;padding:13px 15px 12px;}
  .qcoord{margin-bottom:6px;}
  .qexplain{font-family:var(--sans);font-size:12.5px;line-height:1.6;color:#5d584f;margin:2px 0 10px;}
  /* round-5: anchors — uniform compact cards, one-line teaser, clearly visible + */
  details.anch-card{min-height:130px;display:flex;flex-direction:column;}
  details.anch-card>summary{padding:14px 30px 14px 16px;gap:4px;flex:1 1 auto;}
  details.anch-card>summary::after{content:"▾";top:13px;right:14px;font-size:11px;color:var(--teal-deep);transition:transform .18s ease;}
  details.anch-card[open]>summary::after{transform:rotate(180deg);}
  .anch-card .co{font-size:16px;line-height:1.15;margin:0;display:-webkit-box;-webkit-line-clamp:2;
    -webkit-box-orient:vertical;overflow:hidden;}
  .anch-teaser{font-family:var(--sans);font-size:11.5px;line-height:1.4;color:#6b6456;margin-top:3px;}
  /* round-6: three reads — number + zone-under on the left, gauge nudged up to the right, expand */
  .reads .read-card{padding:13px 15px 12px;}
  .rd-row{display:flex;align-items:flex-start;justify-content:center;gap:14px;margin:3px 0 6px;}
  .rd-score{display:flex;flex-direction:column;align-items:flex-start;line-height:1;text-align:left;}
  .rd-num{font-family:var(--serif);font-weight:700;font-size:40px;color:var(--zc,var(--ink));line-height:.9;}
  .rd-zone{font-family:var(--sans);font-weight:700;font-size:11px;letter-spacing:.05em;text-transform:uppercase;margin-top:5px;}
  .rd-row .rd-gauge{margin:-4px 0 0;align-self:flex-start;}
  .rd-row .rd-gauge svg{width:74px;}
  .rd-more{margin:2px 0 0;}
  .rd-more>summary{list-style:none;cursor:pointer;font-family:var(--sans);font-size:11px;font-weight:600;
    letter-spacing:.03em;color:var(--teal-deep);padding:3px 0;}
  .rd-more>summary::-webkit-details-marker{display:none;}
  .rd-more>summary::after{content:" ▾";transition:transform .18s ease;}
  .rd-more[open]>summary::after{transform:rotate(180deg);}
  /* v1.5 §3 — "under the hood": the three secondary sub-scores demoted behind an expand */
  .under-hood{margin:34px 0 0;border-top:1px solid var(--line);}
  .under-hood>summary{list-style:none;cursor:pointer;display:flex;align-items:baseline;gap:10px;padding:16px 2px 2px;}
  .under-hood>summary::-webkit-details-marker{display:none;}
  .uh-title{font-family:var(--sans);font-weight:600;letter-spacing:.16em;font-size:11px;text-transform:uppercase;color:var(--teal-ink);white-space:nowrap;}
  .uh-sub{font-family:var(--sans);font-size:11.5px;line-height:1.4;color:var(--muted);flex:1 1 auto;}
  .uh-arr{font-size:11px;color:var(--teal-deep);transition:transform .2s ease;}
  .under-hood[open] .uh-arr{transform:rotate(180deg);}
  .under-hood .reads{margin:12px 0 0;}
  .uh-note{font-family:var(--sans);font-size:11.5px;line-height:1.5;color:var(--muted);margin:12px 0 0;font-style:italic;}  /* Tier-3: why the headline sits below both sub-scores */
  .qtag{font-family:var(--sans);font-weight:700;font-size:8.5px;letter-spacing:.08em;text-transform:uppercase;
    color:var(--faint);border:1px solid var(--line);border-radius:4px;padding:1px 4px;margin-left:6px;vertical-align:middle;}
  @media (max-width:600px){ .under-hood>summary{flex-wrap:wrap;} .uh-sub{flex-basis:100%;} }
  .rd-more-in{font-family:var(--sans);font-size:12px;line-height:1.55;color:#5d584f;margin-top:5px;text-align:left;}
  /* round-7: assistant — clean, standardized gap between the ask field and the suggestion chips */
  .assist-inner .sub{margin:0 0 14px;}
  .assist-inner .assist-form{margin:0 0 16px;}
  .assist-inner .assist-chips{margin:0;}
  /* round-8: expand-all control at the top of the report */
  .report-tools{display:flex;justify-content:flex-end;align-items:center;gap:14px;margin:0 0 6px;}
  /* the way back to the Straight Read sits opposite Expand all */
  .report-tools .sr-back{margin-right:auto;padding:4px 2px;font-size:12px;color:var(--teal-deep);}
  .report-tools .sr-back:hover{color:var(--ink);}
  .expand-all{font-family:var(--sans);font-size:12px;font-weight:600;letter-spacing:.03em;color:var(--teal-deep);
    background:none;border:0;cursor:pointer;padding:4px 2px;display:inline-flex;align-items:center;gap:4px;}
  .expand-all:hover{color:var(--ink);}
  /* two-marker Emerging↔Established track (v2.9) — You + Team markers, gap shaded, no bare numbers */
  .tmt{margin:10px 0 2px;}
  .tmt-track{position:relative;height:30px;}
  .tmt-track::before{content:"";position:absolute;left:0;right:0;top:50%;height:4px;transform:translateY(-50%);
    border-radius:3px;background:linear-gradient(90deg,rgba(95,91,83,.14),rgba(176,125,46,.16));box-shadow:inset 0 0 0 1px rgba(58,53,44,.06);}
  .tmt-gap{position:absolute;top:50%;height:4px;transform:translateY(-50%);border-radius:3px;background:rgba(29,26,20,.18);}
  .tmt-cut{position:absolute;left:50%;top:50%;width:2px;height:18px;transform:translate(-50%,-50%);background:var(--rule);border-radius:1px;}
  .tmt-mark{position:absolute;transform:translateX(-50%);line-height:0;filter:drop-shadow(0 1px 1px rgba(0,0,0,.18));}
  .tmt-mark.you{top:0;}
  .tmt-mark.team{bottom:0;}
  .tmt-poles{display:flex;justify-content:space-between;font-family:var(--sans);font-size:10px;font-weight:600;
    letter-spacing:.08em;text-transform:uppercase;color:var(--faint);margin-top:1px;}
  .tmt.compact{margin:7px 0 0;}
  .tmt.compact .tmt-track{height:22px;}
  .tmt.compact .tmt-cut{height:12px;}
  /* 360 dispersion track: ghosted leader-estimate + team spread band */
  .dtrack .tmt-track{height:34px;}
  .dt-band{position:absolute;top:50%;height:16px;transform:translateY(-50%);border-radius:5px;
    background:rgba(176,125,46,.18);border:1px solid rgba(176,125,46,.3);}
  .tmt-mark.ghost{top:0;opacity:.42;filter:grayscale(.2) drop-shadow(0 1px 1px rgba(0,0,0,.1));}
  .tmt-mark.ghost::after{content:"";position:absolute;left:50%;top:100%;width:1px;height:7px;transform:translateX(-50%);
    background:repeating-linear-gradient(var(--team) 0 2px, transparent 2px 4px);opacity:.6;}
  .dt-legend{display:flex;flex-wrap:wrap;gap:12px;font-family:var(--sans);font-size:10.5px;font-weight:600;
    letter-spacing:.03em;color:var(--muted);margin-top:3px;}
  .dt-l{display:inline-flex;align-items:center;gap:4px;}
  .dt-l.ghost{opacity:.6;}
  /* scan mode = gauge only, with the You · Team read UNDER it; the track is revealed on dive */
  .sig-track{margin:2px 0 10px;}
  .sig-poleread{font-family:var(--sans);font-size:12px;font-weight:600;color:var(--muted);text-align:center;line-height:1.35;max-width:150px;}
  .sig-poleread .pr-you,.sig-poleread .pr-team{display:block;}
  .sig-poleread .pr-you{color:var(--you);} .sig-poleread .pr-team{color:var(--team);}

  /* Reading the Signals — 2×2 quadrant summary (Report Upgrade v0.5) */
  .qlegend{display:flex;gap:18px;align-items:center;flex-wrap:wrap;margin:0 0 14px;
    font-family:var(--sans);font-size:11px;font-weight:600;letter-spacing:.04em;color:var(--muted);}
  .qlegend .qli{display:inline-flex;align-items:center;gap:6px;}
  .qlegend .pole{margin-left:auto;color:var(--faint);letter-spacing:.06em;}
  .qmatrix{display:grid;grid-template-columns:26px 1fr;grid-template-rows:1fr 26px;gap:10px;margin:0 0 6px;}
  .qyaxis{grid-column:1;grid-row:1;display:flex;align-items:center;justify-content:center;}
  .qyaxis span{writing-mode:vertical-rl;transform:rotate(180deg);white-space:nowrap;}
  .qyaxis span,.qxaxis span{font-family:var(--sans);font-size:10px;font-weight:600;letter-spacing:.12em;
    text-transform:uppercase;color:var(--faint);}
  .qyaxis b,.qxaxis b{color:var(--teal-deep);font-weight:700;}
  .qxaxis{grid-column:2;grid-row:2;display:flex;align-items:center;justify-content:center;}
  .qcorner{grid-column:1;grid-row:2;}
  .qgrid{grid-column:2;grid-row:1;display:grid;grid-template-columns:1fr 1fr;grid-template-rows:auto auto;gap:13px;}
  .qcell{background:var(--card);border:1px solid var(--cardline);border-radius:14px;padding:15px 17px 14px;
    display:flex;flex-direction:column;min-height:132px;border-top:4px solid var(--qc);}
  /* --qc is the 4px top BORDER, where the bright hue is correct and legibility does not apply.
     --qc-ink is the same read as TEXT (.qverb/.qcoord), which is why it exists separately: reusing the
     border colour for the label put 2.79:1 on the card. Border and label must not share one token. */
  .qcell.blind{--qc:#BF5A41;--qc-ink:var(--qc-blind-ink);}
  .qcell.strength{--qc:#5E9B7C;--qc-ink:var(--qc-strength-ink);}
  .qcell.deficit{--qc:#C28A33;--qc-ink:var(--qc-deficit-ink);}
  .qcell.underread{--qc:var(--teal);--qc-ink:var(--qc-underread-ink);}
  .qhead{display:flex;align-items:baseline;justify-content:space-between;gap:10px;margin:1px 0 2px;}
  .qname{font-family:var(--serif);font-weight:600;font-size:20px;color:var(--ink);line-height:1;}
  /* #6: small per-cell count — literal "counts per cell" in the grid */
  .qct{font-family:var(--sans);font-weight:700;font-size:11px;color:var(--muted);margin-right:auto;align-self:center;}
  .qverb{font-family:var(--sans);font-weight:700;font-size:9.5px;letter-spacing:.12em;text-transform:uppercase;
    color:var(--qc-ink);border:1px solid var(--qc);border-radius:4px;padding:3px 7px;white-space:nowrap;}
  .qcoord{font-family:var(--sans);font-size:9.5px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;
    color:var(--qc-ink);margin:0 0 10px;}
  .qdims{display:flex;flex-direction:column;}
  .qdim{padding-top:9px;margin-top:9px;border-top:1px solid rgba(58,53,44,.09);}
  .qdim:first-child{border-top:none;padding-top:0;margin-top:0;}
  .qdn{font-family:var(--serif);font-weight:600;font-size:15px;color:var(--ink);line-height:1.15;display:block;}
  .qconseq{font-family:var(--sans);font-size:12px;line-height:1.5;color:#5d584f;margin:11px 0 0;
    padding-top:10px;border-top:1px solid rgba(58,53,44,.09);}
  .qempty{font-family:var(--sans);font-size:12.5px;font-style:italic;color:var(--faint);}
  @media (max-width:600px){
    .qmatrix{grid-template-columns:1fr;grid-template-rows:auto;} .qyaxis,.qxaxis,.qcorner{display:none;}
    .qgrid{grid-template-columns:1fr;}
  }

  /* confidence strip */
  .conf-strip{background:#EFE9DA;border-radius:12px;padding:15px 18px;display:flex;gap:12px;align-items:baseline;flex-wrap:wrap;}
  .conf-strip .k{font-family:var(--sans);font-weight:600;letter-spacing:.14em;font-size:10px;color:var(--faint);text-transform:uppercase;}
  .conf-strip .t{font-family:var(--sans);font-size:13.5px;color:#5d584f;line-height:1.5;flex:1 1 300px;}

  /* anchors */
  .anch-frame{font-family:var(--sans);font-size:11.5px;color:var(--faint);font-style:italic;margin:0 0 14px;line-height:1.5;}
  .anchors{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;}
  .anch-card{background:var(--card);border:1px solid var(--cardline);border-radius:14px;padding:18px 18px 16px;
    border-left:5px solid var(--muted);}
  .anch-card.caution{border-left-color:var(--z-diss);}
  .anch-card.exemplary{border-left-color:var(--teal);}
  .anch-card.archetype{border-left-color:var(--gold);}
  .anch-card.archetype .k{color:var(--gold-ink);}
  .anch-card .k{font-family:var(--sans);font-weight:600;letter-spacing:.10em;font-size:9px;text-transform:uppercase;margin:0 0 9px;}
  .anch-card.caution .k{color:var(--z-diss);} .anch-card.exemplary .k{color:var(--teal-deep);}
  .anch-card .co{font-family:var(--serif);font-weight:600;font-size:18px;color:var(--ink);margin:0 0 5px;}
  .anch-card .why{font-family:var(--sans);font-size:10.5px;font-weight:600;letter-spacing:.01em;color:var(--muted);margin:0 0 10px;}
  .anch-card .ln{font-family:var(--sans);font-size:12px;color:#6b6456;line-height:1.55;margin:0 0 12px;}
  .anch-card .src{font-family:var(--sans);font-size:8px;letter-spacing:.04em;color:#B3AB95;text-transform:uppercase;}
  @media (max-width:760px){ .anchors{grid-template-columns:1fr;} }
  /* v2.1 anchor card — SHORT Moody's line ({Company} · {Arc} · {Band} — "read" ⁿ); the cited fact lives in Sources.
     The band is small INLINE text, never a filled chip, so it can't be mistaken for the reader's own band chip. */
  .anch-card.anch-v2{padding:14px 16px;display:block;min-height:0;}
  .anch-v2-line{font-family:var(--sans);font-size:12px;line-height:1.6;color:#6b6456;margin:0;}
  .anch-v2 .co{font-family:var(--serif);font-weight:600;font-size:15px;color:var(--ink);margin:0;}
  .anch-v2 .anch-arc{font-weight:600;color:var(--muted);}
  .anch-v2 .anch-band{font-weight:700;letter-spacing:.02em;}
  .anch-v2.caution .anch-band{color:var(--z-diss);}
  .anch-v2.archetype .anch-band{color:var(--z-diss);}
  .anch-v2.exemplary .anch-band{color:var(--teal-deep);}
  .anch-card.anch-v2.archetype{border-left-color:var(--gold);}
  .anch-v2 .anch-read{color:#4f4a3f;}
  .anch-fn{font-size:9px;font-weight:700;vertical-align:super;color:var(--teal-deep);margin-left:1px;}
  .anch-fn a,.sources-list .src-n a{color:inherit;text-decoration:none;cursor:pointer;}
  .anch-fn a:hover,.sources-list .src-n a:hover{text-decoration:underline;}
  .sources-list li:target{outline:2px solid var(--gold);outline-offset:2px;border-radius:6px;}
  .anch-fn:target{outline:2px solid var(--gold);border-radius:3px;}
  /* Sources — numbered footnotes at the report bottom; each card superscript matches its Sources number. */
  .sources{margin:30px 0 0;border-top:1px solid var(--line);padding-top:16px;}
  .sources-k{font-family:var(--sans);font-weight:600;letter-spacing:.16em;font-size:11px;text-transform:uppercase;color:var(--teal-ink);margin:0 0 12px;}
  .sources-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:9px;}
  .sources-list li{font-family:var(--sans);font-size:11px;line-height:1.55;color:var(--muted);}
  .sources-list .src-n{display:inline-block;min-width:15px;font-weight:700;color:var(--teal-deep);}
  .sources-list b{color:var(--ink);font-weight:600;}
  .sources-list .src-scope{font-style:italic;color:var(--faint);}

  /* handoff (dark) */
  .r-mission{margin:34px 0 0;padding:24px 26px;background:var(--card);border:1px solid var(--cardline);border-radius:16px;}
  .r-mission .k{font-family:var(--sans);font-weight:600;letter-spacing:.16em;font-size:11px;text-transform:uppercase;color:var(--teal-deep);margin:0 0 11px;}
  .r-mission p{font-family:var(--serif);font-size:16px;line-height:1.62;color:var(--text);margin:0;}
  .r-mission em{font-style:italic;color:var(--ink);}
  .handoff{background:var(--ground);color:var(--cream);border-radius:16px;padding:28px 26px;margin:34px 0 0;}
  .handoff .k{font-family:var(--sans);font-weight:600;letter-spacing:.16em;font-size:10px;color:var(--sage);text-transform:uppercase;margin:0 0 12px;}
  .handoff p{font-family:var(--serif);font-size:17px;color:#D8D0BC;line-height:1.55;margin:0 0 18px;}
  .handoff .btn-out{display:inline-block;font-family:var(--sans);font-weight:600;letter-spacing:.06em;font-size:12px;
    color:var(--sage);border:1px solid var(--sage);border-radius:18px;padding:10px 20px;text-decoration:none;text-transform:uppercase;
    background:transparent;cursor:pointer;transition:all .15s ease;}
  .handoff .btn-out:hover{background:rgba(111,174,140,.12);}
  .handoff-meta{font-family:var(--serif);font-style:italic;font-size:16px;color:#EFE7D3;line-height:1.55;
    border-left:3px solid var(--sage);padding-left:14px;margin:0 0 20px;}
  .handoff-frame{font-family:var(--sans);font-size:10px;letter-spacing:.10em;text-transform:uppercase;
    color:#8E876F;margin:14px 0 0;}
  /* v1.5 §1 — 360 waitlist: the primary next-action CTA (on the dark handoff) */
  .handoff .wl-climax{font-family:var(--serif);font-weight:500;font-size:19px;line-height:1.4;color:#F3EEE2;margin:2px 0 14px;}
  .handoff .wl-panel{background:rgba(243,238,226,0.05);border:1px solid rgba(243,238,226,0.16);
    border-left:3px solid var(--sage);border-radius:12px;padding:16px 18px;margin:0 0 16px;}
  .handoff .wl-panel .wl-copy{font-family:var(--serif);font-size:16px;line-height:1.45;color:#EFE7D3;margin:0 0 13px;}
  .handoff .wl-btn{cursor:pointer;background:var(--sage);color:var(--ground);border-color:var(--sage);}
  .handoff .wl-btn:hover{background:var(--teal-soft);border-color:var(--teal-soft);}
  .handoff .wl-done{font-family:var(--sans);font-weight:600;font-size:14px;color:var(--sage);margin:0;}
  .handoff p.handoff-sec{font-family:var(--sans);font-size:12.5px;color:#A79F88;line-height:1.55;margin:6px 0 0;}
  .handoff p.handoff-sec a{color:var(--sage);font-weight:600;text-decoration:underline;}
  /* secondary waitlist variant (Mission — 360 is downstream of Resonance, so it sits under the primary CTA) */
  .handoff .wl-panel.wl-secondary{background:transparent;border:0;border-left:2px solid rgba(111,174,140,.4);
    border-radius:0;padding:2px 0 2px 14px;margin:16px 0 0;}
  .handoff .wl-panel.wl-secondary .wl-copy{font-family:var(--sans);font-size:13px;color:#B9B09B;line-height:1.5;margin:0 0 8px;}
  .handoff .wl-btn-mini{background:transparent;border:0;padding:0;cursor:pointer;font-family:var(--sans);
    font-weight:600;font-size:12.5px;color:var(--sage);text-decoration:underline;}
  .handoff .wl-btn-mini:hover{color:var(--teal-soft);}

  /* The Wavelength System family panel */
  .suite{margin:32px 0 0;}
  .suite .k{font-family:var(--sans);font-weight:600;letter-spacing:.16em;font-size:11px;text-transform:uppercase;color:var(--teal-deep);margin:0 0 6px;}
  .suite-lede{font-family:var(--sans);font-size:13px;color:#6b6456;line-height:1.5;margin:0 0 14px;max-width:62ch;}
  .suite-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:10px;}
  .suite-item{display:flex;align-items:center;justify-content:space-between;gap:10px;background:var(--card);
    border:1px solid var(--cardline);border-radius:11px;padding:12px 15px;text-decoration:none;}
  a.suite-item:hover{border-color:var(--teal);}
  .s-main{display:flex;flex-direction:column;min-width:0;}
  .s-name{font-family:var(--serif);font-weight:600;font-size:15px;color:var(--ink);}
  /* 🔴 NO OPACITY ON TEXT. `opacity` never appears in getComputedStyle().color, so an audit reads the
     declared colour and reports a ratio the reader never gets. These two measured 3.11:1 and 2.87:1
     once it was folded in, against 5.94/5.19 on paper. Tone belongs in the hex. */
  .s-note{font-family:var(--sans);font-size:11.5px;color:var(--text);margin-top:1px;opacity:1;}
  .s-side{flex:0 0 auto;font-family:var(--sans);font-size:9px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);opacity:1;}
  .s-side.arrow{font-size:15px;letter-spacing:0;color:var(--teal-deep);}
  /* 🔴 WAS `opacity:.7` ON A CONTAINER THAT HOLDS TEXT. That is a recede signal paid for in legibility:
     it dragged `.s-side` to 3.11:1 and, because opacity never appears in getComputedStyle().color, no
     colour-based audit could see it. The recede is now carried by the GROUND and the border, which have
     no contrast obligation, so the row still reads as secondary and its text stays measurable. */
  .suite-item.here,.suite-item.soon{background:#F5F1E6;border-color:#EDE6D6;}
  /* round-17: suite waitlist / request-access cards (the two team-360s) + their inline email ask */
  .suite-item.wl{cursor:pointer;}
  .suite-item.wl:hover{border-color:var(--teal);}
  .suite-item.wl:focus-visible{outline:2px solid var(--teal);outline-offset:1px;}
  .s-side.wl-side{color:var(--teal-deep);}
  .suite-item.done{opacity:.85;}
  .s-wlform{display:flex;gap:6px;width:100%;}
  .s-wlform input{flex:1 1 auto;min-width:0;font-family:var(--sans);font-size:12.5px;padding:7px 10px;
    border:1px solid var(--rule);border-radius:8px;background:#fff;color:var(--text);}
  .s-wlform input:focus-visible{outline:2px solid var(--teal);outline-offset:1px;}
  .s-wlgo{flex:0 0 auto;font-family:var(--sans);font-weight:600;font-size:12px;background:var(--ink);color:#fff;
    border:0;border-radius:8px;padding:0 12px;cursor:pointer;}
  @media (max-width:560px){ .suite-grid{grid-template-columns:1fr;} }

  /* ---- cross-product door (crossDoor) --------------------------------------------------------------
     Sits inline in the report where a gap has just been read, so it answers the question that screen
     raised rather than advertising. Quiet by construction: a rule and a tint, no card shadow, no accent
     bar — it must not compete with the reads above it.
     ⚠ NO `opacity` ON TEXT, same rule as .s-note six lines up: opacity never appears in
     getComputedStyle().color, so an audit reads the declared colour and reports a ratio nobody gets.
     Tone belongs in the hex, and both values here are taken from tokens already in use on this ground. */
  .xdoor{display:flex;align-items:baseline;justify-content:space-between;gap:14px;flex-wrap:wrap;
    margin:18px 0 6px;padding:13px 16px;background:var(--card);border:1px solid var(--cardline);
    border-radius:11px;}
  .xdoor-line{font-family:var(--sans);font-size:13px;line-height:1.5;color:var(--text);margin:0;
    flex:1 1 260px;min-width:0;}
  .xdoor-cta{flex:0 0 auto;font-family:var(--sans);font-weight:600;font-size:12.5px;
    color:var(--teal-deep);text-decoration:none;white-space:nowrap;}
  .xdoor-cta:hover{text-decoration:underline;}
  .xdoor-cta:focus-visible{outline:2px solid var(--teal);outline-offset:2px;border-radius:3px;}
  @media print{ .xdoor{display:none;} }   /* a printed report is not a place to click */

  .r-actions{display:flex;gap:12px;justify-content:center;flex-wrap:wrap;margin:30px 0 0;}

  /* round-9: shared EOS panel (both tools) — Wavelength-orange ground, gold complement, light text.
     Restates the leader's own words (Mission) / a Health read (Resonance). Distinct from the cream body. */
  details.eos{margin:20px 0 0;background:var(--wl-orange);border:1px solid var(--wl-gold);border-left:4px solid var(--wl-gold);
    border-radius:14px;overflow:hidden;-webkit-print-color-adjust:exact;print-color-adjust:exact;}
  details.eos>summary{list-style:none;cursor:pointer;position:relative;display:flex;align-items:center;gap:9px;padding:15px 40px 15px 18px;
    font-family:var(--sans);font-weight:700;font-size:13px;letter-spacing:.02em;color:#FFFDFA;}
  /* 🔴 THE EOS PANEL'S ORANGE STAYS (CH ruling 2026-08-13, reverting the darkened ground). That puts a
     HARD CEILING on this panel: on #B35B26 even pure white measures only 4.73:1, so the entire usable
     range for AA text here is 4.55–4.73. Every string below is near-white by necessity, not by taste,
     and the tonal hierarchy is carried by SIZE and WEIGHT instead of by warm tint.
     ⚠ IF THE ORANGE EVER GETS LIGHTER, EVERY ONE OF THESE FAILS AND NOTHING CAN FIX THEM but changing
     the ground. Treat --wl-orange as load-bearing for accessibility, not just for brand.
     🔴 OPACITY IS THE TRAP HERE. `opacity` does NOT appear in getComputedStyle().color, so an audit
     reads the declared colour and reports a ratio the reader never gets. Two of these carried .9/.92
     and were therefore worse than measured. Tone is baked into the hex now; no opacity on panel text. */
  details.eos .eos-sub{font-weight:400;font-size:12px;color:#FFFDFA;}
  details.eos>summary::-webkit-details-marker{display:none;}
  details.eos>summary::after{content:"▾";position:absolute;top:14px;right:16px;font-size:11px;color:#F2D49E;transition:transform .18s ease;}
  details.eos[open]>summary::after{transform:rotate(180deg);}
  .eos-body{padding:2px 18px 18px;}
  .eos-body .frame{font-family:var(--serif);font-style:italic;font-size:15.5px;color:#FFFAF3;margin:0 0 12px;line-height:1.5;}
  /* 🔴 THIS RULE OUTRANKS `.eos-opener` AND `.eos-coverage` — (0,1,1) beats (0,1,0), regardless of order.
     Retinting those two classes on 2026-08-13 was a SILENT NO-OP for exactly that reason; the stylesheet
     said #FFFDFA and the browser kept painting #FDF5E9. Caught by measuring the computed colour, never by
     reading the diff. The panel's body colour is set HERE, once, because here is where it actually wins. */
  .eos-body>p{font-family:var(--serif);font-size:15px;color:#FFFDFA;line-height:1.58;margin:0 0 12px;}
  .eos-body b{color:#FFFFFF;font-weight:700;}
  .eos-body em{font-style:italic;color:#FFFFFF;}
  .eos-restate{display:flex;flex-direction:column;gap:10px;margin:0 0 14px;}
  /* dark-tint cards (not white) so light text keeps its contrast inside them */
  /* 🔴 `.eos-item` (Mission) AND `.eos-row` (Resonance) ARE THE SAME ROW UNDER TWO NAMES — found while
     fixing the band-chip contrast, because darkening `.eos-row` moved Resonance and left Mission at 2.12:1.
     Third divergence of the day from the same cause: one component, written twice, per tool.
     The ground is declared ONCE here for both so it cannot drift again; only the border alpha differs
     below, which is the one thing that was ever deliberately different. Renaming one to the other is the
     real fix and is a bigger change than a contrast pass should carry — flagged, not smuggled in. */
  .eos-item,.eos-row{background:rgba(0,0,0,0.55);}
  .eos-item{border:1px solid rgba(181,146,88,0.7);border-radius:11px;padding:13px 15px;}
  .eos-k{font-family:var(--sans);font-weight:700;letter-spacing:.10em;font-size:10.5px;text-transform:uppercase;
    color:#F2D49E;margin:0 0 8px;display:flex;align-items:baseline;gap:8px;flex-wrap:wrap;}
  .eos-tag{font-family:var(--sans);font-weight:500;font-size:10px;letter-spacing:.04em;text-transform:none;color:#EAD2A8;opacity:.9;}
  .eos-line{display:flex;gap:10px;margin:0 0 6px;align-items:baseline;}
  .eos-line:last-child{margin-bottom:0;}
  .eos-lab{flex:0 0 auto;font-family:var(--sans);font-weight:700;font-size:10px;letter-spacing:.08em;text-transform:uppercase;
    color:#F2D49E;min-width:48px;}
  .eos-val{font-family:var(--serif);font-size:15px;color:#FFFAF3;line-height:1.5;}
  .eos-vals{margin:0;padding:0 0 0 18px;}
  .eos-vals li{font-family:var(--serif);font-size:15px;color:#FFFAF3;line-height:1.5;margin:0 0 5px;}
  .eos-vals li::marker{color:#F2D49E;}
  .eos-vals li:last-child{margin-bottom:0;}
  .eos-commercial{font-family:var(--serif);font-size:14.5px;color:#FFFDFA;line-height:1.55;margin:0 0 10px;}
  .eos-bonus{font-family:var(--sans);font-size:13px;color:#F5E7CD;line-height:1.5;margin:0 0 12px;}
  .eos-body .disc{font-family:var(--sans);font-size:11px;color:#FFFDFA;font-style:italic;line-height:1.5;margin:0;}
  /* Empty state — the leader skipped the Vision intake, so there is nothing to quote back. The tile must SAY
     so rather than render a mirror with nothing in it, and it carries the way to fix it. */
  .eos-missing{font-family:var(--sans);font-size:12.5px;color:#F0DDBE;font-style:italic;line-height:1.5;margin:0 0 8px;}
  .eos-capture{background:rgba(0,0,0,0.18);border:1px dashed rgba(240,214,166,0.75);border-radius:11px;padding:13px 15px;margin:0 0 14px;}
  .eos-capture .eos-cap-k{font-family:var(--sans);font-weight:700;letter-spacing:.10em;font-size:10.5px;
    text-transform:uppercase;color:#FFE7BE;margin:0 0 4px;}
  .eos-capture p{font-family:var(--sans);font-size:12.5px;color:#F5E7CD;line-height:1.5;margin:0 0 10px;}
  .eos-capture label{display:block;font-family:var(--sans);font-weight:700;font-size:10px;letter-spacing:.08em;
    text-transform:uppercase;color:#F2D49E;margin:0 0 4px;}
  .eos-capture textarea{width:100%;box-sizing:border-box;font-family:var(--serif);font-size:14.5px;line-height:1.5;
    color:#1D1A14;background:#FDF7EC;border:1px solid var(--wl-gold);border-radius:8px;padding:9px 11px;
    resize:vertical;min-height:52px;margin:0 0 10px;}
  .eos-capture textarea:focus-visible{outline:3px solid #FFE7BE;outline-offset:2px;}
  .eos-cap-row{display:flex;gap:12px;align-items:center;flex-wrap:wrap;}
  .eos-cap-go{font-family:var(--sans);font-weight:600;font-size:13.5px;letter-spacing:.03em;cursor:pointer;
    background:#FDF7EC;color:#7A3B14;border:0;border-radius:8px;padding:10px 18px;}
  .eos-cap-go:hover{background:#FFFFFF;}
  .eos-cap-go:focus-visible{outline:3px solid #FFE7BE;outline-offset:3px;}
  .eos-cap-alt{font-family:var(--sans);font-size:12.5px;color:#FFE7BE;text-decoration:underline;cursor:pointer;
    background:none;border:0;padding:6px 2px;}
  /* Check teaser (BuildScope §7) — estimated Perception Fiction. DELIBERATELY UNCOLOURED: it is a pure gap
     metric, and the level-companion guard forbids a gap rendering a colour or a good/bad label without a
     level beside it. Ink and weight only, so it reads as a magnitude rather than a verdict. */
  .wl-teaser{font-family:var(--serif);font-size:15.5px;line-height:1.55;color:var(--ink);
    background:rgba(0,0,0,0.03);border-left:3px solid var(--rule);border-radius:0 8px 8px 0;
    padding:11px 14px;margin:0 0 12px;}
  .wl-teaser b{font-weight:700;}
  .wl-teaser-note{display:block;font-family:var(--sans);font-size:12px;color:var(--muted);margin-top:5px;}
  /* 🔴 THE SAY-DO DELTA IS A GAP METRIC — no zone colour and no band word, by the standing level-companion
     rule. It therefore borrows the teaser's neutral treatment deliberately: a plain rule, the ink colour, and
     nothing that reads as a verdict. Do not give this a band tint later; the whole point is that a distance
     between two composites cannot be good or bad without the levels beside it. */
  .saydo{font-family:var(--serif);font-size:15.5px;line-height:1.55;color:var(--ink);
    background:rgba(0,0,0,0.03);border-left:3px solid var(--rule);border-radius:0 8px 8px 0;
    padding:11px 14px;margin:14px 0 0;}
  .saydo b{font-weight:700;}
  .saydo-note{display:block;font-family:var(--sans);font-size:12px;color:var(--muted);margin-top:5px;}
  /* The Straight Read variant: same block, no figures (that page prints none). Slightly larger, because
     here it sits directly under the state word rather than under a hero full of numbers. */
  .saydo-plain{font-size:16.5px;margin:0 0 26px;}

  /* 🔴 THE EVIDENCE PANEL — the reader's own two answers, beside the claim about them (CH 2026-08-09:
     "the insights are probably good but I don't even understand them"). Deliberately QUIET and COLLAPSED: the
     complaint was that this page is hard to follow, so the fix cannot be more text on screen. It is a receipt,
     available on demand, and it must never compete with the insight it supports. */
  /* The company flip's new head: the name sits beside the label, the restatement above the inversion. */
  .sr-flip-co{margin-left:8px;font-weight:600;letter-spacing:.02em;text-transform:none;color:var(--cream);}
  /* Collapsed reminder — open it if you have lost the thread, skip it if you have not.
     🔴 The SUMMARY is the label row itself (CH 2026-08-10), so it inherits `.sr-flip-k` and adds only the
     affordance. "What they did" is now INSIDE the disclosure, where it labels the sentence it belongs to
     instead of standing on the page as a second heading. */
  .sr-flip-did{margin:0;}
  .sr-flip-did > summary{cursor:pointer;list-style:none;display:flex;align-items:center;gap:8px;}
  .sr-flip-did > summary::-webkit-details-marker{display:none;}
  .sr-flip-did > summary .sr-flip-co{margin-left:0;}
  .sr-flip-did > summary::after{content:"▾";font-size:9px;color:#9A9488;transition:transform .18s ease;}
  .sr-flip-did[open] > summary::after{transform:rotate(180deg);}
  .sr-flip-did > summary:hover::after{color:var(--cream);}
  .sr-flip-didin{margin:0 0 10px;}
  .sr-flip-didk{font-family:var(--sans);font-size:10px;letter-spacing:.09em;text-transform:uppercase;
    color:#9A9488;margin:0 0 4px;}
  .sr-flip-didin > p{font-family:var(--sans);font-size:12.5px;line-height:1.5;color:#CFC7B4;margin:0;}
  /* The stake the own-flip now ends on. Set apart from the inversion above it by a rule, not a colour —
     this block carries no valence and must not start reading as a verdict. */
  /* The third flip, structured: question — modes you can tick against — check — cost. Four beats, spaced,
     because as one paragraph CH could not follow it. */
  .sr-flip-subj{font-family:var(--sans);font-size:12.5px;line-height:1.5;color:#CFC7B4;margin:0 0 10px;}
  .sr-flip-subjk{font-weight:700;letter-spacing:.06em;text-transform:uppercase;font-size:10px;color:#9A9488;}
  .sr-flip-ask{margin:0 0 10px;}
  .sr-flip-modes{margin:0 0 10px;padding-left:18px;list-style:none;}
  .sr-flip-modes li{position:relative;font-family:var(--sans);font-size:13.5px;line-height:1.5;color:#E8DFCC;margin:0 0 5px;}
  .sr-flip-modes li::before{content:"—";position:absolute;left:-18px;color:#9A9488;}
  .sr-flip-check{margin:0;font-family:var(--sans);font-weight:600;font-size:13.5px;color:var(--cream);}
  .sr-flip-cost{margin:11px 0 0;padding-top:10px;border-top:1px solid rgba(255,255,255,0.14);
    font-family:var(--sans);font-size:13px;line-height:1.55;color:#CFC7B4;}

  .ans{margin:12px 0 0;}
  /* Measured, not chosen: on the light card ground (244,240,230) the first pass used --teal-deep/--muted/
     --faint and came out at 4.29 / 3.22 / 2.78 — all under AA, the label under even the large-text bar. */
  .ans > summary{font-family:var(--sans);font-weight:600;font-size:12px;letter-spacing:.02em;color:#1F5F53;
    cursor:pointer;list-style:none;display:inline-flex;align-items:center;gap:6px;padding:3px 0;}
  .ans > summary::-webkit-details-marker{display:none;}
  .ans > summary::after{content:"▾";font-size:10px;opacity:.8;transition:transform .18s ease;}
  .ans[open] > summary::after{transform:rotate(180deg);}
  .ans > summary:hover{color:var(--ink);}
  .ans-in{margin:8px 0 2px;padding:11px 14px;border-left:2px solid var(--line);background:rgba(0,0,0,0.025);
    border-radius:0 8px 8px 0;}
  .ans-q{font-family:var(--serif);font-size:14px;line-height:1.5;color:#5C564A;margin:0 0 4px;font-style:italic;}
  .ans-a{font-family:var(--sans);font-size:13px;color:var(--ink);margin:0 0 12px;}
  .ans-a:last-child{margin-bottom:0;}
  /* The 'why' sits inside the summary, so it needs its own separation — without it the label ran together as
     "See my answers on how we do itthe read everything below is about". */
  .ans-why{font-weight:400;color:var(--faint);}
  .ans-why::before{content:" — ";}
  .ans-k{display:block;font-size:10.5px;letter-spacing:.08em;text-transform:uppercase;color:#6B6459;margin-bottom:1px;}
  .ans-a b{font-weight:700;}
  /* 🔴 THE STRAIGHT READ'S BLOCKS DO NOT SHARE A GROUND, and nothing in their class names says so.
     `sr-cut` and `sr-inv` are DARK; `sr-needle` and `sr-do` are LIGHT. This override originally named
     `.sr-cut` alone, so the evidence panel rendered var(--ink) on the inversion's near-black card —
     measured at 1.07:1, i.e. invisible, which is exactly how CH found it. Anything styled into an
     srBlock must check the ground first; the class name will not tell you. */
  .sr-cut .ans > summary,.sr-inv .ans > summary{color:#9FD3C7;}
  .sr-cut .ans > summary:hover,.sr-inv .ans > summary:hover{color:var(--cream);}
  .sr-cut .ans-in,.sr-inv .ans-in{background:rgba(255,255,255,0.05);border-left-color:rgba(255,255,255,0.22);}
  .sr-cut .ans-q,.sr-inv .ans-q{color:#CFC7B4;}
  .sr-cut .ans-a,.sr-inv .ans-a{color:var(--cream);}
  .sr-cut .ans-k,.sr-inv .ans-k{color:#9A9488;}
  /* The band word alone cannot separate "agreed, and strong" from "agreed, and absent" — both render as
     Aligned. The sub-label carries the level; it is deliberately quieter than the band word. */
  .eos-sublab{font-family:var(--sans);font-weight:500;font-size:10px;letter-spacing:.04em;text-transform:none;
    color:#EAD2A8;opacity:.95;}
  .eos-sublab::before{content:"· ";opacity:.7;}
  .eos-first{font-family:var(--sans);font-weight:700;font-size:9.5px;letter-spacing:.10em;text-transform:uppercase;
    color:#7A3B14;background:#FFE7BE;border-radius:5px;padding:2px 7px;}
  /* The SECOND tag — the biggest leader-vs-team gap. Deliberately a different fill, not a different shade of
     the same one: "start here" and "you and your team disagree here" are different instructions, and on the
     EOS map two treatments that merely differ in tint read as one. Reversed out, so it stays clearly the
     junior of the two without going quiet enough to miss. */
  .eos-src{color:#FFE7BE;background:#3A1F0F;}
  .eos-seq{font-family:var(--serif);font-size:14.5px;color:#FFFDFA;line-height:1.55;margin:0 0 12px;}
  .eos-seq b{color:#FFFFFF;font-weight:700;}
  /* §9 EOS coverage map (component-by-component, on the orange ground) */
  .eos-map{display:flex;flex-direction:column;gap:9px;margin:2px 0 14px;}
  /* 🔴 0.13 → 0.55 (CH ruling 2026-08-13: "darken the panel ground").
     The band chip measured 2.12:1 here — the dark-ground band palette (--z-*-on) was tuned for the hero's
     near-black #15130E, and this panel composited to rgb(156,79,33), a far lighter orange. Every band word
     failed, and the panel's own labels were only 4.0–4.1:1.
     🔴 THE ROW DARKENS, NOT THE PANEL. Taking `--wl-orange` itself down to #52290F would have made the
     numbers work and turned the EOS box from brand orange into deep brown. Deepening the overlay ON THE ROW
     — which is where every band chip, label and finding actually sits — fixes exactly the same text and
     leaves the panel, its summary bar and its border the colour CH designed. Worst case is now 4.52:1
     (Discordant), and the panel's own labels rise to 8.5–12:1 with it.
     `.soft` keeps the SAME ground: its "provisional" reading is carried by the dashed, dimmer BORDER (the
     2026-08-09 ruling), and a lighter ground would only have put its text back under the floor. */
  .eos-row{border:1px solid rgba(181,146,88,0.5);border-radius:11px;padding:12px 15px;}
  /* 🔴 TWO MEANINGS MUST NOT WEAR ONE EMPHASIS (CH spotted this: "what causes these to be highlighted
     differently?"). `soft` means "this Check barely measures this component" — a CAVEAT. The cream pill
     beside it means "start here" — an INSTRUCTION. Soft was a bright solid #F0D6A6 border, brighter than
     every other card, so the weaker signal shouted louder than the stronger one and the two read as the same
     kind of highlight. Now dashed and DIMMER than a normal row: provisional, which is what it means. The
     row already says `lens: light` in words, so the border only has to avoid contradicting it. */
  .eos-row.soft{border-style:dashed;border-color:rgba(181,146,88,0.42);}
  .eos-row-head{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap;margin:0 0 4px;}
  .eos-comp{font-family:var(--sans);font-weight:700;letter-spacing:.06em;text-transform:uppercase;font-size:11px;color:#F2D49E;}
  /* 🔴 `text-transform:none` IS THE FIX, NOT A DEFAULT. Mission's chip sits inside `.eos-k`, which is
     uppercase, so it inherited it and printed DISCORDANT while Resonance printed Discordant — a divergence
     nobody chose. The band words are the product's own nouns and are title case everywhere else (the hero,
     the dimension cards, the Straight Read), so title case is the one that is right. Declared on the chip
     itself so it cannot be re-inherited by whatever container a future tool drops it into. */
  .eos-zone{font-family:var(--sans);font-weight:700;font-size:11px;letter-spacing:.03em;text-transform:none;}
  .eos-rel{font-family:var(--sans);font-size:10.5px;color:#E8CFA6;opacity:.85;margin-left:auto;}
  .eos-reads{font-family:var(--serif);font-size:13.5px;color:#FFFAF3;margin:0 0 5px;}
  .eos-bridge{font-family:var(--serif);font-size:13.5px;line-height:1.5;color:#F7EAD8;margin:0;}
  /* EOS derivation (Part 4 / Item 6): analysis opener · per-tile finding + move · demoted definition · coverage note */
  .eos-opener{font-family:var(--serif);font-size:15.5px;line-height:1.55;color:#FFFDFA;margin:0 0 12px;}
  .eos-finding{font-family:var(--serif);font-size:14px;line-height:1.55;color:#FFFAF3;margin:6px 0 4px;}
  .eos-move{font-family:var(--serif);font-size:13.5px;line-height:1.5;color:#F7EAD8;margin:0 0 5px;}
  .eos-fk{display:inline-block;font-family:var(--sans);font-weight:700;font-size:9.5px;letter-spacing:.1em;text-transform:uppercase;color:#F2D49E;margin-right:7px;}
  .eos-def{font-family:var(--serif);font-style:italic;font-size:12px;line-height:1.45;color:#E8CFA6;opacity:.82;margin:4px 0 0;}
  .eos-quote{font-family:var(--serif);font-size:14px;line-height:1.55;color:#FFFAF3;margin:6px 0 4px;}
  .eos-coverage{font-family:var(--serif);font-size:13px;line-height:1.5;color:#FFFDFA;margin:0 0 12px;}
  .eos-overall{font-family:var(--serif);font-size:14px;line-height:1.55;color:#FFFDFA;margin:0 0 12px;}

  /* round-10: Resonance360 member survey flow (activated by ?t=; reuses .cert-opt/.stmt/.srange) */
  .m-consent{max-width:52ch;margin:8px auto 4px;text-align:left;background:var(--card);border:1px solid var(--cardline);
    border-radius:14px;padding:20px 22px;}
  .m-consent p{font-family:var(--serif);font-size:15.5px;line-height:1.6;color:var(--text);margin:0 0 12px;}
  .m-consent b{color:var(--ink);}
  .m-consent .m-sub{font-family:var(--sans);font-size:13px;color:#6b6456;margin:0 0 14px;}
  .m-check{display:flex;gap:10px;align-items:flex-start;font-family:var(--sans);font-size:13.5px;color:var(--text);
    line-height:1.45;cursor:pointer;border-top:1px solid var(--line);padding-top:14px;}
  .m-check input{margin-top:2px;width:17px;height:17px;flex:0 0 auto;accent-color:var(--teal);cursor:pointer;}
  .m-group{max-width:56ch;margin:0 auto 22px;text-align:left;}
  .m-q{font-family:var(--sans);font-weight:600;font-size:14.5px;color:var(--ink);margin:0 0 10px;line-height:1.4;}
  .m-hint{font-family:var(--sans);font-weight:500;font-size:12px;color:var(--muted);letter-spacing:0;}
  .m-hint b{color:var(--teal-deep);}
  .m-lenses{gap:8px;}
  .m-stmt{max-width:54ch;margin:0 auto 18px;text-align:center;font-size:18px;color:var(--ink);}
  /* member flow: the leader's stated Mission/Niche/Values, collapsible — on the intro AND every answer screen */
  .lead-wrote{max-width:52ch;margin:0 auto 18px;text-align:left;background:var(--card);border:1px solid var(--cardline);border-radius:12px;}
  .lead-wrote>summary{cursor:pointer;padding:10px 15px;font-family:var(--sans);font-weight:600;font-size:12.5px;letter-spacing:.02em;color:#6f6a60;list-style:none;display:flex;align-items:center;gap:8px;}
  .lead-wrote>summary::-webkit-details-marker{display:none;}
  .lead-wrote>summary::after{content:"▾";margin-left:auto;color:var(--faint);font-size:11px;display:inline-block;transition:transform .18s ease;}
  .lead-wrote[open]>summary::after{transform:rotate(180deg);}
  .lead-wrote-in{padding:2px 15px 13px;font-family:var(--sans);font-size:14px;line-height:1.55;color:var(--ink);}
  .lead-wrote-in p{margin:0 0 8px;}
  .lead-wrote-in ul{margin:0;padding:0 0 0 18px;} .lead-wrote-in li{margin:0 0 3px;}
  .lead-wrote-in .lw-k{font-weight:700;font-size:11px;letter-spacing:.06em;text-transform:uppercase;color:#8B857A;}
  .m-substmt{font-family:var(--serif);font-size:15px;line-height:1.5;color:var(--text);margin:2px 0 10px;}
  .m-foot{font-family:var(--sans);font-size:12.5px;color:var(--faint);margin:18px 0 0;}

  /* round-11: Resonance360 leader report — Attunement hero panel (below the CRQ hero) */
  .r-attune{background:var(--ground);color:var(--cream);border-radius:16px;padding:20px 26px;margin:14px 0 0;
    -webkit-print-color-adjust:exact;print-color-adjust:exact;}
  .att-top{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:20px;}
  .att-note{font-family:var(--sans);font-size:12.5px;line-height:1.55;color:#B9B09B;margin:16px 0 0;
    border-top:1px solid rgba(243,238,226,0.12);padding-top:13px;}
  .att-note b{color:var(--teal-soft);font-weight:600;}
  .att-stat-sub{display:block;font-weight:400;font-size:10px;color:#8f876f;margin-top:2px;max-width:15ch;line-height:1.3;}
  .att-hero{display:flex;flex-direction:column;gap:4px;}
  .att-k{font-family:var(--sans);font-weight:600;letter-spacing:.14em;font-size:11px;text-transform:uppercase;color:var(--sage);}
  .att-sub-k{font-weight:500;letter-spacing:.02em;font-size:11px;text-transform:none;color:#A79F88;margin-left:8px;}
  .att-row{display:flex;align-items:center;gap:14px;margin-top:4px;}
  .att-num{font-family:var(--serif);font-weight:500;font-size:46px;line-height:1;color:var(--cream);}
  .att-side{display:flex;gap:16px 22px;flex-wrap:wrap;}   /* B1: wrap + tighter gap so two 3-digit stats (100/100) never overflow the panel */
  .att-stat{display:flex;flex-direction:column;align-items:flex-start;min-width:0;}
  .att-stat-n{font-family:var(--serif);font-size:26px;font-weight:500;color:var(--teal-soft);line-height:1;}
  .att-stat-k{font-family:var(--sans);font-size:11px;color:#A79F88;letter-spacing:.04em;margin-top:4px;max-width:14ch;line-height:1.3;}
  @media (max-width:560px){ .att-top{flex-direction:column;align-items:flex-start;gap:14px;} .att-side{flex-wrap:wrap;gap:16px 22px;} }

  /* round-12: Resonance360 — three-P gap-cause cards (stacked bar) + Priorities heatmap.
     Cause colours (fixed): Perspective = blue, Priorities = gold, Perception = slate. */
  .tp-legend{display:flex;flex-direction:column;gap:5px;margin:0 0 14px;}
  .tp-leg{font-family:var(--sans);font-size:12px;color:#6b6456;line-height:1.4;display:flex;align-items:baseline;gap:7px;}
  .tp-leg b{color:var(--ink);font-weight:600;}
  .tp-dot{flex:0 0 auto;width:9px;height:9px;border-radius:3px;transform:translateY(1px);}
  .tp-dot.persp,.tp-seg.persp{background:var(--blue);} .tp-dot.prio,.tp-seg.prio{background:var(--gold);} .tp-dot.perc,.tp-seg.perc{background:var(--slate);}
  .tp-cards{display:flex;flex-direction:column;gap:12px;}
  .tp-card{background:var(--card);border:1px solid var(--cardline);border-left:4px solid var(--faint);border-radius:13px;padding:15px 17px;}
  .tp-card.sev-red{border-left-color:var(--z-diss);} .tp-card.sev-black{border-left-color:var(--ink);}
  .tp-head{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:0 0 11px;}
  .tp-dim{font-family:var(--serif);font-weight:600;font-size:16px;color:var(--ink);}
  .tp-badge{font-family:var(--sans);font-weight:700;font-size:10px;letter-spacing:.08em;text-transform:uppercase;
    padding:3px 9px;border-radius:999px;background:#EFE7D6;color:var(--text);}
  .tp-badge.tp-perception{background:var(--slate);color:#fff;} .tp-badge.tp-perspective{background:var(--blue);color:#fff;}
  .tp-badge.tp-priorities{background:var(--gold);color:#3a2f13;} .tp-badge.tp-mixed{background:#E4DBC8;color:var(--muted);}
  .tp-flag{font-family:var(--sans);font-weight:600;font-size:11px;color:var(--z-diss);letter-spacing:.02em;}
  .tp-sev{font-family:var(--sans);font-weight:700;font-size:9.5px;letter-spacing:.06em;text-transform:uppercase;color:var(--z-diss);}
  .tp-sev.sev-black{color:var(--ink);}
  .tp-stack{display:flex;width:100%;height:22px;border-radius:6px;overflow:hidden;gap:2px;background:var(--card);}
  .tp-seg{display:flex;align-items:center;justify-content:center;min-width:0;font-family:var(--sans);font-weight:700;
    font-size:11px;color:#fff;letter-spacing:.02em;overflow:hidden;white-space:nowrap;}
  .tp-seg.prio{color:#3a2f13;}
  .tp-move{font-family:var(--serif);font-size:14.5px;line-height:1.58;color:var(--text);margin:11px 0 0;}
  .tp-move b{font-weight:600;color:var(--ink);}
  .tp-none{font-family:var(--serif);font-style:italic;color:var(--muted);font-size:15px;margin:0;}
  .hm-key{font-family:var(--sans);font-size:11px;color:var(--gold-ink);font-weight:600;}
  .hm-grid{display:flex;flex-direction:column;gap:6px;}
  .hm-row{display:flex;align-items:center;gap:12px;}
  .hm-lab{flex:0 0 44%;font-family:var(--sans);font-size:13px;color:var(--text);display:flex;align-items:center;gap:5px;min-width:0;}
  .hm-lead{flex:0 0 auto;color:var(--gold-ink);font-size:11px;}
  .hm-lead-sp{flex:0 0 auto;width:11px;}
  .hm-tag{font-family:var(--sans);font-size:9.5px;font-weight:700;letter-spacing:.05em;text-transform:uppercase;padding:2px 6px;border-radius:999px;white-space:nowrap;}
  .hm-tag.team{background:var(--teal);color:#fff;} .hm-tag.you{background:#EFE7D6;color:var(--muted);}
  .hm-bar{flex:1 1 auto;height:14px;background:#EAE3D3;border-radius:4px;overflow:hidden;}
  .hm-fill{display:block;height:100%;border-radius:4px;}   /* colour set inline (sequential brand-teal ramp) */
  .hm-v{flex:0 0 78px;text-align:right;font-family:var(--sans);font-size:12px;font-weight:600;color:var(--muted);}
  .hm-n{font-weight:400;color:var(--faint);font-size:11px;}
  .hm-mismatch{font-family:var(--serif);font-size:14.5px;line-height:1.55;color:var(--text);margin:0 0 12px;
    padding:11px 14px;background:var(--card);border:1px solid var(--cardline);border-left:3px solid var(--teal);border-radius:11px;}
  .hm-mismatch b{color:var(--ink);font-weight:600;}
  .lead-colead-what{display:block;font-family:var(--sans);font-size:11.5px;color:var(--muted);font-style:italic;margin:3px 0 4px;line-height:1.45;}
  .lead-colead-what em{color:var(--text);font-style:italic;}
  .assist{background:var(--card);border:1px solid var(--cardline);border-radius:16px;padding:22px 22px 20px;margin:34px 0 0;}
  .assist .k{font-family:var(--sans);font-weight:600;letter-spacing:.16em;font-size:11px;text-transform:uppercase;color:var(--teal-deep);margin:0 0 4px;}
  .assist .sub{font-family:var(--sans);font-size:12.5px;color:#6b6456;margin:0 0 14px;}
  .assist-log{display:flex;flex-direction:column;gap:10px;margin:0 0 14px;max-height:46vh;overflow-y:auto;
    scroll-padding-bottom:8px;}
  .assist-msg{font-family:var(--sans);font-size:14px;line-height:1.55;padding:11px 14px;border-radius:12px;max-width:88%;}
  .assist-msg.user{align-self:flex-end;background:var(--ink);color:#fff;border-bottom-right-radius:4px;}
  .assist-msg.bot{align-self:flex-start;background:#fff;border:1px solid var(--rule);color:var(--text);border-bottom-left-radius:4px;}
  .assist-msg.bot.thinking{color:var(--muted);font-style:italic;}
  .assist-chips{display:flex;flex-wrap:wrap;gap:8px;margin:0 0 12px;}
  .assist-chip{font-family:var(--sans);font-size:13px;font-weight:500;color:var(--text);background:#fff;
    border:1px solid var(--rule);border-radius:999px;padding:8px 14px;cursor:pointer;transition:all .14s ease;}
  .assist-chip:hover{border-color:var(--teal);}
  .assist-chip:disabled{opacity:.4;cursor:not-allowed;}
  .assist-form{display:flex;gap:8px;}
  .assist-form input{flex:1 1 auto;min-width:0;font-family:var(--serif);font-size:15px;padding:12px 14px;
    border:1px solid var(--rule);border-radius:10px;background:#fff;color:var(--text);}
  .assist-form input:focus-visible{outline:2px solid var(--teal);outline-offset:1px;}
  .assist-form button{font-family:var(--sans);font-weight:600;font-size:14px;background:var(--ink);color:#fff;
    border:0;border-radius:10px;padding:0 18px;cursor:pointer;}
  .assist-form button:disabled{opacity:.4;cursor:not-allowed;}
  .assist-cap{font-family:var(--sans);font-size:12px;color:var(--faint);font-style:italic;margin:12px 0 0;}

  /* round-13: Resonance360 overall summary (exec "short version") under the hero */
  .overview{background:var(--card);border:1px solid var(--cardline);border-left:4px solid var(--teal);border-radius:16px;
    padding:20px 24px;margin:14px 0 0;}
  .ov-eyebrow{font-family:var(--sans);font-weight:600;letter-spacing:.16em;font-size:10.5px;text-transform:uppercase;color:var(--teal-deep);margin:0 0 8px;}
  .ov-lede{font-family:var(--serif);font-size:18px;line-height:1.5;color:var(--ink);margin:0 0 8px;}
  .ov-lede b{font-weight:600;color:var(--ink);}
  .ov-att{font-family:var(--sans);font-size:13.5px;color:#6b6456;line-height:1.5;margin:0;}
  .ov-more{margin:12px 0 0;}
  .ov-more>summary{list-style:none;cursor:pointer;font-family:var(--sans);font-weight:600;font-size:12.5px;color:var(--teal-deep);}
  .ov-more>summary::-webkit-details-marker{display:none;}
  .ov-more>summary::after{content:" ▾";transition:transform .18s ease;}
  .ov-more[open]>summary::after{transform:rotate(180deg);}
  .ov-more-in{margin-top:10px;border-top:1px solid var(--line);padding-top:12px;}
  .ov-more-in p{font-family:var(--serif);font-size:15px;line-height:1.6;color:var(--text);margin:0 0 10px;}
  .ov-more-in p:last-child{margin-bottom:0;}
  .ov-more-in b{font-weight:600;color:var(--ink);}
  .ov-move-k{display:block;font-family:var(--sans);font-weight:600;font-size:10px;letter-spacing:.1em;text-transform:uppercase;color:var(--gold-ink);margin-bottom:2px;}
  .ov-move-stake{display:block;margin-top:6px;font-family:var(--sans);font-size:12.5px;line-height:1.55;color:#6b6456;}
  .ov-scroll{font-family:var(--sans)!important;font-size:12px!important;color:var(--faint)!important;font-style:italic;}

  /* round-14: 360 consolidated per-dimension blocks (read → consequence → track → cause → this-week) */
  .cb-legend{margin:0 0 12px;}
  .cblocks{display:flex;flex-direction:column;gap:10px;}
  details.cblock{background:var(--card);border:1px solid var(--cardline);border-left:4px solid var(--faint);border-radius:14px;overflow:hidden;}
  details.cblock.warn{border-left-color:var(--z-diss);}
  details.cblock.pos{border-left-color:var(--sage);}
  details.cblock.is-lead{border-left-color:var(--ink);}
  details.cblock>summary{list-style:none;cursor:pointer;padding:15px 18px;}
  details.cblock>summary::-webkit-details-marker{display:none;}
  .cb-head{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap;margin:0 0 6px;}
  .cb-head .sig-label{font-family:var(--sans);font-weight:700;font-size:10px;letter-spacing:.08em;text-transform:uppercase;color:var(--z-diss);}
  .cblock.pos .cb-head .sig-label{color:var(--teal-deep);}
  .cb-head .sig-nm{font-family:var(--serif);font-weight:600;font-size:17px;color:var(--ink);}
  .cb-head .sig-cat{font-family:var(--sans);font-size:10.5px;letter-spacing:.04em;text-transform:uppercase;color:var(--faint);}
  .cblock .sig-line{font-family:var(--serif);font-size:15px;line-height:1.55;color:var(--text);margin:0 0 8px;}
  .cb-meta{display:flex;align-items:center;gap:12px;flex-wrap:wrap;}
  .cb-meta .sig-zone{font-family:var(--sans);font-weight:700;font-size:11px;letter-spacing:.04em;text-transform:uppercase;}
  .dt-tag{font-family:var(--sans);font-weight:600;font-size:10.5px;letter-spacing:.03em;padding:2px 9px;border-radius:999px;}
  /* Each variant's ink is measured against its OWN tint, not against the card — a tinted pill is a
     different ground from the surface it sits on, and that is what left these at 4.0:1. */
  .dt-tag.split{background:rgba(168,86,54,.14);color:#8E4327;}
  .dt-tag.united{background:rgba(111,174,140,.16);color:#256159;}
  .dt-tag.united-low{background:rgba(168,86,54,.14);color:#8E4327;}  /* R3-4: united but level-low — a finding, not good news */
  .dt-tag.united-diverge{background:rgba(199,161,91,.18);color:#6B5019;}   /* #12: team agrees internally but NOT with the leader — a finding (amber) */
  .cb-expand{margin-left:auto;font-family:var(--sans);font-size:11.5px;font-weight:600;color:var(--teal-deep);}
  .cb-expand::after{content:" ▾";display:inline-block;transition:transform .18s ease;}
  details.cblock[open] .cb-expand::after{transform:rotate(180deg);}
  .cb-body{padding:4px 18px 18px;border-top:1px solid var(--line);}
  .cb-track{margin:12px 0;}
  .cblock .dim-read-text{font-family:var(--serif);font-size:15px;line-height:1.6;color:var(--text);margin:0 0 12px;}
  .cb-cause{background:#fff;border:1px solid var(--rule);border-radius:11px;padding:13px 15px;margin:0 0 12px;}
  .cb-cause-head{display:flex;align-items:center;gap:10px;margin:0 0 9px;flex-wrap:wrap;}
  .cb-week{display:flex;flex-direction:column;gap:2px;font-family:var(--serif);font-size:15px;line-height:1.5;color:var(--ink);
    background:rgba(199,161,91,.1);border-left:3px solid var(--gold);border-radius:0 8px 8px 0;padding:10px 14px;margin:0;}
  .cb-week-k{font-family:var(--sans);font-weight:700;font-size:10px;letter-spacing:.1em;text-transform:uppercase;color:var(--gold-ink);}

  /* round-15: arc gauge restored into the collapsed cblock summary (You vs Team, always visible),
     top-of-report split/united read, and the re-collapsible assistant header toggle */
  .cb-sumrow{display:flex;gap:16px;align-items:center;}
  .cb-suml{flex:1 1 auto;min-width:0;}
  .cb-gauge{flex:0 0 auto;}
  .cb-gauge svg{display:block;width:116px;height:auto;}
  @media (max-width:560px){ .cb-sumrow{flex-direction:column;align-items:stretch;} .cb-gauge{align-self:flex-start;} }
  .att-split{font-family:var(--sans);font-size:12.5px;line-height:1.55;color:#CFC6B0;margin:15px 0 0;
    border-top:1px solid rgba(243,238,226,0.12);padding-top:13px;}
  .att-split-k{font-family:var(--sans);font-weight:700;font-size:9.5px;letter-spacing:.1em;text-transform:uppercase;color:var(--sage);margin-right:9px;}
  .assist button.assist-toggle{padding:0;border:0;background:none;text-align:left;cursor:pointer;}
  .assist button.assist-toggle:hover{color:var(--teal);}
  .ov-move{font-family:var(--sans);font-size:14px;line-height:1.55;color:var(--text);margin:12px 0 0;}

  /* round-16: 360-only typography — normalize the overview lede + the "Reading the Signals" lead
     sentence to a slightly-smaller sans (the .ov-att family). Scoped to .report.is360 so the tuned
     solo Resonance + Mission serif heroes are untouched. */
  .report.is360 .ov-lede{font-family:var(--sans);font-size:16.5px;line-height:1.5;font-weight:500;}
  .report.is360 .lead-truth{font-family:var(--sans);font-size:16.5px;line-height:1.5;font-weight:500;}

  /* round-18: 360 four-readings component (the three comparisons) + the "reads match" aligned badge */
  .four-read{margin:4px 0 2px;}
  .fr-strip{margin:0 0 14px;}
  .fr-strip:last-of-type{margin-bottom:6px;}
  .fr-shead{display:flex;justify-content:space-between;align-items:baseline;gap:8px;flex-wrap:wrap;margin:0 0 4px;}
  .fr-stitle{font-family:var(--sans);font-weight:600;font-size:12.5px;color:var(--ink);}
  .fr-ssub{font-family:var(--sans);font-size:10.5px;color:var(--faint);}
  .fr-track{height:32px;background:rgba(29,26,20,.04);border-radius:8px;}
  .fr-band{position:absolute;top:50%;height:16px;transform:translateY(-50%);border-radius:5px;}
  .fr-band.team{background:rgba(199,161,91,.22);}
  .fr-band.you{background:rgba(60,110,140,.16);}
  .four-read .tmt-mark.ghost::after{display:none;}
  .four-read .tmt-mark.gb{top:auto;bottom:0;}
  .fr-note{font-family:var(--serif);font-size:13px;line-height:1.5;color:var(--text);margin:5px 0 0;}
  .fr-note b{color:var(--ink);font-weight:600;}
  .fr-legend{display:flex;gap:14px;flex-wrap:wrap;align-items:center;margin:9px 0 0;font-family:var(--sans);font-size:10px;color:var(--faint);}
  .fr-l{display:flex;align-items:center;gap:5px;}
  .fr-l-ghost .sil-ic{opacity:.5;}   /* B4b: legend shows both ghost forms (leader + team), shadowed to match the strips */
  .tp-badge.tp-aligned{background:rgba(111,174,140,.18);color:var(--teal-deep);}

  /* round-19: Our-Read poles + read-type marks + aligned positive bar + framework line +
     attunement side gauges/participation tank + utility-header emblems */
  .fr-poles{display:flex;justify-content:space-between;font-family:var(--sans);font-size:9.5px;letter-spacing:.06em;
    text-transform:uppercase;color:var(--faint);margin:8px 2px 0;}
  .read-mark{flex:0 0 auto;align-self:center;margin-right:2px;}
  .rm-blind_spot{color:var(--z-diss);} .rm-shared_deficit{color:var(--z-diss);}
  .rm-shared_strength{color:var(--sage);} .rm-underread{color:var(--teal-deep);}
  .tp-aligned-bar{display:flex;align-items:center;height:22px;border-radius:6px;background:rgba(111,174,140,.20);padding:0 12px;}
  .tp-aligned-bar span{font-family:var(--sans);font-weight:700;font-size:11px;letter-spacing:.02em;color:var(--teal-deep);}
  .cb-epi{font-family:var(--sans);font-size:10.5px;color:var(--faint);letter-spacing:.02em;margin:12px 0 0;}
  .att-stat-top{display:flex;align-items:center;gap:8px;}
  .att-stat-g{line-height:0;}
  .att-stat-of{font-family:var(--serif);font-size:15px;color:#A79F88;font-weight:400;}
  .tank{display:block;width:66px;height:8px;border-radius:4px;background:rgba(243,238,226,0.16);overflow:hidden;margin:7px 0 0;}
  .tank-fill{display:block;height:100%;background:var(--teal-soft);border-radius:4px;}
  .ui-glyph{flex:0 0 auto;vertical-align:-2px;margin-right:8px;color:var(--teal-deep);}
  details.eos>summary .ui-glyph{color:#F2D49E;vertical-align:-2px;}

  /* round-20: four-readings legibility — top legend + 0–100 scale note, the 50% Emerging/Established
     midline, a gap connector so the distance reads, and the nowrap eyes-phrase in the 3-P legend */
  .fr-top{margin:0 0 9px;}
  .fr-scale-note{font-family:var(--sans);font-size:11px;line-height:1.5;color:var(--faint);margin:0 0 13px;}
  .fr-scale-note b{color:var(--muted);font-weight:600;}
  .fr-track::before{content:"";position:absolute;left:50%;top:5px;bottom:5px;width:1px;background:rgba(29,26,20,.10);}
  .fr-gap{position:absolute;top:50%;height:3px;transform:translateY(-50%);background:rgba(29,26,20,.20);border-radius:2px;}
  .tp-eyes{white-space:nowrap;}

  /* footer */
  .r-foot{border-top:1px solid var(--line);margin:34px 0 0;padding:22px 0 0;text-align:center;}
  .r-foot .disc{font-family:var(--sans);font-size:11.5px;color:var(--muted);font-style:italic;max-width:60ch;margin:0 auto 14px;line-height:1.5;}
  .r-foot .end{font-family:var(--sans);font-weight:600;letter-spacing:.20em;font-size:10px;color:var(--faint);text-transform:uppercase;}
  .r-legal{margin:14px 0 0;font-family:var(--sans);font-size:11px;color:var(--faint);}
  .r-legal a{color:var(--muted);}

  @media (max-width:560px){
    .display{font-size:28px;} .sheet{padding:32px 16px 24px;}
    .q-title{font-size:25px;} .crq-num{font-size:28px;} .crq-zone{font-size:34px;}
    .read-card .big{font-size:28px;}
  }
  @media (prefers-reduced-motion:no-preference){
    .fade{animation:rise .5s cubic-bezier(.2,.7,.3,1) both;}
    @keyframes rise{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}
  }
  /* Part 1 §1.3 — "Discordant, not broken" state banner (moat gated off on low alignment); §1.4 Attunement note */
  .disc-adeq{background:var(--card);border:1px solid var(--cardline);border-left:4px solid var(--z-diss);
    border-radius:16px;padding:18px 22px;margin:14px 0 0;}
  .disc-adeq p{font-family:var(--serif);font-size:16px;line-height:1.55;color:var(--ink);margin:0;}
  .disc-adeq b{font-weight:700;}
  .att-saw{font-family:var(--serif);font-style:italic;font-size:14.5px;line-height:1.5;color:var(--ink);
    margin:12px 0 0;padding-left:12px;border-left:3px solid var(--teal-soft);}
  /* ===== S9 — Executive Summary one-pager: collapsible under the hero; exec-only print path ===== */
  .exec-collapse{background:var(--card);border:1px solid var(--cardline);border-left:4px solid var(--gold);
    border-radius:16px;margin:14px 0 0;overflow:hidden;}
  .exec-collapse>summary{list-style:none;cursor:pointer;display:flex;align-items:center;gap:9px;
    padding:14px 20px;font-family:var(--sans);}
  .exec-collapse>summary::-webkit-details-marker{display:none;}
  .exec-collapse .ec-title,.report-decoder .ec-title{font-weight:700;font-size:13px;letter-spacing:.02em;color:var(--ink);}
  .exec-collapse .ec-sub,.report-decoder .ec-sub{font-size:12px;font-weight:400;color:var(--muted);}
  .exec-collapse .ec-arr{margin-left:auto;color:var(--muted);font-size:11px;transition:transform .2s;}
  .exec-collapse[open]>summary .ec-arr{transform:rotate(180deg);}
  .exec-summary{padding:2px 22px 6px;}
  .es-head{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 12px;
    border-bottom:1px solid var(--line);padding-bottom:10px;margin-bottom:13px;}
  .es-eyebrow{font-family:var(--sans);font-weight:700;letter-spacing:.16em;text-transform:uppercase;font-size:10px;color:var(--gold-ink);width:100%;}
  .es-org{font-family:var(--serif);font-weight:600;font-size:19px;color:var(--ink);}
  .es-meta{font-family:var(--sans);font-size:12px;color:var(--muted);margin-left:auto;}
  .es-audience{font-family:var(--sans);font-size:12.5px;line-height:1.5;color:var(--muted);margin:0 0 10px;}
  .es-prov{font-family:var(--sans);font-style:italic;font-size:12.5px;line-height:1.5;color:var(--text);
    margin:0 0 14px;padding-left:11px;border-left:2px solid var(--rule);}
  .es-sec{margin:0 0 13px;}
  .es-h{font-family:var(--sans);font-weight:700;font-size:10.5px;letter-spacing:.11em;text-transform:uppercase;color:var(--muted);margin:0 0 5px;}
  .es-item{font-family:var(--serif);font-size:14.5px;line-height:1.5;color:var(--text);margin:0 0 5px;}
  .es-item:last-child{margin-bottom:0;}
  .es-item b{font-weight:600;color:var(--ink);}
  .es-verdict{font-family:var(--serif);font-size:15.5px;line-height:1.5;color:var(--ink);margin:0 0 6px;}
  .es-score{font-family:var(--serif);font-size:14px;line-height:1.5;color:var(--text);margin:0;}
  .es-score b{color:var(--ink);}
  .es-foot{font-family:var(--sans);font-size:11px;line-height:1.5;color:var(--faint);margin:14px 0 0;padding-top:10px;border-top:1px solid var(--line);}
  .es-sig{color:var(--muted);}
  .es-actions{padding:0 20px 14px;}

  /* ===== THE STRAIGHT READ — the summary layer before the report =========================
     Brand tokens only (ground/cream/card/gold/sage + the zone words). The reference mockups
     carried their own palette, serif and 680px measure; those are NOT adopted — this rides the
     platform's 760px .sheet, Spectral/Hanken, and the 16px card radius the report already uses. */
  .sr-labelrow{display:flex;align-items:center;justify-content:space-between;gap:14px;flex-wrap:wrap;margin:0 0 20px;}
  .sr-l{font-family:var(--sans);font-weight:700;letter-spacing:.18em;font-size:10.5px;text-transform:uppercase;color:var(--faint);}
  .sr-jump{font-family:var(--sans);font-weight:600;font-size:13px;color:var(--teal-ink);background:none;border:0;
    border-bottom:1.5px solid var(--teal-deep);padding:0 0 1px;cursor:pointer;}
  .sr-jump:hover{color:var(--ink);border-bottom-color:var(--ink);}

  .sr-state{margin:0 0 26px;}
  /* Two columns ONLY when there is something to restate — the measure caps (.sr-plain 28ch, .sr-def 52ch)
     are deliberate for readability, but they left the right half of a wide screen empty. The leader's own
     words are the one thing that earns that space, because the plain line asserts something about them. */
  /* 🔴 OPTION C (CH ruling 2026-08-09): centered state word with a spectrum rule to each edge as a
     header band, everything below LEFT-ALIGNED, and a TRUE 50/50 split. The big plain line spans the full
     width so neither column has to squeeze it. Heights are balanced by wireStateBalance() — whichever
     column is taller is clamped to the other and one control expands both, so the split never looks
     lopsided. */
  /* 🔴 The gutter is carried by the COLUMNS, not by `column-gap` (CH, 2026-08-10). With a 34px gap the
     tracks split 50/50 correctly, but `.sr-restate`'s rule is drawn on the left EDGE of the right track —
     i.e. the right edge of the gutter — so the divider sat 17px right of the page centre under a word that
     was perfectly centred. Splitting the gutter as padding puts the track boundary, and therefore the rule,
     exactly on the centre line. Same visual gutter (17 + 2 + 16), one fewer thing off-axis. */
  .sr-state.has-restate{display:grid;grid-template-columns:1fr 1fr;column-gap:0;row-gap:0;align-items:start;}
  .sr-state.has-restate .sr-state-main{padding-right:18px;}
  /* The rule is drawn INSIDE the right track, so a track boundary on the centre line leaves the 2px stroke
     sitting entirely to its right. Pull it back by half its own width so it straddles the centre, and give
     the padding that pixel back so the text does not move. Both texts then clear the rule by 17px. */
  .sr-state.has-restate .sr-restate{margin-left:-1px;padding-left:17px;}
  .sr-band{grid-column:1/-1;display:flex;align-items:center;gap:18px;margin:0 0 24px;}
  .sr-band-rule{flex:1;height:2px;border-radius:2px;
    background:linear-gradient(90deg,var(--gold),var(--sage) 45%,var(--teal) 72%,var(--blue));}
  .sr-band-rule.left{transform:scaleX(-1);}
  .sr-band .sr-word{margin:0;white-space:nowrap;}
  .sr-state.has-restate .sr-def{max-width:none;margin-bottom:0;}
  .sr-state.has-restate .sr-state-main,.sr-state.has-restate .sr-restate{overflow:hidden;}
  /* Specificity, not order: `.sr-plain` (28ch measure) is declared LATER in this file, so a bare
     `.sr-plain-wide` lost and the line stayed capped at a third of the width.
     🔴 SCOPED TO `.sr-state`, NOT `.sr-state.has-restate` (CH, 2026-08-13). Gating it on has-restate meant
     Resonance never got the full-width line Option C rules it must have — 322px of a 716px block. The
     selector still carries two classes, so it still beats `.sr-plain`. `grid-column` is inert in the
     non-grid (no-restate) branch, which is why one rule can serve both. */
  .sr-state .sr-plain-wide{grid-column:1/-1;max-width:none;margin:26px 0 0;}
  .sr-state-more{grid-column:1/-1;justify-self:start;margin-top:10px;font-family:var(--sans);font-weight:600;
    font-size:12px;color:#1F5F53;background:none;border:0;padding:0;cursor:pointer;}
  .sr-state-more:hover{color:var(--ink);text-decoration:underline;}
  .sr-state.has-restate .sr-prov{margin-top:14px;}
  @media (max-width:760px){ .sr-state.has-restate{display:block;}
    .sr-state.has-restate .sr-state-main{padding-right:0;}
    .sr-state.has-restate .sr-restate{margin-left:0;padding-left:16px;}
    .sr-band{margin-bottom:18px;} .sr-band-rule{display:none;} .sr-band .sr-word{white-space:normal;}
    .sr-state.has-restate .sr-state-main,.sr-state.has-restate .sr-restate{max-height:none!important;overflow:visible;}
    .sr-state-more{display:none;} }
  .sr-restate{border-left:2px solid var(--line);padding-left:16px;}
  @media (max-width:760px){ .sr-restate{margin-top:22px;} }
  .sr-restate-k{font-family:var(--sans);font-weight:700;letter-spacing:.09em;text-transform:uppercase;
    font-size:10px;color:var(--faint);margin-bottom:8px;}
  .sr-restate-body{font-family:var(--serif);font-size:15px;line-height:1.5;color:#4A4438;}
  .sr-restate-body p{margin:0 0 8px;}
  .sr-restate-body p:last-child{margin-bottom:0;}
  /* Clamped to about two lines until asked — a verbose statement must not swamp the page it is annotating.
     🔴 NOT `-webkit-line-clamp`: that only clamps a single run of inline content, and this body is several
     <p> elements (purpose, niche, each value). It silently did nothing. max-height clamps block children. */
  .sr-restate-body.clamped{max-height:3.1em;overflow:hidden;}
  .sr-restate-none{font-family:var(--sans);font-size:13px;line-height:1.55;color:var(--muted);margin:0 0 9px;}
  .sr-restate-add{font-family:var(--sans);font-weight:600;font-size:12.5px;color:#1F5F53;background:none;
    border:0;padding:0;cursor:pointer;}
  .sr-restate-add:hover{color:var(--ink);text-decoration:underline;}
  .sr-restate-more{margin-top:7px;font-family:var(--sans);font-weight:600;font-size:12px;color:#1F5F53;
    background:none;border:0;padding:0;cursor:pointer;}
  .sr-restate-more:hover{color:var(--ink);text-decoration:underline;}
  .sr-word{font-family:var(--serif);font-weight:500;font-size:46px;line-height:1.02;letter-spacing:-.015em;margin:0 0 12px;}
  .sr-def{font-family:var(--sans);font-size:14.5px;line-height:1.55;color:var(--muted);margin:0 0 18px;max-width:52ch;}
  .sr-plain{font-family:var(--serif);font-size:23px;line-height:1.3;color:var(--ink);margin:0 0 16px;max-width:28ch;}
  .sr-plain b{font-weight:600;}
  .sr-prov{font-family:var(--sans);font-style:italic;font-size:12.5px;line-height:1.5;color:var(--faint);margin:0;
    max-width:56ch;padding-left:11px;border-left:2px solid var(--line);}

  /* Charlie's Cut — the dark panel, matching .handoff / .r-hero */
  .sr-cut{background:var(--ground);color:var(--cream);border-radius:16px;padding:26px 26px 22px;margin:0 0 30px;}
  .sr-cut-head{display:flex;align-items:center;gap:12px;margin:0 0 16px;}
  .sr-mono{flex:0 0 auto;width:38px;height:38px;border-radius:50%;background:#241F17;border:1px solid #4A4335;
    display:flex;align-items:center;justify-content:center;font-family:var(--serif);font-size:19px;color:var(--gold);}
  .sr-who{font-family:var(--serif);font-size:18px;color:var(--cream);line-height:1.2;}
  .sr-who small{display:block;font-family:var(--sans);font-weight:500;font-size:10.5px;letter-spacing:.10em;
    text-transform:uppercase;color:#8E876F;margin-top:4px;}
  .sr-take{font-family:var(--serif);font-size:17px;line-height:1.58;color:#D8D0BC;margin:0 0 13px;}
  .sr-take b{color:#EFDFB6;font-weight:500;}
  .sr-rule{height:1px;background:#2E2820;margin:18px 0 16px;}
  /* On the DARK cut card, so this one is LIGHTENED to pass, not darkened — 4.18:1 → 5.13:1. The direction
     of a contrast fix depends on the ground, and this block's ground is the opposite of the page's. */
  .sr-disclose{font-family:var(--sans);font-size:11px;line-height:1.5;color:#8D8676;margin:16px 0 0;}
  /* the bounded assistant, on dark ground — same panel, same ids, restyled in place */
  .sr-cut .assist{background:transparent;border:0;border-radius:0;padding:0;margin:0;}
  .sr-cut .assist .k,.sr-cut .assist button.assist-toggle{color:var(--sage);}
  .sr-cut .assist button.assist-toggle:hover{color:var(--cream);}
  .sr-cut .assist .sub{color:#8E876F;}
  .sr-cut .assist-form input{background:#0F0C08;border:1px solid #322D26;color:var(--cream);}
  .sr-cut .assist-form input::placeholder{color:#6E6759;}
  .sr-cut .assist-form button{background:var(--cream);color:var(--ink);}
  .sr-cut .assist-chip{background:transparent;border:1px solid #3A342C;color:#B8B0A0;}
  .sr-cut .assist-chip:hover{border-color:var(--sage);color:var(--cream);}
  .sr-cut .assist-msg.bot{background:#1E1A13;border:1px solid #322D26;color:#D8D0BC;}
  .sr-cut .assist-msg.user{background:var(--cream);color:var(--ink);}
  .sr-cut .assist-cap{color:#7E7768;}

  .sr-k{font-family:var(--sans);font-weight:700;letter-spacing:.16em;font-size:10.5px;text-transform:uppercase;
    color:var(--muted);margin:0 0 8px;}
  /* the mirror — exemplar + cautionary analogues */
  .sr-mirror{margin:0 0 30px;}
  .sr-frame{font-family:var(--sans);font-size:12px;line-height:1.5;color:var(--faint);margin:0 0 14px;max-width:62ch;}
  .sr-mirror-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px;}
  .sr-mirror-grid.one{grid-template-columns:1fr;}
  .sr-co{background:var(--card);border:1px solid var(--cardline);border-radius:16px;padding:20px 22px;
    border-top:3px solid var(--sr-co,var(--sage));}
  /* Tag TEXT, so it takes the ink variant; --sr-co is used for nothing else (verified). */
  .sr-co.exemplar{--sr-co:var(--sage-ink);}
  .sr-co.cautionary{--sr-co:var(--orange-ink);}
  .sr-co-tag{font-family:var(--sans);font-weight:700;letter-spacing:.10em;font-size:10px;text-transform:uppercase;
    color:var(--sr-co);margin:0 0 10px;}
  .sr-co-name{font-family:var(--serif);font-weight:500;font-size:22px;line-height:1.15;color:var(--ink);margin:0 0 6px;}
  .sr-co-match{font-family:var(--sans);font-style:italic;font-size:12px;line-height:1.45;color:var(--muted);margin:0 0 11px;}
  .sr-co-read{font-family:var(--serif);font-size:14.5px;line-height:1.55;color:var(--text);margin:0;}
  .sr-co-scope{font-family:var(--sans);font-size:11px;line-height:1.45;color:var(--faint);margin:9px 0 0;}
  /* (c) The analogue's detail disclosure (CH 2026-08-13): name + match line open, the rest one click away.
     Sits ABOVE `.sr-co-src` in weight — this is the card's own caret, that one is the citation's — so it is
     the sans label and the citation stays the smaller, fainter row nested inside it. */
  .sr-co-more{margin:2px 0 0;}
  .sr-co-more>summary{list-style:none;cursor:pointer;font-family:var(--sans);font-weight:600;font-size:11.5px;
    letter-spacing:.02em;color:#1F5F53;display:inline-flex;align-items:center;gap:5px;padding:6px 0;}
  .sr-co-more>summary::-webkit-details-marker{display:none;}
  .sr-co-more>summary::after{content:"▾";font-size:9px;transition:transform .18s ease;}
  .sr-co-more[open]>summary::after{transform:rotate(180deg);}
  .sr-co-more>summary:hover{color:var(--ink);text-decoration:underline;}
  .sr-co-more>summary:focus-visible{outline:2px solid var(--teal);outline-offset:3px;border-radius:4px;}
  .sr-co-morein{padding-top:10px;}
  .sr-co-src{margin:11px 0 0;}
  .sr-co-src>summary{list-style:none;cursor:pointer;font-family:var(--sans);font-size:11px;font-weight:600;
    letter-spacing:.08em;text-transform:uppercase;color:var(--muted);}
  .sr-co-src>summary::-webkit-details-marker{display:none;}
  .sr-co-src>summary::after{content:' ▾';font-size:9px;transition:transform .18s ease;}
  .sr-co-src[open]>summary::after{transform:rotate(180deg);}
  .sr-co-src>summary:hover{color:var(--ink);}
  .sr-co-src p{font-family:var(--sans);font-size:11.5px;line-height:1.5;color:var(--faint);margin:7px 0 0;}
  .sr-src{font-family:var(--sans);font-size:11.5px;color:var(--faint);margin:12px 0 0;}

  /* do this first */
  .sr-do{background:var(--card);border:1px solid var(--cardline);border-left:4px solid var(--sr-state,var(--gold));
    border-radius:14px;padding:20px 22px;margin:0 0 28px;}
  /* The problem line. Quieter and smaller than the move it sits above — it is the SUBJECT, and the
     instruction has to stay the loudest thing in the block. The dimension carries the ink so the eye lands
     on what this is about before reading the clause.
     🔴 NOT `var(--muted)`, AND THAT IS THE POINT. --muted is #8B857A, which on this card's #FAF6EC measures
     3.39:1 — it FAILS WCAG AA for text this size. Reaching for the obvious token would have shipped a new
     element already failing contrast, exactly as the band words did on the light cards. #6B6459 is 5.42:1,
     is already in use here (.ans-k), and still reads clearly quieter than --text's 11.28:1, so the hierarchy
     survives the fix. Measured on this ground, not assumed.
     ⚠ --muted itself failing at small sizes is WIDER than this rule — .sr-co-match and others inherit it.
     Left alone here deliberately: that is a platform-wide a11y change, not this block's to make. */
  .sr-do-why{font-family:var(--sans);font-size:12.5px;line-height:1.5;color:#6B6459;margin:0 0 9px;}
  .sr-do-why b{font-weight:700;color:var(--ink);}
  .sr-move{font-family:var(--serif);font-size:16px;line-height:1.55;color:var(--text);margin:0;}
  .sr-move b{font-weight:600;color:var(--ink);}

  /* ---- collapsible blocks (Turn it over · Moves the needle) --------------------------------------
     The summary must READ, not just label: title + who on one line, a real teaser under it. A closed block
     that says only its name is a block nobody opens, so the teaser carries content. */
  .sr-block{border-radius:16px;margin:0 0 20px;}
  .sr-block>summary{list-style:none;cursor:pointer;padding:20px 24px;display:grid;
    grid-template-columns:1fr auto;gap:2px 14px;align-items:baseline;}
  .sr-block>summary::-webkit-details-marker{display:none;}
  .sr-block>summary:focus-visible{outline:2px solid var(--teal);outline-offset:-3px;border-radius:16px;}
  .sr-sum-l{display:flex;align-items:baseline;gap:12px;flex-wrap:wrap;}
  .sr-sum-t{font-family:var(--serif);font-size:21px;line-height:1.2;}
  .sr-sum-who{font-family:var(--sans);font-weight:700;letter-spacing:.1em;text-transform:uppercase;font-size:10.5px;}
  .sr-sum-tease{grid-column:1;font-family:var(--sans);font-size:12.5px;line-height:1.5;margin-top:5px;max-width:64ch;}
  .sr-sum-arr{grid-column:2;grid-row:1/span 2;align-self:center;font-size:11px;transition:transform .2s;}
  .sr-block[open]>summary .sr-sum-arr{transform:rotate(180deg);}
  .sr-block[open]>summary .sr-sum-tease{display:none;}   /* the teaser is for the closed state; open, the block speaks */
  .sr-block-in{padding:0 24px 22px;}

  /* Turn it over — Charlie's ground, so it carries his dark card */
  .sr-inv{background:var(--ground);color:var(--cream);}
  .sr-inv .sr-sum-t{color:var(--cream);}
  .sr-inv .sr-sum-who,.sr-inv .sr-sum-tease,.sr-inv .sr-sum-arr{color:#8E876F;}
  .sr-inv-sub{font-family:var(--sans);font-size:13px;line-height:1.5;color:#8E876F;margin:0 0 16px;max-width:62ch;}
  .sr-flipbox{border:1px solid #2E2820;border-radius:12px;padding:15px 17px;margin:0 0 11px;}
  .sr-flipbox.own{border-color:#3A342C;background:#0F0C08;}
  .sr-flip-k{font-family:var(--sans);font-weight:700;letter-spacing:.12em;text-transform:uppercase;font-size:10px;
    color:var(--gold);margin:0 0 7px;}
  .sr-flipbox p{font-family:var(--serif);font-size:15.5px;line-height:1.55;color:#D8D0BC;margin:0;}
  .sr-flipbox p b{color:#EFDFB6;font-weight:500;}
  .sr-inv-close{font-family:var(--serif);font-style:italic;font-size:13.5px;line-height:1.5;color:#8E876F;margin:14px 0 0;}

  /* Moves the needle — light card, gold rule: this is the analyst's read, not Charlie's */
  .sr-needle{background:var(--card);border:1px solid var(--cardline);border-top:3px solid var(--gold);}
  .sr-needle .sr-sum-t{color:var(--ink);}
  .sr-needle .sr-sum-who{color:var(--muted);}
  .sr-needle .sr-sum-tease{color:var(--muted);}
  .sr-needle .sr-sum-arr{color:var(--muted);}
  .sr-nsub{font-family:var(--sans);font-size:13px;line-height:1.5;color:var(--muted);margin:0 0 16px;max-width:64ch;}
  .sr-chain{margin:0 0 16px;}
  .sr-clink{display:flex;gap:14px;align-items:flex-start;padding:11px 0;}
  .sr-clink + .sr-clink{border-top:1px dashed var(--cardline);}
  .sr-clab{flex:0 0 100px;font-family:var(--sans);font-weight:700;letter-spacing:.1em;text-transform:uppercase;
    font-size:10px;color:var(--gold-ink);padding-top:4px;}
  .sr-ctxt{font-family:var(--serif);font-size:15px;line-height:1.55;color:var(--text);}
  .sr-ctxt b{color:var(--ink);font-weight:600;}
  /* 'Change it, and…' — moved out of the chain and under the move (CH 2026-08-13; see `changeOutcome`).
     It was an INSET PANEL (#F1EFE4, its own border) because it closed a large block. `.sr-do` is a compact
     card on the SAME --card ground, so re-nesting a bordered panel inside it draws a box in a box for no
     gain. A hairline continuation says the same thing: one card, two beats — the move, then what it buys.
     Ground is `.sr-do`'s --card, so every colour below is re-measured against that, not against #F1EFE4. */
  /* The rationale disclosure (CH 2026-08-13). Quiet by default so the MOVE is the thing you read; the
     summary names what is behind it rather than saying "More". `list-style:none` + the ::-webkit rule
     match how every other details on this page kills the native triangle. */
  .sr-do-more{margin:13px 0 0;}
  /* `padding-block` is a TAP TARGET, not rhythm: measured at 19px tall on a 380px viewport, which is half
     a finger. It buys ~31px without moving the text baseline anyone ruled on. */
  .sr-do-more>summary{list-style:none;cursor:pointer;font-family:var(--sans);font-weight:600;font-size:12.5px;
    letter-spacing:.01em;color:#1F5F53;display:inline-flex;align-items:center;gap:6px;padding:6px 0;}
  .sr-do-more>summary::-webkit-details-marker{display:none;}
  .sr-do-more>summary::after{content:"▾";font-size:10px;transition:transform .18s ease;}
  .sr-do-more[open]>summary::after{transform:rotate(180deg);}
  .sr-do-more>summary:hover{color:var(--ink);text-decoration:underline;}
  .sr-do-more>summary:focus-visible{outline:2px solid var(--teal);outline-offset:3px;border-radius:4px;}
  .sr-do-out{margin:12px 0 0;padding-top:13px;border-top:1px dashed var(--cardline);}
  .sr-do-out p{font-family:var(--serif);font-size:15px;line-height:1.55;color:var(--text);margin:0;}
  .sr-do-out p b{color:var(--ink);font-weight:600;}
  /* The inline lead-in. Two classes beat `.sr-do-out p b`, so it keeps the sage the kicker had while
     sitting in the sentence it belongs to. */
  .sr-do-out p b.sr-lead{color:#2C6B5C;font-weight:600;}
  .sr-caveat{font-family:var(--sans);font-size:12px;line-height:1.5;color:var(--faint);margin:14px 0 0;
    padding-top:12px;border-top:1px solid var(--cardline);}

  /* expand / collapse all — sits with the label row, quiet until wanted */
  .sr-tools{display:inline-flex;align-items:center;gap:7px;margin-left:auto;}
  .sr-tools-sep{color:var(--rule);font-size:11px;}
  .sr-toggle-all{font-family:var(--sans);font-weight:600;font-size:11.5px;letter-spacing:.02em;color:var(--muted);
    background:none;border:0;padding:2px 1px;cursor:pointer;}
  .sr-toggle-all:hover{color:var(--ink);}
  .sr-labelrow .sr-jump{margin-left:14px;}

  .sr-cta{text-align:center;margin:0 0 16px;}
  .sr-next{font-family:var(--sans);font-size:13px;line-height:1.55;color:var(--muted);text-align:center;margin:0;}
  .sr-next a,.sr-next button{color:var(--teal-deep);background:none;border:0;padding:0;font:inherit;cursor:pointer;
    text-decoration:none;border-bottom:1px solid var(--teal-deep);}

  @media (max-width:600px){
    .sr-word{font-size:34px;}
    .sr-plain{font-size:20px;}
    .sr-take{font-size:16px;}
    .sr-cut{padding:22px 20px 20px;}
    .sr-mirror-grid{grid-template-columns:1fr;}
    .sr-block>summary{padding:17px 18px;}
    .sr-block-in{padding:0 18px 18px;}
    .sr-sum-t{font-size:19px;}
    .sr-clink{flex-direction:column;gap:4px;}
    .sr-clab{flex:none;padding-top:0;}
    .sr-tools{margin-left:0;}
  }

  /* v1.5 §8 — clean shareable / print view (execs forward these) */
  @media print{
    @page{ margin:14mm; }
    .masthead,.report-tools,.expand-all,.assist,.dim-toggle,.wl-btn,.wl-btn-mini,.btn-out,.btn-ghost,.r-actions,
    .under-hood>summary .uh-arr,.rd-more>summary::after,.cb-expand,.ov-more>summary::after,details.eos>summary::after{display:none!important;}
    body{background:#fff;}
    *{box-shadow:none!important;}
    /* keep colour-carrying panels (dark hero, EOS, three-P bars, heatmap fills) from printing blank */
    .r-hero,.handoff,.r-attune,details.eos,.eos-row,.tp-stack,.tp-seg,.hm-bar,.hm-fill{-webkit-print-color-adjust:exact;print-color-adjust:exact;color-adjust:exact;}
    .report{max-width:100%;margin:0;}
    /* keep coherent blocks whole across page breaks */
    section,.sig-row,.read-card,.qcell,details.anch-card,.anch-card.anch-v2,.sources-list li,.under-hood,.takeaway,.lead-row,.wl-panel,details.cblock,.eos-row,.hm-row{break-inside:avoid;page-break-inside:avoid;}
    h2.sec-head,.takeaway-eyebrow{break-after:avoid;}
    /* beforeprint opens every <details>; show their content, drop the toggle affordance */
    .dim-read{display:block!important;}
    summary{list-style:none;cursor:auto;}
    /* Exec one-pager. Full-report print HIDES the collapsible (don't duplicate the report). Exec-only
       print (the Download button sets body.exec-only) hides EVERYTHING but the one-pager. */
    body:not(.exec-only) .exec-collapse{display:none!important;}
    body.exec-only .report>*:not(.exec-collapse){display:none!important;}
    body.exec-only .exec-collapse{border:none;border-radius:0;margin:0;background:#fff;}
    body.exec-only .exec-collapse>summary,body.exec-only .es-actions{display:none!important;}
    body.exec-only .exec-summary{padding:0;}
    body.exec-only .es-sec{break-inside:avoid;page-break-inside:avoid;}
  }

  /* ===== ONE CARET IDIOM (CH ruling 2026-08-13) ==================================================
     Every disclosure control is a single '▾' that ROTATES 180° when open. There had been FOUR idioms
     — glyph swap ▾/▴ (the majority), rotate, ▸→▾, and a +/– pair — so one action wore four
     affordances, and two of them pointed in opposite directions when closed.
     Rotation is the one that reads as the same object moving rather than two characters swapping, and
     it is the only one that can animate. `display:inline-block` is required wherever the host is not
     already a block: transform does nothing on an inline box, so a caret would silently never move.
     ⚠ The Browser pane does not advance CSS transitions, so a working rotation reads as frozen there.
     Measure the computed transform with the transition disabled, or judge it from a real screenshot. */
  @media (prefers-reduced-motion: reduce){
    .qmore>summary::after,.rd-more>summary::after,.ov-more>summary::after,.sr-co-src>summary::after,
    .sr-flip-did > summary::after,.ans > summary::after,details.eos>summary::after,
    details.anch-card>summary::after,.cb-expand::after,.report-decoder>summary::after,
    .lead-wrote>summary::after,.sr-co-more>summary::after,.sr-do-more>summary::after{transition:none;}
  }
