/* /assets/css/intercab.css — auto-extracted from source (no renaming) */


:root{
    --framboise:#E41D5D;
    --sable:#BEAE89;
    --beige:#E5E0D2;
    --noir:#1A1A1A;
    --blanc:#FFFFFF;
    --lmd:#E67E22;
    --osmoz:#1A1A1A;
    --natimmo:#8B5A2B;
    --cyan:#209C9A;
    --sold:#8E9196;
}
*{margin:0;padding:0;box-sizing:border-box}
body{font-family: 'DM Sans', sans-serif;background:var(--beige);color:var(--noir);overflow-x:hidden;overflow-y:auto}

.app{display:flex;height:100vh;height:100dvh;position:relative}

.map-section{flex:1;position:relative;overflow:hidden}
#map{width:100%;height:100%;z-index:1;transition:filter .3s ease}
.leaflet-control-zoom{display:none!important}
.leaflet-control-attribution{font-size:10px;opacity:0.7}

/* ===== CONTRÔLES ===== */
.map-controls{
    position:absolute;
    top:20px;
    left:20px;
    z-index:1000;
    display:flex;
    flex-direction:column;
    gap:2px;
    background:var(--blanc);
    border-radius:14px;
    box-shadow:0 2px 12px rgba(0,0,0,0.08);
    padding:5px;
}
.ctrl-btn{
    width:40px;
    height:40px;
    background:var(--blanc);
    border:none;
    font-size:1.3rem;
    font-weight:300;
    color:var(--noir);
    cursor:pointer;
    display:flex;
    align-items:center;
    justify-content:center;
    border-radius:10px;
    transition:all .25s cubic-bezier(0.4, 0, 0.2, 1);
}
.ctrl-btn:hover{background:var(--beige);color:var(--cyan)}
.ctrl-btn:active{transform:scale(0.92)}
.ctrl-btn.reset-btn{
    margin-top:4px;
    border-top:1px solid var(--beige);
    padding-top:2px;
}
.ctrl-btn.reset-btn:hover{
    background:var(--cyan);
    color:var(--blanc);
}
.ctrl-btn.reset-btn svg{
    transition:transform .4s cubic-bezier(0.4, 0, 0.2, 1);
}
.ctrl-btn.reset-btn:hover svg{
    transform:rotate(-360deg);
}

