/* ============================================================
   Scroll animations (GSAP ScrollTrigger)
   ============================================================
   Reveal/scrub classes applied by js/animations.js. Kept empty of
   animation-only styling until §4 (GSAP scroll-scrub pass) fills in
   the reveal/scrub state classes; this file loads on every page since
   scroll reveals apply across most pages' section headers/cards. */

@media (prefers-reduced-motion: reduce) {
  button,
  button *,
  .navbar__link,
  .navbar__link::after,
  .site-footer__logo,
  .site-footer__link,
  .site-footer__link::after,
  .btn-book,
  .search-field,
  .search-submit,
  .field-panel,
  .cal-cell,
  .cal-day,
  .date-panel__months,
  .stepper__btn,
  .segmented__btn,
  .property-item,
  .search-field__value,
  .search-field__badge,
  .faq-item__icon,
  .faq-item__icon .icon,
  .faq-item__answer,
  .faq-item__answer-inner {
    transition: none;
  }
  .stepper__value.is-bump,
  .search-field__badge.is-bump {
    animation: none;
  }
  .gallery__track,
  .reviews__track {
    animation: none;
  }

  /* Defense-in-depth for js/animations.js's GSAP reveals: that file already
     checks prefers-reduced-motion itself and skips straight to the final
     opacity:1/y:0 state via gsap.set(), but this forces the same end state
     at the CSS layer too in case JS hasn't run yet (slow network) or fails
     to load at all. */
  .section-heading,
  .highlight-card,
  .faq-item,
  .site-footer__col,
  .property-card {
    opacity: 1 !important;
    transform: none !important;
  }
}
