/* reveal.css — animaciones de entrada al hacer scroll.
   Mismos valores que las variantes de Framer Motion de santerra:
     ease   cubic-bezier(.22,1,.36,1)
     fadeUp opacity 0 -> 1, y 32px -> 0, .7s
     fadeIn opacity 0 -> 1, .8s
     scaleIn opacity + scale 1.04 -> 1, .9s
     stagger .15s entre hermanos, .05s de arranque
     viewport once, 20% visible

   El estado oculto cuelga de html.rv-on, que solo agrega reveal.js.
   Sin JS (o con prefers-reduced-motion) nunca se aplica y todo se ve
   normal. Al terminar, reveal.js saca el data-rv para que el elemento
   vuelva a sus estilos propios (hover, transiciones, etc). */

:root{ --rv-ease:cubic-bezier(.22,1,.36,1) }

html.rv-on [data-rv]{ opacity:0; will-change:opacity,transform; backface-visibility:hidden }

html.rv-on [data-rv="up"]{
  transform:translate3d(0,32px,0);
  transition:opacity .7s var(--rv-ease), transform .7s var(--rv-ease);
}
html.rv-on [data-rv="fade"]{
  transition:opacity .8s var(--rv-ease);
}
html.rv-on [data-rv="scale"]{
  transform:scale(1.04);
  transition:opacity .9s var(--rv-ease), transform .9s var(--rv-ease);
}

html.rv-on [data-rv].rv-in{ opacity:1; transform:none }

/* En movil el recorrido es mas corto: 32px sobre una pantalla de 700px
   se lee como un salto. */
@media (max-width:640px){
  html.rv-on [data-rv="up"]{ transform:translate3d(0,20px,0) }
}

@media (prefers-reduced-motion:reduce){
  html.rv-on [data-rv]{
    opacity:1!important; transform:none!important;
    transition:none!important; will-change:auto!important;
  }
}
