/* ============================================================
   Founders University — système partagé v2 « Cahier du soir »
   (tokens + chrome + toute la bibliothèque de composants).

   Chargé par TOUTES les pages publiques, AVANT les feuilles de page
   (landing.css, program.css, legal.css). Spécification :
   docs/relaunch-2026-Q4/design/BRIEF-V2.md. Tout ce qui est partagé
   entre deux pages vit ICI ; une feuille de page n'ajoute que sa mise
   en page. Personne n'édite ce fichier après la livraison du kit.

   Sommaire
     1  Tokens                     15  Bandeau de faits (6 champs)
     2  Reset + échafaudage        16  Accordéon + chips + FAQ
     3  Typographie                17  Grille de livrables
     4  Mise en page + surfaces    18  Pour vous / pas pour vous
     5  Lien d'évitement + barre   19  Calendrier de cohortes
     6  Nav + tiroir               20  Tarifs
     7  Boutons (+ CTA magnétique) 21  Étapes (admission)
     8  Pastilles de statut        22  Équipe
     9  Héros (couvrant + texte)   23  Marquee
    10  Bandeau de chiffres        24  Bande photo (clip-path)
    11  Registres (rows draw)      25  Cartes collantes empilées
    12  Cartes programme (égales)  26  Tableau comparatif
    13  Modale <dialog>            27  CTA final + barre collante
    14  Sous-nav sticky            28  Formulaires
                                   29  Modale Réserver (reserve.js)
                                   30  Révélations + scroll-driven
                                   31  Pied de page
                                   32  Impression

   Une seule police (Bricolage Grotesque, variable) + mono système.
   Pas de verre, pas de dégradé de texte, un seul orange. Chaque
   mouvement a sa branche `prefers-reduced-motion` ; tout est lisible
   sans JS (les classes `.js …` ne masquent qu'avec chrome.js chargé).
   ============================================================ */

/* ============================================================
   1 · TOKENS  (BRIEF-V2 §2 — ne pas dupliquer ailleurs)
   ============================================================ */
:root {
  /* ---------- Couleur (palette conservée) ---------- */
  --navy:        #0A0E27;
  --navy-deep:   #060912;
  --navy-soft:   #141A3D;
  --orange:      #FF5F1F;   /* aplats, traits, texte SUR navy uniquement */
  --orange-soft: #FF7A40;   /* survol de --orange */
  --orange-ink:  #BC3E08;   /* TEXTE orange sur crème / blanc (5,1:1) */
  --cream:       #FAF7F0;
  --cream-warm:  #F3EEE3;
  --stone:       #E8E1D3;   /* pierre de taille — surface claire alternative */
  --zinc:        #A7AEBD;   /* méta sur navy (8,5:1) */
  --text:        #1A1F36;
  --muted:       #5F6779;   /* ÉCHOUE sur --stone : y utiliser --text-2 */
  --text-2:      rgba(26, 31, 54, 0.82);
  --ok:          #1B7F4C;
  --err:         #B3261E;
  --live:        #34D399;
  --cyan:        #00D4FF;   /* retiré de la palette ; alias conservé pour l'app */
  --line:        rgba(10, 14, 39, 0.14);
  --line-strong: rgba(10, 14, 39, 0.26);
  --line-light:  rgba(250, 247, 240, 0.18);
  --on-navy:     var(--cream);
  --on-navy-2:   rgba(250, 247, 240, 0.74);
  --on-navy-3:   rgba(250, 247, 240, 0.60);

  /* ---------- Typographie : UNE famille + mono système ---------- */
  --font:  'Bricolage Grotesque', 'Bricolage Fallback', Arial, system-ui, sans-serif;
  --mono:  ui-monospace, 'SF Mono', Menlo, Consolas, 'Liberation Mono', monospace;
  --serif: var(--font);   /* alias de compatibilité (feuilles v1) */
  --sans:  var(--font);   /* alias de compatibilité (feuilles v1) */
  /* Réglages d'axes par rôle (opsz 12-96 · wdth 75-100 · wght 200-800) */
  --fv-display: "opsz" 96, "wdth" 100, "wght" 700;
  --fv-display-from: "opsz" 96, "wdth" 82, "wght" 800;   /* état initial du H1 qui « se pose » */
  --fv-h2:      "opsz" 96, "wdth" 100, "wght" 600;
  --fv-h3:      "opsz" 40, "wdth" 100, "wght" 600;
  --fv-body:    "opsz" 14, "wdth" 100, "wght" 400;
  --fv-ui:      "opsz" 14, "wdth" 100, "wght" 600;
  --fv-stat:    "opsz" 96, "wdth" 86, "wght" 700;
  --fv-mark:    "opsz" 96, "wdth" 80, "wght" 700;        /* logotype */
  --fs-display: clamp(2.875rem, 1.9rem + 4.6vw, 6.75rem);  /* 46 → 108 */
  --fs-h1:      clamp(2.5rem, 1.7rem + 3.6vw, 5.5rem);     /* 40 → 88 */
  --fs-h2:      clamp(2rem, 1.45rem + 2.5vw, 3.5rem);      /* 32 → 56 */
  --fs-h3:      clamp(1.25rem, 1.1rem + 0.7vw, 1.625rem);  /* 20 → 26 */
  --fs-lede:    clamp(1.0625rem, 0.95rem + 0.55vw, 1.25rem); /* 17 → 20 */
  --fs-body:    1rem;
  --fs-small:   0.875rem;
  --fs-micro:   0.75rem;
  --fs-mono:    0.8125rem;                                  /* 13 */
  --fs-stat:    clamp(2.75rem, 1.7rem + 4.4vw, 5.5rem);    /* 44 → 88 */
  --lh-tight: 0.98; --lh-snug: 1.12; --lh-h3: 1.22; --lh-body: 1.6; --lh-prose: 1.7;
  --ls-display: -0.025em; --ls-h2: -0.02em; --ls-mono: 0.08em; --ls-mark: -0.03em;

  /* ---------- Espace (8 pt, fluide en haut d'échelle) ---------- */
  --s-1: 4px; --s-2: 8px; --s-3: 12px; --s-4: 16px; --s-5: 24px;
  --s-6: 32px; --s-7: 48px; --s-8: 64px; --s-9: 96px;
  --gutter:    clamp(20px, 4.5vw, 96px);
  --section-y: clamp(64px, 9vw, 128px);
  --wrap:      1360px;
  --prose:     62ch;
  --nav-h:     72px;
  --nav-h-min: 60px;
  --subnav-h:  56px;

  /* ---------- Rayons ---------- */
  --r-xs: 3px; --r-sm: 6px; --r-md: 12px; --r-lg: 20px; --r-pill: 999px;

  /* ---------- Ombres (rares : la hiérarchie vient des filets) ---------- */
  --sh-card:  0 1px 0 rgba(10,14,39,0.04), 0 10px 28px rgba(10,14,39,0.07);
  --sh-lift:  0 14px 36px rgba(10,14,39,0.12);
  --sh-modal: 0 32px 80px rgba(6,9,18,0.45);
  --ring:     0 0 0 4px rgba(255,95,31,0.22);

  /* ---------- Mouvement ---------- */
  --d-fast: 160ms; --d-base: 240ms; --d-slow: 520ms; --d-reveal: 640ms; --d-settle: 900ms;
  --e-out:   cubic-bezier(0.22, 1, 0.36, 1);
  --e-inout: cubic-bezier(0.65, 0, 0.35, 1);
  --e-soft:  cubic-bezier(0.33, 1, 0.68, 1);

  /* ---------- Z-index ---------- */
  --z-bg: 0; --z-content: 1; --z-sticky: 90; --z-nav: 100;
  --z-modal: 200; --z-toast: 300; --z-progress: 999; --z-skip: 1000;
}

/* ============================================================
   2 · RESET + ÉCHAFAUDAGE
   ============================================================ */
/* Sans `border-box`, un input `width:100%` + padding déborde de sa cellule
   et chevauche son voisin (régression vécue sur /waitlist). Ne jamais retirer. */
*, *::before, *::after { box-sizing: border-box; }
html { -webkit-text-size-adjust: 100%; scroll-behavior: smooth;
  /* Ancres : la nav condensée (60) + une sous-nav (56) + une respiration. */
  scroll-padding-top: calc(var(--nav-h-min) + var(--subnav-h) + 16px); }
html, body { min-height: 100%; margin: 0; }

/* Pied de page collant, scopé : l'espace fondateur (app/) garde sa grille. */
body:not(.app-body) { min-height: 100vh; display: flex; flex-direction: column;
  background: var(--cream); color: var(--text);
  font-family: var(--font); font-size: var(--fs-body); line-height: var(--lh-body);
  font-optical-sizing: auto; font-variation-settings: var(--fv-body);
  -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;
  text-rendering: optimizeLegibility; }
body:not(.app-body) > main { flex: 1 0 auto; }
body:not(.app-body) > footer { flex-shrink: 0; }
body:has(dialog[open]), body.nav-open, body.modal-open { overflow: hidden; }

img, picture, svg, video { max-width: 100%; }
img { height: auto; }
::selection { background: rgba(255, 95, 31, 0.24); }
[hidden] { display: none !important; }

/* Transitions entre pages (MPA) : fondu 200 ms, la nav et le logotype
   restent en place. Progressif — ignoré par les navigateurs sans support. */
@view-transition { navigation: auto; }
body > nav { view-transition-name: nav; }
.logo { view-transition-name: wordmark; }
::view-transition-old(root), ::view-transition-new(root) { animation-duration: 200ms; }
@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  ::view-transition-group(*), ::view-transition-old(*), ::view-transition-new(*) { animation: none !important; }
}

/* ============================================================
   3 · TYPOGRAPHIE
   ============================================================ */
h1, h2, h3, h4 { margin: 0; color: var(--navy); text-wrap: balance; font-weight: 600; }
h1 { font-size: var(--fs-h1); line-height: var(--lh-tight); letter-spacing: var(--ls-display);
  font-variation-settings: var(--fv-display); max-width: 14ch; }
.display { font-size: var(--fs-display); }
h2 { font-size: var(--fs-h2); line-height: var(--lh-snug); letter-spacing: var(--ls-h2);
  font-variation-settings: var(--fv-h2); max-width: 20ch; }
h3 { font-size: var(--fs-h3); line-height: var(--lh-h3); letter-spacing: -0.01em;
  font-variation-settings: var(--fv-h3); }
h4 { font-size: 1.0625rem; line-height: 1.3; font-variation-settings: var(--fv-ui); }
/* Le mot accentué d'un titre : même graisse, l'orange fait le travail. */
h1 em, h2 em { font-style: normal; color: var(--orange-ink); }
.on-navy h1 em, .on-navy h2 em, .hero h1 em, .hero h2 em { color: var(--orange); }
.on-navy h1, .on-navy h2, .on-navy h3, .on-navy h4,
.hero h1, .hero h2, .hero h3 { color: var(--on-navy); }

