:root{
  --bg:#f6f7f9; --panel:#fff; --ink:#11161d; --muted:#5b6673; --line:#e3e7ec;
  --accent:#2f6f4f; --warn:#9a6218; --bad:#a3312b; --good:#2f6f4f;
  --c1:#e8f0ea; --c2:#bcd9c6; --c3:#88bda0; --c4:#4f9b7a; --c5:#2f6f4f; --c6:#1d4733;
  --radius:12px; --shadow:0 1px 2px rgba(16,24,40,.06),0 1px 3px rgba(16,24,40,.08);
  --mono:ui-monospace,SFMono-Regular,Menlo,monospace;
}
@media (prefers-color-scheme:dark){
  :root:not([data-theme=light]){
    --bg:#0e1116; --panel:#161b22; --ink:#e6edf3; --muted:#8b949e; --line:#262c36;
    --accent:#6fbf94; --warn:#d2a24c; --bad:#e5736c; --good:#6fbf94;
    --c1:#1b2a22; --c2:#244634; --c3:#2f6f4f; --c4:#49a077; --c5:#6fbf94; --c6:#a8dcc0;
    --shadow:0 1px 2px rgba(0,0,0,.4);
  }
}
*{box-sizing:border-box}
body{margin:0;background:var(--bg);color:var(--ink);
  font:15px/1.55 -apple-system,BlinkMacSystemFont,"Segoe UI",Inter,Roboto,sans-serif;
  -webkit-font-smoothing:antialiased}
.wrap{max-width:1180px;margin:0 auto;padding:0 20px}
h1{font-size:22px;margin:0;letter-spacing:-.02em}
h2{font-size:15px;margin:0;letter-spacing:-.01em}
.sub{margin:3px 0 0;color:var(--muted);font-size:13px}
.hint{margin:0 0 14px;color:var(--muted);font-size:12.5px}

.top{background:var(--panel);border-bottom:1px solid var(--line);padding:18px 0;margin-bottom:22px}
.top__inner{display:flex;justify-content:space-between;align-items:center;gap:16px;flex-wrap:wrap}
.badge{font-size:12px;font-weight:600;padding:5px 11px;border-radius:999px;border:1px solid transparent;white-space:nowrap}
.badge--ok{background:color-mix(in srgb,var(--good) 14%,transparent);color:var(--good);border-color:color-mix(in srgb,var(--good) 30%,transparent)}
.badge--warn{background:color-mix(in srgb,var(--warn) 14%,transparent);color:var(--warn);border-color:color-mix(in srgb,var(--warn) 30%,transparent)}
.badge--bad{background:color-mix(in srgb,var(--bad) 14%,transparent);color:var(--bad);border-color:color-mix(in srgb,var(--bad) 32%,transparent)}
.badge--wait{background:var(--bg);color:var(--muted);border-color:var(--line)}

.panel{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);
  padding:18px;margin-bottom:22px;box-shadow:var(--shadow)}
.panel--quiet{box-shadow:none;background:transparent}
.panel__head{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-bottom:6px;flex-wrap:wrap}
.grid2{display:grid;grid-template-columns:1fr 1fr;gap:22px}
@media(max-width:860px){.grid2{grid-template-columns:1fr}}

.kpis{display:grid;grid-template-columns:repeat(5,1fr);gap:12px;margin-bottom:22px}
@media(max-width:860px){.kpis{grid-template-columns:repeat(2,1fr)}}
.kpi{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:13px 15px;box-shadow:var(--shadow)}
.kpi__k{font-size:11px;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);font-weight:600}
.kpi__v{font-size:21px;font-weight:650;margin-top:5px;letter-spacing:-.02em;font-variant-numeric:tabular-nums}
.kpi__s{font-size:11.5px;color:var(--muted);margin-top:2px}
.kpi--hero .kpi__v{color:var(--accent)}

.controls{display:flex;gap:14px;flex-wrap:wrap}
.controls label,#q{font-size:12.5px;color:var(--muted)}
select,#q{font:inherit;font-size:12.5px;padding:5px 8px;border:1px solid var(--line);
  border-radius:7px;background:var(--panel);color:var(--ink);margin-left:5px}
#q{min-width:230px;margin:0}

#map{height:520px;border-radius:10px;border:1px solid var(--line);z-index:0}
@media(max-width:700px){#map{height:400px}}
.leaflet-container{background:var(--bg);font:inherit}
.legend{display:flex;align-items:center;gap:9px;margin-top:12px;flex-wrap:wrap;font-size:12px;color:var(--muted)}
.legend i{width:30px;height:11px;border-radius:2px;display:inline-block}

.pop{font:inherit;min-width:215px}
.pop h3{margin:0 0 3px;font-size:14px}
.pop .pl{color:var(--muted);font-size:11.5px;margin-bottom:9px}
.pop table{width:100%;border-collapse:collapse;font-size:12.5px}
.pop td{padding:2px 0}
.pop td:last-child{text-align:right;font-variant-numeric:tabular-nums;font-weight:600}
.pop .bar{margin-top:9px}

.tablewrap{overflow-x:auto;max-height:460px;overflow-y:auto;border:1px solid var(--line);border-radius:9px}
table{width:100%;border-collapse:collapse;font-size:13px}
th{position:sticky;top:0;background:var(--panel);text-align:left;font-size:11px;
  text-transform:uppercase;letter-spacing:.05em;color:var(--muted);padding:9px 11px;
  border-bottom:1px solid var(--line);cursor:pointer;user-select:none;white-space:nowrap}
th:hover{color:var(--ink)}
th.sorted{color:var(--accent)}
td{padding:8px 11px;border-bottom:1px solid var(--line)}
tbody tr:last-child td{border-bottom:0}
tbody tr:hover{background:color-mix(in srgb,var(--accent) 6%,transparent)}
.num{text-align:right;font-variant-numeric:tabular-nums}
.mono{font-family:var(--mono);font-size:12px}

.runs{display:flex;flex-wrap:wrap;gap:5px}
.run{font-size:11px;padding:4px 8px;border-radius:6px;border:1px solid var(--line);
  font-variant-numeric:tabular-nums;background:var(--panel)}
.run--OK{color:var(--good);border-color:color-mix(in srgb,var(--good) 30%,transparent)}
.run--PARTIAL{color:var(--warn);border-color:color-mix(in srgb,var(--warn) 34%,transparent)}
.run--FAILED{color:var(--bad);border-color:color-mix(in srgb,var(--bad) 34%,transparent)}

svg{display:block;max-width:100%;overflow:visible}
.axis{font-size:10.5px;fill:var(--muted)}
.gridline{stroke:var(--line)}
.foot{color:var(--muted);font-size:12px;padding:6px 20px 40px;max-width:1180px}
.foot p{margin:0;max-width:720px}
