/* ESCAPAD · shared chrome for sub-pages (nav, footer, banner, modal, buttons, tokens) */

/* font-display:block (retour équipe 20/07) : le swap affichait le logo et
   les titres une fraction de seconde dans la police de repli (flash visible
   au chargement). Avec Ultra/Black/Medium préchargées sur toutes les pages,
   la fenêtre d'invisibilité de block est imperceptible. */
@font-face { font-family: 'Umiak'; src: url('fonts/Umiak-Light.woff2') format('woff2'), url('fonts/Umiak-Light.woff') format('woff'); font-weight: 300; font-display: block; }
@font-face { font-family: 'Umiak'; src: url('fonts/Umiak-Normal.woff2') format('woff2'), url('fonts/Umiak-Normal.woff') format('woff'); font-weight: 400; font-display: block; }
@font-face { font-family: 'Umiak'; src: url('fonts/Umiak-Medium.woff2') format('woff2'), url('fonts/Umiak-Medium.woff') format('woff'); font-weight: 500; font-display: block; }
@font-face { font-family: 'Umiak'; src: url('fonts/Umiak-Bold.woff2') format('woff2'), url('fonts/Umiak-Bold.woff') format('woff'); font-weight: 700; font-display: block; }
@font-face { font-family: 'Umiak'; src: url('fonts/Umiak-Black.woff2') format('woff2'), url('fonts/Umiak-Black.woff') format('woff'); font-weight: 800; font-display: block; }
@font-face { font-family: 'Umiak'; src: url('fonts/Umiak-Ultra.woff2') format('woff2'), url('fonts/Umiak-Ultra.woff') format('woff'); font-weight: 900; font-display: block; }

/* ===== A11Y: keyboard skip link, focus states, screen-reader helpers ===== */

/* Skip-to-content, invisible until focused. Lets keyboard users jump
   past the nav directly to the page content. Inject in every page just
   after <body> as: <a class="skip-link" href="#main">Aller au contenu</a> */
.skip-link {
  position:absolute; top:-100px; left:8px; z-index:9999;
  padding:10px 18px;
  background:var(--midnight); color:var(--yellow);
  font-size:13px; font-weight:800; letter-spacing:0.06em; text-transform:uppercase;
  text-decoration:none; border:2px solid var(--yellow);
  transition:top 0.2s;
}
.skip-link:focus, .skip-link:focus-visible {
  top:8px; outline:none;
}

/* Visible focus ring on all interactive elements. Tailored to the brand
   (yellow ring on dark surfaces, midnight ring on light), and explicitly
   uses :focus-visible so mouse users don't see it after a click. */
:focus { outline:none; }
a:focus-visible,
button:focus-visible,
input:focus-visible,
select:focus-visible,
textarea:focus-visible,
[tabindex]:focus-visible,
.menu-tab:focus-visible,
.club-pill:focus-visible {
  outline:3px solid var(--midnight);
  outline-offset:2px;
}
/* On dark sections invert the ring colour for visibility */
.banner :focus-visible,
.footer :focus-visible,
.evp-hero.dark :focus-visible,
.cta-strip.dark :focus-visible,
.dash-hero :focus-visible,
.formats :focus-visible,
.bar :focus-visible,
.price-teaser :focus-visible,
.compare :focus-visible,
.hist-hero :focus-visible {
  outline-color:var(--yellow);
}

/* Visually hidden but accessible to screen readers */
.sr-only {
  position:absolute; width:1px; height:1px; padding:0; margin:-1px;
  overflow:hidden; clip:rect(0, 0, 0, 0); white-space:nowrap; border:0;
}

/* Honor user motion preferences for decorative animations */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration:0.01ms !important;
    animation-iteration-count:1 !important;
    transition-duration:0.01ms !important;
    scroll-behavior:auto !important;
  }
}

:root {
  /* Charte de marque (RGB officiels) · jaune pâle, pêche, vert très pâle, bleu
     presque noir + couleurs du Café Central (terracotta, vert perroquet). */
  --yellow:#fff4c9;      /* jaune pâle  rgb(255,244,201) */
  --pink:#ffc09e;        /* pêche       rgb(255,192,158) */
  --green:#dbe6d5;       /* vert pâle   rgb(219,230,213) */
  --midnight:#0d0b22;    /* bleu noir   rgb(13,11,34)    */
  --terracotta:#ba4e2e;  /* Café Central rgb(186,78,46)  */
  --parrot:#2c6538;      /* vert perroquet rgb(44,101,56)*/
  --peach:#ffc09e;       /* alias lisible de --pink */
  --cream:#f8f3e4; --paper:#fff;
  --tight:-0.045em; --tighter:-0.055em;
  --banner-h:36px; --nav-h:64px;
}
* { box-sizing:border-box; margin:0; padding:0; }
html { scroll-behavior:smooth; overflow-x:clip; }
/* overflow-x:clip empêche tout défilement horizontal parasite (menus
   off-canvas, débordements résiduels) SANS casser position:sticky
   (contrairement à overflow:hidden). */
h1, h2 { overflow-wrap:break-word; }
/* « ESCAPAD » (et tout mot ainsi balisé) ne doit jamais être coupé au milieu :
   il passe à la ligne entier ou reste sur place. */
