/* Map column: full bleed basemap, floating glass chrome at 20 from the edges. */

.map {
  position: relative;
  flex: 1;
  min-width: 0;
  overflow: hidden;
  background: var(--plate);
}

.map__canvas {
  position: absolute;
  inset: 0;
  cursor: grab;
  touch-action: none;
}

.map__canvas--dragging { cursor: grabbing; }

.map__tiles {
  position: absolute;
  inset: 0;
  filter: saturate(0.92);
}

.map__tile {
  position: absolute;
  left: 0;
  top: 0;
  display: block;
  will-change: transform;
  user-select: none;
  -webkit-user-drag: none;
}

/* A failed tile leaves the plate colour behind rather than a broken image. */
.map__tile--missing { display: none; }

.map__overlay {
  position: absolute;
  inset: 0;
  pointer-events: none;
}

/* Top-only scrim so the floating chrome stays legible. */
.map__scrim {
  position: absolute;
  left: 0;
  right: 0;
  top: 0;
  height: 120px;
  background: linear-gradient(rgba(8, 9, 11, 0.55), transparent);
  pointer-events: none;
}

.map__chrome {
  position: absolute;
  display: flex;
  align-items: center;
  gap: 7px;
  z-index: 3;
}

.map__chrome--tl { left: var(--map-chrome-inset); top: var(--map-chrome-inset); }
.map__chrome--tr { right: var(--map-chrome-inset); top: var(--map-chrome-inset); }
.map__chrome--br { right: var(--map-chrome-inset); bottom: var(--map-chrome-inset); }
.map__chrome--bl { left: var(--map-chrome-inset); bottom: var(--map-chrome-inset); }

.map__legend {
  display: flex;
  flex-direction: column;
  gap: 2px;
  padding: 10px 9px;
  border-radius: var(--r-card);
}

.map__legend-row {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 5px 4px;
}

.map__legend-count {
  font: 500 9px/1 var(--font-mono);
  letter-spacing: 0.8px;
  color: var(--bone55);
}

.map__legend-row:first-child .map__legend-count { color: var(--bone); font-weight: 600; }
.map__legend-row:nth-child(2) .map__legend-count { color: var(--bone72); }

.map__zoom {
  display: flex;
  flex-direction: column;
  gap: 1px;
  border-radius: var(--r-pill);
  overflow: hidden;
}

.map__zoom button {
  width: 38px;
  height: 38px;
  display: flex;
  align-items: center;
  justify-content: center;
  font: 400 17px/1 var(--font-mono);
  color: var(--bone76);
  transition: background var(--dur-hover) var(--ease-out);
}

.map__zoom button:hover { background: rgba(237, 235, 230, 0.1); color: var(--bone); }

.map__zoom-divider { height: 1px; background: rgba(255, 255, 255, 0.1); }

.map__attribution {
  font: 500 8px/1 var(--font-mono);
  letter-spacing: 1.1px;
  color: var(--bone32);
  pointer-events: none;
}

/* --- pins ---------------------------------------------------------------- */

.pin {
  position: absolute;
  left: 0;
  top: 0;
  width: 0;
  height: 0;
  z-index: 1;
  pointer-events: auto;
  transition: filter var(--dur-hover) var(--ease-out);
}

/* A hovered or selected pin has to sit above its neighbours, label included. */
.pin:hover,
.pin:focus-visible,
.pin[data-selected="true"] { z-index: 20; }

.pin__dot {
  position: absolute;
  border-radius: 50%;
  background: var(--tint);
  box-shadow: 0 0 18px color-mix(in srgb, var(--tint) 75%, transparent), 0 0 0 4px rgba(8, 9, 11, 0.6);
  transition: transform var(--dur-hover) var(--ease-out);
}

.pin__dot--square { border-radius: 2px; }

