:root{--forest: #1f3a2e;--forest-2: #2b4d3e;--copper: #c8742b;--copper-soft: #f3e3d3;--sand: #f5f3ee;--paper: #ffffff;--ink: #1d2420;--muted: #66706a;--line: #dfe2dc;--danger: #b3261e;--ok: #2e7d4f;--radius: 10px;--shadow: 0 1px 2px rgba(20, 30, 25, .06), 0 4px 16px rgba(20, 30, 25, .06);--font: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;--mono: ui-monospace, "SF Mono", Consolas, monospace;color-scheme:light}*{box-sizing:border-box}html,body{margin:0;height:100%}body{font:15px/1.45 var(--font);color:var(--ink);background:var(--sand);-webkit-font-smoothing:antialiased}#app{height:100%}.boot{height:100%;display:grid;place-items:center;color:var(--muted);letter-spacing:.12em;font-size:13px}button{font:inherit;cursor:pointer}input,select{font:inherit}.muted{color:var(--muted)}.small{font-size:13px}.mono{font-family:var(--mono);word-break:break-all}.logo{flex:none;display:inline-flex;width:30px;height:30px;color:#fff}.logo svg{width:100%;height:100%}.logo-lg{width:46px;height:46px}.btn{border:1px solid var(--line);background:var(--paper);color:var(--ink);border-radius:8px;padding:8px 14px;min-height:40px}.btn:hover{border-color:#b9c0b8}.btn:disabled{opacity:.55;cursor:default}.btn-primary{background:var(--forest);border-color:var(--forest);color:#fff;font-weight:600}.btn-primary:hover{background:var(--forest-2)}.btn-accent{background:var(--copper);border-color:var(--copper);color:#fff;font-weight:600}.btn-ghost{background:transparent;border-color:transparent}.btn-sm{min-height:32px;padding:4px 10px;font-size:13px}.link{background:none;border:0;color:var(--forest-2);text-decoration:underline;padding:0;text-align:left}:focus-visible{outline:3px solid rgba(200,116,43,.5);outline-offset:2px}.auth{min-height:100%;display:grid;grid-template-columns:minmax(280px,42%) 1fr}.auth-brand{background:var(--forest);color:#e8efe9;padding:48px 44px;display:flex;flex-direction:column;gap:18px;background-image:repeating-radial-gradient(circle at 85% 110%,transparent 0 22px,rgba(255,255,255,.045) 22px 23px)}.brand-row{display:flex;gap:14px;align-items:center}.brand-row strong{display:block;font-size:20px;letter-spacing:.06em;color:#fff}.brand-row span{font-size:12px;letter-spacing:.3em;color:var(--copper)}.brand-tag{font-size:22px;line-height:1.3;max-width:22ch;margin-top:auto;color:#fff}.brand-foot{font-size:12px;opacity:.7;margin:0}.auth-main{position:relative;display:grid;place-items:center;padding:32px 20px}.auth-main .lang{position:absolute;top:16px;right:16px}.auth-form{width:min(380px,100%);display:flex;flex-direction:column;gap:14px}.auth-form h1{margin:0 0 4px;font-size:26px}.auth-form label,form label{display:flex;flex-direction:column;gap:6px;font-size:13px;color:var(--muted)}.auth-form input,form input,form select{border:1px solid var(--line);border-radius:8px;padding:10px 12px;background:#fff;color:var(--ink);font-size:15px;min-height:44px}.auth-form input.code{font-family:var(--mono);font-size:24px;letter-spacing:.4em;text-align:center}.form-error{color:var(--danger);min-height:1.2em;margin:0;font-size:14px}.notice{background:var(--copper-soft);border-left:4px solid var(--copper);padding:14px 16px;border-radius:6px}.qr{align-self:center;background:#fff;padding:8px;border-radius:8px;border:1px solid var(--line)}@media (max-width: 760px){.auth{grid-template-columns:1fr}.auth-brand{padding:24px 20px}.brand-tag{margin-top:0;font-size:17px}.brand-foot{display:none}}.shell{height:100%;display:grid;grid-template-rows:56px 1fr;grid-template-columns:220px 1fr 360px;grid-template-areas:"top top top" "nav map panel"}.shell>*{min-width:0}.topbar{grid-area:top;background:var(--forest);color:#fff;display:flex;align-items:center;gap:12px;padding:0 12px 0 16px}.topbar .title{font-weight:700;letter-spacing:.06em;font-size:15px}.topbar .title small{color:var(--copper);font-weight:600;letter-spacing:.25em;margin-left:6px;font-size:11px}.topbar .spacer{flex:1}.topbar select{background:var(--forest-2);color:#fff;border:1px solid rgba(255,255,255,.2);border-radius:8px;padding:6px 10px;min-height:36px;max-width:40vw}.topbar .btn-ghost{color:#dfe8e2;white-space:nowrap}.topbar .who{font-size:13px;opacity:.85}.nav{grid-area:nav;background:var(--paper);border-right:1px solid var(--line);padding:12px 8px;display:flex;flex-direction:column;gap:2px;overflow:auto}.nav button{display:flex;align-items:center;gap:10px;width:100%;text-align:left;border:0;background:none;padding:10px 12px;border-radius:8px;color:var(--ink)}.nav button[aria-current=page]{background:var(--copper-soft);color:#7a3f10;font-weight:600}.nav button:disabled{color:#9aa29c;cursor:default}.nav button{display:grid;grid-template-columns:8px 1fr;column-gap:10px;row-gap:3px}.nav .soon{grid-column:2;justify-self:start;font-size:10px;text-transform:uppercase;letter-spacing:.06em;background:#eef0ec;color:var(--muted);padding:2px 6px;border-radius:4px}.nav .dot{width:8px;height:8px;border-radius:50%;background:currentColor;opacity:.6;flex:none}.mapwrap{grid-area:map;position:relative;min-height:0}#map{position:absolute;top:0;right:0;bottom:0;left:0}.panel{grid-area:panel;background:var(--paper);border-left:1px solid var(--line);overflow:auto;padding:16px;display:flex;flex-direction:column;gap:16px}.panel h2{font-size:13px;text-transform:uppercase;letter-spacing:.08em;color:var(--muted);margin:0 0 8px}.panel section{border-bottom:1px solid var(--line);padding-bottom:16px}.panel section:last-child{border-bottom:0}.kpis{display:grid;grid-template-columns:1fr 1fr;gap:8px}.kpi{background:var(--sand);border-radius:8px;padding:10px 12px}.kpi .v{font-size:22px;font-weight:700;font-variant-numeric:tabular-nums}.kpi .v small{font-size:13px;font-weight:500;color:var(--muted);margin-left:2px}.kpi .l{font-size:12px;color:var(--muted)}.kpi.alert .v{color:var(--danger)}.kpi.date .v{font-size:17px;line-height:1.6}.freshness{font-size:13px;color:var(--muted);margin:8px 0 0}.freshness.stale{color:#8a4b12;background:var(--copper-soft);padding:8px 10px;border-radius:6px}.map-ctl{position:absolute;z-index:2;background:#fffffff5;border-radius:var(--radius);box-shadow:var(--shadow)}.basemap{top:12px;left:12px;display:flex;padding:3px;gap:2px}.basemap button{border:0;background:none;padding:6px 12px;border-radius:7px;font-size:13px}.basemap button[aria-pressed=true]{background:var(--forest);color:#fff}.legend{left:12px;bottom:28px;padding:10px 12px;font-size:12px;min-width:190px}.legend strong{display:block;font-size:11px;text-transform:uppercase;letter-spacing:.08em;color:var(--muted);margin-bottom:6px}.legend div{display:flex;align-items:center;gap:8px;margin:3px 0}.sw{width:18px;height:12px;border-radius:2px;flex:none}.sw-perim{border:2px solid #111;background:transparent}.sw-emp{background:#c8742b80;border:1.5px solid #8f4a14}.sw-tamp{background:repeating-linear-gradient(45deg,rgba(37,99,235,.35) 0 3px,transparent 3px 6px);border:1px dashed #2563eb}.map-actions{top:12px;right:12px;display:flex;gap:6px;padding:4px}.maplibregl-ctrl-attrib{font-size:10px}.maplibregl-popup-content{border-radius:8px;font:13px var(--font)}.alerts{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px}.alerts li{border:1px solid var(--line);border-left:4px solid var(--danger);border-radius:8px;padding:10px 12px;font-size:14px}.alerts li.traitee{border-left-color:var(--ok);opacity:.75}.alerts .meta{display:flex;justify-content:space-between;gap:8px;font-size:12px;color:var(--muted);margin-bottom:4px}.badge{font-size:11px;padding:1px 7px;border-radius:10px;background:#fde8e6;color:var(--danger)}.traitee .badge{background:#e3f1e8;color:var(--ok)}.alerts .btn{margin-top:8px}.chart{width:100%;min-height:180px}.chart-legend{display:flex;gap:14px;font-size:12px;color:var(--muted);margin-top:4px}.chart-legend i{display:inline-block;width:9px;height:9px;border-radius:50%;margin-right:5px;vertical-align:middle}.compare{position:fixed;top:0;right:0;bottom:0;left:0;z-index:50;background:#0e1612;display:grid;grid-template-rows:auto 1fr}.compare-bar{display:flex;flex-wrap:wrap;align-items:center;gap:8px;padding:8px 12px;background:var(--forest);color:#fff}.compare-bar select{min-height:36px;border-radius:8px;border:0;padding:4px 8px}.compare-bar .spacer{flex:1}.compare-maps{position:relative}.compare-maps>div{position:absolute;top:0;right:0;bottom:0;left:0}.compare-divider{position:absolute;z-index:3;top:0;bottom:0;width:3px;margin-left:-1.5px;background:#fff;box-shadow:0 0 6px #00000080;pointer-events:none}.compare-slider{position:absolute;z-index:4;left:0;right:0;bottom:18px;width:min(560px,80%);margin:0 auto;accent-color:var(--copper);height:28px}.compare-tag{position:absolute;z-index:3;top:10px;background:#000000a6;color:#fff;padding:4px 10px;border-radius:6px;font-size:13px}.compare-tag.l{left:10px}.compare-tag.r{right:10px}.empty{padding:24px;text-align:center;color:var(--muted)}.toast{position:fixed;bottom:16px;left:50%;transform:translate(-50%);background:var(--ink);color:#fff;padding:10px 16px;border-radius:8px;z-index:60;font-size:14px}@media (max-width: 980px){.shell{grid-template-columns:1fr;grid-template-rows:52px auto 56vh auto;grid-template-areas:"top" "nav" "map" "panel";height:auto;min-height:100%}.nav{flex-direction:row;border-right:0;border-bottom:1px solid var(--line);padding:6px;overflow-x:auto}.nav button{white-space:nowrap;width:auto}.nav .soon{display:none}.panel{border-left:0}.topbar .who,.topbar .demo-badge{display:none}.topbar{gap:6px;padding:0 6px 0 10px}.topbar .title{font-size:13px;white-space:nowrap}.topbar .title small{display:none}.topbar .btn-ghost{padding:4px 6px;font-size:13px;min-height:34px}.site-slot{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:13px}.site-slot select{max-width:38vw}.map-actions{top:56px;left:12px;right:auto;flex-wrap:wrap;max-width:calc(100% - 24px)}.map-actions .btn-export,.site-slot .site-name{display:none}.legend{bottom:44px;min-width:0;padding:6px 8px;font-size:11px}.legend strong{display:none}}.admin{max-width:980px;margin:0 auto;padding:24px 16px 60px;display:grid;gap:18px;grid-template-columns:repeat(auto-fit,minmax(300px,1fr))}.admin header{grid-column:1 / -1;display:flex;align-items:center;gap:12px}.card{background:var(--paper);border:1px solid var(--line);border-radius:var(--radius);padding:18px;box-shadow:var(--shadow)}.card h2{margin:0 0 12px;font-size:17px}.card form{display:flex;flex-direction:column;gap:10px}.card .msg{font-size:13px;min-height:1.2em;margin:0}.card .msg.err{color:var(--danger)}.card .msg.ok{color:var(--ok)}
