:root{--bg: #121212;--card: #1e1e1e;--line: #333;--text: #e8e8e8;--muted: #9a9a9a;--red: #ff4d4d;--amber: #ffb020;--green: #2ee59d;font-family:Inter,system-ui,-apple-system,PingFang TC,Noto Sans TC,sans-serif;color-scheme:dark}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--text);font-size:15px}#sim{max-width:720px;margin:0 auto;padding:20px 16px 40px;display:grid;gap:14px}header{display:flex;align-items:baseline;justify-content:space-between;gap:12px}h1{font-size:22px;margin:0}h2{font-size:14px;margin:0 0 8px;color:var(--muted);font-weight:600}a{color:#7ab8ff}.card{background:var(--card);border:1px solid var(--line);border-radius:10px;padding:14px 16px}#setup{display:grid;grid-template-columns:1fr 1fr;gap:10px 14px;align-items:end}#setup label{display:grid;gap:4px;color:var(--muted);font-size:13px}#setup input,#setup select,#setup button{font:inherit;padding:7px 9px;border-radius:6px;border:1px solid #444;background:#2a2a2a;color:var(--text);min-width:0}#setup input[type=file]{padding:5px}#toggle{background:#2f6fed;border-color:#2f6fed;font-weight:600;cursor:pointer}#toggle:hover{filter:brightness(1.1)}.hint{grid-column:1 / -1;margin:0;color:var(--muted);font-size:12.5px}.row{display:flex;align-items:center;gap:12px;flex-wrap:wrap;min-height:28px}#countdown{margin-left:auto;font-variant-numeric:tabular-nums;color:var(--muted)}.badge{padding:2px 10px;border-radius:999px;font-size:13px;background:#333}.badge.live{background:#12432f;color:var(--green)}.badge.connecting{background:#43350f;color:var(--amber)}.badge.down{background:#4a1818;color:var(--red)}#groups{display:flex;gap:10px;flex-wrap:wrap;margin:12px 0}.chip{display:flex;align-items:center;gap:8px;padding:8px 12px;border-radius:8px;background:#262626;border:1px solid var(--line)}.lamp{width:16px;height:16px;border-radius:50%;background:#444}.state-red .lamp{background:var(--red);box-shadow:0 0 10px var(--red)}.state-amber .lamp{background:var(--amber);box-shadow:0 0 10px var(--amber)}.state-green .lamp{background:var(--green);box-shadow:0 0 10px var(--green)}.state-flashing_red .lamp{background:var(--red);animation:flash 1s steps(1) infinite}.state-flashing_amber .lamp{background:var(--amber);animation:flash 1s steps(1) infinite}@keyframes flash{50%{opacity:.15}}#stats{display:grid;grid-template-columns:repeat(5,1fr);gap:4px 10px;margin:0}#stats dt{color:var(--muted);font-size:12px}#stats dd{margin:0;font-variant-numeric:tabular-nums;grid-row:2}#log{list-style:none;margin:0;padding:0;font-family:ui-monospace,Menlo,monospace;font-size:12.5px;max-height:260px;overflow-y:auto}#log li{padding:2px 0;border-bottom:1px solid #262626}#log li.warn{color:#ffb4a8}@media(max-width:560px){#setup{grid-template-columns:1fr}#stats{grid-template-columns:repeat(3,1fr)}#stats dd{grid-row:auto}}h2 .sub{margin-left:10px;font-weight:400;font-size:12.5px}#presets{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:12px}#manual button{font:inherit;padding:6px 12px;border-radius:6px;border:1px solid #444;background:#2a2a2a;color:var(--text);cursor:pointer}#manual button:disabled{opacity:.4;cursor:default}#manual-groups{display:grid;gap:8px}.mgroup{display:flex;align-items:center;gap:6px;flex-wrap:wrap}.mgroup .name{width:72px;color:var(--muted)}#manual-groups button.on{border-color:#7ab8ff;box-shadow:inset 0 0 0 1px #7ab8ff}#manual-groups button[data-state=red].on{background:#4a1818}#manual-groups button[data-state=amber].on{background:#4a3810}#manual-groups button[data-state=green].on{background:#12432f}.warn-text{color:#ffb4a8;margin:10px 0 0;font-size:13px}#traffic label{display:inline-grid;gap:4px;color:var(--muted);font-size:13px}#traffic select,#traffic button{font:inherit;padding:6px 10px;border-radius:6px;border:1px solid #444;background:#2a2a2a;color:var(--text)}#traffic-toggle{background:#2f6fed;border-color:#2f6fed;font-weight:600;cursor:pointer;align-self:end}#traffic .row{align-items:end}#traffic-stats{display:grid;grid-template-columns:repeat(5,1fr);gap:4px 10px;margin:12px 0 0}#traffic-stats dt{color:var(--muted);font-size:12px}#traffic-stats dd{margin:0;font-variant-numeric:tabular-nums;grid-row:2}#traffic .hint{margin:10px 0 0;color:var(--muted);font-size:12.5px}[hidden]{display:none!important}