.nb { white-space:nowrap; }
body {
  font-family:'Umiak',-apple-system,BlinkMacSystemFont,sans-serif;
  font-weight:400; letter-spacing:var(--tight);
  color:var(--midnight); background:var(--yellow);
  -webkit-font-smoothing:antialiased; padding-top:calc(var(--banner-h) + var(--nav-h));
}
a { color:inherit; text-decoration:none; }
button { font:inherit; letter-spacing:inherit; color:inherit; background:none; border:none; cursor:pointer; }
ul { list-style:none; }
img { display:block; max-width:100%; }

/* ===== BANNER ===== */
.banner {
  position:fixed; top:0; left:0; right:0; z-index:101; height:var(--banner-h);
  background:var(--midnight); color:var(--yellow);
  display:flex; align-items:center; justify-content:center; gap:8px;
  font-size:12px; font-weight:500; letter-spacing:0.02em;
  white-space:nowrap; overflow:hidden; padding:0 16px;
}
.banner-short { display:none; }
@media (max-width:780px) { .banner-full { display:none; } .banner-short { display:inline; } }
.banner b { font-weight:700; }
.banner .pin { width:5px; height:5px; border-radius:50%; background:var(--yellow); animation:pulse 1.6s ease-in-out infinite; }
@keyframes pulse { 0%,100% { opacity:1; transform:scale(1); } 50% { opacity:0.5; transform:scale(1.5); } }

/* ===== NAV ===== */
.nav {
  position:fixed; top:var(--banner-h); left:0; right:0; z-index:100;
  height:var(--nav-h); padding:0 32px;
  background:var(--yellow); border-bottom:1.5px solid var(--midnight);
  display:flex; align-items:center; justify-content:space-between;
}
.nav-left, .nav-right { display:flex; align-items:center; gap:8px; }
.nav-logo { font-weight:800; font-size:22px; letter-spacing:-0.04em; padding:0 16px 0 0; }
.nav-links { display:flex; align-items:center; gap:4px; height:var(--nav-h); }
.nav-item {
  position:relative; height:100%; display:flex; align-items:center;
  padding:0 14px; font-size:14px; font-weight:500; cursor:pointer;
}
.nav-item:hover { background:var(--cream); }
.nav-item.active { font-weight:800; }
.nav-item.active::before { content:''; position:absolute; left:14px; right:14px; bottom:0; height:3px; background:var(--midnight); }
.nav-item.has-mega::after { content:'›'; margin-left:6px; transform:rotate(90deg); display:inline-block; font-size:11px; opacity:0.5; }

/* Mega menu, content panel anchored under each nav-item; the cream stripe is a full-width
   sibling drawn separately, so it covers nav width without breaking horizontal alignment. */
.mega {
  position:absolute; top:100%; left:0;
  padding:32px 36px; display:none; z-index:99;
  background:var(--cream);
  border:1.5px solid var(--midnight);
  border-top:none;
  box-shadow:6px 6px 0 rgba(14,11,35,0.08);
  min-width:560px;
}
.nav-item:hover .mega, .mega:hover { display:grid; }
/* Right-aligned panels for items near the right of the nav (so they don't go off-screen) */
.nav-item.has-mega.align-right .mega { left:auto; right:0; }
.mega-clubs { grid-template-columns: 1fr 1fr 1fr; gap:24px; max-width:1200px; margin:0 auto; }
.mega-sport { grid-template-columns: 1fr 1fr 1.2fr; gap:32px; max-width:1200px; margin:0 auto; }
.mega-academy { grid-template-columns: 1fr 1fr 1fr; gap:24px; max-width:1100px; margin:0 auto; }

/* Events mega: 4-col layout. Anchored under its nav-item like Sports/Académie
   (inherits position:absolute; top:100%; left:0 from .mega) so the cursor
   stays over the trigger row when moving down into the panel. */
.mega-events {
  grid-template-columns: repeat(4, 1fr);
  gap:28px;
  max-width:1100px;
  margin:0;
}
.mega-events .mega-col h4 { white-space:nowrap; }
.mega-events .mega-col ul li a { white-space:nowrap; }
.mega-col h4 { font-size:11px; font-weight:700; letter-spacing:0.16em; text-transform:uppercase; opacity:0.55; margin-bottom:14px; }
.mega-col ul li, .mega-col ul li a { padding:6px 0; font-weight:500; display:block; }
.mega-col ul li:hover, .mega-col ul li a:hover { font-weight:700; }
.mega-club-card {
  border:1.5px solid var(--midnight); padding:20px; background:var(--paper);
  cursor:pointer; transition:transform 0.15s, box-shadow 0.15s;
  display:block;
}
.mega-club-card:hover { transform:translate(-2px,-2px); box-shadow:4px 4px 0 var(--midnight); }
.mega-club-card.disabled { opacity:0.55; cursor:default; background:var(--cream); }
.mega-club-card.disabled:hover { transform:none; box-shadow:none; }
.mega-club-card .city { font-size:24px; font-weight:800; letter-spacing:-0.03em; }
.mega-club-card .meta { font-size:11px; font-weight:500; letter-spacing:0.12em; text-transform:uppercase; margin-top:6px; opacity:0.7; }
.mega-club-card .pill { display:inline-block; margin-top:10px; padding:3px 10px; background:var(--midnight); color:var(--yellow); font-size:10px; font-weight:700; letter-spacing:0.1em; text-transform:uppercase; border-radius:999px; }
.mega-club-card.disabled .pill { background:transparent; color:var(--midnight); border:1px solid var(--midnight); }

