/* ── Reveal presets ──────────────────────────────────────
   Elements start hidden; GSAP (or the no-JS fallback below)
   animates them in. */
[data-reveal] { opacity: 0; transform: translateY(28px); }

/* Menu rows wipe in left-to-right */
.menu__list li { clip-path: inset(0 100% 0 0); }
.no-motion .menu__list li,
.menu__list li.is-in { clip-path: inset(0 0 0 0); transition: clip-path var(--dur-slow) var(--ease-out); }

/* Splitting words */
[data-splitting] .word { display: inline-block; overflow: hidden; }

/* ── No-JS / reduced-motion safety net ───────────────────
   If JS never runs or motion is reduced, reveal everything. */
.no-motion [data-reveal],
.is-ready [data-reveal] { opacity: 1; transform: none; }

/* When reduced motion: kill the entrance transforms entirely */
@media (prefers-reduced-motion: reduce) {
  [data-reveal] { opacity: 1 !important; transform: none !important; }
  .menu__list li { clip-path: none !important; }
  .hero__media img { transform: none !important; }
  .sticker--new { animation: none !important; }
}

/* ── Confetti (booking confirm, CSS-only) ────────────────*/
.confetti { position: absolute; inset: 0; overflow: hidden; pointer-events: none; }
.confetti i {
  position: absolute; top: -10%; width: 9px; height: 14px; opacity: 0;
  animation: confetti-fall 1.6s var(--ease-out) forwards;
}
.confetti.is-firing i { opacity: 1; }
@keyframes confetti-fall {
  0%   { transform: translateY(-10%) rotate(0deg); opacity: 1; }
  100% { transform: translateY(640px) rotate(620deg); opacity: 0; }
}

/* ── Count-up helper (set via JS) ────────────────────────*/
.count { font-variant-numeric: tabular-nums; }
