@import url('https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500;600;700;800&family=Space+Grotesk:wght@400;500;600;700&display=swap');
:root{font-family:'DM Sans',system-ui,sans-serif;color:#ecf1eb;background:#0b1213;font-synthesis:none}
*{box-sizing:border-box}body{margin:0}button,input,select{font:inherit}button{cursor:pointer}a{color:#a4e8b5;text-decoration:none}a:hover{text-decoration:underline}
.app-shell{display:flex;min-height:100vh}.sidebar{width:277px;flex:0 0 277px;background:#0d1616;border-right:1px solid #263331;display:flex;flex-direction:column;min-height:100vh;position:sticky;top:0;height:100vh}.brand{display:flex;align-items:center;gap:12px;padding:28px 23px 26px;border-bottom:1px solid #24302f}.brand-mark{width:38px;height:38px;display:grid;place-items:center;border-radius:12px;background:#b9e9b6;color:#13241a;font-size:24px;box-shadow:0 0 28px #5aab6844}.brand-title{font-weight:800;font-size:18px;letter-spacing:.06em}.brand-title span{font-size:10px;border:1px solid #789e7d;border-radius:4px;color:#a4ddad;padding:2px 4px;vertical-align:middle;margin-left:2px}.brand-sub{font-size:9px;letter-spacing:1.55px;margin-top:6px;color:#7f9992;font-weight:700}.sidebar-scroll{padding:23px 18px 30px;overflow-y:auto;flex:1}.eyebrow{font-size:10px;letter-spacing:2px;font-weight:800;color:#718b84;margin-bottom:13px}.eyebrow.accent{color:#9cdea9;margin-bottom:10px}.nav-current,.nav-label{height:42px;display:flex;align-items:center;gap:11px;padding:0 10px;font-size:12px;font-weight:600;border-radius:8px}.nav-current{background:#20352c;color:#c7ebcb}.nav-label{color:#9aaca8}.nav-icon{width:17px;font-size:19px;color:#8aa79a;text-align:center}.nav-dot{width:6px;height:6px;background:#a7f4a9;border-radius:100%;margin-left:auto}.sidebar-divider{height:1px;background:#26312f;margin:22px 2px}.sidebar label:not(.switch){display:block;color:#b4c4bc;font-size:11px;font-weight:700;margin:16px 0 8px}.sidebar select{width:100%;border:1px solid #31423d;border-radius:7px;background:#182321;color:#e5eee8;font-size:12px;padding:11px 28px 11px 10px;min-height:40px}.sidebar select:disabled{opacity:.55}.setting-row{display:flex;justify-content:space-between;align-items:center;gap:12px;margin:5px 0 10px}.setting-row strong{display:block;font-size:12px}.setting-row small{display:block;font-size:10px;color:#7e9890;margin-top:4px}.switch{position:relative;width:36px;height:20px;flex-shrink:0}.switch input{opacity:0;width:0;height:0}.switch span{position:absolute;inset:0;border-radius:12px;background:#3c4b46;transition:.2s}.switch span:before{content:'';position:absolute;top:3px;left:3px;width:14px;height:14px;background:white;border-radius:100%;transition:.2s}.switch input:checked+span{background:#70be85}.switch input:checked+span:before{transform:translateX(16px)}#opacity{accent-color:#a2daac;width:100%;margin:6px 0}.inline-note{font-size:10px;line-height:1.6;color:#7e9690;padding-top:9px}.segmented{display:flex;background:#172320;border:1px solid #2c3935;padding:4px;border-radius:9px}.segmented button{flex:1;border:0;background:transparent;color:#839d91;border-radius:6px;padding:9px;font-size:11px}.segmented button.selected{background:#2f4738;color:#d0f6d4}.disclaimer{color:#98aca5;font-size:11px;line-height:1.7}.official-link{font-size:11px;font-weight:700}.sidebar-bottom{padding:14px 21px;border-top:1px solid #25322e;font-size:9px;color:#718981;letter-spacing:1px;display:flex;justify-content:space-between}.sidebar-bottom span{color:#9edfac}.main{flex:1;min-width:0;background:#101819}.topbar{height:70px;padding:0 33px;border-bottom:1px solid #263230;display:flex;justify-content:space-between;align-items:center;background:#101919}.top-title{font-size:13px;font-weight:700}.breadcrumb{color:#748f86;font-weight:500;margin-right:7px}.top-right{display:flex;align-items:center;gap:22px}.clock{font-size:11px;color:#92a79e;font-variant-numeric:tabular-nums}.status-pill{display:flex;align-items:center;gap:8px;border-radius:5px;padding:8px 10px;font-size:10px;letter-spacing:.7px;font-weight:800}.status-pill.warning{color:#e7c893;background:#382d1c}.status-pill.success{color:#b5eac0;background:#243b2b}.status-pill.error{color:#ffc8a8;background:#432b26}.pulse{display:inline-block;height:7px;width:7px;border-radius:100%;background:currentColor}.content{padding:35px 34px 24px;max-width:1750px;margin:auto}.intro-row{display:flex;justify-content:space-between;gap:22px;align-items:center;margin-bottom:26px}h1,h2,p{margin:0}h1{font-family:'Space Grotesk',system-ui,sans-serif;letter-spacing:-1.5px;font-size:32px;font-weight:700;line-height:1.15}.period{color:#9dd6a1}.intro-row p{color:#93a89f;font-size:12px;margin-top:11px;line-height:1.6}.refresh-btn{display:flex;align-items:center;gap:9px;background:#a6dba8;border:1px solid #bbeabb;color:#15271b;border-radius:8px;padding:11px 16px;font-size:12px;font-weight:800;white-space:nowrap}.refresh-btn span{font-size:19px;line-height:14px}.refresh-btn:disabled{opacity:.55;cursor:wait}.metrics{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:14px;margin-bottom:18px}.metric{border:1px solid #293834;background:linear-gradient(145deg,#172322,#131e1d);border-radius:10px;padding:20px 20px 17px;min-height:130px}.metric-label{font-size:10px;font-weight:800;color:#90a39b;letter-spacing:1.25px}.metric-value{font-family:'Space Grotesk',sans-serif;font-size:34px;letter-spacing:-1px;font-weight:700;margin-top:10px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.metric-value.sm{font-size:23px;padding-top:8px}.metric-foot{font-size:10px;color:#83a091;margin-top:9px;line-height:1.4}.dashboard-grid{display:grid;grid-template-columns:minmax(0,1.65fr) minmax(285px,.8fr);gap:18px}.map-panel,.activity-panel,.info-panel{border:1px solid #293833;border-radius:10px;background:#172120;overflow:hidden}.panel-header{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:20px 20px 18px}.panel-header h2{font-family:'Space Grotesk';font-size:15px;letter-spacing:-.35px}.panel-header p{font-size:10px;color:#839e94;margin-top:6px}.legend{display:flex;gap:12px;align-items:center;flex-wrap:wrap;color:#a4b9ac;font-size:10px}.legend span{white-space:nowrap}.dot{display:inline-block;width:8px;height:8px;border-radius:100%;margin-right:5px}.dot.recent{background:#e96b43}.dot.medium{background:#e9ad4d}.dot.old{background:#9ebd73}.map-container{position:relative;margin:0 13px 13px;height:515px;border-radius:8px;overflow:hidden;background:#182322}.map-container #map{height:100%;width:100%}.map-overline,.map-bottom{position:absolute;pointer-events:none;z-index:400;background:#111c1bcc;color:#d2e3d4;backdrop-filter:blur(5px);font-weight:700;letter-spacing:.7px}.map-overline{top:14px;left:15px;border:1px solid #52635977;border-radius:5px;font-size:9px;padding:8px}.map-bottom{bottom:13px;left:13px;right:13px;padding:8px 10px;display:flex;justify-content:space-between;gap:8px;border-radius:6px;font-size:9px}.leaflet-container{font-family:'DM Sans',sans-serif;background:#172622}.leaflet-control-attribution{font-size:9px!important}.leaflet-popup-content-wrapper,.leaflet-popup-tip{background:#172723;color:#ebf4e9}.leaflet-popup-content{font-size:12px;line-height:1.6}.leaflet-popup-content strong{font-size:14px}.count-chip,.source-tag{font-size:10px;color:#a4d9b0;border:1px solid #385744;padding:5px 8px;border-radius:5px;white-space:nowrap}.detection-list{height:515px;overflow-y:auto;padding:0 12px 12px}.detection-item{display:flex;align-items:center;gap:12px;width:100%;text-align:left;color:inherit;background:transparent;border:0;border-bottom:1px solid #2b3832;padding:13px 7px;border-radius:4px}.detection-item:hover,.detection-item:focus-visible{background:#293b31}.event-dot{width:11px;height:11px;border-radius:100%;flex-shrink:0;box-shadow:0 0 12px #f2a45330}.event-content{flex:1;min-width:0}.event-content strong{display:block;font-size:12px;font-weight:800}.event-content small{display:block;color:#8da79a;font-size:10px;margin-top:5px}.event-time{font-size:10px;color:#9cbaa9;white-space:nowrap}.empty-state{display:flex;align-items:center;justify-content:center;min-height:160px;text-align:center;padding:18px;color:#a4b7ab;font-size:12px;line-height:1.8}.list-footer{padding:14px 20px;border-top:1px solid #293833;color:#7d988a;font-size:10px}.bottom-panels{display:grid;grid-template-columns:1fr 1fr;gap:18px;margin-top:18px}.info-panel{padding-bottom:11px}.info-panel .panel-header{padding-bottom:5px}.source-row{display:flex;align-items:center;gap:11px;padding:15px 20px;border-bottom:1px solid #2a3531}.source-row:last-child{border-bottom:0}.source-icon{width:34px;height:34px;flex-shrink:0;display:grid;place-items:center;border:1px solid #315142;border-radius:8px;background:#1e382b;color:#acdeb0;font-size:19px}.source-row>div{flex:1;min-width:0}.source-row strong{display:block;font-size:11px;line-height:1.45}.source-row small{display:block;color:#8ba59b;font-size:10px;margin-top:5px;overflow-wrap:anywhere}.source-tag{font-size:8px}.learn{padding-bottom:19px}.learn>p{font-size:11px;line-height:1.8;margin:13px 20px;color:#9aafa5}.learn>p strong{color:#e3eadf}.learn>a{font-size:11px;font-weight:800;margin:7px 20px 0;display:inline-block}footer{font-size:10px;color:#648276;margin-top:25px;line-height:1.7}.mobile-logo{display:none}
@media(max-width:1250px){.sidebar{width:235px;flex-basis:235px}.content{padding:27px 22px}.metric{padding:17px 14px}.metric-value.sm{font-size:20px}.dashboard-grid{grid-template-columns:minmax(0,1.4fr) minmax(260px,.85fr)}.map-container,.detection-list{height:460px}.legend{gap:7px}}
@media(max-width:950px){.sidebar{width:225px;flex-basis:225px}.metrics{grid-template-columns:repeat(2,minmax(0,1fr))}.dashboard-grid,.bottom-panels{grid-template-columns:1fr}.detection-list{height:310px}.map-container{height:470px}.metric{min-height:110px}}
@media(max-width:700px){.app-shell{display:block}.sidebar{width:100%;height:auto;min-height:0;position:static;display:block;border-right:0;border-bottom:1px solid #24332f}.brand{padding:15px}.brand-title{font-size:15px}.brand-sub{font-size:8px}.brand-mark{width:32px;height:32px}.sidebar-scroll{display:grid;grid-template-columns:1fr 1fr;gap:0 12px;padding:12px 15px}.sidebar-scroll>.eyebrow,.sidebar-scroll>.sidebar-divider,.sidebar-scroll>.nav-current,.sidebar-scroll>.nav-label,.sidebar-scroll>.disclaimer,.sidebar-scroll>.official-link,.sidebar-scroll>.segmented,.sidebar-scroll>#opacity,.sidebar-scroll>#opacity-value,.sidebar-scroll>.inline-note,.sidebar-scroll>.setting-row{grid-column:1/-1}.sidebar-scroll>.eyebrow{margin-top:10px;margin-bottom:3px}.sidebar-scroll>.nav-current,.sidebar-scroll>.nav-label,.sidebar-scroll>.sidebar-divider,.sidebar-scroll>.disclaimer,.sidebar-scroll>.official-link{display:none}.sidebar-scroll>label{margin-top:10px!important}.sidebar-scroll>#nafi-layer{grid-column:1/-1}.sidebar-scroll>select{margin-bottom:4px}.sidebar-bottom{display:none}.topbar{padding:0 15px;height:54px}.top-title{font-size:11px}.clock{display:none}.content{padding:24px 13px}.intro-row{align-items:flex-start;gap:15px}.intro-row h1{font-size:26px}.intro-row p{font-size:11px}.refresh-btn{padding:9px 10px;font-size:0}.refresh-btn span{font-size:23px}.metric-value{font-size:28px}.metric-value.sm{font-size:18px}.metric-label{font-size:9px}.metric{min-height:110px}.panel-header{padding:15px}.legend{font-size:9px}.map-container{height:430px;margin:0 7px 7px}.map-bottom span:last-child{display:none}.bottom-panels{gap:12px}}

/* Version 1.1: key-free dark street-map treatment, on raster tiles only.
   Leaves NASA detection markers and transparent NAFI overlays unaffected. */
#map.dark-map .leaflet-tile-pane img.leaflet-tile {
  filter: grayscale(.3) invert(.88) hue-rotate(180deg) brightness(.67) contrast(1.15);
}


/* Leaflet layout resilience patch (v1.2).
   These are the essential layout rules from Leaflet's browser-side conventions.
   Retained locally so blocked/missing CDN CSS cannot collapse map panes to a
   single central tile or hide the vector detection overlays. */
.leaflet-container { position: relative; overflow: hidden; outline-offset: 1px; touch-action: none; -webkit-tap-highlight-color: transparent; }
.leaflet-container.leaflet-touch-drag { touch-action: none; }
.leaflet-container.leaflet-touch-zoom { touch-action: pan-x pan-y; }
.leaflet-pane, .leaflet-tile, .leaflet-marker-icon, .leaflet-marker-shadow,
.leaflet-tile-container, .leaflet-pane > svg, .leaflet-pane > canvas,
.leaflet-zoom-box, .leaflet-image-layer, .leaflet-layer {
  position: absolute; left: 0; top: 0;
}
.leaflet-map-pane { z-index: auto; }
.leaflet-tile-pane { z-index: 200; }
.leaflet-overlay-pane { z-index: 400; }
.leaflet-shadow-pane { z-index: 500; }
.leaflet-marker-pane { z-index: 600; }
.leaflet-tooltip-pane { z-index: 650; }
.leaflet-popup-pane { z-index: 700; }
.leaflet-map-pane canvas { z-index: 100; }
.leaflet-map-pane svg { z-index: 200; }
.leaflet-tile { visibility: hidden; user-select: none; pointer-events: none; }
.leaflet-tile-loaded { visibility: inherit; }
.leaflet-zoom-animated { transform-origin: 0 0; }
.leaflet-zoom-box { width: 0; height: 0; box-sizing: border-box; z-index: 800; border: 2px dotted #38f; background: #ffffff80; }
.leaflet-container .leaflet-overlay-pane svg { max-width: none !important; max-height: none !important; }
.leaflet-container .leaflet-marker-pane img, .leaflet-container .leaflet-shadow-pane img,
.leaflet-container .leaflet-tile-pane img, .leaflet-container img.leaflet-image-layer,
.leaflet-container .leaflet-tile { max-width: none !important; max-height: none !important; }
.leaflet-container .leaflet-tile-pane img.leaflet-tile { width: 256px; height: 256px; }
.leaflet-container .leaflet-control-container { position: relative; z-index: 1000; }
.leaflet-control { position: relative; z-index: 800; pointer-events: auto; }
.leaflet-top, .leaflet-bottom { position: absolute; z-index: 1000; pointer-events: none; }
.leaflet-top { top: 0; } .leaflet-bottom { bottom: 0; }
.leaflet-left { left: 0; } .leaflet-right { right: 0; }
.leaflet-top .leaflet-control { margin-top: 10px; }
.leaflet-bottom .leaflet-control { margin-bottom: 10px; }
.leaflet-left .leaflet-control { margin-left: 10px; }
.leaflet-right .leaflet-control { margin-right: 10px; }
.leaflet-control-zoom { border: 2px solid #0004; border-radius: 5px; overflow: hidden; }
.leaflet-control-zoom a { display: block; width: 30px; height: 30px; line-height: 30px;
  background: #ecf3ed; color: #17241a; text-align: center; font: bold 21px/30px Arial, sans-serif; }
.leaflet-control-zoom a + a { border-top: 1px solid #cdd7d0; }
.leaflet-control-zoom a:hover { background: #fff; text-decoration: none; }
.leaflet-control-zoom a.leaflet-disabled { color: #aaa; background: #e7ece9; }
.leaflet-control-attribution { background: #ffffffd9; color: #333; padding: 0 5px; line-height: 1.5; }
.leaflet-control-attribution a { color: #176394; }
.leaflet-popup { position: absolute; text-align: center; margin-bottom: 20px; }
.leaflet-popup-content-wrapper { text-align: left; border-radius: 9px; box-shadow: 0 3px 14px #0006; }
.leaflet-popup-content { margin: 14px 18px; min-width: 140px; }
.leaflet-popup-tip-container { width: 40px; height: 20px; position: absolute; left: 50%; margin-left: -20px; overflow: hidden; pointer-events: none; }
.leaflet-popup-tip { width: 17px; height: 17px; transform: translate(11px,-9px) rotate(45deg); box-shadow: 0 3px 14px #0006; }
.leaflet-popup-close-button { position: absolute; top: 6px; right: 7px; width: 20px; height: 20px; font: bold 19px/19px sans-serif; text-align: center; color: #dce4d9; z-index: 1; }
.leaflet-popup-close-button:hover { color: #fff; text-decoration: none; }
.leaflet-tooltip { position: absolute; border-radius: 4px; padding: 5px 8px; background: #eef4ed; color: #1a241c; box-shadow: 0 1px 4px #0004; white-space: nowrap; }
.leaflet-interactive { cursor: pointer; }
.leaflet-grab { cursor: grab; } .leaflet-dragging .leaflet-grab { cursor: grabbing; }
.leaflet-container a.leaflet-popup-close-button { color: #dce4d9; }
/* Keep local map controls above map panes but below overlays/other UI. */
.map-fit-btn { position:absolute; top:14px; right:14px; z-index:1001; border:1px solid #506b56;
  border-radius:6px; background:#162820ed; color:#dcf6e0; padding:8px 11px; font-size:11px; font-weight:700;
  box-shadow: 0 3px 8px #0005; }
.map-fit-btn:disabled { opacity:.45; cursor:not-allowed; }
.map-fit-btn:not(:disabled):hover { background:#315c40; }