.pin[data-severity="critical"] .pin__dot {
  background: radial-gradient(closest-side at 36% 30%, #ff9a9a, var(--live) 52%, #d42b2b);
  box-shadow:
    0 0 28px rgba(255, 77, 77, 0.9),
    inset 0 1px 0 rgba(255, 255, 255, 0.55),
    0 0 0 7px rgba(255, 77, 77, 0.14);
}

.pin:hover .pin__dot { transform: scale(1.12); }

.pin__ring {
  position: absolute;
  left: -38px;
  top: -38px;
  width: 76px;
  height: 76px;
  border-radius: 50%;
  border: 1.5px solid rgba(255, 77, 77, 0.55);
  animation: sp-pulse var(--pulse-dur) ease-out infinite;
  pointer-events: none;
}

.pin__ring--delayed { animation-delay: 1.4s; }

/* The info card: hidden until the cursor (or keyboard focus) asks for it, and
   never on selection alone — a selected pin already has the whole inspector. */
.pin__card {
  position: absolute;
  left: 16px;
  top: -14px;
  width: 226px;
  display: none;
  flex-direction: column;
  gap: 7px;
  padding: 12px 13px;
  border-radius: var(--r-card);
  pointer-events: none;
}

.pin:hover .pin__card,
.pin:focus-visible .pin__card { display: flex; }

/* Near an edge the card would leave the map, so it opens the other way. */
.pin[data-flip="true"] .pin__card {
  left: auto;
  right: 16px;
}

.pin[data-vflip="true"] .pin__card {
  top: auto;
  bottom: -14px;
}

.pin__card-head {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 10px;
}

.pin__card-kind {
  font: 600 8px/1 var(--font-mono);
  letter-spacing: 1.4px;
  text-transform: uppercase;
  color: var(--tint-light);
  white-space: nowrap;
}

.pin__card-age {
  font: 500 8px/1 var(--font-mono);
  letter-spacing: 1.1px;
  color: var(--bone50);
  white-space: nowrap;
}

.pin__card-title {
  display: flex;
  align-items: baseline;
  gap: 7px;
  min-width: 0;
}

.pin__card-lead {
  font: 800 16px/1.05 var(--font-display);
  letter-spacing: -0.025em;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.pin__card-place {
  font: 800 12px/1.1 var(--font-display);
  letter-spacing: -0.01em;
  flex-shrink: 0;
  color: var(--bone76);
}

.pin__card-meta {
  font: 500 8px/1.35 var(--font-mono);
  letter-spacing: 1px;
  color: var(--bone55);
}

.pin__card-answer {
  align-self: flex-start;
  padding: 6px 8px;
  border-radius: 9px;
  font: 600 8px/1 var(--font-mono);
  letter-spacing: 1.1px;
  background: rgba(237, 235, 230, 0.07);
  border: 1px solid rgba(255, 255, 255, 0.12);
  color: var(--bone72);
}

.pin__card-answer[data-kind="watch"] {
  background: rgba(79, 227, 156, 0.18);
  border-color: rgba(123, 240, 184, 0.45);
  color: var(--standby-light);
}

.pin__card-answer[data-kind="agents"] {
  background: rgba(79, 227, 156, 0.14);
  border-color: rgba(123, 240, 184, 0.36);
  color: var(--standby-light);
}

.pin__card-answer[data-kind="cam"] {
  background: rgba(107, 168, 255, 0.14);
  border-color: rgba(107, 168, 255, 0.4);
  color: var(--cam-light);
}

.pin__card-answer[data-kind="none"] { color: var(--bone42); }

.pin__card-answer[data-kind="topup"] {
  background: rgba(245, 165, 36, 0.14);
  border-color: rgba(245, 165, 36, 0.4);
  color: var(--credit-light);
}

.pin--cluster {
  width: 38px;
  height: 38px;
  margin: -19px;
  border-radius: 50%;
  display: flex;
  align-items: center;
  justify-content: center;
  border-color: color-mix(in srgb, var(--tint-light) 40%, transparent);
  background: color-mix(in srgb, var(--tint) 18%, rgba(237, 235, 230, 0.06));
}

.pin__count {
  font: 600 10px/1 var(--font-mono);
  letter-spacing: 0.4px;
  color: var(--bone);
}

/* The selected signal sits inside this cluster: mark it, never extract it. */
.pin--cluster[data-selected="true"] {
  border-color: color-mix(in srgb, var(--tint-light) 75%, transparent);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.35),
    0 0 0 3px color-mix(in srgb, var(--tint) 22%, transparent),
    0 12px 26px rgba(0, 0, 0, 0.42);
}

.pin[data-selected="true"] .pin__dot { transform: scale(1.16); }

/* --- filters popover ----------------------------------------------------- */

.map__filters {
  position: absolute;
  left: var(--map-chrome-inset);
  top: 66px;
  z-index: 6;
  width: 236px;
  padding: 14px;
  border-radius: var(--r-card);
  display: flex;
  flex-direction: column;
  gap: 12px;
}

.map__filters-group {
  display: flex;
  flex-direction: column;
  gap: 7px;
}

.map__filters-row {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
}

.toggle-chip {
  padding: 7px 9px;
  border-radius: 9px;
  background: rgba(237, 235, 230, 0.06);
  border: 1px solid rgba(255, 255, 255, 0.12);
  font: 500 8.5px/1 var(--font-mono);
  letter-spacing: 1px;
  text-transform: uppercase;
  color: var(--bone60);
  white-space: nowrap;
}

.toggle-chip:hover { background: rgba(237, 235, 230, 0.1); }

.toggle-chip[aria-pressed="true"] {
  background: color-mix(in srgb, var(--tint, var(--standby)) 20%, transparent);
  border-color: color-mix(in srgb, var(--tint, var(--standby)) 45%, transparent);
  color: var(--bone);
}
