:root{--bg: #0f1420;--panel: #171d2b;--panel-2: #1f2738;--text: #e6e9ef;--muted: #8b95a8;--border: #2a3348;--accent: #4f8cff;--danger: #ff5c5c;--warn: #ffb454;--ok: #38c172;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--text)}#app{max-width:1400px;margin:0 auto;padding:24px}h1{font-size:1.5rem;margin:0 0 4px}.subtitle{color:var(--muted);font-size:.85rem;margin-bottom:20px}.summary{display:flex;gap:12px;flex-wrap:wrap;margin-bottom:20px}.card{background:var(--panel);border:1px solid var(--border);border-radius:10px;padding:14px 18px;min-width:140px}.card .value{font-size:1.6rem;font-weight:600}.card .label{color:var(--muted);font-size:.75rem;text-transform:uppercase;letter-spacing:.05em}.card.danger .value{color:var(--danger)}.card.warn .value{color:var(--warn)}.card.ok .value{color:var(--ok)}.controls{display:flex;gap:12px;flex-wrap:wrap;align-items:center;margin-bottom:14px}.controls input,.controls select{background:var(--panel-2);border:1px solid var(--border);color:var(--text);border-radius:8px;padding:8px 10px;font-size:.85rem}.controls input[type=search]{min-width:260px}.table-wrap{background:var(--panel);border:1px solid var(--border);border-radius:10px;overflow-x:auto}table{width:100%;border-collapse:collapse;font-size:.82rem}th,td{text-align:left;padding:9px 12px;border-bottom:1px solid var(--border);white-space:nowrap}th{position:sticky;top:0;background:var(--panel-2);cursor:pointer;-webkit-user-select:none;user-select:none;font-weight:600}th .arrow{color:var(--accent);margin-left:4px}tbody tr:hover{background:var(--panel-2)}.badge{display:inline-block;padding:2px 8px;border-radius:999px;font-size:.72rem;font-weight:600}.badge.active{background:#38c17226;color:var(--ok)}.badge.inactive{background:#8b95a826;color:var(--muted)}.badge.nokeys{background:#8b95a81a;color:var(--muted)}.flag{color:var(--danger);font-weight:600}.flag.warn{color:var(--warn)}.state{padding:40px;text-align:center;color:var(--muted)}.state.error{color:var(--danger)}.muted{color:var(--muted)}
