/* Intro du titre d'accueil : uniquement la mutation des caractères qui changent.
   Police, corps, interlignage, grille et couleur de base appartiennent au squelette.
   Les cellules [data-intro-glyph] n'existent que pendant la séquence (≤ 2,4 s).
   Aucun flash plein mot : une petite zone se courbe, puis retrouve son contour. */

[data-intro-title] [data-intro-glyph] {
  display: inline-block;
  white-space: pre;
  color: inherit;
}

/* Réfraction locale, très courte ; les lignes et mots stables restent immobiles. */
[data-intro-title] [data-intro-glyph="noise"] {
  transform: translateY(calc(var(--intro-bend, 0) * -.018em))
    skewX(calc(var(--intro-bend, 0) * -4deg))
    scaleX(calc(1 - var(--intro-bend, 0) * .035));
  filter: blur(calc(var(--intro-bend, 0) * .012em));
  text-shadow: calc(var(--intro-bend, 0) * -.012em) 0 rgb(66 108 144 / .18),
    calc(var(--intro-bend, 0) * .012em) 0 rgb(185 88 139 / .14);
}

/* Le contour redevient net, sans changement de couleur ni tremblement permanent. */
[data-intro-title] [data-intro-glyph="set"] {
  transform: none;
  filter: none;
  text-shadow: none;
  transition: transform .18s ease-out, filter .18s ease-out, text-shadow .18s ease-out;
}

@media (prefers-reduced-motion: reduce) {
  [data-intro-title] [data-intro-glyph] {
    color: inherit;
    transform: none;
    filter: none;
    text-shadow: none;
    transition: none;
  }
}
