/* ════════════════════════════════════════════════════════════════
   VITRINE STYLE — réplique exacte de references/dashformation_maquette.html.
   Appliqué sur TOUTES les pages publiques (index, formations, formateur-info,
   rejoindre, entreprises/*, mentions, cookies, politique-confidentialite,
   cgu, 404). N'affecte JAMAIS les espaces admin/learner/formateur/builder/
   course/recruteur qui restent sur css/main.css.

   Convention : la page vitrine met <body class="vitrine"> + inclut cette
   feuille AVANT les styles spécifiques. Les helpers js/vitrine.js gèrent
   le nav scroll, le menu mobile, le reveal au scroll, l'auth state et le CMS.
   ════════════════════════════════════════════════════════════════ */

/* Design tokens partagés — même palette / fonts / radius / ombres que le dashboard.
   L'unification vers `#3D6657` (couleur brand dashboard) remplace l'ancien `--sage
   #4E9E7C` légèrement plus clair ; le rendu vitrine gagne en cohérence entre les
   pages publiques et les espaces authentifiés. Les alias `--sage-*`, `--display`,
   `--body`, `--r`, `--shadow` restent définis dans design-tokens.css pour compat. */
@import url('./design-tokens.css');
:root{
  /* Ces 2 vars restent locales car spécifiques à la vitrine :
     `--bg` = fond de page vitrine (identique à --surface-2 côté design-tokens)
     `--line` = teinte du filet de séparation entre sections */
  --bg:var(--surface-2);
  --line:rgba(47,122,95,.16);
  /* Ombres seconde intensité pour cards vitrine (au-dessus de --shadow-md) */
  --shadow-sm:0 10px 28px -16px rgba(20,70,50,.35);
}
body.vitrine{font-family:var(--body);background:var(--bg);color:var(--ink);line-height:1.6;-webkit-font-smoothing:antialiased;overflow-x:hidden;margin:0}
body.vitrine *{box-sizing:border-box}
/* Force Bricolage Grotesque sur tous les titres des pages vitrine (y compris
   entreprises/* qui ont leur propre CSS inline). */
body.vitrine h1,body.vitrine h2,body.vitrine h3,body.vitrine h4{font-family:var(--display);letter-spacing:-.015em}
/* Reset minimal comme la maquette : `a` simple = spécificité (0,0,1).
   IMPORTANT : pas de prefix `body.vitrine` ici sinon (0,1,2) battrait
   `.nav-links a` (0,1,1) et tous les liens hériteraient du noir.
   Cette feuille étant chargée UNIQUEMENT sur les pages .vitrine,
   le selecteur global `a` n'impacte rien d'autre. */
body.vitrine a{}
a{color:inherit;text-decoration:none}
body.vitrine img{display:block;max-width:100%}
.wrap{width:min(1180px,92vw);margin-inline:auto}
.eyebrow{font-weight:600;font-size:.74rem;letter-spacing:.14em;text-transform:uppercase;color:var(--sage-dark);font-family:var(--body)}

/* ── BOUTONS ──
   Spécificité bumpée (.btn.btn-X) pour battre tous les a {color:inherit}
   et les inline styles qui pourraient s'incruster. */
.btn,a.btn{display:inline-flex !important;align-items:center;gap:9px;font-family:var(--body);font-weight:600;font-size:.95rem;
  padding:.78em 1.4em;border-radius:999px;cursor:pointer;border:none;transition:transform .18s,box-shadow .2s,background .2s;text-decoration:none}
