/*
 * Agenda de Feiras · mapa (/mapa)
 * Card limpo (borda de 1px e sombra suave), sem moldura de agenda.
 * Primeiro o Brasil (malha das UFs do IBGE) aparece como recorte sobre papel off-white; depois entram ruas e
 * cidades (OpenFreeMap via MapLibre, .com-tiles) e a malha vira só contorno (.is-rua, zoom de cidade/rua).
 * Marcadores e grupos na paleta do KV; o tom do setor vem de tokens.css.
 * Inclui as transições do Leaflet.markercluster (o CSS original do plugin não é carregado).
 */

.mapa-palco {
  position: relative;
  display: grid;
  grid-template-columns: 380px minmax(0, 1fr);
  height: clamp(560px, calc(100dvh - var(--altura-topo) - 48px), 940px);
  margin-top: var(--esp-6);
  border: 1px solid var(--cor-linha);
  border-radius: 24px;
  background: var(--cor-branco);
  box-shadow: 0 1px 2px rgba(60, 35, 10, 0.04), 0 8px 24px rgba(60, 35, 10, 0.05);
}

/* ---------- Lista lateral ---------- */
.mapa-lista { display: flex; flex-direction: column; min-height: 0; border-right: 1px solid var(--cor-linha); border-radius: 23px 0 0 23px; }
.mapa-lista-topo { padding: var(--esp-5) var(--esp-5) var(--esp-3); border-bottom: 1px solid var(--cor-linha); }
.mapa-lista-topo h2 { margin: 0 0 0.2rem; font-size: 1.5rem; font-variant-numeric: tabular-nums; }
.mapa-lista-topo p { margin: 0; font-size: 0.9rem; font-weight: 700; color: var(--texto-suave); }
.mapa-contagem-esq { display: inline-block; width: 9rem; height: 1.4rem; vertical-align: middle; }
.mapa-sem-local { display: flex; align-items: center; gap: 0.5rem; margin: 0.6rem 0 0; font-size: 0.86rem; font-weight: 700; color: var(--texto-suave); }
.mapa-sem-local .ico { width: 1rem; height: 1rem; color: var(--cor-laranja-texto); stroke-width: 2.2; }
.mapa-sem-local a { color: var(--cor-grafite); font-weight: var(--peso-black); }
.mapa-sem-local[hidden] { display: none; }
.mapa-lista .aviso-limite { margin: var(--esp-3) var(--esp-4) 0; }
.mapa-itens { list-style: none; margin: 0; padding: var(--esp-3) var(--esp-4) var(--esp-5); display: grid; gap: 0.5rem; align-content: start; overflow-y: auto; overscroll-behavior: contain; flex: 1; scrollbar-width: thin; scrollbar-color: var(--cor-linha) transparent; }
.mapa-itens li { margin: 0; }
.mapa-item-esq .esq { height: 66px; border-radius: var(--raio-md); }
.mapa-itens-vazio { padding: var(--esp-4); border-radius: var(--raio-md); background: var(--cor-creme); font-weight: 700; color: var(--texto-suave); font-size: 0.92rem; }

/* ---------- Área do mapa ---------- */
.mapa-area { position: relative; min-height: 0; border-radius: 0 23px 23px 0; overflow: hidden; isolation: isolate; }
.mapa-canvas {
  position: absolute;
  inset: 0;
  background-color: var(--cor-offwhite);
  background-image: radial-gradient(rgba(201, 183, 154, 0.5) 1px, transparent 1.3px);
  background-size: 18px 18px;
  font-family: var(--fonte-corpo);
}
.mapa-canvas.leaflet-container { background-color: var(--cor-offwhite); font-family: var(--fonte-corpo); outline: none; }
.mapa-canvas.leaflet-container:focus-visible { box-shadow: inset 0 0 0 3px var(--cor-grafite); }
.mapa-canvas:not(.com-tiles) .leaflet-overlay-pane svg { filter: drop-shadow(0 14px 22px rgba(60, 35, 10, 0.13)); }
.mapa-canvas .leaflet-interactive { cursor: zoom-in; }
.mapa-canvas .leaflet-interactive:focus { outline: none; }

