/**
 * animations.css — Keyframes et classes d'animation OMNI
 * Toutes les animations utilisées dans l'interface
 */

/* ─── ANIMATIONS PRINCIPALES ─── */
@keyframes shimmerSweep {
  0% { background-position: -200% center; }
  100% { background-position: 200% center; }
}

@keyframes breatheGlow {
  0%, 100% { box-shadow: 0 0 15px rgba(255,140,0,0.2), 0 0 40px rgba(255,140,0,0.08); }
  50% { box-shadow: 0 0 25px rgba(255,140,0,0.35), 0 0 60px rgba(255,140,0,0.12); }
}

@keyframes cardEntrance {
  from { opacity: 0; transform: translateY(16px); }
  to { opacity: 1; transform: translateY(0); }
}

@keyframes borderGlow {
  0%, 100% { border-color: rgba(255,140,0,0.10); }
  50% { border-color: rgba(255,140,0,0.25); }
}

@keyframes gradientShift {
  0% { background-position: 0% 50%; }
  50% { background-position: 100% 50%; }
  100% { background-position: 0% 50%; }
}

/* ─── FADE & SLIDE ─── */
@keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } }
@keyframes fadeSlideIn { from { opacity:0; transform:translateY(8px); } to { opacity:1; transform:translateY(0); } }
@keyframes dashFadeUp { from { opacity:0; transform:translateY(12px); } to { opacity:1; transform:translateY(0); } }
@keyframes slideUp { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: translateY(0); } }
@keyframes msgIn { from { opacity:0; transform:translateY(8px); } to { opacity:1; transform:translateY(0); } }
@keyframes proofIn { from { opacity: 0; max-height: 0; } to { opacity: 1; max-height: 100px; } }
@keyframes notifSlideIn { from { opacity:0; transform:translateY(-8px); } to { opacity:1; transform:translateY(0); } }
@keyframes receiptIn { from { opacity: 0; transform: translateY(12px) scale(0.98); } to { opacity: 1; transform: translateY(0) scale(1); } }

/* ─── VUE TRANSITIONS ─── */
@keyframes viewFadeIn { from { opacity: 0; transform: translateY(6px); } to { opacity: 1; transform: translateY(0); } }
@keyframes viewFadeOut { to { opacity: 0; transform: translateY(-4px); } }

/* ─── MODAL ─── */
@keyframes modalIn {
  from { opacity: 0; transform: scale(0.94) translateY(12px); }
  to { opacity: 1; transform: scale(1) translateY(0); }
}

/* ─── PULSATION & CLIGNOTEMENT ─── */
@keyframes blink { 0%,100%{opacity:1} 50%{opacity:0.3} }
@keyframes pulse { 0%,100% { opacity: 1; } 50% { opacity: 0.4; } }
@keyframes pulse-status { 0%,100% { opacity: 1; } 50% { opacity: 0.5; } }
@keyframes riskPulse { 0%,100% { opacity:1; } 50% { opacity:0.7; } }
@keyframes streakPulse { 0%,100% { transform:scale(1); } 50% { transform:scale(1.15); } }
@keyframes pillGlow { 0%,100% { box-shadow: 0 0 8px rgba(255,140,0,0.1); } 50% { box-shadow: 0 0 16px rgba(255,140,0,0.25); } }
@keyframes memoryPulse {
  0%, 100% { box-shadow: 0 0 0 0 rgba(255,140,0,0); }
  50% { box-shadow: 0 0 0 6px rgba(255,140,0,0.06); }
}

/* ─── ÉTAPES PLAN ─── */
@keyframes stepComplete { 0% { transform: scale(0.8); opacity: 0.5; } 60% { transform: scale(1.1); } 100% { transform: scale(1); opacity: 1; } }
@keyframes compile-blink { 0%,100% { opacity: 1; box-shadow: 0 0 8px var(--accent); } 50% { opacity: 0.3; box-shadow: none; } }
@keyframes skeleton-shimmer { 0%,100% { opacity: 0.5; } 50% { opacity: 1; } }
@keyframes skeletonReveal {
  from { opacity: 0; transform: translateX(-8px); }
  to { opacity: 1; transform: translateX(0); }
}

/* ─── SPINNER ─── */
@keyframes spin { to { transform: rotate(360deg); } }

