:root{--bg:#0f172a;--panel:#111827;--text:#e5e7eb;--muted:#9ca3af;--border:#253044;--up:#16a34a;--down:#dc2626;--unknown:#d97706}
*{box-sizing:border-box} body{margin:0;background:var(--bg);color:var(--text);font-family:system-ui,-apple-system,Segoe UI,Roboto,Arial,sans-serif}.wrap{max-width:1180px;margin:0 auto;padding:24px}header{margin-bottom:18px}.cronbox{margin-top:12px;background:var(--panel);border:1px solid var(--border);border-radius:12px;padding:10px 12px;color:#cbd5e1}h1{margin:0 0 6px;font-size:30px}p{margin:0}.muted{color:var(--muted);margin:14px 0}.alert{background:#7f1d1d;border:1px solid #ef4444;padding:12px;border-radius:12px;margin:12px 0}.cards{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin:18px 0}.card{background:var(--panel);border:1px solid var(--border);border-radius:16px;padding:16px}.card b{display:block;font-size:32px}.card span{color:var(--muted)}.card.up b{color:var(--up)}.card.down b{color:var(--down)}.card.unknown b{color:var(--unknown)}table{width:100%;border-collapse:collapse;background:var(--panel);border:1px solid var(--border);border-radius:16px;overflow:hidden}th,td{padding:10px 12px;border-bottom:1px solid var(--border);text-align:left;font-size:14px}th{color:#cbd5e1;background:#172033}.badge{display:inline-block;padding:4px 8px;border-radius:999px;font-weight:700;font-size:12px}.badge.up{background:rgba(22,163,74,.18);color:#86efac}.badge.down{background:rgba(220,38,38,.18);color:#fca5a5}.badge.unknown{background:rgba(217,119,6,.18);color:#fcd34d}.row-down{background:rgba(220,38,38,.06)}.row-unknown{background:rgba(217,119,6,.05)}a{color:#93c5fd}footer{margin:18px 0;color:var(--muted)}@media(max-width:800px){.cards{grid-template-columns:repeat(2,minmax(0,1fr))}.wrap{padding:14px}table{display:block;overflow-x:auto;white-space:nowrap}}


table.sortable th[data-sort]{cursor:pointer;user-select:none;white-space:nowrap}
table.sortable th[data-sort]::after{content:" ↕";font-size:11px;color:var(--muted);font-weight:400}
table.sortable th[aria-sort="ascending"]::after{content:" ↑"}
table.sortable th[aria-sort="descending"]::after{content:" ↓"}
