/* Start states for motion.js (API in its header). Only under html.js, so the page reads fully with JS off. */
.js [data-reveal], .js [data-stagger] > * {
  opacity: 0; transform: translateY(26px);
  transition: opacity .7s ease, transform .9s cubic-bezier(.2, .75, .2, 1);
  transition-delay: var(--md, 0ms);
}
.js [data-reveal="left"] { transform: translateX(-44px); }
.js [data-reveal="right"] { transform: translateX(44px); }
.js [data-reveal="zoom"] { transform: scale(.92); }
.js [data-reveal].in, .js [data-stagger].in > * { opacity: 1; transform: none; }
[data-parallax] { will-change: translate; }
/* Abood's rule: motion plays for everyone; site.css's reduced-motion block kills transitions with !important, so the
   reveal brings its own back (more specific + !important wins) */
@media (prefers-reduced-motion: reduce) {
  .js [data-reveal], .js [data-stagger] > * { transition: opacity .7s ease var(--md, 0ms), transform .9s cubic-bezier(.2, .75, .2, 1) var(--md, 0ms) !important; }
}
@media print { .js [data-reveal], .js [data-stagger] > * { opacity: 1; transform: none; } }
