/* ===== Carte Festival — Front ===== */
.cf-map-container {
    position: relative; margin: 0 auto; overflow: hidden;
    background: var(--cf-bg, #0c0e14);
    border-radius: var(--cf-radius, 12px);
    aspect-ratio: 1 / 1;
    color: var(--cf-text, #f0eee8);
    font-family: var(--cf-font, 'DM Sans', system-ui, sans-serif);
    -webkit-user-select: none; user-select: none; line-height: normal;
}
.cf-map-container *, .cf-map-container *::before, .cf-map-container *::after { box-sizing: border-box; }

.cf-map-inner { position: absolute; inset: 0; transform-origin: 0 0; will-change: transform; cursor: grab; }
.cf-map-inner.cf-panning { cursor: grabbing; }
.cf-map-svg { display: block; width: 100%; height: 100%; }

/* Zones */
.cf-zone {
    fill-opacity: var(--cf-zone-op, .16);
    stroke-opacity: .65;
    stroke-width: var(--cf-stroke, .35);
    cursor: pointer; paint-order: stroke;
    transition: fill-opacity .2s, stroke-opacity .2s, filter .2s;
}
.cf-zone:hover { fill-opacity: var(--cf-zone-hover-op, .42); stroke-opacity: 1; }
.cf-scene:hover { filter: drop-shadow(0 0 3px var(--cf-accent, #ff6b6b)); }

/* Labels */
.cf-label {
    pointer-events: none; text-anchor: middle; dominant-baseline: middle;
    font-family: var(--cf-font, 'DM Sans', system-ui, sans-serif);
}

/* Zoom */
.cf-zoom-controls { position: absolute; top: 12px; right: 12px; display: flex; flex-direction: column; gap: 4px; z-index: 5; }
.cf-zoom-btn {
    width: 34px; height: 34px; background: var(--cf-pop-bg, #13161f);
    border: 1px solid rgba(255,255,255,.15); border-radius: 9px;
    color: var(--cf-text, #f0eee8); font-size: 18px; line-height: 1; cursor: pointer;
    display: flex; align-items: center; justify-content: center; transition: filter .15s;
}
.cf-zoom-btn:hover { filter: brightness(1.3); }
.cf-zoom-btn:active { transform: scale(.95); }
.cf-zoom-reset { font-size: 14px; }

/* Légende */
.cf-legend {
    position: absolute; bottom: 12px; left: 12px;
    background: color-mix(in srgb, var(--cf-bg, #13161f) 80%, transparent);
    backdrop-filter: blur(8px); border: 1px solid rgba(255,255,255,.10);
    border-radius: 9px; padding: 9px 12px; display: flex; flex-direction: column;
    gap: 6px; z-index: 5; font-size: 11px; opacity: .85;
}
.cf-leg-item { display: flex; align-items: center; gap: 7px; }
.cf-leg-dot { width: 12px; height: 8px; border-radius: 2px; opacity: .8; flex-shrink: 0; }

/* Tooltip (suivi curseur, attaché au body) */
.cf-tooltip {
    position: fixed; pointer-events: none; display: none; z-index: 99998;
    background: var(--cf-tip-bg, #13161f); color: var(--cf-tip-text, #f0eee8);
    border: 1px solid rgba(255,255,255,.18); border-radius: 8px; padding: 6px 11px;
    white-space: nowrap; font-size: 12px; font-weight: 600;
    font-family: 'DM Sans', system-ui, sans-serif;
}
.cf-tooltip.cf-scene-tip { border-color: color-mix(in srgb, var(--cf-tip-accent,#ff6b6b) 50%, transparent); color: var(--cf-tip-accent, #ff6b6b); }
.cf-tooltip .cf-tip-hint { font-size: 10px; font-weight: 400; opacity: .6; margin-top: 2px; }

/* Bulle d'info au clic (popover, attaché au body, près du clic) */
.cf-popover {
    position: fixed; z-index: 99999; display: none; width: 280px; max-width: 86vw;
    background: var(--cf-pop-bg, #13161f); color: var(--cf-pop-text, #f0eee8);
    border: 1px solid color-mix(in srgb, var(--cf-pop-border,#fff) 22%, transparent);
    border-radius: 14px; padding: 16px 18px 14px;
    box-shadow: 0 18px 50px rgba(0,0,0,.5);
    font-family: 'DM Sans', system-ui, sans-serif;
    animation: cf-pop-in .18s cubic-bezier(.34,1.56,.64,1);
}
@keyframes cf-pop-in { from { opacity:0; transform: scale(.92) translateY(6px);} to { opacity:1; transform:none; } }
.cf-popover.cf-show { display: block; }
.cf-pop-badge {
    display: none; align-items: center; gap: 6px; margin-bottom: 10px;
    background: color-mix(in srgb, var(--cf-pop-accent,#ff6b6b) 14%, transparent);
    border: 1px solid color-mix(in srgb, var(--cf-pop-accent,#ff6b6b) 35%, transparent);
    border-radius: 20px; padding: 3px 11px; font-size: 10px; letter-spacing: .05em;
    text-transform: uppercase; color: var(--cf-pop-accent, #ff6b6b);
}
.cf-popover.cf-is-scene .cf-pop-badge { display: inline-flex; }
.cf-pop-badge::before { content:''; width:6px;height:6px;border-radius:50%;background:var(--cf-pop-accent,#ff6b6b); animation: cf-pulse 1.5s infinite; }
@keyframes cf-pulse { 0%,100%{opacity:1;transform:scale(1);} 50%{opacity:.5;transform:scale(.8);} }
.cf-pop-close {
    position: absolute; top: 10px; right: 12px; cursor: pointer; border: none; background: none;
    color: inherit; opacity: .5; font-size: 20px; line-height: 1; padding: 2px;
}
.cf-pop-close:hover { opacity: 1; }
.cf-pop-title { font-size: 18px; font-weight: 800; margin: 0 24px 6px 0; }
.cf-pop-desc { font-size: 13px; line-height: 1.55; opacity: .75; margin: 0; }
.cf-pop-prog {
    display: none; margin-top: 14px; background: var(--cf-pop-accent, #ff6b6b);
    color: #fff; border: none; border-radius: 9px; padding: 9px 16px; font-size: 13px;
    font-weight: 500; cursor: pointer; text-decoration: none; align-items: center; gap: 6px;
}
.cf-popover.cf-is-scene .cf-pop-prog { display: inline-flex; }
.cf-pop-prog:hover { filter: brightness(1.08); color:#fff; }
