@import"https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap";:root{--bg: #f4f6f8;--surface: #ffffff;--surface-2: #f8fafc;--border: #e3e8ef;--border-strong: #cdd5df;--text: #1f2937;--text-2: #64748b;--text-3: #94a3b8;--primary: #1e5fb4;--primary-hover: #18509b;--primary-soft: #e8f0fb;--sidebar: #0f1b2d;--sidebar-2: #16273f;--sidebar-text: #b8c4d6;--sidebar-active: #1e5fb4;--up: #16a34a;--down: #dc2626;--partial: #d97706;--unknown: #94a3b8;--up-soft: #e7f6ec;--down-soft: #fdecec;--partial-soft: #fdf3e3;--radius: 8px;--shadow: 0 1px 2px rgba(16,24,40,.05), 0 1px 3px rgba(16,24,40,.06);--shadow-lg: 0 8px 24px rgba(16,24,40,.12)}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{font-family:Inter,system-ui,-apple-system,sans-serif;background:var(--bg);color:var(--text);font-size:14px;-webkit-font-smoothing:antialiased}a{color:var(--primary);text-decoration:none}button{font-family:inherit}.app{display:flex;min-height:100vh}.sidebar{width:240px;background:var(--sidebar);color:var(--sidebar-text);display:flex;flex-direction:column;position:fixed;top:0;bottom:0;left:0}.sidebar .brand{padding:20px 20px 16px;font-size:17px;font-weight:700;color:#fff;display:flex;align-items:center;gap:10px;letter-spacing:.2px}.sidebar .brand .dot{width:10px;height:10px;border-radius:50%;background:var(--primary);box-shadow:0 0 0 3px #1e5fb440}.sidebar nav{padding:8px;flex:1}.sidebar nav a{display:flex;align-items:center;gap:11px;padding:10px 12px;border-radius:6px;color:var(--sidebar-text);font-weight:500;font-size:13.5px;margin-bottom:2px}.sidebar nav a:hover{background:var(--sidebar-2);color:#fff}.sidebar nav a.active{background:var(--sidebar-active);color:#fff}.sidebar .foot{padding:14px 16px;border-top:1px solid rgba(255,255,255,.08);font-size:12px}.sidebar .foot .user{color:#fff;font-weight:600}.sidebar .foot button{margin-top:8px;background:transparent;border:1px solid rgba(255,255,255,.18);color:var(--sidebar-text);padding:6px 10px;border-radius:6px;cursor:pointer;font-size:12px;width:100%}.sidebar .foot button:hover{background:var(--sidebar-2);color:#fff}.main{margin-left:240px;flex:1;min-width:0}.topbar{height:60px;background:var(--surface);border-bottom:1px solid var(--border);display:flex;align-items:center;justify-content:space-between;padding:0 24px;position:sticky;top:0;z-index:10}.topbar h1{font-size:17px;font-weight:600;margin:0}.topbar .sub{color:var(--text-2);font-size:12.5px;margin-left:10px;font-weight:400}.content{padding:24px;max-width:1400px}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow)}.card .card-head{padding:14px 18px;border-bottom:1px solid var(--border);display:flex;align-items:center;justify-content:space-between}.card .card-head h3{margin:0;font-size:14px;font-weight:600}.card .card-body{padding:18px}.grid{display:grid;gap:16px}.grid-stats{grid-template-columns:repeat(auto-fit,minmax(180px,1fr))}.grid-cats{grid-template-columns:repeat(auto-fill,minmax(260px,1fr))}.stat{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:16px 18px;box-shadow:var(--shadow)}.stat .label{color:var(--text-2);font-size:12.5px;font-weight:500;text-transform:uppercase;letter-spacing:.4px}.stat .value{font-size:30px;font-weight:700;margin-top:6px;line-height:1}.stat .value small{font-size:14px;color:var(--text-3);font-weight:500}.dot{width:9px;height:9px;border-radius:50%;display:inline-block;flex:none}.dot.up{background:var(--up);box-shadow:0 0 0 3px var(--up-soft)}.dot.down{background:var(--down);box-shadow:0 0 0 3px var(--down-soft)}.dot.partial{background:var(--partial);box-shadow:0 0 0 3px var(--partial-soft)}.dot.unknown{background:var(--unknown);box-shadow:0 0 0 3px #eef2f6}.badge{display:inline-flex;align-items:center;gap:5px;padding:3px 9px;border-radius:100px;font-size:11.5px;font-weight:600}.badge.up{background:var(--up-soft);color:var(--up)}.badge.down{background:var(--down-soft);color:var(--down)}.badge.partial{background:var(--partial-soft);color:var(--partial)}.badge.unknown{background:#eef2f6;color:var(--text-2)}.badge.valid{background:var(--up-soft);color:var(--up)}.badge.invalid{background:var(--down-soft);color:var(--down)}.badge.cat{background:var(--surface-2);color:var(--text-2);border:1px solid var(--border)}.table-wrap{overflow-x:auto;border:1px solid var(--border);border-radius:var(--radius);background:var(--surface)}table.tbl{width:100%;border-collapse:collapse;font-size:13.5px}table.tbl th{text-align:left;padding:11px 14px;background:var(--surface-2);color:var(--text-2);font-weight:600;font-size:12px;text-transform:uppercase;letter-spacing:.3px;border-bottom:1px solid var(--border);white-space:nowrap}table.tbl td{padding:11px 14px;border-bottom:1px solid var(--border);vertical-align:middle}table.tbl tbody tr:last-child td{border-bottom:none}table.tbl tbody tr:hover{background:var(--surface-2)}.mono{font-family:ui-monospace,SF Mono,Menlo,Consolas,monospace;font-size:12.5px}.btn{display:inline-flex;align-items:center;gap:6px;padding:8px 14px;border-radius:6px;border:1px solid var(--border-strong);background:var(--surface);color:var(--text);font-size:13px;font-weight:500;cursor:pointer;transition:all .12s;white-space:nowrap}.btn:hover{background:var(--surface-2);border-color:var(--text-3)}.btn.primary{background:var(--primary);border-color:var(--primary);color:#fff}.btn.primary:hover{background:var(--primary-hover)}.btn.sm{padding:5px 10px;font-size:12px}.btn.icon{padding:6px}.btn.ghost{border-color:transparent;background:transparent}.btn.ghost:hover{background:var(--surface-2)}.btn.danger{color:var(--down);border-color:var(--down-soft)}.btn.danger:hover{background:var(--down-soft)}.btn:disabled{opacity:.5;cursor:not-allowed}.field{margin-bottom:14px}.field label{display:block;font-size:12.5px;font-weight:600;color:var(--text-2);margin-bottom:6px}.input,select.input,textarea.input{width:100%;padding:9px 11px;border:1px solid var(--border-strong);border-radius:6px;font-size:13.5px;background:var(--surface);color:var(--text);font-family:inherit}.input:focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-soft)}.overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#0f1b2d73;display:flex;align-items:flex-start;justify-content:center;padding:60px 16px;z-index:100;overflow-y:auto}.modal{background:var(--surface);border-radius:10px;box-shadow:var(--shadow-lg);width:100%;max-width:640px}.modal .m-head{padding:16px 20px;border-bottom:1px solid var(--border);display:flex;align-items:center;justify-content:space-between}.modal .m-head h3{margin:0;font-size:15px;font-weight:600}.modal .m-body{padding:20px}.modal .m-foot{padding:14px 20px;border-top:1px solid var(--border);display:flex;justify-content:flex-end;gap:8px}.login-wrap{min-height:100vh;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,#0f1b2d,#16273f)}.login-card{background:var(--surface);border-radius:12px;box-shadow:var(--shadow-lg);width:100%;max-width:380px;padding:32px}.login-card .brand{font-size:22px;font-weight:700;display:flex;align-items:center;gap:10px;margin-bottom:4px}.login-card .brand .dot{width:12px;height:12px;border-radius:50%;background:var(--primary)}.login-card .tagline{color:var(--text-2);font-size:13px;margin-bottom:24px}.row{display:flex;align-items:center;gap:8px}.between{justify-content:space-between}.wrap-gap{gap:10px;flex-wrap:wrap}.muted{color:var(--text-2)}.small{font-size:12px}.mb16{margin-bottom:16px}.mt8{margin-top:8px}.toast{position:fixed;bottom:20px;right:20px;background:var(--sidebar);color:#fff;padding:12px 18px;border-radius:8px;box-shadow:var(--shadow-lg);z-index:200;font-size:13px}.spin{animation:spin 1s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.cat-row{display:flex;align-items:center;justify-content:space-between;padding:8px 0;border-bottom:1px solid var(--border)}.cat-row:last-child{border-bottom:none}.bar{height:6px;border-radius:100px;background:var(--border);overflow:hidden;display:flex}.bar .seg-up{background:var(--up)}.bar .seg-down{background:var(--down)}.bar .seg-partial{background:var(--partial)}.bar .seg-unknown{background:var(--unknown)}
