:root{--ground:var(--viz-ground);--paper:var(--viz-paper);--white:var(--viz-raised);--ink:var(--viz-ink);--grey:var(--viz-grey);--faint:var(--viz-faint);--rule:var(--viz-rule);--blue:var(--viz-brand-blue);--blue-l:var(--viz-highlight);--cyan:var(--viz-brand-cyan);--amber:var(--viz-brand-amber);--amber-l:color-mix(in srgb,var(--viz-brand-amber) 16%,var(--viz-paper));--cyan-l:color-mix(in srgb,var(--viz-brand-cyan) 14%,var(--viz-paper));--sans:'IBM Plex Sans',system-ui,-apple-system,Segoe UI,sans-serif;--mono:'IBM Plex Mono',ui-monospace,Menlo,monospace}
/* ==== Design tokens: the ONLY styling API. Core CSS uses these, never literals, for type, spacing, borders, radii,
   shadows and stacking; domain plugins use none of it directly (they use the classes catalogued in references/LAYOUT.md).
   Colours: the --viz-* palette (viz-tokens.css) and the app aliases above. Every value here reproduces the gold build
   exactly (the layout gate compares computed styles), so a token may be retuned only with a baseline re-capture. */
:root{
  /* type scale (px). Steps 2,4,6,8,10,12 are the half-steps the gold uses; prefer the whole steps in new core CSS */
  --fs-1:9px;--fs-2:9.5px;--fs-3:10px;--fs-4:10.5px;--fs-5:11px;--fs-6:11.5px;--fs-7:12px;--fs-8:12.5px;--fs-9:13px;
  --fs-10:13.5px;--fs-11:14px;--fs-12:14.5px;--fs-13:15px;--fs-14:16px;--fs-15:17px;--fs-16:18px;--fs-17:19px;
  --fs-18:20px;--fs-19:21px;--fs-20:22px;--fs-21:26px;--fs-22:40px;
  /* line heights, letter spacing, weights */
  --lh-100:1;--lh-110:1.1;--lh-120:1.2;--lh-128:1.28;--lh-130:1.3;--lh-135:1.35;--lh-140:1.4;--lh-145:1.45;--lh-150:1.5;
  --lh-155:1.55;--lh-160:1.6;--lh-165:1.65;--lh-170:1.7;--lh-icon:18px;
  --ls-n20:-.02em;--ls-n15:-.015em;--ls-n10:-.01em;--ls-n05:-.005em;--ls-01:.01em;--ls-02:.02em;--ls-06:.06em;--ls-08:.08em;
  --ls-10:.1em;--ls-12:.12em;--ls-14:.14em;
  --fw-regular:400;--fw-medium:500;--fw-semibold:600;--fw-bold:700;
  /* spacing: --sp-N = N x 4px (N may be fractional: --sp-1_5 = 6px) */
  --sp-0_25:1px;--sp-0_5:2px;--sp-0_75:3px;--sp-1:4px;--sp-1_25:5px;--sp-1_5:6px;--sp-1_75:7px;--sp-2:8px;--sp-2_25:9px;
  --sp-2_5:10px;--sp-2_75:11px;--sp-3:12px;--sp-3_25:13px;--sp-3_5:14px;--sp-4:16px;--sp-4_5:18px;--sp-5:20px;--sp-5_5:22px;
  --sp-6:24px;--sp-6_5:26px;--sp-7:28px;--sp-7_5:30px;--sp-8:32px;--sp-9:36px;--sp-9_5:38px;--sp-10:40px;--sp-12:48px;
  --sp-13:52px;--sp-14:56px;--sp-16:64px;--sp-18:72px;--sp-20:80px;--sp-22_5:90px;--sp-30:120px;
  /* borders, focus ring, radii, shadows */
  --bw-1:1px;--bw-1_5:1.5px;--bw-2:2px;--bw-3:3px;--ring-offset:2px;
  --radius-s:4px;--radius-pill:11px;--radius-round:50%;
  --shadow-tip:0 2px 6px color-mix(in srgb,var(--viz-ink) 14%,transparent);
  --shadow-dock:0 -2px 8px color-mix(in srgb,var(--viz-ink) 10%,transparent);
  --shadow-runbar:0 -6px 14px -10px color-mix(in srgb, var(--viz-ink) 45%, transparent);
  --shadow-slide:-10px 0 24px -12px color-mix(in srgb,var(--viz-ink) 45%,transparent);
  --shadow-pop:0 12px 30px -16px color-mix(in srgb,var(--viz-ink) 50%,transparent);
  /* stacking order, lowest first */
  --z-raise:1;--z-tip:3;--z-sticky:4;--z-handle:5;--z-toast:9;--z-slide-scrim:44;--z-slide:45;--z-slide-close:46;
  --z-overlay:50;--z-float-scrim:54;--z-float:55;--z-pop-scrim:57;--z-pop:58;--z-dialog:60;
  /* region geometry (the layout contract: references/LAYOUT.md) */
  --appbar-h:56px;--foot-h:26px;--home-max:1180px;--canvas-max:860px;
  --rail-w:clamp(220px,23.3vw,380px);--panel-w:clamp(250px,27.8vw,440px);
  /* the Lab's Run buttons: one width whatever the label (a long label wraps inside); full width on phones */
  --run-w:240px;
  /* breakpoints: media queries cannot read custom properties, so these are documentation + the values web/app.js
     reads (BREAKPOINTS); every @media/@container width in this file must be one of them (tests/test_style_tokens.py) */
  --bp-wide:1240px;--bp-desktop:1000px;--bp-tablet:900px;--bp-phone:700px;--bp-card-narrow:640px;
}
*{box-sizing:border-box}
html,body{margin:0;height:100%;background:var(--ground);color:var(--ink);font-family:var(--sans);font-size:var(--fs-11)}
body{display:flex;flex-direction:column;min-height:100vh}
a{color:var(--blue)}
button{font-family:inherit;font-size:inherit;color:inherit;cursor:pointer}
.mono{font-family:var(--mono)}
.lbl{font-family:var(--mono);font-size:var(--fs-3);font-weight:var(--fw-medium);letter-spacing:var(--ls-08);text-transform:uppercase;color:var(--grey)}
.status{font-family:var(--mono);font-size:var(--fs-4);color:var(--grey)}
.muted{color:var(--grey)}
.ghost{color:var(--grey)}
.prov{font-family:var(--mono);font-size:var(--fs-3);color:var(--grey);min-width:0;max-width:100%;overflow-wrap:anywhere}
.srcpath{cursor:help}
.num{font-family:var(--mono);color:var(--viz-ink);border:0;border-bottom:var(--bw-1) dotted var(--viz-brand-blue);background:transparent;padding:0}
.num.cmp{color:var(--ink);border-bottom-color:var(--viz-brand-blue)}
.link{border:0;border-bottom:var(--bw-1) dotted var(--blue);background:transparent;padding:0;color:var(--blue);font-family:var(--mono);font-size:var(--fs-4)}
.chip{border:var(--bw-1) solid var(--rule);background:transparent;padding:var(--sp-1_25) var(--sp-2_5);font-family:var(--mono);font-size:var(--fs-3);letter-spacing:var(--ls-06);text-transform:uppercase;min-height:28px}
.chip:hover{border-color:var(--ink)}
.chip.on{background:var(--ink);color:var(--paper);border-color:var(--ink)}
.sq{width:24px;height:24px;border:var(--bw-1) solid var(--rule);background:transparent;padding:0;font-family:var(--mono);font-size:var(--fs-9);line-height:var(--lh-100);flex-shrink:0;display:inline-flex;align-items:center;justify-content:center}
.sq.on{background:var(--ink);color:var(--paper);border-color:var(--ink)}
.ibtn{width:22px;height:22px;border-radius:var(--radius-round);border:var(--bw-1) solid var(--rule);background:transparent;padding:0;font-style:italic;font-weight:var(--fw-semibold);font-size:var(--fs-7);color:var(--grey);flex-shrink:0}
.tag{font-family:var(--mono);font-size:var(--fs-2);padding:var(--sp-0_5) var(--sp-1_5);border:var(--bw-1) solid var(--rule);color:var(--grey);white-space:nowrap}
.tag.a{border-color:var(--amber);color:var(--amber)}
.tag.c{border-color:var(--cyan);color:var(--cyan)}
.scroll{overflow:auto}

/* app bar */
.appbar{display:flex;align-items:center;gap:var(--sp-7);height:var(--appbar-h);padding:0 var(--sp-6);background:var(--paper);border-bottom:var(--bw-1) solid var(--rule);flex-shrink:0}
.brand{display:flex;align-items:center;gap:var(--sp-3);text-decoration:none;color:var(--ink)}
.logo{height:22px;width:auto}
.nexus{font-weight:var(--fw-medium);font-size:var(--fs-15);letter-spacing:var(--ls-01);padding-left:var(--sp-3_5);border-left:var(--bw-1) solid var(--rule)}
.tabs{display:flex;gap:var(--sp-1);height:100%}
.tabs a{display:flex;align-items:center;padding:0 var(--sp-3_5);text-decoration:none;color:var(--ink);border-bottom:var(--bw-2) solid transparent;font-size:var(--fs-10)}
.tabs a.on{border-bottom-color:var(--blue);font-weight:var(--fw-semibold)}
.session{margin-left:auto;font-size:var(--fs-4);color:var(--grey);min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
/* on a desktop bar the model label gives way first: the brand, the tabs and the icons never shrink, so tab positions
   never depend on the label's length (below 1000px the bar wraps by design: see the max-width:999px rules) */
@media (min-width:1000px){.appbar>.brand,.appbar>.tabs,.appbar>.hdricons{flex-shrink:0}}
main{flex-grow:1;display:flex;flex-direction:column;min-height:0;height:calc(100vh - var(--appbar-h))}

/* home */
.home{padding:var(--sp-18) var(--sp-20);display:flex;flex-direction:column;gap:var(--sp-8);max-width:var(--home-max)}
.home h1{margin:0;font-size:var(--fs-22);line-height:var(--lh-110);letter-spacing:var(--ls-n15);font-weight:var(--fw-bold)}
.home h2{margin:0;font-size:var(--fs-20);font-weight:var(--fw-regular);color:var(--grey)}
.tiles{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--sp-4)}
.tile{background:var(--paper);border:var(--bw-1) solid var(--rule);padding:var(--sp-5) var(--sp-5_5);text-align:left;display:flex;flex-direction:column;gap:var(--sp-2);min-height:150px;text-decoration:none;color:var(--ink)}
.tile:hover{border-color:var(--ink)}
.tile b{font-size:var(--fs-15)}
.caveats{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--sp-4)}
.caveat{border-top:var(--bw-2) solid var(--ink);padding-top:var(--sp-2);font-size:var(--fs-8);line-height:var(--lh-150);color:var(--grey)}
.caveat b{color:var(--ink);display:block;margin-bottom:var(--sp-1)}

