/* ══════════════════════════════════════════
   SevPay Kiosk — Animações
══════════════════════════════════════════ */

/* Fade in */
@keyframes fadeIn {
  from { opacity: 0; transform: translateY(10px); }
  to   { opacity: 1; transform: translateY(0); }
}
.fade-in {
  animation: fadeIn 0.3s ease-out forwards;
}

/* Slide in from right */
@keyframes slideInRight {
  from { opacity: 0; transform: translateX(24px); }
  to   { opacity: 1; transform: translateX(0); }
}
.slide-in-right {
  animation: slideInRight 0.3s ease-out forwards;
}

/* Slide up (cart bar) */
@keyframes slideUp {
  from { transform: translateY(100%); }
  to   { transform: translateY(0); }
}
.slide-up {
  animation: slideUp 0.3s cubic-bezier(0.22, 1, 0.36, 1) forwards;
}

/* Pulse (processing) */
@keyframes pulse {
  0%, 100% { transform: scale(1); opacity: 1; }
  50%      { transform: scale(1.05); opacity: 0.8; }
}
.pulse {
  animation: pulse 2s ease-in-out infinite;
}

/* Bounce in (success) */
@keyframes bounceIn {
  0%   { transform: scale(0); opacity: 0; }
  50%  { transform: scale(1.1); }
  100% { transform: scale(1); opacity: 1; }
}
.bounce-in {
  animation: bounceIn 0.5s cubic-bezier(0.68, -0.55, 0.265, 1.55) forwards;
}

/* Shake (error) */
@keyframes shake {
  0%, 100% { transform: translateX(0); }
  10%, 30%, 50%, 70%, 90% { transform: translateX(-5px); }
  20%, 40%, 60%, 80% { transform: translateX(5px); }
}
.shake {
  animation: shake 0.6s ease-in-out;
}

/* Spinner rotate */
@keyframes spinnerRotate {
  0%   { transform: rotate(0deg); }
  100% { transform: rotate(360deg); }
}

.processing-spinner {
  width: 64px;
  height: 64px;
  border: 5px solid var(--color-border);
  border-top-color: var(--color-primary);
  border-radius: 50%;
  animation: spinnerRotate 1s linear infinite;
}

/* Stagger children — cards entram com delay */
.stagger-children > * {
  opacity: 0;
  animation: fadeIn 0.25s ease-out forwards;
}
.stagger-children > *:nth-child(1)  { animation-delay: 0.03s; }
.stagger-children > *:nth-child(2)  { animation-delay: 0.06s; }
.stagger-children > *:nth-child(3)  { animation-delay: 0.09s; }
.stagger-children > *:nth-child(4)  { animation-delay: 0.12s; }
.stagger-children > *:nth-child(5)  { animation-delay: 0.15s; }
.stagger-children > *:nth-child(6)  { animation-delay: 0.18s; }
.stagger-children > *:nth-child(7)  { animation-delay: 0.21s; }
.stagger-children > *:nth-child(8)  { animation-delay: 0.24s; }
.stagger-children > *:nth-child(9)  { animation-delay: 0.27s; }
.stagger-children > *:nth-child(10) { animation-delay: 0.30s; }
.stagger-children > *:nth-child(11) { animation-delay: 0.33s; }
.stagger-children > *:nth-child(12) { animation-delay: 0.36s; }

/* Dispense animation */
@keyframes dispenseSlot {
  0%   { transform: translateY(0); }
  30%  { transform: translateY(-10px); }
  60%  { transform: translateY(50px); opacity: 0.8; }
  100% { transform: translateY(100px); opacity: 0; }
}
.dispense-anim {
  animation: dispenseSlot 1.5s ease-in forwards;
}
