/* =========================================================
   OC MONTAUBAN BOXE FRANÇAISE — feuille de style
   Mode clair par défaut · mode sombre via .mode-dark sur <html>
   ========================================================= */

:root {
  /* mode clair (défaut) */
  --bg: #f2ede4;
  --bg-2: #e9e2d6;
  --surface: #fbf8f2;
  --ink: #12110f;
  --ink-dim: #5b564e;
  --ink-rgb: 18, 17, 15;
  --bg-rgb: 242, 237, 228;
  --line: rgba(var(--ink-rgb), .16);
  --red: #e8412f;
  --red-text: #b81f17;
  --photo-ink: #f1ece3;
  --dark: #0c0b0a;

  --gutter: clamp(16px, 4vw, 64px);
  --display: "Anton", "Bebas Neue", "Oswald", Impact, "Arial Narrow Bold", "Arial Narrow", sans-serif;
  --cond: "Barlow Condensed", "Arial Narrow", "Roboto Condensed", sans-serif;
  --body: "Barlow", "Helvetica Neue", Arial, system-ui, sans-serif;
  --ease-out: cubic-bezier(.16, 1, .3, 1);
  --ease-io: cubic-bezier(.76, 0, .24, 1);
  --nav-h: 76px;
  --cut: 12px;
  color-scheme: light;
}
.mode-dark {
  --bg: #0c0b0a;
  --bg-2: #151311;
  --surface: #1b1916;
  --ink: #efe9df;
  --ink-dim: #a8a197;
  --ink-rgb: 239, 233, 223;
  --bg-rgb: 12, 11, 10;
  --line: rgba(239, 233, 223, .16);
  --red-text: #ff5a47;
  color-scheme: dark;
}
/* section « papier » : toujours claire.
   `--surface` doit être redéfini ici aussi : en mode nuit il vaut #1b1916, et
   les barres + / − des boutons de la FAQ, dessinées avec, devenaient sombres
   sur un carré sombre — donc invisibles. */
.theme-paper {
  --bg: #fbf8f2;
  --surface: #fbf8f2;
  --ink: #12110f;
  --ink-dim: #57524a;
  --ink-rgb: 18, 17, 15;
  --bg-rgb: 251, 248, 242;
  --red-text: #b81f17;
  --line: rgba(18, 17, 15, .16);
}
.theme-red {
  --ink: #12110f;
  --ink-dim: #2b1411;
  --ink-rgb: 18, 17, 15;
  --line: rgba(18, 17, 15, .35);
  --red-text: #12110f;
}

*, *::before, *::after { box-sizing: border-box; }
html { -webkit-text-size-adjust: 100%; scroll-behavior: smooth; background: var(--bg); overflow-x: hidden; overflow-x: clip; }
@media (prefers-reduced-motion: reduce) { html { scroll-behavior: auto; } }
body {
  margin: 0;
  background: var(--bg);
  color: var(--ink);
  font: 400 1.0625rem/1.6 var(--body);
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-rendering: optimizeLegibility;
  overflow-x: clip;
  transition: background-color .5s var(--ease-out), color .5s var(--ease-out);
}
img, video { display: block; max-width: 100%; height: auto; }
a { color: inherit; }
button { font: inherit; color: inherit; background: none; border: 0; padding: 0; cursor: pointer; }
ul, ol { list-style: none; margin: 0; padding: 0; }
h1, h2, h3, p, figure, dl, dd { margin: 0; }
strong { font-weight: 600; }
::selection { background: var(--red); color: var(--dark); }
:focus-visible { outline: 3px solid var(--red-text); outline-offset: 4px; }
.theme-red :focus-visible { outline-color: var(--dark); }
[tabindex="-1"]:focus { outline: none; }

.sr-only {
  position: absolute !important; width: 1px; height: 1px; padding: 0; margin: -1px;
  overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0;
}
.skip {
  position: fixed; left: 16px; top: 12px; z-index: 200;
  background: var(--red); color: var(--dark); padding: .7rem 1rem;
  font: 400 1rem/1 var(--display); text-transform: uppercase; text-decoration: none;
  transform: translateY(-160%); transition: transform .3s var(--ease-out);
}
.skip:focus { transform: none; }
.wrap { padding-inline: var(--gutter); max-width: 1680px; margin-inline: auto; }

/* ---------- Typographie ---------- */
.display {
  font-family: var(--display); font-weight: 400; text-transform: uppercase;
  line-height: .88; letter-spacing: -.004em; font-kerning: normal;
}
.outline { color: transparent; -webkit-text-stroke: 1.5px currentColor; }
.line { display: block; overflow: hidden; padding: .14em 0 .04em; margin: -.14em 0 -.04em; }
.line > span { display: inline-block; will-change: transform; }

/* surtitre : trois cordes miniatures + texte condensé serré */
.kicker {
  display: inline-flex; align-items: center; gap: .7rem;
  font: 700 1rem/1.2 var(--cond); letter-spacing: .02em; text-transform: uppercase; color: var(--ink);
}
.kicker::before {
  content: ""; flex: none; width: 26px; height: 11px;
  background:
    linear-gradient(var(--red), var(--red)) 0 0 / 100% 2px no-repeat,
    linear-gradient(var(--ink), var(--ink)) 0 50% / 100% 2px no-repeat,
    linear-gradient(var(--red), var(--red)) 0 100% / 100% 2px no-repeat;
}
.theme-red .kicker::before {
  background:
    linear-gradient(var(--dark), var(--dark)) 0 0 / 100% 2px no-repeat,
    linear-gradient(var(--photo-ink), var(--photo-ink)) 0 50% / 100% 2px no-repeat,
    linear-gradient(var(--dark), var(--dark)) 0 100% / 100% 2px no-repeat;
}

/* ---------- Grain ---------- */
.grain {
  position: fixed; inset: 0; z-index: 150; pointer-events: none;
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='240' height='240'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='.8' numOctaves='2' stitchTiles='stitch'/><feColorMatrix values='0 0 0 0 .5  0 0 0 0 .5  0 0 0 0 .5  0 0 0 .7 0'/></filter><rect width='100%' height='100%' filter='url(%23n)'/></svg>");
  opacity: .09; mix-blend-mode: multiply;
  animation: grain 1.2s steps(6) infinite;
}
.mode-dark .grain { mix-blend-mode: overlay; opacity: .08; }
@keyframes grain {
  0% { background-position: 0 0; } 20% { background-position: -30px 20px; } 40% { background-position: 25px -40px; }
  60% { background-position: -45px -10px; } 80% { background-position: 35px 30px; } 100% { background-position: 0 0; }
}

/* =========================================================
   BOUTONS « COIN DE RING »
   Coin coupé, typo Anton, remplissage en trois bandes (les cordes)
   ========================================================= */
.btn {
  --b-bg: var(--red); --b-fg: var(--dark); --b-bd: transparent; --b-hv: var(--ink); --b-hvfg: var(--bg);
  position: relative; display: inline-flex; align-items: center; justify-content: center; gap: .8rem;
  min-height: 3.5rem; padding: .2rem 1.5rem 0 1.35rem;
  font: 400 1.2rem/1 var(--display); text-transform: uppercase; letter-spacing: .015em; text-decoration: none; white-space: nowrap;
  color: var(--b-fg); background: var(--b-bg);
  box-shadow: inset 0 0 0 2px var(--b-bd);
  clip-path: polygon(0 0, 100% 0, 100% calc(100% - var(--cut)), calc(100% - var(--cut)) 100%, 0 100%);
  isolation: isolate; transition: color .45s var(--ease-out);
}
.btn::after {
  content: ""; position: absolute; right: -3px; bottom: calc(var(--cut) / 2 - 1px); width: calc(var(--cut) * 1.42 + 2px); height: 2px;
  background: var(--b-bd); transform: rotate(-45deg);
}
.btn--sm { min-height: 2.75rem; padding: .15rem 1.05rem 0; font-size: 1rem; --cut: 9px; }
.btn--line { --b-bg: transparent; --b-fg: var(--ink); --b-bd: var(--ink); --b-hv: var(--ink); --b-hvfg: var(--bg); }
.btn--black { --b-bg: var(--dark); --b-fg: var(--photo-ink); --b-hv: var(--photo-ink); --b-hvfg: var(--dark); }
.btn--on-red { --b-fg: var(--dark); --b-bd: var(--dark); --b-hv: var(--dark); --b-hvfg: var(--red); }
.bands { position: absolute; inset: 0; z-index: -1; display: grid; grid-template-rows: repeat(3, 1fr); pointer-events: none; }
.bands i { display: block; background: var(--b-hv, var(--red)); transform: scaleX(0); transform-origin: left; transition: transform .55s var(--ease-io); }
.bands i:nth-child(2) { transform-origin: right; transition-delay: .05s; }
.bands i:nth-child(3) { transition-delay: .1s; }
.btn:hover, .btn:focus-visible { color: var(--b-hvfg); }
.btn:hover .bands i, .btn:focus-visible .bands i { transform: scaleX(1.01); }
.btn__arrow { display: inline-block; font-family: var(--body); font-weight: 600; transition: transform .45s var(--ease-out); }
.btn:hover .btn__arrow { transform: translateY(3px); }
.btn[target]:hover .btn__arrow { transform: translate(3px, -3px); }

/* texte roulant */
.btn__roll { position: relative; display: inline-block; overflow: hidden; vertical-align: top; line-height: 1.12; }
.btn__roll > .r { display: block; position: relative; transition: transform .5s var(--ease-out); }
.btn__roll > .r::after { content: attr(data-text); position: absolute; top: 100%; left: 0; white-space: nowrap; }
.btn:hover .btn__roll > .r, .btn:focus-visible .btn__roll > .r,
.social:hover .btn__roll > .r, .social:focus-visible .btn__roll > .r,
.contacts__tel:hover .btn__roll > .r, .contacts__tel:focus-visible .btn__roll > .r { transform: translateY(-100%); }

/* lien fléché : soulignement en trois cordes */
.link-arrow {
  display: inline-flex; gap: .45rem; align-items: center; margin-top: 1rem; padding-bottom: .55rem;
  font: 400 1.05rem/1 var(--display); text-transform: uppercase; text-decoration: none;
  background:
    linear-gradient(var(--red), var(--red)) 0 calc(100% - 6px) / 100% 1.5px no-repeat,
    linear-gradient(currentColor, currentColor) 0 calc(100% - 3px) / 100% 1.5px no-repeat,
    linear-gradient(var(--red), var(--red)) 0 100% / 100% 1.5px no-repeat;
  transition: background-size .5s var(--ease-io);
}
.link-arrow:hover { background-size: 35% 1.5px, 70% 1.5px, 100% 1.5px; }
.u-link { text-decoration: none; background: linear-gradient(var(--red), var(--red)) 0 100% / 0 2px no-repeat; transition: background-size .5s var(--ease-out); }
.u-link:hover { background-size: 100% 2px; }