/* lab */
.lab{flex-grow:1;display:grid;grid-template-columns:var(--w-left,var(--rail-w)) minmax(0,1fr) var(--w-right,var(--panel-w));min-height:0}
.rail{display:flex;flex-direction:column;border-right:var(--bw-1) solid var(--rule);background:var(--paper);min-height:0}
.rail .inner{flex-grow:1;overflow:auto;padding:var(--sp-5_5) var(--sp-5);display:flex;flex-direction:column;gap:var(--sp-5)}
.railhead{display:flex;align-items:center;gap:var(--sp-1_5)}
.railhead .lbl{flex-grow:1}
.thread{display:flex;flex-direction:column;gap:var(--sp-1_5)}
.thread .fam{font-size:var(--fs-5);color:var(--grey);margin-bottom:var(--sp-0_5)}
.qbtn{display:flex;gap:var(--sp-2_5);align-items:baseline;border:var(--bw-1) solid var(--rule);background:transparent;padding:var(--sp-2_5) var(--sp-3);text-align:left;min-height:36px;width:100%}
.qbtn.on{border-color:var(--blue)}
.qbtn .n{font-family:var(--mono);font-size:var(--fs-3);color:var(--grey);flex-shrink:0}
.qbtn.on .n{color:var(--blue)}
.qbtn.follow{margin-left:var(--sp-3_5);width:calc(100% - 14px)}
.qbtn span{font-size:var(--fs-8);line-height:var(--lh-135)}
.qbtn.done span{font-weight:var(--fw-semibold)}
.brief summary{cursor:pointer}
.brief button{display:block;width:100%;text-align:left;border:0;border-top:var(--bw-1) dotted var(--rule);background:transparent;padding:var(--sp-1_75) 0;font-size:var(--fs-7);line-height:var(--lh-135)}
.brief .st{font-family:var(--mono);font-size:var(--fs-1);color:var(--grey);letter-spacing:var(--ls-06)}
.askform{display:flex;border-top:var(--bw-1) solid var(--rule);padding:var(--sp-3) var(--sp-4_5);flex-shrink:0}
.askform input{flex-grow:1;min-width:0;height:40px;border:var(--bw-1) solid var(--rule);border-right:0;background:var(--ground);padding:0 var(--sp-2_5);font-family:var(--sans);font-size:var(--fs-9)}
.askform button{height:40px;padding:0 var(--sp-3_5);border:var(--bw-1) solid var(--ink);background:var(--ink);color:var(--paper);font-family:var(--mono);font-size:var(--fs-3);letter-spacing:var(--ls-10);text-transform:uppercase}
.settings{display:flex;flex-direction:column;gap:var(--sp-2);border-top:var(--bw-1) dashed var(--ink);padding-top:var(--sp-3)}
.canvas{overflow:auto;padding:var(--sp-7) var(--sp-9) var(--sp-10);display:flex;flex-direction:column;gap:var(--sp-4_5);min-height:0}
.canvas>*{max-width:var(--canvas-max);width:100%}
.empty{padding:var(--sp-12) 0;display:flex;flex-direction:column;gap:var(--sp-3);max-width:560px}
.empty p{margin:0}
.qline{display:flex;gap:var(--sp-2_5);align-items:baseline;font-size:var(--fs-13);font-weight:var(--fw-semibold);padding-top:var(--sp-1_5)}
.qline .n{font-family:var(--mono);font-size:var(--fs-4);color:var(--blue)}
.thin{display:flex;align-items:center;gap:var(--sp-3);min-height:40px;padding:0 var(--sp-3);border:var(--bw-1) solid var(--rule);background:var(--paper)}
.thin.dashed{border-style:dashed;background:transparent}
.thin .lbl{width:84px;flex-shrink:0}
.thin .t{font-size:var(--fs-9);font-weight:var(--fw-semibold);flex-shrink:0}
.thin .s{flex-grow:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.lock{width:10px;height:12px;flex-shrink:0}

/* scenario card */
.sc{background:var(--paper);border:var(--bw-1) solid var(--ink);display:flex;flex-direction:column}
.sc .sec{padding:var(--sp-4_5) var(--sp-6_5)}
.sc .q{font-size:var(--fs-14);line-height:var(--lh-150);font-weight:var(--fw-semibold)}
.sc .ph{border:0;background:transparent;padding:0 var(--sp-0_25);font:inherit;border-bottom:var(--bw-2) solid transparent}
.sc .why{font-size:var(--fs-9);font-style:italic;color:var(--grey);line-height:var(--lh-145)}
.sc .wrote{border-top:var(--bw-2) solid var(--blue);background:var(--white)}
.sc.locked .wrote{border-top-color:var(--grey)}
.sc .line{display:grid;grid-template-columns:170px 150px minmax(0,1fr) auto;gap:var(--sp-3);align-items:center;padding:var(--sp-1_5) var(--sp-2);margin:0 calc(-1 * var(--sp-2));border-left:var(--bw-2) solid transparent}
.sc .line.hl{background:var(--blue-l);border-left-color:var(--blue)}
.sc .line .v{font-family:var(--mono);font-size:var(--fs-6);color:var(--blue)}
.sc .line.kept .v,.sc .line.kept .nm{color:var(--grey)}
.sc .fixed{border-top:var(--bw-1) solid var(--rule);background:var(--ground);color:var(--grey);font-size:var(--fs-8);line-height:var(--lh-150)}
.sc .checks{border-top:var(--bw-1) solid var(--rule);display:flex;flex-direction:column;gap:var(--sp-1_25)}
.sc .ck{display:grid;grid-template-columns:16px minmax(0,1fr);gap:var(--sp-2);font-size:var(--fs-9);line-height:var(--lh-145)}
.sc .foot{display:flex;justify-content:space-between;align-items:center;gap:var(--sp-4);border-top:var(--bw-1) dashed var(--ink);padding-top:var(--sp-2_5);margin-top:var(--sp-1_5)}
.run{height:36px;padding:0 var(--sp-5);border:0;background:var(--ink);color:var(--paper);font-family:var(--mono);font-size:var(--fs-3);letter-spacing:var(--ls-12);text-transform:uppercase;flex-shrink:0}
pre.json{margin:0;padding:var(--sp-2_5) var(--sp-3);background:var(--ink);color:var(--paper);font-family:var(--mono);font-size:var(--fs-4);line-height:var(--lh-150);white-space:pre-wrap;max-height:320px;overflow:auto}

/* running */
.running{background:var(--paper);border:var(--bw-1) solid var(--ink);padding:var(--sp-4_5) var(--sp-5_5);display:flex;flex-direction:column;gap:var(--sp-2_5)}
.bar{height:6px;background:var(--rule);position:relative}
.bar i{position:absolute;left:0;top:0;bottom:0;background:var(--ink);transition:width .2s}

/* result */
.res{background:var(--paper);border:var(--bw-1) solid var(--rule);padding:var(--sp-5_5) var(--sp-6_5) var(--sp-6);display:flex;flex-direction:column;gap:var(--sp-5)}
.reshead{display:flex;align-items:center;gap:var(--sp-2_5);flex-wrap:wrap}
.reshead .views{margin-left:auto;display:flex;gap:var(--sp-1_5);align-items:center}
.res h2{margin:0;font-size:var(--fs-17);line-height:var(--lh-135);font-weight:var(--fw-bold);letter-spacing:var(--ls-n05);max-width:52ch}
.kpis{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--sp-7)}
.kpi{display:flex;flex-direction:column;gap:var(--sp-1);border-top:var(--bw-2) solid var(--ink);padding-top:var(--sp-2)}
.kpi .big{font-size:var(--fs-21);font-weight:var(--fw-semibold);letter-spacing:var(--ls-n20);align-self:flex-start}
.kpi .cap{font-size:var(--fs-8)}
.chartwrap{display:flex;flex-direction:column;gap:var(--sp-1_5);max-width:var(--canvas-max)}
.chart{width:100%;height:auto;display:block}
.legend{display:flex;gap:var(--sp-3_5);flex-wrap:wrap;font-family:var(--mono);font-size:var(--fs-3);color:var(--grey)}
.legend .lg{display:flex;align-items:center;gap:var(--sp-1_5)}
.legend i{width:14px;height:3px;display:inline-block}
.legend i.band{height:8px;background:var(--viz-grey);opacity:var(--viz-opacity-band)}
table.t{border-collapse:collapse;width:100%;font-size:var(--fs-8)}
table.t th{font-family:var(--mono);font-size:var(--fs-3);font-weight:var(--fw-medium);letter-spacing:var(--ls-06);text-transform:uppercase;color:var(--grey);text-align:left;padding:var(--sp-1_75) var(--sp-1_5);border-bottom:var(--bw-1_5) solid var(--viz-ink);position:sticky;top:0;background:var(--viz-raised)}
table.t td{padding:var(--sp-2) var(--sp-2);border-bottom:var(--bw-1) solid var(--viz-rule);vertical-align:top}
table.t tbody tr:hover td,table.t tbody tr.on td{background:var(--viz-highlight)}
table.t td.r{font-family:var(--mono);font-variant-numeric:tabular-nums}
table.t td.r,table.t th.r{text-align:right}
.drivers{border-top:var(--bw-2) solid var(--ink);padding-top:var(--sp-3);display:flex;flex-direction:column;gap:var(--sp-2)}
.verdict{font-size:var(--fs-8);border:var(--bw-1) solid var(--rule);padding:var(--sp-2) var(--sp-2_5);background:var(--white)}

/* right panel */
.panel{display:flex;flex-direction:column;border-left:var(--bw-1) solid var(--rule);background:var(--paper);min-height:0}
.panel .inner{overflow:auto;padding:var(--sp-6) var(--sp-6_5) var(--sp-8);display:flex;flex-direction:column;gap:var(--sp-4_5);min-height:0}
.phead{display:flex;justify-content:space-between;align-items:baseline;gap:var(--sp-3)}
.phead .lbl{border-bottom:var(--bw-2) solid var(--blue);padding-bottom:var(--sp-1_5);color:var(--blue);flex-grow:1}
.psec{display:flex;flex-direction:column;gap:var(--sp-2);border-top:var(--bw-2) solid var(--ink);padding-top:var(--sp-3)}
/* a panel's own dropdowns (a run's measure, its comparison) read at the size of the text around them, like the run list's filters */
.psec select{height:32px;align-self:flex-start;min-width:260px;max-width:100%;border:var(--bw-1) solid var(--rule);background:var(--paper);padding:0 var(--sp-2);font-family:var(--sans);font-size:var(--fs-8);color:var(--ink)}
.kv{display:grid;grid-template-columns:104px minmax(0,1fr);gap:var(--sp-3);padding:var(--sp-2) 0;border-top:var(--bw-1) dotted var(--rule);font-size:var(--fs-7)}
.kv>span{min-width:0;overflow-wrap:anywhere}
.stack{display:flex;flex-direction:column}
.stk{display:flex;flex-direction:column;gap:var(--sp-0_75);padding:var(--sp-2) 0;border-top:var(--bw-1) dotted var(--rule);font-size:var(--fs-7);line-height:var(--lh-145);min-width:0}
.stk-k{font-size:var(--fs-3);color:var(--grey);overflow-wrap:anywhere}
.kv>span:first-child{color:var(--grey)}
.kv .mono{font-size:var(--fs-4);line-height:var(--lh-145);word-break:break-word}

/* ontology */
.subtabs{display:flex;gap:var(--sp-6);border-bottom:var(--bw-1) solid var(--rule);background:var(--paper);padding:0 var(--sp-7);flex-shrink:0}
.subtabs a{padding:var(--sp-2_5) var(--sp-1);text-decoration:none;color:var(--ink);border-bottom:var(--bw-2) solid transparent;font-size:var(--fs-9)}
.subtabs a.on{border-bottom-color:var(--blue);font-weight:var(--fw-semibold)}
.onto{flex-grow:1;display:flex;flex-direction:column;min-height:0}
.model{flex-grow:1;display:grid;grid-template-columns:minmax(0,1fr) 440px;min-height:0}
.model .left{display:flex;flex-direction:column;min-height:0;border-right:var(--bw-1) solid var(--rule)}
.topo{padding:var(--sp-5) var(--sp-8) var(--sp-3);flex-shrink:0}
.topo svg{width:100%;max-width:760px;height:auto;display:block}
.topo .node{cursor:pointer}
.topo .node:hover rect{stroke-width:2}
.topo .edge{cursor:pointer}
.topo .edge:hover path{stroke:var(--blue)}
.well{flex-grow:1;overflow:auto;border-top:var(--bw-1) solid var(--rule);padding:var(--sp-5) var(--sp-8) var(--sp-8);background:var(--paper)}
.navbtns{display:flex;gap:var(--sp-1);align-items:center}
.navbtns button{width:26px;height:26px;border:var(--bw-1) solid var(--rule);background:transparent;padding:0}
.navbtns button:disabled{color:var(--rule);cursor:default}
.eq{margin:0;padding:var(--sp-2_5) var(--sp-3);background:var(--white);border:var(--bw-1) solid var(--rule);font-family:var(--mono);font-size:var(--fs-5);line-height:var(--lh-155);white-space:pre-wrap}
.code{margin:0;padding:var(--sp-2_5) var(--sp-3);background:var(--ink);color:var(--paper);font-family:var(--mono);font-size:var(--fs-4);line-height:var(--lh-150);white-space:pre;overflow:auto}
.mlist button{display:block;width:100%;text-align:left;border:0;border-top:var(--bw-1) dotted var(--rule);background:transparent;padding:var(--sp-1_5) 0;font-size:var(--fs-8)}
.mlist button:hover{color:var(--blue)}
.flowrow{display:flex;gap:0;align-items:stretch;overflow:auto;padding:var(--sp-1_5) 0}
.flowrow .fb{min-width:150px;max-width:220px;border:var(--bw-1) solid var(--ink);background:var(--white);padding:var(--sp-2_5);font-size:var(--fs-7);line-height:var(--lh-140)}
.flowrow .fb.acc{background:var(--blue);color:var(--paper);border-color:var(--blue)}
.flowrow .fb.out{background:var(--blue-l);border-color:var(--blue)}
.flowrow .fb.term{border-style:dashed}
.flowrow .arr{align-self:center;padding:0 var(--sp-1_5);color:var(--grey);font-family:var(--mono)}
.flowcol{display:flex;flex-direction:column;gap:var(--sp-1_5)}

