/* =========================================================
   ZOOMBROC — PAGE À PROXIMITÉ
   ========================================================= */

/* =========================================================
   BASE
   ========================================================= */

.zb-proximity,
.zb-proximity *,
.zb-proximity *::before,
.zb-proximity *::after{
    box-sizing:border-box;
}

.zb-proximity{
    width:100%;
    min-height:100vh;
    padding-bottom:70px;
    background:var(--zb-bg,#f4f7fb);
    color:var(--zb-text,#10203c);
}

.zb-proximity button,
.zb-proximity a{
    -webkit-tap-highlight-color:transparent;
}

.zb-proximity button{
    font:inherit;
}


/* =========================================================
   HERO
   ========================================================= */

.zb-proximity-hero{
    position:relative;
    overflow:hidden;
    color:#fff;
    background:
        radial-gradient(
            circle at 82% 20%,
            rgba(22,165,199,.28),
            transparent 27%
        ),
        radial-gradient(
            circle at 12% 95%,
            rgba(18,166,107,.16),
            transparent 27%
        ),
        linear-gradient(
            135deg,
            var(--zb-navy,#08152f),
            var(--zb-navy2,#102a50) 58%,
            #174e78
        );
}

.zb-proximity-hero::before{
    content:"";
    position:absolute;
    width:500px;
    height:500px;
    right:-190px;
    top:-300px;
    border-radius:50%;
    background:
        radial-gradient(
            circle,
            rgba(255,255,255,.10),
            transparent 68%
        );
}

.zb-proximity-hero::after{
    content:"";
    position:absolute;
    width:280px;
    height:280px;
    left:-170px;
    bottom:-200px;
    border-radius:50%;
    border:1px solid rgba(255,255,255,.08);
}

.zb-proximity-hero-inner{
    position:relative;
    z-index:2;
    width:min(1160px,calc(100% - 64px));
    min-height:360px;
    margin:auto;
    display:flex;
    flex-direction:column;
    justify-content:center;
    padding:55px 0;
}

.zb-proximity-badge{
    display:inline-flex;
    align-items:center;
    align-self:flex-start;
    margin-bottom:18px;
    padding:8px 13px;
    border:1px solid rgba(255,255,255,.18);
    border-radius:999px;
    background:rgba(255,255,255,.08);
    color:rgba(255,255,255,.88);
    font-size:11px;
    font-weight:850;
    letter-spacing:.04em;
}

.zb-proximity-hero h1{
    max-width:760px;
    margin:0 0 18px;
    color:#fff;
    font-size:clamp(44px,5.5vw,68px);
    line-height:.98;
    letter-spacing:-.055em;
    font-weight:950;
}

.zb-proximity-hero h1 span{
    color:var(--zb-yellow,#ffd34e);
}

.zb-proximity-hero p{
    max-width:650px;
    margin:0;
    color:rgba(255,255,255,.76);
    font-size:16px;
    line-height:1.7;
}


/* =========================================================
   BLOC RECHERCHE
   ========================================================= */

.zb-proximity-search{
    position:relative;
    z-index:10;
    width:min(1160px,calc(100% - 64px));
    margin:-32px auto 0;
}

.zb-proximity-search-card{
    padding:20px;
    border:1px solid rgba(8,21,47,.07);
    border-radius:24px;
    background:#fff;
    box-shadow:
        0 24px 60px rgba(8,21,47,.12);
}


/* =========================================================
   LOCALISATION
   ========================================================= */

.zb-proximity-location{
    display:flex;
    align-items:center;
    justify-content:space-between;
    gap:20px;
    padding:4px;
}

.zb-proximity-location-icon{
    flex:0 0 54px;
    width:54px;
    height:54px;
    display:grid;
    place-items:center;
    border-radius:17px;
    background:#edf7fb;
    font-size:26px;
}

.zb-proximity-location-content{
    flex:1;
    min-width:0;
}

.zb-proximity-location-content strong{
    display:block;
    margin-bottom:4px;
    color:var(--zb-navy,#08152f);
    font-size:16px;
    font-weight:950;
}

.zb-proximity-location-content span{
    display:block;
    color:var(--zb-muted,#718097);
    font-size:13px;
    line-height:1.5;
}

.zb-proximity-locate{
    flex:0 0 auto;
    min-height:45px;
    padding:0 18px;
    border:0;
    border-radius:13px;
    background:
        linear-gradient(
            135deg,
            var(--zb-blue,#157ac5),
            var(--zb-cyan,#16a5c7)
        );
    color:#fff;
    font-size:13px;
    font-weight:900;
    cursor:pointer;
    box-shadow:
        0 8px 20px rgba(22,165,199,.20);
    transition:
        transform .18s ease,
        box-shadow .18s ease,
        opacity .18s ease;
}

.zb-proximity-locate:hover{
    transform:translateY(-2px);
    box-shadow:
        0 12px 26px rgba(22,165,199,.27);
}

.zb-proximity-locate:disabled{
    opacity:.65;
    cursor:wait;
    transform:none;
}


/* =========================================================
   FILTRES
   ========================================================= */

.zb-proximity-filters{
    margin-top:18px;
    padding-top:18px;
    border-top:1px solid var(--zb-line,#e2e9f2);
}

.zb-proximity-filter-group + .zb-proximity-filter-group{
    margin-top:17px;
    padding-top:17px;
    border-top:1px solid var(--zb-line,#e2e9f2);
}

.zb-proximity-filter-label{
    display:block;
    margin-bottom:10px;
    color:var(--zb-navy,#08152f);
    font-size:11px;
    font-weight:950;
}

.zb-proximity-pills{
    display:flex;
    flex-wrap:wrap;
    gap:8px;
}

.zb-proximity-pill{
    min-height:35px;
    padding:7px 13px;
    border:1px solid var(--zb-line,#e2e9f2);
    border-radius:999px;
    background:#fff;
    color:var(--zb-navy,#08152f);
    font-size:11px;
    font-weight:800;
    cursor:pointer;
    transition:
        background .18s ease,
        border-color .18s ease,
        color .18s ease,
        transform .18s ease;
}

.zb-proximity-pill:hover{
    transform:translateY(-1px);
    border-color:#b9c9d8;
}

.zb-proximity-pill.active{
    border-color:var(--zb-blue,#157ac5);
    background:var(--zb-blue,#157ac5);
    color:#fff;
}


/* =========================================================
   CONTENU
   ========================================================= */

.zb-proximity-content{
    width:min(1160px,calc(100% - 64px));
    margin:25px auto 0;
    display:grid;
    grid-template-columns:minmax(0,1fr) minmax(420px,.95fr);
    gap:20px;
    align-items:start;
}

.zb-proximity-results{
    min-width:0;
}

.zb-proximity-results-head{
    display:flex;
    align-items:flex-end;
    justify-content:space-between;
    gap:15px;
    margin-bottom:15px;
}

.zb-proximity-results-head h2{
    margin:0 0 6px;
    color:var(--zb-navy,#08152f);
    font-size:26px;
    line-height:1.05;
    letter-spacing:-.04em;
    font-weight:950;
}

.zb-proximity-results-head p{
    margin:0;
    color:var(--zb-muted,#718097);
    font-size:12px;
    line-height:1.5;
}

.zb-proximity-count{
    flex:0 0 auto;
    min-width:36px;
    height:32px;
    display:flex;
    align-items:center;
    justify-content:center;
    padding:0 10px;
    border-radius:999px;
    background:#fff;
    border:1px solid var(--zb-line,#e2e9f2);
    color:var(--zb-blue,#157ac5);
    font-size:11px;
    font-weight:900;
}


/* =========================================================
   LISTE ÉVÉNEMENTS
   ========================================================= */

.zb-proximity-events{
    display:flex;
    flex-direction:column;
    gap:12px;
}

.zb-proximity-event{
    display:flex;
    min-width:0;
    overflow:hidden;
    border:1px solid var(--zb-line,#e2e9f2);
    border-radius:19px;
    background:#fff;
    box-shadow:
        0 7px 20px rgba(8,21,47,.055);
    transition:
        transform .18s ease,
        box-shadow .18s ease;
}

.zb-proximity-event:hover{
    transform:translateY(-3px);
    box-shadow:
        0 16px 32px rgba(8,21,47,.10);
}

.zb-proximity-event-image{
    flex:0 0 135px;
    width:135px;
    min-height:165px;
    overflow:hidden;
    background:#edf3f7;
}

.zb-proximity-event-image img{
    width:100%;
    height:100%;
    min-height:165px;
    display:block;
    object-fit:cover;
}

.zb-proximity-event-image-placeholder{
    display:flex;
    align-items:center;
    justify-content:center;
    font-size:34px;
    background:
        linear-gradient(
            135deg,
            #eef7fb,
            #f1faf6
        );
}

.zb-proximity-event-body{
    min-width:0;
    flex:1;
    padding:16px 17px;
}

.zb-proximity-event-meta{
    display:flex;
    align-items:center;
    justify-content:space-between;
    gap:10px;
    margin-bottom:8px;
}

.zb-proximity-event-meta span:first-child{
    overflow:hidden;
    color:var(--zb-blue,#157ac5);
    font-size:9px;
    font-weight:900;
    text-transform:uppercase;
    white-space:nowrap;
    text-overflow:ellipsis;
}

.zb-proximity-event-meta span:last-child{
    flex:0 0 auto;
    color:var(--zb-green,#12a66b);
    font-size:10px;
    font-weight:900;
}

.zb-proximity-event h3{
    display:-webkit-box;
    overflow:hidden;
    margin:0 0 10px;
    color:var(--zb-navy,#08152f);
    font-size:15px;
    line-height:1.3;
    font-weight:900;
    -webkit-line-clamp:2;
    -webkit-box-orient:vertical;
}

.zb-proximity-event-info{
    display:flex;
    flex-direction:column;
    gap:5px;
    margin-bottom:12px;
    color:var(--zb-muted,#718097);
    font-size:10px;
    line-height:1.4;
}

.zb-proximity-event-link{
    display:inline-flex;
    align-items:center;
    color:var(--zb-blue,#157ac5);
    font-size:10px;
    font-weight:900;
    text-decoration:none;
}

.zb-proximity-event-link:hover{
    text-decoration:underline;
}


/* =========================================================
   ÉTAT VIDE / ERREUR
   ========================================================= */

.zb-proximity-empty{
    min-height:270px;
    display:flex;
    flex-direction:column;
    align-items:center;
    justify-content:center;
    padding:35px 25px;
    border:1px dashed #d3dfe8;
    border-radius:20px;
    background:#f9fbfd;
    text-align:center;
}

.zb-proximity-empty-icon{
    width:60px;
    height:60px;
    display:grid;
    place-items:center;
    margin-bottom:15px;
    border-radius:18px;
    background:#edf7fb;
    font-size:28px;
}

.zb-proximity-empty h3{
    margin:0 0 8px;
    color:var(--zb-navy,#08152f);
    font-size:17px;
    font-weight:950;
}

.zb-proximity-empty p{
    max-width:430px;
    margin:0;
    color:var(--zb-muted,#718097);
    font-size:12px;
    line-height:1.65;
}


/* =========================================================
   CARTE
   ========================================================= */

.zb-proximity-map-wrapper{
    position:sticky;
    top:20px;
    min-width:0;
}

.zb-proximity-map{
    width:100%;
    min-height:570px;
    overflow:hidden;
    border:1px solid var(--zb-line,#e2e9f2);
    border-radius:22px;
    background:#eaf1f5;
    box-shadow:
        0 12px 30px rgba(8,21,47,.08);
}

.zb-proximity-map .leaflet-control{
    font-size:11px;
}

.zb-proximity-map .leaflet-control-zoom a{
    color:var(--zb-navy,#08152f);
}

.zb-proximity-map .leaflet-popup-content{
    margin:12px 14px;
    font-size:12px;
}

.zb-proximity-map .leaflet-popup-content-wrapper{
    border-radius:13px;
}


/* =========================================================
   POPUP LEAFLET
   ========================================================= */

.zb-map-popup{
    min-width:170px;
    display:flex;
    flex-direction:column;
    gap:6px;
}

.zb-map-popup strong{
    display:block;
    color:var(--zb-navy,#08152f);
    font-size:13px;
    line-height:1.35;
}

.zb-map-popup span{
    display:block;
    color:var(--zb-muted,#718097);
    font-size:10px;
    line-height:1.4;
}

.zb-map-popup a{
    display:inline-block;
    margin-top:4px;
    color:var(--zb-blue,#157ac5);
    font-size:10px;
    font-weight:900;
    text-decoration:none;
}

.zb-map-popup a:hover{
    text-decoration:underline;
}


/* =========================================================
   LOADING CARTE
   ========================================================= */

.zb-proximity-map-loading{
    position:absolute;
    z-index:1000;
    top:15px;
    left:50%;
    transform:translateX(-50%);
    display:flex;
    align-items:center;
    gap:8px;
    padding:9px 13px;
    border:1px solid rgba(8,21,47,.08);
    border-radius:999px;
    background:rgba(255,255,255,.95);
    color:var(--zb-navy,#08152f);
    box-shadow:
        0 8px 22px rgba(8,21,47,.12);
    font-size:10px;
    font-weight:850;
    white-space:nowrap;
}

.zb-proximity-map-wrapper{
    position:sticky;
}

.zb-proximity-spinner{
    width:14px;
    height:14px;
    display:block;
    border:2px solid #d8e5ed;
    border-top-color:var(--zb-blue,#157ac5);
    border-radius:50%;
    animation:zbProximitySpin .75s linear infinite;
}

@keyframes zbProximitySpin{
    to{
        transform:rotate(360deg);
    }
}


/* =========================================================
   AVANT LOCALISATION
   ========================================================= */

.zb-proximity-before{
    width:min(1160px,calc(100% - 64px));
    margin:25px auto 0;
    padding:35px 25px;
    border:1px solid var(--zb-line,#e2e9f2);
    border-radius:23px;
    background:
        linear-gradient(
            135deg,
            #f1fbfd,
            #f3fbf7
        );
    text-align:center;
}

.zb-proximity-before-inner{
    max-width:650px;
    margin:auto;
}

.zb-proximity-before-icon{
    width:64px;
    height:64px;
    display:grid;
    place-items:center;
    margin:0 auto 15px;
    border-radius:20px;
    background:#fff;
    box-shadow:
        0 8px 22px rgba(8,21,47,.07);
    font-size:29px;
}

.zb-proximity-before h2{
    margin:0 0 9px;
    color:var(--zb-navy,#08152f);
    font-size:25px;
    line-height:1.1;
    letter-spacing:-.035em;
    font-weight:950;
}

.zb-proximity-before p{
    max-width:540px;
    margin:0 auto 18px;
    color:var(--zb-muted,#718097);
    font-size:13px;
    line-height:1.65;
}

.zb-btn-primary{
    min-height:44px;
    padding:0 18px;
    border:0;
    border-radius:13px;
    background:
        linear-gradient(
            135deg,
            var(--zb-blue,#157ac5),
            var(--zb-cyan,#16a5c7)
        );
    color:#fff;
    font-size:12px;
    font-weight:900;
    cursor:pointer;
    box-shadow:
        0 8px 20px rgba(22,165,199,.20);
    transition:
        transform .18s ease,
        box-shadow .18s ease;
}

.zb-btn-primary:hover{
    transform:translateY(-2px);
    box-shadow:
        0 12px 25px rgba(22,165,199,.27);
}


/* =========================================================
   ÉTAT HIDDEN
   ========================================================= */

.zb-proximity [hidden]{
    display:none !important;
}


/* =========================================================
   TABLETTE
   ========================================================= */

@media (max-width:1050px){

    .zb-proximity-hero-inner{
        width:min(100% - 48px,900px);
        min-height:320px;
    }

    .zb-proximity-search{
        width:min(100% - 48px,900px);
    }

    .zb-proximity-content{
        width:min(100% - 48px,900px);
        grid-template-columns:1fr;
    }

    .zb-proximity-map-wrapper{
        position:relative;
        top:auto;
    }

    .zb-proximity-map{
        min-height:460px;
    }

    .zb-proximity-before{
        width:min(100% - 48px,900px);
    }

}


/* =========================================================
   MOBILE
   ========================================================= */

@media (max-width:700px){

    .zb-proximity{
        padding-bottom:45px;
    }

    .zb-proximity-hero-inner{
        width:calc(100% - 32px);
        min-height:300px;
        padding:40px 0;
    }

    .zb-proximity-badge{
        font-size:10px;
    }

    .zb-proximity-hero h1{
        font-size:40px;
    }

    .zb-proximity-hero p{
        font-size:14px;
        line-height:1.6;
    }


    .zb-proximity-search{
        width:calc(100% - 24px);
        margin-top:-25px;
    }

    .zb-proximity-search-card{
        padding:16px;
        border-radius:20px;
    }


    .zb-proximity-location{
        align-items:stretch;
        flex-direction:column;
        gap:13px;
    }

    .zb-proximity-location-icon{
        flex-basis:48px;
        width:48px;
        height:48px;
    }

    .zb-proximity-location-content strong{
        font-size:15px;
    }

    .zb-proximity-location-content span{
        font-size:12px;
    }

    .zb-proximity-locate{
        width:100%;
    }


    .zb-proximity-pills{
        gap:6px;
    }

    .zb-proximity-pill{
        min-height:34px;
        padding:7px 10px;
        font-size:10px;
    }


    .zb-proximity-content{
        width:calc(100% - 24px);
        margin-top:20px;
    }

    .zb-proximity-results-head{
        align-items:flex-start;
        gap:10px;
    }

    .zb-proximity-results-head h2{
        font-size:22px;
    }

    .zb-proximity-results-head p{
        font-size:11px;
    }


    .zb-proximity-event{
        display:block;
    }

    .zb-proximity-event-image{
        width:100%;
        height:170px;
        min-height:170px;
    }

    .zb-proximity-event-image img{
        min-height:170px;
    }

    .zb-proximity-event-body{
        padding:15px;
    }


    .zb-proximity-map{
        min-height:390px;
        border-radius:18px;
    }


    .zb-proximity-before{
        width:calc(100% - 24px);
        padding:28px 18px;
    }

    .zb-proximity-before h2{
        font-size:22px;
    }

    .zb-proximity-before p{
        font-size:12px;
    }

}


/* =========================================================
   PETITS MOBILES
   ========================================================= */

@media (max-width:420px){

    .zb-proximity-hero h1{
        font-size:35px;
    }

    .zb-proximity-search-card{
        padding:14px;
    }

    .zb-proximity-map{
        min-height:350px;
    }

    .zb-proximity-event-image{
        height:150px;
        min-height:150px;
    }

    .zb-proximity-event-image img{
        min-height:150px;
    }

}


/* =========================================================
   ACCESSIBILITÉ
   ========================================================= */

@media (prefers-reduced-motion:reduce){

    .zb-proximity *,
    .zb-proximity *::before,
    .zb-proximity *::after{
        scroll-behavior:auto !important;
        animation:none !important;
        transition:none !important;
    }

}