/* SKYNET coverage map UI.
   Lives in its own file, not in a template <style> block: the sites CSP
   (style-src self) blocks inline stylesheets, so rules placed in the
   template were silently dropped by the browser.

   Design QA, task 91: this file was carried over from the old design and
   still hardcoded the pre-redesign brand colours and shadows, so the map
   controls, the you-are-here marker and the map popup rendered in a
   different violet than the panel next to them. Every colour below now
   comes from the approved light-violet tokens declared in css/v2.css,
   which the page loads before this file. Selectors, sizes and behaviour
   are unchanged. */
/* Кнопка геолокации на карте: плитка SKYNET - белая, с фиолетовой иконкой. */
.coverage-locate-control{margin-top:10px!important;border:0!important;background:transparent!important;box-shadow:none!important}
.coverage-locate-control a.coverage-locate-btn{display:flex;align-items:center;justify-content:center;width:44px;height:44px;padding:0;color:var(--violet);background:var(--white);border:1px solid var(--soft-strong);border-radius:14px;box-shadow:var(--shadow-soft);cursor:pointer;transition:background .18s,color .18s,box-shadow .18s}
.coverage-locate-control a.coverage-locate-btn svg{display:block;width:22px;height:22px}
.coverage-locate-control a.coverage-locate-btn:hover,.coverage-locate-control a.coverage-locate-btn:focus-visible{background:linear-gradient(135deg,var(--violet),var(--deep));border-color:transparent;color:var(--white);box-shadow:var(--shadow-violet)}
.coverage-locate-control a.coverage-locate-btn:focus-visible{outline:3px solid var(--violet);outline-offset:2px}
.coverage-locate-control a.coverage-locate-btn.is-busy{pointer-events:none;background:var(--bg-alt);color:var(--violet);box-shadow:none}
.coverage-locate-control a.coverage-locate-btn.is-busy svg{animation:coverage-locate-spin 1s linear infinite}
.coverage-locate-control a.coverage-locate-btn.is-error{background:#FBECEF;border-color:#F0CBD4;color:#9F1F3C}
@keyframes coverage-locate-spin{to{transform:rotate(360deg)}}
.coverage-map .leaflet-control-zoom{border:1px solid var(--line);border-radius:14px;box-shadow:var(--shadow-soft);overflow:hidden}
.coverage-map .leaflet-bar a{width:44px;height:44px;line-height:44px;color:var(--deep);border-bottom-color:var(--line)}
.coverage-map .leaflet-bar a:hover{background:var(--bg-alt);color:var(--violet)}
/* Метка «вы здесь»: бело-фиолетовая капля SKYNET с пульсирующим кольцом. */
.coverage-me{position:relative;display:block;width:46px;height:54px}
.coverage-me svg{position:relative;display:block;filter:drop-shadow(0 5px 10px rgba(67,44,133,.40))}
.coverage-me__pulse{position:absolute;left:50%;top:20px;width:46px;height:46px;margin:-23px 0 0 -23px;border-radius:50%;background:radial-gradient(circle,rgba(115,50,218,.34) 0,rgba(115,50,218,.12) 55%,rgba(115,50,218,0) 72%);animation:coverage-me-pulse 2.2s ease-out infinite}
@keyframes coverage-me-pulse{0%{transform:scale(.45);opacity:.9}70%{transform:scale(1.15);opacity:0}100%{transform:scale(1.15);opacity:0}}
/* GPS location: smooth breathing pin. The tip stays anchored to the exact coordinate. */
.coverage-me--live svg{transform-origin:50% 83%;animation:coverage-me-breathe 1.65s cubic-bezier(.45,0,.55,1) infinite;will-change:transform,filter}
.coverage-me--live .coverage-me__pulse{animation:coverage-me-pulse-live 1.65s ease-out infinite}
@keyframes coverage-me-breathe{0%,100%{transform:scale(.44);filter:drop-shadow(0 2px 5px rgba(67,44,133,.24))}50%{transform:scale(1.08);filter:drop-shadow(0 7px 14px rgba(115,50,218,.52))}}
@keyframes coverage-me-pulse-live{0%{transform:scale(.38);opacity:.82}55%{opacity:.30}100%{transform:scale(1.42);opacity:0}}
@media(max-width:680px){.coverage-locate-control a.coverage-locate-btn,.coverage-map .leaflet-bar a{width:46px;height:46px;line-height:46px}}
@media(prefers-reduced-motion:reduce){.coverage-me__pulse{animation:none;opacity:.55}.coverage-me--live svg{animation:none;transform:none}.coverage-locate-control a.coverage-locate-btn.is-busy svg{animation:none}}
/* Ячейка покрытия: маленькая зелёная точка circleMarker с белой обводкой. */
.coverage-map .leaflet-overlay-pane svg{filter:drop-shadow(0 1px 1.5px rgba(12,45,32,.35))}
.coverage-map .coverage-dot{cursor:pointer;transition:fill .15s,stroke-width .15s}
/* Линия предполагаемого кабеля от ближайшей точки до выбранной. */
.coverage-map .coverage-route-line{filter:drop-shadow(0 1px 3px rgba(115,50,218,.35))}
.coverage-cable{background:var(--bg-alt);border-color:var(--line)}
.coverage-cable b{color:var(--deep)}
.coverage-cable__note{font-size:12px;opacity:.85}
/* Карточка на карте: короткая строка расчёта кабеля и телефоны офиса, больше
   ничего. Отдельный файл, а не блок style в шаблоне: CSP сайта
   (style-src self) молча выбрасывает инлайновые стили. */
.coverage-popup .leaflet-popup-content-wrapper{border-radius:18px;border:1px solid var(--line);box-shadow:var(--shadow-card)}
.coverage-popup .leaflet-popup-content{margin:12px 14px;width:auto;font-size:13px;line-height:1.45}
.coverage-popup .leaflet-popup-close-button{width:28px;height:28px;font-size:20px;line-height:26px;color:var(--lav-strong)}
.coverage-popup__body{display:block;min-width:150px}
.coverage-popup__cable{margin:0 0 7px;font-weight:800;font-size:14px;line-height:1.35;color:var(--deep)}
.coverage-popup__office{margin:0;color:var(--ink);font-size:13px;line-height:1.4}
.coverage-popup__phones{margin:4px 0 0;font-weight:800;font-size:14px;line-height:1.5;color:var(--violet)}
.coverage-popup__phones a{color:inherit;text-decoration:none;white-space:nowrap}
.coverage-popup__phones a:hover,.coverage-popup__phones a:focus-visible{text-decoration:underline}
.coverage-popup .leaflet-popup-tip{box-shadow:none;border:1px solid var(--line);border-top:0;border-left:0}
@media(max-width:680px){.coverage-popup .leaflet-popup-content{margin:11px 13px}.coverage-popup__body{min-width:140px}}
.coverage-popup__covered{margin:0;font-weight:800;font-size:14px;line-height:1.4;color:#12A875}

/* Ara 2026-09-17: on mobile the Quick Check card is the first block under header. */
.coverage-mobile-quick{display:none}
@media(max-width:900px){
  .coverage-mobile-quick{display:block;padding:18px 0 6px;background:var(--bg)}
  .coverage-mobile-quick .wrap{padding-left:20px;padding-right:20px}
  .coverage-mobile-quick .cov-panel{width:100%;margin:0}
  .cov-layout:has(> .coverage-map){grid-template-columns:1fr}
}

/* Mobile GPS map fullscreen: Ara 2026-09-17 */
@media(max-width:900px){
  body.coverage-map-fullscreen-open{overflow:hidden!important}
  .coverage-map.is-fullscreen-mobile{position:fixed!important;inset:0!important;z-index:12000!important;width:100vw!important;height:100dvh!important;min-height:100dvh!important;max-height:none!important;margin:0!important;border-radius:0!important;box-shadow:none!important}
  .coverage-map.is-fullscreen-mobile .leaflet-control-container{z-index:12001}
  .coverage-map-close{position:absolute;top:calc(14px + env(safe-area-inset-top));right:14px;z-index:12050;width:48px;height:48px;border:0;border-radius:16px;background:rgba(255,255,255,.96);color:#29134f;font:700 32px/1 Arial,sans-serif;box-shadow:0 8px 28px rgba(40,18,76,.22);display:grid;place-items:center;cursor:pointer}
  .coverage-map-close[hidden]{display:none!important}
}
@media(min-width:901px){.coverage-map-close{display:none!important}}
