/* =============================================================
   0. POLICES — hébergées sur le site
   Auparavant chargées depuis fonts.googleapis.com, ce qui transmettait
   l'adresse IP du visiteur à Google. Les fichiers sont désormais servis
   par le même domaine : aucun tiers n'est contacté pour l'affichage.
   font-display: swap — le texte reste lisible pendant le chargement.
   ============================================================= */
@font-face {
  font-family: 'Fredoka';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('/assets/fonts/fredoka-400-latin.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Fredoka';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('/assets/fonts/fredoka-400-latin-ext.woff2') format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: 'Fredoka';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url('/assets/fonts/fredoka-500-latin.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Fredoka';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url('/assets/fonts/fredoka-500-latin-ext.woff2') format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: 'Fredoka';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url('/assets/fonts/fredoka-600-latin.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Fredoka';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url('/assets/fonts/fredoka-600-latin-ext.woff2') format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: 'Fredoka';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url('/assets/fonts/fredoka-700-latin.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Fredoka';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url('/assets/fonts/fredoka-700-latin-ext.woff2') format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: 'Jost';
  font-style: normal;
  font-weight: 300;
  font-display: swap;
  src: url('/assets/fonts/jost-300-latin.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Jost';
  font-style: normal;
  font-weight: 300;
  font-display: swap;
  src: url('/assets/fonts/jost-300-latin-ext.woff2') format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: 'Jost';
  font-style: italic;
  font-weight: 400;
  font-display: swap;
  src: url('/assets/fonts/jost-400i-latin.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Jost';
  font-style: italic;
  font-weight: 400;
  font-display: swap;
  src: url('/assets/fonts/jost-400i-latin-ext.woff2') format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: 'Jost';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('/assets/fonts/jost-400-latin.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Jost';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('/assets/fonts/jost-400-latin-ext.woff2') format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: 'Jost';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url('/assets/fonts/jost-500-latin.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Jost';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url('/assets/fonts/jost-500-latin-ext.woff2') format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: 'Jost';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url('/assets/fonts/jost-600-latin.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Jost';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url('/assets/fonts/jost-600-latin-ext.woff2') format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: 'Jost';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url('/assets/fonts/jost-700-latin.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Jost';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url('/assets/fonts/jost-700-latin-ext.woff2') format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}

/* =============================================================
   PAUSE STUDIO — Feuille de style
   Charte : rayures verticales camel / crème · rose · beige
   Polices : Fredoka (titres) · Jost (texte)

   SOMMAIRE
   1.  Jetons de design
   2.  Reset & bases
   3.  Utilitaires & accessibilité
   4.  Boutons & liens
   5.  Banderole d'annonce
   6.  En-tête & navigation
   7.  Accueil plein écran + motif festonné
   8.  Sections & titres
   9.  Le Studio + carrousel
   10. Constance
   11. Les cours
   12. Les ateliers
   13. L'équipe
   14. Tarifs & réservation (Eversports)
   15. FAQ
   16. Contact
   17. Avis
   18. Pied de page
   19. Éléments flottants
   20. Animations
   21. Responsive
   22. Impression
   23. Pages juridiques & liens du pied de page
   ============================================================= */

/* =============================================================
   1. JETONS DE DESIGN
   ============================================================= */
:root {
  color-scheme: light;

  /* --- Palette de marque --- */
  --brand-rose:     #f299a0;   /* rose de la charte (surfaces) */
  --brand-camel:    #af7113;   /* camel de la charte (décor)   */
  --brand-cream:    #fffdf9;
  --brand-beige:    #fef1e5;
  --brand-beige-2:  #fbe6d3;

  /* --- Fonds --- */
  --bg:        #fffdf9;
  --beige:     #fef1e5;
  --surface:   #ffffff;
  --surface-2: #fdf6ee;

  --border:        rgba(175, 113, 19, .20);
  --border-strong: rgba(175, 113, 19, .36);

  /* --- Textes (contrastes vérifiés) --- */
  --text:        #33291f;
  --text-muted:  #6f6058;
  /* Camel de texte : 4,95:1 sur le beige, 5,5:1 sur le crème.
     Le camel #af7113 de la charte n'atteint que 3,6:1 — réservé au décor. */
  --camel-texte: #8f5d10;
  --camel-fort:  #6f4708;

  /* Rose de texte : 3,4:1 sur le beige — conforme au seuil des GRANDS
     caractères (3:1). Les titres qui l'emploient sont en gras et ≥ 2 rem. */
  --rose-titre:  #c9636e;
  /* Rose de lien / petit texte : 5,0:1 sur le crème */
  --rose-texte:  #b0505d;
  --rose-hover:  #8f3d49;
  --rose-soft:   #fdeef0;

  /* Rose « flash » pour les surfaces : texte brun dessus (6,3:1) */
  --rose-surface:       #f299a0;
  --rose-surface-hover: #f6b0b6;
  /* Texte posé sur le rose : camel profond (4,72:1). Volontairement dans
     la famille camel, pas un brun neutre. */
  --sur-rose:           #5c3b08;

  /* Bandeaux camel : crème dessus (6,7:1) */
  --camel-band:    #7d5210;
  --on-camel:      #fffdf9;
  --on-camel-soft: #f0dcc0;

  --danger:      #b3261e;
  --danger-soft: #fdecea;

  /* --- Ombres --- */
  --shadow-sm: 0 4px 14px rgba(59, 50, 44, .08);
  --shadow-md: 0 14px 40px rgba(59, 50, 44, .12);
  --shadow-lg: 0 24px 60px rgba(59, 50, 44, .16);

  /* --- Formes --- */
  --radius:    22px;
  --radius-sm: 14px;
  --radius-xs: 10px;
  --maxw:      1160px;

  /* --- Mouvement --- */
  --ease:   cubic-bezier(.22, 1, .36, 1);
  --dur:    .3s;
  --dur-lg: .55s;

  /* --- Divers --- */
  --header-h:    74px;
  --announce-h:  40px;
  --section-pad: clamp(3.5rem, 8vw, 6.5rem);
  --focus-ring:  3px solid var(--rose-texte);

  /* Rayures du motif festonné, sous le visuel d'accueil */
  --stripes-festons: repeating-linear-gradient(
      90deg,
      var(--brand-camel) 0, var(--brand-camel) 13px,
      #ffffff 13px, #ffffff 31px
  );

  /* Rayures du bandeau festonné du pied de page. Rose plutôt que camel :
     sur le fond camel du pied de page, des rayures camel disparaîtraient. */
  --stripes-footer: repeating-linear-gradient(
      90deg,
      var(--brand-rose) 0, var(--brand-rose) 13px,
      #fffdf9 13px, #fffdf9 31px
  );

  /* Rayures verticales camel / crème : le motif peint sur le mur du studio */
  --stripes: repeating-linear-gradient(
      90deg,
      var(--brand-camel) 0, var(--brand-camel) 13px,
      var(--bg) 13px, var(--bg) 31px
  );
}

@media (prefers-contrast: more) {
  :root {
    --border: rgba(120, 78, 14, .55);
    --border-strong: rgba(120, 78, 14, .8);
    --text-muted: #4f423a;
  }
}

/* =============================================================
   2. RESET & BASES
   ============================================================= */
*, *::before, *::after { box-sizing: border-box; }
* { margin: 0; padding: 0; }

html {
  scroll-behavior: smooth;
  scroll-padding-top: calc(var(--header-h) + .5rem);
  -webkit-text-size-adjust: 100%;
}

body {
  font-family: 'Jost', system-ui, -apple-system, 'Segoe UI', sans-serif;
  color: var(--text);
  background: var(--bg);
  line-height: 1.7;
  -webkit-font-smoothing: antialiased;
  overflow-x: hidden;
}

img, svg, video { max-width: 100%; display: block; }
a { color: inherit; text-decoration: none; }
ul, ol { list-style: none; }
button, input, select, textarea { font: inherit; color: inherit; }
button { background: none; border: none; cursor: pointer; }

/* Garde-fou : `hidden` doit toujours masquer, même si une règle plus
   spécifique donne un display à l'élément (flex, grid…). */
[hidden] { display: none !important; }

p { text-wrap: pretty; }

.container { width: min(100% - 2.5rem, var(--maxw)); margin-inline: auto; }

.ico { width: 1.15em; height: 1.15em; flex: none; }
.svg-sprite { position: absolute; width: 0; height: 0; overflow: hidden; }

/* Point d'arrivée des ancres : le titre se place juste sous l'en-tête
   plutôt qu'après tout le rembourrage de la section. */
main > section[id] { scroll-margin-top: calc(0px - var(--section-pad)); }

/* =============================================================
   3. UTILITAIRES & ACCESSIBILITÉ
   ============================================================= */
.sr-only {
  position: absolute;
  width: 1px; height: 1px;
  padding: 0; margin: -1px;
  overflow: hidden;
  clip: rect(0 0 0 0);
  clip-path: inset(50%);
  white-space: nowrap;
  border: 0;
}

:where(a, button, input, select, textarea, [tabindex]):focus-visible {
  outline: var(--focus-ring);
  outline-offset: 3px;
  border-radius: var(--radius-xs);
}
:focus:not(:focus-visible) { outline: none; }

.skip-link {
  position: fixed;
  top: .75rem; left: 50%;
  translate: -50% -250%;
  z-index: 300;
  background: var(--rose-texte);
  color: #fff;
  font-weight: 600;
  padding: .8rem 1.5rem;
  border-radius: 999px;
  box-shadow: var(--shadow-md);
  transition: translate var(--dur) var(--ease);
}
.skip-link:focus-visible { translate: -50% 0; }

/* =============================================================
   4. BOUTONS & LIENS
   ============================================================= */
.btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: .55rem;
  font-family: 'Fredoka', 'Jost', sans-serif;
  font-weight: 600;
  font-size: .95rem;
  line-height: 1.2;
  min-height: 46px;
  padding: .8rem 1.7rem;
  border-radius: 999px;
  border: 2px solid transparent;
  cursor: pointer;
  text-align: center;
  transition: transform var(--dur) var(--ease), box-shadow var(--dur) var(--ease),
              background-color var(--dur) ease, color var(--dur) ease, border-color var(--dur) ease;
}
.btn:active { transform: translateY(0) scale(.98); }

.btn-primary {
  background: var(--rose-surface);
  color: var(--sur-rose);
  box-shadow: 0 8px 22px rgba(242, 153, 160, .5);
}
.btn-primary:hover {
  background: var(--rose-surface-hover);
  transform: translateY(-3px);
  box-shadow: 0 14px 32px rgba(242, 153, 160, .5);
}

.btn-ghost {
  background: transparent;
  border-color: var(--border-strong);
  color: var(--camel-texte);
}
.btn-ghost:hover { background: var(--brand-beige); border-color: var(--camel-texte); }

.btn-lg    { min-height: 54px; padding: 1rem 2rem; font-size: 1rem; }
.btn-sm    { min-height: 40px; padding: .55rem 1.2rem; font-size: .85rem; }
.btn-block { width: 100%; }

.text-link {
  color: var(--rose-texte);
  font-weight: 600;
  text-decoration: underline;
  text-underline-offset: .22em;
  text-decoration-thickness: 1.5px;
}
.text-link:hover { color: var(--rose-hover); text-decoration-thickness: 2.5px; }

.link-btn {
  color: var(--rose-texte);
  font-weight: 600;
  text-decoration: underline;
  text-underline-offset: .22em;
}

/* =============================================================
   5. BANDEROLE D'ANNONCE
   ============================================================= */
.announce {
  position: relative;
  z-index: 110;
  background: var(--camel-band);
  color: var(--on-camel);
  height: var(--announce-h);
  display: flex;
  align-items: center;
  overflow: hidden;
}
/* La banderole entière est cliquable : elle mène à l'offre découverte. */
.announce-link {
  display: block;
  color: inherit;
  text-decoration: none;
  cursor: pointer;
}
/* Pause au focus clavier seulement — pas au survol : la banderole occupe
   toute la largeur en haut de page, le curseur s'y pose constamment et
   l'animation paraissait alors figée. */
.announce-link:focus-visible .announce-track { animation-play-state: paused; }
.announce-link:focus-visible { outline: 3px solid var(--on-camel); outline-offset: -3px; border-radius: 0; }

.announce-track {
  display: flex;
  align-items: center;
  gap: 2.5rem;
  width: max-content;
  padding-left: 2.5rem;
  animation: defile 26s linear infinite;
  font-family: 'Fredoka', sans-serif;
  font-weight: 500;
  font-size: .88rem;
  letter-spacing: .02em;
  white-space: nowrap;
}
.announce-fleur { display: flex; align-items: center; flex: none; }
/* flex:none et max-width:none sont nécessaires : sans eux, la règle globale
   « svg { max-width: 100% } » réduit la fleur à 0 px dans ce conteneur flex. */
.announce-fleur svg { width: 15px; height: 15px; flex: none; max-width: none; opacity: .95; }

/* =============================================================
   6. EN-TÊTE & NAVIGATION
   ============================================================= */
.site-header {
  position: sticky;
  top: 0;
  z-index: 100;
  background: var(--bg);
  border-bottom: 1px solid transparent;
  transition: box-shadow var(--dur) ease, border-color var(--dur) ease;
}
.site-header.scrolled {
  box-shadow: var(--shadow-sm);
  border-bottom-color: var(--border);
}

/* L'en-tête déborde volontairement la mesure du contenu (1160 px) :
   sinon le menu à neuf entrées passe sur deux lignes quelle que soit
   la taille de l'écran, puisque la place disponible ne grandit jamais. */
.site-header .container { width: min(100% - 2.5rem, 1420px); }

.header-inner {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 1.25rem;
  padding: .8rem 0;
  min-height: 58px;
}
.brand { display: flex; align-items: center; border-radius: var(--radius-xs); }
.brand-logo { height: 42px; width: auto; }

.header-actions { display: flex; align-items: center; gap: .5rem; }

.main-nav ul { display: flex; align-items: center; gap: 1.15rem; }
/* :not(.btn) est indispensable : sans lui, cette règle écrase la couleur du
   bouton « Je réserve » du menu mobile et le contraste tombe à 2,6:1. */
.main-nav a:not(.btn) {
  font-family: 'Fredoka', sans-serif;
  font-size: .9rem;
  white-space: nowrap;
  font-weight: 500;
  color: var(--camel-texte);
  position: relative;
  padding: .45rem 0;
  display: inline-block;
}
.main-nav a:not(.btn)::after {
  content: '';
  position: absolute;
  left: 0; bottom: 0;
  width: 0; height: 2px;
  border-radius: 2px;
  background: var(--rose-texte);
  transition: width var(--dur) var(--ease);
}
.main-nav a:not(.btn):hover::after { width: 100%; }
/* La page courante est marquée aria-current=\"page\" dans le HTML */
.main-nav a[aria-current] { color: var(--rose-texte); font-weight: 600; }
.main-nav a[aria-current]::after { width: 100%; }

.nav-mobile-cta { display: none; }

/* Le panneau reçoit le focus à l'ouverture : conteneur, pas cible visuelle. */
.main-nav:focus { outline: none; }

.burger { display: none; }
.burger-lines { display: flex; flex-direction: column; gap: 5px; }
.burger-lines span {
  width: 24px; height: 2.5px;
  background: var(--camel-texte);
  border-radius: 2px;
  transition: transform var(--dur) var(--ease), opacity var(--dur) ease;
}
.burger[aria-expanded='true'] .burger-lines span:nth-child(1) { transform: translateY(7.5px) rotate(45deg); }
.burger[aria-expanded='true'] .burger-lines span:nth-child(2) { opacity: 0; }
.burger[aria-expanded='true'] .burger-lines span:nth-child(3) { transform: translateY(-7.5px) rotate(-45deg); }

.nav-overlay {
  position: fixed;
  inset: 0;
  z-index: 90;
  background: rgba(40, 28, 18, .45);
  opacity: 0;
  transition: opacity var(--dur) ease;
}
.nav-overlay.show { opacity: 1; }

/* =============================================================
   7. ACCUEIL PLEIN ÉCRAN
   ============================================================= */
.hero {
  position: relative;
  display: flex;
  /* min-height et non height : sur une fenêtre basse, un height fixe
     combiné au centrage faisait déborder le contenu des deux côtés,
     et overflow:hidden rognait le logo en haut, le bouton en bas.
     Ainsi le visuel s'agrandit plutôt que de couper. */
  min-height: calc(100svh - var(--header-h) - var(--announce-h));
  overflow: hidden;
  background: var(--brand-beige-2);
}
.hero-media {
  position: absolute;
  inset: 0;
  width: 100%; height: 100%;
  object-fit: cover;
  object-position: center 42%;
}
/* Voile chaud : sans lui, le rose de la marque serait illisible sur une
   photo claire. Plus dense au centre, où se placent le logo et le slogan. */
.hero-veil {
  position: absolute;
  inset: 0;
  background:
    radial-gradient(ellipse 78% 62% at 50% 48%, rgba(48, 31, 20, .68) 0%, rgba(48, 31, 20, .46) 60%, rgba(48, 31, 20, .30) 100%),
    linear-gradient(180deg, rgba(48, 31, 20, .28), rgba(48, 31, 20, .12) 45%, rgba(48, 31, 20, .38));
}

.hero-inner {
  position: relative;
  z-index: 2;
  flex: 1;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: clamp(1rem, 2.5vw, 1.8rem);
  text-align: center;
  padding: 2rem 1.5rem calc(2rem + 34px);
}
.hero-logo {
  width: min(46vw, 380px);
  height: auto;
  filter: drop-shadow(0 6px 24px rgba(40, 25, 15, .45));
}
.hero-slogan {
  font-family: 'Jost', sans-serif;
  font-weight: 300;
  text-transform: uppercase;
  letter-spacing: .13em;
  line-height: 1.35;
  font-size: clamp(1.05rem, 3.1vw, 2rem);
  color: var(--brand-rose);
  text-shadow: 0 2px 14px rgba(40, 25, 15, .5);
}
/* Coupure choisie : « Ton studio de Pilates » puis « et de yoga à Roncq ».
   Deux blocs plutôt qu'un <br> : la ligne se replie proprement si l'écran
   est vraiment étroit. */
.hero-slogan span { display: block; }
.btn-hero {
  background: var(--brand-rose);
  color: var(--sur-rose);
  min-height: 54px;
  padding: 1rem 2.4rem;
  font-size: 1.02rem;
  box-shadow: 0 10px 30px rgba(30, 18, 10, .35);
}
.btn-hero:hover { background: var(--rose-surface-hover); transform: translateY(-3px); }

/* Fenêtre basse (portable posé, navigateur avec barres) : on réduit le
   logo et le titre pour que tout tienne sans jamais rogner. */
@media (max-height: 760px) {
  .hero-logo   { width: min(32vw, 250px); }
  .hero-slogan { font-size: clamp(1rem, 2.3vw, 1.45rem); }
  .hero-inner  { gap: .9rem; padding-top: 1.2rem; padding-bottom: calc(1.2rem + 34px); }
}

/* --- Motif festonné : sépare le visuel du contenu --- */
/* Bandeau rayé camel / blanc, terminé par des festons.
   Les rayures partent de x = 0 dans les deux blocs : elles restent alignées
   entre la bande et les demi-cercles. */
.scallop {
  position: absolute;
  left: 0; right: 0; bottom: 0;
  z-index: 3;
  height: 16px;
  background: var(--stripes-festons);
}
.scallop::after {
  content: '';
  position: absolute;
  top: 100%; left: 0; right: 0;
  height: 20px;
  background: var(--stripes-festons);
  /* Le masque découpe les rayures en demi-cercles */
  -webkit-mask-image: radial-gradient(circle at 20px 0, #000 0 19px, transparent 20px);
          mask-image: radial-gradient(circle at 20px 0, #000 0 19px, transparent 20px);
  -webkit-mask-size: 40px 20px;  mask-size: 40px 20px;
  -webkit-mask-repeat: repeat-x; mask-repeat: repeat-x;
}

/* --- Damier de la vitrophanie ---
   Repris du calepinage de la vitrine du studio : carreaux rose, crème,
   camel et beige, décalés d'une rangée à l'autre. Employé deux fois
   seulement, aux respirations du récit — au-delà il deviendrait du bruit. */
.damier {
  --carreau: clamp(18px, 2.4vw, 28px);
  height: calc(var(--carreau) * 2);
  background-image:
    repeating-linear-gradient(90deg,
      var(--brand-rose)    0                          var(--carreau),
      var(--brand-cream)   var(--carreau)             calc(var(--carreau) * 2),
      var(--brand-camel)   calc(var(--carreau) * 2)   calc(var(--carreau) * 3),
      var(--brand-beige-2) calc(var(--carreau) * 3)   calc(var(--carreau) * 4)),
    repeating-linear-gradient(90deg,
      var(--brand-camel)   0                          var(--carreau),
      var(--brand-beige-2) var(--carreau)             calc(var(--carreau) * 2),
      var(--brand-rose)    calc(var(--carreau) * 2)   calc(var(--carreau) * 3),
      var(--brand-cream)   calc(var(--carreau) * 3)   calc(var(--carreau) * 4));
  background-size: 100% var(--carreau);
  background-position: 0 0, 0 var(--carreau);
  background-repeat: repeat-x;
}

/* =============================================================
   8. SECTIONS & TITRES
   ============================================================= */
.section { padding: var(--section-pad) 0; }
.section-beige { background: var(--beige); }

/* Titre principal : rond, rose, gras (esprit « Bimbo ») */
.titre-rond {
  font-family: 'Fredoka', 'Jost', sans-serif;
  font-weight: 700;
  font-size: clamp(2rem, 4.6vw, 3.2rem);
  line-height: 1.15;
  color: var(--brand-camel);
  text-align: center;
  margin-bottom: 2.6rem;
  text-wrap: balance;
}


h3 {
  font-family: 'Fredoka', 'Jost', sans-serif;
  font-weight: 600;
  font-size: 1.3rem;
  line-height: 1.25;
  color: var(--text);
}

/* =============================================================
   9. LE STUDIO + CARROUSEL
   ============================================================= */
/* Texte camel sur fond beige */
/* Bloc centré dans la page, mais texte aligné à gauche : sur trois
   paragraphes, un texte centré oblige l'œil à rechercher chaque début
   de ligne. La mesure est ramenée à 62 caractères. */
.texte-studio {
  max-width: 62ch;
  margin-inline: auto;
  color: var(--camel-texte);
  font-size: 1.06rem;
}
/* Les blocs courts (ateliers) restent centrés : deux phrases et un bouton */
.texte-studio.texte-centre { text-align: center; max-width: 58ch; }
.texte-studio p + p { margin-top: 1.1rem; }
.texte-studio .btn { margin-top: 1.4rem; color: var(--sur-rose); }

.carousel {
  margin-top: 3rem;
  overflow: hidden;
  -webkit-mask-image: linear-gradient(90deg, transparent, #000 6%, #000 94%, transparent);
          mask-image: linear-gradient(90deg, transparent, #000 6%, #000 94%, transparent);
  /* Le bandeau prend les gestes horizontaux pour régler sa vitesse,
     et laisse au navigateur le défilement vertical de la page. */
  touch-action: pan-y;
  cursor: grab;
}
.carousel--saisi { cursor: grabbing; }
.carousel-track {
  display: flex;
  /* L'animation translate la piste de -50 %. Pour que la boucle soit
     sans couture, cette moitié doit tomber exactement sur la première
     copie. Or six photos ne comptent que cinq espaces entre elles :
     la moitié tombait un demi-espace trop tôt et le bandeau sautait
     de 10 px à chaque tour. L'espace ajouté à la fin rétablit le
     compte — six photos, six espaces, moitié juste. */
  --carousel-gap: 1.2rem;
  gap: var(--carousel-gap);
  padding-inline-end: var(--carousel-gap);
  width: max-content;
  animation: defile 42s linear infinite;
  /* Le geste ne doit pas sélectionner les images au passage. */
  user-select: none;
  -webkit-user-select: none;
}
.carousel-track img { -webkit-user-drag: none; }
/* La pause au survol ne vaut que là où l'on survole vraiment. Sur un
   écran tactile, un appui laisse l'état « :hover » collé jusqu'au
   prochain appui ailleurs : le bandeau serait resté figé après le
   premier contact, soit exactement ce qu'on cherche à éviter. */
@media (hover: hover) and (pointer: fine) {
  .carousel:hover .carousel-track { animation-play-state: paused; }
  /* Pendant que le visiteur pousse le bandeau, la pause au survol
     céderait le pas au geste : elle est neutralisée le temps du mouvement. */
  .carousel--manuel:hover .carousel-track { animation-play-state: running; }
}
/* La pause au clavier reste valable partout : elle vient d'un focus,
   jamais d'un survol fantôme. */
.carousel:focus-within .carousel-track { animation-play-state: paused; }
.carousel--manuel:focus-within .carousel-track { animation-play-state: running; }
.carousel-track li { flex: none; }
.carousel-track img {
  width: clamp(240px, 30vw, 400px);
  /* height:auto est indispensable : sans lui, l'attribut height du HTML
     s'applique comme hauteur CSS et « aspect-ratio » reste sans effet. */
  height: auto;
  aspect-ratio: 4 / 3;
  object-fit: cover;
  border-radius: var(--radius);
  box-shadow: var(--shadow-sm);
}

/* =============================================================
   10. CONSTANCE
   ============================================================= */
.histoire-grid {
  display: grid;
  grid-template-columns: .85fr 1.15fr;
  gap: clamp(2rem, 5vw, 3.5rem);
  align-items: start;
}
.histoire-text { color: var(--camel-texte); }
.histoire-text p + p { margin-top: 1rem; }
.histoire-text .phrase-forte {
  font-family: 'Fredoka', sans-serif;
  font-weight: 700;
  font-size: 1.25rem;
  color: var(--rose-titre);
}

.img-frame {
  position: relative;
  width: 100%;
  aspect-ratio: 3 / 4;
  border-radius: var(--radius);
  overflow: hidden;
  box-shadow: var(--shadow-md);
  background: var(--brand-beige-2);
}
.img-frame img { width: 100%; height: 100%; object-fit: cover; }
.img-frame.tall  { aspect-ratio: 3 / 4.2; }
.img-frame.round { aspect-ratio: 1; border-radius: 50%; }

.inline-social {
  display: inline-flex;
  align-items: center;
  gap: .5rem;
  margin-top: 1.6rem;
  padding: .55rem 1.1rem;
  border: 1.5px solid var(--border-strong);
  border-radius: 999px;
  font-size: .9rem;
  font-weight: 600;
  color: var(--rose-texte);
  transition: background var(--dur) ease, border-color var(--dur) ease, transform var(--dur) var(--ease);
}
.inline-social:hover {
  background: var(--rose-soft);
  border-color: var(--rose-texte);
  transform: translateY(-2px);
}
.inline-social .ico { width: 18px; height: 18px; }

/* =============================================================
   11. LES COURS
   ============================================================= */
.filters {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: .7rem 1rem;
  justify-content: center;
  margin-bottom: .8rem;
}
.filters-label { font-size: .85rem; font-weight: 600; color: var(--camel-texte); }
.filters-chips { display: flex; flex-wrap: wrap; gap: .5rem; justify-content: center; }

.chip {
  min-height: 40px;
  padding: .45rem 1.15rem;
  border-radius: 999px;
  border: 1.5px solid var(--border-strong);
  background: var(--surface);
  color: var(--camel-texte);
  font-family: 'Fredoka', sans-serif;
  font-size: .88rem;
  font-weight: 500;
  transition: background var(--dur) ease, color var(--dur) ease,
              border-color var(--dur) ease, transform var(--dur) var(--ease);
}
.chip:hover { border-color: var(--rose-texte); color: var(--rose-texte); transform: translateY(-2px); }
.chip[aria-pressed='true'] {
  background: var(--rose-surface);
  border-color: var(--rose-surface);
  color: var(--sur-rose);
  font-weight: 600;
}

/* Le décompte n'est plus affiché, mais reste annoncé aux lecteurs d'écran
   (classe .sr-only dans le HTML) : sans lui, le filtrage serait silencieux
   pour qui ne voit pas les cartes disparaître. */
.filters { margin-bottom: 2.2rem; }
.courses-empty { text-align: center; color: var(--camel-texte); padding: 2.5rem 1rem; }

.course-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(min(100%, 260px), 1fr));
  gap: 1.4rem;
}
.course-card {
  background: var(--surface);
  border-radius: var(--radius-sm);
  padding: 1.6rem;
  box-shadow: var(--shadow-sm);
  border: 1px solid var(--border);
  border-top: 4px solid var(--brand-rose);
  transition: transform var(--dur-lg) var(--ease), box-shadow var(--dur-lg) var(--ease);
}
.course-card.c-ochre { border-top-color: var(--brand-camel); }
/* Feldenkrais n'est ni du Pilates ni du yoga : filet distinct */
.course-card.c-feldenkrais { border-top-color: var(--brand-beige-2); }
.course-card:hover { transform: translateY(-6px); box-shadow: var(--shadow-md); }
/* Graisse 700 : à 20,8 px le texte devient « grand caractère » au sens
   WCAG (seuil 3:1) ; mesuré à 3,82:1. En graisse 600 il fallait 4,5:1. */
.course-card h3 { margin-bottom: .6rem; color: var(--rose-titre); font-weight: 700; }
.course-card h3 small {
  display: block;
  font-family: 'Jost', sans-serif;
  font-size: .78rem;
  font-weight: 500;
  color: var(--text-muted);
}
.course-card.c-ochre h3,
.course-card.c-feldenkrais h3 { color: var(--camel-texte); }
.course-card { display: flex; flex-direction: column; }
.course-card p { color: var(--text-muted); font-size: .95rem; }
.course-card p strong { color: var(--camel-texte); font-weight: 600; }
/* Chaque cours mène au planning : sans ce lien, la carte est une impasse. */
.course-link {
  display: inline-flex;
  align-items: center;
  gap: .4rem;
  align-self: flex-start;
  margin-top: auto;
  padding-top: 1.1rem;
  min-height: 32px;
  font-family: 'Fredoka', sans-serif;
  font-size: .88rem;
  font-weight: 600;
  color: var(--rose-texte);
  transition: gap var(--dur) var(--ease), color var(--dur) ease;
}
.course-link:hover { color: var(--rose-hover); gap: .7rem; }
.course-link .ico { width: 16px; height: 16px; }

/* =============================================================
   13. L'ÉQUIPE
   ============================================================= */
.team-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(min(100%, 250px), 1fr));
  gap: 2.4rem 1.6rem;
  align-items: start;
}
.team-card { text-align: center; }
.team-photo {
  width: 170px;
  max-width: 100%;
  margin: 0 auto 1.1rem;
  box-shadow: var(--shadow-sm);
}
.team-photo::after { font-size: .62rem; padding: .25rem .6rem; }
/* Spécificité renforcée : .img-placeholder déclare width:100% plus loin dans
   le fichier et l'emportait, si bien que les cadres provisoires s'affichaient
   plus grands que les vraies photos et décalaient la grille. */
.team-card .team-photo { width: 170px; }
/* Graisse 700 : à 21,6 px le prénom devient « grand caractère » (seuil 3:1),
   mesuré à 3,45:1 sur le beige. En graisse 600 il aurait fallu 4,5:1. */
.team-card h3 { font-size: 1.35rem; font-weight: 700; margin-bottom: .9rem; color: var(--rose-titre); }
.team-role {
  font-size: .78rem;
  font-weight: 600;
  letter-spacing: .08em;
  text-transform: uppercase;
  color: var(--camel-texte);
  margin-bottom: .9rem;
}

.team-toggle {
  display: inline-flex;
  align-items: center;
  gap: .4rem;
  min-height: 40px;
  padding: .4rem 1rem;
  border-radius: 999px;
  border: 1.5px solid var(--border-strong);
  color: var(--rose-texte);
  font-size: .85rem;
  font-weight: 600;
  transition: background var(--dur) ease, border-color var(--dur) ease;
}
.team-toggle:hover { background: var(--rose-soft); border-color: var(--rose-texte); }
.team-toggle .ico { width: 16px; height: 16px; transition: transform var(--dur) var(--ease); }
.team-toggle[aria-expanded='true'] .ico { transform: rotate(180deg); }

.team-bio {
  overflow: hidden;
  transition: height var(--dur) var(--ease);
  text-align: left;
  color: var(--text-muted);
  font-size: .92rem;
}
.team-bio > p:first-child { padding-top: 1rem; }
.team-bio p + p { margin-top: .7rem; }

/* --- Fiche d'intervenante en fenêtre modale --- */
.team-dialog {
  /* margin:auto est indispensable : le reset « * { margin: 0 } » annule le
     centrage natif du <dialog>, qui se colle alors en haut à gauche. */
  margin: auto;
  width: min(560px, calc(100vw - 2.5rem));
  max-height: min(86vh, 780px);
  padding: 0;
  border: none;
  border-radius: var(--radius);
  background: var(--surface);
  color: var(--text);
  box-shadow: var(--shadow-lg);
  overflow: auto;
  overscroll-behavior: contain;
}
.team-dialog::backdrop { background: rgba(48, 31, 20, .55); }
.team-dialog > * { padding-inline: clamp(1.4rem, 4vw, 2.2rem); }
.team-dialog-media { padding-top: 2rem; }
.team-dialog-media .team-photo { width: 130px; margin: 0 auto; }
.team-dialog h2 {
  font-family: 'Fredoka', sans-serif;
  font-weight: 700;
  font-size: 1.7rem;
  color: var(--rose-titre);
  text-align: center;
  margin: 1rem 0 .2rem;
}
.team-dialog-texte {
  padding-bottom: 2rem;
  color: var(--text-muted);
  font-size: .96rem;
}
.team-dialog-texte p { padding-top: 0; }
.team-dialog-texte p + p { margin-top: .8rem; }

.team-dialog-close {
  position: sticky;
  top: .6rem;
  z-index: 2;
  float: right;
  margin: .6rem .6rem -2.6rem 0;
  width: 40px; height: 40px;
  display: grid; place-items: center;
  border-radius: 50%;
  background: var(--surface-2);
  color: var(--camel-texte);
  padding: 0 !important;
}
.team-dialog-close:hover { background: var(--rose-soft); color: var(--rose-texte); }
.team-dialog-close .ico { width: 18px; height: 18px; }

/* Cadres provisoires, pour les portraits manquants */
.img-placeholder {
  position: relative;
  width: 100%;
  aspect-ratio: 1;
  border-radius: 50%;
  background: var(--brand-beige-2);
  background:
    linear-gradient(135deg, rgba(242, 153, 160, .28), rgba(175, 113, 19, .22)),
    var(--brand-beige-2);
  box-shadow: var(--shadow-sm);
  overflow: hidden;
  display: grid;
  place-items: center;
}
.img-placeholder::before {
  content: '';
  position: absolute; inset: 0;
  background: var(--stripes);
  opacity: .13;
}
.img-placeholder::after {
  content: attr(data-label);
  position: relative;
  font-size: .7rem;
  letter-spacing: .12em;
  text-transform: uppercase;
  color: var(--camel-fort);
  background: rgba(255, 255, 255, .82);
  padding: .3rem .7rem;
  border-radius: 999px;
}

/* =============================================================
   14. TARIFS & RÉSERVATION (widgets Eversports)
   ============================================================= */
/* Conteneur neutre : le widget vit dans un shadow DOM, isolé de cette
   feuille de style, et apporte sa propre mise en forme. Pas d'overflow
   caché ici, qui rognerait ses calendriers et menus déroulants. */
.eversports-embed { min-height: 320px; }
.eversports-planning { min-height: 520px; }
.eversports-embed iframe { width: 100%; border: 0; display: block; }

/* Le module de tarifs mesure 1800 px de haut. « zoom » traverse le shadow DOM
   et provoque un vrai reflux (plus de cartes par ligne). Pas de réduction sur
   téléphone, où le texte deviendrait trop petit. */
@media (min-width: 900px) {
  .eversports-tarifs { zoom: .85; }
}

.embed-fallback,
.embed-note {
  padding: 2.5rem 1.5rem;
  text-align: center;
  color: var(--text-muted);
  background: var(--surface-2);
  border: 1px dashed var(--border-strong);
  border-radius: var(--radius);
}
.booking-help { text-align: center; font-size: .95rem; margin-top: 1.6rem; color: var(--camel-texte); }

/* =============================================================
   15. FAQ
   ============================================================= */
.faq-list { max-width: 820px; margin-inline: auto; display: grid; gap: 2.2rem; }
/* Seize questions d'affilée seraient illisibles : on les range par thème. */
.faq-groupe { display: grid; gap: .8rem; }
.faq-groupe-titre {
  font-family: 'Fredoka', sans-serif;
  font-size: 1.15rem;
  font-weight: 700;
  color: var(--camel-texte);
  margin-bottom: .1rem;
  padding-bottom: .5rem;
  border-bottom: 1px solid var(--border);
}
.faq-item {
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: var(--radius-sm);
  overflow: hidden;
}
.faq-item:has(.faq-q[aria-expanded='true']) { border-color: var(--rose-texte); box-shadow: var(--shadow-sm); }
.faq-item h4 { font-size: inherit; font-weight: inherit; margin: 0; }
.faq-q {
  width: 100%;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 1rem;
  text-align: left;
  padding: 1.15rem 1.3rem;
  font-family: 'Fredoka', sans-serif;
  font-size: 1.05rem;
  font-weight: 500;
  color: var(--text);
  min-height: 56px;
  transition: background var(--dur) ease, color var(--dur) ease;
}
.faq-q:hover { background: var(--surface-2); color: var(--rose-texte); }
.faq-chevron { width: 20px; height: 20px; color: var(--rose-texte); transition: transform var(--dur) var(--ease); }
.faq-q[aria-expanded='true'] .faq-chevron { transform: rotate(180deg); }
.faq-a {
  padding: 0 1.3rem 1.3rem;
  color: var(--text-muted);
  overflow: hidden;
  transition: height var(--dur) var(--ease);
}
.faq-a p + p { margin-top: .7rem; }

/* =============================================================
   16. CONTACT
   ============================================================= */
.contact-grid {
  display: grid;
  grid-template-columns: .8fr 1.2fr;
  gap: clamp(2rem, 4vw, 3.5rem);
  align-items: start;
}
.info-list { display: grid; gap: 1.6rem; }
.info-list li { display: flex; gap: 1rem; }
.info-ico {
  flex: none;
  width: 44px; height: 44px;
  border-radius: 14px;
  display: grid; place-items: center;
  background: var(--rose-soft);
  color: var(--rose-texte);
}
.info-ico .ico { width: 21px; height: 21px; }
.info-list h3 { font-size: 1.05rem; margin-bottom: .25rem; }
.info-list p { color: var(--camel-texte); font-size: .95rem; }
.info-list a { text-decoration: underline; text-underline-offset: .2em; }
.info-list a:hover { color: var(--rose-texte); }

.contact-form-wrap {
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  padding: clamp(1.5rem, 3vw, 2.2rem);
  box-shadow: var(--shadow-sm);
}
.form-intro { font-size: .85rem; color: var(--text-muted); margin-bottom: 1.4rem; }
.req { color: var(--danger); text-decoration: none; font-weight: 700; }

.field { margin-bottom: 1.15rem; }
.field label { display: block; font-size: .9rem; font-weight: 600; margin-bottom: .4rem; }
.field input,
.field select,
.field textarea {
  width: 100%;
  min-height: 48px;
  padding: .75rem .95rem;
  border-radius: var(--radius-xs);
  border: 1.5px solid var(--border-strong);
  background: var(--bg);
  color: var(--text);
  transition: border-color var(--dur) ease, box-shadow var(--dur) ease;
}
.field textarea { min-height: 120px; resize: vertical; line-height: 1.6; }
.field select { cursor: pointer; }
.field input:hover, .field select:hover, .field textarea:hover { border-color: var(--rose-texte); }
.field input:focus-visible,
.field select:focus-visible,
.field textarea:focus-visible {
  outline: none;
  border-color: var(--rose-texte);
  box-shadow: 0 0 0 4px rgba(176, 80, 93, .3);
}
.field-hint { font-size: .8rem; color: var(--text-muted); margin-top: .35rem; }
.field-error { font-size: .84rem; font-weight: 500; color: var(--danger); margin-top: .35rem; display: none; }
.field.has-error .field-error { display: block; }
.field.has-error input,
.field.has-error textarea,
.field.has-error select { border-color: var(--danger); background: var(--danger-soft); }

.hp-field { position: absolute; left: -9999px; width: 1px; height: 1px; overflow: hidden; }

.form-feedback { margin-top: 1rem; font-size: .92rem; font-weight: 500; border-radius: var(--radius-xs); }
.form-feedback:not(:empty) { padding: .8rem 1rem; }
.form-feedback.is-ok { background: var(--rose-soft); color: var(--rose-texte); }
.form-feedback.is-error { background: var(--danger-soft); color: var(--danger); }

/* =============================================================
   17. AVIS
   ============================================================= */
.avis-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(min(100%, 250px), 1fr));
  gap: 1.1rem;
}
/* Accueil : trois avis seulement. « auto-fill » réservait des colonnes
   vides à droite et tassait les cartes vers la gauche ; « auto-fit »
   les fait replier, si bien que les trois cartes se répartissent sur
   toute la largeur. La largeur est bornée puis recentrée pour que le
   bloc reste aligné sur le titre de section.
   Le texte des témoignages, lui, reste ferré à gauche : centrer des
   paragraphes de plusieurs lignes rend la lecture nettement plus dure. */
.avis-grid[data-avis-aleatoires] {
  /* Sous 900 px, une seule colonne. En deçà, la grille automatique
     n'en tenait que deux et la troisième carte retombait seule à
     gauche, ce qui rompait précisément le centrage recherché. */
  grid-template-columns: 1fr;
  max-width: 1080px;
  margin-inline: auto;
}
@media (min-width: 900px) {
  .avis-grid[data-avis-aleatoires] {
    grid-template-columns: repeat(auto-fit, minmax(min(100%, 250px), 1fr));
  }
}
.avis-card {
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: var(--radius-sm);
  padding: 1.3rem 1.4rem;
  box-shadow: var(--shadow-sm);
  display: flex;
  flex-direction: column;
  gap: .6rem;
}
.avis-card .quote-ico { width: 22px; height: 22px; color: var(--rose-texte); opacity: .5; }
/* Les étoiles sont décoratives : la note est donnée en toutes lettres
   juste avant, pour les lecteurs d'écran. */
.avis-note { color: var(--camel-texte); }
/* Le span porteur des étoiles doit être flex : sans cela, la règle globale
   « svg { display: block } » empile les cinq étoiles verticalement. */
.avis-note > [aria-hidden] { display: flex; gap: .12rem; }
.avis-note .ico { width: 15px; height: 15px; }
.avis-card blockquote { font-size: .98rem; line-height: 1.55; color: var(--text); }
.avis-author { margin-top: auto; font-size: .84rem; font-weight: 600; color: var(--rose-texte); }
.avis-author span { color: var(--text-muted); font-weight: 400; }

/* Invitation à déposer un avis Google, sous la liste des témoignages */
.avis-cta { text-align: center; margin-top: 2.6rem; }
.avis-cta > p:first-child { color: var(--camel-texte); margin-bottom: 1.1rem; max-width: 46ch; margin-inline: auto; }
.avis-cta > p:last-child { margin-top: 1rem; font-size: .9rem; }

/* =============================================================
   18. PIED DE PAGE
   ============================================================= */
.site-footer {
  position: relative;
  background: var(--camel-band);
  color: var(--on-camel-soft);
  padding-top: 3.5rem;
  overflow: hidden;
}
/* Bandeau rayé festonné, écho de celui qui referme le visuel d'accueil :
   la page s'ouvre et se referme sur le même geste. */
.footer-stripes {
  position: absolute;
  top: 0; left: 0; right: 0;
  height: 12px;
  background: var(--stripes-footer);
}
.footer-stripes::after {
  content: '';
  position: absolute;
  top: 100%; left: 0; right: 0;
  height: 18px;
  background: var(--stripes-footer);
  -webkit-mask-image: radial-gradient(circle at 18px 0, #000 0 17px, transparent 18px);
          mask-image: radial-gradient(circle at 18px 0, #000 0 17px, transparent 18px);
  -webkit-mask-size: 36px 18px;  mask-size: 36px 18px;
  -webkit-mask-repeat: repeat-x; mask-repeat: repeat-x;
}
.footer-grid {
  display: grid;
  grid-template-columns: 1.5fr 1fr 1fr 1fr;
  gap: 2rem;
  padding-bottom: 2.5rem;
}
.footer-logo { height: 50px; width: auto; margin-bottom: .4rem; }
.footer-brand p { color: var(--on-camel-soft); margin: .8rem 0 1.2rem; max-width: 34ch; font-size: .95rem; }

.socials { display: flex; flex-wrap: wrap; gap: .5rem; }
.socials a {
  display: inline-flex;
  align-items: center;
  gap: .5rem;
  min-height: 40px;
  padding: .4rem .9rem;
  border-radius: 999px;
  border: 1px solid rgba(255, 255, 255, .22);
  color: var(--on-camel);
  font-size: .86rem;
  font-weight: 500;
}
.socials a:hover { background: rgba(255, 255, 255, .16); border-color: var(--on-camel); }
.socials .ico { width: 18px; height: 18px; }

.footer-col h2 {
  color: var(--on-camel);
  font-family: 'Fredoka', sans-serif;
  font-size: .82rem;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: .14em;
  margin-bottom: 1rem;
}
.footer-col p { color: var(--on-camel-soft); font-size: .95rem; line-height: 1.9; }
.footer-col a { text-decoration: underline; text-underline-offset: .2em; }
.footer-col a:hover { color: var(--on-camel); }
.footer-col .btn { margin-top: 1.2rem; text-decoration: none; }
.footer-links { display: grid; gap: .2rem; font-size: .95rem; }
.footer-links a { display: inline-block; padding: .35rem 0; }
.footer-links a { color: var(--on-camel-soft); text-decoration: none; }
.footer-links a:hover { color: var(--on-camel); text-decoration: underline; text-underline-offset: .2em; }

.site-footer .btn-primary { box-shadow: none; }
.site-footer :focus-visible { outline-color: var(--on-camel); }

.footer-bottom { border-top: 1px solid rgba(255, 255, 255, .16); padding: 1.3rem 0; }
.footer-bottom .container {
  display: flex;
  justify-content: space-between;
  gap: 1rem;
  flex-wrap: wrap;
  font-size: .82rem;
  /* #e2c9a2 ne donnait que 4,25:1 sur le camel ; celui-ci atteint 5,0:1 */
  color: var(--on-camel-soft);
}
.footer-bottom .legal { max-width: 56ch; text-align: right; }

/* =============================================================
   19. ÉLÉMENTS FLOTTANTS
   ============================================================= */
.mobile-bar {
  position: fixed;
  left: 0; right: 0; bottom: 0;
  z-index: 80;
  display: none;
  gap: .6rem;
  padding: .7rem .9rem calc(.7rem + env(safe-area-inset-bottom));
  background: var(--bg);
  border-top: 1px solid var(--border);
  transform: translateY(110%);
  visibility: hidden;
  transition: transform var(--dur) var(--ease), visibility 0s linear var(--dur);
}
.mobile-bar.show {
  transform: translateY(0);
  visibility: visible;
  transition: transform var(--dur) var(--ease), visibility 0s linear 0s;
}
.mobile-bar .btn { flex: 1; min-height: 50px; padding-inline: 1rem; }
.mobile-bar-call { flex: 0 0 auto !important; width: 56px; padding-inline: 0 !important; }
.mobile-bar-call span { display: none; }

.to-top {
  position: fixed;
  right: 1.2rem; bottom: 1.2rem;
  z-index: 70;
  width: 48px; height: 48px;
  display: grid; place-items: center;
  border-radius: 50%;
  background: var(--surface);
  color: var(--rose-texte);
  border: 1px solid var(--border-strong);
  box-shadow: var(--shadow-md);
  opacity: 0;
  visibility: hidden;
  transform: translateY(12px);
  transition: opacity var(--dur) ease, transform var(--dur) var(--ease),
              background var(--dur) ease, visibility 0s linear var(--dur);
}
.to-top.show {
  opacity: 1; visibility: visible; transform: translateY(0);
  transition: opacity var(--dur) ease, transform var(--dur) var(--ease),
              background var(--dur) ease, visibility 0s linear 0s;
}
.to-top:hover { background: var(--rose-surface); color: var(--sur-rose); }
.to-top .ico { width: 22px; height: 22px; }

/* =============================================================
   20. ANIMATIONS
   ============================================================= */
@keyframes defile { to { transform: translateX(-50%); } }

/* Le masquage initial n'a lieu que si JavaScript est actif : sans lui,
   tout le contenu reste lisible. */
.js .reveal {
  opacity: 0;
  transform: translateY(24px);
  transition: opacity var(--dur-lg) var(--ease), transform var(--dur-lg) var(--ease);
}
.js .reveal.visible { opacity: 1; transform: none; }

.course-grid .reveal:nth-child(2), .team-grid .reveal:nth-child(2),
.avis-grid .reveal:nth-child(2) { transition-delay: .07s; }
.course-grid .reveal:nth-child(3), .team-grid .reveal:nth-child(3),
.avis-grid .reveal:nth-child(3) { transition-delay: .14s; }
.course-grid .reveal:nth-child(4), .team-grid .reveal:nth-child(4) { transition-delay: .21s; }

@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  *, *::before, *::after {
    animation-duration: .01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: .01ms !important;
    scroll-behavior: auto !important;
  }
  .js .reveal { opacity: 1; transform: none; }
  .btn:hover, .course-card:hover, .chip:hover, .socials a:hover { transform: none; }
}

/* =============================================================
   21. RESPONSIVE
   ============================================================= */
@media (max-width: 1040px) {
  .main-nav ul { gap: 1.1rem; }
  .main-nav a { font-size: .9rem; }
}

@media (max-width: 1150px) {
  .nav-cta { display: none; }
  .burger { display: grid; place-items: center; width: 44px; height: 44px; border-radius: 50%; }

  .main-nav {
    position: fixed;
    top: calc(var(--header-h) + var(--announce-h));
    left: 0; right: 0;
    z-index: 95;
    background: var(--bg);
    box-shadow: var(--shadow-lg);
    border-bottom: 1px solid var(--border);
    padding: .5rem 1.25rem 1.5rem;
    max-height: calc(100vh - var(--header-h) - var(--announce-h));
    max-height: calc(100dvh - var(--header-h) - var(--announce-h));
    overflow-y: auto;
    overscroll-behavior: contain;
    visibility: hidden;
    opacity: 0;
    transform: translateY(-10px);
    transition: opacity var(--dur) ease, transform var(--dur) var(--ease), visibility 0s linear var(--dur);
  }
  .site-header.menu-open .main-nav {
    visibility: visible;
    opacity: 1;
    transform: translateY(0);
    transition: opacity var(--dur) ease, transform var(--dur) var(--ease), visibility 0s linear 0s;
  }
  /* Chaque entrée est une pastille identique : même forme, même retour au
     toucher. La page courante se distingue par son fond rose, jamais par un
     contour — un contour se confond avec la bague de focus du navigateur. */
  .main-nav ul { flex-direction: column; align-items: stretch; gap: .15rem; }
  .main-nav li { border-bottom: none; }
  .main-nav a:not(.btn) {
    display: flex;
    align-items: center;
    padding: .95rem 1rem;
    min-height: 52px;
    font-size: 1.05rem;
    border-radius: var(--radius-sm);
    transition: background-color var(--dur) ease, color var(--dur) ease;
  }
  .main-nav a::after { display: none; }
  .main-nav a:not(.btn):hover,
  .main-nav a:not(.btn):active { background: var(--surface-2); }
  .main-nav a[aria-current] {
    background: var(--rose-soft);
    color: var(--rose-hover);
    font-weight: 600;
  }

  .nav-mobile-cta { display: flex; justify-content: center; margin-top: 1.4rem; }
  /* Bouton centré, largeur ajustée au texte : il se lit comme un bouton,
     pas comme une bande. */
  .nav-mobile-cta a.btn-block { width: auto; min-width: 12rem; padding: .9rem 2.2rem; }

  .histoire-grid,
  .contact-grid { grid-template-columns: 1fr; }
  .histoire-visual { max-width: 420px; margin-inline: auto; }
  .footer-grid { grid-template-columns: 1fr 1fr; }

  .mobile-bar { display: flex; }
  body { padding-bottom: 76px; }
  .to-top { bottom: calc(76px + env(safe-area-inset-bottom)); }
}

@media (max-width: 600px) {
  :root { --section-pad: 3rem; }
  .container { width: min(100% - 2rem, var(--maxw)); }
  .brand-logo { height: 34px; }
  .announce-track { font-size: .8rem; gap: 1.8rem; }
  .hero-logo { width: min(66vw, 300px); }
  .hero-slogan { max-width: 16ch; }
  .footer-grid { grid-template-columns: 1fr; gap: 1.8rem; }
  .footer-bottom .container { flex-direction: column; text-align: center; }
  .footer-bottom .legal { text-align: center; }
  .team-card .team-photo { width: 150px; }
}

/* =============================================================
   22. IMPRESSION
   ============================================================= */
@media print {
  .site-header, .announce, .mobile-bar, .to-top, .skip-link,
  .nav-overlay, .carousel, .contact-form-wrap, .eversports-embed,
  .hero-veil, .scallop { display: none !important; }
  body { background: #fff; color: #000; padding: 0; }
  .section { padding: 1.5rem 0; break-inside: avoid; }
  .js .reveal { opacity: 1 !important; transform: none !important; }
  .faq-a, .team-bio, .atelier-detail { display: block !important; height: auto !important; }
  .course-card, .avis-card { box-shadow: none; border: 1px solid #ccc; break-inside: avoid; }
}

/* --- Vidéo de présentation --- */
.video-figure { max-width: 720px; margin: 0 auto; }
.video-figure video {
  display: block;
  width: 100%;
  height: auto;
  /* La source ne fait que 640 px de large : au-delà, l'image se dégraderait. */
  aspect-ratio: 16 / 9;
  background: #22303f;
  border-radius: var(--radius);
  box-shadow: var(--shadow-md);
}
.video-figure figcaption {
  margin-top: .8rem;
  text-align: center;
  font-size: .9rem;
  color: var(--text-muted);
}

/* --- Fiches d'atelier --- */
.ateliers-liste { display: grid; gap: 2rem; max-width: 980px; margin-inline: auto; }
.atelier-card {
  display: grid;
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  overflow: hidden;
  box-shadow: var(--shadow-sm);
}
@media (min-width: 760px) {
  .atelier-card { grid-template-columns: 300px 1fr; align-items: start; }
}
/* La photo est montrée ENTIÈRE : object-fit "contain" et non "cover".
   Les cinq visuels n'ont pas le même rapport (carré, 3/4, 2/3) ; un
   recadrage commun coupait les sujets. Le fond beige comble le reste. */
.atelier-visuel {
  background: var(--brand-beige-2);
  display: grid;
  place-items: center;
  padding: .9rem;
}
/* La photo reste en haut : étirée sur toute la hauteur, elle laissait une
   large plage beige vide dès qu'une fiche était dépliée. */
@media (min-width: 760px) {
  .atelier-visuel { align-self: start; }
}
.atelier-photo {
  width: 100%;
  height: auto;
  max-height: 340px;
  object-fit: contain;
  border-radius: var(--radius-sm);
}
.atelier-corps { padding: 1.6rem 1.7rem 1.5rem; }
.atelier-card h3 {
  font-family: 'Fredoka', sans-serif;
  font-size: 1.3rem;
  font-weight: 700;
  color: var(--rose-texte);
  margin-bottom: .35rem;
}
.atelier-accroche {
  font-family: 'Fredoka', sans-serif;
  font-size: 1rem;
  font-weight: 500;
  color: var(--camel-texte);
  margin-bottom: .7rem;
}
.atelier-resume { color: var(--text-muted); font-size: .96rem; margin-bottom: .9rem; }
.atelier-corps p { color: var(--text-muted); font-size: .95rem; margin-bottom: .8rem; }
.atelier-corps strong { color: var(--text); font-weight: 600; }

/* Bouton de dépliage : discret, sur le modèle de la FAQ */
.atelier-toggle {
  display: inline-flex;
  align-items: center;
  gap: .45rem;
  min-height: 40px;
  padding: .4rem .9rem;
  border: 1px solid var(--border-strong);
  border-radius: 999px;
  font-family: 'Fredoka', sans-serif;
  font-size: .88rem;
  font-weight: 600;
  color: var(--camel-texte);
  transition: background-color var(--dur) ease, color var(--dur) ease;
}
.atelier-toggle:hover { background: var(--surface-2); color: var(--rose-texte); }
.atelier-toggle .faq-chevron { width: 16px; height: 16px; }

.atelier-detail {
  overflow: hidden;
  transition: height var(--dur) var(--ease);
  padding-top: 1rem;
}
.atelier-prog-titre {
  font-family: 'Fredoka', sans-serif;
  font-weight: 600;
  color: var(--camel-texte);
  margin-top: 1.1rem;
  margin-bottom: .4rem !important;
}
.atelier-livret { font-size: .87rem !important; font-style: italic; }
.atelier-corps .course-link { margin-top: .9rem; }

/* --- Fiches de prestation (massages et soins) --- */
.presta-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
  gap: 1.4rem;
}
.presta-card {
  display: flex;
  flex-direction: column;
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  /* overflow caché : la photo doit épouser l'arrondi de la carte */
  overflow: hidden;
  box-shadow: var(--shadow-sm);
  transition: transform var(--dur) var(--ease), box-shadow var(--dur) var(--ease);
}
.presta-card:hover { transform: translateY(-4px); box-shadow: var(--shadow-md); }
.presta-photo {
  width: 100%;
  aspect-ratio: 4 / 3;
  height: auto;
  object-fit: cover;
  background: var(--surface-2);
}
.presta-corps {
  display: flex;
  flex-direction: column;
  flex: 1;
  padding: 1.4rem 1.5rem 1.4rem;
  border-top: 4px solid var(--brand-rose);
}
.presta-card h3 {
  font-size: 1.15rem;
  font-weight: 700;
  /* rose-titre ne donnait que 3,82:1 à cette taille (18,4 px, sous le
     seuil des grands caractères). Celui-ci atteint 5,0:1. */
  color: var(--rose-texte);
  margin-bottom: .5rem;
}
/* Durée et prix : la première chose que l'on cherche sur ce type de fiche */
.presta-meta { display: flex; flex-wrap: wrap; gap: .5rem; margin-bottom: .9rem; }
.presta-meta span {
  font-family: 'Fredoka', sans-serif;
  font-size: .82rem;
  font-weight: 600;
  padding: .25rem .7rem;
  border-radius: 999px;
}
.presta-duree { background: var(--surface-2); color: var(--camel-fort); }
.presta-prix  { background: var(--rose-soft); color: var(--rose-hover); }
.presta-attente { background: var(--surface-2); color: var(--text-muted); font-style: italic; }
.presta-card p { color: var(--text-muted); font-size: .95rem; }
.presta-card .course-link { margin-top: auto; }

/* =============================================================
   22 bis. BLOCS EXPLICATIFS DES DISCIPLINES
   ============================================================= */
.texte-discipline {
  max-width: 66ch;
  margin-inline: auto;
  color: var(--text-muted);
  font-size: 1.02rem;
}
.texte-discipline h2 {
  font-family: 'Fredoka', sans-serif;
  font-weight: 700;
  font-size: 1.35rem;
  color: var(--camel-texte);
  margin: 2rem 0 .6rem;
}
.texte-discipline h2:first-child { margin-top: .6rem; }
.texte-discipline p { margin-bottom: .9rem; }
.texte-discipline strong { color: var(--text); font-weight: 600; }
.texte-discipline sup { font-size: .7em; }

/* Repères pour choisir un style de yoga */
.liste-reperes { display: grid; gap: .6rem; margin: .4rem 0 1.2rem; }
.liste-reperes li { padding-left: 1.1rem; position: relative; line-height: 1.6; }
.liste-reperes li::before {
  content: '';
  position: absolute;
  left: 0; top: .62em;
  width: 6px; height: 6px;
  border-radius: 50%;
  background: var(--brand-rose);
}
.liste-reperes strong { color: var(--rose-texte); }

/* =============================================================   23. PAGES JURIDIQUES & LIENS DU PIED DE PAGE
   ============================================================= */
.footer-legal {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: .35rem 1.1rem;
  margin: .6rem 0 .5rem;
  font-size: .85rem;
}
.footer-legal a {
  color: var(--on-camel-soft);
  padding: .3rem 0;
  border-bottom: 1px solid transparent;
}
.footer-legal a:hover { color: var(--on-camel); border-bottom-color: currentColor; }

/* Documents juridiques : mesure courte, hiérarchie lisible */
.doc-legal {
  max-width: 68ch;
  margin-inline: auto;
  color: var(--text-muted);
  font-size: 1rem;
}
.doc-legal h2 {
  font-family: 'Fredoka', sans-serif;
  font-weight: 700;
  font-size: 1.3rem;
  color: var(--camel-texte);
  margin: 2.4rem 0 .7rem;
}
.doc-legal h3 {
  font-family: 'Jost', sans-serif;
  font-weight: 600;
  font-size: 1.02rem;
  color: var(--text);
  margin: 1.4rem 0 .3rem;
}
.doc-legal p { margin-bottom: .9rem; }
.doc-legal strong { color: var(--text); font-weight: 600; }

.doc-maj {
  font-size: .88rem;
  color: var(--camel-texte);
  padding-bottom: 1.2rem;
  border-bottom: 1px solid var(--border);
}

/* Fiche d'identité : libellé / valeur */
.doc-liste { display: grid; grid-template-columns: minmax(9rem, 14rem) 1fr; gap: .3rem 1.2rem; }
.doc-liste dt { font-weight: 600; color: var(--text); }
.doc-liste dd { margin: 0; }

.doc-tableau { overflow-x: auto; margin-bottom: 1rem; }
.doc-tableau table { border-collapse: collapse; width: 100%; min-width: 34rem; font-size: .93rem; }
.doc-tableau th, .doc-tableau td {
  text-align: left;
  padding: .6rem .8rem;
  border-bottom: 1px solid var(--border);
  vertical-align: top;
}
.doc-tableau th { color: var(--text); font-weight: 600; background: var(--surface-2); }

/* Point qui reste à compléter : visible sans être alarmant */
.doc-alerte {
  background: var(--rose-soft);
  border-left: 4px solid var(--rose-texte);
  border-radius: var(--radius-xs);
  padding: 1rem 1.2rem;
  margin: 1rem 0 1.4rem;
}
.doc-alerte p { margin: 0; }

/* Information RGPD, juste avant l'envoi du formulaire */
.form-rgpd {
  font-size: .84rem;
  color: var(--text-muted);
  margin-bottom: 1rem;
  padding-top: .3rem;
}

@media (max-width: 620px) {
  .doc-liste { grid-template-columns: 1fr; gap: 0 0; }
  .doc-liste dt { margin-top: .8rem; }
}