/* ---------- Curseur ---------- */
.cursor { display: none; }
@media (hover: hover) and (pointer: fine) {
  .cursor {
    display: grid; place-items: center; position: fixed; left: 0; top: 0; z-index: 140; pointer-events: none;
    width: 12px; height: 12px; margin: -6px 0 0 -6px; background: var(--red); opacity: 0;
    transition: width .45s var(--ease-out), height .45s var(--ease-out), margin .45s var(--ease-out), background-color .3s, opacity .3s;
  }
  .cursor.is-on { opacity: 1; }
  .cursor.is-link { width: 40px; height: 40px; margin: -20px 0 0 -20px; background: transparent; box-shadow: inset 0 0 0 2px var(--red); }
  .cursor.is-view { width: 92px; height: 92px; margin: -46px 0 0 -46px; background: var(--red); clip-path: polygon(0 0, 100% 0, 100% 84%, 84% 100%, 0 100%); }
  .cursor__label { font: 400 1rem/1 var(--display); text-transform: uppercase; color: var(--dark); opacity: 0; transition: opacity .3s; }
  .cursor.is-view .cursor__label { opacity: 1; }
}

/* =========================================================
   NAVIGATION
   ========================================================= */
.nav {
  position: fixed; inset: 0 0 auto 0; z-index: 100;
  display: grid; grid-template-columns: 1fr auto 1fr; align-items: center; gap: 1rem;
  height: var(--nav-h); padding-inline: var(--gutter); color: var(--ink);
  transition: transform .6s var(--ease-out), color .4s;
}
.nav::before {
  content: ""; position: absolute; inset: 0; z-index: -1;
  background: linear-gradient(to bottom, rgba(var(--bg-rgb), .92), rgba(var(--bg-rgb), 0));
  opacity: 0; transition: opacity .5s;
}
.nav.is-scrolled::before { opacity: 1; }
.nav.is-hidden { transform: translateY(-110%); }
.nav.is-paper { --ink: #12110f; --bg: #fbf8f2; --bg-rgb: 251, 248, 242; color: var(--ink); }
.nav.is-red { --ink: #12110f; --bg: #e8412f; --bg-rgb: 232, 65, 47; color: var(--ink); }
.nav.is-red .nav__cta { --b-bg: var(--dark); --b-fg: var(--photo-ink); --b-hv: var(--photo-ink); --b-hvfg: var(--dark); }
.nav.is-red .ropebox { background: var(--dark); }
.nav.is-red .ropebox path { stroke: var(--red); }
.nav.is-red .nav__section-num { color: var(--photo-ink); }
.nav.is-photo { --ink: var(--photo-ink); --bg: var(--dark); color: var(--ink); }
.nav.is-photo::before { opacity: 0; }
.nav.is-over-photo .nav__section { color: var(--photo-ink); }
.nav.is-over-photo .nav__section-num { color: var(--red); }

.nav__brand { display: inline-flex; align-items: center; gap: .75rem; text-decoration: none; justify-self: start; }
.nav__brand img { width: 48px; height: 48px; border-radius: 50%; transition: transform .8s var(--ease-out); }
.nav__brand:hover img { transform: rotate(-14deg); }
.nav__brand-text { display: flex; flex-direction: column; font: 700 .82rem/1.05 var(--cond); letter-spacing: .04em; text-transform: uppercase; }
.nav__brand-text b { font: 400 1.15rem/1 var(--display); letter-spacing: .01em; }
.nav__section { display: flex; gap: .55rem; align-items: baseline; font: 400 1rem/1 var(--display); text-transform: uppercase; }
.nav__section-num { color: var(--red); }
.nav__section-name { display: inline-block; min-width: 9ch; }
.nav__actions { justify-self: end; display: flex; align-items: center; gap: .6rem; }

/* bouton mode clair / sombre : carré coupé en diagonale */
.mode { position: relative; width: 2.75rem; height: 2.75rem; display: grid; place-items: center; box-shadow: inset 0 0 0 2px currentColor; }
.mode__icon { position: relative; width: 20px; height: 20px; }
.mode__icon svg { position: absolute; inset: 0; width: 100%; height: 100%; fill: none; stroke: currentColor; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; transition: transform .6s var(--ease-io), opacity .35s; }
.mode__sun circle { fill: currentColor; }
.mode__moon { opacity: 0; transform: rotate(-90deg) scale(.4); }
.mode-dark .mode__sun { opacity: 0; transform: rotate(90deg) scale(.4); }
.mode-dark .mode__moon { opacity: 1; transform: none; fill: currentColor; }
.mode:hover .mode__sun { transform: rotate(45deg); }
.mode-dark .mode:hover .mode__sun { transform: rotate(90deg) scale(.4); }
.mode-dark .mode:hover .mode__moon { transform: rotate(-18deg); }
.prices__cta { margin-top: 1.6rem; }

/* bouton menu : trois cordes qui se tendent */
.nav__menu { display: inline-flex; align-items: center; gap: .7rem; height: 2.75rem; padding-left: .2rem; font: 400 1.15rem/1 var(--display); text-transform: uppercase; }
.nav__menu-label { display: grid; overflow: hidden; height: 1.1em; line-height: 1.1; }
.nav__menu-label span { grid-area: 1 / 1; transition: transform .5s var(--ease-out); }
.nav__menu-label span + span { transform: translateY(110%); }
.menu-open .nav__menu-label span:first-child { transform: translateY(-110%); }
.menu-open .nav__menu-label span + span { transform: none; }
.ropebox { display: grid; place-items: center; width: 2.75rem; height: 2.75rem; background: var(--red); clip-path: polygon(0 0, 100% 0, 100% 78%, 78% 100%, 0 100%); }
.ropebox svg { width: 26px; height: 26px; overflow: visible; }
.ropebox path { fill: none; stroke: var(--dark); stroke-width: 2; stroke-linecap: round; transition: d .5s var(--ease-out), transform .5s var(--ease-out), opacity .3s; transform-box: fill-box; transform-origin: center; }
.nav__menu:hover .ropebox path:nth-child(1) { d: path("M3 7 Q12 10 21 7"); }
.nav__menu:hover .ropebox path:nth-child(2) { d: path("M3 12 Q12 15.5 21 12"); }
.nav__menu:hover .ropebox path:nth-child(3) { d: path("M3 17 Q12 20 21 17"); }
.menu-open .ropebox path:nth-child(1) { d: path("M3 12 Q12 12 21 12"); transform: rotate(45deg); }
.menu-open .ropebox path:nth-child(2) { opacity: 0; }
.menu-open .ropebox path:nth-child(3) { d: path("M3 12 Q12 12 21 12"); transform: rotate(-45deg); }
.menu-open .nav { transform: none; }
.menu-open .nav::before { opacity: 0; }
.menu-open .nav__cta { opacity: 0; pointer-events: none; }
@media (max-width: 899px) {
  :root { --nav-h: 64px; }
  .nav { grid-template-columns: 1fr auto; }
  .nav__section { display: none; }
  .nav__brand img { width: 40px; height: 40px; }
  .nav__brand-text { display: none; }
}
@media (max-width: 440px) { .nav__cta { display: none; } }

/* =========================================================
   MENU
   ========================================================= */
.menu { position: fixed; inset: 0; z-index: 90; color: var(--ink); }
.menu[hidden] { display: none; }
.menu__bg { position: absolute; inset: 0; display: grid; grid-template-rows: repeat(3, 1fr); }
.menu__bg i { display: block; background: var(--bg); transform-origin: left; }
.menu__bg i:nth-child(2) { background: var(--bg-2); transform-origin: right; }
.menu__inner {
  position: relative; height: 100%; overflow-y: auto;
  display: grid; grid-template-columns: minmax(0, 1.4fr) minmax(0, 1fr); grid-template-rows: 1fr auto; gap: 2rem var(--gutter);
  padding: calc(var(--nav-h) + 3vh) var(--gutter) 2rem;
}
.menu__list { align-self: center; }
.menu__list li { border-top: 1px solid var(--line); overflow: hidden; }
.menu__list li:last-child { border-bottom: 1px solid var(--line); }
.menu__list a { display: flex; align-items: baseline; gap: 1.2rem; padding: .55rem 0 .35rem; text-decoration: none; transition: color .3s, padding-left .5s var(--ease-out); }
.menu__num { font: 400 1rem/1 var(--display); color: var(--red); min-width: 2ch; }
.menu__txt { font: 400 clamp(2rem, 5.6vh, 4.6rem)/1 var(--display); text-transform: uppercase; }
.menu__list a:hover, .menu__list a:focus-visible { color: var(--red-text); padding-left: .8rem; }
.menu__preview { position: relative; align-self: center; justify-self: end; width: min(100%, 44vh); aspect-ratio: 3 / 4.4; overflow: hidden; clip-path: polygon(0 0, 100% 0, 100% 94%, 90% 100%, 0 100%); }
.menu__preview img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; opacity: 0; transform: scale(1.08); transition: opacity .6s var(--ease-out), transform 1.2s var(--ease-out); }
.menu__preview img.is-active { opacity: 1; transform: none; }
.menu__foot { grid-column: 1 / -1; display: flex; flex-wrap: wrap; justify-content: space-between; gap: .5rem 2rem; color: var(--ink-dim); font-size: .95rem; border-top: 1px solid var(--line); padding-top: 1rem; }
.menu__foot a { text-decoration: none; color: var(--ink); }
.menu__foot a:hover { color: var(--red-text); }
@media (max-width: 899px) {
  .menu__inner { grid-template-columns: 1fr; }
  .menu__preview { display: none; }
  .menu__txt { font-size: clamp(1.9rem, 9vw, 3rem); }
}

/* =========================================================
   ACCUEIL (HERO)
   ========================================================= */
.hero {
  position: relative; background: var(--bg); isolation: isolate;
  --frame-h: max(620px, 100svh);
  --frame-w: calc(var(--frame-h) * .57125);
  --side: calc((100vw - var(--frame-w)) / 2);
}
.hero__stage { position: relative; height: 100vh; height: 100svh; min-height: 620px; overflow: hidden; }
.hero__frame {
  position: absolute; top: 0; bottom: 0; left: 50%; z-index: 2;
  width: var(--frame-w); margin-left: calc(var(--frame-w) / -2);
  overflow: hidden; background: #1b1916;
}
.hero__img { width: 100%; height: 100%; object-fit: cover; filter: contrast(1.06) saturate(.9) brightness(.82); }
/* Sur ordinateur, la photo est resserrée sur l'action pour sortir le plafond du cadre.
   Doit rester cohérent avec HERO_DESKTOP_ZOOM / HERO_DESKTOP_BIAS_Y dans js/hero-gl.js. */
@media (min-width: 900px) {
  .hero__img { transform: scale(1.30); transform-origin: 47% 64%; }
}
.hero__frame::after {
  content: ""; position: absolute; inset: 0; pointer-events: none;
  background: linear-gradient(to top, rgba(12, 11, 10, .75) 0%, rgba(12, 11, 10, 0) 38%), linear-gradient(to bottom, rgba(12, 11, 10, .45), rgba(12, 11, 10, 0) 22%);
}
.hero.gl-on .hero__frame { visibility: hidden; transition: visibility 0s .8s; }
.hero.gl-instant .hero__frame, .hero.gl-instant .hero__gl { transition: none; }
.hero__gl { position: absolute; inset: 0; z-index: 3; width: 100%; height: 100%; pointer-events: none; opacity: 0; transition: opacity .8s var(--ease-out); }
.hero.gl-on .hero__gl { opacity: 1; }

.hero__kicker {
  position: absolute; z-index: 6; left: var(--gutter); top: calc(var(--nav-h) + 4vh);
  display: flex; align-items: flex-start; gap: .65rem;
  font: 700 1rem/1.2 var(--cond); letter-spacing: .02em; text-transform: uppercase; color: var(--ink);
}
.dot { width: 10px; height: 10px; margin-top: .3em; background: var(--red); flex: none; animation: blink 2.4s steps(1) infinite; }
@keyframes blink { 50% { opacity: .25; } }

/* Le titre n'est plus calé sur le bas de l'écran mais sur le MÊME repère que les
   cordes : elles sont posées à 63,5 / 75,5 / 87,5 % de la hauteur de la scène
   (`rests` dans js/hero-gl.js). « OC Montauban » est centré sur 54 %, donc bien
   au-dessus de la première corde, et l'écart reste le même quelle que soit la
   taille de la fenêtre — c'est ce qui manquait avec une valeur en rem ou en vh.
   Le `clamp` retire la moitié de la hauteur de la ligne pour la centrer. */
.hero__title {
  position: absolute; z-index: 5; left: var(--gutter); right: var(--gutter);
  top: calc(54% - clamp(1rem, 1.94vw, 2.25rem)); bottom: auto;
  color: var(--ink); pointer-events: none;
  /* Le titre est fait de trois calques superposés découpés au bord de la photo :
     un <h1> à gauche, deux <p> pour la droite et le contour. Sans cette ligne,
     le <h1> gardait la taille de police par défaut du navigateur (2em) et les
     marges en `em` de `.hero__line` ne tombaient pas au même endroit que dans
     les <p> : les lettres se décalaient de 0,76 px au raccord, d'où le liseré
     blanc visible au bord de la photo. */
  font-size: 1rem;
}
.hero__title--l { clip-path: inset(-30% calc(100% - var(--side) + var(--gutter)) -30% -5%); }
.hero__title--r { clip-path: inset(-30% -5% -30% calc(var(--side) - var(--gutter) + var(--frame-w))); }
/* Calque « contour » posé sur la photo. Le trait est proportionnel à la taille
   du texte : à 1,5 px fixe, les petits détails du dessin — la cédille du Ç —
   restaient deux traits fins sans intérieur et semblaient incomplets. */
.hero__title--o {
  color: transparent; -webkit-text-stroke: 1.5px var(--photo-ink);
  clip-path: inset(-30% calc(100% - var(--side) + var(--gutter) - var(--frame-w)) -30% calc(var(--side) - var(--gutter)));
}
.hero__club { display: block; font-size: clamp(1.6rem, 3.1vw, 3.6rem); letter-spacing: .01em; margin-bottom: .08em; color: var(--red); }
.hero__title--o .hero__club { -webkit-text-stroke: 0; color: var(--red); }
/* l'épaisseur est posée sur la ligne, dont la taille de police est celle du mot :
   sur `.hero__title--o` (1 rem depuis la demande n° 44) un `em` ne vaudrait que
   0,2 px et le trait resterait fin. */
.hero__title--o .hero__line { -webkit-text-stroke-width: max(1.5px, .013em); }
/* Le masque qui fait monter le mot à l'entrée. Ses marges sont maintenant
   calées sur la taille DU MOT (et non sur celle du bloc titre) : sinon la
   réserve du bas ne faisait que 2,5 px et la cédille de « FRANÇAISE » passait
   à la trappe. Les marges négatives annulent la réserve, la position du mot
   ne bouge donc pas. */
.hero__line {
  display: block; overflow: hidden;
  font-size: clamp(3.5rem, min(14.6vw, 26vh), 19rem);
  padding: .07em 0 .36em; margin: -.07em 0 -.36em;
}
/* Le `min(..., 26vh)` borne la hauteur du mot : sans lui, sur un écran large et
   bas (portable, tablette en paysage) le bloc titre devenait si haut qu'il
   montait dans l'accroche de gauche. */
.hero__word { display: block; font-size: 1em; white-space: nowrap; line-height: .84; }

.hero__intro { position: absolute; z-index: 6; left: var(--gutter); top: 33%; width: calc(var(--side) - var(--gutter) * 1.6); max-width: 30rem; }
.hero__lead { font-size: clamp(1rem, 1.3vw, 1.3rem); line-height: 1.45; color: var(--ink-dim); }
.hero__lead strong { display: inline-block; margin-bottom: .2rem; font: 400 clamp(1.35rem, 1.9vw, 2rem)/1.05 var(--display); text-transform: uppercase; color: var(--ink); }
.hero__ctas { display: flex; flex-wrap: wrap; gap: .7rem; margin-top: 1.6rem; }

.hero__aside {
  position: absolute; z-index: 6; right: var(--gutter); top: calc(var(--nav-h) + 4vh);
  width: calc(var(--side) - var(--gutter) * 1.6); max-width: 22rem; display: flex; flex-direction: column; gap: 1.3rem;
}
.stamp {
  display: flex; flex-direction: column; gap: .4rem; align-self: flex-start;
  padding: .85rem 1rem .9rem; background: var(--red); color: var(--dark); transform: rotate(-2.2deg);
  clip-path: polygon(0 4%, 3% 0, 97% 2%, 100% 0, 99% 96%, 100% 100%, 4% 98%, 0 100%);
}
.stamp__top { font: 700 .85rem/1.2 var(--cond); letter-spacing: .02em; text-transform: uppercase; }
.stamp strong { font: 400 clamp(1.3rem, 1.8vw, 1.9rem)/1.02 var(--display); text-transform: uppercase; }
.hero__facts div { display: flex; justify-content: space-between; gap: 1rem; padding: .65rem 0; border-bottom: 1px solid var(--line); }
.hero__facts dt { font: 400 1rem/1.3 var(--display); text-transform: uppercase; }
.hero__facts dd { text-align: right; font-weight: 500; }
.hero__facts small { display: block; color: var(--ink-dim); font-size: .82rem; }
.hero__map {
  display: inline-flex; align-items: baseline; gap: .35rem; color: inherit; text-decoration: none;
  background: linear-gradient(var(--red), var(--red)) 0 100% / 0 2px no-repeat;
  transition: background-size .5s var(--ease-out), color .3s;
}
.hero__map:hover, .hero__map:focus-visible { background-size: 100% 2px; color: var(--red-text); }
.hero__map-ico { font-size: .78em; transition: transform .35s var(--ease-out); }
/* adresse postale de la section, en petit sous chaque mention de la salle Hamon */
.adr { display: block; margin-top: .3rem; font-size: .78rem; line-height: 1.35; font-weight: 400; color: var(--ink-dim); }
.hero__facts .adr { text-align: right; margin-top: .15rem; font-size: .72rem; line-height: 1.25; }
.hero__map:hover .hero__map-ico { transform: translate(2px, -2px); }
.hero__trial { display: flex; align-items: center; gap: .8rem; font: 400 1.05rem/1 var(--display); text-transform: uppercase; }
.hero__trial-num { display: grid; place-items: center; width: 3.2rem; height: 3.2rem; padding-top: .15rem; background: var(--ink); color: var(--bg); font: 400 2rem/1 var(--display); clip-path: polygon(0 0, 100% 0, 100% 76%, 76% 100%, 0 100%); }

.hero__scroll {
  position: absolute; z-index: 6; right: var(--gutter); bottom: calc(clamp(18px, 4.5vh, 56px) + 14.6vw * .84 + 1.6rem);
  display: flex; align-items: center; gap: .7rem; text-decoration: none; font: 400 1rem/1 var(--display); text-transform: uppercase; color: var(--ink);
}
.hero__scroll i { position: relative; width: 2px; height: 44px; background: var(--line); overflow: hidden; }
.hero__scroll i::after { content: ""; position: absolute; left: 0; top: -40%; width: 100%; height: 40%; background: var(--red); animation: drip 1.8s var(--ease-io) infinite; }
@keyframes drip { to { top: 100%; } }

@media (min-width: 900px) and (max-width: 1180px) {
  .hero__lead { font-size: 1rem; }
  .stamp strong { font-size: 1.2rem; }
  .hero__facts dd { font-size: .92rem; }
  .btn { min-height: 3.1rem; padding-inline: 1.1rem; font-size: 1.05rem; }
}
/* Plus l'écran est bas, plus le titre monte (il est calé en vh sur la corde) :
   l'accroche remonte d'autant, sinon les deux se chevauchent sur les portables
   et les tablettes en paysage. */
/* Fenêtre plus haute que large (tablette en portrait avec la mise en page
   bureau) : la colonne photo, calculée sur la hauteur, dévorait tout l'écran et
   ne laissait plus que quelques centimètres pour l'accroche à gauche. On la
   borne à 42 % de la largeur ; `--side` se recalcule tout seul. */
@media (min-width: 900px) and (max-aspect-ratio: 5/4) {
  .hero { --frame-w: min(calc(var(--frame-h) * .57125), 42vw); }
}
/* Le titre est calé à 54 % de la hauteur : le bloc infos de droite doit tenir
   au-dessus. Plus l'écran est bas, plus on le resserre, sinon il vient mordre
   sur « Boxe française ». */
@media (min-width: 900px) and (max-height: 1000px) {
  .hero__intro { top: 27%; }
  .hero__aside { top: calc(var(--nav-h) + 2vh); gap: .9rem; }
  .stamp { padding: .7rem .85rem .75rem; }
  .stamp strong { font-size: clamp(1.1rem, 1.5vw, 1.5rem); }
  .hero__facts div { padding: .45rem 0; }
  .hero__trial { display: none; }
}
@media (min-width: 900px) and (max-height: 860px) {
  .hero__aside { top: calc(var(--nav-h) + 1.2vh); gap: .7rem; }
  .stamp__top { font-size: .78rem; }
  .stamp strong { font-size: 1.15rem; }
  .hero__facts div { padding: .34rem 0; }
  .hero__facts dt { font-size: .92rem; }
  .hero__facts dd { font-size: .88rem; }
  .hero__facts small { font-size: .76rem; }
  .hero__facts .adr { font-size: .68rem; }
}
@media (min-width: 900px) and (max-height: 700px) {
  .hero__aside { gap: .5rem; }
  .stamp { padding: .55rem .75rem .6rem; transform: rotate(-1.6deg); }
  .stamp__top { font-size: .72rem; }
  .stamp strong { font-size: 1.02rem; }
  .hero__facts div { padding: .26rem 0; }
}
@media (min-width: 900px) and (max-height: 760px) {
  /* le `max()` garde l'accroche sous le surtitre, même sur un écran très bas */
  .hero__intro { top: max(22%, calc(var(--nav-h) + 4.6rem)); }
  .hero__lead { font-size: .95rem; line-height: 1.35; }
  .hero__lead strong { font-size: 1.3rem; margin-bottom: .05rem; }
  .hero__ctas { margin-top: 1rem; }
  .hero__trial { display: none; }
}
@media (max-width: 899px) {
  .hero { --frame-w: 100vw; --side: 0px; }
  .hero__stage { min-height: 560px; }
  .hero__frame { left: 0; right: 0; width: 100%; margin: 0; }
  .hero__img { object-position: 50% 45%; }
  .hero__frame::after { background: linear-gradient(to top, rgba(12, 11, 10, .92) 0%, rgba(12, 11, 10, .35) 42%, rgba(12, 11, 10, 0) 60%), linear-gradient(to bottom, rgba(12, 11, 10, .6), rgba(12, 11, 10, 0) 24%); }
  .hero__kicker { top: calc(var(--nav-h) + 1rem); color: var(--photo-ink); }
  .hero__title--l { clip-path: none; color: var(--photo-ink); top: auto; bottom: calc(1.4rem + 3.5rem + 2.9rem); }
  .hero__title--r, .hero__title--o { display: none; }
  /* Sur mobile, l'accroche remonte juste sous le surtitre et les deux boutons
     restent en bas. Le bloc devient une colonne qui occupe toute la hauteur :
     l'accroche est calée en haut, les boutons en bas, le titre passe entre les
     deux. (On ne peut pas positionner les enfants par rapport à `.hero__stage` :
     l'animation d'entrée pose une transformation sur `.hero__intro`, qui devient
     alors leur bloc conteneur.) */
  .hero__intro {
    top: calc(var(--nav-h) + 4.3rem); bottom: 1.4rem; left: var(--gutter); right: var(--gutter);
    width: auto; max-width: none;
    display: flex; flex-direction: column; justify-content: space-between; gap: 1rem;
    pointer-events: none;
  }
  .hero__lead {
    display: block; color: var(--photo-ink); font-size: 1.02rem;
    text-shadow: 0 1px 14px rgba(12, 11, 10, .5);
  }
  .hero__lead strong { color: var(--photo-ink); }
  .hero__ctas { margin-top: 0; pointer-events: auto; }
  .hero__ctas .btn { flex: 1 1 auto; }
  .hero__ctas .btn--line { --b-fg: var(--photo-ink); --b-bd: var(--photo-ink); --b-hv: var(--photo-ink); --b-hvfg: var(--dark); }
  .hero__line { font-size: 21.5vw; }
  .hero__word { white-space: normal; line-height: .86; }
  .hero__club { font-size: 7.5vw; margin-bottom: .35em; }
  /* Tablettes en portrait : la mise en page est celle du mobile, mais l'écran
     est bien plus haut, donc la corde descend. Le titre suit en vh. */
  @media (min-width: 700px) { .hero__title--l { bottom: calc(1.4rem + 3.5rem + 7vh); } }
  .hero__scroll { display: none; }
  .hero__aside { position: relative; inset: auto; width: auto; max-width: none; padding: 2.2rem var(--gutter) 2.6rem; gap: 1.2rem; background: var(--bg); }
}

/* =========================================================
   CORDES (séparateurs interactifs)
   ========================================================= */
.ropes { position: relative; height: 90px; margin-bottom: 1rem; }
.ropes svg { position: absolute; inset: 0; width: 100%; height: 100%; overflow: visible; }
.ropes path { fill: none; stroke-linecap: round; vector-effect: non-scaling-stroke; stroke-width: 4; }
.ropes path:nth-child(odd) { stroke: var(--red); }
.ropes path:nth-child(2) { stroke: var(--ink); }

/* =========================================================
   LE CLUB
   ========================================================= */
.club { position: relative; padding-block: clamp(4rem, 9vw, 8rem) clamp(5rem, 10vw, 10rem); background: var(--bg); }
.club__head { display: grid; justify-items: start; gap: 1.4rem; margin-bottom: clamp(3rem, 7vw, 6rem); }
.club__title { font-size: clamp(3.4rem, 11.5vw, 13rem); }
.club__title em { font-style: normal; color: var(--red); }
.line--indent { padding-left: 12vw; }
.club__grid { display: grid; grid-template-columns: repeat(12, minmax(0, 1fr)); gap: 2rem var(--gutter); align-items: start; }
.club__photo { grid-column: 1 / span 7; aspect-ratio: 1179 / 686; }
.club__text { grid-column: 9 / span 4; display: grid; gap: 1.3rem; color: var(--ink-dim); padding-top: 1rem; }
.club__text strong { color: var(--ink); }
.club__lede { font-size: clamp(1.25rem, 1.8vw, 1.7rem); line-height: 1.35; color: var(--ink); }
@media (max-width: 899px) {
  .club__photo, .club__text { grid-column: 1 / -1; }
  .line--indent { padding-left: 0; }
}
.mask { position: relative; overflow: hidden; }
.mask img, .mask video { width: 100%; height: 100%; object-fit: cover; }
@media (min-width: 900px) { .club__photo img, .cours__photo img { transform: scale(1.12); } }

.values { margin-top: clamp(5rem, 11vw, 10rem); }
.values .kicker { margin-bottom: 1.4rem; }
.values__list { font-size: clamp(3rem, 10vw, 11.5rem); line-height: .9; }
.values__list li { color: transparent; -webkit-text-stroke: 1.5px rgba(var(--ink-rgb), .35); transition: color .2s; }
.values__list li.is-lit { color: var(--ink); -webkit-text-stroke-color: var(--ink); }
.values__list .values__fun { font-size: .5em; line-height: 1.1; margin-top: .3em; -webkit-text-stroke: 0; color: var(--ink-dim); }
.values__list .values__fun span { color: var(--red); }
.no-anim .values__list li, .values__list.is-static li { color: var(--ink); -webkit-text-stroke: 0; }

/* =========================================================
   PIEDS & POINGS
   ========================================================= */
.hz { position: relative; background: var(--bg-2); }
.hz__pin { position: relative; overflow: hidden; }
.hz__track { display: flex; flex-direction: column; }
.hz__panel { position: relative; display: grid; grid-template-columns: 1fr; align-items: center; gap: 1.6rem; padding: 4.5rem var(--gutter); }
.hz__panel--intro { display: flex; flex-direction: column; justify-content: center; align-items: flex-start; gap: 1.5rem; padding-top: 6rem; }
.hz__title { font-size: clamp(4rem, 13vw, 15rem); }
.hz__title .outline { -webkit-text-stroke-color: var(--red); }
.hz__hint { display: none; gap: .6rem; align-items: center; font: 400 1.1rem/1 var(--display); text-transform: uppercase; }
.hz__hint span { color: var(--red); animation: nudge 1.6s var(--ease-io) infinite; display: inline-block; }
@keyframes nudge { 50% { transform: translateX(8px); } }
.hz__word {
  position: absolute; left: var(--gutter); top: 2.5rem; z-index: 0;
  font-size: clamp(6rem, 24vw, 24rem); color: transparent; -webkit-text-stroke: 1.5px rgba(var(--ink-rgb), .18);
  white-space: nowrap; pointer-events: none;
}
.hz__media { position: relative; z-index: 1; width: 100%; aspect-ratio: 914 / 1600; }
.hz__media > img, .hz__media > video { width: 100%; height: 100%; object-fit: cover; clip-path: polygon(0 0, 100% 0, 100% calc(100% - 28px), calc(100% - 28px) 100%, 0 100%); }
.hz__cap { position: relative; z-index: 2; max-width: 26rem; display: grid; gap: .8rem; }
.hz__round { font: 400 4rem/.8 var(--display); color: transparent; -webkit-text-stroke: 1.5px var(--red); }
.hz__cap h3 { font-size: clamp(2.6rem, 5vw, 5.4rem); }
.hz__cap p { color: var(--ink-dim); font-size: 1.15rem; line-height: 1.45; }
.hz__progress { display: none; }
@media (min-width: 900px) {
  .hz__panel { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 4vw; padding: 6rem var(--gutter); min-height: 88vh; }
  .hz__media { justify-self: end; width: auto; height: min(78vh, 60vw); max-width: 100%; }
  .hz__cap { align-self: end; }
  .hz__word { top: 50%; transform: translateY(-50%); font-size: clamp(6rem, 19vw, 24rem); }
}
.hz.is-horizontal .hz__track { flex-direction: row; align-items: stretch; height: 100vh; height: 100svh; width: max-content; }
.hz.is-horizontal .hz__panel { flex: none; width: 76vw; height: 100%; min-height: 0; padding: calc(var(--nav-h) + 3vh) 5vw 12vh; gap: 3vw; }
.hz.is-horizontal .hz__panel--intro { width: 62vw; padding-left: var(--gutter); padding-top: 0; }
.hz.is-horizontal .hz__media { height: min(74vh, 58vw); }
.hz.is-horizontal .hz__cap { margin-bottom: 4vh; }
.hz.is-horizontal .hz__word { left: 3vw; }
.hz.is-horizontal .hz__hint { display: flex; }
.hz.is-horizontal .hz__progress { display: grid; position: absolute; left: var(--gutter); right: var(--gutter); bottom: 5vh; height: 14px; align-content: space-between; }
.hz__progress i { display: block; height: 1px; background: var(--line); }
.hz__progress b { position: absolute; inset: 0; transform-origin: left; transform: scaleX(0); background: linear-gradient(var(--red), var(--red)) 0 0 / 100% 2px no-repeat, linear-gradient(var(--ink), var(--ink)) 0 50% / 100% 2px no-repeat, linear-gradient(var(--red), var(--red)) 0 100% / 100% 2px no-repeat; }

.video-toggle {
  position: absolute; left: .9rem; bottom: .9rem; z-index: 3; display: inline-flex; align-items: center; gap: .55rem;
  height: 2.5rem; padding: .15rem .9rem 0 .75rem; background: rgba(12, 11, 10, .78); color: var(--photo-ink);
  font: 400 1rem/1 var(--display); text-transform: uppercase;
}
.video-toggle:hover { background: var(--red); color: var(--dark); }
.video-toggle__icon { width: 12px; height: 12px; margin-top: -.15rem; background: linear-gradient(90deg, currentColor 0 35%, transparent 35% 65%, currentColor 65%); }
.video-toggle.is-paused .video-toggle__icon { background: currentColor; clip-path: polygon(0 0, 100% 50%, 0 100%); }

/* =========================================================
   BANDEAU
   ========================================================= */
.marquee { background: var(--red); color: var(--dark); overflow: hidden; padding: 1.1rem 0 .9rem; position: relative; z-index: 2; }
.marquee__row { display: flex; align-items: center; gap: 2rem; width: max-content; font-size: clamp(2.2rem, 5vw, 5rem); line-height: 1; padding-left: 2rem; }
.marquee__row i { font-style: normal; opacity: .45; }

/* =========================================================
   NOS COURS
   ========================================================= */
.cours { padding-block: clamp(4rem, 9vw, 8rem) clamp(5rem, 10vw, 9rem); position: relative; background: var(--bg); color: var(--ink); }
.cours__head { display: grid; justify-items: start; gap: 1.2rem; margin-bottom: clamp(2.5rem, 6vw, 5rem); }
.cours__title { font-size: clamp(4.4rem, 20vw, 24rem); line-height: .82; margin-left: -.04em; }
.tags { display: flex; flex-wrap: wrap; align-items: center; gap: .5rem 0; font-size: clamp(1.3rem, 2.2vw, 2rem); line-height: 1.1; }
.tags li + li::before { content: "/"; margin: 0 .55em; color: var(--red); }
.tags .tags__hi { margin-left: .6em; background: var(--red); color: var(--dark); padding: .14em .4em .02em; clip-path: polygon(0 0, 100% 0, 100% 72%, calc(100% - .35em) 100%, 0 100%); }
.tags .tags__hi::before { content: none; }

.cours__grid { display: grid; grid-template-columns: repeat(12, minmax(0, 1fr)); gap: 3rem var(--gutter); align-items: start; }
.cours__photo { grid-column: 1 / span 5; position: sticky; top: calc(var(--nav-h) + 2vh); aspect-ratio: 902 / 1600; max-height: calc(100svh - var(--nav-h) - 4vh); width: auto; }
.cours__body { grid-column: 7 / span 6; display: grid; gap: clamp(2.5rem, 5vw, 4rem); }
.corner { position: absolute; width: 38px; height: 38px; border: 0 solid var(--red); z-index: 2; }
.corner--tl { left: 12px; top: 12px; border-top-width: 4px; border-left-width: 4px; }
.corner--br { right: 12px; bottom: 12px; border-bottom-width: 4px; border-right-width: 4px; }
@media (max-width: 899px) {
  .cours__photo { grid-column: 1 / -1; position: relative; top: 0; max-height: none; width: 100%; }
  .cours__body { grid-column: 1 / -1; }
}
.block__title { font: 400 1.5rem/1 var(--display); text-transform: uppercase; margin-bottom: 1rem; padding-bottom: .8rem; border-bottom: 2px solid var(--ink); }
.card__row { display: grid; grid-template-columns: minmax(7.5rem, auto) 1fr; grid-template-areas: "day time" "day who"; gap: .2rem 1.4rem; padding: 1.2rem 0; border-bottom: 1px solid var(--line); align-items: baseline; }
.card__day { grid-area: day; font-size: clamp(1.6rem, 2.4vw, 2.4rem); color: var(--red-text); }
.card__time { grid-area: time; font-size: clamp(2.6rem, 5vw, 5rem); letter-spacing: .01em; }
.card__time i { font-style: normal; color: var(--ink-dim); margin: 0 .12em; font-size: .6em; vertical-align: .22em; }
.card__who { grid-area: who; font: 700 .95rem/1.3 var(--cond); letter-spacing: .02em; text-transform: uppercase; color: var(--ink-dim); }
@media (max-width: 520px) { .card__row { grid-template-columns: 1fr; grid-template-areas: "day" "time" "who"; } }
.place { font-size: 1.2rem; line-height: 1.45; }
.prices { display: grid; grid-template-columns: 1fr 1fr; }
.price { padding: 1.2rem 1.2rem 1.4rem 0; }
.price + .price { padding-left: 1.4rem; border-left: 2px solid var(--ink); }
.price__amount { font-size: clamp(4.6rem, 9vw, 9rem); line-height: .85; display: flex; align-items: flex-start; gap: .08em; }
.price__amount small { font-size: .26em; line-height: 1; margin-top: .2em; color: var(--red-text); }
.price__who { margin-top: .7rem; font: 700 .95rem/1.3 var(--cond); letter-spacing: .02em; text-transform: uppercase; }
.prices__incl { margin-top: 1rem; display: flex; align-items: center; gap: .6rem; font-weight: 600; }
.tick { display: grid; place-items: center; width: 1.6rem; height: 1.6rem; padding-top: .1rem; background: var(--red); color: var(--dark); font: 400 1.1rem/1 var(--display); }
.prices__pay { margin-top: .6rem; color: var(--ink-dim); max-width: 46ch; }
.gear { display: grid; grid-template-columns: 1.5fr 1fr; gap: 2rem; }
.gear__kind { font: 400 1.5rem/1 var(--display); text-transform: uppercase; margin-bottom: .8rem; }
.gear li { position: relative; padding: .5rem 0 .5rem 1.4rem; border-bottom: 1px solid var(--line); line-height: 1.4; }
.gear li::before { content: ""; position: absolute; left: 0; top: 1.05rem; width: .7rem; height: 3px; background: var(--red); }
@media (max-width: 600px) {
  .prices { grid-template-columns: 1fr; }
  .price + .price { padding-left: 0; border-left: 0; border-top: 2px solid var(--ink); }
  .gear { grid-template-columns: 1fr; }
}

/* =========================================================
   COACHS — base : deux portraits côte à côte (sans animation)
   .is-switch : la scène reste collée à l'écran (position: sticky)
   pendant qu'on défile, et l'image passe d'un coach à l'autre.
   ========================================================= */
.coachs { padding-block: clamp(5rem, 10vw, 9rem); background: var(--bg); position: relative; }
.coachs__stage { display: grid; grid-template-columns: repeat(12, minmax(0, 1fr)); gap: 2rem var(--gutter); align-items: center; }
.coachs__photos { grid-column: 1 / span 6; display: grid; grid-template-columns: 1fr 1fr; gap: clamp(12px, 2vw, 28px); }
.coach-photo { position: relative; aspect-ratio: 888 / 1600; overflow: hidden; background: var(--bg-2); }
.coach-photo img { width: 100%; height: 100%; object-fit: cover; }
.coach-photo__cap {
  position: absolute; left: 0; right: 0; bottom: 0; display: flex; flex-wrap: wrap; justify-content: space-between; align-items: baseline; gap: .2rem 1rem;
  padding: 3rem 1rem 1rem; color: var(--photo-ink); background: linear-gradient(to top, rgba(12, 11, 10, .8), rgba(12, 11, 10, 0));
  font: 700 .9rem/1.2 var(--cond); letter-spacing: .02em; text-transform: uppercase;
}
.coach-photo__cap .display { font-size: clamp(1.6rem, 2.6vw, 2.6rem); font-weight: 400; }
.coachs__side { grid-column: 8 / span 5; display: grid; justify-items: start; gap: 1.3rem; }
.coachs__title { font-size: clamp(3rem, 6.4vw, 7.4rem); }
.coachs__lede { font-size: clamp(1.05rem, 1.4vw, 1.35rem); line-height: 1.45; color: var(--ink-dim); max-width: 40ch; }
.coachs__count { display: none; font-size: clamp(2rem, 3vw, 3rem); color: transparent; -webkit-text-stroke: 1.5px var(--red); }
.coachs__count span { color: var(--red); -webkit-text-stroke: 0; }
.coachs__count i { font-style: normal; margin: 0 .15em; }
.coach-list { width: 100%; display: grid; border-top: 2px solid var(--ink); }
.coach { display: flex; flex-wrap: wrap; justify-content: space-between; align-items: baseline; gap: .3rem 1.2rem; padding: 1rem 0; border-bottom: 1px solid var(--line); }
.coach__name { font-size: clamp(2.2rem, 4vw, 4.4rem); transition: color .5s var(--ease-out), -webkit-text-stroke-color .5s, transform .6s var(--ease-out); }
.coach__role { font: 700 1rem/1.3 var(--cond); letter-spacing: .02em; text-transform: uppercase; color: var(--ink-dim); transition: color .5s; }
.coachs__progress { display: none; position: relative; width: 100%; height: 14px; align-content: space-between; }
.coachs__progress i { display: block; height: 1px; background: var(--line); }
.coachs__progress b { position: absolute; inset: 0; transform-origin: left; transform: scaleX(0); background: linear-gradient(var(--red), var(--red)) 0 0 / 100% 2px no-repeat, linear-gradient(var(--ink), var(--ink)) 0 50% / 100% 2px no-repeat, linear-gradient(var(--red), var(--red)) 0 100% / 100% 2px no-repeat; }

/* mode bascule : piste haute + scène collée */
.coachs.is-switch { padding-block: 0; }
.coachs.is-switch .coachs__track { height: 280vh; height: 280svh; }
.coachs.is-switch .coachs__stage {
  position: sticky; top: 0; height: 100vh; height: 100svh; grid-template-rows: 100%;
  padding-block: calc(var(--nav-h) + 2vh) 4vh;
}
.coachs.is-switch .coachs__photos { grid-template-columns: 1fr; grid-template-rows: 100%; justify-items: center; align-self: stretch; min-height: 0; }
.coachs.is-switch .coach-photo { grid-area: 1 / 1; height: 100%; width: auto; max-width: 100%; }
.coachs.is-switch .coach-photo + .coach-photo { clip-path: inset(0 100% 0 0); }
.coachs.is-switch .coach-photo__cap { display: none; }
.coachs.is-switch .coachs__count { display: block; }
.coachs.is-switch .coachs__progress { display: grid; }
.coachs.is-switch .coach .coach__name { color: transparent; -webkit-text-stroke: 1.5px rgba(var(--ink-rgb), .4); }
.coachs.is-switch .coach.is-active .coach__name { color: var(--ink); -webkit-text-stroke-color: var(--ink); transform: translateX(.5rem); }
.coachs.is-switch .coach.is-active .coach__role { color: var(--red-text); }

@media (max-width: 899px) {
  .coachs__photos, .coachs__side { grid-column: 1 / -1; }
  .coachs__photos { grid-template-columns: 1fr; }
  .coachs__side { grid-row: 1; }
  .coachs.is-switch .coachs__stage { display: flex; flex-direction: column; align-items: stretch; gap: .8rem; padding-block: calc(var(--nav-h) + .4rem) 1rem; }
  .coachs.is-switch .coachs__side { display: contents; }
  .coachs.is-switch .coachs__title { order: 1; font-size: clamp(2rem, 9.5vw, 3rem); }
  .coachs.is-switch .coachs__title .line { display: inline; }
  .coachs.is-switch .coachs__title .line + .line::before { content: " "; }
  .coachs.is-switch .coachs__photos { order: 2; flex: 1 1 auto; }
  .coachs.is-switch .coach-list { order: 3; }
  .coachs.is-switch .coachs__progress { order: 4; }
  .coachs.is-switch .coachs__lede { order: 5; font-size: .92rem; line-height: 1.35; }
  .coachs.is-switch .coachs__count { display: none; }
  .coachs.is-switch .coach { padding: .45rem 0; }
  .coachs.is-switch .coach__name { font-size: clamp(1.7rem, 7.5vw, 2.4rem); }
  .coach-photo__cap { display: none; }
}

/* =========================================================
   GALERIE
   ========================================================= */
.galerie { padding-block: clamp(4rem, 8vw, 7rem) clamp(5rem, 10vw, 9rem); background: var(--bg-2); overflow: hidden; }
.galerie__head { margin-bottom: clamp(2rem, 5vw, 4rem); }
.galerie__title { display: flex; gap: 4vw; white-space: nowrap; font-size: clamp(5rem, 24vw, 30rem); line-height: .8; will-change: transform; }
.galerie__title .outline { -webkit-text-stroke-color: var(--red); }
.galerie__sub { color: var(--ink-dim); margin-top: 1.2rem; }
.gallery { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: clamp(12px, 1.8vw, 26px); align-items: start; }
.gcol { display: grid; gap: clamp(12px, 1.8vw, 26px); }
.gcol:nth-child(2) { margin-top: 12vh; }
.gcol:nth-child(3) { margin-top: 4vh; }
.gcol:nth-child(4) { margin-top: 18vh; }
.g { position: relative; }
/* Équerres d'angle « coin de ring » autour de chaque photo : quatre L tracés en
   dégradés, posés juste à l'extérieur du cadre. Ils passent au rouge et
   s'écartent légèrement au survol. */
.g::after {
  content: ""; position: absolute; inset: -10px; pointer-events: none; z-index: 2;
  --gc: var(--ink); --gt: 2px; --gl: 20px;
  background:
    linear-gradient(var(--gc), var(--gc)) 0 0 / var(--gl) var(--gt) no-repeat,
    linear-gradient(var(--gc), var(--gc)) 0 0 / var(--gt) var(--gl) no-repeat,
    linear-gradient(var(--gc), var(--gc)) 100% 0 / var(--gl) var(--gt) no-repeat,
    linear-gradient(var(--gc), var(--gc)) 100% 0 / var(--gt) var(--gl) no-repeat,
    linear-gradient(var(--gc), var(--gc)) 0 100% / var(--gl) var(--gt) no-repeat,
    linear-gradient(var(--gc), var(--gc)) 0 100% / var(--gt) var(--gl) no-repeat,
    linear-gradient(var(--gc), var(--gc)) 100% 100% / var(--gl) var(--gt) no-repeat,
    linear-gradient(var(--gc), var(--gc)) 100% 100% / var(--gt) var(--gl) no-repeat;
  opacity: .38;
  transition: opacity .35s var(--ease-out), inset .45s var(--ease-out);
}
.g:hover::after, .g:focus-within::after { --gc: var(--red); opacity: 1; inset: -15px; }
.g__btn { display: block; width: 100%; overflow: hidden; position: relative; cursor: zoom-in; }
.g__btn img { width: 100%; height: auto; transition: transform 1s var(--ease-out); }
.g__btn::after { content: ""; position: absolute; inset: 0; pointer-events: none; background: linear-gradient(135deg, transparent calc(100% - 42px), var(--red) calc(100% - 42px)); opacity: 0; transition: opacity .35s; }
.g__btn:hover img { transform: scale(1.06); }
.g__btn:hover::after, .g__btn:focus-visible::after { opacity: 1; }
@media (max-width: 899px) {
  .gallery { grid-template-columns: 1fr 1fr; gap: 22px; }
  .gcol { gap: 22px; margin-top: 0 !important; }
  .gcol:nth-child(even) { margin-top: 2.5rem !important; }
  .g::after { inset: -7px; --gl: 14px; --gt: 2px; opacity: .5; }
  .g:hover::after, .g:focus-within::after { inset: -9px; }
}

/* =========================================================
   FORMULAIRE D'INSCRIPTION (rouge)
   ========================================================= */
.theme-red { background: var(--red); color: var(--dark); }
.inscription { padding-block: clamp(5rem, 10vw, 9rem); position: relative; overflow: hidden; }
.inscription::before {
  content: ""; position: absolute; inset: 0; pointer-events: none;
  background: repeating-linear-gradient(0deg, transparent 0 calc(33.33% - 2px), rgba(12, 11, 10, .08) calc(33.33% - 2px) 33.33%);
}
.inscription__grid { position: relative; display: grid; grid-template-columns: repeat(12, minmax(0, 1fr)); gap: 3rem var(--gutter); align-items: center; }
.inscription__body { grid-column: 1 / span 7; display: grid; justify-items: start; gap: 1.6rem; }
.inscription__title { font-size: clamp(3.4rem, 8.6vw, 10rem); }
.inscription__lede { font-size: clamp(1.15rem, 1.6vw, 1.45rem); line-height: 1.45; max-width: 40ch; font-weight: 500; }
.steps { width: 100%; margin-top: .6rem; border-top: 2px solid var(--dark); }
.steps li { display: grid; grid-template-columns: 4rem 1fr; gap: 1rem; padding: 1.1rem 0; border-bottom: 1px solid rgba(12, 11, 10, .35); }
.steps__n { font-size: 3.2rem; line-height: .9; color: transparent; -webkit-text-stroke: 1.5px var(--dark); }
.steps strong { font: 400 1.5rem/1.05 var(--display); text-transform: uppercase; }
.steps p { margin-top: .3rem; line-height: 1.45; }
.inscription__ctas { display: flex; flex-wrap: wrap; gap: .75rem; margin-top: .6rem; }
.inscription__sheet {
  grid-column: 9 / span 4; position: relative; display: block; aspect-ratio: 1179 / 1633;
  background: #fff; box-shadow: 0 40px 80px -30px rgba(12, 11, 10, .6), 0 0 0 1px rgba(12, 11, 10, .1);
  transform: rotate(3deg); transition: transform .8s var(--ease-out);
}
.inscription__sheet img { width: 100%; height: 100%; object-fit: cover; }
.inscription__sheet:hover { transform: rotate(0deg) translateY(-6px); }
.inscription__stamp {
  position: absolute; right: -1rem; top: -1rem; display: grid; place-items: center; width: 5.2rem; height: 5.2rem; padding-top: .2rem;
  background: var(--dark); color: var(--photo-ink); font: 400 1.5rem/1 var(--display); transform: rotate(-8deg);
  clip-path: polygon(0 0, 100% 0, 100% 78%, 78% 100%, 0 100%);
}
@media (max-width: 899px) {
  .inscription__body, .inscription__sheet { grid-column: 1 / -1; }
  .inscription__sheet { max-width: 22rem; justify-self: center; width: 80%; }
}

/* =========================================================
   NOS RÉSEAUX
   ========================================================= */
.reseaux { padding-block: clamp(5rem, 10vw, 9rem); background: var(--bg); }
.reseaux__head { margin-bottom: clamp(2.5rem, 5vw, 4rem); }
.reseaux__title { font-size: clamp(3rem, 8vw, 9rem); }
.socials { border-top: 2px solid var(--ink); }
.socials li { border-bottom: 1px solid var(--line); }
.social {
  --b-hv: var(--red);
  position: relative; display: grid; grid-template-columns: 3.4rem 1fr auto auto; align-items: center; gap: 1rem 2rem;
  padding: clamp(1rem, 2vw, 1.6rem) var(--gutter); text-decoration: none; overflow: hidden; isolation: isolate;
  transition: color .45s var(--ease-out);
}
.social:hover, .social:focus-visible { color: var(--dark); }
.social .bands i { transition-duration: .6s; }
.social:hover .bands i, .social:focus-visible .bands i { transform: scaleX(1.01); }
.social__n { font: 400 1.5rem/1 var(--display); color: var(--red-text); transition: color .45s; }
.social:hover .social__n { color: var(--dark); }
.social__name { font-size: clamp(3rem, 9vw, 10rem); line-height: .95; }
.social__handle { font: 700 1rem/1.2 var(--cond); letter-spacing: .02em; color: var(--ink-dim); transition: color .45s; }
.social:hover .social__handle { color: var(--dark); }
.social__arrow { font-size: clamp(1.6rem, 3vw, 3rem); transition: transform .6s var(--ease-out); }
.social:hover .social__arrow { transform: rotate(45deg); }
@media (max-width: 899px) {
  .social { grid-template-columns: 2.4rem 1fr auto; }
  .social__handle { grid-column: 2 / 3; grid-row: 2; margin-top: -.2rem; }
  .social__arrow { grid-row: 1 / span 2; grid-column: 3; }
  .social__n { grid-row: 1 / span 2; }
}
.qr { display: flex; align-items: center; gap: 1.6rem; margin-top: clamp(2.5rem, 5vw, 4rem); }
.qr__code { flex: none; display: block; padding: .7rem; background: #fff; box-shadow: 0 0 0 2px var(--ink); transition: transform .6s var(--ease-out); }
.qr__code:hover { transform: rotate(-4deg) scale(1.04); }
.qr__code img { width: 120px; height: 120px; image-rendering: pixelated; }
.qr__txt { font-size: clamp(2rem, 4vw, 3.4rem); line-height: 1; }
.qr__or { color: var(--ink-dim); font-size: .6em; }
.qr__txt a { color: var(--red-text); text-decoration: none; }
.qr__txt a:hover { text-decoration: underline; text-decoration-thickness: 3px; text-underline-offset: 6px; }
.qr__txt { display: grid; gap: .7rem; min-width: 0; }
@media (max-width: 560px) { .qr { flex-direction: column; align-items: flex-start; gap: 1rem; } }
.qr__insta { display: flex; flex-wrap: wrap; align-items: center; overflow-wrap: anywhere; gap: .55rem; font: 700 1rem/1.25 var(--cond); letter-spacing: .02em; text-transform: uppercase; color: var(--ink-dim); }
.qr__insta svg { flex: none; width: 22px; height: 22px; fill: none; stroke: var(--ink); stroke-width: 2; }
.qr__insta svg .fill { fill: var(--ink); stroke: none; }

/* =========================================================
   CONTACTS
   ========================================================= */
.contacts { background: var(--bg-2); padding-block: 2rem clamp(5rem, 10vw, 9rem); position: relative; }
.contacts__inner { display: grid; justify-items: start; gap: 1.5rem; }
.contacts__tel { display: inline-block; font-size: clamp(3.4rem, 12.5vw, 15rem); text-decoration: none; line-height: .9; color: var(--ink); transition: color .4s; }
.contacts__tel:hover { color: var(--red-text); }
.contacts__grid { width: 100%; display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 2rem var(--gutter); margin-top: 2rem; padding-top: 2rem; border-top: 2px solid var(--ink); }
.contacts__k { font: 400 1.3rem/1 var(--display); text-transform: uppercase; margin-bottom: .6rem; }
.contacts__grid p { font-size: 1.1rem; line-height: 1.45; }
.contacts__grid a.u-link { word-break: break-word; }
@media (max-width: 1100px) { .contacts__grid { grid-template-columns: 1fr 1fr; } }
@media (max-width: 560px) { .contacts__grid { grid-template-columns: 1fr; } }

/* =========================================================
   PIED DE PAGE + MENTIONS
   ========================================================= */
.footer { background: var(--bg); padding-top: clamp(4rem, 8vw, 7rem); border-top: 1px solid var(--line); }
.footer__big { display: flex; align-items: center; gap: clamp(1.5rem, 4vw, 4rem); }
.footer__logo { width: clamp(90px, 12vw, 160px); height: auto; border-radius: 50%; }
.footer__claim { font-size: clamp(2.8rem, 9vw, 10rem); }
.footer__claim span { color: var(--red); }
.footer__cols { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 2rem var(--gutter); margin-top: clamp(3rem, 6vw, 5rem); padding-block: 2rem; border-top: 2px solid var(--ink); color: var(--ink-dim); }
.footer__k { font: 400 1.3rem/1 var(--display); text-transform: uppercase; color: var(--ink); margin-bottom: .8rem; }
.footer__cols li { padding: .2rem 0; }
.footer__cols a { text-decoration: none; }
.footer__cols a:hover { color: var(--ink); text-decoration: underline; text-decoration-color: var(--red); text-decoration-thickness: 2px; text-underline-offset: 4px; }
@media (max-width: 800px) { .footer__cols { grid-template-columns: 1fr; } }
.mentions { padding-block: 3rem 2rem; border-top: 1px solid var(--line); color: var(--ink-dim); font-size: .95rem; }
.mentions__title { font-size: clamp(2.2rem, 4vw, 3.6rem); color: var(--ink); margin-bottom: 2rem; }
.mentions__grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 2rem var(--gutter); }
.mentions__grid h3 { font: 400 1.15rem/1.1 var(--display); text-transform: uppercase; color: var(--ink); margin: 0 0 .6rem; }
.mentions__grid h3 ~ h3 { margin-top: 1.4rem; }
.mentions__grid p { line-height: 1.55; }
.mentions__grid a { color: var(--ink); }
.mentions .todo { color: var(--red-text); font-weight: 600; }
@media (max-width: 1100px) { .mentions__grid { grid-template-columns: 1fr 1fr; } }
@media (max-width: 600px) { .mentions__grid { grid-template-columns: 1fr; } }
.footer__legal { display: flex; justify-content: space-between; flex-wrap: wrap; gap: 1rem; margin-top: 3rem; padding-top: 1.2rem; border-top: 1px solid var(--line); font: 700 .9rem/1.3 var(--cond); letter-spacing: .02em; text-transform: uppercase; }
.footer__top { text-decoration: none; color: var(--ink); }
.footer__top:hover { color: var(--red-text); }

/* =========================================================
   LIGHTBOX (toujours sombre)
   ========================================================= */
.lightbox { position: fixed; inset: 0; z-index: 120; background: rgba(8, 7, 6, .96); color: var(--photo-ink); display: grid; place-items: center; padding: 4.5rem var(--gutter) 5.5rem; }
.lightbox[hidden] { display: none; }
.lightbox__fig { display: grid; justify-items: center; gap: 1rem; max-height: 100%; }
.lightbox__shot { position: relative; display: grid; }
/* mêmes équerres que la galerie, en clair sur le fond sombre */
.lightbox__shot::after {
  content: ""; position: absolute; inset: -14px; pointer-events: none;
  --gc: var(--photo-ink); --gt: 2px; --gl: 26px; opacity: .75;
  background:
    linear-gradient(var(--gc), var(--gc)) 0 0 / var(--gl) var(--gt) no-repeat,
    linear-gradient(var(--gc), var(--gc)) 0 0 / var(--gt) var(--gl) no-repeat,
    linear-gradient(var(--gc), var(--gc)) 100% 0 / var(--gl) var(--gt) no-repeat,
    linear-gradient(var(--gc), var(--gc)) 100% 0 / var(--gt) var(--gl) no-repeat,
    linear-gradient(var(--gc), var(--gc)) 0 100% / var(--gl) var(--gt) no-repeat,
    linear-gradient(var(--gc), var(--gc)) 0 100% / var(--gt) var(--gl) no-repeat,
    linear-gradient(var(--gc), var(--gc)) 100% 100% / var(--gl) var(--gt) no-repeat,
    linear-gradient(var(--gc), var(--gc)) 100% 100% / var(--gt) var(--gl) no-repeat;
}
.lightbox__fig img { display: block; max-height: calc(100svh - 11rem); width: auto; max-width: 100%; object-fit: contain; }
.lightbox__cap { font: 400 1.2rem/1 var(--display); color: var(--red); }
.lightbox__btn, .lightbox__close {
  position: absolute; display: grid; place-items: center; width: 3.2rem; height: 3.2rem;
  box-shadow: inset 0 0 0 2px rgba(241, 236, 227, .6); font-size: 1.2rem; transition: background-color .3s, color .3s;
  clip-path: polygon(0 0, 100% 0, 100% 78%, 78% 100%, 0 100%);
}
.lightbox__btn:hover, .lightbox__close:hover { background: var(--red); color: var(--dark); box-shadow: none; }
.lightbox :focus-visible { outline-color: var(--red); }
.lightbox__prev { left: var(--gutter); top: 50%; transform: translateY(-50%); }
.lightbox__next { right: var(--gutter); top: 50%; transform: translateY(-50%); }
.lightbox__close { right: var(--gutter); top: 1rem; }
@media (max-width: 700px) { .lightbox__prev, .lightbox__next { top: auto; bottom: 1rem; transform: none; } }

/* =========================================================
   ÉTATS D'ANIMATION (uniquement avec JS + GSAP)
   ========================================================= */
.anim [data-intro], .anim [data-reveal] { opacity: 0; }
.anim [data-intro-title] { transform: translateY(105%); }
.anim [data-lines] .line > span { transform: translateY(108%); }
.anim [data-mask], .anim [data-hz-mask] { clip-path: inset(100% 0 0 0); }
.anim .hero__frame { clip-path: inset(0 0 100% 0); }

@media (prefers-reduced-motion: reduce) {
  .grain, .dot, .hero__scroll i::after, .hz__hint span { animation: none !important; }
  .btn__roll > .r, .bands i, .menu__preview img, .ropebox path, .mode__icon svg { transition: none !important; }
}

/* =========================================================
   BLOG — liste du pied de page
   ========================================================= */
.blogfoot { padding-block: 1.5rem; border-top: 1px solid var(--line); }
.blogfoot__details { interpolate-size: allow-keywords; }
.blogfoot__row { list-style: none; cursor: pointer; display: grid; grid-template-columns: auto 1fr auto; align-items: center; gap: .5rem 2rem; padding: .6rem 0; }
.blogfoot__row::-webkit-details-marker { display: none; }
.blogfoot__title { font-size: clamp(2.2rem, 4.4vw, 4rem); }
.blogfoot__sub { color: var(--ink-dim); font: 700 .95rem/1.3 var(--cond); letter-spacing: .02em; text-transform: uppercase; }
.blogfoot__toggle { display: inline-flex; align-items: center; gap: .8rem; font: 400 1.1rem/1 var(--display); text-transform: uppercase; }
.blogfoot__toggle i { position: relative; display: grid; place-items: center; width: 2.75rem; height: 2.75rem; background: var(--red); clip-path: polygon(0 0, 100% 0, 100% 78%, 78% 100%, 0 100%); }
.blogfoot__toggle i::before, .blogfoot__toggle i::after { content: ""; position: absolute; width: 14px; height: 2px; background: var(--dark); transition: transform .45s var(--ease-io); }
.blogfoot__toggle i::after { transform: rotate(90deg); }
.blogfoot__details[open] .blogfoot__toggle i::after { transform: rotate(0deg); }
.blogfoot__close, .blogfoot__details[open] .blogfoot__open { display: none; }
.blogfoot__details[open] .blogfoot__close { display: inline; }
.blogfoot__row:hover .blogfoot__title { color: var(--red-text); }
.blogfoot__details::details-content { height: 0; overflow: clip; transition: height .6s var(--ease-io), content-visibility .6s allow-discrete; }
.blogfoot__details[open]::details-content { height: auto; }
.blogfoot__panel { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 2.6fr); gap: 1.5rem var(--gutter); padding: 1.2rem 0 1rem; }
.blogfoot__intro { display: grid; align-content: start; justify-items: start; gap: .8rem; color: var(--ink-dim); }
.blogfoot__list { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0 var(--gutter); border-top: 2px solid var(--ink); counter-reset: art; }
.blogfoot__list li { border-bottom: 1px solid var(--line); counter-increment: art; }
.blogfoot__list a { display: grid; grid-template-columns: 2.4rem 1fr; gap: .15rem .6rem; padding: .85rem 0; text-decoration: none; color: var(--ink); }
.blogfoot__list a::before { content: counter(art, decimal-leading-zero); grid-row: 1 / span 2; font: 400 1.05rem/1.2 var(--display); color: var(--red); }
.blogfoot__cat { font: 700 .78rem/1.2 var(--cond); letter-spacing: .04em; text-transform: uppercase; color: var(--ink-dim); }
.blogfoot__t { font-weight: 600; line-height: 1.3; transition: color .3s; }
.blogfoot__list a:hover .blogfoot__t, .blogfoot__list a:focus-visible .blogfoot__t { color: var(--red-text); text-decoration: underline; text-decoration-thickness: 2px; text-underline-offset: 3px; }
@media (max-width: 1000px) { .blogfoot__panel { grid-template-columns: 1fr; } }
@media (max-width: 700px) {
  .blogfoot__row { grid-template-columns: 1fr auto; }
  .blogfoot__sub { grid-column: 1 / -1; grid-row: 2; }
  .blogfoot__open, .blogfoot__close { display: none !important; }
  .blogfoot__list { grid-template-columns: 1fr; }
}
@media (prefers-reduced-motion: reduce) { .blogfoot__details::details-content { transition: none; } }

