/* DSAP — Scroll FX (mobile-first, perf) */
.fx{
  opacity:0;
  transform: translate3d(0, 24px, 0);
  transition: opacity .75s ease, transform .75s ease;
  will-change: transform, opacity;
}

.fx.is-visible{
  opacity:1;
  transform: translate3d(0,0,0);
}

/* Variantes */
.fx-up{ transform: translate3d(0, 24px, 0); }
.fx-down{ transform: translate3d(0, -24px, 0); }
.fx-left{ transform: translate3d(24px, 0, 0); }
.fx-right{ transform: translate3d(-24px, 0, 0); }
.fx-zoom{ transform: translate3d(0,0,0) scale(.96); }
.fx.is-visible.fx-zoom{ transform: translate3d(0,0,0) scale(1); }

@media (prefers-reduced-motion: reduce){
  .fx{ opacity:1; transform:none; transition:none; }
}
