.map-city-name{font-size:17px;font-weight:500;letter-spacing:-.015em;fill:#4f5c70;paint-order:stroke;stroke:var(--paper);stroke-width:6px;stroke-linejoin:round}
.map-signal circle{fill:none;stroke:#8a9db8;stroke-width:1;opacity:.5}
.map-signal circle:first-child{stroke-dasharray:2 4;opacity:.4}
.map-anchor{fill:#dae2ee;stroke:#8498b3;stroke-width:1}
.map-leader{fill:none;stroke:#a8b4c6;stroke-width:1;stroke-linejoin:round}
.map-label-tick,.map-contour-ticks{fill:none;stroke:#9aaac1;stroke-width:.8}
.map-orientation{fill:none;stroke:#a3b0c2;stroke-width:1}
.map-orientation text{stroke:none;fill:#8e9bae;font-size:11px;letter-spacing:0}
.map-reference{fill:none;stroke:#d2dae6;stroke-width:1}
.map-location:hover .map-leader{stroke:#7187a5}
.map-tower{color:#647b9b}
.tower-footing{fill:#e3e9f2;stroke:#b7c4d5;stroke-width:.9;stroke-linejoin:round}
.tower-face{fill:#cbd6e5;fill-opacity:.6}
.tower-frame{fill:none;stroke:currentColor;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round}
.tower-brace{fill:none;stroke:currentColor;stroke-width:1;stroke-linejoin:round}
.tower-antenna{fill:#f8faff;stroke:currentColor;stroke-width:1.3}
.tower-radio{fill:none;stroke:#9badc6;stroke-width:1;stroke-linecap:round}
.map-location:hover .map-tower{color:#435f87}

/* Arrival and hover use separate layers; geographic anchors stay fixed. */
.tower-arrival{transform-box:fill-box;transform-origin:50% 82%}
.tower-model{transform-box:fill-box;transform-origin:50% 82%;transition:transform 360ms cubic-bezier(.22,1,.36,1)}
.tower-shadow{fill:#647b9b;opacity:.13;transform-box:fill-box;transform-origin:center;transition:transform 360ms cubic-bezier(.22,1,.36,1),opacity 360ms ease}
.tower-hit-area{fill:transparent;pointer-events:all}
.tower-signal-layer{pointer-events:none}
.tower-signal-wave{fill:none;stroke:#9badc6;stroke-width:1;stroke-linecap:round;vector-effect:non-scaling-stroke;transform-box:fill-box;transform-origin:center;pointer-events:none}
@keyframes tower-land{
  0%{opacity:0;transform:translate(6px,-52px) rotate(8deg);animation-timing-function:cubic-bezier(.42,0,.85,.55)}
  18%{opacity:1}
  60%{opacity:1;transform:translate(0,2px) rotate(-2deg);animation-timing-function:ease-out}
  78%{transform:translate(1px,-7px) rotate(2deg);animation-timing-function:ease-in}
  100%{opacity:1;transform:translate(0,0) rotate(0)}
}
@keyframes tower-shadow-land{
  0%{opacity:0;transform:scale(1.8)}
  18%{opacity:.035}
  60%{opacity:.16;transform:scale(.9)}
  78%{opacity:.09;transform:scale(1.15)}
  100%{opacity:.13;transform:scale(1)}
}
@media(prefers-reduced-motion:no-preference){
  .map-location{--tower-arrival-delay:180ms}
  .map-location[data-location="warsaw"]{--tower-arrival-delay:340ms}
  .tower-arrival{animation:tower-land 760ms linear var(--tower-arrival-delay) backwards}
  .tower-shadow{animation:tower-shadow-land 760ms ease-in-out var(--tower-arrival-delay) backwards}
}
@media(hover:hover) and (prefers-reduced-motion:no-preference){
  .map-tower:hover .tower-model{transform:translate(3px,-12px) rotate(9deg)}
  .map-tower:hover .tower-shadow{transform:translate(3px,2px) scale(1.35);opacity:.08}
}
.diagram-flow-layer{pointer-events:none}
.flow-route{fill:none;stroke:none}
.flow-halo{fill:#708bac;opacity:.13}
.flow-packet{fill:#6e88aa;stroke:#fafcff;stroke-width:1}
@keyframes diagram-reveal{from{opacity:.18}to{opacity:1}}
@media(prefers-reduced-motion:no-preference){
  .diagram-enter{animation:diagram-reveal 220ms ease-out both}
}

@media(max-width:540px){.map-city-name{font-size:20px}}
