/* ==========================================================================
   PALACE CONCERTS — ANIMATION LIBRARY
   ========================================================================== */

@keyframes floatY{ 0%,100%{ transform:translateY(0); } 50%{ transform:translateY(-16px); } }
.float{ animation:floatY 5.5s ease-in-out infinite; }
.float-slow{ animation:floatY 8s ease-in-out infinite; }
.float-delay{ animation-delay:1.4s; }

@keyframes spin-slow{ to{ transform:rotate(360deg); } }
.spin-slow{ animation:spin-slow 22s linear infinite; }

@keyframes pulseGlow{
  0%,100%{ box-shadow:0 0 0 0 rgba(212,175,55,0.35); }
  50%{ box-shadow:0 0 0 12px rgba(212,175,55,0); }
}
.pulse-glow{ animation:pulseGlow 2.4s ease-in-out infinite; }

@keyframes beamSweep{
  0%{ transform:translateX(-30%) rotate(8deg); opacity:0.25; }
  50%{ transform:translateX(30%) rotate(8deg); opacity:0.5; }
  100%{ transform:translateX(-30%) rotate(8deg); opacity:0.25; }
}
.light-beam{
  position:absolute; top:-20%; width:140%; height:160%; left:-20%;
  background:linear-gradient(100deg, transparent 42%, rgba(139,63,252,0.16) 48%, rgba(212,175,55,0.10) 51%, transparent 58%);
  animation:beamSweep 9s ease-in-out infinite;
  pointer-events:none;
}

@keyframes flicker{
  0%,19%,21%,23%,25%,54%,56%,100%{ opacity:1; }
  20%,24%,55%{ opacity:0.55; }
}
.flicker{ animation:flicker 6s linear infinite; }

@keyframes marquee{ from{ transform:translateX(0); } to{ transform:translateX(-50%); } }
.marquee-track{ display:flex; width:max-content; animation:marquee 28s linear infinite; }
.marquee-wrap{ overflow:hidden; }
.marquee-wrap:hover .marquee-track{ animation-play-state:paused; }

.fade-in{ animation:fadeIn 1s var(--ease) both; }
@keyframes fadeIn{ from{ opacity:0; } to{ opacity:1; } }

.fade-up{ animation:fadeUp 1s var(--ease) both; }
@keyframes fadeUp{ from{ opacity:0; transform:translateY(30px); } to{ opacity:1; transform:translateY(0); } }

.zoom-in{ animation:zoomIn 1.1s var(--ease) both; }
@keyframes zoomIn{ from{ opacity:0; transform:scale(1.15); } to{ opacity:1; transform:scale(1); } }

.delay-1{ animation-delay:0.15s; } .delay-2{ animation-delay:0.3s; } .delay-3{ animation-delay:0.45s; } .delay-4{ animation-delay:0.6s; }

/* Particle sparks used in hero / CTA */
.particles{ position:absolute; inset:0; overflow:hidden; pointer-events:none; z-index:1; }
.particle{
  position:absolute; width:3px; height:3px; border-radius:50%;
  background:var(--gold); opacity:0.6;
  animation:riseUp linear infinite;
}
@keyframes riseUp{
  0%{ transform:translateY(0) translateX(0); opacity:0; }
  10%{ opacity:0.8; }
  100%{ transform:translateY(-110vh) translateX(20px); opacity:0; }
}

/* Loading dots for premium spinner alt use */
@keyframes dotBounce{ 0%,80%,100%{ transform:scale(0); } 40%{ transform:scale(1); } }
.dot-loader span{ display:inline-block; width:6px; height:6px; margin:0 3px; background:var(--gold); border-radius:50%; animation:dotBounce 1.2s infinite ease-in-out both; }
.dot-loader span:nth-child(2){ animation-delay:-0.16s; }
.dot-loader span:nth-child(1){ animation-delay:-0.32s; }

@media (prefers-reduced-motion: reduce){
  .float, .float-slow, .spin-slow, .pulse-glow, .light-beam, .flicker, .marquee-track, .particle{ animation:none !important; }
}
