/**
 * map-layout.css
 *
 * Estructura/marco del mapa: base html/body, logos, grid, stage, footer legend,
 * escala, atribucion y overlays (map details / selection card).
 *
 * Parte 1/2 de la antigua map.css. Se carga ANTES de map-controls.css; el corte
 * respeta el orden original del fichero, por lo que la cascada NO cambia.
 * Depends on: variables.css, core.css
 */
html,
body {
    height: 100%;
    overflow: hidden;
}

body.layout-map {
    background-color: var(--color-bg);
}

/* Las variables específicas del mapa (--panel-*-width, --control-btn-*,
   --map-*) viven en variables.css desde Fase 5. */

/* ========================================
   RESPONSIVE LOGOS
   ======================================== */

/* Mobile-first: mostrar logo movil por defecto */
.map-logo-header {
    position: fixed;
    top: var(--control-btn-offset);
    left: 50%;
    transform: translateX(-50%);
    z-index: var(--z-dropdown);
    pointer-events: auto;

    & picture {
        display: block;
        line-height: 0;
    }

    & .brand-logo__image {
        display: block;
        background-color: rgba(255, 255, 255, 0.6);
        border-radius: 0.75rem;
        box-sizing: border-box;
        height: var(--map-brand-logo-height-mobile);
        width: auto;
        max-width: min(var(--map-brand-logo-max-width), calc(100vw - 2rem));
        padding: var(--map-brand-logo-padding);
    }
}

.map-logo-link {
    display: inline-flex;
    align-items: center;
    justify-content: center;
}

/* ========================================
   GRID LAYOUT
   ======================================== */

.map-app,
.map-container {
    display: grid;
    grid-template-columns: 1fr;
    grid-template-rows: 1fr;
    height: 100vh;
    height: 100dvh;
    width: 100%;
    position: relative;
    background-color: var(--color-bg);
}

/* Fondo del contenedor del mapa: igualado al gris de la máscara de Tenerife
   (MAP_MASK_FILL_COLOR en map-config.js). Mientras llegan los tiles, los huecos
   muestran este gris intencional en lugar del #ddd por defecto de Leaflet, así
   no hay flash blanco/gris ajeno que "tape" el mapa durante la carga. */
#map.leaflet-container {
    background: #d4dadc;
}

.panel--right {
    position: fixed;
    top: 0;
    width: 100%;
    min-width: 280px;
    max-width: 320px;
    height: 100vh;
    height: 100dvh;
    z-index: var(--z-modal);
    transition: transform var(--transition-base);

    &[aria-hidden="true"] {
        pointer-events: none;
    }

    &.is-open {
        transform: translateX(0);
        pointer-events: auto;
    }
}

.panel--right {
    right: 0;
    transform: translateX(100%);
}

/* ========================================
   MAP STAGE
   ======================================== */

.map-app__stage {
    grid-column: 1;
    position: relative;
    overflow: hidden;
    height: 100vh;
    height: 100dvh;

    & .map {
        position: absolute;
        inset: 0;
        width: 100%;
        height: 100%;
        z-index: var(--z-base);
    }
}

.map-app__wrapper,
.map-wrapper {
    position: relative;
    height: 100%;
}

.map-app.map-heatmap-active .leaflet-marker-pane,
.map-app.map-heatmap-active .leaflet-shadow-pane,
body.map-heatmap-active .leaflet-marker-pane,
body.map-heatmap-active .leaflet-shadow-pane {
    display: none !important;
}