/* ===== BARRE DE RECHERCHE INTELLIGENTE ===== */
.smart-search{
    position:absolute;
    top:20px;
    left:75px;
    right:20px;
    max-width:520px;
    z-index:1001;
}
.smart-search-box{
    position:relative;
    background:var(--blanc);
    border-radius:16px;
    padding:3px;
    background:linear-gradient(90deg, var(--cyan), #1a8a88, var(--noir), #1a8a88, var(--cyan));
    background-size:300% 100%;
    animation:borderGlow 4s linear infinite;
    box-shadow:0 4px 25px rgba(32,156,154,0.3);
    transition:box-shadow .3s ease;
}
.smart-search-box:focus-within{
    box-shadow:0 6px 35px rgba(32,156,154,0.45);
    animation:borderGlow 2s linear infinite;
}
@keyframes borderGlow{
    0%{background-position:0% 50%}
    100%{background-position:300% 50%}
}
.smart-search-inner{
    background:var(--blanc);
    border-radius:13px;
    position:relative;
    display:flex;
    align-items:center;
}
.smart-search-icon{
    position:absolute;
    left:16px;
    top:50%;
    transform:translateY(-50%);
    width:22px;
    height:22px;
    stroke:var(--cyan);
    fill:none;
    opacity:0.8;
    transition:all .3s;
    z-index:2;
}
.smart-search-box:focus-within .smart-search-icon{
    opacity:1;
    stroke:var(--cyan);
    transform:translateY(-50%) scale(1.1);
}

.smart-search-input{
    width:100%;
    padding:16px 120px 16px 52px;
    border:none;
    border-radius:13px;
    background:transparent;
    font-family: 'DM Sans', sans-serif;
    font-size:.95rem;
    outline:none;
    color:var(--noir);
    position:relative;
    z-index:1;
}
.smart-search-input::placeholder{color:transparent}

.smart-search-placeholder{
    position:absolute;
    left:52px;
    top:50%;
    transform:translateY(-50%);
    font-size:.9rem;
    color:#999;
    pointer-events:none;
    z-index:0;
    display:flex;
    align-items:center;
    white-space:nowrap;
    overflow:hidden;
    max-width:calc(100% - 140px);
}
.smart-search-input:focus ~ .smart-search-placeholder,
.smart-search-input.has-value ~ .smart-search-placeholder{
    display:none;
}
.placeholder-text{
    white-space:nowrap;
    font-style:italic;
}

.smart-search-clear{
    position:absolute;
    right:14px;
    top:50%;
    transform:translateY(-50%);
    width:28px;
    height:28px;
    border:none;
    background:linear-gradient(135deg, var(--beige) 0%, #d5d0c4 100%);
    border-radius:50%;
    font-size:1.2rem;
    color:var(--sold);
    cursor:pointer;
    display:none;
    align-items:center;
    justify-content:center;
    transition:all .2s ease;
    z-index:2;
}
.smart-search-clear.show{display:flex}
.smart-search-clear:hover{
    background:linear-gradient(135deg, var(--framboise) 0%, #c41850 100%);
    color:var(--blanc);
    transform:translateY(-50%) scale(1.1);
}

/* Bouton Rechercher */
.smart-search-submit{
    position:absolute;
    right:14px;
    top:50%;
    transform:translateY(-50%);
    padding:8px 16px;
    border:none;
    background:linear-gradient(135deg, var(--cyan) 0%, #1a8a88 100%);
    border-radius:20px;
    font-family: 'DM Sans', sans-serif;
    font-size:.75rem;
    font-weight:600;
    color:var(--blanc);
    cursor:pointer;
    display:none;
    align-items:center;
    gap:5px;
    transition:all .2s ease;
    z-index:2;
    box-shadow:0 2px 8px rgba(32,156,154,0.3);
}
.smart-search-submit.show{display:flex}
.smart-search-submit:hover{
    transform:translateY(-50%) scale(1.05);
    box-shadow:0 4px 12px rgba(32,156,154,0.4);
}
.smart-search-submit svg{
    width:14px;
    height:14px;
    stroke:currentColor;
    fill:none;
}

/* Liste des suggestions */
.smart-search-suggestions{
    position:absolute;
    top:100%;
    left:0;
    right:0;
    margin-top:6px;
    background:var(--blanc);
    border-radius:12px;
    box-shadow:0 6px 30px rgba(0,0,0,0.15);
    max-height:280px;
    overflow-y:auto;
    opacity:0;
    transform:translateY(-10px);
    pointer-events:none;
    transition:all .25s cubic-bezier(0.4, 0, 0.2, 1);
    z-index:1002;
}
.smart-search-suggestions.show{
    opacity:1;
    transform:translateY(0);
    pointer-events:auto;
}
.suggestion-item{
    padding:12px 16px;
    cursor:pointer;
    font-size:.85rem;
    border-bottom:1px solid var(--beige);
    transition:all .2s ease;
    display:flex;
    align-items:center;
    gap:10px;
}
.suggestion-item:last-child{border-bottom:none}
.suggestion-item:hover,.suggestion-item.active{
    background:var(--beige);
    padding-left:20px;
}
.suggestion-icon{
    width:28px;
    height:28px;
    border-radius:8px;
    display:flex;
    align-items:center;
    justify-content:center;
    font-size:.8rem;
    flex-shrink:0;
}
.suggestion-icon.location{background:rgba(32,156,154,0.15);color:var(--cyan)}
.suggestion-icon.price{background:rgba(226,31,81,0.15);color:var(--framboise)}
.suggestion-icon.rooms{background:rgba(232,140,49,0.15);color:var(--lmd)}
.suggestion-icon.type{background:rgba(26,26,26,0.15);color:var(--noir)}
.suggestion-text{flex:1}
.suggestion-title{font-weight:500;color:var(--noir)}
.suggestion-subtitle{font-size:.7rem;color:var(--sold);margin-top:2px}
.suggestion-count{
    font-size:.7rem;
    color:var(--blanc);
    background:var(--cyan);
    padding:3px 10px;
    border-radius:10px;
    font-weight:500;
}

/* Tags de filtres actifs */
.smart-search-tags{
    display:flex;
    flex-wrap:wrap;
    gap:8px;
    margin-top:10px;
    padding:0 6px;
}
.smart-search-tag{
    display:inline-flex;
    align-items:center;
    gap:6px;
    padding:6px 12px;
    background:var(--blanc);
    border:2px solid var(--cyan);
    border-radius:25px;
    font-size:.8rem;
    font-weight:600;
    color:var(--cyan);
    animation:tagPop .3s cubic-bezier(0.175, 0.885, 0.32, 1.275);
    box-shadow:0 3px 12px rgba(32,156,154,0.2);
    transition:all .2s ease;
}
.smart-search-tag:hover{
    transform:translateY(-2px);
    box-shadow:0 5px 15px rgba(32,156,154,0.3);
}
@keyframes tagPop{
    0%{opacity:0;transform:scale(0.8)}
    100%{opacity:1;transform:scale(1)}
}
.smart-search-tag svg{
    width:12px;
    height:12px;
    stroke:currentColor;
    fill:none;
    cursor:pointer;
    transition:all .2s;
}
.smart-search-tag svg:hover{stroke:var(--framboise)}
.smart-search-tag.location{background:rgba(32,156,154,0.1)}
.smart-search-tag.price{background:rgba(226,31,81,0.1);border-color:var(--framboise);color:var(--framboise)}
.smart-search-tag.rooms{background:rgba(232,140,49,0.1);border-color:var(--lmd);color:var(--lmd)}
.smart-search-tag.type{background:rgba(26,26,26,0.1);border-color:var(--noir);color:var(--noir)}
.smart-search-tag.status{background:rgba(178,158,126,0.1);border-color:var(--sable);color:#8a7a5a}

/* ===== BOUTON INTERCAB ===== */
.portal-btn{
    position:absolute;
    bottom:24px;
    left:50%;
    transform:translateX(-50%);
    z-index:1000;
    display:flex;
    align-items:center;
    gap:12px;
}
.portal-link{
    display:flex;
    align-items:center;
    gap:10px;
    padding:14px 28px;
    background:linear-gradient(135deg, var(--cyan) 0%, #1a8a88 100%);
    color:var(--blanc);
    text-decoration:none;
    font-family: 'DM Sans', sans-serif;
    font-size:.9rem;
    font-weight:600;
    border-radius:14px;
    box-shadow:0 4px 20px rgba(32,156,154,0.4);
    transition:all .3s ease;
    position:relative;
    overflow:hidden;
}
.portal-link::before{
    content:'';
    position:absolute;
    top:0;
    left:-100%;
    width:100%;
    height:100%;
    background:linear-gradient(90deg, transparent, rgba(255,255,255,0.2), transparent);
    transition:left .5s ease;
}
.portal-link:hover::before{
    left:100%;
}
.portal-link:hover{
    transform:translateY(-3px);
    box-shadow:0 8px 30px rgba(32,156,154,0.5);
}
.portal-link:active{
    transform:translateY(-1px);
}
.portal-link svg{
    width:20px;
    height:20px;
    fill:currentColor;
}
.counter{
    background:var(--blanc);
    padding:10px 20px;
    border-radius:12px;
    box-shadow:0 2px 12px rgba(0,0,0,0.08);
    font-size:.85rem;
    color:var(--noir);
    border:1px solid rgba(190,174,137,0.2);
}
.counter strong{
    font-family:'League Spartan',sans-serif;
    font-weight:700;
    color:var(--cyan);
    font-size:1rem;
}

/* ===== SÉLECTEUR CARTE ===== */
.map-style-selector{
    position:absolute;
    bottom:24px;
    right:20px;
    z-index:1000;
    display:flex;
    gap:6px;
    background:var(--blanc);
    padding:6px;
    border-radius:14px;
    box-shadow:0 2px 12px rgba(0,0,0,0.08);
}
.map-style-btn{
    width:44px;
    height:44px;
    border:2px solid transparent;
    border-radius:10px;
    cursor:pointer;
    transition:all .2s ease;
    overflow:hidden;
}
.map-style-btn:hover{transform:scale(1.05)}
.map-style-btn.active{border-color:var(--sable);box-shadow:0 0 0 2px rgba(190,174,137,0.2)}
.map-style-btn[data-style="plan"]{background:#f0ede5}
.map-style-btn[data-style="satellite"]{background:linear-gradient(135deg,#3a5a1c,#1a3d10)}
.map-style-btn[data-style="hybrid"]{background:linear-gradient(135deg,#4a6a2c 50%,#f0ede5 50%)}

/* ===== BULLES CLUSTERING ===== */
.cluster-bubble{
    display:flex;
    align-items:center;
    justify-content:center;
    border-radius:50%;
    background:var(--cyan);
    color:var(--blanc);
    font-family:'League Spartan',sans-serif;
    font-weight:700;
    box-shadow:0 4px 15px rgba(32,156,154,0.4);
    cursor:pointer;
    transition:all .3s cubic-bezier(0.34, 1.56, 0.64, 1);
    animation:bubblePop .5s cubic-bezier(0.34, 1.56, 0.64, 1) backwards;
    border:3px solid rgba(255,255,255,0.95);
    position:relative;
}
.cluster-bubble:hover{
    transform:scale(1.18);
    box-shadow:0 8px 30px rgba(32,156,154,0.55);
}
.cluster-bubble::after{
    content:'';
    position:absolute;
    inset:3px;
    border-radius:50%;
    background:linear-gradient(135deg, rgba(255,255,255,0.25) 0%, transparent 50%);
    pointer-events:none;
}

/* Tailles des bulles selon le nombre */
.cluster-bubble.size-xl{width:60px;height:60px;font-size:1.05rem}
.cluster-bubble.size-lg{width:52px;height:52px;font-size:.95rem}
.cluster-bubble.size-md{width:44px;height:44px;font-size:.85rem}
.cluster-bubble.size-sm{width:38px;height:38px;font-size:.8rem}
.cluster-bubble.size-xs{width:32px;height:32px;font-size:.7rem}

@keyframes bubblePop{
    0%{opacity:0;transform:scale(0)}
    50%{transform:scale(1.1)}
    100%{opacity:1;transform:scale(1)}
}

/* Désactiver les animations après le premier clic */
.cluster-bubble.no-anim{animation:none}
.price-tag.no-anim{animation:none}
.pin.no-anim{animation:none}

/* Bulles secteur (niveau 2) - même style */
.cluster-bubble.sector{
    background:var(--cyan);
}

/* Label ville/département au survol */
.cluster-label{
    position:absolute;
    bottom:-22px;
    left:50%;
    transform:translateX(-50%);
    font-size:.6rem;
    font-weight:600;
    color:var(--noir);
    background:var(--blanc);
    padding:3px 8px;
    border-radius:10px;
    white-space:nowrap;
    box-shadow:0 2px 8px rgba(0,0,0,0.12);
    opacity:0;
    transition:opacity .2s ease;
    max-width:120px;
    overflow:hidden;
    text-overflow:ellipsis;
}
.cluster-bubble:hover .cluster-label{opacity:1}

/* ===== PINS INDIVIDUELS ===== */
.pin{
    cursor:pointer;
    transition:transform .3s cubic-bezier(0.34, 1.56, 0.64, 1);
    animation:pinDrop .4s cubic-bezier(0.34, 1.56, 0.64, 1) backwards;
}
.pin:hover{transform:scale(1.25) translateY(-3px)}

@keyframes pinDrop{
    0%{opacity:0;transform:scale(0.3) translateY(-20px)}
    100%{opacity:1;transform:scale(1) translateY(0)}
}

.pin-body{
    width:100%;
    height:100%;
    background:var(--cyan);
    border-radius:50% 50% 50% 0;
    transform:rotate(-45deg);
    border:2.5px solid var(--blanc);
    box-shadow:0 3px 12px rgba(32,156,154,0.4);
    position:relative;
}
.pin-body::after{
    content:'';
    position:absolute;
    top:50%;
    left:50%;
    transform:translate(-50%,-50%) rotate(45deg);
    width:35%;
    height:35%;
    background:var(--blanc);
    border-radius:50%;
}

.pin-sm{width:26px;height:26px}
.pin-lg{width:38px;height:38px}

/* ===== ÉTIQUETTES PRIX ===== */
.price-tag{
    cursor:pointer;
    transition:transform .3s cubic-bezier(0.34, 1.56, 0.64, 1), z-index 0s;
    z-index:10;
    animation:pricePopIn .5s cubic-bezier(0.34, 1.56, 0.64, 1) backwards;
}
.price-tag:hover{transform:scale(1.12) translateY(-4px);z-index:9999!important}

@keyframes pricePopIn{
    0%{opacity:0;transform:scale(0) translateY(10px)}
    100%{opacity:1;transform:scale(1) translateY(0)}
}

.price-bubble{
    display:inline-block;
    padding:8px 14px;
    border-radius:8px;
    font-family:'League Spartan',sans-serif;
    font-size:12px;
    font-weight:700;
    color:var(--blanc);
    background:var(--cyan);
    box-shadow:0 3px 12px rgba(32,156,154,0.35);
    position:relative;
    letter-spacing:0.3px;
    border:2px solid rgba(255,255,255,0.9);
}
.price-bubble::after{
    content:'';
    position:absolute;
    bottom:-8px;
    left:50%;
    transform:translateX(-50%);
    border:8px solid transparent;
    border-top-color:var(--cyan);
}

.price-tag.active .price-bubble{
    background:var(--framboise);
    box-shadow:0 4px 16px rgba(226,31,81,0.4);
}
.price-tag.active .price-bubble::after{
    border-top-color:var(--framboise);
}

/* Style pour biens vendus */
.price-tag.sold .price-bubble{
    background:linear-gradient(135deg, #8a8a8a 0%, #6b6b6b 100%);
    box-shadow:0 3px 10px rgba(100,100,100,0.3);
    opacity:0.85;
}
.price-tag.sold .price-bubble::after{
    border-top-color:#7a7a7a;
}
.price-tag.sold:hover .price-bubble{
    opacity:1;
}

/* ===== LÉGENDE CARTE ===== */
.map-legend{
    position:absolute;
    top:auto;
    bottom:100px;
    right:20px;
    background:var(--blanc);
    padding:12px 16px;
    border-radius:12px;
    box-shadow:0 4px 20px rgba(0,0,0,0.1);
    z-index:1000;
    opacity:0;
    transform:translateY(10px);
    pointer-events:none;
    transition:all .3s ease;
}
@media(max-height:600px){
    .map-legend{
        bottom:auto;
        top:80px;
    }
}
.map-legend.show{
    opacity:1;
    transform:translateY(0);
    pointer-events:auto;
}
.legend-title{
    font-family:'League Spartan',sans-serif;
    font-size:.75rem;
    font-weight:700;
    color:var(--noir);
    margin-bottom:10px;
    text-transform:uppercase;
    letter-spacing:0.5px;
}
.legend-item{
    display:flex;
    align-items:center;
    gap:10px;
    margin-bottom:6px;
    padding:6px 8px;
    margin:-6px -8px;
    margin-bottom:2px;
    border-radius:8px;
    cursor:pointer;
    transition:all .2s ease;
}
.legend-item:last-child{margin-bottom:-6px}
.legend-item:hover{
    background:var(--beige);
}
.legend-item.active{
    background:var(--beige);
    box-shadow:inset 0 0 0 2px var(--cyan);
}
.legend-item.inactive{
    opacity:0.4;
}
.legend-marker{
    width:32px;
    height:18px;
    border-radius:5px;
    border:2px solid rgba(255,255,255,0.9);
    box-shadow:0 2px 6px rgba(0,0,0,0.15);
}
.legend-marker.sale{
    background:var(--cyan);
}
.legend-marker.sold{
    background:linear-gradient(135deg, #8a8a8a 0%, #6b6b6b 100%);
    opacity:0.85;
}
.legend-label{
    font-size:.8rem;
    color:var(--noir);
    font-weight:500;
}

/* ===== ZONE 100m ===== */
.leaflet-interactive.privacy-zone{
    fill:rgba(32,156,154,0.08);
    stroke:var(--cyan);
    stroke-width:2;
    stroke-dasharray:6,4;
    stroke-opacity:0.6;
    cursor:pointer;
    transition:all .2s ease;
}
.leaflet-interactive.privacy-zone:hover{
    fill:rgba(32,156,154,0.15);
    stroke-opacity:1;
    stroke-width:2.5;
}

/* ===== SWITCH VUE CARTE/PORTAIL ===== */
.view-switch{
    position:absolute;
    top:20px;
    left:50%;
    transform:translateX(-50%);
    z-index:1001;
    display:flex;
    background:var(--blanc);
    border-radius:14px;
    padding:5px;
    box-shadow:0 4px 20px rgba(0,0,0,0.12);
}
.view-btn{
    display:flex;
    align-items:center;
    gap:8px;
    padding:10px 20px;
    border:none;
    background:transparent;
    font-family: 'DM Sans', sans-serif;
    font-size:.85rem;
    font-weight:500;
    color:var(--sold);
    cursor:pointer;
    border-radius:10px;
    transition:all .3s cubic-bezier(0.4, 0, 0.2, 1);
}
.view-btn svg{
    width:18px;
    height:18px;
    stroke:currentColor;
    fill:none;
    stroke-width:2;
}
.view-btn:hover{
    color:var(--cyan);
}
.view-btn.active{
    background:var(--cyan);
    color:var(--blanc);
    box-shadow:0 2px 10px rgba(32,156,154,0.3);
}
.view-btn.active svg{
    stroke:var(--blanc);
}

/* ===== VUE PORTAIL ===== */
.portal-view{
    position:absolute;
    inset:0;
    background:
        radial-gradient(1200px 600px at 50% -10%, rgba(32,156,154,0.08), transparent 60%),
        var(--beige);
    z-index:5;
    overflow-y:auto;
    scroll-behavior:smooth;
    -webkit-overflow-scrolling:touch;
    opacity:0;
    visibility:hidden;
    transform:translateY(10px);
    transition:opacity .35s cubic-bezier(0.4,0,0.2,1), transform .45s cubic-bezier(0.4,0,0.2,1), visibility .35s;
}
.portal-view.active{
    opacity:1;
    visibility:visible;
    transform:translateY(0);
}

.portal-header{
    background:transparent;
    padding:120px 20px 6px;
    text-align:center;
}
.portal-title{
    font-family:'League Spartan',sans-serif;
    font-size:1.55rem;
    font-weight:700;
    color:var(--noir);
    letter-spacing:-0.01em;
}
.portal-subtitle{
    margin-top:6px;
    font-family:'DM Sans',sans-serif;
    font-size:.82rem;
    font-weight:500;
    color:var(--sold);
}
.portal-subtitle strong{color:var(--cyan);font-weight:700}

/* CTA Intercab fixe en bas du portail */
.portal-cta-fixed{
    position:fixed;
    bottom:20px;
    left:50%;
    transform:translateX(-50%);
    z-index:100;
}
.portal-cta-link{
    display:flex;
    align-items:center;
    gap:10px;
    padding:14px 28px;
    background:linear-gradient(135deg, var(--cyan) 0%, #1a8a88 100%);
    color:var(--blanc);
    text-decoration:none;
    font-family: 'DM Sans', sans-serif;
    font-size:.9rem;
    font-weight:600;
    border-radius:50px;
    box-shadow:0 4px 25px rgba(32,156,154,0.4);
    transition:all .3s ease;
    position:relative;
    overflow:hidden;
}
.portal-cta-link::before{
    content:'';
    position:absolute;
    top:0;
    left:-100%;
    width:100%;
    height:100%;
    background:linear-gradient(90deg, transparent, rgba(255,255,255,0.25), transparent);
    animation:shimmer 2s infinite;
}
@keyframes shimmer{
    0%{left:-100%}
    100%{left:100%}
}
.portal-cta-link:hover{
    transform:translateY(-3px);
    box-shadow:0 8px 35px rgba(32,156,154,0.5);
}
.portal-cta-link svg{
    width:20px;
    height:20px;
    fill:currentColor;
}

.portal-grid{
    display:grid;
    grid-template-columns:repeat(auto-fill, minmax(300px, 1fr));
    gap:16px;
    padding:16px;
    padding-bottom:100px;
    max-width:1400px;
    margin:0 auto;
}

/* ===== CARTE ANNONCE ===== */
.listing-card{
    background:var(--blanc);
    border-radius:16px;
    overflow:hidden;
    box-shadow:0 1px 2px rgba(20,30,40,0.04), 0 6px 18px rgba(20,30,40,0.06);
    border:1px solid rgba(20,30,40,0.04);
    transition:transform .28s cubic-bezier(0.22,1,0.36,1), box-shadow .28s ease, border-color .28s ease;
    cursor:pointer;
    will-change:transform;
    animation:cardIn .5s cubic-bezier(0.22,1,0.36,1) both;
    animation-delay:calc(var(--i, 0) * 28ms);
}
@keyframes cardIn{
    from{opacity:0; transform:translateY(16px) scale(.98)}
    to{opacity:1; transform:none}
}
@media (prefers-reduced-motion: reduce){
    .listing-card{animation:none}
    .portal-view{transition:opacity .2s ease, visibility .2s}
}
.listing-card:hover{
    transform:translateY(-6px);
    box-shadow:0 2px 6px rgba(20,30,40,0.06), 0 18px 40px rgba(32,156,154,0.16);
    border-color:rgba(32,156,154,0.25);
}

.listing-card-image{
    position:relative;
    height:170px;
    background:linear-gradient(135deg, var(--beige) 0%, #d5d0c4 100%);
    overflow:hidden;
}
.listing-card-image img{
    width:100%;
    height:100%;
    object-fit:cover;
    transition:transform .5s cubic-bezier(0.22,1,0.36,1);
}
.listing-card:hover .listing-card-image img{
    transform:scale(1.07);
}
.listing-card-image::after{
    content:'';
    position:absolute;
    inset:0;
    background:linear-gradient(to top, rgba(20,30,40,0.28), transparent 38%);
    pointer-events:none;
}
.listing-card-image-fallback{
    width:100%;
    height:100%;
    display:flex;
    align-items:center;
    justify-content:center;
    font-size:2.5rem;
    color:var(--sable);
    opacity:0.4;
}

.listing-card-badges{
    position:absolute;
    top:8px;
    left:8px;
    display:flex;
    flex-direction:column;
    gap:4px;
}
.listing-card-badge{
    padding:5px 10px;
    border-radius:7px;
    font-size:.6rem;
    font-weight:700;
    text-transform:uppercase;
    letter-spacing:0.4px;
    color:var(--blanc);
    box-shadow:0 2px 8px rgba(20,30,40,0.18);
    backdrop-filter:blur(2px);
}
.listing-card-badge.status{background:var(--cyan)}
.listing-card-badge.sold{background:var(--sold)}
.listing-card-badge.new{background:var(--framboise)}

.listing-card-network{
    position:absolute;
    top:8px;
    right:8px;
    padding:4px 8px;
    border-radius:4px;
    font-size:.6rem;
    font-weight:600;
    color:var(--blanc);
    background:rgba(0,0,0,0.5);
    backdrop-filter:blur(4px);
}

.listing-card-content{
    padding:12px;
}

.listing-card-price{
    font-family:'League Spartan',sans-serif;
    font-size:1.2rem;
    font-weight:700;
    color:var(--cyan);
}
.listing-card-price.sable{color:var(--sable)}
.listing-card-price.framboise{color:var(--framboise)}
.listing-card-price.lmd{color:var(--lmd)}
.listing-card-price.osmoz{color:var(--osmoz)}
.listing-card-price.natimmo{color:var(--natimmo)}
.listing-card-price.sold{color:var(--sold)}

.listing-card-price-m2{
    font-size:.7rem;
    color:var(--sold);
    margin-bottom:6px;
}

.listing-card-title{
    font-size:.8rem;
    font-weight:500;
    color:var(--noir);
    margin-bottom:4px;
    line-height:1.3;
    white-space:nowrap;
    overflow:hidden;
    text-overflow:ellipsis;
}

.listing-card-location{
    display:flex;
    align-items:center;
    gap:4px;
    font-size:.75rem;
    color:var(--cyan);
    margin-bottom:8px;
}
.listing-card-location svg{
    width:12px;
    height:12px;
    stroke:currentColor;
    fill:none;
    flex-shrink:0;
}

.listing-card-features{
    display:flex;
    flex-wrap:wrap;
    gap:8px;
    padding-top:8px;
    border-top:1px solid var(--beige);
}
.listing-card-feature{
    display:flex;
    align-items:center;
    gap:4px;
    font-size:.7rem;
    color:var(--sold);
}
.listing-card-feature svg{
    width:12px;
    height:12px;
    stroke:var(--sable);
    fill:none;
}

.listing-card-footer{
    display:flex;
    align-items:center;
    justify-content:space-between;
    padding:10px 12px;
    background:rgba(229,224,210,0.3);
    border-top:1px solid var(--beige);
}
.listing-card-agent{
    display:flex;
    align-items:center;
    gap:8px;
}
.listing-card-agent-avatar{
    width:28px;
    height:28px;
    border-radius:50%;
    background:var(--cyan);
    display:flex;
    align-items:center;
    justify-content:center;
    font-size:.6rem;
    font-weight:700;
    color:var(--blanc);
}
.listing-card-agent-name{
    font-size:.7rem;
    color:var(--noir);
    font-weight:500;
}
.listing-card-cta{
    padding:7px 14px;
    background:linear-gradient(135deg, var(--cyan) 0%, #1a8a88 100%);
    color:var(--blanc);
    border:none;
    border-radius:8px;
    font-size:.7rem;
    font-weight:700;
    cursor:pointer;
    box-shadow:0 3px 10px rgba(32,156,154,0.28);
    transition:transform .2s ease, box-shadow .2s ease, filter .2s ease;
}
.listing-card-cta:hover{
    transform:translateY(-1px);
    filter:brightness(1.06);
    box-shadow:0 5px 16px rgba(32,156,154,0.4);
}

/* Empty state */
.portal-empty{
    text-align:center;
    padding:40px 16px;
    color:var(--sold);
    grid-column:1/-1;
}
.portal-empty svg{
    width:60px;
    height:60px;
    stroke:var(--beige);
    margin-bottom:16px;
}
.portal-empty-title{
    font-size:1rem;
    font-weight:600;
    color:var(--noir);
    margin-bottom:6px;
}

/* ===== ANIMATION ZOOM ===== */
.map-section.zooming{pointer-events:none}
.map-section.zooming #map{filter:brightness(0.97)}

.zoom-vignette{
    position:absolute;
    inset:0;
    pointer-events:none;
    z-index:999;
    opacity:0;
    background:radial-gradient(ellipse at center, transparent 40%, rgba(32,156,154,0.06) 100%);
    transition:opacity .5s ease;
}
.map-section.zooming .zoom-vignette{opacity:1}

/* ===== PANNEAU LATÉRAL ===== */
.side-panel{
    position:absolute;
    top:0;
    right:0;
    width:420px;
    height:100%;
    background:var(--blanc);
    box-shadow:-8px 0 40px rgba(0,0,0,0.12);
    z-index:2000;
    transform:translateX(100%);
    transition:transform .4s cubic-bezier(0.4, 0, 0.2, 1);
    display:flex;
    flex-direction:column;
    overflow:hidden;
}
.side-panel.open{transform:translateX(0)}
.side-panel.open .panel-content{animation:panelContentIn .5s .1s cubic-bezier(0.4, 0, 0.2, 1) backwards}

/* Bande couleur réseau en haut du panneau */
.panel-network-bar{
    position:absolute;
    top:0;
    left:0;
    right:0;
    height:5px;
    z-index:11;
}
.panel-network-bar.sable{background:linear-gradient(90deg, var(--sable), #c9bc9e)}
.panel-network-bar.framboise{background:linear-gradient(90deg, var(--framboise), #e84a6f)}
.panel-network-bar.lmd{background:linear-gradient(90deg, var(--lmd), #f5a623)}
.panel-network-bar.osmoz{background:linear-gradient(90deg, var(--osmoz), #444)}
.panel-network-bar.natimmo{background:linear-gradient(90deg, var(--natimmo), #a67c4a)}
.panel-network-bar.sold{background:linear-gradient(90deg, var(--sold), #a0a3a8)}

@keyframes panelContentIn{
    0%{opacity:0;transform:translateY(20px)}
    100%{opacity:1;transform:translateY(0)}
}

.panel-image{
    width:100%;
    height:260px;
    background:linear-gradient(135deg, var(--beige) 0%, #d5d0c4 100%);
    position:relative;
    flex-shrink:0;
    overflow:hidden;
}
.panel-image img{
    width:100%;
    height:100%;
    object-fit:cover;
    transition:transform .5s ease;
}
.panel-image:hover img{transform:scale(1.05)}
.panel-image-fallback{
    width:100%;
    height:100%;
    display:flex;
    align-items:center;
    justify-content:center;
    font-size:4rem;
    color:var(--sable);
    opacity:0.4;
}

.panel-image::before{
    content:'';
    position:absolute;
    inset:0;
    background:linear-gradient(to bottom, transparent 50%, rgba(255,255,255,0.95) 100%);
    z-index:1;
    pointer-events:none;
}

.panel-close{
    position:absolute;
    top:14px;
    right:14px;
    width:42px;
    height:42px;
    background:var(--blanc);
    border:none;
    border-radius:50%;
    font-size:1.3rem;
    color:var(--noir);
    cursor:pointer;
    box-shadow:0 2px 12px rgba(0,0,0,0.15);
    z-index:10;
    transition:all .3s cubic-bezier(0.4, 0, 0.2, 1);
    display:flex;
    align-items:center;
    justify-content:center;
}
.panel-close:hover{
    background:var(--framboise);
    color:var(--blanc);
    transform:rotate(90deg) scale(1.05);
}

.panel-badge{
    position:absolute;
    top:14px;
    left:14px;
    padding:8px 16px;
    border-radius:8px;
    font-size:.7rem;
    font-weight:700;
    color:var(--blanc);
    text-transform:uppercase;
    letter-spacing:0.8px;
    z-index:10;
    box-shadow:0 2px 10px rgba(0,0,0,0.15);
}
.panel-badge.sable{background:var(--sable);color:var(--noir)}
.panel-badge.framboise{background:var(--framboise)}
.panel-badge.lmd{background:var(--lmd)}
.panel-badge.osmoz{background:var(--osmoz)}
.panel-badge.natimmo{background:var(--natimmo)}
.panel-badge.sold{background:var(--sold)}

.panel-network-badge{
    position:absolute;
    bottom:14px;
    right:14px;
    padding:6px 12px;
    border-radius:8px;
    font-size:.7rem;
    font-weight:600;
    color:var(--blanc);
    background:rgba(0,0,0,0.6);
    backdrop-filter:blur(8px);
    z-index:10;
}

.panel-content{
    flex:1;
    overflow-y:auto;
    padding:0 24px 24px;
}

.panel-header{
    margin-top:-30px;
    position:relative;
    z-index:2;
    background:var(--blanc);
    border-radius:20px 20px 0 0;
    padding:20px 0 0;
}

.panel-type{
    display:inline-block;
    font-size:.65rem;
    color:var(--cyan);
    margin-bottom:6px;
    text-transform:uppercase;
    letter-spacing:1.5px;
    font-weight:700;
    background:rgba(32,156,154,0.1);
    padding:4px 10px;
    border-radius:4px;
}
.panel-title{
    font-family:'League Spartan',sans-serif;
    font-size:1.25rem;
    font-weight:700;
    color:var(--noir);
    margin-bottom:16px;
    line-height:1.35;
}

.panel-price-section{
    display:flex;
    align-items:baseline;
    gap:12px;
    margin-bottom:4px;
}
.panel-price{
    font-family:'League Spartan',sans-serif;
    font-size:2.2rem;
    font-weight:800;
    line-height:1;
}
.panel-price.sable{color:var(--sable)}
.panel-price.framboise{color:var(--framboise)}
.panel-price.lmd{color:var(--lmd)}
.panel-price.osmoz{color:var(--osmoz)}
.panel-price.natimmo{color:var(--natimmo)}

.panel-price-m2{
    font-size:.8rem;
    color:var(--sold);
    background:var(--beige);
    padding:4px 10px;
    border-radius:6px;
}

.panel-divider{
    height:1px;
    background:linear-gradient(to right, transparent, var(--beige), transparent);
    margin:20px 0;
}

.panel-stats{
    display:grid;
    grid-template-columns:repeat(3,1fr);
    gap:10px;
    margin-bottom:20px;
}
.panel-stat{
    text-align:center;
    padding:16px 8px;
    background:linear-gradient(135deg, var(--beige) 0%, #ebe6da 100%);
    border-radius:12px;
    transition:all .25s ease;
    position:relative;
    overflow:hidden;
}
.panel-stat::before{
    content:'';
    position:absolute;
    top:0;
    left:0;
    right:0;
    height:3px;
    background:var(--cyan);
    transform:scaleX(0);
    transition:transform .3s ease;
}
.panel-stat:hover::before{transform:scaleX(1)}
.panel-stat:hover{transform:translateY(-2px)}
.panel-stat-value{
    font-family:'League Spartan',sans-serif;
    font-size:1.3rem;
    font-weight:700;
    color:var(--noir);
}
.panel-stat-label{
    font-size:.6rem;
    color:var(--sold);
    margin-top:4px;
    text-transform:uppercase;
    letter-spacing:0.8px;
    font-weight:500;
}

.panel-features{
    display:flex;
    flex-wrap:wrap;
    gap:8px;
    margin-bottom:20px;
}
.panel-feature{
    display:flex;
    align-items:center;
    gap:6px;
    padding:8px 12px;
    background:var(--blanc);
    border:1.5px solid var(--beige);
    border-radius:8px;
    font-size:.75rem;
    color:var(--noir);
    transition:all .2s ease;
}
.panel-feature:hover{
    border-color:var(--cyan);
    background:rgba(32,156,154,0.05);
}
.panel-feature svg{
    width:16px;
    height:16px;
    stroke:var(--cyan);
    fill:none;
}

.panel-address{
    display:flex;
    align-items:center;
    gap:12px;
    padding:14px 16px;
    background:linear-gradient(135deg, rgba(32,156,154,0.08) 0%, rgba(32,156,154,0.03) 100%);
    border-radius:12px;
    margin-bottom:12px;
    border:1px solid rgba(32,156,154,0.15);
}
.panel-address-icon{
    width:36px;
    height:36px;
    flex-shrink:0;
    background:var(--cyan);
    border-radius:50%;
    display:flex;
    align-items:center;
    justify-content:center;
}
.panel-address-icon svg{width:18px;height:18px;stroke:var(--blanc);fill:none}
.panel-address-text{
    font-size:.85rem;
    color:var(--noir);
    font-weight:500;
}
.panel-address-sub{
    font-size:.7rem;
    color:var(--sold);
    margin-top:2px;
}

.panel-note{
    display:flex;
    align-items:center;
    justify-content:center;
    gap:6px;
    font-size:.7rem;
    color:var(--sold);
    text-align:center;
    margin-bottom:20px;
    padding:10px;
    background:rgba(142,145,150,0.08);
    border-radius:8px;
}

.panel-cta{
    display:flex;
    align-items:center;
    justify-content:center;
    gap:10px;
    width:100%;
    padding:16px;
    color:var(--blanc);
    text-align:center;
    text-decoration:none;
    font-weight:600;
    font-size:.95rem;
    border-radius:12px;
    margin-bottom:10px;
    transition:all .3s cubic-bezier(0.4, 0, 0.2, 1);
    position:relative;
    overflow:hidden;
}
.panel-cta::before{
    content:'';
    position:absolute;
    top:0;
    left:-100%;
    width:100%;
    height:100%;
    background:linear-gradient(90deg, transparent, rgba(255,255,255,0.2), transparent);
    transition:left .5s ease;
}
.panel-cta:hover::before{left:100%}
.panel-cta.sable{background:linear-gradient(135deg, var(--sable) 0%, #a89a78 100%);color:var(--noir)}
.panel-cta.framboise{background:linear-gradient(135deg, var(--framboise) 0%, #c41850 100%)}
.panel-cta.lmd{background:linear-gradient(135deg, var(--lmd) 0%, #d06f1d 100%)}
.panel-cta.osmoz{background:linear-gradient(135deg, var(--osmoz) 0%, #333 100%)}
.panel-cta.natimmo{background:linear-gradient(135deg, var(--natimmo) 0%, #6d4720 100%)}
.panel-cta:hover{transform:translateY(-2px);box-shadow:0 6px 20px rgba(0,0,0,0.15)}
.panel-cta svg{width:18px;height:18px;fill:currentColor}

.panel-back{
    display:flex;
    align-items:center;
    justify-content:center;
    gap:8px;
    width:100%;
    padding:14px;
    color:var(--sold);
    text-align:center;
    font-size:.85rem;
    border:1.5px solid var(--beige);
    border-radius:12px;
    cursor:pointer;
    background:transparent;
    font-family: 'DM Sans', sans-serif;
    transition:all .25s ease;
}
.panel-back:hover{
    border-color:var(--cyan);
    color:var(--cyan);
    background:rgba(32,156,154,0.05);
}
.panel-back svg{width:16px;height:16px;stroke:currentColor;fill:none}

/* ===== RESPONSIVE - TABLETTE ===== */
@media(max-width:1024px){
    .portal-grid{grid-template-columns:repeat(2, 1fr)}
    .smart-search{max-width:420px}
}

/* ===== RESPONSIVE - MOBILE ===== */
@media(max-width:768px){
    /* Switch vue - en haut au centre */
    .view-switch{
        top:10px;
        padding:3px;
        border-radius:10px;
    }
    .view-btn{
        padding:7px 14px;
        font-size:.75rem;
        gap:5px;
        border-radius:8px;
    }
    .view-btn svg{width:14px;height:14px}
    
    /* Contrôles carte - horizontal à gauche */
    .map-controls{
        top:10px;
        left:10px;
        padding:3px;
        border-radius:10px;
        flex-direction:row;
    }
    .ctrl-btn{width:32px;height:32px;font-size:.95rem;border-radius:8px}
    .ctrl-btn.reset-btn{display:none}
    
    /* Barre de recherche intelligente - sous le switch */
    .smart-search{
        top:52px;
        left:10px;
        right:10px;
        max-width:none;
    }
    .smart-search-box{
        border-radius:14px;
        padding:2px;
    }
    .smart-search-inner{
        border-radius:12px;
    }
    .smart-search-icon{
        left:14px;
        width:18px;
        height:18px;
    }
    .smart-search-input{
        padding:12px 100px 12px 44px;
        font-size:.85rem;
        border-radius:12px;
    }
    .smart-search-placeholder{
        left:44px;
        font-size:.85rem;
    }
    .smart-search-clear{
        right:10px;
        width:24px;
        height:24px;
    }
    .smart-search-tags{
        margin-top:6px;
        gap:5px;
    }
    .smart-search-tag{
        padding:4px 8px;
        font-size:.7rem;
        border-radius:16px;
    }
    .smart-search-tag svg{width:10px;height:10px}
    
    /* Bouton rechercher mobile */
    .smart-search-submit{
        padding:6px 12px;
        font-size:.7rem;
        border-radius:16px;
        right:8px;
    }
    .smart-search-submit svg{width:12px;height:12px}
    
    /* Suggestions mobile */
    .smart-search-suggestions{
        max-height:220px;
        border-radius:10px;
    }
    .suggestion-item{
        padding:10px 12px;
        font-size:.8rem;
        gap:8px;
    }
    .suggestion-icon{
        width:24px;
        height:24px;
        font-size:.7rem;
    }
    .suggestion-count{
        font-size:.65rem;
        padding:2px 8px;
    }
    
    /* Sélecteur style carte - masqué */
    .map-style-selector{display:none}
    
    /* Bouton intercab carte */
    .portal-btn{
        bottom:10px;
        left:10px;
        right:10px;
        transform:none;
        gap:8px;
    }
    .portal-link{
        padding:10px 14px;
        font-size:.7rem;
        border-radius:10px;
        gap:6px;
        flex:1;
        justify-content:center;
    }
    .portal-link svg{width:16px;height:16px}
    .counter{padding:10px 12px;font-size:.7rem;border-radius:10px}
    
    /* Panneau latéral */
    .side-panel{width:100%}
    .panel-network-bar{height:4px}
    .panel-image{height:180px}
    .panel-close{top:8px;right:8px;width:34px;height:34px;font-size:1rem}
    .panel-badge{top:8px;left:8px;padding:5px 10px;font-size:.55rem}
    .panel-network-badge{bottom:8px;right:8px;padding:4px 8px;font-size:.55rem}
    .panel-content{padding:0 14px 16px}
    .panel-header{margin-top:-18px;padding:12px 0 0}
    .panel-type{font-size:.5rem;padding:3px 6px}
    .panel-title{font-size:.9rem;margin-bottom:8px}
    .panel-price-section{gap:6px}
    .panel-price{font-size:1.5rem}
    .panel-price-m2{font-size:.6rem;padding:3px 6px}
    .panel-divider{margin:10px 0}
    .panel-stats{gap:5px}
    .panel-stat{padding:10px 4px;border-radius:8px}
    .panel-stat-value{font-size:.95rem}
    .panel-stat-label{font-size:.45rem}
    .panel-features{display:none}
    .panel-address{padding:10px;border-radius:8px;margin-bottom:8px;gap:8px}
    .panel-address-icon{width:26px;height:26px}
    .panel-address-icon svg{width:12px;height:12px}
    .panel-address-text{font-size:.75rem}
    .panel-address-sub{font-size:.55rem}
    .panel-note{display:none}
    .panel-cta{padding:12px;font-size:.8rem;border-radius:10px}
    .panel-back{padding:10px;font-size:.75rem;border-radius:10px}
    
    /* Vue Portail - plus d'espace pour les tags */
    .portal-header{padding:130px 12px 5px}
    .portal-title{font-size:1.1rem}
    
    .portal-grid{
        grid-template-columns:1fr;
        padding:12px;
        padding-bottom:90px;
        gap:12px;
        max-width:400px;
        margin:0 auto;
    }
    
    /* CTA Portail mobile */
    .portal-cta-fixed{bottom:12px}
    .portal-cta-link{
        padding:12px 20px;
        font-size:.75rem;
        border-radius:30px;
        gap:8px;
    }
    .portal-cta-link svg{width:16px;height:16px}
    
    /* Légende mobile */
    .map-legend{
        bottom:auto;
        top:110px;
        right:10px;
        padding:10px 12px;
        border-radius:10px;
    }
    .legend-title{font-size:.7rem;margin-bottom:8px}
    .legend-marker{width:26px;height:14px}
    .legend-label{font-size:.7rem}
    
    /* Prix mobile */
    .price-bubble{
        padding:6px 10px;
        font-size:10px;
        border-radius:6px;
    }
    .price-bubble::after{
        border-width:6px;
        bottom:-6px;
    }
    
    /* Cartes annonces - compactes et centrées */
    .listing-card{border-radius:10px}
    .listing-card-image{height:130px}
    .listing-card-badges{top:8px;left:8px;gap:4px}
    .listing-card-badge{padding:4px 8px;font-size:.55rem;border-radius:4px}
    .listing-card-network{top:8px;right:8px;padding:4px 8px;font-size:.55rem}
    .listing-card-content{padding:10px}
    .listing-card-price{font-size:1.05rem}
    .listing-card-price-m2{font-size:.65rem;margin-bottom:4px}
    .listing-card-title{font-size:.75rem;margin-bottom:4px}
    .listing-card-location{font-size:.7rem;margin-bottom:6px;gap:4px}
    .listing-card-location svg{width:11px;height:11px}
    .listing-card-features{gap:8px;padding-top:8px}
    .listing-card-feature{font-size:.65rem;gap:3px}
    .listing-card-feature svg{width:11px;height:11px}
    .listing-card-footer{display:none}
    
    .portal-empty{padding:30px 12px}
    .portal-empty svg{width:50px;height:50px;margin-bottom:12px}
    .portal-empty-title{font-size:.9rem}
}

/* ===== RESPONSIVE - PETIT MOBILE ===== */
@media(max-width:380px){
    .view-btn{padding:6px 12px;font-size:.7rem}
    .view-btn svg{width:12px;height:12px}
    .smart-search-input{padding:10px 36px 10px 40px;font-size:.8rem}
    .smart-search-placeholder{font-size:.8rem}
    .smart-search-tag{padding:3px 6px;font-size:.65rem}
    .portal-title{font-size:1rem}
    .listing-card-image{height:110px}
    .listing-card-price{font-size:.95rem}
    .panel-price{font-size:1.3rem}
    .panel-title{font-size:.8rem}
}

/* ============================================================
   ÉCRAN DE CHOIX (landing : 2 vues avec prévisualisation)
   ============================================================ */
.view-chooser{
    position:absolute;
    inset:0;
    z-index:2000;
    display:flex;
    align-items:center;
    justify-content:center;
    padding:104px 24px 32px;
    background:
        radial-gradient(900px 500px at 50% -5%, rgba(32,156,154,0.14), transparent 60%),
        linear-gradient(180deg, #f8f6f0 0%, var(--beige) 100%);
    transition:opacity .4s ease, visibility .4s;
    overflow-y:auto;
}
.view-chooser.hidden{opacity:0; visibility:hidden; pointer-events:none}

.chooser-inner{width:100%; max-width:980px; margin:auto}
.chooser-head{text-align:center; margin-bottom:30px}
.chooser-eyebrow{
    display:inline-block;
    font-family:'DM Sans',sans-serif;
    font-size:.72rem; font-weight:700; letter-spacing:.12em; text-transform:uppercase;
    color:var(--cyan);
    background:rgba(32,156,154,0.1);
    padding:6px 15px; border-radius:50px; margin-bottom:14px;
}
.chooser-title{
    font-family:'League Spartan',sans-serif;
    font-size:clamp(1.6rem, 4.5vw, 2.7rem); font-weight:700; line-height:1.04;
    color:var(--noir); letter-spacing:-0.02em;
}
.chooser-title span{color:var(--cyan)}
.chooser-sub{
    margin-top:10px; font-family:'DM Sans',sans-serif;
    font-size:clamp(.85rem,1.6vw,1rem); color:var(--sold);
}
.chooser-sub strong{color:var(--cyan); font-weight:700}

.chooser-tiles{display:grid; grid-template-columns:1fr 1fr; gap:22px}
.chooser-tile{
    position:relative; display:flex; flex-direction:column;
    background:var(--blanc); border:1px solid rgba(20,30,40,0.06);
    border-radius:20px; overflow:hidden; cursor:pointer; text-align:left;
    box-shadow:0 4px 16px rgba(20,30,40,0.07);
    transition:transform .3s cubic-bezier(0.22,1,0.36,1), box-shadow .3s ease, border-color .3s ease;
    animation:cardIn .5s cubic-bezier(0.22,1,0.36,1) both;
    font-family:'DM Sans',sans-serif;
}
.chooser-tile:nth-child(2){animation-delay:.09s}
.chooser-tile:hover{
    transform:translateY(-6px);
    box-shadow:0 22px 50px rgba(32,156,154,0.2);
    border-color:rgba(32,156,154,0.3);
}
.chooser-tile-preview{position:relative; height:240px; overflow:hidden; background:var(--beige)}
.chooser-minimap{position:absolute; inset:0}
.chooser-minimap .leaflet-control-container{display:none}
.chooser-mosaic{position:absolute; inset:0; display:grid; grid-template-columns:repeat(3,1fr); grid-template-rows:1fr 1fr; gap:3px}
.chooser-mosaic img, .chooser-mosaic .m-empty{width:100%; height:100%; object-fit:cover; display:block}
.chooser-mosaic .m-empty{background:linear-gradient(135deg,var(--beige),#d5d0c4)}
.chooser-tile-shine{position:absolute; inset:0; pointer-events:none; background:linear-gradient(to top, rgba(20,30,40,0.22), transparent 45%)}
.chooser-tile-foot{display:flex; align-items:center; gap:14px; padding:18px 20px}
.chooser-tile-ico{
    flex-shrink:0; width:46px; height:46px; border-radius:13px;
    display:flex; align-items:center; justify-content:center;
    background:rgba(32,156,154,0.1); color:var(--cyan);
}
.chooser-tile-ico svg{width:24px; height:24px}
.chooser-tile-txt{display:flex; flex-direction:column; flex:1; min-width:0}
.chooser-tile-name{font-family:'League Spartan',sans-serif; font-size:1.3rem; font-weight:700; color:var(--noir)}
.chooser-tile-desc{font-size:.82rem; color:var(--sold); line-height:1.3}
.chooser-tile-arrow{flex-shrink:0; width:26px; height:26px; color:var(--cyan); transition:transform .3s ease}
.chooser-tile:hover .chooser-tile-arrow{transform:translateX(5px)}

/* Bouton réouverture de l'écran de choix */
.chooser-reopen{
    position:absolute; bottom:24px; left:20px; z-index:1000;
    display:none; align-items:center; gap:7px;
    padding:9px 15px; border:none; border-radius:50px; cursor:pointer;
    background:var(--blanc); color:var(--noir);
    font-family:'DM Sans',sans-serif; font-size:.8rem; font-weight:600;
    box-shadow:0 4px 16px rgba(20,30,40,0.14);
    transition:transform .2s ease, box-shadow .2s ease;
}
.chooser-reopen svg{width:16px; height:16px; color:var(--cyan)}
.chooser-reopen.show{display:inline-flex}
.chooser-reopen:hover{transform:translateY(-2px); box-shadow:0 8px 22px rgba(20,30,40,0.2)}

@media (max-width:680px){
    .chooser-tiles{grid-template-columns:1fr; gap:16px}
    .chooser-tile-preview{height:172px}
    .view-chooser{padding:92px 16px 24px; align-items:flex-start}
    .chooser-reopen span{display:none}
    .chooser-reopen{padding:10px; bottom:18px; left:14px}
}
@media (prefers-reduced-motion: reduce){
    .chooser-tile{animation:none}
}

/* ============================================================
   CARTE — scroll fluide + design panneaux « glass » (2026-06-30)
   ============================================================ */
html { scroll-behavior: smooth; }

/* Panneaux flottants : verre dépoli cohérent avec la navbar */
.map-controls,
.map-legend,
.counter {
  background: rgba(255,255,255,0.80) !important;
  -webkit-backdrop-filter: blur(16px) saturate(170%);
  backdrop-filter: blur(16px) saturate(170%);
  border: 1px solid rgba(255,255,255,0.65);
  box-shadow: 0 10px 34px rgba(20,30,40,0.14) !important;
}
.ctrl-btn { background: transparent !important; }
.ctrl-btn:hover { background: rgba(32,156,154,0.12) !important; color: var(--cyan); }
.ctrl-btn.reset-btn:hover { background: var(--cyan) !important; color: #fff; }

/* Marqueurs clusters plus premium (dégradé + halo intérieur) */
.cluster-bubble {
  background: radial-gradient(circle at 35% 28%, #34c3c0 0%, var(--cyan) 48%, #157f7d 100%) !important;
  box-shadow: 0 6px 20px rgba(32,156,154,0.45), inset 0 0 0 1px rgba(255,255,255,0.18) !important;
}

/* ── Portail : sélecteur de tri ── */
.portal-sort-wrap{
    display:inline-flex; align-items:center; gap:8px; margin-top:12px;
    font-family:'DM Sans',sans-serif;
}
.portal-sort-label{ font-size:.82rem; color:var(--sold); font-weight:600; }
.portal-sort{
    appearance:none; -webkit-appearance:none;
    padding:8px 34px 8px 14px; border-radius:50px; cursor:pointer;
    border:1px solid rgba(20,30,40,0.12); background:var(--blanc);
    color:var(--noir); font-size:.82rem; font-weight:600; font-family:inherit;
    box-shadow:0 2px 8px rgba(20,30,40,0.06);
    background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 24 24' fill='none' stroke='%23209c9a' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'><path d='M6 9l6 6 6-6'/></svg>");
    background-repeat:no-repeat; background-position:right 12px center;
    transition:border-color .2s ease, box-shadow .2s ease;
}
.portal-sort:hover{ border-color:rgba(32,156,154,0.4); }
.portal-sort:focus{ outline:none; border-color:var(--cyan); box-shadow:0 0 0 3px rgba(32,156,154,0.15); }

/* ── Indice tactile : pincer à 2 doigts pour déplacer/zoomer (carte) ── */
.map-touch-hint{
    position:absolute; top:50%; left:50%; transform:translate(-50%,-50%);
    z-index:600; display:none; align-items:center; gap:8px;
    padding:11px 18px; border-radius:50px;
    background:rgba(26,26,26,0.82); color:#fff;
    -webkit-backdrop-filter:blur(8px); backdrop-filter:blur(8px);
    font-family:'DM Sans',sans-serif; font-size:.8rem; font-weight:600;
    box-shadow:0 8px 28px rgba(0,0,0,0.3);
    pointer-events:none; white-space:nowrap;
    opacity:0; transition:opacity .5s ease;
}
.map-touch-hint.show{ display:inline-flex; opacity:1; }
.map-touch-hint svg{ width:17px; height:17px; flex-shrink:0; }
@media (max-width:480px){
    .map-touch-hint{ font-size:.72rem; white-space:normal; max-width:78vw; text-align:center; justify-content:center; }
}

/* ── Adaptation très petits écrans / faibles hauteurs ── */
@media (max-width: 380px){
  .chooser-title{ font-size:1.4rem; }
  .chooser-tile-name{ font-size:1.1rem; }
  .chooser-tile-desc{ font-size:.74rem; }
  .portal-sort{ font-size:.75rem; padding:7px 30px 7px 12px; }
  .portal-title{ font-size:1.2rem; }
}
@media (max-height: 560px){
  .view-chooser{ align-items:flex-start; }
  .chooser-head{ margin-bottom:16px; }
}

/* ============================================================
   INTERCAB PLEIN ÉCRAN — la carte OU le portail occupe tout
   l'espace sous la navbar (plus de trust strip ni de bande).
   ============================================================ */
.fede-trust-strip{ display:none !important; }
.app{ height:calc(100vh - 72px); height:calc(100dvh - 72px); }
@media (max-width:1200px){ .app{ height:calc(100vh - 64px); height:calc(100dvh - 64px); } }
@media (max-width:950px){ .app{ height:calc(100vh - 56px); height:calc(100dvh - 56px); } }
@media (max-width:600px){ .app{ height:calc(100vh - 50px); height:calc(100dvh - 50px); } }
@media (max-width:400px){ .app{ height:calc(100vh - 46px); height:calc(100dvh - 46px); } }

/* Plus de trust strip → on réduit les décalages hauts internes
   (la navbar est déjà dégagée par la position de .app) */
.view-chooser{ padding-top:44px !important; }
.portal-header{ padding-top:92px !important; }   /* dégage la barre de recherche flottante */
@media (max-width:680px){
  .view-chooser{ padding-top:34px !important; }
  .portal-header{ padding-top:86px !important; }
}

/* ════════════════════════════════════════════════════════════════
   ACCENT CORAIL 2026-06-30 — boutons d'ACTION (recherche, portail, annonce)
   Le teal #209C9A reste l'identité carte/MLS (marqueurs, clusters, contrôles,
   badges de statut). Corail = action que l'utilisateur clique.
   ════════════════════════════════════════════════════════════════ */
.smart-search-submit,
.portal-link,
.portal-cta-link,
.listing-card-cta {
  background-image: linear-gradient(135deg, #ff8a6b 0%, #ff6f5e 45%, #f2553f 100%) !important;
  color: #1A1A1A !important;
}
.smart-search-submit { box-shadow: 0 4px 14px rgba(242,85,63,.30) !important; }
.portal-cta-link:hover,
.listing-card-cta:hover { box-shadow: 0 8px 22px rgba(242,85,63,.34) !important; }

.chooser-sub strong { color: #ff6f5e !important; }
