:root{--p:#39FF88;--p-rgb:57,255,136;--s:#00E5FF;--s-rgb:0,229,255;--d:#FF2E88;--d-rgb:255,46,136;--t:#C99BFF;--t-rgb:201,155,255;--w:#FFD400;--bg:#020403;--bg-rgb:2,4,3;--panel:rgba(5,16,10,.88);--line:#16502F;--text:#D6FFE9;--dim:#6FB892}
*{box-sizing:border-box}
html,body{margin:0;min-height:100%;background:var(--bg);color:var(--text);font-family:'JetBrains Mono',ui-monospace,Consolas,monospace;font-size:14px;-webkit-font-smoothing:antialiased}
body{padding:0 20px 20px;transition:background .3s}
[hidden]{display:none!important}
a{color:var(--p)}
button{font-family:inherit}
.grid-bg{position:fixed;inset:0;z-index:-1;pointer-events:none;background-image:linear-gradient(rgba(var(--p-rgb),.045) 1px,transparent 1px),linear-gradient(90deg,rgba(var(--p-rgb),.045) 1px,transparent 1px),radial-gradient(ellipse at 50% 0%,rgba(var(--s-rgb),.10),transparent 60%);background-size:32px 32px,32px 32px,100% 100%}
.scan{position:fixed;inset:0;pointer-events:none;z-index:50;background:repeating-linear-gradient(to bottom,rgba(255,255,255,.025) 0 1px,transparent 1px 3px);mix-blend-mode:screen}
.orb{font-family:'Orbitron',sans-serif;letter-spacing:.06em}
.glow{text-shadow:0 0 6px rgba(var(--p-rgb),.75),0 0 18px rgba(var(--p-rgb),.35);color:var(--p)}
.dim{color:var(--dim)}.small{font-size:12px}.tiny{font-size:11px}.cy{color:var(--s)}.grow{flex-grow:1}
.up{color:var(--p)}.dn{color:var(--d)}.warn{color:var(--w)}
.lg1{stroke:var(--p)}.lg2{stroke:var(--s)}
.panel{position:relative;background:var(--panel);border:1px solid var(--line);padding:14px 16px;min-width:0;transition:background .3s,border-color .3s}
.panel::before,.panel::after{content:"";position:absolute;width:14px;height:14px;border-color:var(--p);border-style:solid;pointer-events:none}
.panel::before{top:-1px;left:-1px;border-width:2px 0 0 2px}.panel::after{bottom:-1px;right:-1px;border-width:0 2px 2px 0}
.ph{font-size:12px;letter-spacing:.14em;color:var(--p)}
.phrow{display:flex;justify-content:space-between;align-items:center;gap:8px;margin-bottom:10px}
.dot{display:inline-block;width:9px;height:9px;border-radius:50%;background:var(--p);box-shadow:0 0 8px var(--p);vertical-align:middle}
.dot.off{background:var(--line);box-shadow:none}.dot.warn{background:var(--w);box-shadow:0 0 8px var(--w)}.dot.bad{background:var(--d);box-shadow:0 0 8px var(--d)}
.blink{animation:blink 1.1s steps(1) infinite}@keyframes blink{50%{opacity:0}}
.btn,.go,.sq,.tb,.chip{cursor:pointer;border:1px solid var(--line);background:transparent;color:var(--dim);font-weight:700;letter-spacing:.08em;display:inline-flex;align-items:center;justify-content:center;gap:6px}
.btn{height:40px;padding:0 14px;border-color:var(--p);color:var(--p);background:rgba(var(--p-rgb),.06)}
.btn:hover,.go:hover{background:rgba(var(--p-rgb),.18)}
.go{height:42px;padding:0 16px;border-color:var(--p);color:var(--p);background:rgba(var(--p-rgb),.08);font-size:13px}
.sq{height:42px;min-width:44px;padding:0 12px;font-size:12px}.sq:hover,.tb:hover,.chip:hover{color:var(--p);border-color:var(--p)}
.tb{height:30px;min-width:30px;padding:0 9px;font-size:11px}.tb.on,.chip.on{background:var(--p);color:var(--bg);border-color:var(--p)}
.chip{height:24px;padding:0 8px;font-size:11px}.chips{display:flex;gap:4px}
:focus-visible{outline:2px solid var(--s);outline-offset:2px}
.in{height:42px;padding:0 12px;border:1px solid var(--line);background:rgba(var(--bg-rgb),.7);color:var(--text);font:500 14px 'JetBrains Mono',monospace;width:100%;min-width:0;border-radius:0}
.in:focus{outline:none;border-color:var(--p);box-shadow:0 0 0 1px var(--p),0 0 14px rgba(var(--p-rgb),.25)}
label{font-size:11px;letter-spacing:.12em;color:var(--dim);display:block;margin:10px 0 6px}

/* ---------- header ---------- */
.top{display:flex;align-items:center;gap:16px;height:64px;margin:0 -20px 16px;padding:0 20px;border-bottom:1px solid var(--line);background:rgba(var(--bg-rgb),.88);position:sticky;top:0;z-index:20;backdrop-filter:blur(6px)}
.brand{display:flex;align-items:center;gap:12px}.brand .orb{font-size:21px;font-weight:900;letter-spacing:.12em}
.mode{font-size:12px;font-weight:700;letter-spacing:.12em;color:var(--d);border:1px solid var(--d);padding:4px 10px;background:rgba(var(--d-rgb),.08);white-space:nowrap}
.mode.live{color:var(--w);border-color:var(--w)}
.tabs{display:flex;gap:4px}.tab{cursor:pointer;background:none;border:1px solid transparent;color:var(--dim);padding:8px 12px;font-size:12px;letter-spacing:.1em}
.tab.on{color:var(--p);border-color:var(--p);background:rgba(var(--p-rgb),.08)}
.hstat{flex-grow:1;display:flex;justify-content:center;align-items:center;gap:18px;font-size:13px;white-space:nowrap}
.lights{cursor:pointer;display:flex;gap:12px;background:none;border:1px solid var(--line);color:var(--text);padding:5px 10px;font-size:12px}
.lights span{display:flex;align-items:center;gap:6px}
.swatches{display:flex;gap:6px;align-items:center}
.sw{cursor:pointer;width:22px;height:22px;border-radius:50%;border:2px solid transparent;padding:0}
.sw[aria-checked=true]{border-color:var(--text)}

/* ---------- dashboard grid ---------- */
.dash{display:grid;grid-template-columns:250px minmax(0,1fr) 390px;grid-template-rows:auto minmax(0,1fr);grid-template-areas:"kpis kpis kpis" "watch center right";gap:14px;height:calc(100vh - 100px);min-height:760px}
.kpis{grid-area:kpis;display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:14px}
.kpi{display:flex;flex-direction:column;gap:6px}.big{font-size:24px;font-weight:700;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.bigger{font-size:20px}
.watch{grid-area:watch;overflow:auto}
.watchlist{display:flex;flex-direction:column;gap:6px}
.wi{cursor:pointer;display:flex;flex-direction:column;gap:6px;padding:10px;border:1px solid transparent;background:none;color:var(--text);text-align:left;font-size:13px;width:100%}
.wi:hover{border-color:var(--line)}.wi.sel{background:rgba(var(--p-rgb),.08);border-color:var(--p);box-shadow:0 0 14px rgba(var(--p-rgb),.18)}
.wi .r1,.wi .r3{display:flex;justify-content:space-between;gap:8px}.wi .r3{font-size:12px}
.meter{height:5px;background:var(--line)}.meter>i{display:block;height:5px;background:var(--s);box-shadow:0 0 6px var(--s)}
.center{grid-area:center;display:flex;flex-direction:column;gap:14px;min-height:0}
.chartp{flex-grow:1;display:flex;flex-direction:column;gap:10px;min-height:0}
.crow{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.tools{gap:6px}.sep{width:1px;height:18px;background:var(--line);margin:0 4px}
.legend{white-space:nowrap}
.chart{flex-grow:1;min-height:240px;position:relative}
.navwrap{position:relative;height:48px;border:1px solid var(--line);user-select:none;touch-action:none}
.nav{position:absolute;inset:0}
.navshade{position:absolute;top:0;bottom:0;background:rgba(var(--bg-rgb),.6);pointer-events:none}
.navwin{position:absolute;top:0;bottom:0;border-left:2px solid var(--s);border-right:2px solid var(--s);background:rgba(var(--s-rgb),.08);cursor:grab}
.navwin:active{cursor:grabbing}
.navwin .h{position:absolute;top:13px;width:10px;height:20px;background:var(--s);box-shadow:0 0 8px var(--s);cursor:ew-resize}
.navwin .h.l{left:-6px}.navwin .h.r{right:-6px}
.navlbl{position:absolute;left:8px;top:3px;font-size:10px;letter-spacing:.1em;pointer-events:none}
.why{display:flex;gap:20px;min-height:170px}
.whytxt{width:280px;flex-shrink:0;display:flex;flex-direction:column;gap:8px}.whyhead{font-size:15px;font-weight:700;line-height:1.45}
.checks{flex-grow:1;display:flex;flex-direction:column;gap:7px;justify-content:center}
.ck{display:flex;gap:12px;align-items:baseline;padding:7px 12px;border-left:2px solid var(--p);background:rgba(var(--p-rgb),.04);font-size:13px}
.ck b{min-width:52px}.ck .dsc{margin-left:auto;font-size:12px;color:var(--dim);text-align:right}
.ck.pend{border-left-color:var(--s);background:rgba(var(--s-rgb),.06)}.ck.pend b{color:var(--s)}
.ck.bad{border-left-color:var(--d);background:rgba(var(--d-rgb),.06)}.ck.bad b{color:var(--d)}
.right{grid-area:right;display:flex;flex-direction:column;gap:14px;min-height:0}
.council{display:flex;flex-direction:column;gap:10px;min-height:0;flex:1 1 55%}
.nodes{display:flex;align-items:center;gap:8px}.node{flex:1;text-align:center;padding:8px;border:1px solid var(--s);background:rgba(var(--s-rgb),.06)}
.node .orb{font-weight:800;font-size:14px}.node.a .orb{color:var(--s)}.node.b{border-color:var(--t);background:rgba(var(--t-rgb),.07)}.node.b .orb{color:var(--t)}
.link{display:flex;flex-direction:column;align-items:center;font-size:10px}
.banner{padding:8px 10px;border:1px solid var(--line);font-size:13px}
.banner.ok{border-color:rgba(var(--p-rgb),.5);background:rgba(var(--p-rgb),.06)}.banner.bad{border-color:var(--d);background:rgba(var(--d-rgb),.08)}
.news{overflow:auto;display:flex;flex-direction:column;gap:8px;min-height:60px;flex-grow:1}
.ni{padding:10px;border:1px solid var(--line);display:flex;flex-direction:column;gap:6px;font-size:13px}
.ni.veto{border-color:var(--d);background:rgba(var(--d-rgb),.06)}
.ni .meta,.ni .sc{display:flex;gap:8px;font-size:11px;align-items:center;flex-wrap:wrap}
.ni a{color:var(--text);text-decoration:none}.ni a:hover{color:var(--p)}
.budget{border-top:1px dashed var(--line);padding-top:8px;display:flex;flex-direction:column;gap:6px;font-size:12px}
.brow{display:flex;justify-content:space-between}.bar{height:6px;background:var(--line)}.bar>div{height:6px;width:0;background:var(--s);box-shadow:0 0 6px var(--s);transition:width .4s}
.logs{flex:1 1 45%;display:flex;flex-direction:column;min-height:0;background:var(--bg)}
.loglist{overflow:auto;font-size:12px;line-height:1.5;display:flex;flex-direction:column;gap:3px}
.lg{display:flex;gap:8px}.lg .t{color:var(--dim);flex-shrink:0}.lg .k{width:40px;flex-shrink:0}
.k-TRD{color:var(--w)}.k-AI{color:var(--s)}.k-ERR{color:var(--d)}.k-WARN{color:var(--w)}.k-SYS{color:var(--dim)}
.empty{color:var(--dim);font-size:12px;padding:8px 0}

/* ---------- settings ---------- */
.settings{display:flex;flex-direction:column;gap:16px;max-width:1200px;margin:0 auto}
.shead{display:flex;justify-content:space-between;align-items:flex-end;gap:16px}.shead h1{margin:6px 0;font-size:22px}.shead p{margin:0;font-size:13px}
.provs{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}
.pvhead{display:flex;align-items:center;gap:14px}.pvname{font-size:16px;font-weight:800}
.badge{width:50px;height:50px;display:flex;align-items:center;justify-content:center;font:900 20px Orbitron,sans-serif;color:var(--bg);clip-path:polygon(50% 0,100% 25%,100% 75%,50% 100%,0 75%,0 25%)}
.badge.a{background:var(--s)}.badge.b{background:var(--t)}
.pvstat{display:flex;align-items:center;gap:8px;padding:6px 10px;border:1px solid var(--line);font-size:12px;letter-spacing:.08em}
.irow{display:flex;gap:8px;align-items:center;margin-top:8px;flex-wrap:wrap}.irow .in{flex:1 1 200px}
.two{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}
.result.ok{color:var(--p)}.result.bad{color:var(--d)}.result.wait{color:var(--w)}
.rules{margin:10px 0 0;padding-left:18px;line-height:1.7}
.presets{display:flex;gap:10px;flex-wrap:wrap;margin:10px 0}
.preset{cursor:pointer;display:flex;align-items:center;gap:8px;padding:8px 12px;border:1px solid var(--line);background:none;color:var(--text);font-size:12px;letter-spacing:.1em}
.preset.on{border-color:var(--p);color:var(--p)}.preset i{width:18px;height:18px;border-radius:50%}
.customs{display:flex;gap:16px;flex-wrap:wrap;align-items:flex-end}.customs label{margin:0;display:flex;flex-direction:column;gap:6px}
.customs input[type=color]{width:56px;height:36px;border:1px solid var(--line);background:none;padding:2px;cursor:pointer}
.sblock.row{display:flex;justify-content:space-between;align-items:center}

/* ---------- login / toast ---------- */
.login{position:fixed;inset:0;z-index:40;display:flex;align-items:center;justify-content:center;background:rgba(var(--bg-rgb),.92);padding:16px}
.login-box{width:100%;max-width:380px;display:flex;flex-direction:column;padding:28px}
.login-box .go{margin-top:18px}.err{color:var(--d);min-height:18px;margin-top:10px;font-size:13px}
.toast{position:fixed;left:50%;bottom:24px;transform:translateX(-50%);z-index:60;padding:10px 16px;border:1px solid var(--p);background:var(--bg);color:var(--p);font-size:13px;opacity:0;pointer-events:none;transition:opacity .25s}
.toast.show{opacity:1}.toast.bad{border-color:var(--d);color:var(--d)}
.tabbar{display:none}

/* ---------- phone / tablet ---------- */
@media (max-width:1180px){
  body{padding:0 12px calc(88px + env(safe-area-inset-bottom))}
  .top{height:58px;margin:0 -12px 12px;padding:0 12px;gap:10px}
  .brand .orb{font-size:16px}.brand svg{width:26px;height:26px}
  .tabs,.hstat .dim,.swatches{display:none}
  .hstat{justify-content:flex-end;gap:10px}.mode{font-size:10px;padding:3px 6px}
  .btn{height:44px;padding:0 10px;font-size:12px}
  .dash{display:flex;flex-direction:column;height:auto;min-height:0;gap:12px}
  .dash>*,.center>*,.right>*{display:none}
  body[data-view=home] [data-tab=home],body[data-view=chart] [data-tab=chart],body[data-view=ai] [data-tab=ai],body[data-view=log] [data-tab=log]{display:flex}
  body[data-view=home] .kpis{display:grid}
  .center,.right{display:flex}
  .kpis{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.kpis .kpi:last-child{grid-column:span 2}
  .big{font-size:19px}
  .watch{display:none}body[data-view=home] .watch{display:block}
  .why{flex-direction:column;gap:12px}.whytxt{width:auto}
  .chartp{min-height:calc(100vh - 170px)}.chart{min-height:320px}
  .legend{display:none}
  .council{min-height:calc(100vh - 170px)}.logs{min-height:calc(100vh - 170px)}
  .provs,.two{grid-template-columns:1fr}.shead{flex-direction:column;align-items:flex-start}
  .settings .swatches{display:flex}
  .tabbar{display:grid;grid-template-columns:repeat(5,1fr);position:fixed;left:0;right:0;bottom:0;z-index:30;padding:6px 4px calc(10px + env(safe-area-inset-bottom));background:rgba(var(--bg-rgb),.96);border-top:1px solid var(--line)}
  .tabbar button{background:none;border:0;color:var(--dim);display:flex;flex-direction:column;align-items:center;gap:4px;font-size:10px;letter-spacing:.08em;min-height:52px;cursor:pointer}
  .tabbar svg{width:22px;height:22px;fill:none;stroke:currentColor;stroke-width:1.8}
  .tabbar button.on{color:var(--p);text-shadow:0 0 8px rgba(var(--p-rgb),.6)}
}
@media (max-width:420px){.lights{padding:4px 6px;gap:8px;font-size:10px}.brand .orb{display:none}}
/* thin themed scrollbars */
*{scrollbar-width:thin;scrollbar-color:var(--line) transparent}
::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:transparent}
::-webkit-scrollbar-thumb{background:var(--line)}::-webkit-scrollbar-thumb:hover{background:var(--p)}
.watch{overflow-x:hidden}.loglist{overflow-x:hidden;word-break:break-word}

/* ---------- pages: monitor + health ---------- */
.page{display:flex;flex-direction:column;gap:16px;max-width:1500px;margin:0 auto}
.settings{max-width:1200px}
.tab .dot{width:7px;height:7px;margin-left:4px}
.seg{display:flex;gap:4px}
.progress{display:flex;flex-direction:column;gap:8px}
.progress .bar{height:8px}.progress .brow{font-size:13px}
.mcards{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:14px}
.mcard{display:flex;flex-direction:column;gap:8px}
.mcard .mt{display:flex;justify-content:space-between;align-items:baseline;gap:8px}
.mcard .acc{font-size:30px;font-weight:700}
.mcard .sub{font-size:11px;color:var(--dim)}
.stack{display:flex;height:10px;gap:2px}.stack i{display:block;height:10px;border-radius:2px}
.stack .c{background:var(--p)}.stack .x{background:var(--d)}.stack .f{background:var(--line)}
.kv{display:grid;grid-template-columns:1fr auto;gap:3px 10px;font-size:12px}.kv b{text-align:right}
.mcharts{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px}
.mchart{height:230px;position:relative}
.mscatter{height:230px;position:relative}.mscatter svg{width:100%;height:100%}
.mlegend{display:flex;gap:8px;align-items:center;font-size:11px;color:var(--dim)}
.lk{display:inline-block;width:18px;height:0;border-top:2px solid var(--s)}.lk.b{border-top:2px dashed var(--t)}
.dotk{display:inline-block;width:9px;height:9px;border-radius:50%;background:var(--s)}.dotk.b{background:transparent;border:2px solid var(--t);border-radius:0;transform:rotate(45deg);width:7px;height:7px}
.tablewrap{overflow:auto;max-height:520px}
.dtable{width:100%;border-collapse:collapse;font-size:12px}
.dtable th{position:sticky;top:0;background:var(--bg);text-align:left;color:var(--dim);font-weight:500;letter-spacing:.1em;padding:8px;border-bottom:1px solid var(--line);z-index:1}
.dtable td{padding:8px;border-bottom:1px solid rgba(var(--p-rgb),.08);vertical-align:top}
.dtable tr:hover td{background:rgba(var(--p-rgb),.04)}
.dtable .hl a{color:var(--text);text-decoration:none}.dtable .hl a:hover{color:var(--p)}
.dtable .why{color:var(--dim);font-size:11px;margin-top:3px;max-width:320px}
.vd{font-weight:700;white-space:nowrap}.vd.correct{color:var(--p)}.vd.incorrect{color:var(--d)}.vd.flat,.vd.nocall,.vd.pending{color:var(--dim)}
.hcomps{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:14px}
.hc{display:flex;flex-direction:column;gap:8px}.hc .ht{display:flex;align-items:center;gap:8px;font-weight:700}
.hc .st{font-size:11px;letter-spacing:.1em}
.hgrid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px}
.hlist{display:flex;flex-direction:column;gap:8px;margin-top:10px;font-size:12px}
.hrow{display:flex;gap:10px;align-items:baseline;justify-content:space-between;border-bottom:1px dashed rgba(var(--p-rgb),.1);padding-bottom:6px}
.hrow .l{display:flex;gap:8px;align-items:baseline}.hrow .r{color:var(--dim);text-align:right}
.tip{position:absolute;pointer-events:none;z-index:5;background:var(--bg);border:1px solid var(--line);padding:6px 8px;font-size:11px;white-space:nowrap;display:none}
@media (max-width:1180px){
  .mcards,.mcharts,.hcomps,.hgrid{grid-template-columns:1fr}
  .tabbar{grid-template-columns:repeat(7,1fr)}.tabbar button{font-size:9px;letter-spacing:.04em}
  .dtable th:nth-child(6),.dtable td:nth-child(6){display:none}
}
/* v4: candidate ledger + derivatives (observe-only) */
.lchips{flex-wrap:wrap;margin:10px 0 6px}.lchips .chip{cursor:default}
.lchips .chip.up{color:var(--p);border-color:var(--p)}.lchips .chip.dn{color:var(--d);border-color:var(--d)}.lchips .chip.warn{color:var(--w);border-color:var(--w)}
#lReport{margin:4px 0 8px;line-height:1.5}
#monitor>.panel+.panel,#health>.panel{margin-top:14px}
