/* ============================================================
   KINBEN — animations.css
   Entrée à l'arrivée · curseur · révélations · entrées de cartes
   ============================================================ */

/* ---------- KEYFRAMES ---------- */
@keyframes introUp   { from { opacity: 0; transform: translateY(28px); } to { opacity: 1; transform: none; } }
@keyframes introFood { from { opacity: 0; transform: translateY(24px) scale(.94); } to { opacity: 1; transform: none; } }
@keyframes introFade { from { opacity: 0; } to { opacity: 1; } }
@keyframes navDown   { from { opacity: 0; transform: translateY(-100%); } to { opacity: 1; transform: none; } }
@keyframes dishIn    { from { opacity: 0; transform: translateY(26px) scale(.98); } to { opacity: 1; transform: none; } }
@keyframes scrollPulse { 0%,100% { transform: scaleY(.35); opacity: .35; } 50% { transform: scaleY(1); opacity: 1; } }

/* ---------- ENTRÉE À L'ARRIVÉE (plus de page de chargement) ---------- */
.nav           { animation: navDown .8s var(--ease) both; }
.hero__eyebrow { animation: introUp .7s var(--ease) .15s both; }
.hero__title   { animation: introUp .9s var(--ease) .28s both; }
.hero__jp      { animation: introUp .7s var(--ease) .44s both; }
.hero__text    { animation: introUp .7s var(--ease) .56s both; }
.hero__cta     { animation: introUp .7s var(--ease) .68s both; }
.hero__visual  { animation: introFood 1s var(--ease) .5s both; }
.hero .deco    { animation: introFade 1.2s var(--ease) .8s both; }
.hero__scroll  { animation: introFade 1s ease 1.1s both; }

/* ---------- CURSEUR PERSONNALISÉ ---------- */
.cursor-dot, .cursor-ring {
  position: fixed; top: 0; left: 0; z-index: 9997; pointer-events: none;
  border-radius: 50%; transform: translate(-50%, -50%); opacity: 0;
  transition: opacity .3s ease;
}
.cursor-dot { width: 7px; height: 7px; background: var(--red); }
.cursor-ring { width: 34px; height: 34px; border: 1px solid var(--red);
  transition: width .25s var(--ease), height .25s var(--ease), background .25s, opacity .3s; }
body.cursor-ready .cursor-dot, body.cursor-ready .cursor-ring { opacity: 1; }
body.cursor-hover .cursor-ring { width: 56px; height: 56px; background: var(--red-soft); }

/* ---------- RÉVÉLATIONS AU SCROLL ---------- */
.reveal { opacity: 0; transform: translateY(30px); transition: opacity .8s var(--ease), transform .8s var(--ease); }
.reveal.is-visible { opacity: 1; transform: none; }

/* ---------- ENTRÉES DE CARTES (rejouées à chaque rendu) ---------- */
.menu__grid .dish,
.menu__signatures .sig-card { opacity: 0; animation: dishIn .6s var(--ease) forwards; }

/* ---------- DÉTAILS ---------- */
.hero__scroll-line { animation: scrollPulse 1.9s var(--ease) infinite; transform-origin: top; }

/* ---------- REDUCED MOTION ---------- */
@media (prefers-reduced-motion: reduce) {
  .reveal { opacity: 1; transform: none; transition: none; }
  .menu__grid .dish, .menu__signatures .sig-card { opacity: 1; animation: none; }
  .nav, .hero__eyebrow, .hero__title, .hero__jp, .hero__text, .hero__cta,
  .hero__visual, .hero .deco, .hero__scroll, .hero__scroll-line { animation: none; }
  .cursor-dot, .cursor-ring { display: none; }
}
