:root{
  --bg:#0E1113; --panel:#161A1D; --panel2:#1C2226; --ink:#E4E9E7; --sub:#8A968F;
  --line:#242B30; --accent:#35C9D0; --good:#4F9E6A; --deg:#D6A03A; --bad:#C7524A;
  --mono:ui-monospace,"SF Mono",Menlo,Consolas,monospace;
  --sans:system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;
}
*{box-sizing:border-box}
html,body{margin:0;background:var(--bg);color:var(--ink);font-family:var(--sans);font-size:13px}
.mono{font-family:var(--mono)}

.topbar{display:flex;align-items:center;justify-content:space-between;height:47px;box-sizing:border-box;
  padding:0 16px;border-bottom:1px solid var(--line);background:var(--panel)}
.brand{font-family:var(--mono);font-weight:700;letter-spacing:.04em;display:flex;align-items:center;gap:10px}
.brand .dot{width:9px;height:9px;border-radius:50%;background:var(--accent);box-shadow:0 0 10px var(--accent)}
.brand .sub{color:var(--sub);font-weight:400;font-size:11px;letter-spacing:.1em;text-transform:uppercase}
.hint{color:var(--sub);font-size:11px;font-family:var(--mono)}
.topright{display:flex;align-items:center;gap:14px}
.helpbtn{width:auto;flex:0 0 auto;background:var(--panel2);border:1px solid var(--accent);color:var(--accent);
  font-family:var(--mono);font-size:11px;padding:5px 10px;border-radius:14px;cursor:pointer}
