/* ==========================================================================
   LA SAISIE DE LARRY : EXEMPLES QUI DÉFILENT, TEXTE QUI S'ENVOLE
   bureau-b1, 12/09/2026

   La feuille de « larry-saisie.js ». Elle ne touche qu'au champ de l'échange
   de Larry — « #larry-saisie » et sa boîte — et à la toile de l'envol, qui vit
   sur le corps du document.

   ⚠️ LE TEXTE DE SUBSTITUTION NATIF S'EFFACE, mais l'attribut reste. On pose sa
   couleur à « transparent » plutôt que de vider l'attribut : il continue d'être
   lu par les technologies d'assistance et par tout ce qui interroge le champ,
   et il revient tel quel si ce chantier est retiré. Ce qu'on voit à la place
   est une couche posée par-dessus, qui peut, elle, glisser et s'effacer — ce
   qu'un « ::placeholder » ne sait pas faire.
   ========================================================================== */

/* --- 1. La couche des exemples --------------------------------------------- */
#larry-saisie::placeholder { color: transparent; }

/* La boîte du champ tient déjà le chronomètre en position absolue (app.css) :
   elle est donc positionnée, et la couche s'y accroche sans rien changer. */
.larry-barre .saisie { position: relative; }

.lv-ph {
  position: absolute; inset: 0; z-index: 1;
  overflow: hidden;
  pointer-events: none;
  color: var(--txt-3);
  display: block;
}
.lv-ph.cache { opacity: 0; }
.lv-ph span {
  display: block;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
  transition: translate calc(.22s * var(--anim-vit, 1)) ease,
              opacity calc(.22s * var(--anim-vit, 1)) ease;
}
/* L'exemple qui part monte et s'éteint ; le suivant vient d'en dessous. La
   distance est courte — huit pixels — parce que la boîte fait une ligne et
   qu'un mouvement plus ample sortirait du champ au lieu d'y glisser. */
.lv-ph span.sort  { translate: 0 -8px; opacity: 0; }
.lv-ph span.entre { translate: 0 8px;  opacity: 0; transition: none; }

/* --- 2. La toile de l'envol -------------------------------------------------
   Posée sur le corps du document, en position fixe sur le rectangle relevé du
   champ : larryDire() redessine l'écran, et une toile posée dans le champ
   disparaîtrait au milieu de son animation. Elle n'intercepte rien et ne vit
   que le temps de l'envol — le script la retire lui-même. */
.lv-toile {
  position: fixed; z-index: 90;
  pointer-events: none;
}

/* --- 3. Mouvement réduit ----------------------------------------------------
   Le script ne lance alors ni le défilement ni l'envol : il montre le premier
   exemple, immobile, et le texte part sans se pulvériser. La couche reste
   lisible — c'est bien un texte de substitution, pas une décoration. */
@media (prefers-reduced-motion: reduce) {
  .lv-ph span { transition: none; }
}
