:root{--bg:#05080d;--bg2:#0a111b;--panel:rgba(12,20,32,.82);--line:#16324a;--line2:#1f4d6e;--cyan:#22e4ff;--cyan2:#0fb6d6;--green:#2bff9a;--red:#ff3b6b;--amber:#ffb340;--violet:#a77bff;--txt:#cfe8f5;--mut:#6b8aa3;--mono:"JetBrains Mono","SFMono-Regular",Menlo,Consolas,monospace}
*{box-sizing:border-box}html,body{margin:0;background:var(--bg);color:var(--txt);font:14px/1.45 Inter,"Segoe UI",system-ui,sans-serif}
body{background:radial-gradient(1200px 600px at 70% -10%,rgba(34,228,255,.10),transparent 60%),radial-gradient(900px 500px at -10% 110%,rgba(167,123,255,.08),transparent 60%),var(--bg);min-height:100vh}
.scan{pointer-events:none;position:fixed;inset:0;background:repeating-linear-gradient(0deg,rgba(255,255,255,.018) 0 1px,transparent 1px 3px);z-index:50}
a{color:var(--cyan)}code,.mono{font-family:var(--mono)}.muted{color:var(--mut)}.small{font-size:12px}.r{text-align:right}
.top{display:flex;justify-content:space-between;align-items:center;padding:10px 20px;border-bottom:1px solid var(--line);background:rgba(5,10,16,.85);backdrop-filter:blur(6px);position:sticky;top:0;z-index:20}
.brand{font-weight:600;letter-spacing:.18em;display:flex;align-items:center;gap:10px}.brand b{color:var(--cyan)}.brand .sub{color:var(--mut);font-size:11px}
.pill{font-size:10px;letter-spacing:.12em;padding:3px 8px;border-radius:20px;border:1px solid}.pill.paper{color:var(--amber);border-color:rgba(255,179,64,.5);background:rgba(255,179,64,.08)}
nav{display:flex;align-items:center;gap:16px}nav a{color:var(--txt);text-decoration:none;font-size:13px;letter-spacing:.06em}nav a:hover{color:var(--cyan)}
.who{color:var(--mut);font-size:12px}.role{font-style:normal;font-size:10px;padding:2px 6px;border-radius:4px;margin-left:4px;letter-spacing:.08em;text-transform:uppercase}
.role.admin{background:rgba(167,123,255,.18);color:var(--violet)}.role.viewer{background:rgba(34,228,255,.12);color:var(--cyan)}
form.inline{display:inline}
button{font:inherit;cursor:pointer;border-radius:6px;padding:8px 14px;border:1px solid var(--line2);background:#0c1a28;color:var(--txt);transition:.15s}
button:hover{border-color:var(--cyan);box-shadow:0 0 12px rgba(34,228,255,.25)}
button.primary{background:linear-gradient(135deg,#0d8fb0,#22e4ff);color:#001018;border:0;font-weight:600;letter-spacing:.06em}
button.ghost{background:transparent}button.danger{border-color:rgba(255,59,107,.5);color:var(--red);background:transparent}button.xs{padding:3px 8px;font-size:11px}
input,select{font:inherit;background:#07101a;color:var(--txt);border:1px solid var(--line2);border-radius:6px;padding:10px 12px;outline:none}
input:focus,select:focus{border-color:var(--cyan);box-shadow:0 0 0 3px rgba(34,228,255,.15)}
label{display:flex;flex-direction:column;gap:6px;font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--mut)}
.alert{border:1px solid rgba(255,59,107,.5);background:rgba(255,59,107,.08);color:#ffc2d0;padding:10px 12px;border-radius:6px;margin:0 0 14px}
.alert.info{border-color:rgba(34,228,255,.4);background:rgba(34,228,255,.06);color:var(--txt)}.alert.temp{border-color:rgba(255,179,64,.6);background:rgba(255,179,64,.08);color:#ffe2b0}
/* login */
.login-wrap{min-height:100vh;display:grid;place-items:center;position:relative;z-index:5;padding:20px}
.login-card{width:min(400px,100%);padding:34px 32px 22px;border:1px solid var(--line2);border-radius:14px;background:rgba(8,14,22,.88);box-shadow:0 0 0 1px rgba(34,228,255,.06),0 30px 80px rgba(0,0,0,.6),0 0 60px rgba(34,228,255,.08);backdrop-filter:blur(10px)}
.login-card form{display:flex;flex-direction:column;gap:16px}.login-card button{padding:12px}
.login-brand{text-align:center;margin-bottom:22px}.login-brand h1{margin:6px 0 2px;letter-spacing:.3em;font-weight:500}.login-brand h1 b{color:var(--cyan)}.login-brand p{margin:0;color:var(--mut);font-size:11px;letter-spacing:.25em}
input.code{font-family:var(--mono);font-size:24px;letter-spacing:.4em;text-align:center}
.login-foot{margin-top:20px;display:flex;justify-content:space-between;align-items:center;gap:8px;font-size:11px;color:var(--mut);border-top:1px solid var(--line);padding-top:12px}
/* pages */
.page{max-width:820px;margin:24px auto;padding:0 16px;display:flex;flex-direction:column;gap:16px}.page.wide{max-width:1200px}
.stack{display:flex;flex-direction:column;gap:12px;max-width:420px}.row{display:flex;gap:10px;flex-wrap:wrap;align-items:center}
.qr{background:#fff;display:inline-block;padding:10px;border-radius:8px}.qr svg{display:block;width:200px;height:200px}
.actions{white-space:nowrap}.actions form{margin-right:3px}
/* dashboard */
.dash{padding:14px;display:flex;flex-direction:column;gap:12px}
.panel{background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:12px 14px;position:relative;min-width:0;box-shadow:inset 0 1px 0 rgba(255,255,255,.03)}
.panel::before{content:"";position:absolute;top:-1px;left:14px;width:40px;height:2px;background:var(--cyan);box-shadow:0 0 10px var(--cyan)}
.ph{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px}.panel h2{margin:0;font-size:11px;letter-spacing:.22em;color:var(--cyan2);font-weight:600}.panel h3{font-size:12px;letter-spacing:.14em;color:var(--mut)}
.tag{font-size:10px;color:var(--mut);letter-spacing:.08em}
.kpis{display:grid;grid-template-columns:repeat(6,1fr);gap:12px}
.kpi{background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:12px 14px}.kpi .lbl{font-size:10px;letter-spacing:.2em;color:var(--mut)}.kpi .lbl i{font-style:normal;opacity:.6;letter-spacing:.05em}
.kpi .val{font-size:22px;margin-top:4px;display:flex;align-items:center;gap:10px;white-space:nowrap}.kpi .val.big{font-size:28px}.kpi .sub{font-size:11px;color:var(--mut);margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.beacon{width:14px;height:14px;border-radius:50%;background:var(--mut);display:inline-block}
.beacon.on{background:var(--green);box-shadow:0 0 0 0 rgba(43,255,154,.6);animation:pulse 1.6s infinite}.beacon.off{background:var(--amber);box-shadow:0 0 12px var(--amber)}.beacon.bad{background:var(--red);box-shadow:0 0 12px var(--red)}
@keyframes pulse{70%{box-shadow:0 0 0 12px rgba(43,255,154,0)}100%{box-shadow:0 0 0 0 rgba(43,255,154,0)}}
.pos{color:var(--green)}.neg{color:var(--red)}.warnc{color:var(--amber)}
.row2{display:grid;grid-template-columns:1.7fr 1fr;gap:12px}.row3{display:grid;grid-template-columns:1.6fr 1fr;gap:12px}.row4{display:grid;grid-template-columns:1fr 1fr 1fr;gap:12px}
.chart canvas{width:100%;height:260px;display:block}
.legend{font-size:11px;color:var(--mut);display:flex;gap:8px;align-items:center}.lg{display:inline-block;width:14px;height:3px;border-radius:2px}.lg.total{background:var(--cyan)}.lg.day{background:var(--violet)}
.seg button{padding:2px 8px;font-size:11px;border-radius:0;border-left:0;background:transparent}.seg button:first-child{border-left:1px solid var(--line2);border-radius:5px 0 0 5px}.seg button:last-child{border-radius:0 5px 5px 0}.seg button.on{background:rgba(34,228,255,.15);color:var(--cyan)}
.gauges{display:grid;grid-template-columns:1fr 1fr;gap:6px}.gauge{text-align:center}.gauge svg{width:100%;max-width:170px;height:auto}
.gauge .gl{font-size:10px;letter-spacing:.16em;color:var(--mut)}.gauge .gv{font-family:var(--mono);font-size:13px}.gauge .gs{font-size:10px;color:var(--mut);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.scroll{max-height:330px;overflow:auto}
.tbl{width:100%;border-collapse:collapse;font-size:12px}.tbl th{position:sticky;top:0;background:#0a1420;text-align:left;font-weight:500;color:var(--mut);font-size:10px;letter-spacing:.12em;padding:6px 8px;border-bottom:1px solid var(--line)}
.tbl td{padding:5px 8px;border-bottom:1px solid rgba(22,50,74,.5);font-family:var(--mono);white-space:nowrap}.tbl tr:hover td{background:rgba(34,228,255,.04)}
.tbl td.tk{max-width:270px;overflow:hidden;text-overflow:ellipsis}
.strats{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.strat{border:1px solid var(--line);border-radius:8px;padding:9px 10px;background:rgba(5,12,20,.6)}.strat .n{font-size:12px;font-weight:600}.strat .k{font-size:9px;letter-spacing:.14em;color:var(--violet);margin-left:6px}
.strat .st{font-size:10px;letter-spacing:.12em;margin-top:2px}.strat .p{font-family:var(--mono);font-size:18px;margin-top:4px}.strat .m{font-size:11px;color:var(--mut)}
.strat.empty{border-style:dashed;display:grid;place-items:center;color:#2f4a60;font-size:10px;letter-spacing:.2em;min-height:86px}
.feed{height:280px;overflow:auto;font-family:var(--mono);font-size:11.5px}
.fi{display:grid;grid-template-columns:62px 1fr auto;gap:8px;padding:4px 2px;border-bottom:1px solid rgba(22,50,74,.45)}.fi .t{color:var(--mut)}.fi .x{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.fi.new{animation:flash 1.2s ease-out}@keyframes flash{from{background:rgba(34,228,255,.22)}to{background:transparent}}
.fi.crit .x{color:var(--red)}.fi.warn .x{color:var(--amber)}
.b{color:var(--green)}.s{color:var(--red)}.empty-feed{color:var(--mut);padding:20px;text-align:center;font-size:12px}
.hgrid{display:grid;grid-template-columns:1.3fr 1fr;gap:20px}
.bar{display:grid;grid-template-columns:60px 1fr 210px;gap:10px;align-items:center;margin:6px 0;font-size:12px}.bar .l{color:var(--mut);letter-spacing:.12em;font-size:10px}.bar .v{font-family:var(--mono);font-size:11px;text-align:right;color:var(--mut)}
.track{height:8px;background:#0b1826;border-radius:5px;overflow:hidden;border:1px solid var(--line)}.fill{height:100%;background:linear-gradient(90deg,var(--cyan2),var(--cyan));box-shadow:0 0 10px var(--cyan);transition:width .6s}
.fill.warn{background:linear-gradient(90deg,#c77d10,var(--amber));box-shadow:0 0 10px var(--amber)}.fill.crit{background:linear-gradient(90deg,#b0103b,var(--red));box-shadow:0 0 10px var(--red)}
.svcs{display:grid;grid-template-columns:1fr 1fr;gap:6px 14px;font-size:12px;align-content:start}.svc{display:flex;justify-content:space-between;border-bottom:1px solid rgba(22,50,74,.5);padding:4px 0}.svc span:last-child{font-family:var(--mono);font-size:11px}
.dot{display:inline-block;width:8px;height:8px;border-radius:50%;background:var(--mut);margin-right:4px}.dot.ok{background:var(--green);box-shadow:0 0 8px var(--green)}.dot.warn{background:var(--amber)}.dot.bad{background:var(--red)}
.foot{font-size:11px;color:var(--mut);text-align:center;padding:4px}
@media(max-width:1200px){.kpis{grid-template-columns:repeat(3,1fr)}.row2,.row3,.row4,.hgrid{grid-template-columns:1fr}}
@media(max-width:640px){.kpis{grid-template-columns:1fr 1fr}.top{flex-direction:column;gap:8px}nav{flex-wrap:wrap;justify-content:center}}

/* ---- brand ---- */
:root{--mag:#ff2bd6;--pink:#ff6ec7;--vio:#7a2cff}
.brand{text-decoration:none;color:var(--txt)}.mark{display:block;filter:drop-shadow(0 0 8px rgba(255,43,214,.35))}.mark.big{margin:0 auto;width:64px;height:64px;filter:drop-shadow(0 0 18px rgba(255,43,214,.45))}
.wordmark{font-family:Inter,"Segoe UI",system-ui,sans-serif;font-weight:300;letter-spacing:.02em;text-transform:none;font-size:19px}
.wordmark b{font-weight:800;letter-spacing:.04em;background:linear-gradient(90deg,var(--cyan),var(--violet) 55%,var(--mag));-webkit-background-clip:text;background-clip:text;color:transparent}
.login-brand h1.wordmark{font-size:34px;letter-spacing:.02em;margin:10px 0 4px}.login-brand h1.wordmark b{color:transparent}
/* ---- live indicator ---- */
.livepill{display:inline-flex;align-items:center;gap:6px;font-size:10px;letter-spacing:.14em;padding:3px 9px;border-radius:20px;border:1px solid var(--line2);color:var(--mut);margin-left:6px}
.livepill.hidden{display:none}.livepill .ldot{width:7px;height:7px;border-radius:50%;background:var(--mut)}
.livepill.live{color:var(--green);border-color:rgba(43,255,154,.4)}.livepill.live .ldot{background:var(--green);animation:pulse 1.6s infinite}
.livepill.recon{color:var(--amber);border-color:rgba(255,179,64,.5)}.livepill.recon .ldot{background:var(--amber);animation:blink .8s infinite}
@keyframes blink{50%{opacity:.2}}
/* ---- synthwave floor (magenta), shared ---- */
.synth-floor{position:fixed;left:-50%;right:-50%;bottom:-12%;height:62%;pointer-events:none;z-index:0;
 background:linear-gradient(transparent 0 94%,rgba(255,43,214,.75) 94%),linear-gradient(90deg,transparent 0 94%,rgba(255,43,214,.75) 94%);
 background-size:64px 64px;transform:perspective(520px) rotateX(63deg);transform-origin:50% 0;
 -webkit-mask-image:linear-gradient(transparent,#000 35%);mask-image:linear-gradient(transparent,#000 35%);
 filter:drop-shadow(0 0 6px rgba(255,43,214,.85)) drop-shadow(0 0 18px rgba(122,44,255,.6));opacity:.55;animation:floor 5s linear infinite}
.synth-floor::before{content:"";position:absolute;left:0;right:0;top:-3px;height:3px;background:linear-gradient(90deg,transparent,var(--pink),var(--mag),var(--pink),transparent);box-shadow:0 0 24px 6px rgba(255,43,214,.55)}
.synth-floor.faint{opacity:.13;animation:none;height:46%}
@keyframes floor{to{background-position:0 64px,0 0}}
body.loginbg{overflow:hidden;background:radial-gradient(1000px 520px at 50% 108%,rgba(255,43,214,.28),transparent 60%),radial-gradient(1400px 700px at 50% 120%,rgba(122,44,255,.35),transparent 70%),radial-gradient(900px 500px at 50% -10%,rgba(34,228,255,.08),transparent 60%),var(--bg)}
#atom{position:fixed;inset:0;width:100vw;height:100vh;z-index:1;pointer-events:none}
.top,.dash,.page,.foot{position:relative;z-index:2}
.login-card{border-color:rgba(255,43,214,.35);box-shadow:0 0 0 1px rgba(255,43,214,.08),0 30px 80px rgba(0,0,0,.6),0 0 70px rgba(255,43,214,.12)}
.login-card button.primary{background:linear-gradient(135deg,#22e4ff,#a77bff 60%,#ff2bd6);color:#08020f}
@media (prefers-reduced-motion:reduce){.synth-floor{animation:none}}
.brandrow{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.brand{display:flex;align-items:center;gap:10px}

/* ---- at a glance ---- */
.glance::before{background:var(--mag,#ff2bd6);box-shadow:0 0 10px #ff2bd6}
.gl-top{display:grid;grid-template-columns:1.4fr 1fr;gap:14px;align-items:center;margin:4px 0 10px}
.gl-sum{font-size:16px;line-height:1.45;margin:0;color:var(--txt)}
.gl-heads{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.gl-h{border:1px solid var(--line);border-radius:8px;padding:8px 12px;background:rgba(255,255,255,.02)}
.gl-h .lbl i,.gl-tbl th i{font-style:normal;color:var(--mut);font-weight:400;font-size:9.5px;letter-spacing:.04em;text-transform:none}
.gl-bar{height:4px;background:rgba(255,255,255,.07);border-radius:3px;margin-top:6px;overflow:hidden}.gl-bar i{display:block;height:100%;background:linear-gradient(90deg,var(--cyan),#ff2bd6)}.gl-bar i.warn{background:var(--amber)}
.tblwrap{overflow-x:auto}
.gl-tbl{width:100%;border-collapse:collapse;font-size:12.5px}
.gl-tbl th{text-align:right;font-size:10px;letter-spacing:.1em;color:var(--mut);font-weight:600;padding:5px 8px;border-bottom:1px solid var(--line2);vertical-align:bottom}
.gl-tbl th:first-child,.gl-tbl td:first-child{text-align:left}
.gl-tbl td{text-align:right;padding:5px 8px;border-bottom:1px solid var(--line)}
.gl-tbl td.w{font-weight:700;letter-spacing:.06em;color:var(--cyan)}
.gl-tbl td.pos{color:var(--green)}.gl-tbl td.neg{color:var(--red)}
.gl-tbl tr.nodata td{color:var(--mut);opacity:.55}.gl-tbl tr.nodata td.w{color:var(--mut)}
@media (max-width:1000px){.gl-top{grid-template-columns:1fr}}
/* ---- login v3: black-hole backdrop + glass card ---- */
body.loginbg{background:radial-gradient(1200px 600px at 50% 40%,rgba(122,44,255,.16),transparent 65%),radial-gradient(1000px 520px at 50% 110%,rgba(255,43,214,.30),transparent 60%),#04030a}
.login-card{background:linear-gradient(160deg,rgba(18,10,34,.52),rgba(8,6,18,.62));-webkit-backdrop-filter:blur(16px) saturate(140%);backdrop-filter:blur(16px) saturate(140%);
 border:1px solid rgba(255,110,199,.38);box-shadow:0 0 0 1px rgba(255,255,255,.04) inset,0 30px 90px rgba(0,0,0,.65),0 0 80px rgba(255,43,214,.18)}
.login-card label{color:#e9d9f5}.login-card input{background:rgba(4,3,12,.72)}
.login-brand p{color:#c9b4e6}

/* ---- login v4: card shrinks modestly on small/short windows (disc in login.js scales to the card) ---- */
@media (max-height:760px){.login-wrap{padding:12px}.login-card{padding:24px 26px 16px}.login-brand{margin-bottom:14px}.mark.big{width:52px;height:52px}
 .login-brand h1.wordmark{font-size:29px;margin:6px 0 2px}.login-card form{gap:12px}.login-card button{padding:10px}.login-foot{margin-top:14px;padding-top:10px}}
@media (max-height:600px){.login-card{padding:18px 22px 12px}.mark.big{width:40px;height:40px}.login-brand{margin-bottom:10px}.login-brand h1.wordmark{font-size:25px}.login-card form{gap:9px}}
@media (max-width:480px){.login-card{width:min(360px,100%);padding:24px 22px 14px}.mark.big{width:52px;height:52px}.login-brand h1.wordmark{font-size:29px}
 .login-brand p{font-size:10px;letter-spacing:.18em}.login-card form{gap:12px}.login-foot{flex-wrap:wrap;margin-top:14px}}

/* ---- strategies scoreboard (2026-10-23) ---- */
.sboard::before{background:var(--violet,#8b5cf6);box-shadow:0 0 10px var(--violet,#8b5cf6)}
.sb-tbl td.w{color:var(--txt,#d8f3ff);letter-spacing:.02em;font-weight:600}
.sb-tbl td{vertical-align:top}
.sb-tbl td.warnc{color:var(--amber)}
.sb-d{font-size:10.5px;color:var(--mut);font-weight:400;margin-top:2px;white-space:normal}
.sb-bar{height:4px;margin-top:4px;min-width:90px}
