/* ===== ENTRANCE ANIMATIONS ===== */
@keyframes fadeUp {
  from { opacity: 0; transform: translateY(20px); }
  to { opacity: 1; transform: translateY(0); }
}
@keyframes fadeIn {
  from { opacity: 0; }
  to { opacity: 1; }
}
@keyframes slideRight {
  from { opacity: 0; transform: translateX(-20px); }
  to { opacity: 1; transform: translateX(0); }
}
@keyframes zoomIn {
  from { opacity: 0; transform: scale(0.95); }
  to { opacity: 1; transform: scale(1); }
}
@keyframes shimmer {
  0% { background-position: -200% 0; }
  100% { background-position: 200% 0; }
}
@keyframes bounceSoft {
  0%, 100% { transform: translateY(0); opacity: 0.6; }
  50% { transform: translateY(6px); opacity: 1; }
}
@keyframes flow {
  0% { transform: translateX(0); opacity: 0; }
  20% { opacity: 1; }
  80% { opacity: 1; }
  100% { transform: translateX(100px); opacity: 0; }
}

.anim-fadeup { animation: fadeUp 0.7s cubic-bezier(0.16, 1, 0.3, 1) forwards; }
.anim-fadein { animation: fadeIn 0.6s ease-out forwards; }
.anim-slideright { animation: slideRight 0.6s cubic-bezier(0.16, 1, 0.3, 1) forwards; }
.anim-zoom { animation: zoomIn 0.5s cubic-bezier(0.16, 1, 0.3, 1) forwards; }

/* Reveal on scroll classes */
.reveal { opacity: 0; transform: translateY(24px); transition: opacity 0.7s cubic-bezier(0.16, 1, 0.3, 1), transform 0.7s cubic-bezier(0.16, 1, 0.3, 1); }
.reveal.visible { opacity: 1; transform: translateY(0); }

.reveal-scale { opacity: 0; transform: scale(0.95); transition: opacity 0.6s, transform 0.6s cubic-bezier(0.16, 1, 0.3, 1); }
.reveal-scale.visible { opacity: 1; transform: scale(1); }

.reveal-left { opacity: 0; transform: translateX(-24px); transition: opacity 0.7s, transform 0.7s cubic-bezier(0.16, 1, 0.3, 1); }
.reveal-left.visible { opacity: 1; transform: translateX(0); }

/* Stagger delays */
.stagger-1 { transition-delay: 0.08s; }
.stagger-2 { transition-delay: 0.16s; }
.stagger-3 { transition-delay: 0.24s; }
.stagger-4 { transition-delay: 0.32s; }
.stagger-5 { transition-delay: 0.40s; }
.stagger-6 { transition-delay: 0.48s; }
.stagger-7 { transition-delay: 0.56s; }
.stagger-8 { transition-delay: 0.64s; }

/* Shimmer skeleton */
.skeleton {
  background: linear-gradient(90deg, #e2e8f0 0%, #f1f5f9 50%, #e2e8f0 100%);
  background-size: 200% 100%;
  animation: shimmer 1.8s linear infinite;
  border-radius: 4px;
}

/* Pulse dot */
.pulse-dot {
  position: relative;
  width: 10px; height: 10px;
  border-radius: 50%;
  background: currentColor;
}
.pulse-dot::before {
  content: '';
  position: absolute; inset: -4px;
  border-radius: 50%;
  background: currentColor;
  opacity: 0.4;
  animation: pulseRing 2s ease-out infinite;
}
@keyframes pulseRing {
  0% { transform: scale(0.8); opacity: 0.4; }
  100% { transform: scale(2.2); opacity: 0; }
}

/* Toast */
.toast {
  pointer-events: auto;
  background: white;
  border: 1px solid #e2e8f0;
  border-left: 4px solid var(--color-accent);
  padding: 12px 16px;
  border-radius: 10px;
  box-shadow: 0 10px 25px -5px rgba(0,0,0,0.15);
  min-width: 280px;
  animation: toastIn 0.4s cubic-bezier(0.16, 1, 0.3, 1);
}
.toast.crisis { border-left-color: var(--color-danger); }
.toast.success { border-left-color: var(--color-success); }
.toast.warning { border-left-color: var(--color-warning); }
@keyframes toastIn {
  from { opacity: 0; transform: translateX(24px); }
  to { opacity: 1; transform: translateX(0); }
}
.toast.out { animation: toastOut 0.3s forwards; }
@keyframes toastOut {
  to { opacity: 0; transform: translateX(24px); }
}

/* Confetti (mini) */
.confetti {
  position: fixed; width: 8px; height: 8px;
  pointer-events: none;
  z-index: 100;
  animation: confettiFall 2.5s ease-in forwards;
}
@keyframes confettiFall {
  0% { transform: translateY(0) rotate(0deg); opacity: 1; }
  100% { transform: translateY(600px) rotate(720deg); opacity: 0; }
}
