:root{--bg: #f4f6f8;--panel: #ffffff;--ink: #1d2733;--muted: #6b7785;--line: #dde3ea;--accent: #2b3643;--ok: #1f8a4c;--warn: #c98a00;--bad: #c62828;--grey: #cfd5dc;font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif;color:var(--ink)}*{box-sizing:border-box}body{margin:0;background:var(--bg)}button{font:inherit}.top{background:var(--accent);color:#fff;padding:10px 20px;display:flex;align-items:center;gap:16px}.top h1{font-size:17px;margin:0;font-weight:600}.top .stage{font-size:12px;background:#c98a00;color:#fff;padding:2px 8px;border-radius:3px}.top .spacer{flex:1}.top .who{font-size:13px;opacity:.9}.top button{background:transparent;border:1px solid rgba(255,255,255,.5);color:#fff;padding:4px 10px;border-radius:4px;cursor:pointer}.layout{display:grid;grid-template-columns:340px 1fr;gap:16px;padding:16px 20px;min-height:calc(100vh - 44px)}@media (max-width: 900px){.layout{grid-template-columns:1fr}}.panel{background:var(--panel);border:1px solid var(--line);border-radius:6px;padding:12px 14px}.panel h2{font-size:14px;margin:0 0 10px;color:var(--muted);font-weight:600;text-transform:uppercase;letter-spacing:.04em}.devlist{display:flex;flex-direction:column;gap:6px;max-height:calc(100vh - 140px);overflow:auto}.dev{border:1px solid var(--line);border-radius:5px;padding:8px 10px;cursor:pointer;display:grid;grid-template-columns:1fr auto;gap:2px 8px}.dev:hover{border-color:#9fb0c2}.dev.sel{border-color:var(--accent);box-shadow:inset 3px 0 0 var(--accent)}.dev .site{font-weight:600;font-size:13px;grid-column:1 / -1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.dev .id{font-size:12px;color:var(--muted);font-family:ui-monospace,monospace}.dev .seen{font-size:12px;text-align:right}.dev .cov{font-size:11px;color:var(--muted);grid-column:1 / -1}.dot{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:6px;vertical-align:middle}.dot.ok{background:var(--ok)}.dot.warn{background:var(--warn)}.dot.bad{background:var(--bad)}.dot.grey{background:var(--grey)}.toolbar{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin-bottom:10px;font-size:13px}.toolbar input{font:inherit;padding:4px 6px;border:1px solid var(--line);border-radius:4px}.toolbar button{padding:5px 12px;border:1px solid var(--accent);background:var(--accent);color:#fff;border-radius:4px;cursor:pointer}.toolbar button.ghost{background:#fff;color:var(--accent)}.meta{font-size:13px;color:var(--muted);display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:2px 16px;margin-bottom:10px}.meta b{color:var(--ink);font-weight:600}.gridwrap{overflow-x:auto}table.grid{border-collapse:collapse;font-size:12px;font-variant-numeric:tabular-nums}.grid th,.grid td{border:1px solid var(--line);padding:3px 5px;text-align:center;white-space:nowrap}.grid th{background:#eef2f6;color:var(--muted);font-weight:600;position:sticky;top:0}.grid td.lbl{text-align:left;color:var(--muted)}.grid td.D{background:#e53935;color:#fff;font-weight:600}.grid td.na{background:#e2e6ea;color:#8a97a5}.grid td.empty{color:#b9c2cc}.grid tr.close td{border-bottom:2px solid #8a97a5}.grid tr.daybreak td{border-top:3px solid var(--accent)}.alerts{font-size:13px}.alerts table{border-collapse:collapse;width:100%}.alerts th,.alerts td{border-bottom:1px solid var(--line);padding:5px 6px;text-align:left;vertical-align:top}.alerts th{color:var(--muted);font-weight:600;font-size:12px}.tag{display:inline-block;font-size:11px;padding:1px 6px;border-radius:3px;background:#eef2f6;color:var(--muted)}.tag.dryRun{background:#fff3cd;color:#7a5a00}.tag.sent{background:#dcefe3;color:#1f5f3a}.tag.failed,.tag.pending{background:#fde2e1;color:#8a1f1b}.login{max-width:360px;margin:80px auto}.login h1{font-size:20px;margin:0 0 4px}.login p{color:var(--muted);font-size:13px;margin:0 0 16px}.login label{display:block;font-size:13px;margin:10px 0 4px}.login input{width:100%;padding:8px;border:1px solid var(--line);border-radius:4px;font:inherit}.login button{margin-top:14px;width:100%;padding:9px;border:0;background:var(--accent);color:#fff;border-radius:4px;cursor:pointer}.err{color:var(--bad);font-size:13px;margin-top:8px}.muted{color:var(--muted);font-size:13px}