.btn {
  display:inline-flex; align-items:center; gap:8px; padding:9px 16px;
  font-size:13px; font-weight:700; border-radius:999px;
  border:1.5px solid var(--midnight); transition:all 0.15s;
  cursor:pointer;
}
.btn:hover { transform:translate(-1px,-1px); box-shadow:3px 3px 0 var(--midnight); }
.btn.primary { background:var(--midnight); color:var(--yellow); }
.btn.ghost { background:transparent; }
.btn-lg { padding:16px 28px; font-size:15px; border-width:2px; }
.btn-lg:hover { box-shadow:4px 4px 0 var(--midnight); }
.btn-xl { padding:22px 38px; font-size:18px; border-width:2px; }
.btn-xl:hover { box-shadow:6px 6px 0 var(--midnight); }

/* Club selector pill in nav */
.club-pill {
  display:inline-flex; align-items:center; gap:8px; padding:7px 14px;
  background:var(--cream); border:1.5px solid var(--midnight); border-radius:999px;
  font-size:12px; font-weight:700; letter-spacing:0.04em; cursor:pointer;
}
.club-pill:hover { background:var(--paper); }
.club-pill .dot { width:8px; height:8px; border-radius:50%; background:var(--midnight); }
.club-pill[data-club="lille"] .dot { background:#6e5a62; }
.club-pill[data-club="champigny"] .dot { background:#6e5a62; }
.club-pill[data-club=""] .dot { background:transparent; border:1.5px dashed var(--midnight); }
/* Statut d'ouverture (prioritaire sur la couleur par club) : vert = ouvert
   maintenant, gris = fermé / pas encore lancé (« Bientôt »).
   Le double attribut [data-status][data-club] élève la spécificité au-dessus
   des règles par club (y compris la copie de home.css) → couleur cohérente
   sur TOUTES les pages, quel que soit l'ordre de chargement des CSS. */
.club-pill[data-status="open"][data-club] { border-color:var(--parrot); }
.club-pill[data-status="open"][data-club] .dot { background:var(--parrot); border:none; box-shadow:0 0 0 3px rgba(44,101,56,0.18); }
.club-pill[data-status="closed"][data-club] .dot,
.club-pill[data-status="soon"][data-club] .dot { background:#a39e95; border:none; }

/* ===== SECTIONS, HEADINGS, TYPE ===== */
.section-eyebrow { font-size:12px; font-weight:700; letter-spacing:0.16em; text-transform:uppercase; opacity:0.6; margin-bottom:14px; }
.section-h2 { font-size:clamp(48px, 6vw, 92px); line-height:0.9; letter-spacing:-0.055em; text-transform:uppercase; max-width:1000px; }
.section-h2 .l1 { font-weight:300; }
.section-h2 .l2 { font-weight:500; }
.section-h2 .l3 { font-weight:900; }

/* ===== BANDE CTA (base globale) =====
   Filet de sécurité : une <section class="cta-strip"> doit TOUJOURS être stylée,
   même sur une page qui ne redéfinit pas ce style en local (sinon elle s'affiche
   « non designée »). Les pages qui ont leur propre <style> .cta-strip surchargent. */
.cta-strip {
  padding:72px 40px; background:var(--peach); color:var(--midnight);
  border-bottom:1.5px solid var(--midnight);
}
.cta-strip > div { max-width:1280px; margin:0 auto; }
.cta-strip h2 { text-transform:uppercase; }
@media (max-width:760px) { .cta-strip { padding:56px 22px; } }

/* ===== MARQUEE ===== */
.marquee {
  background:var(--midnight); color:var(--yellow); padding:18px 0; overflow:hidden;
  border-top:1.5px solid var(--midnight); border-bottom:1.5px solid var(--midnight);
}
.marquee-track {
  display:flex; gap:48px; white-space:nowrap; animation:scroll 32s linear infinite;
  font-size:24px; font-weight:500; letter-spacing:-0.03em; text-transform:uppercase;
}
.marquee-track span { display:inline-flex; align-items:center; gap:48px; }
.marquee-track span::after { content:'✦'; opacity:0.6; font-size:18px; }
@keyframes scroll { from { transform:translateX(0); } to { transform:translateX(-50%); } }

/* ===== FOOTER ===== */
.footer { background:var(--midnight); color:var(--yellow); padding:80px 40px 36px; border-top:1.5px solid var(--yellow); }
.footer-wrap { max-width:1440px; margin:0 auto; }
.footer-top { display:grid; grid-template-columns:2fr 1fr 1fr 1fr 1fr; gap:48px; margin-bottom:60px; }
.footer-brand h3 { font-size:48px; font-weight:900; letter-spacing:-0.055em; text-transform:uppercase; margin-bottom:14px; }
.footer-brand p { font-size:14px; opacity:0.8; max-width:340px; line-height:1.5; }
.footer-brand .footer-contact { margin-top:16px; display:flex; flex-direction:column; gap:4px; font-size:14px; }
.footer-brand .footer-contact a { font-weight:800; }
.footer-brand .footer-social { margin-top:14px; display:flex; flex-wrap:wrap; gap:8px 16px; font-size:13px; opacity:0.85; }
.footer-brand .footer-social a { text-decoration:underline; }
.footer-col h4 { font-size:11px; font-weight:700; letter-spacing:0.16em; text-transform:uppercase; opacity:0.55; margin-bottom:14px; }
.footer-col ul li { padding:5px 0; font-size:14px; }
.footer-col ul li a { display:block; }
.footer-col ul li:hover { font-weight:700; }
.footer-bottom { display:flex; justify-content:space-between; align-items:center; gap:20px; flex-wrap:wrap; padding-top:28px; border-top:1px solid rgba(255,244,201,0.2); font-size:11px; letter-spacing:0.12em; text-transform:uppercase; opacity:0.7; }
.footer-baseline .w1 { font-weight:300; } .footer-baseline .w2 { font-weight:500; } .footer-baseline .w3 { font-weight:700; }

/* ===== BOOKING MODAL (2-STEP) ===== */
.modal-bg {
  position:fixed; inset:0; background:rgba(14,11,35,0.92);
  z-index:200; display:none; align-items:center; justify-content:center; padding:40px;
  backdrop-filter:blur(6px);
}
.modal-bg.open { display:flex; }
.modal {
  background:var(--yellow); border:2px solid var(--midnight); padding:48px 44px;
  max-width:880px; width:100%; max-height:90vh; overflow:auto; position:relative;
}
.modal-close {
  position:absolute; top:18px; right:18px; width:36px; height:36px;
  border:1.5px solid var(--midnight); border-radius:50%; cursor:pointer;
  font-size:18px; display:flex; align-items:center; justify-content:center;
  background:transparent;
}
.modal-close:hover { background:var(--midnight); color:var(--yellow); }
.modal-eyebrow { font-size:12px; font-weight:700; letter-spacing:0.16em; text-transform:uppercase; opacity:0.6; margin-bottom:14px; }
.modal h2 { font-size:clamp(40px, 5vw, 72px); line-height:0.92; letter-spacing:-0.055em; text-transform:uppercase; margin-bottom:14px; }
.modal h2 .l1 { font-weight:300; }
.modal h2 .l2 { font-weight:900; }
.modal-sub { font-size:16px; font-weight:500; line-height:1.45; margin-bottom:28px; max-width:560px; }
.modal-clubs { display:grid; grid-template-columns:1fr 1fr; gap:18px; }
.modal-club {
  border:2px solid var(--midnight); padding:24px; background:var(--paper);
  cursor:pointer; transition:transform 0.15s, box-shadow 0.15s;
  display:flex; flex-direction:column; gap:8px; text-align:left;
}
.modal-club:hover { transform:translate(-2px,-2px); box-shadow:5px 5px 0 var(--midnight); }
.modal-club.disabled { opacity:0.55; cursor:default; background:var(--cream); }
.modal-club.disabled:hover { transform:none; box-shadow:none; }
.modal-club .city { font-size:32px; font-weight:900; letter-spacing:-0.04em; text-transform:uppercase; }
.modal-club .addr { font-size:12px; font-weight:500; opacity:0.7; letter-spacing:0.04em; }
.modal-club .acts { display:flex; gap:5px; flex-wrap:wrap; margin-top:8px; }
.modal-club .acts span { padding:3px 9px; background:var(--cream); border:1px solid var(--midnight); font-size:10px; font-weight:700; letter-spacing:0.06em; border-radius:999px; }
.modal-club .pill {
  align-self:flex-start; padding:4px 11px; background:var(--midnight); color:var(--yellow);
  font-size:10px; font-weight:700; letter-spacing:0.1em; text-transform:uppercase; border-radius:999px;
}
.modal-club.disabled .pill { background:transparent; border:1px solid var(--midnight); color:var(--midnight); }

/* Step 2 · activity picker */
.modal-steps { display:flex; align-items:center; gap:14px; margin-bottom:28px; font-size:11px; font-weight:700; letter-spacing:0.12em; text-transform:uppercase; }
.modal-steps .step { padding:5px 12px; border:1.5px solid var(--midnight); border-radius:999px; background:var(--paper); white-space:nowrap; }
.modal-steps .step.done { background:var(--midnight); color:var(--yellow); }
.modal-steps .step.cur { background:var(--midnight); color:var(--yellow); }
.modal-steps .arr { opacity:0.4; }
.modal-step { display:none; }
.modal-step.active { display:block; }
.modal-back { display:inline-flex; align-items:center; gap:6px; margin-bottom:14px; padding:6px 12px; font-size:12px; font-weight:700; letter-spacing:0.06em; text-transform:uppercase; cursor:pointer; border:1.5px solid var(--midnight); border-radius:999px; background:transparent; }
.modal-back:hover { background:var(--midnight); color:var(--yellow); }
.modal-club-context { display:flex; align-items:center; gap:10px; margin-bottom:18px; font-size:13px; font-weight:700; letter-spacing:0.04em; }
.modal-club-context .dot { width:10px; height:10px; border-radius:50%; }
.modal-club-context[data-club="lille"] .dot { background:#6e5a62; }
.modal-club-context[data-club="champigny"] .dot { background:#6e5a62; }

.modal-acts { display:grid; grid-template-columns:1fr 1fr; gap:14px; }
.modal-act {
  border:2px solid var(--midnight); padding:22px; background:var(--paper);
  cursor:pointer; transition:transform 0.15s, box-shadow 0.15s;
  display:flex; flex-direction:column; gap:8px; text-align:left;
  position:relative; overflow:hidden;
}
.modal-act:hover { transform:translate(-2px,-2px); box-shadow:5px 5px 0 var(--midnight); }
.modal-act .act-num { position:absolute; top:14px; right:18px; font-size:11px; font-weight:700; letter-spacing:0.14em; opacity:0.5; }
.modal-act .act-name { font-size:28px; font-weight:900; letter-spacing:-0.04em; text-transform:uppercase; line-height:0.95; }
.modal-act .act-desc { font-size:13px; font-weight:500; opacity:0.7; line-height:1.4; }
.modal-act .act-from { font-size:12px; font-weight:700; letter-spacing:0.06em; margin-top:6px; }
.modal-act .act-from strong { font-size:18px; font-weight:900; letter-spacing:-0.02em; }
.modal-act[data-act="escalade"] { border-left:8px solid #d68a3c; }
.modal-act[data-act="hyrox"] { border-left:8px solid #2a3a55; }
.modal-act[data-act="padel"] { border-left:8px solid #3aa564; }
.modal-act[data-act="resto"] { border-left:8px solid #b87a4a; }

/* ===== MOBILE NAV TOGGLE BUTTON ===== */
.nav-mobile-toggle {
  display:none; width:40px; height:40px;
  align-items:center; justify-content:center;
  border:1.5px solid var(--midnight); border-radius:8px;
  cursor:pointer; background:transparent;
  position:relative; z-index:121;
}
.nav-mobile-toggle span {
  width:18px; height:2px; background:var(--midnight);
  position:relative; display:block;
  transition:transform 0.2s, background 0.2s;
}
.nav-mobile-toggle span::before, .nav-mobile-toggle span::after {
  content:''; position:absolute; left:0; right:0;
  height:2px; background:var(--midnight);
  transition:transform 0.2s, top 0.2s;
}
.nav-mobile-toggle span::before { top:-6px; }
.nav-mobile-toggle span::after { top:6px; }
/* Open state: hamburger morphs into X */
body.mobile-nav-open .nav-mobile-toggle span { background:transparent; }
body.mobile-nav-open .nav-mobile-toggle span::before { top:0; transform:rotate(45deg); }
body.mobile-nav-open .nav-mobile-toggle span::after { top:0; transform:rotate(-45deg); }

/* ===== MOBILE DRAWER ===== */
.nav-drawer {
  position:fixed; top:0; right:0;
  width:min(360px, 92vw); height:100vh; z-index:120;
  background:var(--yellow); border-left:1.5px solid var(--midnight);
  display:flex; flex-direction:column; padding:0;
  transform:translateX(100%); transition:transform 0.3s cubic-bezier(0.22, 0.61, 0.36, 1);
  overflow-y:auto; box-shadow:-12px 0 32px rgba(14,11,35,0.18);
}
body.mobile-nav-open .nav-drawer { transform:translateX(0); }
.nav-drawer-backdrop {
  position:fixed; inset:0; z-index:119;
  background:rgba(14,11,35,0.55); backdrop-filter:blur(4px);
  opacity:0; pointer-events:none;
  transition:opacity 0.3s;
}
body.mobile-nav-open .nav-drawer-backdrop { opacity:1; pointer-events:auto; }
.nav-drawer-head {
  height:calc(var(--banner-h) + var(--nav-h));
  display:flex; align-items:center; justify-content:space-between;
  padding:0 20px; border-bottom:1.5px solid var(--midnight);
}
.nav-drawer-head .nav-logo { font-size:22px; font-weight:800; letter-spacing:-0.04em; }
.nav-drawer-club {
  padding:18px 20px; border-bottom:1.5px solid var(--midnight); background:var(--cream);
  display:flex; align-items:center; gap:12px;
}
.nav-drawer-club .club-pill {
  flex:1; justify-content:flex-start; font-size:13px; padding:10px 14px;
}
.nav-drawer-club .club-pill .club-pill-label { display:inline; }
.nav-drawer-list { display:flex; flex-direction:column; padding:8px 0; }
.nav-drawer-group { border-bottom:1.5px solid rgba(14,11,35,0.12); padding:14px 20px; }
.nav-drawer-group:last-child { border-bottom:none; }
.nav-drawer-group h4 {
  font-size:11px; font-weight:800; letter-spacing:0.18em;
  text-transform:uppercase; opacity:0.5; margin-bottom:10px;
}
.nav-drawer-group a, .nav-drawer-group .nav-drawer-link {
  display:flex; align-items:center; padding:10px 0;
  font-size:15px; font-weight:600; letter-spacing:-0.01em;
  border-bottom:1px solid rgba(14,11,35,0.08);
  cursor:pointer;
}
.nav-drawer-group a:last-child, .nav-drawer-group .nav-drawer-link:last-child { border-bottom:none; }
.nav-drawer-group a::after { content:'→'; margin-left:auto; opacity:0.45; }
.nav-drawer-cta {
  padding:18px 20px; margin-top:auto;
  border-top:1.5px solid var(--midnight); background:var(--cream);
  display:flex; flex-direction:column; gap:10px;
}
.nav-drawer-cta .btn { width:100%; justify-content:center; padding:14px 18px; font-size:14px; }

/* ===== RESPONSIVE BREAKPOINTS ===== */
@media (max-width:1240px) {
  .nav { padding:0 20px; }
  .nav-item { padding:0 10px; font-size:13px; }
  .nav-logo { font-size:20px; padding-right:10px; }
  .club-pill { padding:6px 12px; font-size:11px; }
  .nav-right .btn { padding:8px 13px; font-size:12px; }
}
@media (max-width:1100px) {
  .footer-top { grid-template-columns:1fr 1fr; }
  .nav-links { display:none; }
  .nav-mobile-toggle { display:flex; }
  .nav-right .btn.ghost { display:none; }
  .nav-right .btn.primary { padding:8px 14px; font-size:12px; }
  /* On garde TOUJOURS le nom du club visible (info clé pour pouvoir changer
     de club) — la place est libérée par les nav-links masqués. */
  .club-pill { padding:7px 12px; gap:7px; }
}
@media (max-width:760px) {
  .modal-clubs, .modal-acts { grid-template-columns:1fr; }
  .nav { padding:0 14px; }
  .nav-logo { font-size:18px; padding-right:6px; }
  .nav-right { gap:6px; }
  .nav-right .btn.primary { padding:8px 12px; font-size:11px; }
  /* Keep club pill visible but compact */
  .club-pill { padding:6px 10px; font-size:11px; }
  /* Prevent body scroll when drawer is open */
  body.mobile-nav-open { overflow:hidden; }
}
@media (max-width:700px) {
  /* Sur petit écran, on masque le bouton « Réserver » de la nav (il reste
     accessible dans le menu burger) pour laisser la place au nom du club,
     qui doit rester visible en permanence. */
  .nav-right .btn.primary { display:none; }
}

/* ===== Eyebrow — deux traitements :
   · Sections de page : pastille encadrée (réutilise le langage des pills du
     brand — club pill, meta-pills, tags). Bordure et texte en currentColor,
     donc s'adapte au fond (jaune sur sombre, encre sur clair).
   · Modals / overlays / flux : texte seul (aucune décoration). */
.section-eyebrow, .hist-eyebrow, .evh-eyebrow, .evp-eyebrow, .ah-eyebrow,
.cp-eyebrow, .dash-hero-eyebrow, .legal-eyebrow, .nf-eyebrow, .why-eyebrow,
.funnel-eyebrow, .thx-eyebrow, .login-eyebrow {
  display:inline-block !important;
  border:1.5px solid currentColor;
  border-radius:999px;
  padding:7px 15px !important;
  font-size:11px !important;
  font-weight:800 !important;
  letter-spacing:0.13em !important;
  line-height:1 !important;
  opacity:0.85 !important;
}

/* ============================================================
   RESPONSIVE — titres hero/section sur mobile (le min des clamp()
   d'origine dépasse la largeur d'un téléphone → on plafonne).
   !important pour passer devant les <style> inline des pages.
============================================================ */
@media (max-width:640px) {
  .page-hero h1, .cp-h1, .cp-hero h1, .ah-hero h1, .ah-hero-content h1,
  .evp-hero h1, .evh-hero h1, .hist-hero h1, .pl-hero h1, .legal-hero h1,
  .nf-title, .dash-hero h1, .login-hero h1, .thx-hero h1 {
    font-size:clamp(34px, 11.5vw, 60px) !important;
  }
  .intro h2, .where-head h2, .formats-head h2, .price-teaser h2,
  .price-teaser-wrap h2, .compare-head h2, .testimonials-head h2,
  .why h2, .why-wrap h2, .club-life-head h2, .hist-manifest h2,
  .hist-timeline-head h2, .hist-values-head h2, .hist-team-head h2,
  .sport-gallery-head h2, .acad-team-head h2, .classes-planning h2,
  .home-classes h2, .pl-grid-section h2, .evp-section h2, .evh-section h2,
  .ah-section h2, .academy h2, .formats h2 {
    font-size:clamp(28px, 8.5vw, 46px) !important;
  }
}

/* Footer : sur mobile, 2 colonnes serrées + marque pleine largeur. */
@media (max-width:560px) {
  .footer { padding:56px 22px 28px; }
  .footer-top { grid-template-columns:1fr 1fr; gap:28px 20px; margin-bottom:40px; }
  .footer-brand { grid-column:1 / -1; }
  .footer-brand h3 { font-size:40px; }
}

/* Cap universel des lignes de titre (.l1/.l2/.l3 = lignes de display heading,
   utilisées partout) : garantit qu'aucun gros titre ne déborde sur mobile,
   quelle que soit la classe de section. */
@media (max-width:640px) {
  .l1, .l2, .l3 { font-size:clamp(30px, 9vw, 52px) !important; line-height:0.95 !important; display:block !important; }
}

/* Grille événements thématiques (home) : responsive. */
@media (max-width:1100px) { .events-themed-grid { grid-template-columns:1fr 1fr !important; } }
@media (max-width:560px)  { .events-themed-grid { grid-template-columns:1fr !important; } }

/* Sécurité : les rangées à défilement horizontal (carrousels, onglets-jour,
   sommaire légal) ne doivent jamais pousser la page. */
.shelf-row, .ecl-days, .legal-toc, .ecl-filters, .compare-tabs { min-width:0; max-width:100%; }

/* Têtes de section académie (titre | description en 2 colonnes) : on les
   empile dès la tablette pour éviter tout serrage/débordement. */
@media (max-width:860px) {
  .why-head, .funnel-head, .progs-head { grid-template-columns:1fr !important; gap:24px !important; }
}

/* ===== Nav qui s'adapte au club sélectionné =====
   Les éléments réservés à Champigny (Bien-être, Hyrox, académie Hyrox) sont
   masqués quand Lille est le club actif. Sans club ou à Champigny : tout visible.
   Réactif : le boot écrit body[data-club], la nav (desktop + drawer mobile dont
   les entrées portent aussi data-only-club) se met à jour automatiquement. */
body[data-club="lille"] [data-only-club="champigny"] { display:none !important; }

/* ===== Garde-club : bandeau d'orientation sur les pages réservées à un club ===== */
.club-guard {
  display:flex; flex-wrap:wrap; gap:8px 16px; align-items:center; justify-content:center;
  padding:12px 24px; background:var(--midnight); color:var(--yellow);
  font-size:13.5px; font-weight:500; text-align:center; text-decoration:none;
  border-bottom:1.5px solid var(--midnight);
  /* Reste collé juste sous la nav fixe, sur toute la page. */
  position:sticky; top:calc(var(--banner-h) + var(--nav-h)); z-index:99;
}
.club-guard b { font-weight:800; }
.club-guard .cg-cta { font-weight:800; color:var(--peach); white-space:nowrap; }
.club-guard:hover .cg-cta { text-decoration:underline; }

/* ===== PLACEHOLDER IMAGE / VIDÉO avec INTENTION (brief ≤ 20 mots) =====
   Partout où une vraie photo/vidéo viendra, on pose <div class="img-ph">
   <span class="img-ph-shot">…brief…</span></div>. Tant que l'asset n'est pas
   là, on voit un visuel de marque + l'intention du shot (énergie, action). */
.img-ph {
  position:relative; overflow:hidden; isolation:isolate;
  background:linear-gradient(135deg, var(--midnight) 0%, #2a2348 55%, var(--parrot) 100%);
  display:flex; align-items:flex-end; min-height:120px;
}
.img-ph::after { /* grain/texture subtile */
  content:''; position:absolute; inset:0; z-index:1; opacity:0.25;
  background:radial-gradient(circle at 30% 20%, rgba(255,192,158,0.5), transparent 45%),
             radial-gradient(circle at 80% 80%, rgba(44,101,56,0.6), transparent 50%);
}
.img-ph::before {
  content:'PHOTO'; position:absolute; top:10px; left:12px; z-index:3;
  font-size:9.5px; font-weight:800; letter-spacing:0.18em; color:rgba(255,244,201,0.85);
  border:1px solid rgba(255,244,201,0.4); padding:2px 8px; border-radius:999px;
  display:inline-flex; align-items:center; gap:5px; backdrop-filter:blur(2px);
}
.img-ph[data-kind="video"]::before { content:'VIDÉO'; }
.img-ph-shot {
  position:relative; z-index:2; width:100%; padding:30px 16px 14px; margin-top:auto;
  font-size:12.5px; line-height:1.4; font-weight:600; font-style:italic; color:var(--cream);
  background:linear-gradient(to top, rgba(13,11,34,0.92), rgba(13,11,34,0.55) 55%, transparent);
}
@media (prefers-reduced-motion:no-preference) {
  .img-ph { background-size:140% 140%; animation:imgph-pan 18s ease-in-out infinite alternate; }
  @keyframes imgph-pan { from { background-position:0% 0%; } to { background-position:100% 100%; } }
}

/* .img-ph peut accueillir une VRAIE photo : <img class="img-ph-img" ...
   onerror="this.remove()">. Si le fichier existe → la photo couvre le
   placeholder et le brief/badge se masquent ; sinon (404) l'image se retire et
   on revoit le visuel de marque + l'intention. Déposer = afficher, zéro code. */
.img-ph-img { position:absolute; inset:0; width:100%; height:100%; object-fit:cover; z-index:2; }
/* <picture> n'introduit aucune boîte : les <img.*-img> gardent leur mise en
   page (position absolue, sélecteurs descendants et :has() inchangés). */
picture { display:contents; }
/* Image de couverture injectée dans un bloc placeholder (vision/venue/hero
   d'événement) : remplit, passe SOUS l'overlay ::after et les légendes. */
.ph-cover { position:absolute; inset:0; width:100%; height:100%; object-fit:cover; z-index:0; }
.venue-photo .city-mark, .vision-photo .vp-cap, .vision-photo .vp-stamp,
.act-photo .act-num, .act-photo .act-title,
.event-photo .event-tag, .event-photo .event-stamp,
.story-photo .punch-overlay, .eg-item .eg-label, .eg-item .cl-play { z-index:2; }
.img-ph:has(.img-ph-img)::before,
.img-ph:has(.img-ph-img) .img-ph-shot { display:none; }

/* Logo Café Central : déposer assets/logos/cafe-central.svg (ou .png) → il
   remplace le wordmark texte du hero concept. Sinon, wordmark CSS conservé. */
.cc-logo-img { max-width:min(540px, 88vw); height:auto; display:block; }
.cc-logo:has(.cc-logo-img) .cc-logo-cafe,
.cc-logo:has(.cc-logo-img) .cc-logo-central,
.cc-logo:has(.cc-logo-img) .cc-logo-by { display:none; }

/* Logo Escapad image dans la nav (remplace le texte, injecté par escapad-app.js) */
.nav-logo-img { height:30px; width:auto; display:block; }
@media (max-width:560px) { .nav-logo-img { height:26px; } }
.footer-logo-img { height:40px; width:auto; display:block; max-width:240px; }

/* Photo réelle dans les heros de page (sport, clubs…) : déposer le fichier →
   il remplit le hero, derrière le « stamp » et le badge. Sinon le dégradé reste. */
.page-hero-photo .hero-photo-img { position:absolute; inset:0; width:100%; height:100%; object-fit:cover; z-index:1; }
.page-hero-photo .stamp, .page-hero-photo .corner { z-index:3; }

/* Retour V2 : bandeaux défilants retirés (s'affichaient mal sur grand écran,
   encombraient sur mobile). HTML conservé, simplement masqué. */
/* Anciens bandeaux défilants de contenu masqués (retour client). Les bandeaux
   de hero (Café Central .cc-marquee, accueil .hw-marquee) sont volontairement
   conservés comme élément de design. */
.marquee { display:none !important; }

/* Menu mobile compact : groupes repliés par défaut (accordéon · retour V2) */
.nav-drawer-toggle { display:flex !important; align-items:center; justify-content:space-between; width:100%; cursor:pointer; user-select:none; }
/* Lien sans sous-menu : même niveau que l'entête de section (typo uppercase). */
.nav-drawer-group a.nav-drawer-toplink {
  font-size:11px; font-weight:800; letter-spacing:0.18em;
  text-transform:uppercase; opacity:0.5;
  padding:0; border-bottom:none;
}
.nav-drawer-group a.nav-drawer-toplink::after { content:none; }
.nav-drawer-chev { font-weight:400; opacity:0.55; font-size:22px; line-height:1; padding-left:12px; }
.nav-drawer-sub { display:none; }
.nav-drawer-group.open .nav-drawer-sub { display:block; }

/* Méga-menus compacts (V2) : petits dropdowns nets pour Sports/Restaurant/Événements */
.mega.mega-compact { min-width:230px; padding:16px 18px; }
.mega-compact ul { display:flex; flex-direction:column; gap:2px; }
.mega-compact li a { display:block; padding:9px 12px; border-radius:8px; font-size:14px; font-weight:600; white-space:nowrap; }
.mega-compact li a:hover { background:var(--yellow); }
/* Nav un peu plus dense (9 onglets) sans déborder sur grand écran */
.nav-item { padding:0 11px; }

/* ===== Sticky section nav (pages Tarifs) · desktop + mobile/tablette ===== */
.tarif-secnav {
  position:sticky; top:calc(var(--banner-h) + var(--nav-h)); z-index:60;
  background:var(--midnight);
}
.tarif-secnav .tsn-wrap {
  max-width:1280px; margin:0 auto; display:flex; gap:2px; align-items:stretch;
  padding:0 16px; overflow-x:auto; scrollbar-width:none;
}
.tarif-secnav .tsn-wrap::-webkit-scrollbar { display:none; }
.tarif-secnav a {
  flex:0 0 auto; padding:13px 16px; color:var(--cream); text-decoration:none;
  font-size:13px; font-weight:700; letter-spacing:0.02em; white-space:nowrap;
  border-bottom:2px solid transparent; opacity:0.65;
  transition:opacity 0.15s, border-color 0.15s, color 0.15s;
}
.tarif-secnav a:hover { opacity:1; }
.tarif-secnav a.active { opacity:1; color:var(--yellow); border-bottom-color:var(--yellow); }
/* Les ancres sautent SOUS la nav fixe + cette barre sticky */
.price-block, .tarif-compare { scroll-margin-top:calc(var(--banner-h) + var(--nav-h) + 50px); }

/* ===== Vidéo de fond du hero (Accueil, pages Club · retour équipe 20/07) ===== */
/* La source (data-src) est injectée par escapad-app.js sur desktop uniquement,
   hors « réduire les animations » et hors économie de données · sur mobile
   l'élément reste vide et masqué, le hero garde ses visuels. La vidéo et son
   scrim n'apparaissent (fondu) qu'une fois la lecture démarrée : si elle ne
   charge pas, le hero d'origine reste tel quel. */
.hero-bg-video {
  position:absolute; inset:0; width:100%; height:100%;
  object-fit:cover; pointer-events:none; opacity:0; transition:opacity 0.6s ease;
}
.hero-bg-video.on { opacity:1; }
.hero-bg-scrim {
  position:absolute; inset:0; pointer-events:none; opacity:0; transition:opacity 0.6s ease;
  background:radial-gradient(ellipse at 50% 55%, rgba(14,11,35,0.30) 0%, rgba(14,11,35,0.74) 100%);
}
.hero-bg-scrim.on { opacity:1; }
