/* ═══════════════════════════════════════════════════
   AURA · ONBOARDING INTELLIGENCE
   css/animations.css — Keyframes & Motion
   ═══════════════════════════════════════════════════ */

/* ── CHARACTER ──────────────────────────────────── */
@keyframes charFloat {
  0%, 100% { transform: translateY(0); }
  50%       { transform: translateY(-10px); }
}

@keyframes haloBreath {
  0%, 100% { opacity: .6; transform: translate(-50%,-60%) scale(1); }
  50%       { opacity: 1;  transform: translate(-50%,-60%) scale(1.12); }
}

/* ── SPEAKING RINGS ─────────────────────────────── */
.speaking-active .speak-ring-1 { animation: ringPulse 1.8s ease-out infinite; }
.speaking-active .speak-ring-2 { animation: ringPulse 1.8s ease-out .4s infinite; }
.speaking-active .speak-ring-3 { animation: ringPulse 1.8s ease-out .8s infinite; }

@keyframes ringPulse {
  0%   { transform: translate(-50%,-60%) scale(.5); opacity: .8; }
  100% { transform: translate(-50%,-60%) scale(1.5); opacity: 0; }
}

/* ── WAVEFORM ───────────────────────────────────── */
/* Animate ONLY while mic button is held (mic-active). Static at all other times. */
@keyframes wbIdle {
  0%, 100% { transform: scaleY(1);   opacity: .35; }
  50%       { transform: scaleY(1.6); opacity: .7; }
}

.waveform.mic-active .wb {
  animation: wbIdle 2.2s ease-in-out infinite;
}

@keyframes wbSpeak {
  0%, 100% { transform: scaleY(.6); }
  50%       { transform: scaleY(2.2); }
}

/* ── LIVE DOT ───────────────────────────────────── */
@keyframes ldotPulse {
  0%, 100% { opacity: 1;   transform: scale(1);    box-shadow: 0 0 8px var(--blue-bright); }
  50%       { opacity: .3;  transform: scale(.7);   box-shadow: 0 0 3px var(--blue-bright); }
}

/* ── CARD ENTER ─────────────────────────────────── */
@keyframes cardIn {
  from { opacity: 0; transform: translateY(10px); }
  to   { opacity: 1; transform: none; }
}

/* ── EMPTY STATE ────────────────────────────────── */
@keyframes emptyFloat {
  0%, 100% { transform: translateY(0); }
  50%       { transform: translateY(-6px); }
}

/* ── SHIMMER (loading) ──────────────────────────── */
@keyframes shimmer {
  0%   { background-position: -400px 0; }
  100% { background-position: 400px 0; }
}

.shimmer {
  background: linear-gradient(90deg, var(--ink3) 25%, var(--line) 50%, var(--ink3) 75%);
  background-size: 800px 100%;
  animation: shimmer 1.5s infinite;
}
/* ── CARD UPDATE FLASH ──────────────────────────── */
@keyframes flashUpdate {
  0% { background: rgba(23,200,180,0); transform: scale(1); }
  30% { background: rgba(23,200,180,0.3); transform: scale(1.03); box-shadow: 0 0 20px rgba(23,200,180,0.5); }
  100% { background: rgba(23,200,180,0); transform: scale(1); }
}

.cand-card.flash-update {
  animation: flashUpdate 1s ease-out;
  z-index: 100;
}

/* ── SUCCESS SLIDE OUT ──────────────────────────── */
@keyframes slideOutRight {
  0% { transform: translateX(0); opacity: 1; }
  100% { transform: translateX(100px); opacity: 0; }
}

.slide-out-right {
  animation: slideOutRight 0.4s ease-out forwards;
  pointer-events: none;
}
