/* ============================================================
   motion.css — reveals, wipes, theme/lang transitions
   ============================================================ */
.reveal{ opacity:0; transform:translateY(24px); transition:opacity var(--dur-reveal) var(--ease), transform var(--dur-reveal) var(--ease); }
.reveal.is-in{ opacity:1; transform:none; }

/* titulares que se "imprimen" de abajo a arriba */
.reveal-wipe{ clip-path:inset(0 0 100% 0); transition:clip-path .9s var(--ease); }
.reveal-wipe.is-in{ clip-path:inset(0 0 -2% 0); }

/* stagger para hijos */
[data-stagger] > *{ opacity:0; transform:translateY(18px); transition:opacity .6s var(--ease), transform .6s var(--ease); transition-delay:calc(var(--i,0) * 80ms); }
[data-stagger].is-in > *{ opacity:1; transform:none; }

/* cambio de idioma tipo "cambio de papel" */
.lang-swapping [data-i18n]{ opacity:0; transition:opacity .2s ease; }

@media (prefers-reduced-motion: reduce){
  .reveal, [data-stagger] > *{ opacity:1!important; transform:none!important; }
  .reveal-wipe{ clip-path:none!important; }
}
