/* =====================================================
   L'ÉTAGE DINNER CLUB — Animations & Keyframes
   ===================================================== */

@keyframes floatY {
  0%, 100% { transform: translateY(0); }
  50%       { transform: translateY(-22px); }
}

@keyframes floatY2 {
  0%, 100% { transform: translateY(0) rotate(0deg); }
  50%       { transform: translateY(-16px) rotate(6deg); }
}

@keyframes spinSlow {
  to { transform: rotate(360deg); }
}

@keyframes marqueeScroll {
  to { transform: translateX(-50%); }
}

@keyframes glow {
  0%, 100% { opacity: .55; transform: scale(1); }
  50%       { opacity: .9;  transform: scale(1.08); }
}

@keyframes riseIn {
  from { opacity: 0; transform: translateY(40px); }
  to   { opacity: 1; transform: translateY(0); }
}

@keyframes loaderPulse {
  0%, 100% { transform: scale(1);    box-shadow: 0 0 0 0  #ca927e; }
  50%       { transform: scale(1.06); box-shadow: 0 0 0 24px  #d58365; }
}

@keyframes ripple {
  to { transform: scale(2.6); opacity: 0; }
}

@keyframes fadeSlide {
  from { opacity: 0; transform: translateY(12px); }
  to   { opacity: 1; transform: translateY(0); }
}

/* ---- Utility animation classes ---- */

.anim-floatY   { animation: floatY  6s   ease-in-out infinite; }
.anim-floatY2  { animation: floatY2 8s   ease-in-out infinite; }
.anim-spin     { animation: spinSlow 26s  linear     infinite; }
.anim-spin-slow{ animation: spinSlow 30s  linear     infinite; }
.anim-glow7    { animation: glow    7s   ease-in-out infinite; }
.anim-glow9    { animation: glow    9s   ease-in-out infinite; }
.anim-loader   { animation: loaderPulse 1.4s ease-in-out infinite; }
.anim-rise-1   { animation: riseIn .9s  cubic-bezier(.2,.7,.2,1) both; }
.anim-rise-2   { animation: riseIn 1.1s cubic-bezier(.2,.7,.2,1) both; }

/* ---- Scroll-reveal base state ---- */
/* JS sets opacity/transform on [data-reveal] elements before IntersectionObserver */
[data-reveal] {
  will-change: opacity, transform;
}