.helpbtn:hover{background:var(--accent);color:#04191b}

/* help modal */
.modal-backdrop{position:fixed;inset:0;background:rgba(0,0,0,.6);z-index:80}
.modal{position:fixed;z-index:90;top:50%;left:50%;transform:translate(-50%,-50%);
  width:min(780px,94vw);max-height:88vh;overflow-y:auto;background:var(--panel);
  border:1px solid var(--accent);border-radius:12px;box-shadow:0 24px 70px rgba(0,0,0,.6);padding:26px 30px 34px}
.modal-close{position:sticky;float:right;top:0;width:auto;background:var(--panel2);border:1px solid var(--line);
  color:var(--ink);border-radius:6px;padding:5px 9px;cursor:pointer;font-size:13px}
.modal-body{max-width:66ch}
.modal-body h1{font-family:var(--serif,Georgia,serif);font-size:26px;margin:0 0 10px;color:var(--ink)}
.modal-body h2{font-family:var(--mono);font-size:13px;letter-spacing:.06em;text-transform:uppercase;
  color:var(--accent);margin:28px 0 8px;border-top:1px solid var(--line);padding-top:16px}
.modal-body h2 .tag{color:var(--sub);text-transform:none;letter-spacing:0;font-size:11px;margin-left:6px}
.modal-body p{font-size:14px;line-height:1.6;color:var(--ink);margin:0 0 12px}
.modal-body .lede{font-size:15.5px;color:var(--sub)}
.modal-body b{color:var(--ink)}
.modal-body code{font-family:var(--mono);font-size:12.5px;background:var(--panel2);padding:1px 5px;border-radius:4px;color:#B7E3E6}
.diagram{font-family:var(--mono);font-size:12px;line-height:1.45;background:#0d1113;border:1px solid var(--line);
  border-radius:8px;padding:14px 16px;overflow-x:auto;color:var(--sub);margin:6px 0 14px}
.modal-body blockquote{margin:0 0 10px;padding:9px 14px;border-left:3px solid var(--accent);
  background:var(--panel2);border-radius:0 6px 6px 0;font-size:13.5px;line-height:1.55}
.modal-body blockquote i{color:var(--sub)}
dl.gl{margin:4px 0 8px;display:grid;grid-template-columns:auto 1fr;gap:5px 16px}
dl.gl dt{font-family:var(--mono);font-size:12.5px;color:#E0B050;white-space:nowrap}
dl.gl dd{margin:0;font-size:13.5px;line-height:1.5;color:var(--ink)}
ul.caveats{margin:4px 0;padding-left:20px}
ul.caveats li{font-size:13.5px;line-height:1.55;margin-bottom:6px;color:var(--ink)}
.modal-body figure{margin:12px 0 16px;background:#0f1416;border:1px solid var(--line);border-radius:8px;padding:12px 14px 9px}
.modal-body figure svg{display:block;width:100%;height:auto}
.modal-body figcaption{font-size:12.5px;line-height:1.55;color:var(--sub);margin-top:10px;padding-top:9px;border-top:1px solid var(--line)}
.modal-body figcaption b{color:var(--ink)}
ol.steps{margin:6px 0 10px;padding-left:22px}
ol.steps li{font-size:14px;line-height:1.55;margin-bottom:7px;color:var(--ink)}
p.warn{font-size:13px;line-height:1.55;color:var(--ink);background:rgba(214,160,58,.10);
  border-left:3px solid var(--deg);border-radius:0 6px 6px 0;padding:9px 14px;margin:4px 0 12px}

.topbar{position:sticky;top:0;z-index:70}
.stage{padding:12px 16px;display:flex;flex-direction:column;gap:9px;min-height:calc(100vh - 54px)}

/* full-screen Studio (build) — collapses to reveal the results */
.studio{position:fixed;left:0;right:0;top:47px;bottom:0;z-index:60;overflow-y:auto;background:var(--bg);padding:16px 24px 52px}
.studio[hidden]{display:none}
.studio-bar{position:sticky;top:0;z-index:2;max-width:1180px;margin:0 auto 20px;padding:6px 0 14px;
  display:flex;justify-content:space-between;align-items:center;background:var(--bg);border-bottom:1px solid var(--line)}
.studio-title{font-family:var(--mono);font-weight:700;letter-spacing:.05em;font-size:15px;color:var(--ink);text-transform:uppercase}
.studio-actions{display:flex;gap:8px;align-items:center;flex-wrap:wrap;justify-content:flex-end}
.studio-actions .query{width:auto;padding:11px 30px;font-size:14px}
.studio-grid{display:grid;grid-template-columns:1.05fr 1fr 1fr;gap:30px;max-width:1180px;margin:0 auto;align-items:start}
.scol{display:flex;flex-direction:column;gap:16px;min-width:0}
@media(max-width:900px){.studio-grid{grid-template-columns:1fr}}
.editbtn{width:auto;flex:0 0 auto;background:var(--panel2);border:1px solid var(--accent);color:var(--accent);
  font-family:var(--mono);font-size:11px;padding:5px 11px;border-radius:14px;cursor:pointer}
.editbtn:hover{background:var(--accent);color:#04191b}
/* studio bar context (book + bench inline) */
.studio-bar{max-width:1400px}
.studio-context{display:flex;gap:8px;align-items:center;flex:1;max-width:560px;margin:0 22px}
.studio-context .combo{flex:1;min-width:120px}
.studio-context #benchSel{width:auto;flex:0 0 auto}
.benchtick{width:110px;flex:0 0 110px}

/* composer: palette drawer · canvas · lever rail */
.composer{display:flex;gap:18px;max-width:1400px;margin:0 auto;align-items:stretch;min-height:calc(100vh - 150px)}
.palette-drawer{flex:0 0 248px;display:flex;flex-direction:column;min-height:0}
.drawer-h,.rail-h{font-family:var(--mono);font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--sub);margin-bottom:8px}
.drawer-sub{color:var(--accent);text-transform:none;letter-spacing:0}
.palette-drawer .detlist{flex:1;max-height:none;min-height:0}
.lever-rail{flex:0 0 300px;display:flex;flex-direction:column;gap:16px;overflow-y:auto}

.canvas-wrap{flex:1;min-width:0;display:flex;flex-direction:column;gap:8px}
.canvas-toolbar{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.tbtn{width:auto;background:var(--panel2);border:1px solid var(--line);color:var(--ink);font-family:var(--mono);
  font-size:12px;padding:6px 11px;border-radius:6px;cursor:pointer}
.tbtn:hover{border-color:var(--accent);color:var(--accent)}
.tbop{width:auto;flex:0 0 auto;font-size:12px;padding:6px 8px}
.tbspace{flex:1}
.canvas-hint{font-family:var(--mono);font-size:11px;color:var(--sub)}
.canvas{position:relative;flex:1;min-height:360px;overflow:auto;background:#0f1417;border:1px solid var(--line);border-radius:9px}
.canvas-empty{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;text-align:center;
  color:var(--sub);font-size:13.5px;line-height:1.6}
.canvas-empty b{color:var(--ink)}
.wires{position:absolute;top:0;left:0;pointer-events:none}

/* config fold-out — anchored under the node inside the canvas, animates open */
.cfgpanel{position:absolute;z-index:5;box-sizing:border-box;max-height:60vh;overflow-y:auto;
  background:var(--panel);border:1px solid var(--mint);border-radius:9px;padding:12px 14px 14px;
  box-shadow:0 14px 34px rgba(0,0,0,.55);
  transform-origin:top left;transform:scaleY(.5) translateY(-10px);opacity:0;
  transition:transform .16s ease, opacity .16s ease}
.cfgpanel.open{transform:none;opacity:1}
.cfg-h{display:flex;align-items:center;gap:8px}
.cfg-h .gdot{width:11px;height:11px;border-radius:3px;flex:0 0 11px}
.cfg-nm{font-family:var(--mono);font-size:13px;color:var(--ink);flex:1 1 auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cfg-x{flex:0 0 auto;width:auto;background:none;border:1px solid var(--line);border-radius:6px;color:var(--sub);font-size:12px;line-height:1;cursor:pointer;padding:4px 9px}
.cfg-x:hover{color:var(--bad);border-color:var(--bad);background:#2a2020}
.cfg-sub{font-size:11.5px;color:var(--sub);line-height:1.45;margin:6px 0 12px}
.cfg-key{background:#0d1215;border:1px solid var(--line);border-radius:7px;padding:9px 11px;margin-bottom:12px}
.cfg-plabel{font-family:var(--mono);font-size:10px;letter-spacing:.08em;text-transform:uppercase;color:var(--sub);margin-bottom:7px}
.cfg-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px 14px}
.cfg-grid .prm{display:flex;flex-direction:column;align-items:stretch;gap:3px;margin:0;padding:0}
.cfg-grid .prm span{flex:none;font-family:var(--mono);font-size:10.5px;color:var(--sub)}
.cfg-grid .prm input{flex:none;width:100%;padding:5px 8px;font-size:12px}
.hint-hot{color:var(--mint)}

/* graph nodes */
.gnode{position:absolute;box-sizing:border-box;background:var(--panel2);border:1px solid var(--line);border-radius:8px;
  display:flex;align-items:center;gap:9px;cursor:pointer;user-select:none;z-index:1}
.gdet{width:312px;height:40px;padding:0 9px 0 11px}
.gdet:hover{border-color:#4b565c}
.gdet.sel{border-color:var(--accent);box-shadow:0 0 0 1px var(--accent)}
.gdet.cfg{border-color:var(--mint);box-shadow:0 0 0 1px var(--mint);background:#141d1c}
.gnode .gsel{width:14px;height:14px;flex:0 0 14px;margin:0;padding:0;border:0;background:none;box-shadow:none;accent-color:var(--accent);cursor:pointer}
.gnode .gdot{width:10px;height:10px;border-radius:3px;flex:0 0 10px}
.gnode .gnm{font-family:var(--mono);font-size:11.5px;color:var(--ink);white-space:nowrap;overflow:hidden;flex:0 1 auto}
.gnode .gsub{margin-left:auto;font-family:var(--mono);font-size:11px;color:var(--mint);flex:0 0 auto;padding-left:8px}
.gnode .gcaret{color:var(--sub);font-size:10px;flex:0 0 auto}
.gdet:hover .gcaret{color:var(--mint)}
.gnode .gx{color:var(--sub);font-size:11px;flex:0 0 auto;padding:2px 3px;border-radius:4px}
.gnode .gx:hover{color:var(--bad);background:#2a2020}
.gop{width:312px;height:36px;padding:0 9px;border-color:#FF6AA8;background:#171016}
.gop.sel{box-shadow:0 0 0 1px currentColor}
.gopsel{width:auto;flex:1;min-width:0;background:transparent;border:0;color:var(--mint);font-family:var(--mono);font-size:12px;padding:2px 0;cursor:pointer}
.gopdot{flex:0 0 auto;font-size:12px;line-height:1;color:#0d0d0d;width:16px;height:16px;border-radius:4px;
  display:inline-flex;align-items:center;justify-content:center}
.gop-int{font-family:var(--mono);font-size:9.5px;color:var(--sub);flex:0 0 auto;white-space:nowrap;
  text-transform:uppercase;letter-spacing:.06em}
/* the FINAL composite: taller, glowing, obviously the output */
.gop.groot{height:44px;background:#1c1017;border-width:2px;
  box-shadow:0 0 14px color-mix(in srgb, var(--cc,#FF6AA8) 32%, transparent), 0 6px 22px rgba(0,0,0,.5)}
.groot-tag{font-family:var(--mono);font-size:10px;font-weight:700;flex:0 0 auto;white-space:nowrap;
  color:#0d0d0d;padding:3px 8px;border-radius:5px;letter-spacing:.04em}
/* frame that WRAPS the final composite + its constituents */
.compwrap{position:absolute;z-index:0;border:1.5px dashed var(--cc,#FF6AA8);border-radius:14px;
  background:linear-gradient(180deg, color-mix(in srgb, var(--cc,#FF6AA8) 7%, transparent), transparent 60%);
  pointer-events:none}
.compwrap-tag{position:absolute;top:-10px;left:14px;font-family:var(--mono);font-size:10px;font-weight:700;
  letter-spacing:.08em;color:var(--cc,#FF6AA8);background:var(--bg);padding:1px 9px;border:1px solid var(--cc,#FF6AA8);
  border-radius:10px}

.ctl label{display:block;font-size:10.5px;letter-spacing:.09em;text-transform:uppercase;color:var(--sub);margin-bottom:6px}
.ctl.row2{display:flex;gap:10px}.ctl.row2>div{flex:1}
/* lever-stage headers */
.stage-h{display:flex;align-items:center;gap:9px;font-family:var(--mono);font-size:12px;letter-spacing:.08em;
  text-transform:uppercase;color:var(--accent);margin:6px 0 -2px;padding-top:14px;border-top:1px solid var(--line)}
.stage-h .sn{display:inline-flex;width:17px;height:17px;border-radius:50%;border:1px solid var(--accent);
  color:var(--accent);align-items:center;justify-content:center;font-size:10px;flex:0 0 17px}
/* advanced disclosure */
details.adv{border-top:1px solid var(--line);padding-top:10px;display:flex;flex-direction:column;gap:16px}
details.adv>summary{font-family:var(--mono);font-size:11px;letter-spacing:.08em;text-transform:uppercase;
  color:var(--sub);cursor:pointer;list-style:none;padding:2px 0;margin-bottom:-4px}
details.adv>summary::-webkit-details-marker{display:none}
details.adv>summary::before{content:"▸  ";color:var(--sub)}
details.adv[open]>summary::before{content:"▾  "}
details.adv>summary:hover{color:var(--accent)}
.ctl .chk{display:flex;align-items:center;gap:8px;font-family:var(--mono);font-size:12px;
  text-transform:none;letter-spacing:0;color:var(--ink);cursor:pointer;margin:0 0 6px}
.ctl .chk input{width:auto}
input,select,button{font-family:var(--sans);font-size:12.5px;color:var(--ink);
  background:var(--panel2);border:1px solid var(--line);border-radius:5px;padding:7px 9px;width:100%}
input:focus,select:focus,button:focus-visible{outline:2px solid var(--accent);outline-offset:1px}
select[size]{padding:0}select[size] option{padding:5px 8px}
input[type=range]{padding:0;accent-color:var(--accent)}
.detlist{display:flex;flex-direction:column;gap:4px;max-height:380px;overflow-y:auto;
  border:1px solid var(--line);border-radius:6px;padding:7px;background:var(--panel2)}
/* family header */
.fam{font-family:var(--mono);font-size:10px;letter-spacing:.1em;text-transform:uppercase;color:var(--sub);opacity:.75;
  margin:6px 2px 1px;padding-top:5px;border-top:1px solid var(--line)}
.fam:first-child{border-top:0;margin-top:0;padding-top:0}
/* detector tile */
.tile{border:1px solid var(--line);border-radius:7px;background:var(--panel);padding:8px 9px;transition:border-color .12s}
.tile.selected{border-color:var(--accent);background:#182226}
.tile .tiletop{display:flex;align-items:center;gap:8px;cursor:pointer}
.tile .dot{width:10px;height:10px;border-radius:3px;flex:0 0 10px}
.tile .nm{font-family:var(--mono);font-size:13px;color:var(--ink)}
.tile .add{margin-left:auto;font-family:var(--mono);font-size:10px;color:var(--sub);border:1px solid var(--line);border-radius:5px;padding:1px 7px;white-space:nowrap}
.tile.selected .add{color:var(--accent);border-color:var(--accent)}
.tile .desc{font-size:11.5px;color:var(--sub);line-height:1.35;margin-top:5px}
.tile{cursor:pointer}
/* dimension slider (used by the config inspector) */
.dim{display:flex;flex-direction:column;gap:3px}
.dimhd{display:flex;justify-content:space-between;align-items:baseline}
.dimlbl{font-family:var(--mono);font-size:11px;color:var(--sub)}
.dimval{font-family:var(--mono);font-size:11px;color:var(--accent)}
.dimrange{width:100%;accent-color:var(--accent);height:3px}
/* hover popover */
.detpop{position:fixed;width:358px;max-height:92vh;overflow-y:auto;z-index:70;background:#0f1417;border:1px solid var(--accent);border-radius:9px;
  padding:13px 15px;box-shadow:0 16px 40px rgba(0,0,0,.55)}
.detpop h4{margin:0 0 2px;font-family:var(--mono);font-size:13.5px;display:flex;align-items:center;gap:8px;color:var(--ink)}
.detpop .pdot{width:10px;height:10px;border-radius:3px}
.detpop .ptag{margin-left:auto;font-family:var(--mono);font-size:10px;color:#04191b;background:var(--accent);border-radius:9px;padding:1px 7px}
.detpop p{font-size:12.5px;color:var(--sub);line-height:1.5;margin:8px 0}
.pmath{font-family:var(--mono);font-size:13.5px;color:var(--mint);background:#0b0f12;border:1px solid var(--line);border-radius:6px;
  padding:9px 11px;margin:9px 0;overflow-x:auto;white-space:nowrap;letter-spacing:.2px}
.pmath sub{font-size:.72em}
.popfig{display:block;height:60px;margin:8px 0 4px;background:#0c1013;border:1px solid var(--line);border-radius:6px}
.popcap{font-size:10.5px;color:var(--sub);line-height:1.4;margin:0 0 8px}
.pdetail{font-size:12px;color:var(--ink);line-height:1.6;margin:8px 0 10px;border-top:1px solid var(--line);padding-top:9px}
.pdetail b{color:var(--mint);font-weight:600}
.pdetail i{color:var(--sub);font-style:italic}
.detpop dl{display:grid;grid-template-columns:auto 1fr;gap:2px 12px;margin:0;font-size:12px}
.detpop dt{font-family:var(--mono);color:var(--accent)}
.detpop dd{margin:0;color:var(--ink)}
.detlist label{display:flex;align-items:center;gap:8px;text-transform:none;letter-spacing:0;
  font-family:var(--mono);font-size:12px;color:var(--ink);margin:0;padding:2px 3px;cursor:pointer;border-radius:3px}
.detlist label:hover{background:#222a2f}
.detlist input{width:auto;margin:0}
.detlist .swatch{width:9px;height:9px;border-radius:2px;flex:0 0 9px}
.detitem{border-radius:4px}
.detrow{display:flex;align-items:center;gap:2px}
.detrow label{flex:1}
.gear{flex:0 0 auto;width:auto;background:none;border:0;color:var(--sub);cursor:pointer;padding:2px 5px;font-size:12px;line-height:1}
.gear:hover{color:var(--accent)}
.detparams{padding:3px 2px 6px 22px;display:flex;flex-direction:column;gap:4px}
.prm{display:flex;align-items:center;gap:6px;text-transform:none;letter-spacing:0;margin:0;padding:1px 3px}
.prm span{flex:1;font-family:var(--mono);font-size:11px;color:var(--sub)}
.prm input{flex:0 0 82px;width:82px;padding:3px 6px;font-size:11px}
.pnote{font-size:11px;color:var(--sub);font-family:var(--mono);padding:2px 3px}
.policyrow{display:flex;flex-direction:column;gap:4px;border:1px solid var(--line);border-radius:5px;padding:6px;background:var(--panel2)}
.policyrow .prm span{color:var(--sub)}
button.query{background:var(--accent);color:#04191b;font-weight:700;border:0;cursor:pointer;padding:10px;letter-spacing:.03em}
button.query:hover{filter:brightness(1.08)}
button.query:disabled{opacity:.5;cursor:wait}
.err{color:var(--bad);font-size:11.5px;font-family:var(--mono);min-height:1em}

/* book combobox (typeahead) */
.combo{position:relative}
.comboinput{width:100%}
.combomenu{position:absolute;top:calc(100% + 4px);left:0;width:min(560px,86vw);max-height:60vh;overflow-y:auto;
  background:var(--panel2);border:1px solid var(--accent);border-radius:8px;
  box-shadow:0 16px 48px rgba(0,0,0,.55);z-index:60;padding:5px}
.bookrow{padding:7px 10px;border-radius:6px;cursor:pointer;border:1px solid transparent}
.bookrow:hover,.bookrow.active{background:#232b30}
.bookrow.active{border-color:#33454c}
.bookrow.sel{border-color:var(--accent);background:#1d2529}
.bk-name{font-family:var(--mono);font-size:13px;color:var(--ink);word-break:break-word}
.bk-meta{font-family:var(--mono);font-size:11px;color:var(--sub);margin-top:3px}
#bookCount{font-size:11px;color:var(--sub);font-family:var(--mono);padding:7px 10px 3px;position:sticky;bottom:0;
  background:var(--panel2)}
.placeholder{color:var(--sub);margin:auto;font-size:14px}
.panel{flex:0 0 auto;background:var(--panel);border:1px solid var(--line);border-radius:7px;padding:6px 10px 4px}
.host{min-height:60px}
.panel h3{margin:0 0 2px;font-size:11px;letter-spacing:.1em;text-transform:uppercase;color:var(--sub);
  font-family:var(--mono);display:flex;justify-content:space-between;align-items:baseline}
.panel h3 .note{color:var(--sub);text-transform:none;letter-spacing:0;font-size:11px}
.legend{display:flex;flex-wrap:wrap;gap:12px;font-family:var(--mono);font-size:11px;color:var(--sub);margin:1px 0 3px}
.legend span{display:inline-flex;align-items:center;gap:5px}
.legend i{width:11px;height:3px;border-radius:2px;display:inline-block}

/* uPlot dark overrides */
.uplot,.u-wrap{background:transparent}
.u-title{color:var(--ink)}
.u-legend{color:var(--sub);font-family:var(--mono);font-size:11px}
.u-legend .u-marker{border-radius:2px}
.ribbon{height:12px;width:100%;margin-top:2px;border-radius:2px;overflow:hidden;display:flex}
.ribbon i{height:100%}

/* Phase 2 — cheap regime preview strip (no book/cost) */
.preview-strip{display:flex;flex-wrap:wrap;gap:8px;padding:8px 14px;background:var(--panel2);
  border-top:1px solid var(--line);border-bottom:1px solid var(--line)}
.pv-card{flex:1 1 240px;min-width:220px;background:var(--panel);border:1px solid var(--line);
  border-radius:6px;padding:7px 9px}
.pv-title{font-family:var(--mono);font-size:11px;color:var(--ink);margin-bottom:4px}
.pv-bar{height:10px;border-radius:3px;overflow:hidden;display:flex;background:var(--line)}
.pv-seg{height:100%}
.pv-stats{margin-top:5px;color:var(--sub);font-family:var(--mono);font-size:10px;line-height:1.5}
.pv-flags{margin-top:4px;display:flex;flex-wrap:wrap;gap:4px}
.pv-flag{font-family:var(--mono);font-size:10px;padding:1px 6px;border-radius:3px}
.pv-flag.warn{background:rgba(199,82,74,.16);color:var(--bad);border:1px solid rgba(199,82,74,.4)}

/* Phase 4 — 3-cell layout: toolbar, maximise, traffic-light, constituent toggle */
.stage-toolbar{display:flex;align-items:center;gap:14px;padding:2px 2px 0;color:var(--sub);
  font-family:var(--mono);font-size:11px}
.stage-toolbar .ctog{display:inline-flex;align-items:center;gap:6px;cursor:pointer}
.panel{position:relative}
.panel h3{padding-right:34px}   /* room for the pinned maximise button */
.panel h3 .maxbtn{position:absolute;top:5px;right:7px;flex:0 0 auto;width:26px;height:22px;
  display:inline-flex;align-items:center;justify-content:center;background:var(--panel2);
  border:1px solid var(--line);color:var(--sub);border-radius:4px;font-size:13px;line-height:1;
  padding:0;cursor:pointer;z-index:2}
.panel h3 .maxbtn:hover{border-color:var(--accent);color:var(--accent)}
.panel.maximized{position:fixed;inset:8px;z-index:60;margin:0;overflow:auto;
  box-shadow:0 0 0 100vmax rgba(6,9,11,.72);border-color:var(--accent)}
.panel.maximized h3 .maxbtn{width:auto;padding:0 10px;height:24px;border-color:var(--accent);color:var(--accent)}
.panel.maximized h3 .maxbtn::after{content:" close";font-size:11px;letter-spacing:.06em}

/* Phase 5 — config file-import label styled as a button */
.filebtn{display:inline-flex;align-items:center;cursor:pointer}

/* Phase 6 — connection health traffic lights */
.health{display:inline-flex;align-items:center;gap:5px}
.hlight{width:9px;height:9px;border-radius:50%;background:#3a444a;
  border:1px solid #05080a;transition:background .3s}
.hlight.ok{background:var(--good);box-shadow:0 0 6px rgba(79,158,106,.7)}
.hlight.bad{background:var(--bad);box-shadow:0 0 6px rgba(199,82,74,.6)}

/* Phase 7 — compare table */
table.cmp{width:100%;border-collapse:collapse;margin:8px 0 4px;font-size:13px}
table.cmp th,table.cmp td{text-align:left;padding:6px 10px;border-bottom:1px solid var(--line)}
table.cmp thead th{color:var(--accent);font-family:var(--mono);font-size:11px;letter-spacing:.05em;text-transform:uppercase}
table.cmp td:first-child{color:var(--sub);font-family:var(--mono);font-size:12px}
table.cmp td:not(:first-child){font-family:var(--mono);color:var(--ink)}

/* zoom controls hint */
.zoomhint{color:var(--sub);font-family:var(--mono);font-size:10.5px;margin-right:auto}

/* ── preview modal: protection quality vs S&P 500 ────────────────────────────── */
.modal-backdrop.blur{backdrop-filter:blur(5px);background:rgba(6,9,11,.55)}
.pv-modal{width:min(1500px,94vw);height:auto;max-height:90vh}
.pv-modal .modal-body{max-width:none}   /* override the help-modal 66ch cap so content fills the width */
.pv-modal h1{font-size:22px}
.pv-sub{font-family:var(--mono);font-size:12px;color:var(--sub);text-transform:none;letter-spacing:0}
.pv-block{border:1px solid var(--line);border-radius:10px;padding:14px 16px;margin:12px 0}
.pv-bh{display:flex;align-items:center;gap:12px;margin-bottom:12px}
.pv-title{font-family:var(--mono);font-size:14px;color:var(--ink)}
.pv-cols{display:grid;grid-template-columns:220px 1fr;gap:20px;align-items:center}
@media(max-width:760px){.pv-cols{grid-template-columns:1fr}}
/* occupancy donut */
.pv-donutwrap{display:flex;flex-direction:column;align-items:center;gap:8px}
.pv-donut{width:150px;height:150px;border-radius:50%;position:relative;display:flex;align-items:center;justify-content:center}
.pv-donut-c{position:absolute;width:96px;height:96px;border-radius:50%;background:var(--panel);
  display:flex;flex-direction:column;align-items:center;justify-content:center;font-family:var(--mono);
  font-size:20px;color:var(--ink)}
.pv-donut-c small{font-size:10px;color:var(--sub);letter-spacing:.08em;text-transform:uppercase}
.pv-occ{display:flex;flex-wrap:wrap;gap:4px 12px;justify-content:center;font-family:var(--mono);font-size:11px;color:var(--sub)}
.pv-occ i{width:9px;height:9px;border-radius:2px;display:inline-block;margin-right:4px;vertical-align:middle}
.pv-runs{font-family:var(--mono);font-size:10.5px;color:var(--sub);text-align:center;max-width:210px;line-height:1.5}
/* protection tiles */
.pv-tiles{display:grid;grid-template-columns:repeat(auto-fit,minmax(128px,1fr));gap:9px}
.pv-tile{background:var(--panel2);border:1px solid var(--line);border-left:3px solid var(--line);
  border-radius:7px;padding:9px 11px}
.pv-tile.gd{border-left-color:var(--good)}
.pv-tile.bd{border-left-color:var(--bad)}
.pv-tv{font-family:var(--mono);font-size:19px;color:var(--ink)}
.pv-tl{font-size:11px;color:var(--ink);margin-top:2px}
.pv-th{font-size:10px;color:var(--sub);margin-top:2px;line-height:1.35}
/* per-year heatmap */
.pv-heat-h{font-family:var(--mono);font-size:11px;color:var(--sub);text-transform:uppercase;letter-spacing:.06em;margin:16px 0 6px}
.pv-heat-h span{text-transform:none;letter-spacing:0}
.pv-heat{display:flex;gap:3px;align-items:flex-end}
.pv-yr{flex:1;min-width:22px;height:64px;border-radius:4px;position:relative;display:flex;align-items:flex-end;justify-content:center;border:1px solid var(--line)}
.pv-yrbar{width:52%;background:rgba(228,233,231,.85);border-radius:2px 2px 0 0;min-height:1px}
.pv-yrlbl{position:absolute;bottom:2px;font-family:var(--mono);font-size:9px;color:var(--ink);text-shadow:0 1px 2px rgba(0,0,0,.6)}
.pv-flag{font-family:var(--mono);font-size:10.5px;padding:2px 8px;border-radius:4px}
.pv-flag.warn{background:rgba(199,82,74,.16);color:var(--bad);border:1px solid rgba(199,82,74,.4)}
.pv-foot{font-size:12px;color:var(--sub);line-height:1.55;margin-top:14px}

/* saved-configs picker */
.saved-list{display:flex;flex-direction:column;gap:8px;margin-top:10px}
.saved-row{display:flex;align-items:center;justify-content:space-between;gap:14px;
  background:var(--panel2);border:1px solid var(--line);border-radius:8px;padding:10px 14px}
.saved-nm{font-family:var(--mono);font-size:13px;color:var(--ink)}
.saved-meta{font-family:var(--mono);font-size:10.5px;color:var(--sub);margin-top:3px}
.saved-acts{display:flex;gap:8px;flex:0 0 auto}

/* book picker — Universe/Signal/Policy facets */
.bk-facets{display:flex;flex-wrap:wrap;gap:4px;margin:3px 0}
.bkf{font-family:var(--mono);font-size:9.5px;padding:1px 6px;border-radius:3px;border:1px solid var(--line)}
.bkf.u{background:rgba(53,201,208,.12);color:#7fd6db;border-color:rgba(53,201,208,.3)}
.bkf.s{background:rgba(232,163,61,.12);color:#e8b96a;border-color:rgba(232,163,61,.3)}
.bkf.p{background:rgba(200,111,166,.12);color:#d99bc4;border-color:rgba(200,111,166,.3)}
.bkf-load,.bkf-none{font-family:var(--mono);font-size:9.5px;color:var(--sub)}
/* selected-book decomposition card */
.bookfacets{max-width:1400px;margin:0 auto 12px;background:var(--panel);border:1px solid var(--line);border-radius:9px;padding:10px 14px}
.bf-h{font-family:var(--mono);font-size:10.5px;letter-spacing:.08em;text-transform:uppercase;color:var(--sub);margin-bottom:8px}
.bf-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:8px}
.bf-cell{background:var(--panel2);border:1px solid var(--line);border-radius:7px;padding:7px 10px}
.bf-k{font-family:var(--mono);font-size:9.5px;letter-spacing:.08em;text-transform:uppercase;color:var(--accent)}
.bf-v{font-family:var(--mono);font-size:12px;color:var(--ink);margin-top:2px;word-break:break-word}

/* per-year protection-vs-churn net chart */
.pv-year2{display:flex;gap:3px;align-items:stretch;position:relative;height:calc(var(--H,52px)*2 + 4px);
  margin:2px 0 20px;
  background:linear-gradient(transparent calc(50% - 1px), rgba(138,150,143,.35) calc(50% - 1px),
    rgba(138,150,143,.35) calc(50% + 1px), transparent calc(50% + 1px))}
.pv-yr2{flex:1;min-width:18px;position:relative;border-radius:3px}
.pv-net{position:absolute;left:18%;right:18%;border-radius:2px 2px 0 0}
.pv-net.pos{bottom:50%;background:var(--good)}
.pv-net.neg{top:50%;border-radius:0 0 2px 2px;background:var(--bad)}
.pv-yrlbl2{position:absolute;bottom:-16px;left:0;right:0;text-align:center;font-family:var(--mono);
  font-size:9px;color:var(--sub)}
.pv-yearsum{font-family:var(--mono);font-size:12px;color:var(--sub);margin-top:6px}
.pv-yearsum b{color:var(--ink)}
.pv-yearsum b.gd{color:var(--good)}
.pv-yearsum b.bd{color:var(--bad)}

/* API-key field (header) */
.apikey{width:130px;flex:0 0 auto;background:var(--panel2);border:1px solid var(--line);color:var(--ink);
  font-family:var(--mono);font-size:11px;padding:5px 9px;border-radius:8px}
.apikey::placeholder{color:var(--sub)}
.apikey:focus{border-color:var(--accent);outline:none}
.apikey.needkey{border-color:var(--deg);box-shadow:0 0 0 1px var(--deg)}

/* base vs RD-baked book picker */
.basestog{display:inline-flex;align-items:center;gap:5px;font-family:var(--mono);font-size:10.5px;
  color:var(--sub);white-space:nowrap;flex:0 0 auto;cursor:pointer}
.bk-badge{font-family:var(--mono);font-size:9px;padding:1px 6px;border-radius:3px;margin-left:8px;vertical-align:middle}
.bk-badge.base{background:rgba(53,201,208,.14);color:var(--accent);border:1px solid rgba(53,201,208,.35)}
.bk-badge.baked{background:rgba(214,160,58,.14);color:var(--deg);border:1px solid rgba(214,160,58,.35)}
