:root{--blue:#0aa5cf;--blue-d:#0883a6;--bg:#eef4f7;--ink:#05202c;--line:#d8e2e8;--muted:#6a7d88;--ok:#1a9d55;--warn:#c47f0a;--bad:#c0392b;--card:#fff;--field:#fff;--thead:#f4f9fb;--hover:#f7fbfc;--chip:#fff;--hi:#eaf7fb;--hi-ok:#e4f6ec;--hi-warn:#fdf7ec;--track:#eef2f4}:root[data-theme=dark]{--blue:#2bb6db;--blue-d:#7fd4ee;--bg:#0e1620;--ink:#e6edf3;--line:#273441;--muted:#93a3b0;--ok:#35c46a;--warn:#e0a52a;--bad:#ef5f4d;--card:#151f2a;--field:#0f1a24;--thead:#12202b;--hover:#182531;--chip:#131e29;--hi:#15303d;--hi-ok:#153327;--hi-warn:#33290f;--track:#22303b}*{box-sizing:border-box}body,html{margin:0;padding:0}body{font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif;background:var(--bg);color:var(--ink);font-size:14px}a{color:var(--blue);text-decoration:none}a:hover{text-decoration:underline}h1,h2,h3{margin:0 0 .4em}.container{max-width:1160px;margin:0 auto;padding:22px 20px 60px}.row,.spread{display:flex;gap:12px;flex-wrap:wrap;align-items:center}.spread{justify-content:space-between}.grid{display:grid;grid-gap:14px;gap:14px}.nav{background:linear-gradient(90deg,var(--blue),var(--blue-d));color:#fff;position:-webkit-sticky;position:sticky;top:0;z-index:20;box-shadow:0 1px 8px rgba(0,0,0,.12)}.nav-in{max-width:1160px;margin:0 auto;padding:10px 20px;gap:18px;flex-wrap:wrap}.brand,.nav-in{display:flex;align-items:center}.brand{font-weight:800;font-size:17px;letter-spacing:.2px;gap:8px}.nav-links{display:flex;gap:6px;flex-wrap:wrap}.nav-links a{color:#eafaff;padding:6px 12px;border-radius:8px;font-weight:600;font-size:13.5px}.nav-links a:hover{background:hsla(0,0%,100%,.15);text-decoration:none}.nav-links a.active{background:#fff;color:var(--blue-d)}.nav-user{display:flex;align-items:center;gap:10px;font-size:13px;color:#eafaff}.card{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:18px}.card h3{margin-top:0}.stat{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:16px 18px}.stat .n{font-size:28px;font-weight:800;line-height:1.1}.stat .l{color:var(--muted);font-size:12.5px;margin-top:2px;text-transform:uppercase;letter-spacing:.4px}.stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));grid-gap:14px;gap:14px}.btn{background:var(--blue);color:#fff;border:none;border-radius:8px;padding:9px 16px;font-weight:600;cursor:pointer;font-size:13.5px}.btn:hover{background:var(--blue-d)}.btn:disabled{opacity:.55;cursor:default}.btn.ghost{background:var(--chip);color:var(--ink);border:1px solid var(--line)}.btn.ghost:hover{background:#f3f8fa}.btn.sm{padding:5px 10px;font-size:12.5px}.btn.danger{background:var(--bad)}.input,.select{width:100%;padding:8px 11px;border:1px solid var(--line);border-radius:8px;background:var(--field);font-size:13.5px;color:var(--ink)}.input:focus,.select:focus{outline:2px solid var(--blue);outline-offset:-1px}label.fld{display:block;font-size:12px;color:var(--muted);font-weight:600;margin-bottom:3px}.field{margin-bottom:10px}.table-wrap{overflow-x:auto;border:1px solid var(--line);border-radius:10px}table{width:100%;border-collapse:collapse;font-size:13px}td,th{text-align:left;padding:8px 10px;border-bottom:1px solid var(--line);white-space:nowrap}thead th{background:var(--thead);color:var(--muted);font-size:12px;text-transform:uppercase;letter-spacing:.3px;position:-webkit-sticky;position:sticky;top:0}tbody tr:hover{background:var(--hover)}td.wrap,th.wrap{white-space:normal}.badge{display:inline-block;padding:2px 9px;border-radius:999px;font-size:11.5px;font-weight:700}.badge.region{background:#e6f4fa;color:var(--blue-d)}.badge.ok{background:#e4f6ec;color:var(--ok)}.badge.warn{background:#fdf1dd;color:var(--warn)}.badge.bad{background:#fbe6e3;color:var(--bad)}.badge.grey{background:#eef2f4;color:var(--muted)}.chip{border:1px solid var(--line);background:var(--chip);border-radius:999px;padding:5px 13px;font-size:13px;cursor:pointer;font-weight:600;color:var(--ink)}.chip.on{background:var(--blue);color:#fff;border-color:var(--blue)}.muted{color:var(--muted)}.err{color:var(--bad)}.err,.ok-msg{font-size:13px}.ok-msg{color:var(--ok)}.spin{display:inline-block;width:16px;height:16px;border:2px solid var(--line);border-top-color:var(--blue);border-radius:50%;animation:sp .7s linear infinite;vertical-align:middle}@keyframes sp{to{transform:rotate(1turn)}}@media print{.nav,.no-print{display:none!important}.container{padding:0;max-width:100%}.card,.table-wrap{border:none}body{background:#fff}}