/* ===========================================================
   COMPOSANTS — briques réutilisables, indépendantes du contenu
   =========================================================== */

/* ---- Barre de marque (haut du conteneur) ---- */
.topbar{display:flex;align-items:center;justify-content:space-between;gap:16px;
  padding:20px var(--pad);border-bottom:1px solid rgba(255,255,255,.06)}
.topbar__logo{font-family:var(--disp);font-weight:800;font-size:14px;line-height:1;
  letter-spacing:.18em;text-transform:uppercase;color:var(--creme)}
.topbar__logo i{font-style:normal;color:var(--or)}
.topbar__by{font-family:var(--serif);font-style:italic;font-weight:400;
  font-size:15px;line-height:1.25;color:var(--gris);text-align:right}
@media(max-width:420px){.topbar{gap:10px}.topbar__by{font-size:13px}}

/* ---- Chevron marquee (élément signature) -------------------
   Deux bandeaux inclinés qui se rejoignent en pointe.
   Se place ENTRE deux sections, jamais dans une section.
   ----------------------------------------------------------- */
/* Hauteur : les bandes sont inclinées, leur extrémité intérieure descend
   de largeur x tan(angle). Avec une hauteur fixe de 60px et overflow:hidden,
   la pointe du V était tranchée à plat. La hauteur suit donc la descente.
   Largeur 52% + 52% : les bandes se recouvrent d'un cheveu, assez pour
   qu'aucun arrondi sous-pixel n'ouvre de trou à la jonction, assez peu
   pour qu'un seul texte reste lisible. À 62% elles se superposaient sur
   près de 100px et les deux textes défilants devenaient illisibles. */
.chev{position:relative;height:clamp(54px,calc(44px + 2.1vw),74px);overflow:hidden}
.chev__s{position:absolute;top:12px;height:32px;width:52%;overflow:hidden;
  background:var(--or);display:flex;align-items:center}
.chev__s--l{left:-1%;transform:rotate(2.2deg);transform-origin:left center}
/* la bande droite passe au-dessus : son fond opaque masque la fin de
   la gauche, et un seul texte reste lisible dans la zone de jonction */
.chev__s--r{right:-1%;transform:rotate(-2.2deg);transform-origin:right center;z-index:1}
.track{display:flex;gap:26px;white-space:nowrap;will-change:transform;
  animation:slide 26s linear infinite}
.chev__s--r .track{animation-direction:reverse}
.track span{font-family:var(--disp);font-weight:800;font-size:11px;letter-spacing:.16em;
  text-transform:uppercase;color:var(--sur-or);display:inline-flex;align-items:center;gap:7px}
.track span::before{content:"◆";font-size:8px;opacity:.55}
@keyframes slide{to{transform:translateX(-50%)}}
@media(prefers-reduced-motion:reduce){.track{animation:none}}

/* ---- Badge pilule (eyebrow) ---- */
.pill{display:inline-flex;align-items:center;gap:8px;background:var(--band);color:var(--band-txt);
  font-family:var(--disp);font-weight:800;font-size:10.5px;letter-spacing:.15em;
  text-transform:uppercase;padding:8px 16px;border-radius:999px;margin-bottom:22px}
.pill--dark{background:var(--voile-or);color:var(--or);border:1px solid var(--fil-or-net);
  letter-spacing:.16em;padding:8px 15px}
.pill--diamant::before{content:"◆";font-size:8px;opacity:.55}

/* ---- Bouton : pilule + pastille flèche ---- */
.cta{display:inline-flex;align-items:center;gap:14px;text-decoration:none;
  background:linear-gradient(180deg,var(--rouge-clair),var(--rouge));color:#fff;
  font-family:var(--disp);font-weight:800;font-size:clamp(14.5px,2.1vw,16.5px);
  padding:9px 9px 9px 28px;border-radius:999px;
  box-shadow:0 10px 30px rgba(226,59,52,.32);
  transition:transform .2s var(--ease),box-shadow .2s ease}
.cta__arw{width:40px;height:40px;border-radius:50%;background:var(--or);flex:none;
  display:grid;place-items:center;transition:transform .25s var(--ease)}
.cta__arw svg{width:16px;height:16px;fill:none;stroke:var(--sur-or);stroke-width:2.4;
  stroke-linecap:round;stroke-linejoin:round}
