/* v49 · Peta geografis KST. Gaya hanya untuk komponen peta ini. */
.kst-geo{--km-ink:#133e35;--km-muted:#607c72;--km-green:#25745c;--km-gold:#ae8640;position:relative;isolation:isolate;width:100%;height:100%;min-height:220px;overflow:hidden;background:#edf1e8;font:13px/1.45 system-ui,-apple-system,"Segoe UI",sans-serif;color:var(--km-ink);border-radius:inherit}
.kst-geo *{box-sizing:border-box}.kst-geo button,.kst-geo a{-webkit-tap-highlight-color:transparent}
.km-native,.km-online{position:absolute;inset:0;width:100%;height:100%;overflow:hidden;background:#edf1e8}
.km-native{z-index:1;background-color:#edf1e8;background-image:linear-gradient(rgba(88,127,102,.045) 1px,transparent 1px),linear-gradient(90deg,rgba(88,127,102,.045) 1px,transparent 1px);background-size:44px 44px}
.km-online{z-index:2;visibility:hidden}.km-online.is-ready{visibility:visible}.km-tiles{position:absolute;inset:0;pointer-events:none;filter:none;overflow:hidden}
.km-tile{position:absolute!important;max-width:none!important;max-height:none!important;border:0!important;margin:0!important;border-radius:0!important;pointer-events:none;user-select:none}
.km-svg{position:absolute;inset:0;display:block!important;width:100%!important;height:100%!important;padding:0!important;border:0!important;background:transparent!important;border-radius:0!important;touch-action:none;cursor:grab;overflow:hidden}
.km-svg:active{cursor:grabbing}.km-svg .km-hit{cursor:pointer;pointer-events:all}.km-svg .km-feature-selected{filter:drop-shadow(0 2px 3px #496b5a55)}
.km-svg text{paint-order:stroke;stroke:#ffffffe8;stroke-width:3px;stroke-linejoin:round;fill:#254f42;font:600 11px system-ui,sans-serif;pointer-events:none}
.km-controls{position:absolute;z-index:5;top:14px;right:14px;display:flex;gap:7px;align-items:center}
.km-controls button{display:grid;place-items:center;height:38px;min-width:38px;padding:0 11px;border:1px solid #ffffffca;border-radius:12px;background:rgba(255,255,255,.91);color:#214d3e;box-shadow:0 3px 16px #234b3614;font:800 13px system-ui;cursor:pointer}
.km-controls button[data-km="in"],.km-controls button[data-km="out"]{font-size:23px;font-weight:500}.km-controls button:hover{background:#fff;transform:translateY(-1px)}
.km-controls button:focus-visible,.km-selection a:focus-visible{outline:3px solid #488c72;outline-offset:2px}
.km-status{position:absolute;z-index:4;top:15px;left:16px;display:flex;align-items:center;gap:7px;max-width:calc(100% - 190px);padding:7px 10px;border:1px solid #ffffffbf;border-radius:30px;background:rgba(255,255,255,.91);box-shadow:0 3px 16px #234b360d;font-size:11px;font-weight:650;color:#476c5c;pointer-events:none}
.km-status::before{content:'';width:6px;height:6px;border-radius:50%;background:#bda265;flex-shrink:0}.km-status[data-mode="satellite"]::before,.km-status[data-mode="tiles"]::before{background:#35856a}.km-status[data-mode="local"]::before{background:#bd9a54}
.km-note{position:absolute;z-index:5;left:12px;bottom:27px;max-width:min(480px,calc(100% - 24px));display:flex;gap:8px;align-items:center;padding:7px 10px;background:#fffdf1ef;color:#796332;border:1px solid #e5d5a9;border-radius:10px;font-size:11px}.km-note[hidden]{display:none}.km-note button{flex:0 0 auto;border:0;background:#eee7d5;color:#6e5827;border-radius:6px;padding:4px 7px;cursor:pointer;font:inherit;font-weight:700}
.km-attrib{position:absolute;z-index:6;right:0;bottom:0;background:rgba(255,255,255,.91);padding:3px 7px;color:#496253;font-size:10px;line-height:1.3}.km-attrib a{color:inherit;text-decoration:none}.km-attrib a:hover{text-decoration:underline}
.km-scale{position:absolute;z-index:4;left:14px;bottom:8px;max-width:95px;font-size:10px;line-height:1.1;border:2px solid #5d7961;border-top:0;padding:0 4px 3px;text-align:center;background:#ffffff72;pointer-events:none}
.km-selection{position:absolute;bottom:32px;left:12px;right:12px;z-index:6;padding:10px 12px;display:flex;align-items:center;gap:9px;border-radius:14px;background:#fffffff0;box-shadow:0 6px 20px #173e3120}.km-selection[hidden]{display:none}.km-selection strong{min-width:0;flex:1;font-size:13px}.km-selection a{padding:5px 9px;border-radius:9px;background:#e5f1eb;color:#256449;text-decoration:none;font-weight:750;font-size:11px}.km-selection button{border:0;background:transparent;font-size:21px;cursor:pointer;color:#476557}
.kst-geo.km-compact .km-controls{top:9px;right:9px;gap:4px}.kst-geo.km-compact .km-controls button{height:31px;min-width:31px;padding:0 7px;border-radius:10px}.kst-geo.km-compact .km-status{top:10px;left:10px;font-size:9px;max-width:calc(100% - 134px);padding:5px 7px}.kst-geo.km-compact .km-attrib{font-size:9px}.kst-geo.km-compact .km-note{font-size:10px;bottom:25px}
.km-native .km-hit:focus-visible{outline:0;stroke:#a26e23;stroke-width:3}
.km-svg:focus-visible{outline:2px solid #488c72;outline-offset:-2px}
#dashboardMapMini.kst-geo{position:relative!important;height:100%!important;min-height:0!important;aspect-ratio:auto!important;border:0!important;overflow:hidden!important}
#dashboardMapMini.kst-geo .maplibregl-canvas,#mobileMapZoom.kst-geo .maplibregl-canvas{max-width:none!important}
#mobileMapZoom.kst-geo{height:330px!important;aspect-ratio:auto!important;min-height:280px!important;border-radius:18px!important}
#mobileMapZoom .km-controls svg,#dashboardMapMini .km-controls svg{width:16px!important;height:16px!important}
/* The app supplies its own visible attribution so legacy home CSS cannot hide it. */
.kst-geo .maplibregl-map{position:absolute!important;inset:0!important}.kst-geo .maplibregl-canvas{outline:0}.kst-geo .maplibregl-control-container{display:none}
@media(max-width:600px){.km-controls{right:10px;top:10px;gap:5px}.km-controls button{height:35px;min-width:34px;padding:0 8px}.km-status{left:10px;top:11px;max-width:calc(100% - 155px);font-size:10px;padding:6px 8px}.km-note{font-size:10px}.km-attrib{font-size:9px}.km-selection{font-size:12px}}
@media(prefers-reduced-motion:reduce){.kst-geo *{scroll-behavior:auto!important;transition:none!important}}
/* Override old dashboard rules that sized every SVG as the previous map image. */
#dashboardMapMini.kst-geo .km-svg,#mobileMapZoom.kst-geo .km-svg{width:100%!important;height:100%!important;min-height:0!important;border:0!important;padding:0!important;border-radius:0!important;background:transparent!important;object-fit:initial!important}

/* Satellite labels remain legible without large markers covering rooftops. */
.km-svg text{fill:#fff;stroke:#143e32;stroke-width:3px}
.kst-geo .maplibregl-canvas{max-width:none!important;max-height:none!important}

/* v52: route belongs above the WebGL canvas AND above the native satellite layer. */
.kst-geo .km-navigation-svg{position:absolute!important;inset:0!important;width:100%!important;height:100%!important;min-height:0!important;max-width:none!important;max-height:none!important;display:block!important;z-index:3!important;pointer-events:none!important;overflow:hidden!important;background:transparent!important;border:0!important;padding:0!important;border-radius:0!important;}
.km-navigation-svg *{pointer-events:none!important;}
.km-route-active{position:absolute;z-index:4;top:61px;left:15px;max-width:calc(100% - 170px);display:flex;align-items:center;gap:8px;padding:8px 11px;border:1px solid #aac8ff;border-radius:12px;background:#f7fafff2;color:#1049a5;font:750 12px/1.45 system-ui,sans-serif;box-shadow:0 3px 14px #052d741a;pointer-events:none}
.km-route-active[hidden]{display:none!important}.km-route-active i{width:20px;height:5px;border-radius:4px;background:#086aff;flex:0 0 20px}.km-route-active span{overflow-wrap:anywhere}
.km-building-label .km-hit{cursor:pointer}.km-building-label text{pointer-events:none}
.km-compact .km-route-active{top:84px;left:10px;max-width:calc(100% - 20px);font-size:10px;padding:5px 8px}
@media(max-width:600px){.km-route-active{top:54px;left:10px;max-width:calc(100% - 144px);font-size:10px;padding:6px 8px;}.km-route-active i{width:13px;flex-basis:13px}.km-has-route .km-gps-state{top:122px}}

/* v53: geometry never has CSS easing separate from the common map frame. */
.kst-geo .km-tile,.kst-geo .km-svg,.kst-geo .km-navigation-svg{transition:none!important;animation:none!important;}
.kst-geo .km-controls button:disabled{opacity:.48;cursor:default;transform:none;box-shadow:none;}
/* Keep tile-level fallback z-indices confined UNDER the KML overlay. */
.kst-geo .km-tiles{z-index:0;}
.kst-geo .km-svg{z-index:1;}


/* v54.2: Gerbang Utama dan Gerbang Raiser adalah titik akses kawasan, bukan gedung biasa. */
.km-gate-label text{fill:#743c00!important;stroke:#fff8e7!important;stroke-width:3.2px!important;font-weight:800!important;letter-spacing:.01em}
.km-gate-label rect{filter:drop-shadow(0 2px 5px rgba(91,52,0,.18))}
.km-gate-feature .km-gate-ring{filter:drop-shadow(0 2px 5px rgba(91,52,0,.28))}
.km-gate-feature:focus-within .km-gate-ring{stroke:#8c4a00;stroke-width:3px}
