/* ============================================================
   Page SME — animations retenues (accord user 12/09/2026) :
   A6 frappe au clavier · B1 retard doux (contrat) · C4 rouleau vertical
   D3 survol appuyé · E4 fondu décalé · F3 cascade diagonale (schéma)
   G1 convergence (courant) · H2+H3 frise, point coureur et jalons
   I1 cascade diagonale (portraits) · J1 éclat au clic (contrat)
   K2 parallaxe des images · L1 voile de nuit (modale, sans surtitre)
   ============================================================ */

/* ---- A6 · frappe au clavier sur les titres de section ---- */
.sk-tw{position:relative}
.sk-tw .w{display:inline-block;white-space:nowrap}
.sk-tw i{font-style:normal;opacity:0;transition:opacity 0s linear}
.reveal.in .sk-tw i{opacity:1;transition-delay:calc(var(--i) * 26ms)}
.sk-tw b{display:inline-block;width:.5ch;height:1em;margin-left:.06em;vertical-align:-.08em;background:var(--bleu-clair);opacity:0}
.reveal.in .sk-tw b{animation:sk-tw-cur .9s steps(1) infinite,sk-tw-out .3s linear calc(var(--n) * 26ms + .5s) forwards}
@keyframes sk-tw-cur{0%,49%{opacity:1}50%,100%{opacity:0}}
@keyframes sk-tw-out{to{opacity:0;visibility:hidden}}

/* ---- C4 · rouleau vertical des chiffres ----
   La colonne (i) est la fenêtre FIXE qui découpe, la bande intérieure (span)
   est seule translatée : transformer la fenêtre elle-même décalerait chaque
   chiffre verticalement au lieu de le faire défiler. */
.sk-roll{display:inline-flex;align-items:flex-start;line-height:1;font:inherit;color:inherit;margin:0}
.sk-roll i{display:block;height:1em;overflow:hidden;font-style:normal}
.sk-roll i>span{display:block;transform:translateY(0);transition:transform 1.25s cubic-bezier(.16,1,.3,1);transition-delay:calc(var(--i) * 110ms)}
.sk-roll i>span>u{display:block;height:1em;line-height:1em;text-decoration:none}
.sk-roll em{font-style:normal;line-height:1em;margin-left:.16em}
.reveal.in .sk-roll i>span{transform:translateY(calc(var(--d) * -1em))}

/* ---- D3 · survol appuyé des façades vidéo ---- */
.cap sky-video:hover .skv__poster,.intro-video sky-video:hover .skv__poster{transform:scale(1.07);filter:brightness(1.07)}
.cap sky-video:hover .skv__pill,.intro-video sky-video:hover .skv__pill{transform:scale(1.06);height:66px;padding:0 30px 0 14px}
.cap sky-video .skv__pill,.intro-video sky-video .skv__pill{transition:transform .34s cubic-bezier(.16,1,.3,1),height .34s cubic-bezier(.16,1,.3,1),padding .34s cubic-bezier(.16,1,.3,1),filter .3s}

/* ---- E4 · fondu décalé du numéro puis du titre ----
   État initial derrière .js : sans JS le texte reste visible. */
.js .cap .cap__n{opacity:0;transition:opacity .5s ease}
.js .cap .cap__head h3{opacity:0;transform:translateY(12px);transition:opacity .5s ease .14s,transform .5s cubic-bezier(.16,1,.3,1) .14s}
.js .cap.is-in .cap__n{opacity:1}
.js .cap.is-in .cap__head h3{opacity:1;transform:none}

/* ---- H2 + H3 · frise, point coureur et jalons qui s'ouvrent ---- */
.frise .fx-run{fill:#fff;opacity:0}
.reveal.in .frise .fx-run{opacity:1;animation:fx-run 6s linear 2s infinite}
@keyframes fx-run{from{offset-distance:0%}to{offset-distance:100%}}
.frise .fx-lab{opacity:0;transform:translateY(10px);transition:opacity .45s ease,transform .45s cubic-bezier(.16,1,.3,1)}
.reveal.in .frise .fx-lab{opacity:1;transform:none}
.frise .fx-lab rect{fill:var(--surface-3)}
.frise .fx-lab text{font-family:var(--font-sans);font-weight:700;font-size:17px;fill:#fff}

/* ---- I1 · cascade diagonale ---- */
.faces.reveal .face,.grid3.reveal .card{opacity:0;transform:translateY(18px);filter:blur(2px);transition:opacity .5s ease,transform .5s cubic-bezier(.16,1,.3,1),filter .5s ease}
.faces.reveal.in .face,.grid3.reveal.in .card{opacity:1;transform:none;filter:none;transition-delay:calc(var(--i) * 80ms)}

/* ---- K2 · parallaxe des images ---- */
[data-para]{will-change:transform}

@media (prefers-reduced-motion: reduce){
  .sk-tw i,.reveal.in .sk-tw i{opacity:1;transition:none}
  .sk-tw b{display:none}
  .sk-roll i>span{transition:none}
  .js .cap .cap__n,.js .cap .cap__head h3,.faces.reveal .face,.grid3.reveal .card,.frise .fx-lab{opacity:1;transform:none;filter:none;transition:none}
  .reveal.in .frise .fx-run{animation:none}
  [data-para]{transform:none!important}
}
