
:root{--bg:#0b1220;--card:#111a2b;--muted:#2b3a55;--fg:#e7eefc;--ok:#22c55e;--warn:#fbbf24;--err:#ef4444;--chip:#1b2540;--chip-on:#243455;}
*{box-sizing:border-box}html,body{height:100%}body{margin:0;background:var(--bg);color:var(--fg);font:14px/1.4 system-ui,Segoe UI,Roboto,Helvetica,Arial}
.container{max-width:940px;margin:48px auto;padding:0 16px}
.panel{background:var(--card);border:1px solid #1a2338;border-radius:12px;box-shadow:0 10px 32px rgba(0,0,0,.25);padding:18px 18px 12px}
.row{display:flex;flex-wrap:wrap;gap:12px;align-items:center}
.row+.row{margin-top:10px}
label{opacity:.8;margin-right:8px}
input[type="color"]{appearance:none;width:44px;height:20px;padding:0;border:0;border-radius:6px;background:#222;display:inline-block}
input[type="number"]{width:96px;height:28px;border:1px solid #26324b;background:#0d1424;color:var(--fg);border-radius:8px;padding:0 8px}
button{height:28px;padding:0 12px;border-radius:8px;border:1px solid #2a395a;background:#162342;color:var(--fg);cursor:pointer}
button.primary{background:#1d2d56;border-color:#29406f}
button:disabled{opacity:.6;cursor:not-allowed}
hr{border:0;height:1px;background:#1a2338;margin:12px 0}
.chips{display:flex;flex-wrap:wrap;gap:8px}
.chip{background:var(--chip);border:1px solid #2a3858;border-radius:999px;padding:5px 10px;cursor:pointer;user-select:none}
.chip.selected{background:var(--chip-on);border-color:#365187}
.badge{margin-left:6px;font-size:11px;opacity:.8}
.badge.ir{color:#ff6b6b}
.badge.jsn{color:#60a5fa}
.stats{display:flex;gap:12px;flex-wrap:wrap;margin-top:10px}
.card{flex:1;min-width:180px;background:#0d1626;border:1px dashed #1a2338;border-radius:8px;padding:10px}
.card h4{margin:0 0 6px 0;font-size:12px;opacity:.7;font-weight:600}
.log{min-height:120px;max-height:220px;overflow:auto;background:#0d1626;border:1px dashed #1a2338;border-radius:8px;padding:10px;font-family:ui-monospace,Consolas,monospace;font-size:12px}
.kv{display:flex;gap:6px;align-items:center}
.kv > * {margin-right:4px}
.sr-only{position:absolute;left:-10000px}
.err{color:var(--err)}
.ok{color:var(--ok)}
.warn{color:var(--warn)}
small.muted{opacity:.7}
