/* ============================================================
   WELLTEC DESIGN LIBRARY  ·  operator console (light)
   Governance + rationale: see /WELLTEC-DESIGN.md
   1. TOKENS   2. BASE   3. COMPONENTS   4. PAGE LAYOUTS   5. STYLEGUIDE
   Built with the Impeccable references. Principles: colour is signal not
   decoration · type + hairlines do the work · money is tabular · calm
   density · warm not punitive · on-brand restraint (navy + teal + W/arrow).
   Each colour token ships a hex fallback first, then the OKLCH source of
   truth (browsers without oklch() keep the hex line).
   ============================================================ */

/* ============ 0. FONT FACE (self-hosted Onest, variable, OFL-1.1) ============ */
@font-face{
  font-family:'Onest';font-style:normal;font-weight:100 900;font-display:swap;
  src:url('/static/fonts/onest/onest-latin.woff2') format('woff2');
  unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
}
@font-face{
  font-family:'Onest';font-style:normal;font-weight:100 900;font-display:swap;
  src:url('/static/fonts/onest/onest-latin-ext.woff2') format('woff2');
  unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;
}

/* ============ 1. TOKENS ============ */
:root{
  /* — canvas & surface (warm: humanity) — */
  --paper:#F3F1ED;   --paper:oklch(96.6% 0.006 85);
  --panel:#FCFBF8;   --panel:oklch(98.6% 0.004 85);
  --sunken:#EBE9E4;  --sunken:oklch(94% 0.007 85);
  /* — ink (navy, cool: precision) — */
  --ink:#29323D;     --ink:oklch(29% 0.026 248);
  --ink-2:#57626F;   --ink-2:oklch(47% 0.022 248);
  --faint:#5E6873;   --faint:oklch(51% 0.02 248);    /* AA on paper/panel/sunken (≥4.5:1) */
  --line:#DADEE3;    --line:oklch(89% 0.009 248);
  --line-2:#E6E9EC;  --line-2:oklch(92.8% 0.007 248);
  --navy:#2A3442;    --navy:oklch(30% 0.032 248);
  --navy-deep:#202A37; --navy-deep:oklch(24% 0.032 248);
  /* — accent (single) — */
  --teal:#2191A6;       --teal:oklch(62% 0.10 218);
  --teal-deep:#15677A;  --teal-deep:oklch(47% 0.105 222);  /* AA for white text on teal (≥4.5:1) */
  --teal-bright:#74C8D8;--teal-bright:oklch(80% 0.09 210);
  --affy-green:#10B981;  /* AffyScore wordmark accent (logo only) */
  /* — status (deepened, never neon; always with a label/dot) — */
  --clear:#1F8454;   --clear:oklch(50% 0.115 156);   --clear-bg:#E7F4ED; --clear-bg:oklch(95.5% 0.03 156);
  --review:#8A6A12;  --review:oklch(52% 0.10 68);     --review-bg:#F4EEDD; --review-bg:oklch(95.5% 0.04 80);
  --review-solid:#ECA417; --review-solid:oklch(76% 0.14 80);  /* vivid marigold caution: go/no-go disc/keyline FILL + that tile's verdict word (below AA as text — ok, status is also disc+icon+keyline; WELLTEC-DESIGN §4.2/§5). General caution text stays --review. */
  --blocked:#C0443A; --blocked:oklch(53% 0.15 25);    --blocked-bg:#F7E9E5; --blocked-bg:oklch(95.5% 0.035 25);
  /* — cover register (navy case-file cover; on-dark) — */
  --cover-bg:#202A37;    --cover-bg:oklch(24% 0.032 248);
  --cover-ink:#E9EDF2;   --cover-ink:oklch(93% 0.008 248);
  --cover-ink-2:#C7D2DD; --cover-ink-2:oklch(84% 0.012 248);
  --cover-faint:#8FA0B3; --cover-faint:oklch(68% 0.022 248);
  --cover-line:rgba(255,255,255,.09);
  /* on-dark status tones — warm, never alarm-red */
  --clear-on-dark:#34D08C;   --clear-on-dark:oklch(78% 0.16 158);
  --review-on-dark:#F0C36D;  --review-on-dark:oklch(82% 0.12 80);
  --blocked-on-dark:#F08A7C; --blocked-on-dark:oklch(74% 0.13 28);

  /* — type — */
  --font-ui:'Onest',-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
  --font-mono:var(--font-ui);                 /* single family; money uses tabular-nums */
  --tnum:"tnum" 1,"lnum" 1;
  --text-display:52px; --text-title:30px; --text-head:20px; --text-section:18px; --text-body:15px; --text-small:13px; --text-cap:11px;

  /* — space (4pt) — */
  --s-1:4px; --s-2:8px; --s-3:12px; --s-4:16px; --s-5:24px; --s-6:32px; --s-7:48px; --s-8:64px;
  /* — shape (tightened off the old 14–22px bubbles) — */
  --r-xs:4px; --r-sm:6px; --r-md:8px; --r-lg:10px;
  --shadow-sm:0 1px 2px rgba(32,42,55,.05);
  /* — motion — */
  --t-fast:120ms; --t-mid:200ms; --ease:cubic-bezier(.22,1,.36,1);

  /* — legacy aliases (templates reference these inline; keep them mapped) — */
  --bg:var(--paper); --surface:var(--panel); --surface-2:var(--sunken);
  --muted:var(--ink-2); --teal-2:var(--teal-bright); --disc:var(--review);
  --grad:var(--teal);                          /* gradients removed → solid teal */
  --r-pill:var(--r-md); --r-card:var(--r-lg); --r-chip:var(--r-md);
  --shadow-card:var(--shadow-sm); --mark-arrow:var(--teal);
}

/* ============ 2. BASE ============ */
*{box-sizing:border-box}
body{font-family:var(--font-ui);background:var(--paper);color:var(--ink);margin:0;
  font-size:var(--text-body);line-height:1.55;font-kerning:normal;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}
h1{font-size:var(--text-title);font-weight:600;letter-spacing:-.6px;line-height:1.15;margin:0}
h2{font-weight:600;letter-spacing:-.2px}
h3{font-weight:600;letter-spacing:-.2px}
a{color:var(--teal-deep);text-decoration:none}
a:hover{text-decoration:underline}
.mono{font-family:var(--font-ui);font-variant-numeric:tabular-nums lining-nums;font-feature-settings:var(--tnum)}
.muted{color:var(--ink-2)}
button{font-family:inherit}
:focus-visible{outline:2px solid var(--teal);outline-offset:2px;border-radius:var(--r-xs)}
@media (prefers-reduced-motion:reduce){*{transition:none!important;animation:none!important}}

/* ============ 3. COMPONENTS ============ */

/* —— top bar + brand —— */
.topbar{position:sticky;top:0;z-index:10;background:var(--navy-deep);color:#fff;
  display:flex;align-items:center;justify-content:space-between;padding:0 var(--s-6);
  min-height:58px;flex-wrap:wrap;row-gap:var(--s-2)}
