/* Map tab (map.js). Uses the app's tokens from app.css; Leaflet 1.9.4 CSS is loaded separately. */
.vmap{display:flex;flex-direction:column;gap:16px}
.vmap .card{min-width:0}
.vmap-head .sub2{max-width:80ch}
.vmap-controls{display:flex;flex-wrap:wrap;align-items:center;gap:8px 18px;margin:10px 0}
.vmap-metric{display:flex;white-space:nowrap;align-items:center;gap:6px;font-size:13px;color:var(--fg2)}
.vmap-controls select{width:auto;flex:none;font:inherit;font-size:13px;background:var(--surface);color:var(--fg);border:1px solid var(--line);border-radius:5px;padding:4px 6px}
.vmap-scrub{display:flex;align-items:center;gap:8px;flex:1 1 320px;min-width:240px}
.vmap-scrub input[type=range]{flex:1;min-width:120px;accent-color:var(--accent)}
.vmap-read{display:flex;flex-wrap:wrap;gap:4px 14px;font-size:12.5px;color:var(--fg2)}
.vmap-read .vmap-total{color:var(--fg);font-weight:500}
.vmap-map{height:clamp(320px,62vh,720px);border:1px solid var(--line);border-radius:6px;background:var(--surface2);z-index:0}
@media (max-width:640px){.vmap-map{height:clamp(280px,58vh,460px)}.vmap-scrub{flex-basis:100%}}

/* geometry layers: CSS overrides Leaflet's presentation attributes so the theme tokens apply */
.vmap-map path.vmap-quay{stroke:var(--fg);stroke-opacity:.75}
.vmap-map path.vmap-pier{stroke:var(--fg2);stroke-opacity:.55}
.vmap-map path.vmap-breakwater{stroke:var(--fg2);stroke-opacity:.6;fill:var(--fg2);fill-opacity:.12}
.vmap-map path.vmap-term-area{stroke:var(--accent);stroke-opacity:.45;fill:var(--accent);fill-opacity:.08}
.vmap-map path.vmap-port-area{stroke:none;fill:var(--fg2);fill-opacity:.05}

/* terminal markers: zero-size anchor, the dot is centred (and fanned out) with a transform */
.vmap-mk{background:none;border:0}
.vmap-dot{position:absolute;left:0;top:0;display:block;width:10px;height:10px;border-radius:50%;
  background:color-mix(in srgb,var(--mk,var(--s-other)) 72%,transparent);border:1.5px solid var(--mk,var(--s-other));
  box-shadow:0 0 0 1px var(--surface);transition:width .12s linear,height .12s linear}
.vmap-dot.zero{background:var(--surface);border-style:dashed}
.leaflet-marker-icon:focus-visible .vmap-dot,.vmap-mk:focus-visible .vmap-dot{outline:2px solid var(--accent);outline-offset:2px}
.vmap-ops{background:none;border:0}
.vmap-ops span,.vmap-ops-sw{display:block;width:14px;height:14px;background:var(--surface);border:2.5px solid var(--fg);box-shadow:0 0 0 1px var(--surface)}
.vmap-ops-sw{display:inline-block;width:12px;height:12px;vertical-align:-2px;margin-right:6px}

/* popups and tooltips follow the theme */
.vmap-map .leaflet-popup-content-wrapper,.vmap-map .leaflet-popup-tip{background:var(--surface);color:var(--fg);box-shadow:0 3px 14px rgba(0,0,0,.25)}
.vmap-map .leaflet-popup-content{margin:12px 14px;font:13px/1.45 var(--font)}
.vmap-map a.leaflet-popup-close-button{color:var(--muted)}
.vmap-tip{background:var(--surface);color:var(--fg);border-color:var(--line);font:12px var(--font)}
.vmap-pop-h{display:flex;align-items:center;gap:6px;font-size:14px}
.vmap-pop .dot{display:inline-block;width:10px;height:10px;border-radius:50%}
.vmap-kv{display:grid;grid-template-columns:auto 1fr;gap:2px 10px;margin:8px 0 4px}
.vmap-kv dt{color:var(--muted)} .vmap-kv dd{margin:0}
.vmap-pop-sub{margin-top:8px;font-weight:600}
.vmap-top,.vmap-conns{margin:4px 0 0;padding-left:20px}
.vmap-top a{color:var(--accent-ink)}

/* legend, table, unplaced note */
.vmap-legend{display:flex;flex-wrap:wrap;gap:8px 28px;margin-top:10px;font-size:12.5px;color:var(--fg2)}
.vmap-lg-group{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px}
.vmap-lg-t{font-weight:600;color:var(--fg)}
.vmap-lg-i{display:inline-flex;align-items:center;gap:5px}
.vmap-sw{display:inline-block;width:11px;height:11px;border-radius:50%}
.vmap-sw.line{width:16px;height:0;border-radius:0;border-top:2.5px solid var(--fg);opacity:.75}
.vmap-lg-c{display:inline-block;border-radius:50%;border:1.5px solid var(--fg2);background:color-mix(in srgb,var(--fg2) 15%,transparent)}
.vmap-unp-list{margin:4px 0 0;padding-left:20px;columns:2 320px;font-size:13px}
.vmap-table td .dot{display:inline-block;width:9px;height:9px;border-radius:50%;margin-right:6px}
.leaflet-container{font-family:var(--font)}
.leaflet-control-attribution{font-size:10.5px}
/* dark theme: darken the OSM raster tiles in place */
.vmap-map[data-tiles=dark] .leaflet-tile-pane{filter:invert(1) hue-rotate(180deg) brightness(.95) contrast(.9) saturate(.6)}
.vmap-map[data-tiles=dark] .leaflet-control-attribution,.vmap-map[data-tiles=dark] .leaflet-control-scale-line{background:rgba(28,32,35,.85);color:var(--fg2)}
.vmap-map[data-tiles=dark] .leaflet-control-attribution a{color:var(--accent-ink)}
.vmap-map[data-tiles=dark] .leaflet-bar a{background:var(--surface);color:var(--fg);border-color:var(--line)}
