/* =================================================
   Reveal-on-scroll — transform-only, content always visible
   ================================================= */
.reveal {
  opacity: 1;
  transform: translateY(0);
}

/* Optional micro-motion: when JS is ready and element is not
   yet in view, give it a small offset that releases on .is-visible.
   We only animate transform — never opacity — so content is
   always legible / screenshot-able. */
.js-ready .reveal:not(.is-visible) {
  transform: translateY(1.6rem);
  transition: transform 0.7s cubic-bezier(0.22, 0.61, 0.36, 1);
}
.js-ready .reveal.is-visible {
  transform: translateY(0);
  transition: transform 0.7s cubic-bezier(0.22, 0.61, 0.36, 1);
}

.btn { will-change: transform; }

@media (prefers-reduced-motion: reduce) {
  .js-ready .reveal,
  .js-ready .reveal:not(.is-visible) {
    transform: none !important;
    transition: none !important;
  }
}
