@keyframes flicker {
  0% { transform: translateX(-50%) scaleX(1) scaleY(1) rotate(-1deg); }
  100% { transform: translateX(-50%) scaleX(0.88) scaleY(1.06) rotate(1deg); }
}
@keyframes glow-pulse {
  0% { opacity: 0.7; transform: translateX(-50%) scale(1); }
  100% { opacity: 1; transform: translateX(-50%) scale(1.15); }
}

@keyframes spark-float {
  0% { opacity: 0; transform: translateY(0) translateX(0) scale(1); }
  10% { opacity: 1; }
  80% { opacity: 0.6; }
  100% { opacity: 0; transform: translateY(-80px) translateX(var(--sx)) scale(0.2); }
}

@keyframes chest-float {
  0%, 100% { transform: translateY(0); }
  50%       { transform: translateY(-10px); }
}

/* Shake and jiggle: snappy left-right build from small to violent (lock breaks, contents burst) */
@keyframes chest-shake {
  0%       { transform: translateY(0) translateX(0) rotate(0deg); }
  3%       { transform: translateY(0) translateX(2px) rotate(0.5deg); }
  6%       { transform: translateY(0) translateX(-2px) rotate(-0.5deg); }
  9%       { transform: translateY(0) translateX(1px) rotate(0.3deg); }
  12%      { transform: translateY(0) translateX(-1px) rotate(-0.3deg); }
  16%      { transform: translateY(0) translateX(4px) rotate(1deg); }
  20%      { transform: translateY(0) translateX(-4px) rotate(-1deg); }
  24%      { transform: translateY(0) translateX(3px) rotate(0.8deg); }
  28%      { transform: translateY(0) translateX(-3px) rotate(-0.8deg); }
  33%      { transform: translateY(-1px) translateX(7px) rotate(1.8deg); }
  37%      { transform: translateY(1px) translateX(-7px) rotate(-1.8deg); }
  41%      { transform: translateY(0) translateX(6px) rotate(1.5deg); }
  45%      { transform: translateY(0) translateX(-6px) rotate(-1.5deg); }
  50%      { transform: translateY(-2px) translateX(11px) rotate(3deg); }
  54%      { transform: translateY(1px) translateX(-11px) rotate(-3deg); }
  58%      { transform: translateY(0) translateX(10px) rotate(2.5deg); }
  62%      { transform: translateY(-1px) translateX(-10px) rotate(-2.5deg); }
  66%      { transform: translateY(1px) translateX(15px) rotate(4deg); }
  70%      { transform: translateY(-2px) translateX(-15px) rotate(-4deg); }
  74%      { transform: translateY(0) translateX(14px) rotate(3.5deg); }
  78%      { transform: translateY(-1px) translateX(-14px) rotate(-3.5deg); }
  82%      { transform: translateY(2px) translateX(20px) rotate(6deg); }
  86%      { transform: translateY(-2px) translateX(-20px) rotate(-6deg); }
  90%      { transform: translateY(0) translateX(22px) rotate(7deg); }
  94%      { transform: translateY(-1px) translateX(-22px) rotate(-7deg); }
  98%      { transform: translateY(0) translateX(4px) rotate(1deg); }
  100%     { transform: translateY(0) translateX(0) rotate(0deg); }
}

@keyframes hint-pulse {
  0%, 100% { opacity: 0.4; }
  50% { opacity: 0.9; }
}
@keyframes hint-counter-float {
  0%, 100% { transform: translateX(-50%) translateY(0); }
  50%       { transform: translateX(-50%) translateY(10px); }
}

@keyframes slot-pop {
  0% { opacity: 0; transform: translateY(30px) scale(0.75); }
  60% { transform: translateY(-6px) scale(1.06); }
  80% { transform: translateY(2px) scale(0.98); }
  100% { opacity: 1; transform: translateY(0) scale(1); }
}

@keyframes rays-burst {
  0% { opacity: 0; transform: scale(0.5) rotate(0deg); }
  20% { opacity: 1; }
  60% { opacity: 0.6; transform: scale(1.5) rotate(15deg); }
  100% { opacity: 0; transform: scale(2) rotate(30deg); }
}

@keyframes card-back-pulse {
  0% { box-shadow: 0 0 30px rgba(179,157,219,0.5), 0 0 80px rgba(179,157,219,0.2); }
  100% { box-shadow: 0 0 50px rgba(179,157,219,0.8), 0 0 120px rgba(179,157,219,0.35), 0 0 200px rgba(179,157,219,0.1); }
}

@keyframes symbol-spin {
  0% { transform: rotate(0deg); }
  100% { transform: rotate(360deg); }
}

@keyframes card-icon-float {
  0% { transform: translateY(0); }
  100% { transform: translateY(-6px); }
}

@keyframes found-appear {
  0% { opacity: 0; transform: scale(0.7) translateY(20px); }
  100% { opacity: 1; transform: scale(1) translateY(0); }
}

@keyframes flash-bang {
  0% { opacity: 0; }
  8% { opacity: 1; }
  100% { opacity: 0; }
}

@keyframes mystery-slot-throb {
  0%  { box-shadow: 0 0 20px rgba(179,157,219,0.4), 0 0 50px rgba(179,157,219,0.15); transform: scale(1); }
  100%{ box-shadow: 0 0 50px rgba(179,157,219,0.8), 0 0 120px rgba(179,157,219,0.35), 0 0 200px rgba(179,157,219,0.1); transform: scale(1.04); }
}

@keyframes screen-shake {
  0%   { transform: translate(0,0) rotate(0deg); }
  10%  { transform: translate(-4px, -2px) rotate(-0.3deg); }
  20%  { transform: translate(4px, 2px) rotate(0.3deg); }
  30%  { transform: translate(-3px, 3px) rotate(-0.2deg); }
  40%  { transform: translate(3px, -3px) rotate(0.2deg); }
  50%  { transform: translate(-2px, 2px) rotate(-0.1deg); }
  60%  { transform: translate(2px, -1px) rotate(0.1deg); }
  70%  { transform: translate(-1px, 1px) rotate(0deg); }
  80%  { transform: translate(1px, 0px) rotate(0deg); }
  100% { transform: translate(0,0) rotate(0deg); }
}

@keyframes hover-float {
  0%   { transform: translateY(0px) rotate(-1deg); }
  100% { transform: translateY(-14px) rotate(1deg); }
}
@keyframes hover-sway {
  0%   { transform: translate(-50%, -50%) scale(1.15) translateY(0px) rotate(-1.5deg); }
  25%  { transform: translate(-50%, -50%) scale(1.15) translateY(-10px) rotate(0.5deg); }
  50%  { transform: translate(-50%, -50%) scale(1.15) translateY(-18px) rotate(1.5deg); }
  75%  { transform: translate(-50%, -50%) scale(1.15) translateY(-8px) rotate(-0.5deg); }
  100% { transform: translate(-50%, -50%) scale(1.15) translateY(0px) rotate(-1.5deg); }
}

#flash.bang {
  animation: flash-bang 0.6s ease-out forwards;
}

#light-rays.burst {
  animation: rays-burst 1.2s ease-out forwards;
}

body.shaking #stage { animation: screen-shake 0.5s ease-out forwards; }
