/* Shared entrance and scroll motion. Content stays visible if JavaScript fails. */
:root { --motion-ease: cubic-bezier(.22, 1, .36, 1); }
@keyframes hero-enter {
  from { opacity: 0; transform: translateY(14px); }
  to { opacity: 1; transform: none; }
}
@keyframes content-enter { from { opacity: 0; } to { opacity: 1; } }

#hero :is(.hero-logo, .hero-kick, .hero-kicker, .hero-eyebrow, .lp-brand, .lp-eyebrow,
  .hero-h1, .hero-t-h1, .com-h1, .hero-sub, .hero-t-sub, .com-sub,
  .hero-price, .hero-meta, .hero-checks, .hero-ctas, .hero-t-ctas, .hero-cta,
  .hero-trust, .hero-stats, .hero-pill, .hero-cred, .com-fine, .lp-hero-proof,
  .lp-cta-note, .lp-first-step, .hero-media, .hero-video, .vsl-card),
.hero-strip {
  animation: hero-enter .6s var(--motion-ease) backwards;
}
#hero :is(.hero-sub, .hero-t-sub, .com-sub, .hero-price) { animation-delay: .08s; }
#hero :is(.hero-ctas, .hero-t-ctas, .hero-cta, .hero-checks, .lp-first-step, .hero-media, .hero-video, .vsl-card) { animation-delay: .16s; }
#hero :is(.hero-trust, .hero-stats, .hero-pill, .hero-cred, .hero-meta, .com-fine, .lp-hero-proof, .lp-cta-note),
.hero-strip { animation-delay: .24s; }
/* The booking area can span several screens: fade without moving the form. */
#booking { animation: content-enter .6s .16s var(--motion-ease) backwards; }

[data-motion-reveal] {
  transition: opacity .55s var(--motion-ease), transform .55s var(--motion-ease);
  transition-delay: var(--reveal-delay, 0ms);
}
[data-motion-pending] { opacity: 0; transform: translateY(14px); }
/* Preserve sticky positioning and masonry coordinates; large blocks only fade. */
[data-motion-pending][data-motion-static] { transform: none; }
.wa-card[data-motion-pending] { opacity: 0; }
.hero-tile { will-change: auto; }
.sol-step.in .sol-dot, .tl-item.in .tl-dot { animation: none; }

html.no-motion *, html.no-motion *::before, html.no-motion *::after {
  animation: none !important; transition: none !important;
}
html.no-motion [data-motion-pending] { opacity: 1; transform: none; }
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { animation: none !important; transition: none !important; }
  [data-motion-pending] { opacity: 1; transform: none; }
}
@media print {
  [data-motion-pending] { opacity: 1; transform: none; }
}
/* A readable gallery also works before, or without, the masonry script. */
.wa-grid:not([data-masonry]) { display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 16px; }
.wa-grid:not([data-masonry]) .wa-card { position: static; }
@media (max-width: 960px) {
  .wa-grid:not([data-masonry]) { grid-template-columns: repeat(3, minmax(0, 1fr)); }
}
@media (max-width: 640px) {
  .wa-grid:not([data-masonry]) { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