/* ─── ALIEN WELCOME ─── */
@keyframes welcomeAlienBob {
  0%, 100% { transform: translateY(0); }
  30% { transform: translateY(-3px); }
  60% { transform: translateY(1px); }
}
@keyframes alienPenWrite {
  0%, 100% { transform: rotate(0deg) translateX(0); }
  25% { transform: rotate(-2deg) translateX(1px); }
  50% { transform: rotate(0deg) translateX(3px); }
  75% { transform: rotate(1.5deg) translateX(1px); }
}

/* ─── ALIEN NAV ─── */
@keyframes navAlienBreathe {
  0%, 100% { transform: translateY(0) rotate(0deg); }
  30% { transform: translateY(-1px) rotate(1deg); }
  70% { transform: translateY(0.5px) rotate(-0.5deg); }
}
@keyframes navAlienChill {
  0%, 100% { transform: rotate(0deg); }
  50% { transform: rotate(-8deg); }
}

/* ─── THINKING INDICATOR ─── */
@keyframes thinkBounce {
  0%, 100% { opacity: 0.3; transform: translateY(0); }
  50% { opacity: 1; transform: translateY(-4px); }
}

/* ─── VOICE PULSE ─── */
@keyframes voice-pulse {
  0%, 100% { box-shadow: 0 0 0 0 rgba(255, 68, 68, 0.3); }
  50% { box-shadow: 0 0 12px 4px rgba(255, 68, 68, 0.2); }
}

/* ─── CÉLÉBRATION RECEIPT ─── */
@keyframes celebrationBounce {
  0% { transform: scale(0) rotate(-15deg); opacity: 0; }
  60% { transform: scale(1.15) rotate(3deg); opacity: 1; }
  100% { transform: scale(1) rotate(0deg); opacity: 1; }
}
@keyframes celebrationFade {
  from { opacity: 0; transform: translateY(6px); }
  to { opacity: 1; transform: translateY(0); }
}
@keyframes burstExpand {
  0% { width: 20px; height: 20px; opacity: 1; }
  100% { width: 200px; height: 200px; opacity: 0; }
}
@keyframes particleFly {
  0% { transform: translate(0, 0) scale(1); opacity: 1; }
  100% { opacity: 0; }
}
@keyframes pfly1 { 0% { transform: translate(0,0) scale(1); opacity:1; } 100% { transform: translate(-35px,-45px) scale(0); opacity:0; } }
@keyframes pfly2 { 0% { transform: translate(0,0) scale(1); opacity:1; } 100% { transform: translate(40px,-35px) scale(0); opacity:0; } }
@keyframes pfly3 { 0% { transform: translate(0,0) scale(1); opacity:1; } 100% { transform: translate(-45px,20px) scale(0); opacity:0; } }
@keyframes pfly4 { 0% { transform: translate(0,0) scale(1); opacity:1; } 100% { transform: translate(30px,40px) scale(0); opacity:0; } }
@keyframes pfly5 { 0% { transform: translate(0,0) scale(1); opacity:1; } 100% { transform: translate(-20px,-55px) scale(0); opacity:0; } }
@keyframes pfly6 { 0% { transform: translate(0,0) scale(1); opacity:1; } 100% { transform: translate(50px,10px) scale(0); opacity:0; } }

/* ─── CLASSES UTILITAIRES D'ANIMATION ─── */
.animate-fadeIn { animation: fadeIn 0.3s ease; }
.animate-slideUp { animation: slideUp 0.3s ease; }
.animate-cardEntrance { animation: cardEntrance 0.4s ease; }
.animate-msgIn { animation: msgIn 0.25s ease; }
.animate-spin { animation: spin 0.8s linear infinite; }

/* ─── NAV ALIEN CLASSES ─── */
.nav-alien-wrap {
  width: 24px; height: 34px;
  filter: drop-shadow(0 0 6px rgba(255,140,0,0.5)) drop-shadow(0 0 14px rgba(255,140,0,0.2));
  flex-shrink: 0;
}
.nav-alien-wrap svg { width: 100%; height: 100%; overflow: visible; }
.nav-alien-body { animation: navAlienBreathe 3.5s ease-in-out infinite; }
.nav-alien-arm-r {
  transform-origin: 20px 19px;
  animation: navAlienChill 4s ease-in-out infinite;
}
.alien-writing-arm {
  transform-origin: 58px 36px;
  animation: alienPenWrite 1.2s ease-in-out infinite;
}