p { margin: 0 0 1em; text-wrap: pretty; }
p:last-child { margin-bottom: 0; }
.lede { font-size: var(--fs-lede); line-height: 1.5; color: var(--muted); max-width: var(--prose); }
.on-navy .lede, .hero .lede { color: var(--on-navy-2); }
.on-stone .lede { color: var(--text-2); }
.fine { font-family: var(--mono); font-size: var(--fs-micro); letter-spacing: 0.02em;
  line-height: 1.55; color: var(--muted); }
.on-navy .fine, .hero .fine { color: var(--on-navy-3); }
.on-stone .fine { color: var(--text-2); }
strong, b { font-variation-settings: var(--fv-ui); font-weight: 600; }
small { font-size: 0.75em; }

a { color: inherit; }
a:not([class]) { color: var(--orange-ink); text-decoration: underline;
  text-underline-offset: 0.16em; text-decoration-thickness: 1px; }
a:not([class]):hover { text-decoration-thickness: 2px; }
.on-navy a:not([class]), .hero a:not([class]) { color: var(--orange); }
.on-stone a:not([class]) { color: var(--navy); }
a:focus-visible, button:focus-visible, [tabindex]:focus-visible {
  outline: 2px solid var(--orange); outline-offset: 3px; border-radius: var(--r-xs); }

/* Voix mono : étiquettes, dates, prix-méta, index. Jamais pour une phrase. */
.mono, .meta { font-family: var(--mono); font-size: var(--fs-mono); letter-spacing: var(--ls-mono);
  text-transform: uppercase; font-variant-numeric: tabular-nums; }
.meta { color: var(--muted); }
.on-navy .meta, .hero .meta { color: var(--zinc); }
.on-stone .meta { color: var(--text-2); }
.num, [data-count], [data-countdown], .amount, .when, .stat .n { font-variant-numeric: tabular-nums lining-nums; }

/* Eyebrow : orange plat + trait de 28 px (CLAUDE.md A.4 §6). Mono. */
.eyebrow { display: inline-flex; align-items: center; gap: 12px; margin: 0 0 14px;
  font-family: var(--mono); font-size: var(--fs-micro); font-weight: 500; letter-spacing: 0.14em;
  text-transform: uppercase; color: var(--orange-ink); background: none; border: 0; padding: 0; }
.eyebrow::before { content: ""; width: 28px; height: 1px; background: var(--orange); flex: none; }
.on-navy .eyebrow, .hero .eyebrow { color: var(--orange); }
.on-stone .eyebrow { color: var(--text); }
.section-head { max-width: 62ch; margin-bottom: clamp(32px, 5vw, 56px); }
.section-head .lede { margin-top: 16px; }
.section-head--center { margin-inline: auto; text-align: center; }
.section-head--center .eyebrow { justify-content: center; }
.section-head--center h2, .section-head--center .lede { margin-inline: auto; }
/* Tête de section en deux colonnes : titre à gauche, lede à droite (registre). */
.section-head--split { display: grid; gap: 20px 48px; max-width: none; }
@media (min-width: 900px) { .section-head--split { grid-template-columns: 7fr 5fr; align-items: end; }
  .section-head--split .lede { margin-top: 0; padding-bottom: 6px; } }

/* ============================================================
   4 · MISE EN PAGE + SURFACES
   ============================================================ */
.wrap { width: 100%; max-width: var(--wrap); margin: 0 auto; padding: 0 var(--gutter); }
.wrap--prose { max-width: calc(var(--prose) + 2 * var(--gutter)); }
.wrap--wide { max-width: none; }
section { padding: var(--section-y) 0; position: relative; }
.on-navy { background: var(--navy); color: var(--on-navy); }
.on-stone { background: var(--stone); color: var(--text); }
.on-warm { background: var(--cream-warm); }
.on-navy p { color: var(--on-navy-2); }
.on-navy .lede { color: var(--on-navy-2); }
.grid-2 { display: grid; gap: clamp(24px, 4vw, 48px); grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); }
.grid-3, .cols-3 { display: grid; gap: clamp(28px, 4vw, 56px); }
@media (min-width: 820px) { .grid-3, .cols-3 { grid-template-columns: repeat(3, 1fr); }
  .grid-3 > * + *, .cols-3 > * + * { border-left: 1px solid var(--line); padding-left: clamp(24px, 3vw, 40px); }
  .on-navy .grid-3 > * + *, .on-navy .cols-3 > * + * { border-color: var(--line-light); } }
.grid-3 h3, .cols-3 h3 { margin-bottom: 10px; }
.grid-3 p, .cols-3 p { color: var(--text-2); font-size: 15.5px; }
.on-navy .grid-3 p, .on-navy .cols-3 p { color: var(--on-navy-2); }
.table-scroll { overflow-x: auto; -webkit-overflow-scrolling: touch; scrollbar-width: thin; }
/* Pli « déclaration » : une phrase, deux tons, centrée (landing S2). */
.statement { text-align: center; }
.statement p { margin: 0 auto; max-width: 24ch; font-size: var(--fs-h1); line-height: 1.04; letter-spacing: var(--ls-display);
  color: var(--navy); font-variation-settings: var(--fv-display); text-wrap: balance; }
.statement p em { font-style: normal; color: var(--muted); font-variation-settings: "opsz" 96, "wdth" 100, "wght" 500; }
.on-navy .statement p { color: var(--cream); } .on-navy .statement p em { color: var(--on-navy-3); }
/* Deux colonnes appariées (12 semaines | 72 h) dans une carte empilée. */
.pair { display: grid; gap: 24px; }
@media (min-width: 720px) { .pair { grid-template-columns: 1fr 1fr; } .pair > * + * { border-left: 1px solid var(--line); padding-left: 24px; }
  .on-navy .pair > * + * { border-color: var(--line-light); } }
.pair h4 { font-family: var(--mono); font-size: var(--fs-micro); letter-spacing: var(--ls-mono); text-transform: uppercase; color: var(--orange-ink);
  font-variation-settings: normal; font-weight: 500; margin-bottom: 10px; }
.on-navy .pair h4 { color: var(--orange); }
main[data-chrome] { padding-top: var(--nav-h); }   /* pages sans héros */
[id] { scroll-margin-top: calc(var(--nav-h-min) + var(--subnav-h) + 16px); }
.sr-only { position: absolute !important; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }

/* ============================================================
   5 · LIEN D'ÉVITEMENT + BARRE DE PROGRESSION
   ============================================================ */
.skip-link { position: absolute; left: 16px; top: -100px; z-index: var(--z-skip);
  padding: 12px 18px; background: var(--navy); color: var(--cream); font-variation-settings: var(--fv-ui);
  border-radius: var(--r-sm); text-decoration: none; }
.skip-link:focus { top: 12px; outline: 2px solid var(--orange); outline-offset: 2px; }

.scroll-progress { position: fixed; top: 0; left: 0; right: 0; height: 2px; z-index: var(--z-progress);
  background: var(--orange); transform-origin: 0 50%; transform: scaleX(0); pointer-events: none; }
@supports (animation-timeline: scroll()) {
  .scroll-progress { animation: progress linear both; animation-timeline: scroll(root); }
  @keyframes progress { from { transform: scaleX(0); } to { transform: scaleX(1); } }
}
@media (prefers-reduced-motion: reduce) { .scroll-progress { display: none; } }

/* ============================================================
   6 · NAV (condensation, masquage, tiroir)
   ============================================================ */
body > nav { position: fixed; top: 0; left: 0; right: 0; z-index: var(--z-nav);
  background: var(--cream); border-bottom: 1px solid var(--line); color: var(--text);
  transition: transform var(--d-base) var(--e-out), background var(--d-base) var(--e-out),
    border-color var(--d-base) var(--e-out); }
.nav-inner { display: flex; align-items: center; justify-content: space-between; gap: 24px;
  width: 100%; max-width: var(--wrap); margin: 0 auto; padding: 0 var(--gutter); height: var(--nav-h);
  transition: height var(--d-base) var(--e-out); }
body > nav.is-scrolled .nav-inner { height: var(--nav-h-min); }
body > nav.is-scrolled { background: rgba(250, 247, 240, 0.92); -webkit-backdrop-filter: blur(10px); backdrop-filter: blur(10px); }
body > nav.is-hidden { transform: translateY(-100%); }
/* Au sommet d'une page à héros couvrant, la nav est transparente sur la photo. */
body.has-cover > nav:not(.is-scrolled) { background: transparent; border-color: transparent; color: var(--cream); }

/* Logotype : « Founders University » + point orange. Même balisage nav + pied. */
.logo { display: inline-flex; flex-direction: column; gap: 2px; text-decoration: none; color: inherit; line-height: 1; }
.logo-wordmark { font-family: var(--font); font-size: 21px; letter-spacing: var(--ls-mark);
  font-variation-settings: var(--fv-mark); white-space: nowrap; color: currentColor; }
.logo-wordmark .logo-dot, .logo-wordmark > span { color: var(--orange); }
.logo-subtitle { font-family: var(--mono); font-size: 9px; letter-spacing: 0.2em; text-transform: uppercase;
  opacity: 0.7; padding-left: 1px; }
body > nav.is-scrolled .logo-wordmark { font-size: 19px; }
body > nav.is-scrolled .logo-subtitle { display: none; }

.nav-links { display: flex; align-items: center; gap: clamp(14px, 1.8vw, 28px); }
.nav-links a { text-decoration: none; color: inherit; font-size: 14.5px; font-variation-settings: "opsz" 14, "wdth" 100, "wght" 500;
  padding: 10px 2px; min-height: 44px; display: inline-flex; align-items: center; position: relative; white-space: nowrap; }
.nav-links a:not(.nav-cta):not(.nav-founders)::after { content: ""; position: absolute; left: 2px; right: 2px; bottom: 6px;
  height: 2px; background: var(--orange); transform: scaleX(0); transform-origin: 0 50%; transition: transform var(--d-fast) var(--e-out); }
.nav-links a:not(.nav-cta):not(.nav-founders):hover::after,
.nav-links a[aria-current="page"]::after { transform: scaleX(1); }
.nav-cta { background: var(--orange); color: var(--navy) !important; padding: 0 18px !important;
  border-radius: var(--r-sm); font-variation-settings: var(--fv-ui) !important; min-height: 40px !important; }
.nav-cta:hover { background: var(--orange-soft); }
.nav-founders { gap: 8px; padding: 0 14px !important; border: 1px solid currentColor; border-radius: var(--r-sm);
  min-height: 40px !important; opacity: 0.9; }
.nav-founders::before { content: ""; width: 7px; height: 7px; border-radius: 50%; background: var(--live); flex: none; }
.nav-founders svg { display: none; }
.nav-founders:hover { opacity: 1; border-color: var(--orange); }