.brand{display:flex;align-items:center;gap:var(--s-3);color:#fff;font-weight:500;letter-spacing:.5px;font-size:15px}
.brand:hover{text-decoration:none}
.brand .mark,.brand svg{width:28px;height:24px;color:#fff;--mark-arrow:var(--teal-bright);flex-shrink:0}
.brand .wm{font-weight:500;letter-spacing:0} .brand .wm b{font-weight:800;color:var(--affy-green)}
.brand .sub{font-weight:500;font-size:10.5px;color:#9fb0c1;letter-spacing:.6px;text-transform:uppercase;padding-left:var(--s-3);margin-left:var(--s-1);border-left:1px solid rgba(255,255,255,.16)}
.topnav{display:flex;align-items:center;gap:var(--s-1);flex-wrap:wrap}
.topnav a,.topnav .link-button{color:#c3d0db;font-weight:500;font-size:13px;padding:7px 13px;border-radius:var(--r-sm);background:none;border:none;cursor:pointer;transition:background var(--t-fast) var(--ease),color var(--t-fast) var(--ease)}
.topnav a:hover,.topnav .link-button:hover{background:rgba(255,255,255,.09);color:#fff;text-decoration:none}
.topnav a.active{background:var(--teal-deep);color:#fff;font-weight:600}
/* build stamp — subtle, muted, every page (lets the deployed version be verified by eye) */
.app-footer{text-align:center;color:var(--muted);font-size:11px;letter-spacing:.4px;padding:var(--s-5) 0}
/* responsive chrome: no horizontal overflow on small screens */
@media (max-width:720px){
  .topbar{padding:var(--s-2) var(--s-4)}
  .brand .sub{display:none}
}
/* comfortable touch targets on touch devices (keeps desktop mouse density) */
@media (pointer:coarse){
  .topnav a,.topnav .link-button,.btn,.btn-ghost,.btn-secondary,.tx-toggle button,.drill summary,.exports a{
    min-height:44px;display:inline-flex;align-items:center;justify-content:center}
}

/* —— buttons (hierarchy: primary / secondary / ghost) —— */
.btn{background:var(--teal-deep);color:#fff;font-weight:600;padding:10px 18px;border-radius:var(--r-md);
  text-decoration:none;font-size:13px;border:none;cursor:pointer;display:inline-block;transition:filter var(--t-fast) var(--ease)}
.btn:hover{text-decoration:none;filter:brightness(.92)}
.btn-secondary{padding:9px 15px;background:var(--panel);color:var(--ink);border:1px solid var(--line);
  border-radius:var(--r-md);cursor:pointer;font-weight:600;font-size:13px;transition:border-color var(--t-fast) var(--ease)}
.btn-secondary:hover{border-color:var(--teal)}
.btn-ghost{border:1px solid var(--line);background:var(--panel);color:var(--ink-2);padding:8px 13px;
  border-radius:var(--r-md);text-decoration:none;font-size:12.5px;font-weight:600;display:inline-flex;align-items:center;gap:6px;transition:border-color var(--t-fast) var(--ease),color var(--t-fast) var(--ease)}
.btn-ghost:hover{border-color:var(--teal);color:var(--teal-deep);text-decoration:none}

/* —— card / panel (flat; hairline, not shadow-floated) —— */
.card{background:var(--panel);border:1px solid var(--line);border-radius:var(--r-lg);padding:var(--s-5) var(--s-5);margin-bottom:var(--s-4)}
/* section header — sentence-case heading; type weight + the card's hairline carry the
   hierarchy. No decorative accent bar (the teal ::before tick was a generic colored-pipe
   accent, redundant with the card boundary, and spent teal on decoration not signal).
   Section HEADINGS = sentence case @ --text-section; micro-LABELS = uppercase @ --text-cap.
   Governance: WELLTEC-DESIGN.md §4.1 + §5 + §8. */
.card h2{display:flex;align-items:center;gap:10px;margin:0 0 var(--s-3);
  font-size:var(--text-section);font-weight:700;letter-spacing:-.2px;line-height:1.25;color:var(--ink)}
.card .hint{color:var(--faint);font-size:12.5px;margin:0 0 var(--s-4)}
.grid2{display:grid;grid-template-columns:1fr 1fr;gap:var(--s-4)}
.grid2 .card{margin-bottom:0}
.empty{color:var(--faint);font-size:13px;padding:var(--s-2) 0}
@media (max-width:760px){.grid2{grid-template-columns:1fr}}

/* —— triage (eligibility verdict): left keyline + label + dot, flat —— */
.triage{display:flex;align-items:center;gap:var(--s-5);border-radius:var(--r-lg);padding:var(--s-5) var(--s-5);
  margin-bottom:var(--s-4);border:1px solid var(--line);border-left:4px solid var(--line);background:var(--panel)}
/* verdict card carries a faint wash of its state colour (signal + warmth) */
.triage.clear{border-left-color:var(--clear);background:color-mix(in oklch,var(--clear) 5%,var(--panel))}
.triage.review{border-left-color:var(--review);background:color-mix(in oklch,var(--review) 6%,var(--panel))}
.triage.blocked{border-left-color:var(--blocked);background:color-mix(in oklch,var(--blocked) 6%,var(--panel))}
.triage .chip{display:inline-flex;align-items:center;gap:7px;font-weight:700;font-size:11px;letter-spacing:.8px;
  text-transform:uppercase;flex-shrink:0}
.triage .chip:before{content:"";width:8px;height:8px;border-radius:50%;background:currentColor}
.triage.clear .chip{color:var(--clear)} .triage.review .chip{color:var(--review)} .triage.blocked .chip{color:var(--blocked)}
.triage .tx h3{margin:0 0 3px;font-size:20px;font-weight:700;letter-spacing:-.3px}
.triage .tx p{margin:0;color:var(--ink-2);font-size:13px}
.triage .tx ul{margin:var(--s-2) 0 0;padding-left:18px;color:var(--blocked);font-size:13px}

/* —— fraud advisory: prominent keyline, not a heavy slab —— */
.fraud-advisory{display:flex;align-items:flex-start;gap:var(--s-3);background:var(--blocked-bg);
  border:1px solid var(--blocked);border-left:3px solid var(--blocked);border-radius:var(--r-lg);
  padding:var(--s-4) var(--s-5);margin-bottom:var(--s-4)}
.fraud-advisory svg{width:22px;height:22px;flex-shrink:0;stroke:var(--blocked);fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;margin-top:1px}
.fraud-advisory strong{display:block;color:var(--blocked);font-size:14px;font-weight:700;letter-spacing:.1px}
.fraud-advisory p{margin:3px 0 0;color:var(--ink);font-size:12.5px}

/* —— score withheld —— */
.withheld{display:flex;gap:var(--s-4);align-items:flex-start;background:var(--sunken);
  border:1px solid var(--line);border-radius:var(--r-lg);padding:var(--s-5);margin-bottom:var(--s-4)}
.withheld .ico{flex-shrink:0;color:var(--review);font-size:22px;line-height:1.2}  /* a halt, not a red-risk tile */
.withheld h3{margin:0 0 3px;font-size:15px;font-weight:600} .withheld p{margin:0;color:var(--ink-2);font-size:13px;max-width:760px}

/* —— score: circular gauge ring + family bars (two-column) —— */
.scorezone{display:grid;grid-template-columns:196px 1fr;gap:var(--s-6);align-items:center}
.scorezone.solo{grid-template-columns:1fr;justify-items:center}
@media (max-width:680px){.scorezone{grid-template-columns:1fr;justify-items:start;gap:var(--s-5)}}
.gauge{position:relative;width:184px;height:184px;margin:0 auto}
.gauge svg{width:184px;height:184px;display:block}
.gauge .val{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center}
.gauge .val .num{font-size:48px;font-weight:700;letter-spacing:-2px;line-height:1;
  font-variant-numeric:tabular-nums lining-nums;font-feature-settings:var(--tnum)}
.gauge .val .of{font-size:11px;color:var(--faint);font-weight:500;margin-top:4px}
.gauge .val .band{margin-top:8px;font-size:10.5px;font-weight:700;text-transform:uppercase;letter-spacing:.8px;color:var(--ink-2)}  /* health colour set inline from the score; --ink-2 is the no-JS/withheld fallback */

/* score family bars */
.bars{display:flex;flex-direction:column;gap:var(--s-4);margin-top:var(--s-5)}
.bar .top{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:6px}
.bar .lbl{font-weight:500;font-size:13.5px}
.bar .num{font-size:12.5px;color:var(--ink-2);font-weight:500;font-variant-numeric:tabular-nums lining-nums}
.bar .track{height:7px;background:var(--line-2);border-radius:4px;overflow:hidden}
.bar .fill{height:100%;border-radius:4px;background:var(--teal)}
.bar .moves{font-size:12px;color:var(--faint);margin-top:5px}
/* —— score-driver drill-down: contextual per-dimension sub-bars (uniform; fill = earned / own max) —— */
.bar .drvtoggle{margin-top:8px;background:none;border:none;padding:0;cursor:pointer;font:inherit;
  font-size:11.5px;font-weight:600;color:var(--teal-deep);display:inline-flex;align-items:center;gap:6px}
.bar .drvtoggle:hover{text-decoration:underline}
.bar .drvtoggle .chev{display:inline-block;transition:transform var(--t-mid) var(--ease)}
.bar .drvtoggle[aria-expanded=true] .chev{transform:rotate(90deg)}
.drvwrap{display:grid;grid-template-rows:0fr;transition:grid-template-rows var(--t-mid) var(--ease)}
.drvwrap.open{grid-template-rows:1fr}
.drvinner{overflow:hidden}
.drow{display:grid;grid-template-columns:1fr 34px;gap:3px 10px;align-items:center;margin-top:11px}
.drow .dlabel{grid-column:1;font-size:11.5px;line-height:1.3}
.drow .dlabel b{font-weight:600;color:var(--ink)} .drow .dlabel span{color:var(--faint)}
.drow .dbar{grid-column:1;height:7px;background:var(--line);border-radius:3px;overflow:hidden}
.drow .dbar i{display:block;height:100%;background:var(--teal);border-radius:3px}
.drow .dpts{grid-column:2;grid-row:1 / span 2;align-self:center;text-align:right;font-size:10.5px;font-weight:700;color:var(--ink-2);font-variant-numeric:tabular-nums lining-nums}
.drow .dpts .ok{color:var(--clear)}
.drow.na{opacity:.55}
.context{margin-top:var(--s-5);padding-top:var(--s-4);border-top:1px solid var(--line-2)}
.context p{margin:0 0 var(--s-2);font-size:13.5px}
.context .caveats{margin:var(--s-2) 0 0;padding-left:18px;color:var(--ink-2);font-size:12.5px}
.context .caveats li{margin:3px 0}
/* —— go / no-go findings: three inflection-point tiles (evidence, not verdicts) —— */
.gng{margin-top:var(--s-5);padding-top:var(--s-4);border-top:1px solid var(--line-2);display:flex;flex-direction:column;gap:9px}
.gng .gng-h{margin:0 0 2px;font-size:var(--text-cap);font-weight:700;text-transform:uppercase;letter-spacing:.6px;color:var(--faint)}
.gng .t{display:flex;align-items:center;gap:13px;padding:11px 14px;border:1px solid var(--line);border-left:4px solid var(--g-fill);border-radius:var(--r-md)}
.gng .t .ic{width:25px;height:25px;border-radius:50%;background:var(--g-fill);color:var(--g-glyph);display:flex;align-items:center;justify-content:center;font-size:13px;font-weight:800;flex-shrink:0}
.gng .t .body{flex:1;min-width:0}
.gng .t .body b{display:block;font-weight:600;font-size:13px}
.gng .t .body span{font-size:11.5px;color:var(--ink-2)}
.gng .t .vw{color:var(--g-text);font-weight:700;font-size:11.5px;text-transform:uppercase;letter-spacing:.4px;white-space:nowrap}
/* status drives three vars: fill (vivid), text, and the disc glyph */
.gng .clear{--g-fill:var(--clear);--g-text:var(--clear);--g-glyph:#fff}
.gng .review{--g-fill:var(--review-solid);--g-text:var(--review-solid);--g-glyph:var(--ink)}
.gng .blocked{--g-fill:var(--blocked);--g-text:var(--blocked);--g-glyph:#fff}
.gng .gng-note{margin:var(--s-2) 0 0;font-size:11px;color:var(--faint);line-height:1.5}

/* —— unified verdict object: band + 2×2 driver grid, above the score (verdict_card.html) —— */
.verdict-card{--vstate:var(--ink-2);--vwash:var(--sunken);padding:0;overflow:hidden}
.verdict-card.is-clear{--vstate:var(--clear);--vwash:var(--clear-bg)}
.verdict-card.is-caution{--vstate:var(--review);--vwash:var(--review-bg)}
.verdict-card.is-nogo{--vstate:var(--blocked);--vwash:var(--blocked-bg)}
.verdict-card .vb{position:relative;display:flex;gap:var(--s-4);align-items:flex-start;padding:var(--s-5) var(--s-5) var(--s-5) calc(var(--s-5) + 5px);background:var(--vwash);border-bottom:1px solid var(--line)}
.verdict-card .vb:before{content:"";position:absolute;left:0;top:0;bottom:0;width:5px;background:var(--vstate)}
.verdict-card .vb-disc{flex:none;width:48px;height:48px;border-radius:50%;background:var(--vstate);color:#fff;display:flex;align-items:center;justify-content:center;font-size:23px;font-weight:800;line-height:1;margin-top:2px}
.verdict-card.is-caution .vb-disc{background:var(--review-solid);color:var(--ink)}
.verdict-card .vb-chip{display:inline-flex;align-items:center;gap:7px;font-size:11px;font-weight:800;letter-spacing:.9px;text-transform:uppercase;color:var(--vstate);margin-bottom:6px}
.verdict-card.is-caution .vb-chip{color:var(--review)}
.verdict-card .vb-chip:before{content:"";width:8px;height:8px;border-radius:50%;background:currentColor}
.verdict-card .vb-word{font-size:29px;font-weight:800;letter-spacing:-.8px;line-height:1.05;margin:0;color:var(--ink)}
.verdict-card .vb-driven{margin:8px 0 0;font-size:13px;color:var(--ink-2);line-height:1.45;max-width:50ch}
.verdict-card .vb-driven b{color:var(--ink);font-weight:700}
.verdict-card .gng{margin-top:0;padding:var(--s-5);border-top:none}
.verdict-card .gng.grid2x2{display:grid;grid-template-columns:1fr 1fr;gap:var(--s-3)}
.verdict-card .gng.grid2x2 .gng-h{grid-column:1 / -1}
.verdict-card .gng .t{align-items:flex-start}
.verdict-card .gng .t .body .sub{display:block;font-size:11px;color:var(--faint);line-height:1.4;margin-top:2px}
.verdict-card .gng .t.is-headline{background:color-mix(in oklch,var(--g-fill) 8%,var(--panel))}
.verdict-card .gng .t.is-headline .body b:after{content:" ▲";font-size:8px;color:var(--g-text);vertical-align:1px}
@media (max-width:560px){.verdict-card .gng.grid2x2{grid-template-columns:1fr}.verdict-card .vb-word{font-size:24px}}

/* —— lender disputes: 7th verdict tile (full-width) + detail block —— */
/* full-width t-new tile (lender_disputes key) — spans the 2-col grid */
.verdict-card .gng .t.t-new{grid-column:1 / -1;background:color-mix(in oklch,var(--review-solid) 9%,var(--panel));
  border-color:color-mix(in oklch,var(--review-solid) 30%,var(--line))}
/* grouped detail rows inside the lender_disputes card */
.grp{border:1px solid var(--line);border-radius:var(--r-md);margin-bottom:var(--s-3);overflow:hidden}
.grp.flag{border-left:4px solid var(--review-solid)}
.grp.info{border-left:4px solid var(--line)}
.grp-h{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:11px 14px;background:var(--sunken)}
.grp-h .gt{font-size:13px;font-weight:700}
.grp.flag .grp-h{background:color-mix(in oklch,var(--review-solid) 10%,var(--panel))}
.grp-sum{padding:10px 14px;font-size:12.5px;color:var(--ink-2);border-bottom:1px solid var(--line-2)}
.grp-sum b{color:var(--ink)}
/* scoped table — .tbl to avoid colliding with the global bare table rules */
table.tbl{width:100%;border-collapse:collapse;font-size:12.5px}
table.tbl th{text-align:left;font-size:10.5px;text-transform:uppercase;letter-spacing:.4px;color:var(--faint);
  font-weight:700;padding:7px 14px;border-bottom:1px solid var(--line-2)}
table.tbl td{padding:8px 14px;border-bottom:1px solid var(--line-2);color:var(--ink-2)}
table.tbl tr:last-child td{border-bottom:none}
table.tbl td.lender{color:var(--ink);font-weight:600}
/* inline context pills */
.pill{display:inline-block;font-size:10px;font-weight:700;padding:1px 7px;border-radius:999px}
.pill.loan{background:var(--blocked-bg);color:var(--blocked)}
.pill.unrec{background:var(--sunken);color:var(--faint)}
/* badge.info — neutral/context register (complements existing .badge.review/.badge.blocked) */
.badge.info{font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.5px;color:var(--faint);
  display:inline-flex;align-items:center;gap:6px}
.badge.info:before{content:"";width:7px;height:7px;border-radius:50%;background:currentColor;flex-shrink:0}

/* debit-order timing: recommendation strip (framing C) + cash-flow graph */
.verdict-card .gng .timing-callout{grid-column:1 / -1;display:flex;gap:13px;align-items:flex-start;
  padding:13px 15px;margin-top:2px;border-radius:var(--r-md);
  background:color-mix(in oklch,var(--teal) 9%,var(--panel));border:1px solid color-mix(in oklch,var(--teal) 30%,var(--line))}
.timing-callout .tc-ic{width:27px;height:27px;border-radius:50%;background:var(--teal);color:#fff;
  display:flex;align-items:center;justify-content:center;font-size:15px;flex-shrink:0}
.timing-callout .tc-body b{display:block;font-size:13px;color:var(--ink);font-weight:700}
.timing-callout .tc-body span{font-size:11.5px;color:var(--ink-2);line-height:1.45}
/* tentative (caution-confidence) recommendation: marigold, not confident teal */
.verdict-card .gng .timing-callout.is-tentative{background:color-mix(in oklch,var(--review-solid) 11%,var(--panel));border-color:color-mix(in oklch,var(--review-solid) 34%,var(--line))}
.timing-callout.is-tentative .tc-ic{background:var(--review-solid);color:var(--ink)}
.cashflow-card .cf-meta{display:flex;gap:var(--s-5);flex-wrap:wrap;margin:0 0 var(--s-4);font-size:12px;color:var(--ink-2)}
.cashflow-card .cf-meta b{color:var(--ink);font-weight:700;font-variant-numeric:tabular-nums}
/* interactive cash-flow graph */
.cashflow-card .cf-wrap{position:relative}
.cashflow-svg{width:100%;height:auto;display:block;font-family:var(--font-ui)}
.cashflow-svg .cf-grid{stroke:var(--line-2);stroke-width:1}
.cashflow-svg .cf-zero{stroke:var(--line);stroke-width:1.4}
.cashflow-svg .cf-ylab,.cashflow-svg .cf-xlab{fill:var(--faint);font-size:10.5px;font-variant-numeric:tabular-nums}
.cashflow-svg .cf-area{fill:color-mix(in oklch,var(--teal) 13%,transparent);stroke:none}
.cashflow-svg .cf-line{fill:none;stroke:var(--teal);stroke-width:2;stroke-linejoin:round;stroke-linecap:round}
.cashflow-svg .cf-floor{stroke:var(--blocked);stroke-width:1.2;stroke-dasharray:4 4;opacity:.75}
.cashflow-svg .cf-floorlab{fill:var(--blocked);font-size:9.5px;opacity:.85}
.cashflow-svg .cf-window{fill:color-mix(in oklch,var(--clear) 12%,transparent)}
.cashflow-svg .cf-window-lab{fill:var(--clear);font-size:10px;font-weight:700}
.cashflow-svg .lm{cursor:pointer}
.cashflow-svg .lm circle{stroke:var(--panel);stroke-width:2}
.cashflow-svg .lm-salary circle{fill:var(--clear)}
.cashflow-svg .lm-bounced circle{fill:var(--blocked)}
.cashflow-svg .lm text{fill:#fff;font-size:11px;font-weight:800;text-anchor:middle}
.cashflow-svg .lm:focus-visible{outline:none}
.cashflow-svg .lm:focus-visible circle{stroke:var(--teal);stroke-width:2.5}
.cashflow-svg .cf-cross{stroke:var(--ink-2);stroke-width:1;stroke-dasharray:3 3;opacity:0}
.cashflow-svg .cf-dot{fill:var(--teal-deep);stroke:#fff;stroke-width:2;opacity:0}
.cashflow-svg .cf-hit{fill:transparent}
.cashflow-card .cf-tip{position:absolute;pointer-events:none;transform:translate(-50%,calc(-100% - 12px));
  background:var(--navy-deep);color:#fff;border-radius:var(--r-md);padding:7px 11px;font-size:11.5px;line-height:1.4;
  white-space:nowrap;box-shadow:0 6px 20px -6px rgba(32,42,55,.45);z-index:5}
.cashflow-card .cf-tip[hidden]{display:none}
.cashflow-card .cf-tip b{display:block;font-weight:700;font-size:14px;font-variant-numeric:tabular-nums}
.cashflow-card .cf-tip b,.cashflow-card .cf-tip .tip-lm{text-transform:none}
.cashflow-card .cf-tip .tip-date{display:block;color:#acc4d6;font-size:10px;letter-spacing:.3px;text-transform:uppercase}
.cashflow-card .cf-tip .tip-lm{display:block;margin-top:2px;font-weight:600}
.cashflow-card .cf-tip .tip-lm.salary{color:#7ddca6}
.cashflow-card .cf-tip .tip-lm.bounce{color:#f3a39a}
.cashflow-card .cf-legend{display:flex;gap:18px;flex-wrap:wrap;margin-top:13px;font-size:11.5px;color:var(--ink-2)}
.cashflow-card .cf-legend span{display:inline-flex;align-items:center;gap:6px}
.cashflow-card .cf-legend i{width:11px;height:11px;border-radius:50%;display:inline-block}
.cashflow-card .cf-legend .dot-salary{background:var(--clear)}
.cashflow-card .cf-legend .dot-bounce{background:var(--blocked)}
.cashflow-card .cf-legend .dot-win{background:color-mix(in oklch,var(--clear) 35%,transparent);border-radius:2px}
.cashflow-card .cf-legend .dot-floor{width:14px;height:0;border-top:2px dashed var(--blocked);border-radius:0}

/* —— reason codes: numbered, dignified —— */
.reasons{list-style:none;margin:0;padding:0;counter-reset:rc}
.reasons li{display:flex;gap:var(--s-3);padding:var(--s-3) 0;border-bottom:1px solid var(--line-2)}
.reasons li:last-child{border-bottom:none}
.reasons .dot{counter-increment:rc;flex-shrink:0;width:auto;height:auto;border-radius:0;margin:0;background:none}
.reasons .dot:before{content:counter(rc,decimal-leading-zero);font-size:11px;font-weight:700;color:var(--teal-deep);font-variant-numeric:tabular-nums}
.reasons .st{font-weight:600;font-size:13.5px}
.reasons .ex{color:var(--ink-2);font-size:12.5px;margin-top:2px}

/* —— affordability ledger: flat rows, tabular figures —— */
.aff-row{display:flex;justify-content:space-between;align-items:baseline;padding:10px 0;border-bottom:1px solid var(--line-2)}
.aff-row:last-of-type{border-bottom:none}
.aff-row .k{color:var(--ink-2);font-size:13px}
.aff-row .v{font-variant-numeric:tabular-nums lining-nums;font-feature-settings:var(--tnum);font-weight:600;font-size:15px}
.aff-row.hero .v{color:var(--clear);font-size:17px;font-weight:600}
.aff-row.hero .v.neg{color:var(--blocked)}
.basis{font-size:11.5px;color:var(--faint);margin:var(--s-3) 0 0;padding:10px 12px;background:var(--sunken);
  border-radius:var(--r-sm)}  /* inset by background, not a decorative teal pipe */

/* —— tables —— */
table{width:100%;border-collapse:collapse}
th{text-align:left;font-size:11.5px;text-transform:uppercase;letter-spacing:.6px;color:var(--ink-2);
  font-weight:700;padding:0 12px 10px;border-bottom:1px solid var(--line)}
td{padding:11px 12px;border-bottom:1px solid var(--line-2);font-size:13px}
tr:last-child td{border-bottom:none}
.num-c{text-align:right;font-variant-numeric:tabular-nums lining-nums;font-feature-settings:var(--tnum)}
/* category / trait micro-labels — borderless, no pill fill (status is never a filled chip) */
.tag{display:inline-block;font-size:11px;font-weight:600;color:var(--ink-2)}
.tag.disc{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.4px;color:var(--faint)}
/* —— confidence meter: data-quality in the neutral (ink) register, NOT a status colour —— */
.cmeter{display:inline-flex;align-items:center;gap:3px;margin-left:9px;vertical-align:1px}
.cmeter i{width:6px;height:6px;border-radius:50%;background:var(--line);flex-shrink:0}
.cmeter i.on{background:var(--ink-2)}
.cmeter .clab{font-size:var(--text-cap);color:var(--faint);margin-left:7px;letter-spacing:.2px}
.income-src{margin-top:var(--s-4)}
/* .chip base — still used by styleguide.html + report.html (dot+word replaced the pastel verification chips on the web results) */
.chip{display:inline-block;padding:.1rem .5rem;border-radius:var(--r-chip,999px);font-size:.78rem;font-weight:600}
.results-page:not(.print-page) .grid2{margin-bottom:var(--s-4)}  /* web results only — keep print/PDF rhythm unchanged */
.pill-prod{font-weight:600;color:var(--teal-deep)}
.debit{color:var(--blocked)} .credit{color:var(--clear)}
.salary{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.4px;color:var(--clear);margin-left:8px;display:inline-flex;align-items:center;gap:5px}
.salary:before{content:"";width:6px;height:6px;border-radius:50%;background:currentColor;flex-shrink:0}

/* —— bucket summary —— */
.bucket-h{display:flex;align-items:center;gap:var(--s-2);font-weight:700;font-size:11px;text-transform:uppercase;
  letter-spacing:.5px;color:var(--ink-2);padding:var(--s-4) 12px var(--s-2)}
.bucket-h.inc{color:var(--clear)}
/* category colour dot — ties table rows to the donut palette (wayfinding) */
.catdot{display:inline-block;width:8px;height:8px;border-radius:2px;margin-right:9px;vertical-align:0;flex-shrink:0}
.totbar{display:flex;flex-wrap:wrap;margin-top:var(--s-4);border:1px solid var(--line);border-radius:var(--r-md);overflow:hidden}
.totbar div{flex:1 1 120px;padding:12px 15px;border-right:1px solid var(--line-2)}
.totbar div:last-child{border-right:none}
@media (max-width:520px){.totbar div{flex-basis:50%;border-bottom:1px solid var(--line-2)}}
.totbar .k{font-size:10px;text-transform:uppercase;letter-spacing:.5px;color:var(--faint);font-weight:700}
.totbar .v{font-variant-numeric:tabular-nums lining-nums;font-feature-settings:var(--tnum);font-size:16px;font-weight:600;margin-top:3px}
.totbar .v.net{color:var(--clear)} .totbar .v.net.neg{color:var(--blocked)} .totbar .v.disc{color:var(--review)}
.drill{margin-top:var(--s-4);overflow-x:auto}
.drill summary{cursor:pointer;font-size:12.5px;font-weight:600;color:var(--teal-deep);list-style:none;
  display:inline-flex;align-items:center;gap:6px;padding:8px 13px;border:1px solid var(--line);border-radius:var(--r-md)}
.drill summary:hover{border-color:var(--teal)}
.drill summary::-webkit-details-marker{display:none}

/* —— tx chart toggle + donut (real data-viz: kept) —— */
.tx-toggle{display:inline-flex;border:1px solid var(--line);border-radius:var(--r-md);overflow:hidden}
.tx-toggle button{border:none;background:var(--panel);font-family:inherit;font-size:12px;font-weight:600;padding:7px 15px;cursor:pointer;color:var(--ink-2);transition:background var(--t-fast) var(--ease),color var(--t-fast) var(--ease)}
.tx-toggle button.on{background:var(--teal-deep);color:#fff}
.chartwrap{display:grid;grid-template-columns:280px 1fr;gap:var(--s-6);align-items:center;margin-top:var(--s-2)}
@media (max-width:720px){.chartwrap{grid-template-columns:1fr}}
.donut-svg{display:block;margin:0 auto}
.seg{fill:none;stroke-width:26;cursor:pointer;transition:stroke-width var(--t-fast) var(--ease),opacity var(--t-fast) var(--ease)}
.donut-c.dim .seg{opacity:.3}.donut-c.dim .seg.hot{opacity:1;stroke-width:30}
.hole-lbl{font-size:10px;text-transform:uppercase;letter-spacing:.6px;fill:var(--faint);font-weight:700}
.hole-amt{font-variant-numeric:tabular-nums lining-nums;font-size:22px;font-weight:700}.hole-pct{font-size:11px;fill:var(--ink-2)}
.donut-legend{display:grid;grid-template-columns:1fr 1fr;gap:6px var(--s-5)}
.dleg{display:flex;align-items:center;gap:9px;font-size:12.5px;padding:5px 0;border-bottom:1px solid var(--line-2)}
.dleg.hot{background:var(--sunken)}.dleg .sw{width:11px;height:11px;border-radius:3px;flex-shrink:0}
.dleg .nm{flex:1}.dleg .amt{font-variant-numeric:tabular-nums lining-nums;font-weight:600}
.dleg .disc-tag{font-size:9px;font-weight:700;color:var(--faint);text-transform:uppercase;letter-spacing:.3px}
.donut-cap{font-size:11.5px;color:var(--faint);margin-top:var(--s-4)}

/* —— cross-sell product cards (quiet; no pulse) —— */
.prodgrid{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--s-4)}  /* 3-up: each product ~1/3 width (ATL-103) */
@media (max-width:860px){.prodgrid{grid-template-columns:repeat(2,1fr)}}
@media (max-width:560px){.prodgrid{grid-template-columns:1fr}}
.prod{border:1px solid var(--line);border-radius:var(--r-lg);padding:var(--s-5);display:flex;flex-direction:column;gap:var(--s-3);background:var(--panel);position:relative}
.prod h3{margin:0;font-size:15px;font-weight:600}  /* product name leads the card — no icon-in-a-tile */
.prod .pdesc{font-size:12.5px;color:var(--ink-2);flex:1;line-height:1.5}
.prod .pev{font-size:11.5px;color:var(--faint);border-top:1px solid var(--line-2);padding-top:var(--s-3)}
.prod .pev b{color:var(--ink);font-weight:600}
.prod.insurance{border-color:var(--teal)}  /* teal keyline = the active/brand signal; no coloured icon tile */
/* next-best-action marker — quiet teal-deep eyebrow link, no green splash, no glyph */
.nba-splash{position:absolute;top:var(--s-5);right:var(--s-5);background:none;border:none;cursor:pointer;padding:0;
  font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.5px;color:var(--teal-deep)}
.nba-splash:hover{text-decoration:underline}
.nba{border-top:1px solid var(--line-2);padding-top:var(--s-3);margin-top:2px}
.nba-why{font-size:11.5px;color:var(--ink-2);margin:0 0 var(--s-3)}
.wa-btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;background:#1FA855;color:#fff;
  font-weight:600;font-size:12.5px;padding:10px 14px;border-radius:var(--r-md);text-decoration:none;width:100%}
.wa-btn:hover{filter:brightness(.96);text-decoration:none}
.wa-btn svg{width:15px;height:15px;fill:#fff}
.wa-preview{margin-top:var(--s-3);background:var(--clear-bg);border:1px solid var(--line);border-radius:var(--r-md);padding:10px 12px;font-size:11.5px;color:var(--ink)}
.wa-preview .lbl{font-size:9.5px;text-transform:uppercase;letter-spacing:.5px;color:var(--clear);font-weight:700;margin-bottom:4px}

/* —— wellness referral (a signal, not a sale): dashed teal —— */
.wellness-ref{margin-top:var(--s-4);border:1px dashed var(--teal);background:var(--sunken);border-radius:var(--r-lg);padding:var(--s-4) var(--s-5)}
.wellness-ref .wr-head{display:flex;align-items:center;gap:9px;font-weight:700;color:var(--teal-deep);font-size:12px;letter-spacing:.4px;text-transform:uppercase}
.wellness-ref .wr-head svg{width:18px;height:18px;stroke:var(--teal-deep);fill:none;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.wellness-ref .wr-note{margin:9px 0 10px;font-size:12.5px;color:var(--ink-2)}
.wellness-ref .wr-item{font-size:12.5px;color:var(--ink);padding:var(--s-2) 0 0;border-top:1px solid var(--line-2)}
.wellness-ref .wr-item b{display:block;font-weight:600;margin-bottom:1px}
.wellness-ref .wr-item span{color:var(--ink-2)}

/* —— fraud panel —— */
/* status verdict — dot + uppercase label in the status colour, NO fill (status is never a filled pill) */
.verdict{display:inline-flex;align-items:center;gap:7px;font-weight:700;font-size:11px;letter-spacing:.5px;
  text-transform:uppercase;color:var(--ink-2)}
.verdict:before{content:"";width:7px;height:7px;border-radius:50%;background:currentColor;flex-shrink:0}
.verdict.clear{color:var(--clear)}
.verdict.review{color:var(--review)}
.verdict.flagged{color:var(--blocked)}
.docrow{display:flex;align-items:center;gap:var(--s-3);padding:10px 13px;background:var(--sunken);border-radius:var(--r-md);margin-bottom:var(--s-3);font-size:13px}
.docrow .fn{font-weight:600} .docrow .dt{color:var(--faint);font-size:11.5px}
.checks{display:grid;grid-template-columns:1fr 1fr;gap:var(--s-2) var(--s-5)}
@media (max-width:640px){.checks{grid-template-columns:1fr}}
.chk{display:flex;align-items:center;gap:10px;padding:9px 0;border-bottom:1px solid var(--line-2);font-size:12.5px}
.chk .ico{flex-shrink:0;width:19px;height:19px;border-radius:var(--r-xs);display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:800}
.chk.pass .ico{background:var(--clear-bg);color:var(--clear)}
.chk.fail .ico{background:var(--blocked-bg);color:var(--blocked)}
.chk.na .ico{background:var(--line-2);color:var(--faint)} .chk.na{color:var(--faint)}
.chk .nm{font-weight:500}
.chk .na-lbl{margin-left:auto;font-size:10px;text-transform:uppercase;letter-spacing:.4px;color:var(--faint)}
.chk .killer{margin-left:auto;font-size:10px;font-weight:700;color:var(--blocked);text-transform:uppercase;letter-spacing:.4px}

/* —— dashboard badges + stripe —— */
/* dashboard status — two registers, no pills: lifecycle = quiet muted text; risk = dot + status-colour label */
.badge{font-size:12.5px;font-weight:500;color:var(--ink-2);display:inline-flex;align-items:center;gap:6px;text-transform:capitalize}
.badge.clear,.badge.review,.badge.blocked{font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.5px}
.badge.clear:before,.badge.review:before,.badge.blocked:before{content:"";width:7px;height:7px;border-radius:50%;background:currentColor;flex-shrink:0}
.badge.clear{color:var(--clear)} .badge.review{color:var(--review)} .badge.blocked{color:var(--blocked)}
.stripe{width:3px;padding:0!important}
.stripe.clear{background:var(--clear)} .stripe.review{background:var(--review)} .stripe.blocked{background:var(--blocked)}

/* —— login —— */
.login-stage{min-height:calc(100vh - 58px);background:var(--navy-deep);display:flex;align-items:center;justify-content:center;padding:var(--s-7) var(--s-6)}
.login-card{background:var(--panel);border-radius:var(--r-lg);padding:var(--s-6);max-width:380px;width:100%;box-shadow:0 20px 60px rgba(20,28,38,.35)}
.login-card .brand{color:var(--ink);margin-bottom:var(--s-5)}
.login-card .brand .mark,.login-card .brand svg{color:var(--navy);--mark-arrow:var(--teal)}
.login-card h1{font-size:18px;font-weight:600;margin:0 0 6px}
.login-card .sub{color:var(--ink-2);font-size:13px;margin:0 0 var(--s-5)}
.login-card input{width:100%;padding:12px 14px;border:1px solid var(--line);border-radius:var(--r-md);font-size:15px;font-family:inherit;margin-bottom:var(--s-3);background:var(--paper)}
.login-card input:focus{outline:none;border-color:var(--teal)}
.login-card .btn{display:block;width:100%;text-align:center;padding:12px}
.login-card .error{color:var(--blocked);font-size:13px;margin:10px 0 0}

/* —— forms —— */
.form-grid{display:flex;flex-direction:column;gap:var(--s-4);background:var(--panel);border:1px solid var(--line);border-radius:var(--r-lg);padding:var(--s-5);max-width:560px}
.form-grid label{display:flex;flex-direction:column;gap:5px;font-size:13px;font-weight:600;color:var(--ink)}
.form-grid input{padding:11px 13px;border:1px solid var(--line);border-radius:var(--r-md);font-size:15px;font-family:inherit;background:var(--paper)}
.form-grid input:focus{outline:none;border-color:var(--teal)}
.dist-options{display:grid;grid-template-columns:1fr 1fr 1fr;gap:var(--s-4);margin-top:var(--s-5)}
@media (max-width:760px){.dist-options{grid-template-columns:1fr}}
.dist-card{background:var(--panel);border:1px solid var(--line);border-radius:var(--r-lg);padding:var(--s-5)}
.dist-card h3{margin:0 0 var(--s-4);font-size:14px;font-weight:600}
.portal-link{width:100%;padding:9px;background:var(--sunken);border:1px solid var(--line);border-radius:var(--r-sm);font-size:12px;font-variant-numeric:tabular-nums;box-sizing:border-box;margin-bottom:var(--s-2);font-family:inherit}
.upload-form{background:var(--panel);border:1px solid var(--line);border-radius:var(--r-lg);padding:var(--s-5)}
.upload-form input[type=file]{display:block;margin-bottom:var(--s-4)}
.error-panel{padding:13px 15px;background:var(--blocked-bg);border-left:3px solid var(--blocked);border-radius:var(--r-md);margin-bottom:var(--s-5);font-size:13px}
/* —— upload dropzone: progressive enhancement over the native file input —— */
/* No JS: .dz-cue stays hidden and the native .dz-input shows (working fallback). */
/* JS adds .is-enhanced: visually clip the raw input (kept focusable + in the
   a11y tree so `required` validation still works — NOT display:none, which makes
   Chrome refuse to submit an empty required field with no visible message), and
   reveal the styled drop target. */
.dz-cue{display:none}
.dropzone.is-enhanced{position:relative}
.dropzone.is-enhanced .dz-input{
  position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;
  clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;border:0;
}
.dropzone.is-enhanced .dz-cue{
  display:flex;flex-direction:column;align-items:center;gap:var(--s-3);
  padding:var(--s-6) var(--s-5);text-align:center;cursor:pointer;
  border:1.5px dashed var(--line-2);border-radius:var(--r-lg);background:var(--paper);
  transition:border-color var(--t-fast) var(--ease),background var(--t-fast) var(--ease);
}
.dropzone.is-enhanced .dz-cue:hover{border-color:var(--faint)}
/* keyboard focus (clipped input or Choose-files button) gets a visible cue */
.dropzone.is-enhanced:focus-within .dz-cue{border-style:solid;border-color:var(--teal)}
/* dragover cue: NOT colour alone — border goes dashed→solid AND the label text swaps */
.dropzone.is-enhanced.is-dragover .dz-cue{border-style:solid;border-color:var(--teal);background:var(--panel)}
.dz-ico{width:28px;height:28px;color:var(--faint);flex:none}
.dropzone.is-dragover .dz-ico{color:var(--teal-deep)}
.dz-label{margin:0;font-size:13px;color:var(--ink-2)}
.dz-label .dz-strong{font-weight:600;color:var(--ink)}
.dz-label-drop{display:none}
.dropzone.is-dragover .dz-label-idle{display:none}
.dropzone.is-dragover .dz-label-drop{display:inline;color:var(--teal-deep);font-weight:600}
/* filename feedback (rendered by JS; hidden when empty) */
.dz-feedback{margin-top:var(--s-3);font-size:13px}
.dz-feedback:empty{display:none}
.dz-count{font-weight:600;color:var(--ink)}
.dz-list{list-style:none;margin:var(--s-2) 0 0;padding:0;display:flex;flex-direction:column;gap:2px}
.dz-list li{font-size:12px;color:var(--ink-2);font-variant-numeric:tabular-nums;border-top:1px solid var(--line);padding-top:4px;word-break:break-all}
.dz-skip{display:block;margin-top:var(--s-2);font-size:12px;color:var(--review)}
/* compact variant for the narrow distribution "upload directly" card */
.dropzone--compact.is-enhanced .dz-cue{padding:var(--s-5) var(--s-4)}
.dropzone--compact .dz-ico{width:22px;height:22px}

/* ============ MOTION — load hero + feedback (prefers-reduced-motion disables all, §2 base) ============ */
/* hero: the score arc draws in over ~1.5s with the hue sweeping clay -> health
   (driven by the inline script in score_gauge.html); the family bars grow in on load */
@keyframes barGrow{from{transform:scaleX(0)}}
.bars .bar .fill{transform-origin:left;animation:barGrow .6s var(--ease) backwards}
.bars .bar:nth-child(1) .fill{animation-delay:.10s}
.bars .bar:nth-child(2) .fill{animation-delay:.18s}
.bars .bar:nth-child(3) .fill{animation-delay:.26s}
.bars .bar:nth-child(4) .fill{animation-delay:.34s}
.bars .bar:nth-child(5) .fill{animation-delay:.42s}
/* tactile press feedback on buttons */
.btn,.btn-ghost,.btn-secondary{transition:filter var(--t-fast) var(--ease),background var(--t-fast) var(--ease),border-color var(--t-fast) var(--ease),color var(--t-fast) var(--ease),transform var(--t-fast) var(--ease)}
.btn:active,.btn-ghost:active,.btn-secondary:active{transform:translateY(1px)}
/* never animate in print (avoid capturing mid-draw) */
@media print{.gauge .arc,.bars .bar .fill{animation:none!important}}

/* ============ 4. PAGE LAYOUTS ============ */
.content{padding:var(--s-6);max-width:1180px;margin:0 auto}
.dashboard .applications-list{width:100%}
/* seat the header on a quiet sunken band so it anchors the columns (type + hairline, no card) */
.applications-list thead th{background:var(--sunken);padding-top:13px;white-space:nowrap}
.applications-list thead th:first-child{background:none}        /* the 3px stripe column stays bare */
.results-page{max-width:1180px;margin:0 auto}

/* ============ 4b. RESULTS CANVAS (case-file: navy cover + paper sheet) ============ */
/* The results page overrides .content's centered max-width so the canvas can run wide. */
.content:has(.results-canvas){max-width:1320px}
.results-canvas{display:grid;grid-template-columns:1fr 300px;gap:var(--s-5);align-items:start}
.results-canvas .case-head{grid-column:1 / -1;margin:0 0 var(--s-2)}
.results-canvas .case-head h1{margin:0;font-size:40px;font-weight:800;letter-spacing:-1.2px;line-height:1.05}
@media (max-width:900px){.results-canvas{grid-template-columns:1fr}  /* graceful stack (spec §8): banner, then cover, then sheet */
  .results-canvas .case-head{order:-3}.results-canvas .verdict-banner{order:-2}.results-canvas .case-rail{order:-1;position:static}}

/* —— recommended-action banner (full-width, spans both columns; light-surface washes) —— */
.results-canvas .verdict-banner{grid-column:1 / -1;display:flex;gap:var(--s-5);align-items:center;
  padding:var(--s-5) var(--s-6);border-radius:var(--r-lg);border:1px solid;margin-bottom:var(--s-2)}
.results-canvas .verdict-banner.is-clear{background:color-mix(in oklch,var(--clear-bg) 82%,var(--clear));border-color:color-mix(in oklch,var(--clear) 32%,var(--line))}
.results-canvas .verdict-banner.is-caution{background:color-mix(in oklch,var(--review-bg) 80%,var(--review-solid));border-color:color-mix(in oklch,var(--review-solid) 32%,var(--line))}
.results-canvas .verdict-banner.is-nogo{background:color-mix(in oklch,var(--blocked-bg) 80%,var(--blocked));border-color:color-mix(in oklch,var(--blocked) 32%,var(--line))}
.results-canvas .vb-disc{flex:none;width:60px;height:60px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:29px;font-weight:800;line-height:1;color:#fff}
.results-canvas .verdict-banner.is-clear .vb-disc{background:var(--clear)}
.results-canvas .verdict-banner.is-caution .vb-disc{background:var(--review-solid);color:var(--ink)}
.results-canvas .verdict-banner.is-nogo .vb-disc{background:var(--blocked)}
/* the hero: display-scale headline, verdict word in the state colour at full saturation */
.results-canvas .vb-word{font-size:42px;font-weight:800;letter-spacing:-1.4px;line-height:1.02;margin:0}
.results-canvas .verdict-banner.is-clear .vb-word{color:var(--clear)}
.results-canvas .verdict-banner.is-caution .vb-word{color:var(--review)}
.results-canvas .verdict-banner.is-nogo .vb-word{color:var(--blocked)}
.results-canvas .vb-driven{margin:9px 0 0;font-size:14px;color:var(--ink-2);line-height:1.45;max-width:64ch}
.results-canvas .vb-driven b{color:var(--ink);font-weight:700}
@media (max-width:900px){.results-canvas .vb-word{font-size:34px;letter-spacing:-1px}.results-canvas .vb-disc{width:52px;height:52px;font-size:25px}}
@media (max-width:560px){.results-canvas .vb-word{font-size:28px}}

/* —— rail (sticky wrapper: cover + export buttons) —— */
.results-canvas .case-rail{position:sticky;top:calc(58px + var(--s-5));align-self:start;min-width:0;max-height:calc(100vh - 58px - var(--s-5) - var(--s-3));overflow-y:auto;scrollbar-width:thin;scrollbar-color:var(--cover-faint) transparent}
.case-rail .rail-exports{display:flex;gap:var(--s-2);margin-top:var(--s-3);flex-wrap:wrap}
/* —— cover (case identity; rail handles the stickiness) —— */
.case-cover{position:static;
  background:var(--cover-bg);color:var(--cover-ink);border-radius:var(--r-lg);
  padding:var(--s-5) var(--s-4);display:flex;flex-direction:column}
.case-cover .cover-name{font-size:24px;font-weight:800;letter-spacing:-.5px;line-height:1.15;margin:0 0 4px;color:var(--cover-ink)}
.case-cover .cover-name::after{content:none}   /* no teal underline on the cover h1 */
.case-cover .cover-ref{font-size:11px;color:var(--cover-faint);letter-spacing:.3px;line-height:1.55}
/* —— verdict stamp (border + sentence carry state; NO chip/dot/eyebrow) —— */
.case-cover .cover-stamp{margin-top:var(--s-4);border:1.5px solid var(--cs-state);border-radius:var(--r-sm);padding:11px 13px}
.case-cover.is-clear{--cs-state:var(--clear-on-dark)}
.case-cover.is-caution{--cs-state:var(--review-on-dark)}
.case-cover.is-nogo{--cs-state:var(--blocked-on-dark)}
.case-cover .cs-word{font-size:20px;font-weight:800;letter-spacing:-.4px;color:var(--cs-state);line-height:1.12}
.case-cover .cs-driven{font-size:11px;color:var(--cover-ink-2);margin-top:4px;line-height:1.5}
/* —— key facts (hairline k/v, uppercase micro-label, tabular figures) —— */
.case-cover .cover-facts{margin-top:var(--s-4)}
.case-cover .cf-row{padding:7px 0;border-bottom:1px solid var(--cover-line);display:flex;justify-content:space-between;align-items:baseline;gap:var(--s-3)}
.case-cover .cf-row:last-child{border-bottom:none}
.case-cover .cf-k{font-size:9px;font-weight:700;letter-spacing:.9px;text-transform:uppercase;color:var(--cover-faint)}
.case-cover .cf-v{font-size:16px;font-weight:800;letter-spacing:-.3px;font-variant-numeric:tabular-nums lining-nums;text-align:right}
.case-cover .cf-sub{font-size:9px;color:var(--cover-faint);font-weight:500;margin-left:4px}
/* —— inputs checklist (one icon-disc row per check; exception-first) —— */
.case-cover .cover-inputs{margin-top:var(--s-4);font-size:11px;line-height:1.6;color:var(--cover-ink-2)}
.case-cover .ci-h{font-size:9px;font-weight:800;letter-spacing:1.1px;text-transform:uppercase;color:var(--cover-faint);margin-bottom:6px}
.case-cover .ci-check{display:flex;gap:8px;align-items:flex-start;margin-bottom:5px;font-size:11px;line-height:1.5;color:var(--cover-ink-2)}
.case-cover .ci-ic{flex-shrink:0;width:15px;height:15px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;font-size:9px;font-weight:800;margin-top:1px}
.case-cover .ci-ok .ci-ic{background:var(--clear-on-dark);color:var(--cover-bg)}
.case-cover .ci-amber .ci-ic{background:var(--review-on-dark);color:var(--cover-bg)}
.case-cover .ci-red .ci-ic{background:var(--blocked-on-dark);color:var(--cover-bg)}
.case-cover .ci-na .ci-ic{background:transparent;border:1px solid var(--cover-line);color:var(--cover-faint)}
.case-cover .ci-amber .ci-tx{color:var(--review-on-dark)}
.case-cover .ci-red .ci-tx{color:var(--blocked-on-dark)}
/* —— section index (anchor wayfinding) —— */
.case-cover .cover-toc{margin-top:var(--s-4);border-top:1px solid var(--cover-line);padding-top:var(--s-3)}
.case-cover .toc-link{display:block;font-size:11px;color:var(--cover-ink-2);padding:3px 0;font-weight:500}
.case-cover .toc-link:hover{color:#fff;text-decoration:none}
.case-cover .toc-link.on{color:#fff;font-weight:700}
/* —— foot metadata (moves up from the old page footer) —— */
.case-cover .cover-foot{margin-top:var(--s-4);font-size:9px;color:var(--cover-faint);line-height:1.6}

/* —— sheet (evidence trail) —— */
.case-sheet{min-width:0}
.case-sheet .zone{margin-bottom:var(--s-5);scroll-margin-top:calc(58px + var(--s-4))}
/* section header: plain sentence-case ink heading + optional right-aligned advisory note (no descriptor, no hairline) */
.case-sheet .zone-h{display:flex;align-items:baseline;gap:var(--s-3);margin:0 0 var(--s-3)}
.case-sheet .zone-h .zh-t{margin:0;font-size:17px;font-weight:700;letter-spacing:-.2px;color:var(--ink);text-transform:none}
.case-sheet .zone-h .zh-note{margin-left:auto;font-size:11px;font-weight:600;letter-spacing:.3px;color:var(--faint);white-space:nowrap;text-transform:none}
/* zone panel — a flatter card variant that lives inside a zone */
.case-sheet .zpanel{background:var(--panel);border:1px solid var(--line);border-radius:var(--r-lg);padding:var(--s-4) var(--s-5);margin-bottom:var(--s-3)}
.case-sheet .zpanel:last-child{margin-bottom:0}
.case-sheet .zpanel-h{margin:0 0 var(--s-3);font-size:14px;font-weight:700;letter-spacing:-.1px;display:flex;align-items:baseline;gap:var(--s-3)}
.case-sheet .zpanel-h .zp-note{margin-left:auto;font-size:11px;font-weight:500;color:var(--faint)}
.case-sheet .zduo{display:grid;grid-template-columns:1fr 1fr;gap:var(--s-3)}
@media (max-width:760px){.case-sheet .zduo{grid-template-columns:1fr}}
/* —— stat block (income headline number) —— */
.case-sheet .zstat{padding:var(--s-1) 0 var(--s-3)}
.case-sheet .zstat-k{font-size:9px;font-weight:700;letter-spacing:.8px;text-transform:uppercase;color:var(--faint)}
.case-sheet .zstat-v{font-size:20px;font-weight:700;letter-spacing:-.6px;margin-top:2px;color:var(--clear);font-variant-numeric:tabular-nums lining-nums}
.case-sheet .zstat-v.is-weak{color:var(--ink)}
.case-sheet .zstat-s{font-size:11px;color:var(--faint);margin-top:2px}
/* —— integrity forensics sub-block —— */
.case-sheet .integ-forensics{margin-top:var(--s-4);padding-top:var(--s-3);border-top:1px solid var(--line-2)}
.case-sheet .integ-sub{font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.6px;color:var(--ink-2);margin:0 0 var(--s-2)}
.case-sheet .mc-row .mc-qual{font-size:11px}
.case-sheet .tamper-reasons{margin:6px 0 12px;padding-left:18px}
.case-sheet .tamper-reasons li{margin:4px 0}
.case-sheet .chk .lbl-flag{color:var(--blocked)}
.case-sheet .chk .lbl-ok{color:var(--clear)}
/* —— appendix rows (native <details>) —— */
.case-sheet .apx-row{background:var(--panel);border:1px solid var(--line);border-radius:var(--r-md);margin-bottom:var(--s-2)}
.case-sheet .apx-row[open]{padding-bottom:var(--s-3)}
.case-sheet .apx-sum{display:flex;justify-content:space-between;align-items:center;gap:var(--s-3);padding:11px 16px;cursor:pointer;color:var(--ink-2);font-size:13px;list-style:none}
.case-sheet .apx-sum::-webkit-details-marker{display:none}
.case-sheet .apx-sum b{color:var(--ink);font-weight:600}
.case-sheet .apx-sum .apx-chev{transition:transform var(--t-mid) var(--ease)}
.case-sheet .apx-row[open] .apx-sum .apx-chev{transform:rotate(90deg)}
.case-sheet .apx-body{padding:0 16px}
/* card-in-card: partials inside an appendix body keep their content but lose the card frame */
.case-sheet .apx-body > .card,.case-sheet .apx-body > .psychometric-panel{border:none;background:none;padding:0;margin:0}

/* zone-1 driver tiles, bare on the canvas (no verdict-card wrapper) */
.case-sheet .gng{margin-top:0;padding-top:0;border-top:none;display:flex;flex-direction:column;gap:9px}
.case-sheet .gng.grid2x2{display:grid;grid-template-columns:1fr 1fr;gap:var(--s-3)}
.case-sheet .gng .t{align-items:flex-start;border-left:1px solid var(--line)}  /* no coloured edge keyline — state lives in the disc + verdict word */
.case-sheet .gng .t .body .sub{display:block;font-size:11px;color:var(--faint);line-height:1.4;margin-top:2px}
.case-sheet .gng .t.is-headline{background:color-mix(in oklch,var(--g-fill) 8%,var(--panel))}
.case-sheet .gng .t.is-headline .body b:after{content:" ▲";font-size:8px;color:var(--g-text);vertical-align:1px}
.case-sheet .gng .t.t-new{grid-column:1 / -1}
@media (max-width:560px){.case-sheet .gng.grid2x2{grid-template-columns:1fr}}
@media (min-width:901px) and (max-width:1040px){.case-sheet .gng.grid2x2{grid-template-columns:1fr}}
/* transactions heading flex row */
.results-canvas .tx-head{display:flex;justify-content:space-between;align-items:center}
/* drill-down table spacing (was style="margin-top:14px") */
.results-canvas .drill-tbl{margin-top:14px}
/* corroboration gap: muted secondary text in the income panel */
.case-sheet .corr-gap{font-weight:400;font-size:11px}
/* corroboration status verdict inline */
.case-sheet .corr-status{display:inline-flex}

/* timing callout re-homed into the cashflow zone (web results page only) */
.results-canvas .cashflow-card .timing-callout{display:flex;gap:13px;align-items:flex-start;
  padding:13px 15px;margin-top:var(--s-4);border-radius:var(--r-md);
  background:color-mix(in oklch,var(--teal) 9%,var(--panel));border:1px solid color-mix(in oklch,var(--teal) 30%,var(--line))}
.results-canvas .cashflow-card .timing-callout .tc-ic{width:27px;height:27px;border-radius:50%;background:var(--teal);color:#fff;
  display:flex;align-items:center;justify-content:center;font-size:15px;flex-shrink:0}
.results-canvas .cashflow-card .timing-callout .tc-body b{display:block;font-size:13px;color:var(--ink);font-weight:700}
.results-canvas .cashflow-card .timing-callout .tc-body span{font-size:11.5px;color:var(--ink-2);line-height:1.45}
.results-canvas .cashflow-card .timing-callout.is-tentative{background:color-mix(in oklch,var(--review-solid) 11%,var(--panel));border-color:color-mix(in oklch,var(--review-solid) 34%,var(--line))}
.results-canvas .cashflow-card .timing-callout.is-tentative .tc-ic{background:var(--review-solid);color:var(--ink)}

.exports{display:flex;gap:var(--s-2);flex-shrink:0;flex-wrap:wrap}
.exports .xls{border-color:var(--clear);color:var(--clear)}
.dashboard-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:var(--s-5)}
.dashboard-header h1{margin:0}
.footmeta{text-align:center;color:var(--faint);font-size:11.5px;font-variant-numeric:tabular-nums;margin-top:var(--s-3)}
.form-page h1,.distribution-page h1,.batch-page h1{margin:0 0 6px}

/* —— processing interstitial (in-flight assessment) —— */
.processing-page{max-width:560px;margin:var(--s-8) auto;padding:0 var(--s-4)}
.proc-card{background:var(--panel);border:1px solid var(--line);border-radius:var(--r-lg);
  padding:var(--s-7) var(--s-6);text-align:center;box-shadow:var(--shadow-sm)}
.proc-mark{display:flex;justify-content:center;margin-bottom:var(--s-5)}
.proc-mark .wm{font-size:22px;font-weight:500;letter-spacing:-.2px;color:var(--ink)}
.proc-mark .wm b{font-weight:800;color:var(--affy-green)}
.proc-spinner{width:46px;height:46px;margin:0 auto var(--s-5);border-radius:50%;
  border:3px solid var(--line-2);border-top-color:var(--teal);animation:procSpin .9s linear infinite}
@keyframes procSpin{to{transform:rotate(360deg)}}
.proc-card h1{font-size:24px;font-weight:600;letter-spacing:-.4px}
.proc-sub{color:var(--ink-2);margin:var(--s-2) 0 var(--s-5)}
.proc-steps{list-style:none;padding:0;margin:0 auto var(--s-5);display:inline-flex;flex-direction:column;
  gap:var(--s-2);text-align:left;color:var(--faint);font-size:13px}
.proc-steps li{position:relative;padding-left:18px}
.proc-steps li::before{content:"";position:absolute;left:0;top:7px;width:6px;height:6px;border-radius:50%;background:var(--teal-bright)}
.proc-hint{color:var(--faint);font-size:12.5px;margin:0 auto;max-width:42ch}
.proc-error h1{color:var(--blocked)}
.proc-error .btn{margin-top:var(--s-3)}

/* ============ 5. STYLEGUIDE (the living gallery) ============ */
.sg-wrap{max-width:1180px;margin:0 auto}
.sg-hero{padding:var(--s-6) 0 var(--s-5);border-bottom:1px solid var(--line);margin-bottom:var(--s-6)}
.sg-hero .lede{color:var(--ink-2);font-size:15px;max-width:64ch;margin:var(--s-3) 0 0;line-height:1.6}
.sg-toc{display:flex;flex-wrap:wrap;gap:var(--s-2);margin-top:var(--s-5)}
.sg-toc a{font-size:12px;font-weight:600;color:var(--ink-2);border:1px solid var(--line);border-radius:var(--r-md);padding:6px 12px}
.sg-toc a:hover{border-color:var(--teal);color:var(--teal-deep);text-decoration:none}
.sg-sec{padding:var(--s-6) 0;border-bottom:1px solid var(--line-2)}
.sg-sec>.lbl{font-size:11px;text-transform:uppercase;letter-spacing:1.4px;font-weight:700;color:var(--teal-deep);margin-bottom:var(--s-2)}
.sg-sec h2{font-size:var(--text-head);font-weight:600;margin:0 0 var(--s-2)}
.sg-sec .note{color:var(--ink-2);font-size:13px;max-width:64ch;margin:0 0 var(--s-5);line-height:1.6}
.sg-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:var(--s-3)}
.sg-sw{border:1px solid var(--line);border-radius:var(--r-md);overflow:hidden;background:var(--panel)}
.sg-sw .chip{height:52px}
.sg-sw .info{padding:7px 10px}.sg-sw .info .t{font-size:11px;font-weight:600}.sg-sw .info .o{font-size:9.5px;color:var(--faint);font-variant-numeric:tabular-nums;margin-top:1px}
.sg-type>div{padding:var(--s-3) 0;border-bottom:1px solid var(--line-2);display:grid;grid-template-columns:92px 1fr;gap:var(--s-4);align-items:baseline}
.sg-type .m{font-size:10.5px;color:var(--faint);font-weight:600;text-transform:uppercase;letter-spacing:.5px;line-height:1.5}
.sg-space{display:flex;align-items:flex-end;gap:var(--s-4);flex-wrap:wrap}
.sg-space i{display:block;background:var(--teal);border-radius:2px;margin:0 auto 6px}
.sg-space span{font-size:10px;color:var(--faint);font-weight:600;text-align:center;display:block}
.sg-rad{display:flex;gap:var(--s-4)}
.sg-rad i{display:block;width:60px;height:42px;background:var(--sunken);border:1px solid var(--line);margin-bottom:6px}
.sg-rad span{font-size:10px;color:var(--faint);font-weight:600;text-align:center;display:block}
.sg-demo{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:var(--s-5);align-items:start}
.sg-swatch-row{display:flex;gap:var(--s-2);flex-wrap:wrap;margin-bottom:var(--s-4)}

/* ============ 9. PSYCHOMETRIC PANEL (advisory; never in score) ============ */
.psychometric-panel .panel-head{display:flex;align-items:center;gap:var(--s-3);flex-wrap:wrap;margin-bottom:var(--s-3)}
.psychometric-panel .panel-head h3{margin:0;font-size:var(--text-cap);font-weight:700;text-transform:uppercase;letter-spacing:.9px;color:var(--ink)}
.psy-sub{font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.6px;color:var(--ink-2);margin:var(--s-4) 0 var(--s-2)}
.psychometric-panel .small{font-size:11.5px}
.psy-trust{border:1px solid var(--line);border-left:3px solid var(--line);border-radius:var(--r-md);
  padding:var(--s-3) var(--s-4);font-size:12.5px;color:var(--ink);line-height:1.55}
.psy-trust strong{font-weight:700}
.psy-trust-good{background:var(--clear-bg);border-left-color:var(--clear)}
.psy-trust-good strong{color:var(--clear)}
.psy-trust-moderate{background:var(--review-bg);border-left-color:var(--review)}
.psy-trust-moderate strong{color:var(--review)}
.psy-trust-verify{background:var(--blocked-bg);border-left-color:var(--blocked)}
.psy-trust-verify strong{color:var(--blocked)}
.psy-affordability>div{font-size:12.5px;color:var(--ink);margin-bottom:var(--s-2)}
.psy-affordability ul{margin:var(--s-2) 0;padding-left:18px}
.psy-affordability li{font-size:12.5px;color:var(--ink);margin:var(--s-1) 0;line-height:1.55}
.psy-dir-up{color:var(--clear)} .psy-dir-down{color:var(--blocked)} .psy-dir-context{color:var(--ink-2)}
.psy-codes{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:var(--s-2)}
.psy-code{font-size:12.5px;border-left:2px solid var(--line);padding:var(--s-1) var(--s-3)}
.psy-code.psy-risk_up{border-left-color:var(--blocked)} .psy-code.psy-risk_up strong{color:var(--blocked)}
.psy-code.psy-risk_down{border-left-color:var(--clear)} .psy-code.psy-risk_down strong{color:var(--clear)}
.psy-code.psy-verify{border-left-color:var(--review)} .psy-code.psy-verify strong{color:var(--review)}
.psy-recon{width:100%;border-collapse:collapse;font-size:12.5px}
.psy-recon th{text-align:left;font-size:10.5px;text-transform:uppercase;letter-spacing:.5px;color:var(--ink-2);
  font-weight:700;padding:var(--s-2) var(--s-3);border-bottom:1px solid var(--line)}
.psy-recon td{padding:var(--s-2) var(--s-3);border-bottom:1px solid var(--line-2);vertical-align:top;color:var(--ink)}
.psy-recon td:last-child{white-space:nowrap;font-weight:600}
.psy-verdict-corroborated td:last-child{color:var(--clear)}
.psy-verdict-contradicted td:last-child{color:var(--blocked)}
.psy-verdict-probe td:last-child{color:var(--review)}
.psy-verdict-blind_spot td:last-child{color:var(--ink-2)}
.psy-traits{display:flex;flex-wrap:wrap;gap:var(--s-2)}
.psy-trait{font-size:12px;padding:4px 11px;border-radius:var(--r-md);background:var(--sunken);
  border:1px solid var(--line);color:var(--ink-2)}
.psy-trait-contradicted{background:var(--blocked-bg);border-color:var(--blocked);color:var(--blocked);font-weight:600}

/* Material correctness — advisory inputs-integrity rows (the .mc-strip/.mc-chip glyph chips were retired; integrity_panel.html uses these .mc-row rules) */
.mc-row .mc-detail,.mc-row .mc-vs{color:var(--faint);font-weight:400}
.mc-row.mc-flag .v{color:var(--review)}
