:root{--bg:#151816;--surface:#1d211e;--surface2:#262b28;--ink:#e6e7e1;--ink2:#b2b8b2;--ink3:#7f8781;--line:#333935;--gold:#d9a93b;--teal:#4fb8b0;--warn:#e0845c;--ok:#6dbf7a;--err:#e06c6c}
@media (prefers-color-scheme:light){:root{--bg:#f2f3f0;--surface:#fff;--surface2:#e9ebe6;--ink:#1a1e1b;--ink2:#4e5651;--ink3:#7a837d;--line:#d6dad3;--gold:#b0821a;--teal:#0e6b67;--warn:#a4441c;--ok:#2f7a3b;--err:#b23b3b}}
*{box-sizing:border-box}
body{margin:0;background:var(--bg);color:var(--ink);font:15px/1.55 "IBM Plex Sans","Segoe UI",system-ui,sans-serif}
a{color:var(--teal)}
.top{display:flex;align-items:center;gap:20px;padding:10px 20px;border-bottom:1px solid var(--line);background:var(--surface);position:sticky;top:0;z-index:5;flex-wrap:wrap}
.brand{font-weight:800;letter-spacing:-.01em;color:var(--ink);text-decoration:none;font-size:1.1rem}
.top nav{display:flex;gap:4px;flex-wrap:wrap}
.top nav a{color:var(--ink2);text-decoration:none;padding:4px 10px;border-radius:6px;font-size:.9rem}
.top nav a.on,.top nav a:hover{background:var(--surface2);color:var(--ink)}
.top nav a.dim{color:var(--ink3);margin-left:auto}
main{max-width:1180px;margin:0 auto;padding:20px}
.foot{color:var(--ink3);font-size:.78rem;text-align:center;padding:30px 16px}
h1{font-size:1.5rem;margin:0 0 14px}
h2{font-size:1.1rem;margin:22px 0 10px}
h3{font-size:.95rem;margin:14px 0 6px}
.grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:14px}
.card{background:var(--surface);border:1px solid var(--line);border-radius:8px;padding:14px 16px}
.card h2{margin-top:0}
.card.trading{border-top:3px solid var(--teal)}.card.ranking{border-top:3px solid var(--gold)}.card.evaluator{border-top:3px solid var(--ink3)}
.kv{display:grid;grid-template-columns:max-content 1fr;gap:4px 14px;font-size:.9rem}
.kv dt{color:var(--ink3);font-family:"IBM Plex Mono",monospace;font-size:.78rem;padding-top:2px}.kv dd{margin:0}
.pill{display:inline-block;font-size:.72rem;padding:1px 8px;border-radius:10px;border:1px solid var(--line);color:var(--ink2);font-family:"IBM Plex Mono",monospace}
.pill.ok{color:var(--ok);border-color:var(--ok)}.pill.warn{color:var(--warn);border-color:var(--warn)}.pill.err{color:var(--err);border-color:var(--err)}.pill.dim{color:var(--ink3)}
table{border-collapse:collapse;width:100%;font-size:.88rem}
th,td{text-align:left;padding:7px 10px;border-bottom:1px solid var(--line);vertical-align:top}
th{font-family:"IBM Plex Mono",monospace;font-size:.7rem;letter-spacing:.08em;text-transform:uppercase;color:var(--ink3);font-weight:500}
td.num,th.num{text-align:right;font-variant-numeric:tabular-nums;font-family:"IBM Plex Mono",monospace;font-size:.82rem;white-space:nowrap}
.tbl{overflow-x:auto;background:var(--surface);border:1px solid var(--line);border-radius:8px}
.mono{font-family:"IBM Plex Mono",monospace;font-size:.82rem}
.muted{color:var(--ink3)}
.btn{display:inline-block;background:var(--surface2);border:1px solid var(--line);color:var(--ink);padding:5px 12px;border-radius:6px;font-size:.85rem;cursor:pointer;text-decoration:none}
.btn.yes{border-color:var(--ok);color:var(--ok)}.btn.no{border-color:var(--warn);color:var(--warn)}.btn.danger{border-color:var(--err);color:var(--err)}
form.inline{display:inline}
.doc{background:var(--surface);border:1px solid var(--line);border-radius:8px;padding:20px 24px;max-width:78ch}
.doc table{font-size:.85rem}.doc img{max-width:100%}.doc pre{overflow-x:auto;background:var(--surface2);padding:10px;border-radius:6px}
.log{font-family:"IBM Plex Mono",monospace;font-size:.78rem;background:var(--surface);border:1px solid var(--line);border-radius:8px;padding:10px;max-height:60vh;overflow:auto}
.log div{padding:2px 0;border-bottom:1px dotted var(--line)}
.log .thinking{color:var(--ink3);font-style:italic}.log .warn{color:var(--warn)}.log .error{color:var(--err)}
.log .p{color:var(--teal)}
.login{max-width:360px;margin:12vh auto}
input[type=password],input[type=text]{width:100%;padding:9px 12px;border-radius:6px;border:1px solid var(--line);background:var(--surface2);color:var(--ink);font-size:1rem}
.err{color:var(--err)}
.gate{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:10px}
.gate .g{background:var(--surface);border:1px solid var(--line);border-radius:6px;padding:10px 12px;font-size:.85rem}
.gate .g b{display:block;font-family:"IBM Plex Mono",monospace;font-size:1.05rem}
.gate .g.ok b{color:var(--ok)}.gate .g.no b{color:var(--ink3)}
svg.curve{width:100%;height:auto;display:block}
.filters{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:12px}
@media (max-width:640px){main{padding:12px}.top{padding:8px 12px}}
