/* ==========================================================================
   Animazioni d'ingresso allo scroll (reveal.js). Due meccanismi:

   1. [data-anim]  — l'elemento entra da una posizione spostata e trasparente.
      Rifa' il "fade" di Animation Addons (GSAP "from") e le animazioni d'ingresso di
      Elementor (es. fadeInRight). Si regola con variabili CSS nell'attributo style:
        --anim-x / --anim-y   spostamento di partenza (es. -40px, 50px, 100%)   default 0
        --anim-duration       durata                                          default 1s
        --anim-delay          ritardo                                         default 0s
        --anim-ease           curva            default power2.out di GSAP
      Parte quando l'elemento arriva all'85% dell'altezza dello schermo ("top 85%").
      data-anim-watch="parent" = osserva il genitore (per chi parte fuori dal suo box,
      es. spostato del 100%: altrimenti non entrerebbe mai nello schermo).

   2. [data-inview="0.15"] — lo script mette subito .inview-pending e aggiunge .is-inview
      quando l'elemento e' visibile per la frazione indicata. Lo stile dei due stati lo scrive
      il componente, e deve nascondere solo con .inview-pending (cosi' senza JS si vede):
        .x.inview-pending { opacity: 0; }   .x.inview-pending.is-inview { opacity: 1; }
      (es. .bdn-anim nei pannelli della home, copiato dal widget del vivo).

   Senza JS o con "riduci movimento": tutto visibile e fermo (le classi .anim-pending
   le mette solo lo script).
   ========================================================================== */
.anim-pending {
  opacity: 0;
  transform: translate(var(--anim-x, 0), var(--anim-y, 0));
}

.anim-pending.is-animated {
  opacity: 1;
  transform: none;
  transition:
    opacity var(--anim-duration, 1s) var(--anim-ease, var(--ease-out-power2)) var(--anim-delay, 0s),
    transform var(--anim-duration, 1s) var(--anim-ease, var(--ease-out-power2)) var(--anim-delay, 0s);
}
