/* Анимации — только из vMarket (styles.css): каскадное появление card-in, нажатия tap-press/tap-row,
   выезд шторки, fadeUp, softIn, волна скелетона, checkPop, badgePop, en-shake, конфетти, индикатор меню.
   prefers-reduced-motion — всё выключено. Опрос не перезапускает появление: после конца анимации
   у элемента появляется data-anim-done (слушатель в jsx/ui.jsx). */
@keyframes spinSlow { to { transform: rotate(360deg); } }
@keyframes skeletonWave { 0% { background-position: 200% 0; } 100% { background-position: -200% 0; } }
@keyframes fadeUp { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: translateY(0); } }
@keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } }
@keyframes softIn { from { opacity: 0; } to { opacity: 1; } }
@keyframes cardIn { from { opacity: 0; transform: translateY(8px); } }
@keyframes loadIn { from { opacity: 0; transform: translateY(7px); } to { opacity: 1; transform: none; } }
@keyframes skPop { from { opacity: 0; transform: scale(0.97); } to { opacity: 1; transform: scale(1); } }
@keyframes checkPop { 0% { transform: scale(0.2); opacity: 0; } 55% { transform: scale(1.18); opacity: 1; } 100% { transform: scale(1); opacity: 1; } }
@keyframes badgePop { 0% { transform: scale(0.6) translateY(-2px); opacity: 0; } 60% { transform: scale(1.12); opacity: 1; } 100% { transform: scale(1); opacity: 1; } }
@keyframes enShake { 0%, 100% { transform: translateX(0); } 20% { transform: translateX(-3px); } 40% { transform: translateX(3px); } 60% { transform: translateX(-2px); } 80% { transform: translateX(2px); } }
@keyframes sheetUp { from { transform: translateY(100%); } to { transform: translateY(0); } }
@keyframes backdropFade { from { opacity: 0; } to { opacity: 1; } }
@keyframes confettiBurst {
  0% { transform: translate(-50%, -50%) rotate(0); opacity: 1; }
  100% { transform: translate(calc(-50% + var(--dx)), calc(-50% + var(--dy))) rotate(var(--rot)); opacity: 0; }
}
@keyframes tabIcoPop { 0% { transform: translateY(0) scale(1); } 36% { transform: translateY(-4px) scale(1.2); } 68% { transform: translateY(0) scale(0.95); } 100% { transform: translateY(0) scale(1); } }
@keyframes tabIcoGlow { 0% { opacity: 0; transform: scale(0.45); } 28% { opacity: 1; transform: scale(1); } 100% { opacity: 0; transform: scale(1.55); } }
@keyframes dotPulse { 0% { box-shadow: 0 0 0 0 var(--green-soft); } 70% { box-shadow: 0 0 0 8px transparent; } 100% { box-shadow: 0 0 0 0 transparent; } }

/* каскадное появление: --d = индекс × 40 мс */
.card-in { animation: cardIn 0.44s cubic-bezier(0.16, 1, 0.3, 1) backwards; animation-delay: var(--d, 0s); }
.load-in { animation: loadIn 0.5s cubic-bezier(0.16, 1, 0.3, 1); }
.anim-fade-up { animation: fadeUp 0.55s cubic-bezier(0.16, 1, 0.3, 1) both; }
.soft-in { animation: softIn 0.26s ease both; }
.sk-in { animation: softIn 0.22s ease both; }
.sk-screen { animation: fadeIn 0.2s ease both; }
.sk-screen .sk { animation: skPop 0.32s cubic-bezier(0.2, 0.7, 0.2, 1) both; }
.check-pop { animation: checkPop 0.26s cubic-bezier(0.2, 0.9, 0.3, 1.2) both; }
.badge-pop { animation: badgePop 0.34s cubic-bezier(0.2, 0.9, 0.3, 1.2) backwards; }
.en-shake { animation: enShake 0.4s ease; }
.card-in[data-anim-done], .load-in[data-anim-done], .badge-pop[data-anim-done], .anim-fade-up[data-anim-done] { animation: none; }

/* нажатие */
.tap-press { transition: transform 0.13s cubic-bezier(0.3, 1.4, 0.45, 1), background 0.15s; cursor: pointer; }
.tap-press:active { transform: scale(0.965); }
.tap-row { transition: background 0.16s ease; cursor: pointer; }
.tap-row:active { background: var(--accent-soft); }

/* страница открыта в фоне — не оставлять содержимое невидимым */
html.no-entrance-anim .card-in, html.no-entrance-anim .load-in, html.no-entrance-anim .anim-fade-up,
html.no-entrance-anim .soft-in, html.no-entrance-anim .sk-in, html.no-entrance-anim .badge-pop,
html.no-entrance-anim .sk-screen, html.no-entrance-anim .sk-screen .sk {
  animation: none !important; opacity: 1 !important; transform: none !important;
}

@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { animation-duration: 0.01ms !important; animation-iteration-count: 1 !important; transition-duration: 0.01ms !important; }
  .card-in, .load-in, .anim-fade-up, .soft-in, .badge-pop, .check-pop, .tab-ico.anim, .tab-ico.anim::before { animation: none !important; }
  .tap-press:active { transform: none; }
}
