/* ASPAK Connect Map v2 — database-driven choropleth */
.map-kpi-grid{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:12px;margin-bottom:18px}.map-kpi{padding:15px 16px;border:1px solid var(--line);border-radius:14px;background:linear-gradient(145deg,var(--s2),#0b192a)}.map-kpi span,.map-kpi small{display:block;color:var(--muted)}.map-kpi span{font-size:.72rem;text-transform:uppercase;letter-spacing:.05em}.map-kpi strong{display:block;font-size:1.55rem;margin:4px 0}.map-kpi small{font-size:.68rem}.map-kpi.health{border-color:rgba(64,209,139,.35)}.map-kpi.warning{border-color:rgba(246,196,83,.35)}
.map-layout-v2{grid-template-columns:minmax(0,1.9fr) minmax(340px,.72fr)}.map-panel-v2{overflow:hidden}.map-panel-heading{align-items:flex-end}.map-toolbar{display:flex;align-items:flex-end;gap:10px;flex-wrap:wrap}.map-indicator-label{display:grid;gap:4px;min-width:245px}.map-indicator-label span{font-size:.68rem;color:var(--muted);text-transform:uppercase;letter-spacing:.05em}.map-indicator-label select{padding:7px 34px 7px 10px}
.province-map-stage{position:relative;min-height:540px;background:#f8fafc;border:1px solid #d8e1eb;display:grid;place-items:center;overflow:hidden}.province-map-stage.compact{min-height:350px}.province-map-svg{width:100%;height:auto;max-height:600px;overflow:visible}.province-map-svg [data-map-viewport]{transition:transform .2s ease}.province-map-svg path.land{fill:#d0d0d0;stroke:#fff;stroke-width:.55px;vector-effect:non-scaling-stroke;transition:fill .22s ease,opacity .18s ease,stroke .18s ease;cursor:pointer;outline:none}.province-map-svg path.land:hover,.province-map-svg path.land:focus{opacity:.82;stroke:#172033;stroke-width:1.1px}.province-map-svg path.map-neighbour{fill:#edf1f5!important;opacity:.68;pointer-events:none}.province-map-svg .map-no-data{fill:#d0d0d0!important}.province-map-svg .map-score-0-20{fill:#ef4444!important}.province-map-svg .map-score-21-40{fill:#f59e0b!important}.province-map-svg .map-score-41-60{fill:#fde047!important}.province-map-svg .map-score-61-80{fill:#34d399!important}.province-map-svg .map-score-81-100{fill:#2d9cdb!important}.province-map-svg path.map-selected{stroke:#111827!important;stroke-width:2px!important;filter:drop-shadow(0 0 4px rgba(17,24,39,.45))}
.papua-province-inset{cursor:pointer;outline:none}.papua-inset-halo{fill:#fff;stroke:#111827;stroke-width:1;opacity:.9}.papua-inset-dot{stroke:#fff;stroke-width:1.3}.papua-province-inset.map-no-data .papua-inset-dot{fill:#d0d0d0}.papua-province-inset.map-score-0-20 .papua-inset-dot{fill:#ef4444}.papua-province-inset.map-score-21-40 .papua-inset-dot{fill:#f59e0b}.papua-province-inset.map-score-41-60 .papua-inset-dot{fill:#fde047}.papua-province-inset.map-score-61-80 .papua-inset-dot{fill:#34d399}.papua-province-inset.map-score-81-100 .papua-inset-dot{fill:#2d9cdb}.papua-province-inset text{fill:#111827;stroke:#fff;stroke-width:2px;paint-order:stroke;font-size:7px;font-weight:900}.papua-province-inset:hover .papua-inset-halo,.papua-province-inset:focus .papua-inset-halo,.papua-province-inset.map-selected-inset .papua-inset-halo{r:12;stroke:#2563eb;stroke-width:2px}
.province-map-legend{position:absolute;left:14px;bottom:14px;z-index:5;display:grid;gap:5px;min-width:220px;padding:11px 13px;border:1px solid #d1d5db;border-radius:10px;background:rgba(255,255,255,.96);color:#1f2937;box-shadow:0 8px 24px rgba(15,23,42,.12);font-size:.7rem}.province-map-legend strong{font-size:.75rem}.province-map-legend span{display:flex;align-items:center;gap:7px}.map-color{width:15px;height:15px;border:1px solid rgba(17,24,39,.3);border-radius:2px;display:inline-block}.map-color.no-data{background:#d0d0d0}.map-color.score-0-20{background:#ef4444}.map-color.score-21-40{background:#f59e0b}.map-color.score-41-60{background:#fde047}.map-color.score-61-80{background:#34d399}.map-color.score-81-100{background:#2d9cdb}.compact-legend{grid-template-columns:repeat(2,auto);min-width:0}
.map-tooltip{position:absolute;z-index:20;max-width:340px;padding:8px 10px;border-radius:8px;background:rgba(17,24,39,.95);color:#fff;font-size:.72rem;box-shadow:0 8px 24px rgba(0,0,0,.22);pointer-events:none}.map-tooltip small{color:#d1d5db}.map-zoom-controls{position:absolute;right:14px;top:14px;z-index:8;display:grid;gap:7px}.map-zoom-controls button{width:36px;height:36px;border:0;border-radius:8px;background:#1667b1;color:#fff;font-size:1.05rem;font-weight:900;box-shadow:0 5px 12px rgba(15,23,42,.18)}.map-zoom-controls button:first-child{background:#218838}.map-zoom-controls button:nth-child(2){background:#c9302c}.map-zoom-controls button:hover{filter:brightness(1.08);transform:translateY(-1px)}
.map-method-note{margin-top:11px;padding:10px 12px;border:1px solid var(--line);border-radius:10px;background:rgba(74,168,255,.06);color:var(--muted);font-size:.72rem}.map-detail-v2{min-height:640px;max-height:calc(100vh - 170px);overflow:auto}.region-summary h3{margin-bottom:5px}.health-pill{display:inline-flex;padding:4px 9px;border-radius:999px;font-size:.72rem;font-weight:900;background:rgba(145,169,197,.15);color:var(--muted)}.tone-score-0-20,.tone-red{color:#ff9aa4!important}.tone-score-21-40,.tone-orange{color:#ffc267!important}.tone-score-41-60,.tone-yellow{color:#fff189!important}.tone-score-61-80,.tone-green{color:#79e8b7!important}.tone-score-81-100,.tone-blue{color:#80cfff!important}.tone-no-data{color:var(--muted)!important}
.health-metric-row{display:grid;grid-template-columns:115px 48px 1fr;gap:8px;align-items:center;padding:5px 0;font-size:.73rem}.health-metric-row span{color:var(--muted)}.health-metric-row i{height:6px;border-radius:99px;background:rgba(145,169,197,.16);overflow:hidden}.health-metric-row i b{display:block;height:100%;background:linear-gradient(90deg,var(--pri),var(--pri2));border-radius:inherit}.coverage-line{display:flex;justify-content:space-between;gap:10px;margin:12px 0;padding:9px 10px;border:1px solid var(--line);border-radius:10px;color:var(--muted);font-size:.75rem}.coverage-line strong{color:var(--text)}
.province-ranking{display:flex;flex-direction:column;gap:6px}.province-ranking button{display:grid;grid-template-columns:26px 1fr auto;align-items:center;gap:8px;width:100%;padding:9px;border:1px solid var(--line);border-radius:10px;background:rgba(255,255,255,.025);color:var(--text);text-align:left}.province-ranking button:hover{border-color:var(--pri);background:rgba(27,215,201,.06)}.province-ranking em{display:grid;place-items:center;width:23px;height:23px;border-radius:50%;background:var(--s3);font-style:normal;font-size:.68rem}.province-ranking span,.province-ranking small{display:block}.province-ranking small{color:var(--muted);font-size:.66rem}.province-ranking strong{font-size:.8rem}.condition-item>span{min-width:0}.condition-item>span small{display:block}.condition-item>strong{white-space:nowrap}.map-back{border:0;background:transparent;color:var(--pri);padding:0;margin-bottom:8px;font-weight:800}.map-device-list{display:flex;flex-direction:column;gap:6px}.map-device-list a{display:grid;grid-template-columns:1fr auto auto;gap:7px;align-items:center;padding:9px;border:1px solid var(--line);border-radius:10px}.map-device-list a:hover{border-color:var(--pri)}.map-device-list span,.map-device-list small{display:block}.map-device-list small{color:var(--muted);font-size:.66rem}.device-state{font-style:normal;font-size:.58rem;font-weight:900;padding:3px 5px;border:1px solid var(--line);border-radius:6px;color:var(--muted)}.device-state.good,.device-state.online{color:#79e8b7;border-color:rgba(64,209,139,.4)}.device-state.minor_damage,.device-state.not_connected{color:#fff189;border-color:rgba(246,196,83,.4)}.device-state.major_damage,.device-state.not_functional,.device-state.offline{color:#ff9aa4;border-color:rgba(255,107,120,.4)}
@media(max-width:1250px){.map-kpi-grid{grid-template-columns:repeat(3,1fr)}.map-layout-v2{grid-template-columns:1fr}.map-detail-v2{max-height:none;min-height:auto}}@media(max-width:780px){.map-kpi-grid{grid-template-columns:1fr 1fr}.map-panel-heading{align-items:flex-start}.map-toolbar,.map-indicator-label{width:100%;min-width:100%}.province-map-stage{min-height:380px;overflow:auto;justify-content:flex-start}.province-map-svg{min-width:720px}.province-map-legend{position:static;margin:10px;width:calc(100% - 20px)}.compact-legend{grid-template-columns:1fr 1fr}.map-zoom-controls{top:8px;right:8px}.map-device-list a{grid-template-columns:1fr}.map-kpi-grid .map-kpi:last-child{grid-column:span 2}}

/* ASPAK Connect Map v3 — true layer replacement drill-down */
.map-layout-v3{grid-template-columns:minmax(0,2.05fr) minmax(340px,.7fr)}
.map-panel-v3{overflow:hidden}.map-detail-v3{min-height:650px;max-height:calc(100vh - 170px);overflow:auto}
.drilldown-map-stage{position:relative;min-height:590px;background:#f8fafc;border:1px solid #d8e1eb;display:grid;place-items:center;overflow:hidden}
.national-map-layer{width:100%;height:100%;display:grid;place-items:center}.national-map-layer[hidden]{display:none!important}
.drilldown-svg{width:100%;height:100%;min-height:590px;background:#f8fafc;overflow:visible}.drilldown-svg[hidden]{display:none!important}.drilldown-background{fill:#f8fafc}
.drill-region{stroke:#fff;stroke-width:1.4;vector-effect:non-scaling-stroke;cursor:pointer;transition:opacity .16s ease,stroke .16s ease,filter .16s ease;outline:none}.drill-region:hover,.drill-region:focus{opacity:.84;stroke:#0f172a;stroke-width:2.2;filter:drop-shadow(0 2px 3px rgba(15,23,42,.25))}.drill-region.is-selected{stroke:#111827;stroke-width:3;filter:drop-shadow(0 0 5px rgba(17,24,39,.42))}.drill-region.map-no-data{fill:#d0d0d0}.drill-region.map-score-0-20{fill:#ef4444}.drill-region.map-score-21-40{fill:#f59e0b}.drill-region.map-score-41-60{fill:#fde047}.drill-region.map-score-61-80{fill:#34d399}.drill-region.map-score-81-100{fill:#2d9cdb}
.drill-label{fill:#111827;stroke:#fff;stroke-width:3px;paint-order:stroke;stroke-linejoin:round;font-size:12px;font-weight:900;text-anchor:middle;pointer-events:none}.drill-label.small{font-size:9px}.drill-score-label{fill:#1f2937;stroke:#fff;stroke-width:2.5px;paint-order:stroke;font-size:9px;font-weight:800;text-anchor:middle;pointer-events:none}
.hospital-marker{cursor:pointer;outline:none}.hospital-marker .hospital-halo{fill:rgba(220,38,38,.18);stroke:none}.hospital-marker .hospital-dot{fill:#dc2626;stroke:#fff;stroke-width:2;vector-effect:non-scaling-stroke}.hospital-marker:hover .hospital-dot,.hospital-marker:focus .hospital-dot{fill:#991b1b;stroke:#111827;stroke-width:3}.hospital-marker .hospital-label{fill:#111827;stroke:#fff;stroke-width:4px;paint-order:stroke;stroke-linejoin:round;font-size:11px;font-weight:900;text-anchor:start;pointer-events:none}.hospital-marker .hospital-score{fill:#334155;stroke:#fff;stroke-width:3px;paint-order:stroke;font-size:9px;font-weight:800;text-anchor:start;pointer-events:none}.hospital-marker.no-coordinate{opacity:.45}.map-hospital-symbol{position:relative;width:15px;height:15px;border-radius:50%;background:#dc2626;border:2px solid #fff;box-shadow:0 0 0 1px #9ca3af;display:inline-block}
.map-level-badge{position:absolute;left:14px;top:14px;z-index:9;padding:6px 10px;border-radius:999px;background:rgba(15,23,42,.88);color:#fff;font-size:.68rem;font-weight:900;letter-spacing:.05em;text-transform:uppercase}.map-stage-back{position:absolute;left:14px;top:51px;z-index:9;border:1px solid #cbd5e1;border-radius:8px;background:rgba(255,255,255,.96);color:#0f4c81;padding:7px 10px;font-weight:900;box-shadow:0 5px 14px rgba(15,23,42,.12)}.map-stage-back:hover{background:#fff;border-color:#2563eb}.map-stage-back[hidden]{display:none!important}
.map-breadcrumb{display:flex;align-items:center;flex-wrap:wrap;gap:5px;margin-top:4px;color:var(--muted);font-size:.72rem}.map-breadcrumb button{border:0;background:transparent;color:var(--pri);padding:0;font:inherit;font-weight:800}.map-breadcrumb button:disabled{color:var(--muted);font-weight:600}.map-breadcrumb i{font-style:normal;color:var(--muted)}
.map-loading{position:absolute;inset:0;z-index:30;display:flex;align-items:center;justify-content:center;gap:10px;background:rgba(248,250,252,.82);color:#0f172a}.map-loading[hidden]{display:none!important}.map-loading span{width:24px;height:24px;border:3px solid #cbd5e1;border-top-color:#2563eb;border-radius:50%;animation:map-spin .8s linear infinite}.map-loading strong{font-size:.8rem}@keyframes map-spin{to{transform:rotate(360deg)}}
.map-source-status{position:absolute;right:14px;bottom:14px;z-index:9;max-width:330px;padding:6px 9px;border-radius:8px;background:rgba(255,255,255,.94);border:1px solid #d1d5db;color:#475569;font-size:.62rem;box-shadow:0 4px 12px rgba(15,23,42,.1)}.map-source-status.warning{border-color:#f59e0b;color:#92400e}.map-source-status[hidden]{display:none!important}
.region-list-grid{display:grid;grid-template-columns:1fr;gap:6px}.region-list-button{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:8px;width:100%;padding:10px;border:1px solid var(--line);border-radius:10px;background:rgba(255,255,255,.025);color:var(--text);text-align:left}.region-list-button:hover{border-color:var(--pri);background:rgba(27,215,201,.06)}.region-list-button span,.region-list-button small{display:block}.region-list-button small{color:var(--muted);font-size:.66rem}.region-list-button strong{white-space:nowrap}.hospital-list{display:flex;flex-direction:column;gap:7px}.hospital-list button{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:8px;align-items:center;width:100%;padding:10px;border:1px solid var(--line);border-radius:10px;background:rgba(255,255,255,.025);color:var(--text);text-align:left}.hospital-list button:hover{border-color:var(--pri)}.hospital-list span,.hospital-list small{display:block}.hospital-list small{color:var(--muted);font-size:.66rem}.map-callout{margin:10px 0;padding:10px;border:1px solid rgba(246,196,83,.45);border-radius:10px;background:rgba(246,196,83,.08);color:var(--muted);font-size:.72rem}.map-callout strong{color:var(--text)}
@media(max-width:1250px){.map-layout-v3{grid-template-columns:1fr}.map-detail-v3{max-height:none;min-height:auto}}@media(max-width:780px){.drilldown-map-stage,.drilldown-svg{min-height:430px}.drilldown-svg{min-width:680px}.national-map-layer{overflow:auto;justify-content:flex-start}.drill-label{font-size:10px}.hospital-marker .hospital-label{font-size:9px}.map-source-status{left:10px;right:10px;bottom:10px;max-width:none}.map-level-badge{top:8px;left:8px}.map-stage-back{top:43px;left:8px}}

/* ASPAK Connect Map v4 — Leaflet GeoJSON renderer */
.map-layout-v4{grid-template-columns:minmax(0,2.05fr) minmax(340px,.7fr)}
.map-panel-v4{overflow:hidden}.map-detail-v4{min-height:650px;max-height:calc(100vh - 170px);overflow:auto}
.leaflet-map-stage{position:relative;min-height:590px;background:#f8fafc;border:1px solid #d8e1eb;display:grid;place-items:stretch;overflow:hidden}
.aspak-leaflet-map{width:100%;height:590px;min-height:590px;background:#f8fafc;z-index:1;outline:none}
.aspak-leaflet-map[hidden]{display:none!important}.leaflet-map-stage .national-map-layer{min-height:590px}
.leaflet-container{font-family:inherit;background:#f8fafc;color:#111827}.leaflet-container svg{max-width:none!important}.leaflet-pane svg{overflow:visible}
.leaflet-interactive{outline:none;transition:fill-opacity .16s ease,stroke-width .16s ease}.leaflet-interactive:focus{stroke:#0f172a!important;stroke-width:3!important}
.aspak-region-tooltip.leaflet-tooltip{border:1px solid #cbd5e1;border-radius:8px;background:rgba(255,255,255,.97);color:#0f172a;box-shadow:0 8px 24px rgba(15,23,42,.18);font-size:.72rem;padding:7px 9px;pointer-events:none}
.aspak-region-tooltip.leaflet-tooltip:before{display:none}.aspak-region-tooltip strong,.aspak-region-tooltip small{display:block}.aspak-region-tooltip small{margin-top:2px;color:#475569}
.aspak-regency-label.leaflet-tooltip{border:0;background:transparent;box-shadow:none;color:#111827;font-size:10px;font-weight:900;text-align:center;text-shadow:-1px -1px 0 #fff,1px -1px 0 #fff,-1px 1px 0 #fff,1px 1px 0 #fff;pointer-events:none;padding:0;white-space:normal;max-width:95px}.aspak-regency-label.leaflet-tooltip:before{display:none}
.aspak-hospital-tooltip.leaflet-tooltip{border:0;border-radius:5px;background:rgba(255,255,255,.96);box-shadow:0 3px 12px rgba(15,23,42,.18);color:#111827;font-size:10px;font-weight:900;padding:4px 6px;white-space:nowrap}.aspak-hospital-tooltip.leaflet-tooltip:before{display:none}
.aspak-hospital-marker{background:transparent;border:0}.aspak-hospital-marker span{display:block;width:14px;height:14px;border-radius:50%;background:#dc2626;border:2px solid #fff;box-shadow:0 0 0 1px #991b1b,0 3px 8px rgba(153,27,27,.4)}
.map-renderer-error{position:absolute;inset:70px 50px auto;z-index:25;padding:14px 16px;border:1px solid #fecaca;border-radius:10px;background:#fff1f2;color:#991b1b;box-shadow:0 8px 24px rgba(127,29,29,.16);font-size:.78rem}.map-renderer-error strong{display:block;margin-bottom:4px}
@media(max-width:1250px){.map-layout-v4{grid-template-columns:1fr}.map-detail-v4{max-height:none;min-height:auto}}
@media(max-width:780px){.leaflet-map-stage,.aspak-leaflet-map,.leaflet-map-stage .national-map-layer{min-height:430px;height:430px}.aspak-regency-label.leaflet-tooltip{font-size:8px}.province-map-legend{font-size:.62rem}.map-source-status{left:10px;right:10px;bottom:10px;max-width:none}}

/* Hotfix v4.0.2: sembunyikan seluruh titik/inset Papua pada peta nasional. */
.papua-province-inset{display:none!important}
