/* ============================================================
   SCROLL REVEAL — site-wide
   Any element with `.animate-on-scroll` fades + rises into place the
   first time it crosses into the viewport (see assets/js/scroll-reveal.js).
   Grid/list children (community cards, listing cards, testimonials, FAQ
   items) are staggered automatically by the same script.
   ============================================================ */

.animate-on-scroll {
  opacity: 0;
  transform: translateY(28px);
  transition:
    opacity   var(--duration-slower) var(--ease-out),
    transform var(--duration-slower) var(--ease-out);
}

.animate-on-scroll.is-inview {
  opacity: 1;
  transform: translateY(0);
}

.animate-on-scroll--delay-1.is-inview { transition-delay: 90ms; }
.animate-on-scroll--delay-2.is-inview { transition-delay: 180ms; }
.animate-on-scroll--delay-3.is-inview { transition-delay: 270ms; }
.animate-on-scroll--delay-4.is-inview { transition-delay: 360ms; }
.animate-on-scroll--delay-5.is-inview { transition-delay: 450ms; }
.animate-on-scroll--delay-6.is-inview { transition-delay: 540ms; }

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