body:has(#detail-layer-heatmap:checked) .leaflet-marker-pane,
body:has(#detail-layer-heatmap:checked) .leaflet-shadow-pane {
    display: none !important;
}

/* ========================================
   MAP FOOTER LEGEND
   ======================================== */

.map-footer-legend {
    position: fixed;
    right: 0;
    bottom: 0;
    z-index: var(--z-fixed);
    display: flex;
    flex-direction: row;
    align-items: center;
    background: rgba(255, 255, 255, 0.66);
    border-top: 1px solid var(--color-border);
    border-left: 1px solid var(--color-border);
    -webkit-backdrop-filter: blur(4px);
    backdrop-filter: blur(4px);
    margin: 0;
    padding: 0 0.5rem;
    gap: 0.2rem;
    font-size: 0.625rem;
}

.map-footer-legend__inner {
    display: flex;
    align-items: center;
    justify-content: flex-end;
    padding: 0;
    margin: 0;
    gap: 0.2rem;
    flex-wrap: wrap;
}

.map-footer-legend .data-attribution {
    font-size: 0.625rem;
    line-height: 1.2;
    color: var(--color-text-muted);
    display: flex;
    align-items: center;
    gap: 0.2rem;
    flex-wrap: wrap;
    margin: 0;
    padding: 0;
}

.map-footer-legend .data-attribution a {
    color: inherit;
}

.map-footer-legend__legal {
    display: flex;
    align-items: center;
    gap: 0.2rem;
    margin: 0;
    padding: 0;
    font-size: 0.625rem;
    line-height: 1.2;

    & a {
        color: var(--color-text);
        text-decoration: none;
        white-space: nowrap;
    }
}

/* ========================================
   MAP SCALE
   ======================================== */

.map-scale {
    padding: 0;
    margin: 0;
    background: transparent;
    border-right: 1px solid var(--color-border);
    display: none;
    flex-direction: row;
    align-items: center;
    gap: 0.35rem;

    & .scale-value {
        display: block;
        width: auto;
        font-weight: var(--font-weight-semibold);
        color: var(--color-text);
        line-height: 1;
        text-align: right;
        white-space: nowrap;
    }
}

.scale-line {
    width: 0;
    max-width: 8.75rem;
    height: 6px;
    border-bottom: 2px solid var(--color-text);
    border-left: 2px solid var(--color-text);
    border-right: 2px solid var(--color-text);
}

/* ========================================
   DATA ATTRIBUTION
   ======================================== */

.data-attribution__mode,
.data-attribution__separator,
.map-footer-legend__legal-separator {
    color: var(--color-text-light);
}

/* ========================================
   MAP DETAILS OVERLAY
   ======================================== */

.map-details-overlay {
    position: fixed;
    top: calc(var(--control-btn-offset) + 5.5rem);
    left: var(--spacing-lg);
    z-index: calc(var(--z-fixed) + 1);
    width: min(24rem, calc(100vw - (2 * var(--spacing-lg))));
    padding: var(--spacing-md);
    border: 1px solid rgba(255, 255, 255, 0.65);
    border-radius: var(--radius-lg);
    background: rgba(255, 255, 255, 0.88);
    -webkit-backdrop-filter: blur(14px);
    backdrop-filter: blur(14px);
    box-shadow: var(--shadow-lg);
}

.map-details-overlay__header {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: var(--spacing-md);
    margin-bottom: var(--spacing-sm);
}

.map-details-overlay__eyebrow {
    margin: 0 0 0.15rem;
    font-size: var(--font-size-xs);
    font-weight: var(--font-weight-semibold);
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: var(--color-text-light);
}

.map-details-overlay__title,
.map-details-overlay__name {
    margin: 0;
    font-size: var(--font-size-lg);
    line-height: 1.2;
    color: var(--color-text);
}

.map-details-overlay__more {
    flex-shrink: 0;
    padding: 0.55rem 0.85rem;
    border: 1px solid var(--color-border);
    border-radius: 999px;
    background: var(--color-white);
    color: var(--color-text);
    font-weight: var(--font-weight-semibold);
    cursor: pointer;
    transition: all var(--transition-fast);
}

.map-details-overlay__more:hover:not(:disabled) {
    background: var(--color-bg-alt);
}

.map-details-overlay__more:disabled {
    opacity: 0.45;
    cursor: not-allowed;
}

.map-details-overlay__body {
    display: grid;
    gap: var(--spacing-sm);
}

.map-details-overlay__media {
    margin: 0;
    overflow: hidden;
    border-radius: var(--radius-md);
    background: var(--color-bg-alt);
}

.map-details-overlay__photo {
    display: block;
    width: 100%;
    height: auto;
}

.map-details-overlay__info {
    display: grid;
    gap: 0.35rem;
}

.map-details-overlay__info p {
    margin: 0;
    color: var(--color-text);
}

.map-details-overlay__info a {
    color: var(--color-primary);
}

.map-details-overlay__empty {
    margin: 0;
    color: var(--color-text);
}

/* ========================================
   MAP SELECTION CARD
   ======================================== */

.map-selection-card {
    position: fixed;
    right: 0;
    bottom: 0;
    left: 0;
    z-index: calc(var(--z-fixed) + 2);
    display: none;
    padding: 0 var(--spacing-sm) calc(var(--spacing-sm) + env(safe-area-inset-bottom));
    pointer-events: none;
}

.map-selection-card.is-open {
    display: block;
}

.map-selection-card__sheet {
    pointer-events: auto;
    width: min(100%, 36rem);
    margin: 0 auto;
    max-height: min(62vh, 32rem);
    overflow: hidden;
    border-radius: var(--radius-lg) var(--radius-lg) 0 0;
    background: var(--color-white);
    box-shadow: var(--shadow-lg);
    border: 1px solid var(--color-border);
    border-bottom: 0;
}

.map-selection-card__header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--spacing-md);
    padding: var(--spacing-md) var(--spacing-md) var(--spacing-sm);
    border-bottom: 1px solid var(--color-border);
}

