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

@keyframes shake {
  10%, 90% { transform: translateX(-10px); }
  20%, 80% { transform: translateX(9px); }
  30%, 50%, 70% { transform: translateX(-8px); }
  40%, 60% { transform: translateX(8px); }
}

@keyframes skeleton-shimmer {
  0% { background-position: 100% 0; }
  100% { background-position: 0 0; }
}

@keyframes toast-in {
  from { opacity: 0; transform: translateY(12px); }
  to { opacity: 1; transform: translateY(0); }
}
@keyframes toast-out {
  to { opacity: 0; transform: translateY(8px); }
}

@keyframes fade-in {
  from { opacity: 0; }
  to { opacity: 1; }
}
@keyframes slide-up {
  from { opacity: 0; transform: translateY(14px); }
  to { opacity: 1; transform: translateY(0); }
}
@keyframes scale-in {
  from { opacity: 0; transform: scale(0.9); }
  to { opacity: 1; transform: scale(1); }
}
@keyframes pulse-ring {
  0%, 100% { transform: scale(0.94); opacity: 0.7; }
  50% { transform: scale(1.08); opacity: 1; }
}

.fade-in { animation: fade-in var(--dur-slow) var(--ease-standard); }
.slide-up { animation: slide-up var(--dur-slow) var(--ease-standard); }
.scale-in { animation: scale-in var(--dur-base) var(--ease-standard); }
.pulse-ring { animation: pulse-ring 1.8s ease-in-out infinite; }
