/* ============================================================================
   animations.css — библиотека анимаций дизайн-системы Emailzavr.
   Правило: анимация помогает понять СОСТОЯНИЕ системы, а не украшает.
   Мягкие, быстрые, enterprise-style. Без кислотных glow и резких bounce.
   ============================================================================ */

/* 1. Fade In — появление блоков */
@keyframes ez-fade-in { from { opacity: 0; } to { opacity: 1; } }
.a-fade-in { animation: ez-fade-in 0.3s ease both; }

/* 2. Slide Up — карточки, модалки, таблицы */
@keyframes ez-slide-up { from { opacity: 0; transform: translateY(12px); } to { opacity: 1; transform: translateY(0); } }
.a-slide-up { animation: ez-slide-up 0.36s cubic-bezier(.2,.8,.2,1) both; }

/* 3. Micro Lift — hover карточек/кнопок (через :hover в components.css) */
.a-lift { transition: transform var(--t-base), box-shadow var(--t-base); }
.a-lift:hover { transform: translateY(-2px); box-shadow: var(--shadow-md); }

/* 4. Spinner Rotate */
@keyframes ez-spin { to { transform: rotate(360deg); } }

/* 5. Shimmer — skeleton */
@keyframes ez-shimmer { 0% { background-position: 200% 0; } 100% { background-position: -200% 0; } }

/* 6. Marquee / Running Strip — диагональная лента процесса */
@keyframes ez-marquee {
  0% { background-position: 0 0; }
  100% { background-position: 40px 0; }
}
@keyframes ez-marquee-line {
  0% { transform: translateX(-100%); }
  100% { transform: translateX(100%); }
}

/* 7. Lock Close — замочек закрывается */
@keyframes ez-lock-shackle {
  0% { transform: translateY(-3px); }
  60% { transform: translateY(0.5px); }
  100% { transform: translateY(0); }
}
@keyframes ez-lock-pop {
  0% { transform: scale(1); }
  50% { transform: scale(1.12); }
  100% { transform: scale(1); }
}

/* 8. Pulse Dot — live-статусы */
@keyframes ez-pulse-ring {
  0% { box-shadow: 0 0 0 0 var(--c-brand-glow); }
  70% { box-shadow: 0 0 0 7px transparent; }
  100% { box-shadow: 0 0 0 0 transparent; }
}

/* 9. Progress Fill */
@keyframes ez-progress-fill { from { width: 0; } }

/* 10. Badge Appear — появление статуса */
@keyframes ez-badge-appear {
  0% { opacity: 0; transform: scale(0.6); }
  70% { transform: scale(1.06); }
  100% { opacity: 1; transform: scale(1); }
}
.a-badge-appear { animation: ez-badge-appear 0.32s cubic-bezier(.34,1.56,.64,1) both; }

/* 11. Toast Enter */
@keyframes ez-toast-enter {
  from { opacity: 0; transform: translateY(-12px) scale(0.98); }
  to { opacity: 1; transform: translateY(0) scale(1); }
}
.a-toast-enter { animation: ez-toast-enter 0.3s cubic-bezier(.2,.8,.2,1) both; }

/* 12. Drawer Slide */
@keyframes ez-drawer-slide { from { transform: translateX(100%); } to { transform: translateX(0); } }
@keyframes ez-overlay-in { from { opacity: 0; } to { opacity: 1; } }

/* доп: float / bounce / pop (осмысленные иконки) */
@keyframes ez-float { 0%,100% { transform: translateY(0); } 50% { transform: translateY(-4px); } }
@keyframes ez-bounce { 0%,100% { transform: translateY(0); } 30% { transform: translateY(-3px); } 60% { transform: translateY(-1px); } }
@keyframes ez-pop { 0% { transform: scale(0.4); opacity: 0; } 70% { transform: scale(1.12); } 100% { transform: scale(1); opacity: 1; } }
@keyframes ez-pulse { 0%,100% { opacity: 1; } 50% { opacity: 0.35; } }

@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: 0.001ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.001ms !important;
  }
}
