/* Scroll-reveal system.
   Elements start at opacity 0 and animate once when they enter the viewport.
   Timing: .7s cubic-bezier(.175,.885,.32,1.275) — a slight overshoot at the end. */

.reveal { opacity: 0; }
.reveal:not(.is-visible) { animation: none !important; }
.is-visible { opacity: 1; }

.reveal[data-anim="btt"].is-visible { animation: rv-btt .7s 1 cubic-bezier(.175,.885,.32,1.275); }
.reveal[data-anim="ttb"].is-visible { animation: rv-ttb .7s 1 cubic-bezier(.175,.885,.32,1.275); }
.reveal[data-anim="ltr"].is-visible { animation: rv-ltr .7s 1 cubic-bezier(.175,.885,.32,1.275); }
.reveal[data-anim="rtl"].is-visible { animation: rv-rtl .7s 1 cubic-bezier(.175,.885,.32,1.275); }
.reveal[data-anim="appear"].is-visible { animation: rv-appear .7s 1 cubic-bezier(.175,.885,.32,1.275); transform: scale(1); }
.reveal[data-anim="fade"].is-visible { animation: rv-fade .9s 1 ease; }

@keyframes rv-btt { 0% { transform: translate(0, 10%); opacity: 0; } 100% { transform: translate(0, 0); opacity: 1; } }
@keyframes rv-ttb { 0% { transform: translate(0, -10%); opacity: 0; } 100% { transform: translate(0, 0); opacity: 1; } }
@keyframes rv-ltr { 0% { transform: translate(-10%, 0); opacity: 0; } 100% { transform: translate(0, 0); opacity: 1; } }
@keyframes rv-rtl { 0% { transform: translate(10%, 0); opacity: 0; } 100% { transform: translate(0, 0); opacity: 1; } }
@keyframes rv-appear { 0% { transform: scale(.5); opacity: .1; } 100% { transform: scale(1); opacity: 1; } }
@keyframes rv-fade { 0% { opacity: 0; } 100% { opacity: 1; } }

/* Hero reveals — the wordmark and image scale settle on load */
@keyframes hero-image-in { 0% { transform: scale(1.12); } 100% { transform: scale(1); } }
@keyframes wordmark-in { 0% { opacity: 0; transform: translateY(28px); } 100% { opacity: 1; transform: translateY(0); } }
@keyframes chrome-in { 0% { opacity: 0; transform: translateY(-12px); } 100% { opacity: 1; transform: translateY(0); } }

/* Booking pickers settle in when they open */
@keyframes picker-in { 0% { opacity: 0; transform: translateY(-6px); } 100% { opacity: 1; transform: translateY(0); } }

/* Respect reduced-motion: content still appears, it just doesn't travel. */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: .01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: .01ms !important;
    scroll-behavior: auto !important;
  }
  .reveal { opacity: 1; }
}
