/* ==========================================================================
   carte-resultats-listing.css — points + popup de la carte des résultats
   (/acheter/ et /louer/). Planche : design/reference/Carte-resultats-listing.html
   Décisions datées 08/10/2026. Consomme tokens + .card-ph/.card-price/.card-loc/
   .card-title/.card-specs/.ph-empty de cogestim-components.css (aucune règle ne
   les modifie). Aucune valeur de couleur en dur hors littéraux SVG commentés.
   Prérequis page : <svg width="0" height="0"> avec #cmap-grad (voir planche §06).
   ========================================================================== */
:root{--cmap-dot:14px;--cmap-pin:40px;--cmap-hit:44px;--cmap-attr-h:28px;--cmap-pop-w:272px}

/* --- Points ---------------------------------------------------------------
   Marqueur Leaflet = L.divIcon({className:'cmap-pt',iconSize:[0,0],html:<dot+pin>}) :
   l'élément mesure 0×0 et son origine EST la coordonnée du bien. */
.cmap-pt{position:relative;width:0;height:0;outline:none;cursor:pointer;-webkit-tap-highlight-color:transparent}
.cmap-dot{position:absolute;left:calc(var(--cmap-dot) / -2);top:calc(var(--cmap-dot) / -2);width:var(--cmap-dot);height:var(--cmap-dot);box-sizing:border-box;border:2px solid var(--cog-white);border-radius:var(--radius-full);background-image:var(--grad-45);box-shadow:0 0 0 1px var(--cog-ink-a10);transition:opacity var(--dur-fast) var(--ease-out),transform var(--dur-fast) var(--ease-out)}
.cmap-dot::after{content:"";position:absolute;left:50%;top:50%;width:var(--cmap-hit);height:var(--cmap-hit);transform:translate(-50%,-50%);border-radius:var(--radius-full)} /* zone de toucher 44px, invisible */
.cmap-pin{position:absolute;left:calc(var(--cmap-pin) / -2);top:calc(var(--cmap-pin) * -.907);width:var(--cmap-pin);height:var(--cmap-pin);fill:none;stroke-width:var(--icon-stroke);stroke-linecap:round;stroke-linejoin:round;overflow:visible;pointer-events:none;opacity:0;transform:scale(.35);transform-origin:50% 90.7%;filter:drop-shadow(0 5px 6px var(--cog-ink-a10));transition:opacity var(--dur-fast) var(--ease-out),transform var(--dur-fast) var(--ease-pop)} /* pointe du pin = coordonnée */
/* Survol : le disque cède la place au pin 40px */
.cmap-pt:hover .cmap-pin,.cmap-pt.is-hover .cmap-pin,.cmap-pt.is-active .cmap-pin{opacity:1;transform:scale(1)}
.cmap-pt:hover .cmap-dot,.cmap-pt.is-hover .cmap-dot{opacity:0}
/* Actif (popup ouverte) : pin + « pied » — le disque reste visible sous la pointe */
.cmap-pt.is-active .cmap-dot{opacity:1;transform:scale(1.15)}
/* Focus clavier */
.cmap-pt:focus-visible .cmap-dot{box-shadow:0 0 0 1px var(--cog-ink-a10),var(--cog-focus-ring),0 0 0 3px var(--cog-white)}
.cmap-pt:focus-visible .cmap-pin{opacity:1;transform:scale(1)}
.cmap-pt:focus-visible .cmap-dot{opacity:0}
.cmap-pt.is-active:focus-visible .cmap-dot{opacity:1}
@media (hover:none){.cmap-pt:hover .cmap-dot{opacity:1}.cmap-pt:hover .cmap-pin{opacity:0;transform:scale(.35)}.cmap-pt.is-active:hover .cmap-pin{opacity:1;transform:scale(1)}}
@media (prefers-reduced-motion:reduce){.cmap-dot,.cmap-pin{transition:none}}