/* =========================================================
   QUESTIONS FRÉQUENTES (rubrique à part entière, fond papier)
   ========================================================= */
/* `background` et `color` explicites, comme la rubrique « Nos cours » : sans eux,
   `theme-paper` ne faisait que redéfinir des variables et la section héritait du
   fond et du texte du mode nuit — donc du sombre sur du sombre. */
.faq {
  padding-block: clamp(4rem, 9vw, 8rem) clamp(5rem, 10vw, 9rem); position: relative;
  background: var(--bg); color: var(--ink);
}

/* Toute la rubrique est repliée : fermée, on ne voit que le titre et le bouton.
   L'en-tête EST le bouton d'ouverture. */
.faq__panel { interpolate-size: allow-keywords; }
.faq__head {
  list-style: none; cursor: pointer;
  display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
  gap: 1.2rem var(--gutter); align-items: end;
}
.faq__head::-webkit-details-marker { display: none; }
.faq__head:hover .faq__title { color: var(--red-text); }
.faq__title { transition: color .35s; }

/* bouton d'ouverture : coin de ring, la barre verticale se rétracte à l'ouverture */
.faq__open {
  grid-column: 1 / -1; justify-self: start; display: inline-flex; align-items: center; gap: 1rem;
  margin-top: .6rem; font: 400 clamp(1.05rem, 1.3vw, 1.3rem)/1 var(--display); text-transform: uppercase; color: var(--ink);
}
.faq__open-txt { position: relative; display: grid; }
.faq__open-txt > span { grid-area: 1 / 1; transition: opacity .3s, transform .4s var(--ease-out); }
.faq__open-txt > span:last-child { opacity: 0; transform: translateY(60%); }
.faq__panel[open] .faq__open-txt > span:first-child { opacity: 0; transform: translateY(-60%); }
.faq__panel[open] .faq__open-txt > span:last-child { opacity: 1; transform: none; }
.faq__open i {
  position: relative; display: block; width: 3.1rem; height: 3.1rem; flex: none;
  background: var(--red); clip-path: polygon(0 0, 100% 0, 100% 76%, 76% 100%, 0 100%);
  transition: background .3s;
}
.faq__open i::before, .faq__open i::after {
  content: ""; position: absolute; top: 50%; left: 50%; width: 18px; height: 3px; margin: -1.5px 0 0 -9px;
  background: var(--dark); transition: transform .5s var(--ease-io);
}
.faq__open i::after { transform: rotate(90deg); }
.faq__panel[open] .faq__open i::after { transform: rotate(0deg); }
.faq__head:hover .faq__open i { background: var(--ink); }
.faq__head:hover .faq__open i::before, .faq__head:hover .faq__open i::after { background: var(--surface); }

