:root{--bg:#0a0e13;--panel:#11161d;--panel-2:#141a22;--line:#242c37;--text:#e8ebef;--muted:#7d868f;--cyan:#2fe063;--accent-dim:color-mix(in srgb,#2fe063 15%,transparent);--critical:#c1121f;--high:#d98324;--medium:#c9a227;--low:#3a7ca5;--shadow:0 1px 3px rgba(0,0,0,.4)}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--text);font-family:Inter,ui-sans-serif,system-ui,-apple-system,"Segoe UI",sans-serif;min-height:100vh}.shell{max-width:1720px;margin:auto;padding:0 26px 28px}.topbar{height:88px;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--line)}.brand{display:flex;align-items:center;gap:14px}.brand-mark{display:grid;place-items:center;width:42px;height:42px;border-radius:4px;background:#2fe063;font-weight:800;font-size:18px;color:#0a0e13}h1,h2,h3,p{margin:0}h1{font-size:19px;letter-spacing:-.01em}.eyebrow{display:block;font-size:10px;letter-spacing:.08em;color:var(--cyan);font-weight:600;margin-bottom:4px;text-transform:uppercase}.status{display:flex;align-items:center;gap:10px;color:var(--muted);font-size:12px}.status:before{content:"";width:7px;height:7px;border-radius:50%;background:var(--cyan);box-shadow:0 0 0 3px var(--accent-dim)}.status time{padding-left:10px;border-left:1px solid var(--line)}.pulse{width:7px;height:7px;border-radius:50%;background:var(--cyan)}.metrics{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin:18px 0}.metrics article{padding:14px 16px;border:1px solid var(--line);border-radius:4px;background:var(--panel)}.metrics span{display:block;color:var(--muted);font-size:11px;text-transform:uppercase;letter-spacing:.08em}.metrics strong{display:block;font-size:26px;margin-top:4px}.critical-text{color:var(--critical)}.high-text{color:var(--high)}.dashboard-grid{display:grid;grid-template-columns:minmax(0,1.75fr) minmax(340px,.75fr);gap:14px;height:calc(100vh - 214px);min-height:580px}.panel{background:var(--panel);border:1px solid var(--line);border-radius:4px;overflow:hidden}.panel-head{height:68px;padding:16px 20px;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--line)}.panel-head h2{font-size:16px;font-weight:600}.legend{display:flex;gap:14px;color:var(--muted);font-size:11px}.legend span{display:flex;align-items:center;gap:6px}.legend i{width:8px;height:8px;border-radius:0}.critical{background:var(--critical)}.high{background:var(--high)}.medium{background:var(--medium)}.low{background:var(--low)}#map{height:calc(100% - 68px);background:#080b0f}.leaflet-container{font-family:inherit}.leaflet-popup-content-wrapper,.leaflet-popup-tip{background:#141a22;color:var(--text);border-radius:3px}.leaflet-popup-content{line-height:1.5}.leaflet-popup-content strong{color:var(--cyan)}.alert-marker{border:0;background:transparent}.alert-dot{width:12px;height:12px;border:2px solid rgba(255,255,255,.9);border-radius:50%;box-shadow:0 0 0 3px color-mix(in srgb,var(--marker) 20%,transparent);background:var(--marker);transition:.15s transform}

/* Severity -> custom property mapping (moved out of inline styles for CSP compliance) */
.alert-dot.critical{--marker:var(--critical)}
.alert-dot.high{--marker:var(--high)}
.alert-dot.medium{--marker:var(--medium)}
.alert-dot.low{--marker:var(--low)}

/* Set on .alert-card (not .severity-rail) so --severity inherits to BOTH
   .severity-rail (background) and .severity-label (color), which are siblings */
.alert-card.critical{--severity:var(--critical)}
.alert-card.high{--severity:var(--high)}
.alert-card.medium{--severity:var(--medium)}
.alert-card.low{--severity:var(--low)}

/* Pulse — critical only */
@keyframes alert-pulse{0%{box-shadow:0 0 0 0 color-mix(in srgb,var(--marker) 70%,transparent)}70%{box-shadow:0 0 0 16px color-mix(in srgb,var(--marker) 0%,transparent)}100%{box-shadow:0 0 0 0 color-mix(in srgb,var(--marker) 0%,transparent)}}
.alert-dot.critical{animation:alert-pulse 1.6s ease-out infinite}
@media(prefers-reduced-motion:reduce){.alert-dot{animation:none}}
.alert-marker.highlighted .alert-dot{transform:scale(1.6);box-shadow:0 0 0 5px color-mix(in srgb,var(--marker) 25%,transparent)}.map-error{position:absolute;left:24px;bottom:24px;background:#5a1015;padding:10px;border-radius:3px}.alerts-panel{display:flex;flex-direction:column}.count-badge{display:grid;place-items:center;background:var(--accent-dim);color:var(--cyan);min-width:28px;height:24px;padding:0 8px;border:1px solid color-mix(in srgb,var(--cyan) 30%,transparent);border-radius:3px;font-size:12px;font-weight:600;font-family:ui-monospace,monospace}.filters{display:flex;gap:6px;padding:12px 15px;border-bottom:1px solid var(--line)}.filter{flex:1;display:flex;align-items:center;justify-content:center;white-space:nowrap;border:1px solid var(--line);background:transparent;color:var(--muted);padding:7px 11px;border-radius:3px;cursor:pointer;font:inherit;font-size:11px;text-align:center;transition:.15s all}.filter:hover{background:var(--panel-2);color:var(--text);border-color:#3a4553}.filter.active{background:var(--accent-dim);color:var(--cyan);border-color:color-mix(in srgb,var(--cyan) 40%,transparent)}.alert-list{overflow-y:auto;padding:10px;display:flex;flex-direction:column;gap:8px}.alert-card{position:relative;display:flex;min-height:120px;border:1px solid var(--line);border-radius:3px;background:var(--panel-2);overflow:hidden;cursor:pointer;transition:.15s border-color,.15s background}.alert-card:hover,.alert-card:focus{outline:none;border-color:color-mix(in srgb,var(--cyan) 45%,transparent);background:#181f28}.alert-card.map-active{border-color:var(--cyan)}.severity-rail{width:3px;background:var(--severity)}.alert-content{padding:12px 14px;width:calc(100% - 3px)}.alert-top{display:flex;justify-content:space-between;gap:8px}.severity-label{color:var(--severity);font-size:10px;font-weight:700;letter-spacing:.1em}.alert-card time,.alert-meta{font-size:10px;color:var(--muted)}.alert-card time{font-family:ui-monospace,monospace}.alert-card h3{font-size:14px;font-weight:600;margin:8px 28px 5px 0}.alert-card p{color:#a4adb6;font-size:11px;line-height:1.5;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.alert-meta{display:flex;gap:14px;margin-top:9px}.source{font-family:ui-monospace,monospace}.country:before{content:""}.source:before{content:""}.locate{display:none}.empty-state{padding:40px;text-align:center;color:var(--muted)}@media(max-width:1000px){.dashboard-grid{grid-template-columns:1fr;height:auto}.map-panel{height:580px}.alerts-panel{max-height:700px}.legend{display:none}}@media(max-width:620px){.shell{padding:0 12px 18px}.topbar{height:auto;padding:16px 0;align-items:flex-start;gap:12px}.status{align-items:flex-end;flex-direction:column}.status:before{display:none}.metrics{grid-template-columns:repeat(2,1fr)}.dashboard-grid{min-height:0}.map-panel{height:440px}.filters{padding:10px}.panel-head{padding:15px}}

#map .leaflet-control-attribution {
   display: none;
}

.fs-toggle{display:grid;place-items:center;width:32px;height:32px;border:1px solid var(--line);background:var(--panel-2);color:var(--muted);border-radius:3px;cursor:pointer;transition:.15s all}
.fs-toggle:hover{background:var(--accent-dim);color:var(--cyan);border-color:color-mix(in srgb,var(--cyan) 40%,transparent)}
.fs-toggle .fs-collapse{display:none}
body.map-fullscreen .fs-toggle .fs-expand{display:none}
body.map-fullscreen .fs-toggle .fs-collapse{display:block}
body.map-fullscreen .fs-toggle{position:fixed;top:16px;right:16px;z-index:1000}
body.map-fullscreen .topbar,body.map-fullscreen .metrics,body.map-fullscreen .alerts-panel{display:none}
body.map-fullscreen .shell{max-width:none;padding:0}
body.map-fullscreen .dashboard-grid{grid-template-columns:1fr;height:100vh;min-height:0;gap:0}
body.map-fullscreen .map-panel{border-radius:0;border:0}
body.map-fullscreen .panel-head{position:relative;justify-content:center}
body.map-fullscreen .panel-head>div:first-child{display:none}
body.map-fullscreen .controls{padding:14px 20px;margin:0;border-bottom:1px solid var(--line);gap:14px}
body.map-fullscreen .control-search{margin-right:52px}
.controls{display:flex;gap:10px;margin:18px 0;align-items:center}
.control-select,.control-search{border:1px solid var(--line);background:var(--panel);color:var(--text);border-radius:3px;padding:10px 13px;font:inherit;font-size:13px}
.control-select{cursor:pointer;min-width:160px}
.control-select:hover,.control-search:hover{border-color:#3a4553}
.control-select:focus,.control-search:focus{outline:none;border-color:var(--cyan);box-shadow:0 0 0 2px var(--accent-dim)}
.control-search{flex:1}
.control-search::placeholder{color:var(--muted)}
.control-select option{background:var(--panel);color:var(--text)}
#last-updated{color:var(--cyan);font-family:ui-monospace,monospace}
.alerts-panel .panel-head{height:68px;flex:0 0 68px;min-height:68px}
#filter-search{background:var(--panel) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='none' stroke='%237d868f' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='7' cy='7' r='5'/%3E%3Cline x1='15' y1='15' x2='11' y2='11'/%3E%3C/svg%3E") no-repeat 13px center;padding-left:38px}
.alert-top-left{display:flex;align-items:center;gap:8px}
.alert-dot.is-acknowledged{opacity:.35;animation:none}
.confidence-badge{font-size:9px;font-weight:700;letter-spacing:.06em;color:var(--muted);font-family:ui-monospace,monospace;border:1px solid var(--line);border-radius:3px;padding:1px 5px}
.marker-cluster,.marker-cluster-small,.marker-cluster-medium,.marker-cluster-large{background:color-mix(in srgb,var(--cyan) 25%,transparent)!important}
.marker-cluster div,.marker-cluster-small div,.marker-cluster-medium div,.marker-cluster-large div{background:color-mix(in srgb,var(--cyan) 45%,transparent)!important;border:1px solid var(--cyan)!important;color:var(--cyan)!important;font-family:ui-monospace,monospace;font-weight:700;font-size:12px}
.ack-toggle{display:flex;align-items:center;gap:8px;cursor:pointer;user-select:none;font-size:11px;color:var(--muted)}
.ack-toggle input{position:absolute;opacity:0;width:0;height:0}
.ack-toggle-track{position:relative;width:32px;height:18px;background:var(--panel-2);border:1px solid var(--line);border-radius:9px;transition:.15s all}
.ack-toggle-track:after{content:"";position:absolute;top:2px;left:2px;width:12px;height:12px;background:var(--muted);border-radius:50%;transition:.15s all}
.ack-toggle input:checked+.ack-toggle-track{background:var(--accent-dim);border-color:color-mix(in srgb,var(--cyan) 50%,transparent)}
.ack-toggle input:checked+.ack-toggle-track:after{transform:translateX(14px);background:var(--cyan)}
.ack-toggle input:focus-visible+.ack-toggle-track{box-shadow:0 0 0 2px var(--accent-dim)}
.topbar-right{display:flex;align-items:center;gap:16px}
.cog-link{display:grid;place-items:center;width:34px;height:34px;border:1px solid var(--line);background:var(--panel-2);color:var(--muted);border-radius:3px;text-decoration:none;transition:.15s all}
.org-link{padding:9px 12px;border:1px solid var(--line);background:var(--panel-2);color:var(--muted);border-radius:3px;text-decoration:none;font-size:11px;transition:.15s all}.org-link:hover{background:var(--accent-dim);color:var(--cyan);border-color:color-mix(in srgb,var(--cyan) 40%,transparent)}
.cog-link:hover{background:var(--accent-dim);color:var(--cyan);border-color:color-mix(in srgb,var(--cyan) 40%,transparent)}
.status-link{text-decoration:none;color:inherit}
.status-link:hover #connection-status{color:var(--cyan);text-decoration:underline}
@media(max-width:620px){.controls{flex-wrap:wrap}.control-select{flex:1;min-width:0}.control-search{flex:1 1 100%}}
#globe{height:calc(100% - 68px);background:#080b0f}
#globe canvas{display:block}
.map-tools{display:flex;align-items:center;gap:10px}
body.map-light .marker-cluster,
body.map-light .marker-cluster-small,
body.map-light .marker-cluster-medium,
body.map-light .marker-cluster-large {
  background: rgba(15, 118, 110, 0.25) !important;
}

body.map-light .marker-cluster div,
body.map-light .marker-cluster-small div,
body.map-light .marker-cluster-medium div,
body.map-light .marker-cluster-large div {
  background: #0f766e !important;
  border: 1px solid #0d5d56 !important;
  color: #ffffff !important;
}

.leaflet-tooltip.alert-tooltip{background:#141a22;border:1px solid var(--cyan);border-radius:3px;color:var(--text);box-shadow:0 2px 8px rgba(0,0,0,.5);padding:8px 10px;max-width:240px;white-space:normal}
.leaflet-tooltip.alert-tooltip:before{border-top-color:var(--cyan)}
.alert-tip strong{color:var(--cyan);font-size:12px}
.alert-tip-desc{color:#a4adb6;font-size:11px;line-height:1.4;margin:4px 0}
.alert-tip-meta{font-size:10px;font-family:ui-monospace,monospace;color:var(--muted);line-height:1.5}

.alert-heading-tools{display:flex;align-items:center;gap:12px}
