:root{--bg: #f4f6f8;--panel: #ffffff;--text: #1d2733;--muted: #6b7a8c;--line: #dde3ea;--brand: #1f4e79;--brand-text: #ffffff;--ok: #1a7f4b;--warn: #b26a00;--bad: #c0392b;--ok-bg: #e3f4ea;--warn-bg: #fff2d9;--bad-bg: #fbe6e3;--info-bg: #e6eef6}@media (prefers-color-scheme: dark){:root{--bg: #12171d;--panel: #1b222b;--text: #e6ebf0;--muted: #93a1b1;--line: #2c3743;--brand: #4a8fcf;--brand-text: #0c1117;--ok: #4cc38a;--warn: #f0a93c;--bad: #ef6f62;--ok-bg: #173226;--warn-bg: #38290d;--bad-bg: #3a1b18;--info-bg: #1b2a3a}}*{box-sizing:border-box}html,body{margin:0;background:var(--bg);color:var(--text);font:15px/1.5 system-ui,Microsoft JhengHei,PingFang TC,sans-serif}a{color:var(--brand)}h1{font-size:20px;margin:0 0 12px}h2{font-size:16px;margin:0 0 10px}.layout{min-height:100vh;display:flex;flex-direction:column}.topbar{display:flex;align-items:center;gap:12px;padding:8px 16px;background:var(--brand);color:var(--brand-text);flex-wrap:wrap}.topbar .brand{font-weight:700}.topbar select,.topbar button{font:inherit}.nav{display:flex;gap:4px;flex-wrap:wrap;flex:1}.nav a{color:var(--brand-text);text-decoration:none;padding:6px 10px;border-radius:6px;opacity:.85}.nav a.router-link-active{background:#fff3;opacity:1;font-weight:600}.main{padding:16px;max-width:1200px;width:100%;margin:0 auto;flex:1}.card{background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:14px;margin-bottom:14px}.grid{display:grid;gap:12px;grid-template-columns:repeat(auto-fill,minmax(260px,1fr))}.row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.row.between{justify-content:space-between}.muted{color:var(--muted);font-size:13px}.tbl-wrap{overflow-x:auto}table{border-collapse:collapse;width:100%;font-size:14px}th,td{text-align:left;padding:7px 10px;border-bottom:1px solid var(--line);white-space:nowrap}th{color:var(--muted);font-weight:600;font-size:13px}input,select,textarea{font:inherit;padding:7px 9px;border:1px solid var(--line);border-radius:6px;background:var(--panel);color:var(--text);max-width:100%}input:focus,select:focus,button:focus-visible{outline:2px solid var(--brand);outline-offset:1px}label{display:flex;flex-direction:column;gap:3px;font-size:13px;color:var(--muted)}button{font:inherit;padding:7px 14px;border:1px solid var(--line);border-radius:6px;background:var(--panel);color:var(--text);cursor:pointer}button:hover{border-color:var(--brand)}button.primary{background:var(--brand);color:var(--brand-text);border-color:var(--brand)}button.danger{color:var(--bad);border-color:var(--bad)}button:disabled{opacity:.5;cursor:not-allowed}button.sm{padding:3px 9px;font-size:13px}.badge{display:inline-block;padding:1px 8px;border-radius:10px;font-size:12px;background:var(--info-bg)}.badge.ok{background:var(--ok-bg);color:var(--ok)}.badge.warn{background:var(--warn-bg);color:var(--warn)}.badge.bad{background:var(--bad-bg);color:var(--bad)}.form{display:grid;gap:10px;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));align-items:end}.toast{position:fixed;bottom:16px;left:50%;transform:translate(-50%);background:var(--ok);color:#fff;padding:9px 16px;border-radius:8px;z-index:50;max-width:90vw;box-shadow:0 4px 14px #00000040}.toast.err{background:var(--bad)}.modal-bg{position:fixed;top:0;right:0;bottom:0;left:0;background:#00000073;display:flex;align-items:center;justify-content:center;z-index:40;padding:16px}.modal{background:var(--panel);border-radius:12px;padding:20px;width:100%;max-width:380px}.code-input{font-size:24px;letter-spacing:8px;text-align:center;width:100%}.login{max-width:400px;margin:8vh auto}.ev-live{max-height:420px;overflow:auto}.ev-new{animation:flash 1.6s ease-out}@keyframes flash{0%{background:var(--info-bg)}to{background:transparent}}.dot{display:inline-block;width:9px;height:9px;border-radius:50%;background:var(--muted);margin-right:5px}.dot.on{background:var(--ok)}.dot.off{background:var(--bad)}.qr{word-break:break-all;font-family:ui-monospace,Consolas,monospace;font-size:12px;background:var(--bg);padding:8px;border-radius:6px}@media (max-width: 640px){.main{padding:10px}th,td{padding:6px}.topbar{padding:6px 10px;gap:6px}.topbar .brand{flex:0 0 auto}.nav{order:3;flex:1 0 100%;flex-wrap:nowrap;overflow-x:auto;white-space:nowrap}.nav a{padding:6px 9px}}