.nav-toggle { display: none; width: 44px; height: 44px; padding: 10px; background: none; border: 0; cursor: pointer;
  flex-direction: column; justify-content: center; gap: 5px; color: inherit; border-radius: var(--r-sm); margin-right: -8px; }
.nav-toggle span { display: block; height: 2px; background: currentColor; border-radius: 1px;
  transition: transform var(--d-base) var(--e-out), opacity var(--d-fast); }
.nav-toggle[aria-expanded="true"] span:nth-child(1) { transform: translateY(7px) rotate(45deg); }
.nav-toggle[aria-expanded="true"] span:nth-child(2) { opacity: 0; }
.nav-toggle[aria-expanded="true"] span:nth-child(3) { transform: translateY(-7px) rotate(-45deg); }

@media (max-width: 900px) {
  .nav-toggle { display: flex; }
  /* Tiroir = une page de cahier : liens en lignes numérotées, filets. */
  .nav-links { position: fixed; inset: var(--nav-h-min) 0 0 0; display: none; flex-direction: column; align-items: stretch;
    gap: 0; padding: 12px var(--gutter) 32px; background: var(--cream); color: var(--text); overflow-y: auto;
    counter-reset: navi; border-top: 1px solid var(--line); }
  .nav-links.open { display: flex; }
  .nav-links a { min-height: 60px; padding: 0 4px; font-size: 22px; border-bottom: 1px solid var(--line);
    font-variation-settings: "opsz" 24, "wdth" 96, "wght" 600; counter-increment: navi; gap: 18px; }
  .nav-links a:not(.nav-cta):not(.nav-founders)::before { content: counter(navi, decimal-leading-zero);
    font-family: var(--mono); font-size: 12px; letter-spacing: 0.08em; color: var(--muted); font-variation-settings: normal; }
  .nav-links a::after { display: none; }
  .nav-founders { border: 0; border-bottom: 1px solid var(--line); border-radius: 0; padding: 0 4px !important; min-height: 60px !important; }
  .nav-cta { margin-top: 20px; justify-content: center; min-height: 52px !important; border-radius: var(--r-sm); border-bottom: 0; }
  body.nav-open > nav, body.has-cover.nav-open > nav:not(.is-scrolled) { background: var(--cream); color: var(--text); border-color: var(--line); }
  body.nav-open .nav-inner { height: var(--nav-h-min); }
  body.has-cover > nav { color: var(--cream); }
  body.has-cover > nav.is-scrolled, body.has-cover.nav-open > nav { color: var(--text); }
}
@media (prefers-reduced-motion: reduce) { body > nav, .nav-inner { transition: none; } body > nav.is-hidden { transform: none; } }

/* ============================================================
   7 · BOUTONS
   ============================================================ */
.btn { position: relative; isolation: isolate; display: inline-flex; align-items: center; justify-content: center; gap: 10px;
  min-height: 48px; padding: 13px 24px; border: 1px solid transparent; border-radius: var(--r-sm);
  font-family: var(--font); font-size: 15px; line-height: 1; font-variation-settings: var(--fv-ui);
  text-decoration: none; cursor: pointer; white-space: nowrap; color: inherit; background: none;
  transition: color var(--d-fast) var(--e-out), border-color var(--d-fast) var(--e-out),
    background var(--d-fast) var(--e-out), transform var(--d-fast) var(--e-out); }
.btn:focus-visible { outline: 2px solid var(--orange); outline-offset: 3px; }
.on-navy .btn:focus-visible, .hero .btn:focus-visible { outline-color: var(--cream); }
.btn-primary { background: var(--orange); color: var(--navy); overflow: hidden; }
/* Remplissage « encre » : le survol glisse une teinte plus claire de gauche à droite. */
.btn-primary::before { content: ""; position: absolute; inset: 0; z-index: -1; background: var(--orange-soft);
  transform: scaleX(0); transform-origin: 0 50%; transition: transform var(--d-base) var(--e-out); }
