/* ============================================================
   May Coupon — animations.css
   Все @keyframes и shared-классы анимации.
   Дублируется в web/admin/styles/animations.css.
   ============================================================ */

@keyframes shimmer {
  0%   { background-position: 200% 0; }
  100% { background-position: -200% 0; }
}

@keyframes spin {
  to { transform: rotate(360deg); }
}

@keyframes pulse-soft {
  0%, 100% { opacity: 1; transform: scale(1); }
  50%      { opacity: 0.6; transform: scale(0.85); }
}

@keyframes pulse-processing {
  0%, 100% { opacity: 1; }
  50%      { opacity: 0.6; }
}

@keyframes counter-bump {
  0%   { transform: scale(1);    color: var(--c-primary); }
  40%  { transform: scale(1.18); color: var(--c-primary-hover); }
  100% { transform: scale(1);    color: var(--c-primary); }
}

@keyframes super-counter-bump {
  0%   {
    transform: scale(1) rotate(0deg);
    filter: drop-shadow(0 0 0 transparent);
  }
  25%  {
    transform: scale(1.35) rotate(-3deg);
    filter: drop-shadow(0 0 12px var(--c-super));
  }
  50%  { transform: scale(1.2) rotate(3deg); }
  100% {
    transform: scale(1) rotate(0deg);
    filter: drop-shadow(0 0 0 transparent);
  }
}

@keyframes balance-flash {
  0%   { color: var(--c-text); transform: scale(1); }
  25%  { color: var(--c-primary); transform: scale(1.05); }
  100% { color: var(--c-text); transform: scale(1); }
}

@keyframes coupon-prepend {
  0%   { opacity: 0; transform: translateY(-12px) scale(0.96); box-shadow: none; }
  60%  { opacity: 1; transform: translateY(0) scale(1.03); box-shadow: var(--sh-glow-primary); }
  100% { opacity: 1; transform: translateY(0) scale(1);    box-shadow: none; }
}

@keyframes coupon-prepend-super {
  0%   { opacity: 0; transform: translateY(-12px) scale(0.96); box-shadow: none; }
  60%  { opacity: 1; transform: translateY(0) scale(1.06); box-shadow: var(--sh-glow-super); }
  100% { opacity: 1; transform: translateY(0) scale(1);    box-shadow: none; }
}

@keyframes toast-in {
  0%   { opacity: 0; transform: translateX(100%); }
  100% { opacity: 1; transform: translateX(0); }
}

@keyframes toast-out {
  0%   { opacity: 1; transform: translateX(0); }
  100% { opacity: 0; transform: translateX(120%); }
}

@keyframes backdrop-flash {
  0%   { opacity: 0; }
  20%  { opacity: 0.4; }
  100% { opacity: 0; }
}

@keyframes row-flash {
  0%   { background: var(--c-primary-soft); }
  100% { background: transparent; }
}

@keyframes row-flash-super {
  0%   { background: var(--c-super-soft); }
  100% { background: transparent; }
}

@keyframes fade-in {
  0%   { opacity: 0; }
  100% { opacity: 1; }
}

@keyframes fade-out {
  0%   { opacity: 1; }
  100% { opacity: 0; }
}

@keyframes modal-in {
  0%   { opacity: 0; transform: scale(0.96); }
  100% { opacity: 1; transform: scale(1); }
}

@keyframes stat-glow-pulse {
  0%, 100% { box-shadow: none; }
  50%      { box-shadow: var(--sh-glow-super); }
}

/* Reduce motion (WCAG / DESIGN §6.3) */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
    scroll-behavior: auto !important;
  }
}