/* Rótulos das UFs (só de perto) */
.uf-rotulo { color: rgba(107, 98, 91, 0.9); font-size: 0.68rem; font-weight: var(--peso-black); letter-spacing: 0.1em; text-align: center; line-height: 14px; pointer-events: none; opacity: 0; transition: opacity var(--duracao) var(--curva); }
.mapa-canvas.is-perto .uf-rotulo { opacity: 1; }
/* Com ruas e cidades por baixo: o mapa base já traz os nomes; de perto a malha não captura clique nem dica */
.mapa-canvas.com-tiles .uf-rotulo { display: none; }
.mapa-canvas.is-rua .leaflet-overlay-pane path { pointer-events: none; }
.mapa-canvas.is-rua .leaflet-interactive { cursor: grab; }
/* MapLibre GL dentro do Leaflet (no lugar do maplibre-gl.css, que não é carregado) */
.mapa-canvas .leaflet-gl-layer { pointer-events: none; }
.mapa-canvas .leaflet-gl-layer .maplibregl-canvas-container, .mapa-canvas .leaflet-gl-layer .maplibregl-canvas { position: absolute; left: 0; top: 0; }
.mapa-canvas .leaflet-gl-layer .maplibregl-canvas { opacity: 0; transition: opacity 0.35s ease-out; }
.mapa-canvas.base-pronta .leaflet-gl-layer .maplibregl-canvas { opacity: 1; }
@media (prefers-reduced-motion: reduce) { .mapa-canvas .leaflet-gl-layer .maplibregl-canvas { transition: none; } }

/* Marcador de feira (o Leaflet posiciona o contêiner com transform; a animação fica no filho) */
.mk { display: grid; place-items: center; background: none; border: 0; }
.mk:focus { outline: none; }
.mk-ponto {
  display: grid;
  place-items: center;
  width: 100%; height: 100%;
  border-radius: 50%;
  background: var(--setor-forte);
  border: 3px solid var(--cor-branco);
  box-shadow: 0 0 0 1px rgba(31, 26, 23, 0.22), 0 3px 8px rgba(60, 35, 10, 0.3);
  transition: transform var(--duracao) var(--curva), box-shadow var(--duracao) var(--curva);
}
.mk--livre .mk-ponto { background: var(--cor-grafite); color: var(--cor-amarelo); box-shadow: 0 0 0 2.5px var(--setor-forte), 0 4px 10px rgba(60, 35, 10, 0.35); }
.mk--livre .mk-ponto .ico { width: 13px; height: 13px; stroke-width: 3.4; }
.mk:hover .mk-ponto, .mk.is-destaque .mk-ponto { transform: scale(1.28); }
.mk.is-ativo .mk-ponto { transform: scale(1.4); box-shadow: 0 0 0 3px var(--cor-grafite), 0 6px 16px rgba(60, 35, 10, 0.4); }
.mk:focus-visible .mk-ponto { box-shadow: var(--foco-anel); transform: scale(1.28); }

