.page-map{--primary:#545cbb;--primary-dark:#343c85;--accent:#159c89;--ink:#252a49;--muted:#717991;--bg:#f7f8fc;--topbar-h:78px;--border:#e7ecf3;height:auto;min-height:100%;overflow:auto;background:var(--bg);background-image:radial-gradient(ellipse 800px 700px at 95% 10%,#dff4ee45,transparent)}.page-map button,.page-map select{font:inherit}.page-map button,.page-map a{-webkit-tap-highlight-color:transparent}.page-map button{cursor:pointer}.page-map button:disabled{opacity:.5;cursor:default}.page-map button:focus-visible,.page-map a:focus-visible,.page-map select:focus-visible,.air-chart:focus-visible{outline:2px solid var(--primary);outline-offset:4px}.dashboard{width:min(1480px,100%);padding:calc(var(--topbar-h) + 36px) 38px 20px;margin:auto}.dashboard-heading{display:flex;align-items:center;justify-content:space-between;gap:22px;margin-bottom:28px}.section-kicker{display:flex;align-items:center;gap:8px;margin:0 0 11px;color:#98a0b6;font-size:9px;font-weight:650;letter-spacing:1.8px;line-height:1.5}.tiny-orbit{width:6px;height:6px;background:#4ba991;border-radius:50%;box-shadow:0 0 0 4px #54ad9411;animation:breathe-dot 3s ease-in-out infinite}@keyframes breathe-dot{50%{box-shadow:0 0 0 7px #54ad9400}}.dashboard-heading h1{margin:0;font-size:clamp(25px,2.6vw,37px);line-height:1.2;font-weight:650;letter-spacing:-1.2px}.dashboard-heading h1 span{color:#658c96}.page-intro{margin:11px 0 0;color:#8a92a8;font-size:12px;line-height:1.7}.coverage-pill{display:flex;align-items:center;gap:12px;padding:13px 18px;border:1px solid #e3ebe9;border-radius:14px;background:#ffffff90;flex:none}.coverage-pill>.pi{color:#4e9c90;font-size:21px}.coverage-pill strong,.coverage-pill span{display:block}.coverage-pill strong{font-size:11px;font-weight:550;color:#536f79}.coverage-pill span{font-size:10px;margin-top:4px;color:#9aa8b2}.map-layout,.details-layout{display:grid;grid-template-columns:minmax(0,1fr) 340px;gap:22px;align-items:stretch}.map-card,.region-card,.chart-card,.pollutants-card,.stations-card{background:#fff;border:1px solid var(--border);border-radius:23px;box-shadow:0 6px 24px #3b497004;min-width:0}.map-card{position:relative;overflow:hidden;background:linear-gradient(145deg,#fff,#f7fafc)}.map-card-top{display:flex;align-items:start;justify-content:space-between;padding:24px 26px 0;gap:10px}.map-card h2,.card-heading h2{margin:0;font-size:16px;letter-spacing:-.35px;font-weight:600}.map-card-top p{margin:7px 0 0;font-size:10px;color:#9aa4b7;line-height:1.6}.map-view-label{display:flex;align-items:center;gap:6px;font-size:10px;color:#91a3b5;margin-top:3px;flex:none}.map-view-label span{width:5px;height:5px;border-radius:50%;background:#8fa2b4}.map-canvas{position:relative;height:415px;isolation:isolate;background-image:radial-gradient(#8499ae22 .65px,transparent .65px);background-size:18px 18px}.page-map .map{width:100%;height:100%;padding:22px 20px 28px;overflow:visible}.page-map #viewport{transition:transform .5s cubic-bezier(.22,1,.36,1);transform-origin:0 0}.page-map #viewport.instant{transition:none}.page-map .region{--region-color:#b5c7da;fill:color-mix(in srgb,var(--region-color) 46%,#f4f8fc);stroke:#fff;stroke-width:1.8px;stroke-linejoin:round;cursor:pointer;transition:fill .55s ease,filter .3s ease,stroke .3s ease}.page-map .region:hover{fill:color-mix(in srgb,var(--region-color) 68%,#f4f8fc);filter:drop-shadow(0 5px 6px #4a597320)}.page-map .region.selected{fill:color-mix(in srgb,var(--region-color) 80%,#e8f7f4);stroke:#fff;stroke-width:2.4px;filter:drop-shadow(0 5px 6px #537c872b)}.page-map .region:focus-visible{stroke:var(--primary);stroke-width:3px}.region-marker{cursor:pointer}.marker-pill{fill:#ffffffed;stroke:#fff;stroke-width:.8px;filter:drop-shadow(0 2px 4px #38455e12)}.marker-value{font:600 13px -apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;fill:#567282}.marker-name{font:500 10px -apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;fill:#5e7c8e;paint-order:stroke;stroke:#f2f6fa;stroke-width:2.5px;stroke-linejoin:round;pointer-events:none}.marker-leader{stroke:#688a9d;stroke-width:1.5}.marker-halo{fill:none;stroke:var(--region-color);stroke-width:1px;opacity:0}.region-marker.selected .marker-pill{fill:#344f65;stroke:#344f65}.region-marker.selected .marker-value{fill:#fff}.region-marker.selected .marker-name{font-weight:750}.region-marker.selected .marker-halo{animation:map-ripple 3s ease-out infinite;transform-box:fill-box;transform-origin:center}@keyframes map-ripple{0%{opacity:.55;transform:scale(.7)}90%,to{opacity:0;transform:scale(1.65)}}.map-water{position:absolute;left:6%;bottom:16%;font-size:7px;color:#b5c9d7;line-height:1.8;letter-spacing:2px;transform:rotate(-70deg);pointer-events:none}.map-controls{position:absolute;right:20px;bottom:28px;display:flex;flex-direction:column;padding:3px;border:1px solid #e4eaf1;background:#ffffffde;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border-radius:11px;box-shadow:0 4px 12px #596e8410}.map-controls button{width:29px;height:29px;display:grid;place-items:center;color:#8391ab;border:0;background:transparent;border-radius:7px}.map-controls button:hover{background:#eef2f8;color:var(--primary)}.map-controls .pi{font-size:11px}.map-gesture{position:absolute;left:24px;bottom:6px;font-size:8px;color:#aab3c2;display:flex;align-items:center;gap:6px;pointer-events:none}.map-gesture .pi{font-size:10px}.map-tooltip{position:absolute;z-index:5;pointer-events:none;width:215px;padding:12px 14px;border:1px solid #e0e7f0;border-radius:12px;background:#ffffffef;box-shadow:0 9px 25px #4c62731c;-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px)}.map-tooltip strong,.map-tooltip span,.map-tooltip small{display:block}.map-tooltip strong{font-size:11px;line-height:1.5}.map-tooltip span{font-size:11px;color:#667f90;margin-top:5px}.map-tooltip small{font-size:8px;margin-top:7px;color:#9aa7b5}.map-legend{display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:12px;padding:14px 12px 0}.map-legend span{display:flex;align-items:center;gap:5px;font-size:8px;color:#96a0b3;white-space:nowrap}.map-legend i{width:6px;height:6px;border-radius:2px;background:var(--sw)}.map-caption{font-size:8px;line-height:1.6;color:#a2acbb;text-align:center;margin:11px 16px 18px}.region-card{padding:23px;position:relative;overflow:hidden;background:radial-gradient(ellipse 200px 160px at 50% 38%,#e8f7f15e,transparent),#fff}.region-card-top{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:15px}.region-card-top .section-kicker{margin:0}.model-pill{font-size:8px;color:#6c9d8e;background:#f0f8f4;border:1px solid #e4f0e9;padding:5px 8px;border-radius:20px;display:flex;gap:5px;align-items:center}.model-pill .pi{font-size:9px}.region-select-label{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%)}.select-wrap{position:relative}.select-wrap select{-webkit-appearance:none;-moz-appearance:none;appearance:none;display:block;width:100%;min-width:0;border:1px solid #e7edf4;border-radius:10px;color:#7d87a0;background:#f9fafc;padding:10px 26px 10px 12px;font-size:10px;cursor:pointer;text-overflow:ellipsis}.select-wrap .pi{pointer-events:none;position:absolute;right:11px;top:12px;font-size:9px;color:#8e9ab0}#region-title{min-height:42px;font-size:17px;line-height:1.35;letter-spacing:-.35px;font-weight:600;margin:18px 0 5px}.region-city{display:flex;align-items:center;gap:5px;color:#93a0b0;font-size:9px;flex-wrap:wrap;margin:0}.region-city .pi{font-size:10px;color:#78a193}#region-time{font-size:8px;color:#adb5c2}.aqi-orbit{--quality:#b5c7da;position:relative;width:180px;height:143px;margin:10px auto -5px}.aqi-ring{width:100%;height:100%;overflow:visible}.aqi-ring path{fill:none;stroke-width:7px;stroke-linecap:round}.ring-track{stroke:#edf3f1}.ring-value{stroke:var(--quality);stroke-dasharray:0 100;transition:stroke-dasharray 1.15s cubic-bezier(.22,1,.36,1),stroke .4s;filter:drop-shadow(0 0 6px color-mix(in srgb,var(--quality) 20%,transparent))}.aqi-number{position:absolute;inset:36px 0 auto;text-align:center}.aqi-number strong{font-size:53px;font-weight:550;letter-spacing:-3px;line-height:1;color:#405d60;font-variant-numeric:tabular-nums}.aqi-number span{display:block;margin-top:7px;color:#a7b7b5;letter-spacing:1.9px;font-size:9px}.orbit-signal{width:4px;height:4px;border-radius:50%;position:absolute;bottom:3px;left:calc(50% - 2px);background:var(--quality);box-shadow:0 0 0 5px color-mix(in srgb,var(--quality) 8%,transparent);animation:signal-breathe 3s ease-in-out infinite}@keyframes signal-breathe{50%{box-shadow:0 0 0 9px color-mix(in srgb,var(--quality) 0%,transparent)}}.quality-label{font-size:14px;font-weight:600;text-align:center;margin:18px 0 5px;color:#9aa9b8}.quality-note{font-size:9px;color:#a1acb7;text-align:center;margin:0;line-height:1.5}.weather-row{display:grid;grid-template-columns:repeat(3,1fr);margin:18px 0 16px;padding:15px 0 0;border-top:1px solid #edf1f4}.weather-row div{text-align:center;border-right:1px solid #edf1f4}.weather-row div:last-child{border:0}.weather-row .pi{font-size:11px;color:#a3b1c2;margin-right:5px}.weather-row strong{font-size:14px;font-weight:550;color:#6e8098}.weather-row span{display:block;margin-top:5px;font-size:8px;color:#a7afbe}.eco-ask{width:100%;display:flex;align-items:center;justify-content:center;gap:8px;border:1px solid #e8eafa;border-radius:11px;background:#f0f1fc;color:#6b72ba;padding:12px 9px;font-size:10px!important;transition:background .2s,transform .2s}.eco-ask .pi:last-child{margin-left:auto;font-size:10px}.eco-ask .pi:first-child{margin-right:auto;font-size:13px}.eco-ask:hover{background:#e8ebfc;transform:translateY(-1px)}.region-error{font-size:10px;line-height:1.6;color:#ac8077;margin:12px 0 0}.region-card.is-loading .aqi-orbit{animation:loading-soft 1.5s ease-in-out infinite}@keyframes loading-soft{50%{opacity:.4}}.details-layout{margin-top:22px}.chart-card,.pollutants-card{padding:23px 25px 19px}.card-heading{display:flex;align-items:center;justify-content:space-between;gap:14px}.card-heading .section-kicker{margin-bottom:8px;font-size:8px}.card-heading h2 span{display:inline-block;font-size:10px;font-weight:450;color:#97a0b7;margin-left:7px;letter-spacing:0}.chart-tabs{display:flex;align-items:center;background:#f5f6fc;border-radius:8px;padding:3px;gap:3px}.chart-tabs button{border:0;padding:7px 10px;border-radius:6px;color:#9da6bf;background:transparent;font-size:9px}.chart-tabs button.active{color:#6770bd;background:#fff;box-shadow:0 2px 5px #42557609}.chart-summary{display:flex;align-items:baseline;gap:8px;margin:19px 0 9px}.chart-summary strong{font-size:25px;color:#6471a3;font-weight:550;letter-spacing:-.7px}.chart-summary>span{font-size:9px;color:#a7afc2}.chart-summary .chart-period{margin-left:auto;display:flex;align-items:center;gap:7px;font-size:8px}.chart-period .pi{font-size:9px}.air-chart,#station-chart{position:relative;width:100%;height:202px;min-width:0}.plot-svg{display:block;width:100%;height:100%;overflow:visible}.plot-svg text{font:9px -apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;fill:#a4aec3}.chart-grid-line{stroke:#edf0f6;stroke-dasharray:3 5;stroke-width:1}.chart-line{fill:none;stroke-width:2.6px;stroke-linecap:round;stroke-linejoin:round}.chart-line.is-forecast{stroke-dasharray:4 5;opacity:.7}.plot-reveal{animation:reveal-plot 1.1s cubic-bezier(.22,1,.36,1) both}@keyframes reveal-plot{0%{width:0}}.chart-now{stroke:#cfd6ea;stroke-dasharray:3 4}.chart-crosshair line{stroke:#aebbd6;stroke-dasharray:3 4}.chart-crosshair circle{stroke:#fff;stroke-width:2.5}.chart-hover{position:absolute;top:0;background:#fff;border:1px solid #e3e8f2;box-shadow:0 6px 20px #41577413;border-radius:9px;padding:9px 11px;pointer-events:none;z-index:2;min-width:145px}.chart-hover strong{display:block;font-size:11px;font-weight:600;color:#5d6d9c}.chart-hover span{display:block;font-size:8px;margin-top:4px;color:#a0a9bd}.chart-footer{display:flex;align-items:center;flex-wrap:wrap;gap:13px;font-size:8px;color:#a8b0c2;margin-top:7px}.chart-footer>span{display:inline-flex;align-items:center;gap:5px}.chart-footer>span:last-child{margin-left:auto}.chart-key{width:12px;height:0;border-top:2px solid #7f8bce}.chart-key.dashed{border-top-style:dashed;opacity:.65}.chart-empty,.chart-loading{display:flex;align-items:center;justify-content:center;gap:10px;margin:0;height:100%;min-height:150px;color:#a1acc0;font-size:11px;text-align:center}.chart-loading .pi{font-size:14px}.pollutants-card .card-heading>.pi{color:#b4bfd1;font-size:15px}.pollutant-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:10px;margin:20px 0 13px}.pollutant{border:1px solid #edf0f5;border-radius:11px;padding:12px 13px;background:linear-gradient(135deg,#fbfcfe,#fff);animation:tile-in .55s ease both;animation-delay:var(--delay)}@keyframes tile-in{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}.pollutant-name{color:#98a5b9;font-size:9px;font-weight:500}.pollutant strong{display:block;font-size:19px;font-weight:550;letter-spacing:-.35px;color:#617a90;margin-top:5px}.pollutant>span:last-child{display:block;font-size:7px;color:#abb4c3;margin-top:3px}.detail-caption{font-size:8px;color:#a8b1c2;line-height:1.75;margin:0}.data-skeleton{height:81px;border-radius:10px;background:linear-gradient(100deg,#f4f6fa 30%,#fafbff,#f4f6fa 70%);background-size:300% 100%;animation:skeleton-sweep 1.5s linear infinite}@keyframes skeleton-sweep{to{background-position:-150% 0}}.stations-card{padding:23px 25px;margin-top:22px}.station-status{color:#a1acbd;font-size:10px;line-height:1.8;margin:16px 0 0}.text-button{border:none;background:transparent;display:inline-flex;gap:6px;align-items:center;color:#909ab2;padding:7px 0 7px 10px;font-size:10px!important}.text-button:hover{color:var(--primary)}.text-button .pi{font-size:11px}.station-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:11px}.station-grid:not(:empty){margin-top:17px}.station-tile{min-width:0;display:flex;align-items:center;gap:11px;background:#fafcfd;border:1px solid #ecf0f4;border-radius:12px;padding:14px 12px;text-align:left;transition:background .2s,border-color .2s}.station-tile:hover{background:#fff;border-color:#c5dbd7}.station-index{background:color-mix(in srgb,var(--station-color) 12%,white);color:var(--station-color);border-radius:9px;min-width:39px;height:39px;display:grid;place-items:center;font-size:14px;font-weight:600}.station-tile>span:nth-child(2){min-width:0}.station-tile strong{font-size:10px;color:#65758d;font-weight:550;display:block;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.station-tile small{display:block;margin-top:5px;font-size:8px;color:#a3adbd;line-height:1.5}.station-tile>.pi{color:#b0baca;font-size:13px;margin-left:auto}.station-history{margin-top:20px;padding-top:20px;border-top:1px solid #edf1f6}.station-history h3{margin:0;font-size:12px;font-weight:550;color:#8393ab}.station-history p{font-size:9px;color:#a3b0c1}.dashboard-footer{display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:14px;color:#9da8bc;padding:25px 2px 9px;font-size:9px}.dashboard-footer>div{display:flex;align-items:center;gap:8px}.footer-pulse{color:#7c9b96;font-size:16px}.dashboard-footer div>span:last-child{color:#b3bdcb;font-size:8px;margin-left:8px}.dashboard-footer p{margin:0;font-size:8px;color:#b5bdca}.dashboard-footer a{color:#939fb6;text-decoration:none}.dashboard-footer a:hover{text-decoration:underline}@media (min-width:1450px){.map-canvas{height:440px}}@media (max-width:1100px){.dashboard{padding-left:24px;padding-right:24px}.map-layout,.details-layout{grid-template-columns:minmax(0,1fr) 305px;gap:17px}.region-card{padding:20px}.map-card-top{padding:21px 20px 0}.map-canvas{height:370px}.chart-card,.pollutants-card{padding:21px 20px 17px}.chart-tabs button{padding:7px 8px}.card-heading h2 span{display:block;margin:5px 0 0}.coverage-pill{padding:11px 14px}.dashboard-heading h1{font-size:29px}.station-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (max-width:850px){.dashboard{padding-top:calc(var(--topbar-h) + 26px)}.dashboard-heading{align-items:start}.dashboard-heading h1{font-size:27px}.coverage-pill{display:none}.map-layout,.details-layout{grid-template-columns:minmax(0,1fr)}.map-canvas{height:350px}.region-card{display:grid;grid-template-columns:1fr 200px;column-gap:26px;align-items:start}.region-card-top,.select-wrap{grid-column:1}#region-title{grid-column:1;min-height:0;margin-top:17px}.region-city{grid-column:1;margin-top:4px}.aqi-orbit{grid-column:2;grid-row:1 / span 4;margin:-2px auto 0}.quality-label{grid-column:2;grid-row:5;margin-top:0}.quality-note{grid-column:2;grid-row:6}.weather-row{grid-column:1;grid-row:5 / span 2;margin-bottom:0}.eco-ask{grid-column:1 / -1;margin-top:18px}.region-error{grid-column:1 / -1}.pollutant-grid{grid-template-columns:repeat(3,1fr)}.pollutant>span:last-child{font-size:8px}.air-chart{height:220px}.marker-name{font-size:9px}}@media (max-width:640px){.page-map{--topbar-h:66px}.dashboard{padding:calc(var(--topbar-h) + 25px) 15px 12px}.dashboard-heading{margin-bottom:22px}.dashboard-heading h1{font-size:25px;max-width:360px;line-height:1.28;letter-spacing:-.8px}.dashboard-heading h1 span{display:block}.section-kicker{font-size:8px;letter-spacing:1.6px}.page-intro{font-size:11px;max-width:310px;line-height:1.8;margin-top:9px}.map-card,.region-card,.chart-card,.pollutants-card,.stations-card{border-radius:18px}.map-card-top{padding:20px 18px 0}.map-card h2{font-size:14px}.map-card-top p{font-size:9px;max-width:205px}.map-view-label{font-size:9px}.map-canvas{height:270px}.page-map .map{padding:14px 7px 27px}.marker-name{display:none}.marker-pill{stroke-width:1.5px}.marker-value{font-size:13px}.map-gesture{font-size:7px;left:16px;bottom:1px;max-width:230px;line-height:1.6}.map-controls{right:11px;bottom:27px}.map-controls button{width:28px;height:29px}.map-legend{gap:9px;padding:10px 16px 0}.map-legend span{font-size:7px}.map-caption{font-size:8px;margin-bottom:16px}.map-water{font-size:6px;left:6%;bottom:29%;letter-spacing:1px}.region-card{padding:19px;grid-template-columns:minmax(0,1fr) 132px;column-gap:13px}.region-card-top{grid-column:1 / -1;margin-bottom:15px}.select-wrap{grid-column:1 / -1}.select-wrap select{font-size:12px;padding:11px 25px 11px 12px}#region-title{margin-top:20px;font-size:15px;line-height:1.5}.region-city{font-size:10px;gap:5px;align-self:start}#region-time{font-size:8px}.aqi-orbit{grid-row:3 / span 3;width:131px;height:112px;margin-top:9px}.aqi-number{inset:32px 0 auto}.aqi-number strong{font-size:39px;letter-spacing:-2px}.aqi-number span{margin-top:5px;font-size:7px}.quality-label{grid-row:6;font-size:12px;margin-top:5px}.quality-note{grid-row:7;font-size:7px}.weather-row{grid-row:6 / span 2;margin-top:8px;padding-top:12px}.weather-row strong{font-size:12px}.weather-row .pi{display:none}.weather-row span{font-size:7px}.eco-ask{grid-row:8;font-size:11px!important;padding:13px 12px}.model-pill{font-size:9px}.chart-card,.pollutants-card,.stations-card{padding:20px 18px}.details-layout,.stations-card{margin-top:17px}.card-heading h2{font-size:14px}.card-heading h2 span{font-size:9px}.chart-tabs button{font-size:8px;padding:7px}.chart-summary .chart-period{font-size:7px}.air-chart{height:174px}.chart-footer{gap:9px;font-size:7px}.chart-footer>span:last-child{width:100%;margin:1px 0 0}.pollutant-grid{gap:8px;margin-top:17px}.pollutant{padding:12px 10px}.pollutant-name{font-size:9px}.pollutant strong{font-size:19px}.pollutant>span:last-child{font-size:7px;min-height:17px;line-height:1.6}.station-grid{grid-template-columns:1fr}.station-tile strong{font-size:11px}.station-tile small{font-size:9px}.dashboard-footer{gap:12px;padding:22px 4px 10px}.dashboard-footer div>span:last-child{display:none}}@media (prefers-reduced-motion:reduce){.page-map *,.page-map *:before,.page-map *:after{animation:none!important;transition:none!important}}