.btn-primary:hover::before, .btn-primary:focus-visible::before { transform: scaleX(1); }
.btn-primary:active { transform: translateY(1px); }
.btn-ghost { border-color: var(--line-strong); color: var(--text); }
.btn-ghost:hover { border-color: var(--orange); color: var(--orange-ink); }
.on-navy .btn-ghost, .hero .btn-ghost, .btn-glass { border-color: var(--line-light); color: var(--cream); }
.on-navy .btn-ghost:hover, .hero .btn-ghost:hover, .btn-glass:hover { border-color: var(--orange); color: var(--orange); }
.btn-inverse { background: var(--cream); color: var(--navy); }
.btn-inverse:hover { background: #fff; }
.btn-sm { min-height: 40px; padding: 9px 16px; font-size: 14px; }
.btn-block { width: 100%; }
.btn[disabled], .btn:disabled { opacity: 0.55; cursor: not-allowed; }
.btn-row { display: flex; flex-wrap: wrap; gap: 12px; align-items: center; }
.btn .arrow { transition: transform var(--d-fast) var(--e-out); }
.btn:hover .arrow { transform: translateX(3px); }
/* CTA magnétique : chrome.js pose la translation ; ici, juste la souplesse. */
[data-magnetic] { will-change: transform; transition: transform 320ms var(--e-out); }
@media (max-width: 480px) { .hero .btn-row > .btn, main[data-chrome] .btn-row > .btn, .cta-final .btn-row > .btn { flex: 1 1 100%; } }
@media (prefers-reduced-motion: reduce) { .btn, .btn-primary::before, [data-magnetic] { transition: none; }
  .btn-primary:hover { background: var(--orange-soft); } }

/* ============================================================
   8 · PASTILLES DE STATUT (mono) + ligne « qui tape » + compte à rebours
   ============================================================ */
.status-live, .status-ok, .status-soon { display: inline-flex; align-items: center; gap: 10px; margin: 0;
  padding: 7px 12px 7px 10px; border: 1px solid var(--line); border-radius: var(--r-pill);
  font-family: var(--mono); font-size: var(--fs-micro); letter-spacing: var(--ls-mono); text-transform: uppercase;
  color: var(--text); background: rgba(255, 255, 255, 0.5); white-space: nowrap; max-width: 100%; }
.on-navy .status-live, .hero .status-live, .on-navy .status-ok, .on-navy .status-soon, .hero .status-soon {
  border-color: var(--line-light); color: var(--on-navy); background: rgba(10, 14, 39, 0.45); }
/* Enfant direct d'une grille/flex, un `inline-flex` est blockifié : sans
   `justify-self`, la pastille s'étire sur toute la colonne. */
.hero-grid > .status-live, .hero-grid > .status-soon,
.cta-card > .status-live, .cta-card > .status-soon { justify-self: start; }
.status-live .dot, .status-ok .dot, .status-soon .dot { width: 7px; height: 7px; border-radius: 50%; flex: none; }
.status-live .dot { background: var(--live); box-shadow: 0 0 0 0 rgba(52, 211, 153, 0.5); animation: pulse 2.2s var(--e-out) infinite; }
.status-ok .dot { background: var(--ok); }
.on-navy .status-ok .dot { background: var(--live); }
.status-soon .dot { background: var(--zinc); }
.status-soon { color: var(--muted); }
.on-navy .status-soon { color: var(--on-navy-3); }
@keyframes pulse { 0% { box-shadow: 0 0 0 0 rgba(52,211,153,0.55); } 70% { box-shadow: 0 0 0 8px rgba(52,211,153,0); } 100% { box-shadow: 0 0 0 0 rgba(52,211,153,0); } }
[data-countdown] { color: var(--orange-ink); }
.on-navy [data-countdown], .hero [data-countdown] { color: var(--orange); }
/* Ligne qui se tape : <span class="status-type" style="--ch: 34">…</span>. Le
   texte est là sans JS ; sous reduced-motion il s'affiche d'un bloc. */
.status-type { display: inline-block; overflow: hidden; white-space: nowrap; vertical-align: bottom;
  max-width: calc(var(--ch, 40) * 1ch); border-right: 1px solid currentColor; padding-right: 2px; }
@media (prefers-reduced-motion: no-preference) {
  .status-type { animation: typing 1.4s steps(40, end) 0.3s both, caret 1s step-end 1.7s 4; }
  @keyframes typing { from { max-width: 0; } to { max-width: calc(var(--ch, 40) * 1ch); } }
  @keyframes caret { 50% { border-color: transparent; } }
}
@media (prefers-reduced-motion: reduce) { .status-live .dot { animation: none; } .status-type { border-right-color: transparent; } }

/* ============================================================
   9 · HÉROS — couvrant (photo) et texte (navy)
   ============================================================ */
.hero { position: relative; background: var(--navy); color: var(--on-navy); overflow: clip; isolation: isolate; padding: 0; }
.hero--cover { min-height: clamp(600px, 94svh, 920px); display: grid; }
.hero-media { position: absolute; inset: 0; z-index: var(--z-bg); background: var(--navy-soft); }
.hero-media picture, .hero-media img { display: block; width: 100%; height: 100%; object-fit: cover; }
.hero-media img { object-position: var(--focus, 50% 40%); }
/* Voile : lisibilité AA du texte crème et de l'orange, quelle que soit la photo. */
.hero-scrim { position: absolute; inset: 0; background:
  linear-gradient(to top, var(--navy) 0%, rgba(10,14,39,0.86) 34%, rgba(10,14,39,0.42) 70%, rgba(10,14,39,0.18) 100%),
  linear-gradient(100deg, rgba(10,14,39,0.55) 0%, rgba(10,14,39,0) 60%); }
.hero-grid { position: relative; z-index: var(--z-content); display: grid; align-content: end; gap: 22px;
  padding-top: calc(var(--nav-h) + 48px); padding-bottom: clamp(40px, 6vw, 72px); }
.hero-grid > * { max-width: 100%; }
.hero h1 { font-size: var(--fs-display); max-width: 12ch; }
.hero .lede { max-width: 56ch; }
.hero .btn-row { margin-top: 6px; }
.hero-proof { display: flex; flex-wrap: wrap; gap: 8px 28px; margin: 8px 0 0; padding-top: 18px; border-top: 1px solid var(--line-light);
  font-family: var(--mono); font-size: var(--fs-mono); letter-spacing: 0.04em; color: var(--on-navy-2); }
.hero-proof strong { color: var(--cream); font-variation-settings: normal; font-weight: 600; }
.hero-proof a { color: var(--cream); }
.hero--text { padding: calc(var(--nav-h) + clamp(48px, 8vw, 96px)) 0 clamp(56px, 8vw, 96px); }
.hero--text .wrap { display: grid; gap: 22px; }
.hero--text h1 { max-width: 14ch; }
/* Le H1 « se pose » : largeur 82 → 100, graisse 800 → 700, une fois, 900 ms. */
@media (prefers-reduced-motion: no-preference) {
  .js h1[data-settle] { animation: settle var(--d-settle) var(--e-out) 80ms both; }
  @keyframes settle { from { font-variation-settings: var(--fv-display-from); opacity: 0.6; }
    to { font-variation-settings: var(--fv-display); opacity: 1; } }
  .js .hero-grid > :not(h1), .js .hero--text .wrap > :not(h1) { animation: rise 640ms var(--e-out) both; }
  .js .hero-grid > :nth-child(2), .js .hero--text .wrap > :nth-child(2) { animation-delay: 240ms; }
  .js .hero-grid > :nth-child(3), .js .hero--text .wrap > :nth-child(3) { animation-delay: 340ms; }
  .js .hero-grid > :nth-child(4), .js .hero--text .wrap > :nth-child(4) { animation-delay: 440ms; }
  .js .hero-grid > :nth-child(5), .js .hero--text .wrap > :nth-child(5) { animation-delay: 540ms; }
  @keyframes rise { from { opacity: 0; transform: translateY(14px); } to { opacity: 1; transform: none; } }
}
.scroll-cue { position: absolute; right: var(--gutter); bottom: 28px; width: 44px; height: 44px; border: 1px solid var(--line-light);
  border-radius: 50%; display: grid; place-items: center; color: var(--cream); text-decoration: none; }
.scroll-cue::after { content: "↓"; font-family: var(--mono); font-size: 14px; }
@media (max-width: 720px) { .scroll-cue { display: none; } }

/* ============================================================
   10 · BANDEAU DE CHIFFRES (4 vrais nombres, jamais plus)
   ============================================================ */
.stat-strip { background: var(--navy); color: var(--on-navy); padding: 0; border-top: 1px solid var(--line-light); }
.stat-strip .wrap { display: grid; grid-template-columns: repeat(4, 1fr); }
.stat { padding: clamp(28px, 4vw, 48px) clamp(16px, 2vw, 32px); display: grid; gap: 10px; align-content: start; }
.stat + .stat { border-left: 1px solid var(--line-light); }
.stat .n { font-size: var(--fs-stat); line-height: 1; letter-spacing: -0.03em; color: var(--cream);
  font-variation-settings: var(--fv-stat); }
.stat .n small { font-size: 0.4em; margin-left: 3px; color: var(--zinc); font-variation-settings: "opsz" 14, "wdth" 100, "wght" 500; }
.stat .l { font-family: var(--mono); font-size: var(--fs-micro); letter-spacing: var(--ls-mono); text-transform: uppercase; color: var(--zinc); max-width: 20ch; }
.on-cream .stat-strip, .stat-strip--light { background: var(--cream-warm); color: var(--text); border-color: var(--line); }
.stat-strip--light .stat + .stat { border-color: var(--line); }
.stat-strip--light .stat .n { color: var(--navy); } .stat-strip--light .stat .l { color: var(--muted); }
@media (max-width: 760px) { .stat-strip .wrap { grid-template-columns: 1fr 1fr; padding: 0; }
  .stat:nth-child(3) { border-left: 0; } .stat:nth-child(n+3) { border-top: 1px solid var(--line-light); }
  .stat-strip--light .stat:nth-child(n+3) { border-color: var(--line); } }

/* ============================================================
   11 · REGISTRES — la ligne comme unité visuelle
   Toute ligne portant [data-draw] voit son filet se tracer à l'entrée.
   ============================================================ */
.ledger { display: grid; }
.ledger-row { position: relative; display: grid; gap: 8px 40px; padding: clamp(22px, 3vw, 34px) 0; }
.ledger-row::before, [data-draw]::before { content: ""; position: absolute; left: 0; right: 0; top: 0; height: 1px;
  background: var(--line); transform-origin: 0 50%; }
.on-navy .ledger-row::before, .on-navy [data-draw]::before { background: var(--line-light); }
.on-stone .ledger-row::before { background: var(--line-strong); }
.ledger-row:last-child { border-bottom: 1px solid var(--line); }
.on-navy .ledger-row:last-child { border-color: var(--line-light); }
@media (min-width: 720px) { .ledger-row { grid-template-columns: minmax(160px, 3fr) 9fr; align-items: start; } }
.ledger-label { font-family: var(--mono); font-size: var(--fs-mono); letter-spacing: var(--ls-mono); text-transform: uppercase;
  color: var(--orange-ink); padding-top: 6px; }
.on-navy .ledger-label { color: var(--orange); } .on-stone .ledger-label { color: var(--text); }
.ledger-row h3 { margin-bottom: 8px; }
.ledger-row p { color: var(--text-2); max-width: 60ch; }
.on-navy .ledger-row p { color: var(--on-navy-2); }
.ledger-row .big { font-size: clamp(1.375rem, 1.1rem + 1.2vw, 1.875rem); line-height: 1.3; color: var(--navy); letter-spacing: -0.01em;
  font-variation-settings: "opsz" 40, "wdth" 100, "wght" 500; }
.on-navy .ledger-row .big { color: var(--cream); }
.ledger-row .out { margin-top: 12px; font-family: var(--mono); font-size: var(--fs-mono); letter-spacing: 0.02em; color: var(--orange-ink); }
.on-navy .ledger-row .out { color: var(--orange); }
/* Registre des jours (sprint) : Ven. / Sam. / Dim. en gros, verbe en chip. */
.day-mark { display: flex; align-items: baseline; gap: 14px; }
.day-mark .d { font-size: var(--fs-stat); line-height: 0.9; letter-spacing: -0.03em; color: var(--navy); font-variation-settings: var(--fv-stat); }
.on-navy .day-mark .d { color: var(--cream); }
.day-verb { font-family: var(--mono); font-size: var(--fs-micro); letter-spacing: var(--ls-mono); text-transform: uppercase; color: var(--orange-ink); }
.on-navy .day-verb { color: var(--orange); }

/* ============================================================
   12 · CARTES PROGRAMME — deux cartes STRICTEMENT égales
   ============================================================ */
.formats { display: grid; gap: clamp(20px, 3vw, 32px); align-items: stretch; }
@media (min-width: 900px) { .formats { grid-template-columns: 1fr 1fr; } }
.program-card { display: flex; flex-direction: column; background: #fff; border: 1px solid var(--line); border-radius: var(--r-md);
  overflow: hidden; transition: transform var(--d-base) var(--e-out), box-shadow var(--d-base) var(--e-out); }
.on-navy .program-card { background: var(--navy-soft); border-color: var(--line-light); }
@media (hover: hover) and (pointer: fine) { .program-card:hover { transform: translateY(-2px); box-shadow: var(--sh-lift); } }
.program-media { position: relative; aspect-ratio: 16 / 9; background: var(--navy-soft); overflow: hidden; }
.program-media img { width: 100%; height: 100%; object-fit: cover; display: block; transition: transform 400ms var(--e-out); }
.program-card:hover .program-media img { transform: scale(1.03); }
.program-media .status-live, .program-media .status-soon { position: absolute; top: 14px; left: 14px; }
.program-body { display: flex; flex-direction: column; gap: 12px; padding: clamp(20px, 2.6vw, 30px); flex: 1; }
.program-eyebrow { margin: 0; font-family: var(--mono); font-size: var(--fs-micro); letter-spacing: 0.12em; text-transform: uppercase; color: var(--orange-ink); }
.on-navy .program-eyebrow { color: var(--orange); }
.program-body h3 { font-size: clamp(1.5rem, 1.2rem + 1.2vw, 1.875rem); font-variation-settings: "opsz" 40, "wdth" 96, "wght" 650; }
.program-body h3 a { text-decoration: none; color: inherit; }
.program-promise { font-size: 1.125rem; line-height: 1.4; color: var(--text); display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
  font-variation-settings: "opsz" 20, "wdth" 100, "wght" 500; min-height: 2.8em; }
.on-navy .program-promise { color: var(--on-navy); }
.program-facts { margin: 4px 0 0; display: grid; gap: 0; }
.program-facts div { display: flex; gap: 8px; align-items: baseline; padding: 9px 0; border-top: 1px solid var(--line); font-size: var(--fs-small); }
.program-facts div:last-child { border-bottom: 1px solid var(--line); }
.on-navy .program-facts div { border-color: var(--line-light); }
.program-facts dt { font-family: var(--mono); font-size: var(--fs-micro); letter-spacing: var(--ls-mono); text-transform: uppercase; color: var(--muted); flex: none; }
.program-facts dt::after { content: ""; flex: 1; }
.program-facts dd { margin: 0; margin-left: auto; text-align: right; font-variation-settings: var(--fv-ui); }
.program-price { display: flex; flex-wrap: wrap; align-items: baseline; gap: 6px 12px; margin: 6px 0 4px; }
.amount { font-size: clamp(1.75rem, 1.4rem + 1.6vw, 2.5rem); line-height: 1; letter-spacing: -0.03em; color: var(--navy); font-variation-settings: var(--fv-stat); }
.on-navy .amount { color: var(--cream); }
.was { font-family: var(--mono); font-size: var(--fs-mono); color: var(--muted); text-decoration: line-through; margin-left: 8px; }
.program-price .note, .price-note { width: 100%; font-family: var(--mono); font-size: var(--fs-micro); letter-spacing: 0.02em; color: var(--muted); }
.program-body .btn-row { margin-top: auto; padding-top: 8px; }
.program-body .btn-row .btn { flex: 1 1 0; }
.program-foot { margin: 0; font-size: var(--fs-small); }
.program-foot a { color: var(--muted); text-decoration: none; }
.program-foot a:hover { color: var(--orange-ink); text-decoration: underline; }

/* ============================================================
   13 · MODALE <dialog class="program-modal"> (chrome.js : [data-modal-open])
   ============================================================ */
dialog.program-modal { width: min(760px, calc(100% - 32px)); max-height: 88vh; max-height: 88dvh; margin: auto; padding: 0; border: 0;
  border-radius: var(--r-md); background: var(--cream); color: var(--text); box-shadow: var(--sh-modal); overflow: hidden;
  display: none; flex-direction: column; }
dialog.program-modal[open] { display: flex; }
dialog.program-modal::backdrop { background: rgba(10, 14, 39, 0.6); -webkit-backdrop-filter: blur(6px); backdrop-filter: blur(6px); }
.modal-head { position: sticky; top: 0; z-index: 2; display: grid; gap: 6px; padding: 24px clamp(20px, 4vw, 36px) 18px;
  background: var(--cream); border-bottom: 1px solid var(--line); padding-right: 76px; }
.modal-head .program-eyebrow { margin: 0; }
.modal-head h2 { font-size: clamp(1.5rem, 1.2rem + 1.4vw, 2.125rem); max-width: none; }
.modal-close { position: absolute; top: 14px; right: 14px; width: 44px; height: 44px; border: 1px solid var(--line); background: none;
  border-radius: 50%; font-size: 22px; line-height: 1; cursor: pointer; color: var(--text); display: grid; place-items: center; }
.modal-close:hover { border-color: var(--orange); color: var(--orange-ink); }
.modal-body { overflow-y: auto; overscroll-behavior: contain; padding: 8px clamp(20px, 4vw, 36px) 24px; flex: 1; }
.modal-section { padding: 22px 0; border-top: 1px solid var(--line); }
.modal-section:first-child { border-top: 0; }
.modal-section > h3 { font-family: var(--mono); font-size: var(--fs-micro); letter-spacing: var(--ls-mono); text-transform: uppercase;
  color: var(--orange-ink); font-variation-settings: normal; font-weight: 500; margin-bottom: 14px; }
.modal-section ul { margin: 0; padding: 0; list-style: none; }
.modal-section li { padding: 6px 0; font-size: 15px; color: var(--text-2); }
.modal-section .facts { border: 0; background: none; padding: 0; margin: 0; grid-template-columns: repeat(2, 1fr); gap: 0 24px; }
.modal-section .facts div { padding: 10px 0; border-right: 0; border-top: 1px solid var(--line); }
.modal-section .facts div:nth-child(-n+2) { border-top: 0; }
.modal-tiers { display: grid; gap: 0; }
.modal-tier { display: grid; grid-template-columns: 1fr auto; gap: 2px 16px; padding: 12px 0 12px 14px; border-top: 1px solid var(--line); border-left: 2px solid transparent; }
.modal-tier.featured { border-left-color: var(--orange); background: var(--cream-warm); }
.modal-tier b { font-variation-settings: var(--fv-ui); }
.modal-tier .amount { font-size: 1.375rem; grid-row: span 2; align-self: center; }
.modal-tier span { font-size: var(--fs-small); color: var(--muted); }
.modal-foot { position: sticky; bottom: 0; z-index: 2; display: flex; flex-wrap: wrap; align-items: center; gap: 12px 20px;
  padding: 16px clamp(20px, 4vw, 36px); background: var(--cream); border-top: 1px solid var(--line); }
.modal-foot .amount { font-size: 1.75rem; }
.modal-foot .price-note { width: auto; }
.modal-foot .btn-row { margin-left: auto; }
.modal-handle { display: none; width: 36px; height: 4px; border-radius: 2px; background: var(--line-strong); margin: 10px auto 0; }
@media (max-width: 640px) {
  dialog.program-modal { width: 100%; max-width: none; max-height: 92dvh; margin: auto 0 0; border-radius: var(--r-lg) var(--r-lg) 0 0; }
  .modal-handle { display: block; }
  .modal-head { padding-top: 12px; }
  .modal-section .facts { grid-template-columns: 1fr; }
  .modal-foot .btn-row { width: 100%; margin-left: 0; } .modal-foot .btn { flex: 1; }
}
@media (prefers-reduced-motion: no-preference) {
  dialog.program-modal[open] { animation: pop 220ms var(--e-out); }
  dialog.program-modal[open]::backdrop { animation: fade 220ms var(--e-out); }
  @keyframes pop { from { opacity: 0; transform: scale(0.98) translateY(8px); } }
  @keyframes fade { from { opacity: 0; } }
}

/* ============================================================
   14 · SOUS-NAV STICKY des pages programme (scroll-spy + <select>)
   ============================================================ */
/* Quand chrome.js masque la nav (défilement vers le bas), la sous-nav doit
   remonter en haut du cadre, sinon une bande de contenu passe au-dessus. */
body:has(> nav.is-hidden) .subnav { top: 0; }
.subnav { position: sticky; top: var(--nav-h-min); z-index: var(--z-sticky); background: var(--cream-warm);
  border-top: 1px solid var(--line); border-bottom: 1px solid var(--line); }
.subnav-inner { display: flex; align-items: center; gap: 16px; min-height: var(--subnav-h); }
.subnav-links { display: flex; gap: clamp(12px, 1.6vw, 24px); overflow-x: auto; scrollbar-width: none; flex: 1; }
.subnav-links::-webkit-scrollbar { display: none; }
.subnav-links a { position: relative; display: inline-flex; align-items: center; min-height: var(--subnav-h); padding: 0 2px;
  font-size: 14px; white-space: nowrap; text-decoration: none; color: var(--text-2); font-variation-settings: "opsz" 14, "wdth" 100, "wght" 500; }
.subnav-links a::after { content: ""; position: absolute; left: 0; right: 0; bottom: -1px; height: 2px; background: var(--orange);
  transform: scaleX(0); transform-origin: 0 50%; transition: transform var(--d-fast) var(--e-out); }
.subnav-links a:hover, .subnav-links a.is-active { color: var(--navy); }
.subnav-links a.is-active::after { transform: scaleX(1); }
.subnav-select { display: none; flex: 1; min-height: 44px; padding: 0 36px 0 12px; border: 1px solid var(--line-strong); border-radius: var(--r-sm);
  background: #fff url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='none' stroke='%231A1F36' stroke-width='2'%3E%3Cpath d='m4 6 4 4 4-4'/%3E%3C/svg%3E") no-repeat right 12px center;
  font-family: var(--font); font-size: 15px; color: var(--text); appearance: none; -webkit-appearance: none; }
.subnav-ctas { display: flex; gap: 8px; flex: none; }
@media (max-width: 767px) { .subnav-links { display: none; } .subnav-select { display: block; }
  .subnav-ctas .btn-ghost { display: none; } }

/* ============================================================
   15 · BANDEAU DE FAITS — 6 champs, ordre fixe, identique sur les 2 programmes
   ============================================================ */
.facts { display: grid; grid-template-columns: repeat(6, 1fr); margin: 0; padding: 0; background: var(--cream-warm);
  border: 1px solid var(--line); border-radius: var(--r-md); overflow: hidden; }
.facts div { display: grid; gap: 8px; align-content: start; padding: clamp(16px, 2vw, 24px) clamp(14px, 1.6vw, 22px); border-right: 1px solid var(--line); }
.facts div:last-child { border-right: 0; }
.facts dt { margin: 0; font-family: var(--mono); font-size: var(--fs-micro); letter-spacing: var(--ls-mono); text-transform: uppercase; color: var(--muted); }
.facts dd { margin: 0; font-size: clamp(1.0625rem, 0.95rem + 0.5vw, 1.3125rem); line-height: 1.25; letter-spacing: -0.01em; color: var(--navy);
  font-variation-settings: "opsz" 24, "wdth" 96, "wght" 600; text-wrap: balance; }
.facts dd a { text-decoration: none; color: inherit; border-bottom: 1px solid var(--line-strong); }
.facts dd a:hover { border-color: var(--orange); color: var(--orange-ink); }
@media (max-width: 1100px) { .facts { grid-template-columns: repeat(3, 1fr); } .facts div:nth-child(3n) { border-right: 0; }
  .facts div:nth-child(n+4) { border-top: 1px solid var(--line); } }
@media (max-width: 560px) { .facts { grid-template-columns: repeat(2, 1fr); } .facts div:nth-child(3n) { border-right: 1px solid var(--line); }
  .facts div:nth-child(2n) { border-right: 0; } .facts div:nth-child(n+3) { border-top: 1px solid var(--line); } }

/* ============================================================
   16 · ACCORDÉON (programme + FAQ) + CHIPS
   ============================================================ */
.accordion { border-top: 1px solid var(--line); }
.on-navy .accordion { border-color: var(--line-light); }
.acc-item { border-bottom: 1px solid var(--line); }
.on-navy .acc-item { border-color: var(--line-light); }
.acc-item h3 { margin: 0; font-size: inherit; font-variation-settings: normal; }
.acc-trigger { display: grid; grid-template-columns: 1fr auto auto; align-items: center; gap: 10px 20px; width: 100%; min-height: 64px;
  padding: 18px 0; background: none; border: 0; cursor: pointer; text-align: left; color: inherit; font: inherit; }
.acc-title { font-size: clamp(1.125rem, 1rem + 0.6vw, 1.375rem); line-height: 1.25; color: var(--navy); font-variation-settings: "opsz" 24, "wdth" 100, "wght" 600; }
.on-navy .acc-title { color: var(--cream); }
.acc-meta { font-family: var(--mono); font-size: var(--fs-micro); letter-spacing: var(--ls-mono); text-transform: uppercase; color: var(--muted); }
.on-navy .acc-meta { color: var(--zinc); }
.acc-trigger:hover .acc-title { color: var(--orange-ink); }
.on-navy .acc-trigger:hover .acc-title { color: var(--orange); }
/* Le « + » qui tourne en « × » : deux barres, pas d'icône. */
.chev { position: relative; width: 20px; height: 20px; flex: none; }
.chev::before, .chev::after { content: ""; position: absolute; left: 50%; top: 50%; background: currentColor; transform: translate(-50%, -50%); transition: transform var(--d-base) var(--e-out); }
.chev::before { width: 16px; height: 2px; } .chev::after { width: 2px; height: 16px; }
.acc-trigger[aria-expanded="true"] .chev { transform: rotate(45deg); }
svg.chev { display: none; }   /* ancien chevron SVG (v1) : ignoré */
/* Le panneau contient UN enfant `.acc-content` (sinon les enfants
   supplémentaires tombent en lignes implicites : elles sont aussi à 0fr,
   mais sans transition). */
.acc-panel { display: grid; grid-template-rows: 0fr; grid-auto-rows: 0fr; transition: grid-template-rows var(--d-slow) var(--e-out); }
.acc-panel > * { overflow: hidden; min-height: 0; }
.acc-trigger[aria-expanded="true"] + .acc-panel, .acc-item:has(.acc-trigger[aria-expanded="true"]) .acc-panel { grid-template-rows: 1fr; grid-auto-rows: 1fr; }
.acc-panel[hidden] { display: none; }
.acc-content { padding: 0; }
/* L'espace sous un panneau ouvert est une MARGE du dernier enfant, jamais
   un padding du conteneur : une piste `0fr` n'absorbe pas la boîte de
   padding, et une ligne de texte fuyait sous chaque en-tête replié. */
.acc-content > :last-child { margin-bottom: 24px; }
.acc-content > p:first-child, .acc-panel > p { margin-top: 0; }
.acc-panel p { color: var(--text-2); max-width: 60ch; }
.on-navy .acc-panel p { color: var(--on-navy-2); }
.acc-week { display: grid; grid-template-columns: 4ch 1fr; gap: 16px; padding: 10px 0; border-top: 1px dashed var(--line); font-size: 15px; color: var(--text-2); }
.acc-week:first-child { border-top: 0; }
.acc-week b { font-family: var(--mono); font-size: var(--fs-mono); letter-spacing: 0.04em; color: var(--orange-ink); font-weight: 500; font-variation-settings: normal; }
.acc-out { margin: 14px 0 0; font-family: var(--mono); font-size: var(--fs-mono); color: var(--orange-ink); }
.acc-out b { font-variation-settings: normal; font-weight: 600; }
.chips { display: flex; flex-wrap: wrap; gap: 8px; margin: 16px 0 0; padding: 0; list-style: none; }
.chips li, .chip { font-family: var(--mono); font-size: var(--fs-micro); letter-spacing: 0.04em; padding: 5px 10px; border: 1px solid var(--line-strong);
  border-radius: var(--r-xs); color: var(--text); background: rgba(255, 255, 255, 0.5); }
.on-navy .chips li, .on-navy .chip { border-color: var(--line-light); color: var(--on-navy-2); background: none; }
.chip--orange { border-color: var(--orange); color: var(--orange-ink); }
.faq .acc-trigger { grid-template-columns: 1fr auto; }
.faq .acc-title { font-variation-settings: "opsz" 20, "wdth" 100, "wght" 550; font-size: clamp(1.0625rem, 1rem + 0.4vw, 1.25rem); }
@media (max-width: 600px) { .acc-trigger { grid-template-columns: 1fr auto; } .acc-meta { grid-column: 1; grid-row: 2; } }
@media (prefers-reduced-motion: reduce) { .acc-panel, .chev::before, .chev::after { transition: none; } }

/* ============================================================
   17 · GRILLE DE LIVRABLES — cellules numérotées, filets, aucune icône
   ============================================================ */
.ledger-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 1px; background: var(--line-light); border: 1px solid var(--line-light); counter-reset: cell; }
.outcome { background: var(--navy); padding: clamp(20px, 2.6vw, 30px); counter-increment: cell; display: grid; gap: 8px; align-content: start; }
.outcome::before { content: counter(cell, decimal-leading-zero); font-family: var(--mono); font-size: var(--fs-micro); letter-spacing: var(--ls-mono); color: var(--orange); margin-bottom: 6px; }
.outcome h3 { font-size: 1.125rem; color: var(--cream); }
.outcome p { font-size: var(--fs-small); color: var(--on-navy-2); }
.on-stone .ledger-grid, .on-cream .ledger-grid, :not(.on-navy) > .wrap > .ledger-grid { background: var(--line); border-color: var(--line); }
:not(.on-navy) > .wrap > .ledger-grid .outcome { background: var(--cream); }
:not(.on-navy) > .wrap > .ledger-grid .outcome h3 { color: var(--navy); }
:not(.on-navy) > .wrap > .ledger-grid .outcome p { color: var(--text-2); }
:not(.on-navy) > .wrap > .ledger-grid .outcome::before { color: var(--orange-ink); }
@media (max-width: 860px) { .ledger-grid { grid-template-columns: 1fr 1fr; } }
@media (max-width: 520px) { .ledger-grid { grid-template-columns: 1fr; } }