.faq__panel::details-content { height: 0; overflow: clip; transition: height .7s var(--ease-io), content-visibility .7s allow-discrete; }
.faq__panel[open]::details-content { height: auto; }
.faq__body { padding-top: clamp(2.4rem, 5vw, 4rem); }
/* les six rubriques montent l'une après l'autre à l'ouverture */
.faq__panel[open] .faq__group { animation: faq-group-in .55s var(--ease-out) both; }
.faq__panel[open] .faq__group:nth-child(2) { animation-delay: .06s; }
.faq__panel[open] .faq__group:nth-child(3) { animation-delay: .12s; }
.faq__panel[open] .faq__group:nth-child(4) { animation-delay: .18s; }
.faq__panel[open] .faq__group:nth-child(5) { animation-delay: .24s; }
.faq__panel[open] .faq__group:nth-child(6) { animation-delay: .3s; }
@keyframes faq-group-in { from { opacity: 0; transform: translateY(26px); } to { opacity: 1; transform: none; } }
.faq__more { margin-top: clamp(2rem, 4vw, 3rem); color: var(--ink-dim); font-size: 1.05rem; }
/* interligne 1 et non .88 : plus serré, l'accent du É de « FRÉQUENTES »
   vient buter contre la ligne du dessus et disparaît */
