/* netmap.css — style mapy zasięgu i minimapy kamer (netmap.js) na podkładzie OpenStreetMap. Zmienne definiuje też .zs (legenda poza .map). */
.map,.zs{--map-bg:#EEF2F7;--map-water:#BFD9EE;--map-river:#8FBFE3;--map-stream:#B7D4EA;--map-road:#FFFFFF;--map-road-edge:#C4CDDA;--map-rail:#9AA6B8;--map-ink:#16262B;--map-halo:rgba(238,242,247,.92);--map-backbone:#C83A3A;--map-ui:#2F6690;--map-bb-ink:#fff;--map-pop:#E23D3D;--map-pop-edge:#fff;--map-border:#B9C3D6;--map-border-strong:#6B7A99;--map-land:rgba(60,80,120,.06);--map-fiber:#00659B;--map-radio:#8FA3B5;--map-pin:#008DD2;--map-tip-bg:#fff;--map-tip-ink:#16262B}
:root[data-theme="dark"] .map,:root[data-theme="dark"] .zs{--map-bg:#14181C;--map-water:#12385E;--map-river:#1D5385;--map-stream:#153C62;--map-road:#2B3238;--map-road-edge:#0B0D0F;--map-rail:#4A545E;--map-ink:#E8F1F2;--map-halo:rgba(20,24,28,.92);--map-backbone:#FF8080;--map-ui:#8FD4F5;--map-bb-ink:#06222B;--map-pop:#E23D3D;--map-pop-edge:#14181C;--map-border:#3A444E;--map-border-strong:#6E7E8E;--map-land:rgba(140,160,180,.06);--map-fiber:#5CC8FF;--map-radio:#B9C0CA;--map-pin:#5CC8FF;--map-tip-bg:#1C2126;--map-tip-ink:#E8F1F2}
.map{position:relative;overflow:hidden;background:var(--map-bg)}
.map__svg{position:absolute;inset:0;width:100%;height:100%;display:block;--u:1}
.map--pan{touch-action:pan-y;cursor:grab}.map--pan.is-drag{cursor:grabbing}
.map__lake{fill:var(--map-water)}
.map__river{stroke:var(--map-river);stroke-width:calc(3.4px * var(--u));stroke-linecap:round;stroke-linejoin:round}
.map__stream{stroke:var(--map-stream);stroke-width:calc(1.3px * var(--u));stroke-linecap:round;stroke-linejoin:round}
.map__rail{stroke:var(--map-rail);stroke-width:calc(1.4px * var(--u));stroke-dasharray:calc(5px * var(--u)) calc(4px * var(--u))}
.map__road-edge{stroke:var(--map-road-edge);stroke-width:calc(4.6px * var(--u));stroke-linecap:round;stroke-linejoin:round}
.map__road{stroke:var(--map-road);stroke-width:calc(3px * var(--u));stroke-linecap:round;stroke-linejoin:round}
.map__fnode{fill:var(--map-bg);stroke:var(--map-fiber);stroke-width:2.6}
.map__fnode-core{fill:var(--map-fiber)}
.map__node-ring{fill:none;stroke:var(--map-fiber);stroke-width:2;opacity:.6;animation:mapRing 2.4s ease-out infinite;transform-origin:center;transform-box:fill-box}
.map__mast{stroke:var(--map-radio);stroke-width:2.1;stroke-linecap:round;stroke-linejoin:round;transform:translate(0,0)}
.map__rdot{fill:var(--map-radio)}
.map__mk{transform-box:fill-box;transform-origin:center}
.map__label{fill:var(--map-ink);font-weight:600;paint-order:stroke;stroke:var(--map-halo);stroke-width:3.4px;stroke-linejoin:round;pointer-events:none;font-family:inherit}
.map__label--node{font-weight:700}
.map__label.is-hit{fill:var(--map-fiber)}
.map__route{stroke-linecap:round}
.map__route--fiber{stroke:var(--map-fiber);stroke-width:calc(3.4px * var(--u))}
.map__route--radio{stroke:var(--map-radio);stroke-width:calc(2.3px * var(--u));stroke-dasharray:calc(7px * var(--u)) calc(6px * var(--u))}
.map__route.is-draw{stroke-dasharray:var(--L) var(--L);stroke-dashoffset:var(--L);animation:mapDraw 1.1s ease-out forwards;animation-delay:calc(.25s + var(--i,0) * .1s)}
.map__route--radio.is-draw{animation-name:mapDrawDash}
.map__pulse{stroke:var(--map-fiber);stroke-width:calc(5px * var(--u));stroke-linecap:round;stroke-dasharray:.06 1;stroke-dashoffset:1.06;opacity:0;animation:mapPulse 5s linear infinite;animation-delay:calc(1.6s + var(--i,0) * .5s)}
.map__pulse.is-static{opacity:.9;stroke-dashoffset:.6;animation:none}
.map__mk.is-bloom{transform:scale(0);animation:mapBloom .5s ease-out forwards;animation-delay:calc(.9s + var(--i,0) * .08s)}
.map__village{cursor:pointer;outline:none}
.map__hit,.minimap__pin-hit{fill:transparent;pointer-events:all}
.map__village.is-hit .map__fnode,.map__village:focus-visible .map__fnode{fill:var(--map-fiber)}
.map__village.is-hit .map__mast,.map__village:focus-visible .map__mast{stroke-width:3}
.map__village.is-hit{filter:drop-shadow(0 0 5px var(--map-fiber))}
.map__attr{position:absolute;right:8px;bottom:6px;z-index:2;font-size:11px;line-height:1.2;padding:2px 6px;border-radius:5px;background:var(--map-halo);color:var(--map-ink);text-decoration:none;opacity:.9}
.map__attr:hover{text-decoration:underline}
.map__tip{position:absolute;transform:translate(-50%,-100%);background:var(--map-tip-bg);color:var(--map-tip-ink);padding:8px 12px;border-radius:8px;box-shadow:0 6px 20px rgba(0,0,0,.18);font-size:.85rem;line-height:1.3;pointer-events:none;white-space:nowrap;z-index:3;display:flex;flex-direction:column;gap:2px}
.map__tip b{font-weight:700}.map__tip small{opacity:.8}
.map__tip-type{font-weight:600;color:var(--map-fiber)}.map__tip-type--radio{color:var(--map-radio)}
@keyframes mapDraw{to{stroke-dashoffset:0}}
@keyframes mapDrawDash{0%{stroke-dasharray:var(--L) var(--L);stroke-dashoffset:var(--L)}99%{stroke-dasharray:var(--L) var(--L);stroke-dashoffset:0}100%{stroke-dasharray:calc(7px * var(--u)) calc(6px * var(--u));stroke-dashoffset:0}}
@keyframes mapPulse{0%{opacity:0;stroke-dashoffset:1.06}5%{opacity:1}60%{opacity:1;stroke-dashoffset:0}70%{opacity:0}100%{opacity:0;stroke-dashoffset:0}}
@keyframes mapBloom{to{transform:scale(1)}}
@keyframes mapRing{0%{transform:scale(.4);opacity:.8}100%{transform:scale(1.6);opacity:0}}

/* legenda (poza .map, w .zs) */
.lg{display:inline-block;width:30px;flex:none}
.lg--fiber{height:0;border-top:3.4px solid var(--map-fiber)}
.lg--backbone{height:0;border-top:3px solid var(--map-backbone)}
.lg--radio{height:0;border-top:2.4px dashed var(--map-radio)}
.lg--svg{height:20px;overflow:visible}
.lg--svg .map__fnode{fill:var(--surface,#fff)}

/* minimapa kamer: pinezki w pikselach ekranu (--u), napisy ≥ 12 px */
.minimap{--map-pin-ink:var(--map-ink)}
.minimap__lead{stroke:var(--map-pin);stroke-width:1.4;opacity:.75}
.minimap__dot{fill:var(--map-pin);stroke:var(--map-bg);stroke-width:1.2}
.minimap__pin{cursor:pointer;outline:none}
.minimap__pin-bg{fill:var(--map-bg);stroke:var(--map-pin);stroke-width:1.2}
.minimap__pin-halo{fill:color-mix(in srgb,var(--map-pin) 22%,transparent);transform:scale(0);transform-origin:center;transform-box:fill-box;transition:transform .25s}
.minimap__pin.is-active .minimap__pin-halo,.minimap__pin:hover .minimap__pin-halo,.minimap__pin:focus-visible .minimap__pin-halo{transform:scale(1)}
.minimap__pin-cam{stroke:var(--map-pin);stroke-width:1.9;stroke-linejoin:round;stroke-linecap:round}
.minimap__pin-ring{stroke:var(--map-pin);stroke-width:1.5;opacity:.5;transform-origin:center;transform-box:fill-box}
.minimap__pin.is-active .minimap__pin-ring{opacity:1;stroke-width:2.6;animation:mapRing 1.8s ease-out infinite}
.minimap__pin-label{font-size:12.5px;font-weight:600;fill:var(--map-ink);paint-order:stroke;stroke:var(--map-halo);stroke-width:3.4px;stroke-linejoin:round;pointer-events:none;font-family:inherit}
.minimap__pin-label.is-active{fill:var(--map-fiber)}
@media (prefers-reduced-motion:reduce){.map__route.is-draw,.map__mk.is-bloom,.map__pulse,.map__node-ring,.minimap__pin.is-active .minimap__pin-ring{animation:none}.map__route.is-draw{stroke-dashoffset:0;stroke-dasharray:none}.map__route--radio.is-draw{stroke-dasharray:calc(7px * var(--u)) calc(6px * var(--u))}.map__mk.is-bloom{transform:none}.map__pulse{opacity:.9;stroke-dashoffset:.6}}
.map__hint{position:absolute;left:50%;bottom:34px;transform:translateX(-50%);z-index:4;margin:0;padding:5px 14px;border-radius:999px;background:rgba(6,14,34,.78);color:#fff;font-size:.82rem;font-weight:600;pointer-events:none;white-space:nowrap}
.map__hint[hidden]{display:none}

/* szkielet (animacja startowa): linie POP Warszawa / Katowice, podkład dalekich miast, strzałki wyjścia */
.map__poland{pointer-events:none}
.map__poland-reg{fill:var(--map-land);stroke:var(--map-border);stroke-width:calc(1px * var(--u));stroke-linejoin:round}
.map__poland-out{stroke:var(--map-border-strong);stroke-width:calc(1.8px * var(--u));stroke-linejoin:round;stroke-linecap:round}
.map__backbone{stroke:var(--map-backbone);stroke-width:calc(3px * var(--u));stroke-linecap:butt;stroke-linejoin:round;pointer-events:none}
:root[data-theme="dark"] .map__backbone{filter:drop-shadow(0 0 4px rgba(255,128,128,.5))}
.map__pop-dot{fill:var(--map-pop);stroke:var(--map-pop-edge);stroke-width:1.5}
.map__pop-ring{fill:none;stroke:var(--map-pop);stroke-width:2;transform-origin:center;transform-box:fill-box;animation:mapRing 2.4s ease-out infinite}
.map__flash{fill:none;stroke:var(--map-pop);stroke-width:2.5;pointer-events:none}
.map__pop-label,.map__bb-label{fill:var(--map-ink);font-weight:700;font-size:15px;paint-order:stroke;stroke:var(--map-halo);stroke-width:3.6px;stroke-linejoin:round;font-family:inherit;pointer-events:none}
.map__pop-label.is-small{font-size:12.5px;font-weight:600}
.map__bb-label{font-size:12.5px}
.map__bb-tri{fill:var(--map-backbone);stroke:var(--map-halo);stroke-width:1.2;stroke-linejoin:round}
.map__backbone-out{pointer-events:none}
.map__replay{position:absolute;right:10px;top:10px;z-index:2;width:36px;height:36px;padding:0;display:flex;align-items:center;justify-content:center;border-radius:50%;border:1.5px solid var(--map-ui);background:var(--map-halo);color:var(--map-ink);cursor:pointer}
.map__replay svg{display:block}
.map__replay:hover,.map__replay:focus-visible{background:var(--map-ui);color:var(--map-bb-ink)}
.map.is-intro .map__village,.map.is-intro .map__tip{pointer-events:none}
@media (prefers-reduced-motion:reduce){.map__pop-ring{animation:none}}
