/* Progressive enhancement: content stays visible without the head bootstrap. */
.page-title-line {
  display: block;
  /* Leave room for serif ascenders/descenders without changing line height. */
  clip-path: inset(-.1em -.04em -.12em);
}
.page-title-line > [data-page-enter] { display: block; }

@media screen and (prefers-reduced-motion: no-preference) {
  .has-page-enter [data-page-enter]:not([data-page-motion]) {
    animation: almaz-page-enter 650ms cubic-bezier(.2, .65, .3, 1) backwards;
  }
  .has-page-enter [data-page-enter="title"]:not([data-page-motion]) {
    animation: almaz-page-title 850ms cubic-bezier(.16, 1, .3, 1) 80ms backwards;
  }
  .has-page-enter .page-title-line + .page-title-line > [data-page-enter] { animation-delay: 180ms; }
  .has-page-enter [data-page-enter="1"]:not([data-page-motion]) { animation-delay: 280ms; }
  .has-page-enter [data-page-enter="2"]:not([data-page-motion]) { animation-delay: 380ms; }
  .has-page-enter .hero-facts > a:not([data-page-motion]) {
    animation: almaz-page-fact 650ms cubic-bezier(.2, .65, .3, 1) 450ms backwards;
  }
  .has-page-enter .hero-facts > a:nth-child(2) { animation-delay: 520ms; }
  .has-page-enter .hero-facts > a:nth-child(3) { animation-delay: 590ms; }
  /* These existing classes are present before deferred JS: the whole first
     screen enters together, without showing then hiding cards on script load.
     Keep component families aligned with page-motion.js register(). Empty
     data-page-reveal attributes are server-authored; JS registrations are not. */
  .has-page-enter :where(
    [data-page-reveal=""],
    .room-grid > .room-card,
    .gazebo-cards > .gazebo-card,
    .gazebo-section .service-hours, .gazebo-detail .service-hours,
    .promotions-grid > .promotion-card, .promotions-pagination,
    .promotions-home .section-heading > *, .promotions-home > .promotion-card,
    .leisure-home .experience-grid > .experience-card,
    .home-rooms > .rate-note, .leisure-home > .rate-note,
    .gallery-home .section-heading > .button,
    .faq-list > .faq-item, .about-visit > .text-link,
    .contact-strip > div, .visit-contact > *,
    .footer-top > *, .site-footer > .footer-links, .site-footer > .footer-bottom
  ):not([data-page-enter]):not([data-page-motion]) {
    animation: almaz-page-rise 650ms cubic-bezier(.2, .65, .3, 1) 280ms backwards;
  }
  .has-page-enter :where(
    .hot-tub-gallery > [data-photo], .gallery-teaser > [data-photo],
    .about-photo-pair > [data-photo],
    .about-stay-photo, .about-cover, .river-story-photo,
    .room-photo-grid > [data-photo], .room-gallery > [data-photo],
    .gazebo-gallery > [data-photo],
    .activity-gallery > [data-photo], .activity-gallery-more > [data-photo],
    .activity-option-gallery > [data-photo],
    .gallery-grid > [data-category] > [data-photo],
    .contact-photo, .promotion-banner,
    .catalog-controls, .photo-note, .room-contact
  ):not([data-page-enter]):not([data-page-motion]) {
    animation: almaz-page-fade 650ms cubic-bezier(.2, .65, .3, 1) 280ms backwards;
  }
  /* A short capped sequence for first-screen rows, never a long queue. */
  .has-page-enter :where(.room-grid, .gazebo-cards, .promotions-grid, .room-photo-grid,
    .gazebo-gallery, .activity-gallery, .activity-option-gallery) > :nth-child(2):not([data-page-motion]),
  .has-page-enter .gallery-grid > :nth-child(2) > [data-photo]:not([data-page-motion]) { animation-delay: 350ms; }
  .has-page-enter :where(.room-grid, .gazebo-cards, .promotions-grid, .room-photo-grid,
    .gazebo-gallery, .activity-gallery, .activity-option-gallery) > :nth-child(n + 3):not([data-page-motion]),
  .has-page-enter .gallery-grid > :nth-child(n + 3) > [data-photo]:not([data-page-motion]) { animation-delay: 420ms; }
  /* Static overscan also covers slow or unavailable animation scripts. */
  .page-motion-photo { transform: scale(1.055); }
  /* Keep offscreen anchor geometry stable; only running reveals translate. */
  [data-page-motion="pending"] { opacity: 0; }
}

@keyframes almaz-page-enter {
  from { opacity: 0; transform: translateY(1.25rem); }
  to { opacity: 1; transform: translateY(0); }
}
@keyframes almaz-page-rise {
  from { opacity: 0; translate: 0 1.5rem; }
  to { opacity: 1; translate: 0 0; }
}
@keyframes almaz-page-fade {
  from { opacity: 0; }
  to { opacity: 1; }
}
@keyframes almaz-page-fact {
  from { opacity: 0; translate: 0 .75rem; }
  to { opacity: 1; translate: 0 0; }
}
@keyframes almaz-page-title {
  from { opacity: 0; transform: translateY(100%); }
  to { opacity: 1; transform: translateY(0); }
}
@media screen and (prefers-reduced-motion: no-preference) and (min-width: 64rem) {
  .page-motion-photo { transform: scale(1.09); }
}

@media (prefers-reduced-motion: reduce) {
  [data-page-enter], .hero-facts > a { animation: none; }
  .page-motion-photo { transform: none !important; }
  [data-page-motion="pending"] { opacity: 1; transform: none; translate: none; }
}

/* Overscan stays inside each photo, without changing its layout dimensions. */
.hero-scene, .river-story-photo { overflow: hidden; }
.page-motion-photo { overflow-anchor: none; }

@media print {
  [data-page-enter], [data-page-reveal], .page-motion-photo, .hero-facts > a {
    animation: none !important;
    opacity: 1 !important;
    transform: none !important;
    scale: none !important;
    translate: none !important;
  }
}