/* ============================================================
   18 · POUR VOUS / PAS POUR VOUS
   ============================================================ */
.fit-list { display: grid; gap: clamp(24px, 4vw, 48px); }
@media (min-width: 760px) { .fit-list { grid-template-columns: 1fr 1fr; } .fit-list--3 { grid-template-columns: repeat(3, 1fr); } }
.fit-list h3 { font-family: var(--mono); font-size: var(--fs-micro); letter-spacing: var(--ls-mono); text-transform: uppercase; color: var(--muted);
  font-variation-settings: normal; font-weight: 500; padding-bottom: 12px; border-bottom: 1px solid var(--line); margin-bottom: 4px; }
.on-navy .fit-list h3 { color: var(--zinc); border-color: var(--line-light); }
.on-stone .fit-list h3 { color: var(--text-2); border-color: var(--line-strong); }
.fit-list ul { list-style: none; margin: 0; padding: 0; }
.fit-list li { position: relative; padding: 12px 0 12px 30px; border-bottom: 1px solid var(--line); font-size: 15.5px; line-height: 1.5; color: var(--text); }
.on-navy .fit-list li { border-color: var(--line-light); color: var(--on-navy); }
.on-stone .fit-list li { border-color: var(--line-strong); }
.fit-list li::before { position: absolute; left: 0; top: 12px; font-family: var(--mono); font-size: 15px; line-height: 1.5; }
.fit-yes li::before { content: "→"; color: var(--orange-ink); }
.on-navy .fit-yes li::before { color: var(--orange); }
.fit-no li::before { content: "×"; color: var(--muted); }
.on-navy .fit-no li::before { color: var(--zinc); } .on-stone .fit-no li::before { color: var(--text-2); }
.fit-list--3 h3 { font-family: var(--font); font-size: var(--fs-h3); text-transform: none; letter-spacing: -0.01em; color: var(--navy);
  font-variation-settings: var(--fv-h3); }
