/* Local typefaces supplied with the project, used only by the floor map. */
@font-face { font-family:'XL Map Condensed'; font-style:normal; font-weight:700; font-display:swap; src:url('../fonts/XLMap-Condensed.woff2') format('woff2'); }
@font-face { font-family:'XL Map Rounded'; font-style:normal; font-weight:400; font-display:swap; src:url('../fonts/XLMap-Rounded.woff2') format('woff2'); }
/* The floor map has its own palette and layout; all geometry is source traced. */
.xl-floor-map {
  --canvas:#f5f6f8; --plate:#fff; --wall:#adb7c6; --ink:#263147; --muted:#7f8899;
  --panel:#fff; --edge:#e8ebf0; --field:#f5f6f9; --hover:#f5f6fa;
  --shopping:#e1e6f6; --food:#f8dfc8; --fun:#e8dbf5; --services:#d4eae7;
  --beauty:#f1deeb; --home:#e0edda; --sport:#dae8f4;
  --landmark:#fff; --landmark-ink:#7e8b9c;
  --m-panel-title:var(--ink); --m-panel-text:var(--ink); --m-panel-mute:var(--muted);
  --m-tip:var(--panel); --m-hint:var(--muted);
  height:calc(100dvh - 100px); min-height:0; background:var(--canvas);
  color:var(--ink); font-family:Inter,Arial,sans-serif;
}
.xl-floor-map[data-theme="dark"] {
  --canvas:#141923; --plate:#252d3b; --wall:#536073; --ink:#edf1f8; --muted:#9ba7b9;
  --panel:#202734; --edge:#343e4f; --field:#2b3444; --hover:#2b3444;
  --shopping:#394b73; --food:#71533c; --fun:#5b4678; --services:#365e60;
  --beauty:#6a435e; --home:#4a614a; --sport:#365a73;
  --landmark:#334051; --landmark-ink:#c3cedc;
}
.xl-floor-map #map-content { position:absolute; inset:0; background:none; }
.xl-floor-map #map-content>svg { width:100%; height:100%; display:block; touch-action:none; cursor:grab; }
.xl-floor-map #map-content>svg:active { cursor:grabbing; }
.floor-plate { fill:var(--plate); stroke:var(--wall); stroke-width:1.5; filter:drop-shadow(0 6px 9px #22314a0a); }
.floor-unit { fill:var(--shopping); stroke:var(--wall); stroke-width:1; vector-effect:non-scaling-stroke; cursor:pointer; transition:fill .18s,opacity .18s; }
.floor-unit.tone-food { fill:var(--food); }
.floor-unit.tone-fun { fill:var(--fun); }
.floor-unit.tone-services { fill:var(--services); }
.floor-unit.tone-beauty { fill:var(--beauty); }
.floor-unit.tone-home { fill:var(--home); }
.floor-unit.tone-sport { fill:var(--sport); }
.floor-unit.hovered,.floor-unit:focus { fill:#f6b4c1; outline:none; }
.floor-unit.selected { fill:#ee1b3c; stroke:#aa1230; stroke-width:2; }
.floor-walls { fill:var(--wall); opacity:.75; pointer-events:none; }
.floor-label { cursor:pointer; transition:opacity .15s; }
.floor-label.is-offscreen { visibility:hidden; }
.brand-label { fill:var(--wordmark-ink,var(--ink)); font-family:var(--wordmark-font,Inter),Arial,sans-serif; font-weight:var(--wordmark-weight,650); letter-spacing:var(--wordmark-tracking,0); font-synthesis:weight; }
[data-theme="dark"] .brand-label { fill:var(--ink); }
.label-card { fill:var(--panel); stroke:var(--edge); stroke-width:1; }
.label-leader { fill:none; stroke:var(--muted); stroke-width:1; pointer-events:none; }
.label-pin { fill:var(--muted); stroke:var(--plate); stroke-width:1; pointer-events:none; }
.floor-label.selected[data-mode="inside"] .brand-label { fill:#fff; }
.floor-label.selected .label-card { stroke:#ee1b3c; }
.floor-unit.dim,.floor-label.dim { opacity:.17; }
.floor-landmarks { pointer-events:none; }
.floor-landmark circle { fill:var(--landmark); stroke:var(--wall); stroke-width:1; }
.floor-landmark path { fill:none; stroke:var(--landmark-ink); stroke-width:1.4; stroke-linejoin:round; stroke-linecap:round; }
/* Проходы: вход в ТЦ (красный, фирменный) и выход на паркинг (синий, как знак P). */
.xl-floor-map { --gate-entrance:#e3173a; --gate-parking:#1f5bb0; --gate-paper:#fff; }
.xl-floor-map[data-theme="dark"] { --gate-entrance:#f0405e; --gate-parking:#3f7fd6; --gate-paper:#fff; }
.floor-gates { pointer-events:none; }
.floor-gate { --gate:var(--gate-entrance); }
.floor-gate--parking { --gate:var(--gate-parking); }
.gate-leader { stroke:var(--gate); stroke-width:1.5; stroke-dasharray:3 3; opacity:.8; }
.gate-dot { fill:var(--gate); stroke:var(--gate-paper); stroke-width:2; }
.gate-ring { fill:var(--gate); opacity:.22; transform-box:fill-box; transform-origin:center; animation:gatePulse 2.4s ease-out infinite; }
.gate-card { fill:var(--gate); filter:drop-shadow(0 4px 10px #1a24382e); }
.gate-title { fill:var(--gate-paper); font-family:Inter,Arial,sans-serif; font-weight:700; letter-spacing:.01em; }
.gate-sub { fill:var(--gate-paper); font-family:Inter,Arial,sans-serif; font-weight:500; opacity:.88; }
.gate-arrow { fill:none; stroke:var(--gate-paper); stroke-width:2; stroke-linecap:round; stroke-linejoin:round; }
.gate-sign { fill:var(--gate-paper); }
.gate-sign-letter { fill:var(--gate-parking); font-family:Inter,Arial,sans-serif; font-weight:800; }
@keyframes gatePulse { 0% { transform:scale(.55); opacity:.38; } 70%,100% { transform:scale(1.9); opacity:0; } }
@media (prefers-reduced-motion:reduce) { .gate-ring { animation:none; opacity:.18; } }
.map-status { position:absolute; top:50%; left:60%; transform:translate(-50%,-50%); z-index:4; padding:18px 24px; border-radius:14px; background:var(--panel); box-shadow:0 8px 32px #17253d16; font-size:14px; }
.map-status button { display:block; margin:14px auto 0; color:#ee1b3c; font-weight:600; }
.xl-floor-map .mapl { left:24px; top:24px; bottom:24px; width:306px; border:1px solid var(--edge); border-radius:20px; background:var(--panel); backdrop-filter:none; box-shadow:0 8px 32px #17253d0a; overflow:hidden; }
.xl-floor-map .mapl__head { padding:25px 20px 16px; border:0; }
.mapl__eyebrow { font-size:9px; font-weight:650; letter-spacing:.16em; color:var(--muted); }
.xl-floor-map .mapl__title { font-family:Inter,Arial,sans-serif; font-size:24px; line-height:1.3; font-weight:600; letter-spacing:-.045em; text-transform:none; margin:7px 0 20px; }
.mapl__search { display:flex; align-items:center; gap:8px; height:45px; background:var(--field); border:1px solid transparent; border-radius:10px; padding-left:12px; }
.mapl__search:focus-within { border-color:#ee1b3c; }
.mapl__search svg { width:18px; height:18px; flex:0 0 18px; color:var(--muted); }
.xl-floor-map .mapl__filter { height:43px; padding:0 9px 0 0; border:0; background:none; color:var(--ink); font-size:12px; min-width:0; }
.xl-floor-map .mapl__filter:focus { outline:none; border:0; }
.xl-floor-map .mapl__filter::placeholder { color:var(--muted); }
.xl-floor-map .mapl__chips { display:flex; flex-wrap:wrap; gap:5px; margin-top:13px; }
.xl-floor-map .mapl__chip { border:1px solid var(--edge); border-radius:7px; padding:6px 9px; background:transparent; color:var(--muted); font-size:10px; letter-spacing:0; text-transform:none; }
.xl-floor-map .mapl__chip:hover { color:var(--ink); background:var(--hover); }
.xl-floor-map .mapl__chip.is-on { background:var(--ink); color:var(--panel); border-color:var(--ink); }
.xl-floor-map .mapl__bar { padding:12px 20px 10px; display:flex; align-items:center; gap:6px; font-size:10px; letter-spacing:.02em; color:var(--muted); text-transform:none; border-top:1px solid var(--edge); }
.xl-floor-map .mapl__bar>b { display:inline-flex; min-width:21px; height:20px; align-items:center; justify-content:center; padding:0 5px; border-radius:6px; background:var(--field); font-size:9px; font-weight:500; }
.xl-floor-map .mapl__reset { margin-left:auto; font-size:10px; letter-spacing:0; color:#ee1b3c; white-space:nowrap; }
.xl-floor-map .mapl__list { padding:0 10px 12px; margin:0; flex:1; min-height:0; scrollbar-width:thin; scrollbar-color:var(--wall) transparent; }
.xl-floor-map .mapl__btn { width:100%; gap:10px; padding:11px 9px; color:var(--ink); border-radius:10px; }
.xl-floor-map .mapl__btn:hover,.xl-floor-map .mapl__btn.active { background:var(--hover); color:var(--ink); }
.xl-floor-map .mapl__ava { width:36px; height:36px; flex:0 0 36px; background:var(--field); border:1px solid var(--edge); color:var(--brand); border-radius:10px; font-size:11px; font-weight:700; }
.xl-floor-map .mapl__ava--logo { padding:4px; background:#fff; }
.xl-floor-map .mapl__ava--dark { background:#1b2029; }
.xl-floor-map .mapl__ava img { width:100%; height:100%; object-fit:contain; }
[data-theme="dark"] .mapl__ava { color:var(--ink)!important; }
.xl-floor-map .mapl__name { font-size:12px; line-height:1.5; font-weight:550; }
.xl-floor-map .mapl__cat { font-size:9px; letter-spacing:0; line-height:1.5; text-transform:none; }
.mapl__floor { width:20px; flex:0 0 20px; color:var(--muted); font-size:11px; text-align:center; }
.mapl__empty { padding:28px 12px; font-size:12px; text-align:center; line-height:1.6; color:var(--muted); }
.mapl__empty b { display:block; color:var(--ink); margin-bottom:6px; }
.mapl__foot { display:flex; justify-content:space-between; align-items:center; padding:13px 20px; border-top:1px solid var(--edge); font-size:10px; color:var(--muted); }
.mapl__location { display:flex; align-items:center; gap:7px; }
.mapl__location svg { width:16px; height:16px; fill:none; stroke:currentColor; stroke-width:1.5; }
.xl-floor-map .mapl__toggle { display:none; }
.map__heading { position:absolute; left:364px; top:24px; pointer-events:none; }
.map__heading>span { color:var(--ink); font-size:20px; font-weight:550; letter-spacing:-.025em; }
.map__heading>p { margin:5px 0 0; font-size:11px; color:var(--muted); }
.xl-floor-map .mapside { right:24px; top:24px; bottom:24px; width:44px; transform:none; display:flex; gap:18px; align-items:stretch; }
.xl-floor-map .map__theme { width:44px; height:44px; background:var(--panel); color:var(--ink); border:1px solid var(--edge); border-radius:12px; box-shadow:0 3px 12px #17253d05; }
.xl-floor-map .map__theme svg { display:block; width:20px; height:20px; margin:auto; }
.xl-floor-map .mapf { margin:auto 0; padding:4px; gap:4px; border-radius:14px; background:var(--panel); border:1px solid var(--edge); box-shadow:0 3px 12px #17253d05; overflow:visible; }
.xl-floor-map .mapf__label { background:none; color:var(--muted); font-size:7px; letter-spacing:0; padding:4px 0; }
.xl-floor-map .mapf__link { width:34px; height:37px; border-radius:9px; background:none; color:var(--ink); font-size:14px; font-weight:500; }
.xl-floor-map .mapf__link:hover { color:#ee1b3c; background:var(--hover); }
.xl-floor-map .mapf__link.active { background:#ee1b3c; color:#fff; }
.xl-floor-map .map__controls { border:1px solid var(--edge); border-radius:12px; background:var(--panel); box-shadow:0 3px 12px #17253d05; }
.xl-floor-map .map__controls button { width:42px; height:40px; border:0; color:var(--ink); background:none; font-size:21px; font-weight:400; }
.xl-floor-map .map__controls button+button { border-top:1px solid var(--edge); }
.xl-floor-map .map__controls button:hover { background:var(--hover); color:#ee1b3c; }
.map__controls svg { width:18px; height:18px; display:block; margin:auto; }
.xl-floor-map .map__legend { position:absolute; left:calc(50% + 135px); top:auto; right:auto; bottom:42px; transform:translateX(-50%); display:flex; gap:18px; width:auto; background:none; border:0; padding:0; box-shadow:none; color:var(--muted); font-size:10px; pointer-events:none; }
.xl-floor-map .map__legend span { display:flex; align-items:center; gap:5px; white-space:nowrap; }
.xl-floor-map .map__legend i { width:9px; height:9px; border-radius:3px; background:var(--shopping); }
.xl-floor-map .map__legend i.legend-food { background:var(--food); }
.xl-floor-map .map__legend i.legend-fun { background:var(--fun); }
.xl-floor-map .map__legend i.legend-services { background:var(--services); }
.xl-floor-map .map__hint { left:calc(50% + 135px); bottom:19px; font-size:10px; letter-spacing:0; color:var(--muted); }
.xl-floor-map #shop-name { border:1px solid var(--edge); background:var(--panel); color:var(--ink); box-shadow:0 6px 24px #17253d15; border-radius:10px; }
.xl-floor-map #shop-name span { text-transform:none; letter-spacing:0; color:var(--muted); }
.map-announcement { position:absolute; width:1px; height:1px; overflow:hidden; clip-path:inset(50%); white-space:nowrap; }
.xl-floor-map button:focus-visible,.xl-floor-map a:focus-visible { outline:2px solid #ee1b3c; outline-offset:2px; }
body.page-map .map__info .map__shopinfo { box-shadow:-10px 0 50px #18213814; }
@media (max-width:991.98px) and (min-width:768px) {
  .xl-floor-map .mapl { width:280px; left:16px; }
  .map__heading { left:318px; }
}
@media (max-width:767.98px) {
  body.page-map .content--map { margin-top:100px; }
  .xl-floor-map { height:calc(100dvh - 100px); }
  /* Телефон: план идёт почти во всю ширину экрана, поэтому правой колонки
     кнопок нет. Этажи — строкой сверху (0 → 4 слева
     направо), тема — справа от них, под ними название этажа; масштаб — щипком,
     кнопка «весь этаж» — внизу справа над панелью поиска. */
  .map__heading { left:14px; top:58px; right:14px; }
  .map__heading>span { font-size:15px; font-weight:600; }
  .map__heading>p { margin-top:3px; font-size:10.5px; line-height:1.35; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
  .xl-floor-map .mapside { top:12px; left:12px; right:12px; bottom:auto; width:auto; flex-direction:row; justify-content:space-between; align-items:center; gap:8px; pointer-events:none; }
  .xl-floor-map .mapside>* { pointer-events:auto; }
  .xl-floor-map .map__theme { order:2; width:36px; height:36px; border-radius:10px; }
  .xl-floor-map .mapf { order:1; margin:0; flex-direction:row-reverse; padding:3px; gap:2px; border-radius:12px; }
  .xl-floor-map .mapf__label { display:none; }
  .xl-floor-map .mapf__link { width:40px; height:30px; font-size:13px; border-radius:9px; }
  .xl-floor-map .map__controls { position:fixed; right:12px; bottom:calc(112px + env(safe-area-inset-bottom,0px)); border-radius:11px; }
  .xl-floor-map .map__controls button { width:38px; height:36px; }
  .xl-floor-map .map__controls [data-zoom="in"],.xl-floor-map .map__controls [data-zoom="out"] { display:none; }
  .xl-floor-map .map__controls button+button { border-top:0; }
  .xl-floor-map .mapl:not(.is-collapsed)~.mapside .map__controls,.xl-floor-map .mapl:not(.is-collapsed)~.map__legend { opacity:0; pointer-events:none; }
  .xl-floor-map .mapl { left:10px; right:10px; bottom:10px; top:auto; width:auto; height:min(56%,420px); max-height:none; border-radius:17px; transition:height .2s; transform:none; }
  .xl-floor-map .mapl.is-collapsed { height:88px; transform:none; }
  .xl-floor-map .mapl__head { padding:22px 13px 12px; }
  .xl-floor-map .mapl__eyebrow,.xl-floor-map .mapl__title,.xl-floor-map .mapl__foot { display:none; }
  .xl-floor-map .mapl__search { margin-right:38px; }
  .xl-floor-map .mapl__filter { font-size:12px; }
  .xl-floor-map .mapl__toggle { display:flex; align-items:center; justify-content:center; position:absolute; top:26px; right:13px; left:auto; width:30px; height:36px; transform:none; color:var(--ink); z-index:2; }
  .xl-floor-map .mapl__toggle::before { display:none; }
  .mapl__toggle svg { width:20px; height:20px; }
  .xl-floor-map .mapl__chips { margin-top:10px; }
  .xl-floor-map .mapl.is-collapsed .mapl__chips,.xl-floor-map .mapl.is-collapsed .mapl__bar,.xl-floor-map .mapl.is-collapsed .mapl__list { display:none; }
  .xl-floor-map .mapl__bar { padding:9px 20px; }
  .xl-floor-map .map__legend { left:14px; bottom:calc(118px + env(safe-area-inset-bottom,0px)); transform:none; gap:12px; font-size:9px; }
  .xl-floor-map .map__legend i { width:7px; height:7px; }
  .xl-floor-map .map__hint { display:none; }
  .map-status { left:50%; width:max-content; max-width:80%; font-size:12px; }
}
/* телефон боком: высоты почти нет — подпись этажа прячем (номер виден в строке этажей) */
@media (max-width:767.98px) and (max-height:600px) {
  .map__heading,.xl-floor-map .map__legend { display:none; }
}
@media (prefers-reduced-motion:reduce) { .xl-floor-map * { transition:none!important; } }
