:root{--bg:#060a12;--bg-2:#0a1019;--panel:rgba(13,20,33,0.72);--panel-solid:#0c1320;--panel-2:rgba(20,30,49,0.6);--border:rgba(74,96,138,0.22);--border-strong:rgba(96,124,173,0.4);--text:#e9eff9;--muted:#8295b6;--faint:#56688c;--brand:#0bbd8b;--brand-2:#1fd6a6;--signal:#38d0e0;--good:#2ecc71;--moderate:#f1c40f;--warn:#ff9f1c;--danger:#e8431f;--severe:#b3122a;--radius:14px;--radius-sm:9px;--shadow:0 18px 50px -22px rgba(0,0,0,0.8);--shadow-sm:0 6px 20px -10px rgba(0,0,0,0.7);--font-d:var(--font-display),ui-sans-serif,system-ui,sans-serif;--font-b:var(--font-body),ui-sans-serif,system-ui,sans-serif;--font-m:var(--font-mono),ui-monospace,"SFMono-Regular",monospace;--header-h:58px;--dock-w:396px}*{box-sizing:border-box}body,html{margin:0;padding:0;height:100%;background:var(--bg);color:var(--text);font-family:var(--font-b);-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}::selection{background:color-mix(in srgb,var(--brand) 40%,transparent)}.chat-log::-webkit-scrollbar,.scroll::-webkit-scrollbar{width:8px}.chat-log::-webkit-scrollbar-thumb,.scroll::-webkit-scrollbar-thumb{background:var(--border-strong);border-radius:8px}.chat-log,.scroll{scrollbar-width:thin;scrollbar-color:var(--border-strong) transparent}.shell{display:grid;grid-template-rows:var(--header-h) 1fr;height:100vh;width:100vw;overflow:hidden;background:radial-gradient(1100px 500px at 78% -8%,rgba(11,189,139,.1),transparent 60%),radial-gradient(900px 500px at 0 110%,rgba(56,208,224,.07),transparent 55%),var(--bg)}.shell-body{display:grid;grid-template-columns:var(--dock-w) 1fr;min-height:0}.hdr{display:flex;align-items:center;gap:18px;padding:0 18px;border-bottom:1px solid var(--border);background:linear-gradient(180deg,rgba(10,16,25,.92),rgba(8,12,20,.78));-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);z-index:20}.hdr-brand{display:flex;align-items:baseline;gap:10px}.hdr-mark{font-family:var(--font-d);font-weight:800;font-size:17px;letter-spacing:-.02em;line-height:1}.hdr-mark .g{color:var(--brand-2)}.hdr-mark .dot{color:var(--signal)}.hdr-sub{font-family:var(--font-m);font-size:9.5px;letter-spacing:.16em;text-transform:uppercase;color:var(--faint)}.hdr-spacer{flex:1 1}.status{display:flex;align-items:center;gap:12px;padding:6px 12px 6px 10px;border:1px solid var(--border);border-radius:999px;background:var(--panel)}.status-led{width:9px;height:9px;border-radius:50%;position:relative;flex-shrink:0}.status-led:after{content:"";position:absolute;inset:-5px;border-radius:50%;background:inherit;opacity:.35;animation:pulse 2.2s ease-out infinite}.status-txt{font-family:var(--font-m);font-size:11px;letter-spacing:.04em}.status-txt b{text-transform:uppercase}.status-sigs{display:flex;gap:10px}.status-sig{font-family:var(--font-m);font-size:10px;color:var(--muted);display:flex;align-items:center;gap:5px}.status-sig .d{width:6px;height:6px;border-radius:50%}.hdr-actions{display:flex;align-items:center;gap:8px}.icon-btn{display:inline-flex;align-items:center;gap:7px;height:34px;padding:0 12px;background:var(--panel);border:1px solid var(--border);color:var(--text);border-radius:9px;font-family:var(--font-m);font-size:11px;letter-spacing:.03em;cursor:pointer;transition:border-color .15s,background .15s,transform .1s}.icon-btn:hover{border-color:var(--brand);transform:translateY(-1px)}.icon-btn.on{border-color:var(--brand);color:var(--brand-2)}.icon-btn .k{width:6px;height:6px;border-radius:50%;background:var(--danger)}.icon-btn .k.live{background:var(--good)}.dock{display:flex;flex-direction:column;min-height:0;border-right:1px solid var(--border);background:linear-gradient(180deg,rgba(10,15,24,.6),rgba(7,11,18,.4));position:relative}.dock-tabs{display:flex;gap:4px;padding:12px 14px 10px;border-bottom:1px solid var(--border)}.dock-tab{flex:1 1;padding:9px 0;border-radius:9px;background:transparent;border:1px solid transparent;color:var(--muted);font-family:var(--font-m);font-size:11px;letter-spacing:.08em;text-transform:uppercase;cursor:pointer;transition:all .15s;display:flex;align-items:center;justify-content:center;gap:7px}.dock-tab:hover{color:var(--text)}.dock-tab.on{color:var(--bg);background:linear-gradient(135deg,var(--brand-2),var(--brand));font-weight:700;box-shadow:0 6px 18px -8px var(--brand)}.dock-tab .badge{font-size:9px;min-width:16px;height:16px;padding:0 4px;border-radius:999px;display:inline-flex;align-items:center;justify-content:center;background:var(--danger);color:#fff}.dock-tab.on .badge{background:rgba(0,0,0,.28)}.chat{flex-direction:column;min-height:0}.chat,.chat-log{display:flex;flex:1 1}.chat-log{overflow-y:auto;padding:16px;flex-direction:column;gap:14px}.msg{font-size:13.5px;line-height:1.55;animation:fadeUp .35s ease both}.msg .who{font-family:var(--font-m);font-size:9.5px;text-transform:uppercase;letter-spacing:.14em;color:var(--faint);margin-bottom:4px}.msg.user .bubble{background:linear-gradient(135deg,rgba(11,189,139,.14),rgba(56,208,224,.08));border:1px solid var(--border-strong);border-radius:12px 12px 4px 12px;padding:10px 12px}.msg.assistant .bubble{color:var(--text);white-space:pre-wrap}.intro{border:1px solid var(--border);border-radius:var(--radius);padding:14px;background:var(--panel);font-size:13px;line-height:1.6;color:var(--muted)}.intro b{color:var(--text)}.tool-chip{font-size:10.5px;color:var(--brand-2);background:rgba(11,189,139,.08);border:1px solid var(--border);border-radius:7px;padding:4px 9px;display:inline-flex;gap:6px;margin:5px 6px 0 0}.thinking,.tool-chip{font-family:var(--font-m)}.thinking{color:var(--muted);font-size:12px;display:flex;gap:7px;align-items:center}.thinking .d{width:6px;height:6px;border-radius:50%;background:var(--brand-2);animation:blink 1.1s infinite}.suggestions{display:flex;flex-wrap:wrap;gap:7px;padding:0 16px 14px}.chip{font-size:12px;padding:7px 11px;border-radius:999px;background:var(--panel);border:1px solid var(--border);color:var(--text);cursor:pointer;transition:all .15s;line-height:1.2}.chip:hover{border-color:var(--brand);color:var(--brand-2);transform:translateY(-1px)}.chat-input{display:flex;gap:9px;padding:13px 16px;border-top:1px solid var(--border)}.chat-input textarea{flex:1 1;resize:none;height:42px}button,input,textarea{font-family:var(--font-b);font-size:13px;color:var(--text);background:rgba(9,14,23,.8);border:1px solid var(--border);border-radius:9px;padding:9px 11px;outline:none;transition:border-color .15s,box-shadow .15s}input:focus,textarea:focus{border-color:var(--brand);box-shadow:0 0 0 3px rgba(11,189,139,.12)}input::placeholder,textarea::placeholder{color:var(--faint)}button{cursor:pointer}button.primary{background:linear-gradient(135deg,var(--brand-2),var(--brand));color:#04130d;border:none;font-family:var(--font-m);font-weight:700;font-size:12px;letter-spacing:.04em;padding:9px 16px}button.primary:hover{filter:brightness(1.08)}button:disabled{opacity:.45;cursor:default}.notice{font-size:12.5px;color:var(--warn);background:rgba(255,159,28,.07);border:1px solid rgba(255,159,28,.28);border-radius:10px;padding:11px;line-height:1.5}.notice code{font-family:var(--font-m);font-size:11px;color:var(--brand-2)}.scroll{overflow-y:auto;min-height:0;flex:1 1;padding:4px 0 24px}.sec{padding:16px 16px 4px}.sec-h{display:flex;align-items:center;gap:8px;margin:0 0 11px;font-family:var(--font-m);font-size:10px;letter-spacing:.14em;text-transform:uppercase;color:var(--faint)}.sec-h:before{content:"";width:5px;height:5px;border-radius:50%;background:var(--brand)}.sec-h .src{margin-left:auto;color:var(--faint);letter-spacing:.06em}.card{border-radius:var(--radius);padding:14px;background:var(--panel);border:1px solid var(--border);box-shadow:var(--shadow-sm);animation:fadeUp .4s ease both}.card .lede{font-size:13px;line-height:1.5;margin:0 0 10px;color:var(--text)}.rows{flex-direction:column}.row,.rows{display:flex}.row{align-items:center;gap:9px;padding:8px 0;font-size:13px;border-top:1px solid var(--border)}.row:first-child{border-top:none}.row .dot{width:9px;height:9px;border-radius:50%;flex-shrink:0;box-shadow:0 0 8px -1px currentColor}.row .name{flex:1 1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.row .sub{font-size:10px;color:var(--faint);letter-spacing:.03em}.row .sub,.row .val{font-family:var(--font-m)}.row .val{font-weight:700;font-size:14px}.row .val .u{font-weight:400;font-size:10px;color:var(--muted);margin-left:3px}.src-line{font-size:9.5px;color:var(--faint);margin-top:11px;line-height:1.5}.loading,.src-line{font-family:var(--font-m)}.loading{font-size:11.5px;color:var(--muted);padding:8px 0;display:flex;gap:8px;align-items:center}.loading .d{width:6px;height:6px;border-radius:50%;background:var(--brand-2);animation:blink 1.1s infinite}.search-row{display:flex;gap:8px}.search-row input{flex:1 1}.uc-grid{display:grid;grid-template-columns:1fr;grid-gap:10px;gap:10px}.uc-card{display:flex;flex-direction:column;gap:5px;text-align:left;background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);padding:13px 14px;cursor:pointer;color:var(--text);transition:border-color .15s,transform .1s,box-shadow .15s;position:relative;overflow:hidden}.uc-card:before{content:"";position:absolute;inset:0;opacity:0;background:linear-gradient(135deg,rgba(11,189,139,.1),transparent 60%);transition:opacity .2s}.uc-card:hover{border-color:var(--brand);transform:translateY(-2px);box-shadow:var(--shadow-sm)}.uc-card:hover:before{opacity:1}.uc-card.active{border-color:var(--brand-2);box-shadow:0 0 0 1px var(--brand-2) inset,var(--shadow-sm)}.uc-badge{align-self:flex-start;font-family:var(--font-m);font-size:8.5px;text-transform:uppercase;letter-spacing:.14em;background:rgba(56,208,224,.1);border:1px solid var(--border);color:var(--signal);padding:3px 7px;border-radius:5px;position:relative}.uc-title{font-family:var(--font-d);font-size:15px;font-weight:700;line-height:1.15;position:relative}.uc-blurb{font-size:11.5px;color:var(--muted);line-height:1.4;position:relative}.uc-play{font-family:var(--font-m);font-size:10px;color:var(--brand-2);margin-top:3px;letter-spacing:.04em;position:relative}.uc-banner{position:absolute;top:14px;left:14px;z-index:6;padding:9px 14px;display:flex;align-items:center;gap:11px}.uc-banner b{font-family:var(--font-d);font-size:14px}.uc-banner span{font-family:var(--font-m);font-size:8.5px;text-transform:uppercase;letter-spacing:.12em;color:var(--signal);border:1px solid var(--border);border-radius:5px;padding:3px 7px}.reveal{position:absolute;bottom:100px;left:50%;transform:translateX(-50%);z-index:7;padding:14px 18px;width:min(540px,84%)}.reveal-track{display:flex;align-items:center;gap:14px;font-family:var(--font-m);font-size:10px;letter-spacing:.12em;color:var(--muted)}.reveal-track input{flex:1 1;accent-color:var(--signal);height:4px}.reveal-label{text-align:center;font-family:var(--font-m);font-size:10px;color:var(--brand-2);margin-top:9px;letter-spacing:.03em}.map-wrap{position:relative;min-height:0}.map{position:absolute;inset:0}.glass{background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px)}.layers{position:absolute;top:14px;right:14px;z-index:6;width:250px;overflow:hidden}.layers-head{display:flex;align-items:center;gap:8px;padding:12px 14px;cursor:pointer;font-family:var(--font-m);font-size:11px;letter-spacing:.1em;text-transform:uppercase;color:var(--text);border-bottom:1px solid transparent}.layers.open .layers-head{border-color:var(--border)}.layers-head .chev{margin-left:auto;transition:transform .2s;color:var(--muted)}.layers.open .layers-head .chev{transform:rotate(180deg)}.layers-body{max-height:0;overflow:hidden;transition:max-height .28s ease}.layers.open .layers-body{max-height:560px}.layers-grp{padding:8px 6px}.layers-grp+.layers-grp{border-top:1px solid var(--border)}.layers-grp-h{font-family:var(--font-m);font-size:8.5px;letter-spacing:.16em;text-transform:uppercase;color:var(--faint);padding:4px 8px}.sw-row{display:flex;align-items:center;gap:10px;padding:7px 8px;border-radius:8px;cursor:pointer;font-size:12.5px;transition:background .12s}.sw-row:hover{background:rgba(255,255,255,.03)}.sw-row .swatch{width:9px;height:9px;border-radius:3px;flex-shrink:0}.sw-row .lbl{flex:1 1}.switch{width:32px;height:18px;border-radius:999px;background:rgba(120,140,175,.25);position:relative;transition:background .18s;flex-shrink:0}.switch:after{content:"";position:absolute;top:2px;left:2px;width:14px;height:14px;border-radius:50%;background:#cfe0ff;transition:transform .18s}.sw-row.on .switch{background:linear-gradient(135deg,var(--brand-2),var(--brand))}.sw-row.on .switch:after{transform:translateX(14px);background:#04130d}.ticker{position:absolute;bottom:0;left:0;right:0;z-index:8;height:36px;border-radius:0;border-left:none;border-right:none;border-bottom:none;overflow:hidden}.ticker,.ticker-tag{display:flex;align-items:center}.ticker-tag{flex-shrink:0;align-self:stretch;padding:0 14px;font-family:var(--font-m);font-size:10px;letter-spacing:.12em;color:#04130d;font-weight:700;background:linear-gradient(135deg,var(--brand-2),var(--brand))}.ticker-track{flex:1 1;overflow:hidden;position:relative;height:100%;display:flex;align-items:center}.ticker-idle{padding-left:16px;font-family:var(--font-m);font-size:11px;color:var(--muted)}.ticker-move{display:inline-flex;align-items:center;gap:30px;white-space:nowrap;padding-left:16px;animation:marquee linear infinite;will-change:transform}.ticker:hover .ticker-move{animation-play-state:paused}.ticker-item{display:inline-flex;align-items:center;gap:9px;font-size:12.5px;color:var(--text);text-decoration:none}.ticker-item:hover{color:var(--brand-2)}.ticker-dot{width:5px;height:5px;border-radius:50%;background:var(--signal);flex-shrink:0}.ticker-src{font-family:var(--font-m);font-size:10px;color:var(--faint)}@keyframes marquee{0%{transform:translateX(0)}to{transform:translateX(-50%)}}.legend{position:absolute;bottom:50px;left:16px;z-index:5;padding:12px 14px;max-width:290px}.legend .t{font-family:var(--font-m);font-size:10px;letter-spacing:.06em;color:var(--muted);line-height:1.5}.legend .scale{display:flex;gap:0;margin:8px 0 4px;border-radius:6px;overflow:hidden}.legend .scale span{flex:1 1;height:8px}.legend .scale-l{display:flex;justify-content:space-between}.legend .attr,.legend .scale-l{font-family:var(--font-m);font-size:8.5px;color:var(--faint)}.legend .attr{margin-top:8px;line-height:1.55}.pop-wrap{position:relative}.pop{position:absolute;top:42px;right:0;z-index:30;width:320px;padding:16px}.pop h3{font-family:var(--font-d);font-size:14px;margin:0 0 4px}.pop p{font-size:12px;color:var(--muted);line-height:1.5;margin:0 0 12px}.pop p a{color:var(--brand-2)}.pop .field{display:flex;gap:8px}.pop .field input{flex:1 1;font-family:var(--font-m);font-size:11px}.pop .hint{font-family:var(--font-m);font-size:9.5px;color:var(--faint);margin-top:10px;line-height:1.5}.pop .ok{color:var(--good)}.maplibregl-popup-content{background:var(--panel-solid);color:var(--text);border:1px solid var(--border-strong);border-radius:10px;font-family:var(--font-b);font-size:12px;box-shadow:var(--shadow)}.maplibregl-popup-content b{font-family:var(--font-m);font-size:11px}.maplibregl-popup-tip{border-top-color:var(--panel-solid)!important;border-bottom-color:var(--panel-solid)!important}.maplibregl-ctrl-group{background:var(--panel-solid)!important;border:1px solid var(--border)!important}.maplibregl-ctrl-group button{filter:invert(.9)}.drawer-btn{display:none}.login-wrap{height:100vh;width:100vw;display:grid;place-items:center;background:radial-gradient(1100px 600px at 70% -10%,rgba(11,189,139,.12),transparent 60%),radial-gradient(900px 600px at 0 110%,rgba(56,208,224,.08),transparent 55%),var(--bg)}.login-card{width:min(380px,92vw);padding:30px 28px;display:flex;flex-direction:column;gap:14px;animation:fadeUp .5s ease both}.login-mark{font-family:var(--font-d);font-weight:800;font-size:21px;letter-spacing:-.02em}.login-mark .g{color:var(--brand-2)}.login-mark .dot{color:var(--signal)}.login-sub{font-family:var(--font-m);font-size:9.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--faint);margin-bottom:8px}.login-field{display:flex;flex-direction:column;gap:6px}.login-field span{font-family:var(--font-m);font-size:10px;letter-spacing:.1em;text-transform:uppercase;color:var(--muted)}.login-field input{padding:11px 12px}.login-error{font-size:12.5px;color:var(--danger);background:rgba(232,67,31,.08);border:1px solid rgba(232,67,31,.3);border-radius:9px;padding:9px 11px}.login-btn{margin-top:4px;padding:12px;font-size:13px}.login-foot{text-align:center;font-family:var(--font-m);font-size:9px;letter-spacing:.08em;color:var(--faint);margin-top:4px}@keyframes pulse{0%{transform:scale(.6);opacity:.6}to{transform:scale(2.4);opacity:0}}@keyframes blink{0%,to{opacity:.25}50%{opacity:1}}@keyframes fadeUp{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}@media (max-width:880px){:root{--dock-w:100%}.shell-body{grid-template-columns:1fr}.dock{position:absolute;top:var(--header-h);left:0;right:0;bottom:0;z-index:15;transform:translateX(-100%);transition:transform .28s ease;border-right:none;background:var(--bg-2)}.dock.open{transform:none}.drawer-btn{display:inline-flex}.hdr-sub,.status-sigs{display:none}.layers{width:210px}}