.on-navy .fit-list--3 h3 { color: var(--cream); }
.fit-list--3 p { color: var(--text-2); font-size: 15.5px; }

/* ============================================================
   19 · CALENDRIER DE COHORTES — registre, pastille, bouton par ligne
   ============================================================ */
.cohort-table { display: grid; }
.cohort-row { position: relative; display: grid; grid-template-columns: 1.3fr 2.2fr 0.9fr auto auto; gap: 8px 24px; align-items: center; padding: 18px 0; }
/* Filet haut en ::before (tracé à l'entrée si [data-draw]), filet bas sur la dernière ligne seulement. */
.cohort-row::before { content: ""; position: absolute; left: 0; right: 0; top: 0; height: 1px; background: var(--line); transform-origin: 0 50%; }
.cohort-row:last-child { border-bottom: 1px solid var(--line); }
.on-navy .cohort-row::before { background: var(--line-light); } .on-navy .cohort-row:last-child { border-color: var(--line-light); }
.on-stone .cohort-row::before { background: var(--line-strong); } .on-stone .cohort-row:last-child { border-color: var(--line-strong); }
.cohort-row .when { font-family: var(--mono); font-size: var(--fs-mono); letter-spacing: 0.02em; color: var(--navy); white-space: nowrap; }
.on-navy .cohort-row .when { color: var(--cream); }
.cohort-row .what { font-size: 15.5px; color: var(--text-2); }
.cohort-row .what b { color: var(--navy); }
.on-navy .cohort-row .what { color: var(--on-navy-2); } .on-navy .cohort-row .what b { color: var(--cream); }
.cohort-row .where { font-family: var(--mono); font-size: var(--fs-mono); letter-spacing: var(--ls-mono); text-transform: uppercase; color: var(--muted); }
.on-navy .cohort-row .where { color: var(--zinc); }
.cohort-row .seats { justify-self: start; }
.cohort-row .btn { justify-self: end; }
.cohort-row.is-soon { opacity: 0.72; }
.cohort-row.is-soon .when { color: var(--muted); }
@media (max-width: 820px) { .cohort-row { grid-template-columns: minmax(0, 1fr) auto; gap: 6px 16px; padding: 16px 0; }
  .cohort-row .when { white-space: normal; } .cohort-row .seats .status-live, .cohort-row .seats .status-soon { padding: 5px 9px 5px 8px; }
  .status-live, .status-ok, .status-soon { flex-wrap: wrap; white-space: normal; }
  .cohort-row .when { grid-column: 1; } .cohort-row .seats { grid-column: 2; grid-row: 1; justify-self: end; }
  .cohort-row .what { grid-column: 1 / -1; } .cohort-row .where { grid-column: 1; } .cohort-row .btn { grid-column: 2; grid-row: 3; } }
/* Bascule de format (sprint) : Présentiel / Remote live. Boutons radio stylés. */
.format-toggle { display: inline-flex; padding: 3px; border: 1px solid var(--line-strong); border-radius: var(--r-sm); margin-bottom: 20px; }
.format-toggle label { position: relative; padding: 8px 14px; font-size: 14px; border-radius: var(--r-xs); cursor: pointer; font-variation-settings: var(--fv-ui); }
.format-toggle input { position: absolute; inset: 0; opacity: 0; cursor: pointer; }
.format-toggle label:has(input:checked) { background: var(--navy); color: var(--cream); }
.format-toggle label:has(input:focus-visible) { outline: 2px solid var(--orange); outline-offset: 2px; }

/* ============================================================
   20 · TARIFS — 3 cartes + une phrase de financement
   ============================================================ */
.tiers { display: grid; gap: clamp(16px, 2.4vw, 24px); align-items: stretch; }
@media (min-width: 860px) { .tiers { grid-template-columns: repeat(3, 1fr); } }
.tier { position: relative; display: flex; flex-direction: column; gap: 10px; padding: clamp(22px, 2.6vw, 30px); background: #fff;
  border: 1px solid var(--line); border-radius: var(--r-md); }
.on-stone .tier { background: var(--cream); }
.on-navy .tier { background: var(--navy-soft); border-color: var(--line-light); }
.tier.featured { border-color: var(--navy); border-top: 3px solid var(--orange); }
.on-navy .tier.featured { border-color: var(--orange); background: var(--navy-deep); }
.tier-flag { margin: 0; font-family: var(--mono); font-size: var(--fs-micro); letter-spacing: var(--ls-mono); text-transform: uppercase; color: var(--orange-ink); min-height: 1.2em; }
.on-navy .tier-flag { color: var(--orange); }
.tier h3 { font-size: 1.5rem; }
.on-navy .tier h3 { color: var(--cream); }
.tier .amount { font-size: clamp(2rem, 1.6rem + 1.6vw, 2.75rem); }
.tier .sub { margin: 0; font-family: var(--mono); font-size: var(--fs-micro); letter-spacing: 0.04em; color: var(--muted); }
.on-navy .tier .sub { color: var(--zinc); }
.tier ul { list-style: none; margin: 8px 0 12px; padding: 0; flex: 1; }
.tier li { padding: 9px 0 9px 22px; position: relative; border-top: 1px solid var(--line); font-size: 15px; color: var(--text-2); }
.on-navy .tier li { border-color: var(--line-light); color: var(--on-navy-2); }
.tier li::before { content: "—"; position: absolute; left: 0; color: var(--orange-ink); font-family: var(--mono); }
.on-navy .tier li::before { color: var(--orange); }
.tier .btn { width: 100%; }
.tier-foot { margin: 20px 0 0; font-family: var(--mono); font-size: var(--fs-micro); letter-spacing: 0.02em; color: var(--muted); text-align: center; }
.on-navy .tier-foot { color: var(--on-navy-3); } .on-stone .tier-foot { color: var(--text-2); }

/* ============================================================
   21 · ÉTAPES — admission (numéros mono, filet vertical)
   ============================================================ */