.map-selection-card__eyebrow {
    margin: 0;
    font-size: var(--font-size-xs);
    font-weight: var(--font-weight-semibold);
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: var(--color-text-light);
}

.map-selection-card__close {
    flex-shrink: 0;
}

.map-selection-card__content {
    overflow-y: auto;
    padding: var(--spacing-md);
}

.map-selection-card__body {
    display: grid;
    gap: var(--spacing-md);
}

.map-selection-card__media {
    margin: 0;
    overflow: hidden;
    border-radius: var(--radius-md);
    background: var(--color-bg-alt);
}

.map-selection-card__photo {
    display: block;
    width: 100%;
    height: auto;
}

.map-selection-card__title {
    margin: 0;
    font-size: var(--font-size-xl);
    line-height: 1.2;
    color: var(--color-text);
}

.map-selection-card__info {
    display: grid;
    gap: var(--spacing-sm);
}

.map-selection-card__info p {
    margin: 0;
    color: var(--color-text);
}

.map-selection-card__info strong {
    color: var(--color-text);
}

.map-selection-card__info a {
    color: var(--color-primary);
}


/* ── Indicador de carga: el logo (la "C" de Tenerife) quieto y un aro que gira a su alrededor ──
   Solo se anima `transform` (lo ejecuta el compositor), así que el giro no se traba mientras el hilo
   principal descarga y procesa los datos. Con prefers-reduced-motion (regla global de core.css) el
   aro queda quieto. */
.map-loader {
    position: fixed;
    inset: 0;
    z-index: var(--z-modal);
    display: flex;
    align-items: center;
    justify-content: center;
    background: rgb(255 255 255 / 0.7);
    pointer-events: none;
}

.map-loader[hidden] {
    display: none;
}

.map-loader__logo {
    position: relative;
    width: 5rem;
    height: 5rem;
}

.map-loader__icon {
    display: block;
    width: 100%;
    height: 100%;
}

/* Aro que gira en sentido horario alrededor del logo, con la cola desvanecida */
.map-loader__ring {
    position: absolute;
    inset: -0.9rem;
    border-radius: 50%;
    background: conic-gradient(from 0deg, rgb(38 106 139 / 0) 0%, var(--color-primary, #266a8b) 100%);
    -webkit-mask-image: radial-gradient(farthest-side, transparent calc(100% - 4px), #000 calc(100% - 3px));
    mask-image: radial-gradient(farthest-side, transparent calc(100% - 4px), #000 calc(100% - 3px));
    will-change: transform;
    animation: map-loader-ring 1.2s linear infinite;
}

@keyframes map-loader-ring {
    to {
        transform: rotate(360deg);
    }
}

@media (min-width: 48rem) {
    .map-loader__logo {
        width: 6rem;
        height: 6rem;
    }

    .map-loader__ring {
        inset: -1.1rem;
    }
}

/* La foto del comercio va dentro de <picture> (fuente WebP + JPEG de respaldo) */
.map-popup__media picture,
.map-selection-card__media picture {
    display: block;
}