.faq__title { font-size: clamp(3rem, 7.4vw, 8rem); line-height: 1; }
.faq__lede { font-size: clamp(1.05rem, 1.4vw, 1.3rem); line-height: 1.5; color: var(--ink-dim); max-width: 46ch; padding-bottom: .5rem; }
.faq__head .kicker { grid-column: 1 / -1; }

.faq__grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: clamp(2.4rem, 4vw, 3.6rem) var(--gutter); align-items: start; }
.faq__group { display: grid; align-content: start; }
.faq__gtitle {
  display: flex; align-items: baseline; gap: .8rem; padding-bottom: .7rem;
  font: 400 clamp(1.5rem, 2.2vw, 2.1rem)/1.05 var(--display); text-transform: uppercase; color: var(--ink);
}
.faq__gnum { font-size: .62em; color: var(--red); }
.faq__list { border-top: 3px solid var(--ink); }

/* Chaque question est un accordéon fermé au départ. Rien ne s'ouvre au
   défilement : seul un clic (ou la touche Entrée) ouvre et referme. */
.faq__q { position: relative; border-bottom: 1px solid var(--line); interpolate-size: allow-keywords; }
/* trait rouge qui se trace sous la question au survol, façon corde */
.faq__q::after {
  content: ""; position: absolute; left: 0; bottom: -1px; height: 2px; width: 100%;
  background: var(--red); transform: scaleX(0); transform-origin: left;
  transition: transform .5s var(--ease-out);
}
.faq__q:hover::after, .faq__q:focus-within::after, .faq__q[open]::after { transform: scaleX(1); }

