:root{--bg:#09100e;--panel:#13201c;--panel2:#1b3029;--text:#edf7f2;--muted:#9fb4ac;--line:#2c473d;--accent:#8fe0b5;--gold:#ebcf82;--danger:#ff8c78;--blue:#8cc8f1}
*{box-sizing:border-box}html,body{height:100%;margin:0}body{display:flex;flex-direction:column;background:var(--bg);color:var(--text);font:14px/1.45 system-ui,-apple-system,Segoe UI,sans-serif;overflow:hidden}a{color:var(--accent)}button,input{font:inherit}
.shell{height:auto;min-height:0;flex:1;display:grid;grid-template-rows:auto 1fr}header{z-index:1001;display:flex;align-items:center;gap:14px;padding:10px 14px;background:rgba(9,16,14,.96);border-bottom:1px solid var(--line);backdrop-filter:blur(10px)}header strong{font-size:18px}.nav{display:flex;gap:7px;overflow-x:auto;white-space:nowrap}.nav a{text-decoration:none;border:1px solid var(--line);border-radius:999px;padding:5px 9px;background:#101b17}.summary{margin-left:auto;color:var(--muted);white-space:nowrap;font-size:12px}
.workspace{min-height:0;display:grid;grid-template-columns:350px 1fr}aside{min-height:0;overflow:auto;padding:14px;border-right:1px solid var(--line);background:linear-gradient(180deg,var(--panel2),var(--panel))}#map{height:100%;width:100%;min-height:0;background:#0b1512}h1{font-size:22px;margin:0 0 4px}h2{font-size:14px;margin:18px 0 7px;color:#d9e8e2}.lede{margin:0;color:#c7d8d1}.eyebrow{color:var(--accent);font-size:10px;font-weight:800;letter-spacing:.12em;text-transform:uppercase}
.stats{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:7px;margin:12px 0}.stat{padding:9px;border:1px solid var(--line);border-radius:10px;background:rgba(8,15,13,.45)}.stat strong{display:block;font-size:18px}.stat span{color:var(--muted);font-size:11px}.filters{display:grid;gap:8px;margin:12px 0}.filters input[type=search]{width:100%;padding:9px 10px;border-radius:9px;border:1px solid var(--line);background:#0e1815;color:var(--text)}.check{display:flex;gap:8px;align-items:center;color:#d7e5df}.small-action{padding:7px 10px;border:1px solid var(--line);border-radius:9px;background:#101b17;color:var(--text);cursor:pointer}
.callout{margin:12px 0;padding:10px;border:1px solid #5b5131;background:#211f15;border-radius:10px;color:#e8d99d;font-size:12px}.layer-row{display:flex;align-items:flex-start;gap:8px;padding:7px 0;border-bottom:1px solid rgba(255,255,255,.06)}.layer-row input{margin-top:3px}.layer-row small{display:block;color:var(--muted)}.source-list{display:grid;gap:7px}.source-card{padding:9px;border:1px solid var(--line);border-radius:10px;background:rgba(8,15,13,.42)}.source-card strong{display:block}.source-card small{color:var(--muted)}.legend{display:flex;flex-wrap:wrap;gap:8px;font-size:11px;color:var(--muted)}.dot{width:10px;height:10px;border-radius:50%;display:inline-block;margin-right:4px;vertical-align:-1px}
.map-chip{display:flex;align-items:center;justify-content:center;width:36px;height:36px;border-radius:50%;border:2px solid white;box-shadow:0 1px 5px rgba(0,0,0,.5);font-weight:900;color:#08110e;background:#8fe0b5}.map-chip.route-none{background:#80918a;color:white}.map-chip.route-low{background:#8fe0b5}.map-chip.route-medium{background:#ebcf82}.map-chip.route-high{background:#ff8c78}.map-chip.route-unknown{background:#b3c0bb}.map-chip.weather{width:auto;min-width:48px;height:32px;border-radius:16px;padding:0 8px;background:#d8f6ea;font-size:11px}.map-chip.news{width:auto;min-width:42px;height:32px;border-radius:16px;padding:0 7px;background:#8cc8f1}.map-chip.news.urgent{background:#ff9b84}.map-chip.aqi-good{background:#8fe0b5}.map-chip.aqi-moderate{background:#f3da76}.map-chip.aqi-sensitive{background:#f0a25f}.map-chip.aqi-unhealthy{background:#eb6f67;color:white}.map-chip.aqi-very-unhealthy{background:#b77bd8;color:white}.map-chip.aqi-hazardous{background:#7e3b4b;color:white}.map-chip.aqi-unknown{background:#b3c0bb}
.popup-title{font-weight:800;font-size:15px;margin-bottom:4px}.popup-meta{color:#56635e;font-size:12px;margin-bottom:7px}.popup-links{display:flex;flex-wrap:wrap;gap:7px;margin-top:8px}.popup-links a{font-weight:700}.popup-warning{margin-top:8px;padding:6px;border-radius:6px;background:#fff5dd;color:#695116;font-size:11px}.popup-status{margin:8px 0;padding:7px;border-radius:7px;background:#edf7f2;color:#1c342b}.popup-status.none{background:#edf0ef;color:#46534f}.popup-news{margin:7px 0;padding-top:7px;border-top:1px solid #d5ddd9}.popup-news a{font-weight:700;color:#246a52}.popup-news small{display:block;color:#66746f}.leaflet-popup-content{min-width:235px;max-width:320px}
.load-status{position:absolute;z-index:800;right:10px;bottom:10px;max-width:380px;padding:8px 10px;border-radius:8px;background:rgba(9,16,14,.9);border:1px solid var(--line);color:#d7e6e0;font-size:11px;pointer-events:none}.load-status:empty{display:none}
.map-chip.store{width:auto;min-width:44px;height:32px;border-radius:16px;padding:0 7px;background:#d4b3ff}.store-list{margin:7px 0}.store-list a{font-weight:700}.store-list small{display:block;color:#66746f}

/* Leaflet structural fallback.
   The page still loads Leaflet's official stylesheet, but these rules keep tiles,
   markers, popups and controls correctly positioned if that CDN stylesheet is
   blocked or slow. Without them Leaflet tile <img> elements participate in
   normal document flow and produce the broken mosaic seen on the Explorer. */
.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-container{position:relative;overflow:hidden;outline:0;-webkit-tap-highlight-color:transparent}
.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;width:auto;padding:0}
.leaflet-tile,.leaflet-marker-icon,.leaflet-marker-shadow{user-select:none;-webkit-user-drag:none}
.leaflet-tile{visibility:hidden}.leaflet-tile-loaded{visibility:inherit}
.leaflet-pane{z-index:400}.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-marker-icon,.leaflet-marker-shadow,.leaflet-image-layer,.leaflet-pane>svg path,.leaflet-tile-container{pointer-events:none}.leaflet-marker-icon.leaflet-interactive,.leaflet-image-layer.leaflet-interactive,.leaflet-pane>svg path.leaflet-interactive,svg.leaflet-image-layer.leaflet-interactive path{pointer-events:auto}
/* Leaflet's JavaScript derives its default marker image directory from this rule.
   Keep it absolute so default GeoJSON point markers do not resolve to missing
   marker-icon.png files beside the generated report when the CDN CSS is late. */
.leaflet-default-icon-path{background-image:url("https://unpkg.com/leaflet@1.9.4/dist/images/marker-icon.png")}
.leaflet-top,.leaflet-bottom{position:absolute;z-index:1000;pointer-events:none}.leaflet-top{top:0}.leaflet-right{right:0}.leaflet-bottom{bottom:0}.leaflet-left{left:0}.leaflet-control{position:relative;z-index:800;pointer-events:auto;clear:both}.leaflet-left .leaflet-control{float:left;margin-left:10px}.leaflet-right .leaflet-control{float:right;margin-right:10px}.leaflet-top .leaflet-control{margin-top:10px}.leaflet-bottom .leaflet-control{margin-bottom:10px}
.leaflet-bar{box-shadow:0 1px 5px rgba(0,0,0,.65);border-radius:4px}.leaflet-bar a{background:#fff;border-bottom:1px solid #ccc;width:30px;height:30px;line-height:30px;display:block;text-align:center;text-decoration:none;color:#111}.leaflet-bar a:hover,.leaflet-bar a:focus{background:#f4f4f4}.leaflet-bar a:first-child{border-radius:4px 4px 0 0}.leaflet-bar a:last-child{border-bottom:0;border-radius:0 0 4px 4px}.leaflet-control-zoom-in,.leaflet-control-zoom-out{font:bold 20px 'Lucida Console',Monaco,monospace}
.leaflet-control-attribution,.leaflet-control-scale-line{padding:0 5px;color:#333;line-height:1.4}.leaflet-container .leaflet-control-attribution{background:rgba(255,255,255,.82);margin:0}.leaflet-control-scale-line{border:2px solid #777;border-top:0;padding:2px 5px 1px;white-space:nowrap;background:rgba(255,255,255,.82);text-shadow:1px 1px #fff}
.leaflet-popup{position:absolute;text-align:center;margin-bottom:20px}.leaflet-popup-content-wrapper{padding:1px;text-align:left;border-radius:12px;background:#fff;color:#333;box-shadow:0 3px 14px rgba(0,0,0,.35)}.leaflet-popup-content{margin:13px 19px;line-height:1.4}.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;padding:1px;margin:-10px auto 0;transform:rotate(45deg);background:#fff;box-shadow:3px 3px 15px rgba(0,0,0,.22)}.leaflet-popup-close-button{position:absolute;top:0;right:0;border:0;text-align:center;width:24px;height:24px;font:16px/24px Tahoma,Verdana,sans-serif;color:#757575;text-decoration:none;background:transparent;z-index:2}

@media(max-width:820px){body{display:block;overflow:auto}.shell{height:auto;min-height:100%}.workspace{grid-template-columns:1fr;grid-template-rows:auto 72vh}aside{border-right:0;border-bottom:1px solid var(--line);max-height:none}header{align-items:flex-start;flex-wrap:wrap}.summary{margin-left:0;width:100%}#map{min-height:540px}}
