:root{color-scheme:light;--ink:#18212f;--muted:#667085;--line:#d8dee8;--surface:#fff;--bg:#f4f6f9;--accent:#1769aa;--danger:#a52a2a}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--ink);font:14px/1.45 system-ui,-apple-system,"Segoe UI",sans-serif}.topbar{height:58px;background:#122033;color:#fff;display:flex;align-items:center;justify-content:space-between;padding:0 24px}.brand{color:#fff;text-decoration:none;font-weight:700}.account,.primary-nav,.page-heading,.filters{display:flex;align-items:center;gap:14px}.account form{margin:0}.primary-nav{background:var(--surface);border-bottom:1px solid var(--line);padding:10px 24px}.primary-nav a{color:var(--ink);font-weight:600;text-decoration:none}main{max-width:1440px;margin:0 auto;padding:24px}.page-heading{justify-content:space-between;margin-bottom:18px}h1,h2{margin-top:0}.panel,.auth-card{background:var(--surface);border:1px solid var(--line);border-radius:8px;padding:20px;margin-bottom:18px}.auth-card,.narrow{max-width:520px;margin:48px auto}.grid{display:grid;grid-template-columns:1fr 1fr;gap:18px}form{display:grid;gap:12px}label{display:grid;gap:5px;font-weight:600}input,select,button,.button{font:inherit;border:1px solid #aab4c2;border-radius:5px;padding:8px 10px}button,.button{background:var(--accent);border-color:var(--accent);color:#fff;cursor:pointer;text-decoration:none;width:max-content}.link-button{background:transparent;border:0;padding:0}.badge{display:inline-block;border-radius:999px;background:#e8eef6;padding:3px 8px;font-size:12px;font-weight:700}.muted{color:var(--muted)}.alert{border-left:4px solid #d59b19;background:#fff8df;padding:10px}.alert.error{border-color:var(--danger);background:#fff0f0}.table-wrap{overflow:auto;background:#fff;border:1px solid var(--line);border-radius:8px}table{width:100%;border-collapse:collapse}th,td{text-align:left;padding:10px 12px;border-bottom:1px solid var(--line);vertical-align:top}th{background:#eef2f7}code,.mono,pre{font-family:ui-monospace,SFMono-Regular,Consolas,monospace}.timeline{padding-left:20px}@media(max-width:800px){.grid{grid-template-columns:1fr}.topbar{padding:0 12px}main{padding:14px}.page-heading{align-items:flex-start;flex-direction:column}}
.badge.conn-online,.badge.health-ok,.badge.update-completed{background:#dff3e4;color:#17603a}.badge.conn-offline,.badge.health-degraded,.badge.update-failed,.badge.update-rolled_back{background:#fde8e8;color:#8f1f1f}.badge.conn-never,.badge.health-stale{background:#eceff3;color:#556070}h3{margin:14px 0 8px;font-size:14px}
.graph-table{table-layout:auto}.graph-table td{padding:0 8px;line-height:26px;border-bottom:0;vertical-align:middle}.graph-table td:not(.graph-lanes){white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:360px}.graph-table td:nth-child(4){white-space:normal;max-width:520px}
.graph-table td.graph-lanes{padding:0;width:1%}.graph-table td.graph-lanes svg{display:block}
.graph-table svg line{stroke-width:2;fill:none}.graph-table svg circle{stroke:#fff;stroke-width:1.5}
.lane-0{stroke:#1769aa;fill:#1769aa}.lane-1{stroke:#a52a2a;fill:#a52a2a}.lane-2{stroke:#2e8b57;fill:#2e8b57}.lane-3{stroke:#b8860b;fill:#b8860b}.lane-4{stroke:#7b3fa0;fill:#7b3fa0}.lane-5{stroke:#c2185b;fill:#c2185b}.lane-6{stroke:#00796b;fill:#00796b}.lane-7{stroke:#5d4037;fill:#5d4037}
.server-status{display:inline-flex;align-items:center;gap:14px;margin-right:6px;color:#9aa7ba;white-space:nowrap}.server-status[hidden],.status-metric[hidden]{display:none}.server-status.is-stale{opacity:.62}
.status-dot{width:9px;height:9px;border-radius:50%;background:#667085;flex:0 0 auto}.server-status[data-severity=normal] .status-dot{background:#7ef0a8}.server-status[data-severity=warning] .status-dot{background:#facc15}.server-status[data-severity=critical] .status-dot{background:#fca5a5}
.status-metric{display:inline-flex;align-items:baseline;gap:5px;font-variant-numeric:tabular-nums}.status-label{font-size:12px;font-weight:600;color:#9aa7ba}.status-value{font-size:13px;font-weight:600;color:#dfe6f1}
.status-metric[data-severity=warning] .status-value{color:#facc15}.status-metric[data-severity=critical] .status-value{color:#fca5a5}
@media(max-width:800px){.server-status{gap:10px}.status-metric[data-metric=memory],.status-metric[data-metric=storage],.status-metric[data-metric=temperature]{display:none}}
.topbar .badge{background:#e8eef6;color:#122033}
.tabs{display:flex;gap:4px;border-bottom:1px solid var(--line);margin:0 0 16px}.tabs a{padding:8px 16px;margin-bottom:-1px;border:1px solid transparent;border-radius:6px 6px 0 0;color:var(--muted);font-weight:600;text-decoration:none}.tabs a:hover{color:var(--ink)}.tabs a[aria-current=page]{background:var(--surface);border-color:var(--line);border-bottom-color:var(--surface);color:var(--ink)}
.device-map{height:min(68vh,640px);min-height:360px;border:1px solid var(--line);border-radius:8px;background:#dfe6ee;z-index:0}
.map-legend{display:flex;flex-wrap:wrap;gap:6px 20px;list-style:none;padding:0;margin:12px 0 4px;color:var(--muted);font-size:13px}.map-legend li{display:inline-flex;align-items:center;gap:7px}
.legend-dot{width:14px;height:14px;border-radius:50%;background:#8b95a5;border:2px solid #fff;box-shadow:0 0 0 1px #aab4c2}.legend-ok{background:#2fb86b}.legend-attention{background:#f5c518}.legend-offline{background:#e5484d}.legend-unknown{background:#8b95a5}.legend-registered{background:#fff;box-shadow:0 0 0 2px #2563eb}
.dev-marker{width:34px;height:34px;border-radius:50%;background:#8b95a5;border:3px solid #fff;box-shadow:0 1px 5px rgba(0,0,0,.4);display:flex;align-items:center;justify-content:center;cursor:pointer}.dev-marker img{width:20px;height:20px;display:block;pointer-events:none}
.dev-marker[data-severity=ok]{background:#2fb86b}.dev-marker[data-severity=attention]{background:#f5c518}.dev-marker[data-severity=offline]{background:#e5484d}.dev-marker[data-severity=unknown]{background:#8b95a5}.dev-marker[data-registered=true]{box-shadow:0 0 0 3px #2563eb,0 1px 6px rgba(0,0,0,.45)}
.dev-tooltip strong{display:block}.dev-tooltip span{display:block;color:#556070;font-size:12px}
.report-json{max-height:360px;overflow:auto;background:#f4f6f9;border:1px solid var(--line);border-radius:6px;padding:10px;font-size:12px;white-space:pre-wrap;word-break:break-word}
details summary{cursor:pointer;color:var(--accent)}