.faq__q summary {
  list-style: none; cursor: pointer; display: grid; grid-template-columns: 1fr auto; align-items: center; gap: 1.4rem;
  padding: 1.15rem 0; font-size: clamp(1.02rem, 1.15vw, 1.15rem); font-weight: 600; line-height: 1.4; color: var(--ink);
}
.faq__q summary::-webkit-details-marker { display: none; }
.faq__q summary > span { transition: transform .45s var(--ease-out), color .3s; }
.faq__q:hover summary > span { transform: translateX(6px); color: var(--red-text); }
.faq__q[open] summary > span { color: var(--red-text); }
.faq__q[open] summary { padding-bottom: .35rem; }

/* bouton « coin de ring » : se remplit de rouge et pivote à l'ouverture */
.faq__q summary i {
  position: relative; display: block; width: 2.1rem; height: 2.1rem; flex: none;
  background: var(--ink); clip-path: polygon(0 0, 100% 0, 100% 74%, 74% 100%, 0 100%);
  transition: background .3s;
}
/* le carré ne tourne pas : combiné au clip-path, le rendu bavait sur certains
   moteurs. C'est la barre verticale qui pivote, le + devient un −. */
.faq__q summary i::before, .faq__q summary i::after {
  content: ""; position: absolute; top: 50%; left: 50%; width: 13px; height: 2px; margin: -1px 0 0 -6.5px;
  background: var(--surface); transition: transform .45s var(--ease-io);
}
.faq__q summary i::after { transform: rotate(90deg); }
.faq__q:hover summary i { background: var(--red); }
.faq__q[open] summary i { background: var(--red); }
.faq__q[open] summary i::after { transform: rotate(0deg); }

