/* Clean ops console: light, high-readability, calm contrast. */
:root{
  --bg:#f1f5f9; --panel:#ffffff; --panel2:#f8fafc; --input:#ffffff;
  --line:#e2e8f0; --line2:#cbd5e1;
  --tx:#0f172a; --dim:#475569; --faint:#94a3b8;
  --accent:#2563eb; --accent-dark:#1d4ed8; --accent-soft:#eff6ff;
  --stateline-border:#bfdbfe;
  --grn:#15803d; --grn-soft:#f0fdf4;
  --red:#dc2626; --red-soft:#fef2f2;
  --amber:#b45309; --amber-soft:#fffbeb;
  --sans:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",sans-serif;
  --mono:ui-monospace,"Cascadia Mono","JetBrains Mono",Menlo,Consolas,monospace;
  --r:10px;
  --shadow:0 1px 2px rgba(15,23,42,.06),0 1px 3px rgba(15,23,42,.08);
}
/* Dark mode: same layout, softer contrast than harsh black. */
[data-theme="dark"]{
  --bg:#0d1424; --panel:#141d33; --panel2:#1a2540; --input:#1a2540;
  --line:#26334f; --line2:#3b4f7e;
  --tx:#e2e8f0; --dim:#94a3b8; --faint:#64748b;
  --accent:#60a5fa; --accent-dark:#93c5fd; --accent-soft:#16294d;
  --stateline-border:#2b3f66;
  --grn:#4ade80; --grn-soft:#052e16;
  --red:#f87171; --red-soft:#2a1215;
  --amber:#fbbf24; --amber-soft:#241a06;
  --shadow:0 1px 2px rgba(0,0,0,.4),0 1px 3px rgba(0,0,0,.35);
}
*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{margin:0;background:var(--bg);color:var(--tx);font:15px/1.6 var(--sans)}
::selection{background:#bfdbfe}
:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
button{font:inherit;cursor:pointer}
/* ---------- gate ---------- */
.gate{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:20px}
.gatebox{width:360px;background:var(--panel);border:1px solid var(--line);border-radius:14px;box-shadow:var(--shadow);padding:32px;display:flex;flex-direction:column;gap:12px}
.brand{font-weight:800;font-size:22px;letter-spacing:-.02em}
.brand span{color:var(--accent)}
.sub{margin:0 0 8px;color:var(--dim);font-size:14px}
.fld{display:flex;flex-direction:column;gap:6px;font-size:13.5px;font-weight:600;color:var(--dim)}
.remember{display:flex;align-items:center;gap:8px;font-size:14px;color:var(--dim);padding:2px 0}
.remember input{width:17px;height:17px;accent-color:var(--accent);margin:0}
input,select{background:var(--input);border:1px solid var(--line2);color:var(--tx);border-radius:8px;padding:9px 12px;font:inherit}
input:focus,select:focus{border-color:var(--accent);outline:2px solid #bfdbfe;outline-offset:0}
button{background:var(--input);color:var(--tx);border:1px solid var(--line2);border-radius:8px;padding:8px 14px;font-weight:600;font-size:14px}
button:hover{border-color:var(--accent);color:var(--accent)}
button.primary{background:var(--accent);border-color:var(--accent);color:#fff}
button.primary:hover{background:var(--accent-dark);color:#fff}
button.danger{border-color:#fca5a5;color:var(--red);background:var(--red-soft)}
button.danger:hover{background:var(--red);border-color:var(--red);color:#fff}
button.ghost{background:none;border-color:transparent;color:var(--dim)}
button.ghost:hover{color:var(--tx);border-color:var(--line2)}
button:disabled{opacity:.5;cursor:wait}
.err{color:var(--red);min-height:1.2em;margin:4px 0 0;font-size:14px}
/* ---------- shell ---------- */
#app{display:flex;min-height:100vh}
.rail{width:248px;flex:none;background:var(--panel);border-right:1px solid var(--line);padding:20px 14px;display:flex;flex-direction:column;gap:16px;position:sticky;top:0;height:100vh}
.railstate{display:flex;gap:10px;align-items:flex-start;background:var(--panel2);border:1px solid var(--line);border-radius:var(--r);padding:10px 12px}
.dot{width:10px;height:10px;border-radius:50%;background:var(--grn);flex:none;margin-top:6px}
.dot.busy{background:var(--amber);animation:pulse 1.1s infinite}
.dot.bad{background:var(--red)}
@keyframes pulse{50%{opacity:.35}}
.rstate{font-weight:700;font-size:13px;text-transform:uppercase;letter-spacing:.08em}
.rtask{font-size:12.5px;color:var(--dim);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:160px}
nav{display:flex;flex-direction:column;gap:2px}
nav button{background:none;border:none;border-radius:8px;color:var(--dim);text-align:left;padding:9px 12px;font-size:14.5px;font-weight:600}
nav button:hover{color:var(--tx);background:var(--panel2)}
nav button.on{color:var(--accent);background:var(--accent-soft)}
.railfoot{margin-top:auto;display:flex;align-items:center;justify-content:space-between;color:var(--dim);font-size:13.5px}
.clock{font:12px var(--mono);color:var(--faint);border-top:1px solid var(--line);padding-top:10px}
main{flex:1;min-width:0;padding:20px 24px 64px;max-width:1100px}
.stateline{font:13px var(--mono);color:var(--accent-dark);background:var(--accent-soft);border:1px solid var(--stateline-border);border-radius:var(--r);padding:9px 14px;margin-bottom:16px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.toast{position:fixed;bottom:20px;left:50%;transform:translateX(-50%);background:#0f172a;color:#fff;border-radius:10px;padding:11px 20px;z-index:50;box-shadow:var(--shadow);font-size:14px}
h2{font-size:13px;font-weight:700;text-transform:uppercase;letter-spacing:.08em;color:var(--dim);margin:24px 0 10px;padding-bottom:6px;border-bottom:1px solid var(--line)}
.hidden{display:none!important}
/* ---------- dashboard ---------- */
.strip{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:12px;margin-bottom:6px}
.cell{background:var(--panel);border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--shadow);padding:12px 16px}
.cell .k{font-size:12px;font-weight:700;color:var(--dim);text-transform:uppercase;letter-spacing:.06em}
.cell .v{font-size:24px;font-weight:700;font-variant-numeric:tabular-nums;letter-spacing:-.01em}
.cols2{display:grid;grid-template-columns:1fr 1fr;gap:0 24px}
.feed{display:flex;flex-direction:column;background:var(--panel);border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--shadow);padding:4px 16px}
.feed>div{padding:9px 0;border-bottom:1px solid var(--line);font-size:14px}
.feed>div:last-child{border-bottom:none}
.feed time{font-family:var(--mono);font-size:12px;color:var(--faint);margin-right:8px;white-space:nowrap}
.feed .src{color:var(--accent-dark);font-family:var(--mono);font-size:12px;margin-right:6px}
.ok{color:var(--grn)}.bad{color:var(--red)}.dim{color:var(--dim)}
/* ---------- rows, tables ---------- */
.rulerow{display:flex;gap:12px;align-items:center;background:var(--panel);border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--shadow);padding:12px 14px;margin-bottom:8px}
.rulerow .t{font-weight:700}
.rulerow .meta{font-size:12.5px;color:var(--dim);font-family:var(--mono)}
.rulerow .acts{margin-left:auto;display:flex;gap:6px;flex:none;flex-wrap:wrap;justify-content:flex-end}
.rulerow .acts button{padding:6px 11px;font-size:13px}
.strtag{font-size:11px;font-weight:800;background:var(--accent);color:#fff;padding:2px 8px;border-radius:6px;letter-spacing:.06em}
.locktag{font-size:11px;font-weight:800;color:var(--amber);border:1px solid #fcd34d;background:var(--amber-soft);padding:1px 7px;border-radius:6px;letter-spacing:.06em}
.strbar{border:1px solid #bfdbfe;border-left:4px solid var(--accent);background:var(--panel);border-radius:var(--r);box-shadow:var(--shadow);padding:14px 16px;margin-bottom:8px}
.strbar .toolbar{margin-bottom:0}
.tablewrap{overflow-x:auto;background:var(--panel);border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--shadow)}
table{width:100%;border-collapse:collapse;font-size:14px}
th{font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--dim);text-align:left;padding:10px 12px;border-bottom:1px solid var(--line);background:var(--panel2);white-space:nowrap}
td{padding:9px 12px;border-bottom:1px solid var(--line);font-variant-numeric:tabular-nums}
tr:last-child td{border-bottom:none}
tbody tr:hover{background:var(--panel2)}
.num{font-family:var(--mono);font-size:13px}
.toolbar{display:flex;gap:8px;flex-wrap:wrap;margin:12px 0;align-items:center}
.toolbar input{flex:1;min-width:160px}
#ordSym{flex:none;width:120px}#ordQty{flex:none;width:100px}#ordSide{flex:none}
.composer{display:flex;gap:8px}.composer input{flex:1}
.freezebar{border:1px solid #fca5a5;background:var(--red-soft);color:var(--red);border-radius:var(--r);padding:12px 16px;margin:10px 0;display:flex;justify-content:space-between;align-items:center;gap:10px;font-weight:700}
nav button .badge{display:inline-block;min-width:20px;text-align:center;font-size:11px;font-weight:800;background:var(--red);color:#fff;border-radius:10px;padding:1px 6px;margin-left:4px}
.nsbar{border:1px solid var(--line2);background:var(--panel);border-radius:var(--r);box-shadow:var(--shadow);padding:12px 16px;margin:12px 0;display:flex;justify-content:space-between;align-items:center;gap:12px}
.nsbar.on{border-color:var(--grn);border-left:4px solid var(--grn)}
.railfoot{margin-top:auto;display:flex;align-items:center;gap:8px;color:var(--dim);font-size:13.5px}
.railfoot #who{margin-right:auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
#chart{width:100%;height:190px;background:var(--panel);border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--shadow)}
#chart text{user-select:none}
.doc{background:var(--panel);border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--shadow);padding:22px 28px;max-width:78ch}
.doc h1,.doc h2,.doc h3{border:none;margin:18px 0 8px;padding:0;color:var(--tx);text-transform:none;letter-spacing:0}
.doc h1{font-size:26px}.doc h2{font-size:20px}
.doc pre{background:var(--panel2);border:1px solid var(--line);border-radius:8px;padding:12px;overflow:auto;font-size:13px}
.doc code{font-family:var(--mono);font-size:.9em;background:var(--panel2);padding:1px 5px;border-radius:4px}
.doc pre code{background:none;padding:0}
.doc table{font-size:14px}
.doc a{color:var(--accent-dark)}
.repcols{display:grid;grid-template-columns:320px 1fr;gap:16px;align-items:start}
.repitem{background:var(--panel);border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--shadow);padding:12px 14px;margin-bottom:8px}
.repitem .meta{font-size:12px;color:var(--dim);font-family:var(--mono);margin-top:2px}
.repitem .rowbtns{display:flex;gap:6px;margin-top:8px;flex-wrap:wrap;align-items:center}
.repitem .rowbtns button{padding:5px 11px;font-size:13px}
.repitem select{padding:5px 8px;font-size:13px}
.imp{font-size:12px;color:var(--dim);display:flex;align-items:center;gap:6px;margin-top:8px}
fieldset{background:var(--panel);border:1px solid var(--line2);border-radius:var(--r);box-shadow:var(--shadow);padding:18px;margin:12px 0;display:grid;gap:12px;grid-template-columns:1fr 1fr}
fieldset legend{font-size:12px;font-weight:800;color:var(--accent-dark);padding:0 8px;text-transform:uppercase;letter-spacing:.06em}
fieldset label{display:flex;flex-direction:column;gap:5px;font-size:13px;font-weight:600;color:var(--dim)}
fieldset .full{grid-column:1/-1}
fieldset input[type="checkbox"]{width:18px;height:18px;accent-color:var(--accent);margin:0;justify-self:start}
/* ---------- responsive / motion ---------- */
@media(max-width:900px){
  #app{flex-direction:column}
  .rail{width:auto;height:auto;position:static;border-bottom:1px solid var(--line)}
  nav{flex-direction:row;flex-wrap:wrap}
  .cols2,.repcols{grid-template-columns:1fr}
  fieldset{grid-template-columns:1fr}
  main{padding:14px 14px 64px}
}
@media(prefers-reduced-motion:reduce){
  *,*::before,*::after{animation:none!important;transition:none!important}
}
