@keyframes logo-entrance {
  from { opacity: 0; transform: translateY(-8px); }
  to { opacity: 1; transform: translateY(0); }
}

@keyframes stripe-expand {
  from { transform: scaleX(0); }
  to { transform: scaleX(1); }
}

@keyframes skeleton-pulse {
  0%, 100% { opacity: 1; }
  50% { opacity: 0.5; }
}

@keyframes fade-in-up {
  from { opacity: 0; transform: translateY(10px); }
  to { opacity: 1; transform: translateY(0); }
}

@keyframes modal-enter {
  from { transform: scale(0.9); opacity: 0; }
  to { transform: scale(1); opacity: 1; }
}

@keyframes modal-exit {
  from { transform: scale(1); opacity: 1; }
  to { transform: scale(0.9); opacity: 0; }
}

@keyframes card-slide-out-left {
  from { transform: translateX(0); opacity: 1; }
  to { transform: translateX(-100%); opacity: 0; }
}

@keyframes card-slide-in-right {
  from { transform: translateX(100%); opacity: 0; }
  to { transform: translateX(0); opacity: 1; }
}

@keyframes card-dismiss-down {
  from { transform: translateY(0); opacity: 1; }
  to { transform: translateY(20px); opacity: 0; }
}

@keyframes result-pulse-truth {
  0%, 100% { box-shadow: 0 0 0 0 var(--shadow-truth-glow); }
  50% { box-shadow: 0 0 0 16px transparent; }
}

@keyframes result-pulse-dare {
  0%, 100% { box-shadow: 0 0 0 0 var(--shadow-dare-glow); }
  50% { box-shadow: 0 0 0 16px transparent; }
}

@keyframes ripple {
  from { transform: scale(0); opacity: 1; }
  to { transform: scale(2.5); opacity: 0; }
}

@keyframes score-fly {
  from { transform: translateY(0); opacity: 1; }
  to { transform: translateY(-20px); opacity: 0; }
}

@keyframes wheel-glow-pulse {
  0%, 100% { filter: drop-shadow(0 0 8px var(--glow-color)); }
  50% { filter: drop-shadow(0 0 20px var(--glow-color)); }
}

@keyframes spin {
  from { transform: rotate(0deg); }
  to { transform: rotate(var(--wheel-final-angle, 360deg)); }
}

@keyframes spin-initial {
  from { transform: rotate(0deg); }
  to { transform: rotate(var(--wheel-start-angle, 1440deg)); }
}