.steps-2 { display: grid; gap: clamp(28px, 4vw, 56px); }
@media (min-width: 760px) { .steps-2 { grid-template-columns: 1fr 1fr; } }
.steps-2 h3 { margin-bottom: 18px; }
.steps { list-style: none; margin: 0; padding: 0; counter-reset: step; }
.steps li { position: relative; padding: 0 0 22px 56px; counter-increment: step; font-size: 15.5px; line-height: 1.5; color: var(--text-2); }
.steps li::before { content: counter(step, decimal-leading-zero); position: absolute; left: 0; top: 0; width: 40px; height: 40px; border: 1px solid var(--line-strong);
  border-radius: 50%; display: grid; place-items: center; font-family: var(--mono); font-size: var(--fs-mono); color: var(--navy); background: var(--cream); }
.steps li:not(:last-child)::after { content: ""; position: absolute; left: 20px; top: 40px; bottom: 0; width: 1px; background: var(--line); }
.steps li:last-child { padding-bottom: 0; }
.on-navy .steps li { color: var(--on-navy-2); }
.on-navy .steps li::before { color: var(--cream); background: var(--navy); border-color: var(--line-light); }
.on-navy .steps li:not(:last-child)::after { background: var(--line-light); }
.on-stone .steps li::before { background: var(--stone); }

/* ============================================================
   22 · ÉQUIPE — photos carrées, jamais de cercle, jamais de 3D
   ============================================================ */
.team { display: grid; gap: clamp(20px, 3vw, 36px); grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); }
.team-tile { display: grid; gap: 6px; align-content: start; padding-top: 18px; border-top: 1px solid var(--line-light); }
:not(.on-navy) > .wrap > .team .team-tile { border-color: var(--line); }
.team-tile img { width: 120px; height: 120px; object-fit: cover; border-radius: var(--r-sm); background: var(--navy-soft);
  filter: grayscale(30%); transition: filter var(--d-base) var(--e-out); margin-bottom: 10px; }
.team-tile:hover img { filter: none; }
.team-tile h3 { font-size: 1.25rem; }
.team-tile .role { margin: 0; font-family: var(--mono); font-size: var(--fs-micro); letter-spacing: var(--ls-mono); text-transform: uppercase; color: var(--orange); }
:not(.on-navy) > .wrap > .team .role { color: var(--orange-ink); }
.team-tile p { font-size: var(--fs-small); color: var(--on-navy-2); }
:not(.on-navy) > .wrap > .team .team-tile p { color: var(--text-2); }

/* ============================================================
   23 · MARQUEE — contenu réel seulement (villes, dates, outils)
   ============================================================ */
.marquee { overflow: hidden; contain: content; padding: 18px 0; border-top: 1px solid var(--line); border-bottom: 1px solid var(--line); }
.on-navy .marquee { border-color: var(--line-light); }
.marquee-track { display: flex; width: max-content; gap: 0; animation: marquee 40s linear infinite; }
.marquee-track > span { flex: none; padding-right: 0.6em; font-size: clamp(1.25rem, 1rem + 1.4vw, 2rem); letter-spacing: 0.02em;
  text-transform: uppercase; color: var(--navy); font-variation-settings: "opsz" 40, "wdth" 82, "wght" 600; white-space: nowrap; }
.on-navy .marquee-track > span { color: var(--cream); }
.marquee-track b { color: var(--orange); font-weight: inherit; padding: 0 0.15em; }
.marquee:hover .marquee-track, .marquee:focus-within .marquee-track, .marquee.is-paused .marquee-track { animation-play-state: paused; }
@keyframes marquee { to { transform: translateX(-25%); } }
@media (prefers-reduced-motion: reduce) { .marquee-track { animation: none; flex-wrap: wrap; width: auto; }
  .marquee-track > span[aria-hidden] { display: none; } }

/* ============================================================
   24 · BANDE PHOTO — une par page, révélée par clip-path
   ============================================================ */
.photo-band { position: relative; margin: 0; padding: 0; background: var(--navy-soft); overflow: clip; }
.photo-band img, .photo-band picture { display: block; width: 100%; height: clamp(320px, 52vw, 640px); object-fit: cover; object-position: var(--focus, 50% 50%); }
.photo-band figcaption, .photo-cap { position: absolute; left: var(--gutter); bottom: 20px; padding: 8px 12px; background: rgba(10,14,39,0.72);
  color: var(--cream); font-family: var(--mono); font-size: var(--fs-micro); letter-spacing: 0.06em; text-transform: uppercase; border-radius: var(--r-xs); }
.photo-band--wrap img { height: clamp(260px, 42vw, 520px); border-radius: var(--r-md); }
@media (prefers-reduced-motion: no-preference) {
  .js [data-clip] img { clip-path: inset(0 0 100% 0); transition: clip-path 1.1s var(--e-out); }
  .js [data-clip].in img { clip-path: inset(0); }
  @supports (animation-timeline: view()) {
    .js [data-clip] img { transition: none; animation: clip linear both; animation-timeline: view(); animation-range: entry 0% entry 60%; clip-path: inset(0); }
    @keyframes clip { from { clip-path: inset(0 0 100% 0); } to { clip-path: inset(0); } }
  }
}

/* ============================================================
   25 · CARTES COLLANTES EMPILÉES — J1/J2/J3, blocs 1-3
   <div class="stack"><article class="stack-card" style="--i:0">…
   ============================================================ */
.stack { display: grid; gap: 16px; }
.stack-card { position: sticky; top: calc(var(--nav-h-min) + 16px + var(--i, 0) * 14px); padding: clamp(24px, 3.5vw, 44px);
  background: var(--cream-warm); border: 1px solid var(--line); border-radius: var(--r-md); contain: layout paint;
  transform-origin: 50% 0; display: grid; gap: 16px; }
.on-navy .stack-card { background: var(--navy-soft); border-color: var(--line-light); }
.on-stone .stack-card { background: var(--cream); }
.stack-card > .meta, .stack-card > .pair { grid-column: 1 / -1; }
@media (min-width: 900px) { .stack-card { grid-template-columns: minmax(180px, 3fr) 9fr; gap: 16px 48px; } }
.stack-card h3 { font-size: clamp(1.5rem, 1.2rem + 1.4vw, 2.125rem); }
.stack-card p { color: var(--text-2); max-width: 60ch; }
.on-navy .stack-card p { color: var(--on-navy-2); }
@media (prefers-reduced-motion: no-preference) { @supports (animation-timeline: view()) {
  .stack-card { animation: shrink linear both; animation-timeline: view(); animation-range: exit-crossing 0% exit-crossing 100%; }
  @keyframes shrink { to { transform: scale(0.96); opacity: 0.6; } }
} }
.stack-card:last-child { animation: none; }

/* ============================================================
   26 · TABLEAU COMPARATIF
   ============================================================ */
.compare-table { width: 100%; min-width: 720px; border-collapse: collapse; font-size: 15px; }
.compare-table caption { caption-side: bottom; text-align: left; padding-top: 12px; }
.compare-table th, .compare-table td { padding: 14px 16px 14px 0; text-align: left; vertical-align: top; border-bottom: 1px solid var(--line-strong); }
.compare-table thead th { font-family: var(--mono); font-size: var(--fs-micro); letter-spacing: var(--ls-mono); text-transform: uppercase; color: var(--text-2); font-weight: 500; }
.compare-table tbody th { color: var(--navy); font-variation-settings: var(--fv-ui); }
.compare-table td { color: var(--text-2); }
.compare-table .is-us th, .compare-table .is-us td { background: var(--cream); color: var(--navy); }
.compare-table .is-us th { border-left: 3px solid var(--orange); padding-left: 12px; }
.compare-table .is-verdict td { padding-top: 0; font-size: 13.5px; line-height: 1.55; color: var(--text-2); }
.compare-table tbody tr:not(.is-verdict) th, .compare-table tbody tr:not(.is-verdict) td { border-bottom: 0; }

/* ============================================================
   27 · CTA FINAL + BARRE COLLANTE MOBILE
   ============================================================ */
.cta-final { text-align: center; }
.cta-final .wrap { display: grid; gap: 18px; justify-items: center; }
.cta-final h2 { max-width: 18ch; }
.cta-final .lede { margin-inline: auto; }
.cta-final .btn-row { justify-content: center; margin-top: 8px; }
.cta-card { display: grid; gap: 18px; justify-items: center; width: min(100%, 640px); padding: clamp(24px, 4vw, 40px);
  border: 1px solid var(--line-light); border-radius: var(--r-md); background: var(--navy-soft); margin-top: 8px; }
:not(.on-navy) > .wrap > .cta-card { border-color: var(--line); background: var(--cream-warm); }
.sticky-cta { position: fixed; left: 0; right: 0; bottom: 0; z-index: var(--z-sticky); display: none; gap: 10px; padding: 10px var(--gutter);
  padding-bottom: calc(10px + env(safe-area-inset-bottom)); background: rgba(250, 247, 240, 0.96); border-top: 1px solid var(--line);
  transform: translateY(0); transition: transform var(--d-base) var(--e-out); }
.sticky-cta .btn { flex: 1; }
@media (max-width: 899px) { .sticky-cta { display: flex; } body.hero-ctas-visible .sticky-cta { transform: translateY(110%); }
  body:not(.app-body):has(.sticky-cta) > main { padding-bottom: 72px; } }

/* ============================================================
   28 · FORMULAIRES (postuler, waitlist, unsubscribe)
   ============================================================ */