.cta:hover{color:#fff;transform:translateY(-2px);box-shadow:0 14px 36px rgba(226,59,52,.46)}
.cta:hover .cta__arw{transform:translateX(3px)}
.cta:focus-visible{outline:3px solid var(--or);outline-offset:4px}
.cta--gold{background:linear-gradient(180deg,var(--or-doux),var(--or));color:var(--sur-or);
  box-shadow:0 10px 30px rgba(245,197,24,.26)}
.cta--gold:hover{color:var(--sur-or);box-shadow:0 14px 36px rgba(245,197,24,.4)}
.cta--gold .cta__arw{background:var(--sur-or)}
.cta--gold .cta__arw svg{stroke:var(--or)}
.cta__sub{display:block;font-family:var(--body);font-weight:400;font-size:13px;
  color:var(--gris);margin-top:14px}
@media(prefers-reduced-motion:reduce){.cta,.cta__arw{transition:none}}

/* ---- Galerie vidéo en mosaïque ------------------------------
   Colonnes CSS : chaque tuile garde SON format d'origine (porté
   par --arw / --arh sur l'article) et les hauteurs s'imbriquent
   d'elles-mêmes. Pas de plafond, pas de recadrage — contrairement
   à une bande horizontale, une mosaïque accueille les formats
   mélangés sans laisser de vide sous les plus courtes.
   La légende est SOUS l'image : sur un 16/9 haut de 135 px, un
   titre superposé mangeait tout le cadre.
   ----------------------------------------------------------- */
.galerie{column-count:1;column-gap:14px;padding:0 var(--pad);margin-top:30px}
@media(min-width:520px){.galerie{column-count:2}}
@media(min-width:900px){.galerie{column-count:3}}
.galerie .reel{break-inside:avoid;-webkit-column-break-inside:avoid;
  display:block;width:100%;margin:0 0 22px}

.reel__vue{position:relative;display:block;width:100%;
  aspect-ratio:var(--arw,9) / var(--arh,16);
  border-radius:var(--r-cd);overflow:hidden;background:var(--carte);
  border:1px solid var(--fil-or);transition:border-color .25s ease}
.reel:hover .reel__vue{border-color:var(--fil-or-vif)}

.reel__cover{width:100%;height:100%;object-fit:cover}
.reel__vue::after{content:"";position:absolute;inset:0;pointer-events:none;
  background:linear-gradient(to top,rgba(5,5,6,.5),transparent 55%);
  transition:opacity .25s ease}
.reel--joue .reel__vue::after{opacity:0}

/* toute la vignette est cliquable, pas seulement la pastille */
.reel__play{position:absolute;inset:0;width:100%;height:100%;padding:0;border:0;
  background:none;cursor:pointer;display:grid;place-items:center;z-index:2}
.reel__disque{width:58px;height:58px;border-radius:50%;background:var(--or);
  display:grid;place-items:center;box-shadow:0 8px 24px rgba(245,197,24,.35);
  transition:transform .22s var(--ease)}
.reel__play:hover .reel__disque{transform:scale(1.1)}
.reel__play:focus-visible{outline:3px solid var(--or);outline-offset:-4px}
.reel__disque svg{width:21px;height:21px;fill:var(--play);margin-left:3px}
.reel--joue .reel__play{display:none}

/* bouton de fermeture, posé par main.js §5 sur la vidéo qui joue */
.reel__close{position:absolute;top:10px;right:10px;z-index:4;
  width:34px;height:34px;padding:0;border-radius:50%;cursor:pointer;
  background:rgba(5,5,6,.72);border:1px solid var(--fil-or-net);
  display:grid;place-items:center;
  -webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px)}
.reel__close svg{width:15px;height:15px;fill:none;stroke:var(--creme);
  stroke-width:2.4;stroke-linecap:round}
.reel__close:hover{background:var(--or)}
.reel__close:hover svg{stroke:var(--sur-or)}
.reel__close:focus-visible{outline:3px solid var(--or);outline-offset:2px}

.reel__n{font-size:10px;letter-spacing:.15em;text-transform:uppercase;
  color:var(--or);margin:14px 0 6px;font-family:var(--disp);font-weight:800}
.reel__t{font-family:var(--disp);font-weight:800;font-size:15.5px;line-height:1.25}

.reel iframe{position:absolute;inset:0;width:100%;height:100%;border:0;z-index:3}

