/* ============================================================
   VOICEDESK — MOTION LIBRARY
   Every keyframe lives here once. Consumed via utility classes.
   ============================================================ */
@keyframes fade-up   { from{opacity:0; transform:translateY(16px)} to{opacity:1; transform:none} }
@keyframes fade-in   { from{opacity:0} to{opacity:1} }
@keyframes scale-in  { from{opacity:0; transform:scale(.96)} to{opacity:1; transform:none} }
@keyframes pulse-dot { 0%{box-shadow:0 0 0 0 var(--primary-ring)} 70%{box-shadow:0 0 0 9px transparent} 100%{box-shadow:0 0 0 0 transparent} }
@keyframes breathe   { 0%,100%{transform:scale(1)} 50%{transform:scale(1.035)} }
@keyframes spin      { to{transform:rotate(360deg)} }
@keyframes shimmer   { to{background-position:-200% 0} }
@keyframes float-y   { 0%,100%{transform:translateY(0)} 50%{transform:translateY(-10px)} }

.anim-fade-up { animation:fade-up  .6s var(--ease) both }
.anim-fade-in { animation:fade-in  .5s var(--ease) both }
.anim-scale-in{ animation:scale-in .5s var(--ease) both }
.anim-float   { animation:float-y  6s var(--ease-io) infinite }
.anim-spin    { animation:spin 1s linear infinite }
.d-1{animation-delay:.06s}.d-2{animation-delay:.12s}.d-3{animation-delay:.18s}
.d-4{animation-delay:.24s}.d-5{animation-delay:.30s}.d-6{animation-delay:.36s}

.dot-live{ width:7px; height:7px; border-radius:50%; background:var(--primary); animation:pulse-dot 2s var(--ease-io) infinite }
.dot-ok  { width:7px; height:7px; border-radius:50%; background:var(--success) }
.dot-off { width:7px; height:7px; border-radius:50%; background:var(--muted-2) }

@media(prefers-reduced-motion:reduce){
    *,*::before,*::after{ animation:none !important; transition:none !important }
}