.faq__q::details-content { height: 0; overflow: clip; transition: height .45s var(--ease-io), content-visibility .45s allow-discrete; }
.faq__q[open]::details-content { height: auto; }

/* la réponse est tenue par trois cordes, le motif du club */
.faq__a { position: relative; padding: .2rem 3.4rem 1.3rem 1.4rem; margin-bottom: .9rem; }
.faq__a::before {
  content: ""; position: absolute; left: 0; top: .35rem; bottom: 1.5rem; width: 9px;
  background:
    linear-gradient(var(--red), var(--red)) 0 0 / 2px 100% no-repeat,
    linear-gradient(var(--ink), var(--ink)) 50% 0 / 2px 100% no-repeat,
    linear-gradient(var(--red), var(--red)) 100% 0 / 2px 100% no-repeat;
}
.faq__a p { font-size: 1.04rem; line-height: 1.62; color: var(--ink); max-width: 60ch; }
.faq__q[open] .faq__a p { animation: faq-in .5s var(--ease-out) both; }
@keyframes faq-in { from { opacity: 0; transform: translateY(6px); } to { opacity: 1; transform: none; } }

@media (max-width: 899px) {
  .faq__head { grid-template-columns: 1fr; align-items: start; }
  .faq__lede { padding-bottom: 0; max-width: none; }
  .faq__grid { grid-template-columns: 1fr; gap: 2.4rem; }
  .faq__q summary { gap: 1rem; padding: 1.05rem 0; }
  .faq__a { padding-right: .4rem; }
}
@media (prefers-reduced-motion: reduce) {
  .faq__q::details-content, .faq__panel::details-content { transition: none; }
  .faq__q[open] .faq__a p, .faq__panel[open] .faq__group { animation: none; }
  .faq__q::after, .faq__q summary > span, .faq__q summary i,
  .faq__open-txt > span, .faq__open i::before, .faq__open i::after { transition: none; }
}

