/* =====================================================================
   Entrada de textos — párrafos y títulos (h1–h3): el texto sube unos píxeles,
   se enfoca (sale de un desenfoque suave) y aparece al entrar en pantalla, en
   cascada con sus hermanos (el título primero, luego el párrafo).

   Es un componente COMPARTIDO por las páginas públicas (index.html,
   dealerstudio.html…), que son independientes entre sí: no trae colores ni
   tipografía, sólo movimiento. Va con parrafos.js.

   USO
     <link rel="stylesheet" href="componentes/parrafos.css">
     <script src="componentes/parrafos.js" defer></script>
   No hace falta marcar nada: el JS toma los <p> y los títulos h1–h3 de las
   <section>. Para excluir uno: data-sin-anim. Quedan fuera solos los del pie,
   los avisos legales, los "cargando…", las respuestas de <details> y los que
   ya entran con otra animación (.an o .split).

   UNA VEZ O CADA VEZ: por defecto cada párrafo anima una sola vez por carga
   de página. Con data-repetir (en un <p> o en su <section>) se desvanece al
   salir de la zona central de la pantalla y vuelve a animar cada vez que
   regresa a ella; data-repetir="no" en un párrafo lo saca de una sección
   que repite.
     <section data-repetir> …                    ← todos los párrafos repiten
     <p data-repetir>…</p>                        ← sólo ese

   El estado "oculto" (.parr) lo agrega SÓLO el JS, y sólo si el visitante
   no pidió menos movimiento: sin JS o con prefers-reduced-motion el texto
   se ve completo y quieto. Al terminar, el JS quita las clases, así no
   queda ningún filter ni transform colgado sobre el texto.
   ===================================================================== */
.parr{opacity:0;transform:translateY(26px);filter:blur(8px)}
.parr.parr-vis{opacity:1;transform:none;filter:none;
  transition:opacity 1s cubic-bezier(.16,1,.3,1),transform 1s cubic-bezier(.16,1,.3,1),filter 1s ease;
  transition-delay:calc(var(--pd,0) * 1ms)}
/* Los que repiten NO se desplazan (sólo opacidad y desenfoque). El observer mide
   la caja ya transformada: con translateY, al ocultarse el texto bajaba 26px,
   volvía a caer dentro de la franja central, se mostraba, subía, salía, se
   ocultaba… y parpadeaba en bucle cerca del borde de la franja. */
.parr.parr-rep{transform:none}
/* Salida de los que repiten: un desvanecimiento corto, para que el texto no
   "desaparezca de golpe" mientras todavía se ve un pedazo en pantalla. */
.parr.parr-sale{transition:opacity .35s ease,transform .35s ease,filter .35s ease}
