/* Crucible — production app styles. Dark "forge" brand (Y.419): the [data-theme="dark"]
   token layer below is recolored from warm-amber terminal to a cool near-black lit by a
   blue-violet flame accent; editorial type (Newsreader + Hanken Grotesk), no monospace. */
:root{
  --bg:#FFFFFF; --surface:#FFFFFF; --surface-2:#FAFAFB; --surface-3:#F3F4F6;
  --line:#E6E8EC; --line-2:#D7DAE0;
  --ink:#16181D; --text:#34373E; --muted:#6B7280; --faint:#9AA0AA;
  /* Y.728 — the last blue holdout goes brand violet. These :root defaults are what every user actually
     sees (data-theme is only set by the ◐ toggle), yet they still carried the pre-brand #2A5BD7 family
     while line 2268's html[data-theme="light"] block — and even --accent-soft/-glow one line down —
     were already violet. Values below == the light-theme block, so :root and light are now one palette.
     Verdict/tier spectrum (--g/-a/-r/-y/-i inks, TCOL) is untouched: the spectrum belongs to verdicts. */
  --accent:oklch(0.52 0.20 285); --accent-2:oklch(0.46 0.20 285); --accent-weak:oklch(0.52 0.20 285 / 0.13);
  --accent-ink:#ffffff; --accent-hot:oklch(0.82 0.135 238); --accent-soft:oklch(0.66 0.205 274 / 0.14); --accent-glow:oklch(0.66 0.205 274 / 0.40);
  --g-ink:#2159c9; --g-bg:#eef3fe; --g-bd:#c6d6f6; --ok:#2159c9;
  --a-ink:#7a33c4; --a-bg:#f4edfe; --a-bd:#ddc6f2;
  --r-ink:#c02f83; --r-bg:#fdeef6; --r-bd:#f5c8e2;
  --y-ink:#4a45cf; --y-bg:#eeeefe; --y-bd:#ccccf6;
  --i-ink:#3538CD; --i-bg:#EEF0FE; --i-bd:#CDD2F5;
  --shadow-sm:0 1px 2px rgba(16,24,40,.05);
  --shadow:0 1px 3px rgba(16,24,40,.08),0 1px 2px rgba(16,24,40,.04);
  --font:'Hanken Grotesk',-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Helvetica,Arial,sans-serif;
  --mono:'Hanken Grotesk',-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Helvetica,Arial,sans-serif;
  --app-w:1680px; /* Y.1191 — the widest the app column goes; the viewport caps it below this */
  --serif:'Newsreader',Georgia,'Times New Roman',serif;
}
*{box-sizing:border-box} html,body{margin:0}
body{background:var(--bg);color:var(--text);font-family:var(--font);-webkit-font-smoothing:antialiased;min-height:100vh}
h1{font-family:var(--serif);font-weight:600;letter-spacing:-.01em;margin:0;color:var(--ink)}
.wrap{max-width:860px;margin:0 auto;padding:30px 22px}
.center{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:22px}
.card{background:var(--surface);border:1px solid var(--line);border-radius:12px;padding:26px;box-shadow:var(--shadow-sm)}
.login{max-width:420px;width:100%}
/* Y.1209 — same rule on the login / teams marks: the flame is as tall as the stack. */
.brand{display:flex;gap:12px;align-items:center;margin-bottom:6px}
.bar{display:none}
/* Same rule for the login / teams mark: h1 at 25px over a 10px line with 2px between them. */
.brand{--brand-f1:25px;--brand-f2:10px;--brand-lead:2px}
.brand-flame{height:calc(var(--brand-f1) * 1.08 + var(--brand-lead) + var(--brand-f2) * 1.08);
  width:auto;aspect-ratio:9.8 / 14.5;flex:none;
  filter:drop-shadow(0 0 6px var(--accent-glow))}
.brand-flame .bf-o{fill:var(--accent)}
.brand-flame .bf-i{fill:var(--accent-hot)}
.brand .wm-stack{display:flex;flex-direction:column;gap:0;line-height:1.08}
.wm-lin{font-size:10px;letter-spacing:.02em;color:var(--muted);font-weight:500;margin-top:2px;white-space:nowrap}
.sos-mark{font-family:ui-monospace,"SF Mono","SFMono-Regular",Menlo,Consolas,monospace;font-weight:600;color:var(--ink)}
/* Y.969 — UNIFIED BRAND MARK (.cru-*): flame + a stacked wordmark. PRODUCT shape = "Crucible" over
   "[Product] Diligence" (product in the accent, Diligence muted, NO forged-by). UMBRELLA shape = "Crucible
   Diligence" over "forged by Studio OS" (OS in the accent). One mark everywhere; sm/md/lg. */
/* ── Y.1209 · THE FLAME SPANS THE WORDMARK ─────────────────────────────────────
   Lars: "is there a way to get the flame icon to span the height of the two-lined
   logo so the bottom lines up with the bottom of the second 'Diligence' row, and the
   top with the top of the main 'Crucible' text."

   Two changes, and the CSS is the smaller one. The flame's viewBox was cropped to its
   own ink (see FLAME_BOX_TIGHT) — measured, the drawn shape filled only 14.5 of 24
   units, so 40% of every flame was empty space underneath it and every size written
   here was sizing padding. Now `align-self:stretch` makes the icon exactly as tall as
   the stack beside it, and `aspect-ratio` gives it the matching width.

   The stretch is to the wordmark's BOX, which is a shade taller than cap-top to
   descender-bottom by the font's leading. Aligning to the glyphs themselves would mean
   measuring cap height per font, and this app lets a workspace choose its own
   typeface — a rule that needs a font metric is a rule that breaks on the next brand
   match. At line-height 1.08 the difference is under a pixel. */
.cru-mark{display:flex;align-items:center;gap:11px;--cru-f1:19px;--cru-f2:13px;--cru-lead:1px}
/* The flame is EXACTLY as tall as the stack beside it: both lines, their line-height and the
   1px between them. `align-self:stretch` was the obvious way to write this and it is a trap —
   an auto-width item with an aspect-ratio makes its own width depend on the row's cross size,
   and the row's cross size depends on it. The first attempt rendered a flame four times the
   height of the words. Deriving it from the two type sizes has no loop in it and no layout
   pass to lose: change a font-size and the flame follows in the same declaration. */
.cru-flame{height:calc(var(--cru-f1) * 1.08 + var(--cru-lead) + var(--cru-f2) * 1.08);
  width:auto;aspect-ratio:9.8 / 14.5;flex:none;
  filter:drop-shadow(0 0 6px var(--accent-glow))}
.cru-flame .bf-o{fill:var(--accent)} .cru-flame .bf-i{fill:var(--accent-hot)}
.cru-wm{display:flex;flex-direction:column;line-height:1.08;min-width:0}
.cru-brand{font-weight:800;font-size:var(--cru-f1);color:var(--ink);letter-spacing:-.01em;white-space:nowrap}
.cru-sub{font-weight:700;font-size:var(--cru-f2);color:var(--muted);white-space:nowrap;margin-top:1px}
.cru-prod{color:var(--accent)}
.cru-umb{font-size:9px;letter-spacing:.05em;text-transform:uppercase;color:var(--muted);font-weight:600;margin-top:2px;white-space:nowrap}
.cru-os{color:var(--accent);font-weight:700}
/* Y.1209 — the size variants set the TYPE and the flame follows it, which is what "one mark
   at three sizes" should always have meant. They used to set both, so the ratio between the
   icon and the words was a separate decision at every size — and drifted. */
.cru-mark-lg{gap:14px;--cru-f1:30px;--cru-f2:18px}.cru-mark-lg .cru-umb{font-size:11px}
.cru-mark-sm{--cru-f1:16px;--cru-f2:11.5px}.cru-mark-sm .cru-umb{font-size:8px}
/* The UMBRELLA shape's second line is the small "forged by Studio OS", not the product line, so
   the stack is shorter and the flame has to be too. Set from the markup rather than sniffed with
   :has(), because brand.js already knows which shape it is building. */
.cru-mark-umb{--cru-f2:9px;--cru-lead:2px}
.cru-mark-umb.cru-mark-lg{--cru-f2:11px}
.cru-mark-umb.cru-mark-sm{--cru-f2:8px}
/* Y.969 — org COBRAND / WHITELABEL: the full Crucible mark + the org name beside it (divider between), or the org name alone. */
.cru-cobrand{display:flex;align-items:center;gap:12px;min-width:0}
.cru-org-div{width:1px;align-self:stretch;background:var(--line-2,#3a3d48);opacity:.7;margin:3px 0}
.cru-org{font-weight:800;font-size:19px;color:var(--ink);letter-spacing:-.01em;white-space:nowrap}
.cru-cobrand-sm{gap:10px}.cru-cobrand-sm .cru-org{font-size:16px}
.cru-cobrand-lg{gap:16px}.cru-cobrand-lg .cru-org{font-size:26px}
.cru-org-logo{height:28px;width:auto;max-width:160px;object-fit:contain;display:block}
.cru-cobrand-sm .cru-org-logo{height:24px;max-width:130px}
.cru-cobrand-lg .cru-org-logo{height:40px;max-width:230px}

/* Y.969 — "What must be true": the load-bearing assumptions behind the score, front-and-center on the brief + 1-pager. */
.ck-mbt{margin:14px 0 6px;padding:14px 16px;border:1px solid var(--line,#2a2d36);border-radius:10px;background:var(--accent-weak,rgba(110,128,255,.05))}
.ck-mbt-h{display:flex;align-items:baseline;gap:9px;flex-wrap:wrap;font-weight:700;font-size:14px;color:var(--ink)}
.ck-mbt-sub{font-weight:500;font-size:11px;color:var(--muted);letter-spacing:.01em}
.ck-mbt-lead{font-size:12.5px;line-height:1.5;color:var(--muted);margin:6px 0 10px}
.ck-mbt-list{margin:0;padding-left:20px;display:flex;flex-direction:column;gap:6px}
.ck-mbt-list li{font-size:13px;line-height:1.45;color:var(--ink)}
.ck-mbt-list li::marker{color:var(--accent);font-weight:700}
.op-card .ck-mbt-op{margin:4px 0 0;padding:12px 0 0;border:0;border-top:1px solid var(--rule,#2a2a2a);border-radius:0;background:transparent}
.op-card .ck-mbt-op .ck-mbt-lead{font-size:11.5px}
.op-card .ck-mbt-op .ck-mbt-list li{font-size:12px}

/* Y.970 — Studios console: the shelf of institution studios (each a workspace). */
.stu-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(238px,1fr));gap:14px;margin-top:18px}
.stu-card{display:flex;flex-direction:column;gap:8px;padding:16px;border:1px solid var(--line);border-radius:12px;background:var(--surface);text-align:left}
.stu-card-on{border-color:var(--accent);box-shadow:inset 0 0 0 1px var(--accent)}
.stu-h{display:flex;align-items:center;justify-content:space-between;gap:8px}
.stu-name{font-weight:700;font-size:15px;color:var(--ink);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.stu-kind{flex:none;font-size:9.5px;letter-spacing:.04em;text-transform:uppercase;padding:2px 7px;border-radius:999px;font-weight:700}
/* Y.985 — per-studio delete control (hidden on the current + personal cards). */
.stu-name{flex:1 1 auto;min-width:0}
.stu-del{flex:none;width:20px;height:20px;border-radius:50%;border:1px solid var(--line);background:transparent;color:var(--muted);font-size:10px;line-height:1;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;padding:0}
.stu-del:hover:not(:disabled){background:#c0392b;border-color:#c0392b;color:#fff}
.stu-del:disabled{opacity:.4;cursor:default}
.kw-p{background:var(--accent-weak,rgba(110,128,255,.14));color:var(--accent)} .kw-t{background:rgba(33,89,201,.14);color:#3b74e0} .kw-o{background:rgba(122,51,196,.14);color:#9a63e0}
.stu-meta{font-size:12px;color:var(--muted)}
.stu-open{width:auto;margin:4px 0 0;padding:7px 12px;font-size:12.5px;align-self:flex-start}
.stu-new{cursor:pointer;align-items:center;justify-content:center;text-align:center;gap:5px;border-style:dashed;color:var(--muted);min-height:124px}
.stu-new:hover{border-color:var(--accent);color:var(--accent);background:var(--accent-weak,rgba(110,128,255,.05))}
.stu-plus{font-size:24px;font-weight:700;line-height:1}
.stu-new-t{font-weight:700;font-size:14px}
.stu-new-s{font-size:11px;color:var(--muted);max-width:180px}
/* Y.973 — recover concept picker (modal): cherry-pick / combine ideas across past studios. */
.rp-modal{width:min(560px,94vw)}
.rp-list{max-height:46vh;overflow:auto;border:1px solid var(--line);border-radius:9px;padding:6px 8px;margin:6px 0 4px}
.rp-group{padding:6px 0;border-bottom:1px solid var(--line-2,rgba(128,128,128,.14))}
.rp-group:last-child{border-bottom:0}
.rp-gh{display:flex;align-items:center;gap:8px;font-size:13px;cursor:pointer;padding:3px 2px}
.rp-row{display:flex;align-items:baseline;gap:8px;padding:3px 2px 3px 22px;font-size:12.5px;cursor:pointer;color:var(--ink)}
.rp-row:hover{background:var(--accent-weak,rgba(110,128,255,.05));border-radius:5px}
.rp-t{font-weight:600;white-space:nowrap}
.rp-d{color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}
.rp-foot{display:flex;align-items:center;gap:8px;margin-top:8px}
.rp-count{font-size:12px;color:var(--muted)}
/* Y.975 — Studio Board: drag ideas between studio columns. */
.sb-board{display:flex;gap:14px;overflow-x:auto;padding:8px 2px 16px;align-items:flex-start}
.sb-col{flex:0 0 246px;background:var(--surface-2,rgba(128,128,128,.05));border:1px solid var(--line);border-radius:12px;display:flex;flex-direction:column;max-height:72vh}
.sb-col-on{border-color:var(--accent)}
.sb-col-over{border-color:var(--accent);box-shadow:inset 0 0 0 2px var(--accent);background:var(--accent-weak,rgba(110,128,255,.08))}
.sb-col-h{display:flex;align-items:center;gap:8px;padding:11px 12px;border-bottom:1px solid var(--line)}
.sb-col-n{font-weight:700;font-size:13px;color:var(--ink);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.sb-fund{font-size:12px;margin-left:3px}
.sb-col-c{margin-left:auto;font-size:11px;color:var(--muted);background:var(--surface);border:1px solid var(--line);border-radius:999px;padding:0 7px}
.stu-rec-when{font-size:11px;color:var(--muted)}
/* Y.977 — Studio selector at the top of the left nav (Studio → cohorts → concepts). */
.mc-studiosel{padding:0 0 10px;position:relative}
/* Y.978 — the Studio switcher popover (fetched fresh on open). */
.mc-studiosel-menu{margin-top:5px;background:var(--surface);border:1px solid var(--line);border-radius:9px;padding:5px;max-height:320px;overflow:auto}
.mc-ws-list{display:flex;flex-direction:column;gap:2px}
.mc-ws-row{display:flex;align-items:center;gap:8px;width:100%;background:transparent;border:0;border-radius:6px;padding:7px 9px;cursor:pointer;text-align:left;color:var(--ink);font:inherit}
.mc-ws-row:hover:not(:disabled){background:var(--surface-3)}
.mc-ws-row.on{opacity:.6;cursor:default}
.mc-ws-n{flex:1;font-size:12.5px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.mc-ws-cur{font-size:9px;text-transform:uppercase;letter-spacing:.05em;color:var(--muted);font-weight:700}
.mc-ws-empty{padding:9px;color:var(--muted);font-size:11.5px;text-align:center}
.mc-ws-foot{border-top:1px solid var(--line);margin-top:5px;padding-top:5px}
.mc-ws-act{width:100%;background:transparent;border:0;border-radius:6px;padding:7px 9px;cursor:pointer;text-align:left;color:var(--accent);font:inherit;font-size:12px;font-weight:600}
.mc-ws-act:hover{background:var(--surface-3)}
.mc-studiosel-b{display:flex;align-items:center;gap:7px;width:100%;background:var(--surface);border:1px solid var(--line);border-radius:8px;padding:8px 10px;cursor:pointer;text-align:left;color:var(--ink);font:inherit}
.mc-studiosel-b:hover{border-color:var(--accent)}
.mc-studiosel-l{font-size:9px;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);font-weight:700}
.mc-studiosel-n{font-weight:700;font-size:13px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1}
.mc-studiosel-c{color:var(--muted);font-size:12px;flex:none}
/* Y.977 — the studio-mode concept picker mirrors the Studio selector above it: one bordered box, small-caps
   label, borderless dropdown + subtle steppers (scoped to #mc-studio-pickers so search-mode pickers keep their look). */
#mc-studio-pickers .mc-cpick{padding:7px 10px 8px;border:1px solid var(--line);border-radius:8px;background:var(--surface)}
#mc-studio-pickers .mc-cpick:focus-within{border-color:var(--accent)}
#mc-studio-pickers .mc-cstep{gap:6px}
.mc-cpick-l{flex:none;font-size:9px;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);font-weight:700}
#mc-studio-pickers .mc-cpick select{background:transparent;border:0;border-radius:0;padding:2px 0;font-size:13px;font-weight:700}
#mc-studio-pickers .mc-cstep-b{width:20px;height:24px;border:0;background:transparent;color:var(--muted);font-size:15px}
#mc-studio-pickers .mc-cstep-b:hover:not(:disabled){background:var(--surface-3);color:var(--ink)}
.mc-cpick-sub{display:flex;align-items:center;gap:5px;margin-top:6px;padding-top:6px;border-top:1px solid var(--line)}
.sb-col-body{padding:8px;overflow-y:auto;display:flex;flex-direction:column;gap:7px;min-height:60px}
.sb-card{display:flex;align-items:center;gap:8px;padding:9px 10px;background:var(--surface);border:1px solid var(--line);border-radius:8px;cursor:grab;font-size:12.5px}
.sb-card:hover{border-color:var(--accent)}
.sb-card:active{cursor:grabbing}
.sb-dragging{opacity:.45}
.sb-moving{opacity:.5}
.sb-card-t{flex:1;color:var(--ink);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.sb-card-s{font-weight:700;font-size:12px;flex:none}
.sb-empty{color:var(--muted);font-size:11.5px;text-align:center;padding:16px 8px;border:1px dashed var(--line-2,rgba(128,128,128,.3));border-radius:8px}
.sb-col-new{background:transparent;border-style:dashed}
.sb-col-new .sb-col-n{color:var(--muted)}
.login h1{font-size:25px}
.sub{color:var(--muted);font-size:13.5px;line-height:1.55;margin:8px 0 18px}
.sub b{color:var(--ink)}
.ob-q{display:block;font-size:12.5px;font-weight:600;color:var(--ink);margin:13px 0 5px}
.ob-q .ob-opt{font-weight:500;color:var(--faint);font-size:11px;letter-spacing:.02em}
.ob-q + input,.ob-q + textarea{margin-top:0}
.ih-bar{padding-top:22px;padding-bottom:0}
.ih-tabs{display:flex;gap:6px;border-bottom:1px solid var(--line)}
.ih-tab{display:flex;flex-direction:column;gap:1px;align-items:flex-start;background:none;border:none;border-bottom:2px solid transparent;padding:7px 14px 10px;margin-bottom:-1px;cursor:pointer;color:var(--muted);font-family:inherit;text-align:left}
.ih-tab:hover{color:var(--ink)}
.ih-tab.on{color:var(--ink);border-bottom-color:var(--accent)}
.ih-tl{font-size:14px;font-weight:600}
.ih-th{font-size:11px;color:var(--faint);font-weight:500}
.ih-tab.on .ih-th{color:var(--muted)}
#ih-body .wrap{padding-top:18px}
.ev-pick{display:flex;gap:6px;flex-wrap:wrap;margin:0 0 12px}
.ev-cbtn{background:var(--surface-2);border:1px solid var(--line);border-radius:999px;padding:5px 12px;font-size:12.5px;color:var(--muted);cursor:pointer;font-family:inherit}
.ev-cbtn.on{background:var(--accent-weak);border-color:var(--accent);color:var(--accent-2)}
.ev-valnow{font-size:14px;margin:0 0 14px;padding:10px 14px;border:1px solid var(--line);border-radius:10px;background:var(--surface-2)}
/* Y.677 — quick capture (type what you know, it files onto the ladder) + explicit fold-in bar */
.ev-quick{margin:0 0 12px;border:1px solid var(--line);border-radius:10px;padding:12px;background:var(--surface)}
.ev-qh{font-size:13.5px;margin-bottom:8px}
.ev-chips{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:8px}
.ev-chip{background:var(--surface-2);border:1px solid var(--line);border-radius:999px;padding:4px 11px;font-size:12px;color:var(--muted);cursor:pointer;font-family:inherit}
.ev-chip.on{background:var(--accent-weak);border-color:var(--accent);color:var(--accent-2);font-weight:600}
.ev-quick textarea{width:100%;border:1px solid var(--line);border-radius:8px;background:var(--surface);color:var(--ink);font:inherit;font-size:13px;padding:9px 11px;resize:vertical;line-height:1.5}
.ev-fold{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:0 0 12px;padding:10px 14px;border:1px solid var(--accent);border-radius:10px;background:var(--accent-weak);font-size:13.5px}
.ev-fold .ck-run{width:auto;margin:0;padding:6px 12px;font-size:12.5px}
/* Y.722 — locked-host nameplate: door word bold, "Diligence" quiet */
.mc-prod-dil{font-weight:400;opacity:.75}
/* Y.718 — the door tagline: bigger than the corp byline, door word in the accent (token-driven, both themes) */
.lp-tagline{font-size:13px;letter-spacing:.01em}
.lp-tagline .lp-door{color:var(--accent);font-weight:700}
/* Y.713 — DOOR LANDINGS wear the umbrella's dark brand by TOKEN OVERRIDE: same markup, same
   components — .lpx-dark redefines the app tokens to the studio-os.dev oklch palette (violet accent,
   Newsreader headlines). The 🌗 toggle flips back to the app-light look; choice persists. */
.lpx-dark{
  --surface: oklch(0.182 0.014 274); --surface-2: oklch(0.215 0.016 274);
  --ink: oklch(0.970 0.008 274); --text: oklch(0.820 0.013 274); --muted: oklch(0.640 0.015 274);
  --line: oklch(1 0 0 / 0.10); --line-2: oklch(1 0 0 / 0.17);
  --accent: oklch(0.66 0.205 274); --accent-2: oklch(0.82 0.135 238);
  --accent-weak: oklch(0.66 0.205 274 / 0.16); --accent-soft: oklch(0.66 0.205 274 / 0.12);
  background: oklch(0.150 0.012 274); color: var(--ink); min-height: 100vh;
}
.lpx-dark .lp-h1, .lpx-dark .lp-h2{font-family:'Newsreader', Georgia, 'Times New Roman', serif; font-weight:600; letter-spacing:-.02em}
.lpx-dark .lp-h1 .hl{color: oklch(0.66 0.205 274); font-style: italic}
.lpx-dark ::selection{background: oklch(0.66 0.205 274); color: oklch(0.16 0.04 274)}
.lpx-dark .bf-o{fill: oklch(0.66 0.205 274)} .lpx-dark .bf-i{fill: oklch(0.82 0.135 238)}
.lpx-dark .brand-flame{filter: drop-shadow(0 0 10px oklch(0.66 0.205 274 / 0.40))}
/* Y.708 — the umbrella root page is fully self-contained (crucibleroot.js injects its own tokens
   matching studio-os.dev); the Y.707 .cr-* rules it briefly used are retired. */
/* Y.705 — the brief's JTBD cards share the studio explorer chrome; primary job gets the accent edge */
.jtbd-card.jtbd-primary{border-left:3px solid var(--accent)}
/* Y.700 — concept profile rows */
.cpro-row{display:flex;align-items:center;gap:10px;margin:6px 0;font-size:13px;flex-wrap:wrap}
.cpro-k{flex:none;width:130px;font-size:10.5px;font-weight:700;letter-spacing:.05em;text-transform:uppercase;color:var(--muted)}
/* Y.699 — the concept website chip on the brief header */
.ck-site{color:var(--accent-2);text-decoration:none;white-space:nowrap}
.ck-site:hover{text-decoration:underline}
/* Y.696 — stage-gate board: draggable cards, drop targets, maturity/evidence chrome */
.gate-card[draggable]{cursor:grab}
.gate-card.dragging{opacity:.45}
.gate-col.gate-over{outline:2px dashed var(--accent);outline-offset:-3px;border-radius:10px;background:var(--accent-weak)}
.gate-mat{font-size:10.5px;color:var(--muted);margin:2px 0 8px;line-height:1.4}
.gate-card-meta{font-size:10.5px;color:var(--muted);margin-top:4px}
.gate-lag{cursor:help}
/* Y.693 — banked opportunity rows + board dots click through to the cockpit */
.ob-row{cursor:pointer}
.ob-row:hover td{background:var(--surface-2)}
.afm-dot{cursor:pointer}
/* Y.682 — venture-maturity dial on the cockpit header */
.ck-mat{display:flex;align-items:center;gap:6px;font-size:11.5px;color:var(--muted);white-space:nowrap}
.ck-mat select{font:inherit;font-size:11.5px;color:var(--ink);background:var(--surface);border:1px solid var(--line);border-radius:6px;padding:3px 6px;cursor:pointer}
.ck-mat-src{font-size:10.5px;color:var(--muted)}
.ev-rungs{display:flex;flex-direction:column;gap:12px}
.ev-rung{border:1px solid var(--line);border-radius:10px;padding:13px 15px;background:var(--surface)}
.ev-rung.on{border-color:var(--g-bd);background:var(--g-bg)}
.ev-rh{display:flex;align-items:center;gap:9px;font-size:14.5px}
.ev-L{font-family:var(--mono);font-size:11px;font-weight:700;color:#fff;background:var(--accent);border-radius:5px;padding:1px 6px}
.ev-dfv{font-size:11px;color:var(--muted);border:1px solid var(--line);border-radius:5px;padding:1px 7px}
.ev-done{margin-left:auto;font-size:12px;color:var(--g-ink);font-weight:600}
.ev-hint{margin:6px 0 8px}
.ev-note{width:100%;font-family:inherit}
.ev-row{display:flex;gap:8px;align-items:center;margin-top:8px}
.ev-links{flex:1}
.ev-save{white-space:nowrap}
.ck-fid{display:inline-block;margin-top:6px;font-size:11px;font-weight:600;letter-spacing:.02em;color:var(--accent-2);background:var(--accent-weak);border:1px solid var(--accent-weak);border-radius:6px;padding:2px 8px}
.ev-dim{margin:0 0 18px}
.ev-dimhead{display:flex;align-items:center;justify-content:space-between;gap:10px;margin:0 0 9px;padding-bottom:7px;border-bottom:1px solid var(--line)}
.ev-dimname{font-size:15px}
.ev-dimq{color:var(--muted);font-weight:500;font-size:13px;margin-left:4px}
.ev-dimstatus{font-size:11.5px}
.ev-dim .ev-rung{margin-bottom:10px}
.ob-expect{display:flex;flex-wrap:wrap;gap:8px;margin:2px 0 14px}
.obx{flex:1 1 150px;background:var(--surface-2);border:1px solid var(--line);border-radius:9px;padding:9px 11px}
.obx-k{font-size:10px;font-weight:700;letter-spacing:.05em;text-transform:uppercase;color:var(--faint);margin-bottom:3px}
.obx-v{font-size:12px;color:var(--text);line-height:1.4}
.ck-dfvrow{display:flex;flex-wrap:wrap;gap:6px}
.ck-dfvrow .rag{font-size:11.5px}
input[type=email],input[type=text],input[type=password],input[type=url],input[type=search],input[type=tel]{width:100%;background:var(--surface);border:1px solid var(--line);border-radius:8px;padding:11px 13px;color:var(--ink);font-size:14px;outline:none;font-family:inherit}
input[type=password]{margin-top:10px}
input:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-weak)}
.btn{cursor:pointer;border:1px solid var(--ink);background:var(--ink);color:#fff;border-radius:8px;padding:10px 16px;font-size:13.5px;font-weight:600;width:100%;margin-top:11px;font-family:inherit}
.btn:hover{background:#000}.btn:disabled{opacity:.5;cursor:default}
.btn-ghost{background:var(--surface);border-color:var(--line);color:var(--text)}
.btn-ghost:hover{border-color:var(--line-2);background:var(--surface-3)}
.link{display:inline-block;margin-top:12px;font-size:12.5px;color:var(--accent);text-decoration:none;cursor:pointer}
.msg{font-size:12.5px;margin-top:12px;padding:10px 12px;border-radius:8px;line-height:1.45}
.msg:empty{display:none}
.msg.err{background:var(--r-bg);border:1px solid var(--r-bd);color:var(--r-ink)}
.msg.ok{background:var(--g-bg);border:1px solid var(--g-bd);color:var(--g-ink)}
/* animated build indicator (generation in progress) */
.buildwrap{margin-top:12px}
.buildload{background:var(--surface-2);border:1px solid var(--line);border-radius:11px;padding:15px 17px}
.bl-head{display:flex;align-items:center;gap:9px;margin-bottom:10px}
.bl-dot{flex:none;width:9px;height:9px;border-radius:50%;background:var(--accent);animation:bl-pulse 1.1s ease-in-out infinite}
@keyframes bl-pulse{0%,100%{opacity:.35;transform:scale(.82)}50%{opacity:1;transform:scale(1.1)}}
.bl-phase{font-size:13px;font-weight:600;color:var(--ink);transition:opacity .22s ease}
.bl-bar{height:7px;border-radius:4px;background:rgba(0,0,0,.07);overflow:hidden}
.bl-fill{display:block;height:100%;background:var(--accent);border-radius:4px;transition:width .5s ease-out;position:relative;overflow:hidden}
.bl-fill::after{content:'';position:absolute;inset:0;background:linear-gradient(90deg,transparent,rgba(255,255,255,.55),transparent);animation:bl-shine 1.3s linear infinite}
@keyframes bl-shine{from{transform:translateX(-100%)}to{transform:translateX(100%)}}
.bl-sub{margin-top:7px;font-size:11px;color:var(--muted)}
.bl-skel{margin-top:14px;display:flex;flex-direction:column;gap:7px}
.bl-skrow{height:9px;border-radius:4px;width:100%;background:linear-gradient(90deg,rgba(0,0,0,.05) 25%,rgba(0,0,0,.1) 37%,rgba(0,0,0,.05) 63%);background-size:400% 100%;animation:bl-sk 1.5s ease-in-out infinite}
.bl-skrow.w85{width:85%}.bl-skrow.w70{width:70%}
.bl-skcards{display:flex;gap:8px;margin-top:5px}
.bl-skcard{flex:1;height:40px;border-radius:8px;background:linear-gradient(90deg,rgba(0,0,0,.04) 25%,rgba(0,0,0,.09) 37%,rgba(0,0,0,.04) 63%);background-size:400% 100%;animation:bl-sk 1.5s ease-in-out infinite}
@keyframes bl-sk{0%{background-position:100% 0}100%{background-position:-100% 0}}
.top{display:flex;align-items:center;gap:12px;flex-wrap:wrap;border-bottom:1px solid var(--line);padding-bottom:16px;margin-bottom:20px}
.top .meta{flex:1;min-width:240px}.top .meta .t{font-size:12px;color:var(--muted);margin-top:3px}
.st-h1{font-size:20px;line-height:1.2;margin:0}
.pill{font-size:11px;font-weight:600;padding:3px 10px;border-radius:6px;background:var(--surface-3);color:var(--muted);border:1px solid var(--line)}
.pill.warn{background:var(--a-bg);color:var(--a-ink);border-color:var(--a-bd)}
.pill.paid{background:var(--g-bg);color:var(--g-ink);border-color:var(--g-bd)}

/* checkout */
.co-grid{display:grid;grid-template-columns:1fr 1fr;gap:18px;align-items:start}
@media(max-width:680px){.co-grid{grid-template-columns:1fr}}
.co-stub{border:1px solid var(--line);border-radius:9px;padding:13px 14px;background:var(--surface-2)}
.co-stub-row{display:flex;flex-direction:column;gap:4px;margin-bottom:10px}
.co-stub-row2{display:flex;gap:12px}.co-stub-row2 .co-stub-row{flex:1}
.co-stub-lbl{font-size:10px;letter-spacing:.04em;text-transform:uppercase;color:var(--muted);font-weight:600}
.co-stub-field{font-size:13px;color:var(--faint);background:var(--surface);border:1px solid var(--line);border-radius:7px;padding:9px 11px;letter-spacing:.05em}
.co-secure{font-size:11px;color:var(--muted);margin-top:4px}
.co-note{font-size:11.5px;color:var(--muted);line-height:1.5;margin-top:10px;border-top:1px solid var(--line);padding-top:10px}
.sec{font-family:var(--mono);font-size:10.5px;letter-spacing:.07em;color:var(--muted);text-transform:uppercase;margin:22px 0 10px;font-weight:600;display:flex;align-items:center;gap:10px}
.sec::after{content:"";flex:1;border-top:1px dashed var(--line);min-width:24px}
.row{display:flex;gap:9px}.row input{flex:1}.row .btn{width:auto;margin:0;white-space:nowrap}
.empty{color:var(--muted);font-size:13px;padding:22px;text-align:center;border:1px dashed var(--line);border-radius:10px}
.item{background:var(--surface);border:1px solid var(--line);border-radius:10px;padding:12px 14px;margin-bottom:8px}
.item .ti{font-weight:600;font-size:14px;color:var(--ink)}.item .no{color:var(--muted);font-size:12.5px;margin-top:3px}
.item .meta{color:var(--faint);font-size:10.5px;margin-top:5px}
a{color:var(--accent)}

/* ============ control-room shell ============ */
.mc-shell{display:grid;grid-template-columns:264px minmax(0,1fr) var(--rail-w,296px);grid-template-rows:54px minmax(0,1fr) 30px;grid-template-areas:"top top top" "side main rail" "side status rail";height:100vh;width:100%;position:relative}
@media(max-width:1180px){.mc-shell{grid-template-columns:248px minmax(0,1fr);grid-template-areas:"top top" "side main" "side status"}.mc-rail{display:none}.rail-resize{display:none}}
/* Y.273 — drag handle on the rail divider; tracks the rail's left edge via --rail-w, lives in the non-scrolling shell */
.rail-resize{position:absolute;top:54px;bottom:0;right:var(--rail-w,296px);width:10px;margin-right:-5px;cursor:col-resize;z-index:30}
.rail-resize::before{content:"";position:absolute;left:5px;top:0;bottom:0;width:1px;background:var(--line);transition:background .12s,width .12s}
.rail-resize:hover::before,.rail-resizing .rail-resize::before{background:var(--accent);width:2px;left:4px}
.rail-resizing{user-select:none;cursor:col-resize}
.rail-resizing *{user-select:none!important}
@media(max-width:820px){
  .mc-shell{grid-template-columns:minmax(0,1fr);grid-template-areas:"top" "main" "status"}
  .mc-shell .mc-burger{display:flex}
  .mc-side{display:block;position:fixed;top:54px;left:0;bottom:0;width:264px;max-width:84vw;z-index:50;transform:translateX(-100%);transition:transform .2s ease;box-shadow:var(--shadow)}
  .mc-shell.nav-open .mc-side{transform:none}
  .mc-nav-backdrop:not([hidden]){display:block;position:fixed;inset:54px 0 0 0;background:rgba(16,24,40,.35);z-index:45}
  .mc-crumb{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:11px}
}
.mc-top{grid-area:top;display:flex;align-items:center;gap:14px;padding:0 18px;background:var(--surface);border-bottom:1px solid var(--line);position:relative;z-index:30}
.mc-burger{display:none;align-items:center;justify-content:center;width:32px;height:32px;border:1px solid var(--line);background:var(--surface);border-radius:7px;cursor:pointer;color:var(--ink);flex:none;padding:0}
.mc-burger-i{font-size:16px;line-height:1;font-style:normal}
.mc-nav-backdrop{display:none}
.mc-brand{display:flex;align-items:center;gap:9px;min-width:0}
.mc-bname{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.mc-bar{display:none}
.mc-bname{font-family:var(--mono);font-weight:700;letter-spacing:-.01em;font-size:14px;color:var(--ink)}
.mc-bdot{flex:none;width:7px;height:7px;border-radius:50%;background:var(--accent);box-shadow:0 0 9px var(--accent)}
.mc-crumb{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12px;color:var(--muted)}
.mc-avatar{width:30px;height:30px;border-radius:50%;background:var(--accent);border:none;color:var(--accent-ink);font-size:11px;font-weight:700;cursor:pointer}
.mc-menu{position:absolute;top:48px;right:14px;background:var(--surface);border:1px solid var(--line);border-radius:9px;padding:6px;z-index:40;box-shadow:var(--shadow)}
.mc-menu button{display:block;width:100%;text-align:left;background:transparent;border:none;color:var(--text);font-family:inherit;font-size:12.5px;padding:7px 14px;border-radius:6px;cursor:pointer}
.mc-menu button:hover{background:var(--surface-3)}
.mc-menu{min-width:200px}
.mc-menu-email{font-size:11px;color:var(--faint);padding:5px 14px 7px;max-width:230px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.mc-menu-sec{font-size:9.5px;letter-spacing:.06em;text-transform:uppercase;color:var(--faint);font-weight:600;padding:6px 14px 3px}
.mc-menu-div{height:1px;background:var(--line);margin:6px 4px}
.mc-menu-ws{display:flex !important;align-items:center;justify-content:space-between;gap:10px}
.mc-menu-ws.on{background:var(--surface-3)}
.mc-menu-ws .mc-ws-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.mc-menu-ws .mc-ws-role{font-size:9.5px;letter-spacing:.04em;text-transform:uppercase;color:var(--faint);flex:none}
.mc-menu-ws.on .mc-ws-role{color:var(--accent)}
.mc-side{grid-area:side;background:var(--surface-2);border-right:1px solid var(--line);overflow-y:auto;padding:14px 10px 30px}
.mc-side-h{font-size:10px;letter-spacing:.06em;text-transform:uppercase;color:var(--faint);font-weight:600;padding:4px 8px 8px}
.mc-prod{display:flex;gap:4px;margin:0 4px 10px;padding:3px;border:1px solid var(--line);border-radius:9px;background:var(--surface-2)}
.mc-prod-b{flex:1;padding:5px 8px;border:0;border-radius:6px;background:transparent;color:var(--muted);font:inherit;font-size:12px;font-weight:600;cursor:pointer}
.mc-prod-b.on{background:var(--surface);color:var(--ink);box-shadow:0 1px 2px rgba(0,0,0,.08)}
.mc-prod-b:hover:not(.on){color:var(--ink)}
.mc-tree{margin-top:6px}
.mcp-phase{margin-bottom:3px}
.mcp-head{display:flex;align-items:center;gap:8px;padding:7px 8px;border-radius:7px;cursor:pointer;user-select:none}
.mcp-head:hover{background:var(--surface-3)}
.mcp-num{flex:none;width:18px;height:18px;border-radius:5px;background:var(--accent-weak);border:1px solid var(--line);color:var(--accent-2);font-family:var(--mono);font-size:10px;font-weight:700;display:flex;align-items:center;justify-content:center}
.mcp-lbl{flex:1;min-width:0;font-size:12.5px;font-weight:600;color:var(--ink)}
.mcp-chev{font-size:10px;color:var(--faint);transition:transform .15s}
.mcp-phase.collapsed .mcp-chev{transform:rotate(-90deg)}
.mcp-phase.collapsed .mcp-steps{display:none}
.mcp-phase.search-open .mcp-steps{display:block !important}
/* Y.72 nav quick-search */
.mc-navsearch{padding:0 8px 8px}
.mc-navsearch input{width:100%;padding:6px 10px;border:1px solid var(--line);border-radius:7px;background:var(--surface);color:var(--ink);font:inherit;font-size:12px}
.mc-navsearch input:focus{outline:none;border-color:var(--accent)}
.mc-nores{padding:8px;font-size:11.5px;color:var(--muted)} /* div defaults to block when shown; drop explicit display so [hidden] can hide it */
/* Y.1149 — the concepts list now sits ABOVE the module tree, so its rule belongs on the bottom edge. */
.mc-cresults{border-bottom:1px solid var(--line);margin-bottom:8px;padding-bottom:8px}
.mc-cres-h{font-family:var(--mono);font-size:9px;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);font-weight:700;padding:2px 12px 4px}
/* Y.1147 — the ordering toggle sits IN the section header rather than above the list, so it reads as a
   property of this list and costs no vertical space in a sidebar that is already tall. Deliberately quiet
   (muted, borderless until hover): it is a preference, not an action, and it should not compete with the
   concepts themselves for attention. It brightens to the accent on hover so it is still obviously live. */
.mc-cres-h{display:flex;align-items:center;justify-content:space-between;gap:8px}
.mc-cres-sort{font-family:var(--mono);font-size:9px;letter-spacing:.05em;text-transform:uppercase;font-weight:700;color:var(--muted);background:transparent;border:1px solid transparent;border-radius:5px;padding:1px 5px;cursor:pointer;line-height:1.6}
.mc-cres-sort:hover{color:var(--accent);border-color:var(--line);background:var(--panel)}
.mc-cres-sort:focus-visible{outline:2px solid var(--accent);outline-offset:1px}
.mc-cres-b .mcp-k{color:var(--accent-2)}
.mc-cres-t{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.mc-cres-score{margin-left:auto;flex:none;font-family:var(--mono);font-size:10.5px;font-weight:700;color:var(--muted);background:var(--surface-3);border-radius:5px;padding:1px 6px}
.mc-cres-score.mc-cres-lock{color:var(--faint);background:transparent;padding:1px 2px}
.mcp-steps{padding:2px 0 6px 8px}
.mcp-step{display:flex;align-items:center;gap:8px;width:100%;text-align:left;background:transparent;border:none;font-family:inherit;font-size:12px;color:var(--faint);padding:5px 8px;border-radius:6px;cursor:pointer}
.mcp-step[data-nav],.mcp-step[data-tool]{color:var(--text)}
.mcp-step[data-nav]:hover,.mcp-step[data-tool]:hover{background:var(--surface-3);color:var(--ink)}
.mcp-step.on{background:var(--accent-weak);color:var(--accent-2);font-weight:600}
.mcp-step.home{margin:0 0 8px;font-weight:600;color:var(--text)}
.mcp-step.locked{cursor:default;color:var(--faint)}
.mcp-k{flex:none;width:14px;font-size:9.5px;font-weight:700;color:var(--faint);text-transform:uppercase}
.mcp-step.on .mcp-k{color:var(--accent)}
.mcp-lock{margin-left:auto;font-size:9px;opacity:.5;color:var(--faint)}
/* Guided build path (Y.126): per-step state + progress bar + gate hint */
.mcp-kn{width:19px}
.mcp-state{margin-left:auto;flex:none;font-size:10px;line-height:1}
.mcp-step.mcp-done .mcp-state::before{content:"✓";color:var(--ok,#2e7d32);font-weight:700}
.mcp-step.mcp-done .mcp-kn{color:var(--ok,#2e7d32)}
.mcp-step.mcp-current{color:var(--ink);font-weight:600}
.mcp-step.mcp-current .mcp-kn{color:var(--accent)}
.mcp-step.mcp-current .mcp-state::before{content:"●";color:var(--accent)}
/* Y.1223 — in the crucible right now. Written AFTER .mcp-done and .mcp-current deliberately: a step can be
   both done and running (a re-run of a finished analysis is the common case), and what you need to know then
   is that it is running. Equal specificity, so source order is the tie-break and this has to win. */
.mcp-step.mcp-forging .mcp-state::before{content:"🔥";color:var(--accent-2,var(--accent))}
.mcp-step.mcp-forging{color:var(--ink);font-weight:600}
@media (prefers-reduced-motion:no-preference){.mcp-step.mcp-forging .mcp-state::before{animation:mcpForge 1.6s ease-in-out infinite}}
@keyframes mcpForge{0%,100%{opacity:1}50%{opacity:.45}}
.mcp-step.mcp-todo .mcp-state::before{content:"○";color:var(--muted)}
.mcp-step.mcp-locked{opacity:.5}
.mcp-step.mcp-locked .mcp-state::before{content:"🔒";font-size:9px}
.mcp-step.mcp-locked:hover{background:transparent;cursor:not-allowed;color:var(--faint)}
.mc-progress{padding:6px 10px 9px}
.mc-prog-l{display:flex;justify-content:space-between;align-items:center;font-family:var(--mono);font-size:9px;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);font-weight:700;margin-bottom:5px}
.mc-prog-n{color:var(--accent)}
.mc-prog-track{height:5px;background:var(--surface-3);border-radius:3px;overflow:hidden}
.mc-prog-fill{display:block;height:100%;background:var(--accent);border-radius:3px;transition:width .4s ease}
.mc-gate-toast{position:sticky;bottom:8px;margin:8px 10px 0;padding:7px 11px;background:var(--a-bg,#fef7ec);border:1px solid var(--a-bd,#f3dfb0);color:var(--a-ink,#b54708);border-radius:8px;font-size:11px;opacity:0;transform:translateY(4px);transition:opacity .2s,transform .2s;pointer-events:none}
.mc-gate-toast.show{opacity:1;transform:translateY(0)}
.teaser-step{color:var(--text)}
.teaser-step:hover{background:var(--surface-3);color:var(--ink)}
.teaser-step.on{background:var(--accent-weak);color:var(--accent-2);font-weight:600}
.teaser-step.on .mcp-lock{color:var(--accent)}
/* concept-mode sidebar header */
.mc-concept-h{display:flex;flex-direction:column;gap:7px;padding:2px 8px 10px;margin-bottom:8px;border-bottom:1px solid var(--line)}
.mc-back-studio{align-self:flex-start;background:transparent;border:1px solid var(--line);color:var(--muted);font-family:inherit;font-size:10.5px;border-radius:6px;padding:3px 9px;cursor:pointer}
.mc-back-studio:hover{color:var(--ink);border-color:var(--line-2)}
.mc-concept-n{font-size:13px;font-weight:600;color:var(--ink);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
/* prev/next step arrows */
.mc-arrows{display:flex;gap:4px;flex:none}
.mc-arrow{width:28px;height:28px;display:flex;align-items:center;justify-content:center;border:1px solid var(--line);background:var(--surface);border-radius:7px;cursor:pointer;color:var(--ink);font-size:15px;line-height:1;padding:0}
.mc-arrow:hover{background:var(--surface-3);border-color:var(--line-2)}
@media(max-width:640px){.mc-arrows{display:none}}
/* teaser view */
.ts-sample{position:relative}
.ts-sample-tag{font-size:9.5px;letter-spacing:.04em;text-transform:uppercase;color:var(--faint);font-weight:600;margin-bottom:8px}
.ts-list{margin:0;padding-left:18px}
.ts-list li{font-size:12.5px;color:var(--muted);line-height:1.7}
.mc-main{grid-area:main;overflow-y:auto;background:var(--bg)}
/* ── Y.1191 · THE WINDOW DECIDES HOW WIDE THE CONTENT IS ────────────────────────────────────────────────
   Lars: "can we make sure the viewing window isn't artificially constrained on its width so whatever cards
   load [fit]".
   Every view sets its own max-width inline — 860, 980, 1000, 1240 — and those numbers were each chosen for
   the view that added them and then applied to a 2560px monitor. The result is a wide screen showing a
   narrow column with cards wrapping inside it while half the desktop is empty.
   The !important is the point rather than a shortcut: the inline attribute is a per-view opinion about a
   window it cannot see, and this is the rule that overrules all of them at once. One number, one place,
   reversible in one line — as against editing forty inline styles that will disagree again by next month.
   `min(…, 100%)` keeps it honest on a laptop: it never exceeds the viewport, so nothing is pushed off. */
.mc-main .wrap{max-width:min(var(--app-w),100%)!important;padding:24px 30px 60px}
.mc-main .top .btn-ghost{display:none}
.mc-main .modnav{display:none}
.mc-rail{grid-area:rail;background:var(--surface-2);border-left:1px solid var(--line);overflow-y:auto;padding:16px 14px 30px}
.mcr-card{background:var(--surface);border:1px solid var(--line);border-radius:10px;padding:12px 13px;margin-bottom:12px}
.mcr-h{font-size:12px;font-weight:600;color:var(--ink);margin-bottom:9px}
.mcr-row{display:flex;justify-content:space-between;gap:10px;padding:3px 0;font-size:11.5px}
.mcr-k{color:var(--muted)}.mcr-v{color:var(--ink);font-weight:600;text-align:right}
.mcr-person{padding:6px 0;border-top:1px solid var(--line)}
.mcr-person:first-of-type{border-top:none}
.mcr-pn{font-size:12px;font-weight:600;color:var(--ink)}
.mcr-pa{font-size:10.5px;color:var(--muted);margin-top:1px}
.mcr-review .mcr-note{font-size:11px;color:var(--muted);line-height:1.5}
.mc-status{grid-area:status;display:flex;align-items:center;gap:8px;padding:0 16px;background:var(--surface-2);border-top:1px solid var(--line);font-size:10.5px;color:var(--muted);overflow:hidden;white-space:nowrap}
.mc-stat-dot{width:7px;height:7px;border-radius:50%;background:var(--g-ink)}
.mc-stat-l{font-weight:600;color:var(--text)}
.mc-stat-sep{opacity:.5}
.mc-stat-right{margin-left:auto;color:var(--muted)}
.mc-cpick{padding:2px 8px 12px;border-bottom:1px solid var(--line);margin-bottom:10px}
.mc-cpick label{display:block;font-size:9px;letter-spacing:.06em;text-transform:uppercase;color:var(--faint);font-weight:600;margin-bottom:5px}
.mc-hpick{padding-bottom:9px;margin-bottom:9px}
.mc-hpick label{color:var(--accent-2)}
.mc-hpick select{width:100%}
.mc-cohort-edit{background:none;border:none;color:var(--faint);cursor:pointer;font-size:11px;line-height:1;padding:0 2px;margin-left:4px}
.mc-cohort-edit:hover{color:var(--accent)}
.mc-cohort-n{display:inline-block;min-width:14px;text-align:center;font-size:9.5px;font-weight:700;color:var(--muted);background:var(--line);border-radius:7px;padding:1px 5px;vertical-align:middle}
.mc-ingest-pill{position:fixed;right:18px;bottom:18px;z-index:60;display:flex;align-items:center;gap:8px;background:var(--surface);color:var(--ink);border:1px solid var(--line);border-radius:999px;padding:8px 14px;font:inherit;font-size:12.5px;font-weight:600;box-shadow:0 6px 24px rgba(0,0,0,.18);cursor:pointer}
.mc-ingest-pill:hover{border-color:var(--accent)}
.mc-ip-t{white-space:nowrap}
.mc-cpick select{width:100%;background:var(--surface);color:var(--ink);border:1px solid var(--line);border-radius:8px;padding:8px 10px;font-family:inherit;font-size:12.5px;font-weight:500;cursor:pointer}
.mc-cstep{display:flex;align-items:center;gap:6px}
.mc-cstep select{flex:1 1 auto;width:auto;min-width:0}
.mc-cstep-b{flex:none;width:30px;height:34px;display:flex;align-items:center;justify-content:center;border:1px solid var(--line);background:var(--surface);border-radius:8px;cursor:pointer;color:var(--ink);font-size:16px;line-height:1;padding:0}
.mc-cstep-b:hover:not(:disabled){background:var(--surface-3);border-color:var(--line-2)}
.mc-cstep-b:disabled{opacity:.35;cursor:default}
.mc-cstep-pos{font-family:var(--mono);font-size:10px;color:var(--faint);text-align:center;letter-spacing:.04em;margin-top:6px}
.mc-crumb-home{background:transparent;border:none;font:inherit;color:var(--muted);cursor:pointer;padding:0}
.mc-crumb-home:hover{color:var(--accent);text-decoration:underline}
.mc-crumb-cur{color:var(--ink)}
.mc-crumb-concept{color:var(--muted)}
/* Operate · Sales Deck slides (Y.113) */
.sd-deck{display:flex;flex-direction:column;gap:12px;margin-top:4px}
.sd-slide{border:1px solid var(--line);border-radius:10px;padding:14px 16px;background:var(--surface)}
.sd-h{display:flex;align-items:center;gap:8px;font-size:12px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:var(--muted);margin-bottom:8px}
.sd-n{display:inline-flex;align-items:center;justify-content:center;min-width:18px;height:18px;border-radius:5px;background:var(--accent-weak);color:var(--accent);font-size:10px;font-weight:700}
.sd-tag{font-size:18px;font-weight:600;color:var(--ink)}
.sd-b{font-size:13px;color:var(--text);line-height:1.5;margin-bottom:6px}
.sd-q{margin:6px 0;padding:8px 12px;border-left:3px solid var(--accent);background:var(--accent-weak);border-radius:0 8px 8px 0;font-style:italic;color:var(--ink)}
.sd-q cite{display:block;margin-top:4px;font-style:normal;font-size:11px;color:var(--muted)}
.sd-vps,.sd-fns{display:grid;gap:8px;grid-template-columns:1fr 1fr}
.sd-vp,.sd-fn{border:1px solid var(--line);border-radius:8px;padding:8px 10px;background:var(--surface-2)}
.sd-vp-t,.sd-fn-t{font-weight:600;font-size:12.5px;color:var(--ink);margin-bottom:3px}
.sd-vp-d,.sd-fn-d{font-size:12px;color:var(--text);line-height:1.45}
.sd-give-get{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-bottom:6px}
.sd-gg-h{font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:var(--muted);margin:6px 0 3px}
.sd-ask{margin-top:8px;padding:8px 12px;border-radius:8px;background:var(--accent-weak);color:var(--ink);font-size:13px}
@media(max-width:640px){.sd-vps,.sd-fns,.sd-give-get{grid-template-columns:1fr}}
.st-exports{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin:12px 0 4px}
.st-exports-k{font-size:10.5px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:var(--muted)}
.st-exp-b{font-family:inherit;font-size:11.5px;font-weight:600;color:var(--ink);background:var(--surface);border:1px solid var(--line);border-radius:7px;padding:5px 11px;cursor:pointer}
.st-exp-b:hover:not(:disabled){border-color:var(--accent);color:var(--accent)}
.st-exp-b:disabled{opacity:.6;cursor:default}
/* Operate · Landing Page + Social Ads (Y.113c) */
.lp-page{display:flex;flex-direction:column;gap:14px;margin-top:4px}
.lp-hero{text-align:center;padding:22px 16px;border:1px solid var(--line);border-radius:12px;background:var(--surface)}
.lp-hl{font-size:24px;font-weight:700;color:var(--ink);line-height:1.2}
.lp-sub{font-size:14px;color:var(--muted);margin-top:8px;line-height:1.5}
.lp-cta{margin-top:14px;font-family:inherit;font-size:13px;font-weight:600;color:var(--accent-ink);background:var(--accent);border:none;border-radius:8px;padding:9px 18px;cursor:default}
.lp-sec-h{font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:var(--muted);margin-bottom:8px}
.lp-props{display:grid;grid-template-columns:1fr 1fr 1fr;gap:10px}
.lp-prop,.lp-faq{border:1px solid var(--line);border-radius:8px;padding:10px 12px;background:var(--surface-2)}
.lp-prop-t,.lp-faq-q{font-weight:600;font-size:12.5px;color:var(--ink);margin-bottom:3px}
.lp-prop-d{font-size:12px;color:var(--text);line-height:1.45}
.lp-faq{margin-bottom:8px}
.lp-step{display:flex;gap:10px;align-items:flex-start;margin-bottom:8px}
.lp-step-n{flex:none;width:22px;height:22px;border-radius:50%;background:var(--accent-weak);color:var(--accent);font-size:11px;font-weight:700;display:flex;align-items:center;justify-content:center}
.lp-finalcta{text-align:center;padding:18px;border:1px solid var(--accent);border-radius:12px;background:var(--accent-weak)}
.lp-test{font-size:12px;color:var(--text);padding:8px 12px;border-left:3px solid var(--accent);background:var(--accent-weak);border-radius:0 8px 8px 0}
.ad-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:8px}
.ad-card{border:1px solid var(--line);border-radius:10px;padding:12px;background:var(--surface)}
.ad-plat{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:var(--accent);margin-bottom:6px}
.ad-hook{font-weight:600;font-size:13px;color:var(--ink);margin-bottom:5px}
.ad-headline{font-weight:600;font-size:12px;color:var(--ink);margin-top:6px}
.ad-cta{display:inline-block;margin-top:8px;font-size:11px;font-weight:600;color:var(--accent-ink);background:var(--accent);border-radius:6px;padding:3px 10px}
@media(max-width:640px){.lp-props,.ad-grid{grid-template-columns:1fr}}
/* Operate · Customer Leads (Y.113d) */
.ld-cfg{font-family:inherit;font-size:11px;font-weight:600;color:var(--accent);background:var(--accent-weak);border:1px solid var(--accent);border-radius:6px;padding:2px 9px;margin-left:8px;cursor:pointer}
.ld-targets{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-bottom:8px}
.ld-target{border:1px solid var(--line);border-radius:10px;padding:12px;background:var(--surface)}
.ld-target-h{font-weight:600;font-size:13px;color:var(--ink);margin-bottom:4px}
.ld-b{font-size:12px;color:var(--text);line-height:1.45;margin:4px 0}
.ld-xray{margin-top:8px;background:var(--surface-2);border:1px solid var(--line);border-radius:8px;padding:8px}
.ld-xray code{display:block;font-family:var(--mono);font-size:11px;color:var(--ink);word-break:break-word;white-space:pre-wrap}
.ld-xray-a{display:flex;gap:6px;margin-top:6px}
.ld-btn{font-family:inherit;font-size:11px;font-weight:600;color:var(--accent);background:transparent;border:1px solid var(--accent);border-radius:6px;padding:3px 10px;cursor:pointer;text-decoration:none;display:inline-block}
.ld-btn:hover{background:var(--accent);color:var(--accent-ink)}
.ld-add{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-bottom:8px}
.ld-add input{flex:1;min-width:120px;padding:7px 10px;border:1px solid var(--line);border-radius:8px;background:var(--surface);color:var(--ink);font:inherit;font-size:12px}
.ld-import summary{font-size:12px;color:var(--accent);cursor:pointer}
.ld-email{font-size:12px;color:var(--ink)}
.ld-row-a{display:flex;gap:6px;margin-top:4px}
.ld-mini{font-family:inherit;font-size:10.5px;font-weight:600;color:var(--muted);background:transparent;border:1px solid var(--line);border-radius:6px;padding:2px 8px;cursor:pointer;text-decoration:none}
.ld-mini:hover{color:var(--accent);border-color:var(--accent)}
.ld-status{font:inherit;font-size:11.5px;padding:4px 6px;border:1px solid var(--line);border-radius:6px;background:var(--surface);color:var(--ink)}
.ld-note{width:100%;min-width:90px;padding:4px 6px;border:1px solid transparent;border-radius:6px;background:transparent;color:var(--text);font:inherit;font-size:12px}
.ld-note:focus{border-color:var(--line);background:var(--surface);outline:none}
.ld-step{border:1px solid var(--line);border-radius:10px;padding:10px 12px;background:var(--surface);margin-bottom:8px}
.ld-step-h{display:flex;align-items:center;gap:8px;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.03em;color:var(--muted);margin-bottom:6px}
.ld-step-n{flex:none;width:18px;height:18px;border-radius:5px;background:var(--accent-weak);color:var(--accent);font-size:10px;font-weight:700;display:flex;align-items:center;justify-content:center}
@media(max-width:640px){.ld-targets{grid-template-columns:1fr}}
/* SBIR / STTR (Y.117) */
.sbir-h{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:4px}
.sbir-topic{font-weight:600;font-size:13px;color:var(--ink)}
.sbir-fit{margin:6px 0;padding:8px 10px;border-radius:8px;background:var(--surface-2);border:1px solid var(--line)}

/* concept cockpit */
.ck-back{background:transparent;border:1px solid var(--line);color:var(--muted);font-family:inherit;font-size:11.5px;border-radius:7px;padding:5px 11px;cursor:pointer;margin-bottom:12px}
.ck-back:hover{color:var(--ink);border-color:var(--line-2)}
.ck-origin{font-size:11.5px;color:var(--muted);background:var(--surface-2);border:1px solid var(--line);border-radius:7px;padding:5px 11px;margin-bottom:10px;display:inline-block}
.ck-origin b{color:var(--ink);font-weight:600}
.ck-headline{font-size:15px;color:var(--ink);font-weight:600;line-height:1.5;margin-bottom:10px}
.ck-tagline{font-size:13px;color:var(--accent-2);font-weight:600;line-height:1.35;margin:2px 0 1px}
.ck-tagline:empty{display:none}
.ck-xref{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:8px}
.ck-x{text-align:left;background:var(--surface);border:1px solid var(--line);border-radius:10px;padding:11px 13px;cursor:pointer;font-family:inherit}
.ck-x:hover{border-color:var(--line-2);box-shadow:var(--shadow-sm)}
.ck-x-v{font-size:15px;font-weight:600;letter-spacing:-.01em;color:var(--ink);line-height:1.1}
.ck-x-v.q-g.txt,.ck-x-v.d-g.txt{color:var(--g-ink)}.ck-x-v.q-a.txt,.ck-x-v.d-a.txt{color:var(--a-ink)}.ck-x-v.q-i.txt,.ck-x-v.d-i.txt{color:var(--i-ink)}.ck-x-v.q-r.txt,.ck-x-v.d-r.txt{color:var(--r-ink)}
.ck-x-l{font-size:11px;font-weight:600;color:var(--text);margin-top:5px}
.ck-x-s{font-size:10px;color:var(--muted);margin-top:2px}
.ck-pick{display:flex;align-items:center;gap:16px;cursor:pointer;text-align:left;font-family:inherit;width:100%}
.ck-pick-main{flex:1 1 auto;min-width:0}
.ck-pick-score{flex:none;display:flex;align-items:center;gap:8px}
.ib-scorecol{flex:none;display:flex;flex-direction:column;align-items:center;gap:5px}
.ck-pick:hover{border-color:var(--line-2);box-shadow:var(--shadow-sm)}
.ck-pick-tags{margin-top:9px;display:flex;gap:6px;flex-wrap:wrap}
.ck-paid{font-size:9px;letter-spacing:.03em;text-transform:uppercase;font-weight:700;color:var(--accent-2);background:var(--accent-weak);border:1px solid var(--i-bd);border-radius:4px;padding:1px 6px;vertical-align:middle;margin-left:6px}
/* provenance chip (Y.57): what a section's content IS — AI read vs evidence-checked */
.ck-prov{font-size:9px;letter-spacing:.03em;text-transform:uppercase;font-weight:700;color:var(--muted);background:var(--surface-2);border:1px solid var(--line);border-radius:4px;padding:1px 6px;vertical-align:middle;margin-left:6px}
.ck-prov.ok{color:var(--g-ink);border-color:var(--g-ink)}
/* Y.303 re-run gating: staleness banner / up-to-date states */
.ck-stale{border:1px solid var(--a-ink,#A07700);background:var(--a-bg,#FFF8E6);border-radius:10px;padding:12px 14px;margin:14px 0}
.ck-stale-h{font-weight:700;color:var(--a-ink,#A07700);font-size:13px;margin-bottom:4px}
.ck-stale-b{font-size:12.5px;line-height:1.5}
.ck-stale-go,.ck-stale-ev-dd{width:auto;margin:10px 0 0;padding:7px 14px;font-size:12.5px}
.ck-fresh{font-size:12px;color:var(--ok,#2e7d32);margin:12px 0;opacity:.9}
/* Y.1071 — "fold in learnings": the report set drifting out of agreement with itself. Not an alarm (nothing is
   wrong with what you entered) — an offer, so it reads as accent, not amber. */
.ck-fold{border:1px solid var(--accent,#2A5BD7);background:var(--accent-soft,rgba(42,91,215,.06));border-radius:10px;padding:12px 14px;margin:12px 0}
.ck-fold-h{font-weight:700;color:var(--accent,#2A5BD7);font-size:13px;margin-bottom:4px}
.ck-fold-b{font-size:12.5px;line-height:1.5}
.ck-fold-go{width:auto;margin:10px 8px 0 0;padding:7px 14px;font-size:12.5px}
/* Y.1046 — evidence-class staleness is ADDITIVE (files ground future runs; the report stands): calm accent, not amber alarm. */
.ck-stale-ev{border-color:var(--accent,#2A5BD7);background:var(--accent-soft,rgba(42,91,215,.07))}
.ck-stale-ev .ck-stale-h{color:var(--accent,#2A5BD7)}
/* Y.1053 — the two numbers, reconciled in one strip: opportunity (how good the idea is) vs case strength (how well built the record is). */
/* Y.1262 — `grid-template-columns:auto 1fr` let the number column take whatever it wanted and squeezed the
   sentence beside it into a nine-word ribbon. Two equal halves instead: the headline gets room to be a
   headline, and the paragraph gets a readable measure rather than the remainder. */
.ck-recon{display:grid;grid-template-columns:1fr 1fr;align-items:center;gap:22px;border:1px solid var(--line);border-radius:12px;padding:16px 18px;margin:6px 0 10px;font-size:13px;line-height:1.55}
.ck-recon-n{font-size:56px;font-weight:800;line-height:1;display:flex;flex-direction:column;align-items:center;text-align:center}
/* Y.1274 — the pair on one line, so each tier colour has its number beside it and its word beneath it. */
.ck-recon-pair{display:flex;align-items:baseline;gap:9px;white-space:nowrap}
.ck-recon-slash{color:var(--faint);font-weight:400;font-size:.62em;line-height:1}
/* The qualifier is a caption, not a footnote: it carries "validated" and "potential", which are the two
   words that stop 46 and 71 reading as the same kind of number. */
.ck-recon-of{font-size:15px;font-weight:600;color:var(--muted);letter-spacing:.01em;margin-top:9px;line-height:1.35}
.ck-recon-of b{font-weight:800}
.ck-recon-l{color:var(--muted)}
.ck-recon-l b{color:var(--ink)}
@media (max-width:820px){.ck-recon{grid-template-columns:1fr;gap:12px}.ck-recon-n{flex-direction:row;flex-wrap:wrap;gap:10px;align-items:baseline;font-size:40px}.ck-recon-of{margin-top:0}}
/* Y.1088 — the hub canvas: chart first, explanation on demand. The "?" sits in the corner so the ring can use
   the full width instead of being squeezed by a paragraph that describes it. */
.ssx-canvas{position:relative;display:flex;flex-direction:column;align-items:center;gap:10px;margin:6px 0 14px;padding:20px 18px 14px;border:1px solid var(--line);border-radius:16px}
.ssx-help{position:absolute;top:10px;right:12px;z-index:2;background:var(--surface);border:1px solid var(--line);border-radius:999px;padding:4px 11px;font:inherit;font-size:11.5px;color:var(--muted);cursor:pointer;transition:border-color .15s ease,color .15s ease}
.ssx-help:hover{border-color:var(--accent,#2A5BD7);color:var(--accent,#2A5BD7)}
.ssx-howto{max-width:680px;font-size:12.5px;line-height:1.6;color:var(--muted);border-top:1px solid var(--line);padding-top:10px;margin-top:2px}
.ssx-howto b{color:var(--ink)}
@media (max-width:820px){.ssx-help{position:static;align-self:flex-end}}
/* Y.1052 — a field's wedge and its chip are one control: hovering either lights both. */
.ssx-i-hot{border-color:var(--accent,#2A5BD7)!important;box-shadow:0 0 0 2px var(--accent-soft,rgba(42,91,215,.18));transform:translateY(-1px)}
.ssx-i{transition:box-shadow .15s ease,border-color .15s ease,transform .15s ease}
.ssx-seg-hot{filter:drop-shadow(0 0 6px currentColor) brightness(1.06)}
@media (prefers-reduced-motion: reduce){.ssx-i,.ssx-i-hot{transition:none;transform:none}}
/* Y.1051 — queued background build: a live status line on the board (retrying, resumable) instead of a modal dead-end. */
.cb-job{display:flex;align-items:center;gap:9px;flex-wrap:wrap;font-size:12.5px;line-height:1.45;border:1px solid var(--line);border-radius:10px;padding:9px 12px;margin:0 0 12px}
.cb-job-run{border-color:var(--accent,#2A5BD7);background:var(--accent-soft,rgba(42,91,215,.07))}
.cb-job-idle{border-style:dashed;color:var(--muted)}
.cb-job .btn{margin-left:auto}
/* Y.1050 — inferred (text-matched) placements read as proposals, never as provenance. */
.cb-pick-inf{text-decoration:underline dotted currentColor}
.cb-unplaced:hover{border-color:var(--accent,#2A5BD7);color:var(--accent,#2A5BD7)}
/* Y.1048 — the real-time dependency coach: a fixed bar after a Field Tray save naming what the edit touches,
   with the countdown-to-covered-refresh (refine) or the review nudge (pivot/broad/evidence). */
.ck-coach{position:fixed;left:50%;bottom:18px;transform:translateX(-50%);z-index:1200;display:flex;align-items:center;gap:10px;max-width:min(680px,calc(100vw - 28px));padding:10px 14px;border:1px solid var(--accent,#2A5BD7);border-radius:12px;background:var(--surface,#fff);box-shadow:0 10px 30px rgba(0,0,0,.18);animation:ckCoachIn .28s ease}
.ck-coach-i{font-size:16px;flex:none}
.ck-coach-t{font-size:12.5px;line-height:1.45;min-width:0}
.ck-coach .ck-run{width:auto;margin:0;padding:6px 12px;font-size:12px;flex:none}
@keyframes ckCoachIn{from{opacity:0;transform:translate(-50%,10px)}to{opacity:1;transform:translate(-50%,0)}}
@media (prefers-reduced-motion: reduce){.ck-coach{animation:none}}
@media (max-width:820px){.ck-coach{flex-wrap:wrap;bottom:10px}}
.ck-uptodate{display:inline-flex;align-items:center;gap:6px;padding:7px 13px;font-size:12px;font-weight:600;border-radius:8px;border:1px solid var(--ok,#2e7d32);color:var(--ok,#2e7d32);background:transparent;white-space:nowrap}
/* Y.304 drip delivery banner */
.ck-drip{border:1px solid var(--accent);background:var(--accent-weak);border-radius:10px;padding:13px 15px;margin:14px 0}
.ck-drip-h{font-weight:700;color:var(--accent-2);font-size:13.5px;margin-bottom:5px}
.ck-drip-b{font-size:12.5px;line-height:1.55;margin-bottom:9px}
.ck-drip-bar{height:6px;border-radius:99px;background:var(--surface-3,rgba(127,127,127,.2));overflow:hidden}
.ck-drip-bar>span{display:block;height:100%;background:var(--accent);border-radius:99px;transition:width .4s}
.ck-secbar{display:inline-block;width:64px;height:5px;border-radius:99px;background:var(--surface-3,rgba(127,127,127,.2));overflow:hidden;vertical-align:middle;margin-right:6px}
.ck-secbar>span{display:block;height:100%;background:var(--accent);border-radius:99px;transition:width .8s linear}
/* Y.313: CTAs locked while a build is running */
.cta-locked{opacity:.45;cursor:not-allowed;pointer-events:none}
/* Y.315: Solution & Feasibility — the earned v1 hypothesis hero */
.sol-hero{border:1px solid var(--accent);border-radius:10px;padding:14px 16px;background:var(--surface-2,rgba(127,127,127,.05))}
.sol-hero-k{font-size:11px;text-transform:uppercase;letter-spacing:.06em;color:var(--accent);font-weight:700;margin-bottom:6px}
.sol-hero-h{font-size:16px;line-height:1.45;font-weight:600}
.sol-kind{display:inline-block;padding:1px 7px;border-radius:99px;background:var(--accent);color:var(--accent-ink);font-size:10px;text-transform:lowercase;letter-spacing:0;vertical-align:middle;font-weight:600}
.sol-conf{margin-top:8px;font-size:12px;font-weight:600}
/* Y.316: 24-month startup model */
.sm-kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(118px,1fr));gap:8px;margin:4px 0}
.sm-kpi{border:1px solid var(--border,rgba(127,127,127,.22));border-radius:8px;padding:8px 10px;background:var(--surface-2,rgba(127,127,127,.04))}
.sm-kpi-k{font-size:10px;text-transform:uppercase;letter-spacing:.05em;color:var(--muted)}
.sm-kpi-v{font-size:17px;font-weight:700;margin-top:2px;font-variant-numeric:tabular-nums}
.sm-kpi-s{font-size:10.5px;color:var(--muted);margin-top:1px}
.sm-path{border-left:3px solid var(--accent);padding:8px 12px;margin:10px 0;background:var(--surface-2,rgba(127,127,127,.04));border-radius:0 8px 8px 0}
.sm-path-k{font-size:10px;text-transform:uppercase;letter-spacing:.05em;color:var(--accent);font-weight:700}
.sm-path-r{font-size:12px;margin-top:4px;line-height:1.45}
.sm-banner{border-left:3px solid var(--a-ink);font-size:11.5px}
.sm-src{font-weight:400;font-size:10.5px;color:var(--muted);text-transform:none;letter-spacing:0}
.sm-proj-wrap{overflow-x:auto;border:1px solid var(--border,rgba(127,127,127,.2));border-radius:8px;margin-top:6px}
.sm-proj{border-collapse:collapse;font-size:11px;white-space:nowrap;font-variant-numeric:tabular-nums;min-width:100%}
.sm-proj th,.sm-proj td{padding:4px 9px;text-align:right;border-bottom:1px solid var(--border,rgba(127,127,127,.12))}
.sm-proj thead td,.sm-proj thead th{color:var(--muted);font-weight:600;position:sticky;top:0;background:var(--bg,var(--surface,#fff))}
.sm-proj tbody th{text-align:left;position:sticky;left:0;background:var(--bg,var(--surface,#fff));font-weight:600;z-index:1}
.sm-neg{color:var(--r-ink)}
/* Y.318 — Overview hook vs Deep Diligence console (focus split) */
.ck-focus-ov .ck-only-dd{display:none}
.ck-focus-dd .ck-only-ov{display:none}
/* Y.390 — Deep Diligence console decluttered: these blocks (readiness/score summary, recal baseline, derived-from,
   headline, score trajectory, outcome + monitoring, concept-detail + deal-killers) live on the Concept Brief now and
   are hidden everywhere on the cockpit; the founders/industry identity strip moved to the brief (.ck-only-ov). */
.ck-hidden{display:none!important}
.ck-idstrip{margin-bottom:8px}
/* Y.380 — Investor Memo (killmemo) + NISI Stage Tracker (readiness) are EXTRACTED views: hide BOTH the brief and the
   full Deep Diligence console; the auto-opened report panel becomes the whole page. Deep Diligence keeps the console. */
.ck-focus-report .ck-only-ov{display:none}
/* Y.391 — report focus (Investor Memo / NISI / A Stronger Version) shows ONLY the mounted #ck-panel. We can't just
   hide the whole .ck-only-dd console wrapper, because #ck-panel lives INSIDE it and a display:none parent would hide
   the panel too (the Stronger Version came up blank). Keep the wrapper laid out, hide its other children, show the panel. */
.ck-focus-report .ck-only-dd>*{display:none}
.ck-focus-report .ck-only-dd>#ck-panel{display:block}
.ck-focus-report .dilpanel{margin-top:0}
.ck-teaser{border:1px solid var(--border,rgba(127,127,127,.25));border-radius:10px;padding:14px 16px;margin:14px 0;background:var(--surface-2,rgba(127,127,127,.04))}
.ck-teaser-h{font-weight:700;font-size:13px;margin-bottom:6px}
.ck-teaser-b{font-size:12.5px;line-height:1.5;color:var(--muted)}
.ck-stop{background:var(--r-ink,#c0392b)!important;border-color:var(--r-ink,#c0392b)!important;color:#fff!important}
.ck-stopnow{background:transparent!important;color:var(--r-ink,#c0392b)!important;border:1px solid var(--r-ink,#c0392b)!important}
/* IBISWorld-style free brief: real headline bits + paywalled (blurred) depth */
.ck-brief{border:1px solid var(--accent);border-radius:10px;padding:16px 18px;margin:14px 0;background:var(--surface-2,rgba(127,127,127,.04))}
.ck-brief-h{font-weight:700;font-size:14px;margin-bottom:10px}
.ck-brief-sub{font-weight:400;font-size:11px;color:var(--muted);margin-left:6px}
.ck-brief-row{display:grid;grid-template-columns:128px 1fr;gap:10px;padding:9px 0;border-top:1px solid var(--border,rgba(127,127,127,.14));align-items:baseline}
.ck-brief-k{font-size:11px;text-transform:uppercase;letter-spacing:.04em;color:var(--muted);font-weight:600}
.ck-brief-v{font-size:13px;line-height:1.5}
.ck-brief-score{font-size:22px;font-weight:800}
/* Concept Brief verdict header — gauge + Slag→Hardened word + dimension bars (mirrors the landing read card) */
.ck-verdict{border:1px solid var(--line);border-radius:12px;background:var(--surface-2);margin:6px 0 16px;overflow:hidden}
.ck-vtop{display:grid;grid-template-columns:auto 1fr auto;gap:clamp(16px,3vw,28px);align-items:center;padding:clamp(16px,2.5vw,24px)}
.ck-gauge{width:114px;height:114px;flex:none}
.ck-gauge .ck-g-track{stroke:var(--line-2)}
.ck-gauge .ck-g-val{stroke:var(--accent);filter:drop-shadow(0 0 6px var(--accent-glow))}
.ck-gauge .ck-g-num{font-family:var(--serif);font-weight:600;fill:var(--ink)}
.ck-gauge .ck-g-den{font-family:var(--font);fill:var(--faint)}
.ck-vlabel{font-size:10px;letter-spacing:.16em;text-transform:uppercase;color:var(--faint);margin-bottom:6px}
.ck-vword{font-family:var(--serif);font-weight:600;font-size:clamp(23px,3vw,31px);letter-spacing:.01em;color:var(--accent);line-height:1;margin-bottom:7px}
.ck-vgloss{font-size:13.5px;color:var(--text);line-height:1.5;margin:0}
.ck-vbars{border-top:1px solid var(--line);padding:14px clamp(16px,2.5vw,24px);display:flex;flex-direction:column;gap:11px}
.ck-dim{display:grid;grid-template-columns:108px 1fr 34px;align-items:center;gap:12px;font-size:11.5px}
.ck-dim .ck-d-name{color:var(--muted);letter-spacing:.03em}
.ck-dim .ck-d-track{height:6px;background:var(--line-2);border-radius:3px;overflow:hidden}
.ck-dim .ck-d-fill{display:block;height:100%;background:linear-gradient(90deg,var(--accent),var(--accent-hot));border-radius:3px}
.ck-dim .ck-d-val{color:var(--ink);text-align:right;font-variant-numeric:tabular-nums;font-weight:600}
.ck-dim.ck-dim-locked .ck-d-fill,.ck-dim.ck-dim-locked .ck-d-val{filter:blur(3.5px);opacity:.7}
/* Y.440 — the 8 readiness dimensions grouped under their axis (executive overlay); Confidence is the orthogonal evidence axis */
.ck-vaxis{display:flex;flex-direction:column;gap:8px}
.ck-vaxhead{display:flex;align-items:baseline;justify-content:space-between;gap:10px}
.ck-vax-name{font-family:var(--serif);font-style:italic;font-size:14.5px;color:var(--ink);font-weight:600}
.ck-vax-val{font-variant-numeric:tabular-nums;font-weight:700;font-size:15px;color:var(--accent)}
.ck-vaxis .ck-dim{grid-template-columns:150px 1fr 34px;font-size:11px;gap:10px}
.ck-vaxis .ck-dim .ck-d-name{padding-left:9px;border-left:2px solid var(--line-2);line-height:1.25}
.ck-vconf{display:flex;flex-direction:column;gap:9px;border-top:1px dashed var(--line);padding-top:11px}
.ck-vconf .ck-dim{grid-template-columns:150px 1fr 34px;font-size:11px;gap:10px}
.ck-vconf .ck-d-track{height:6px;background:var(--line-2);border-radius:3px;overflow:hidden}
.ck-vconf .ck-d-track-conf .ck-d-fill{display:block;height:100%;background:var(--accent-hot);border-radius:3px}
.ck-vconf .ck-d-val{color:var(--accent);text-align:right;font-variant-numeric:tabular-nums;font-weight:700;font-size:15px}
@media(max-width:560px){.ck-vtop{grid-template-columns:1fr;justify-items:center;text-align:center}.ck-vaxis .ck-dim,.ck-vconf{grid-template-columns:140px 1fr 34px}}
.ck-brief-u{color:var(--muted);font-size:12px;margin-left:1px}
.ck-lockrow{display:inline-block;margin-left:10px;font-size:11.5px;color:var(--muted)}
.ck-lockline{font-size:12.5px;margin-top:3px}
.ck-blur{filter:blur(4.5px);user-select:none;opacity:.8;pointer-events:none}
.ck-lockchip{display:inline-block;font-size:10px;padding:1px 7px;border-radius:99px;background:var(--accent);color:var(--accent-ink);font-weight:600;vertical-align:middle;margin-left:4px}
.ck-brief-toc{display:grid;grid-template-columns:128px 1fr;gap:10px;padding:10px 0 2px;border-top:1px solid var(--border,rgba(127,127,127,.14))}
.ck-toc{margin:0;padding-left:16px;columns:2;font-size:12px;color:var(--muted)}
.ck-toc li{margin:2px 0}
.ck-brief-sec{font-size:11px;text-transform:uppercase;letter-spacing:.05em;color:var(--accent);font-weight:700;margin:14px 0 8px;padding-top:11px;border-top:1px solid var(--border,rgba(127,127,127,.18))}
.ck-brief-sec .ck-brief-sub{color:var(--muted)}
/* Y.596 — the 3 stronger directions rendered in full on the brief (Sharper angle · Stronger version · Better pivot) */
.ck-sv-cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(215px,1fr));gap:10px;margin-top:10px}
.ck-sv-card{border:1px solid var(--line,rgba(127,127,127,.25));border-radius:10px;padding:11px 13px;background:var(--surface,transparent)}
.ck-sv-h{display:flex;justify-content:space-between;align-items:baseline;gap:8px;margin-bottom:5px}
.ck-sv-lbl{font-size:10px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--muted)}
.ck-sv-t{font-size:13px;color:var(--ink);display:block;line-height:1.35}
.ck-brief .ccard{margin:2px 0 4px}
.ck-brief-secdiv{font-size:12px;font-weight:800;margin:16px 0 6px;padding-top:12px;border-top:2px solid var(--accent)}
.ck-brief-secdiv .ck-brief-sub{font-weight:400}
.ck-brief .ck-brief-v{margin:1px 0}
.ck-brief-lead{font-size:13px;line-height:1.5;margin:4px 0 4px}
.ck-brief-id{font-size:11.5px;color:var(--muted);margin:0 0 4px}
.ck-subrow{font-size:12.5px;line-height:1.55;padding:2px 0}
.ck-subk{font-weight:700}
/* Y.395 — IBISWorld-style bulleted brief sections + per-section detail links */
.ck-subrow-bul{padding:4px 0 6px}
.ck-subrow-bul .ck-subk{display:block;margin-bottom:3px}
.ck-bullets{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:3px}
.ck-bullets li{position:relative;padding-left:14px;font-size:12.5px;line-height:1.45;color:var(--text)}
.ck-bullets li::before{content:'▸';position:absolute;left:1px;color:var(--accent);opacity:.7;font-size:11px}
.ck-bullets li.ck-bul-lk::before{opacity:.3}
.ck-bul-more{margin-top:5px;padding-left:14px}
.ck-secmore{margin:4px 0 2px;padding-left:0}
.ck-secmore-a{background:none;border:0;color:var(--accent);font:inherit;font-size:12px;cursor:pointer;padding:1px 0;opacity:.8}
.ck-secmore-a:hover{opacity:1;text-decoration:underline}
.ck-brief-secnote{font-size:12px;color:var(--muted);margin:12px 0 4px;font-style:italic}
.ck-subdone{color:var(--ok,#16a34a);font-weight:600;font-size:12px}
.ck-subgo{background:none;border:none;color:var(--accent);font-weight:600;cursor:pointer;padding:0;font:inherit;font-size:12px;text-decoration:underline}
.ck-brief-title{font-size:18px;font-weight:800;line-height:1.25;margin-bottom:2px}
.ck-brief-tagline{font-size:13px;color:var(--accent);font-weight:600;margin:0 0 4px}
.ck-actions{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:4px}
.ck-run{cursor:pointer;font-family:inherit;font-size:11.5px;font-weight:600;color:var(--accent-ink);background:var(--accent);border:1px solid var(--accent);border-radius:8px;padding:8px 14px}
.ck-run:hover{background:var(--accent-2)}
.ck-run:disabled{opacity:.55;cursor:default}
.ck-checklist{display:flex;flex-direction:column;margin:8px 0 4px;border:1px solid var(--line);border-radius:10px;overflow:hidden}
.ck-ck-row{display:flex;align-items:center;gap:10px;padding:9px 13px;background:var(--surface);font-size:12.5px;border-top:1px solid var(--line)}
.ck-ck-row:first-child{border-top:none}
.ck-ck-i{font-family:var(--mono);font-size:12px;width:14px;text-align:center;color:var(--faint);flex:none}
.ck-ck-name{flex:1;min-width:0;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ck-ck-status{flex:none;font-family:var(--mono);font-size:10.5px;font-weight:700;letter-spacing:.02em;color:var(--muted);display:flex;align-items:center;gap:5px}
.ck-ck-row.ck-done{cursor:pointer}
.ck-ck-row.ck-done:hover{background:var(--surface-3)}
.ck-ck-row.ck-done .ck-ck-i{color:var(--ok,#2e7d32)}
.ck-ck-row.ck-done .ck-ck-status{color:var(--accent)}
.ck-ck-row.ck-running{background:var(--accent-weak)}
.ck-ck-row.ck-running .ck-ck-i,.ck-ck-row.ck-running .ck-ck-status{color:var(--accent-2)}
.ck-ck-row.ck-queued{opacity:.6}
/* Y.1224 — the "when" on a finished row. Quiet enough that it does not compete with the status it qualifies,
   legible enough to compare against another window at a glance. */
.ck-when{color:var(--muted);font-weight:400;font-size:10.5px;margin-left:4px;cursor:help}
.ck-lastdd{font-size:11.5px;color:var(--muted);margin:0 0 8px;cursor:help}
.ck-ck-row.ck-idle{opacity:.5}
.ck-ck-row.ck-slow{background:var(--a-bg)}
.ck-ck-row.ck-slow .ck-ck-status{color:var(--a-ink)}
.ck-ck-row.ck-skipped .ck-ck-i,.ck-ck-row.ck-skipped .ck-ck-status{color:var(--a-ink,#A07700)}
.ck-ck-row.ck-skipped .ck-ck-status{cursor:help}
.ck-rerun{font:inherit;font-size:10.5px;font-weight:600;color:var(--accent-2);background:transparent;border:1px solid var(--line);border-radius:5px;padding:1px 7px;margin-left:8px;cursor:pointer;white-space:nowrap}
.ck-rerun:hover{border-color:var(--accent);color:var(--accent)}
/* Idea Bank (Y.143) */
/* Y.697 — the composer is ONE card: seamless textarea, fold-out detail grid, a footer action rail.
   Focus anywhere inside lights the whole card. hidden works because nothing inline overrides display. */
.ib-intake{margin:0 0 16px;border:1px solid var(--line);border-radius:12px;background:var(--surface);overflow:hidden;transition:border-color .15s, box-shadow .15s}
.ib-intake:focus-within{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-weak)}
.ib-intake textarea{display:block;width:100%;border:0;background:transparent;color:var(--ink);font:inherit;font-size:14px;padding:14px 16px 10px;resize:vertical;line-height:1.55;min-height:56px}
.ib-intake textarea:focus{outline:none}
.ib-detail{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;padding:10px 12px;border-top:1px dashed var(--line)}
.ib-detail[hidden]{display:none}
.ib-detail input{width:100%;border:1px solid var(--line);border-radius:8px;background:var(--surface);color:var(--ink);font:inherit;font-size:12.5px;padding:8px 10px}
.ib-detail .ib-span{grid-column:1/-1}
@media (max-width:760px){.ib-detail{grid-template-columns:1fr}}
.ib-foot{display:flex;align-items:center;gap:8px;flex-wrap:wrap;padding:8px 12px;border-top:1px solid var(--line);background:var(--surface-2)}
.ib-foot .ck-run{width:auto;margin:0;margin-left:auto;padding:8px 16px}
.ib-foot-note{flex:1;min-width:140px;text-align:right;font-size:11px;color:var(--muted);padding-right:4px}
.ib-statusline{margin:0;padding:6px 12px 10px}
.ib-dot{color:var(--muted)}
/* Y.676 — journal day headers: Today / Yesterday / dates, with a per-day count */
.ib-day{display:flex;align-items:baseline;gap:8px;margin:14px 0 2px;font-size:12px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:var(--muted)}
.ib-day:first-of-type{margin-top:2px}
.ib-day::after{content:"";flex:1;border-top:1px solid var(--line)}
.ib-dayn{font-weight:400;font-size:11px}
.ib-list{display:flex;flex-direction:column;gap:8px}
.ib-card{display:flex;align-items:flex-start;gap:12px;border:1px solid var(--line);border-radius:10px;padding:10px 12px;background:var(--surface)}
.ib-card.ib-st-parked{opacity:.55}
.ib-card.ib-st-promoted{border-color:var(--accent)}
.ib-score{flex:none;width:42px;height:42px;border-radius:9px;display:flex;align-items:center;justify-content:center;font-weight:700;font-size:16px;font-family:var(--mono);background:var(--accent-weak);color:var(--ink)}
.ib-score.ib-pending{color:var(--muted);font-size:13px}
.ib-main{flex:1 1 auto;min-width:0}
.ib-text{font-size:13.5px;color:var(--ink);font-weight:500;line-height:1.4}
.ib-meta{display:flex;align-items:baseline;gap:8px;margin-top:4px;flex-wrap:wrap}
.ib-why{font-size:11.5px;color:var(--muted);line-height:1.4}
.ib-sub{font-size:11px;color:var(--faint);margin-top:5px}
.ib-statusw{text-transform:uppercase;letter-spacing:.04em;font-weight:600}
.ib-link{background:none;border:none;color:var(--accent-2);cursor:pointer;font:inherit;font-size:11px;padding:0}
.ib-link:hover{color:var(--accent)}
.ib-acts{flex:none;display:flex;align-items:center;gap:5px;flex-wrap:wrap;max-width:210px;justify-content:flex-end}
.ib-act{font:inherit;font-size:11px;font-weight:600;color:var(--ink);background:var(--surface);border:1px solid var(--line);border-radius:6px;padding:4px 8px;cursor:pointer;white-space:nowrap}
.ib-act:hover{border-color:var(--accent);color:var(--accent)}
.ib-promote{color:var(--accent-2);border-color:var(--accent-weak)}
.ib-del:hover{border-color:var(--r-ink,#b3261e);color:var(--r-ink,#b3261e)}
/* Outcome Calibration (Y.145) */
.cal2{border:1px solid var(--line);border-radius:10px;padding:14px;background:var(--surface);margin:0 0 16px}
.cal2-top{display:flex;align-items:center;gap:14px}
.cal2-auc{flex:none;min-width:74px;height:54px;display:flex;align-items:center;justify-content:center;font-family:var(--mono);font-weight:700;font-size:24px;border-radius:9px;background:var(--accent-weak);color:var(--ink)}
.cal2-lbl{font-size:13px;color:var(--ink)}
.cal2-mini{font-size:11.5px;color:var(--muted);margin-top:3px}
.cal-table .cl-num{text-align:left}
.cal-status{background:var(--surface);color:var(--ink);border:1px solid var(--line);border-radius:7px;padding:5px 8px;font:inherit;font-size:12px;cursor:pointer;max-width:230px}
.cal-note{width:100%;min-width:160px;background:var(--surface);color:var(--ink);border:1px solid var(--line);border-radius:7px;padding:5px 8px;font:inherit;font-size:12px}
.cal-row.cal-pos{box-shadow:inset 3px 0 0 var(--g-ink,#2e7d32)}
.cal-row.cal-neg{box-shadow:inset 3px 0 0 var(--r-ink,#b3261e)}
.cal-research{font:inherit;font-size:12px;color:var(--accent-2);background:transparent;border:1px solid var(--line);border-radius:6px;padding:4px 8px;cursor:pointer;white-space:nowrap}
.cal-research:hover{border-color:var(--accent);color:var(--accent)}
.cal-allrow{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin:10px 0 4px}
.mon-q{display:flex;flex-direction:column;gap:10px;margin-top:8px}
.mon-card{border:1px solid var(--line);border-left:4px solid var(--accent);border-radius:10px;background:var(--surface);padding:11px 14px}
.mon-card-h{display:flex;align-items:center;gap:8px;flex-wrap:wrap;font-size:13.5px;color:var(--ink)}
.mon-card-prev{font-size:11px;color:var(--faint);font-style:italic}
.mon-card-n{font-size:12.5px;color:var(--muted);margin:5px 0}
.mon-card-s{font-size:11.5px}.mon-card-s a{color:var(--accent-2)}
.mon-card-a{display:flex;gap:8px;flex-wrap:wrap;margin-top:8px}
.mon-stale-l{display:inline-flex;align-items:center;gap:5px;font-size:11.5px;color:var(--muted);cursor:pointer;white-space:nowrap}
/* Tech Tree (Y.149) */
.tt-legend{font-size:11.5px;color:var(--muted);margin-bottom:8px}
.tt-dot{display:inline-block;width:9px;height:9px;border-radius:50%;vertical-align:middle;margin-right:2px}
.tt-dot-on{background:var(--g-ink,#2e7d32)}
.tt-dot-off{background:var(--line);border:1px solid var(--muted)}
.tt-scroll{overflow-x:auto;border:1px solid var(--line);border-radius:10px;background:var(--surface);padding:12px}
.tt-svg{display:block}
.tt-svg text{font-family:inherit}
.tt-gr{fill:var(--surface);stroke:var(--line);stroke-width:1.5}
.tt-gr-partial{fill:var(--accent-weak);stroke:var(--accent)}
.tt-gr-done{fill:var(--g-bg,#e6f4ea);stroke:var(--g-ink,#2e7d32)}
.tt-gt{fill:var(--ink);font-size:11px;font-weight:700;letter-spacing:.03em;text-transform:uppercase}
.tt-nr{fill:var(--surface);stroke:var(--line);stroke-width:1.5;cursor:pointer;transition:stroke .12s}
.tt-nr-on{fill:var(--accent-weak);stroke:var(--accent)}
.tt-node:hover .tt-nr{stroke:var(--accent)}
.tt-nt{fill:var(--ink);font-size:11px;font-weight:500;pointer-events:none}
.tt-nt-off{fill:var(--muted)}
.tt-nd-on{fill:var(--g-ink,#2e7d32)}
.tt-nd-off{fill:var(--line)}
/* leaf validation depth (Y.168): none → built (amber) → web-sourced (green) */
.tt-nr-none{fill:var(--surface);stroke:var(--line)}
.tt-nr-built{fill:var(--a-bg);stroke:var(--a-bd)}
.tt-nr-sourced{fill:var(--g-bg,#e6f4ea);stroke:var(--g-bd,#bbe9cc)}
.tt-nd-none{fill:var(--line)}
.tt-nd-built{fill:var(--a-ink)}
.tt-nd-sourced{fill:var(--g-ink,#2e7d32)}
.tt-rag{stroke:var(--surface);stroke-width:1}
.tt-rag-g{fill:var(--g-ink)} .tt-rag-a{fill:var(--a-ink)} .tt-rag-r{fill:var(--r-ink)}
.tt-dot-built{background:var(--a-ink,#B54708)}
.tt-tk{fill:none;stroke-width:2.5}
.tt-tk-lit{stroke:var(--accent)}
.tt-tk-dim{stroke:var(--line)}
.tt-ah-lit{fill:var(--accent)}
.tt-ah-dim{fill:var(--line)}
.tt-br{fill:none;stroke-width:1.5}
.tt-br-lit{stroke:var(--accent)}
.tt-br-dim{stroke:var(--line);opacity:.55}
.tt-origin{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.tt-ocard{border:1px solid var(--line);border-radius:9px;padding:11px 13px;background:var(--surface)}
.tt-ok{font-size:10px;letter-spacing:.05em;text-transform:uppercase;color:var(--muted);font-weight:600;margin-bottom:5px}
.tt-ov{font-size:12.5px;color:var(--text);line-height:1.5}
@media(max-width:640px){.tt-origin{grid-template-columns:1fr}}
/* New Cohort intake (Y.146) */
.cn-form{border:1px solid var(--line);border-radius:10px;padding:16px;background:var(--surface)}
.cn-l{display:block;font-size:11px;font-weight:600;color:var(--ink);margin:12px 0 5px}
.cn-l:first-child{margin-top:0}
.cn-hint{font-weight:400;color:var(--muted)}
.cn-in,.cn-ta{width:100%;border:1px solid var(--line);border-radius:8px;background:var(--surface);color:var(--ink);font:inherit;font-size:13px;padding:9px 11px}
.cn-ta{resize:vertical;line-height:1.5}
.cn-row{display:flex;align-items:center;gap:12px;margin-top:14px;flex-wrap:wrap}
.cn-status{margin-top:12px;font-size:12.5px;color:var(--muted)}
.cn-status.cn-ok{color:var(--g-ink,#2e7d32)}
.cn-status.cn-err{color:var(--r-ink,#b3261e)}
/* Guided build path (Y.126): per-step review/approve bar under a gated module */
.ck-guide{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:10px;margin:16px 0 4px;padding:11px 14px;border:1px solid var(--accent);background:var(--accent-weak);border-radius:10px}
.ck-guide-l{font-size:12.5px;color:var(--ink);flex:1;min-width:200px}
.ck-guide-b{display:flex;gap:8px;align-items:center;flex:none;flex-wrap:wrap}
.ck-guide-step{display:inline-block;font-family:var(--mono);font-size:10px;font-weight:700;color:var(--accent-ink);background:var(--accent);border-radius:5px;padding:1px 6px;margin-right:4px}
.ck-guide-tick{color:var(--ok,#2e7d32);font-weight:700}
.ck-guide-alldone{font-size:12px;color:var(--ok,#2e7d32);font-weight:600}
/* Risk-read strip (Y.131) */
.ck-risks{margin:0 0 14px}
.ck-risks-h{font-family:var(--mono);font-size:9px;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);font-weight:700;margin-bottom:6px}
.ck-risks-row{display:flex;flex-wrap:wrap;gap:6px}
.ck-risk{display:flex;flex-direction:column;gap:1px;align-items:flex-start;border:1px solid var(--line);border-radius:8px;padding:5px 10px;background:var(--surface);cursor:pointer;font-family:inherit;min-width:76px}
.ck-risk:not(:disabled):hover{background:var(--surface-3)}
.ck-risk:disabled{cursor:default;opacity:.55}
.ck-risk-l{font-size:10px;color:var(--muted);font-weight:600}
.ck-risk-v{font-size:12.5px;font-weight:700;font-family:var(--mono);color:var(--faint)}
.ck-risk-g{border-color:var(--g-bd,#bfe3c4)} .ck-risk-g .ck-risk-v{color:var(--g-ink,#2e7d32)}
.ck-risk-a{border-color:var(--a-bd)} .ck-risk-a .ck-risk-v{color:var(--a-ink)}
.ck-risk-r{border-color:var(--r-bd,#e6b3b3)} .ck-risk-r .ck-risk-v{color:var(--r-ink,#c0392b)}
.ck-riskx-head{display:flex;align-items:baseline;justify-content:space-between;gap:10px;margin:0 0 8px}
.ck-riskx-tally{font-family:var(--mono);font-size:10.5px;letter-spacing:.05em;text-transform:uppercase;color:var(--muted)}
.ck-riskx-score{font-size:12px;color:var(--text)} .ck-riskx-score b{font-weight:700;font-variant-numeric:tabular-nums}
.ck-riskx-right{display:flex;align-items:baseline;gap:14px}
.ck-riskx-reg{background:none;border:0;padding:0;font:inherit;font-size:12px;color:var(--accent);cursor:pointer;font-weight:600}
.ck-riskx-reg:hover{text-decoration:underline}
.ck-riskg-grid{display:grid;grid-template-columns:repeat(6,1fr);gap:8px}
.ck-riskg{display:flex;flex-direction:column;align-items:center;gap:4px;border:1px solid var(--line);border-radius:10px;padding:10px 8px 9px;background:var(--surface);cursor:pointer;font:inherit;color:inherit}
.ck-riskg:not(:disabled):hover{background:var(--surface-3)}
.ck-riskg:disabled{cursor:default;opacity:.5}
.ck-riskg-dial{width:74px;height:auto;display:block}
.ck-riskg-lbl{display:flex;flex-direction:column;align-items:center;gap:1px;text-align:center}
@media(max-width:980px){.ck-riskg-grid{grid-template-columns:repeat(3,1fr)}}
@media(max-width:560px){.ck-riskg-grid{grid-template-columns:repeat(2,1fr)}}
.rr-cats{display:grid;grid-template-columns:repeat(6,1fr);gap:6px;margin:10px 0 4px}
.rr-cat{display:flex;flex-direction:column;gap:1px;border:1px solid var(--line);border-radius:8px;padding:7px 9px;background:var(--surface)}
.rr-cat-l{font-size:10px;color:var(--muted);font-weight:600}
.rr-cat-v{font-size:12.5px;font-weight:700;font-family:var(--mono);color:var(--faint)}
.rr-cat-n{font-size:10px;color:var(--muted)}
.rr-g{border-color:var(--g-bd)} .rr-g .rr-cat-v{color:var(--g-ink)}
.rr-a{border-color:var(--a-bd)} .rr-a .rr-cat-v{color:var(--a-ink)}
.rr-r{border-color:var(--r-bd)} .rr-r .rr-cat-v{color:var(--r-ink)}
@media(max-width:900px){.rr-cats{grid-template-columns:repeat(3,1fr)}}
/* Y.590 — The Full Read: continuous document + spy-linked TOC + print artifact */
.fr-wrap{display:grid;grid-template-columns:200px 1fr;gap:22px;align-items:start;margin-top:14px}
.fr-toc{position:sticky;top:74px;display:flex;flex-direction:column;gap:2px;max-height:calc(100vh - 110px);overflow:auto;padding-right:6px}
.fr-t{background:none;border:0;border-left:2px solid var(--line);padding:6px 10px;font:inherit;font-size:11.5px;color:var(--muted);text-align:left;cursor:pointer;line-height:1.35}
.fr-t:hover{color:var(--ink)}
.fr-t.on{color:var(--accent);border-left-color:var(--accent);font-weight:600}
.fr-t-dim{opacity:.45}
.fr-doc{min-width:0}
.fr-sec{padding:26px 0 30px;border-bottom:1px dashed var(--line)}
.fr-h{display:flex;align-items:baseline;justify-content:space-between;gap:12px;margin-bottom:12px}
.fr-h-l{font-family:var(--mono);font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--accent);font-weight:700}
.fr-h-d{font-size:11px;color:var(--muted)}
.fr-title{font-family:var(--serif);font-size:30px;font-weight:600;color:var(--ink);margin:0 0 4px}
.fr-tagline{font-size:15px;color:var(--text);margin-bottom:8px}
.fr-scoreline{font-size:13px;color:var(--muted);margin-bottom:12px}.fr-scoreline b{font-variant-numeric:tabular-nums}
.fr-lead{font-size:14.5px;margin-bottom:10px}
.fr-md{font-size:14px;line-height:1.65}
.fr-md h1,.fr-md h2,.fr-md h3{font-family:var(--serif);color:var(--ink);margin:16px 0 8px}
.fr-missing{font-size:13px;color:var(--muted);border:1px dashed var(--line-2);border-radius:10px;padding:14px 16px}
.fr-srcs{margin-top:10px;font-size:11.5px;display:flex;flex-wrap:wrap;gap:6px}
.fr-print{width:auto;margin-left:auto}
@media(max-width:860px){.fr-wrap{grid-template-columns:1fr}.fr-toc{position:static;max-height:none;flex-direction:row;flex-wrap:wrap}}
@media print{
  body.fr-printing{background:#fff}
  body.fr-printing .mc-side,body.fr-printing .mc-rail,body.fr-printing .mc-top,body.fr-printing .mc-status,body.fr-printing .fr-toc,body.fr-printing .fr-print,body.fr-printing .dil-badge{display:none!important}
  body.fr-printing .mc-shell{display:block}
  body.fr-printing .fr-sec{page-break-before:always;border-bottom:0}
  body.fr-printing .fr-sec:first-child{page-break-before:auto}
}
/* Founder build-path card (Y.132) */
.ck-buildpath{border:1px solid var(--accent);background:var(--accent-weak);border-radius:10px;padding:12px 14px;margin:0 0 16px}
.ck-bp-h{display:flex;justify-content:space-between;align-items:center;font-weight:600;font-size:13px;color:var(--ink);margin-bottom:8px}
.ck-bp-n{font-family:var(--mono);font-size:11px;color:var(--accent);font-weight:700}
.ck-bp-track{height:6px;background:var(--surface-3);border-radius:3px;overflow:hidden;margin-bottom:10px}
.ck-bp-fill{display:block;height:100%;background:var(--accent);border-radius:3px;transition:width .4s ease}
.ck-bp-cur{font-size:12.5px;color:var(--text);margin-bottom:8px}
/* Concept RAG file-drops (Y.138) */
.fd-wrap{margin:0 0 16px}
.fd-zone{display:flex;align-items:center;gap:10px;border:1px dashed var(--line-2);border-radius:10px;padding:10px 14px;background:var(--surface-2);font-size:12px;color:var(--muted)}
.fd-zone.fd-over{border-color:var(--accent);background:var(--accent-weak)}
.fd-ico{font-size:15px;flex:none}
.fd-txt{flex:1;line-height:1.45} .fd-txt b{color:var(--text)}
.fd-pick{background:none;border:none;color:var(--accent);font:inherit;font-size:12px;cursor:pointer;text-decoration:underline;padding:0}
.fd-list{display:flex;flex-direction:column;gap:4px;margin-top:8px}
.fd-file{display:flex;align-items:center;gap:8px;padding:5px 10px;border:1px solid var(--line);border-radius:8px;background:var(--surface);font-size:12px}
.fd-f-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--ink);font-weight:500}
.fd-f-meta{flex:none;color:var(--muted);font-size:10.5px;font-family:var(--mono)}
.fd-read{color:var(--g-ink)}
.fd-f-act{flex:none;background:none;border:1px solid var(--line);border-radius:6px;color:var(--text);font:inherit;font-size:10.5px;cursor:pointer;padding:2px 7px}
.fd-f-act:hover{background:var(--surface-3)} .fd-del{color:var(--muted)}
.fd-status{margin-top:6px;font-size:11px;color:var(--muted)}
.cfo-grp{margin-bottom:16px}
.cfo-h{font-weight:600;font-size:13px;color:var(--ink);margin-bottom:6px;display:flex;align-items:center;gap:6px}
.cfo-n{font-family:var(--mono);font-size:10px;color:var(--muted);background:var(--surface-3);border-radius:5px;padding:1px 6px}
.st-build-hdr{flex:none;white-space:nowrap;align-self:flex-start}
.st-ver{font-family:var(--mono);font-size:10px;color:var(--accent-2);background:var(--accent-weak);border:1px solid var(--line);border-radius:5px;padding:0 6px;white-space:nowrap}
.st-hollow{font-family:var(--mono);font-size:10px;color:var(--a-ink);background:var(--a-bg);border:1px solid var(--a-bd);border-radius:5px;padding:0 6px;white-space:nowrap} /* Y.604 built-but-empty callout */
.cv-bempty{border-left:2px solid var(--g-bd);padding-left:9px}
.st-primed{font-size:10.5px;font-weight:600;color:var(--accent);background:var(--accent-weak);border:1px solid var(--accent);border-radius:5px;padding:1px 7px;white-space:nowrap}
.ccard-open{flex:none;cursor:pointer;font-family:inherit;font-size:10.5px;font-weight:600;color:var(--text);background:var(--surface);border:1px solid var(--line);border-radius:7px;padding:5px 11px;white-space:nowrap}
.ccard-open:hover{color:var(--accent-2);border-color:var(--accent);background:var(--accent-weak)}

/* ---- module nav + industry catalog ---- */
.modnav{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:14px;border-bottom:1px solid var(--line);padding-bottom:10px}
.modnav-btn{cursor:pointer;font-family:inherit;font-size:12.5px;font-weight:600;color:var(--muted);background:transparent;border:1px solid transparent;border-radius:8px;padding:7px 14px}
.modnav-btn:hover{color:var(--ink);background:var(--surface-3)}
.modnav-btn.on{color:var(--accent-2);background:var(--accent-weak);border-color:var(--i-bd)}
.naics-sec{opacity:.72}
.naics-sec.naics-on{opacity:1;border-color:var(--accent);box-shadow:var(--shadow-sm)}
.naics-h{display:flex;align-items:center;gap:7px;flex-wrap:wrap;font-size:13px;color:var(--ink);font-weight:600;margin-bottom:6px}
.naics-key{font-size:10px;font-weight:700;color:var(--muted);background:var(--surface-3);border:1px solid var(--line);border-radius:5px;padding:1px 6px}
.naics-icon{font-size:15px}
.naics-title{flex:1;min-width:120px}
.naics-badge{font-size:9px;font-weight:700;letter-spacing:.03em;text-transform:uppercase;color:var(--g-ink);background:var(--g-bg);border:1px solid var(--g-bd);border-radius:5px;padding:1px 6px}
.naics-empty{font-size:11.5px;color:var(--muted);line-height:1.45}
.naics-list{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:10px}
.naics-row{background:var(--surface);border:1px solid var(--line);border-radius:10px;padding:11px 13px;min-width:0}
.naics-chain{display:flex;align-items:center;gap:4px;flex-wrap:wrap;margin-bottom:6px}
.nc{font-size:10.5px;font-weight:600;color:var(--muted);background:var(--surface-3);border:1px solid var(--line);border-radius:5px;padding:1px 6px;font-variant-numeric:tabular-nums}
.nc.on{color:var(--accent-2);background:var(--accent-weak);border-color:var(--i-bd);font-weight:700}
.nc-sep{color:var(--faint);font-size:11px}
.naics-row-t{font-size:12.5px;color:var(--ink);font-weight:600;line-height:1.4;overflow-wrap:anywhere}
.naics-row-w{font-size:11.5px;color:var(--muted);line-height:1.45;margin-top:3px;overflow-wrap:anywhere}
/* full NAICS expandable tree */
.ntree-controls{display:flex;gap:6px}
.ntree-ctl{font-family:inherit;font-size:10.5px;font-weight:600;color:var(--muted);background:var(--surface);border:1px solid var(--line);border-radius:6px;padding:3px 9px;cursor:pointer;text-transform:none;letter-spacing:0}
.ntree-ctl:hover{color:var(--ink);border-color:var(--line-2)}
.ntree{border:1px solid var(--line);border-radius:10px;overflow:hidden;background:var(--surface)}
.ntree-sec{border-bottom:1px solid var(--line)}
.ntree-sec:last-child{border-bottom:none}
.ntree-sec.on{background:var(--accent-weak)}
.ntree-sech{display:flex;align-items:center;gap:8px;width:100%;text-align:left;background:transparent;border:none;font-family:inherit;padding:10px 13px;cursor:pointer;font-size:13px;color:var(--ink)}
.ntree-sec.on>.ntree-sech{background:transparent}
.ntree-sech:hover{background:var(--surface-3)}
.ntree-chev{font-size:10px;color:var(--faint);transition:transform .15s;width:10px;flex:none}
.ntree-ico{font-size:14px}
.ntree-t{flex:1;font-weight:600}
.naics-key.sm{font-size:9.5px}
.ntree-subs{padding:2px 13px 10px 31px;background:var(--surface)}
.ntree-sub{padding:6px 0;border-top:1px solid var(--line)}
.ntree-sub:first-child{border-top:none}
.ntree-subh{display:flex;align-items:center;gap:8px;font-size:12px;color:var(--text)}
.ntree-subt{flex:1}
.ntree-sub.on .ntree-subt{color:var(--ink);font-weight:600}
.ntree-codes{list-style:none;margin:6px 0 2px;padding:0 0 0 28px}
.ntree-codes li{font-size:12px;color:var(--text);padding:4px 0;border-top:1px solid var(--line)}
.ntree-codes li:first-child{border-top:none}
.ntree-codes b{color:var(--accent-2)}
.vc-flow{display:flex;flex-direction:column;align-items:stretch;gap:0}
.vc-stage{display:flex;align-items:center;gap:12px;background:var(--surface);border:1px solid var(--line);border-radius:10px;padding:12px 16px}
.vc-num{flex:none;width:26px;height:26px;border-radius:50%;background:var(--surface-3);border:1px solid var(--line);color:var(--ink);font-weight:700;font-size:12px;display:flex;align-items:center;justify-content:center}
.vc-body{font-size:13px;color:var(--text);line-height:1.45}
.vc-arrow{text-align:center;color:var(--faint);font-size:15px;padding:4px 0}
/* enriched value-chain stage cards */
.vcd-flow{display:grid;grid-template-columns:repeat(auto-fit,minmax(185px,1fr));gap:10px;margin-bottom:6px}
.vcd-card{border:1px solid var(--line);border-top:3px solid var(--line);border-radius:10px;padding:12px 13px;display:flex;flex-direction:column;gap:6px;background:var(--surface)}
.vcd-card.cov-g{border-top-color:var(--g-ink);background:var(--g-bg)}
.vcd-card.cov-a{border-top-color:var(--a-ink);background:var(--a-bg)}
.vcd-card.cov-r{border-top-color:var(--r-ink);background:var(--r-bg)}
.vcd-stage{font-size:9.5px;letter-spacing:.05em;text-transform:uppercase;color:var(--muted);font-weight:600}
.vcd-name{font-size:13px;font-weight:600;color:var(--ink);line-height:1.3}
.vcd-desc{font-size:11.5px;color:var(--text);line-height:1.45}
.vcd-cos{display:flex;flex-wrap:wrap;gap:4px}
.vcd-co{font-size:9.5px;color:var(--text);background:var(--surface);border:1px solid var(--line);border-radius:4px;padding:1px 6px}
.vcd-heat{font-size:10.5px;color:var(--ink);font-weight:600}
.vcd-concepts{display:flex;flex-wrap:wrap;gap:4px}
.vcd-conpill{font-size:9.5px;font-weight:700;color:var(--accent-2);background:var(--accent-weak);border:1px solid var(--i-bd);border-radius:4px;padding:1px 6px}
.vcd-link{margin-top:auto;align-self:flex-start;font-family:inherit;font-size:10.5px;font-weight:600;color:var(--accent);background:transparent;border:none;cursor:pointer;padding:2px 0}
.vcd-link:hover{color:var(--accent-2);text-decoration:underline}
.vc-xlinks{display:flex;gap:14px;flex-wrap:wrap;margin:8px 0}
.jtbd-card{border-top:2px solid var(--accent)}
.jtbd-cust{font-size:10.5px;letter-spacing:.03em;text-transform:uppercase;color:var(--muted);font-weight:600;margin-bottom:5px}
.jtbd-stmt{font-size:13.5px;color:var(--ink);line-height:1.5}
.jtbd-help{color:var(--muted);font-style:italic}
.jtbd-circ{margin-top:7px;font-size:12px;color:var(--muted);line-height:1.45}
.jtbd-circ b{color:var(--ink);font-weight:600}
.jtbd-dims{margin-top:10px;display:flex;flex-direction:column;gap:6px;padding-top:9px;border-top:1px solid var(--line)}
.jtbd-dim{font-size:12px;color:var(--ink);line-height:1.45}
.jtbd-dk{display:inline-block;font-size:9.5px;letter-spacing:.04em;text-transform:uppercase;font-weight:700;padding:1px 6px;border-radius:4px;margin-right:6px;vertical-align:1px}
.jtbd-dk.fn{background:var(--i-bg);color:var(--i-ink)}
.jtbd-dk.emo{background:var(--a-bg);color:var(--a-ink)}
.jtbd-dk.soc{background:var(--g-bg);color:var(--g-ink)}
.jtbd-forces{margin-top:10px;display:flex;flex-wrap:wrap;gap:6px}
.jf{font-size:11px;line-height:1.4;color:var(--ink);background:var(--surface-3);border:1px solid var(--line);border-radius:6px;padding:4px 8px;flex:1 1 30%;min-width:120px}
/* ── Y.1258 · THE PAINS/GAINS COLUMNS WERE A RIBBON ─────────────────────────────────────────────────────
   Lars: "Too skinny of columns because the bullet points are indented too much."
   Three levels of nesting, each taking its cut. A persona card in a 3-up grid is ~326px; inside it PAINS
   and GAINS sit side by side at `flex:1 1 30%; min-width:120px`, so ~155px each; minus 8px of padding
   either side and 16px of list indent, the text gets about 123px. That is four or five characters a line,
   which is why the export reads as a column of single words.
   `min-width:190px` is the fix that matters: below a card width of roughly 400px the two panels now WRAP
   to full width instead of squeezing, so a narrow card gets two readable stacked lists rather than two
   unreadable adjacent ones. The indent comes down to 13px because at this size a 16px bullet gutter is a
   tenth of the line. */
.jtbd-pg .jf{flex:1 1 46%;min-width:190px;padding:6px 9px}
.jtbd-pg ul.mini{padding-left:13px;margin:4px 0 0}
.jtbd-pg ul.mini li{margin-bottom:4px;line-height:1.45}
/* And the persona grid itself: 280px let three cards fit where the content needs two. */
.jtbd-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(420px,1fr));gap:12px}
@media(max-width:900px){.jtbd-grid{grid-template-columns:1fr}}
/* Y.1258 — a dimension the generator did not produce is STATED, not omitted. Four of the five personas in
   the Equipifi export carried no Functional/Emotional/Social read and the card simply had no such section,
   so the gap read as "this persona has no social dimension" rather than "nobody wrote one". */
.jtbd-nodims{margin-top:8px;font-size:10.5px;color:var(--faint);line-height:1.45;border-top:1px dashed var(--line);padding-top:7px}
.jf b{display:block;font-size:9.5px;letter-spacing:.04em;text-transform:uppercase;color:var(--muted);margin-bottom:2px;font-weight:700}
.jf.push{border-left:2px solid var(--g-ink)}
.jf.pull{border-left:2px solid var(--accent)}
.jf.fric{border-left:2px solid var(--r-ink)}

/* Outcomes Graph */
.out-grid{display:grid;grid-template-columns:1fr;gap:10px}
.out-card{border-left:2px solid var(--accent)}
.out-h{display:flex;align-items:flex-start;gap:9px;margin-bottom:10px}
.out-n{flex:none;width:22px;height:22px;border-radius:50%;background:var(--accent-weak);color:var(--accent);font-size:11px;font-weight:700;display:flex;align-items:center;justify-content:center}
.out-goal{font-size:13.5px;font-weight:600;color:var(--ink);line-height:1.4;padding-top:2px}
.out-flow{display:flex;align-items:stretch;gap:9px;flex-wrap:wrap}
.out-step{flex:1 1 40%;min-width:200px;background:var(--surface-3);border:1px solid var(--line);border-radius:7px;padding:8px 10px}
.out-con{border-left:2px solid var(--r-ink)}
.out-sol{border-left:2px solid var(--g-ink)}
.out-k{display:block;font-size:9.5px;letter-spacing:.04em;text-transform:uppercase;color:var(--muted);font-weight:700;margin-bottom:3px}
.out-v{font-size:12px;color:var(--ink);line-height:1.45}
.out-arrow{align-self:center;color:var(--muted);font-size:15px;flex:none}

/* Enabling Innovation */
.en-card{border-top:2px solid var(--line)}
.en-card.en-g{border-top-color:var(--g-ink)}
.en-card.en-a{border-top-color:var(--a-ink)}
.en-card.en-i{border-top-color:var(--i-ink)}
.en-h{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:8px}
.en-name{font-size:13.5px;font-weight:600;color:var(--ink);line-height:1.35}
.en-meter{height:5px;border-radius:3px;background:var(--line);overflow:hidden;margin-bottom:10px}
.en-fill{display:block;height:100%;border-radius:3px}
.en-fill-g{background:var(--g-ink)}
.en-fill-a{background:var(--a-ink)}
.en-fill-i{background:var(--i-ink)}
.en-row{margin-top:7px}
.en-k{display:block;font-size:9.5px;letter-spacing:.04em;text-transform:uppercase;color:var(--muted);font-weight:700;margin-bottom:2px}
.en-v{font-size:12px;color:var(--ink);line-height:1.45}

/* Capital Design — fund-shape model */
.cap-legend{display:flex;flex-direction:column;gap:7px}
.cap-legrow{display:flex;align-items:baseline;gap:8px;font-size:12px;line-height:1.45}
.cap-legname{flex:none;width:64px;font-weight:700}
.cap-legdesc{color:var(--muted)}
.cap-legdesc b{color:var(--ink);font-weight:600}
.cap-bmtag{font-size:10px;font-weight:600;letter-spacing:.02em;text-transform:none;color:var(--muted)}
/* GP profile + OpEx selector cards */
.cap-cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:10px}
.cap-card{text-align:left;background:var(--surface);border:1px solid var(--line);border-radius:10px;padding:11px 13px;cursor:pointer;transition:border-color .12s,box-shadow .12s}
.cap-card:hover{border-color:var(--line-2)}
.cap-card.on{border-color:var(--accent);box-shadow:0 0 0 1px var(--accent) inset;background:var(--accent-weak)}
.cap-card.sm{padding:9px 12px}
.cap-cardh{font-size:13px;font-weight:700;color:var(--ink)}
.cap-cardb{font-size:11px;color:var(--muted);line-height:1.4;margin-top:3px}
.cap-cardm{font-size:10.5px;color:var(--accent);font-weight:600;margin-top:4px}
/* headline verdict */
.cap-headline{display:flex;gap:13px;align-items:center;border-radius:11px;padding:13px 15px;margin-top:6px;border:1px solid var(--line)}
.cap-headline.tone-g{background:var(--g-bg);border-color:var(--g-ink)}
.cap-headline.tone-a{background:var(--a-bg);border-color:var(--a-ink)}
.cap-headline.tone-r{background:var(--r-bg);border-color:var(--r-ink)}
.cap-hltier{flex:none;font-size:18px;font-weight:800;letter-spacing:.02em}
.cap-headline.tone-g .cap-hltier{color:var(--g-ink)}
.cap-headline.tone-a .cap-hltier{color:var(--a-ink)}
.cap-headline.tone-r .cap-hltier{color:var(--r-ink)}
.cap-hlbody{font-size:12px;line-height:1.5;color:var(--ink)}
.cap-warn{color:var(--r-ink);font-weight:600}
/* diagnostic blocks */
.cap-diag{background:var(--surface);border:1px solid var(--line);border-radius:10px;padding:13px 15px}
.cap-diagh{display:flex;justify-content:space-between;align-items:center;gap:10px;font-size:13px;color:var(--ink);margin-bottom:10px}
.cap-diagnote{font-size:11.5px;color:var(--muted);line-height:1.5;margin-top:9px}
.cap-stack{display:flex;height:18px;border-radius:5px;overflow:hidden;background:var(--surface-3)}
.cap-stackseg{height:100%}
.cap-stackleg{display:flex;flex-wrap:wrap;gap:12px;margin-top:8px;font-size:11.5px;color:var(--muted)}
.cap-stacklk{display:inline-flex;align-items:center;gap:5px}
.cap-stacklk b{color:var(--ink)}
.cap-dot2{width:9px;height:9px;border-radius:2px;display:inline-block}
.cap-rbar{position:relative;height:16px;background:var(--surface-3);border-radius:5px;overflow:visible}
.cap-rfill{display:block;height:100%;background:var(--accent);border-radius:5px}
.cap-rmark{position:absolute;top:-3px;width:2px;height:22px;background:var(--ink)}
.cap-lpgrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(90px,1fr));gap:10px}
.cap-lp{background:var(--surface-2);border:1px solid var(--line);border-radius:8px;padding:9px 11px;text-align:center}
.cap-lpv{font-size:17px;font-weight:800;color:var(--ink);font-variant-numeric:tabular-nums}
.cap-lpk{font-size:10.5px;color:var(--muted);margin-top:2px}
.cap-cf{display:flex;align-items:flex-end;gap:3px;height:90px;margin-top:4px;padding-top:10px}
.cap-cfcol{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:flex-end;height:100%}
.cap-cfbar{width:62%;border-radius:2px 2px 0 0}
.cap-cfbar.neg{background:var(--r-ink);opacity:.55}
.cap-cfbar.pos{background:var(--g-ink)}
.cap-cfy{font-size:8.5px;color:var(--muted);margin-top:3px}
.cap-mix{display:flex;flex-direction:column;gap:8px}
.cap-mixrow{display:flex;align-items:center;gap:10px}
.cap-mixk{flex:none;width:74px;font-size:12px;font-weight:700}
.cap-mixslider{flex:1;min-width:120px;accent-color:var(--accent)}
.cap-mixpct{flex:none;width:42px;text-align:right;font-size:12px;font-weight:700;font-variant-numeric:tabular-nums}
.cap-mixn{flex:none;width:84px;font-size:11px;color:var(--muted)}
.cap-inputs{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:10px}
.cap-in{display:flex;flex-direction:column;gap:3px}
.cap-inlabel{font-size:10.5px;letter-spacing:.02em;text-transform:uppercase;color:var(--muted);font-weight:600}
.cap-in input{font-size:13px;padding:7px 9px;border:1px solid var(--line);border-radius:7px;background:var(--surface);color:var(--ink);font-variant-numeric:tabular-nums}
.cap-in input:focus{outline:none;border-color:var(--accent)}
.cap-hint{font-size:10px;color:var(--muted)}
.cap-inlabel{display:flex;align-items:center;justify-content:space-between;gap:6px}
.cap-lock{border:none;background:none;cursor:pointer;font-size:11px;line-height:1;padding:1px 2px;opacity:.45;filter:grayscale(1)}
.cap-lock.on{opacity:1;filter:none}
.cap-optrow{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-top:12px}
.cap-optbtn{flex:none;font-size:12.5px;font-weight:600;padding:9px 16px;border:1px solid var(--accent);background:var(--accent);color:var(--accent-ink);border-radius:8px;cursor:pointer}
.cap-optbtn:hover{filter:brightness(1.06)}
.cap-optbtn:disabled{opacity:.6;cursor:default}
.cap-optnote{flex:1;min-width:200px;font-size:11px;color:var(--muted);line-height:1.45}
.cap-optnote b{color:var(--ink)}
.cap-optok{margin-top:10px;font-size:12px;line-height:1.5;color:var(--g-ink);background:var(--g-bg);border-radius:9px;padding:10px 13px}
.cap-optok b{color:var(--ink)}
.cap-optwarn{margin-top:10px;font-size:12px;line-height:1.5;color:var(--a-ink);background:var(--a-bg);border-radius:9px;padding:10px 13px}
/* derived capital position */
.cap-posd-wrap{margin-top:10px}
.cap-posd{background:var(--surface);border:1px solid var(--line);border-radius:10px;padding:12px 14px}
.cap-posrow{display:flex;align-items:center;justify-content:space-between;gap:10px;font-size:13px;color:var(--ink)}
.cap-posrow + .cap-posnote{margin-top:4px}
.cap-posk{color:var(--muted)}
.cap-posv{font-weight:700;font-variant-numeric:tabular-nums}
.cap-poschip{font-size:12px;font-weight:700;padding:2px 10px;border:1px solid;border-radius:999px}
.cap-posnote{font-size:11px;color:var(--muted);line-height:1.5;margin:5px 0 11px}
.cap-posnote:last-child{margin-bottom:0}
/* MPT frontier */
.cap-mptprompt{display:flex;align-items:center;gap:12px;flex-wrap:wrap;background:var(--surface-2);border:1px dashed var(--line-2);border-radius:10px;padding:14px}
.cap-mptbar,.cap-stale{font-size:11px;color:var(--muted);margin-bottom:8px}
.cap-stale{color:var(--a-ink)}
.cap-rescan{border:none;background:none;color:var(--accent);font-weight:600;cursor:pointer;font-size:11px;text-decoration:underline;padding:0}
.cap-picks{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:10px;margin-top:10px}
.cap-pick{background:var(--surface);border:1px solid var(--line);border-radius:9px;padding:10px 12px}
.cap-pickh{font-size:13px;font-weight:700;color:var(--ink)}
.cap-pickd{font-size:10.5px;color:var(--muted);line-height:1.4;margin:2px 0 7px}
.cap-pickm{font-size:12px;font-weight:600;color:var(--ink);font-variant-numeric:tabular-nums}
.cap-pickf{font-size:10.5px;color:var(--muted);margin-top:2px;font-variant-numeric:tabular-nums}
.cap-pickapply{margin-top:8px;width:100%;font-size:11.5px;font-weight:600;padding:6px;border:1px solid var(--accent);color:var(--accent);background:var(--accent-weak);border-radius:7px;cursor:pointer}
.cap-pickapply:hover{background:var(--accent);color:var(--accent-ink)}
/* operating model — GP layer vs studio OpEx */
.cap-opwrap{background:var(--surface);border:1px solid var(--line);border-radius:10px;padding:13px 15px}
.cap-opcols{display:grid;grid-template-columns:1fr 1fr;gap:18px}
.cap-opcol{min-width:0}
.cap-oph{font-size:12px;font-weight:700;color:var(--ink);margin-bottom:7px;display:flex;align-items:center;justify-content:space-between;gap:8px}
.cap-opfund{font-size:9.5px;font-weight:600;letter-spacing:.02em;text-transform:uppercase;color:var(--accent);background:var(--accent-weak);padding:2px 7px;border-radius:999px}
.cap-oprow{display:flex;justify-content:space-between;align-items:baseline;gap:8px;font-size:12px;color:var(--ink);padding:3px 0;border-top:1px solid var(--line)}
.cap-oprow:first-of-type{border-top:none}
.cap-oprow span{color:var(--muted)}
.cap-oprow b{color:var(--ink);font-variant-numeric:tabular-nums;white-space:nowrap}
.cap-oprow.tot{font-weight:600}.cap-oprow.tot span{color:var(--ink)}
.cap-oprow.sm{font-size:11px}
.cap-opfte{font-size:10px;color:var(--accent);font-weight:600}
.cap-opnote{font-size:10.5px;color:var(--muted);line-height:1.5;margin-top:7px}
.cap-opexp{margin-top:11px;font-size:11.5px}
.cap-opexp summary{cursor:pointer;color:var(--accent);font-weight:600;font-size:11px}
.cap-opexp[open] summary{margin-bottom:5px}
.cap-opload{margin-top:11px;display:flex;align-items:baseline;gap:10px;flex-wrap:wrap;font-size:12.5px;border-radius:8px;padding:9px 12px}
.cap-opload b{font-variant-numeric:tabular-nums}
.cap-opload.tone-g{background:var(--g-bg);color:var(--g-ink)}
.cap-opload.tone-a{background:var(--a-bg);color:var(--a-ink)}
.cap-opload.tone-r{background:var(--r-bg);color:var(--r-ink)}
.cap-opinv{margin-left:auto;font-size:11.5px;opacity:.85;font-variant-numeric:tabular-nums}
@media(max-width:640px){.cap-opcols{grid-template-columns:1fr;gap:14px}}
.cap-oplabel{font-size:10.5px;color:var(--muted);font-weight:600;margin:12px 0 2px}
/* Labcorp-style benchmark range bars */
.cap-ranges{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px 24px;margin-top:6px}
.rb{margin-top:20px}
.rb-top{display:flex;justify-content:space-between;align-items:center;margin-bottom:4px}
.rb-label{font-size:11px;font-weight:600;color:var(--ink);display:flex;align-items:center;gap:6px}
.rb-barwrap{position:relative;height:14px}
.rb-zones{position:absolute;inset:0;display:flex;border-radius:5px;overflow:hidden}
.rb-zone{height:100%}
.rb-zone.tone-g{background:var(--g-ink);opacity:.82}
.rb-zone.tone-a{background:var(--a-ink);opacity:.82}
.rb-zone.tone-r{background:var(--r-ink);opacity:.82}
.rb-slider{position:absolute;inset:0;width:100%;height:14px;margin:0;-webkit-appearance:none;appearance:none;background:transparent;cursor:pointer}
.rb-slider::-webkit-slider-thumb{-webkit-appearance:none;width:5px;height:24px;background:var(--ink);border:2px solid #fff;border-radius:3px;box-shadow:0 0 0 1px rgba(0,0,0,.25);margin-top:-5px}
.rb-slider::-moz-range-thumb{width:5px;height:24px;background:var(--ink);border:2px solid #fff;border-radius:3px;box-shadow:0 0 0 1px rgba(0,0,0,.25)}
.rb-slider::-webkit-slider-runnable-track{background:transparent;height:14px}
.rb-slider::-moz-range-track{background:transparent;height:14px}
.rb-slider:focus{outline:none}
.rb-mark{position:absolute;top:-5px;width:5px;height:24px;background:var(--ink);border:2px solid #fff;border-radius:3px;box-shadow:0 0 0 1px rgba(0,0,0,.25);transform:translateX(-50%)}
.rb-bubble{position:absolute;top:-19px;transform:translateX(-50%);background:var(--surface);border:1px solid var(--line-2);border-radius:5px;padding:1px 6px;font-size:10.5px;font-weight:700;color:var(--ink);white-space:nowrap;z-index:2;font-variant-numeric:tabular-nums}
.rb-ticks{display:flex;margin-top:6px}
.rb-tick{display:flex;flex-direction:column;align-items:center;text-align:center;line-height:1.25;border-left:1px solid var(--line);padding:0 3px;box-sizing:border-box}
.rb-tick:first-child{border-left:none}
.rb-tick b{color:var(--ink);font-weight:600;font-size:9.5px}
.rb-tick span{color:var(--muted);font-size:9px;font-variant-numeric:tabular-nums}
.cap-metrics{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:10px;margin-top:14px}
.cap-metric{background:var(--surface);border:1px solid var(--line);border-radius:10px;padding:12px 14px}
.cap-metric.tone-g{border-color:var(--g-ink)}
.cap-metric.tone-a{border-color:var(--a-ink)}
.cap-metric.tone-r{border-color:var(--r-ink)}
.cap-mv{font-size:22px;font-weight:800;color:var(--ink);font-variant-numeric:tabular-nums;line-height:1.1}
.cap-mk{font-size:11px;color:var(--muted);font-weight:600;margin-top:3px}
.cap-msub{font-size:10.5px;color:var(--muted);margin-top:2px}
.cap-bind{margin-top:12px;font-size:12px;line-height:1.5;border-radius:9px;padding:10px 13px}
.cap-bind.ok{background:var(--g-bg);color:var(--g-ink)}
.cap-bind.warn{background:var(--a-bg);color:var(--a-ink)}
.cap-charts{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:12px;margin-top:14px}
.cap-chart{background:var(--surface);border:1px solid var(--line);border-radius:10px;padding:12px 14px}
.cap-ctitle{font-size:11px;color:var(--muted);font-weight:600;margin-bottom:6px}
.cap-svg{width:100%;height:auto;display:block}
.cap-ab{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.cap-abcol{background:var(--surface);border:1px solid var(--line);border-radius:10px;padding:12px 14px}
.cap-abcol.soft{background:var(--surface-2)}
.cap-abh{font-size:12px;font-weight:700;color:var(--ink);margin-bottom:8px;display:flex;justify-content:space-between;align-items:center;gap:8px}
.cap-abmix{font-size:10.5px;color:var(--muted);font-weight:600;font-variant-numeric:tabular-nums}
.cap-abrow{display:flex;justify-content:space-between;font-size:12px;padding:3px 0;border-top:1px solid var(--line)}
.cap-abrow span{color:var(--muted)}
.cap-abrow b{color:var(--ink);font-variant-numeric:tabular-nums}
.cap-abnote{margin-top:10px;font-size:12px;line-height:1.5;color:var(--ink);background:var(--accent-weak);border-radius:9px;padding:10px 13px}
.cap-front{display:flex;flex-direction:column;gap:6px}
.cap-frow{display:flex;align-items:center;gap:10px;font-size:12px}
.cap-frow.best .cap-flabel,.cap-frow.best .cap-fval{font-weight:800;color:var(--accent)}
.cap-flabel{flex:none;width:120px;color:var(--ink)}
.cap-fbar{flex:1;height:14px;background:var(--surface-3);border-radius:4px;overflow:hidden}
.cap-ffill{display:block;height:100%;background:var(--accent);border-radius:4px}
.cap-fval{flex:none;width:128px;text-align:right;font-variant-numeric:tabular-nums;color:var(--ink)}
.cap-classt{width:100%;border-collapse:collapse;font-size:12px;margin-top:4px}
.cap-classt th{text-align:left;font-size:10px;letter-spacing:.03em;text-transform:uppercase;color:var(--muted);font-weight:600;padding:6px 8px;border-bottom:1px solid var(--line)}
.cap-classt td{padding:7px 8px;border-bottom:1px solid var(--line);color:var(--ink);vertical-align:middle}
.cap-cdot{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:6px;vertical-align:middle}
.cap-cin{width:58px;font-size:12px;padding:4px 6px;border:1px solid var(--line);border-radius:5px;background:var(--surface);color:var(--ink);font-variant-numeric:tabular-nums}
.cap-cin:focus{outline:none;border-color:var(--accent)}
.cap-cmean{font-weight:700;font-variant-numeric:tabular-nums}
.cap-classnote{font-size:11px;color:var(--muted);line-height:1.5;margin-top:8px}
@media(max-width:640px){.cap-ab{grid-template-columns:1fr}.cap-flabel{width:88px}.cap-fval{width:104px}}
/* Fund-shape tile on the studio dashboard */
.fs-row{display:flex;justify-content:space-between;align-items:center;gap:8px;font-size:12.5px;padding:5px 0;border-top:1px solid var(--line)}
.fs-row:first-child{border-top:none}
.fs-row span{color:var(--muted)}
.fs-row b{color:var(--ink);font-variant-numeric:tabular-nums}
.fs-sub{font-size:10px;letter-spacing:.03em;text-transform:uppercase}
.scard-cta{margin-top:10px;width:100%;font-size:12px;font-weight:600;padding:8px 12px;border:1px solid var(--accent);color:var(--accent);background:var(--accent-weak);border-radius:8px;cursor:pointer}
.scard-cta:hover{background:var(--accent);color:var(--accent-ink)}
.cb-wrap{overflow-x:auto;border:1px solid var(--line);border-radius:10px;background:var(--surface)}
table.cb{border-collapse:collapse;width:100%;min-width:560px;font-size:11.5px}
table.cb th,table.cb td{border:1px solid var(--line);padding:8px 10px;vertical-align:middle}
.cb-corner{background:var(--surface-3);color:var(--muted);font-size:10px;font-weight:600;text-align:left;white-space:nowrap}
.cb-jobh{background:var(--surface-3);color:var(--ink);font-weight:600;text-align:left;min-width:118px;max-width:165px;white-space:normal;vertical-align:bottom;line-height:1.28;word-break:break-word}
.cb-stageh{background:var(--surface-3);color:var(--ink);font-weight:600;text-align:left;white-space:normal;min-width:148px;max-width:220px;line-height:1.28;word-break:break-word}
.cb-stagen{display:inline-block;width:18px;height:18px;line-height:18px;text-align:center;border-radius:50%;background:var(--surface);border:1px solid var(--line);color:var(--ink);font-size:10px;font-weight:700;margin-right:5px}
.cb-sth{display:flex;align-items:flex-start;gap:6px} /* Y.595 — number chip + full stage name; wrapped lines indent past the chip */
.cb-sth .cb-stagen{flex:none;margin-right:0;margin-top:1px}
.cb-cell{text-align:center;background:var(--surface)}
.cb-dot{color:var(--faint);font-size:16px}
/* scored chessboard */
.cb-sc{text-align:center;vertical-align:middle;position:relative;min-width:70px}
.cb-score{font-size:13px;font-weight:700;font-variant-numeric:tabular-nums}
.rag-cell-g{background:var(--g-bg)}.rag-cell-g .cb-score{color:var(--g-ink)}
.rag-cell-a{background:var(--a-bg)}.rag-cell-a .cb-score{color:var(--a-ink)}
.rag-cell-r{background:var(--r-bg)}.rag-cell-r .cb-score{color:var(--r-ink)}
/* Y.1066 — a cell's outline is its OPPORTUNITY, not the app's theme colour. The old `var(--accent)` meant a
   board under the Magenta theme outlined an 88 and a 47 in the same magenta, which fought the forge ramp the
   fills use. The ink is set inline per cell (tierInk of the score); this rule only carries the geometry. */
.cb-top{outline:2px solid currentColor;outline-offset:-2px}
.cb-star{color:var(--accent);font-size:10px;position:absolute;top:3px;left:4px}
.cb-pickname{display:block;font-size:9.5px;color:var(--ink);font-weight:600;margin-top:2px;line-height:1.15}
.cb-haspick{cursor:pointer}
.cb-haspick:hover{box-shadow:inset 0 0 0 2px currentColor} /* Y.1066 — hover echoes the cell's own opportunity ink */
/* Y.1054 — every concept in a cell is its own button with its own score in its own tier ink. */
.cb-picks{display:flex;flex-direction:column;gap:3px;margin-top:4px}
.cb-pick{display:flex;align-items:center;gap:4px;width:100%;background:var(--surface);border:1px solid var(--line);border-radius:7px;padding:2px 5px;font:inherit;font-size:9.5px;line-height:1.2;color:var(--ink);cursor:pointer;text-align:left;transition:border-color .15s ease,box-shadow .15s ease,opacity .18s ease}
.cb-pick:hover{border-color:var(--accent,#2A5BD7);box-shadow:0 2px 8px rgba(0,0,0,.16);z-index:3}
.cb-pick-n{font-weight:800;font-variant-numeric:tabular-nums;font-size:10.5px;flex:none}
.cb-pick-t{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:600}
.cb-pick-h{font-style:normal;font-weight:800;font-size:8.5px;opacity:.7;flex:none}
.cb-pick-stretch{border-style:dashed}
.cb-pick-more{justify-content:center;opacity:.75;cursor:pointer;border-style:dashed}
.cb-pick-more:hover{opacity:1;border-color:var(--accent,#2A5BD7);color:var(--accent,#2A5BD7)}
.cb-pick-more::after{content:'\2197';font-size:8.5px;opacity:.8;margin-left:3px}
/* Y.1068 — what the trial covers, said plainly next to the action it covers. */
.cb-trial{margin-top:8px;font-size:11.5px;line-height:1.5;color:var(--muted);border-left:2px solid var(--accent,#2A5BD7);padding-left:9px}
.cb-trial b{color:var(--ink)}
/* Y.1055 — the horizon lens: matches stay full colour, the rest fade. Nothing is written. */
.cb-faded{opacity:.28;filter:saturate(.35)}
.cb-cell-faded{opacity:.45;filter:saturate(.5)}
.cb-lens{display:flex;justify-content:center;align-items:center;gap:6px;flex-wrap:wrap;margin:4px 0 6px}
.cb-hz{background:var(--surface);border:1px solid var(--line);border-radius:999px;padding:6px 15px;font:inherit;font-size:12.5px;font-weight:600;color:var(--muted);cursor:pointer;transition:all .15s ease}
.cb-hz:hover{border-color:var(--accent,#2A5BD7);color:var(--accent,#2A5BD7)}
.cb-hz.on{background:var(--accent,#2A5BD7);border-color:var(--accent,#2A5BD7);color:#fff}
.cb-hz b{font-weight:800;opacity:.75;margin-left:3px}
.cb-setap{background:none;border:1px dashed var(--line);border-radius:999px;padding:6px 13px;font:inherit;font-size:11.5px;color:var(--muted);cursor:pointer;margin-left:6px}
.cb-setap:hover{border-color:var(--accent,#2A5BD7);color:var(--accent,#2A5BD7)}
.cb-lens-sub{text-align:center;font-size:11px;color:var(--muted);margin:0 0 10px}
@media (prefers-reduced-motion: reduce){.cb-pick,.cb-hz{transition:none}}
.cb-credit{background:var(--accent-weak);border:1px solid var(--i-bd);border-radius:10px;padding:11px 14px;font-size:12.5px;color:var(--ink);line-height:1.5;margin-bottom:12px}
.cb-credit b{color:var(--accent-2)}
.cb-legend{display:flex;gap:14px;flex-wrap:wrap;align-items:center;margin:10px 0 4px;font-size:11px;color:var(--muted)}
.cb-lg{display:flex;align-items:center;gap:5px}
.cb-lg i{width:14px;height:14px;border-radius:3px;display:inline-block;border:1px solid var(--line)}

/* ---- landing + pricing ---- */
.lp-nav{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:12px;padding-bottom:14px;border-bottom:1px solid var(--line);margin-bottom:26px}
.lp-nav-links{display:flex;align-items:center;gap:16px}
.lp-hero{text-align:center;padding:24px 0 30px}
.lp-kicker{font-size:12px;letter-spacing:.06em;text-transform:uppercase;color:var(--accent);font-weight:600}
.lp-h1{font-size:40px;line-height:1.1;letter-spacing:-.02em;margin:14px auto 0;max-width:760px;color:var(--ink)}
.lp-h1 .hl{color:var(--accent)}
.lp-h2{font-size:27px;letter-spacing:-.015em;margin:0;color:var(--ink)}
.lp-sub{color:var(--muted);font-size:15px;line-height:1.6;max-width:640px;margin:16px auto 0}
.lp-cta{display:flex;gap:12px;justify-content:center;flex-wrap:wrap;margin-top:22px}
.lp-note{color:var(--faint);font-size:12.5px;margin-top:12px}
.lp-ent{border-top:2px solid var(--accent)}
.lp-ent-tag{font-size:10.5px;letter-spacing:.04em;text-transform:uppercase;color:var(--muted);font-weight:600}
.lp-ent-l{font-size:18px;font-weight:600;color:var(--ink);margin:3px 0 7px;letter-spacing:-.01em}
.lp-step-n{width:30px;height:30px;border-radius:8px;background:var(--accent-weak);border:1px solid var(--i-bd);color:var(--accent-2);font-weight:700;display:flex;align-items:center;justify-content:center;font-size:14px}
.lp-group-h{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 10px;margin:14px 0 9px}
.lp-group-l{font-size:11px;letter-spacing:.05em;text-transform:uppercase;color:var(--accent);font-weight:700}
.lp-group-b{font-size:12.5px;color:var(--muted)}
.lp-methods-note{color:var(--muted);font-size:13.5px;line-height:1.55;max-width:680px;margin:2px 0 12px}
.lp-grounded{margin-top:30px;background:var(--surface-2);border:1px solid var(--line);border-radius:12px;padding:18px 20px}
.lp-final{text-align:center;margin:42px 0 20px;padding:30px 20px;background:var(--surface-2);border:1px solid var(--line);border-radius:14px;display:flex;flex-direction:column;align-items:center}
.price-card{display:flex;flex-direction:column;position:relative}
.price-best{border-color:var(--accent);box-shadow:0 0 0 1px var(--accent) inset}
.price-badge{position:absolute;top:-10px;left:14px;font-size:9.5px;letter-spacing:.04em;text-transform:uppercase;font-weight:700;background:var(--accent);border:1px solid var(--accent);color:var(--accent-ink);border-radius:6px;padding:2px 9px}
.price-name{font-size:15px;font-weight:600;color:var(--ink);margin-top:4px}
.price-amt{font-size:30px;font-weight:700;letter-spacing:-.02em;color:var(--ink);margin:6px 0 2px}
.price-per{font-size:14px;font-weight:500;color:var(--muted)}
.price-for{font-size:12px;color:var(--muted);margin-bottom:10px}
.price-feats{list-style:none;margin:0 0 14px;padding:0;flex:1}
.price-feats li{font-size:12.5px;color:var(--text);line-height:1.45;padding:5px 0 5px 18px;position:relative;border-bottom:1px solid var(--line)}
.price-feats li:before{content:'✓';position:absolute;left:0;color:var(--g-ink);font-weight:700}
.price-cta{margin-top:auto}
.preview-banner{display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap;background:var(--accent-weak);border:1px solid var(--i-bd);border-radius:10px;padding:13px 18px;margin-bottom:16px;font-size:13.5px;color:var(--ink)}
.preview-banner b{color:var(--ink)}

/* ---- generation onboarding + studio ---- */
textarea{width:100%;margin-top:10px;background:var(--surface);border:1px solid var(--line);border-radius:8px;padding:11px 13px;color:var(--ink);font-size:14px;outline:none;font-family:inherit;resize:vertical}
textarea:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-weak)}
/* cohort insights charts */
.ci-row{display:flex;align-items:center;gap:10px;padding:4px 0;font-size:12px}
.ci-label{flex:none;width:150px;color:var(--ink)}
.ci-bar{flex:1;height:14px;background:var(--surface-3);border-radius:4px;overflow:hidden}
.ci-fill{display:block;height:100%;background:var(--accent);border-radius:4px}
.ci-n{flex:none;width:28px;text-align:right;font-variant-numeric:tabular-nums;color:var(--muted)}
.ci-hist{display:flex;align-items:flex-end;gap:5px;height:120px;padding-top:8px}
.ci-hcol{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:flex-end;height:100%}
.ci-hbar{width:70%;min-height:1px;background:var(--accent);border-radius:3px 3px 0 0}
.ci-hx{font-size:9px;color:var(--muted);margin-top:4px}
.cohort-head{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap}
.cohort-sort{display:inline-flex;gap:4px;flex-wrap:wrap}
.csort{font-size:11px;font-weight:600;padding:4px 9px;border:1px solid var(--line);background:var(--surface);color:var(--muted);border-radius:7px;cursor:pointer;font-family:inherit}
.csort.on{border-color:var(--accent);background:var(--accent-weak);color:var(--accent)}
.csort:hover{border-color:var(--line-2)}
.ob-intro{margin:2px 0 16px;line-height:1.55}
.ent-group{margin-bottom:12px}
.ent-group-h{font-size:10px;font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:var(--muted);margin:0 0 6px 2px}
.ent-group .ent{margin-bottom:0}
.ent{display:grid;grid-template-columns:1fr 1fr 1fr;gap:8px;margin-bottom:14px}
.ent-btn{cursor:pointer;display:flex;flex-direction:column;gap:3px;text-align:left;border:1px solid var(--line);background:var(--surface);border-radius:10px;padding:11px 12px;font-family:inherit}
.ent-btn .ent-l{font-weight:600;font-size:13px;color:var(--ink)}
.ent-btn .ent-t{font-size:10px;line-height:1.3;color:var(--muted)}
.ent-btn.on{background:var(--accent-weak);border-color:var(--accent)}
.ent-btn.on .ent-l{color:var(--accent-2)}.ent-btn.on .ent-t{color:var(--text)}
.ent-btn:hover{border-color:var(--line-2)}
.seg{display:flex;gap:6px;margin-bottom:11px}
.seg-btn{flex:1;cursor:pointer;border:1px solid var(--line);background:var(--surface);color:var(--muted);border-radius:8px;padding:8px;font-size:12px;font-weight:600;font-family:inherit}
.seg-btn.on{background:var(--accent-weak);border-color:var(--accent);color:var(--accent-2)}
.thesis{background:var(--surface);border:1px solid var(--line);border-radius:10px;padding:16px 18px;margin-bottom:18px}
.thesis-label{font-size:11px;letter-spacing:.05em;color:var(--muted);text-transform:uppercase;font-weight:600}
.thesis-text{font-size:16px;color:var(--ink);margin-top:6px;line-height:1.5}
.chips{display:flex;flex-wrap:wrap;gap:8px}
.chip{font-size:11.5px;background:var(--surface-3);border:1px solid var(--line);border-radius:16px;padding:5px 11px;color:var(--text)}
.cards3{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px}
.scard{background:var(--surface);border:1px solid var(--line);border-radius:10px;padding:14px}
/* Y.1282 — the hygiene mini-grid: one column header (the stage), one row header (the job), one filled
   intersection. Drawn rather than printed, so four siblings can be told apart at a glance; the full
   untruncated square rides on the title attribute, and a concept with no square shows the same glyph
   empty with "not on the board" in the corner. */
/* Y.1282b — WRAP, NEVER ELLIPSIZE. Lars: "make sure I can read the 2x2 table column and row headers.
   Don't truncate." The 17px fixed rows + nowrap + ellipsis rendered "Borrower Eng..." — a glyph built to
   distinguish concepts at a glance, cut down to the one part every sibling shares. Rows now size to their
   wrapped content and the headers print whole; the glance costs a line or two of height, which is the
   right trade because an unreadable header is not a smaller header, it is no header. */
.hy-cell{display:inline-grid;grid-template-columns:minmax(0,1.2fr) minmax(0,1fr);grid-auto-rows:auto;gap:1px;background:var(--line);border:1px solid var(--line);border-radius:6px;overflow:hidden;width:248px;margin:6px 8px 2px 0;vertical-align:middle;font-size:10px;line-height:1.3}
.hy-cell>span{min-width:0;background:var(--surface-2);padding:3px 6px;overflow-wrap:break-word}
.hy-cell-x{display:flex;align-items:center;justify-content:center}
.hy-cell-corner{color:var(--faint);font-size:8.5px;letter-spacing:.02em}
.hy-cell-col,.hy-cell-row{font-weight:600;color:var(--text)}
.hy-cell-x{text-align:center}
.hy-cell-x.hy-cell-on{background:var(--accent-weak);color:var(--accent);font-size:9px}
.hy-item-acts{display:flex;flex-wrap:wrap;gap:6px;margin:2px 0 10px}
.hy-item-acts .btn{font-size:11px;padding:3px 9px;width:auto;margin:0}
.scard-h{font-size:13px;font-weight:600;color:var(--ink);margin-bottom:7px}
.scard-b{font-size:12.5px;color:var(--text);line-height:1.5}
.scard-b ul.mini{margin:0;padding-left:16px}
ul.mini li{font-size:12.5px;color:var(--text);line-height:1.5;margin-bottom:5px}
.chain-step{font-size:12.5px;color:var(--text);line-height:1.45;padding:3px 0}
.chain-arrow{color:var(--faint);margin-right:3px}
.ccards{display:grid;grid-template-columns:1fr;gap:14px}
.ccard{background:var(--surface);border:1px solid var(--line);border-radius:12px;padding:16px 18px;box-shadow:var(--shadow-sm)}
.ccard-top{display:flex;align-items:flex-start;gap:12px}
.ccard-title{font-size:17px;font-weight:600;letter-spacing:-.01em;flex:1;line-height:1.25;color:var(--ink)}
.score{flex:none;background:var(--g-bg);color:var(--g-ink);border:1px solid var(--g-bd);border-radius:8px;font-weight:700;font-size:15px;padding:3px 10px}
/* score box tinted to its RAG tone (not always green) */
.score.sc-b-g{background:var(--g-bg);border-color:var(--g-bd);color:var(--g-ink)}
.score.sc-b-y{background:var(--y-bg);border-color:var(--y-bd);color:var(--y-ink,#4a45cf)}
.score.sc-b-o{background:var(--a-bg);border-color:var(--a-bd);color:var(--a-ink)}
.score.sc-b-r{background:var(--r-bg);border-color:var(--r-bd);color:var(--r-ink)}
/* Studio Scorecard (Y.170) — studio-level "vet the studio" readout. Theme-token tints only (no
   hardcoded light hex), so it reads correctly in dark mode too. */
.ss-hero{display:flex;align-items:center;gap:16px;margin:8px 0 4px;padding:14px 16px;border:1px solid var(--line);border-radius:12px;background:var(--surface-2)}
.ss-hero-num{flex:none;min-width:86px;text-align:center;font-weight:800;font-size:34px;line-height:1;padding:16px 10px;border-radius:12px;border:1px solid var(--line)}
.ss-hero-num.sc-b-g{background:var(--g-bg);border-color:var(--g-bd);color:var(--g-ink)}
.ss-hero-num.sc-b-y{background:var(--y-bg);border-color:var(--y-bd);color:var(--y-ink)}
.ss-hero-num.sc-b-o{background:var(--a-bg);border-color:var(--a-bd);color:var(--a-ink)}
.ss-hero-num.sc-b-r{background:var(--r-bg);border-color:var(--r-bd);color:var(--r-ink)}
.ss-hero-txt{font-size:13px;color:var(--ink)}
.ss-hero-txt .ss-verdict{margin-top:5px;font-size:12.5px;color:var(--text);line-height:1.5;font-weight:400}
.ss-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:10px;margin:12px 0}
.ss-card{border:1px solid var(--line);border-radius:10px;padding:11px 13px;background:var(--surface)}
.ss-num{font-weight:800;font-size:22px;line-height:1.1;color:var(--ink)}
.ss-num.ss-t-g{color:var(--g-ink)} .ss-num.ss-t-y{color:var(--y-ink)} .ss-num.ss-t-o{color:var(--a-ink)} .ss-num.ss-t-r{color:var(--r-ink)}
.ss-lbl{font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.03em;color:var(--muted);margin-top:4px}
.ss-sub{font-size:11.5px;color:var(--faint);margin-top:4px;line-height:1.4}
.ss-cta{display:flex;gap:8px;flex-wrap:wrap;margin:2px 0 4px}
/* Search OS · Health Check red-flag findings (Y.172) — theme-token tints only (dark-safe). */
.rf-list{display:flex;flex-direction:column;gap:8px;margin:10px 0}
.rf-item{border:1px solid var(--line);border-left-width:3px;border-radius:8px;padding:9px 12px;background:var(--surface)}
.rf-fired.rf-high{border-left-color:var(--r-ink);background:var(--r-bg)}
.rf-fired.rf-med{border-left-color:var(--a-ink);background:var(--a-bg)}
.rf-unknown{border-left-color:var(--faint)}
.rf-h{font-weight:700;font-size:12.5px;color:var(--ink);display:flex;gap:7px;align-items:center;flex-wrap:wrap}
.rf-id{font-family:var(--mono);font-size:10px;font-weight:700;color:var(--muted)}
.rf-note{font-size:12px;color:var(--text);margin-top:3px;line-height:1.45}
.rf-req{font-size:11px;color:var(--faint);margin-top:5px}
.rf-req b{color:var(--muted);text-transform:uppercase;letter-spacing:.03em;font-size:10px}
.rf-sev{font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:.03em;padding:1px 5px;border-radius:4px}
.rf-sev.high{background:var(--r-bg);color:var(--r-ink);border:1px solid var(--r-bd)}
.rf-sev.med{background:var(--a-bg);color:var(--a-ink);border:1px solid var(--a-bd)}
/* Search OS · Deal Model controls + sensitivity tornado (Y.175) — theme-token, dark-safe. */
.mdl-ctls{display:flex;flex-wrap:wrap;gap:12px;align-items:flex-end;margin:8px 0}
.mdl-ctl{display:flex;flex-direction:column;font-size:11px;font-weight:700;color:var(--muted);gap:4px;text-transform:uppercase;letter-spacing:.03em}
.mdl-inwrap{display:flex;align-items:center;gap:4px}
.mdl-in{width:74px;padding:5px 7px;border:1px solid var(--line);border-radius:7px;background:var(--surface);color:var(--ink);font-size:13px;font-weight:700}
.mdl-inwrap span{font-size:11px;color:var(--faint);font-weight:700}
.mdl-tornado{display:flex;flex-direction:column;gap:5px;margin:8px 0}
.mdl-trow{display:flex;align-items:center;gap:8px;font-size:12px}
.mdl-tlbl{flex:0 0 150px;color:var(--text)}
.mdl-tbarwrap{flex:1;height:12px;background:var(--surface-3);border-radius:6px;overflow:hidden}
.mdl-tbar{display:block;height:100%;background:var(--accent);border-radius:6px}
.mdl-tval{flex:0 0 34px;text-align:right;font-family:var(--mono);font-size:11px;color:var(--muted)}
.di-raw{width:100%;min-height:150px;padding:10px;border:1px solid var(--line);border-radius:8px;background:var(--surface);color:var(--ink);font-family:var(--mono);font-size:12px;line-height:1.5;resize:vertical;margin:6px 0;box-sizing:border-box}
/* Off-Market Radar (Y.179) */
.rdr-score{font-weight:800;font-size:16px;font-family:var(--mono);min-width:30px;display:inline-block}
.rdr-chips{display:flex;flex-wrap:wrap;gap:5px;margin-top:6px}
.rdr-chip{font-size:10px;font-weight:600;color:var(--muted);background:var(--surface-3);border:1px solid var(--line);border-radius:5px;padding:1px 7px}
.ccard-head{color:var(--ink);font-size:13.5px;margin-top:6px;font-weight:500}
.bench{display:inline-block;margin-top:8px;font-size:11px;font-weight:600;color:var(--i-ink);background:var(--i-bg);border:1px solid var(--i-bd);border-radius:6px;padding:3px 9px}
.ccard-sum{color:var(--text);font-size:13px;margin-top:6px;line-height:1.55}
/* Y.1231 — the patent a concept is licensed from. Reads as a citation, not a claim: quiet weight, a
   left rule, and the source named inline so nobody has to ask where the title came from. */
.ccard-ip{margin-top:8px;padding:7px 10px;border-left:2px solid var(--accent);background:var(--accent-weak);border-radius:0 6px 6px 0;font-size:12px;color:var(--text);line-height:1.5}
.ccard-ip-k{font-weight:600;color:var(--accent);margin-right:4px}
.ccard-ip-s{color:var(--muted)}
.kv{display:flex;gap:10px;margin-top:9px;font-size:12.5px}
.kv .k{flex:none;width:130px;color:var(--muted);font-weight:600}
.kv span:last-child{color:var(--ink)}
.ccard-why{margin-top:9px;font-size:12px;color:var(--muted);font-style:italic}
.lock{margin-top:12px;display:flex;align-items:center;gap:9px;background:var(--accent-weak);border:1px solid var(--i-bd);border-radius:9px;padding:9px 12px;font-size:11.5px;color:var(--accent-2)}
.lock-i{font-size:13px}
.lock-cta{margin-left:auto;cursor:pointer;background:var(--accent);border:1px solid var(--accent);color:var(--accent-ink);border-radius:6px;padding:4px 12px;font-weight:600;white-space:nowrap}
.lock-cta:hover{background:var(--accent-2)}
.drop{margin-top:10px;border:1px dashed var(--line-2);border-radius:9px;padding:12px 14px;font-size:12.5px;color:var(--muted);cursor:pointer;text-align:center;transition:.12s}
.drop:hover,.drop.over{border-color:var(--accent);color:var(--ink);background:var(--accent-weak)}
.drop.has{border-style:solid;color:var(--text);text-align:left}
.drop b{color:var(--ink)}
.drop-x{margin-left:8px;color:var(--r-ink);cursor:pointer;text-decoration:underline;font-size:11.5px}
.file-row{background:var(--surface-2);border:1px solid var(--line);border-radius:8px;padding:8px 12px;font-size:12.5px;color:var(--text);margin-bottom:6px}
.file-row b{color:var(--ink)}

/* thesis header + edit/regenerate */
.thesis-head{display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.thesis-head .thesis-label{flex:1}
.thesis-edit{cursor:pointer;font-family:inherit;font-size:11.5px;font-weight:600;color:var(--text);background:var(--surface);border:1px solid var(--line);border-radius:7px;padding:5px 11px;white-space:nowrap}
.thesis-edit:hover{border-color:var(--line-2);color:var(--ink)}
.ver-sel{font-family:inherit;font-size:11.5px;font-weight:500;color:var(--text);background:var(--surface);border:1px solid var(--line);border-radius:7px;padding:5px 9px;max-width:260px;cursor:pointer}
.ver-sel:hover{border-color:var(--line-2)}
.note{font-size:12px;color:var(--muted);line-height:1.5;background:var(--surface-2);border:1px solid var(--line);border-radius:10px;padding:11px 14px}
.note b{color:var(--ink)}

/* university profile */
.stats{display:flex;flex-wrap:wrap;gap:10px;margin-bottom:4px}
.stat{display:flex;flex-direction:column;background:var(--surface);border:1px solid var(--line);border-radius:10px;padding:9px 14px;min-width:170px}
.stat-k{font-size:10.5px;letter-spacing:.04em;text-transform:uppercase;color:var(--muted);font-weight:600}
.stat-v{font-size:15px;color:var(--ink);font-weight:600;margin-top:2px}
.prow{margin-top:12px}
.prow-k{font-size:11px;letter-spacing:.04em;text-transform:uppercase;color:var(--muted);font-weight:600;margin-bottom:7px}
.plist{list-style:none;margin:0;padding:0}
.plist li{font-size:12.5px;color:var(--text);line-height:1.45;padding:7px 0;border-bottom:1px solid var(--line)}
.plist li:last-child{border-bottom:0}
.plist-scroll{max-height:340px;overflow-y:auto;padding-right:6px}
.plist-scroll::-webkit-scrollbar{width:8px}
.plist-scroll::-webkit-scrollbar-thumb{background:var(--line-2);border-radius:6px}
.plist b{color:var(--ink)}
.li-note{display:block;color:var(--muted);font-size:11.5px;margin-top:2px}
.tag{font-size:9.5px;letter-spacing:.04em;text-transform:uppercase;background:var(--g-bg);color:var(--g-ink);border:1px solid var(--g-bd);border-radius:5px;padding:1px 6px;vertical-align:middle}

/* concept detail grid */
.cgrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:12px;margin-top:12px}
.cblock{background:var(--surface-2);border:1px solid var(--line);border-radius:10px;padding:10px 12px}
/* individual: idea rating + suggested stronger version */
.rating{display:flex;gap:16px;background:var(--surface);border:1px solid var(--line);border-radius:12px;padding:16px 18px}
.rating-score{flex:none;width:64px;height:64px;border-radius:12px;background:var(--g-bg);color:var(--g-ink);border:1px solid var(--g-bd);display:flex;align-items:center;justify-content:center;font-size:26px;font-weight:700}
.rating-body{flex:1}
.rating-verdict{font-size:14px;color:var(--ink);font-weight:500;margin-bottom:8px;line-height:1.45}
.rating-cols{display:grid;grid-template-columns:1fr 1fr;gap:14px}
.rc-k{font-size:10.5px;letter-spacing:.04em;text-transform:uppercase;color:var(--g-ink);font-weight:700;margin-bottom:4px}
.rc-k.risk{color:var(--a-ink)}
.rating-cols ul{margin:0;padding-left:16px}
.rating-cols li{font-size:12px;color:var(--text);line-height:1.5;margin-bottom:3px}
.suggested{background:var(--surface);border:1px solid var(--line);border-radius:12px;padding:16px 18px}
.sug-compare{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
/* Y.385 — feedback-steered "Iterate" box on the stronger version */
.sug-iterate{margin-top:12px;padding-top:12px;border-top:1px dashed var(--line)}
.sug-iterate-k{font-size:11px;font-weight:700;letter-spacing:.02em;color:var(--text);margin-bottom:6px}
.sug-iterate-ta{width:100%;box-sizing:border-box;min-height:54px;resize:vertical;border:1px solid var(--line);border-radius:9px;background:var(--surface-3);color:var(--text);font:inherit;font-size:12.5px;line-height:1.5;padding:9px 11px;margin-bottom:8px}
.sug-iterate-ta:focus{outline:none;border-color:var(--accent)}
.ck-run.ck-ghost{background:transparent;border:1px solid var(--accent);color:var(--accent)}
.ck-run.ck-ghost:hover{background:var(--accent);color:var(--on-accent,#fff)}
.ck-stronger-focus{margin-top:6px}
/* Y.394 — stronger-version iteration compare (current proposal vs your feedback iteration) */
.sug-cmp{display:grid;grid-template-columns:1fr 1fr;gap:12px}
@media (max-width:720px){.sug-cmp{grid-template-columns:1fr}}
.sug-cmp-col{border:1px solid var(--line);border-radius:10px;padding:12px 14px;background:var(--surface)}
.sug-cmp-col.cmp-new{border-color:var(--g-bd);background:var(--g-bg)}
.sug-cmp-h{font-weight:700;font-size:12px;margin-bottom:6px;display:flex;align-items:center;gap:8px;flex-wrap:wrap}
/* Y.398 — explored slate: 3 distinct, score-ranked stronger versions to pick from */
.sug-slate{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:12px}
.sug-slate-card{border:1px solid var(--line);border-radius:10px;padding:12px 14px;background:var(--surface);display:flex;flex-direction:column}
.sug-slate-card.sug-slate-top{border-color:var(--g-bd);background:var(--g-bg)}
.sug-slate-h{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:6px}
.sug-slate-rank{font-weight:800;font-size:13px;color:var(--muted)}
.sug-slate-best{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:var(--g-ink,#16a34a)}
.sug-slate-card .ck-run{margin-top:auto}
/* Y.680 — .ccard-title carries flex:1 for its HORIZONTAL row uses; inside the slate's column-flex card
   that greed turns VERTICAL: the title absorbed the grid row's free height, shoving headline/summary to
   the card bottom with a void in between. Pin it (and keep the pick button as the only auto-grow). */
.sug-slate-card .ccard-title{flex:none}
.sc-pill{font-size:12px;font-weight:600;border-radius:8px;padding:5px 12px}
.sc-pill.orig{background:var(--surface-3);border:1px solid var(--line);color:var(--muted)}
.sc-pill.better{background:var(--g-bg);border:1px solid var(--g-bd);color:var(--g-ink)}
.sc-arrow{color:var(--faint);font-size:16px}
.model-badge{font-size:9.5px;letter-spacing:.02em;font-weight:600;border-radius:5px;padding:2px 7px;vertical-align:middle;white-space:nowrap;background:var(--surface-3);border:1px solid var(--line);color:var(--muted)}
.cap{font-size:9.5px;letter-spacing:.03em;text-transform:uppercase;font-weight:700;border-radius:5px;padding:1px 6px;vertical-align:middle;white-space:nowrap}
.cap-low{background:var(--g-bg);color:var(--g-ink);border:1px solid var(--g-bd)}
.cap-moderate{background:var(--a-bg);color:var(--a-ink);border:1px solid var(--a-bd)}
.cap-high{background:var(--r-bg);color:var(--r-ink);border:1px solid var(--r-bd)}
.rag{font-size:9px;letter-spacing:.03em;text-transform:uppercase;font-weight:700;border-radius:4px;padding:1px 6px;vertical-align:middle;white-space:nowrap}
.rag-g{background:var(--g-bg);color:var(--g-ink);border:1px solid var(--g-bd)}
.rag-a{background:var(--a-bg);color:var(--a-ink);border:1px solid var(--a-bd)}
.rag-r{background:var(--r-bg);color:var(--r-ink);border:1px solid var(--r-bd)}
.icp-val{display:inline-block;max-width:100%;font-size:10px;font-weight:700;letter-spacing:.02em;color:var(--g-ink);background:var(--g-bg);border:1px solid var(--g-bd);border-radius:5px;padding:1px 6px;overflow-wrap:anywhere;vertical-align:middle}
.icp-size{display:inline-block;max-width:100%;font-size:10px;font-weight:600;letter-spacing:.02em;color:var(--i-ink);background:var(--i-bg);border:1px solid var(--i-bd);border-radius:5px;padding:1px 6px;overflow-wrap:anywhere;vertical-align:middle}
.pstatus{font-size:9px;letter-spacing:.03em;text-transform:uppercase;font-weight:700;border-radius:4px;padding:1px 6px;vertical-align:middle}
.pstatus-g{background:var(--g-bg);color:var(--g-ink);border:1px solid var(--g-bd)}
.pstatus-p{background:var(--i-bg);color:var(--i-ink);border:1px solid var(--i-bd)}
.horizon{font-size:9.5px;letter-spacing:.03em;text-transform:uppercase;font-weight:700;border-radius:5px;padding:2px 7px;vertical-align:middle;white-space:nowrap}
.horizon.h-core{background:var(--g-bg);color:var(--g-ink);border:1px solid var(--g-bd)}
.horizon.h-adjacent{background:var(--a-bg);color:var(--a-ink);border:1px solid var(--a-bd)}
.horizon.h-transformative{background:var(--i-bg);color:var(--i-ink);border:1px solid var(--i-bd)}
.cb-k{font-size:10.5px;letter-spacing:.04em;text-transform:uppercase;color:var(--muted);font-weight:600;margin-bottom:4px}
.cb-v{font-size:12.5px;color:var(--ink);line-height:1.5}

/* deal-killer assumptions */
.killers{margin-top:12px;background:var(--a-bg);border:1px solid var(--a-bd);border-radius:10px;padding:10px 13px}
.killers-k{font-size:11px;letter-spacing:.03em;text-transform:uppercase;color:var(--a-ink);font-weight:700;margin-bottom:6px}
.killers ul{margin:0;padding-left:18px}
.killers li{font-size:12.5px;color:var(--text);line-height:1.5;margin-bottom:3px}

/* profile extras */
.scard-h .by{font-size:10px;letter-spacing:.02em;text-transform:none;color:var(--muted);font-weight:500}
.chip-link{text-decoration:none;cursor:pointer}
.chip-link:hover{border-color:var(--accent);color:var(--accent-2)}
.src-line{font-size:11.5px;color:var(--muted);margin-top:10px;line-height:1.5}
.src-line b{color:var(--ink)}
.src-tag{font-size:8.5px;letter-spacing:.03em;text-transform:uppercase;color:var(--g-ink);background:var(--g-bg);border:1px solid var(--g-bd);border-radius:4px;padding:1px 5px;margin-left:6px;font-weight:700;vertical-align:middle}

/* opportunity bank — attractiveness × feasibility quadrant board */
.afm{display:grid;grid-template-columns:18px 1fr;grid-template-rows:1fr 18px;gap:6px;max-width:560px;margin:4px 0 6px}
.afm-ylab{grid-column:1;grid-row:1;writing-mode:vertical-rl;transform:rotate(180deg);font-size:9.5px;letter-spacing:.04em;text-transform:uppercase;color:var(--muted);font-weight:600;justify-self:center;align-self:center}
.afm-box{grid-column:2;grid-row:1;position:relative;aspect-ratio:1/1;border:1px solid var(--line);border-radius:10px;background:var(--surface);overflow:hidden}
.afm-xlab{grid-column:2;grid-row:2;text-align:center;font-size:9.5px;letter-spacing:.04em;text-transform:uppercase;color:var(--muted);font-weight:600}
.afm-q{position:absolute;width:50%;height:50%;display:flex;align-items:flex-start;justify-content:flex-start;padding:8px 10px}
.afm-q span{font-size:10px;letter-spacing:.03em;text-transform:uppercase;font-weight:600;opacity:.85}
.afm-tl{top:0;left:0}.afm-tr{top:0;right:0;justify-content:flex-end}
.afm-bl{bottom:0;left:0;align-items:flex-end}.afm-br{bottom:0;right:0;justify-content:flex-end;align-items:flex-end}
.afm-tr span{color:var(--g-ink)}.afm-tl span{color:var(--a-ink)}.afm-br span{color:var(--i-ink)}.afm-bl span{color:var(--r-ink)}
.afm-mid-v{position:absolute;left:50%;top:0;bottom:0;width:1px;background:var(--line)}
.afm-mid-h{position:absolute;top:50%;left:0;right:0;height:1px;background:var(--line)}
.afm-dot{position:absolute;width:26px;height:26px;border-radius:50%;transform:translate(-50%,50%);display:flex;align-items:center;justify-content:center;font-size:9px;font-weight:700;color:#fff;border:2px solid #fff;box-shadow:var(--shadow-sm);cursor:default;z-index:2}
.afm-dot.q-g{background:var(--g-ink)}.afm-dot.q-a{background:var(--a-ink)}.afm-dot.q-i{background:var(--i-ink)}.afm-dot.q-r{background:var(--r-ink)}
/* quadrant chips + filters + banked table */
.quad-chip{font-size:9px;letter-spacing:.03em;text-transform:uppercase;font-weight:700;border-radius:4px;padding:1px 7px;white-space:nowrap}
.quad-chip.q-g{background:var(--g-bg);color:var(--g-ink);border:1px solid var(--g-bd)}
.quad-chip.q-a{background:var(--a-bg);color:var(--a-ink);border:1px solid var(--a-bd)}
.quad-chip.q-i{background:var(--i-bg);color:var(--i-ink);border:1px solid var(--i-bd)}
.quad-chip.q-r{background:var(--r-bg);color:var(--r-ink);border:1px solid var(--r-bd)}
.ob-filters{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:10px}
.ob-fb{cursor:pointer;font-family:inherit;font-size:11px;font-weight:600;color:var(--muted);background:transparent;border:1px solid var(--line);border-radius:7px;padding:5px 10px}
.ob-fb:hover{color:var(--ink);background:var(--surface-3)}
.ob-fb.on{color:var(--accent-2);background:var(--accent-weak);border-color:var(--accent)}
.ob-fb-n{font-size:9.5px;opacity:.7;margin-left:2px}
.ob-twrap{overflow-x:auto;border:1px solid var(--line);border-radius:10px;background:var(--surface)}
.ob-table{border-collapse:collapse;width:100%;font-size:12px}
.ob-table th{text-align:left;font-size:9.5px;letter-spacing:.04em;text-transform:uppercase;color:var(--muted);font-weight:600;padding:9px 12px;border-bottom:1px solid var(--line);white-space:nowrap;background:var(--surface-2)}
.ob-table td{padding:9px 12px;border-bottom:1px solid var(--line);vertical-align:middle;color:var(--text)}
.ob-table tr:last-child td{border-bottom:none}
.ob-name{color:var(--ink);font-weight:600}
/* Concepts list (Y.56) — sortable portfolio table rows */
.cl-row{cursor:pointer}
.cl-row:hover td{background:var(--surface-2)}
.cl-t{color:var(--ink);font-weight:600}
.cl-h{font-size:11px;color:var(--muted);margin-top:2px;max-width:420px}
.cl-num{font-family:var(--mono);font-size:13px;color:var(--ink)}
/* Graded score colors (Y.135): green good → yellow → orange → red bad */
.sc-g{color:var(--g-ink)!important} .sc-y{color:var(--y-ink,#4a45cf)!important} .sc-o{color:var(--a-ink)!important} .sc-r{color:var(--r-ink)!important}
.ccard-lock,.ck-pick-lock{font-size:11px;opacity:.65;flex:none}
.cl-views{font-size:11px;color:var(--muted);font-family:var(--mono)}
.cl-dim{color:var(--muted)}
/* the concept (description) column owns the width; founders wrap like prose */
#cl-table td:first-child{min-width:300px;max-width:480px}
.cl-found{white-space:normal;min-width:130px;max-width:230px;overflow-wrap:anywhere}
.cl-edit{margin-left:6px;border:none;background:transparent;color:var(--muted);cursor:pointer;font-size:11px;padding:2px;border-radius:4px;opacity:0;transition:opacity .12s}
.cl-row:hover .cl-edit{opacity:1}
.cl-edit:hover{color:var(--accent)}
.ck-founders{font-size:12.5px;color:var(--text);margin:2px 0 12px}
.ck-f-k{font-size:9.5px;letter-spacing:.04em;text-transform:uppercase;color:var(--muted);font-weight:600;margin-right:4px}
/* Coaching & Accountability (Y.58) — agenda rows + owned task checkboxes */
.co-ag{display:flex;align-items:center;gap:8px;padding:6px 0;border-bottom:1px solid var(--line);flex-wrap:wrap}
.co-ag:last-of-type{border-bottom:none}
.co-ag-t{flex:1;min-width:200px;font-size:12.5px;color:var(--ink)}
.co-ag-m{font-size:11px;color:var(--muted);font-family:var(--mono);white-space:nowrap}
.co-task{display:flex;align-items:center;gap:8px;padding:5px 0;cursor:pointer;flex-wrap:wrap}
.co-task input{accent-color:var(--accent)}
.co-task-t{flex:1;min-width:180px;font-size:12.5px;color:var(--ink)}
.co-task.done .co-task-t{text-decoration:line-through;color:var(--muted)}
.co-task-o{font-size:11px;color:var(--muted);font-family:var(--mono);white-space:nowrap}
/* Y.66 report instruments — parse-only visuals over the research markdown */
.dm-sec{border:1px solid var(--line);border-radius:10px;padding:12px 14px;margin:10px 0;background:var(--surface)}
.dm-sech{font-family:var(--mono);font-size:10.5px;letter-spacing:.07em;text-transform:uppercase;color:var(--accent-2);font-weight:700;margin-bottom:8px}
.rv{display:flex;gap:16px;align-items:flex-start;flex-wrap:wrap;margin:12px 0}
.rv-gauge{flex:none;width:120px;text-align:center;border:1px solid var(--line);border-radius:12px;padding:14px 10px;background:var(--surface)}
.rv-n{font-family:var(--mono);font-size:34px;font-weight:700;line-height:1}
.rv-of{font-family:var(--mono);font-size:11px;color:var(--muted);margin-top:2px}
.rv-lbl{font-size:11px;color:var(--muted);margin-top:6px}
.rv-g .rv-n,.rv-fill.rv-g{color:var(--g-ink)} .rv-a .rv-n,.rv-fill.rv-a{color:var(--a-ink)} .rv-r .rv-n,.rv-fill.rv-r{color:var(--r-ink)}
.rv-dims{flex:1;min-width:260px;display:flex;flex-direction:column;gap:6px}
.rv-dim{display:flex;align-items:center;gap:8px}
.rv-dn{flex:none;width:150px;font-size:11.5px;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.rv-bar{flex:1;height:8px;border-radius:99px;background:var(--surface-3);overflow:hidden}
.rv-fill{display:block;height:100%;border-radius:99px}
.rv-fill.rv-g{background:var(--g-ink)} .rv-fill.rv-a{background:var(--a-ink)} .rv-fill.rv-r{background:var(--r-ink)}
.rv-dv{flex:none;width:34px;font-family:var(--mono);font-size:10.5px;color:var(--muted);text-align:right}
.mv{display:flex;gap:12px;align-items:center;flex-wrap:wrap;margin:12px 0}
.mv-rec{font-family:var(--mono);font-size:13px;font-weight:700;letter-spacing:.05em;padding:8px 14px;border-radius:9px;border:1px solid}
.mv-rec.mv-g{color:var(--g-ink);background:var(--g-bg);border-color:var(--g-bd)}
.mv-rec.mv-a{color:var(--a-ink);background:var(--a-bg);border-color:var(--a-bd)}
.mv-rec.mv-r{color:var(--r-ink);background:var(--r-bg);border-color:var(--r-bd)}
.mv-sev{display:flex;gap:6px;align-items:center;flex-wrap:wrap}
.mv-chip{font-family:var(--mono);font-size:10.5px;font-weight:700;padding:3px 9px;border-radius:99px;border:1px solid}
.mv-chip.mv-r{color:var(--r-ink);background:var(--r-bg);border-color:var(--r-bd)}
.mv-chip.mv-a{color:var(--a-ink);background:var(--a-bg);border-color:var(--a-bd)}
.mv-chip.mv-i{color:var(--i-ink);background:var(--i-bg);border-color:var(--i-bd)}
.mv-cap{font-family:var(--mono);font-size:9.5px;letter-spacing:.05em;text-transform:uppercase;color:var(--faint)}
.tv{display:flex;gap:10px;align-items:stretch;flex-wrap:wrap;margin:12px 0}
.tv-tier{border:1px solid var(--line);border-radius:10px;padding:10px 16px;background:var(--surface);text-align:center;min-width:120px}
.tv-tier.tv-0{border-color:var(--accent)}
.tv-k{font-family:var(--mono);font-size:10px;letter-spacing:.08em;color:var(--muted);font-weight:700}
.tv-v{font-family:var(--mono);font-size:17px;font-weight:700;color:var(--ink);margin-top:4px}
/* Y.67 framework canvases — native renderers over real concept fields */
.cv-grid{display:grid;gap:8px;margin:6px 0}
.cv-lean,.cv-bmc{grid-template-columns:repeat(10,1fr);grid-auto-rows:minmax(96px,auto)}
.cv-lean .cv-cell,.cv-bmc .cv-cell{grid-column:span 2}
.cv-lean .cv-tall,.cv-bmc .cv-tall{grid-row:span 2}
.cv-lean .cv-wide,.cv-bmc .cv-wide{grid-column:span 5}
.cv-quad{grid-template-columns:1fr 1fr}
.cv-auto{grid-template-columns:repeat(auto-fill,minmax(250px,1fr))}
/* Y.77 Big Idea Canvas (Ahlstrom) — five numbered sections */
.bic{display:flex;flex-direction:column;gap:14px;margin:6px 0}
.bic-sec{border:1px solid var(--line);border-radius:12px;padding:12px 14px;background:var(--surface)}
.bic-h{display:flex;align-items:center;gap:9px;font-family:var(--mono);font-size:11px;letter-spacing:.06em;text-transform:uppercase;color:var(--accent-2);font-weight:700;margin-bottom:10px}
.bic-n{flex:none;width:20px;height:20px;border-radius:6px;background:var(--accent-weak);border:1px solid var(--line);color:var(--accent-2);display:flex;align-items:center;justify-content:center;font-size:11px}
.cv-cell{border:1px solid var(--line);border-radius:10px;background:var(--surface);padding:10px 12px;min-width:0}
.cv-cell .cv-k{font-family:var(--mono);font-size:9.5px;letter-spacing:.06em;text-transform:uppercase;color:var(--accent-2);font-weight:700;margin-bottom:6px}
.cv-cell .cv-v{font-size:12px;line-height:1.45;color:var(--text);overflow-wrap:anywhere}
.cv-empty{background:transparent;border-style:dashed}
.cv-empty .cv-k{color:var(--faint)}
.cv-empty .cv-v{color:var(--faint);font-style:italic}
/* Y.269 design pass — empty cells keep their ✨/✎ affordances faintly visible (not hover-only) so a brand-new concept shows HOW to fill the gaps */
.cv-empty .cv-tools{opacity:.5}
@media(max-width:900px){.cv-lean,.cv-bmc{grid-template-columns:1fr 1fr}.cv-lean .cv-cell,.cv-bmc .cv-cell,.cv-lean .cv-wide,.cv-bmc .cv-wide{grid-column:span 1}.cv-lean .cv-tall,.cv-bmc .cv-tall{grid-row:span 1}}
.vpc{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin:6px 0}
@media(max-width:760px){.vpc{grid-template-columns:1fr}}
.vpc-side{border:1px solid var(--line);border-radius:12px;background:var(--surface);padding:12px;display:flex;flex-direction:column;gap:8px}
.vpc-side:first-child{border-color:var(--accent)}
.vpc-h{font-family:var(--mono);font-size:10.5px;letter-spacing:.07em;text-transform:uppercase;color:var(--ink);font-weight:700}
.vpc-side .cv-cell{background:var(--surface-2)}
.jt-cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:10px;margin:6px 0}
.jt-card{border:1px solid var(--line);border-left:3px solid var(--accent);border-radius:10px;background:var(--surface);padding:11px 13px}
.jt-cust{font-family:var(--mono);font-size:10px;letter-spacing:.05em;text-transform:uppercase;color:var(--accent-2);font-weight:700;margin-bottom:5px}
.jt-job{font-size:12.5px;line-height:1.45;color:var(--ink)}
.jm-strip{display:grid;grid-template-columns:repeat(5,1fr);gap:8px;margin:6px 0}
@media(max-width:900px){.jm-strip{grid-template-columns:1fr 1fr}}
.jm-step{border:1px solid var(--line);border-radius:10px;background:var(--surface);padding:10px 12px;position:relative}
.jm-n{font-family:var(--mono);font-size:10px;font-weight:700;color:var(--accent-2);background:var(--accent-weak);border:1px solid var(--line);border-radius:5px;width:18px;height:18px;display:flex;align-items:center;justify-content:center;margin-bottom:6px}
.st-deep{border:1px solid var(--line);border-radius:11px;background:var(--surface);margin-bottom:10px;overflow:hidden}
.st-deep summary{cursor:pointer;padding:11px 14px;font-size:13px;font-weight:600;color:var(--ink);list-style:none;display:flex;align-items:center;gap:8px}
.st-deep summary::before{content:"▸";color:var(--muted);transition:transform .12s}
.st-deep[open] summary::before{transform:rotate(90deg)}
.st-deep > .dilpanel{border:none;border-top:1px solid var(--line);border-radius:0;margin:0}
/* Y.68 living canvases — per-cell edit / history / suggestion */
.cv-tools{margin-left:auto;display:inline-flex;gap:3px;opacity:0;transition:opacity .12s}
.cv-cell:hover .cv-tools,.jm-step:hover .cv-tools{opacity:1}
.cv-cell .cv-k,.jm-step .cv-k{display:flex;align-items:center;gap:6px}
.cv-tb{border:1px solid var(--line);background:var(--surface-2);color:var(--muted);border-radius:5px;font-size:10.5px;padding:1px 7px;cursor:pointer;line-height:1.5}
.cv-tb:hover{color:var(--accent-2);border-color:var(--accent)}
.cv-ta{width:100%;min-height:74px;padding:7px 9px;border:1px solid var(--accent);border-radius:7px;background:var(--surface);color:var(--ink);font:inherit;font-size:12px;line-height:1.45;resize:vertical}
.cv-sugg{margin-top:8px;border:1px dashed var(--accent);border-radius:8px;padding:8px 10px;background:var(--accent-weak)}
.cv-sugg-k{font-family:var(--mono);font-size:9px;letter-spacing:.06em;text-transform:uppercase;color:var(--accent-2);font-weight:700;margin-bottom:4px}
.cv-sugg-v{font-size:12px;line-height:1.45;color:var(--ink)}
.cv-sugg-r{font-size:11px;color:var(--muted);font-style:italic;margin-top:4px}
.cv-sugg-a{display:flex;gap:6px;margin-top:7px}
/* Y.386 — the inline "steer this suggestion" box shown when ✨ is clicked (feedback before the AI drafts) */
.cv-steer-ta{width:100%;box-sizing:border-box;min-height:46px;padding:7px 9px;border:1px dashed var(--accent);border-radius:7px;background:var(--accent-weak);color:var(--ink);font:inherit;font-size:11.5px;line-height:1.45;resize:vertical}
.cv-steer-ta:focus{outline:none;border-style:solid}
.cv-steer-a{margin-top:6px}
.cv-tb-dim{opacity:.62}
.cv-tb-dim:hover{opacity:1}
/* Y.388 — ripple cascade progress toast (fixed bottom-center while dependent modules re-derive) */
.ripple-strip{position:fixed;left:50%;bottom:22px;transform:translateX(-50%);z-index:9999;display:flex;align-items:center;gap:9px;max-width:90vw;padding:10px 16px;border-radius:10px;background:var(--surface);border:1px solid var(--accent);box-shadow:0 8px 28px rgba(0,0,0,.22);font-size:12.5px;color:var(--ink);font-weight:600}
.ripple-strip .ripple-txt{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ripple-spin{width:13px;height:13px;flex:none;border:2px solid var(--accent);border-top-color:transparent;border-radius:50%;animation:ripple-spin .8s linear infinite}
@keyframes ripple-spin{to{transform:rotate(360deg)}}
.ripple-strip.ripple-done{border-color:var(--g-bd,#3a7);background:var(--g-bg,#eafaf0);color:var(--g-ink,#1a6b3a)}
.ripple-strip.ripple-done .ripple-spin{display:none}
/* Y.263 object-list row editor — add / edit / remove records by hand */
.cv-erows{display:flex;flex-direction:column;gap:7px;margin-top:8px}
.cv-erow{display:flex;gap:8px;align-items:flex-start;border:1px solid var(--line);border-radius:9px;background:var(--surface);padding:8px 10px}
.cv-erow-body{flex:1;min-width:0;display:flex;flex-direction:column;gap:3px}
.cv-erow-f{font-size:12px;line-height:1.4}
.cv-erow-k{display:inline-block;min-width:128px;color:var(--muted);font-size:10px;letter-spacing:.03em;text-transform:uppercase;font-weight:600;vertical-align:top}
.cv-erow-v{color:var(--ink)}
.cv-erow-v.cv-empty{color:var(--muted);opacity:.55}
.cv-erow-acts{display:flex;gap:4px;flex-shrink:0}
.cv-erowadd{align-self:flex-start;border-style:dashed!important}
.cv-erow-edit{display:flex;flex-direction:column;gap:7px;width:100%}
.cv-erow-lbl{display:flex;flex-direction:column;gap:3px;font-size:10px;letter-spacing:.03em;text-transform:uppercase;color:var(--muted);font-weight:600}
.cv-erow-edit .cv-ta{min-height:34px}
.cv-erow-obj{display:flex;flex-direction:column;gap:5px;padding-left:10px;border-left:2px solid var(--line);margin-top:3px}
.cv-thinking{display:inline-flex;align-items:center;gap:7px;color:var(--muted);font-size:12px;font-style:italic}
.cv-hist{margin-top:8px;border:1px solid var(--line);border-radius:8px;padding:8px 10px;background:var(--surface-2)}
.cv-hrow{display:flex;align-items:center;gap:8px;padding:4px 0;border-bottom:1px solid var(--line);flex-wrap:wrap}
.cv-hrow:last-child{border-bottom:none}
.cv-hmeta{flex:none;font-family:var(--mono);font-size:9.5px;color:var(--muted);width:84px}
.cv-hv{flex:1;min-width:140px;font-size:11px;color:var(--text)}
/* Y.70 framework example template (About section) */
.st-ex{border:1px solid var(--line);border-radius:9px;background:var(--surface);margin:8px 0 4px}
.st-ex summary{cursor:pointer;padding:8px 12px;font-family:var(--mono);font-size:10.5px;letter-spacing:.05em;text-transform:uppercase;color:var(--muted);list-style:none}
.st-ex summary::before{content:"▸ "}
.st-ex[open] summary::before{content:"▾ "}
.st-ex-b{border-top:1px dashed var(--line);padding:10px 14px;font-size:12px;line-height:1.7;color:var(--text);font-family:var(--mono)}
/* Y.71 per-concept strategic context panel */
.ck-strat{border:1px solid var(--line);border-radius:12px;background:var(--surface);padding:14px 16px;margin:10px 0 4px}
.ck-strat-head{display:flex;align-items:center;gap:10px;margin-bottom:8px}
.ck-strat-head b{font-size:14px;color:var(--ink)}
.ck-strat-x{margin-left:auto;border:none;background:transparent;color:var(--muted);cursor:pointer;font-size:13px;border-radius:5px;padding:2px 6px}
.ck-strat-x:hover{color:var(--ink);background:var(--surface-3)}
/* Y.78 value-chain RAG boxes — horizontal, wrapping, older box style */
.vc-boxes{display:flex;flex-wrap:wrap;gap:8px;margin:8px 0}
.vc-box{flex:1 1 140px;min-width:130px;border:1px solid var(--line);border-radius:9px;background:var(--surface-2);padding:9px 11px;font-size:12px;color:var(--text);position:relative;line-height:1.35}
.vc-box.vc-g{border-color:var(--g-bd);background:var(--g-bg);color:var(--g-ink)}
.vc-box.vc-a{border-color:var(--a-bd);background:var(--a-bg);color:var(--a-ink)}
.vc-box.vc-r{border-color:var(--r-bd);background:var(--r-bg);color:var(--r-ink)}
.vc-box.vc-here{box-shadow:0 0 0 2px var(--accent)}
.vc-box-n{font-family:var(--mono);font-size:9px;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);font-weight:700;margin-bottom:3px}
.vc-box-name{font-size:12.5px;font-weight:600;color:var(--ink);line-height:1.3}
.vc-box-cov{margin-top:6px}
.vc-players{display:flex;flex-direction:column;align-items:flex-start;gap:4px;margin-top:7px}
.vc-player{font-size:10px;padding:2px 8px;border-radius:7px;border:1px solid var(--line);background:var(--surface);color:var(--muted);white-space:normal;overflow-wrap:anywhere;max-width:100%;line-height:1.3}
.vc-heretag{display:block;margin-top:7px;font-family:var(--mono);font-size:8.5px;letter-spacing:.06em;text-transform:uppercase;color:var(--accent-2);font-weight:700}
.vc-heat{margin-top:7px;font-family:var(--mono);font-size:10px;color:var(--a-ink)}
.jt-sub{margin-top:7px}
.jt-sub-k{font-family:var(--mono);font-size:8.5px;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);font-weight:700}
.jt-sub .mini{margin:3px 0 0;padding-left:16px;font-size:11.5px;color:var(--text)}
/* Y.83 educational explainer + ICP/JTBD structured renders */
.st-explainer{border:1px solid var(--line);border-left:3px solid var(--accent);border-radius:9px;background:var(--surface-2);padding:11px 14px;margin:8px 0 4px;font-size:12.5px;line-height:1.6;color:var(--text)}
.st-explainer-k{font-family:var(--mono);font-size:9.5px;letter-spacing:.06em;text-transform:uppercase;color:var(--accent-2);font-weight:700;margin-bottom:5px}
/* Y.268 design pass — framework reference folded into one compact disclosure so the canvas leads */
.st-howto{border:1px solid var(--line);border-radius:9px;background:var(--surface-2);margin:8px 0 4px}
.st-howto>summary{cursor:pointer;padding:9px 13px;font-family:var(--mono);font-size:10px;letter-spacing:.06em;text-transform:uppercase;color:var(--accent-2);font-weight:700;list-style:none}
.st-howto>summary::-webkit-details-marker{display:none}
.st-howto>summary::before{content:"▸ "}
.st-howto[open]>summary::before{content:"▾ "}
.st-howto-b{border-top:1px solid var(--line);border-left:3px solid var(--accent);padding:11px 14px;font-size:12.5px;line-height:1.6;color:var(--text)}
.st-howto-ex{border-top:1px dashed var(--line);padding:10px 14px}
.st-howto-exk{font-family:var(--mono);font-size:9.5px;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);font-weight:700;margin-bottom:5px}
.st-howto-exb{font-size:12px;line-height:1.7;color:var(--text);font-family:var(--mono)}
.icp-early{margin-top:10px;border:1px solid var(--accent);border-radius:10px;background:var(--accent-weak);padding:10px 13px}
.icp-early-k{font-family:var(--mono);font-size:10px;letter-spacing:.05em;text-transform:uppercase;color:var(--accent-2);font-weight:700;margin-bottom:4px}
.icp-early-v{font-size:12.5px;line-height:1.5;color:var(--ink)}
.jt-dim{font-size:11.5px;line-height:1.5;color:var(--text);margin-top:5px}
.jt-dim-k{font-family:var(--mono);font-size:8.5px;letter-spacing:.05em;text-transform:uppercase;color:var(--muted);font-weight:700;margin-right:4px}
.jt-roles{display:flex;align-items:center;flex-wrap:wrap;gap:6px;margin-bottom:10px}
.jt-roles-k{font-family:var(--mono);font-size:9.5px;letter-spacing:.05em;text-transform:uppercase;color:var(--muted);font-weight:700}
.vc-legend{display:flex;gap:14px;flex-wrap:wrap;margin-top:6px}
.vc-lg{display:flex;align-items:center;gap:5px;font-size:10.5px;color:var(--muted)}
.vc-lg i{width:11px;height:11px;border-radius:3px;display:inline-block}
.vc-lg i.vc-g{background:var(--g-ink)} .vc-lg i.vc-a{background:var(--a-ink)} .vc-lg i.vc-r{background:var(--r-ink)}
.vc-flow{display:flex;align-items:center;flex-wrap:wrap;gap:6px;margin:6px 0}
.vc-stage{border:1px solid var(--line);border-radius:8px;padding:6px 11px;font-size:12px;color:var(--text);background:var(--surface-2)}
.vc-stage.vc-here{border-color:var(--accent);background:var(--accent-weak);color:var(--accent-2);font-weight:600}
.vc-arrow{color:var(--muted);font-family:var(--mono)}
.jt-primary{border-left-color:var(--accent);border-left-width:3px}

/* ---- TAM/SAM/SOM circles (Y.85) ---- */
.tss{display:flex;gap:22px;align-items:center;flex-wrap:wrap;border:1px solid var(--line);border-radius:12px;background:var(--surface-2);padding:16px 18px}
.tss-svg{width:184px;height:96px;flex:none}
.tss-rows{flex:1;min-width:240px;display:flex;flex-direction:column;gap:9px}
.tss-row{display:grid;grid-template-columns:auto 44px auto 1fr;align-items:baseline;gap:8px;font-size:12px}
.tss-dot{width:9px;height:9px;border-radius:50%;display:inline-block}
.tss-lbl{font-family:var(--mono);font-size:10px;font-weight:700;letter-spacing:.04em;color:var(--muted)}
.tss-val{font-weight:700;color:var(--text);font-size:13px}
.tss-basis{color:var(--muted);font-size:11px;line-height:1.45}
/* Y.393 — log-scale note on the canvas circles + the Concept Brief TAM/SAM/SOM block */
.tss-note{flex-basis:100%;font-size:10.5px;color:var(--muted);letter-spacing:.01em}
.ck-tssbrief{margin-top:12px}
.tss-brief-row{display:flex;gap:18px;align-items:center;flex-wrap:wrap;border:1px solid var(--line);border-radius:12px;background:var(--surface-2);padding:14px 16px}
.tss-figs{flex:1;min-width:200px;display:flex;flex-direction:column;gap:8px}
.tss-fig{font-size:13px;color:var(--text)}
.tss-fig-k{font-family:var(--mono);font-size:10px;font-weight:700;letter-spacing:.05em}
.tss-k-tam{color:var(--r-ink)}.tss-k-sam{color:var(--a-ink)}.tss-k-som{color:var(--g-ink)}
.tss-fig-b{color:var(--muted);font-size:11px;line-height:1.45;margin-top:1px}

/* ---- Bottom-up buildup table (Y.85) ---- */
.bu{border:1px solid var(--line);border-radius:12px;background:var(--surface-2);overflow:hidden}
.bu-tbl{width:100%;border-collapse:collapse;font-size:12px}
.bu-tbl th{text-align:right;font-family:var(--mono);font-size:9.5px;letter-spacing:.04em;text-transform:uppercase;color:var(--muted);font-weight:700;padding:9px 12px;border-bottom:1px solid var(--line);background:var(--surface-3)}
.bu-tbl th:first-child,.bu-tbl td:first-child{text-align:left}
.bu-tbl td{padding:8px 12px;text-align:right;color:var(--text);border-bottom:1px solid var(--line)}
.bu-seg{font-weight:600}
.bu-sub{font-weight:700;color:var(--accent-2)}
.bu-tbl tfoot td{border-bottom:none;font-weight:700;background:var(--surface-3);text-align:right}
.bu-total{color:var(--g-ink);font-size:13px}

/* ---- Competitive landscape (Y.85) ---- */
.cmp-grps{display:flex;flex-direction:column;gap:16px;margin-top:12px}
.cmp-grp-h{font-family:var(--mono);font-size:10px;letter-spacing:.05em;text-transform:uppercase;color:var(--muted);font-weight:700;margin-bottom:8px}
.cmp-cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:10px}
.cmp-card{border:1px solid var(--line);border-radius:10px;background:var(--surface-2);padding:11px 13px}
.cmp-top{display:flex;align-items:center;gap:8px;margin-bottom:6px}
.cmp-fav{width:18px;height:18px;border-radius:4px;flex:none}
.cmp-fav-x{background:var(--surface-3);border:1px solid var(--line)}
.cmp-name{font-weight:700;font-size:12.5px;color:var(--text);flex:1;min-width:0}
.cmp-threat{font-size:9.5px;font-weight:700;font-family:var(--mono);text-transform:uppercase;white-space:nowrap}
.cmp-pos{font-size:11.5px;color:var(--muted);line-height:1.45;margin-bottom:6px}
.cmp-s{font-size:11px;color:var(--g-ink);line-height:1.4;margin-top:2px}
.cmp-w{font-size:11px;color:var(--r-ink);line-height:1.4;margin-top:2px}
.cmp-url{display:inline-block;margin-top:7px;font-size:10.5px;color:var(--accent-2);text-decoration:none}
.cmp-url:hover{text-decoration:underline}
/* competitive tabs (CSS-only radio) — faithful to the prior tabbed design */
.cmp-tabwrap{margin-top:12px}
.cmp-rt{position:absolute;width:1px;height:1px;opacity:0;pointer-events:none}
.cmp-tabbar{display:flex;gap:6px;flex-wrap:wrap;padding:5px;background:var(--surface-3);border:1px solid var(--line);border-radius:9px;margin-bottom:14px}
.cmp-tab{cursor:pointer;display:inline-flex;align-items:center;gap:7px;padding:7px 14px;font-size:12px;font-weight:700;border-radius:6px;color:var(--muted);border:1px solid transparent;transition:background .12s}
.cmp-tab:hover{background:var(--accent-weak)}
.cmp-tab-n{font-size:9.5px;font-weight:600;background:var(--surface);padding:1px 6px;border-radius:8px}
.cmp-panel{display:none}
#cmptab-cards:checked~.cmp-tabbar .cmp-tab[data-tab="cards"],#cmptab-map:checked~.cmp-tabbar .cmp-tab[data-tab="map"],#cmptab-jtbd:checked~.cmp-tabbar .cmp-tab[data-tab="jtbd"]{background:var(--accent);color:var(--accent-ink);border-color:var(--accent)}
#cmptab-cards:checked~.cmp-panel[data-tab="cards"],#cmptab-map:checked~.cmp-panel[data-tab="map"],#cmptab-jtbd:checked~.cmp-panel[data-tab="jtbd"]{display:block}
.cmp-map{width:100%;max-width:420px;height:auto;border:1px solid var(--line);border-radius:10px;background:var(--surface-2)}
.cmp-bar{display:grid;grid-template-columns:120px 1fr 30px;align-items:center;gap:9px;margin-bottom:6px;font-size:11.5px}
.cmp-bar-l{color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cmp-bar-us{font-weight:700;color:var(--accent-2)}
.cmp-bar-t{height:9px;border-radius:5px;background:var(--surface-3);overflow:hidden}
.cmp-bar-f{display:block;height:100%;background:var(--muted);border-radius:5px}
.cmp-bar-fus{background:var(--accent)}
.cmp-bar-v{font-family:var(--mono);font-size:10.5px;color:var(--muted);text-align:right}

/* ---- Y.86 module richness: shared + per-viz ---- */
/* metric tiles */
.mt-row{display:flex;gap:10px;flex-wrap:wrap;margin-bottom:12px}
.mt{flex:1;min-width:150px;border:1px solid var(--line);border-radius:10px;background:var(--surface-2);padding:10px 13px}
.mt-k{font-family:var(--mono);font-size:9px;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);font-weight:700;margin-bottom:5px}
.mt-v{font-size:18px;font-weight:800;color:var(--text)}
.mt-v2{font-size:12.5px;color:var(--text);line-height:1.45}
/* left-bordered card (risk, friction, levers, patterns, theory tests, anti-patterns) */
.lcard{border:1px solid var(--line);border-left-width:3px;border-radius:9px;background:var(--surface-2);padding:10px 13px;margin-bottom:8px}
.lcard-h{display:flex;align-items:baseline;justify-content:space-between;gap:10px;margin-bottom:5px}
.lcard-t{font-weight:700;font-size:12.5px;color:var(--text)}
.lcard-b{font-family:var(--mono);font-size:10px;font-weight:700;text-transform:uppercase;white-space:nowrap}
.lcard-row{font-size:11.5px;line-height:1.5;color:var(--text);margin-top:3px}
/* outcomes graph */
.og-job{border:1px solid var(--line);border-radius:10px;background:var(--surface-2);padding:11px 13px;margin-bottom:10px;overflow:hidden}
.og-job-h{font-size:12px;font-weight:700;color:var(--text);margin-bottom:8px}
.og-job .bu-tbl th,.og-job .bu-tbl td{text-align:center}.og-job .bu-tbl th:nth-child(2),.og-job .bu-tbl td:nth-child(2){text-align:left}
.og-ol{margin:4px 0 0;padding-left:20px;font-size:12px;line-height:1.6;color:var(--text)}
/* sinfield */
.sf-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:9px}
.sf-card{border:1px solid var(--line);border-radius:10px;background:var(--surface-2);padding:11px 13px}
.sf-top{display:flex;justify-content:space-between;align-items:center;margin-bottom:6px}
.sf-name{font-family:var(--mono);font-size:11.5px;font-weight:700;letter-spacing:.05em;text-transform:uppercase}
.sf-rec{font-size:8.5px;font-weight:700;color:var(--accent-2);background:var(--accent-weak);padding:2px 7px;border-radius:9px}
.sf-def{font-size:10.5px;color:var(--muted);line-height:1.5;font-style:italic;margin-bottom:5px}
.sf-row{font-size:11px;color:var(--text);line-height:1.5;margin-bottom:4px}.sf-row b{color:var(--muted)}
.sf-ev{color:var(--muted)}
/* assumption 2x2 */
.am-2x2{position:relative;display:grid;grid-template-columns:1fr 1fr;gap:8px;padding-left:18px;padding-bottom:16px}
.am-cell{border:1px solid var(--line);border-radius:10px;padding:9px 11px;min-height:74px;background:var(--surface-2)}
.am-q{font-family:var(--mono);font-size:9px;letter-spacing:.05em;text-transform:uppercase;font-weight:700;margin-bottom:6px;color:var(--muted)}
.am-dk{background:var(--r-bg);border-color:var(--r-bd)}.am-dk .am-q{color:var(--r-ink)}
.am-vr{background:var(--g-bg);border-color:var(--g-bd)}.am-vr .am-q{color:var(--g-ink)}
.am-watch{background:var(--a-bg);border-color:var(--a-bd)}.am-watch .am-q{color:var(--a-ink)}
.am-chip{font-size:10.5px;line-height:1.4;color:var(--text);padding:3px 0;border-top:1px solid var(--line)}
.am-empty{font-size:10.5px;color:var(--muted)}
.am-axislabel{position:absolute;font-family:var(--mono);font-size:8.5px;letter-spacing:.05em;text-transform:uppercase;color:var(--muted)}
.am-x{bottom:0;left:50%;transform:translateX(-50%)}
.am-y{left:0;top:50%;transform:rotate(-90deg) translateX(0);transform-origin:left center;white-space:nowrap}
/* flywheel */
.fw-loopwrap{display:flex;flex-direction:column;align-items:stretch;max-width:520px}
.fw-step{display:flex;gap:11px;align-items:flex-start;border:1px solid var(--line);border-radius:10px;background:var(--surface-2);padding:10px 13px}
.fw-n{flex:none;width:24px;height:24px;border-radius:50%;background:var(--accent);color:var(--accent-ink);font-weight:700;font-size:12px;display:flex;align-items:center;justify-content:center}
.fw-t{font-weight:700;font-size:12.5px;color:var(--text)}
.fw-c{font-size:11.5px;color:var(--muted);line-height:1.45;margin-top:2px}
.fw-m{font-size:11px;color:var(--g-ink);margin-top:3px}
.fw-arrow{text-align:center;color:var(--muted);font-size:14px;line-height:1.4}
.fw-loop{text-align:center;color:var(--accent-2);font-size:11px;font-weight:700;padding:6px}
/* growth path columns */
.gp-cols{display:flex;align-items:stretch;gap:6px;flex-wrap:wrap}
.gp-col{flex:1;min-width:130px;border:1px solid var(--line);border-radius:10px;background:var(--surface-2);padding:10px 12px}
.gp-stage{font-family:var(--mono);font-size:10.5px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;margin-bottom:8px}
.gp-metrics>div{display:flex;justify-content:space-between;gap:8px;font-size:11.5px;padding:2px 0}
.gp-k{color:var(--muted)}.gp-v{font-weight:700;color:var(--text)}
.gp-arr{border-top:1px solid var(--line);margin-top:4px;padding-top:4px}.gp-arr .gp-v{color:var(--g-ink)}
.gp-note{font-size:10.5px;color:var(--muted);line-height:1.45;margin-top:6px;font-style:italic}
.gp-sep{align-self:center;color:var(--muted);font-family:var(--mono)}
/* cap table bars */
.ct-bar{display:flex;height:22px;border-radius:6px;overflow:hidden;border:1px solid var(--line);margin-bottom:8px}
.ct-seg{display:block;height:100%}
.ct-legend{display:flex;flex-wrap:wrap;gap:5px 16px;margin-bottom:6px}
.ct-lg{display:flex;align-items:center;gap:6px;font-size:11.5px;color:var(--text)}
.ct-lg i{width:10px;height:10px;border-radius:3px;display:inline-block}
.ct-vest{color:var(--muted);font-size:10px}
/* theory of value 3-column */
.tov{display:grid;grid-template-columns:repeat(3,1fr);gap:9px}
.tov-col{border:1px solid var(--line);border-top-width:3px;border-radius:10px;background:var(--surface-2);padding:11px 13px}
.tov-belief{border-top-color:var(--accent-2)}.tov-prob{border-top-color:var(--a-ink)}.tov-theory{border-top-color:var(--g-ink)}
.tov-h{font-family:var(--mono);font-size:10px;letter-spacing:.05em;text-transform:uppercase;color:var(--muted);font-weight:700;margin-bottom:7px}
.tov-sub{font-size:10px;font-weight:700;color:var(--muted);margin:7px 0 3px;text-transform:uppercase;letter-spacing:.04em}
.tov-p{font-size:12px;line-height:1.5;color:var(--text)}
/* naming candidates */
.nm-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:10px}
.nm-card{border:1px solid var(--line);border-radius:10px;background:var(--surface-2);padding:11px 13px}
.nm-top{display:flex;justify-content:space-between;align-items:baseline;gap:8px;margin-bottom:5px}
.nm-name{font-weight:800;font-size:14px;color:var(--text)}
.nm-strat{font-family:var(--mono);font-size:9px;font-weight:700;text-transform:uppercase}
.nm-rat{font-size:11px;color:var(--muted);line-height:1.45;margin-bottom:8px}
.nm-bars{display:flex;flex-direction:column;gap:4px;margin-bottom:8px}
.nm-bar{display:grid;grid-template-columns:42px 1fr;align-items:center;gap:8px}
.nm-bk{font-size:9.5px;color:var(--muted);font-family:var(--mono)}
.nm-bt{height:6px;border-radius:4px;background:var(--surface-3);overflow:hidden}
.nm-bf{display:block;height:100%;background:var(--accent);border-radius:4px}
.nm-handles{display:flex;flex-wrap:wrap;gap:5px}
.nm-pill{font-size:9.5px;font-family:var(--mono);color:var(--muted);background:var(--surface-3);border:1px solid var(--line);border-radius:6px;padding:2px 7px}
/* interview guide */
.iv-ol{margin:2px 0;padding-left:20px;font-size:12px;line-height:1.7;color:var(--text)}
/* synthetic focus group (Y.101) */
.fg-head{display:flex;gap:18px;align-items:center;flex-wrap:wrap;border:1px solid var(--line);border-radius:12px;background:var(--surface-2);padding:14px 16px}
.fg-gauge{text-align:center;flex:none}
.fg-mean{font-family:var(--mono);font-size:30px;font-weight:800;line-height:1}
.fg-mean-l{font-size:9px;font-family:var(--mono);letter-spacing:.05em;text-transform:uppercase;color:var(--muted);margin-top:4px;max-width:90px}
.fg-hist{flex:1;min-width:200px}
.fg-bars{display:flex;align-items:flex-end;gap:8px;height:74px}
.fg-bar{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:flex-end;height:100%;position:relative}
.fg-bar-fill{width:100%;max-width:36px;border-radius:4px 4px 0 0;min-height:2px}
.fg-bar-n{font-family:var(--mono);font-size:10px;color:var(--text);font-weight:700;margin-top:2px}
.fg-bar-k{font-family:var(--mono);font-size:9px;color:var(--muted)}
.fg-hist-l{font-size:9px;font-family:var(--mono);letter-spacing:.04em;text-transform:uppercase;color:var(--muted);margin-top:8px;text-align:center}
.fg-cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:10px;margin-top:4px}
.fg-card{border:1px solid var(--line);border-radius:10px;background:var(--surface-2);padding:11px 13px}
.fg-top{display:flex;justify-content:space-between;align-items:baseline;gap:8px}
.fg-name{font-weight:700;font-size:12.5px;color:var(--text)}
.fg-pi{font-family:var(--mono);font-size:11px;font-weight:700;white-space:nowrap}
.fg-demo{font-size:10.5px;color:var(--muted);font-family:var(--mono);margin:3px 0 6px}
.fg-quote{font-size:11.5px;line-height:1.5;color:var(--text);font-style:italic;margin-bottom:6px}
.cb-cellbox{display:flex;flex-direction:column;gap:6px;border:1px solid var(--line);border-radius:10px;padding:10px 13px;background:var(--surface-2);max-width:440px}
.cb-cell-row{display:flex;align-items:center;gap:10px}
.cb-cell-k{flex:none;width:96px;font-family:var(--mono);font-size:9.5px;letter-spacing:.05em;text-transform:uppercase;color:var(--muted);font-weight:600}
.cb-cell-v{font-size:12.5px;color:var(--ink)}
/* Y.72 reconcile action bar — distinct accent, reads as an action not a chip */
.ck-reconcile{display:flex;align-items:center;gap:14px;flex-wrap:wrap;border:1px solid var(--accent);border-left:4px solid var(--accent);border-radius:11px;background:var(--accent-weak);padding:12px 16px;margin:4px 0 12px}
.ck-rec-txt{flex:1;min-width:240px;font-size:12px;line-height:1.5;color:var(--text)}
.ck-rec-txt b{color:var(--accent-2);font-size:13px}
.ck-rec-btn{width:auto;margin:0;padding:9px 18px;font-size:13px;white-space:nowrap}
.ck-reconcile-quiet{display:flex;align-items:center;gap:9px;font-size:11.5px;color:var(--muted);margin:2px 0 12px}
.ck-recal-top{margin:2px 0 16px}
/* Y.74 recalibrated scores — before (struck) → after (up/down toned) */
.ob-was{text-decoration:line-through;color:var(--muted);font-family:var(--mono)}
.ob-now{font-family:var(--mono);font-weight:700}
.ob-now.ob-up{color:var(--g-ink)} .ob-now.ob-down{color:var(--r-ink)}
.ob-recal{font-family:var(--mono);font-size:9.5px;letter-spacing:.04em;color:var(--accent-2);background:var(--accent-weak);border:1px solid var(--line);border-radius:4px;padding:0 5px;white-space:nowrap}
/* Y.87 cockpit header right cluster: opportunity score + rebuild button */
.ck-head-r{display:flex;align-items:center;gap:14px;flex-wrap:wrap;justify-content:flex-end}
/* Y.1272 — the reason-to-believe strip. Sits beside the score chip in the header: rank in the workspace,
   percentile across Crucible, agent time. Quiet by design, because it supports the number rather than
   competing with it, and every chip carries a title that says what it is a comparison against. */
/* Y.1274 — its own line under the score, not a pill lost in the chrome row beside it.
   ── Y.1307 · AND IT WAS SPLITTING THE ROW IT SAT UNDER ────────────────────────────────────────────────────
   Lars: "the header has misaligned elements for a concept where the score, reasons to believe etc are not on
   the same line so there's lots of white space in the critical above the fold area."
   `flex-basis:100%` correctly gives this strip its own line — and because it sits SECOND among the cluster's
   four children in DOM order, it also forced a break between the score and everything after it. The score,
   the "Scored as" stage and the Unlock button then landed on three separate lines apiece, right-aligned, in a
   column beside a title block half its height. `order:9` moves the strip to the end of the flex order without
   moving it in the DOM, so it still renders under the score and the other three share one row again.
   MEASURED, in headless Chromium against this stylesheet, at 1200 / 1440 / 2000px viewport (the .wrap caps at
   1000px, so every width behaved identically): header 199px → 153px, cluster 4 rows → 2. Keeping the -4px
   margin is worth 4px of that; dropping it reads 157px. */
.ck-reasons{order:9;flex-basis:100%;display:flex;align-items:center;gap:7px;flex-wrap:wrap;justify-content:flex-end;margin-top:-4px}
.ck-reasons-h{font-family:var(--mono);font-size:8.5px;letter-spacing:.06em;text-transform:uppercase;color:var(--faint);font-weight:700}
.ck-reason{font-size:11px;color:var(--muted);border:1px solid var(--line);border-radius:999px;padding:3px 9px;white-space:nowrap;cursor:help}
.ck-reason:hover{color:var(--text);border-color:var(--line-2)}
/* The one he asked for by name carries the accent; the other two are context for it. */
.ck-reason-agenttime{color:var(--text);border-color:var(--accent);font-weight:700}
.ck-reason-f{margin-right:4px}
/* Y.1274 — the second answer on a staleness banner, and the record it leaves behind. */
.ck-nm-alt{width:auto;margin:0 0 0 8px;padding:7px 12px;font-size:11.5px;white-space:normal;max-width:240px}
.ck-accepted{cursor:help}
/* Y.1274 — the five bands under the verdict word. Small, and grey except for the two rungs that mean
   something, so the eye lands on the position rather than on the decoration. */
.ck-ladder{display:grid;grid-template-columns:repeat(5,1fr);gap:2px;margin:8px 0 10px;max-width:420px}
.ck-lad-c{display:flex;flex-direction:column;align-items:center;text-align:center;gap:1px;padding:3px 2px;border-top:2px solid var(--line);opacity:.62}
.ck-lad-c.on{opacity:1;border-top-color:currentColor}
.ck-lad-r{font-family:var(--mono);font-size:7.5px;letter-spacing:.06em;text-transform:uppercase;font-weight:700;color:var(--faint);min-height:9px}
.ck-lad-c.on .ck-lad-r{color:inherit}
.ck-lad-n{font-size:11px;font-weight:700;color:var(--muted);line-height:1.15}
.ck-lad-c.on .ck-lad-n{font-weight:800}
.ck-lad-b{font-family:var(--mono);font-size:8.5px;color:var(--faint)}
@media (max-width:560px){.ck-ladder{max-width:100%}.ck-lad-n{font-size:10px}}
.ck-score{display:flex;align-items:baseline;gap:6px;border:1px solid var(--line);border-radius:10px;background:var(--surface-2);padding:6px 13px;white-space:nowrap}
.ck-score-was{text-decoration:line-through;color:var(--muted);font-family:var(--mono);font-size:14px;font-weight:600}

/* Y.1264 — the ceiling beside the score. `/ 71` is a comparison the reader can act on; the struck-through
   pitched number it replaces was a comparison to a forecast the concept had already outgrown. */
.ck-score-of{font-size:15px;font-weight:700;color:var(--muted);margin-left:3px;align-self:baseline}
.ck-score-now{font-family:var(--mono);font-size:22px;font-weight:800;color:var(--text);line-height:1}
.ck-score-now.ob-up{color:var(--g-ink)} .ck-score-now.ob-down{color:var(--r-ink)}
.ck-score-l{font-family:var(--mono);font-size:8.5px;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);font-weight:700}
/* Y.95 top diligence-summary strip — memo verdict + readiness score */
.ck-dilsum{display:flex;gap:10px;flex-wrap:wrap;margin:-4px 0 14px}
.ck-dilcard{flex:1;min-width:220px;text-align:left;cursor:pointer;border:1px solid var(--line);border-radius:11px;background:var(--surface-2);padding:10px 14px;font-family:inherit}
.ck-dilcard:hover{border-color:var(--accent);background:var(--accent-weak)}
.ck-dilcard-k{font-family:var(--mono);font-size:9px;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);font-weight:700;margin-bottom:7px}
.ck-dilcard-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.ck-dilcard-lbl{font-size:12px;color:var(--text)}
.rv-mini{font-family:var(--mono);font-size:20px;font-weight:800;line-height:1}
.rv-mini-of{font-size:11px;font-weight:600;color:var(--muted);margin-left:1px}
.rv-mini.rv-g{color:var(--g-ink)} .rv-mini.rv-a{color:var(--a-ink)} .rv-mini.rv-r{color:var(--r-ink)}
/* Y.99 synthesis & coherence section */
.ck-synth-head{display:flex;align-items:center;gap:10px}
.ck-synth-head .st-build-hdr{margin-left:auto}
.ck-synth-issues{margin-top:10px;display:flex;flex-direction:column;gap:8px}
/* Y.102 outcome capture + calibration */
.ck-outcome{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.ck-oc-sel{padding:7px 10px;border:1px solid var(--line);border-radius:8px;background:var(--surface);color:var(--ink);font:inherit;font-size:12px}
.ck-oc-note{flex:1;min-width:200px;padding:7px 11px;border:1px solid var(--line);border-radius:8px;background:var(--surface);color:var(--ink);font:inherit;font-size:12px}
.ck-oc-cur{margin-left:2px}
.ck-oc-tl{list-style:none;margin:6px 0 10px;padding:0;display:flex;flex-direction:column;gap:6px}
.ck-oc-ev{display:flex;align-items:center;gap:8px;flex-wrap:wrap;font-size:12.5px;color:var(--ink);position:relative;padding-left:14px}
.ck-oc-ev::before{content:"";position:absolute;left:3px;top:7px;width:6px;height:6px;border-radius:50%;background:var(--accent)}
.ck-oc-evn{color:var(--muted)}
.ck-oc-evd{margin-left:auto;font-size:11px;color:var(--faint);font-family:var(--mono)}
.ck-rename{background:none;border:none;color:var(--faint);cursor:pointer;font-size:13px;line-height:1;padding:0 2px;vertical-align:middle}
.ck-rename:hover{color:var(--accent)}
.ck-formerly{font-size:11.5px;color:var(--muted);margin:1px 0 2px;font-style:italic}
.cal-prior{font-size:11px;color:var(--muted);margin-left:6px;cursor:help;white-space:nowrap}
.ck-monitor{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-top:10px}
.ck-mon-on{display:inline-flex;align-items:center;gap:5px;font-size:12px;font-weight:600;color:var(--g-ink,#2e7d32);background:var(--g-bg,rgba(46,125,50,.1));border:1px solid var(--g-bd,rgba(46,125,50,.25));border-radius:7px;padding:4px 9px}
.cal-panel{border:1px solid var(--line);border-left:4px solid var(--accent);border-radius:11px;background:var(--surface-2);padding:12px 16px;margin-top:12px}
.cal-h{font-family:var(--mono);font-size:10px;letter-spacing:.05em;text-transform:uppercase;color:var(--accent-2);font-weight:700;margin-bottom:6px}
.cal-body{font-size:12.5px;line-height:1.5;color:var(--text)}
.cal-bars{display:flex;gap:22px;flex-wrap:wrap;margin-top:8px}
.cal-row{display:flex;flex-direction:column;gap:2px}
.cal-k{font-size:10px;font-family:var(--mono);text-transform:uppercase;letter-spacing:.04em;color:var(--muted)}
.cal-v{font-family:var(--mono);font-size:14px;font-weight:700}
.cal-net{margin-top:8px;border:1px solid var(--line);border-radius:9px;background:var(--surface-2);padding:9px 13px;font-size:12px;line-height:1.5;color:var(--text)}
.cal-net-n{color:var(--muted);font-family:var(--mono);font-size:10.5px}
.lcard-fixrow{display:flex;align-items:flex-start;justify-content:space-between;gap:10px;margin-top:3px}
.lcard-fix{font-size:11.5px;line-height:1.45;color:var(--g-ink);flex:1}
.syn-apply{flex:none;white-space:nowrap;color:var(--accent-2);border-color:var(--accent)}
.syn-apply:hover{background:var(--accent-weak)}
.score .ob-was,.cl-num .ob-was{font-size:.78em;opacity:.75;font-weight:600}
/* Y.91 score trajectory */
.st-chartwrap{border:1px solid var(--line);border-radius:12px;background:var(--surface-2);padding:12px 14px}
.st-chart{width:100%;height:auto;display:block}
.st-legend{display:flex;gap:16px;flex-wrap:wrap;margin-bottom:6px}
.st-lg{display:flex;align-items:center;gap:5px;font-size:10.5px;color:var(--muted)}
.st-lg i{width:14px;height:3px;border-radius:2px;display:inline-block}
.st-rows{margin-top:12px;display:flex;flex-direction:column;gap:8px}
.st-row{display:flex;gap:10px;align-items:flex-start}
.st-dot{width:9px;height:9px;border-radius:50%;flex:none;margin-top:4px}
.st-rb{flex:1;min-width:0}
.st-rh{font-size:12.5px;color:var(--text);display:flex;align-items:baseline;gap:8px;flex-wrap:wrap}
.st-rh b{font-family:var(--mono);font-size:14px}
.st-delta{font-family:var(--mono);font-size:10px;font-weight:700;color:var(--muted)}
.st-delta.ob-up{color:var(--g-ink)} .st-delta.ob-down{color:var(--r-ink)}
.st-rl{font-weight:600}
.st-rwhen{font-size:10.5px;color:var(--muted);margin-left:auto;white-space:nowrap}
.st-rn{font-size:11.5px;color:var(--muted);line-height:1.45;margin-top:2px}
/* Y.88 rebuild picker modal */
.ck-ov{position:fixed;inset:0;background:rgba(16,24,40,.45);z-index:60;display:flex;align-items:flex-start;justify-content:center;padding:6vh 16px;overflow:auto}
.ck-sheet{width:100%;max-width:520px;background:var(--surface);border:1px solid var(--line);border-radius:14px;box-shadow:0 16px 48px rgba(0,0,0,.3);padding:18px 20px}
.ck-sheet-h{display:flex;align-items:center;justify-content:space-between;font-size:16px;margin-bottom:4px}
.ck-sheet-x{cursor:pointer;border:none;background:none;color:var(--muted);font-size:16px;line-height:1;padding:4px}
.ck-sheet-x:hover{color:var(--text)}
.ck-sheet-sub{font-size:11.5px;color:var(--muted);line-height:1.5;margin-bottom:12px}
.rb-row{display:flex;align-items:center;gap:10px;padding:8px 6px;border-radius:8px;cursor:pointer;font-size:12.5px}
.rb-row:hover{background:var(--surface-2)}
.rb-all{border-bottom:1px solid var(--line);border-radius:0;margin-bottom:4px;padding-bottom:10px}
.rb-ck,.rb-row input{accent-color:var(--accent);width:15px;height:15px;flex:none}
.rb-name{flex:1;color:var(--text)}
.rb-state{font-family:var(--mono);font-size:9px;letter-spacing:.03em;text-transform:uppercase;white-space:nowrap}
.rb-built{color:var(--accent-2)} .rb-ready{color:var(--g-ink)} .rb-empty{color:var(--muted)}
.rb-opts{border:1px solid var(--line);border-radius:9px;background:var(--surface-2);padding:2px 8px;margin-bottom:10px}
.rb-divider{font-family:var(--mono);font-size:9.5px;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);font-weight:700;margin:4px 0 2px}
.rb-list{max-height:42vh;overflow:auto;margin-bottom:8px}
.rb-doing{background:var(--accent-weak)} .rb-doing .rb-state::after{content:' · rebuilding…';color:var(--accent-2)}
.rb-done .rb-name::after{content:' ✓';color:var(--g-ink)}
.rb-fail .rb-name::after{content:' — failed, kept current';color:var(--r-ink);font-size:10px}
.rb-foot{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;border-top:1px solid var(--line);padding-top:12px;margin-top:4px}
.rb-count{font-size:11px;color:var(--muted);font-family:var(--mono)}
.rb-foot-b{display:flex;gap:8px;align-items:center}
.ck-recal{border:1px solid var(--accent);border-left:4px solid var(--accent);border-radius:11px;background:var(--accent-weak);padding:11px 15px;margin:2px 0 14px}
.ck-recal-h{font-size:12.5px;color:var(--accent-2);margin-bottom:5px}
.ck-recal-scores{font-size:13px;color:var(--ink);margin-bottom:4px}
.ck-recal-r{font-size:12px;color:var(--text);font-style:italic;line-height:1.5}
.ck-factors{margin-top:8px;display:flex;flex-direction:column;gap:4px}
.ck-factor{display:grid;grid-template-columns:34px 30px 1fr;align-items:baseline;gap:8px;font-size:11.5px;line-height:1.45}
.ck-factor-eff{font-family:var(--mono);font-weight:700;text-align:right}
.ck-factor-ax{font-family:var(--mono);font-size:8.5px;letter-spacing:.04em;color:var(--muted);font-weight:700}
.ck-factor-t{color:var(--text)}
.ck-factor-src{color:var(--muted);font-size:10.5px}
/* Y.75 collapsible concept cards (cohort roster) */
.ccard-collapsible{padding:0;overflow:hidden}
.ccard-sumrow{display:flex;align-items:center;gap:12px;padding:14px 16px;cursor:pointer;list-style:none;flex-wrap:wrap}
.ccard-sumrow::-webkit-details-marker{display:none}
.ccard-collapsible[open] .ccard-sumrow{border-bottom:1px solid var(--line)}
.ccard-sumrow .ccard-title{flex:none;margin:0}
.ccard-sumhead{flex:1;min-width:120px;font-size:12.5px;color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ccard-collapsible[open] .ccard-sumhead{display:none}
.ccard-chev{flex:none;color:var(--muted);transition:transform .15s;font-size:12px}
.ccard-collapsible[open] .ccard-chev{transform:rotate(180deg)}
.ccard-body{padding:14px 16px}
.ccard-body .ccard-head{display:none}
.lock-done{margin-top:12px;display:flex;align-items:center;gap:9px;background:var(--g-bg);border:1px solid var(--g-bd);border-radius:9px;padding:9px 12px;font-size:11.5px;color:var(--g-ink)}
/* "Who it serves" sort chips (Y.61) */
.csort{margin-left:auto;display:inline-flex;align-items:center;gap:5px;flex-wrap:wrap}
.csort-k{font-family:var(--mono);font-size:9px;letter-spacing:.06em;text-transform:uppercase;color:var(--faint);margin-right:2px}
.csort-b{font-family:var(--mono);font-size:10px;padding:2px 8px;border:1px solid var(--line);border-radius:99px;background:transparent;color:var(--muted);cursor:pointer}
.csort-b:hover{color:var(--ink);border-color:var(--line-2)}
.csort-b.on{color:var(--accent-2);border-color:var(--accent);background:var(--accent-weak)}
/* concept nav Stage ⇄ Function lens toggle (Y.61) */
.mc-grp{display:flex;gap:4px;margin:8px 4px 10px;padding:3px;background:var(--surface-3);border:1px solid var(--line);border-radius:8px}
.mc-grp-b{flex:1;font-family:var(--mono);font-size:10px;letter-spacing:.05em;text-transform:uppercase;padding:5px 0;border:none;border-radius:6px;background:transparent;color:var(--muted);cursor:pointer}
.mc-grp-b.on{background:var(--surface);color:var(--accent-2);box-shadow:var(--shadow-sm);border:1px solid var(--line)}
.rag-na{color:var(--faint)}
.ob-table tr.alt td{background:var(--surface-2)}
.crit-gate{color:var(--ink);font-weight:600;white-space:nowrap}

/* stage gates — funnel strip + screening queue */
.gate-strip{display:grid;grid-template-columns:repeat(5,1fr);gap:8px}
.gate-col{background:var(--surface);border:1px solid var(--line);border-radius:10px;padding:0;overflow:hidden}
.gate-h{display:flex;align-items:center;gap:6px;padding:9px 11px;background:var(--surface-2);border-bottom:1px solid var(--line)}
.gate-ico{font-size:14px}
.gate-lbl{font-size:11px;letter-spacing:.03em;text-transform:uppercase;font-weight:600;color:var(--ink)}
.gate-n{margin-left:auto;font-size:15px;font-weight:700;color:var(--muted)}
.gate-desc{font-size:10px;color:var(--muted);line-height:1.4;padding:8px 11px 4px}
.gate-card{background:var(--surface-2);border:1px solid var(--line);border-left:3px solid var(--line);border-radius:7px;padding:7px 9px;margin:0 9px 7px}
.gate-card-t{font-size:11.5px;font-weight:600;color:var(--ink);margin-bottom:5px;line-height:1.3}
.gate-card.d-g{border-left-color:var(--g-ink)}.gate-card.d-a{border-left-color:var(--a-ink)}.gate-card.d-i{border-left-color:var(--i-ink)}.gate-card.d-r{border-left-color:var(--r-ink)}
.gate-empty{font-size:10.5px;color:var(--faint);font-style:italic;padding:6px 11px 12px}
.dchip{font-size:8.5px;letter-spacing:.03em;text-transform:uppercase;font-weight:700;border-radius:4px;padding:1px 6px;white-space:nowrap;display:inline-block}
.dchip.d-g{background:var(--g-bg);color:var(--g-ink);border:1px solid var(--g-bd)}
.dchip.d-a{background:var(--a-bg);color:var(--a-ink);border:1px solid var(--a-bd)}
.dchip.d-i{background:var(--i-bg);color:var(--i-ink);border:1px solid var(--i-bd)}
.dchip.d-r{background:var(--r-bg);color:var(--r-ink);border:1px solid var(--r-bd)}
.scr-wrap{border:1px solid var(--line);border-radius:10px;background:var(--surface);overflow:hidden}
.scr-row{display:flex;align-items:flex-start;gap:11px;padding:11px 14px;border-bottom:1px solid var(--line)}
.scr-row:last-child{border-bottom:none}
.scr-row .dchip{margin-top:1px;min-width:130px;text-align:center}
.scr-body{flex:1}
.scr-name{font-size:13px;font-weight:600;color:var(--ink);margin-bottom:2px}
.scr-why{font-size:11.5px;color:var(--muted);line-height:1.5}
.gt-pill{font-size:9px;letter-spacing:.02em;font-weight:700;border-radius:4px;padding:1px 7px;margin-left:5px;text-transform:none}
.gt-pill.d-g{background:var(--g-bg);color:var(--g-ink)}.gt-pill.d-a{background:var(--a-bg);color:var(--a-ink)}.gt-pill.d-i{background:var(--i-bg);color:var(--i-ink)}.gt-pill.d-r{background:var(--r-bg);color:var(--r-ink)}
.scr-row .scr-dil{flex:none;align-self:center;cursor:pointer;font-family:inherit;font-size:10.5px;font-weight:600;color:var(--accent-ink);background:var(--accent);border:1px solid var(--accent);border-radius:7px;padding:6px 11px;white-space:nowrap}
.scr-row .scr-dil:hover{background:var(--accent-2)}
.scr-row .scr-dil:disabled{opacity:.55;cursor:default}
.scr-row .scr-dil.has{color:var(--g-ink);background:var(--g-bg);border-color:var(--g-bd)}

/* deep-research panel (diligence / readiness) */
.dilpanel{margin-top:12px;background:var(--surface);border:1px solid var(--line);border-radius:12px;padding:16px 18px;box-shadow:var(--shadow-sm)}
.dil-load{display:flex;align-items:flex-start;gap:11px;font-size:13px;color:var(--text);line-height:1.6}
.dil-load .dil-spin{flex:none;margin-top:2px}
.dil-load .dil-txt{flex:1;min-width:0}
.dil-spin{flex:none;width:15px;height:15px;border:2px solid var(--accent-weak);border-top-color:var(--accent);border-radius:50%;animation:dilspin .8s linear infinite}
@keyframes dilspin{to{transform:rotate(360deg)}}
.dil-err{font-size:12.5px;color:var(--r-ink);line-height:1.5}
.dil-head{display:flex;align-items:baseline;justify-content:space-between;gap:10px;flex-wrap:wrap;border-bottom:1px solid var(--line);padding-bottom:10px;margin-bottom:10px}
.dil-title{font-size:15px;letter-spacing:-.01em;font-weight:600;color:var(--ink)}
.dil-badge{font-size:9px;letter-spacing:.03em;text-transform:uppercase;font-weight:700;color:var(--accent-2);background:var(--accent-weak);border:1px solid var(--i-bd);border-radius:5px;padding:2px 8px}
.dil-body{font-size:12.5px;color:var(--text);line-height:1.6}
.dm-h4{font-size:12.5px;letter-spacing:.03em;text-transform:uppercase;color:var(--muted);font-weight:600;margin:16px 0 7px;padding-top:10px;border-top:1px solid var(--line)}
.dm-h4:first-child{border-top:none;padding-top:0;margin-top:0}
.dm-h5{font-size:12px;font-weight:600;color:var(--ink);margin:11px 0 5px}
.dm-p{margin:0 0 8px;color:var(--text)}
.dm-ul{margin:0 0 9px;padding-left:18px}
.dm-ul li{margin-bottom:5px;color:var(--text);line-height:1.55}
.dil-body strong{color:var(--ink)}
.dil-src-h{font-size:11px;letter-spacing:.05em;text-transform:uppercase;color:var(--muted);font-weight:600;margin:14px 0 6px}
.dil-editbar{margin-top:14px;display:flex;justify-content:flex-end}
.dil-edit-b{opacity:1}
.dil-edit-ta{width:100%;min-height:340px;margin-top:10px;padding:12px 14px;border:1px solid var(--line);border-radius:8px;background:var(--surface);color:var(--ink);font:inherit;font-size:13px;line-height:1.55;resize:vertical}
.dil-edit-actions{display:flex;align-items:center;gap:10px;margin-top:10px;flex-wrap:wrap}
/* per-section hand-edit of a diligence report (Y.250): each ## section is a living, correctable part */
.dm-sechrow{display:flex;align-items:center;gap:10px;margin-bottom:8px}
.dm-sechrow .dm-sech{margin-bottom:0}
.dm-sech-intro{opacity:.7}
.dm-secacts{display:flex;align-items:center;gap:8px;margin-left:auto}
.dil-secedit{font-family:var(--mono);font-size:10px;letter-spacing:.04em;color:var(--accent);background:transparent;border:1px solid var(--i-bd);border-radius:5px;padding:2px 8px;cursor:pointer;opacity:.5;transition:opacity .12s,background .12s}
.dm-sec:hover .dil-secedit{opacity:1}
.dil-secedit:hover{background:var(--accent-weak);opacity:1}
.dil-secdiscuss{font-size:11px;color:var(--accent);background:transparent;border:1px solid var(--i-bd);border-radius:5px;padding:1px 6px;cursor:pointer;opacity:.5;transition:opacity .12s,background .12s}
.dm-sec:hover .dil-secdiscuss{opacity:1}
.dil-secdiscuss:hover{background:var(--accent-weak);opacity:1}
.dil-discuss-b{opacity:1}
.dil-secedited{font-family:var(--mono);font-size:9px;letter-spacing:.03em;text-transform:uppercase;font-weight:700;color:var(--accent-2);background:var(--accent-weak);border:1px solid var(--i-bd);border-radius:5px;padding:2px 7px}
.dil-sec-ta{min-height:170px}
/* dependents-stale banner after a hand-edit — gold = "a downstream analysis may now disagree" */
.dil-stale{margin:14px 0 4px;padding:12px 14px;border:1px solid var(--accent);border-left-width:3px;border-radius:9px;background:var(--accent-weak)}
.dil-stale-h{font-weight:700;font-size:13px;color:var(--ink);margin-bottom:4px}
.dil-stale-b{font-size:12.5px;color:var(--ink);line-height:1.5;margin-bottom:9px}
.dil-stale-acts{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.dil-stale-rerun{width:auto;margin:0;padding:7px 13px;font-size:12px}
.dil-stale-ok{border-color:var(--line);border-left-color:var(--accent-2);background:var(--surface);font-size:12.5px;color:var(--ink)}
/* Y.389 — the accumulated change-list inside a stale / pivot banner (shows magnitude, not just "stale") */
.dil-stale-chs{margin:0 0 9px;padding-left:18px;font-size:12px;color:var(--ink);line-height:1.55}
.dil-stale-chs li{margin-bottom:2px}
/* Y.389 — material-pivot banner: prepended to the cockpit wrap when accepted edits re-found the concept */
.ck-pivot{margin:0 0 16px;padding:13px 15px;border:1px solid var(--r-bd,#e0a83a);border-left-width:3px;border-radius:9px;background:var(--r-bg,#fdf4e3)}
.ck-pivot-h{font-weight:800;font-size:13.5px;color:var(--r-ink,#8a5a00);margin-bottom:5px}
.ck-pivot-b{font-size:12.5px;color:var(--ink);line-height:1.55;margin-bottom:9px}
/* upstream-staleness (P3): a module opened after an upstream edit — neutral accent, distinct from the gold edit banner */
.dil-stale-up{border-left-color:var(--accent-2)}
/* AGI Partner (Y.252) — concept-scoped chat + propose-edit */
.agi-focus{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin:10px 0 12px;padding:8px 10px;border:1px solid var(--line);border-radius:9px;background:var(--surface)}
.agi-focus-l{font-family:var(--mono);font-size:10.5px;letter-spacing:.05em;text-transform:uppercase;color:var(--accent-2);font-weight:700}
.agi-thread{display:flex;flex-direction:column;gap:12px;max-height:52vh;overflow-y:auto;padding:4px 2px}
.agi-msg{display:flex;flex-direction:column;gap:3px;max-width:88%}
.agi-u{align-self:flex-end;align-items:flex-end}
.agi-a{align-self:flex-start}
.agi-who{font-family:var(--mono);font-size:9.5px;letter-spacing:.05em;text-transform:uppercase;color:var(--accent-2);font-weight:700}
.agi-body{padding:9px 13px;border-radius:11px;font-size:13px;line-height:1.55;border:1px solid var(--line);background:var(--surface);overflow-wrap:anywhere;word-break:break-word;min-width:0}
.agi-u .agi-body{background:var(--accent-weak);border-color:var(--i-bd)}
.agi-body .dm-p{margin:4px 0}
.agi-body a{overflow-wrap:anywhere}
/* Y.270 — Associate "typing" indicator (shown as a real bubble while it works, not a relabeled button) */
.agi-typing{display:inline-flex;gap:5px;align-items:center;padding:3px 1px}
.agi-typing span{width:6px;height:6px;border-radius:50%;background:var(--accent-2);opacity:.35;animation:agi-bounce 1.2s infinite ease-in-out}
.agi-typing span:nth-child(2){animation-delay:.15s}
.agi-typing span:nth-child(3){animation-delay:.3s}
@keyframes agi-bounce{0%,80%,100%{opacity:.3;transform:translateY(0)}40%{opacity:1;transform:translateY(-4px)}}
.agi-input{display:flex;gap:8px;align-items:flex-end;margin-top:12px}
.agi-input textarea{flex:1;min-height:46px;padding:10px 12px;border:1px solid var(--line);border-radius:9px;background:var(--surface);color:var(--ink);font:inherit;font-size:13px;line-height:1.5;resize:vertical}
.agi-input .ck-run{width:auto;margin:0;padding:10px 16px;white-space:nowrap}
.agi-propose{width:auto;margin:0 0 0 auto;padding:5px 11px;font-size:11px}
.agi-proposal{margin:12px 0;border:1px solid var(--accent);border-left-width:3px;border-radius:10px;background:var(--accent-weak);padding:12px 14px}
.agi-prop-h{font-weight:700;font-size:13px;margin-bottom:8px}
.agi-prop-body{max-height:40vh;overflow-y:auto;background:var(--surface);border:1px solid var(--line);border-radius:8px;padding:10px 12px;font-size:12.5px;line-height:1.55}
.agi-prop-acts{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-top:10px}
.agi-prop-acts .ck-run{width:auto;margin:0;padding:7px 14px}
/* Y.260 agentic action cards — the Associate proposes; you approve */
.agi-actions{display:flex;flex-direction:column;gap:8px;margin:8px 0 4px}
.agi-act{border:1px solid var(--accent);border-left-width:3px;border-radius:9px;background:var(--accent-weak);padding:9px 11px}
.agi-act-h{font-size:13px}
.agi-act-val{margin:6px 0 2px;padding:7px 9px;border:1px dashed var(--line);border-radius:7px;background:var(--surface);font-size:12.5px;max-height:180px;overflow:auto;white-space:pre-wrap}
.agi-act-btns{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:8px}
.agi-act-btns .ck-run{width:auto;margin:0;padding:6px 13px}
.agi-act-done{border:1px solid var(--ok,#2ea043);border-left-width:3px;color:var(--ok,#2ea043);background:transparent;border-radius:9px;font-size:12.5px;padding:6px 10px}
.agi-act-run{opacity:.85;font-size:12.5px;display:flex;align-items:center;gap:8px;border:1px solid var(--line);border-radius:9px;padding:8px 11px}
/* Human Review (Y.253) — sign-off + coaching comments */
.rv-tally{display:flex;gap:8px;flex-wrap:wrap;margin:8px 0 14px}
.rv-st-badge{font-family:var(--mono);font-size:10px;letter-spacing:.03em;text-transform:uppercase;font-weight:700;border-radius:5px;padding:2px 8px;border:1px solid var(--line);white-space:nowrap}
.rv-st-approved{color:var(--g-ink)}
.rv-st-needs-work{color:var(--a-ink)}
.rv-st-blocked{color:var(--r-ink)}
.rv-st-pending{color:var(--accent-2)}
.rv-item{border:1px solid var(--line);border-left-width:3px;border-radius:10px;padding:12px 14px;margin:10px 0;background:var(--surface)}
.rv-item.rv-approved{border-left-color:var(--g-ink)}
.rv-item.rv-needs-work{border-left-color:var(--a-ink)}
.rv-item.rv-blocked{border-left-color:var(--r-ink)}
.rv-item.rv-pending{border-left-color:var(--line)}
.rv-h{display:flex;align-items:flex-start;justify-content:space-between;gap:10px}
.rv-what{font-size:12px;color:var(--ink);opacity:.85;margin-top:3px}
.rv-body{margin:10px 0;padding:10px 12px;border:1px solid var(--line);border-radius:8px;font-size:12.5px;line-height:1.55;max-height:42vh;overflow-y:auto}
.rv-stbar{display:flex;gap:6px;flex-wrap:wrap;margin:10px 0}
.rv-st{font-size:11px;padding:4px 10px;border:1px solid var(--line);border-radius:6px;background:transparent;color:var(--ink);cursor:pointer;opacity:.65;transition:opacity .12s}
.rv-st:hover{opacity:1}
.rv-st.on{opacity:1;font-weight:700;background:var(--accent-weak);border-color:var(--i-bd)}
.rv-comments{margin:4px 0}
.rv-cm{border-left:2px solid var(--line);padding:2px 0 2px 9px;margin:6px 0}
.rv-cm-by{font-weight:700;font-size:11.5px}
.rv-cm-at{font-size:10.5px;color:var(--accent-2)}
.rv-cm-t{font-size:12.5px;line-height:1.5;margin-top:1px}
.rv-addc{display:flex;gap:6px;margin-top:8px}
.rv-addc .rv-cm-in{flex:1}
/* footer "Associate" launcher (Y.255) — the always-visible bottom entry to the Associate */
.mc-stat-agi{background:none;border:0;font:inherit;color:inherit;cursor:pointer;padding:0;text-decoration:underline dotted;text-underline-offset:2px}
.mc-stat-agi:hover{color:var(--accent)}
/* combined in-context right-rail panel (Y.258): Associate chat + Human Review tabs, docked, no navigation */
.mcr-panel{margin-top:6px}
.rail-tabs{display:flex;gap:4px;margin:0 0 8px;position:sticky;top:0;background:var(--surface-2);padding:2px 0 6px;z-index:2}
.rail-tab{flex:1;font-size:11px;padding:6px 8px;border:1px solid var(--line);border-radius:7px;background:transparent;color:var(--ink);cursor:pointer;opacity:.7}
.rail-tab:hover{opacity:1}
.rail-tab.on{opacity:1;font-weight:700;background:var(--accent-weak);border-color:var(--i-bd)}
.mc-rail .wrap{max-width:100%!important;padding:0}
.mc-rail .top{display:none}
.mc-rail .agi-thread{max-height:40vh}
.mc-rail .agi-focus{flex-direction:column;align-items:stretch}
.mc-rail .agi-input{flex-direction:column;align-items:stretch}
.mc-rail .agi-input .ck-run{width:100%}
.mc-rail .rv-body{max-height:32vh}
.dil-src{margin:0;padding-left:18px}
.dil-src li{font-size:11.5px;margin-bottom:4px;line-height:1.5}
.dil-src a{color:var(--accent);text-decoration:none}
.dil-src a:hover{text-decoration:underline}

/* readiness — TRL scale + per-concept rubric */
.trl-scale{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-bottom:4px}
.trl-band{background:var(--surface);border:1px solid var(--line);border-top-width:2px;border-radius:10px;padding:11px 13px}
.trl-band.b-i{border-top-color:var(--i-ink)}.trl-band.b-a{border-top-color:var(--a-ink)}.trl-band.b-g{border-top-color:var(--g-ink)}
.trl-band-h{font-size:12px;letter-spacing:.03em;text-transform:uppercase;font-weight:600;color:var(--ink);margin-bottom:8px}
.trl-range{font-size:9.5px;font-weight:600;color:var(--muted);letter-spacing:.02em;margin-left:4px}
.trl-steps{display:flex;flex-direction:column;gap:4px}
.trl-step{display:flex;align-items:center;gap:7px;font-size:11.5px;color:var(--text)}
.trl-num{flex:none;width:18px;height:18px;border-radius:50%;background:var(--surface-3);border:1px solid var(--line);font-size:9.5px;font-weight:700;color:var(--muted);display:flex;align-items:center;justify-content:center}
.rdg-card{padding:14px 16px}
.rdg-head{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap;margin-bottom:10px;padding-bottom:9px;border-bottom:1px solid var(--line)}
.rdg-title{font-size:14px;font-weight:600;color:var(--ink)}
.rdg-stage{font-size:10px;letter-spacing:.02em;text-transform:uppercase;font-weight:600;color:var(--muted);background:var(--surface-3);border:1px solid var(--line);border-radius:5px;padding:2px 8px}
.rdg-grid{display:grid;grid-template-columns:1fr 1fr;gap:6px 18px}
.rdg-row{display:flex;align-items:center;gap:10px;padding:3px 0}
.rdg-k{width:140px;flex:none;font-size:11.5px;color:var(--muted);text-align:right}
.rdg-v{flex:1;display:flex;align-items:center;gap:7px;font-size:11.5px;color:var(--text)}
.rdg-dot{flex:none;width:9px;height:9px;border-radius:50%}
.rdg-dot.rag-g{background:var(--g-ink)}.rdg-dot.rag-a{background:var(--a-ink)}.rdg-dot.rag-r{background:var(--r-ink)}
.rdg-lbl{color:var(--text)}
.rdg-pend{font-size:10.5px;font-style:italic;color:var(--faint)}
.rdg-actions{display:flex;align-items:center;gap:9px;flex-wrap:wrap}
.rdg-run{cursor:pointer;font-family:inherit;font-size:10.5px;font-weight:600;color:var(--accent-ink);background:var(--accent);border:1px solid var(--accent);border-radius:7px;padding:6px 11px;white-space:nowrap}
.rdg-run:hover{background:var(--accent-2)}
.rdg-run:disabled{opacity:.55;cursor:default}
.rdg-run.has{color:var(--g-ink);background:var(--g-bg);border-color:var(--g-bd)}
@media(max-width:680px){.trl-scale{grid-template-columns:1fr}.rdg-grid{grid-template-columns:1fr}.rdg-k{width:120px}}

/* conjoint — study design (segments + attribute template + anchors) */
.cj-segs{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:10px}
.cj-seg{background:var(--surface);border:1px solid var(--line);border-radius:10px;padding:11px 13px}
.cj-seg-n{font-size:13px;font-weight:600;color:var(--ink);margin-bottom:5px}
.cj-seg-m{margin-bottom:5px}
.cj-seg-w{font-size:11px;color:var(--muted);line-height:1.5}
.cj-attr-n{color:var(--ink);font-weight:600;white-space:nowrap}
.cj-lvl{display:inline-block;font-size:10.5px;color:var(--text);background:var(--surface-3);border:1px solid var(--line);border-radius:5px;padding:2px 8px;margin:2px 5px 2px 0}
.cj-anchor-row{font-size:12px;color:var(--text);line-height:1.5;margin-top:6px}
.cj-anchor-k{display:inline-block;font-size:9px;letter-spacing:.03em;text-transform:uppercase;font-weight:700;color:var(--g-ink);background:var(--g-bg);border:1px solid var(--g-bd);border-radius:4px;padding:1px 6px;margin-right:6px;vertical-align:middle}
.cj-disc{margin-top:12px;background:var(--a-bg);border:1px solid var(--a-bd);border-radius:9px;padding:9px 13px;font-size:10.5px;color:var(--a-ink);line-height:1.5}
.cj-disc b{color:var(--a-ink)}

/* org mapper — knowledge graph + unit/SME directory */
.org-graph{background:var(--surface);border:1px solid var(--line);border-radius:12px;padding:14px}
.org-unit{padding:13px 15px}
.org-unit .scard-h{display:flex;align-items:baseline;justify-content:space-between;gap:8px}

/* role coordinator — operating model, agent roster, coordination board */
.role-models{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:8px}
.role-model{background:var(--surface);border:1px solid var(--line);border-radius:9px;padding:10px 12px}
.role-model-h{font-size:12px;letter-spacing:.02em;text-transform:uppercase;font-weight:600;color:var(--ink);margin-bottom:4px}
.role-model-d{font-size:11px;color:var(--muted);line-height:1.45}
.role-agent{padding:12px 14px;border-top:2px solid var(--accent)}
.role-agent-h{font-size:12.5px;font-weight:600;color:var(--ink);margin-bottom:5px;display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.role-mode{font-size:8.5px;letter-spacing:.03em;text-transform:uppercase;font-weight:700;color:var(--g-ink);background:var(--g-bg);border:1px solid var(--g-bd);border-radius:4px;padding:1px 6px}
.role-agent-d{font-size:11.5px;color:var(--text);line-height:1.5;margin-bottom:6px}
.role-agent-f{font-size:10px;color:var(--muted);border-top:1px solid var(--line);padding-top:6px}
.role-board .role-vh{text-align:center;min-width:90px}
.role-fn{color:var(--ink);font-weight:600;white-space:nowrap}
.role-cell{text-align:center;white-space:nowrap}
.role-tag{display:inline-block;font-size:8.5px;letter-spacing:.02em;font-weight:700;border-radius:4px;padding:1px 6px;margin:1px 2px}
.role-tag.t-ai{color:var(--i-ink);background:var(--i-bg);border:1px solid var(--i-bd)}
.role-tag.t-gap{color:var(--a-ink);background:var(--a-bg);border:1px solid var(--a-bd)}

/* ============ responsive / adaptive layouts ============ */
/* tablet: 5-wide strips and dense grids get breathing room */
@media(max-width:880px){
  .gate-strip{grid-template-columns:repeat(5,minmax(150px,1fr));overflow-x:auto;padding-bottom:4px}
  .ent{grid-template-columns:1fr 1fr}
}
/* phone */
@media(max-width:640px){
  .wrap{padding:22px 16px}
  .mc-main .wrap{padding:16px 14px 48px}
  .top{flex-wrap:wrap;gap:10px}
  .ent{grid-template-columns:1fr}
  .rating{flex-direction:column}
  .rating-cols{grid-template-columns:1fr}
  .row{flex-wrap:wrap}.row input{flex:1 1 100%}.row .btn{width:100%}
  .lp-h1{font-size:30px}.lp-h2{font-size:22px}
  .lp-nav{gap:8px}
  /* Y.939 — portrait phones: the nav-links row never wrapped, so Sign in overflowed off the right edge
     and was invisible until landscape. Let it wrap under the brand and stay fully on-screen. */
  .lp-nav-links{flex-wrap:wrap;justify-content:flex-start;gap:10px;width:100%}
  .lp-nav .brand h1{font-size:19px}
  .ck-xref{grid-template-columns:1fr 1fr}
  .cgrid{grid-template-columns:1fr}
  .scr-row{flex-wrap:wrap}
  .scr-row .dchip{min-width:0}
  .scr-row .scr-dil{align-self:flex-start}
  .rdg-head{align-items:flex-start}
  .price-amt{font-size:26px}
}
/* very small */
@media(max-width:380px){
  .ck-xref{grid-template-columns:1fr}
  .gate-strip{grid-template-columns:repeat(5,minmax(135px,1fr))}
}

/* ---- shell header entitlement meter (Y.54c) ---- */
.mc-modal-ov { position: fixed; inset: 0; background: rgba(15,15,35,.45); z-index: 200; display: flex; align-items: center; justify-content: center; }
.mc-modal { background: var(--bg, #fff); border: 1px solid var(--line-2, #e3e5ee); border-radius: 12px; padding: 18px; width: min(440px, 92vw); box-shadow: 0 16px 44px rgba(20,20,43,.2); }
.mc-modal h3 { font-size: 15px; }
.mc-modal .os-l { display: block; font-size: 10.5px; letter-spacing: .06em; text-transform: uppercase; color: var(--ink-3, #8a8fa3); font-weight: 600; margin: 12px 0 4px; }
.mc-modal .os-radios { display: flex; flex-direction: column; gap: 6px; font-size: 13px; }
.mc-modal .os-radios label { display: flex; align-items: center; gap: 7px; cursor: pointer; }
/* Y.969 — inputs don't inherit text color, so on dark mode they fell back to black-on-dark. Force the theme ink + a readable placeholder for every field in the modal. */
.mc-modal input, .mc-modal select, .mc-modal textarea { color: var(--ink); }
.mc-modal input::placeholder, .mc-modal textarea::placeholder { color: var(--muted, #8a8fa3); opacity: 1; }
.mc-flame { width: 22px; height: 22px; flex: none; }
.mc-flame .bf-o { fill: var(--accent, #6b4e9e); }
/* Y.1208 — the header mark's core follows the same rule as every other flame. It was #fff, which is a
   plausible "hot" on a mid accent and reads as a hole punched in a pale one. */
.mc-flame .bf-i { fill: var(--accent-hot); }
.mc-bstack { display: inline-flex; flex-direction: column; line-height: 1.05; min-width: 0; }
.mc-bsub { font-size: 9px; letter-spacing: .04em; text-transform: uppercase; color: var(--ink-3, #8a8fa3); font-weight: 500; margin-top: 1px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
@media (max-width: 640px) { .mc-bsub { display: none; } }
.mc-bprod{color:var(--accent,#6b4e9e)} /* Y.953 — product line in the brand accent; umbrella stays ink */
.mc-bname-dil { font-weight: 400; opacity: .62; } /* Y.943 — the 'Diligence' half of the header wordmark, lighter */
.mc-meter { margin-left: 10px; padding: 4px 12px; border-radius: 999px; font: 600 11.5px/1.4 var(--mono, ui-monospace, monospace); letter-spacing: .02em; cursor: pointer; border: 1px solid var(--line, #d4d4d8); background: transparent; color: var(--text-2, #555); white-space: nowrap; }
.mc-meter[data-tone="paid"] { border-color: var(--good, #16a34a); color: var(--good, #16a34a); }
.mc-meter[data-tone="meter"] { border-color: var(--brand, #4f46e5); color: var(--brand, #4f46e5); }
.mc-meter[data-tone="low"] { border-color: var(--warn, #d97706); color: var(--warn, #d97706); }
.mc-meter:hover { filter: brightness(1.1); }
@media (max-width: 720px) { .mc-meter { display: none; } }

/* ============================================================
   Brand token layer (2026-06-11) — ONE brand, tokenized.
   The OS warm-dark terminal brand is the default; light = warm paper;
   whitelabel = [data-accent] swaps. Same variable names the whole
   stylesheet already consumes, so this layer restyles every view at once.
   ============================================================ */
html[data-theme="light"]{
  /* Crucible light — cool paper with a deep violet flame accent (Y.419) */
  --bg:oklch(0.970 0.006 285); --surface:oklch(0.990 0.004 285); --surface-2:oklch(0.945 0.008 285); --surface-3:oklch(0.910 0.010 285);
  --line:oklch(0 0 0 / 0.10); --line-2:oklch(0 0 0 / 0.16);
  --ink:oklch(0.24 0.02 285); --text:oklch(0.36 0.018 285); --muted:oklch(0.50 0.015 285); --faint:oklch(0.62 0.012 285);
  --accent:oklch(0.52 0.20 285); --accent-2:oklch(0.46 0.20 285); --accent-weak:oklch(0.52 0.20 285 / 0.13);
}
html[data-theme="dark"]{
  /* Crucible forge — cool near-black (hue 274) lit by a blue-violet flame (Y.419) */
  --bg:oklch(0.150 0.012 274); --surface:oklch(0.182 0.014 274); --surface-2:oklch(0.215 0.016 274); --surface-3:oklch(0.245 0.016 274);
  --line:oklch(1 0 0 / 0.09); --line-2:oklch(1 0 0 / 0.15);
  /* Y.1061 — --faint was oklch(0.470) on a ~0.18 background: roughly 2.5:1, which made every "not started"
     label (empty strength chips, placeholder rows) unreadable in dark mode. Lifted to 0.60 — still clearly
     the lowest tier below --muted, but actually legible. */
  --ink:oklch(0.970 0.008 274); --text:oklch(0.820 0.013 274); --muted:oklch(0.640 0.015 274); --faint:oklch(0.600 0.016 274);
  --accent:oklch(0.66 0.205 274); --accent-2:oklch(0.72 0.175 268); --accent-weak:oklch(0.66 0.205 274 / 0.16);
  --accent-ink:oklch(0.16 0.04 274); --accent-hot:oklch(0.82 0.135 238); --accent-soft:oklch(0.66 0.205 274 / 0.14); --accent-glow:oklch(0.66 0.205 274 / 0.40);
  --g-ink:oklch(0.72 0.15 262); --g-bg:oklch(0.72 0.15 262 / 0.12); --g-bd:oklch(0.72 0.15 262 / 0.34); --ok:oklch(0.72 0.15 262);
  --a-ink:oklch(0.70 0.16 305);  --a-bg:oklch(0.70 0.16 305 / 0.12);  --a-bd:oklch(0.70 0.16 305 / 0.34);
  --r-ink:oklch(0.70 0.20 350);  --r-bg:oklch(0.70 0.20 350 / 0.12);  --r-bd:oklch(0.70 0.20 350 / 0.34);
  --y-ink:oklch(0.72 0.15 285); --y-bg:oklch(0.72 0.15 285 / 0.12); --y-bd:oklch(0.72 0.15 285 / 0.34);
  --i-ink:oklch(0.74 0.13 274); --i-bg:oklch(0.74 0.13 274 / 0.12); --i-bd:oklch(0.74 0.13 274 / 0.34);
  --shadow-sm:0 1px 2px oklch(0 0 0 / 0.40); --shadow:0 10px 34px oklch(0 0 0 / 0.50);
}
/* landing-parity instrument grid: faint 64px graph lines behind dark content
   (the marketing hero's backdrop). Light theme stays clean warm paper. */


/* ── Y.1260 · THE PACKET ROW, IN CSS RATHER THAN IN GUESSES ──────────────────────────────────────────────
   Lars, on the Concept Packet: "Formatting is off." Every row rendered one word per line beside a button
   that owned most of the width.
   `.btn` is `width:100%` (line 300), which is right for the stacked buttons it was written for. Put one in a
   flex row with `flex:none` and that 100% becomes an unshrinkable base size: `flex:none` is `flex:0 0 auto`,
   so the button claims the full track and the text column collapses to whatever is left. Three inline styles
   fighting a class rule they could not see.
   A real class instead. An explicit three-track grid says what the row is, `minmax(0,1fr)` lets the middle
   track actually shrink to its container, and the button's width is set here rather than argued with. */
/* Y.1261 — the tick sits where the icon was, so the row does not grow a fourth column. */
.pk-pick{display:flex;flex-direction:column;align-items:center;gap:5px;cursor:pointer}
.pk-cb{width:15px;height:15px;accent-color:var(--accent);cursor:pointer;margin:0}
.pk-cb:disabled{cursor:default;opacity:.35}
.pk-all{width:auto;margin:0;padding:8px 14px;font-size:12.5px;white-space:nowrap}
.pk-row{display:grid;grid-template-columns:26px minmax(0,1fr) auto;gap:14px;align-items:start;padding:14px 16px}
.pk-ico{font-size:19px;line-height:1.3;text-align:center}
.pk-ico.pk-dim{opacity:.4}
.pk-n{font-weight:650;color:var(--ink);font-size:14px;line-height:1.35}
.pk-n .ck-prov{font-weight:400}
.pk-w{font-size:12.5px;color:var(--text);line-height:1.5;margin-top:4px}
.pk-note{font-size:11px;color:var(--muted);line-height:1.45;margin-top:5px}
.pk-go{width:auto;margin:0;white-space:nowrap;align-self:center;padding:8px 14px;font-size:12.5px}
@media(max-width:720px){
  .pk-row{grid-template-columns:26px minmax(0,1fr);row-gap:10px}
  .pk-go{grid-column:2;justify-self:start}
}

/* ── Y.1258 · A DOCUMENT YOU SEND IS A LIGHT DOCUMENT ────────────────────────────────────────────────────
   Lars, on the exported Concept Brief: "the PDF render didn't adjust to light mode for the easier visual
   read." He is right and it is worse than a preference. The app's dark theme is a screen theme; printed or
   opened in a PDF reader it is a page of near-black that costs a fortune in toner, reads badly on a laptop
   in a meeting room, and looks like a screenshot of software rather than a document from a firm. Nobody
   sends a CFO a black PDF.
   The fix is the token layer, which is the whole reason it exists: print re-declares the LIGHT values on
   the dark root, so every component recolours without any component knowing about printing. Values are the
   :root block at the top of this file, verbatim; if that palette moves, this must move with it.
   The verdict spectrum (--g/-a/-r/-y/-i) comes along, because a risk dial in dark-mode ink on white is the
   one thing that would still look wrong after everything else was fixed. */
@media print{
  html[data-theme="dark"]{
    --bg:#FFFFFF; --surface:#FFFFFF; --surface-2:#FAFAFB; --surface-3:#F3F4F6;
    --line:#E6E8EC; --line-2:#D7DAE0;
    --ink:#16181D; --text:#34373E; --muted:#6B7280; --faint:#9AA0AA;
    --accent:oklch(0.52 0.20 285); --accent-2:oklch(0.46 0.20 285); --accent-weak:oklch(0.52 0.20 285 / 0.13);
    --accent-ink:#ffffff; --accent-hot:oklch(0.82 0.135 238); --accent-soft:oklch(0.66 0.205 274 / 0.14); --accent-glow:oklch(0.66 0.205 274 / 0.40);
    --g-ink:#2159c9; --g-bg:#eef3fe; --g-bd:#c6d6f6; --ok:#2159c9;
    --a-ink:#7a33c4; --a-bg:#f4edfe; --a-bd:#ddc6f2;
    --r-ink:#c02f83; --r-bg:#fdeef6; --r-bd:#f5c8e2;
    --y-ink:#4a45cf; --y-bg:#eeeefe; --y-bd:#ccccf6;
    --i-ink:#3538CD; --i-bg:#EEF0FE; --i-bd:#CDD2F5;
    --shadow-sm:0 1px 2px rgba(16,24,40,.05); --shadow:0 1px 3px rgba(16,24,40,.10);
  }
  /* The instrument grid is a screen texture. On paper it is 4,000 grey lines. */
  html[data-theme="dark"] body{background-image:none}
  html,body{background:#fff!important}
  /* Y.1258 — AND IT HAS TO FIT THE PAGE. The exported brief was clipped at the right edge on every page:
     the Opportunity Map lost its axis label to "Feas", the value-chain cards lost their last column. The
     app lays out to a viewport and a page is narrower than one, so anything with a fixed or minimum width
     has to be allowed to reflow rather than run off the sheet. A chart that is cut in half is not a chart. */
  @page{margin:14mm 12mm}
  .mc-main,#mc-content,.wrap,.scard,.tt-card,.fr-doc{max-width:100%!important;overflow:visible!important}
  svg{max-width:100%!important;height:auto!important}
  .cards3,.tt-grid,.jtbd-grid{grid-template-columns:1fr 1fr!important}
  table{width:100%!important;table-layout:fixed!important}
  table td,table th{word-break:break-word}
  /* Nothing that scrolls on screen may hide content on paper. */
  [style*="overflow-x"],.dk-tablewrap,.ck-scroll{overflow:visible!important}
}

html[data-theme="dark"] body{
  background-image:linear-gradient(oklch(1 0 0 / 0.022) 1px, transparent 1px),
    linear-gradient(90deg, oklch(1 0 0 / 0.022) 1px, transparent 1px);
  background-size:64px 64px;
}
/* dark-mode contrast fixes for the few hardcoded inks */
html[data-theme="dark"] .btn{color:var(--bg)}
html[data-theme="dark"] .btn:hover{background:var(--accent-2);border-color:var(--accent-2)}
html[data-theme="dark"] .btn-ghost{color:var(--text);background:transparent}
html[data-theme="dark"] .btn-ghost:hover{background:var(--surface-3)}
/* dark-mode loading shimmer — white rgba so the skeleton is visible on the forge bg (light theme keeps the black shimmer) */
html[data-theme="dark"] .bl-bar{background:rgba(255,255,255,.10)}
html[data-theme="dark"] .bl-skrow{background:linear-gradient(90deg,rgba(255,255,255,.05) 25%,rgba(255,255,255,.11) 37%,rgba(255,255,255,.05) 63%);background-size:400% 100%}
html[data-theme="dark"] .bl-skcard{background:linear-gradient(90deg,rgba(255,255,255,.05) 25%,rgba(255,255,255,.1) 37%,rgba(255,255,255,.05) 63%);background-size:400% 100%}
/* whitelabel accent presets — identical hues to the landing page */
html[data-accent="crimson"]{ --accent:oklch(0.64 0.18 22); --accent-2:oklch(0.58 0.18 22); --accent-weak:oklch(0.64 0.18 22 / 0.14); }
html[data-theme="light"][data-accent="crimson"]{ --accent:oklch(0.50 0.18 22); --accent-2:oklch(0.44 0.18 22); --accent-weak:oklch(0.50 0.18 22 / 0.13); }
html[data-accent="navy"]{ --accent:oklch(0.66 0.11 250); --accent-2:oklch(0.60 0.11 250); --accent-weak:oklch(0.66 0.11 250 / 0.14); }
html[data-theme="light"][data-accent="navy"]{ --accent:oklch(0.46 0.11 255); --accent-2:oklch(0.40 0.11 255); --accent-weak:oklch(0.46 0.11 255 / 0.13); }
html[data-accent="forest"]{ --accent:oklch(0.66 0.12 150); --accent-2:oklch(0.60 0.12 150); --accent-weak:oklch(0.66 0.12 150 / 0.14); }
html[data-theme="light"][data-accent="forest"]{ --accent:oklch(0.46 0.11 150); --accent-2:oklch(0.40 0.11 150); --accent-weak:oklch(0.46 0.11 150 / 0.13); }
html[data-accent="violet"]{ --accent:oklch(0.66 0.15 300); --accent-2:oklch(0.60 0.15 300); --accent-weak:oklch(0.66 0.15 300 / 0.14); }
html[data-theme="light"][data-accent="violet"]{ --accent:oklch(0.50 0.15 300); --accent-2:oklch(0.44 0.15 300); --accent-weak:oklch(0.50 0.15 300 / 0.13); }
/* instrument touches: mono micro-labels, like the landing */
.mc-crumb,.mc-meter{font-family:var(--mono)}
.mc-theme{margin-left:6px;width:30px;height:30px;border-radius:8px;border:1px solid var(--line);background:transparent;color:var(--muted);cursor:pointer;font-size:14px;line-height:1}
/* Y.288 theme-accent picker — sits next to the light/dark toggle */
.mc-brand-sel{height:30px;border-radius:8px;border:1px solid var(--line);background:transparent;color:var(--muted);cursor:pointer;font:inherit;font-size:11.5px;padding:0 6px;max-width:108px}
.mc-brand-sel:hover{color:var(--ink);border-color:var(--muted)}
@media(max-width:680px){.mc-brand-sel{display:none}}
/* Y.295 module strength scorecard */
.ms-table{border:1px solid var(--line);border-radius:10px;overflow:hidden;margin-top:4px}
.ms-row{display:grid;grid-template-columns:1.6fr 1fr 1fr .5fr;align-items:center;gap:6px;padding:7px 12px;border-top:1px solid var(--line);font-size:12px}
.ms-row > *:not(:last-child){border-right:1px solid var(--line-2);padding-right:14px}
.ms-row:first-child{border-top:none}
.ms-head{background:var(--surface);color:var(--muted);font-size:10.5px;text-transform:uppercase;letter-spacing:.04em}
.ms-lbl{font-weight:600;color:var(--ink)}
.ms-cell{display:flex;align-items:center;gap:7px}
.ms-cell b{min-width:22px;text-align:right;font-variant-numeric:tabular-nums}
.ms-bar{flex:1;height:6px;border-radius:4px;background:var(--line);overflow:hidden}
.ms-bar-fill{display:block;height:100%;border-radius:4px}
.ms-g{background:var(--g-ink,#2e7d32)}.ms-a{background:var(--a-ink,#b8860b)}.ms-r{background:var(--r-ink,#c0392b)}
.mc-theme:hover{color:var(--ink);border-color:var(--accent)}

/* Mission Control / Home (Y.374) — the user home base: value-delivered ledger, portfolio 2x2, needs, the sell. */
.mc-tiles{display:flex;flex-wrap:wrap;gap:10px}
.mc-tile{flex:1 1 120px;min-width:118px;border:1px solid var(--line,rgba(128,128,128,.25));border-radius:12px;padding:14px 14px 12px;background:var(--card,transparent)}
.mc-tile-v{font-size:26px;font-weight:800;letter-spacing:-.02em;line-height:1;font-family:var(--mono,inherit)}
.mc-tile-k{font-size:11px;color:var(--muted,#888);margin-top:6px;text-transform:uppercase;letter-spacing:.03em}
.mc-portfolio{display:grid;grid-template-columns:340px 1fr;gap:18px;align-items:start}
@media(max-width:720px){.mc-portfolio{grid-template-columns:1fr}}
.mc-scatter{width:100%;max-width:340px;height:auto;display:block}
.mc-dot{cursor:pointer;opacity:.9}.mc-dot:hover{opacity:1}
.mc-axis{stroke:var(--line,rgba(128,128,128,.45));stroke-width:1.2}
.mc-axis2{stroke:var(--line,rgba(128,128,128,.22));stroke-width:1;stroke-dasharray:3 3}
.mc-axislbl{fill:var(--muted,#888);font-size:11px;font-family:var(--mono,inherit)}
.sc-fill-g{fill:var(--g-ink,#2159c9)}.sc-fill-a{fill:var(--a-ink,#7a33c4)}.sc-fill-r{fill:var(--r-ink,#c02f83)}
.mc-funnelrow{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.mc-funnel{display:flex;flex-direction:column;align-items:center;gap:2px;border:1px solid var(--line,rgba(128,128,128,.25));border-radius:10px;padding:8px 12px;background:none;cursor:pointer;font:inherit;color:inherit}
.mc-funnel:hover{border-color:var(--accent,#2A5BD7)}
.mc-funnel-n{font-size:20px;font-weight:800;font-family:var(--mono,inherit);line-height:1}
.mc-funnel-l{font-size:10.5px;color:var(--muted,#888);text-transform:uppercase;letter-spacing:.03em}
/* Y.1330 — the Home funnel: four clickthrough cards, one row, equal weight. Each is a link, so each gets
   the affordance of one: pointer, hover border, and a subtitle saying what the count includes. The old
   .mc-funnel chips above stay for any surface still drawing a compact inline funnel. */
/* Y.1330 — the diligenced band header in the Concepts table. Drawn only when both bands have rows. */
.cl-band td{padding:12px 10px 5px;border-bottom:1px solid var(--line,rgba(128,128,128,.25));background:none}
.cl-band-l{font-size:10.5px;text-transform:uppercase;letter-spacing:.06em;font-weight:700;color:var(--muted,#888)}
.cl-band-n{font-size:10.5px;color:var(--muted,#888);opacity:.7}
.cl-bandall{background:none;border:0;padding:0;font:inherit;color:var(--accent,#2A5BD7);cursor:pointer;text-decoration:underline}
/* Y.1332 — the header brand IS the studio switcher. The button carries no chrome of its own: the brandmark
   is the affordance, and the caret is the only thing added, so the header still reads as a wordmark rather
   than as a control bar. */
.mc-brand-sw{position:relative}
.mc-brand-b{display:flex;align-items:center;gap:8px;background:none;border:0;padding:2px 6px 2px 2px;margin:0;border-radius:8px;cursor:pointer;font:inherit;color:inherit}
.mc-brand-b:hover{background:var(--surface-2,rgba(128,128,128,.10))}
.mc-brand-c{font-size:11px;opacity:.55;line-height:1}
.mc-brand-menu{position:absolute;top:calc(100% + 6px);left:0;z-index:60;min-width:240px}
.mc-fnrow{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin-top:2px}
.mc-fnrow-6{grid-template-columns:repeat(6,1fr)}
/* The two trailing cards are not stages and do not click through, so they do not wear a control's
   affordances: no pointer, no hover lift, and a hairline that reads as a panel rather than a button. */
.mc-fncard-flat{cursor:default;border-style:dashed}
.mc-fncard-flat:hover{border-color:var(--line,rgba(128,128,128,.25));transform:none}
.mc-fncard{display:flex;flex-direction:column;align-items:flex-start;gap:2px;text-align:left;border:1px solid var(--line,rgba(128,128,128,.25));border-radius:12px;padding:12px 14px;background:none;cursor:pointer;font:inherit;color:inherit;transition:border-color .12s ease,transform .12s ease}
.mc-fncard:hover{border-color:var(--accent,#2A5BD7);transform:translateY(-1px)}
.mc-fncard:focus-visible{outline:2px solid var(--accent,#2A5BD7);outline-offset:2px}
.mc-fncard-n{font-size:30px;font-weight:800;font-family:var(--mono,inherit);line-height:1.05}
.mc-fncard-l{font-size:11px;color:var(--muted,#888);text-transform:uppercase;letter-spacing:.05em;font-weight:600}
/* Y.1332 — the sub-line is gone from the cards; the rule stays for any surface still drawing one. */
.mc-fncard-s{font-size:11px;color:var(--muted,#888);opacity:.75;line-height:1.35}
@media (max-width:1280px){.mc-fnrow-6{grid-template-columns:repeat(3,1fr)}}
@media (max-width:900px){.mc-fnrow,.mc-fnrow-6{grid-template-columns:repeat(2,1fr)}}
.mc-arrow{color:var(--muted,#aaa)}
.mc-needs{display:flex;flex-direction:column;gap:6px}
.mc-need{display:flex;justify-content:space-between;align-items:center;gap:12px;border:1px solid var(--line,rgba(128,128,128,.25));border-radius:10px;padding:10px 14px;background:none;cursor:pointer;font:inherit;color:inherit;text-align:left;width:100%}
.mc-need:hover{border-color:var(--accent,#2A5BD7)}
.mc-need-cta{white-space:nowrap;font-weight:700;color:var(--accent,#2A5BD7);font-size:12.5px}
/* Y.411 — stack the title above its status note (they used to render inline and collide), and on a phone stack the whole card so the CTA never squeezes the title. */
.mc-need-t{display:flex;flex-direction:column;gap:1px;min-width:0;overflow-wrap:anywhere}
@media(max-width:560px){.mc-need{flex-direction:column;align-items:flex-start;gap:7px}.mc-need-cta{align-self:flex-end}}
.mc-sell{display:grid;grid-template-columns:1fr 1fr;gap:14px}
@media(max-width:720px){.mc-sell{grid-template-columns:1fr}}
.mc-next,.mc-buy{border:1px solid var(--line,rgba(128,128,128,.25));border-radius:12px;padding:16px 16px 18px}
.mc-buy{border-color:var(--accent,#2A5BD7);background:var(--accent-soft,rgba(42,91,215,.08))}
.mc-next-k{font-size:11px;text-transform:uppercase;letter-spacing:.04em;color:var(--muted,#888)}
.mc-next-h{font-size:18px;font-weight:700;margin-top:3px;letter-spacing:-.01em}
.mc-refer{margin-top:12px;border:1px dashed var(--line,rgba(128,128,128,.4));border-radius:10px;padding:11px 14px;display:flex;align-items:center;gap:10px;flex-wrap:wrap;font-size:13px}
/* Mission Control P3 (Y.375) — reconciled receipts + outcomes */
.mc-recon{margin-top:10px;font-size:12.5px}
.mc-recon summary{cursor:pointer;color:var(--muted,#888)}
.mc-recon summary:hover{color:var(--ink)}
.mc-recon-list{margin-top:8px;display:flex;flex-direction:column;gap:5px}
.mc-recon-row{border-left:2px solid var(--line,rgba(128,128,128,.4));padding:2px 0 2px 10px;cursor:pointer}
.mc-recon-row:hover{border-left-color:var(--accent,#2A5BD7)}
.mc-outcomes{display:flex;flex-wrap:wrap;gap:8px}
.mc-outcome{display:flex;flex-direction:column;gap:2px;border:1px solid var(--line,rgba(128,128,128,.3));border-radius:10px;padding:9px 13px;background:none;cursor:pointer;font:inherit;color:inherit;text-align:left}
.mc-outcome:hover{border-color:var(--accent,#2A5BD7)}
.mc-outcome-s{font-size:11px;color:var(--muted,#888);text-transform:capitalize}
.mc-outcome.mc-pos{border-color:var(--g-ink,#1f9d55)}
.mc-outcome.mc-pos .mc-outcome-s{color:var(--g-ink,#1f9d55)}

/* Y.379 — Concept Brief inline charts: attractiveness×feasibility quadrant + competitive position map */
.ck-chart{margin:12px auto 8px;padding:10px 12px 8px;border:1px solid var(--line,#2a2a2a);border-radius:10px;background:var(--card,rgba(127,127,127,.04));max-width:284px}
.ck-chart-wide{max-width:none;width:100%}/* Y.397 — brief charts span the content width */
.ck-chart-wide .st-chartwrap{width:100%}
.ck-afmap{width:100%;max-width:240px;height:auto;display:block;margin:0 auto}
.ck-cmpmap{width:100%;max-width:520px;height:auto;display:block;margin:0 auto}
.ck-chart-cap{text-align:center;font-size:11px;color:var(--muted,#888);margin-top:5px}
/* Y.397 — TAM/SAM/SOM: circles to one side of the figures (not stacked) */
.ck-tssbrief .tss-svg{flex:0 0 auto;width:168px;display:flex;align-items:center;justify-content:center}
.ck-tssbrief .tss-svg svg{width:152px;max-width:152px;height:auto}
/* Y.397 — brief strength/weakness bullets each on their own line */
.ck-brief-v .ck-bullets-brief{margin:3px 0 0}
.ck-brief-v .ck-bullets-brief li{font-size:12.5px}
/* Y.397 — single founder/industry byline keeps inline edit affordances subtle */
.ck-idline{display:flex;flex-wrap:wrap;align-items:center;gap:2px 4px}
.ck-idline .cl-edit{opacity:.5;font-size:11px}.ck-idline .cl-edit:hover{opacity:1}
.ck-mapblur{filter:blur(4px);opacity:.78}

/* Y.383 — strategy maps (value chain / customer JTBD / chessboard) auto-expanded inline on the brief */
.ck-strat-maps{margin:10px 0 4px;display:flex;flex-direction:column;gap:14px}
.ck-strat-embed{border:1px solid var(--line,#2a2a2a);border-radius:12px;padding:12px 14px;background:var(--card,rgba(127,127,127,.03))}
.ck-strat-embed .ck-strat-head{margin-bottom:8px}
.ck-strat-embed:empty{display:none}

/* ---- Copy Lab (Y.484) — internal synthetic A/B panel ---- */
.cl-form{margin-top:12px}
.cl-lbl{display:block;font-size:12px;font-weight:600;margin:12px 0 4px;color:var(--muted)}
.cl-in{width:100%;padding:8px 10px;border:1px solid var(--line);border-radius:8px;background:var(--surface);color:var(--text);font:inherit;font-size:13px;margin-bottom:4px}
.cl-personas{display:flex;gap:14px;flex-wrap:wrap}
.cl-chk{font-size:12.5px;display:flex;align-items:center;gap:5px}
.cl-variant{border:1px solid var(--line);border-radius:10px;padding:10px 12px;margin-bottom:8px;background:var(--surface-2)}
.cl-vhead{font-size:12.5px;margin-bottom:6px;display:flex;align-items:center;gap:6px}
.cl-rm{margin-left:auto;cursor:pointer;border:none;background:none;color:var(--muted);font-size:13px}
.cl-dim{color:var(--muted);font-weight:400}
.cl-out{margin-top:18px}
.cl-scoreboard{display:flex;gap:18px;flex-wrap:wrap;align-items:flex-start}
.cl-col{flex:1;min-width:180px}.cl-col-wide{flex:2;min-width:320px}
.cl-block-h,.cl-rec-h{font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:var(--muted);margin:0 0 6px}
.cl-tbl{width:100%;border-collapse:collapse;font-size:12.5px}
.cl-tbl th,.cl-tbl td{border:1px solid var(--line);padding:5px 8px;text-align:left;vertical-align:top}
.cl-tbl th{background:var(--surface-2);font-weight:600}
.cl-tbl tr.cl-win td{background:var(--accent-weak);font-weight:700}
.cl-react{color:var(--muted);font-size:11.5px;max-width:340px}
.cl-winner{margin:14px 0;padding:10px 12px;border-left:3px solid var(--accent);background:var(--accent-weak);border-radius:0 8px 8px 0;font-size:13px}
.cl-rec{margin:12px 0;padding:12px 14px;border:1px solid var(--accent);border-radius:10px;background:var(--surface)}
.cl-rec-hl{font-size:16px;font-weight:700;margin-bottom:4px}
.cl-rec-sub{font-size:13px;color:var(--text);margin-bottom:6px}
.cl-rec-cta{font-size:12.5px;font-weight:600;color:var(--accent-ink);background:var(--accent);display:inline-block;padding:4px 12px;border-radius:8px}
.cl-rec-note{font-size:11.5px;color:var(--muted);margin-top:6px}
.cl-block{margin-top:14px}.cl-ul{margin:6px 0 0 18px;font-size:12.5px}.cl-ul li{margin:3px 0}
.cl-caveat{margin-top:12px;font-size:11px;color:var(--faint);font-style:italic}
.cl-load{padding:14px;color:var(--muted);font-size:13px}
.cl-err{padding:12px;color:var(--r-ink);font-size:13px}

/* ---- Verdict flame emblem (Y.486) — grows + heats with the tier; sits in the verdict card corner ---- */
.ck-verdict-wrap{position:relative}
.ck-vflame{width:116px;height:116px;flex:none;pointer-events:none;justify-self:center;align-self:center}
.ck-spectrum{margin:14px 0 4px}
.ck-spectrum-cap{font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--muted);margin-bottom:8px}
.ck-spectrum-cap span{text-transform:none;letter-spacing:0}
.ck-spectrum svg{display:block;width:100%}
.ck-vflame svg{width:100%;height:100%;display:block;transform-origin:50% 82%}
.ck-fl-slag{filter:none}
.ck-fl-brittle{filter:drop-shadow(0 0 7px rgba(192,47,131,.45))}
.ck-fl-tempered{filter:drop-shadow(0 0 10px rgba(122,51,196,.5))}
.ck-fl-forged{filter:drop-shadow(0 0 12px rgba(33,89,201,.55))}
.ck-fl-hardened{filter:drop-shadow(0 0 14px rgba(110,128,255,.6)) drop-shadow(0 0 6px rgba(100,208,255,.42))}
@media(prefers-reduced-motion:no-preference){
  .ck-fl-brittle svg,.ck-fl-tempered svg,.ck-fl-forged svg,.ck-fl-hardened svg{animation:ckflame 3s ease-in-out infinite}
  .ck-fl-hardened svg{animation-duration:2.4s}
}
@keyframes ckflame{0%,100%{opacity:.92;transform:scaleY(1) translateY(0)}22%{opacity:1;transform:scaleY(1.05) translateY(-1px)}48%{opacity:.85;transform:scaleY(.98) translateY(.5px)}72%{opacity:.98;transform:scaleY(1.03) translateY(-.8px)}}


.cl-scorewrap{display:inline-flex;align-items:center;gap:6px}
.ob-fl{display:inline-flex;vertical-align:middle;margin-right:7px}

/* ---- Page-load bouncing flame spinner (Y.493) — replaces the plain "Loading…" text ---- */
.load-flame{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:11px;color:var(--muted);font-size:12.5px}
.load-flame svg{width:52px;height:56px;transform-origin:50% 92%;filter:drop-shadow(0 0 14px var(--accent-glow)) drop-shadow(0 0 6px var(--accent-glow));animation:loadbounce 1.05s cubic-bezier(.5,.05,.5,.95) infinite}
@keyframes loadbounce{0%{transform:translateY(0) scaleY(1) scaleX(1)}18%{transform:translateY(-14px) scaleY(1.08) scaleX(.96)}45%{transform:translateY(0) scaleY(.9) scaleX(1.08)}62%{transform:translateY(-5px) scaleY(1.03) scaleX(.99)}100%{transform:translateY(0) scaleY(1) scaleX(1)}}
@media(prefers-reduced-motion:reduce){.load-flame svg{animation:none}}

/* ── Y.1200 · A CARD THAT HAS NOT ARRIVED YET ───────────────────────────────────────────────────────────────
   Lars: "on any skeleton lazy load visualization instead of a loading icon, can we have the crucible flame
   and glow pulsing/breathing as the animation?"

   The page-load flame BOUNCES — a blocked screen is the forge running, and it should be impossible to ignore.
   A card waiting inside a page it does not own is a quieter statement, so it BREATHES: the same 3.4s rhythm
   as the crucible glow at rest, so six pending cards read as one room warming rather than six things
   competing for your eye. The glow rides --accent-glow, which means a skeleton is in the workspace's own
   colour for the same reason everything else is (Y.1191c).

   The shimmer bars are optional and deliberately vague about length: a skeleton that promises three lines and
   delivers one is a worse lie than a skeleton that promises nothing. ── */
.sk-flame{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:9px;padding:22px 16px;
  min-height:96px;color:var(--muted);font-size:11.5px;text-align:center}
.sk-flame-i{width:26px;height:28px;animation:sk-breathe 3.4s ease-in-out infinite}
.sk-flame-i svg{width:100%;height:100%;display:block;
  filter:drop-shadow(0 0 9px var(--accent-glow)) drop-shadow(0 0 3px var(--accent-glow))}
.sk-flame-l{letter-spacing:.03em}
@keyframes sk-breathe{0%,100%{opacity:.42;transform:scale(.94)}50%{opacity:1;transform:scale(1.04)}}
.sk-lines{width:100%;max-width:280px;display:flex;flex-direction:column;gap:7px;margin-top:4px}
.sk-lines i{display:block;height:8px;border-radius:99px;background:var(--line-2,var(--line));
  animation:sk-breathe 3.4s ease-in-out infinite}
.sk-lines i:nth-child(2){animation-delay:.25s}
.sk-lines i:nth-child(3){animation-delay:.5s}
.sk-lines i:nth-child(4){animation-delay:.75s}
/* Reduced motion keeps the flame — it is the information — and drops only the pulse. */
@media(prefers-reduced-motion:reduce){.sk-flame-i,.sk-lines i{animation:none;opacity:.8;transform:none}}

/* Y.605 — shared toast (non-blocking alert replacement) + module save stamp */
#ui-toasts{position:fixed;bottom:22px;left:50%;transform:translateX(-50%);z-index:9999;display:flex;flex-direction:column;gap:8px;align-items:center;pointer-events:none}
.ui-toast{pointer-events:auto;max-width:min(560px,90vw);padding:10px 16px;border-radius:10px;font-size:13px;font-weight:600;box-shadow:0 10px 34px rgba(0,0,0,.28);border:1px solid var(--line-2);background:var(--surface);color:var(--ink);transition:opacity .3s,transform .3s}
.ui-toast-err{border-color:var(--r-bd);background:var(--r-bg);color:var(--r-ink)}
.ui-toast-ok{border-color:var(--g-bd);background:var(--g-bg);color:var(--g-ink)}
.ui-toast-out{opacity:0;transform:translateY(6px)}
.st-saved{font-family:var(--mono);font-size:10px;color:var(--muted);margin-left:6px}

/* Y.606 — evidence-basis chips on structured rows + deep-deliverable status strip */
.cv-basis{font-family:var(--mono);font-size:9px;letter-spacing:.05em;text-transform:uppercase;border-radius:4px;padding:1px 5px;border:1px solid var(--line-2);align-self:center;white-space:nowrap}
.cv-basis-primary{color:var(--g-ink);border-color:var(--g-bd);background:var(--g-bg)}
.cv-basis-secondary{color:var(--a-ink);border-color:var(--a-bd);background:var(--a-bg)}
.cv-basis-synthetic{color:var(--muted);background:var(--surface-2)}
.st-deep-missing{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}
.st-dm{font-size:11px;color:var(--muted);border:1px dashed var(--line-2);border-radius:6px;padding:3px 9px}
.st-dm-part{color:var(--a-ink);border-color:var(--a-bd)}

/* Y.608 — stronger-direction badges: applies-at + validated-potential stack */
.ck-sv-badge{display:flex;flex-direction:column;align-items:flex-end;gap:2px;flex:none}
.ck-sv-pot{font-family:var(--mono);font-size:10px;font-weight:700;white-space:nowrap}
.sc-pill.pot{opacity:.8;font-weight:600}

/* Y.610 — verdict validates-toward line + the Blink 1-Pager card */
.ck-vpot{font-size:13px;color:var(--text);margin-top:6px}
.ck-vpot b{font-size:15.5px;font-weight:700}
.op-card{max-width:860px;margin:8px auto 30px;background:var(--surface);border:1px solid var(--line);border-radius:14px;padding:26px 30px;box-shadow:var(--shadow)}
.op-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px}
.op-brand{display:flex;align-items:center;gap:7px;font-size:12px;color:var(--muted)}
.op-brand svg{width:15px;height:19px}
.op-brand b{color:var(--ink)}
.op-date{font-family:var(--mono);font-size:10.5px;color:var(--muted)}
.op-title{font-family:var(--serif,Georgia,serif);font-size:23px;font-weight:600;color:var(--ink);line-height:1.2}
.op-hl{font-size:13px;color:var(--text);margin:4px 0 0}
.op-score{display:flex;gap:20px;align-items:center;margin:16px 0 6px;flex-wrap:wrap}
.op-verdict{min-width:132px}
.op-word{font-family:var(--serif,Georgia,serif);font-size:27px;font-weight:600;line-height:1.1}
.op-pot{font-family:var(--mono);font-size:11px;color:var(--muted);margin-top:3px}
.op-fid{font-size:10.5px;color:var(--muted);margin-top:5px}
.op-axes{flex:1;min-width:240px;display:flex;flex-direction:column;gap:6px}
.op-ax{display:flex;align-items:center;gap:10px;font-size:12px}
.op-ax span{width:118px;flex:none;color:var(--text)}
.op-ax b{width:26px;text-align:right;font-variant-numeric:tabular-nums}
.op-track{flex:1;height:7px;border-radius:99px;background:var(--surface-3);overflow:hidden;display:inline-block}
.op-track span{display:block;height:100%;border-radius:99px}
.op-vs{font-family:var(--mono);font-size:10px;color:var(--muted);margin-top:2px}
.op-dims{display:grid;grid-template-columns:1fr 1fr;gap:5px 28px;margin:12px 0 4px}
.op-dim{display:flex;align-items:center;gap:9px;font-size:11px}
.op-d-n{width:150px;flex:none;color:var(--text)}
.op-d-v{width:24px;text-align:right;font-variant-numeric:tabular-nums;color:var(--ink)}
.op-strip{font-size:12.5px;margin:12px 0 2px;padding:9px 13px;border:1px solid var(--line);border-radius:9px;background:var(--surface-2)}
.op-sec{font-size:11px;text-transform:uppercase;letter-spacing:.05em;color:var(--accent);font-weight:700;margin:16px 0 8px}
.op-sec span{color:var(--muted);font-weight:500;text-transform:none;letter-spacing:0;margin-left:6px}
.op-dirs{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}
.op-dir{border:1px solid var(--line);border-radius:10px;padding:10px 12px}
.op-dir-h{display:flex;justify-content:space-between;gap:8px;align-items:baseline;margin-bottom:4px;flex-wrap:wrap}
.op-dir-l{font-size:9.5px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--muted)}
.op-dir-s{font-family:var(--mono);font-size:10px;color:var(--ink);white-space:nowrap}
.op-dir-t{font-size:12.5px;color:var(--ink);display:block;line-height:1.3}
.op-dir-hl{font-size:11px;color:var(--text);margin-top:3px;line-height:1.45}
.op-foot{display:flex;justify-content:space-between;gap:10px;font-size:10px;color:var(--muted);border-top:1px solid var(--line);padding-top:9px;margin-top:16px}
@media (max-width:700px){.op-dirs{grid-template-columns:1fr}.op-dims{grid-template-columns:1fr}}
@media print{
  /* Y.613 — the 1-pager OWNS the printed page: app chrome gone, the cockpit collapsed around the panel, the card
     absolutely positioned at the page origin. Belt (display:none via :has) and braces (visibility) so no header
     bar, status bar, or brief section ever rides along, and no hidden flow leaves trailing blank pages. */
  body.op-printing{background:#fff}
  body.op-printing .mc-side,body.op-printing .mc-rail,body.op-printing .mc-top,body.op-printing .mc-status,body.op-printing .op-noprint{display:none!important}
  body.op-printing .mc-shell{display:block;height:auto}
  body.op-printing .mc-main,body.op-printing #mc-content,body.op-printing #ck-panel{overflow:visible!important;height:auto!important;max-height:none!important}
  body.op-printing #mc-content > *:not(:has(#ck-panel)):not(#ck-panel){display:none!important}
  body.op-printing *:has(> #ck-panel) > *:not(#ck-panel){display:none!important}
  body.op-printing #mc-content *{visibility:hidden}
  body.op-printing .op-card,body.op-printing .op-card *{visibility:visible}
  body.op-printing .op-card{position:absolute;left:0;top:0;width:100%;max-width:none;margin:0;padding:0;border:none;box-shadow:none;border-radius:0;background:#fff}
}

/* Y.612/Y.614 — the 1-Pager as the FREE deliverable: explicit print CTA inside the verdict card, above the flame */
.ck-1pbtn{width:auto;margin:0;padding:7px 14px;font-size:12px;letter-spacing:.01em;flex:none;white-space:nowrap}
.ck-vside{display:flex;flex-direction:column;align-items:center;gap:12px;justify-self:end}
@media(max-width:560px){.ck-vside{justify-self:center}}

/* Y.616 — Target Read (Search OS): risk-call chip strip on the business cockpit */
.tr-chips{display:flex;gap:6px;flex-wrap:wrap;margin:2px 0 8px}

/* Y.629 — Deal Search side drawer (the Axial pursue panel) */
.dsd-ov{position:fixed;inset:0;background:rgba(10,10,16,.35);z-index:1200}
.dsd{position:fixed;top:0;right:0;bottom:0;width:min(460px,94vw);background:var(--surface);border-left:1px solid var(--line);box-shadow:-18px 0 48px rgba(0,0,0,.22);z-index:1201;display:flex;flex-direction:column}
.dsd-h{display:flex;align-items:flex-start;gap:10px;padding:16px 18px;border-bottom:1px solid var(--line)}
.dsd-t{font-size:16px;font-weight:700;color:var(--ink);line-height:1.3;flex:1;min-width:0}
.dsd-x{all:unset;cursor:pointer;font-size:15px;color:var(--muted);padding:2px 6px}
.dsd-x:hover{color:var(--ink)}
.dsd-b{padding:12px 18px;overflow:auto;flex:1}
.dsd-row{display:flex;justify-content:space-between;gap:12px;padding:7px 0;border-bottom:1px solid var(--line);font-size:13px}
.dsd-k{color:var(--muted);flex:none}
.dsd-v{color:var(--ink);text-align:right;min-width:0;overflow-wrap:anywhere}
.dsd-sec{font-size:10.5px;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);font-weight:700;margin:14px 0 4px}
.dsd-acts{display:flex;gap:8px;padding:12px 18px;border-top:1px solid var(--line)}

/* ---- Y.635 re-blink + Y.636 delete / 30-day trash ---- */
.ck-rbbtn{all:unset;cursor:pointer;font:inherit;font-size:10.5px;letter-spacing:.04em;color:var(--muted);text-align:center;padding:2px 6px;border-radius:6px}
.ck-rbbtn:hover{color:var(--accent);background:var(--accent-weak)}
.ck-rbbtn:disabled{opacity:.55;cursor:default}
.ck-danger{margin-top:34px;padding-top:14px;border-top:1px dashed var(--line);display:flex;justify-content:flex-end}
.ck-delbtn{all:unset;cursor:pointer;font:inherit;font-size:11.5px;color:var(--muted);padding:4px 8px;border-radius:7px}
.ck-delbtn:hover{color:var(--r-ink);background:var(--r-bg)}
.ck-delconfirm{border:1px solid var(--r-bd);background:var(--r-bg);border-radius:10px;padding:14px 16px;font-size:12.5px;color:var(--ink);width:100%}
.ck-delconfirm .ck-run.ck-delyes{width:auto;background:var(--r-ink);border-color:var(--r-ink)}
.mc-trash{display:flex;flex-direction:column;gap:6px}
.mc-trash-row{display:flex;align-items:center;gap:12px;border:1px solid var(--line);border-radius:9px;padding:8px 12px;font-size:12.5px}
.mc-trash-name{font-weight:600;min-width:0;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.mc-trash-when,.mc-trash-left{color:var(--muted);font-size:11.5px;flex:none;font-variant-numeric:tabular-nums}
.mc-trash-soon{color:var(--r-ink);font-weight:700}

/* Y.647 — nav KPI badges (counts only; ✓/●/🔒 remain the state language) */
.mcp-kpi{flex:none;margin-left:6px;font-size:9px;font-weight:700;letter-spacing:.02em;color:var(--accent);background:var(--accent-weak,rgba(42,91,215,.09));border:1px solid var(--i-bd,var(--line));border-radius:999px;padding:1px 6px;font-variant-numeric:tabular-nums;line-height:1.5}
.mcp-head .mcp-kpi{font-size:8.5px}
/* Y.646 — LinkedIn x-ray links on gap-role cards */
.tm-xray{font-size:11px;color:var(--muted)}
.tm-xray a{color:var(--accent);text-decoration:none;font-weight:600}

/* Y.644 — live build ticker on the drip banner */
.ck-drip-tick{margin-top:8px;font-size:11.5px;color:var(--muted);font-variant-numeric:tabular-nums}
.ck-tick-ok{color:var(--g-ink)}
.ck-tick-warn{color:var(--r-ink)}

/* Y.642 — Deep Diligence kickoff pre-flight sheet */
.ck-ddpre-wrap{position:fixed;inset:0;background:rgba(12,14,22,.45);z-index:90;display:flex;align-items:center;justify-content:center;padding:20px}
.ck-ddpre{background:var(--surface,#fff);border:1px solid var(--line);border-radius:12px;max-width:580px;width:100%;padding:18px 20px;box-shadow:0 18px 50px rgba(10,12,20,.25)}
.ck-ddpre-h{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap;margin-bottom:10px;font-size:14px}
.ck-ddpre .di-raw{width:100%}

/* Y.641 — 1-pager: auto-drafting placeholder (never prints) + the pre-diligence qualifier (prints — it sells DD) */
.op-gen{font-size:12px;color:var(--muted);font-style:italic;padding:10px 2px;display:flex;gap:8px;align-items:center}
.op-dirnote{font-size:10.5px;color:var(--muted);margin:2px 0 6px}

/* Y.640 — pre-diligence axis values show the PITCHED read instead of a bare lock */
.ck-vax-pitched{font-weight:700}
.ck-vax-pitched i{font-style:normal;font-size:9px;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);font-weight:600;margin-left:2px}

/* ---- Y.638 naming clearance card ---- */
.bn-card{margin-top:8px;padding-top:8px;border-top:1px solid var(--line)}
.bn-verdict{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap;border-radius:8px;padding:7px 10px;font-size:12.5px;background:var(--surface,rgba(128,128,128,.06));border:1px solid var(--line)}
.bn-verdict.bn-v-g{background:var(--g-bg);border-color:var(--g-bd)}
.bn-verdict.bn-v-o{background:var(--a-bg);border-color:var(--a-bd)}
.bn-verdict.bn-v-r{background:var(--r-bg);border-color:var(--r-bd)}
.bn-verdict b{white-space:nowrap}
.bn-vhead{color:var(--ink)}
.bn-next{font-size:11.5px;color:var(--muted);margin:5px 0 0;font-weight:600}
.bn-doms{display:flex;flex-wrap:wrap;gap:5px;margin-top:7px;align-items:center}
.bn-chip{font-size:11px;border:1px solid var(--line);border-radius:999px;padding:2px 9px;color:var(--muted);font-variant-numeric:tabular-nums}
.bn-chip.bn-ok{color:var(--g-ink);border-color:var(--g-bd);background:var(--g-bg);font-weight:600}
.bn-chip.bn-ok i{font-weight:400;opacity:.75}
.bn-chip.bn-no{color:var(--muted);background:transparent;text-decoration:line-through;text-decoration-color:var(--r-bd)}
.bn-tmtable{width:100%;border-collapse:collapse;margin-top:8px;font-size:11.5px}
.bn-tmtable th{text-align:left;font-size:10px;letter-spacing:.05em;text-transform:uppercase;color:var(--muted);padding:2px 8px 4px 0;border-bottom:1px solid var(--line)}
.bn-tmtable td{padding:5px 8px 5px 0;border-bottom:1px solid var(--line);vertical-align:top}
.bn-more summary,.bn-counsel summary{cursor:pointer;font-size:11.5px;color:var(--muted);margin-top:6px;font-weight:600}
.bn-foot{margin-top:8px;font-size:10.5px;color:var(--muted)}
.bn-foot a{color:var(--accent);text-decoration:none}

/* ── Y.742 — provenance chrome: the lineage survives white-labeling ─────────────────────────── */
.mc-prov-line{margin-top:14px;padding:10px 2px 4px;border-top:1px solid var(--line);font-size:10px;letter-spacing:.02em;color:var(--faint)}
.mc-prov-line a{color:var(--muted);text-decoration:none}
.mc-prov-line a:hover{color:var(--text);text-decoration:underline;text-underline-offset:2px}
.mc-prov-sep{margin:0 5px;color:var(--faint)}

/* ── Y.751 — typeahead industry combobox (Deal Search / Off-Market Radar) ───────────────────────── */
.ind-combo-pop{position:absolute;top:calc(100% + 3px);left:0;z-index:60;min-width:100%;max-width:340px;max-height:320px;overflow:auto;background:var(--surface);border:1px solid var(--line-2);border-radius:8px;box-shadow:var(--shadow,0 6px 24px rgba(0,0,0,.12));padding:4px}
.ind-combo-opt{display:block;width:100%;text-align:left;border:0;background:transparent;color:var(--text);font:inherit;font-size:13px;padding:6px 9px;border-radius:5px;cursor:pointer;white-space:nowrap}
.ind-combo-opt:hover,.ind-combo-opt.on{background:var(--accent-weak);color:var(--ink)}
.ind-combo-free{font-size:11.5px;color:var(--muted);padding:6px 9px;border-bottom:1px solid var(--line);margin-bottom:2px}
.ind-combo-free b{color:var(--accent)}

/* ── Y.756 — Deal Search loading spinner ─────────────────────────────────────────────────────── */
.ds-spin{width:20px;height:20px;flex:none;border:2.5px solid var(--line-2,#ccc);border-top-color:var(--accent);border-radius:50%;animation:ds-spin 0.7s linear infinite}
@keyframes ds-spin{to{transform:rotate(360deg)}}
@media(prefers-reduced-motion:reduce){.ds-spin{animation-duration:2s}}

/* ── Y.755 — Deal Search list/map view toggle ─────────────────────────────────────────────────── */
.ds-view.on{background:var(--accent-weak);color:var(--accent);border-color:var(--accent)}

/* ── Y.761 — collapsible Associate rail + bookmark tab ────────────────────────────────────────── */
.mc-shell.rail-collapsed{--rail-w:0px}
.mc-shell.rail-collapsed .mc-rail{display:none}
.mc-shell.rail-collapsed .rail-resize{display:none}
.rail-tab{position:absolute;top:66px;right:var(--rail-w,296px);z-index:31;border:1px solid var(--line);border-right:0;border-radius:8px 0 0 8px;background:var(--surface-2);color:var(--muted);font-family:var(--font);font-size:11px;font-weight:600;letter-spacing:.03em;padding:11px 6px;writing-mode:vertical-rl;text-orientation:mixed;cursor:pointer;transition:color .12s,border-color .12s}
.rail-tab:hover{color:var(--accent);border-color:var(--accent)}
@media(max-width:1180px){.rail-tab{display:none}}

/* ---- Y.799 Sharpen — pre-diligence coaching card ---- */
.ck-sharpen-mount{margin:14px 0}
.shp-card{border:1px solid var(--accent);border-radius:12px;background:var(--accent-weak);padding:16px 18px;margin:6px 0 14px}
.shp-head{display:flex;align-items:center;gap:8px;font-size:14px;color:var(--ink)}
.shp-emoji{font-size:16px}
.shp-intro{font-size:13px;color:var(--text);line-height:1.5;margin:8px 0 12px}
.shp-block{margin:12px 0}
.shp-k{font-size:11px;font-weight:700;letter-spacing:.02em;text-transform:uppercase;color:var(--muted);margin-bottom:5px}
.shp-k-ok{color:var(--ok)}
.shp-k-gap{color:var(--accent-2)}
.shp-summary{font-size:14px;line-height:1.55;color:var(--ink);margin:0;padding:10px 12px;background:var(--surface);border:1px solid var(--line);border-radius:9px}
.shp-cols{display:flex;gap:18px;flex-wrap:wrap;margin:12px 0}
.shp-col{flex:1;min-width:180px}
.shp-col ul{margin:4px 0 0;padding-left:18px}
.shp-col li,.shp-q li{font-size:12.5px;color:var(--text);line-height:1.5;margin:2px 0}
.shp-q{margin:5px 0 0;padding-left:20px}
.shp-q li{margin:5px 0}
.shp-ta{width:100%;box-sizing:border-box;font-family:var(--font);font-size:13px;padding:10px 12px;border:1px solid var(--line-2);border-radius:9px;background:var(--surface);resize:vertical;margin:6px 0}
.shp-acts{display:flex;gap:8px;flex-wrap:wrap;align-items:center;margin-top:8px}
.shp-updated{font-size:12px;color:var(--ok);margin:8px 0;padding:6px 10px;background:var(--surface);border:1px solid var(--line);border-radius:8px}
.shp-foot{font-size:11px;margin-top:10px}
.shp-err{font-size:12px;color:#c0392b;margin-top:8px}
.shp-think{font-size:13px;color:var(--muted);display:flex;align-items:center;gap:8px;margin-top:10px}
.shp-slim{font-size:12.5px;color:var(--muted);margin:10px 0}

/* ---- Y.805 promoted-idea concept score tag + build-steers panel ---- */
.ib-scoretag{font-size:9px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:var(--accent-2);margin-top:3px;text-align:center}
.ck-steers{border:1px solid var(--line-2);border-left:3px solid var(--accent);border-radius:9px;background:var(--surface-2);padding:11px 14px;margin:0 0 12px}
.ck-steers-h{font-size:12.5px;color:var(--ink);font-weight:600;margin-bottom:6px}
.ck-steers-b{font-size:12.5px;color:var(--text);line-height:1.5;white-space:pre-wrap;max-height:150px;overflow:auto}
.ck-steers-a{margin-top:8px;font-size:12px}
.ck-steers-arch{margin-top:8px;font-size:12px}
.ck-steers-arch summary{cursor:pointer;color:var(--muted);font-size:11.5px}
.ck-steers-archrow{margin:5px 0 0;padding-left:6px;border-left:2px solid var(--line-2);color:var(--text);line-height:1.45}

/* ---- Y.810 Validation Roadmap ---- */
.ck-roadmap{margin-top:12px;border-top:1px dashed var(--line-2);padding-top:12px}
.ck-roadmap-h{font-size:13px;font-weight:600;color:var(--ink)}
.ck-roadmap-sum{font-size:12.5px;color:var(--g-ink);margin:6px 0 8px;font-style:italic}
.ck-roadmap-list{list-style:none;counter-reset:rm;margin:6px 0 0;padding:0}
.ck-rm-item{position:relative;counter-increment:rm;padding:8px 10px 8px 34px;border:1px solid var(--line);border-radius:9px;margin:6px 0;background:var(--surface)}
.ck-rm-item::before{content:counter(rm);position:absolute;left:9px;top:9px;width:18px;height:18px;border-radius:50%;background:var(--accent-weak);color:var(--accent-2);font-size:11px;font-weight:700;display:flex;align-items:center;justify-content:center}
.ck-rm-top{display:flex;align-items:center;gap:8px;justify-content:space-between}
.ck-rm-a{font-size:13px;font-weight:600;color:var(--ink)}
.ck-rm-test{font-size:12.5px;color:var(--text);margin-top:4px;line-height:1.45}
.ck-rm-why{font-size:11.5px;margin-top:3px}
.ck-roadmap-a{margin-top:8px;font-size:12px}
.ck-roadmap-cta{margin-top:10px}

/* ---- Y.812 Associate batch-approve bar ---- */
.agi-actbar{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin:0 0 8px;padding:8px 10px;border:1px solid var(--accent);border-radius:9px;background:var(--accent-weak)}

/* ---- Y.813 stronger-version chessboard-cell reference chip ---- */
.sug-cell{font-size:11px;color:var(--text);background:var(--surface-2);border:1px solid var(--line);border-radius:7px;padding:4px 8px;margin:0 0 8px;line-height:1.4}
.sug-cell b{color:var(--ink);font-weight:600}
.sug-cell-sc{color:var(--accent-2);font-weight:700;margin-left:4px}
.sug-cell-tag{color:var(--muted);text-transform:uppercase;font-size:9px;letter-spacing:.03em;margin-left:4px}

/* ---- Y.814 "Your next move" coaching banner ---- */
/* Y.1278 — A ROW THAT WILL NOT WRAP STRANGLES THE COLUMN THAT WILL.
   Lars, narrowing the window: "things are on separate lines and not spaced properly". The banner was a
   single flex row holding an icon, a text column and two buttons. The buttons are `flex:none` + `nowrap`
   (correctly - a CTA broken across lines is worse), and the text column carries `min-width:0` so long words
   cannot overflow. Together those say: when the row runs out of room, take it ALL out of the prose. So the
   text kept its full height and lost its width, one word per line, while the buttons sat at full size.
   `min-width:0` was not the mistake; having nowhere to wrap TO was. A flex-basis on the body gives the row a
   width at which it prefers to break, and `flex-wrap` gives it somewhere to break to: the buttons drop to
   their own line and the prose gets the container back. */
.ck-nextmove{display:flex;flex-wrap:wrap;align-items:center;gap:12px;margin:14px 0;padding:12px 16px;border:1px solid var(--accent);border-radius:11px;background:var(--accent-weak)}
/* Y.1213 — a build offer retires while the run it offers is actually in flight (see syncOffers in cockpit.js).
   `hidden` alone would NOT hide this one: the browser's `[hidden]{display:none}` lives in the UA stylesheet,
   and ANY author `display` beats it — so the line above, which turns the banner into a flex row, silently
   un-hides it. Said here because it is this sheet that created the problem. See also .mc-nores, which solved
   the same collision by dropping its own `display` rather than adding a rule. */
.ck-nextmove[hidden],.ck-stale[hidden]{display:none}
.ck-nm-i{font-size:20px;flex:none}
.ck-nm-body{flex:1 1 340px;min-width:0} /* Y.1278 - 340px is a BREAK POINT, not a minimum: below it the buttons wrap away and the body takes the full row. */
.ck-nm-t{font-size:13.5px;color:var(--ink)}
.ck-nm-d{font-size:12px;color:var(--text);margin-top:2px;line-height:1.45}
.ck-nm-cta{width:auto;flex:none;white-space:nowrap}

/* ---- Y.815 roadmap progress + check-off ---- */
.ck-rm-prog{display:flex;align-items:center;gap:8px;margin:6px 0 8px}
.ck-rm-prog-track{flex:1;height:6px;border-radius:4px;background:var(--surface-3);overflow:hidden}
.ck-rm-prog-track span{display:block;height:100%;background:var(--g-ink);transition:width .3s}
.ck-rm-prog-n{font-size:11px;color:var(--muted);white-space:nowrap}
.ck-rm-item{padding-left:34px}
.ck-rm-check{position:absolute;left:8px;top:8px;width:20px;height:20px;border-radius:6px;border:1.5px solid var(--line-2);background:var(--surface);cursor:pointer;font-size:12px;font-weight:800;color:#fff;display:flex;align-items:center;justify-content:center;padding:0}
.ck-rm-item.ck-rm-done .ck-rm-check{background:var(--g-ink);border-color:var(--g-ink)}
.ck-rm-item.ck-rm-done .ck-rm-a{text-decoration:line-through;color:var(--muted)}
.ck-rm-item.ck-rm-done{opacity:.72}
.ck-rm-item::before{display:none}

/* ---- Y.816 sharpen → Associate orientation ---- */
.shp-assoc{margin-top:10px;padding:9px 12px;border:1px dashed var(--line-2);border-radius:9px;font-size:12px;color:var(--text);line-height:1.5;background:var(--surface)}
.shp-assoc b{color:var(--ink)}

/* ---- Y.818 Deal Search shared-pool column filters ---- */
.ds-filters{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin:8px 0 4px;padding:8px 10px;border:1px solid var(--line);border-radius:9px;background:var(--surface-2)}
.ds-f{font-family:var(--font);font-size:12px;padding:5px 9px;border:1px solid var(--line-2);border-radius:7px;background:var(--surface);min-width:130px}
.ds-frange{display:inline-flex;align-items:center;gap:4px;font-size:11px;color:var(--muted)}
.ds-fn{font-family:var(--font);font-size:12px;padding:5px 7px;border:1px solid var(--line-2);border-radius:7px;background:var(--surface);color:var(--ink);width:66px}
.ds-fn::placeholder{color:var(--muted,#8a8fa3);opacity:1}
.ds-fdash{color:var(--muted)}

/* ---- Y.820 Business DB saved views ---- */
.bdb-views{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin-top:10px;padding-top:8px;border-top:1px dashed var(--line-2)}
.bdb-view-chip{display:inline-flex;align-items:center;border:1px solid var(--accent-weak);border-radius:7px;overflow:hidden}
.bdb-view{border:0!important;border-radius:0!important;background:var(--accent-weak)!important;color:var(--accent-2)!important;padding:4px 10px!important;font-size:12px!important;font-weight:600}
.bdb-view-del{border:0;background:var(--accent-weak);color:var(--muted);cursor:pointer;padding:4px 8px;font-size:13px;line-height:1}
.bdb-view-del:hover{color:#c0392b}

/* ---- Y.820 Deal Explorer unified surface — docked discovery action ---- */
.bdb-search-cta{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:12px;padding:10px 14px;border:1px solid var(--accent);border-radius:10px;background:var(--accent-weak);font-size:13px;color:var(--ink)}

/* ---- Y.824 5D Off-Market Radar note ---- */
.bdb-radar-note{margin-top:8px;font-size:11.5px;line-height:1.5;padding:10px 14px;border:1px solid var(--accent);border-left:3px solid var(--accent);border-radius:9px;background:var(--accent-weak);color:var(--ink)}
/* Y.829 — a KNOWN street address is a first-class fact (anchors parcel/assessor + outreach), not muted fine print */
.cl-addr{font-size:11.5px;margin-top:2px;color:var(--ink);font-weight:500}
/* Y.830 — market-benchmark fill progress strip */
.bdb-fill{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:8px;font-size:12px;color:var(--ink)}
/* Y.830 — Deal Fields: custom agent-filled columns */
.bdb-fields{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:10px;padding:8px 10px;border:1px dashed var(--line-2,#d7dae0);border-radius:9px}
.bdb-field-chip{display:inline-flex;align-items:center;gap:6px;font-size:11.5px;padding:3px 9px;border:1px solid var(--line);border-radius:20px;background:var(--surface-2)}
.bdb-fcell{white-space:nowrap;font-size:12px}
.bdb-overlay{position:fixed;inset:0;background:rgba(0,0,0,.42);display:flex;align-items:center;justify-content:center;z-index:1000;padding:20px}
.bdb-sheet{background:var(--surface,#fff);border:1px solid var(--line);border-radius:14px;padding:18px 20px;max-width:440px;width:100%;box-shadow:0 20px 60px rgba(0,0,0,.28)}
.bdb-sheet-h{display:flex;justify-content:space-between;align-items:center;font-weight:700;font-size:15px;margin-bottom:6px}
.bdb-l{display:block;font-size:12px;color:var(--muted);margin-top:10px}
.bdb-in{display:block;width:100%;margin-top:4px;padding:8px 10px;border:1px solid var(--line-2,#d7dae0);border-radius:8px;font-size:13px;font-family:inherit;box-sizing:border-box;background:var(--surface)}
/* Y.829 — the loud 5D Radar hero strip (the differentiator, front and center) */
.bdb-radar-hero{display:flex;gap:16px;align-items:center;margin-top:14px;padding:14px 18px;border:1px solid var(--accent);border-radius:12px;background:linear-gradient(100deg,var(--accent-weak),transparent 70%)}
.bdb-radar-hero-l{flex:1;min-width:0}
.bdb-radar-hero-t{font-size:15px;font-weight:700;letter-spacing:-.01em;color:var(--ink)}
.bdb-radar-hero-tag{font-size:12.5px;font-weight:600;color:var(--accent-2);margin-left:8px}
.bdb-radar-hero-d{font-size:12px;line-height:1.5;color:var(--muted);margin-top:4px}
.bdb-radar-go{flex:none;white-space:nowrap;width:auto!important;padding:9px 16px;font-size:12.5px}
@media(max-width:640px){.bdb-radar-hero{flex-direction:column;align-items:stretch}}

/* ---- Y.827 outreach review overlay (human-in-the-loop; nothing sends) ---- */
.bdb-ov-wrap{position:fixed;inset:0;z-index:60;background:rgba(20,22,28,.44);display:flex;align-items:flex-start;justify-content:center;overflow:auto;padding:40px 16px}
.bdb-ov{background:var(--surface);border:1px solid var(--line);border-radius:14px;max-width:720px;width:100%;padding:20px 22px;box-shadow:0 12px 40px rgba(0,0,0,.24)}
.bdb-ov-h{display:flex;align-items:center;justify-content:space-between;font-size:16px;font-weight:600;color:var(--ink)}
.bdb-ov-hil{margin-top:10px;padding:9px 12px;border:1px solid var(--accent);border-radius:9px;background:var(--accent-weak);font-size:12px;line-height:1.5;color:var(--ink)}
.bdb-ov-principle{margin-top:8px;font-size:12px;color:var(--g-ink);font-style:italic}
.bdb-touches{margin-top:10px;display:flex;flex-direction:column;gap:10px}
.bdb-touch{border:1px solid var(--line);border-radius:10px;padding:11px 13px;background:var(--surface-2)}
.bdb-touch-h{display:flex;align-items:center;gap:8px;font-size:12px;color:var(--ink)}
.bdb-sent{margin-left:auto;font-size:11px;color:var(--muted);display:inline-flex;align-items:center;gap:4px;cursor:pointer}
.bdb-touch-subj{font-size:13px;color:var(--ink);margin-top:6px}
.bdb-touch-body{font-size:13px;color:var(--text);line-height:1.55;margin-top:6px;white-space:normal}
.bdb-touch-hook{font-size:11px;color:var(--muted);margin-top:6px}
.bdb-touch-a{margin-top:7px}
.bdb-ov-foot{margin-top:14px;display:flex;gap:8px;flex-wrap:wrap}

/* ── Y.849 — Deal Explorer dense table: score-first columns, one-line notes ─────────────────── */
.bdb-tight th{padding:6px 8px;font-size:10px;letter-spacing:.05em}
.bdb-hf td{padding:3px 6px;background:var(--surface-2,#f7f7fa);border-bottom:1px solid var(--line-2,#e4e4ea)}
.bdb-hf .bdb-hfi{border:1px solid var(--line,#d9d9e0);border-radius:5px;background:var(--surface,#fff);color:var(--ink)}
.bdb-tight td{padding:6px 8px;font-size:12.5px;line-height:1.35;vertical-align:top}
.bdb-tight .rag{font-size:10.5px;padding:1px 6px}
.bdb-tight .model-badge{font-size:11px;padding:1px 6px;white-space:nowrap}
.bdb-tight .cl-t{font-size:12.5px;font-weight:600;line-height:1.3}
.bdb-sn{font-size:9px;max-width:150px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin:1px auto 0}

/* ── Y.919 — Explorer header consolidation: three filter rows + one status strip.
   ONE visual language: 6px squared-round corners, 26px controls, 11.5px type. ── */
.bdb-h .btn-ghost, .bdb-h .ck-run, .bdb-h .ds-fn, .bdb-h select, .bdb-h input[type="text"], .bdb-h input:not([type]) { border-radius: 6px; }
.bdb-h .btn-ghost { padding: 4px 10px; font-size: 11.5px; line-height: 1.5; }
.bdb-row { display: flex; flex-wrap: wrap; gap: 6px; align-items: center; margin-top: 8px; }
.bdb-row > .lbl { flex: none; width: 62px; font-size: 9.5px; letter-spacing: .09em; text-transform: uppercase; color: var(--ink-3, #8a8fa3); font-weight: 600; }
.bdb-chiprow { display: flex; gap: 6px; align-items: center; overflow-x: auto; flex: 1 1 0; min-width: 0; padding-bottom: 3px; scrollbar-width: thin; }
.bdb-chiprow > * { flex: none; white-space: nowrap; }
.bdb-status { display: flex; flex-wrap: wrap; gap: 4px 14px; align-items: center; margin-top: 8px; font-size: 11px; color: var(--muted); border: 1px solid var(--line-2); border-radius: 6px; padding: 5px 10px; background: color-mix(in srgb, var(--surface-2) 92%, transparent); }
.bdb-status .sep { opacity: .35; }
.bdb-more { position: relative; display: inline-block; }
.bdb-more > summary { list-style: none; cursor: pointer; user-select: none; }
.bdb-more > summary::-webkit-details-marker { display: none; }
.bdb-more[open] > .bdb-menu { position: absolute; right: 0; top: calc(100% + 4px); z-index: 60; background: var(--bg, #fff); border: 1px solid var(--line-2, #e3e5ee); border-radius: 8px; box-shadow: 0 10px 28px rgba(20, 20, 43, .14); padding: 8px; display: flex; flex-direction: column; gap: 4px; min-width: 250px; }
.bdb-menu .btn-ghost, .bdb-menu .ck-run { width: 100%; text-align: left; }
.bdb-menu .mnote { font-size: 10px; color: var(--ink-3, #8a8fa3); padding: 2px 2px 0; }

/* Y.950 — SVG quadrant fills for the portfolio scatters (No-Brainer / Moonshot / Runner-Up / Avoid) */
.qd-nb{fill:var(--g-ink,#2159c9)}.qd-ms{fill:var(--a-ink,#7a33c4)}.qd-ru{fill:var(--i-ink,#3949AB)}.qd-av{fill:var(--r-ink,#c02f83)}

/* Y.951 — Tech Transfer catalog cards */
.tt-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:10px;margin-top:8px}
.tt-card{border:1px solid var(--line-2);border-radius:9px;padding:11px 13px;background:var(--surface-2)}
.tt-card-h{font-size:13.5px}
.tt-acts{margin-top:8px;font-size:11.5px}
@media(max-width:640px){.tt-grid{grid-template-columns:1fr}}

/* Y.953 — breadcrumb moved out of the header to a bar atop the viewing pane (website pattern) */
.mc-crumb-bar{flex:none!important;padding:12px 20px 0;font-size:12px}

/* ── Y.1024 · Interaction layer (Fund-Launch-inspired): the score surfaces stop being static.
   Hover lift + glow on cards/cells/dots, ring draw-in on the Strength hub, chip feedback — all
   honoring prefers-reduced-motion. Color language unchanged; this is MOTION only. ── */
.ss-card{transition:transform .16s ease,box-shadow .16s ease,border-color .16s ease}
.ss-card:hover{transform:translateY(-2px);box-shadow:0 8px 26px rgba(0,0,0,.28);border-color:var(--accent)}
.ss-card.ssx-flash{border-color:var(--accent);box-shadow:0 0 0 2px var(--accent-weak,rgba(107,78,158,.35)),0 8px 26px rgba(0,0,0,.28)}
/* Y.1123 — A BUTTON DOES NOT INHERIT COLOUR. These chips are <button>s carrying an inline background and
   `font:inherit`, but nothing ever set `color`, so the UA default (`buttontext`) won — black. On paper that
   looked deliberate; on the forge near-black it measured 1.12:1, which is not "low contrast", it is invisible.
   The tier ramp fix (Y.1121) corrected the NUMBER inside each chip and left its LABEL unreadable, which is why
   this still looked broken after that shipped. `font:inherit` was already there — the colour was simply missed. */
.ssx-i,.ob-opt,.ob-q,.cb-unplaced{color:var(--text)}
/* Y.1124 — the priced levers under the reconcile line. Deliberately quiet: this is the answer to "what next",
   not a second headline competing with the score it explains. */
.ck-recon-lev{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin-top:9px;font-size:11.5px;color:var(--muted)}
.ck-recon-lev-h{text-transform:uppercase;letter-spacing:.06em;font-weight:700;font-size:10px;color:var(--faint)}
.ck-recon-lev-i{display:inline-flex;align-items:center;gap:5px;background:var(--surface-2);border:1px solid var(--line);border-radius:999px;padding:3px 9px;color:var(--text);cursor:help}
.ck-recon-lev-i b{color:var(--accent);font-weight:800}
.ck-recon-lev-none{display:block;color:var(--muted);line-height:1.5;max-width:70ch}
/* Y.1125 — a stalled run reads as a warning, not as progress. It used to be indistinguishable from a live one. */
.ck-stalled{color:var(--a-ink)!important;border-color:var(--a-bd)!important;background:var(--a-bg)!important;cursor:help}
/* Y.1129 — the Sharpen-the-thesis panel. Quiet until asked: it sits under the thesis as one link, and only
   becomes a panel once there is something to read. */
.ts-row{display:flex;flex-wrap:wrap;align-items:center;gap:12px;margin-top:10px}
.ts-panel{margin-top:10px;padding:13px 15px;background:var(--surface-2);border:1px solid var(--line);border-radius:12px;color:var(--text)}
.ts-busy{display:flex;align-items:center;gap:9px;color:var(--muted);font-size:12.5px}
.ts-h{font-size:10px;letter-spacing:.07em;text-transform:uppercase;font-weight:700;color:var(--faint);margin-bottom:6px}
.ts-new{font-size:15px;line-height:1.5;font-weight:600;color:var(--ink)}
.ts-why{margin-top:9px;font-size:12.5px;line-height:1.55;color:var(--text)}
.ts-changes{margin:9px 0 0;padding-left:18px;font-size:12.5px;line-height:1.6;color:var(--text)}
.ts-tags{margin-top:8px;font-size:12px;color:var(--muted);display:flex;flex-wrap:wrap;align-items:center;gap:6px}
.ts-tag{display:inline-block;padding:2px 8px;border-radius:999px;border:1px solid var(--line);font-weight:700;font-size:11px}
.ts-add{color:var(--g-ink);border-color:var(--g-bd)}
.ts-drop{color:var(--r-ink);border-color:var(--r-bd)}
.ts-note{margin-top:10px;font-size:11.5px;line-height:1.55;color:var(--muted);border-left:2px solid var(--line);padding-left:10px}
.ssx-i{transition:transform .14s ease,border-color .14s ease,background .14s ease}
.ssx-i:hover{transform:translateY(-1px);border-color:var(--accent)!important}
.ssx-ring path{transition:stroke-width .15s ease,opacity .15s ease;cursor:pointer}
.ssx-ring path:hover{stroke-width:17}
.ssx-ring path.dim{opacity:.25}
.cb-sc{transition:transform .15s ease,box-shadow .15s ease,filter .15s ease}
.cb-sc:hover{transform:scale(1.06);box-shadow:0 6px 18px rgba(0,0,0,.3);filter:brightness(1.12);z-index:2;position:relative}
.cb-cell{transition:background .15s ease}
.cb-cell:hover{background:var(--surface-2,rgba(128,128,128,.06))}
.mc-dot{transition:r .15s ease,fill-opacity .15s ease;cursor:pointer}
.mc-dot:hover{fill-opacity:1;r:7}
.afm-dot{transition:transform .15s ease,box-shadow .15s ease}
.afm-dot:hover{transform:scale(1.28);box-shadow:0 4px 14px rgba(0,0,0,.4);z-index:3}
.scard{transition:transform .15s ease,border-color .15s ease,box-shadow .15s ease}
.scard:hover{transform:translateY(-2px);border-color:var(--accent);box-shadow:0 8px 22px rgba(0,0,0,.25)}
.btn,.btn-ghost,.ck-run{transition:transform .12s ease,box-shadow .12s ease,background .12s ease,border-color .12s ease}
.btn:hover,.ck-run:hover{transform:translateY(-1px)}
.btn:active,.ck-run:active,.ssx-i:active{transform:translateY(0) scale(.985)}
@keyframes ssx-pop{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
.ins-panel{animation:ssx-pop .22s ease both}
@media (prefers-reduced-motion:reduce){
  .ss-card,.ssx-i,.cb-sc,.mc-dot,.afm-dot,.scard,.btn,.btn-ghost,.ck-run,.ssx-ring path{transition:none!important;animation:none!important}
  .ss-card:hover,.cb-sc:hover,.afm-dot:hover,.scard:hover,.btn:hover,.ck-run:hover{transform:none}
  .ins-panel{animation:none}
}

/* ── Y.1026 · Field Tray — the right-side field editor (Fund-Launch pattern): slide-in panel,
   editor + docked Get insights. Backdrop click / Esc closes. Reduced-motion: no slide. ── */
.ftray-bd{position:fixed;inset:0;z-index:220;background:rgba(0,0,0,.45);opacity:0;transition:opacity .18s ease}
.ftray-bd.on{opacity:1}
.ftray{position:absolute;top:0;right:0;bottom:0;width:min(440px,94vw);background:var(--surface);border-left:1px solid var(--line);box-shadow:-18px 0 48px rgba(0,0,0,.4);display:flex;flex-direction:column;transform:translateX(24px);opacity:.6;transition:transform .22s ease,opacity .22s ease}
.ftray-bd.on .ftray{transform:none;opacity:1}
.ftray-h{display:flex;align-items:flex-start;gap:10px;padding:16px 18px 12px;border-bottom:1px solid var(--line)}
.ftray-t{font-size:16px;font-weight:700;color:var(--ink)}
.ftray-m{font-size:12px;color:var(--muted);margin-top:3px;line-height:1.5}
.ftray-x{margin-left:auto;background:none;border:0;color:var(--muted);font-size:22px;line-height:1;cursor:pointer;padding:2px 6px;border-radius:6px}
.ftray-x:hover{color:var(--ink);background:var(--surface-2,rgba(128,128,128,.12))}
.ftray-body{padding:14px 18px;overflow-y:auto;flex:1;display:flex;flex-direction:column;gap:10px}
.ftray-ed{width:100%;background:var(--surface);border:1px solid var(--line);border-radius:10px;padding:11px 13px;color:var(--ink);font:inherit;font-size:13.5px;line-height:1.6;resize:vertical;outline:none}
.ftray-ed:focus{border-color:var(--accent)}
.ftray-count{font-size:10.5px;text-align:right;margin-top:-4px}
.ftray-actions{display:flex;gap:8px}
.ftray-div{border-top:1px dashed var(--line);margin:6px 0 2px}
.ftray-insout{min-height:0}
@media (prefers-reduced-motion:reduce){.ftray-bd,.ftray{transition:none}.ftray{transform:none;opacity:1}}

/* ── Y.1028 · Associate receipts — action completions as compact tool-run chips, not full bubbles ── */
.agi-receipt{margin:6px 0;padding:7px 12px;border:1px solid var(--g-bd,rgba(38,150,92,.4));border-left-width:3px;border-radius:9px;background:var(--g-bg,rgba(38,150,92,.08));font-size:12px;line-height:1.5;color:var(--ink);animation:ssx-pop .2s ease both}
.agi-receipt p{margin:0}
.agi-receipt blockquote{margin:5px 0 0;padding:4px 10px;border-left:2px solid var(--line);color:var(--muted);font-size:11.5px}
@media (prefers-reduced-motion:reduce){.agi-receipt{animation:none}}

/* ── Y.1197 · the board as a heatmap you click into. One grid: a name column, then one column per BAND.
   `minmax(0,1fr)` for the same reason the hero row needs it — a track's default minimum is its content, and
   a row of forty bands would otherwise push the card wider than the page. Aspect-ratio keeps the squares
   square at any column count, so a wide board stays legible instead of becoming a row of slivers. ── */
.mc-board{display:block;width:100%;text-align:left;font:inherit;color:inherit;background:var(--surface);
  border:1px solid var(--line);border-radius:14px;padding:14px 16px 12px;cursor:pointer;
  transition:border-color .16s ease, transform .16s ease}
.mc-board:hover{border-color:var(--accent,#6b4e9e);transform:translateY(-1px)}
.mc-board:focus-visible{outline:2px solid var(--accent,#6b4e9e);outline-offset:2px}
.mc-hm{display:grid;gap:3px;align-items:stretch}
/* Y.1201 — a FIXED band height, not an aspect ratio. `aspect-ratio:1.6` tied height to width, so a studio
   with three buyer groups got 490px columns and therefore 300px-tall cells: a heatmap the height of the
   window. Height is a property of how DEEP the board is — one row per band — and width is whatever the page
   has to give. Two different questions, and only the second belongs to the viewport. */
.mc-hm-c{display:block;height:22px;border-radius:3px}
/* Headers formatted as the board's: buyers across the top spanning their own bands, industries down the side
   named once per group. `min-width:0` on both, or a long name sets the track width and the grid stops
   dividing the page and starts demanding it. */
/* Y.1203 — Lars: "don't truncate the labels!" So they WRAP instead: two lines of head room, the text allowed
   to break, and a wider name column. An ellipsis on an axis header is the same failure as one on a node
   label — "Agriculture…" and "Agriculture, Forestry, Fishing & Hunting" are different sentences, and the
   second is the one the NAICS taxonomy actually says. */
.mc-hm-h{display:flex;align-items:flex-end;justify-content:center;min-width:0;min-height:30px;padding:0 4px 3px;
  font-size:10px;font-weight:700;color:var(--ink);text-align:center;line-height:1.15;
  overflow-wrap:anywhere;hyphens:auto}
.mc-hm-corner{display:block}
.mc-hm-r{display:flex;align-items:center;min-width:0;font-size:10px;color:var(--muted);line-height:1.15;
  overflow-wrap:anywhere;padding-right:10px}
.mc-hm-r1{color:var(--ink);font-weight:600}
/* The key. Small, permanent, and directly under the thing it explains — a legend you have to go and find is
   a legend nobody reads. */
.mc-hm-key{display:flex;flex-wrap:wrap;gap:14px;margin-top:10px;font-size:10.5px;color:var(--muted)}
.mc-hm-k{display:inline-flex;align-items:center;gap:4px}
.mc-hm-k i{display:inline-block;width:13px;height:9px;border-radius:2px;background:var(--line-2,var(--line))}

/* ── Y.1199 · THE LANDING VIEW, IN THIRDS ───────────────────────────────────────────────────────────────────
   Lars: "it's split into thirds (scorecard charts, network graph, opportunity bank) as the big 3 header view
   above the fold."

   Three panels, equal weight, one row. `minmax(0,1fr)` rather than `1fr` because a grid track's default
   minimum is its CONTENT, and an SVG inside a flex/grid child will happily refuse to shrink below its
   intrinsic size — which is how a three-up row silently becomes a horizontally scrolling one on a laptop.

   They collapse to one column below 1080px rather than two, because two-of-three leaves an orphan and the
   orphan is always the one you wanted. The row is `align-items:stretch`, so the three panels agree on a
   height instead of stair-stepping. ── */
.mc-hero{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px;align-items:stretch;margin:10px 0 14px}
@media (max-width:1080px){.mc-hero{grid-template-columns:minmax(0,1fr)}}
.mc-hero-p{display:flex;flex-direction:column;min-width:0;background:var(--surface);border:1px solid var(--line);
  border-radius:14px;padding:12px 14px 10px;text-align:left;font:inherit;color:inherit}
/* Two of the three are buttons — the whole panel is the target, which is the biggest one on the page and was
   previously a link in a row of small ghost buttons underneath. */
button.mc-hero-p{cursor:pointer;transition:border-color .16s ease, transform .16s ease}
button.mc-hero-p:hover{border-color:var(--accent,#6b4e9e);transform:translateY(-1px)}
button.mc-hero-p:focus-visible{outline:2px solid var(--accent,#6b4e9e);outline-offset:2px}
.mc-hero-h{display:flex;align-items:baseline;gap:8px;font-size:12px;font-weight:800;letter-spacing:.04em;
  text-transform:uppercase;color:var(--ink);margin-bottom:6px}
/* The body owns the leftover height and centres its figure in it, so a short scorecard and a tall graph do
   not have to be the same shape to sit level. */
.mc-hero-b{flex:1;min-height:0;display:flex;align-items:center;justify-content:center;overflow:hidden}
.mc-hero-b>svg{max-width:100%;height:auto}
.mc-hero-f{margin-top:8px;font-size:11.5px;color:var(--accent,#6b4e9e);font-weight:600}
/* The scorecard hero carries its own canvas chrome already; inside a panel it should not carry it twice. */
.mc-hero-p .ssx-canvas{background:none;border:0;padding:0;margin:0;box-shadow:none}
.mc-hero-p .mc-scatter{width:100%;height:auto}
/* Y.1200 — hover parity with the other two panels: the scorecard's wedges light their chips, the scatter's
   dots name their concept, and a panel of anonymous circles was the odd one out. The <title> does the naming;
   this is the visual acknowledgement that the thing under the cursor is a thing. */
.np-n{transition:opacity .12s ease}
.mc-hero-net:hover .np-n{opacity:.55}
.mc-hero-net .np-n:hover{opacity:1}
.np-n circle{transition:stroke-width .12s ease}
.np-n:hover circle{stroke-width:3}
/* Y.1199 — the portfolio section keeps its sentences after the plot moved up into the hero. */
.mc-portfolio-nofig{display:block}

/* ── Y.1212 · THE LANDING, RESTRUCTURED: ONE SCORECARD, THEN THE PAIR, THEN THE BOARD ───────────────────────
   Lars: "I want to restructure the landing again so it's just the Scorecard full span centered on the page
   above the fold with its respective sub-score cards below as they are 3x2. Then, I want it to split the page
   50/50 studio graph and opportunity bank charts before then again the full span strategic chessboard."

   The row above (.mc-hero) keeps every panel style it already had — the chrome, the hover, the stretch — and
   only the TRACK COUNT changes per row. Three arrangements of one component, not three components. ── */
.mc-solo{grid-template-columns:minmax(0,1fr)}
.mc-hero-2{grid-template-columns:repeat(2,minmax(0,1fr))}
/* Both collapse at the same width the three-up did, and this rule has to come AFTER the ones above: the
   media query at 1080 up the file targets `.mc-hero` alone, and `.mc-hero-2` is written later with equal
   specificity, so without its own entry here it would out-rank the collapse and keep two columns on a phone. */
@media (max-width:1080px){.mc-solo,.mc-hero-2{grid-template-columns:minmax(0,1fr)}}
/* THE SCORECARD PANEL, FULL SPAN. It is the page's headline now rather than one of three, so it is centred
   rather than left-set: title, ring and footer on the same axis down the middle of the page. */
.mc-hero-sc .mc-hero-h{justify-content:center}
.mc-hero-sc .mc-hero-f{text-align:center}
/* "Above the fold" is a HEIGHT constraint, so it is written as one rather than guessed at as a width — a
   full-span panel has no width left to give, and the thing that would push the categories off the screen is
   a tall ring, not a wide one. The ring is drawn at 380 (≈578px intrinsic) so it USES the span rather than
   sitting as a small circle in a wide empty box; this is the ceiling that keeps that from costing the fold
   on a short window. It binds below ~1000px of viewport height and is inert above it, which is the right way
   round: the laptop that needs the help gets it and the big monitor is left alone.

   max-height and not height, because ringhub writes `height:auto` as an INLINE style and an inline
   declaration beats any stylesheet rule short of !important. max-height is not declared there, so it is the
   one lever this sheet actually has. The ring is a vector with its own ratio, so capping the height caps the
   width through it and the circle stays a circle. */
.mc-hero-sc .ssx-ring{max-height:min(58vh,580px)}
/* Below 1080 the page is one scrolled column and "the fold" stops meaning anything; a ring squeezed into
   half of a short viewport is just a small ring. */
@media (max-width:1080px){.mc-hero-sc .ssx-ring{max-height:none}}
/* Y.1212 — the six categories, three across and therefore two down. A COUNT, not a minimum: `auto-fit` with
   a 300px floor gives three columns on a 1000px page and five on a 1680px one, and "3x2" is a shape he asked
   for rather than whatever the width happens to buy. It drops back to auto-fit when three would be cramped —
   the card's own content floor is ~290px (a 104px mini ring beside 150px of chips) and below that the chips
   wrap into a column. `.ss-grid` is shared with a dozen other surfaces, which is why this is a second class
   and not a change to that one. */
.ss-grid-3{grid-template-columns:repeat(3,minmax(0,1fr))}
@media (max-width:1180px){.ss-grid-3{grid-template-columns:repeat(auto-fit,minmax(300px,1fr))}}

/* ── Y.1030 · Home strength hub row + Y.1031 graph labels ── */
.mc-hubrow{display:flex;gap:18px;align-items:center;flex-wrap:wrap;margin:4px 0 6px}
/* ── Y.1196 · the graph's labels are sized in SCREEN pixels, not world units ────────────────────────────────
   `font-size:inherit` is the whole mechanism: #sg-view carries one font-size, recomputed as 11 ÷ the current
   zoom, and every label takes it. So the text holds still at 11px while the picture grows around it, which is
   what turns zooming from "the same thing, bigger" into room appearing for names that had none. ── */
.sg-lbl{font-size:inherit;fill:var(--ink);font-weight:500}
/* Y.1200 — Lars: "the text is hard to read still." It was --muted at 11px with a halo, which on the light
   theme is thin grey on white and barely a label at all. The density rule means far fewer labels are on
   screen than before, so the ones that ARE there can afford full ink: the reason they were quiet was that
   there used to be two hundred of them, and there are not any more. */
/* A node in focus states its name in full ink; the ones dimmed behind it keep the muted grey. */
.sg-n.sg-on .sg-lbl{fill:var(--ink)}
/* The lit edges. A presentation attribute (stroke="var(--line)" on the line) loses to a stylesheet rule, so
   this recolours them without !important and without touching the markup. */
#sg-edges line.sg-elit{stroke:var(--accent,#6b4e9e);stroke-opacity:1}
/* The relationship, drawn along the edge it belongs to — only ever on the lit ones. */
.sg-elab{font-size:inherit;fill:var(--accent-2,var(--accent,#6b4e9e));font-weight:700;letter-spacing:.04em;
  stroke:var(--surface);stroke-width:.22em;paint-order:stroke}
/* The node you clicked, as against the ones it reaches — a ring in the accent, on top of whatever ring its
   own type already wears. `circle:first-of-type` is the body; a launched concept's dashed halo is second. */
.sg-n.sg-sel circle:first-of-type{stroke:var(--accent,#6b4e9e);stroke-width:3.5}
.sg-n.sg-sel .sg-lbl{fill:var(--ink);font-weight:700}

/* ── Y.1030 · MOBILE HARDENING — desktop-first, but never broken: kill the horizontal pan (the whole
   main column was scrolling sideways), scale every chart to the viewport, wrap the helper text, and
   let wide tables scroll INSIDE their own containers instead of dragging the page. ── */
@media(max-width:820px){
  .mc-main{overflow-x:hidden}
  .wrap{padding:16px 14px}
  .wrap svg{max-width:100%;height:auto}
  .ob-twrap,.cb-wrap{max-width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}
  .ck-prov{white-space:normal}
  .top{flex-wrap:wrap;gap:8px}
  .mc-tiles{grid-template-columns:repeat(auto-fit,minmax(140px,1fr))}
  .ss-grid{grid-template-columns:1fr!important}
  .mc-portfolio{flex-direction:column}
  .mc-hubrow{justify-content:center;text-align:center}
  .mc-hubrow>div{align-items:center}
  .agi-input textarea{font-size:16px} /* stop iOS zoom-on-focus */
  .ftray{width:100vw;max-width:100vw;border-left:0}
  .sg-stage svg{height:64vh}
  .btn,.ck-run{min-height:40px} /* touch targets */
}

/* ── Y.1034 · Fund-Launch canvas language, app-wide: the dotted dark canvas behind every hub/graph
   surface, glowing score elements (drop-shadows ride inline per-element in their own ink). One class —
   .fl-canvas — makes any panel read as part of the same interconnected system. ── */
.fl-canvas{background-color:var(--surface);background-image:radial-gradient(circle, color-mix(in srgb, var(--line) 72%, transparent) 1px, transparent 1px);background-size:22px 22px;background-position:center}
.sg-stage{background-image:radial-gradient(circle, color-mix(in srgb, var(--line) 72%, transparent) 1px, transparent 1px);background-size:22px 22px;background-position:center;border-radius:16px}
.sg-n circle{transition:filter .15s ease, r .15s ease}
.sg-n:hover circle{filter:drop-shadow(0 0 8px color-mix(in srgb, var(--accent, #6b4e9e) 60%, transparent))}

/* ── Y.1037-1038 · wedge delta ticker + cell-zoom scale-in ── */
.ssx-delta{animation:ssx-pop .5s ease .4s both}
.cellzoom{animation:cz-in .22s ease both;transform-origin:center}
@keyframes cz-in{from{opacity:0;transform:scale(.9)}to{opacity:1;transform:none}}
@media (prefers-reduced-motion:reduce){.ssx-delta,.cellzoom{animation:none}}

/* ── Y.1093 · LIVE DECK editor chrome. Everything here is the APP around the deck — the deck itself is
   styled entirely by the theme CSS injected at #dk-preview, so what you see in the stage is exactly what
   publishes. Nothing in this block may style .dk-* (that would make the preview lie). ── */
.dkx-bar{background:var(--surface-2);border:1px solid var(--line);border-radius:14px;padding:12px 14px;margin:0 0 16px;display:flex;flex-direction:column;gap:10px}
.dkx-row{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.dkx-row-a{border-top:1px solid var(--line);padding-top:10px;margin-top:2px}
.dkx-lbl{font-size:11px;letter-spacing:.09em;text-transform:uppercase;color:var(--muted);font-weight:700;min-width:66px}
.dkx-themes,.dkx-secs{display:flex;gap:6px;flex-wrap:wrap}
.dkx-th{display:inline-flex;align-items:center;gap:7px;background:var(--surface);border:1px solid var(--line);border-radius:999px;padding:5px 12px 5px 6px;font:inherit;font-size:12.5px;color:var(--text);cursor:pointer}
.dkx-th:hover{border-color:var(--line-2)}
.dkx-th.on{border-color:var(--accent);box-shadow:0 0 0 2px var(--accent-weak);color:var(--ink);font-weight:600}
.dkx-sw{width:20px;height:20px;border-radius:50%;border:1px solid;display:inline-flex;align-items:center;justify-content:center}
.dkx-sw i{width:8px;height:8px;border-radius:50%;display:block}
.dkx-sec{background:var(--surface);border:1px solid var(--line);border-radius:8px;padding:4px 10px;font:inherit;font-size:12px;color:var(--text);cursor:pointer}
.dkx-sec:hover{border-color:var(--line-2)}
.dkx-sec.off{opacity:.45;text-decoration:line-through}
.dkx-b{background:var(--surface);border:1px solid var(--line);border-radius:9px;padding:6px 13px;font:inherit;font-size:12.5px;color:var(--text);cursor:pointer}
.dkx-b:hover{border-color:var(--line-2)}
.dkx-b-go{background:var(--accent);border-color:var(--accent);color:var(--accent-ink);font-weight:600}
.dkx-state{font-size:11.5px;color:var(--muted);margin-left:auto}
.dkx-drift{display:flex;align-items:center;gap:10px;flex-wrap:wrap;font-size:12.5px;color:var(--y-ink);background:var(--y-bg);border:1px solid var(--y-bd);border-radius:10px;padding:8px 12px}
.dkx-drift .dkx-b{margin-left:auto}
.dkx-stage{border:1px solid var(--line);border-radius:16px;overflow:hidden;box-shadow:var(--shadow)}
/* Section chrome floats over the theme without participating in it. */
.dkx-tools{display:flex;align-items:center;gap:6px;justify-content:flex-end;margin:0 0 -6px;opacity:0;transition:opacity .14s ease}
[data-sec]:hover .dkx-tools,[data-sec]:focus-within .dkx-tools{opacity:1}
.dkx-t{background:rgba(127,127,127,.13);border:1px solid rgba(127,127,127,.26);border-radius:7px;padding:2px 9px;font:inherit;font-size:11px;color:inherit;cursor:pointer;backdrop-filter:blur(4px)}
.dkx-t:hover{background:rgba(127,127,127,.24)}
.dkx-t[disabled]{opacity:.6;cursor:default}
.dkx-tag{font-size:10px;letter-spacing:.07em;text-transform:uppercase;font-weight:700;opacity:.55;padding:2px 7px;border-radius:6px;border:1px solid rgba(127,127,127,.3)}
.dkx-tag-src{opacity:.4}
[data-block]:focus{outline:2px solid rgba(127,127,127,.4);outline-offset:6px;border-radius:4px}
@media print{.dkx-noprint,.dkx-bar,.dkx-tools{display:none!important}.dkx-stage{border:0;box-shadow:none;border-radius:0}}

/* ── Y.1094 · outer-orbit hover. The arc's REACH is animated by swapping its path `d` (see wireStrengthHub);
   these transitions carry the interpolation and the type growth. Both are motion, so both are off under
   prefers-reduced-motion — the hover still works, it just snaps. ── */
.ssx-ring path.ssx-arc{transition:d .18s ease, fill-opacity .18s ease, stroke-width .18s ease}
.ssx-ring text.ssx-olab{transition:font-size .18s ease}
@media (prefers-reduced-motion:reduce){.ssx-ring path.ssx-arc,.ssx-ring text.ssx-olab{transition:none}}

/* ── Y.1097 · THE CRUCIBLE GLOW. A crucible heats from the sides and the base, so the glow rides the left,
   bottom and right edges and leaves the top alone — the app's own chrome lives up there and a rim behind it
   would read as a notification, not as heat. Fixed, pointer-events:none, purely decorative: it can never
   intercept a click or change layout, and it is driven only by data-heat (see forgeglow.js). ── */
/* ── Y.1191 · A FORGE AT REST IS STILL WARM ─────────────────────────────────────────────────────────────────
   Lars: "having the bottom glow a baseline glow that breathe pulses, and then just have it grow in intensity
   based on the intensity of the crucible doing its job."

   Heat 0 used to mean invisible, so the glow appeared and disappeared — a notification, not a property of the
   room. Two layers now, and they do different jobs:

     ::before  THE BASE POOL. Bottom edge, always lit, always breathing. Its intensity is what heat scales.
     ::after   THE RIM. All four edges including the top, tight to the frame. Absent at rest; it is what
               "something is running" actually looks like.

   So the forge is never cold, work makes it brighter rather than switching it on, and the top edge only
   lights when there is something to light it for. --forge-i is the single intensity dial the heat levels
   move; everything else is expressed as a multiple of it. */
/* Y.1191b — Lars: "the crucible glow was stronger on the bottom and right side of the window only."
   It was painting on all four edges and only READING on two. z-index 60 clears the header (30) and the rail,
   so nothing covered it — but the top edge runs over the opaque header bar and the left edge over the
   sidebar, and a 38px rim at 40% alpha simply does not register against those surfaces the way it does
   against the open canvas on the right and the bottom. Perceived coverage, not painted coverage.
   So: z-index above every piece of app chrome, and the rim carries its own opacity (see ::after) instead of
   sharing the base pool's — which is what makes it strong enough to read over a solid header. Kept below the
   modal layer at 200: while a dialog owns the screen, the room around it should not compete. */
/* ── Y.1193 · INTENSITY IS NOT REACH ──────────────────────────────────────────────────────
   Lars, with a screenshot of the boot screen: "Maybe let's tone down the excessive glow on load. It almost
   blows out the screen. I like the bottom breathing glow intensity... let's keep the breathing glow intensity
   on the bottom and just extend it to the other edges but not expand the depth of penetration into the center
   of the window."

   Y.1191 had ONE dial, --forge-i, and so it reached for DEPTH every time it wanted more presence. The rim's
   third shadow was `inset 0 0 150px 10px` — an ~85px wash — and heat 4 then blurred the base pool another
   10px and scaled it 1.06 on top of that. "The app is working" was being said as "the room is filling with
   light from the outside in", and at boot, where the flame pins heat at 4 from the first frame, a third of
   the window was glow before a single card had rendered.

   They are different properties and they now have different knobs:

     --forge-i    HOW BRIGHT. Heat moves this, and only this. The breathe rides on it.
     --forge-rim  HOW FAR IN. A constant. No heat level touches it, nothing scales it, and every shadow below
                  is written as a fraction of it — so the reach of the entire effect is one number, and it
                  cannot drift the way it just did.

   The base pool also stops being a radial gradient centred below the frame. That shape could never light the
   top, which is the only reason the rim had to exist as a separate mechanism to reach it; an inset shadow
   hugs four edges by construction. So both layers are inset shadows now, and the bottom keeps its extra
   warmth as a second offset shadow on the same layer rather than as a different kind of thing. ── */
.forge-glow{position:fixed;inset:0;pointer-events:none;z-index:120;opacity:1;--forge-i:.34;--forge-rim:26px;transition:none}
.forge-glow::before{
  content:'';position:absolute;inset:0;
  /* The base pool: all four edges, always lit, always breathing — with the bottom burning hotter, because a
     crucible heats from its base and because that is the one Lars said was already right. Three layers, and
     the order is the reading: a thin saturated line at the frame, a soft band behind it, then the bottom's
     extra warmth as an offset shadow on the same layer rather than as a different mechanism. */
  box-shadow:
    inset 0 0 calc(var(--forge-rim) * 0.5) calc(var(--forge-rim) * -0.1) var(--accent, #6b4e9e),
    inset 0 0 calc(var(--forge-rim) * 1.2) calc(var(--forge-rim) * -0.2) var(--accent-glow, rgba(107,78,158,.4)),
    inset 0 calc(var(--forge-rim) * -0.6) calc(var(--forge-rim) * 1.3) calc(var(--forge-rim) * -0.6) var(--accent-glow, rgba(107,78,158,.4));
  opacity:var(--forge-i);
  animation:forge-breathe 3.4s ease-in-out infinite;   /* the baseline breathes even at rest */
}
.forge-glow::after{
  content:'';position:absolute;inset:0;
  /* The rim: what work looks like. A bright line hard against the frame and a short falloff behind it, the
     whole thing landing inside --forge-rim — so raising the heat brightens the edge and never advances it.

     The innermost layer is --accent rather than --accent-glow, and that is the whole reason this reads at
     all. --accent-glow carries alpha .40, which is right for a soft pool and cannot make a line: rendered
     with it, a rim this shallow measured as a smudge, and the first fix I reached for was making it deeper
     again — the exact move that caused this. Saturation buys presence without buying reach.

     Blur radii run wider than --forge-rim because each is pulled back by a negative spread; what lands on
     screen is ~26px on every edge, measured off a render at heat 4 rather than reasoned about. */
  box-shadow:
    inset 0 0 calc(var(--forge-rim) * 0.46) calc(var(--forge-rim) * -0.15) var(--accent, #6b4e9e),
    inset 0 0 var(--forge-rim) calc(var(--forge-rim) * -0.3) var(--accent-glow, rgba(107,78,158,.4)),
    inset 0 0 calc(var(--forge-rim) * 1.77) calc(var(--forge-rim) * -0.77) var(--accent-glow, rgba(107,78,158,.4));
  opacity:0;
  transition:opacity .6s ease;
}
/* Work raises the base and brings the rim up with it. */
.forge-glow[data-heat="1"]{--forge-i:.52}
.forge-glow[data-heat="2"]{--forge-i:.70}
.forge-glow[data-heat="3"]{--forge-i:.86}
.forge-glow[data-heat="4"]{--forge-i:1}
.forge-glow[data-heat="1"]::after{opacity:.42}
.forge-glow[data-heat="2"]::after{opacity:.62}
.forge-glow[data-heat="3"]::after{opacity:.80}
.forge-glow[data-heat="4"]::after{opacity:1}
@keyframes forge-breathe{0%,100%{opacity:calc(var(--forge-i) * .72)}50%{opacity:var(--forge-i)}}
/* The dark theme's surface swallows a soft glow, so it burns a little hotter there. */
[data-theme="dark"] .forge-glow{--forge-i:.46}
[data-theme="dark"] .forge-glow[data-heat="1"]{--forge-i:.66}
[data-theme="dark"] .forge-glow[data-heat="2"]{--forge-i:.84}
[data-theme="dark"] .forge-glow[data-heat="3"]{--forge-i:1}
[data-theme="dark"] .forge-glow[data-heat="4"]{--forge-i:1}
/* Reduced motion keeps the glow — it is information — and drops only the pulse. */
@media (prefers-reduced-motion:reduce){.forge-glow::before{animation:none;opacity:var(--forge-i)}.forge-glow::after{transition:none}}
@media print{.forge-glow{display:none}}

/* ── Y.1106 · report tables, quotes and numbered lists. The analyses have been writing these all along; the
   renderer just didn't know about them, so a pricing table rendered as literal pipes. Tables scroll on their
   own axis rather than blowing out the column — a wide table should not make the whole report horizontal. ── */
.dm-tw{overflow-x:auto;margin:12px 0 16px;border:1px solid var(--line);border-radius:10px;background:var(--surface)}
.dm-table{border-collapse:collapse;width:100%;font-size:13.5px;min-width:min(560px,100%)}
.dm-table th{background:var(--surface-2);color:var(--ink);font-weight:700;font-size:11.5px;letter-spacing:.05em;text-transform:uppercase;padding:9px 12px;border-bottom:1px solid var(--line);white-space:nowrap}
.dm-table td{padding:9px 12px;border-bottom:1px solid var(--line);color:var(--text);vertical-align:top}
.dm-table tr:last-child td{border-bottom:0}
.dm-table tbody tr:hover{background:var(--surface-2)}
.dm-q{margin:12px 0;padding:10px 16px;border-left:3px solid var(--accent);background:var(--accent-weak);border-radius:0 8px 8px 0}
.dm-q .dm-p{margin:0 0 6px;color:var(--text);font-size:14px}
.dm-q .dm-p:last-child{margin:0}
.dm-ol{margin:8px 0 12px;padding-left:22px}
.dm-ol li{margin:0 0 7px;color:var(--text)}

/* ── Y.1108 · the crucible at full heat, while the page-load flame is on screen. Deliberately well beyond the
   ambient tiers: a background call is a hint, a blocked screen is the forge running. Detected from the
   presence of .load-flame (see forgeglow.js), so any spinner anywhere lights it. ── */
/* Y.1193 — the full-heat pulse is a pulse in BRIGHTNESS now. It used to blur the pool by 10px and scale it
   1.06, both of which push light further into the room; that is what made the load screen the worst frame in
   the app. It also animated to a flat opacity, which quietly overrode --forge-i, so the one dial stopped
   being the one dial exactly where it mattered most. Same rhythm, deeper swing, no reach. */
.forge-glow[data-heat="4"]::before{animation:forge-forge 1.9s ease-in-out infinite}
@keyframes forge-forge{0%,100%{opacity:calc(var(--forge-i) * .62)}50%{opacity:var(--forge-i)}}
@media (prefers-reduced-motion:reduce){.forge-glow[data-heat="4"]::before{animation:none}}

/* ── Y.1109 · WHAT'S IN THE CRUCIBLE. A build runs for many minutes and we tell people to go and do something
   else; the cost of that is forgetting which concept is running. This is the answer, in the sidebar, glowing
   in the same accent as the forge edges — a status light, not a fixture (hidden whenever nothing runs). ── */
.mc-forging{display:flex;flex-direction:column;gap:5px;margin-top:8px}
.mc-forge{display:flex;align-items:center;gap:7px;width:100%;text-align:left;background:var(--accent-weak);border:1px solid var(--accent);border-radius:10px;padding:6px 9px;font:inherit;font-size:11.5px;color:var(--ink);cursor:pointer;position:relative;overflow:hidden}
.mc-forge:hover{background:var(--accent-soft)}
.mc-forge-f{font-size:12px;line-height:1;filter:drop-shadow(0 0 5px var(--accent-glow))}
.mc-forge-t{font-weight:600;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.mc-forge-p{font-size:10px;color:var(--muted);letter-spacing:.04em;white-space:nowrap}
/* the same breathing the window edges do, so "the app is working" reads as one idea */
.mc-forge::after{content:'';position:absolute;inset:0;border-radius:10px;box-shadow:0 0 14px var(--accent-glow) inset;pointer-events:none;animation:mc-forge-breathe 2.6s ease-in-out infinite}
@keyframes mc-forge-breathe{0%,100%{opacity:.35}50%{opacity:.9}}
@media (prefers-reduced-motion:reduce){.mc-forge::after{animation:none;opacity:.5}}
.mc-forge-h{font-size:10px;letter-spacing:.09em;text-transform:uppercase;color:var(--accent);font-weight:700;margin-bottom:1px}
.mc-forge-more{font-size:10.5px;color:var(--muted);padding:2px 4px}

/* ── Y.1111 · the concept in the crucible, glowing in the quick-nav list it already lives in. ── */
.mc-cres-b.mc-cres-hot{border-color:var(--accent);background:var(--accent-weak);position:relative}
.mc-cres-fire{font-size:11px;margin-right:2px;filter:drop-shadow(0 0 5px var(--accent-glow))}
.mc-cres-b.mc-cres-hot::after{content:'';position:absolute;inset:0;border-radius:inherit;box-shadow:0 0 12px var(--accent-glow) inset;pointer-events:none;animation:mc-forge-breathe 2.6s ease-in-out infinite}
@media (prefers-reduced-motion:reduce){.mc-cres-b.mc-cres-hot::after{animation:none;opacity:.55}}

/* ── Y.1115 · the engine catch-up line. A STATE, not a demand: the app is already fixing it. ── */
.cl-engine{font-size:11.5px;color:var(--muted);margin:0 10px 0 auto;white-space:nowrap;align-self:center}


/* Y.1147 — the coherence pass reporting what it reconciled with itself. Visually quieter than an ISSUE card
   (this is resolved work, not a to-do) but never invisible: a self-rewrite the user cannot see is a self-rewrite
   they cannot audit. Left rule in the ok colour to read as "handled", matching the issue cards' severity rules. */
.ck-synth-healed{margin-top:10px;padding:8px 12px;border-left:3px solid var(--ok,#2e7d32);background:var(--panel);border-radius:0 7px 7px 0}
.ck-synth-healed-h{font-size:12px;font-weight:700;color:var(--ink);margin-bottom:4px}
.ck-synth-healed-l{margin:0;padding-left:18px;font-size:11.5px;color:var(--muted);line-height:1.55}
.ck-synth-healed-l li{margin:2px 0}
.ck-synth-healed-l b{color:var(--ink);font-weight:600}


/* Y.1147 — "your edit conflicts with the research". Styled as a QUESTION, not a finding: accent left rule
   (the app's ask-me colour) rather than a severity colour, because there is nothing wrong yet — there is a
   decision outstanding. The two answers sit side by side and deliberately look like peers; making "Keep mine"
   a quiet dismiss-link would put a thumb on the scale toward overwriting what someone typed on purpose. */
.ck-synth-review{margin-top:10px;padding:10px 12px;border-left:3px solid var(--accent);background:var(--accent-weak,var(--panel));border-radius:0 7px 7px 0}
.ck-synth-review-h{font-size:12.5px;font-weight:700;color:var(--ink);margin-bottom:8px}
.ck-synth-review-i{padding:8px 0;border-top:1px solid var(--line)}
.ck-synth-review-i:first-of-type{border-top:0;padding-top:2px}
.ck-synth-review-m{font-size:12px;color:var(--ink);margin-bottom:3px}
.ck-synth-mine{font-family:var(--mono);font-size:9px;letter-spacing:.05em;text-transform:uppercase;color:var(--accent);border:1px solid var(--line);border-radius:4px;padding:1px 5px;margin-left:4px;vertical-align:1px}
.ck-synth-review-b{font-size:12px;color:var(--muted);line-height:1.55}
.ck-synth-review-f{font-size:12px;color:var(--ink);line-height:1.55;margin-top:4px}
.ck-synth-review-a{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-top:8px}
.ck-synth-keep{font-size:12px;font-weight:600;color:var(--ink);background:var(--panel);border:1px solid var(--line);border-radius:7px;padding:6px 12px;cursor:pointer}
.ck-synth-keep:hover{border-color:var(--accent);color:var(--accent)}
.ck-synth-keep:disabled,.ck-synth-accept:disabled{opacity:.6;cursor:default}


/* Y.1148 — DECK LENGTH + THE LINKED/FREE DISTINCTION. */

/* The bar that appears above a short deck. It states what this length IS and offers the one action that makes
   it real. Present even when the variant exists, because "you are reading the Concise version" is worth saying
   to someone who may have forgotten they switched. */
.dkx-denbar{display:flex;flex-wrap:wrap;gap:10px;align-items:center;justify-content:space-between;margin:0 0 14px;padding:9px 13px;border:1px solid var(--line);border-left:3px solid var(--accent);border-radius:0 8px 8px 0;background:var(--panel);font-size:12.5px;color:var(--muted);line-height:1.5}
.dkx-denbar b{color:var(--ink)}
.dkx-denbar-w{color:var(--a-ink,var(--muted))}
/* A length that has never been written, or was written before the latest edits, is marked on the toggle
   itself — otherwise you have to click each one to discover which are real. */
.dkx-dn-need{border-style:dashed}
.dkx-dn-dot{color:var(--a-ink,#b8860b);font-weight:900}

/* The badge on each editable section. Colour carries the consequence: accent = this changes the concept,
   neutral = this stays here. Deliberately readable rather than decorative — someone is about to type into it. */
.dkx-lk{font-family:var(--mono);font-size:9px;letter-spacing:.05em;text-transform:uppercase;font-weight:700;border-radius:4px;padding:1px 5px;border:1px solid var(--line)}
.dkx-lk-linked{color:var(--accent);border-color:var(--accent);background:var(--accent-weak,transparent)}
.dkx-lk-excerpt{color:var(--muted)}
.dkx-lk-free{color:var(--muted);opacity:.75}

/* Y.1149 — WORKSPACE COMMENTS ON THE LIVE DECK.
   A docked side panel rather than a modal: the point of commenting on a document is seeing the document while
   you do it, and a modal that covers the thing under discussion defeats the feature. On narrow screens it
   becomes a bottom sheet for the same reason — it must never cover the paragraph being talked about. */
.dkx-cmtp{position:fixed;top:76px;right:16px;bottom:16px;width:340px;max-width:calc(100vw - 32px);display:flex;flex-direction:column;background:var(--panel);border:1px solid var(--line);border-radius:12px;box-shadow:0 18px 48px rgba(0,0,0,.28);z-index:60;overflow:hidden}
.dkx-cmtp[hidden]{display:none}
.dkx-cmtp-h{display:flex;align-items:center;gap:8px;padding:10px 12px;border-bottom:1px solid var(--line);font-size:13px;color:var(--ink)}
.dkx-cmtp-n{margin-left:auto;font-size:11px;color:var(--muted)}
.dkx-cmtp-x{background:none;border:0;color:var(--muted);cursor:pointer;font-size:14px;line-height:1;padding:2px 4px}
.dkx-cmtp-x:hover{color:var(--ink)}
.dkx-cmtp-l{flex:1;overflow:auto;padding:10px 12px}
.dkx-cmt-empty{font-size:12px;color:var(--muted);padding:8px 0}
.dkx-cmt-th{border:1px solid var(--line);border-radius:9px;padding:9px 10px;margin-bottom:10px;background:var(--bg)}
/* Resolved threads stay readable but stop competing for attention — the whole reason resolving exists. */
.dkx-cmt-done{opacity:.6}
/* The quoted anchor, styled like the highlighted chip in the document it points at. */
.dkx-cmt-q{font-size:11.5px;color:var(--accent);background:var(--accent-weak,transparent);border-radius:5px;padding:3px 6px;margin-bottom:6px;line-height:1.45}
.dkx-cmt-q-lost{color:var(--a-ink,#b8860b);background:transparent;border:1px dashed var(--line)}
.dkx-cmt-lost{font-size:10px;text-transform:uppercase;letter-spacing:.04em;opacity:.85}
.dkx-cmt-b{margin-top:7px}
.dkx-cmt-b:first-of-type{margin-top:0}
.dkx-cmt-who{font-size:12px;font-weight:700;color:var(--ink)}
/* The role beside the name, as in the inspiration. "Sarah Chen · Lawyer" is read differently from the name. */
.dkx-cmt-role{font-size:10px;text-transform:uppercase;letter-spacing:.05em;color:var(--muted);margin-left:6px}
.dkx-cmt-at{font-size:10.5px;color:var(--muted);margin-left:6px}
.dkx-cmt-t{font-size:12.5px;color:var(--ink);line-height:1.55;margin-top:2px;white-space:pre-wrap}
.dkx-cmt-a{display:flex;gap:6px;align-items:center;margin-top:8px}
.dkx-cmt-in{flex:1;min-width:0;font:inherit;font-size:12px;padding:5px 8px;border:1px solid var(--line);border-radius:6px;background:var(--panel);color:var(--ink)}
.dkx-cmt-lk{background:none;border:0;color:var(--muted);font-size:11.5px;cursor:pointer;padding:2px 4px;text-decoration:underline}
.dkx-cmt-lk:hover{color:var(--accent)}
.dkx-cmt-res{font-size:11.5px;color:var(--muted);margin-top:8px}
.dkx-cmtp-new{border-top:1px solid var(--line);padding:10px 12px;display:flex;flex-direction:column;gap:7px}
.dkx-cmt-new{font:inherit;font-size:12.5px;padding:7px 9px;border:1px solid var(--line);border-radius:7px;background:var(--bg);color:var(--ink);resize:vertical}
/* The marker on a section. Filled only when something is OPEN. */
.dkx-cmt-on{color:var(--accent);border-color:var(--accent)}
@media (max-width:900px){.dkx-cmtp{top:auto;left:12px;right:12px;bottom:12px;width:auto;max-height:56vh}}

/* A concurrent-edit collision. Deliberately NOT a toast: a paragraph someone spent ten minutes writing is not
   something to show for four seconds and then throw away. It sits above the deck with the text still in it. */
.dkx-conflict{margin:0 0 14px;padding:11px 13px;border:1px solid var(--r-ink,#c0392b);border-radius:9px;background:var(--panel)}
.dkx-conflict-h{font-size:13px;font-weight:700;color:var(--r-ink,#c0392b);margin-bottom:6px}
.dkx-conflict-i{font-size:12.5px;color:var(--muted);line-height:1.5;margin-bottom:8px}
.dkx-conflict-m{margin-top:5px;padding:7px 9px;border:1px solid var(--line);border-radius:6px;background:var(--bg);color:var(--ink);white-space:pre-wrap;font-size:12px;max-height:180px;overflow:auto;user-select:all}


/* Y.1150 — PUBLISH: the gate, and the drift indicator.
   The gate is a list of REASONS, not a disabled button. A control that refuses without saying why teaches
   people that the app is broken; one that names the blocker and where to fix it teaches them the workflow. */
.dkx-gate{flex:1 1 100%;margin:0 0 8px;padding:9px 12px;border:1px solid var(--a-ink,#b8860b);border-radius:8px;background:var(--panel)}
.dkx-gate-i{font-size:12.5px;color:var(--muted);line-height:1.55;margin:3px 0}
.dkx-gate-i b{color:var(--ink);font-weight:600}
.dkx-gate-w{font-family:var(--mono);font-size:10.5px;color:var(--muted);margin-top:2px}
/* Drift reads as information, not alarm: being ahead of what you published is the normal state of a document
   you are still working on. It only becomes urgent when someone is about to share the link. */
.dkx-drifted{font-size:12px;color:var(--a-ink,#b8860b);font-weight:600;margin-left:0}

/* Y.1151 — the category header is now a destination. Styled as text, not as a button: it is the card's title
   first and a link second, so the arrow appears on hover rather than shouting at rest. */
.ssx-cat-go .ssx-cat-arrow{opacity:0;margin-left:2px;transition:opacity .12s ease}
.ssx-cat-go:hover{color:var(--accent)}
.ssx-cat-go:hover .ssx-cat-arrow{opacity:.8}
.ssx-cat-go:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:4px}

/* Y.1152 — a cell holding concepts that the synthesis never scored. It used to render as an inert dot with
   the concepts silently discarded. Dashed border says "real, but unmeasured" without borrowing a score colour
   it hasn't earned — an unscored cell is unknown, not bad, and must not read as a low score. */
.cb-unscored{border-style:dashed!important;background:transparent!important;color:var(--muted)!important}
.cb-unscored-m{font-weight:700;opacity:.5}

/* Y.1153 — THE "HOW IT WORKS" DISCLOSURE.
   Quiet at rest and small: it is a footnote to the content, not a peer of it. The whole point is that the
   board/score/brief leads and the mechanism waits to be asked for, so anything that makes this compete with
   the answer defeats it. Prints expanded — a PDF whose explanation is collapsed is a PDF missing it. */
.xp{margin:6px 0 10px}
.xp-s{display:inline-flex;align-items:center;gap:6px;cursor:pointer;list-style:none;font-size:11.5px;color:var(--muted);border:1px solid var(--line);border-radius:999px;padding:3px 10px;user-select:none}
.xp-s::-webkit-details-marker{display:none}
.xp-s:hover{color:var(--accent);border-color:var(--accent)}
.xp[open] .xp-s{color:var(--ink)}
.xp-q{display:inline-flex;align-items:center;justify-content:center;width:14px;height:14px;border-radius:50%;border:1px solid currentColor;font-size:9px;font-weight:700;line-height:1}
.xp-b{margin-top:8px;padding:10px 13px;border:1px solid var(--line);border-radius:9px;background:var(--panel);font-size:12.5px;line-height:1.6;color:var(--muted);max-width:70ch}
.xp-b p{margin:0 0 8px}
.xp-b p:last-child{margin-bottom:0}
.xp-b b{color:var(--ink);font-weight:600}
.xp-l{margin:0 0 8px;padding-left:18px}
.xp-l li{margin:2px 0}
@media print{.xp{margin:8px 0}.xp-b{display:block!important}.xp-s{display:none}}

/* Y.1153 — the header meter now carries a balance and an action. The action is quiet and only appears on
   hover: it is available, not demanded. A meter that always shows "Top up" reads as a shakedown. */
.mc-meter-n{font-variant-numeric:tabular-nums}
/* Y.1319 — this was opacity:0 until hover, so the only route to buying credits was discoverable by
   accident: you had to already suspect the balance was a button. A balance is a fact; the action beside it
   is the thing a person is looking for when they read the balance, and it is worth 8px of chrome. Dimmer
   than the number at rest, full strength on hover, so the number still leads. */
.mc-meter-cta{margin-left:8px;padding-left:8px;border-left:1px solid currentColor;opacity:.62;transition:opacity .12s ease;font-weight:600}
#mc-meter:hover .mc-meter-cta,#mc-meter:focus-visible .mc-meter-cta{opacity:1}
/* An empty balance is the one moment the action matters most — never let it recede. */
#mc-meter[data-tone="low"] .mc-meter-cta{opacity:.9}

/* Y.1154 — the owner's margin view. Internal, so it is dense and unstyled-ish on purpose: this is an
   instrument, not a marketing surface, and every pixel spent on polish is one not spent on a number. */
.mg-hero{border:1px solid var(--line);border-left:3px solid var(--accent);border-radius:0 10px 10px 0;padding:13px 16px;margin:0 0 14px;background:var(--panel)}
.mg-verdict{font-size:17px;font-weight:700;color:var(--ink);line-height:1.4}
.mg-conf{font-family:var(--mono);font-size:10.5px;letter-spacing:.04em;margin-top:6px;line-height:1.5}
.mg-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:10px;margin-bottom:14px}
.mg-card{border:1px solid var(--line);border-radius:10px;padding:11px 13px;background:var(--surface)}
.mg-k{font-family:var(--mono);font-size:9.5px;letter-spacing:.06em;text-transform:uppercase;color:var(--muted)}
.mg-v{font-size:24px;font-weight:800;color:var(--ink);margin:3px 0 2px;font-variant-numeric:tabular-nums}
.mg-s{font-size:11px;color:var(--muted);line-height:1.5}
.mg-t{width:100%;border-collapse:collapse;font-size:12.5px;margin-bottom:16px}
.mg-t th{text-align:left;font-family:var(--mono);font-size:9.5px;letter-spacing:.05em;text-transform:uppercase;color:var(--muted);font-weight:700;padding:6px 8px;border-bottom:1px solid var(--line)}
.mg-t td{padding:6px 8px;border-bottom:1px solid var(--line);color:var(--ink);font-variant-numeric:tabular-nums}
.mg-days{display:flex;gap:8px;margin-top:16px}

/* Y.1157 — WHERE YOU PLAY. Core groups are solid; adjacent ones are dashed and quiet, because an unoccupied
   group is an option rather than a fact. The distinction has to survive a glance — that is the whole point of
   separating core from adjacent, and a uniform card would lose it. */
.cv-wrap{margin:0 0 18px}
.cv-cols{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:14px}
.cv-k{font-family:var(--mono);font-size:9.5px;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);margin-bottom:6px}
.cv-g{border:1px solid var(--line);border-radius:9px;padding:8px 11px;margin-bottom:7px;background:var(--surface)}
.cv-g:not(.cv-core){border-style:dashed;background:transparent;opacity:.72}
.cv-core{border-left:3px solid var(--accent)}
.cv-g-h{display:flex;align-items:center;gap:6px;font-size:12.5px;color:var(--ink)}
.cv-i{font-size:13px}
.cv-n{margin-left:auto;font-family:var(--mono);font-size:10px;font-weight:700;color:var(--accent);background:var(--accent-weak,transparent);border-radius:999px;padding:1px 7px}
.cv-adj{margin-left:auto;font-family:var(--mono);font-size:9px;letter-spacing:.05em;text-transform:uppercase;color:var(--muted)}
.cv-l{display:flex;flex-wrap:wrap;gap:5px;margin-top:6px}
.cv-x{font-size:11px;color:var(--muted);border:1px solid var(--line);border-radius:999px;padding:2px 8px;line-height:1.5}
.cv-x-on{color:var(--ink);border-color:var(--accent)}
.cv-x-on b{color:var(--accent);margin-left:3px}
.cv-near{margin-top:10px;padding:9px 12px;border:1px solid var(--line);border-left:3px solid var(--a-ink,#b8860b);border-radius:0 8px 8px 0;font-size:12px;color:var(--muted);display:flex;flex-wrap:wrap;gap:6px;align-items:center}
.cv-near b{color:var(--ink)}

/* Y.1159 — a chip that scrolls to its answer flashes it, so the eye lands where the click sent it. */
@keyframes ck-flash-kf { 0%,100%{background:transparent} 30%{background:var(--accent-weak,rgba(127,127,255,.18))} }
.ck-flash{animation:ck-flash-kf 1.4s ease}
@media (prefers-reduced-motion:reduce){.ck-flash{animation:none;outline:2px solid var(--accent);outline-offset:3px}}

/* Y.1160 — the derive prompt. Accent-bordered and never buried: it is the one action that turns a guessed
   board into a derived one, and it was previously hidden behind a condition that excluded the common case. */
.cv-derive{display:flex;flex-wrap:wrap;gap:10px;align-items:center;justify-content:space-between;margin-top:10px;padding:10px 13px;border:1px solid var(--accent);border-radius:9px;background:var(--accent-weak,var(--panel));font-size:12.5px;color:var(--muted);line-height:1.55}
.cv-derive b{color:var(--ink)}

/* Y.1161 — the self-heal saying what it is doing. Quiet: it is ambient work the user did not ask for, so it
   reports rather than announces, and disappears when there is nothing to say. */
.cv-auto{display:block;font-size:11.5px;color:var(--accent);margin-bottom:3px}
.cv-auto:empty{display:none}

/* ── Y.1163 · THE SCORED BOARD'S PARENT TIER ───────────────────────────────────
   Rows group under the industry their occupants derived, columns under the buyer
   archetype theirs derived. See axisparents.js.

   ── WHY THE Z-INDEXES ARE SO HIGH ────────────────────────────────────────────
   The first pass used 4-7 and content still scrolled through the headers. The
   reason is .cb-sc{position:relative}, set long ago so the ★ could be absolutely
   positioned inside a cell: EVERY scored cell is therefore a positioned element,
   painting in the same layer as the sticky headers rather than beneath them, and
   .cb-sc:hover pushes one to z-index 2 while .cb-pick:hover goes to 3. Competing
   with body content for a couple of stacking levels is a race, so the headers now
   sit at 30+ and the cells are pinned explicitly to 0. A sticky header has to win
   against every cell, including one being hovered, and "wins by two" is not a
   guarantee — it is the current value of somebody else's rule.

   ── AND WHY THE HEADER HEIGHT IS FIXED ───────────────────────────────────────
   `top` for the second tier is the height of the first. That has to be exact, so
   tier 1 is nowrap at a fixed 30px with its overflow clipped. Measuring it in JS
   would also work and would be one more thing to get wrong on a resize. */
.cb-wrap{max-height:76vh;overflow:auto}
.cb-scored{border-collapse:separate;border-spacing:0}
/* Body cells sit on the floor. Their `position:relative` is for the ★, not for
   layering, and leaving z-index to `auto` is what let them reach the headers. */
.cb-scored td{z-index:0}

/* Y.1165 — FREEZE A1:B2. Lars: "freeze rows 1-2 and columns 1-2 ... the top left
   corner stays no matter what and the content scrolls under it."

   The corner already spanned both header rows and both header columns, and it was
   still being clipped: `.cb-p1 th` set height:30px + overflow:hidden, and the
   corner is a rowspan="2" cell, so the rule meant for the tier-1 row was cutting
   the corner to half its height. Excluded explicitly rather than by specificity
   accident.

   Four sticky regions, and each has to out-layer the ones it crosses:
     corner (A1:B2)  sticky on BOTH axes           — highest
     rows 1-2        sticky top,  scroll under it horizontally
     cols 1-2        sticky left, scroll under it vertically
     everything else scrolls                        — pinned to 0 */
.cb-p1 th:not(.cb-corner-p){position:sticky;top:0;z-index:31;height:30px;line-height:18px;overflow:hidden;box-sizing:border-box}
.cb-p2 th{position:sticky;top:30px;z-index:30}
/* Every sticky header needs an OPAQUE background or the rows scroll through it.
   The first attempt used var(--card), which this stylesheet has never defined, so
   it resolved to transparent — the "see-through headers" bug. --surface-3 is the
   token the rest of this table already uses, and it is opaque in both themes. */
.cb-p1 th,.cb-p2 th,.cb-corner-p,.cb-rph,.cb-scored .cb-stageh{background:var(--surface-3)}
/* Belt and braces: nothing that scrolls may be visible through a frozen pane, so
   the four sticky regions declare an opaque paint of their own. A background-image
   cannot be knocked out by a later `background-color`, which is how the core tint
   defeated the rule above. */
.cb-corner-p,.cb-rph,.cb-scored .cb-stageh,.cb-p1 th,.cb-p2 th{
  background-image:linear-gradient(0deg,var(--surface-3),var(--surface-3));background-clip:padding-box}
.cb-ph-core{background-image:linear-gradient(0deg,var(--accent-weak),var(--accent-weak)),linear-gradient(0deg,var(--surface-3),var(--surface-3))}

.cb-corner-p{position:sticky;left:0;top:0;z-index:40;color:var(--muted);font-size:10px;font-weight:600;
  text-align:left;vertical-align:bottom;white-space:nowrap;line-height:1.5;padding:6px 9px;
  /* Two shadows, one per edge, so the frozen corner reads as a corner from both
     directions instead of only where the columns happen to end. */
  box-shadow:1px 0 0 var(--line),0 1px 0 var(--line)}

/* Parent headers. nowrap keeps the emoji on the same line as the label — it was
   taking a whole row to itself whenever the column was narrow. */
.cb-ph{padding:5px 9px;text-align:left;font-weight:700;font-size:11px;white-space:nowrap;cursor:pointer;
  color:var(--ink);border-bottom:2px solid var(--line-2);text-overflow:ellipsis}
.cb-rph{position:sticky;left:0;z-index:33;width:150px;min-width:150px;max-width:150px;padding:7px 9px;
  text-align:left;font-weight:700;font-size:11px;cursor:pointer;color:var(--ink);vertical-align:top;
  border-right:2px solid var(--line-2);box-shadow:1px 0 0 var(--line);overflow:hidden}
.cb-scored .cb-stageh{position:sticky;left:150px;z-index:32;box-shadow:1px 0 0 var(--line)}
/* ── Y.1258 · THE PHANTOM FIRST COLUMN ───────────────────────────────────────────────────────────────────
   Lars: "the strategic chessboard doesn't render properly here on the concept brief."
   The rule above pins the stage header 150px from the left of the scroll container. That number is the
   width of the FULL chessboard's other frozen column, `.cb-rph`, which sits at left:0 with the stage header
   beside it: two frozen panes, A1:B2, exactly as Y.1165 describes.
   The focused board on the concept brief has ONE header column and no `.cb-rph` at all, so the 150px offset
   pins the stage names 150px into a table where nothing occupies that space. The result is a blank column
   down the left of every body row while the header's corner cell, which is not sticky, stays put: the two
   halves of the table read as offset by one column, which is what a reader sees and calls broken.
   The rule was written for one table and matched two. Scoped now, by the table that actually has the second
   pane rather than by the class both share. */
table.cb-focused .cb-stageh{left:0}
table.cb-focused .cb-corner{position:sticky;left:0;z-index:33;background-image:linear-gradient(0deg,var(--surface-3),var(--surface-3));background-clip:padding-box;box-shadow:1px 0 0 var(--line)}
/* The two left columns must also clear the two top rows where they cross. */
.cb-ph{overflow:hidden}
.cb-ph:hover,.cb-rph:hover{background:var(--surface-2)}
.cb-ph:focus-visible,.cb-rph:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}
.cb-ph-i{margin-right:5px;font-size:12px}
.cb-ph-n{display:inline-block;margin-left:6px;padding:0 5px;border-radius:8px;background:var(--accent);
  color:var(--accent-ink);font-size:10px;line-height:15px;font-weight:700;vertical-align:middle}
/* ── Y.1165 · WHY THE FROZEN PANES STILL LEAKED ───────────────────────────────
   Raising the z-indexes to 30+ was necessary and not sufficient. Two rules were
   making the sticky headers THEMSELVES translucent, so the layering was correct
   and you could still see straight through them:

     --accent-weak is oklch(... / 0.13) — a 13%-alpha tint. Fine on a cell that
       scrolls, fatal on one that things scroll UNDER. Now the same tint is
       composited over an opaque base with a two-stop gradient, which gives the
       identical colour with no alpha left in the result.

     opacity:.62 applies to the whole element INCLUDING its background, which is
       the one thing a sticky cell may never be. Dimming is now done with the ink
       and the border, never with the layer.

   The rule this leaves behind: a sticky cell's background must be opaque, and
   `opacity` must never touch one. */
/* ── Y.1194 · the tier-2 count. Subordinate to .cb-ph-n on purpose: the tier-1 badge is a solid accent chip
   and this one is an outline, so two numbers on screen at once read as parent and child rather than as two
   competing figures. In the stage header it is pushed to the right edge by margin-left:auto, which keeps it
   off the wrapped stage name instead of trailing it mid-sentence. ── */
.cb-th-n{display:inline-block;margin-left:5px;padding:0 5px;border-radius:8px;background:var(--accent-weak);
  border:1px solid var(--accent-soft);color:var(--accent);font-size:9.5px;line-height:13px;font-weight:800;
  vertical-align:middle;white-space:nowrap}
.cb-sth .cb-th-n{margin-left:auto;flex:none;margin-top:2px}
.cb-rollup .cb-th-n{margin-left:6px}
.cb-ph-core{background:linear-gradient(0deg,var(--accent-weak),var(--accent-weak)),var(--surface-3)}
.cb-ph-thin{font-weight:600;color:var(--muted);border-color:var(--line)}
.cb-ph-thin .cb-ph-i{filter:grayscale(1)}
.cb-ph-thin .cb-ph-n{background:var(--line-2);color:var(--ink)}

/* ── Y.1164 · A PICKER THAT SHOWS THE COLOUR ───────────────────────────────────
   A native <option> cannot carry a swatch: macOS and iOS draw the popup with the
   system list widget and ignore almost all CSS on it. So this is a real listbox.
   Lars: "I can't distinguish at a glance." */
.swp{position:relative}
.swp-b{display:flex;align-items:center;gap:8px;width:100%;text-align:left;cursor:pointer}
.swp-c{margin-left:auto;opacity:.55;font-size:10px}
.swp-chip{display:inline-block;flex:none;border-radius:4px;border:1px solid transparent;
  box-shadow:inset 0 0 0 1px rgba(0,0,0,.06)}
/* "No accent" is a diagonal cut, not an empty square — an empty square reads as a
   white colour, which is a different answer. */
.swp-chip-none{background:linear-gradient(135deg,var(--surface-2) 46%,var(--line-2) 46%,var(--line-2) 54%,var(--surface-2) 54%);
  border-color:var(--line-2)}
.swp-l{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.swp-n{margin-left:auto;color:var(--muted);font-size:11px;font-variant-numeric:tabular-nums;white-space:nowrap}
.swp-m{position:absolute;z-index:60;left:0;right:0;top:calc(100% + 4px);margin:0;padding:4px;list-style:none;
  max-height:320px;overflow:auto;background:var(--surface);border:1px solid var(--line);border-radius:10px;
  box-shadow:var(--shadow)}
.swp-g{padding:6px 8px 3px;color:var(--muted);font-size:10px;font-weight:700;text-transform:uppercase;
  letter-spacing:.04em}
.swp-o{display:flex;align-items:center;gap:8px;padding:6px 8px;border-radius:7px;cursor:pointer;font-size:12.5px}
.swp-o:hover{background:var(--surface-2)}
.swp-on{background:var(--accent-weak)}
.swp-tick{width:12px;color:var(--accent);font-size:11px}

/* Y.1165 — an axis entry the CONCEPTS added, not the thesis. Dashed and slightly
   dimmed: the position is real (a concept derived it from its own diligence) but
   the synthesis never scored it, so its cells carry ventures without an
   opportunity number. Same visual grammar as .cb-unscored, which says the same
   thing one level down. */
.cb-added{border-left:2px dashed var(--line-2)}
.cb-added .cb-stagen{border-style:dashed;opacity:.8}

/* Y.1166 — the near-duplicate review strip. Proposals, never applied: a fuzzy
   detector whose output goes to a person is safe in a way a fuzzy matcher is not. */
.cb-dupes{margin-top:14px;border:1px solid var(--line);border-radius:10px;padding:10px 12px;background:var(--surface-2)}
.cb-dupes-h{font-size:12.5px;margin-bottom:8px}
.cb-dupe{display:grid;grid-template-columns:1fr auto;gap:6px 12px;align-items:center;padding:7px 0;border-top:1px solid var(--line)}
.cb-dupe:first-of-type{border-top:0}
.cb-dupe-l{font-size:12.5px;display:flex;align-items:center;gap:7px;flex-wrap:wrap}
.cb-dupe-k{font-size:10px;text-transform:uppercase;letter-spacing:.04em;color:var(--muted);font-weight:700}
.cb-dupe-o{padding:1px 7px;border:1px dashed var(--line-2);border-radius:999px;color:var(--muted)}
.cb-dupe-w{grid-column:1/2;font-size:11.5px;color:var(--muted)}
.cb-dupe-go{width:auto;padding:5px 12px;font-size:11.5px;grid-row:1/3;grid-column:2/3}

/* Y.1170 — the module tree is rendered in two blocks so the concept list can sit
   between the Concept Cockpit and everything else. They must read as ONE tree, so
   the seam carries no extra spacing. */
/* Y.1179 — the concept list is back at the BOTTOM of the nav, so it needs a rule
   above it: it is a different kind of thing from the module tree, and without a
   separator it reads as one more phase. */
.mc-cresults:not([hidden]){margin-top:10px;padding-top:10px;border-top:1px solid var(--line)}

/* Y.1175 — "you already sell this". Same anatomy as .ck-nextmove, warm rather than
   accent, because it interrupts rather than invites. It sits ABOVE the next-move CTA:
   a warning printed under the button it should stop is decoration. */
.ck-collide{display:flex;flex-wrap:wrap;align-items:flex-start;gap:12px;margin:0 0 10px;padding:12px 14px;
  border:1px solid var(--a-bd);border-radius:12px;background:var(--a-bg)}
.ck-collide .ck-nm-t{color:var(--a-ink)}
.ck-collide .ck-nm-body{flex:1 1 340px;min-width:0} /* Y.1278 - same anatomy, same break point. */
.ck-collide .ck-nm-d{color:var(--text);font-size:12.5px;line-height:1.45;margin-top:2px}

/* Y.1176 — a square the company already SELLS into. Distinct from both an occupied
   cell (which holds a concept) and an empty one (which holds nothing): this holds
   revenue. Hatched rather than filled, because it is a statement about the business
   rather than about the pipeline. */
.cb-held{background:repeating-linear-gradient(-45deg,transparent,transparent 6px,var(--g-bd) 6px,var(--g-bd) 7px)}
.cb-held-m{color:var(--g-ink);font-size:11px;opacity:.85}
/* Y.1185 — WHO OWNS THE GROUND UNDER THE SQUARE.
   Four readings, and the colour is the argument: fortress and unexploited are yours (green / indigo — an
   asset, worked or not), exposed and contested are someone else's (red / amber — a risk, live or latent).
   EXPOSED is the only one that gets a fill as well as a mark, because it is the only one that says something
   is wrong RIGHT NOW: you are selling on ground you do not own. The others are positions; that one is a bill.
   The mark sits in the corner rather than replacing the score — a square's opportunity number and its IP
   position are two different answers and must not overwrite each other. */
.cb-ipm{position:absolute;top:1px;right:2px;font-size:9px;line-height:1;opacity:.9;pointer-events:none}
.cb-sc{position:relative}
.cb-ipm-fortress{color:var(--g-ink)}
.cb-ipm-unexploited{color:var(--i-ink)}
.cb-ipm-exposed{color:var(--r-ink)}
.cb-ipm-contested{color:var(--a-ink)}
.cb-ip-exposed{background:var(--r-weak)}
.cb-ip-fortress .cb-held-m{color:var(--g-ink)}
.cb-ip-unexploited .cb-held-m{color:var(--i-ink)}
.cb-ip-exposed .cb-held-m{color:var(--r-ink)}
.cb-ip-contested .cb-held-m{color:var(--a-ink)}
.cb-legend .cb-ipm{position:static;font-size:10px;font-style:normal}
.cb-ipnote{color:var(--r-ink)}
/* Y.1192b — CORE on a tier-1 header. The band already tinted these; a tint is a thing you have to be told
   the meaning of, and the word is the meaning. Deliberately quiet: it marks the two or three groups the
   studio holds ground in, and a badge that shouted would make the other rows read as failures. */
.cb-core-b{display:inline-block;margin-left:6px;padding:0 5px;border-radius:99px;font-size:8.5px;font-weight:800;
  letter-spacing:.05em;text-transform:uppercase;color:var(--on-accent);background:var(--accent);vertical-align:1px}
.cb-ph-core .cb-core-b{background:var(--accent)}
/* Y.1192b — the settings dialog is tall and its pickers open downward; without this the typeface list
   escapes the panel instead of scrolling inside it. */
.mc-modal-ov .os-panel,.mc-modal-ov > div{max-height:88vh;overflow-y:auto}

/* Y.1190 — axis labels are no longer clipped, so they have to be allowed to wrap. Lars: "don't truncate
   those jobs in either place for now. I need the definition to read it." A job is a sentence about a
   circumstance; 30 characters of it is a label for something you already know the name of, which is the one
   reader this board is not for. */
.cb-jobh,.cb-stageh{white-space:normal;overflow-wrap:anywhere;line-height:1.25}
.cb-jobh{min-width:104px;max-width:190px}
.cv-x{white-space:normal;overflow-wrap:anywhere}

/* Y.1189 — the session-expired banner. Deliberately not a toast: a toast disappears, and the condition it
   describes does not. Everything on screen is stale from the moment this appears, so it stays until the
   person acts or a refresh succeeds and main.js removes it. */
.sos-authlost{position:fixed;left:50%;transform:translateX(-50%);bottom:18px;z-index:9999;display:flex;gap:10px;align-items:center;
  background:var(--r-weak);border:1px solid var(--r-ink);color:var(--ink);border-radius:10px;padding:9px 14px;font-size:13px;box-shadow:var(--shadow)}
.sos-authlost button{background:var(--r-ink);color:var(--on-accent);border:0;border-radius:7px;padding:5px 11px;font:inherit;font-size:12px;font-weight:600;cursor:pointer}


/* Y.1177 — `--bg-2` and `--ink-2` were never defined in this stylesheet, so every
   rule reaching for them fell back to a hardcoded light colour and stayed light in
   dark mode — a white card with theme-aware text inside it, which is how the IP
   catalogue ended up unreadable. Second undefined-token bug this session; the first
   was var(--card) on the sticky headers. See check-csstokens. */

/* ── Y.1177 · TOKENS THAT WERE BEING READ AND NEVER DEFINED ────────────────────
   check-csstokens found eleven. Every one is a reader left behind when a token was
   renamed, and every one silently ignored the theme: with no fallback it resolved
   to nothing, and with a fallback — the more common case — it froze a hardcoded
   colour that looked fine in light mode and wrong in dark.

   Defined as aliases rather than chased through every call site, because that is
   what they always meant. `--good` is `--ok`; `--panel` is `--surface-2`. Aliasing
   fixes every use at once and makes the intent legible; hunting them one at a time
   would leave the next rename in exactly the same position. */
:root, [data-theme] {
  --panel: var(--surface-2);
  --border: var(--line-2);
  --brand: var(--accent);
  --on-accent: var(--accent-ink);
  --text-2: var(--muted);
  --good: var(--ok);
  --bad: var(--r-ink);
  --warn: var(--a-ink);
  --o-ink: var(--a-ink);
  --a-weak: var(--a-bg);
  --r-weak: var(--r-bg);
}

/* Y.1191 — the header-brand radio shows the matched logo, so "Your name · Crucible" stops being a sentence
   about names when there is a picture available to make the choice with. */
.os-hb-logo{height:16px;max-width:110px;object-fit:contain;vertical-align:-3px;border-radius:2px}

/* ── Y.1205 · THE PARENT HEADERS STOP BEING SHORTENED, AND THE CORE BANDS SHOW ────
   Lars: "Strategic chessboard still has truncated headers. Also can we highlight the
   entire core column and row? … Also don't truncate the concept names. Also, let's
   map existing product lines in the chessboard too and label as 'current' vs 'new'."

   THE TRUNCATION WAS NOT A STYLING CHOICE, IT WAS A CONSEQUENCE. Tier 2 sticks below
   tier 1, so its `top` had to equal tier 1's height, so Y.1165 nailed tier 1 to 30px
   with its overflow clipped, so the label had to be shortened to fit. Every step of
   that was reasonable and the visible result was an ellipsis on the two labels the
   whole board is organised BY. The offset is measured now (see chessboard.js) and
   the chain unwinds from the bottom: the header wraps, its row grows, the second row
   follows it down.

   These rules are APPENDED rather than edited in place. Each one repeats a selector
   that already exists above at the same specificity, so the cascade resolves it by
   order — and the Y.1165 block keeps its comment explaining why it was written the
   way it was, which is the part worth keeping when a rule is overturned.

   THE CORE BAND IS DRAWN WITH background-image, NEVER `background`. A scored cell
   paints its opportunity ink inline as background-color; two properties, two owners,
   nothing to fight over. The intersection stacks both tints and so reads stronger
   than either band, without a third rule having to decide what an intersection is. */
/* Both are declared here even though --cb-p1h is written by JS on .cb-wrap: a token
   read by a rule must be written by a rule (check-csstokens, Y.1177), and the value
   here is the honest fallback for the moment before the first measurement lands. */
/* Y.1207 — the two frozen header columns, narrowed and made to STICK at their width.
   They were 172px each in intent and 240/290 in fact: `max-width` on a table cell is
   advisory in the auto layout algorithm, and a width:100% table hands its surplus to
   whatever column will take it. The <colgroup> in chessboard.js is what enforces these
   now; these variables are the single number both it and the sticky `left` read. */
:root{--cb-rphw:146px;--cb-stagew:162px;--cb-p1h:34px}

/* tier 1: wraps, and its height is now a measurement rather than a constant */
.cb-p1 th:not(.cb-corner-p){height:auto;line-height:1.3;overflow:visible;white-space:normal;
  padding-top:6px;padding-bottom:6px}
.cb-p2 th{top:var(--cb-p1h,34px)}
.cb-ph{white-space:normal;overflow:visible;text-overflow:clip;min-width:134px;overflow-wrap:anywhere}
.cb-ph-i{display:inline-block;margin-right:4px}
.cb-col-rph{width:var(--cb-rphw)}
.cb-col-stage{width:var(--cb-stagew)}
/* overflow-wrap:anywhere is load-bearing, not cosmetic: it lowers the cell's MIN-CONTENT
   width to a single character, which is the only thing that lets a column honour a width
   narrower than its longest word. Without it "Administrative," sets the floor. */
.cb-rph{width:var(--cb-rphw);min-width:var(--cb-rphw);max-width:var(--cb-rphw);
  white-space:normal;overflow:visible;overflow-wrap:anywhere;padding:7px 8px}
/* Same floor on the tier-2 COLUMN headers, which wrap for the same reason and can be
   squeezed by the same pressure. */
.cb-jobh{min-width:118px}
/* ── Y.1209 · overflow-wrap:anywhere NEEDS A FLOOR ─────────────────────────────
   `min-width:0` here was Y.1207's bug and it is the exact cost of the trick that made
   the narrowing work. `overflow-wrap:anywhere` drops a cell's MIN-content width to one
   character — which is what lets a column honour a width narrower than its longest
   word, and also what lets it collapse to one character when the table runs out of
   room. On a board with twenty job columns the total min-width exceeds the viewport,
   the algorithm squeezes every column that will squeeze, and this one squeezed to
   nothing: "Core Integration" rendered one letter per line.
   The floor and the wrap are two separate needs and both have to be stated. */
table.cb-focused .cb-stageh{left:0}  /* Y.1258 — and again here: this block re-asserts the two-pane offset. */
.cb-scored .cb-stageh{left:var(--cb-rphw);width:var(--cb-stagew);min-width:var(--cb-stagew);max-width:none;
  overflow-wrap:anywhere;padding:7px 8px}
/* The parent badges wrap under the name instead of widening the column to hold a row of them. */
.cb-rph .cb-core-b,.cb-rph .cb-ph-n{margin-top:3px}

/* A column header names the buyer AND the job. `customer || job` printed one and
   dropped the other, which is a truncation the eye cannot even see happening. */
.cb-jobh-c{display:block;font-weight:700}
.cb-jobh-j{display:block;font-weight:400;font-size:10px;line-height:1.25;margin-top:1px;color:var(--muted)}

/* The core row and the core column, the full height and width of each. */
.cb-scored td.cb-cc,.cb-scored td.cb-cr{
  background-image:linear-gradient(0deg,var(--accent-weak),var(--accent-weak))}
.cb-scored td.cb-cc.cb-cr{
  background-image:linear-gradient(0deg,var(--accent-weak),var(--accent-weak)),
                   linear-gradient(0deg,var(--accent-weak),var(--accent-weak))}
/* The band runs through the headers too, and those are sticky — so the tint has to be
   composited over an opaque base, exactly as .cb-ph-core does. A sticky cell's
   background may never carry alpha; things scroll under it. */
.cb-p2 th.cb-hcore,.cb-scored .cb-stageh.cb-hcore{
  background-image:linear-gradient(0deg,var(--accent-weak),var(--accent-weak)),
                   linear-gradient(0deg,var(--surface-3),var(--surface-3))}

/* Concept names in full. The cell gets wider to pay for it; a name you cannot read is
   not worth the column inches it was saving. */
.cb-sc{min-width:114px}
.cb-pick{align-items:flex-start}
.cb-pick-t{white-space:normal;overflow:visible;text-overflow:clip;overflow-wrap:anywhere;line-height:1.25}
.cb-pickname{white-space:normal;overflow-wrap:anywhere}

/* CURRENT vs NEW. A product line ships and carries no opportunity score, because it is
   not an opportunity — so it is drawn flat, unclickable, and marked ▦ where a concept
   carries its number. The two keys only appear on a cell holding both kinds: on a cell
   of nothing but concepts, "New" would be true of every chip, and a label that is
   always true is not a label. */
.cb-picks-k{display:block;font-size:8px;line-height:1.5;letter-spacing:.07em;text-transform:uppercase;
  color:var(--muted);font-weight:800;text-align:left;margin-top:3px}
.cb-picks-k:first-child{margin-top:0}
.cb-pick-cur{cursor:default;border-color:var(--line-2);background:var(--surface-2)}
/* ── Y.1325 · VIEW AS ───────────────────────────────────────────────────────────────────────────────────
   A borrowed seat has to be impossible to forget you are in — so the bar is the full width of the app, above
   everything, in the accent rather than in a muted chrome grey. At rest (viewing as yourself) it recedes to a
   thin strip so it is not a permanent alarm about a normal state. */
.mc-viewas{display:flex;align-items:center;gap:14px;flex-wrap:wrap;padding:8px 16px;
  background:color-mix(in srgb, var(--accent) 88%, black);color:#fff;font-size:12.5px;position:relative;z-index:140}
.mc-viewas-t{font-weight:600;letter-spacing:.01em}
.mc-viewas-a{display:flex;align-items:center;gap:7px;margin-left:auto;flex-wrap:wrap}
.mc-viewas-b{font:inherit;font-size:12px;font-weight:600;cursor:pointer;padding:4px 11px;border-radius:999px;
  border:1px solid rgba(255,255,255,.42);background:transparent;color:#fff}
.mc-viewas-b:hover{background:rgba(255,255,255,.16)}
.mc-viewas-b.on{background:#fff;color:var(--accent);border-color:#fff}
.mc-viewas-x{border-color:#fff;background:#fff;color:var(--accent)}
.mc-viewas-hid{display:none}
/* Viewing as yourself is the normal state and gets normal weight: a strip, not a warning. */
.mc-viewas-off{background:var(--surface-2);color:var(--muted);border-bottom:1px solid var(--line);padding:5px 16px;font-size:11.5px}
.mc-viewas-off .mc-viewas-b{border-color:var(--line-2);color:var(--muted)}
.mc-viewas-off .mc-viewas-b:hover{background:var(--surface);color:var(--ink)}
.mc-viewas-off .mc-viewas-b.on{background:var(--accent);color:#fff;border-color:var(--accent)}

/* ── Y.1322 · A FENCED SQUARE HAS TO LOOK FENCED ────────────────────────────────────────────────────────
   `cb-pick-pf` was applied by chessboard.js and had no rule here, so the one chip on the board that means
   "the fund already operates this — nothing gets generated on top of it" was styled exactly like a product
   line. The name was present and invisible, which is the same as absent.
   The chip gets the accent and its own ◈; the CELL gets a hatch and a solid edge, because "do not build
   here" is a property of the ground, not of the label sitting on it. */
.cb-pick-pf{border-color:var(--accent);background:color-mix(in srgb, var(--accent) 15%, transparent);color:var(--ink)}
.cb-pick-pf .cb-pick-n{color:var(--accent)}
.cb-pick-pf .cb-pick-t{font-weight:600}
.cb-sc.cb-pf-held{outline:1.5px solid color-mix(in srgb, var(--accent) 62%, transparent);outline-offset:-1.5px;
  background-image:repeating-linear-gradient(135deg,color-mix(in srgb, var(--accent) 11%, transparent) 0 5px,transparent 5px 11px)}
.cb-sc.cb-pf-held .cb-score{opacity:.55}   /* the score is still true, but it is no longer the headline here */
.cb-pick-cur .cb-pick-n{color:var(--muted)}
.cb-pick-cur:hover{border-color:var(--line-2);box-shadow:none}
/* Novelty is a different axis from distance, so it is marked by highlighting the distance letter rather than
   by adding a glyph beside it. The first attempt appended ✦, which renders as a plus sign wherever that
   codepoint is missing — a mark whose meaning depends on the reader's font stack is not a mark. */
.cb-pick-novel{background:var(--accent);color:var(--accent-ink);border-radius:4px;padding:0 3px;opacity:1}

/* Y.1205 — one row where there were three stacked blocks. An opened explainer takes a
   line of its own rather than stretching the row it sits in.
   Y.1206 — and the row moved BELOW the board, because a row above it is still a row.
   Only the horizon lens stays on top: it changes what the board shows, so it has to be
   within reach of the thing it changes. */
.cb-bar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:0 0 8px}
.cb-bar-after{margin:14px 0 6px}
.cb-lens{margin:4px 0 10px}
.cb-bar .xp{margin:0}
.cb-bar .xp[open]{flex:1 0 100%}
.cb-bar .cb-lens{margin:0 0 0 auto}
.cb-relab .cb-dupe{border-top:0}

/* Y.1210 — the credit-grant control in Workspace settings. One row, because it is one
   sentence: give THIS many to THAT workspace. */
.os-grant{display:flex;gap:6px;align-items:center;flex-wrap:wrap}
.os-grant-note:empty{display:none}

/* Y.1294 — hygiene: the RECOMMENDED action wears the app's primary accent (.ck-run); resized to the row scale
   the ghost buttons beside it already use, so highlight is the only difference. */
.hy-item-acts .ck-run{font-size:11px;padding:3px 9px}
/* Y.1298 - .btn is the auth-form full-width block, so every hygiene ghost button (row alternatives
   AND the group-level Fold all in / Keep all apart) rendered as a page-wide bar while the recommended
   .ck-run stayed compact. Lars: the recommendation and the alternative should be the same size button.
   One compact scale for every action on the card; highlight remains the only difference. */
.hy-acts{display:flex;flex-wrap:wrap;gap:6px;margin-top:10px}
.hy-acts .btn{width:auto;margin:0;font-size:11px;padding:3px 9px}
/* Y.1294 — opportunity bank: sortable SCORE column (stack rank) + per-row basis hint, and the board legend
   explaining color = total-score tier vs position = attractiveness x feasibility. */
.ob-th-sort{cursor:pointer;user-select:none;white-space:nowrap}
.ob-basis{display:block;font-size:9px;color:var(--muted);text-transform:uppercase;letter-spacing:.05em;margin-top:1px}
/* Y.1298 - the legend had no grid placement, so auto-flow crammed it into the 18px ylab column
   (row 2, col 1): a one-word-per-line vertical strip overflowing onto the Concepts heading below.
   Span both columns on its own row instead. */
.afm-legend{grid-column:1/-1;grid-row:3;margin-top:6px;max-width:660px}