/* Grupos (clusters) */
.cluster { background: none; border: 0; }
.cluster:focus { outline: none; }
.cl {
  position: relative;
  display: grid;
  place-items: center;
  width: 100%; height: 100%;
  border-radius: 50%;
  background: var(--cor-amarelo);
  color: var(--cor-grafite);
  border: 3px solid var(--cor-branco);
  box-shadow: 0 0 0 6px rgba(255, 196, 1, 0.28), 0 6px 14px rgba(60, 35, 10, 0.25);
  font-family: var(--fonte-titulo);
  font-weight: 600;
  font-size: 1.05rem;
  line-height: 1;
  font-variant-numeric: tabular-nums;
  transition: transform var(--duracao) var(--curva);
}
.cluster--m .cl { background: var(--cor-laranja); box-shadow: 0 0 0 7px rgba(255, 122, 0, 0.22), 0 6px 14px rgba(60, 35, 10, 0.25); font-size: 1.15rem; }
.cluster--g .cl { background: var(--cor-grafite); color: var(--cor-amarelo); box-shadow: 0 0 0 8px rgba(31, 26, 23, 0.14), 0 8px 18px rgba(60, 35, 10, 0.3); font-size: 1.25rem; }
.cl-livre {
  position: absolute;
  top: -5px; right: -5px;
  width: 17px; height: 17px;
  border-radius: 50%;
  border: 2px solid var(--cor-branco);
  background: var(--cor-grafite) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M5 12.5l4.5 4.5L19 7.5' fill='none' stroke='%23FFC401' stroke-width='3.6' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") no-repeat center / 10px;
}
.cluster--g .cl-livre { background-color: var(--cor-amarelo); background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M5 12.5l4.5 4.5L19 7.5' fill='none' stroke='%231F1A17' stroke-width='3.6' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E"); }
.cluster:hover .cl { transform: scale(1.08); }
.cluster:focus-visible .cl { box-shadow: var(--foco-anel); }

/* Transições do markercluster */
.leaflet-cluster-anim .leaflet-marker-icon, .leaflet-cluster-anim .leaflet-marker-shadow { transition: transform 0.3s ease-out, opacity 0.3s ease-in; }
.leaflet-cluster-spider-leg { transition: stroke-dashoffset 0.3s ease-out, stroke-opacity 0.3s ease-in; }
@media (prefers-reduced-motion: reduce) {
  .leaflet-cluster-anim .leaflet-marker-icon, .leaflet-cluster-spider-leg { transition: none; }
}

/* Dicas */
.leaflet-tooltip.mk-dica, .leaflet-tooltip.uf-dica {
  padding: 0.35rem 0.65rem;
  border: 0;
  border-radius: 8px;
  background: var(--cor-grafite);
  color: var(--cor-branco);
  font-family: var(--fonte-corpo);
  font-size: 0.82rem;
  font-weight: var(--peso-forte);
  box-shadow: var(--sombra-2);
}
.leaflet-tooltip.uf-dica { background: var(--cor-branco); color: var(--cor-grafite); font-weight: 700; }
.leaflet-tooltip.uf-dica b { font-weight: var(--peso-black); }
.leaflet-tooltip-top.mk-dica::before { border-top-color: var(--cor-grafite); }
.leaflet-tooltip-top.uf-dica::before { border-top-color: var(--cor-branco); }

/* Controles */
.mapa-canvas .leaflet-bar { border: 0; border-radius: 14px; overflow: hidden; box-shadow: var(--sombra-2); }
.mapa-canvas .leaflet-bar a, .mapa-canvas .leaflet-bar a:hover {
  width: var(--alvo-toque); height: var(--alvo-toque);
  line-height: var(--alvo-toque);
  border-bottom: 1px solid var(--cor-linha);
  background: var(--cor-branco);
  color: var(--cor-grafite);
  font-family: var(--fonte-titulo);
  font-size: 1.4rem;
  text-indent: 0;
}
.mapa-canvas .leaflet-bar a:hover { background: var(--cor-amarelo); }
.mapa-canvas .leaflet-bar a:last-child { border-bottom: 0; }
.mapa-canvas .leaflet-bar a:focus-visible { outline: none; box-shadow: inset 0 0 0 3px var(--cor-grafite); }
.mapa-canvas .leaflet-bar a.leaflet-disabled { background: var(--cor-offwhite); color: var(--cor-borda-campo); }
.mapa-canvas .leaflet-top.leaflet-right { top: 6px; right: 6px; }
.mapa-canvas .leaflet-control-attribution {
  padding: 2px 8px;
  border-radius: 8px 0 0 0;
  background: rgba(255, 250, 242, 0.92);
  color: var(--texto-suave);
  font-size: 0.7rem;
  font-weight: 700;
}
.mapa-canvas .leaflet-control-attribution a { color: var(--cor-grafite); }

.mapa-brasil {
  position: absolute;
  left: 16px; top: 16px;
  z-index: 500;
  display: inline-flex;
  align-items: center;
  gap: 0.45rem;
  min-height: var(--alvo-toque);
  padding: 0.4rem 1rem 0.4rem 0.8rem;
  border: 0;
  border-radius: var(--raio-pilula);
  background: var(--cor-branco);
  color: var(--cor-grafite);
  box-shadow: var(--sombra-2);
  font-family: var(--fonte-corpo);
  font-weight: var(--peso-black);
  font-size: 0.9rem;
  cursor: pointer;
}
.mapa-brasil[hidden] { display: none; }
.mapa-brasil:hover { background: var(--cor-amarelo); }
.mapa-brasil:focus-visible { outline: none; box-shadow: var(--foco-anel); }
.mapa-brasil .ico { width: 1.1rem; height: 1.1rem; stroke-width: 2.2; }

/* Estados sobre o mapa */
.mapa-estado { position: absolute; inset: 0; z-index: 600; display: grid; place-items: center; padding: var(--esp-5); background: rgba(255, 250, 242, 0.55); }
.mapa-estado[hidden] { display: none; }
.mapa-estado--carregando { inset: 16px auto auto 50%; padding: 0; background: none; transform: translateX(-50%); }
.mapa-carregando { display: inline-flex; align-items: center; gap: 0.6rem; padding: 0.55rem 1.1rem 0.55rem 0.8rem; border-radius: var(--raio-pilula); background: var(--cor-branco); box-shadow: var(--sombra-2); font-weight: var(--peso-black); font-size: 0.9rem; }
.mapa-carregando-ponto { width: 0.8rem; height: 0.8rem; border-radius: 50%; background: var(--cor-laranja); animation: pulsar 1s var(--curva) infinite alternate; }
@keyframes pulsar { to { transform: scale(0.55); opacity: 0.5; } }

/* ---------- Celular ---------- */
@media (max-width: 759px) {
  .mapa-palco {
    grid-template-columns: 1fr;
    grid-template-rows: min(62dvh, 560px) auto;
    height: auto;
    margin-inline: calc(-0.5 * var(--margem-lateral));
    border-radius: 20px;
  }
  .mapa-area { grid-row: 1; border-radius: 19px 19px 0 0; }
  .mapa-lista { grid-row: 2; border-right: 0; border-top: 1px solid var(--cor-linha); border-radius: 0 0 19px 19px; }
  .mapa-lista-topo { padding: var(--esp-4) var(--esp-4) var(--esp-3); }
  .mapa-lista-topo h2 { font-size: 1.3rem; }
  .mapa-itens { overflow: visible; padding: var(--esp-3); }
  .mapa-brasil { left: 10px; top: 10px; font-size: 0.85rem; }
}
