:root{--bg:#0f1115;--panel:#171a21;--panel2:#1d222b;--line:#2a2f3a;--fg:#e6e9ef;--muted:#8b93a3;
--buy:#12b886;--sell:#fa5252;--accent:#4dabf7;--warn:#f59f00;}
*{box-sizing:border-box}
[x-cloak]{display:none!important}
body{margin:0;background:var(--bg);color:var(--fg);font:14px/1.45 system-ui,Segoe UI,Roboto,sans-serif}
a{color:var(--accent);text-decoration:none}a:hover{text-decoration:underline}
.nav{display:flex;gap:16px;align-items:center;padding:10px 18px;background:var(--panel);border-bottom:1px solid var(--line)}
.nav .brand{font-weight:700;letter-spacing:.5px;color:var(--fg)}
.nav a.active{color:#fff;font-weight:600}
.nav .spacer{flex:1}.nav .who{color:var(--muted)}
.wrap{max-width:1400px;margin:0 auto;padding:18px}
.card{background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:16px;margin:14px 0;min-width:0}
.card.narrow{max-width:420px;margin:60px auto}
.card.empty{text-align:center;padding:44px 20px}
.card.empty h2{font-size:18px;margin-bottom:8px}
.card.empty p{max-width:560px;margin:0 auto 18px}
h1{font-size:20px;margin:.2em 0}h2{font-size:16px;margin:.2em 0}h2.mt{margin-top:14px}
.page-head{display:flex;justify-content:space-between;align-items:flex-start;gap:16px;flex-wrap:wrap;margin-bottom:4px}
.page-head p{margin:2px 0 0}
label{display:block;margin:10px 0;color:var(--muted)}
label.check{display:flex;gap:8px;align-items:center}
.hint{display:block;font-size:12px;color:var(--muted);margin-top:4px}
input,select,button{font:inherit}
input,select{width:100%;margin-top:4px;padding:8px;background:var(--panel2);border:1px solid var(--line);color:var(--fg);border-radius:6px}
input[type=file]{padding:6px}
label.check input{width:auto;margin:0}
button{cursor:pointer;padding:8px 14px;background:var(--accent);color:#06121f;border:0;border-radius:6px;font-weight:600;white-space:nowrap}
button:disabled{opacity:.45;cursor:default}
button.small{padding:3px 8px;font-size:12px;font-weight:500}
button.link{background:none;color:var(--muted);padding:2px 6px;font-weight:400}
button.link:hover{color:var(--fg)}
button.secondary{background:var(--panel2);color:var(--fg);border:1px solid var(--line)}
button.danger{background:var(--sell);color:#fff}
button.buy{background:var(--buy);color:#04150e}button.sell{background:var(--sell);color:#fff}
a.btn{display:inline-block;padding:8px 14px;background:var(--accent);color:#06121f;border-radius:6px;font-weight:600}
a.btn:hover{text-decoration:none;filter:brightness(1.08)}
.inline{display:inline}
.flash{padding:10px 14px;border-radius:8px;margin:10px 0}
.flash.err{background:#3a1e22;color:#ffc9c9;border:1px solid #7a2e35}
.flash.ok{background:#12332a;color:#b2f2bb;border:1px solid #2b6a54}
.flash.warn{background:#3a2e12;color:#ffe8b3;border:1px solid #7a5a1e}
.muted{color:var(--muted)}.small{font-size:12px}.nowrap{white-space:nowrap}
.table-wrap{overflow-x:auto}
.grid{width:100%;border-collapse:collapse}
.grid th,.grid td{text-align:left;padding:6px 8px;border-bottom:1px solid var(--line);vertical-align:top}
.grid th{color:var(--muted);font-weight:600;font-size:12px}
.grid td.empty{color:var(--muted);text-align:center;padding:12px}
.grid td.lic{min-width:200px}
.grid td.actions form,.grid td.actions button{margin-right:2px}
.grid-form{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:6px 16px;align-items:end}
.grid-form button{grid-column:1/-1;justify-self:start}
.row-between{display:flex;justify-content:space-between;align-items:center;gap:10px}
.tag{background:var(--panel2);border:1px solid var(--line);border-radius:5px;padding:1px 6px;font-size:11px;white-space:nowrap}
.tag.off{color:var(--muted)}.tag.warn{color:var(--warn);border-color:var(--warn)}.tag.err{color:var(--sell);border-color:var(--sell)}
.dot{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:5px;background:var(--muted)}
.dot.on{background:var(--buy)}.dot.warn{background:var(--warn)}.dot.off{background:var(--sell)}
code{background:var(--panel2);padding:1px 5px;border-radius:4px}
.qr{background:#fff;padding:12px;border-radius:8px;width:min-content;margin:10px 0}
.ok{color:var(--buy)}.err{color:var(--sell)}
.btns{display:flex;flex-wrap:wrap;gap:6px;margin:8px 0;align-items:center}
.btns.right{justify-content:flex-end;margin-top:16px}
.pill{padding:2px 8px;border:1px solid var(--line);border-radius:12px;font-size:12px;background:var(--panel2);white-space:nowrap}
.pill.on{border-color:var(--buy);color:var(--buy)}.pill.warn{border-color:var(--warn);color:var(--warn)}.pill.err{border-color:var(--sell);color:var(--sell)}
/* modal */
.modal-backdrop{position:fixed;inset:0;background:rgba(5,7,10,.7);display:flex;align-items:flex-start;justify-content:center;padding:48px 16px;z-index:50;overflow:auto}
.modal{background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:18px 22px 20px;width:100%;max-width:520px;box-shadow:0 20px 60px rgba(0,0,0,.5)}
.modal label{margin:12px 0}
.modal.confirm{max-width:440px}
.modal.confirm p{margin:8px 0 0}
.confirm-backdrop{z-index:60}
.modal .flash{margin:8px 0 0}
/* dashboard */
.toolbar{display:flex;gap:10px;align-items:flex-end;flex-wrap:wrap}
.toolbar .inline-label{margin:0;font-size:12px}
.toolbar select,.toolbar input{width:auto;min-width:180px;margin:2px 0 0;padding:6px 8px}
.toolbar .pill,.toolbar button{margin-bottom:3px}
.dash{display:grid;grid-template-columns:240px minmax(0,1fr) 300px;gap:12px;align-items:start;margin-top:14px}
.dash>section{min-width:0}
.dash .card{margin:0 0 12px}
.book .lvl{display:flex;justify-content:space-between;padding:1px 6px;font-variant-numeric:tabular-nums;cursor:pointer;border-radius:4px}
.book .lvl:hover{background:var(--panel2)}
.book .ask{color:var(--sell)}.book .bid{color:var(--buy)}
.book .mid{text-align:center;color:var(--muted);border-top:1px solid var(--line);border-bottom:1px solid var(--line);padding:3px;margin:2px 0}
.book .empty-note{padding:12px 0;text-align:center}
#chart{height:340px;width:100%}
.seg{display:flex;gap:4px;flex-wrap:wrap}
.seg.kinds{align-items:center;margin:8px 0}
.entry{display:grid;grid-template-columns:140px 140px 1fr;gap:6px 12px;align-items:end;margin-bottom:6px}
.entry label{margin:4px 0}
.entry .btns{margin:0 0 4px}
.msg{margin-left:auto}
.tape{max-height:220px;overflow:auto;font-variant-numeric:tabular-nums}
.tape .b{color:var(--buy)}.tape .s{color:var(--sell)}
.stat{display:flex;justify-content:space-between;border-bottom:1px solid var(--line);padding:3px 0}
.stat:last-child{border-bottom:0}
@media(max-width:1100px){.dash{grid-template-columns:1fr 1fr}.dash .center{grid-column:1/-1;order:-1}}
@media(max-width:720px){.dash{grid-template-columns:1fr}.entry{grid-template-columns:1fr 1fr}.entry .btns{grid-column:1/-1}}
/* strategies */
.strip{margin:14px 0 0}
.strip .grid td{vertical-align:middle}
.strip tr.sel td{background:var(--panel2)}
.strip tr.row{cursor:pointer}
.strip .pnl{font-variant-numeric:tabular-nums;white-space:nowrap}
.strip .st{white-space:nowrap}
.strip .actions{white-space:nowrap;text-align:right}
.strip .actions button{margin-left:4px}
.kpis{display:flex;gap:24px;flex-wrap:wrap;margin:4px 0 12px}
.kpi{display:flex;flex-direction:column;gap:2px}
.kpi strong{font-size:18px}
.filters select{width:auto;margin:0;padding:6px 8px}
details.adv{margin:10px 0}
details.adv summary{cursor:pointer;color:var(--muted)}
.adv-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:2px 14px}
.adv-grid label{margin:6px 0;font-size:12px}
.adv-grid .hint{margin-top:2px}
.hint-block{background:var(--panel2);border:1px solid var(--line);border-radius:6px;padding:8px 10px;margin:8px 0;font-size:12px;color:var(--muted)}
.modal.wide{max-width:640px}