.btn .ar{transition:transform .25s}.btn:hover .ar{transform:translateX(4px)}
.btn.btn-primary,a.btn.btn-primary{background:var(--sage-dark) !important;color:#fff !important;box-shadow:0 12px 28px -12px rgba(31,92,70,.55)}
.btn.btn-primary:hover,a.btn.btn-primary:hover{transform:translateY(-2px);background:var(--sage-deep) !important}
.btn.btn-white,a.btn.btn-white{background:#fff !important;color:var(--sage-deep) !important}
.btn.btn-white:hover,a.btn.btn-white:hover{transform:translateY(-2px);box-shadow:0 16px 40px -16px rgba(0,0,0,.35)}
.btn.btn-glass,a.btn.btn-glass{background:rgba(255,255,255,.16) !important;color:#fff !important;border:1px solid rgba(255,255,255,.35);backdrop-filter:blur(6px)}
.btn.btn-glass:hover,a.btn.btn-glass:hover{transform:translateY(-2px);background:rgba(255,255,255,.26) !important}
.btn.btn-ghost,a.btn.btn-ghost{background:#fff !important;color:var(--ink) !important;border:1px solid var(--line)}
.btn.btn-ghost:hover,a.btn.btn-ghost:hover{transform:translateY(-2px);border-color:var(--sage)}

/* ── NAV ──
   !important sur background/border/box-shadow par défaut pour battre les
   anciennes règles `.nav { background: white }` qui traînent dans les
   <style> inline des pages entreprises/. Sinon white-on-white au repos. */
header.nav{position:fixed !important;top:0;left:0;right:0;z-index:60;transition:background .3s,box-shadow .3s;background:transparent !important;border:none !important;box-shadow:none !important;backdrop-filter:none}
.nav-inner{display:flex;align-items:center;justify-content:space-between;height:76px}
.brand{display:flex;align-items:center;gap:11px}
.brand img{height:38px;width:auto;transition:filter .3s;
  /* Logo dark → blanc sur fond sombre du hero. Brightness 0 → silhouette noire, invert(1) → blanche. */
  filter:brightness(0) invert(1)}
header.nav.scrolled .brand img{filter:none}
.brand b{font-family:var(--display);font-weight:700;font-size:1.04rem;letter-spacing:.16em;color:#fff;white-space:nowrap;transition:color .3s}
.nav-links{display:flex;gap:32px;align-items:center}
.nav-links a{font-size:.92rem;font-weight:500;color:#fff;opacity:.9;transition:opacity .2s,color .3s}
.nav-links a:hover{opacity:1}
.nav-cta{display:flex;align-items:center;gap:14px}
.ghost-link{font-size:.92rem;font-weight:600;color:#fff;transition:color .3s;background:none;border:none;cursor:pointer;font-family:var(--body)}
header.nav.scrolled{background:rgba(248,248,246,.92) !important;backdrop-filter:saturate(150%) blur(16px) !important;box-shadow:0 1px 0 var(--line) !important;border-bottom:1px solid var(--line) !important}
header.nav.scrolled .brand b,header.nav.scrolled .nav-links a,header.nav.scrolled .ghost-link{color:var(--dark)}
header.nav.scrolled .ghost-link{color:var(--sage-dark)}
/* !important obligatoire ici : .btn.btn-glass utilise !important sur color/bg pour
   battre body.vitrine a{color:inherit} sur le hero, du coup le scrolled state doit
   réutiliser !important sinon le bouton garde son fond glass invisible sur nav blanche. */
header.nav.scrolled .nav-cta .btn-glass,
header.nav.scrolled .nav-cta a.btn.btn-glass{background:var(--sage-dark) !important;color:#fff !important;border-color:transparent !important;backdrop-filter:none}
.menu-btn{display:none;background:none;border:none;cursor:pointer;padding:8px;z-index:70}
.menu-btn span{display:block;width:22px;height:2px;background:#fff;margin:4px 0;border-radius:2px;transition:background .3s,transform .3s,opacity .3s}
header.nav.scrolled .menu-btn span{background:var(--dark)}
.menu-btn.open span:nth-child(1){transform:translateY(6px) rotate(45deg)}
.menu-btn.open span:nth-child(2){opacity:0}
.menu-btn.open span:nth-child(3){transform:translateY(-6px) rotate(-45deg)}

/* Avatar utilisateur connecté (nav-cta dynamique) */
.avatar{width:36px;height:36px;border-radius:50%;background:var(--sage-dark);color:#fff;display:grid;place-items:center;font-weight:700;font-size:.9rem;font-family:var(--display)}

/* ── HERO (utilisé par index.html) ──
   min-height un peu réduit (640px au lieu de 760) + padding-bottom raccourci (60 au lieu
   de 90) pour que le hero-meta (« 100% / Plusieurs / Qualiopi ») reste visible
   sans scroll même sur des viewports laptop courts (768-800px). */
.hero{position:relative;min-height:640px;display:flex;align-items:center;padding:120px 0 60px;overflow:hidden;color:#fff}
.hero-bg{position:absolute;inset:0;z-index:0}
.hero-bg img{width:100%;height:100%;object-fit:cover}
.hero-bg::after{content:"";position:absolute;inset:0;
  background:linear-gradient(118deg,var(--sage-deep) 0%,rgba(31,92,70,.88) 40%,rgba(78,158,124,.72) 100%)}
.hero-grid{position:relative;z-index:3;display:grid;grid-template-columns:1.05fr .95fr;gap:48px;align-items:center}
.pill{display:inline-flex;align-items:center;gap:9px;background:rgba(255,255,255,.16);border:1px solid rgba(255,255,255,.32);
  padding:.5em 1.05em;border-radius:999px;font-size:.8rem;font-weight:600;color:#fff;line-height:1;
  margin:0 0 0 0;backdrop-filter:blur(6px)}
.hero-copy .pill+h1,.hero-copy .pill+.title{margin-top:8px}
.pill .dot{width:7px;height:7px;border-radius:50%;background:#fff;box-shadow:0 0 0 4px rgba(255,255,255,.25)}
h1.title{font-family:var(--display);font-weight:700;font-size:clamp(2.5rem,5.2vw,4rem);line-height:1.03;letter-spacing:-.02em}
h1.title em{font-style:normal;color:var(--sage-light)}
.hero p.lead{font-size:1.14rem;color:rgba(255,255,255,.88);max-width:40ch;margin:22px 0 32px}
.hero-actions{display:flex;gap:14px;flex-wrap:wrap}
.hero-meta{display:flex;gap:30px;margin-top:40px;flex-wrap:wrap}
.hero-meta .m b{font-family:var(--display);font-weight:700;font-size:1.55rem;line-height:1;display:block;color:#fff}
.hero-meta .m span{font-size:.82rem;color:rgba(255,255,255,.72);margin-top:6px;display:block}

/* Hero compact pour pages internes (formations, rejoindre, mentions, etc.) */
.hero-mini{position:relative;padding:160px 0 80px;color:#fff;overflow:hidden;
  background:linear-gradient(118deg,var(--sage-deep) 0%,var(--sage-dark) 70%,var(--sage) 100%)}
.hero-mini::before{content:"";position:absolute;inset:0;
  background-image:radial-gradient(rgba(255,255,255,.08) 2px,transparent 2px);background-size:24px 24px;opacity:.5}
.hero-mini .wrap{position:relative;z-index:2}
.hero-mini h1{font-family:var(--display);font-weight:700;font-size:clamp(2.2rem,4.5vw,3.4rem);letter-spacing:-.02em;line-height:1.05;margin-bottom:14px}
/* Spacing eyebrow → h1 dans hero-mini : aligné sur le pill + h1 du hero principal. */
.hero-mini .eyebrow{display:inline-block;line-height:1;margin-bottom:8px}
.hero-mini .eyebrow + h1{margin-top:0}
.hero-mini h1 em{font-style:normal;color:var(--sage-light)}
.hero-mini p.lead{font-size:1.1rem;color:rgba(255,255,255,.85);max-width:55ch}

/* Bulles flottantes hero */
.bubbles{position:absolute;inset:0;z-index:2;pointer-events:none}
.bubble{position:absolute;background:rgba(255,255,255,.12);border:1px solid rgba(255,255,255,.28);
  border-radius:20px;backdrop-filter:blur(7px);display:grid;place-items:center;box-shadow:0 10px 30px -12px rgba(0,0,0,.2);
  animation:float 7s ease-in-out infinite}
.bubble svg{width:46%;height:46%;color:#fff;opacity:.92}
.b1{width:86px;height:86px;top:16%;left:7%;animation-delay:0s}
.b2{width:120px;height:120px;top:60%;left:3%;animation-delay:1.2s}
.b3{width:74px;height:74px;top:74%;left:46%;animation-delay:.6s}
.b4{width:96px;height:96px;top:13%;right:40%;animation-delay:1.8s}
.b5{width:80px;height:80px;bottom:16%;right:6%;animation-delay:.9s}
.b6{width:110px;height:110px;top:50%;right:2%;animation-delay:2.2s}
@keyframes float{0%,100%{transform:translateY(0)}50%{transform:translateY(-14px)}}

/* Device mockup hero */
.device{position:relative;z-index:4;justify-self:end;width:100%;max-width:430px}
.screen{background:#fff;border-radius:24px;border:1px solid rgba(255,255,255,.5);box-shadow:var(--shadow);overflow:hidden}
.screen-bar{display:flex;align-items:center;gap:7px;padding:13px 16px;border-bottom:1px solid var(--line);background:var(--bg)}
.screen-bar i{width:9px;height:9px;border-radius:50%;background:var(--sage-light)}
.screen-bar .tag{margin-left:auto;font-size:.7rem;font-weight:600;color:var(--sage-dark);background:var(--sage-pale);padding:.25em .7em;border-radius:999px}
.screen-body{padding:18px}
.course-row{display:flex;align-items:center;gap:12px;padding:12px;border-radius:13px}
.course-row+.course-row{margin-top:6px}
.cr-ico{flex:0 0 36px;height:36px;border-radius:10px;background:var(--sage-pale);display:grid;place-items:center;color:var(--sage-dark);font-family:var(--display);font-weight:700;font-size:.74rem}
.cr-main{flex:1;min-width:0}
.cr-main b{font-size:.84rem;font-weight:600;color:var(--ink);display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.cr-main .bar{height:6px;border-radius:999px;background:var(--sage-pale);margin-top:7px;overflow:hidden}
.cr-main .bar i{display:block;height:100%;border-radius:999px;background:linear-gradient(90deg,var(--sage),var(--sage-dark))}
.cr-pct{font-family:var(--display);font-weight:700;font-size:.8rem;color:var(--sage-dark)}
.float-badge{position:absolute;background:#fff;border-radius:15px;box-shadow:var(--shadow);border:1px solid var(--line);
  padding:12px 15px;z-index:6;display:flex;align-items:center;gap:11px}
.fb1{right:6px;top:20px}.fb2{left:-26px;bottom:30px}
.float-badge .ring{width:34px;height:34px;border-radius:50%;display:grid;place-items:center;background:conic-gradient(var(--sage) 78%,var(--sage-pale) 0)}
.float-badge .ring span{width:24px;height:24px;border-radius:50%;background:#fff;display:grid;place-items:center;font-size:.6rem;font-weight:700;color:var(--sage-dark)}
.float-badge .qbadge{width:32px;height:32px;border-radius:9px;background:var(--sage-dark);color:#fff;display:grid;place-items:center;font-weight:700;font-size:.8rem}
.float-badge .fbtxt b{font-size:.8rem;display:block;color:var(--ink)}
.float-badge .fbtxt span{font-size:.68rem;color:var(--muted)}

/* ── BANDEAU TRUST ── */
.trust{background:var(--sage-dark);color:#fff}
.trust-inner{display:flex;justify-content:space-between;gap:20px;padding:30px 0;flex-wrap:wrap}
.trust .t{display:flex;align-items:center;gap:12px;font-size:.92rem;font-weight:500}
.trust .t .ic{flex:0 0 38px;height:38px;border-radius:11px;background:rgba(255,255,255,.14);display:grid;place-items:center}
.trust .t .ic svg{width:20px;color:#fff}
.trust .t b{font-family:var(--display);font-weight:700;font-size:1.15rem;display:block;line-height:1.1}
.trust .t span{font-size:.82rem;color:rgba(255,255,255,.75)}

/* ── SECTIONS ──
   :not(.hero):not(.hero-mini) pour ne pas écraser le padding spécifique des hero. */
body.vitrine section:not(.hero):not(.hero-mini){padding:96px 0}
.sec-head{max-width:660px;margin-bottom:48px}
.sec-head.center{margin-inline:auto;text-align:center}
.sec-head h2{font-family:var(--display);font-weight:700;font-size:clamp(2rem,3.6vw,2.85rem);line-height:1.06;letter-spacing:-.02em;color:var(--dark);margin:14px 0 16px}
.sec-head h2 em{font-style:normal;color:var(--sage-dark)}
.sec-head p{color:var(--muted);font-size:1.05rem}

/* ── CATALOGUE (formations) ── */
.catalogue{background:var(--sage-pale)}
.cat-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:24px}
.course{background:#fff;border-radius:var(--r);overflow:hidden;border:1px solid rgba(47,122,95,.12);
  transition:transform .25s,box-shadow .25s;display:flex;flex-direction:column}
.course:hover{transform:translateY(-6px);box-shadow:var(--shadow)}
.course .ph{position:relative;height:172px;overflow:hidden;background:linear-gradient(135deg,var(--sage-dark),var(--sage-deep))}
.course .ph img{width:100%;height:100%;object-fit:cover;transition:transform .5s}
.course:hover .ph img{transform:scale(1.06)}
.course .ph::after{content:"";position:absolute;inset:0;background:linear-gradient(180deg,rgba(31,92,70,.08),rgba(31,92,70,.6))}
/* Pas d'overlay sombre quand il n'y a pas de cover (sinon le placeholder texte
   blanc devient invisible par-dessus le gradient sage déjà sombre). */
.course .ph.no-cover::after{display:none}
.course .ph .chip{position:absolute;top:14px;left:14px;z-index:2;background:rgba(255,255,255,.92);color:var(--sage-deep);
  font-weight:700;font-size:.72rem;letter-spacing:.04em;padding:.4em .8em;border-radius:999px}
.course .ph .cert{position:absolute;bottom:14px;left:14px;z-index:2;color:#fff;font-family:var(--display);font-weight:700;font-size:1.15rem}
.course .body{padding:22px;display:flex;flex-direction:column;flex:1}
.course .body p{font-size:.92rem;color:var(--muted);margin-bottom:12px}
.course .body .meta-row{font-size:.78rem;color:var(--ink);margin-bottom:6px;line-height:1.5;display:flex;gap:6px;align-items:flex-start}
.course .body .meta-row .meta-ic{font-size:.85rem;flex-shrink:0;color:var(--sage-dark);margin-top:1px}
.course .body .meta-row strong{font-weight:700;color:var(--ink);font-size:.78rem}
.course .body .badges{margin-top:auto;padding-top:14px}
.course .body .go{font-size:.9rem;font-weight:600;color:var(--sage-dark);margin-top:14px;display:inline-block}
.course .body .badges{display:flex;gap:7px;flex-wrap:wrap;margin-bottom:16px}
.pill-q{display:inline-flex;align-items:center;gap:5px;background:var(--sage-dark);color:#fff;font-size:.7rem;font-weight:700;padding:.4em .72em;border-radius:999px}
.pill-soft{background:var(--sage-pale);color:var(--sage-deep);font-size:.7rem;font-weight:600;padding:.4em .72em;border-radius:999px}
.cat-foot{text-align:center;margin-top:40px}

/* ── STEPS (4 cercles numérotés + ligne animée) ── */
.steps{position:relative;display:grid;grid-template-columns:repeat(4,1fr);gap:24px;text-align:center;padding-top:6px}
.steps::before{content:"";position:absolute;top:38px;left:12.5%;right:12.5%;height:3px;background:var(--sage-pale);border-radius:3px;z-index:0}
.steps::after{content:"";position:absolute;top:38px;left:12.5%;height:3px;width:0;background:linear-gradient(90deg,var(--sage),var(--sage-dark));border-radius:3px;z-index:1;transition:width 1.5s cubic-bezier(.5,.05,.2,1) .3s}
.steps.in::after{width:75%}
.step{position:relative;z-index:2;opacity:0;transform:translateY(18px)}
.steps.in .step{opacity:1;transform:none;transition:opacity .55s ease,transform .55s ease}
.steps.in .step:nth-child(1){transition-delay:.15s}
.steps.in .step:nth-child(2){transition-delay:.32s}
.steps.in .step:nth-child(3){transition-delay:.49s}
.steps.in .step:nth-child(4){transition-delay:.66s}
.step .num{position:relative;width:76px;height:76px;border-radius:50%;margin:0 auto 20px;
  background:linear-gradient(135deg,var(--sage),var(--sage-dark));color:#fff;
  font-family:var(--display);font-weight:700;font-size:1.7rem;display:grid;place-items:center;
  box-shadow:0 14px 30px -12px rgba(31,92,70,.65);transition:transform .3s}
.step .num::after{content:"";position:absolute;inset:-7px;border-radius:50%;border:2px solid var(--sage);opacity:0}
.steps.in .step .num::after{animation:ring 2.8s ease-out infinite}
.steps.in .step:nth-child(2) .num::after{animation-delay:.7s}
.steps.in .step:nth-child(3) .num::after{animation-delay:1.4s}
.steps.in .step:nth-child(4) .num::after{animation-delay:2.1s}
.step:hover .num{transform:translateY(-4px) scale(1.06)}
@keyframes ring{0%{opacity:.5;transform:scale(.9)}70%{opacity:0;transform:scale(1.35)}100%{opacity:0}}
.step h3{font-family:var(--display);font-weight:600;font-size:1.15rem;margin-bottom:8px;color:var(--dark)}
.step p{font-size:.9rem;color:var(--muted);max-width:24ch;margin-inline:auto}

/* ── FORMATEUR (dark card LearnWorlds-style) ── */
.formateur{position:relative;border-radius:34px;overflow:hidden;color:#fff;padding:0}
/* Variante full-width (feedback 2026-07-06) : bandeau qui prend 100% du viewport,
   sans .wrap parent, avec radius supprimé pour un rendu bandeau plein. */
.formateur--full{border-radius:0;width:100vw;margin-left:calc(50% - 50vw)}
.formateur--full .form-grid{max-width:1200px;margin:0 auto;padding:80px 32px}
@media (max-width:900px){ .formateur--full .form-grid{padding:56px 20px} }
.formateur .fbg{position:absolute;inset:0;z-index:0}
.formateur .fbg img{width:100%;height:100%;object-fit:cover}
.formateur .fbg::after{content:"";position:absolute;inset:0;background:linear-gradient(120deg,var(--dark) 0%,rgba(30,30,30,.92) 38%,rgba(74,99,83,.86) 100%)}
.form-grid{position:relative;z-index:2;display:grid;grid-template-columns:1fr 1fr;gap:50px;align-items:center;padding:64px 56px}
.formateur .eyebrow{color:var(--sage-light)}
.formateur h2{font-family:var(--display);font-weight:700;font-size:clamp(1.9rem,3.3vw,2.7rem);letter-spacing:-.02em;line-height:1.07;margin:14px 0 18px}
.formateur h2 em{font-style:normal;color:var(--sage-light)}
.formateur .intro{color:rgba(255,255,255,.78);font-size:1.06rem;max-width:44ch;margin-bottom:28px}
.feat{display:flex;flex-direction:column;gap:14px}
.feat .f{background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.12);border-radius:16px;padding:20px 22px;transition:background .25s,transform .25s}
.feat .f:hover{background:rgba(135,162,144,.2);transform:translateX(5px)}
.feat .f b{font-family:var(--display);font-weight:600;font-size:1.04rem;display:flex;align-items:center;gap:12px}
.feat .f b .ic{width:34px;height:34px;border-radius:10px;background:var(--sage-dark);display:grid;place-items:center;flex:0 0 34px}
.feat .f b .ic svg{width:18px;color:#fff}
.feat .f p{color:rgba(255,255,255,.66);font-size:.9rem;margin-top:9px;padding-left:46px}

/* ── PARTENAIRES (slider horizontal + flèches nav, feedback Matthias 2026-07-06) ──
   `.partners-slider` = flex 3-col : flèche gauche | zone scrollable | flèche droite.
   Les flèches sont ainsi DEHORS de la zone des cartes, aucun chevauchement possible
   avec le texte. Le scroll horizontal reste natif dans `.partners` (scroll-snap). */
.partners-slider{
  display:flex; align-items:center; gap:14px;
  /* Compense le padding vertical de .partners pour aligner les flèches sur les cards */
  min-height:100px;
}
/* Ordre visuel forcé : prev (gauche) → scroll (centre) → next (droite).
   Le HTML place les 2 boutons AVANT `.partners` (contraintes accessibilité clavier),
   on utilise `order` pour repositionner en flex sans toucher au DOM. */
.partners-slider .partners-nav--prev{order:1}
.partners-slider .partners{order:2;flex:1;min-width:0}
.partners-slider .partners-nav--next{order:3}
.partners-nav{
  flex-shrink:0;
  width:48px; height:48px; border-radius:50%;
  background:#fff; border:1px solid var(--line);
  color:var(--sage-dark);
  display:flex; align-items:center; justify-content:center;
  cursor:pointer;
  box-shadow:0 8px 20px -6px rgba(15,40,30,.15), 0 2px 6px rgba(15,40,30,.06);
  transition:transform var(--t), background var(--t), opacity var(--t);
}
.partners-nav:hover{background:var(--sage-pale);transform:scale(1.06)}
.partners-nav.is-disabled{opacity:.3;pointer-events:none}
@media (max-width:700px){
  .partners-slider{gap:8px}
  .partners-nav{width:40px;height:40px}
}
.partners{
  display:flex; gap:22px;
  /* Scroll horizontal uniquement (feedback 2026-07-06) — `overflow-y:hidden` évite
     que le hover translateY(-5px) des cards fasse apparaître un scroll vertical. */
  overflow-x:auto; overflow-y:hidden;
  scroll-snap-type:x mandatory;
  scroll-padding:16px;
  padding:8px 16px 24px;
  margin:0 -16px;
  scrollbar-width:thin;
  scrollbar-color:var(--brand-primary-mid) transparent;
}
.partners::-webkit-scrollbar{height:8px}
.partners::-webkit-scrollbar-thumb{background:var(--brand-primary-mid);border-radius:8px}
.partners::-webkit-scrollbar-track{background:transparent}
.partner{
  background:#fff;border:1px solid var(--line);border-radius:var(--r);padding:34px;
  transition:transform .25s,box-shadow .25s;display:flex;flex-direction:column;
  flex:0 0 340px; scroll-snap-align:start;
}
@media (min-width:900px){ .partner{flex:0 0 380px} }
.partner:hover{transform:translateY(-5px);box-shadow:var(--shadow)}
.partner .logo{width:54px;height:54px;border-radius:15px;background:var(--sage-pale);display:grid;place-items:center;font-family:var(--display);font-weight:700;color:var(--sage-dark);font-size:1.05rem;margin-bottom:20px;overflow:hidden}
.partner .logo img{max-width:80%;max-height:80%;object-fit:contain}
.partner h3{font-family:var(--display);font-weight:600;font-size:1.3rem;margin-bottom:12px;color:var(--dark)}
.partner p{font-size:.95rem;color:var(--muted);margin-bottom:22px;flex:1;white-space:pre-wrap}
.partner .links{display:flex;gap:18px;align-items:center;flex-wrap:wrap}
.partner .links a{font-size:.9rem;font-weight:600;color:var(--sage-dark)}
.partner .links a:hover{text-decoration:underline}
.partner .links a.sub{color:var(--muted);font-weight:500}

/* ── FINAL CTA (carte arrondie + dots) ── */
.final-card{position:relative;border-radius:34px;overflow:hidden;padding:78px 40px;color:#fff;text-align:center;
  background:linear-gradient(160deg,var(--sage) 0%,var(--sage-deep) 100%)}
/* Variante full-width (feedback 2026-07-06) : bandeau CTA final qui déborde du .wrap
   parent pour couvrir toute la largeur du viewport. Le contenu reste centré au max
   avec un padding interne pour respirer, indépendamment du .wrap habituel. */
.final-card--full{border-radius:0;width:100vw;margin-left:calc(50% - 50vw);padding:88px 32px}
.final-card--full h2,.final-card--full p,.final-card--full .final-actions,.final-card--full .eyebrow{max-width:820px;margin-left:auto;margin-right:auto}
.final-card--full h2{margin-bottom:18px}
.final-card--full p{margin-bottom:32px}
@media (max-width:900px){ .final-card--full{padding:64px 20px} }
.final-card .pdots{position:absolute;inset:0;background-image:radial-gradient(rgba(255,255,255,.18) 2px,transparent 2px);background-size:24px 24px;opacity:.5}
.final-card>*{position:relative;z-index:2}
.final-card h2{font-family:var(--display);font-weight:700;font-size:clamp(2rem,3.8vw,3rem);letter-spacing:-.02em;line-height:1.06;max-width:20ch;margin:0 auto 18px}
.final-card p{color:rgba(255,255,255,.85);font-size:1.08rem;max-width:48ch;margin:0 auto 32px}
.final-actions{display:flex;gap:14px;justify-content:center;flex-wrap:wrap}

/* ── QUALIOPI ── */
.quali{display:flex;align-items:center;gap:40px;background:#fff;border:1px solid var(--line);border-radius:var(--r);padding:38px 44px;margin-top:26px}
.quali .seal{flex:0 0 auto}
.quali .seal img{height:auto;width:auto;max-height:130px;max-width:200px;display:block}
.quali .seal .fallback{height:92px;width:92px;border-radius:18px;background:var(--sage-pale);display:grid;place-items:center;text-align:center;font-family:var(--display);font-weight:700;color:var(--sage-dark);line-height:1.1;font-size:.8rem}
.quali h3{font-family:var(--display);font-weight:600;font-size:1.25rem;margin-bottom:8px;color:var(--dark)}
.quali p{font-size:.92rem;color:var(--muted);margin-bottom:12px}
.quali a{font-size:.9rem;font-weight:600;color:var(--sage-dark)}

/* ── FOOTER ── */
footer.vitrine-footer{background:var(--dark);color:#fff;padding:64px 0 30px;margin-top:96px}
.foot-grid{display:grid;grid-template-columns:1.6fr 1fr 1fr 1fr;gap:40px;padding-bottom:44px;border-bottom:1px solid rgba(255,255,255,.1)}
.foot-brand .b{display:flex;align-items:center;gap:10px;margin-bottom:18px;line-height:1}
.foot-brand .b img{height:32px;width:auto;filter:brightness(0) invert(1);display:block;flex-shrink:0}
.foot-brand .b b{font-family:var(--display);font-weight:700;letter-spacing:.14em;font-size:1.05rem;line-height:1;display:inline-block}
.foot-brand p{color:rgba(255,255,255,.6);font-size:.92rem;max-width:30ch}
.foot-brand .addr{margin-top:16px;font-size:.85rem;color:rgba(255,255,255,.5)}
.foot-col h5{font-family:var(--display);font-weight:600;font-size:.92rem;margin-bottom:16px}
.foot-col a{display:block;font-size:.9rem;color:rgba(255,255,255,.6);margin-bottom:11px;transition:color .2s}
.foot-col a:hover{color:var(--sage-light)}
/* Bloc Qualiopi reproduit dans chaque footer (exigence indicateur 1 Qualiopi) */
.foot-quali{display:flex;align-items:center;gap:20px;padding:24px 0;border-bottom:1px solid rgba(255,255,255,.08)}
.foot-quali__logo{display:block;flex-shrink:0;background:#fff;border-radius:8px;padding:6px 10px;transition:transform .2s}
.foot-quali__logo:hover{transform:translateY(-2px)}
.foot-quali__logo img{height:54px;width:auto;display:block}
.foot-quali__text{font-size:.84rem;color:rgba(255,255,255,.7);line-height:1.55}
.foot-quali__text strong{color:#fff;display:block;font-weight:700;font-size:.92rem;margin-bottom:2px;font-family:var(--display);letter-spacing:.01em}
.foot-quali__text em{color:rgba(255,255,255,.85);font-style:normal;font-weight:600}
@media(max-width:680px){.foot-quali{flex-direction:column;align-items:flex-start;gap:14px}}
.foot-bottom{display:flex;justify-content:space-between;align-items:center;padding-top:24px;flex-wrap:wrap;gap:14px}
.foot-bottom span{font-size:.84rem;color:rgba(255,255,255,.45)}
.foot-bottom .links{display:flex;gap:20px;flex-wrap:wrap}
.foot-bottom .links a{font-size:.82rem;color:rgba(255,255,255,.5)}
.foot-bottom .links a:hover{color:#fff}

/* ── BLOC PROSE (pages texte : mentions, cgu, cookies, politique) ── */
.prose{max-width:780px;margin:0 auto;color:var(--ink);font-size:1rem;line-height:1.75}
.prose h1{font-family:var(--display);font-weight:700;font-size:clamp(1.9rem,3.5vw,2.5rem);color:var(--dark);margin-bottom:1.2rem;letter-spacing:-.02em}
.prose h2{font-family:var(--display);font-weight:700;font-size:1.45rem;color:var(--dark);margin:2.4rem 0 .9rem;letter-spacing:-.01em}
.prose h3{font-family:var(--display);font-weight:600;font-size:1.15rem;color:var(--dark);margin:1.6rem 0 .6rem}
.prose p{margin-bottom:1rem;color:var(--ink)}
.prose ul,.prose ol{margin:1rem 0 1.2rem 1.25rem;color:var(--ink)}
.prose li{margin-bottom:.5rem}
.prose a{color:var(--sage-dark);font-weight:600}
.prose a:hover{text-decoration:underline}
.prose strong{color:var(--dark);font-weight:700}
.prose blockquote{border-left:3px solid var(--sage);padding:.4rem 0 .4rem 1.2rem;margin:1.2rem 0;color:var(--muted);font-style:italic}
.prose table{width:100%;border-collapse:collapse;margin:1.4rem 0;font-size:.92rem}
.prose th,.prose td{padding:.7rem 1rem;text-align:left;border-bottom:1px solid var(--line)}
.prose th{background:var(--sage-pale);font-family:var(--display);font-weight:600;color:var(--dark)}

/* ── FORMULAIRES (rejoindre, formateur-info) ── */
.vitrine-form{max-width:640px;margin:0 auto;background:#fff;border:1px solid var(--line);border-radius:var(--r);padding:40px;box-shadow:var(--shadow-sm)}
.vitrine-form label{display:block;font-size:.82rem;font-weight:700;color:var(--dark);margin-bottom:.4rem;font-family:var(--body)}
.vitrine-form input,.vitrine-form textarea,.vitrine-form select{
  width:100%;padding:.75rem .95rem;border:1px solid var(--line);border-radius:10px;font-size:.95rem;
  font-family:var(--body);background:var(--bg);color:var(--ink);transition:border .15s,background .15s;
  margin-bottom:1.1rem;outline:none}
.vitrine-form input:focus,.vitrine-form textarea:focus,.vitrine-form select:focus{
  border-color:var(--sage);background:#fff;box-shadow:0 0 0 3px rgba(78,158,124,.12)}
.vitrine-form textarea{resize:vertical;min-height:120px;line-height:1.6}
.vitrine-form .actions{display:flex;gap:.75rem;flex-wrap:wrap;margin-top:.5rem}
.vitrine-form .form-help{font-size:.78rem;color:var(--muted);margin-bottom:1.4rem}

/* ── REVEAL — animations variées (feedback Matthias 2026-07-06) ───────────────
   Ancien système : un seul fade-up uniforme sur tous les .reveal → look mono.
   Nouveau : plusieurs types via `data-anim` + stagger automatique sur les grilles.
   Toutes les animations utilisent une easing cubic-bezier custom (`--t-out`) pour
   un feel plus "premium" qu'un simple ease.
   Types dispos : fade-up (défaut), fade-down, slide-left, slide-right, scale-in,
   blur-in, tilt-in, pop.

   ⚠️ Respect de `prefers-reduced-motion` : les utilisateurs qui l'ont activé voient
   tout apparaître instantanément (accessibilité). */
:root{--t-out:cubic-bezier(.22,.61,.36,1);--t-back:cubic-bezier(.34,1.56,.64,1)}
.reveal{opacity:0;transition:opacity .8s var(--t-out), transform .9s var(--t-out), filter .9s var(--t-out)}
.reveal.in{opacity:1;transform:none;filter:none}

/* Défaut : fade-up. `:not(.in)` = état initial UNIQUEMENT — sinon la spécificité
   de `.reveal[data-anim=X]` (20) égale celle de `.reveal.in` (20) et écrase
   le `transform:none` du state final → les éléments restent figés. */
.reveal:not(.in){transform:translateY(32px)}
.reveal[data-anim="fade-down"]:not(.in)  {transform:translateY(-32px)}
.reveal[data-anim="slide-left"]:not(.in) {transform:translateX(-48px)}
.reveal[data-anim="slide-right"]:not(.in){transform:translateX(48px)}
.reveal[data-anim="scale-in"]:not(.in)   {transform:scale(.88)}
.reveal[data-anim="blur-in"]:not(.in)    {transform:translateY(20px);filter:blur(12px)}
.reveal[data-anim="tilt-in"]:not(.in)    {transform:perspective(900px) rotateX(14deg) translateY(30px);transform-origin:center bottom}
.reveal[data-anim="pop"]{transition:opacity .55s var(--t-out), transform .7s var(--t-back)}
.reveal[data-anim="pop"]:not(.in){transform:scale(.6)}

/* Final CTA — séquence bandeau puis texte (feedback Matthias 2026-07-06).
   Le container `.final-card` scale-in en premier (pop), puis le contenu
   (eyebrow, h2, p, boutons) apparaît en cascade avec un décalage. */
.final-card.reveal .eyebrow,
.final-card.reveal h2,
.final-card.reveal p,
.final-card.reveal .final-actions{
  opacity:0; transform:translateY(18px);
  transition:opacity .6s var(--t-out), transform .6s var(--t-out);
}
.final-card.reveal.in .eyebrow      {opacity:1;transform:none;transition-delay:.2s}
.final-card.reveal.in h2            {opacity:1;transform:none;transition-delay:.3s}
.final-card.reveal.in p             {opacity:1;transform:none;transition-delay:.4s}
.final-card.reveal.in .final-actions{opacity:1;transform:none;transition-delay:.5s}

/* ── Stagger automatique sur les grilles/listes ───────────────────────────────
   Les enfants directs d'un container avec `data-stagger` s'animent en cascade,
   avec un délai croissant. `.reveal.in .child` transitionne toujours d'un coup
   sur les enfants → on met le delay au *container* pour éviter le "flash" en cas
   de re-hydratation dynamique (partenaires CMS, courses grid). */
[data-stagger] .reveal:nth-child(1){transition-delay:.05s}
[data-stagger] .reveal:nth-child(2){transition-delay:.15s}
[data-stagger] .reveal:nth-child(3){transition-delay:.25s}
[data-stagger] .reveal:nth-child(4){transition-delay:.35s}
[data-stagger] .reveal:nth-child(5){transition-delay:.45s}
[data-stagger] .reveal:nth-child(6){transition-delay:.55s}
[data-stagger] .reveal:nth-child(n+7){transition-delay:.65s}

/* Hover premium sur les cards catalogue/partenaires — micro-animation continue */
.course{transition:transform .35s var(--t-out), box-shadow .35s var(--t-out)}
.course:hover{transform:translateY(-6px);box-shadow:0 30px 60px -30px rgba(20,70,50,.35)}
.course .ph img{transition:transform .6s var(--t-out)}
.course:hover .ph img{transform:scale(1.06)}

/* Bounce léger sur les CTA au hover — feel premium */
.btn{transition:transform .25s var(--t-out), background .25s var(--t-out), box-shadow .25s var(--t-out)}
.btn:hover{transform:translateY(-2px)}
.btn:active{transform:translateY(0)}

/* Hero enrichi : le texte apparaît EN PREMIER (glisse depuis la gauche), puis
   la petite image du mockup se pop en scale après un délai de 350ms. Sans ce
   décalage, les deux animations se lançaient simultanément et ça donnait
   l'impression d'un unique fondu — feedback Matthias 2026-07-06. */
.device.reveal{transition-delay:.35s}
.device.reveal .float-badge{opacity:0;transform:translateY(10px) scale(.9);transition:opacity .6s var(--t-out), transform .6s var(--t-back)}
.device.reveal.in .float-badge{opacity:1;transform:none;transition-delay:.9s}
.device.reveal.in .fb2{transition-delay:1.1s}

/* Float-badges du device : mini pulse continu pour un rendu vivant */
@keyframes floatUp{0%,100%{transform:translateY(0)}50%{transform:translateY(-6px)}}
.float-badge{animation:floatUp 4s ease-in-out infinite}
.float-badge.fb2{animation-delay:1.5s}

/* Section headers : légère montée + fondu du eyebrow AVANT le titre */
.sec-head .eyebrow{opacity:0;transform:translateY(10px);transition:opacity .5s var(--t-out) .1s, transform .5s var(--t-out) .1s}
.sec-head.in .eyebrow{opacity:1;transform:none}

/* Respect prefers-reduced-motion : neutralise tout mouvement (accessibilité) */
@media (prefers-reduced-motion: reduce) {
  .reveal, .reveal[data-anim]{transform:none !important;filter:none !important;transition:opacity .3s ease}
  .float-badge{animation:none}
  .course:hover, .btn:hover{transform:none}
}

/* ── RESPONSIVE ── */
@media(max-width:980px){
  .hero-grid,.form-grid,.partners,.foot-grid{grid-template-columns:1fr}
  .cat-grid{grid-template-columns:1fr 1fr}
  .steps{grid-template-columns:1fr 1fr;row-gap:36px}
  .steps::before,.steps::after{display:none}
  .step{opacity:1;transform:none}
  .device{margin:36px auto 0;max-width:400px}
  .form-grid{padding:46px 32px}
  .quali{flex-direction:column;text-align:center}
}
@media(max-width:680px){
  .nav-links,.nav-cta .ghost-link,.nav-cta .btn-glass{display:none}
  .menu-btn{display:block}
  .cat-grid,.steps{grid-template-columns:1fr}
  .foot-bottom{flex-direction:column;align-items:center;text-align:center}
  .foot-grid{text-align:center}
  .foot-brand .b{justify-content:center}
  .foot-brand p,.foot-brand .addr{margin-inline:auto;max-width:30ch}
  body.vitrine section:not(.hero):not(.hero-mini){padding:64px 0}
  .hero{padding-top:104px;min-height:auto}
  .hero-mini{padding:130px 0 60px}
  .hero-meta{justify-content:center;text-align:center}
  .hero-actions{justify-content:center}
  .bubble{display:none}
  .b1,.b5,.b6{display:grid}
  .brand b{font-size:.9rem;letter-spacing:.1em}
  .vitrine-form{padding:28px 20px}
  .nav-inner.mobile-open .nav-links{
    display:flex;position:fixed;top:76px;left:0;right:0;
    flex-direction:column;align-items:center;
    background:rgba(248,248,246,.97);backdrop-filter:blur(18px);
    padding:30px 20px;gap:18px;
    box-shadow:0 12px 30px rgba(0,0,0,.08);border-bottom:1px solid var(--line);
  }
  .nav-inner.mobile-open .nav-links a{color:var(--dark);font-size:1.05rem;font-weight:600}
}
@media(prefers-reduced-motion:reduce){
  *{animation:none!important;transition:none!important}
  .reveal,.step{opacity:1;transform:none}
  .steps::after{width:75%}
}
