/* Scroll reveals: elements stay visible by default; the script hides only observed targets. */
.has-scroll-reveals [data-scroll-reveal="pending"] {
  opacity: 0;
  transform: translate3d(0, 14px, 0);
  transition: opacity 420ms ease, transform 420ms cubic-bezier(.2,.7,.2,1);
  transition-delay: var(--reveal-delay, 0ms);
}
.has-scroll-reveals [data-scroll-reveal="visible"] {
  opacity: 1;
  transform: translate3d(0, 0, 0);
}

/* Introduce hero copy in a short sequence after the first paint. */
.hero-text > * { animation: hero-copy-in 480ms both; }
.hero-text > *:nth-child(2) { animation-delay: 80ms; }
.hero-text > *:nth-child(3) { animation-delay: 150ms; }
.hero-text > *:nth-child(4) { animation-delay: 210ms; }
@keyframes hero-copy-in {
  from { opacity: 0; transform: translate3d(0, 10px, 0); }
  to { opacity: 1; transform: translate3d(0, 0, 0); }
}

/* Quick feedback for cards and links; transforms avoid layout shifts. */
.service, .service img, .gallery-filter, .navbar-links a, .booking-contact-links a {
  transition: transform 200ms ease, color 200ms ease, background-color 200ms ease, border-color 200ms ease, box-shadow 200ms ease;
}
.service:hover, .service:focus-within { transform: translate3d(0, -3px, 0); box-shadow: 0 16px 34px rgba(48,35,31,.1); }
.service a:first-child { display: block; overflow: hidden; }
.service a:first-child img { transition: transform 350ms ease; }
.service a:first-child:hover img, .service a:first-child:focus-visible img { transform: scale(1.025); }
.navbar-links a { text-underline-offset: 5px; }
.navbar-links a:hover, .navbar-links a:focus-visible { text-decoration: underline; }

/* Disable motion and show pending content immediately for reduced-motion users. */
@media (prefers-reduced-motion: reduce) {
  .has-scroll-reveals [data-scroll-reveal], .hero-text > *, .service, .service img,
  .gallery-filter, .navbar-links a, .booking-contact-links a {
    animation: none !important;
    transition: none !important;
    transform: none !important;
  }
  .has-scroll-reveals [data-scroll-reveal="pending"] { opacity: 1; }
}