/* data explorer */
.data{flex-grow:1;display:grid;grid-template-columns:340px minmax(0,1fr);min-height:0}
.tree{display:flex;flex-direction:column;border-right:var(--bw-1) solid var(--rule);min-height:0;background:var(--paper)}
.tree .inner{flex-grow:1;overflow:auto;padding:var(--sp-2) 0 var(--sp-3)}
.tnode{display:grid;grid-template-columns:14px minmax(0,1fr) auto;gap:var(--sp-2);align-items:baseline;border:0;border-left:var(--bw-2) solid transparent;background:transparent;padding:var(--sp-2) var(--sp-4_5) var(--sp-2) var(--sp-4);width:100%;text-align:left}
.tnode.l1{border-top:var(--bw-1) solid var(--rule)}
.tnode.l2{padding-left:var(--sp-8);font-size:var(--fs-8)}
.tnode.l3{padding-left:var(--sp-13);font-size:var(--fs-7);grid-template-columns:minmax(0,1fr) auto}
.tnode.on{border-left-color:var(--blue);background:var(--blue-l)}
.tnode .g{font-family:var(--mono);font-size:var(--fs-5);color:var(--grey)}
.tnode .k{font-family:var(--mono);font-size:var(--fs-1);letter-spacing:var(--ls-06);text-transform:uppercase;color:var(--grey)}
.dconsult{border-top:var(--bw-1) solid var(--rule);padding:var(--sp-4) var(--sp-4_5) var(--sp-4_5);display:flex;flex-direction:column;gap:var(--sp-2);flex-shrink:0;background:var(--ground)}
.dconsult .chips{display:flex;flex-wrap:wrap;gap:var(--sp-1_5)}
.dconsult .chips button{border:var(--bw-1) solid var(--rule);background:var(--paper);padding:var(--sp-1) var(--sp-2);font-size:var(--fs-6);text-align:left}
.dview{display:flex;flex-direction:column;min-height:0}
.dbar{display:flex;align-items:center;gap:var(--sp-3);padding:var(--sp-2_5) var(--sp-6);border-bottom:var(--bw-1) solid var(--rule);background:var(--paper);flex-shrink:0}
.dbar .crumb{font-size:var(--fs-9);font-weight:var(--fw-semibold);flex-grow:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.dbody{flex-grow:1;overflow:auto;padding:var(--sp-6) var(--sp-8) var(--sp-9);display:flex;flex-direction:column;gap:var(--sp-4_5)}
.dbody>*{max-width:980px}
.provbox{border:var(--bw-1) solid var(--blue);background:var(--white);padding:var(--sp-2_5) var(--sp-3);display:flex;flex-direction:column;gap:var(--sp-0_5)}
.tablewrap{max-height:520px;overflow:auto;border:var(--bw-1) solid var(--rule);background:var(--paper)}

/* scenario library */
.lib{flex-grow:1;display:grid;grid-template-columns:460px minmax(0,1fr);min-height:0}
.lib .list{overflow:auto;border-right:var(--bw-1) solid var(--rule);padding:var(--sp-1_5) 0 var(--sp-4)}
.lib .fam{padding:var(--sp-3_5) var(--sp-6) var(--sp-1_5);border-top:var(--bw-1) solid var(--rule);display:flex;flex-direction:column;gap:var(--sp-0_5)}
.lib .item{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:var(--sp-2_5);border:0;border-left:var(--bw-2) solid transparent;background:transparent;padding:var(--sp-1_75) var(--sp-6) var(--sp-1_75) var(--sp-9_5);width:100%;text-align:left}
.lib .item.on{border-left-color:var(--blue);background:var(--blue-l)}
.lib .detail{overflow:auto;padding:var(--sp-7) var(--sp-10) var(--sp-10);display:flex;flex-direction:column;gap:var(--sp-4_5)}
.lib .detail>*{max-width:840px}
.toast{position:fixed;bottom:18px;left:50%;transform:translateX(-50%);background:var(--ink);color:var(--paper);padding:var(--sp-2) var(--sp-3_5);font-family:var(--mono);font-size:var(--fs-5);z-index:var(--z-toast)}

/* simulation result explorer */
.rx{flex-grow:1;display:grid;grid-template-columns:420px minmax(0,1fr);min-height:0}
.rxlist{display:flex;flex-direction:column;border-right:var(--bw-1) solid var(--rule);background:var(--paper);min-height:0}
.rxhead{padding:var(--sp-5_5) var(--sp-5) var(--sp-3_5);display:flex;flex-direction:column;gap:var(--sp-3);border-bottom:var(--bw-1) solid var(--rule)}
.rxrows{flex-grow:1;min-height:0;padding:var(--sp-1) 0}
.rxrow{display:grid;grid-template-columns:78px minmax(0,1fr) auto;gap:var(--sp-2_5);align-items:start;width:100%;text-align:left;border:0;border-left:var(--bw-2) solid transparent;border-bottom:var(--bw-1) dotted var(--rule);background:transparent;padding:var(--sp-2_75) var(--sp-5) var(--sp-2_75) var(--sp-4_5)}
.rxrow.on{border-left-color:var(--blue);background:var(--blue-l)}
.rxcode{font-size:var(--fs-5);color:var(--blue);padding-top:var(--sp-0_5)}
.rxmain{display:flex;flex-direction:column;gap:var(--sp-0_5);min-width:0}
.rxt{font-size:var(--fs-9);line-height:var(--lh-135)}
.rxdetail{padding:var(--sp-7) var(--sp-10) var(--sp-10);display:flex;flex-direction:column;gap:var(--sp-4_5);min-height:0}
.rxdetail>*{max-width:900px}
.rxtop{display:flex;align-items:center;gap:var(--sp-3)}
.rxbig{font-size:var(--fs-20);font-weight:var(--fw-semibold);color:var(--blue);letter-spacing:var(--ls-02)}

/* ---- focus: every interactive element shows where the keyboard is */
button:focus-visible,a:focus-visible,input:focus-visible,select:focus-visible,[role=button]:focus-visible,summary:focus-visible{outline:var(--bw-2) solid var(--ink);outline-offset:var(--ring-offset)}
g[role=button]:focus-visible{outline:var(--bw-2) solid var(--ink)}
@media (prefers-reduced-motion:reduce){*{transition:none!important}}
.subtabs button{padding:var(--sp-2_5) var(--sp-1);border:0;border-bottom:var(--bw-2) solid transparent;background:transparent;font-size:var(--fs-9);color:var(--ink)}
.subtabs button.on{border-bottom-color:var(--blue);font-weight:var(--fw-semibold)}
.tag.u{border-color:var(--ink);color:var(--ink)}

/* ---- editable scenario card */
.sc .line{position:relative}
.sc .line.edit{padding-top:var(--sp-2);padding-bottom:var(--sp-2)}
.sc .line .v{display:flex;flex-direction:column;gap:var(--sp-0_75);min-width:0}
.sc .ed{display:flex;align-items:center;gap:var(--sp-2)}
.sc .lvin{width:104px;height:30px;border:var(--bw-1) solid var(--rule);background:var(--white);padding:0 var(--sp-2);font-family:var(--mono);font-size:var(--fs-7);color:var(--blue)}
.sc .lvin:hover{border-color:var(--ink)}
.sc .lvin.bad{border-color:var(--amber);color:var(--amber)}
.sc .ed select{height:30px;font-family:var(--mono);font-size:var(--fs-7);border:var(--bw-1) solid var(--rule);background:var(--white);color:var(--blue)}
.sc .unit{font-family:var(--mono);font-size:var(--fs-4);color:var(--grey)}
.sc .rng{font-family:var(--mono);font-size:var(--fs-3);color:var(--grey)}
.sc .rng .num{font-size:var(--fs-3)}
.sc .usedby{grid-column:1/-1;display:none;padding:var(--sp-0_5) 0 0;line-height:var(--lh-145)}
.sc .line.edit:hover .usedby,.sc .line.edit:focus-within .usedby{display:block}
.sc .lerr{grid-column:1/-1;font-size:var(--fs-8);line-height:var(--lh-145);color:var(--amber);border-left:var(--bw-2) solid var(--amber);padding:var(--sp-1) var(--sp-2_5);background:var(--amber-l)}
/* G2: a setting line's derivation / assumed wording / start-month note — spans the full row, like .usedby above */
.sc .linenote{grid-column:1/-1;padding:var(--sp-0_5) 0 0;line-height:var(--lh-145)}
.sc .confirm{grid-column:1/-1;display:flex;gap:var(--sp-2);align-items:center;font-size:var(--fs-8);color:var(--amber);padding-top:var(--sp-0_5)}
.sc .ck .confirm{display:flex;gap:var(--sp-2);align-items:center;margin-top:var(--sp-1);font-size:var(--fs-8);color:var(--amber)}
.sc .confirm input{width:16px;height:16px;accent-color:var(--amber);margin:0}
.sc .fnote{font-size:var(--fs-8);line-height:var(--lh-145);border-left:var(--bw-2) dashed var(--cyan);padding:var(--sp-1) var(--sp-2_5);color:var(--ink)}
.sc .blk{color:var(--amber);text-align:right}
.switch{position:relative;width:40px;height:22px;border-radius:var(--radius-pill);border:var(--bw-1) solid var(--rule);background:var(--ground);padding:0}
.switch i{position:absolute;top:2px;left:2px;width:16px;height:16px;border-radius:var(--radius-round);background:var(--white);border:var(--bw-1) solid var(--rule);transition:left .15s}
.switch.on{background:var(--blue);border-color:var(--blue)}
.switch.on i{left:20px;border-color:var(--blue)}
.runchoice{display:flex;gap:var(--sp-2);flex-wrap:wrap;justify-content:flex-end}
.run:disabled{background:var(--rule);color:var(--paper);cursor:not-allowed}
.run.alt{background:transparent;color:var(--ink);border:var(--bw-1) solid var(--ink)}
.run.alt:disabled{background:transparent;color:var(--rule);border-color:var(--rule)}
.run .rl{text-transform:none;letter-spacing:0;font-size:var(--fs-4);opacity:.8}

/* ---- run progress */
.running{gap:var(--sp-3)}
.running.ok{border-color:var(--rule)}
.running.bad{border-color:var(--amber)}
.rphead{display:flex;align-items:center;gap:var(--sp-3);flex-wrap:wrap}
.rphead .link{font-size:var(--fs-7)}
.rpstate{font-size:var(--fs-11);font-weight:var(--fw-semibold)}
.seeds{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:var(--sp-1_5)}
.seed{display:flex;justify-content:space-between;gap:var(--sp-2);border:var(--bw-1) solid var(--rule);background:var(--white);padding:var(--sp-1_5) var(--sp-2_5);font-size:var(--fs-8)}
.seed.s-running{border-color:var(--ink)}
.seed.s-failed{border-color:var(--amber)}
.rpchecks{display:flex;flex-direction:column;gap:var(--sp-1)}
.rpchecks ul{list-style:none;margin:0;padding:0}
.rpchecks li{display:flex;justify-content:space-between;gap:var(--sp-3);padding:var(--sp-1_25) 0;border-top:var(--bw-1) dotted var(--rule);font-size:var(--fs-8)}
.rperr{display:flex;flex-direction:column;gap:var(--sp-1_5);font-size:var(--fs-9);line-height:var(--lh-145);border-left:var(--bw-2) solid var(--amber);padding:var(--sp-1_5) var(--sp-3);background:var(--amber-l)}
.rpact{display:flex;gap:var(--sp-3);align-items:center;flex-wrap:wrap}

/* ---- consultant notes in the rail */
.nomatch{display:flex;flex-direction:column;gap:var(--sp-1_5);line-height:var(--lh-145)}
.nomatch .cands{display:flex;flex-direction:column;gap:var(--sp-1_5);align-items:flex-start;padding-top:var(--sp-1)}

/* ---- right panel: run record */
.layers{margin:0;padding:0 0 0 var(--sp-4_5);display:flex;flex-direction:column;gap:var(--sp-2);font-size:var(--fs-7)}
.layers ul{margin:var(--sp-1) 0 0;padding-left:var(--sp-4)}
.ckt{font-size:var(--fs-6)}
.ckt td{padding:var(--sp-1_25) var(--sp-1_5)}

/* ---- Simulation Manager */
.rxfilters{display:flex;gap:var(--sp-2_5);flex-wrap:wrap;align-items:flex-end}
.rxfilters label{display:flex;flex-direction:column;gap:var(--sp-1)}
.rxfilters select,.rxfilters input{height:32px;border:var(--bw-1) solid var(--rule);background:var(--paper);padding:0 var(--sp-2);font-family:var(--sans);font-size:var(--fs-8);color:var(--ink)}
.rxtags{display:flex;gap:var(--sp-1_5);flex-wrap:wrap;padding-top:var(--sp-1)}
.rx{flex-grow:1}
.picklist{display:flex;flex-direction:column;max-height:240px;overflow:auto;border:var(--bw-1) solid var(--rule);background:var(--white)}
.pick{display:grid;grid-template-columns:18px 78px minmax(0,1fr);gap:var(--sp-2);align-items:center;padding:var(--sp-1_75) var(--sp-2_5);border-bottom:var(--bw-1) dotted var(--rule);font-size:var(--fs-8);cursor:pointer}
.pick input{margin:0;width:15px;height:15px}
.multi{display:flex;flex-direction:column;gap:var(--sp-2_5)}
.rxwide{flex-grow:1;min-height:0}
.rxw{padding:var(--sp-7) var(--sp-10) var(--sp-12);display:flex;flex-direction:column;gap:var(--sp-4);max-width:1040px}
.legend i.hollow{height:9px;background:var(--viz-raised);border:var(--bw-1_5) solid var(--viz-series-1)}
.legend i.solid{height:9px;background:var(--viz-series-1)}

/* ---- data explorer: what each file is used for */
.usedfor{display:flex;flex-direction:column;gap:var(--sp-1);border-left:var(--bw-2) solid var(--rule);padding:var(--sp-1_5) var(--sp-3);font-size:var(--fs-8);line-height:var(--lh-145);background:var(--paper)}
.chart .barrow:hover .hit,.chart .barrow:focus .hit{fill:var(--viz-highlight)}
.chart .barrow[data-action]{cursor:pointer}
#mpanel{display:flex;flex-direction:column;gap:var(--sp-3)}
.sc .unit{white-space:nowrap}
.sc .lvin{width:92px}

/* ---- narrower screens: tighten, then stack (desktop layout above is unchanged) */
@media (max-width:1240px){
  /* the side panels follow the window (defaults above); a width you dragged is capped in applyWidths */
  .canvas{padding:var(--sp-6) var(--sp-6) var(--sp-9)}
  .session{display:none}
  .tabs a{padding:0 var(--sp-2_5)}
  .sc .line.edit{grid-template-columns:minmax(0,1fr) 140px auto;grid-template-areas:"nm bar tag" "v v v"}
  .sc .line.edit>.nm{grid-area:nm}.sc .line.edit>.lbar{grid-area:bar}.sc .line.edit>.v{grid-area:v;flex-direction:row;flex-wrap:wrap;align-items:center;gap:var(--sp-1_5) var(--sp-3_5)}.sc .line.edit>.tag{grid-area:tag}
  .rx{grid-template-columns:340px minmax(0,1fr)}
  .rxdetail{padding:var(--sp-6) var(--sp-6) var(--sp-9)}
}
@media (max-width:900px){
  main{height:auto;min-height:calc(100vh - var(--appbar-h))}
  .appbar{height:auto;min-height:var(--appbar-h);flex-wrap:wrap;gap:var(--sp-2) var(--sp-5);padding:var(--sp-2) var(--sp-4)}
  .lab,.rx,.data,.lib,.model{display:flex;flex-direction:column;overflow:visible}
  .rail,.panel,.rxlist,.tree{border-right:0;border-left:0;border-top:var(--bw-1) solid var(--rule)}
  .rail .inner,.panel .inner,.canvas,.rxrows,.rxdetail{overflow:visible}
  .rxrows{max-height:360px;overflow:auto}
  .canvas{padding:var(--sp-5) var(--sp-4) var(--sp-7)}
  .sc .sec{padding:var(--sp-4)}
  .sc .line,.sc .line.edit{grid-template-columns:minmax(0,1fr) auto;grid-template-areas:"nm tag" "v v";row-gap:var(--sp-1_5)}
  .sc .line>.nm{grid-area:nm}.sc .line>.v{grid-area:v}.sc .line>.tag{grid-area:tag}
  .sc .line .lbar{display:none}
  .kpis,.tiles,.caveats{grid-template-columns:minmax(0,1fr)}
  .home{padding:var(--sp-8) var(--sp-4)}
  .rxw{padding:var(--sp-5) var(--sp-4) var(--sp-8)}
}
.sc .ed{flex-wrap:wrap;row-gap:var(--sp-0_5)}

/* ---- Nexus Data Viz: run swatches, status, flows, theme */
.sw{display:inline-block;width:10px;height:10px;margin-right:var(--sp-1_5);vertical-align:-1px;flex-shrink:0}
.sw.none{background:transparent;border:var(--bw-1) dashed var(--viz-rule)}
th .sw{vertical-align:0}
.st{font-family:var(--mono);font-size:var(--fs-4);font-weight:var(--fw-semibold);white-space:nowrap}
.st-good{color:var(--viz-status-good)}.st-warning{color:var(--viz-status-warning)}.st-serious{color:var(--viz-status-serious)}.st-critical{color:var(--viz-status-critical)}
.chart .flow{stroke-opacity:var(--viz-opacity-flow);transition:stroke-opacity .12s}
.chart .flow:hover{stroke-opacity:.6}
:root{color-scheme:light}
:root[data-theme="dark"]{color-scheme:dark}
@media (prefers-color-scheme:dark){:root:not([data-theme="light"]){color-scheme:dark}}
.tsw{position:relative}
.vtip{position:absolute;z-index:var(--z-tip);pointer-events:none;background:var(--viz-raised);border:var(--bw-1) solid var(--viz-rule);padding:var(--sp-1_5) var(--sp-2);font-family:var(--mono);font-size:var(--fs-4);color:var(--viz-ink);min-width:180px;max-width:340px;box-shadow:var(--shadow-tip)}
.vt-h{color:var(--viz-grey);margin-bottom:var(--sp-0_75)}
.vt-r{display:grid;grid-template-columns:10px minmax(0,1fr) auto;gap:var(--sp-1_5);align-items:center;padding:var(--sp-0_25) 0}
.vt-r i{width:10px;height:3px;display:block}.vt-r span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vt-r b{font-weight:var(--fw-medium)}

/* ---- red-team phases A–D: small additions inside the existing structure */
.readas{display:flex;align-items:center;gap:var(--sp-2_5);flex-wrap:wrap;border-top:var(--bw-1) dotted var(--rule);padding-top:var(--sp-2);margin-top:var(--sp-0_5)}
.readas select{height:28px;font-family:var(--sans);font-size:var(--fs-8);border:var(--bw-1) solid var(--rule);background:var(--white);color:var(--ink)}
.readas b{font-size:var(--fs-8)}
.sc .inert{grid-column:1/-1;font-size:var(--fs-7);line-height:var(--lh-145);color:var(--grey);padding-left:0}
.sc .inert{font-style:italic}
.trustline{font-size:var(--fs-7);color:var(--grey);border-left:var(--bw-2) solid var(--rule);padding:var(--sp-0_5) var(--sp-2_5)}
.dlab{font-size:var(--fs-7);font-weight:var(--fw-regular);color:var(--grey)}
.resfoot{display:flex;justify-content:flex-end;border-top:var(--bw-1) dotted var(--rule);padding-top:var(--sp-2)}
.deck{font-family:var(--mono);font-size:var(--fs-4);color:var(--grey);display:flex;gap:var(--sp-2);align-items:baseline}
.st-none{color:var(--viz-grey)}
.aud{text-transform:none;letter-spacing:0;color:var(--ink)}
.trail{display:flex;flex-wrap:wrap;align-items:center;gap:var(--sp-1) var(--sp-2);font-size:var(--fs-7);color:var(--grey);padding-bottom:var(--sp-0_5)}
.trail button{border:0;border-bottom:var(--bw-1) dotted var(--rule);background:transparent;padding:var(--sp-0_5) 0;font-size:var(--fs-7);color:var(--ink);max-width:34ch;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.trail button:hover{border-bottom-color:var(--viz-brand-blue)}
.trail .sep{color:var(--faint)}
.rx{grid-template-columns:360px minmax(0,1fr) 340px}
.data{grid-template-columns:var(--w-left,320px) minmax(0,1fr) var(--w-right,340px)}
.lib{grid-template-columns:380px minmax(0,1fr) var(--w-right,340px)}
.rxwrap{flex-grow:1;display:grid;grid-template-columns:minmax(0,1fr) var(--w-right,340px);min-height:0}
.dpanel .inner{padding:var(--sp-5_5) var(--sp-5_5) var(--sp-7_5)}
.rxcompact td{padding:var(--sp-1_5)}
.rxcompact tr.on td{background:var(--viz-highlight)}
.legend i.sq{width:10px;height:10px}
.metline{display:inline-flex;gap:var(--sp-2);flex-wrap:wrap}
.chips{display:flex;flex-wrap:wrap;gap:var(--sp-1_5)}
@media (max-width:1240px){.rx{grid-template-columns:300px minmax(0,1fr) 300px}.data{grid-template-columns:var(--w-left,280px) minmax(0,1fr) var(--w-right,300px)}.lib{grid-template-columns:320px minmax(0,1fr) var(--w-right,300px)}.rxwrap{grid-template-columns:minmax(0,1fr) var(--w-right,300px)}}
@media (max-width:900px){.rxwrap{display:flex;flex-direction:column}}
.homechecks{display:flex;gap:var(--sp-3_5);align-items:baseline;border-top:var(--bw-2) solid var(--ink);padding-top:var(--sp-2_5);text-decoration:none;color:var(--ink);font-size:var(--fs-10)}.homechecks:hover span:last-child{text-decoration:underline dotted var(--viz-brand-blue)}
.dbody>*,.rxdetail>*,.rxw>*{flex-shrink:0}
.sc .rng{white-space:nowrap}
.tag.wrap{white-space:normal;display:inline-block;max-width:12ch}
.sunote{border:0;background:transparent;padding:0;text-align:left;font-family:var(--mono);font-size:var(--fs-3);line-height:var(--lh-145);color:var(--viz-grey);border-bottom:var(--bw-1) dotted var(--viz-brand-blue);cursor:pointer}
.sulist{display:flex;flex-direction:column;gap:var(--sp-1);font-size:var(--fs-7)}

/* Home: the question box sits above the three doors */
.homeask{display:flex;flex-direction:column;gap:var(--sp-2)}
.homeask .askrow{display:flex}
.homeask input{flex-grow:1;min-width:0;height:48px;border:var(--bw-1) solid var(--ink);border-right:0;background:var(--viz-raised);color:var(--ink);padding:0 var(--sp-3_5);font-family:var(--sans);font-size:var(--fs-13)}
.homeask button{height:48px;padding:0 var(--sp-5);border:var(--bw-1) solid var(--ink);background:var(--ink);color:var(--paper);font-family:var(--mono);font-size:var(--fs-5);letter-spacing:var(--ls-10);cursor:pointer}
.homeask input:focus-visible,.homeask button:focus-visible{outline:var(--bw-2) solid var(--viz-brand-blue);outline-offset:var(--ring-offset)}
.caveats-panel{grid-template-columns:minmax(0,1fr);gap:var(--sp-3)}

/* Scenario card: the "used by" note is one quiet line that is always there (no layout jump on hover) */
.sc .usedby{display:block!important;grid-column:1/-1;padding:0;margin-top:calc(-1 * var(--sp-0_5));white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-size:var(--fs-4);color:var(--grey)}
/* the slider sits wholly inside its column */
.sc .lslider{display:flex;flex-direction:column;gap:var(--sp-0_5);min-width:0;padding:0 var(--sp-0_5)}
.sc .lrange{width:100%;margin:0;accent-color:var(--viz-brand-blue);cursor:pointer}
.sc .lrange:focus-visible{outline:var(--bw-2) solid var(--viz-brand-blue);outline-offset:var(--ring-offset)}
.sc .lstart{font-size:var(--fs-3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sc .lbar{overflow:visible}
/* Left panel: question boxes show two lines; the selected one opens to the full question */
.qbtn .qt{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.qbtn.open .qt{display:block;-webkit-line-clamp:unset;overflow:visible}
.thread.yours{position:relative}
.thread .tdel{position:absolute;top:-4px;right:0;width:22px;height:22px;line-height:var(--lh-icon);border:var(--bw-1) solid var(--rule);background:var(--paper);color:var(--grey);font-size:var(--fs-13);padding:0;cursor:pointer}
.thread .tdel:hover,.thread .tdel:focus-visible{border-color:var(--ink);color:var(--ink)}
.thread.yours .fam{padding-right:var(--sp-7_5)}

/* ---- Simulation Manager at scale: one slim filter bar, a compact sortable table, a collapsed session library */
.rxlistpage{padding:var(--sp-5_5) var(--sp-8) var(--sp-22_5);display:flex;flex-direction:column;gap:var(--sp-3_5);min-height:0;position:relative}
.rxlistpage>*{flex-shrink:0}
.rxbar{display:flex;gap:var(--sp-2_5);align-items:flex-end;flex-wrap:wrap;padding-bottom:var(--sp-2_5);border-bottom:var(--bw-1) solid var(--rule)}
.rxbar label{display:flex;flex-direction:column;gap:var(--sp-1)}
.rxbar label.grow{flex:1 1 220px}
.rxbar input,.rxbar select{height:32px;border:var(--bw-1) solid var(--rule);background:var(--paper);padding:0 var(--sp-2);font-family:var(--sans);font-size:var(--fs-8);color:var(--ink)}
.rxsec{display:flex;justify-content:space-between;align-items:baseline}
.rxtable{max-height:none;border:0;background:transparent}
.rxtable table.t td{padding:var(--sp-1_5) var(--sp-2);vertical-align:middle}
.rxtable td.tick,.rxtable th.tick{width:28px;padding-right:0}
.rxtable .qcell{max-width:340px}
.qbtn2{border:0;background:transparent;padding:0;font:inherit;color:var(--ink);text-align:left;max-width:300px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:inline-block;vertical-align:middle}
.qbtn2:hover{text-decoration:underline dotted var(--viz-brand-blue)}
.rxtable .scell{max-width:220px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:var(--fs-7);color:var(--grey)}
.rxtable .stcell{white-space:nowrap}
.sortb{border:0;background:transparent;padding:0;font:inherit;color:inherit;letter-spacing:inherit;text-transform:inherit;cursor:pointer}
.sortb:hover{color:var(--ink)}
.thinbar{height:3px;margin-top:var(--sp-1_25);width:90px}
.rxlib{border-top:var(--bw-2) solid var(--ink);padding-top:var(--sp-2_5);display:flex;flex-direction:column;gap:var(--sp-2_5)}
.rxlibhead{border:0;background:transparent;padding:var(--sp-1) 0;text-align:left;font-size:var(--fs-10);font-weight:var(--fw-semibold);color:var(--ink);display:flex;gap:var(--sp-2_5);align-items:baseline}
.rxlibhead .g{font-family:var(--mono);color:var(--grey)}
.rxcmpbar{position:sticky;bottom:0;display:flex;gap:var(--sp-3_5);align-items:center;flex-wrap:wrap;background:var(--viz-raised);border:var(--bw-1) solid var(--ink);padding:var(--sp-2_5) var(--sp-3_5);font-size:var(--fs-8);margin-top:var(--sp-1_5);box-shadow:var(--shadow-dock)}
.rxcmpbar span{flex-grow:1}
/* provisional results: greyed and dashed so they are never mistaken for the final */
.res.provisional{border-style:dashed;border-color:var(--grey);background:transparent;opacity:.82}
.res.provisional .lbl{color:var(--amber)}
.res.provisional .kpi{border-top-style:dashed}
.rxtable .nowrap{white-space:nowrap}

/* ---- model map: one diagram at a time under a slim view switcher */
.mviews{display:flex;gap:var(--sp-4_5);flex-wrap:wrap;padding:var(--sp-2_5) var(--sp-8) 0;border-bottom:var(--bw-1) solid var(--rule);background:var(--paper);flex-shrink:0}
.mviews button{border:0;border-bottom:var(--bw-2) solid transparent;background:transparent;padding:var(--sp-1_5) 0 var(--sp-2);font-size:var(--fs-8);color:var(--ink)}
.mviews button.on{border-bottom-color:var(--blue);font-weight:var(--fw-semibold)}
.mdiagram{flex-grow:1;overflow:auto;padding:var(--sp-4_5) var(--sp-8) var(--sp-8);display:flex;flex-direction:column;gap:var(--sp-2_5);min-height:0}
.mdiagram>*{flex-shrink:0}
.apick{display:flex;gap:var(--sp-1_5);flex-wrap:wrap}

/* ---- the Lab result, answer first: key chart, explanation, then smaller tiles and details */
.res h2.hl1{font-size:var(--fs-13);line-height:var(--lh-145);font-weight:var(--fw-semibold);max-width:none}
.expl{border-left:var(--bw-2) solid var(--viz-ink);padding:var(--sp-0_5) 0 var(--sp-0_5) var(--sp-3_5);display:flex;flex-direction:column;gap:var(--sp-1)}
.expl p{margin:0;font-size:var(--fs-12);line-height:var(--lh-160);max-width:70ch}
.kpis.small{gap:var(--sp-5)}
.kpis.small .kpi .big{font-size:var(--fs-18)}
.kpis.small .kpi{border-top-width:var(--bw-1)}
.fchips{display:flex;gap:var(--sp-1_5);flex-wrap:wrap;align-items:center;border-top:var(--bw-1) dotted var(--rule);padding-top:var(--sp-2_5)}
.fchips .chip{text-transform:none;letter-spacing:0;font-family:var(--sans);font-size:var(--fs-7)}
.res.followup{border-left:var(--bw-3) solid var(--viz-ink)}
.fuq{line-height:var(--lh-150)}
.analysis{font-size:var(--fs-12);line-height:var(--lh-170)}

/* ---- diagrams: fit to width, with a full-screen "Enlarge" at natural size */
.dgbox{position:relative}
.dg-enlarge{position:absolute;top:8px;right:8px;z-index:var(--z-raise);border:var(--bw-1) solid var(--rule);background:var(--viz-raised);color:var(--ink);font-family:var(--mono);font-size:var(--fs-4);padding:var(--sp-1) var(--sp-2);cursor:pointer}
.dg-enlarge:hover{border-color:var(--ink)}
.dgov{position:fixed;inset:0;z-index:var(--z-overlay);background:var(--viz-paper);display:flex;flex-direction:column}
.dgov-bar{display:flex;align-items:center;gap:var(--sp-3);padding:var(--sp-3) var(--sp-5);padding-top:calc(var(--sp-3) + env(safe-area-inset-top, 0px));border-bottom:var(--bw-1) solid var(--rule);background:var(--viz-raised);flex-shrink:0}
.dgov-bar .lbl{flex-grow:1}
.dgov-x{width:32px;height:32px;border:var(--bw-1) solid var(--rule);background:transparent;color:var(--ink);font-size:var(--fs-16);line-height:var(--lh-100);cursor:pointer}
.dgov-body{flex-grow:1;overflow:auto;padding:var(--sp-6)}
.dgov-body .dg{width:auto;max-width:none!important;height:auto}

/* ---- theme toggle (sun shown in dark, moon in light) */
.themebtn{margin-left:var(--sp-3);width:28px;height:28px;display:inline-flex;align-items:center;justify-content:center;border:0;border-radius:var(--radius-s);background:transparent;color:var(--grey);cursor:pointer;flex-shrink:0;transition:color .12s,background .12s}
.themebtn:hover{color:var(--ink);background:color-mix(in srgb,var(--ink) 6%,transparent)}
.themebtn:focus-visible{outline:var(--bw-2) solid var(--blue);outline-offset:var(--ring-offset)}
.themebtn[aria-expanded="true"]{color:var(--ink)}
.themebtn .ic-sun{display:none}
.themebtn[data-mode="dark"] .ic-sun{display:block}
.themebtn[data-mode="dark"] .ic-moon{display:none}

/* ---- Simulation Manager: heading and the Runs | Questions segmented control */
.mgrnav{align-items:center}
.mgrtitle{margin:0 var(--sp-3) 0 0;font-size:var(--fs-11);font-weight:var(--fw-bold);letter-spacing:0}
.seg{display:inline-flex;border:var(--bw-1) solid var(--rule);margin-right:var(--sp-3)}
.seg button{border:0;border-bottom:0!important;padding:var(--sp-1_5) var(--sp-3_5)!important;font-size:var(--fs-8);background:transparent;color:var(--ink)}
.seg button.on{background:var(--ink);color:var(--paper);font-weight:var(--fw-semibold)}
.qlist{list-style:none;margin:0;padding:0;display:flex;flex-direction:column}
.qrow{display:grid;grid-template-columns:150px minmax(0,1fr) minmax(0,220px) auto auto;gap:var(--sp-3_5);align-items:baseline;padding:var(--sp-2_5) 0;border-bottom:var(--bw-1) solid var(--viz-rule)}
.qtext{border:0;background:transparent;padding:0;text-align:left;font:inherit;font-size:var(--fs-10);color:var(--ink);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;cursor:pointer}
.qtext.open{-webkit-line-clamp:unset;display:block}
.qans{font-size:var(--fs-8);color:var(--grey)}
.qruns{display:flex;gap:var(--sp-1);flex-wrap:wrap}
.alllink{font-size:var(--fs-7);color:var(--grey);text-decoration:none;border-bottom:var(--bw-1) dotted var(--viz-brand-blue);align-self:flex-start}
.thin.earlier{justify-content:space-between}
@media (max-width:900px){.qrow{grid-template-columns:minmax(0,1fr)}}
.ctitle{font-size:var(--fs-9);font-weight:var(--fw-semibold);color:var(--ink);line-height:var(--lh-140)}
.axlab{font-family:var(--sans)}

/* ---- sessions: the Lab rail (current session expanded, two earlier sessions muted, ideas folded) */
.newsess{border:var(--bw-1) solid var(--ink);background:transparent;color:var(--ink);font-family:var(--mono);font-size:var(--fs-3);letter-spacing:var(--ls-08);text-transform:uppercase;padding:0 var(--sp-2_5);height:28px;cursor:pointer}
.newsess:hover,.newsess:focus-visible{background:var(--ink);color:var(--paper)}
.cursess{display:flex;flex-direction:column;gap:var(--sp-2);border-left:var(--bw-2) solid var(--ink);padding-left:var(--sp-3)}
.sessline{display:flex;align-items:baseline;gap:var(--sp-2_5)}
.sesscode{font-family:var(--mono);font-size:var(--fs-5);letter-spacing:var(--ls-06);color:var(--ink)}
.sessline .link.small{margin-left:auto;color:var(--grey);border-bottom-color:var(--rule)}
.sessline .link.small:hover,.sessline .link.small:focus-visible{color:var(--ink);border-bottom-color:var(--ink)}
.sessname{border:0;background:transparent;padding:0;text-align:left;font:inherit;font-size:var(--fs-13);font-weight:var(--fw-semibold);line-height:var(--lh-130);color:var(--ink);cursor:text;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.sessname:hover{text-decoration:underline dotted var(--viz-brand-blue)}
.sessrename{display:flex;gap:var(--sp-2);align-items:center;flex-wrap:wrap}
.sessrename input{flex:1 1 160px;min-width:0;font:inherit;font-size:var(--fs-11);padding:var(--sp-1) var(--sp-1_5);border:var(--bw-1) solid var(--ink);background:var(--viz-raised);color:var(--ink)}
.qitems{display:flex;flex-direction:column;gap:var(--sp-2)}
.qitem{display:flex;flex-direction:column;gap:var(--sp-1)}
.qitem.sub{padding-left:var(--sp-4)}
.qi{display:flex;gap:var(--sp-2);align-items:flex-start;border:0;background:transparent;padding:0;text-align:left;font:inherit;font-size:var(--fs-9);line-height:var(--lh-140);color:var(--grey);cursor:pointer}
.qi .qt{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.qi.on{color:var(--ink)}
.qi.on .qt{-webkit-line-clamp:unset;display:block}
.qi:hover .qt{text-decoration:underline dotted var(--viz-brand-blue)}
.qitem.main .qi{font-weight:var(--fw-semibold)}
.mark{flex:0 0 12px;width:12px;height:12px;margin-top:var(--sp-0_75);display:inline-flex;align-items:center;justify-content:center;font-size:var(--fs-3);line-height:var(--lh-100);border-radius:var(--radius-round)}
.mark.run,.rundot{background:var(--viz-brand-blue)}
.mark.run{animation:pulse 1.4s ease-in-out infinite}
.mark.done{color:var(--viz-status-good);border:var(--bw-1) solid var(--viz-status-good)}
.mark.fail{color:var(--viz-status-serious);border:var(--bw-1) solid var(--viz-status-serious)}
.mark.prop{border:var(--bw-1) solid var(--grey);background:transparent}
.rundot{display:inline-block;width:7px;height:7px;border-radius:var(--radius-round);vertical-align:middle;margin-left:var(--sp-1)}
@keyframes pulse{50%{opacity:.35}}
@media (prefers-reduced-motion:reduce){.mark.run{animation:none}}
.xchips{display:flex;gap:var(--sp-1);flex-wrap:wrap;padding-left:var(--sp-5)}
.xchips .chip{min-height:22px;padding:var(--sp-0_5) var(--sp-1_5);font-size:var(--fs-3);text-transform:none;letter-spacing:0}
.earlier{border:0;background:transparent;padding:0;text-align:left;font:inherit;font-size:var(--fs-7);color:var(--grey);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;cursor:pointer;opacity:.85}
.earlier .mono{font-family:var(--mono);font-size:var(--fs-4)}
.earlier:hover,.earlier:focus-visible{color:var(--ink);opacity:1}
.ideas{display:flex;flex-direction:column;gap:var(--sp-3);border-top:var(--bw-1) solid var(--rule);padding-top:var(--sp-3)}
.ideashead{border:0;background:transparent;padding:0;text-align:left;font-family:var(--mono);font-size:var(--fs-3);letter-spacing:var(--ls-10);text-transform:uppercase;color:var(--grey);cursor:pointer}
.ideashead .g{display:inline-block;width:12px;color:var(--ink)}
.ideasbody{display:flex;flex-direction:column;gap:var(--sp-4_5)}
/* the different-topic prompt: in the canvas, above where the card goes */
.topicask{display:flex;flex-direction:column;gap:var(--sp-2_5);border:var(--bw-1) solid var(--ink);background:var(--viz-raised);padding:var(--sp-4) var(--sp-4_5);line-height:var(--lh-150);font-size:var(--fs-11)}
.topicask .tq{font-size:var(--fs-14);font-weight:var(--fw-semibold)}
.topicask .tbtns{display:flex;gap:var(--sp-2_5);flex-wrap:wrap}
/* in-page confirm box (never window.confirm) */
.cfov{position:fixed;inset:0;z-index:var(--z-dialog);display:flex;align-items:center;justify-content:center;padding:var(--sp-4);background:color-mix(in srgb, var(--viz-ink) 35%, transparent)}
.cfbox{width:min(460px,100%);background:var(--viz-raised);color:var(--ink);border:var(--bw-1) solid var(--ink);padding:var(--sp-5) var(--sp-5_5);display:flex;flex-direction:column;gap:var(--sp-3)}
.cfbody p{margin:0 0 var(--sp-1_5);font-size:var(--fs-11);line-height:var(--lh-150)}
.cfwarn{color:var(--viz-status-serious)}
.cfcheck{display:flex;gap:var(--sp-2);align-items:center;font-size:var(--fs-9)}
.cfbtns{display:flex;justify-content:flex-end;gap:var(--sp-2_5);padding-top:var(--sp-1)}
/* Session Manager */
.rxtable tr.closed td{color:var(--grey)}
.rxtable tr.closed .qbtn2{color:var(--grey)}
.pager{display:flex;gap:var(--sp-3);align-items:center}
.sesshead{display:flex;flex-direction:column;gap:var(--sp-1_5);padding-bottom:var(--sp-1_5)}
.sesstitle{margin:0;font-size:var(--fs-18);line-height:var(--lh-130)}
.sessacts{display:flex;gap:var(--sp-2_5);flex-wrap:wrap}
.qrow{grid-template-columns:150px minmax(0,1fr) minmax(0,220px) auto}
.qrow.sub{padding-left:var(--sp-4_5)}
@media (max-width:900px){.qrow{grid-template-columns:minmax(0,1fr)}}
/* the main question as the session heading (when the session keeps its default name) */
.sessacts2{margin-left:auto;display:flex;gap:var(--sp-2_5)}
.sessline .sessacts2 .link.small{margin-left:0}
.qitem.head .qi{font-size:var(--fs-13);font-weight:var(--fw-semibold);line-height:var(--lh-130);color:var(--ink)}
.qitem.head .mark{margin-top:var(--sp-1)}

/* ---- answer first: verdict line, confidence tag, marked chart, one disclosure */
.vline{display:flex;align-items:flex-start;gap:var(--sp-3_5);flex-wrap:wrap}
.res h2.verdictl{flex:1 1 420px;font-size:var(--fs-20);line-height:var(--lh-130);font-weight:var(--fw-bold);letter-spacing:var(--ls-n10);max-width:40ch;margin:0}
.vline .hl1{flex:1 1 420px}
/* a pack verdict's detail, under its short headline (schemas/verdict.schema.json): body type, inside the verdict line */
.res h2.verdictl .verdictd{display:block;margin-top:var(--sp-1_5);font-size:var(--fs-11);line-height:var(--lh-150);font-weight:var(--fw-regular);letter-spacing:0}
.srclink{margin-left:var(--sp-1_5)}
.conf{flex:0 0 auto;margin-top:var(--sp-1_25);font-family:var(--mono);font-size:var(--fs-3);letter-spacing:var(--ls-06);text-transform:uppercase;padding:var(--sp-1) var(--sp-2);border:var(--bw-1) solid var(--viz-ink);cursor:help;white-space:nowrap}
.conf.sep{background:var(--viz-ink);color:var(--viz-paper)}
.conf.nosep{background:transparent;color:var(--viz-grey);border-color:var(--viz-grey);border-style:dashed}
.conf:focus-visible{outline:var(--bw-2) solid var(--viz-brand-blue);outline-offset:var(--ring-offset)}
.kpi .klead{font-size:var(--fs-8);line-height:var(--lh-140);color:var(--ink)}
.setby{font-size:var(--fs-8);line-height:var(--lh-150);color:var(--viz-grey);margin-top:calc(-1 * var(--sp-2))}
.whyhow{border-top:var(--bw-1) solid var(--rule);padding-top:var(--sp-2_5);display:flex;flex-direction:column;gap:var(--sp-3_5)}
.whyhead{align-self:flex-start;border:0;background:transparent;padding:0;font-family:var(--mono);font-size:var(--fs-4);letter-spacing:var(--ls-10);text-transform:uppercase;color:var(--ink);cursor:pointer}
.whyhead .g{display:inline-block;transition:transform .15s}
.whyhead[aria-expanded=true] .g{transform:rotate(90deg)}
@media (prefers-reduced-motion:reduce){.whyhead .g{transition:none}}
.whybody{display:flex;flex-direction:column;gap:var(--sp-4)}
.whybody[hidden]{display:none!important}
.chart .warmup.act{cursor:pointer}
.chart .warmup.act:hover text,.chart .warmup.act:focus text{fill:var(--viz-ink);text-decoration:underline}
.chart .warmup.act:focus{outline:none}
.chart .warmup.act:focus-visible rect{stroke:var(--viz-brand-blue);stroke-width:1.5}
/* the sticky Run bar: pinned to the canvas bottom while the card is in view; rests at the card's foot */
.runbar{position:sticky;bottom:0;z-index:var(--z-sticky);display:flex;align-items:center;gap:var(--sp-2_5) var(--sp-3_5);flex-wrap:wrap;padding:var(--sp-3) var(--sp-6_5);padding-bottom:calc(var(--sp-3) + env(safe-area-inset-bottom, 0px));background:var(--viz-raised);border-top:var(--bw-1) solid var(--ink);box-shadow:var(--shadow-runbar)}
.runbar .rbsum{flex:1 1 180px;min-width:0;font-size:var(--fs-9);line-height:var(--lh-140);overflow-wrap:anywhere;display:flex;flex-direction:column;align-items:flex-start;gap:var(--sp-0_75)}
.runbar .runchoice{flex:0 1 auto;flex-wrap:wrap;justify-content:flex-start}
.runbar .run{width:var(--run-w);max-width:100%;height:auto;min-height:36px;padding-top:var(--sp-1_5);padding-bottom:var(--sp-1_5);line-height:var(--lh-130);white-space:normal}
.runbar .run .rl{display:inline-block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;vertical-align:bottom}
.runbar [data-testid=runbar-blocked]{font-size:var(--fs-5);color:var(--amber);border-bottom-color:var(--amber)}
@media (max-width:700px){.runbar{flex-wrap:wrap}.runbar .runchoice{flex:1 1 100%;flex-direction:column}.runbar .run{width:100%}}
/* room after the last block, so nothing ends under the sticky bar (sticky uses the padding box, so a spacer, not padding) */
.canvas{padding-bottom:0}
.canvas::after{content:'';flex:0 0 72px}
/* the end of a session's thread, marked: a rule and a label under the last card, then room to scroll it clear of the edge */
.canvas.hasblocks::after{content:'end of this session';flex:0 0 auto;align-self:stretch;max-width:var(--canvas-max);width:100%;box-sizing:border-box;
  margin-top:var(--sp-1_5);padding:var(--sp-3) 0 max(var(--sp-30),18vh);border-top:var(--bw-1) solid var(--rule);text-align:center;
  font:var(--fw-medium) var(--fs-4)/var(--lh-100) var(--mono);letter-spacing:var(--ls-14);text-transform:uppercase;color:var(--grey)}
/* top bar and audience */
.audbtn{flex-grow:1;text-align:left;border:0;background:transparent;padding:0;font-family:var(--mono);font-size:var(--fs-3);letter-spacing:var(--ls-08);text-transform:uppercase;color:var(--ink);cursor:pointer}
.audbtn:hover,.audbtn:focus-visible{text-decoration:underline dotted var(--viz-brand-blue)}
/* right panel: model checks on one line */
.checks1{border:0;background:transparent;padding:0;text-align:left;font:inherit;font-size:var(--fs-9);line-height:var(--lh-150);color:var(--ink);cursor:pointer;display:flex;flex-wrap:wrap;gap:var(--sp-1);align-items:baseline}
.checks1 .g{transition:transform .15s;display:inline-block}
.checks1[aria-expanded=true] .g{transform:rotate(90deg)}
.checks1body{display:flex;flex-direction:column;gap:var(--sp-2);padding-top:var(--sp-1_5)}
/* consultant model choice, inside the Audience menu */
.modelpick{border:0;margin:var(--sp-2_5) 0 0;padding:var(--sp-2_5) 0 0;border-top:var(--bw-1) dotted var(--rule);display:flex;flex-direction:column;gap:var(--sp-2);min-width:0}
.modelpick legend{padding:0;margin-bottom:var(--sp-1_5)}
.mopt{display:flex;gap:var(--sp-2);align-items:flex-start;cursor:pointer}
.mopt input{margin:var(--sp-0_75) 0 0;accent-color:var(--viz-brand-blue)}
.mopt .ml{display:block;font-size:var(--fs-9)}
.coresrow{display:flex;align-items:center;gap:var(--sp-2_5);flex-wrap:wrap}.coresrow input[type=range]{flex:1 1 140px;min-width:0}.coresrow output{font-size:var(--fs-8);font-variant-numeric:tabular-nums}
.mopt .mnote,.mopt .rnote{display:block;font-size:var(--fs-6);line-height:var(--lh-140);color:var(--viz-grey)}
/* pending consultant call: the question echoed at once, with Cancel */
.pendingq{display:flex;flex-direction:column;gap:var(--sp-2_5)}
.pendingq .pbody{display:flex;align-items:center;gap:var(--sp-2_5);border:var(--bw-1) dashed var(--ink);padding:var(--sp-3_5) var(--sp-4_5);font-size:var(--fs-10);background:var(--viz-raised)}
.spin{width:12px;height:12px;border:var(--bw-2) solid var(--viz-rule);border-top-color:var(--viz-brand-blue);border-radius:var(--radius-round);animation:spin 1s linear infinite;flex:0 0 auto;display:inline-block;vertical-align:middle}
@keyframes spin{to{transform:rotate(360deg)}}
@media (prefers-reduced-motion:reduce){.spin{animation:none;border-top-color:var(--viz-grey)}}
.askerr{font-size:var(--fs-8);line-height:var(--lh-145);color:var(--amber);border-left:var(--bw-2) solid var(--amber);padding:var(--sp-0_75) var(--sp-2_5);margin:0 var(--sp-5) var(--sp-1_5)}
.askerr.dup{color:var(--ink);border-left-color:var(--viz-brand-blue)}
.home .askerr{margin:var(--sp-1_5) 0 0}
.askform button[disabled],[data-testid=data-ask][disabled]{opacity:.55;cursor:progress}
.pendingd{display:flex;align-items:center;gap:var(--sp-1_5);flex-wrap:wrap}
.ncline{color:var(--ink);border-left:var(--bw-3) solid var(--viz-grey);padding-left:var(--sp-3)}
.kpi .nc{color:var(--viz-grey);font-style:italic}
.mlist .mnote2{display:block;font-style:italic}

/* ---- under 1000 px: one column. The Lab's left panel is a top drawer ("Sessions ▾"); every right-hand
   details panel is a slide-over opened by its links; diagrams fit the width (Enlarge for detail). */
.drawerbtn,.slideclose,.slidescrim{display:none}
.dgbox .dg-scroll>.dg{min-width:0}
@media (max-width:999px){
  main{height:auto;min-height:calc(100vh - var(--appbar-h))}
  .appbar{height:auto;min-height:var(--appbar-h);flex-wrap:wrap;gap:var(--sp-1_5) var(--sp-4_5);padding:var(--sp-2) var(--sp-4)}
  .tabs{flex-wrap:wrap;height:auto}
  .tabs a{padding:var(--sp-2_5) var(--sp-2)}
  .session{display:none}
  .lab,.rx,.data,.lib,.model,.rxwrap{display:flex;flex-direction:column;overflow:visible;min-height:0}
  .lab>*,.rx>*,.data>*,.lib>*,.model>*,.rxwrap>*,.onto>*{flex-shrink:0}
  .rail{border-right:0;border-bottom:var(--bw-1) solid var(--rule)}
  .rail .inner{overflow:visible;padding:var(--sp-3) var(--sp-4);gap:var(--sp-3_5)}
  .rail:not(.open) .inner>:not(.railhead):not(.drawerbtn){display:none}
  .drawerbtn{display:flex;align-items:center;gap:var(--sp-1_5);align-self:flex-start;border:var(--bw-1) solid var(--ink);background:transparent;color:var(--ink);font-family:var(--mono);font-size:var(--fs-4);letter-spacing:var(--ls-08);text-transform:uppercase;padding:var(--sp-1_5) var(--sp-2_5);cursor:pointer}
  .rail .askform{position:static}
  .canvas{overflow:visible;padding:var(--sp-4_5) var(--sp-4) var(--sp-6)}
  .canvas>*{max-width:none}
  .tree,.dview,.rxdetail,.rxlistpage,.rxwide,.lib .list,.lib .detail,.model .left{overflow:visible;border-right:0}
  .tree{max-height:none;border-bottom:var(--bw-1) solid var(--rule)}
  .tree .inner{max-height:45vh;overflow:auto}
  .rxdetail{padding:var(--sp-4_5) var(--sp-4) var(--sp-7)}
  .model{display:flex}
  .topo{padding:var(--sp-3_5) var(--sp-4)}
  /* the details slide-over */
  aside.panel{position:fixed;top:0;right:0;bottom:0;width:min(440px,92vw);z-index:var(--z-slide);background:var(--paper);border-left:var(--bw-1) solid var(--ink);transform:translateX(102%);visibility:hidden;transition:transform .2s ease,visibility 0s linear .2s;box-shadow:var(--shadow-slide)}
  aside.panel .inner{height:100%;overflow:auto;padding:var(--sp-14) var(--sp-5) calc(var(--sp-6) + env(safe-area-inset-bottom,0px))}
  body.slide-open aside.panel{transform:none;visibility:visible;transition:transform .2s ease}
  body.slide-open .slideclose{display:block;position:fixed;top:calc(10px + env(safe-area-inset-top,0px));right:14px;z-index:var(--z-slide-close);border:var(--bw-1) solid var(--ink);background:var(--viz-raised);color:var(--ink);font-family:var(--mono);font-size:var(--fs-4);letter-spacing:var(--ls-08);text-transform:uppercase;padding:var(--sp-1_75) var(--sp-2_5);cursor:pointer}
  body.slide-open .slidescrim{display:block;position:fixed;inset:0;z-index:var(--z-slide-scrim);background:color-mix(in srgb,var(--viz-ink) 30%,transparent)}
  .kpis,.kpis.small{grid-template-columns:repeat(auto-fit,minmax(180px,1fr))}
  .res{padding:var(--sp-4) var(--sp-4) var(--sp-4_5)}
  .runbar{padding:var(--sp-2_5) var(--sp-3_5)}
  .qrow{grid-template-columns:minmax(0,1fr)}
}
@media (max-width:999px) and (prefers-reduced-motion:reduce){aside.panel{transition:none}}
/* focusable SVG nodes, edges and M-id links: a visible ring */
svg [tabindex]:focus-visible,svg a:focus-visible,svg [role=button]:focus-visible{outline:var(--bw-2) solid var(--viz-brand-blue);outline-offset:var(--ring-offset)}
.dg [tabindex]:focus-visible rect,.dg [role=button]:focus-visible rect,.dg [role=button]:focus-visible path{stroke:var(--viz-brand-blue);stroke-width:2}
.lerr2{flex-basis:100%;font-size:var(--fs-7);color:var(--amber);line-height:var(--lh-140)}
.mark.run{flex:0 0 8px;width:8px;height:8px;margin:var(--sp-1_5) var(--sp-0_5) 0;border-radius:var(--radius-round)}
.lslider.stale .lrange{opacity:.35;filter:grayscale(1)}
.dg .lnk:focus-visible,.dg .lnk:focus{fill:var(--viz-brand-blue);text-decoration:underline;outline:none}
/* About this model */
.aboutline{font-size:var(--fs-9);line-height:var(--lh-155);color:var(--viz-grey);max-width:var(--canvas-max);border-top:var(--bw-1) solid var(--rule);padding-top:var(--sp-3_5)}
.aboutline .num{font-size:var(--fs-8)}
.aboutfull{display:flex;flex-direction:column;gap:var(--sp-2);border-bottom:var(--bw-1) solid var(--rule);padding-bottom:var(--sp-4);margin-bottom:var(--sp-2)}
.aboutfull p{margin:0;font-size:var(--fs-11);line-height:var(--lh-155);max-width:75ch}
/* a details panel for pages without one */
.floatpanel{position:fixed;top:0;right:0;bottom:0;width:min(440px,92vw);z-index:var(--z-float);background:var(--paper);border-left:var(--bw-1) solid var(--ink);box-shadow:var(--shadow-slide)}
.floatpanel .inner{height:100%;overflow:auto;padding:var(--sp-6) var(--sp-5_5);display:flex;flex-direction:column;gap:var(--sp-3_5);outline:none}
.floatscrim{position:fixed;inset:0;z-index:var(--z-float-scrim);background:color-mix(in srgb,var(--viz-ink) 25%,transparent)}
.kpi .paired{font-size:var(--fs-7);line-height:var(--lh-140)}
.kpi .paired .num{font-size:var(--fs-7);text-align:left}
.pairedwhy{margin:0;font-size:var(--fs-10);line-height:var(--lh-155);max-width:70ch}
/* quiet footer and the about page */
main{height:calc(100vh - var(--appbar-h) - var(--foot-h))}
.appfoot{height:var(--foot-h);flex-shrink:0;display:flex;align-items:center;justify-content:flex-end;padding:0 var(--sp-6);border-top:var(--bw-1) solid var(--rule);background:var(--paper)}
.appfoot a{font-size:var(--fs-5);color:var(--grey);text-decoration:none;border-bottom:var(--bw-1) dotted var(--viz-brand-blue)}
.appfoot a:hover,.appfoot a:focus-visible{color:var(--ink)}
@media (max-width:999px){main{height:auto;min-height:calc(100vh - var(--appbar-h) - var(--foot-h))}}
.aboutpage{max-width:820px;margin:0 auto;padding:var(--sp-9) var(--sp-8) var(--sp-16);display:flex;flex-direction:column;gap:var(--sp-3);font-size:var(--fs-12);line-height:var(--lh-160)}
.aboutpage h2{font-size:var(--fs-21);margin:0 0 var(--sp-1)}.aboutpage h3{font-size:var(--fs-15);margin:var(--sp-4_5) 0 0;border-top:var(--bw-1) solid var(--ink);padding-top:var(--sp-3)}
.aboutpage p,.aboutpage ul,.aboutpage ol{margin:0}.aboutpage li{margin:var(--sp-1) 0}
.aboutpage code{font-family:var(--mono);font-size:var(--fs-8);background:color-mix(in srgb,var(--viz-ink) 6%,transparent);padding:var(--sp-0_25) var(--sp-1)}
.aboutpage table.t td,.aboutpage table.t th{vertical-align:top;line-height:var(--lh-150)}
@media (max-width:700px){.aboutpage{padding:var(--sp-6) var(--sp-4) var(--sp-12)}}
/* ---- a pack's own data tab (domain/web/domain.js dataTabs): its list, groups, items and controls (class dtab) */
.dtab .lxlist{display:flex;flex-direction:column;gap:var(--sp-3_5);padding:var(--sp-1) var(--sp-3) var(--sp-3_5)}
.lxgroup{display:flex;flex-direction:column;gap:var(--sp-0_5)}
.lxgroup .lbl{padding:0 var(--sp-1_5) var(--sp-1)}
.lxitem{display:flex;justify-content:space-between;align-items:baseline;gap:var(--sp-2);border:0;border-left:var(--bw-2) solid transparent;background:transparent;padding:var(--sp-1_5) var(--sp-2);text-align:left;font:inherit;font-size:var(--fs-9);line-height:var(--lh-135);color:var(--ink);cursor:pointer}
.lxitem:hover{background:color-mix(in srgb,var(--viz-ink) 5%,transparent)}
.lxitem.on{border-left-color:var(--viz-brand-blue);background:var(--viz-highlight)}
.lxitem .tag{flex:0 0 auto;font-size:var(--fs-1)}
.lxmissing{margin:var(--sp-1_5) var(--sp-3) var(--sp-3_5);border:var(--bw-1) dashed var(--rule);padding:var(--sp-2_5) var(--sp-3);display:flex;flex-direction:column;gap:var(--sp-1_5);font-size:var(--fs-7);line-height:var(--lh-150);color:var(--viz-grey)}
.lxmissing b{color:var(--ink);font-weight:var(--fw-semibold)}
.dbody .lxmissing{margin:var(--sp-1_5) 0 0}
.lxhead{display:flex;flex-direction:column;gap:var(--sp-1)}
.lxhead h2{margin:0;font-size:var(--fs-17);line-height:var(--lh-130)}
.lxhead .muted{font-size:var(--fs-9);line-height:var(--lh-150);max-width:80ch}
.lxctl{flex-wrap:wrap}
.lxpick{display:inline-flex;flex-direction:column;gap:var(--sp-0_5);margin-right:var(--sp-3)}
.lxpick.grow{min-width:260px}
.lxpick select,.lxpick input{font:inherit;font-size:var(--fs-9);padding:var(--sp-1) var(--sp-1_5);border:var(--bw-1) solid var(--rule);background:var(--viz-raised);color:var(--ink)}
.lxpicks{border:0;padding:0;margin:0;display:flex;flex-wrap:wrap;gap:var(--sp-1_5) var(--sp-3_5);font-size:var(--fs-8)}
.lxpicks legend{padding:0;margin-bottom:var(--sp-1)}
.lxpicks label{display:inline-flex;align-items:center;gap:var(--sp-1)}
.lxtools{display:flex;gap:var(--sp-2)}
.lxnote{font-size:var(--fs-8);line-height:var(--lh-150);border-left:var(--bw-2) solid var(--rule);padding:var(--sp-0_5) var(--sp-2_5);color:var(--ink)}
.lxsrc{border-top:var(--bw-1) dotted var(--rule);padding-top:var(--sp-2)}
.lxother{margin-top:calc(-1 * var(--sp-1_5))}
.lxfocus{font-size:var(--fs-9)}
.lxall summary{cursor:pointer;padding:var(--sp-1) 0}
/* ---- render blocks (web/blocks.js): kinds with no older component of their own */
/* documented evidence: what the session's documents say, set apart from every run result (amber rule, raised ground) */
.docev{display:flex;flex-direction:column;gap:var(--sp-2_5);border-left:var(--bw-3) solid var(--amber);background:var(--amber-l);padding:var(--sp-3) var(--sp-4)}
.docev .t{background:var(--viz-raised)}
/* a strip of runs: a determined run's dot is clickable to its provenance */
.chart.strip .sdot[data-action]{cursor:pointer}
.chart.strip .sdot:hover,.chart.strip .sdot:focus{stroke:var(--ink);stroke-width:var(--bw-1_5)}
.lxtable td,.lxtable th{white-space:nowrap}
.lxtable td:nth-child(2){white-space:normal;min-width:180px}
.tot td{font-weight:var(--fw-semibold);border-top:var(--bw-1) solid var(--ink)}
.chart .dot,.legend .dot{display:inline-block;width:9px;height:9px;border-radius:var(--radius-round);opacity:.6}
.chart .pt:hover,.chart .pt:focus{fill-opacity:.7;outline:none;stroke-width:1.6}
/* Sankey: one accent; a node's flows light up on hover or focus */
.sankey .sklink{fill:none;stroke:var(--viz-brand-blue);stroke-opacity:.22;transition:stroke-opacity .12s}
.sankey .sklink:hover{stroke-opacity:.55}
.sankey.skhl .sklink{stroke-opacity:.07}
.sankey.skhl .sklink.on{stroke-opacity:.6}
.sankey .sknode{cursor:pointer}
.sankey .sknode:focus-visible rect{stroke:var(--viz-brand-blue);stroke-width:2}
.sankey .sknode:focus{outline:none}
@media (prefers-reduced-motion:reduce){.sankey .sklink{transition:none}}
.dgbox .dg-scroll>svg.sankey{min-width:0;width:100%;height:auto}
/* ---- AI assistant: a compact guide, with the help-desk chat docked right */
.asst{flex-grow:1;display:grid;grid-template-columns:minmax(0,1fr) 400px;min-height:0}
.aguide{min-height:0;overflow:auto}
.ainner{max-width:980px;padding:var(--sp-7) var(--sp-9) var(--sp-12);display:flex;flex-direction:column;gap:var(--sp-5_5)}
.atitle{margin:var(--sp-1) 0 0;font-size:var(--fs-21);line-height:var(--lh-120)}
.ah{margin:0 0 var(--sp-2);font-size:var(--fs-13);font-weight:var(--fw-bold)}
.agrid{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:var(--sp-7)}
.acol{display:flex;flex-direction:column;gap:var(--sp-1_5)}
.ticks{list-style:none;margin:0 0 var(--sp-3_5);padding:0;display:flex;flex-direction:column;gap:var(--sp-1_5);font-size:var(--fs-10);line-height:var(--lh-150)}
.ticks li{display:grid;grid-template-columns:18px minmax(0,1fr);gap:var(--sp-1_5)}
.tk{font-family:var(--mono);font-weight:var(--fw-bold)}.tk.ok{color:var(--viz-status-good)}.tk.no{color:var(--viz-status-critical)}
.steps{margin:0;padding-left:var(--sp-5);display:flex;flex-direction:column;gap:var(--sp-2);font-size:var(--fs-10);line-height:var(--lh-150)}
.amodels{display:flex;flex-direction:column;gap:var(--sp-1_5);border-top:var(--bw-1) solid var(--rule);padding-top:var(--sp-3_5)}
.amodel{display:flex;gap:var(--sp-2_5);align-items:baseline;flex-wrap:wrap;font-size:var(--fs-10)}
.amodel .muted{font-size:var(--fs-8)}
.stepper{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:var(--sp-2_5);counter-reset:none}
.stepper li{display:flex;flex-direction:column;gap:var(--sp-1_5);border-top:var(--bw-2) solid var(--ink);padding-top:var(--sp-2);font-size:var(--fs-8);line-height:var(--lh-140)}
.stepper .sn{display:inline-flex;width:22px;height:22px;align-items:center;justify-content:center;border:var(--bw-1) solid var(--ink);font-family:var(--mono);font-size:var(--fs-5)}
.stepper b{font-size:var(--fs-9);line-height:var(--lh-130)}
.stepper .sd{color:var(--viz-grey)}
.adiscs{display:flex;flex-direction:column;gap:var(--sp-2)}
.adisc{border:var(--bw-1) solid var(--rule);background:var(--viz-raised)}
.adisc>summary,.aidx>summary{cursor:pointer;padding:var(--sp-2_5) var(--sp-3_5);font-size:var(--fs-10);font-weight:var(--fw-semibold);list-style-position:inside}
.adisc>summary:focus-visible,.aidx>summary:focus-visible{outline:var(--bw-2) solid var(--viz-brand-blue);outline-offset:calc(-1 * var(--ring-offset))}
.adbody{padding:var(--sp-1) var(--sp-3_5) var(--sp-3_5);display:flex;flex-direction:column;gap:var(--sp-2_5)}
.adrow{display:flex;gap:var(--sp-2_5);align-items:flex-end;justify-content:space-between;flex-wrap:wrap}
.adrow .grow{flex:1 1 240px;display:flex;flex-direction:column;gap:var(--sp-0_5)}
.adrow input{font:inherit;font-size:var(--fs-9);padding:var(--sp-1_25) var(--sp-2);border:var(--bw-1) solid var(--rule);background:var(--paper);color:var(--ink)}
.aprompt{white-space:pre-wrap;max-height:240px;overflow:auto;font-size:var(--fs-6);line-height:var(--lh-150)}
.atool{display:grid;grid-template-columns:170px minmax(0,1fr);gap:var(--sp-1) var(--sp-3);font-size:var(--fs-8);line-height:var(--lh-145);border-top:var(--bw-1) dotted var(--rule);padding-top:var(--sp-2)}
.atool>details{grid-column:2}
.aidx{border-top:var(--bw-1) solid var(--rule)}
.aidx>summary{font-weight:var(--fw-regular)}
.atable td{vertical-align:top;font-size:var(--fs-7);line-height:var(--lh-145)}
.achat{display:flex;flex-direction:column;gap:var(--sp-3);border-left:var(--bw-1) solid var(--rule);background:var(--paper);padding:var(--sp-5_5) var(--sp-5);min-height:0}
.achead .ah{margin:0}
.achips{display:flex;flex-wrap:wrap;gap:var(--sp-1_5)}
.achips .chip{text-transform:none;letter-spacing:0;font-family:var(--sans);font-size:var(--fs-7)}
.amsgs{flex:1 1 auto;min-height:140px;overflow:auto;display:flex;flex-direction:column;gap:var(--sp-2_5)}
.amsg{display:flex;flex-direction:column;gap:var(--sp-1);font-size:var(--fs-10);line-height:var(--lh-150);padding:var(--sp-2) var(--sp-2_5);border:var(--bw-1) solid var(--rule)}
.amsg p{margin:0}.amsg ul{margin:0;padding-left:var(--sp-4_5)}
.amsg.you{align-self:flex-end;max-width:88%;background:var(--viz-highlight);border-color:transparent}
.amsg.bot{background:var(--viz-raised)}
.amsg.pending{flex-direction:row;align-items:center;gap:var(--sp-2);color:var(--viz-grey)}
.achat .askform{display:flex}
.achat .askform input{flex:1 1 auto;min-width:0;height:38px;border:var(--bw-1) solid var(--rule);border-right:0;background:var(--viz-raised);padding:0 var(--sp-2_5);font:inherit;color:var(--ink)}
.achat .askform button{height:38px;padding:0 var(--sp-3_5);border:var(--bw-1) solid var(--ink);background:var(--ink);color:var(--paper);font-family:var(--mono);font-size:var(--fs-3);letter-spacing:var(--ls-10);text-transform:uppercase}
.achat .askform button[disabled]{opacity:.55}
.achat .askerr{margin:0}
@media (max-width:1240px){.stepper{grid-template-columns:repeat(4,minmax(0,1fr))}.asst{grid-template-columns:minmax(0,1fr) 340px}}
@media (max-width:999px){
  .asst{display:flex;flex-direction:column}
  .asst>*{flex-shrink:0}
  .aguide,.achat,.aguide.scroll{overflow:visible;height:auto;max-height:none}
  .achat{border-left:0;border-top:var(--bw-1) solid var(--rule)}
  .ainner{padding:var(--sp-5) var(--sp-4) var(--sp-7)}
  .agrid{grid-template-columns:minmax(0,1fr)}
  .stepper{grid-template-columns:minmax(0,1fr)}
  .stepper li{display:grid;grid-template-columns:28px minmax(0,1fr);column-gap:var(--sp-2)}
  .stepper li .sd{grid-column:2}
  .atool{grid-template-columns:minmax(0,1fr)}.atool>details{grid-column:1}
}
pre.json.aprompt{background:var(--paper);color:var(--ink);border:var(--bw-1) solid var(--rule);font-size:var(--fs-6)}
/* ---- How I read your question */
.howread{position:relative;display:block;font-size:var(--fs-9);line-height:var(--lh-165);border-left:var(--bw-3) solid var(--viz-brand-blue);padding:var(--sp-1) 0 var(--sp-1) var(--sp-3)}
.howread .hrf{display:inline}
.rundots{display:block;max-width:100%;height:auto}
.hrtitle{font-weight:var(--fw-bold);margin-right:var(--sp-1)}
.hrk{color:var(--viz-grey)}
.hrv{border:0;background:transparent;padding:0;font:inherit;color:var(--ink);border-bottom:var(--bw-1) dotted var(--viz-brand-blue);cursor:pointer;text-align:left}
.hrv:hover,.hrv:focus-visible{color:var(--viz-brand-blue)}
span.hrv{border-bottom:0;cursor:default}
.hrv[aria-expanded=true]{background:var(--viz-highlight)}
.hrdod{font-style:italic;color:var(--ink)}
.hrmenu{display:flex;flex-direction:column;gap:var(--sp-0_5);border:var(--bw-1) solid var(--ink);background:var(--viz-raised);padding:var(--sp-1_5);margin-top:var(--sp-1)}
.hrmenu button{border:0;background:transparent;text-align:left;font:inherit;font-size:var(--fs-9);padding:var(--sp-1_25) var(--sp-2);cursor:pointer;color:var(--ink)}
.hrmenu button:hover,.hrmenu button:focus-visible{background:var(--viz-highlight)}
.hrmenu button[aria-checked=true]{font-weight:var(--fw-semibold)}
.hrmenu button[aria-checked=true]::before{content:'✓ '}
.whyd>summary{cursor:pointer;font-size:var(--fs-7);color:var(--viz-grey);font-family:var(--mono);letter-spacing:var(--ls-06)}
.whyd .why{margin-top:var(--sp-1_5)}
/* robustness, gap and crisis */
.robust{font-size:var(--fs-9);line-height:var(--lh-150);border-left:var(--bw-3) solid var(--viz-status-good);padding:var(--sp-0_5) var(--sp-2_5);margin-top:calc(-1 * var(--sp-1_5))}
.robust.flip{border-left-color:var(--viz-status-warning)}
.gaptiles{grid-template-columns:repeat(4,minmax(0,1fr))}
.kpi.desc .big{color:var(--viz-grey)}
.crisistiles{grid-template-columns:minmax(0,1fr)}
.kpi.crisis .klead{font-size:var(--fs-11);line-height:var(--lh-150)}
.dotrow{display:flex;align-items:center;gap:var(--sp-2_5);flex-wrap:wrap}
.dotrow .status{min-width:180px}
.libnote{font-size:var(--fs-8);line-height:var(--lh-150);border-left:var(--bw-2) solid var(--rule);padding:var(--sp-0_5) var(--sp-2_5)}
.libflag{border-color:var(--amber);color:var(--ink)}
@media (max-width:999px){.gaptiles{grid-template-columns:repeat(2,minmax(0,1fr))}.dotrow .status{min-width:0}}
.lxcov{display:flex;flex-direction:column;gap:var(--sp-1_5)}

/* ---- resizable panes: a 6 px handle on the inner edge of each side panel (not on narrow screens) */
.rail,.panel,.tree{position:relative}
.rsz{position:absolute;top:0;bottom:0;width:6px;z-index:var(--z-handle);cursor:col-resize;background:transparent;touch-action:none}
.rsz-r{right:-3px}.rsz-l{left:-3px}
.rsz:hover,.rsz:focus-visible,.resizing .rsz{background:color-mix(in srgb,var(--viz-brand-blue) 35%,transparent)}
.rsz:focus-visible{outline:var(--bw-2) solid var(--viz-brand-blue);outline-offset:0}
.resizing,.resizing *{cursor:col-resize!important;user-select:none}
@media (max-width:999px){.rsz{display:none}}
/* settings popover and the delete confirmation */
.hdricons{display:flex;align-items:center;gap:var(--sp-0_5);margin-left:var(--sp-1)}
.hdricons .themebtn{margin-left:0}
.setpop{position:fixed;top:62px;right:16px;z-index:var(--z-pop);width:min(520px,calc(100vw - 32px));max-height:calc(100vh - 90px);overflow:auto;background:var(--viz-raised);border:var(--bw-1) solid var(--ink);padding:var(--sp-4) var(--sp-4_5);display:flex;flex-direction:column;gap:var(--sp-2_5);box-shadow:var(--shadow-pop)}
.setscrim{position:fixed;inset:0;z-index:var(--z-pop-scrim);background:transparent}
.setpop .modelpick{border-top:0;padding-top:0;margin:0}
.usage{display:flex;flex-direction:column;gap:var(--sp-2);font-size:var(--fs-9)}
.usage .bar{height:6px}
.usage .t td,.usage .t th{font-size:var(--fs-6);padding:var(--sp-1) var(--sp-1_5)}
.trash{border:var(--bw-1) solid transparent;background:transparent;color:var(--viz-grey);padding:var(--sp-1);display:inline-flex;align-items:center;gap:var(--sp-1_5);cursor:pointer;font:inherit;font-size:var(--fs-7)}
.trash:hover,.trash:focus-visible{color:var(--viz-status-critical);border-color:var(--viz-status-critical)}
.trash.wide{border-color:var(--rule);padding:var(--sp-1_5) var(--sp-2_5)}
.run.danger{background:var(--viz-status-critical);color:var(--viz-paper)}
.run.danger:disabled{background:var(--rule);color:var(--viz-grey)}
.cftype{display:flex;flex-direction:column;gap:var(--sp-1);font-size:var(--fs-9)}
.cftype input{font:inherit;font-family:var(--mono);padding:var(--sp-1_5) var(--sp-2);border:var(--bw-1) solid var(--ink);background:var(--paper);color:var(--ink)}
.sr{position:absolute;left:-9999px}
.res{gap:var(--sp-4)}
.res{padding:var(--sp-4_5) var(--sp-6) var(--sp-5)}.res h2.verdictl{font-size:var(--fs-19);line-height:var(--lh-128)}
/* the card adapts to the canvas's own width (panels can be resized), not only to the window */
.canvas{container-type:inline-size;container-name:canvas}
@container canvas (max-width:700px){
  .sc .line.edit{grid-template-columns:minmax(0,1fr) 140px auto;grid-template-areas:"nm bar tag" "v v v"}
  .sc .line.edit>.nm{grid-area:nm}.sc .line.edit>.lbar,.sc .line.edit>.lslider{grid-area:bar}.sc .line.edit>.v{grid-area:v;flex-direction:row;flex-wrap:wrap;align-items:center;gap:var(--sp-1_5) var(--sp-3_5)}.sc .line.edit>.tag{grid-area:tag}
  .gaptiles{grid-template-columns:repeat(2,minmax(0,1fr))}
}
/* the question being asked, and one that could not be filed, in the session's list */
.qitem.pending .qi,.qitem.notfiled .qi{cursor:default}
.qitem.pending .qi:hover .qt,.qitem.notfiled .qi:hover .qt{text-decoration:none}
.qitem .qnote{font-size:var(--fs-5);padding-left:var(--sp-5)}
.qitem.notfiled .qt{color:var(--grey)}
.qitem.pending.head .qi,.qitem.notfiled.head .qi{font-size:var(--fs-13)}
/* a limit of the model named by the question (something it does not record): a quiet line under the reading */
.hrlim{display:block;margin-top:var(--sp-1);font-size:var(--fs-7);color:var(--grey);font-style:italic}
/* the running/asking dot shares the class name "run" with the Run button: keep it a dot */
.mark.run{padding:0;height:8px;border:0}
/* the answer's design on the card: what will run, and what the answer will show */
.adesign{display:flex;flex-direction:column;gap:var(--sp-1);font-size:var(--fs-9);line-height:var(--lh-160);border-left:var(--bw-3) solid var(--rule);padding:var(--sp-0_5) 0 var(--sp-0_5) var(--sp-3)}
.adrow{position:relative}
.adrow .hrk{font-weight:var(--fw-semibold)}
.adouts{display:inline-flex;flex-wrap:wrap;gap:var(--sp-1) var(--sp-2);margin-left:var(--sp-2)}
.adout{font-family:var(--mono);font-size:var(--fs-5);white-space:normal;overflow-wrap:anywhere}
.adout.ok{color:var(--viz-status-good)}
.adout.no{color:var(--viz-status-serious)}
.exchip{display:inline-flex;align-items:center;border:var(--bw-1) solid var(--rule);background:var(--paper);margin:var(--sp-0_5) var(--sp-1) var(--sp-0_5) 0;vertical-align:middle}
.exchip .exname{border:0;background:transparent;font:inherit;font-size:var(--fs-7);padding:var(--sp-0_25) var(--sp-1_5);color:var(--ink);cursor:help}
.exchip .exx{border:0;border-left:var(--bw-1) solid var(--rule);background:transparent;font-size:var(--fs-9);line-height:var(--lh-100);padding:var(--sp-0_5) var(--sp-1_5);color:var(--grey);cursor:pointer}
.exchip .exx:hover{color:var(--viz-status-serious)}
.exadd{border:var(--bw-1) dashed var(--rule);background:transparent;font:inherit;font-size:var(--fs-7);padding:var(--sp-0_25) var(--sp-2);color:var(--blue);cursor:pointer;vertical-align:middle}
.adlock{display:inline-flex;gap:var(--sp-1);align-items:center;margin-left:var(--sp-1_5);font-size:var(--fs-5);color:var(--grey)}
.adlock .lock{width:10px;height:12px}
.exwhy{font-size:var(--fs-7);color:var(--grey);font-style:italic}
.adinf{font-size:var(--fs-7);color:var(--grey);font-style:italic}
.verdict.nofit{border-color:var(--viz-status-serious)}
.reuseplain{font-size:var(--fs-9);line-height:var(--lh-150);padding:var(--sp-2) var(--sp-4);border-top:var(--bw-1) solid var(--rule);color:var(--ink)}
/* declared exhibits under the verdict */
.declared{display:flex;flex-direction:column;gap:var(--sp-2)}
.exfold{font-size:var(--fs-5);align-self:flex-start}
.tag.exp{border-style:dashed}
.smgrid{display:grid;grid-template-columns:repeat(var(--sm-cols,3),minmax(0,1fr));gap:var(--sp-1_5) var(--sp-3)}
.smcell .smt{font-size:var(--fs-5);font-weight:var(--fw-semibold);line-height:var(--lh-130)}
.smcell .smt .status{font-weight:var(--fw-regular)}
.smaxes{display:flex;justify-content:space-between;gap:var(--sp-3);flex-wrap:wrap;font-size:var(--fs-3)}
.heatlegend{display:flex;flex-wrap:wrap;gap:var(--sp-1) var(--sp-2_5);font-family:var(--mono);font-size:var(--fs-3);color:var(--grey)}
.heatlegend i{display:inline-block;width:14px;height:10px;margin-right:var(--sp-1);vertical-align:middle}
@container canvas (max-width:640px){.smgrid{--sm-cols:2}}
.exstrip{display:flex;flex-wrap:wrap;gap:var(--sp-1) var(--sp-2);align-items:center}
.exstrip .chip{min-height:24px;padding:var(--sp-0_5) var(--sp-2);font-size:var(--fs-5);text-transform:none;letter-spacing:0}
/* six follow-up chips still sit in two short lines under the tiles */
.fchips{gap:var(--sp-1) var(--sp-1_5);padding-top:var(--sp-2)}
.fchips .chip{font-size:var(--fs-6);padding:var(--sp-0_5) var(--sp-2);min-height:24px}
/* the declared answer adds a line of folded exhibits: the parts of a result sit a little closer */
.res{gap:var(--sp-3_25)}
.exprov{display:flex;flex-direction:column;gap:var(--sp-0_5)}
.exprov>span{min-width:0}
.rxspec{display:flex;flex-direction:column;gap:var(--sp-0_5);border-left:var(--bw-2) solid var(--rule);padding-left:var(--sp-2_5)}
.rxspec + .rxspec{margin-top:var(--sp-2)}

/* data-tab dropdowns: sized to their labels within limits, never a sliver that hides the chosen option */
.lxsel{min-width:9ch;max-width:min(44ch,100%);text-overflow:ellipsis}

/* Home: what only an agent-based model shows */
.abmcase{display:flex;flex-direction:column;gap:var(--sp-2_5);margin-top:var(--sp-2)}
.abmgrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:var(--sp-3_5)}
.abmitem{min-width:0;display:flex;flex-direction:column;gap:var(--sp-1_5);padding:var(--sp-3_5) var(--sp-4);border:var(--bw-1) solid var(--rule);background:var(--paper);font-size:var(--fs-10);line-height:var(--lh-150)}
.abmitem b{font-size:var(--fs-11)}
.abmitem .link{align-self:flex-start;text-align:left}
/* the answer's "needs" list on a phone: a long measure name wraps inside its item instead of widening the card */
@media (max-width:700px){.adout{white-space:normal;overflow-wrap:anywhere}.adouts{margin-left:0}}

/* ==== Component classes that replaced the core's inline styles (T6) */
/* the scenario card's highlighted phrases: one colour per setting group; a comparison phrase is dashed */
.sc .ph.ph-blue{border-bottom:var(--bw-2) solid var(--blue)}
.sc .ph.ph-amber{border-bottom:var(--bw-2) solid var(--amber)}
.sc .ph.ph-cyan{border-bottom:var(--bw-2) solid var(--cyan)}
.sc .ph.cmp{border-bottom-style:dashed}
.sc .ph.dim{border-bottom-color:var(--rule)}
.sc .ph.on{background:var(--blue-l)}
.sc .ph.on.ph-amber{background:var(--amber-l)}
.sc .ph.on.cmp{background:var(--cyan-l)}
/* the Data explorer's ask row, and the heading line of a data tree (core Sources tree and every pack data tab) */
.dask{display:flex}
.dask input{flex-grow:1;min-width:0;height:36px;border:var(--bw-1) solid var(--rule);border-right:0;background:var(--paper);padding:0 var(--sp-2_5);font-family:var(--sans)}
.dask button{height:36px;padding:0 var(--sp-3);border:var(--bw-1) solid var(--ink);background:var(--ink);color:var(--paper);font-family:var(--mono);font-size:var(--fs-3);letter-spacing:var(--ls-10)}
.treehead{padding:var(--sp-2_5) var(--sp-4_5) var(--sp-1_5)}
.treefoot{padding:0 var(--sp-4_5) var(--sp-4)}
/* the model map's panel: no rule of its own (the map's column draws it); its heading in ink, not the accent */
aside.panel.panel-flush{border-left:0}
.phead .lbl.plain{color:var(--ink);border-bottom-color:var(--ink)}
/* a pack's data tab: number and text boxes in its settings row */
.lxctl .in-num{width:90px}
.lxctl .in-text{width:160px}
/* a table row that is "this run" among others, and a heat-shaded table cell (diverging palette, 3 steps each way) */
table.t tr.this{font-weight:var(--fw-semibold)}
table.t td.heat-neg-1{background:color-mix(in srgb, var(--viz-div-neg-1) 22%, transparent)}
table.t td.heat-neg-2{background:color-mix(in srgb, var(--viz-div-neg-2) 22%, transparent)}
table.t td.heat-neg-3{background:color-mix(in srgb, var(--viz-div-neg-3) 22%, transparent)}
table.t td.heat-pos-1{background:color-mix(in srgb, var(--viz-div-pos-1) 22%, transparent)}
table.t td.heat-pos-2{background:color-mix(in srgb, var(--viz-div-pos-2) 22%, transparent)}
table.t td.heat-pos-3{background:color-mix(in srgb, var(--viz-div-pos-3) 22%, transparent)}

/* ==== Utilities: the class catalogue (references/LAYOUT.md). Single purpose, token-valued, last in the file so they
   win over a component rule of equal specificity, as the inline styles they replaced did. Domain plugins may use the
   ones LAYOUT.md lists as plugin-safe; the style lint (scripts/lint_domain_web.py) allows nothing else. */
/* text: size (the --fs-N scale), line height, weight, style */
.fs-3{font-size:var(--fs-3)}.fs-5{font-size:var(--fs-5)}.fs-6{font-size:var(--fs-6)}.fs-7{font-size:var(--fs-7)}
.fs-8{font-size:var(--fs-8)}.fs-9{font-size:var(--fs-9)}.fs-11{font-size:var(--fs-11)}.fs-13{font-size:var(--fs-13)}
.fs-15{font-size:var(--fs-15)}.fs-16{font-size:var(--fs-16)}.fs-20{font-size:var(--fs-20)}
.lh-130{line-height:var(--lh-130)}.lh-135{line-height:var(--lh-135)}.lh-140{line-height:var(--lh-140)}
.lh-145{line-height:var(--lh-145)}.lh-150{line-height:var(--lh-150)}
.fw-semibold{font-weight:var(--fw-semibold)}.fw-bold{font-weight:var(--fw-bold)}
.u-italic{font-style:italic}.u-case-none{text-transform:none}.u-tleft{text-align:left}.u-sans{font-family:var(--sans)}
.u-break{overflow-wrap:anywhere}
/* text roles (plugin-safe): a panel or item title, its body, a small note */
.ptitle{font-size:var(--fs-13);font-weight:var(--fw-bold);line-height:var(--lh-130)}
.pbody{font-size:var(--fs-9);line-height:var(--lh-150)}
.pnote{font-size:var(--fs-8);line-height:var(--lh-150)}
.plead{font-size:var(--fs-13);font-weight:var(--fw-semibold)}
/* colour (tokens only) */
.u-ink{color:var(--ink)}.u-grey{color:var(--grey)}.u-blue{color:var(--blue)}.u-amber{color:var(--amber)}
.u-bc-cyan{border-color:var(--cyan)}.u-bc-amber{border-color:var(--amber)}.u-bc-rule{border-color:var(--rule)}
.u-dashed{border-style:dashed}
.u-bt-dashed{border-top:var(--bw-1) dashed var(--ink)}
/* flex layout */
.u-row{display:flex}.u-col{display:flex;flex-direction:column}.u-wrap{flex-wrap:wrap}
.u-center{align-items:center}.u-baseline{align-items:baseline}.u-between{justify-content:space-between}
.u-grow{flex-grow:1}.u-start{align-self:flex-start}.u-push{margin-left:auto}.u-full{flex-basis:100%}
.u-minh-0{min-height:0}.u-minw-0{min-width:0}.u-minw-150{min-width:150px}.u-maxh-none{max-height:none}
.u-gap-1{gap:var(--sp-1)}.u-gap-1_5{gap:var(--sp-1_5)}.u-gap-2{gap:var(--sp-2)}.u-gap-2_5{gap:var(--sp-2_5)}
.u-gap-3{gap:var(--sp-3)}.u-gap-3_5{gap:var(--sp-3_5)}.u-gap-1x3{gap:var(--sp-1) var(--sp-3)}
/* spacing */
.u-m-0{margin:0}.u-m-6{margin:var(--sp-6)}.u-m-8{margin:var(--sp-8)}.u-my-1{margin:var(--sp-1) 0}
.u-mt-1_5{margin-top:var(--sp-1_5)}.u-mt-2{margin-top:var(--sp-2)}.u-pt-2_5{padding-top:var(--sp-2_5)}
.u-p-1{padding:var(--sp-1)}.u-p-1_5{padding:var(--sp-1_5)}.u-p-6{padding:var(--sp-6)}.u-p-8{padding:var(--sp-8)}
.u-py-2_5{padding:var(--sp-2_5) 0}.u-py-4_5{padding:var(--sp-4_5) 0}

/* ==== Phone width: no page ever scrolls sideways (the gold's own 390px overflows, fixed in the core, T6). Long words
   (file paths, run codes) wrap inside their box; rows of view buttons wrap; wide tables scroll inside their frame. */
@media (max-width:999px){
  main{overflow-wrap:break-word}
  .subtabs{flex-wrap:wrap;row-gap:0}
  /* a thin row's name has priority: it takes the first line beside its label and button; the summary wraps below it
     instead of squeezing the name in proportion to its own length (template 2.0.3) */
  .thin{flex-wrap:wrap}
  .thin .t{flex:1 1 0;min-width:0;overflow-wrap:anywhere}
  .thin .s{flex:1 0 100%;order:9;white-space:normal}
}
/* nothing inside a result widens the page (a phone at 390 px): a long tag wraps, a wide table scrolls inside its own box */
.docev .tag{white-space:normal;overflow-wrap:anywhere}
.declared,.docev,.tablewrap{min-width:0;max-width:100%}
