.map3d-layout[hidden]{display:none}
.map3d-toolbar{display:flex;flex-wrap:wrap;gap:var(--space-2);align-items:center;padding:var(--space-3);border-bottom:1px solid var(--line)}
.map3d-toolbar [data-site="terrain"][aria-pressed="true"]{border-color:var(--violet);color:var(--ink)}
.map3d-layout{display:grid;grid-template-columns:minmax(0,1fr) 240px;background:var(--panel);border:1px solid var(--line)}
.map3d-stage{height:560px;min-width:0;overflow:hidden;position:relative;isolation:isolate;background:radial-gradient(ellipse at 50% 46%,var(--panel-raised) 0%,var(--bg) 72%)}
.map3d-stage::before,.map3d-stage::after{content:"";position:absolute;inset:0;pointer-events:none;z-index:0}
.map3d-stage::before{opacity:.16;background-image:radial-gradient(circle,var(--muted) .7px,transparent 1.4px),linear-gradient(to right,var(--line) 1px,transparent 1px),linear-gradient(to bottom,var(--line) 1px,transparent 1px);background-size:139px 139px,84px 84px,84px 84px;mask-image:radial-gradient(ellipse at center,#000 8%,transparent 78%);animation:map3d-space-drift 72s linear infinite alternate}
.map3d-stage::after{background:radial-gradient(ellipse at 54% 42%,var(--accent-quiet),transparent 62%);opacity:.18;animation:map3d-space-haze 28s ease-in-out infinite alternate}
.map3d-stage[data-motion="off"]::before,.map3d-stage[data-motion="off"]::after{animation:none}
.map3d-stage canvas{display:block;position:relative;z-index:1;width:100%;height:100%;touch-action:none}
.map3d-callout-wires{position:absolute;inset:0;width:100%;height:100%;z-index:2;overflow:visible;pointer-events:none}
.map3d-callout-wires [hidden],.map3d-room-label[hidden]{display:none}
.map3d-callout-wires path{fill:none;stroke:var(--muted);stroke-width:1;opacity:.72}
.map3d-callout-wires path[data-selected="true"]{stroke:var(--accent);stroke-width:1.35;opacity:1}
.map3d-callout-wires circle{fill:var(--muted);stroke:var(--panel-raised);stroke-width:1.5;opacity:.8}
.map3d-callout-wires circle[data-selected="true"]{fill:var(--accent);opacity:1}
.map3d-room-labels{position:absolute;inset:0;z-index:3;pointer-events:none}
.map3d-room-label{position:absolute;max-width:min(220px,calc(100% - 24px));padding:7px 10px;border:1px solid var(--line);border-left:2px solid var(--muted);background:var(--panel-raised);color:var(--ink);font-size:13px;line-height:1.25;white-space:nowrap;box-shadow:0 3px 12px var(--shadow);opacity:.94}
.map3d-room-label[data-selected="true"]{border-color:var(--accent);border-left-width:3px;color:var(--ink);opacity:1}
@keyframes map3d-space-drift{from{transform:translate3d(0,0,0) scale(1)}to{transform:translate3d(-1.2%,.8%,0) scale(1.015)}}
@keyframes map3d-space-haze{from{opacity:.12;transform:scale(1)}to{opacity:.24;transform:scale(1.06)}}
@media(prefers-reduced-motion:reduce){.map3d-stage::before,.map3d-stage::after{animation:none}}
.map3d-aside{padding:var(--space-4);border-left:1px solid var(--line);overflow:auto;max-height:560px}
.map3d-aside h3{font-size:var(--fs-title);margin:0 0 var(--space-3)}
.map3d-rooms{display:grid;gap:1px;margin-top:var(--space-4)}
.map3d-rooms button{text-align:left;background:var(--panel);color:var(--ink);border:1px solid var(--line);padding:var(--space-3);font:inherit;cursor:pointer}
.map3d-rooms button[aria-pressed=true]{border-color:var(--accent);background:var(--accent-quiet)}
.map3d-note{color:var(--muted);font-size:var(--fs-caption);line-height:1.5}
.map3d-error{padding:var(--space-5);color:var(--danger)}
#locationsMap.map3d-active>.map-toolbar,#locationsMap.map3d-active>#mapCanvasWrap,#locationsMap.map3d-active>.map-legend{display:none}
.map3d-preview{margin:0;padding:var(--space-5)}
.map3d-preview h1{font-size:24px;margin:0 0 var(--space-2)}
@media(max-width:800px){.map3d-layout{grid-template-columns:minmax(0,1fr)}.map3d-stage{height:420px}.map3d-aside{border-left:0;border-top:1px solid var(--line);max-height:240px}}
/* Режим «Контури корпусів НІР»: stage на висоту вікна, щоб корпуси були великими. */
.map3d-site .map3d-stage{height:max(560px,calc(100vh - 190px))}
.map3d-site .map3d-aside{max-height:max(560px,calc(100vh - 190px))}
@media(max-width:800px){.map3d-site .map3d-stage{height:max(420px,70vh)}}
.map3d-site-interior{display:inline-flex;gap:var(--space-2,8px);align-items:center;flex-wrap:wrap}
.map3d-site-interior[hidden]{display:none}
.map3d-floors{display:inline-flex;gap:4px}
.map3d-floors .button{min-width:2.5em;padding-inline:8px}
.map3d-floors .button[aria-pressed="true"]{border-color:var(--accent);color:var(--ink);background:var(--accent-quiet,var(--panel-raised))}
.map3d-enter{width:100%;margin-block:var(--space-2,8px)}
.map3d-enter[hidden]{display:none}
/* Підписи корпусів над сценою: не перехоплюють мишу, стан — через data-state. */
.map3d-site-labels{position:absolute;inset:0;z-index:3;pointer-events:none;overflow:hidden}
.map3d-site-label{position:absolute;left:0;top:0;padding:3px 8px;border-radius:3px;background:color-mix(in srgb,var(--panel-raised) 82%,transparent);color:var(--ink);font-size:12px;line-height:1.3;white-space:nowrap;border:1px solid var(--line);transition:opacity .18s}
.map3d-site-label[data-state="dim"]{opacity:.35}
.map3d-site-label[data-state="selected"]{border-color:var(--accent);opacity:1}
@media(prefers-reduced-motion:reduce){.map3d-site-label{transition:none}}
/* Дерево «корпус → поверхи»: поверхи в один ряд, знизу вгору зліва направо. */
.map3d-site-tree{display:grid;gap:var(--space-3,12px);margin-top:var(--space-3,12px)}
.map3d-site-building-name{margin:0 0 6px;font-size:13px;color:var(--ink)}
.map3d-site-building[data-active="false"] .map3d-site-building-name{color:var(--muted)}
.map3d-site-floors{display:flex;flex-wrap:wrap;gap:4px}
.map3d-site-floor{min-width:30px;height:28px;padding:0 6px;border:1px solid var(--line);background:var(--panel);color:var(--ink);font:inherit;font-size:13px;cursor:pointer;border-radius:3px}
.map3d-site-floor:hover{border-color:var(--muted)}
.map3d-site-floor:focus-visible{outline:2px solid var(--accent);outline-offset:1px}
.map3d-site-floor[aria-pressed="true"]{border-color:var(--accent);background:var(--accent-quiet,var(--panel-raised))}
.map3d-site .map3d-rooms:empty{display:none}
/* Мітки поверхів у розпорядженні — ліворуч від плити. */
.map3d-site-tag{position:absolute;left:0;top:0;padding:1px 6px;border-radius:3px;background:color-mix(in srgb,var(--panel-raised) 80%,transparent);color:var(--muted);font-size:11px;line-height:1.4;white-space:nowrap;font-variant-numeric:tabular-nums;border:1px solid transparent;transition:opacity .18s}
.map3d-site-tag[data-state="selected"]{color:var(--ink);border-color:var(--accent)}
.map3d-site-tag[data-state="dim"]{opacity:.5}
@media(prefers-reduced-motion:reduce){.map3d-site-tag{transition:none}}

/* Док вибраного поверху (site-minimap.js): деталі + 2D-план у куті сцени. Стиль — концепт 13 (лаконічна основа теми)
   + кодові рамки й план з концепту 12. Кольори — лише токени теми. */
.map3d-stage{--map3d-mono:ui-monospace,"IBM Plex Mono","JetBrains Mono",monospace}
.map3d-dock{position:absolute;z-index:4;display:flex;flex-direction:column;gap:6px;width:300px;max-height:calc(100% - 24px);pointer-events:none}
.map3d-dock[hidden]{display:none}
.map3d-dock[data-corner="br"]{right:12px;bottom:12px}
.map3d-dock[data-corner="bl"]{left:12px;bottom:12px}
.map3d-dock[data-corner="tr"]{right:12px;top:12px;flex-direction:column-reverse}
.map3d-dock[data-corner="tl"]{left:12px;top:12px;flex-direction:column-reverse}
.map3d-dock>*{pointer-events:auto;background:color-mix(in srgb,var(--panel-raised) 94%,transparent);border:1px solid var(--line-strong);box-shadow:var(--shadow-float,0 8px 24px rgba(0,0,0,.4))}
.map3d-icon{width:24px;height:22px;padding:0;border:1px solid var(--line);background:var(--panel);color:var(--muted);font:12px/1 var(--map3d-mono);cursor:pointer}
.map3d-icon:hover{color:var(--ink);border-color:var(--muted)}
.map3d-icon:focus-visible{outline:2px solid var(--accent);outline-offset:1px}
.map3d-icon[aria-pressed="true"]{color:var(--ink);border-color:var(--accent);background:var(--accent-quiet)}
/* кодова рамка (12): біла рамка, мітка акценту зліва, моноширинний код */
.map3d-code{display:flex;align-items:baseline;gap:8px;min-width:0;margin:0}
.map3d-code b{flex:none;padding:2px 8px;border:2px solid var(--ink);box-shadow:inset 3px 0 0 var(--accent);font:600 13px/1.3 var(--map3d-mono);letter-spacing:.04em;color:var(--ink)}
.map3d-code span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font:11px/1.3 var(--map3d-mono);letter-spacing:.06em;text-transform:uppercase;color:var(--muted)}
.map3d-details{padding:8px 10px;overflow:auto;min-height:0}
.map3d-details-head{display:flex;align-items:center;justify-content:space-between;gap:8px}
.map3d-details[data-collapsed="true"] .map3d-details-body{display:none}
.map3d-details-list{display:grid;grid-template-columns:max-content minmax(0,1fr);gap:4px 12px;margin:8px 0 0;font-size:12px;line-height:1.35}
.map3d-details-list dt{color:var(--muted);font:11px/1.5 var(--map3d-mono);letter-spacing:.04em;text-transform:uppercase}
.map3d-details-list dd{margin:0;color:var(--ink);font-variant-numeric:tabular-nums;overflow-wrap:anywhere}
.map3d-details-list dd.is-muted{color:var(--muted)}
.map3d-details-list dd.is-draft{color:var(--amber)}
.map3d-minimap-card{padding:8px 10px}
.map3d-minimap-head{display:flex;align-items:center;justify-content:space-between;gap:8px;margin:0 0 6px}
.map3d-minimap-title{margin:0;font:600 11px/1.3 var(--map3d-mono);letter-spacing:.08em;color:var(--ink)}
.map3d-corners{display:flex;gap:2px}
.map3d-minimap-foot{margin:6px 0 0;font:11px/1.3 var(--map3d-mono);letter-spacing:.04em;color:var(--muted)}
/* план (12): темне поле, тонка сітка, стіни корпусу рискою, приміщення — тонована заливка й чіткий контур */
.map3d-minimap-plan{display:block;background:var(--bg);border:1px solid var(--line)}
.map3d-minimap-grid line{stroke:var(--line);stroke-width:.12}
.map3d-minimap-wall{fill:color-mix(in srgb,var(--panel-raised) 55%,transparent);stroke:var(--ink);stroke-width:.7;stroke-linejoin:miter;opacity:.8} /* 13.10: зовнішня стіна — суцільна товста */
.map3d-minimap-room{cursor:pointer;outline:none}
.map3d-minimap-room :is(rect,polygon){fill:var(--room,var(--muted));fill-opacity:.5;stroke:var(--ink);stroke-opacity:.75;stroke-width:.42;stroke-linejoin:miter} /* 13.10: план з написами — товсті стіни */
.map3d-minimap-room:hover :is(rect,polygon),.map3d-minimap-room:focus-visible :is(rect,polygon){fill-opacity:.6}
.map3d-minimap-room[aria-pressed="true"] :is(rect,polygon){fill-opacity:.75;stroke:var(--ink);stroke-width:.6}
.map3d-minimap-room text{fill:var(--ink);text-anchor:middle;dominant-baseline:central;pointer-events:none;font-family:var(--map3d-mono);font-weight:700;letter-spacing:.03em;opacity:.85}
/* підписи корпусів і поверхів у сцені — кодові рамки (12/13) */
.map3d-site-label{border-radius:0;border:2px solid var(--ink);box-shadow:inset 3px 0 0 var(--accent);font-family:var(--map3d-mono);letter-spacing:.03em}
.map3d-site-tag{border-radius:0;font-family:var(--map3d-mono);letter-spacing:.04em}
/* зони відповідальності у плані доку: під приміщеннями, акцентна штриховка контуру */
.map3d-minimap-zone{cursor:pointer;outline:none}
.map3d-minimap-zone polygon{fill:var(--accent);fill-opacity:.1;stroke:var(--accent);stroke-width:.45;stroke-dasharray:1.4 .7}
.map3d-minimap-zone:hover polygon,.map3d-minimap-zone:focus-visible polygon{fill-opacity:.2}
.map3d-minimap-zone[aria-pressed="true"] polygon{fill-opacity:.24;stroke-width:.8;stroke-dasharray:none}
.map3d-minimap-zone-name{fill:var(--accent);text-anchor:start;dominant-baseline:auto;pointer-events:none;font-family:var(--map3d-mono);font-weight:600;letter-spacing:.04em;opacity:.85}
.map3d-icon.map3d-cfg{margin-right:4px}

/* Конфігуратор поверху (site-configurator.js) — 2D-режим поверх сцени, стиль концепту 12: поле, сітка, кодова рамка, панель праворуч. */
section.map3d-cfg{position:fixed;inset:0;z-index:100000;display:grid;grid-template-rows:auto minmax(0,1fr) auto;background:var(--bg);color:var(--ink);outline:none}
.map3d-cfg-bar{display:flex;align-items:center;gap:14px;padding:8px 12px;border-bottom:1px solid var(--line-strong);background:var(--panel)}
.map3d-cfg-bar .map3d-code{flex:1 1 auto}
.map3d-cfg-acts{display:flex;gap:4px}
.map3d-cfg-tool,.map3d-cfg-btn{padding:4px 10px;border:1px solid var(--line);background:var(--panel-raised);color:var(--ink);font:12px/1.4 var(--map3d-mono);letter-spacing:.04em;cursor:pointer}
.map3d-cfg-tool:hover,.map3d-cfg-btn:hover:not(:disabled){border-color:var(--muted)}

.map3d-cfg-tool:focus-visible,.map3d-cfg-btn:focus-visible{outline:2px solid var(--accent);outline-offset:1px}
.map3d-cfg-btn:disabled{opacity:.45;cursor:default}
.map3d-cfg-btn.is-primary:not(:disabled){border-color:var(--accent);background:var(--accent);color:var(--bg)}
.map3d-cfg-btn.is-danger{color:var(--danger);border-color:color-mix(in srgb,var(--danger) 50%,var(--line))}
.map3d-cfg-body{display:grid;grid-template-columns:176px minmax(0,1fr) 280px;min-height:0}
.map3d-cfg-plan{width:100%;height:100%;display:block;touch-action:none;user-select:none}
.map3d-cfg[data-tool="zone"] .map3d-cfg-plan,.map3d-cfg[data-tool="room"] .map3d-cfg-plan{cursor:crosshair}
.map3d-cfg-grid line{stroke:var(--line);stroke-width:.05;vector-effect:non-scaling-stroke}
.map3d-cfg-grid line.M{stroke:var(--line-strong)}
.map3d-cfg-wall polygon{fill:color-mix(in srgb,var(--panel-raised) 60%,transparent);stroke:var(--ink);stroke-width:1.5;stroke-dasharray:6 4;vector-effect:non-scaling-stroke;opacity:.8}
.map3d-cfg-wall polygon.map3d-cfg-osm{fill:none;stroke:var(--muted);stroke-width:1;stroke-dasharray:2 4;opacity:.7} /* OSM — довідково, під уточненим контуром */
.map3d-cfg-zone polygon{fill:var(--accent);fill-opacity:.1;stroke:var(--accent);stroke-width:1.5;stroke-dasharray:7 4;vector-effect:non-scaling-stroke;cursor:move}
.map3d-cfg-zone[aria-selected="true"] polygon{fill-opacity:.2;stroke-width:2.5;stroke-dasharray:none}
.map3d-cfg-zone text{fill:var(--accent);text-anchor:start;dominant-baseline:auto;pointer-events:none;font-family:var(--map3d-mono);font-weight:600}
.map3d-cfg-room :is(rect,polygon){fill:var(--room,var(--muted));fill-opacity:.32;stroke:var(--room,var(--muted));stroke-width:1;vector-effect:non-scaling-stroke;cursor:move}
.map3d-cfg-room[aria-selected="true"] :is(rect,polygon){fill-opacity:.6;stroke:var(--ink);stroke-width:2}
.map3d-cfg-room text{fill:var(--ink);text-anchor:middle;dominant-baseline:central;pointer-events:none;font-family:var(--map3d-mono)}
.map3d-cfg-zone.is-bad polygon,.map3d-cfg-room.is-bad :is(rect,polygon){stroke:var(--danger);stroke-dasharray:3 2}
.map3d-cfg-draftroom rect{fill:var(--accent);fill-opacity:.04;stroke:var(--accent);stroke-width:1.2;stroke-dasharray:3 3;vector-effect:non-scaling-stroke;cursor:copy}
.map3d-cfg-draftroom:hover rect{fill-opacity:.16;stroke-width:2}
.map3d-cfg-draftroom text{fill:var(--accent);text-anchor:middle;dominant-baseline:central;pointer-events:none;font-family:var(--map3d-mono);opacity:.85}
.map3d-cfg-handle{fill:var(--ink);stroke:var(--bg);stroke-width:1;vector-effect:non-scaling-stroke;cursor:nwse-resize}
.map3d-cfg-handle.is-side{fill:var(--bg);stroke:var(--ink);stroke-width:1.5}
.map3d-cfg-handle,.map3d-cfg-hit{pointer-events:all}
.map3d-cfg-hit{fill:transparent;stroke:none} /* невидима зона захоплення ~26 px навколо ручки */
:is(.map3d-cfg-hit,.map3d-cfg-handle):is([data-handle="00"],[data-handle="11"]){cursor:nwse-resize}
:is(.map3d-cfg-hit,.map3d-cfg-handle):is([data-handle="10"],[data-handle="01"]){cursor:nesw-resize}
:is(.map3d-cfg-hit,.map3d-cfg-handle):is([data-handle="m0"],[data-handle="m1"]){cursor:ns-resize}
:is(.map3d-cfg-hit,.map3d-cfg-handle):is([data-handle="0m"],[data-handle="1m"]){cursor:ew-resize}
.map3d-cfg-room{cursor:move}
.map3d-cfg-vertex{fill:var(--bg);stroke:var(--accent);stroke-width:2;vector-effect:non-scaling-stroke;cursor:grab}
.map3d-cfg-vertex.is-first{fill:var(--accent)}
.map3d-cfg-draft{fill:var(--accent);fill-opacity:.08;stroke:var(--accent);stroke-width:1.5;stroke-dasharray:4 3;vector-effect:non-scaling-stroke;pointer-events:none}
polyline.map3d-cfg-draft{fill:none}
.map3d-cfg-dim line{stroke:var(--muted);stroke-width:1;vector-effect:non-scaling-stroke}
.map3d-cfg-dim text{fill:var(--muted);text-anchor:middle;font-family:var(--map3d-mono)}
.map3d-cfg-dim text.v{text-anchor:start;dominant-baseline:central}
.map3d-cfg-side{overflow:auto;padding:10px 12px;border-left:1px solid var(--line-strong);background:var(--panel);display:flex;flex-direction:column;gap:6px}
.map3d-cfg-side-h{margin:6px 0 0;font:600 11px/1.3 var(--map3d-mono);letter-spacing:.08em;text-transform:uppercase;color:var(--muted)}
.map3d-cfg-list{display:flex;flex-direction:column;gap:2px}
.map3d-cfg-list button{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:8px;padding:4px 8px;border:1px solid transparent;background:none;color:var(--ink);font:12px/1.3 var(--map3d-mono);text-align:left;cursor:pointer}
.map3d-cfg-list button[data-zone]{grid-template-columns:minmax(0,1fr) auto}
.map3d-cfg-list button:hover{border-color:var(--line)}
.map3d-cfg-list button[aria-pressed="true"]{border-color:var(--accent);background:var(--accent-quiet)}
.map3d-cfg-list button.is-bad{color:var(--danger)}
.map3d-cfg-list i{width:10px;height:10px;background:var(--room,var(--muted))}
.map3d-cfg-list span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.map3d-cfg-list small{color:var(--muted);font-variant-numeric:tabular-nums}
.map3d-cfg-edit{display:flex;flex-direction:column;gap:6px;padding:8px;border:1px solid var(--line-strong);background:var(--panel-raised)}
.map3d-cfg-field{display:grid;gap:2px;font:11px/1.3 var(--map3d-mono);color:var(--muted)}
.map3d-cfg-field input,.map3d-cfg-field select{min-width:0;padding:3px 6px;border:1px solid var(--line);background:var(--bg);color:var(--ink);font:12px/1.4 var(--map3d-mono)}
.map3d-cfg-size{display:grid;grid-template-columns:1fr 1fr;gap:6px}
.map3d-cfg-bad{margin:0;color:var(--danger);font:11px/1.3 var(--map3d-mono)}
.map3d-cfg-status{margin:0;padding:6px 12px;border-top:1px solid var(--line-strong);background:var(--panel);font:12px/1.4 var(--map3d-mono);color:var(--muted)}
.map3d-cfg-status[data-state="bad"]{color:var(--danger)}
.map3d-cfg-status[data-state="dirty"]{color:var(--amber)}

/* Переходи між корпусами: перемикач активний / закритий */
.map3d-site-links-title{margin-top:var(--space-4,16px)}
.map3d-site-links{display:grid;gap:4px}
.map3d-site-link{display:flex;justify-content:space-between;gap:8px;align-items:center;min-height:30px;padding:4px 8px;border:1px solid var(--line);background:var(--panel);color:var(--ink);font:inherit;font-size:13px;text-align:left;cursor:pointer;border-radius:3px}
.map3d-site-link:hover{border-color:var(--muted)}
.map3d-site-link:focus-visible{outline:2px solid var(--accent);outline-offset:1px}
.map3d-site-link[aria-pressed="true"]{border-color:var(--line);background:var(--panel)} /* не акцент: акцент — лише вибраний поверх */
.map3d-site-link[aria-pressed="false"] .map3d-site-link-state{color:var(--danger)}
.map3d-site-link-state{font-size:12px;color:var(--muted);white-space:nowrap}

/* Глиняний вигляд: круглі лічильники з наявних даних корпусу. */
.map3d-clay-labels .map3d-site-label{display:flex;align-items:center;justify-content:center;width:34px;height:34px;padding:0;border-radius:50% !important;background:var(--panel);border:1px solid var(--muted);color:var(--ink);font-size:12px;font-weight:650;box-shadow:0 4px 12px #0003;}
.map3d-clay-labels .map3d-site-label[data-state="dim"]{opacity:.75;}
.map3d-clay-labels .map3d-site-label[data-state="selected"]{background:var(--panel);color:var(--ink);border-color:var(--ink);box-shadow:0 0 0 2px color-mix(in srgb,var(--accent) 35%,transparent),0 4px 12px #0003;}
.map3d-clay-labels .map3d-site-tag[hidden]{display:none;}

/* clay: туман на краю поля зору — три м'які хмари дрейфують повільно; під canvas (z-index 0), тож видно лише за димкою землі */
.map3d-fog{position:absolute;inset:0;z-index:0;pointer-events:none;overflow:hidden;opacity:1}
/* 01.10: туман ПОЗАДУ сцени — під прозорим canvas, тож видно лише там, де земля тане в димці (горизонт угорі кадру) */
.map3d-fog::before{content:"";position:absolute;inset:0;background:linear-gradient(to bottom,color-mix(in srgb,var(--muted) 30%,transparent),color-mix(in srgb,var(--muted) 14%,transparent) 35%,transparent 70%)}
.map3d-fog i{position:absolute;inset:0;background:
  radial-gradient(40% 30% at 20% 30%,color-mix(in srgb,var(--muted) 38%,transparent),transparent 70%),
  radial-gradient(35% 28% at 75% 25%,color-mix(in srgb,var(--ink) 18%,transparent),transparent 70%),
  radial-gradient(45% 30% at 60% 80%,color-mix(in srgb,var(--muted) 32%,transparent),transparent 70%);
  filter:blur(18px);animation:map3d-fog-drift 60s ease-in-out infinite alternate}
.map3d-fog i:nth-child(2){animation-duration:85s;animation-delay:-20s;transform:scale(1.2) rotate(40deg);opacity:.7}
.map3d-fog i:nth-child(3){animation-duration:110s;animation-delay:-50s;transform:scale(1.35) rotate(-30deg);opacity:.5}
@keyframes map3d-fog-drift{0%{translate:-6% -3%}50%{translate:4% 3%}100%{translate:7% -4%}}
@media (prefers-reduced-motion:reduce){.map3d-fog i{animation:none}}

/* clay: щіпка sci-fi (власник 01.10) — тонкі HUD-кутики кадру */
.map3d-hud{position:absolute;inset:10px;z-index:3;pointer-events:none;
  --c:color-mix(in srgb,var(--accent) 55%,transparent);
  background:
   linear-gradient(var(--c),var(--c)) top left/22px 1px,linear-gradient(var(--c),var(--c)) top left/1px 22px,
   linear-gradient(var(--c),var(--c)) top right/22px 1px,linear-gradient(var(--c),var(--c)) top right/1px 22px,
   linear-gradient(var(--c),var(--c)) bottom left/22px 1px,linear-gradient(var(--c),var(--c)) bottom left/1px 22px,
   linear-gradient(var(--c),var(--c)) bottom right/22px 1px,linear-gradient(var(--c),var(--c)) bottom right/1px 22px;background-repeat:no-repeat}
/* скан-лінію прибрано (власник 01.10) — лишились тільки кутики */

.map3d-terraform{border:1px solid var(--line,var(--border));border-radius:8px;padding:10px;margin-bottom:12px;background:var(--panel-raised)}
.map3d-terraform h3{margin:0 0 4px}
.map3d-terraform-group{font-size:12px;color:var(--muted);margin:10px 0 4px;text-transform:uppercase;letter-spacing:.04em}
.map3d-terraform-item{display:grid;gap:4px;padding:6px 0;border-top:1px solid var(--line,var(--border))}
.map3d-terraform-item>p{margin:0;font-size:13px}
.map3d-terraform-field{display:grid;grid-template-columns:1fr 2fr auto;gap:8px;align-items:center;font-size:12px;color:var(--muted)}
.map3d-terraform-val{min-width:3ch;text-align:right;color:var(--ink,var(--foreground))}
.map3d-terraform-actions{display:flex;justify-content:space-between;gap:8px;margin-top:10px}

/* конфігуратор: підкладка плану, притінення поза зонами, напрямні прилипання (01.10) */
.map3d-cfg.has-underlay .map3d-cfg-wall polygon{fill:none}
.map3d-cfg-under image{pointer-events:none}
.map3d-cfg[data-tool="plan"] .map3d-cfg-plan{cursor:move}
.map3d-cfg-dimout path{fill:var(--panel);fill-opacity:.55;pointer-events:none}
.map3d-cfg-guide{stroke:var(--accent);stroke-width:1;stroke-dasharray:3 3;vector-effect:non-scaling-stroke;opacity:.7;pointer-events:none}
.map3d-cfg-draft-dim{fill:var(--ink);text-anchor:middle;dominant-baseline:middle;font-family:var(--map3d-mono);pointer-events:none;paint-order:stroke;stroke:var(--panel);stroke-width:.25}
.map3d-cfg-under-ctl{display:flex;flex-wrap:wrap;gap:6px;align-items:end;margin-bottom:8px}
.map3d-cfg-layers{display:flex;flex-direction:column;gap:6px;margin-bottom:8px}
.map3d-cfg-layer{display:grid;grid-template-columns:auto minmax(0,1fr) auto auto;align-items:center;gap:6px;padding:4px 6px;border:1px solid transparent}
.map3d-cfg-layer.is-active{border-color:var(--accent);background:var(--accent-quiet)}
.map3d-cfg-layer input[type=range]{grid-column:1/-1;width:100%;accent-color:var(--accent)}
.map3d-cfg-layer-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font:12px/1.3 var(--map3d-mono);color:var(--ink)}
.map3d-cfg-eye{width:24px;height:24px;border:1px solid var(--line);background:none;color:var(--accent);cursor:pointer;font-size:12px;line-height:1}
.map3d-cfg-eye[aria-pressed="false"]{color:var(--muted)}
.map3d-cfg-link{align-self:flex-start;border:0;background:none;padding:4px 8px;color:var(--accent);font:12px/1.3 var(--map3d-mono);cursor:pointer;text-decoration:underline;text-underline-offset:3px}
.map3d-cfg-under image.is-multiply{mix-blend-mode:multiply}
.map3d-cfg-under-ctl .map3d-cfg-field{flex:1 1 100%}
.map3d-cfg-under-ctl input[type=range]{width:100%;accent-color:var(--accent)}

/* Плашки місць (власник 02.10): назва відділення/корпусу над будівлею; з вибраним поверхом — стовпчик швидкої навігації
   в лівому верхньому куті. Вибрана — більша й непрозора; решта — тихі, але клікабельні. Переліт — лише при зміні режиму. */
.map3d-place{position:absolute;left:0;top:0;display:flex;flex-direction:column;align-items:flex-start;gap:1px;max-width:240px;padding:5px 10px 5px 9px;
  pointer-events:auto;cursor:pointer;font:inherit;text-align:left;color:var(--ink);background:color-mix(in srgb,var(--panel) 86%,transparent);
  border:1px solid color-mix(in srgb,var(--ink) 18%,transparent);border-left:2px solid color-mix(in srgb,var(--accent) 70%,transparent);border-radius:3px;
  box-shadow:0 6px 18px #0004;backdrop-filter:blur(6px);transform-origin:0 0;transition:opacity .35s ease,background-color .35s ease,border-color .35s ease,padding .35s ease}
.map3d-place-t{font-size:12.5px;font-weight:600;line-height:1.25;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}
.map3d-place-s{font-family:var(--map3d-mono,ui-monospace,monospace);font-size:10.5px;letter-spacing:.06em;color:var(--muted);line-height:1.2;transition:font-size .35s ease}
.map3d-place:hover{border-color:color-mix(in srgb,var(--ink) 40%,transparent);background:color-mix(in srgb,var(--panel-raised) 92%,transparent)}
.map3d-place:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.map3d-place[data-state="dim"]{opacity:.5;box-shadow:none;background:color-mix(in srgb,var(--panel) 55%,transparent);border-left-color:color-mix(in srgb,var(--muted) 60%,transparent)}
.map3d-place[data-state="dim"]:hover{opacity:.95}
.map3d-place[data-state="selected"]{opacity:1;padding:8px 14px 8px 12px;background:var(--panel-raised);border-color:color-mix(in srgb,var(--accent) 55%,var(--line,#444));border-left:3px solid var(--accent);
  box-shadow:0 0 0 1px color-mix(in srgb,var(--accent) 25%,transparent),0 10px 26px #0006}
.map3d-place[data-state="selected"] .map3d-place-t{font-size:15px}
.map3d-site-labels.is-moving .map3d-place{transition:transform .5s cubic-bezier(.2,.8,.2,1),opacity .35s ease,background-color .35s ease,border-color .35s ease,padding .35s ease}
@media(prefers-reduced-motion:reduce){.map3d-place,.map3d-site-labels.is-moving .map3d-place{transition:none}}

/* ребро вибраної зони — невидима широка ціль: тягнеш стіну; курсор — перпендикулярний */
.map3d-cfg-edgehit{stroke:transparent;fill:none;cursor:move;pointer-events:stroke}
.map3d-cfg-zone{cursor:move}

/* інструменти складних форм: «Заповнити» — курсор-заливка, «Обвести» — хрест */
.map3d-cfg[data-tool="fill"] .map3d-cfg-plan{cursor:cell}
.map3d-cfg[data-tool="trace"] .map3d-cfg-plan{cursor:crosshair}

/* ліва панель «Клік на плані»: піктограма + назва + клавіша; активний — суцільний акцент */
.map3d-cfg-tools{display:flex;flex-direction:column;gap:3px;padding:10px 8px;border-right:1px solid var(--line-strong);background:var(--panel);overflow:auto}
.map3d-cfg-tools-h{margin:0 2px 4px;font:600 11px/1.3 var(--map3d-mono);letter-spacing:.08em;text-transform:uppercase;color:var(--ink)}
.map3d-cfg-tools-sub{margin:10px 2px 2px;font:11px/1.3 var(--map3d-mono);letter-spacing:.06em;text-transform:uppercase;color:var(--muted)}
.map3d-cfg-tools .map3d-cfg-tool{display:grid;grid-template-columns:18px 1fr auto;align-items:center;gap:8px;width:100%;padding:8px 8px;text-align:left;font-size:12.5px;letter-spacing:.02em}
.map3d-cfg-tool kbd{font:11px/1 var(--map3d-mono);padding:2px 5px;border:1px solid var(--line);color:var(--muted);background:transparent}
.map3d-cfg-ico{width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:1.4;stroke-linejoin:round}
.map3d-cfg-tool[aria-pressed="true"]{background:var(--accent);border-color:var(--accent);color:var(--bg);font-weight:600}
.map3d-cfg-tool[aria-pressed="true"] kbd{color:inherit;border-color:currentColor}
/* над планом: що зараз зробить клік */
.map3d-cfg-stage{position:relative;min-width:0;min-height:0;overflow:hidden}
.map3d-cfg-mode{position:absolute;left:12px;top:12px;display:flex;align-items:center;gap:10px;max-width:calc(100% - 24px);padding:8px 10px;border:1px solid var(--line-strong);border-left:3px solid var(--accent);background:color-mix(in srgb,var(--panel) 92%,transparent);pointer-events:auto}
.map3d-cfg-mode>.map3d-cfg-ico{width:20px;height:20px;color:var(--accent);flex:none}
.map3d-cfg-mode-t{display:flex;flex-direction:column;gap:2px;min-width:0}
.map3d-cfg-mode-t b{font:600 13px/1.25 var(--map3d-mono);color:var(--ink)}
.map3d-cfg-mode-t span{font:12px/1.35 var(--map3d-mono);color:var(--muted)}
.map3d-cfg-mode-x{flex:none;padding:4px 8px;border:1px solid var(--line);background:var(--panel-raised);color:var(--ink);font:11px/1.3 var(--map3d-mono);cursor:pointer}
.map3d-cfg-mode-x:hover{border-color:var(--muted)}
.map3d-cfg-cursor{position:absolute;left:0;top:0;transform:translate(-999px,-999px);pointer-events:none;color:var(--accent)}
.map3d-cfg-cursor:empty{display:none}
.map3d-cfg-cursor .map3d-cfg-ico{width:18px;height:18px;padding:3px;box-sizing:content-box;background:var(--panel);border:1px solid var(--accent)}

/* де живуть правки мапи: сервер eRadius (спокійно) чи лише браузер (увага) */
.map3d-store-badge{display:inline-block;margin-top:4px;font-size:var(--fs-caption);color:var(--muted)}
.map3d-store-badge::before{content:'';display:inline-block;width:7px;height:7px;border-radius:50%;margin-right:6px;background:#16a579;vertical-align:1px}
.map3d-store-badge[data-mode=local]{color:var(--warn,#e0a12b)}
.map3d-store-badge[data-mode=local]::before{background:var(--warn,#e0a12b)}

/* Розділ eRadius «Мапа ділянки»: сцена займає висоту вікна під шапкою розділу */
.map3d-site-section .map3d-site .map3d-stage{height:max(520px,calc(100vh - 230px))}
.map3d-site-section .map3d-site .map3d-aside{max-height:max(520px,calc(100vh - 230px))}
.map3d-site-section .map3d-toolbar .map3d-store-badge{margin:0 0 0 auto;align-self:center}

/* 13.10 Бейджі приміщень (вигляд «статус + бейджі», site-scene.js placeBadges): значок типу 40 px + назва 14 px + плашка стану.
   Шар згасає під час руху камери (.is-hidden), позиція — transform із JS. */
.map3d-room-badges{position:absolute;inset:0;z-index:3;pointer-events:none;overflow:hidden;transition:opacity .25s ease}
.map3d-room-badges.is-hidden{opacity:0}
.map3d-room-badge{position:absolute;left:0;top:0;display:flex;align-items:flex-start;gap:6px}
.map3d-room-badge[data-mode="none"]{display:none}
.map3d-room-badge[data-mode="icon"] .map3d-room-badge-t{display:none}
.map3d-room-badge-ic{flex:none;width:40px;height:40px;border-radius:50%;display:grid;place-items:center;background:var(--panel-raised);color:var(--ink);
  border:3px solid var(--line-strong);box-shadow:0 2px 6px rgba(0,0,0,.28)}
.map3d-room-badge-ic svg{width:23px;height:23px}
.map3d-room-badge-t{display:flex;flex-direction:column;align-items:flex-start;gap:4px;padding-top:9px}
.map3d-room-badge-n{font:650 14px/1 var(--font-ui,system-ui);letter-spacing:.04em;text-transform:uppercase;color:var(--ink);white-space:nowrap;
  padding:4px 7px;border-radius:6px;background:color-mix(in srgb,var(--panel-raised) 84%,transparent)}
.map3d-room-badge-s{font:700 13px/1 var(--font-ui,system-ui);padding:4px 8px;border-radius:9px;color:#fff;white-space:nowrap;background:var(--warning)}
.map3d-room-badge-s[hidden]{display:none}
.map3d-room-badge[data-status="alarm"] .map3d-room-badge-ic{border-color:var(--danger);animation:map3d-badge-pulse 2.4s ease-in-out infinite}
.map3d-room-badge[data-status="alarm"] .map3d-room-badge-s{background:var(--danger)}
.map3d-room-badge[data-status="queue"] .map3d-room-badge-ic,.map3d-room-badge[data-status="warn"] .map3d-room-badge-ic{border-color:var(--warning)}
.map3d-room-badge:is([data-status="busy"],[data-status="wait"]) .map3d-room-badge-ic{border-color:var(--accent)}
.map3d-room-badge:is([data-status="busy"],[data-status="wait"]) .map3d-room-badge-s{background:var(--accent-solid,var(--accent))}
@keyframes map3d-badge-pulse{0%,100%{box-shadow:0 0 0 0 color-mix(in srgb,var(--danger) 55%,transparent)}50%{box-shadow:0 0 0 8px transparent}}
@media (prefers-reduced-motion:reduce){.map3d-room-badge-ic{animation:none!important}.map3d-room-badges{transition:none}}
.map3d-room-badge-ic{color:var(--room,var(--ink))} /* 13.10: значок у кольорі типу — легкий identity-акцент */
.map3d-room-badge-ic{border-color:color-mix(in srgb,var(--room,var(--line-strong)) 55%,var(--line-strong))}
.map3d-site canvas,.map3d-stage canvas{cursor:grab}.is-grabbing,.is-grabbing canvas{cursor:grabbing!important}
.map3d-room-badge-w{display:flex;flex-wrap:wrap;gap:4px 6px;font:500 12.5px/1.15 var(--font-ui,system-ui);color:var(--ink);padding:3px 7px;background:color-mix(in srgb,var(--panel-raised) 84%,transparent)}
.map3d-room-badge-w[hidden]{display:none}
.map3d-room-badge-w .is-occ{color:var(--muted)}.map3d-room-badge-w .is-occ::after{content:" · інколи"}
.map3d-room-badge-w .is-eq{font-family:var(--map3d-mono,ui-monospace,monospace);font-size:12px;color:var(--muted)}
/* 13.10: бейдж — кнопка; люди видно лише в розгорнутому (клік по бейджу або приміщенню) */
.map3d-room-badge{appearance:none;background:none;border:0;padding:0;margin:0;font:inherit;color:inherit;text-align:left;cursor:pointer;pointer-events:auto}
.map3d-room-badge:focus-visible .map3d-room-badge-ic{outline:2px solid var(--accent);outline-offset:2px}
.map3d-room-badge.is-open .map3d-room-badge-ic{border-color:var(--accent);box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 30%,transparent),0 2px 6px rgba(0,0,0,.28)}
.map3d-room-badge.is-open .map3d-room-badge-n{background:color-mix(in srgb,var(--accent) 22%,var(--panel-raised))}
.map3d-room-badge-w{flex-direction:column;align-items:flex-start;gap:2px}
.map3d-room-badge-ic.is-empty{width:14px;height:14px;margin:13px 0 0;border-width:2px} /* тип без іконки — лише крапка */
.map3d-room-badge-ic svg{width:24px;height:24px}
/* 13.10: бейдж масштабується з зумом (--bk), розгорнутий — люди по рядку, крупніше; легше влучити */
.map3d-room-badge{transform-origin:0 0}
.map3d-room-badge::before{content:"";position:absolute;inset:-8px -10px -8px -8px} /* ширша зона кліку */
.map3d-room-badge.is-open .map3d-room-badge-w{font-size:13.5px;gap:4px;padding:6px 9px;box-shadow:0 4px 14px rgba(0,0,0,.3)}
.map3d-room-badge.is-open{z-index:2}

/* ── п.2–4 хвилі 1 (15.10): бейдж не ловить миші — колесо й перетягування над ним доходять до камери; клік ловить canvas.
   Рівні деталізації: dot (точка), icon (значок), full (значок + назва), pin (великий пін вибраного з людьми). ── */
.map3d-room-badge{pointer-events:none}
.map3d-room-badge[data-mode="dot"] .map3d-room-badge-t,.map3d-room-badge[data-mode="dot"] .map3d-room-badge-ic svg{display:none}
.map3d-room-badge[data-mode="dot"] .map3d-room-badge-ic{width:16px;height:16px;margin:0;border-width:2px;background:var(--room,var(--muted));box-shadow:0 1px 3px rgba(0,0,0,.35)}
.map3d-room-badge[data-mode="dot"][data-status="alarm"] .map3d-room-badge-ic{background:var(--danger)}
.map3d-room-badge[data-mode="dot"]:is([data-status="queue"],[data-status="warn"]) .map3d-room-badge-ic{background:var(--warning)}
.map3d-room-badge[data-mode="dot"]:is([data-status="busy"],[data-status="wait"]) .map3d-room-badge-ic{background:var(--accent)}
.map3d-room-badge[data-mode="pin"]{z-index:5}
.map3d-room-badge[data-mode="pin"] .map3d-room-badge-ic{width:52px;height:52px;border-color:var(--accent);box-shadow:0 0 0 4px color-mix(in srgb,var(--accent) 30%,transparent),0 4px 12px rgba(0,0,0,.4)}
.map3d-room-badge[data-mode="pin"] .map3d-room-badge-ic svg{width:30px;height:30px}
.map3d-room-badge[data-mode="pin"] .map3d-room-badge-t{padding-top:14px}
.map3d-room-badge[data-mode="pin"] .map3d-room-badge-n{font-size:16px}

/* ── п.10 хвилі 1: ореол навколо підписів на мапі — колір фону теми (токен --bg-base), тож у темній темі темний, у світлій світлий;
   підпис читається на будь-якій плиті/землі, не лише на власній підкладці. ── */
.map3d-room-badge-n,.map3d-room-badge-w span,.map3d-site-label,.map3d-place-t,.map3d-place-s{
  text-shadow:0 0 2px var(--bg-base),0 0 2px var(--bg-base),0 0 5px var(--bg-base),1px 0 0 var(--bg-base),-1px 0 0 var(--bg-base),0 1px 0 var(--bg-base),0 -1px 0 var(--bg-base)}

/* ── п.8 хвилі 1: згортувана легенда типів і статусів (кольори — з таблиці правил room-types.js через --sw) ── */
.map3d-legend{position:absolute;bottom:14px;left:12px;z-index:4;pointer-events:auto;display:flex;flex-direction:column;align-items:flex-start;gap:6px}
.map3d-legend[hidden]{display:none}
.map3d-legend-btn{appearance:none;cursor:pointer;font:600 12.5px/1 var(--font-ui,system-ui);padding:8px 12px;color:var(--ink);background:color-mix(in srgb,var(--panel-raised) 92%,transparent);border:1px solid var(--line-strong)}
.map3d-legend-btn:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.map3d-legend.is-open .map3d-legend-btn{border-color:var(--accent)}
.map3d-legend-body{display:flex;flex-direction:column;gap:5px;min-width:190px;padding:10px 12px;color:var(--ink);background:color-mix(in srgb,var(--panel-raised) 94%,transparent);border:1px solid var(--line-strong);box-shadow:0 6px 18px #0004;order:-1}
.map3d-legend-body[hidden]{display:none}
.map3d-legend-h{font:700 10.5px/1 var(--font-ui,system-ui);letter-spacing:.08em;text-transform:uppercase;color:var(--muted);margin-top:4px}
.map3d-legend-h:first-child{margin-top:0}
.map3d-legend-row{display:flex;align-items:center;gap:8px;font:500 12.5px/1.2 var(--font-ui,system-ui)}
.map3d-legend-sw{flex:none;width:14px;height:14px;background:var(--sw);border:1px solid var(--line-strong)}

/* п.6 хвилі 1: рядок керування мапою — «2D план/3D» і «Легенда» */
.map3d-legend-bar{display:flex;gap:6px}
.map3d-plan-btn[aria-pressed="true"]{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 22%,var(--panel-raised))}

/* 15.10: креслення поверху — окремий режим на весь екран. Відкрите з головного екрана, воно лежало під боковим меню,
   панелями «Люди»/«Відділення» й годинником (z до 900) — кнопки «Зберегти» не було видно. */
/* «Ліпити рельєф» (site-sculpt-panel.js): панель на сцені зліва вгорі, камера лишається правою кнопкою/колесом */
.map3d-sculpt{position:absolute;right:16px;top:72px;z-index:6;width:min(300px,calc(100% - 24px));max-height:calc(100% - 24px);overflow:auto;display:grid;gap:8px;padding:10px;border:1px solid var(--line,var(--border));border-radius:8px;background:color-mix(in srgb,var(--panel-raised) 92%,transparent);backdrop-filter:blur(6px)}
.map3d-sculpt[hidden]{display:none}
.map3d-sculpt-title{margin:0;font-weight:600}
.map3d-sculpt-tools{display:grid;grid-template-columns:repeat(3,1fr);gap:6px}
.map3d-sculpt-tools [aria-pressed="true"]{border-color:var(--accent);color:var(--ink,var(--foreground));background:var(--accent-quiet,transparent)}
.map3d-sculpt-params{display:grid;gap:6px}
.map3d-sculpt-field{display:grid;grid-template-columns:1fr 1.4fr auto;gap:8px;align-items:center;font-size:12px;color:var(--muted)}
.map3d-sculpt-side{font-size:12px;color:var(--muted)}
.map3d-sculpt-hint{margin:0}
.map3d-sculpt-note{margin:0;font-size:12px;color:var(--ink,var(--foreground));min-height:1.2em}
.map3d-sculpt-actions{display:flex;flex-wrap:wrap;gap:6px}

/* 16.10: кнопка «Ліпити рельєф» просто на мапі (головний екран без тулбара) — під годинником, по центру */
.map3d-sculpt-fab{position:absolute;top:132px;left:50%;transform:translateX(-50%);z-index:7;box-shadow:0 2px 10px rgb(0 0 0 / .35)}
.map3d-sculpt-fab[aria-pressed="true"]{border-color:var(--accent)}
body.map3d-sculpting #startPanelLeft,body.map3d-sculpting #startPanelRight{display:none!important}
