:root{--bg: #f1f3ea;--panel: #ffffff;--panel-2: #f4f6ec;--border: #e2e5d6;--text: #1f2a1c;--muted: #5f6b58;--accent: #2f7a43;--accent-2: #388f50;--accent-strong: #235c36;--accent-soft: #e7f1e8;--normal: #3c8c4e;--low_battery: #c0871a;--offline: #949a8a;--alert: #cd3a2a;--alert-soft: #fbe9e6;--alert-ink: #b5301f;--watch-soft: #f8efd6;--watch-ink: #8a6011;--normal-soft: #e6f1e8;--normal-ink: #2a6b3a;--shadow-sm: 0 1px 2px rgba(31, 42, 28, .06), 0 1px 3px rgba(31, 42, 28, .05);--shadow-md: 0 2px 10px rgba(31, 42, 28, .08);font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif;color-scheme:light}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{background:var(--bg);color:var(--text);-webkit-font-smoothing:antialiased}.eyebrow,.health-strip .stat-label,th,.chip-unit{text-transform:uppercase;letter-spacing:.06em}a{color:var(--accent-strong);text-decoration:none;font-weight:500}a:hover{text-decoration:underline}button{font:inherit;cursor:pointer;border-radius:9px;border:1px solid var(--border);background:var(--panel);color:var(--text);padding:8px 13px;font-weight:500;transition:border-color .15s,background .15s,box-shadow .15s}button:hover{border-color:var(--accent-2);box-shadow:var(--shadow-sm)}button.primary{background:var(--accent);border-color:var(--accent);color:#fff;box-shadow:var(--shadow-sm)}button.primary:hover{background:var(--accent-2);border-color:var(--accent-2)}button.danger{background:transparent;border-color:var(--alert);color:var(--alert);padding:6px 11px;box-shadow:none}button.danger:hover{background:var(--alert);border-color:var(--alert);color:#fff}button:disabled{opacity:.5;cursor:not-allowed;box-shadow:none}input,select{font:inherit;background:var(--panel);color:var(--text);border:1px solid var(--border);border-radius:9px;padding:9px 11px}input:focus,select:focus{outline:none;border-color:var(--accent-2);box-shadow:0 0 0 3px var(--accent-soft)}.modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:50;background:#1f2a1c59;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);display:flex;align-items:flex-start;justify-content:center;padding:24px 12px;overflow-y:auto}.modal{width:100%;max-width:560px;margin:auto}.fld{display:block;margin:10px 0;font-size:13px;color:var(--muted)}.fld input,.fld select{display:block;width:100%;margin-top:4px;box-sizing:border-box}pre.code{background:var(--panel-2);border:1px solid var(--border);border-radius:9px;padding:10px 12px;overflow-x:auto;font-size:12px;line-height:1.45;white-space:pre;color:var(--text);font-family:ui-monospace,Cascadia Code,Consolas,monospace}.app{display:flex;flex-direction:row;min-height:100%}.sidebar{width:216px;flex-shrink:0;display:flex;flex-direction:column;gap:20px;padding:16px 12px;padding-top:calc(16px + env(safe-area-inset-top));background:#ffffffd9;-webkit-backdrop-filter:saturate(1.4) blur(8px);backdrop-filter:saturate(1.4) blur(8px);border-right:1px solid var(--border);position:sticky;top:0;align-self:flex-start;height:100vh;overflow-y:auto;z-index:20}.brand{display:flex;align-items:center;justify-content:center;padding:4px 8px}.brand:hover{text-decoration:none;opacity:.85}.brand-logo{width:100%;max-width:160px;height:auto;display:block}.sheet-wrap{overflow-x:auto}table.sheet th.sortable{cursor:pointer;-webkit-user-select:none;user-select:none;white-space:nowrap}table.sheet th.sortable:hover{color:var(--text)}table.sheet th .sort-ind{color:var(--accent);margin-left:4px}table.sheet td{vertical-align:middle}table.sheet .actions{display:flex;gap:6px;justify-content:flex-end}.type-badge{display:inline-block;padding:2px 9px;border-radius:999px;font-size:12px;font-weight:600;border:1px solid var(--border);background:var(--panel-2)}.type-badge.max{color:var(--accent-strong);background:var(--accent-soft);border-color:transparent}.type-badge.mini{color:var(--watch-ink);background:var(--watch-soft);border-color:transparent}.nav{display:flex;flex-direction:column;gap:2px}.nav a{display:flex;align-items:center;gap:10px;padding:9px 12px;border-radius:8px;color:var(--muted);font-weight:500;transition:background .15s,color .15s}.nav a:hover{background:var(--panel-2);color:var(--text);text-decoration:none}.nav a.active{background:var(--accent-soft);color:var(--accent-strong)}.content{flex:1;min-width:0;padding:22px 28px;max-width:1800px;width:100%;margin:0 auto}.bottomnav{display:none}@media (max-width: 720px){.app{flex-direction:column}.sidebar{display:none}.bottomnav{display:flex;position:sticky;bottom:0;z-index:20;background:#ffffffeb;-webkit-backdrop-filter:saturate(1.4) blur(8px);backdrop-filter:saturate(1.4) blur(8px);border-top:1px solid var(--border);padding-bottom:env(safe-area-inset-bottom)}.bottomnav a{flex:1;text-align:center;padding:11px 4px;color:var(--muted);font-size:12px;font-weight:500}.bottomnav a.active{color:var(--accent-strong)}.content{padding:14px}}.card{background:var(--panel);border:1px solid var(--border);border-radius:14px;padding:18px 20px;margin-bottom:18px;box-shadow:var(--shadow-sm)}.row{display:flex;gap:12px;flex-wrap:wrap;align-items:center}.grid{display:grid;gap:18px;grid-template-columns:repeat(auto-fill,minmax(280px,1fr))}.chart-grid{display:grid;gap:18px;grid-template-columns:repeat(2,minmax(0,1fr))}@media (max-width: 760px){.chart-grid{grid-template-columns:1fr}}.chart-card{cursor:pointer;transition:border-color .15s,box-shadow .15s,transform .15s}.chart-card:hover{border-color:var(--accent);box-shadow:var(--shadow-md);transform:translateY(-1px)}.expand-hint{color:var(--muted);font-size:13px;font-weight:500}.chart-card:hover .expand-hint{color:var(--accent-strong)}.health-strip{display:flex;flex-wrap:wrap;gap:14px 36px;align-items:baseline}.health-strip .stat{display:flex;flex-direction:column;gap:3px}.health-strip .stat-label{color:var(--muted);font-size:11px;font-weight:600}.health-strip .stat-value{font-size:17px;font-weight:600;font-variant-numeric:tabular-nums}.muted{color:var(--muted)}.spacer{flex:1}.dot{display:inline-block;width:9px;height:9px;border-radius:50%;margin-right:7px;box-shadow:0 0 0 3px #00000008}.dot.normal{background:var(--normal)}.dot.low_battery{background:var(--low_battery)}.dot.offline{background:var(--offline)}.dot.alert{background:var(--alert)}.badge{display:inline-block;padding:3px 10px;border-radius:999px;font-size:12px;font-weight:600;border:1px solid var(--border);background:var(--panel-2);color:var(--muted)}.badge.alert,.badge.active{color:var(--alert-ink);border-color:transparent;background:var(--alert-soft)}.badge.acked{color:var(--watch-ink);border-color:transparent;background:var(--watch-soft)}.badge.resolved{color:var(--muted);border-color:var(--border);background:var(--panel-2)}.chip{padding:5px 12px;border-radius:999px;border:1px solid var(--border);background:var(--panel);cursor:pointer;font-size:13px;-webkit-user-select:none;user-select:none;font-weight:500;transition:background .15s,border-color .15s,color .15s}.chip:hover{border-color:var(--accent-2)}.chip.on{background:var(--accent);border-color:var(--accent);color:#fff}.chip.live-on{background:#2f7a43;border-color:#2f7a43;animation:live-pulse 1.6s ease-in-out infinite}@keyframes live-pulse{0%,to{opacity:1}50%{opacity:.55}}.chip-unit{opacity:.65;font-size:10px;margin-left:3px}table{width:100%;border-collapse:collapse}th,td{text-align:left;padding:9px 8px;border-bottom:1px solid var(--border)}th{color:var(--muted);font-weight:600;font-size:11px}td{font-variant-numeric:tabular-nums}tbody tr:hover{background:var(--panel-2)}.map{position:relative;width:100%;height:68vh;min-height:520px;border-radius:14px;overflow:hidden;box-shadow:var(--shadow-sm)}@media (max-width: 720px){.map{height:60vh;min-height:360px}}.map.map-compact{height:42vh;min-height:300px}@media (max-width: 720px){.map.map-compact{height:38vh;min-height:260px}}.map-legend{position:absolute;left:12px;bottom:12px;z-index:5;background:#fffffff0;border:1px solid var(--border);border-radius:10px;padding:9px 11px;font-size:12px;color:var(--text);box-shadow:var(--shadow-sm);display:flex;flex-direction:column;gap:6px;max-width:70%}.dash{display:grid;grid-template-columns:270px minmax(0,1fr) 290px;gap:12px;align-items:start}@media (max-width: 1200px){.dash{grid-template-columns:220px minmax(0,1fr)}}@media (max-width: 900px){.dash{grid-template-columns:1fr}}@media (min-width: 901px){.dash{height:calc(100vh - 64px);min-height:560px;align-items:stretch}.dash .dash-panel{height:100%;overflow:hidden}.dash .dash-panel-body{flex:1;max-height:none}.dash-map .map{flex:1;height:auto;min-height:0}}.dash-map{display:flex;flex-direction:column}.dash-panel{background:var(--surface, #fff);border:1px solid var(--border);border-radius:14px;box-shadow:var(--shadow-sm);display:flex;flex-direction:column;min-width:0}.dash-panel-head{display:flex;align-items:center;gap:8px;flex-wrap:wrap;padding:12px 14px 10px;border-bottom:1px solid var(--border)}.dash-panel-head h3{margin:0;font-size:15px}.dash-panel-body{overflow-y:auto;max-height:62vh;padding:4px 0}@media (max-width: 900px){.dash-panel-body{max-height:40vh}}.dash-search{margin:10px 14px 0}.dash-search input{width:100%;box-sizing:border-box}.dash-item{display:flex;align-items:center;gap:8px;padding:9px 14px;border-bottom:1px solid var(--border);text-decoration:none;color:inherit}.dash-item:last-child{border-bottom:none}.dash-item:hover{background:#2f7a430f}.dash-item .di-main{min-width:0;flex:1}.dash-item .di-name{font-weight:600;font-size:14px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dash-item .di-sub{font-size:11.5px;color:var(--muted, #5f6b58)}.dash-empty{padding:14px;font-size:13px;color:var(--muted, #5f6b58)}.map-wind{position:absolute;right:12px;top:12px;z-index:5;background:#fffffff0;border:1px solid var(--border);border-radius:10px;padding:8px 11px;color:var(--text);box-shadow:var(--shadow-sm);display:flex;align-items:center;gap:10px}.map-wind .mw-speed{font-size:16px;font-weight:700;line-height:1.15}.map-wind .mw-sub{font-size:11px;color:var(--muted, #5f6b58)}.legend-row{display:flex;align-items:center;gap:8px}.legend-row .lg-sq,.legend-row .lg-ci{width:13px;height:13px;flex-shrink:0;border:1.5px solid #0f1419}.legend-row .lg-ci{border-radius:50%}.legend-row .lg-x{width:13px;flex-shrink:0;text-align:center;font-weight:700;color:#0f1419}.toast{position:fixed;left:50%;transform:translate(-50%);bottom:80px;background:var(--text);border:1px solid var(--text);color:#fff;padding:11px 18px;border-radius:11px;z-index:50;box-shadow:var(--shadow-md)}.error{color:var(--alert)}.center{display:grid;place-items:center;min-height:100%}.loginbox{width:min(360px,92vw)}.field{display:flex;flex-direction:column;gap:6px;margin-bottom:12px}.installbar{display:flex;gap:8px;align-items:center;background:var(--accent-soft);border:1px solid var(--accent);border-radius:11px;padding:11px 15px;margin-bottom:18px}