/* =========================================================
   BLOG — pages d'article et lecteur
   ========================================================= */
.page-post .nav { position: sticky; }
.page-post .nav__section a { text-decoration: none; }
.post { padding-block: clamp(2rem, 5vw, 4rem) clamp(4rem, 8vw, 6rem); max-width: 1100px; }
.crumbs { display: flex; flex-wrap: wrap; gap: .5rem; font: 700 .85rem/1.3 var(--cond); letter-spacing: .03em; text-transform: uppercase; color: var(--ink-dim); margin-bottom: 2rem; }
.crumbs a { color: var(--ink); text-decoration: none; }
.crumbs a:hover { color: var(--red-text); }
.post__head { display: grid; justify-items: start; gap: 1rem; }
.post__title { font-size: clamp(2.6rem, 6.4vw, 6rem); line-height: .92; text-wrap: balance; max-width: 18ch; }
.post__meta { color: var(--ink-dim); font: 700 .9rem/1.3 var(--cond); letter-spacing: .03em; text-transform: uppercase; }
.post__ropes { display: grid; gap: 5px; margin-block: clamp(1.8rem, 4vw, 3rem); max-width: 68ch; }
.post__ropes i { display: block; height: 3px; background: var(--red); border-radius: 2px; }
.post__ropes i:nth-child(2) { background: var(--ink); }
.post__body { max-width: 68ch; font-size: 1.12rem; line-height: 1.72; }
.post__body > * + * { margin-top: 1.1rem; }
.post__body .lead { font-size: clamp(1.25rem, 2vw, 1.5rem); line-height: 1.5; color: var(--ink); font-weight: 500; }
.post__body h2 { font: 400 clamp(1.7rem, 3vw, 2.4rem)/1 var(--display); text-transform: uppercase; margin-top: 2.6rem; text-wrap: balance; }
.post__body ul { display: grid; gap: .55rem; }
.post__body ul li { position: relative; padding-left: 1.5rem; }
.post__body ul li::before { content: ""; position: absolute; left: 0; top: .78em; width: .8rem; height: 3px; background: var(--red); }
.post__body strong { font-weight: 600; }
.post__body em { color: var(--ink-dim); }
.clubbox { margin-top: 2.6rem !important; padding: 1.5rem 1.4rem 1.6rem; background: var(--bg-2); display: grid; gap: .8rem; clip-path: polygon(0 0, 100% 0, 100% calc(100% - 22px), calc(100% - 22px) 100%, 0 100%); border-top: 4px solid var(--red); }
.clubbox__name { font-size: clamp(1.6rem, 3vw, 2.2rem); }
.clubbox ul { gap: .35rem; font-size: 1rem; }
.clubbox__ctas { display: flex; flex-wrap: wrap; gap: .6rem; margin-top: .4rem; }
.post__faq { margin-top: 2.6rem !important; border-top: 2px solid var(--ink); }
.post__faq h2 { margin: 1.2rem 0 .6rem; }
.post__faq details { border-bottom: 1px solid var(--line); }
.post__faq summary { cursor: pointer; list-style: none; display: flex; justify-content: space-between; gap: 1rem; padding: 1rem 0; font-weight: 600; }
.post__faq summary::-webkit-details-marker { display: none; }
.post__faq summary::after { content: "+"; font: 400 1.5rem/1 var(--display); color: var(--red); transition: transform .3s var(--ease-out); }
.post__faq details[open] summary::after { transform: rotate(45deg); }
.post__faq details p { padding: 0 0 1rem; color: var(--ink-dim); }
.post__more { margin-top: clamp(3rem, 6vw, 4.5rem); display: grid; gap: 1rem; }
.post__more ul { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 1rem; }
.post__more a { display: grid; gap: .5rem; height: 100%; padding: 1.1rem 1.1rem 1.3rem; text-decoration: none; background: var(--bg-2); border-top: 3px solid var(--ink); transition: border-color .3s, transform .5s var(--ease-out); }
.post__more a:hover { border-top-color: var(--red); transform: translateY(-3px); }
.post__more-cat { font: 700 .78rem/1.2 var(--cond); letter-spacing: .04em; text-transform: uppercase; color: var(--red-text); }
.post__more-t { font: 400 1.3rem/1.05 var(--display); text-transform: uppercase; }
@media (max-width: 800px) { .post__more ul { grid-template-columns: 1fr; } }
.bloglist { display: grid; border-top: 2px solid var(--ink); counter-reset: art; }
.bloglist li { border-bottom: 1px solid var(--line); counter-increment: art; }
.bloglist a { display: grid; grid-template-columns: 3rem 1fr; gap: .25rem .8rem; padding: 1.2rem 0; text-decoration: none; }
.bloglist a::before { content: counter(art, decimal-leading-zero); grid-row: 1 / span 3; font: 400 1.5rem/1 var(--display); color: var(--red); }
.bloglist__cat { font: 700 .8rem/1.2 var(--cond); letter-spacing: .04em; text-transform: uppercase; color: var(--ink-dim); }
.bloglist__t { font: 400 clamp(1.4rem, 2.6vw, 2.1rem)/1.02 var(--display); text-transform: uppercase; transition: color .3s; }
.bloglist__d { color: var(--ink-dim); max-width: 70ch; }
.bloglist a:hover .bloglist__t { color: var(--red-text); }
.post-foot { padding-block: 2.5rem; border-top: 1px solid var(--line); color: var(--ink-dim); }
.post-back { display: flex; flex-wrap: wrap; gap: .8rem 2rem; margin-bottom: 1.6rem; }
.post-foot__row { display: grid; gap: .6rem; }
.post-foot .display { color: var(--ink); font-size: 1.6rem; }
.post-foot a { color: var(--ink); }

/* lecteur d'article (version autonome du site) */
.reader { position: fixed; inset: 0; z-index: 110; background: var(--bg); color: var(--ink); display: grid; grid-template-rows: auto 1fr; }
.reader[hidden] { display: none; }
.reader__bar { display: flex; align-items: center; justify-content: space-between; gap: 1rem; padding: 1rem var(--gutter); border-bottom: 1px solid var(--line); }
.reader__label { font-size: 1.3rem; }
.reader__label a { text-decoration: none; }
.reader__scroll { overflow-y: auto; overscroll-behavior: contain; }
.reader__close { display: inline-flex; align-items: center; gap: .6rem; height: 2.75rem; padding: .15rem 1rem 0; font: 400 1.1rem/1 var(--display); text-transform: uppercase; box-shadow: inset 0 0 0 2px var(--ink); clip-path: polygon(0 0, 100% 0, 100% calc(100% - 9px), calc(100% - 9px) 100%, 0 100%); }
.reader__close:hover { background: var(--ink); color: var(--bg); }