@media(prefers-reduced-motion:reduce){
  .reel__disque,.reel__vue,.reel__vue::after{transition:none}
}

/* ---- Carte bonus ---- */
.card{background:linear-gradient(168deg,rgba(245,197,24,.11),rgba(245,197,24,.02));
  border:1px solid rgba(245,197,24,.28);border-radius:var(--r-cd);padding:26px;height:100%}
.card__tag{display:inline-block;background:var(--or);color:var(--sur-or);font-family:var(--disp);
  font-weight:800;font-size:10px;letter-spacing:.12em;text-transform:uppercase;
  padding:6px 10px;border-radius:6px;margin-bottom:15px}
.card h3{margin-bottom:9px;font-size:19px;line-height:1.2}
.card p{color:var(--gris);font-size:14.4px}
.card__val{margin-top:15px;font-size:13px;color:var(--gris)}
.card__val s{opacity:.55}
.card__val b{color:var(--or);font-family:var(--disp);font-weight:800}

/* ---- Note en marge ---- */
.note{margin-top:28px;border-left:3px solid var(--or);padding:3px 0 3px 18px;
  color:var(--gris);font-size:15px;max-width:62ch}
.note b{color:var(--creme)}

/* ---- Mascotte -----------------------------------------------
   Personnage perché au-dessus d'une section ou d'une carte.
   Les images manquantes sont retirées par main.js §7 :
   la page reste propre tant que tu n'as pas généré les fichiers.
   ----------------------------------------------------------- */
.mascotte{
  display:block;width:var(--m-taille,112px);height:auto;
  margin:0 auto -6px;position:relative;z-index:2;
  filter:drop-shadow(0 14px 24px rgba(0,0,0,.5));
  animation:flotte 5.5s ease-in-out infinite;
}
.mascotte--lg{--m-taille:clamp(130px,26vw,180px)}
.mascotte--sm{--m-taille:clamp(76px,16vw,92px)}
.mascotte--gauche{margin-left:0;margin-right:auto}
.band .mascotte{filter:drop-shadow(0 12px 20px rgba(25,19,5,.28))}

/* perchée sur le coin d'une carte */
.mascotte--coin{
  position:absolute;top:-30px;right:16px;width:var(--m-taille,78px);
  margin:0;z-index:3;
}

@keyframes flotte{
  0%,100%{transform:translateY(0) rotate(-1deg)}
  50%    {transform:translateY(-9px) rotate(1deg)}
}
@media(prefers-reduced-motion:reduce){
  .mascotte{animation:none}
}

/* ---- Éventail de vignettes (hero) --------------------------
   Transposition sans build du composant React « card-stack ».
   Même géométrie — décalage latéral, rotation par cran,
   profondeur, mise en avant de la carte active — mais portée par
   des variables CSS que main.js §6 se contente de mettre à jour.
   ~2 ko contre ~150 ko pour React + framer-motion, ce qui décide
   tout sur une cible 3G.

   Les cartes NE LISENT PAS les vidéos : c'est un aperçu. La
   lecture est dans la section preuves, plus bas.
   ----------------------------------------------------------- */
.pile{
  --c-l: clamp(190px, 56vw, 380px);   /* largeur de carte */
  --c-h: calc(var(--c-l) * .66);
  --c-ecart: calc(var(--c-l) * .28);  /* recouvrement : plus petit = plus serré */
  --c-pas: 13deg;                     /* rotation par cran */
  --c-fond: 96px;                     /* profondeur par cran */
  margin-top:38px;
}
@media(min-width:760px){
  .pile{--c-ecart:calc(var(--c-l) * .5);--c-pas:11deg;--c-fond:130px}
}

.pile__scene{position:relative;height:calc(var(--c-h) + 76px);
  perspective:1100px;overflow:hidden}
.pile__scene:focus-visible{outline:3px solid var(--or);outline-offset:4px;
  border-radius:var(--r-cd)}

/* halo au sol, pour décoller l'éventail du fond */
.pile__scene::after{content:"";position:absolute;left:50%;bottom:12px;
  width:78%;height:110px;transform:translateX(-50%);pointer-events:none;
  background:radial-gradient(50% 50% at 50% 50%,rgba(245,197,24,.10),transparent 70%)}

.pile__jeu{position:absolute;inset:0;display:flex;align-items:flex-end;justify-content:center}