.apply-grid { display: grid; gap: clamp(32px, 5vw, 64px); align-items: start; }
@media (min-width: 1024px) { .apply-grid { grid-template-columns: 5fr 7fr; } .apply-intro { position: sticky; top: calc(var(--nav-h-min) + 24px); } }
.card { background: #fff; border: 1px solid var(--line); border-radius: var(--r-md); padding: clamp(22px, 3vw, 36px); }
.on-stone .card { background: var(--cream); }
fieldset { border: 0; margin: 0 0 28px; padding: 0; min-width: 0; }
legend { font-size: var(--fs-h3); color: var(--navy); font-variation-settings: var(--fv-h3); padding: 0; margin-bottom: 16px; }
legend .num, .legend-num { font-family: var(--mono); font-size: var(--fs-micro); letter-spacing: var(--ls-mono); color: var(--orange-ink); margin-right: 10px; font-variation-settings: normal; }
.field { margin-bottom: 16px; min-width: 0; }
.field-row { display: grid; gap: 16px; grid-template-columns: 1fr; }
@media (min-width: 560px) { .field-row { grid-template-columns: 1fr 1fr; } }
.label, .field > label { display: block; font-size: 14px; margin-bottom: 6px; color: var(--text); font-variation-settings: var(--fv-ui); }
.label .opt, .field > label .opt { color: var(--muted); font-variation-settings: var(--fv-body); font-family: var(--mono); font-size: var(--fs-micro); letter-spacing: 0.04em; }
.input, .select, .textarea, .field input:not([type="checkbox"]):not([type="radio"]), .field select, .field textarea {
  width: 100%; min-height: 48px; padding: 12px 14px; font-family: var(--font); font-size: 16px; color: var(--text); background: #fff;
  border: 1px solid var(--line-strong); border-radius: var(--r-sm); transition: border-color var(--d-fast) var(--e-out), box-shadow var(--d-fast) var(--e-out); }
.textarea, .field textarea { min-height: 120px; resize: vertical; line-height: 1.5; }
.select, .field select { appearance: none; -webkit-appearance: none; padding-right: 40px;
  background: #fff url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='none' stroke='%231A1F36' stroke-width='2'%3E%3Cpath d='m4 6 4 4 4-4'/%3E%3C/svg%3E") no-repeat right 14px center; }
.input:hover, .select:hover, .textarea:hover, .field input:hover, .field select:hover, .field textarea:hover { border-color: var(--navy); }
.input:focus, .select:focus, .textarea:focus, .field input:focus, .field select:focus, .field textarea:focus { outline: none; border-color: var(--orange); box-shadow: var(--ring); }
.input::placeholder, .textarea::placeholder, .field input::placeholder, .field textarea::placeholder { color: rgba(95, 103, 121, 0.7); }
.field.is-invalid input:not(:focus), .field.is-invalid select:not(:focus), .field.is-invalid textarea:not(:focus),
[aria-invalid="true"]:not(:focus) { border-color: var(--err); box-shadow: 0 0 0 3px rgba(179, 38, 30, 0.14); }
.hint { font-size: 13px; color: var(--muted); margin: 6px 0 0; }
.consent { display: flex; gap: 12px; align-items: flex-start; font-size: 14px; line-height: 1.5; color: var(--text-2); }
.consent input[type="checkbox"], .consent input[type="radio"] { width: 20px; height: 20px; margin: 2px 0 0; flex: none; accent-color: var(--orange); }
.radio-list { display: grid; gap: 8px; }
.radio-list label { display: flex; gap: 12px; align-items: center; min-height: 48px; padding: 10px 14px; border: 1px solid var(--line); border-radius: var(--r-sm);
  cursor: pointer; background: #fff; transition: border-color var(--d-fast); font-size: 15px; }
.radio-list label:hover { border-color: var(--navy); }
.radio-list input { width: 18px; height: 18px; accent-color: var(--orange); flex: none; }
.radio-list label:has(input:checked) { border-color: var(--orange); background: var(--cream-warm); }
.err { color: var(--err); font-size: 14px; } .ok { color: var(--ok); font-size: 14px; }
.on-navy .err { color: #FF8A80; } .on-navy .ok { color: var(--live); }

/* ============================================================
   29 · MODALE « RÉSERVER MA PLACE » — balisage produit par reserve.js
   ============================================================ */
.reserve-modal { position: fixed; inset: 0; z-index: var(--z-modal); display: flex; align-items: center; justify-content: center; padding: 20px; }
.reserve-modal[hidden] { display: none; }
.reserve-backdrop { position: absolute; inset: 0; background: rgba(10, 14, 39, 0.6); -webkit-backdrop-filter: blur(6px); backdrop-filter: blur(6px); }
.reserve-card { position: relative; width: 100%; max-width: 460px; max-height: calc(100dvh - 40px); overflow-y: auto; background: var(--cream); color: var(--text);
  border: 1px solid var(--line); border-radius: var(--r-md); padding: clamp(26px, 4vw, 34px) clamp(20px, 3vw, 30px); box-shadow: var(--sh-modal); }
.reserve-close { position: absolute; top: 10px; right: 10px; width: 44px; height: 44px; border: 0; background: none; font-size: 26px; line-height: 1; cursor: pointer; color: var(--muted); border-radius: var(--r-sm); }
.reserve-close:hover { color: var(--orange-ink); }
.reserve-eyebrow { margin: 0 0 8px; padding-right: 48px; font-family: var(--mono); font-size: var(--fs-micro); letter-spacing: var(--ls-mono); text-transform: uppercase; color: var(--orange-ink); }
.reserve-card h2 { font-size: 1.75rem; margin: 0 0 6px; }
.reserve-lede { margin: 0 0 18px; font-size: 14px; color: var(--muted); }
.reserve-row { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }
.reserve-card label { display: block; font-size: 14px; font-variation-settings: var(--fv-ui); margin: 14px 0 6px; }
.reserve-opt { font-variation-settings: var(--fv-body); color: var(--muted); font-family: var(--mono); font-size: var(--fs-micro); }
.reserve-card input[type="text"], .reserve-card input[type="email"], .reserve-card input[type="tel"] { width: 100%; min-height: 48px; padding: 12px 14px;
  font-family: var(--font); font-size: 16px; color: var(--text); border: 1px solid var(--line-strong); border-radius: var(--r-sm); background: #fff; }
.reserve-card input:focus { outline: none; border-color: var(--orange); box-shadow: var(--ring); }
.reserve-card input[aria-invalid="true"]:not(:focus) { border-color: var(--err); }
.reserve-check { display: flex; gap: 11px; align-items: flex-start; margin: 18px 0 0; font-size: 13px; line-height: 1.5; font-variation-settings: var(--fv-body); }
.reserve-check input { width: 20px; height: 20px; margin-top: 1px; flex-shrink: 0; accent-color: var(--orange); }
.reserve-submit { width: 100%; margin-top: 18px; padding: 15px 20px; min-height: 48px; border: 0; border-radius: var(--r-sm); background: var(--orange); color: var(--navy);
  font-family: var(--font); font-variation-settings: var(--fv-ui); font-size: 15px; cursor: pointer; }
.reserve-submit:hover { background: var(--orange-soft); }
.reserve-submit:focus-visible { outline: 2px solid var(--navy); outline-offset: 3px; }
.reserve-submit:disabled { opacity: 0.6; cursor: progress; }
.reserve-msg { margin: 12px 0 0; font-size: 13px; min-height: 1em; }
.reserve-msg.err { color: var(--err); font-variation-settings: var(--fv-ui); }
.reserve-fine { margin: 14px 0 0; font-family: var(--mono); font-size: var(--fs-micro); color: var(--muted); text-align: center; }
@media (max-width: 480px) { .reserve-row { grid-template-columns: 1fr; } }

/* ============================================================
   30 · RÉVÉLATIONS — CSS scroll-driven, repli IntersectionObserver
   `.reveal` (blocs) et `[data-draw]` (filets) : chrome.js pose `.in`.
   ============================================================ */
@media (prefers-reduced-motion: no-preference) {
  .js .reveal { opacity: 0; transform: translateY(16px); transition: opacity var(--d-reveal) var(--e-out), transform var(--d-reveal) var(--e-out); }
  .js .reveal.in { opacity: 1; transform: none; }
  .js [data-draw]::before { transform: scaleX(0); transition: transform 720ms var(--e-out); }
  .js [data-draw].in::before { transform: scaleX(1); }
  .js [data-draw] > * { opacity: 0; transition: opacity var(--d-reveal) var(--e-out) 120ms; }
  .js [data-draw].in > * { opacity: 1; }
  @supports (animation-timeline: view()) {
    .js .reveal { opacity: 1; transform: none; transition: none; animation: rise var(--d-reveal) var(--e-out) both; animation-timeline: view(); animation-range: entry 0% entry 30%; }
    .js [data-draw]::before { transition: none; transform: none; animation: draw linear both; animation-timeline: view(); animation-range: entry 0% entry 40%; }
    .js [data-draw] > * { transition: none; opacity: 1; animation: fade-in linear both; animation-timeline: view(); animation-range: entry 10% entry 45%; }
    @keyframes draw { from { transform: scaleX(0); } to { transform: scaleX(1); } }
    @keyframes fade-in { from { opacity: 0; } to { opacity: 1; } }
  }
}
.reveal.is-static, [data-draw].is-static { animation: none !important; opacity: 1 !important; transform: none !important; }

/* ============================================================
   31 · PIED DE PAGE
   ============================================================ */
footer { background: var(--navy-deep); color: var(--on-navy-2); border-top: 1px solid var(--line-light); }
.footer-inner { display: grid; gap: clamp(28px, 4vw, 56px); grid-template-columns: minmax(0, 2fr) repeat(3, minmax(0, 1fr));
  width: 100%; max-width: none; padding: clamp(48px, 6vw, 80px) clamp(32px, 4vw, 96px) clamp(32px, 4vw, 56px); }
.footer-brand .logo { color: var(--cream); margin-bottom: 18px; }
.footer-brand .logo-wordmark { font-size: 24px; }
.footer-brand p { font-size: var(--fs-small); line-height: 1.6; max-width: 40ch; color: var(--on-navy-2); }
.footer-col h2 { font-family: var(--mono); font-size: var(--fs-micro); letter-spacing: var(--ls-mono); text-transform: uppercase; color: var(--zinc);
  font-variation-settings: normal; font-weight: 500; margin: 0 0 14px; }
.footer-col a { display: block; padding: 6px 0; font-size: 15px; color: var(--cream); text-decoration: none; opacity: 0.86; }
.footer-col a:hover { opacity: 1; color: var(--orange); }
.footer-bottom { display: flex; flex-wrap: wrap; gap: 12px 32px; align-items: center; width: 100%; max-width: none; padding: 20px clamp(32px, 4vw, 96px) 28px;
  border-top: 1px solid var(--line-light); font-family: var(--mono); font-size: var(--fs-micro); letter-spacing: 0.04em; color: var(--on-navy-3); }
.footer-bottom > span:nth-child(2) { color: var(--zinc); }
.footer-note { width: 100%; margin: 0; font-family: var(--font); font-size: 13px; letter-spacing: 0; color: var(--on-navy-3); }
.footer-note a { color: var(--on-navy-2); }
@media (max-width: 860px) { .footer-inner { grid-template-columns: 1fr 1fr; } .footer-brand { grid-column: 1 / -1; } }
@media (max-width: 520px) { .footer-inner { grid-template-columns: 1fr; } .footer-col a { padding: 11px 0; } }

/* ============================================================
   32 · IMPRESSION
   ============================================================ */
@media print {
  body > nav, .subnav, .scroll-progress, .sticky-cta, .marquee, .skip-link, .scroll-cue, dialog { display: none !important; }
  body:not(.app-body) { background: #fff; color: #000; }
  .hero, .on-navy, footer, .stat-strip { background: #fff !important; color: #000 !important; }
  .hero-media { display: none; }
  .hero h1, .on-navy h2, .on-navy h3, .stat .n { color: #000 !important; }
  .js .reveal, .js [data-draw] > * { opacity: 1 !important; transform: none !important; animation: none !important; }
  .acc-panel { grid-template-rows: 1fr !important; } .acc-panel[hidden] { display: grid !important; }
  section { padding: 24px 0; page-break-inside: avoid; }
  a[href^="http"]::after { content: " (" attr(href) ")"; font-size: 0.8em; }
}
