/* Animações de entrada (reveal.js põe a classe .rv nos elementos e .in quando aparecem no ecrã).
   Usa as propriedades "translate" e "scale", que não mexem no "transform" de cada elemento. */
.rv {
  opacity: 0;
  translate: 0 28px;
  transition: opacity .75s cubic-bezier(.22,1,.36,1) var(--d, 0ms),
              translate .75s cubic-bezier(.22,1,.36,1) var(--d, 0ms),
              scale .75s cubic-bezier(.22,1,.36,1) var(--d, 0ms);
}
.rv[data-rv="down"]  { translate: 0 -22px; }
.rv[data-rv="left"]  { translate: -56px 0; }
.rv[data-rv="right"] { translate: 56px 0; }
.rv[data-rv="pop"]   { translate: none; scale: .7; transition-timing-function: cubic-bezier(.34,1.56,.64,1); }
.rv[data-rv="zoom"]  { translate: 0 22px; scale: .93; }
.rv[data-rv="fade"]  { translate: none; }
.rv.in { opacity: var(--rv-op, 1); translate: none; scale: none; }   /* --rv-op: opacidade final própria de um elemento */

/* Quem prefere menos movimento: só um fade suave, sem deslocar nada */
@media (prefers-reduced-motion: reduce) {
  .rv, .rv[data-rv] { translate: none !important; scale: none !important; transition: opacity .6s ease var(--d, 0ms) !important; }
}
@media print { .rv { opacity: 1 !important; translate: none !important; scale: none !important; transition: none !important; } }