.pile__carte{
  --off:0; --abs:0; --lift:0px; --tilt:11deg; --ech:.94;
  position:absolute;bottom:24px;width:var(--c-l);height:var(--c-h);
  border-radius:var(--r-cd);overflow:hidden;cursor:pointer;text-align:left;
  background:var(--carte);border:1px solid var(--fil-or);
  box-shadow:0 18px 40px rgba(0,0,0,.5);
  transform-style:preserve-3d;will-change:transform;
  transform:
    translateX(calc(var(--off) * var(--c-ecart)))
    translateY(calc(var(--abs) * 8px + var(--lift)))
    translateZ(calc(var(--abs) * var(--c-fond) * -1))
    rotateZ(calc(var(--off) * var(--c-pas)))
    rotateX(var(--tilt))
    scale(var(--ech));
  transition:transform .52s var(--ease),opacity .35s ease,border-color .3s ease;
}
.pile__carte--active{
  --lift:-18px; --tilt:0deg; --ech:1.03;
  border-color:var(--fil-or-vif);cursor:grab;
  box-shadow:0 26px 60px rgba(0,0,0,.62)}
.pile__carte--active:active{cursor:grabbing}
.pile__carte--cachee{opacity:0;pointer-events:none}
.pile__carte--glisse{transition:none}

.pile__img{width:100%;height:100%;object-fit:cover;-webkit-user-select:none;user-select:none}

.pile__legende{position:absolute;inset:auto 0 0 0;padding:15px 17px;
  background:linear-gradient(to top,rgba(5,5,6,.86),transparent);
  opacity:0;transition:opacity .3s ease}
.pile__carte--active .pile__legende{opacity:1}
.pile__n{display:block;font-family:var(--disp);font-weight:800;font-size:9.5px;
  letter-spacing:.15em;text-transform:uppercase;color:var(--or);margin-bottom:4px}
.pile__t{display:block;font-family:var(--disp);font-weight:800;font-size:14.5px;
  line-height:1.2;color:var(--creme)}

.pile__points{display:flex;justify-content:center;gap:8px;margin-top:16px}
.pile__point{width:8px;height:8px;padding:0;border:0;border-radius:99px;cursor:pointer;
  background:rgba(255,255,255,.24);transition:background .25s ease,width .25s ease}
.pile__point--on{background:var(--or);width:24px}
.pile__point:focus-visible{outline:2px solid var(--or);outline-offset:3px}

@media(prefers-reduced-motion:reduce){
  .pile__carte,.pile__legende,.pile__point{transition:none}
}

/* ---- Groupe d'élèves (preuve sociale du hero) --------------
   Avatars illustrés, dessinés en CSS pur : aucune image, aucun
   octet réseau, et surtout aucune personne identifiable.

   Chariow ne fournit pas de photos de clients — ses avatar_url
   sont des initiales générées, et elles contiennent l'e-mail du
   client en clair dans l'URL. Les publier reviendrait à exposer
   les adresses de tes clients dans le source de la page.
   ----------------------------------------------------------- */
.eleves{display:inline-flex;align-items:center;gap:14px;margin-bottom:24px;text-align:left}
.eleves__pile{display:flex;list-style:none}

.eleves__av{position:relative;width:38px;height:38px;flex:none;border-radius:50%;
  overflow:hidden;margin-left:-13px;background:var(--teinte,var(--or));
  border:2px solid var(--panel);box-shadow:0 3px 10px rgba(0,0,0,.45)}
.eleves__av:first-child{margin-left:0}
/* tête */
.eleves__av::before{content:"";position:absolute;left:50%;top:19%;
  width:35%;height:35%;border-radius:50%;
  transform:translateX(-50%);background:rgba(5,5,6,.45)}
/* épaules */
.eleves__av::after{content:"";position:absolute;left:50%;top:60%;
  width:64%;height:54%;border-radius:50% 50% 0 0;
  transform:translateX(-50%);background:rgba(5,5,6,.45)}

.eleves__txt b{display:block;font-family:var(--disp);font-weight:800;
  font-size:15px;line-height:1.2;color:var(--creme)}
.eleves__txt span{display:block;font-size:11.5px;letter-spacing:.06em;
  color:var(--gris);margin-top:3px}

@media(max-width:360px){
  .eleves{gap:11px}
  .eleves__av{width:33px;height:33px;margin-left:-11px}
  .eleves__txt b{font-size:14px}
}
