/* ─── Skeleton shimmer ─── */
@keyframes skeleton-shimmer {
  0%   { background-position: 200% 0; }
  100% { background-position: -200% 0; }
}

/* ─── Fade in ─── */
@keyframes fade-in {
  from { opacity: 0; transform: translateY(8px); }
  to   { opacity: 1; transform: translateY(0); }
}
.fade-in { animation: fade-in 0.35s ease-out both; }

/* ─── Spin ─── */
@keyframes spin {
  to { transform: rotate(360deg); }
}
.spin { animation: spin 1s linear infinite; }

/* ─── Checkmark circle draw ─── */
@keyframes checkmark-circle-draw {
  to { stroke-dashoffset: 0; }
}
@keyframes checkmark-check-draw {
  to { stroke-dashoffset: 0; }
}

/* ─── Processing vertical progress line ─── */
@keyframes progress-line {
  0%   { height: 0; }
  100% { height: 100%; }
}

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

/* ─── Stage transition ─── */
@keyframes stage-in {
  from { opacity: 0; transform: translateX(-12px); }
  to   { opacity: 1; transform: translateX(0); }
}
.stage-in { animation: stage-in 0.3s ease-out both; }

/* ─── Bounce ─── */
@keyframes bounce-in {
  0%   { transform: scale(0.6); opacity: 0; }
  60%  { transform: scale(1.1); opacity: 1; }
  100% { transform: scale(1); }
}
.bounce-in { animation: bounce-in 0.5s cubic-bezier(0.36,0.07,0.19,0.97) both; }

/* ─── Slide right (drawer) ─── */
@keyframes slide-in-right {
  from { transform: translateX(100%); }
  to   { transform: translateX(0); }
}
.slide-in-right { animation: slide-in-right 0.3s cubic-bezier(0.4,0,0.2,1) both; }