/* --- Popup « carte de bien » ----------------------------------------------- */
.cmap-card{position:relative;display:flex;flex-direction:column;width:var(--cmap-pop-w);background:var(--cog-white);border:1px solid var(--rule);border-radius:0;overflow:hidden;box-shadow:var(--shadow-panel);font-family:var(--font-sans);text-align:left}
.cmap-card .card-link{position:absolute;inset:0;z-index:1}
.cmap-card:hover .card-ph img{transform:scale(1.05)}
.cmap-card:has(.card-link:focus-visible){border-color:var(--ink);box-shadow:var(--cog-focus-ring),var(--shadow-panel)}
.cmap-card .card-link:focus-visible{outline:none}
.cmap-card .card-body{padding:14px 16px 16px;gap:6px}
.cmap-card .card-title{margin:0;font-size:var(--cog-fs-sm);line-height:1.3;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden}
.cmap-card .card-specs{padding-top:10px;margin-top:4px;gap:16px}
.cmap-card .price-free{font-weight:500;font-size:var(--cog-fs-body-lg);letter-spacing:0;color:var(--ink-mute);line-height:1.1} /* même registre que .card--projet .price-free */
.cmap-x{position:absolute;right:8px;top:8px;z-index:2;width:var(--cog-control-md);height:var(--cog-control-md);border-radius:var(--radius-full);border:1px solid var(--cog-ink-a05);background:rgba(250,250,247,.92);backdrop-filter:blur(6px);display:inline-flex;align-items:center;justify-content:center;cursor:pointer;padding:0;transition:background var(--dur-fast) ease,transform var(--dur-fast) ease} /* pastille = élément cliquable, même registre que l'ex-.fav */
.cmap-x svg{width:var(--icon-md);height:var(--icon-md);stroke:var(--icon-strong);fill:none;stroke-width:var(--icon-stroke);stroke-linecap:round;stroke-linejoin:round}
.cmap-x:hover{background:var(--cog-white);transform:scale(1.06)}
.cmap-x:focus-visible{outline:none;box-shadow:var(--cog-focus-ring)}

/* Ancrage Leaflet : on neutralise l'habillage natif, la carte porte tout */
.cmap-popup .leaflet-popup-content-wrapper{padding:0;border-radius:0;background:transparent;box-shadow:none}
.cmap-popup .leaflet-popup-content{margin:0;width:auto!important}
.cmap-popup .leaflet-popup-tip-container,.cmap-popup .leaflet-popup-close-button{display:none}

/* Mobile ≤640px : feuille basse pleine largeur (hors couche Leaflet) */
.cmap-sheet{position:absolute;left:0;right:0;bottom:var(--cmap-attr-h);z-index:var(--z-popover)}
.cmap-sheet .cmap-card{width:100%;display:grid;grid-template-columns:132px minmax(0,1fr);border-width:1px 0 1px;box-shadow:var(--shadow-float)}
.cmap-sheet .card-ph{aspect-ratio:auto;min-height:100%}
.cmap-sheet .card-ph.ph-empty{padding:8px}
.cmap-sheet .ph-empty .mono{letter-spacing:.08em;padding:5px 8px}
.cmap-sheet .card-body{padding:12px 56px 14px 14px}
.cmap-sheet .card-price{font-size:var(--cog-fs-h4)}
.cmap-sheet .card-specs{flex-wrap:nowrap;gap:14px}
.cmap-sheet .cmap-x{right:2px;top:2px}

/* --- Attribution OSM — jamais masquée --------------------------------------
   Coin bas droit, bande de --cmap-attr-h ; la feuille mobile se pose AU-DESSUS. */
.cmap-attr,.leaflet-container .leaflet-control-attribution{position:absolute;right:0;bottom:0;z-index:calc(var(--z-popover) + 1);height:var(--cmap-attr-h);display:flex;align-items:center;margin:0;padding:0 10px;background:rgba(250,250,247,.9);font-family:var(--font-sans);font-size:var(--cog-fs-xs);line-height:1;color:var(--ink-soft)}
.cmap-attr a,.leaflet-container .leaflet-control-attribution a{color:var(--ink-soft);text-decoration:underline;text-underline-offset:2px}
.cmap-attr a:hover,.leaflet-container .leaflet-control-attribution a:hover{color:var(--ink)}
.cmap-attr a:focus-visible,.leaflet-container .leaflet-control-attribution a:focus-visible{outline:none;box-shadow:var(--cog-focus-ring)}

/* --- PORTAGE THÈME (08/10) — absent de design/assets/carte-resultats-listing.css ------
   leaflet-1.9.4.css est injecté à la demande APRÈS cette feuille ; sa règle
   `.leaflet-container .leaflet-control-attribution{background:rgba(255,255,255,.8)}`
   a le même poids que celle de la planche et la remporte à l'ordre. On relève la
   spécificité pour tenir le fond de la planche (--paper 90 %). Rien d'autre ne diverge. */
.map-panel .leaflet-container .leaflet-control-attribution{background:rgba(250,250,247,.9)}

/* Voile d'aide Ctrl + molette (avenant portage 08/10) — absent de la planche : tokens existants
   seuls, scopé .cmap-hint (créé par cogestim-funnel-map.js uniquement avec opts.ctrlZoom). */
.cmap-hint{position:absolute;inset:0;z-index:calc(var(--z-popover) + 2);display:flex;align-items:center;justify-content:center;padding:0 24px;text-align:center;background:color-mix(in srgb,var(--ink) 45%,transparent);color:var(--cog-white);font-family:var(--font-sans);font-size:var(--cog-fs-body-lg);font-weight:500;pointer-events:none;opacity:0;transition:opacity var(--dur-fast) var(--ease-out)}
.cmap-hint.is-on{opacity:1}
@media (prefers-reduced-motion:reduce){.cmap-hint{transition:none}}
