/* Базовые переменные и ключевые кадры */
:root {
  --bv-easing: cubic-bezier(.2,.65,.2,1);
}

@keyframes bv-floatUpFade {
  from { opacity: 0; transform: translateY(var(--bv-rise, 36px)); }
  to   { opacity: 1; transform: translateY(0); }
}

/* Состояние до старта */
.bv-reveal { opacity: 0; transform: translateY(var(--bv-rise, 36px)); will-change: opacity, transform; }

/* Играть анимацию, когда элемент отмечен и пришло время */
.bv-animate.bv-reveal { animation: bv-floatUpFade var(--bv-duration, 1.4s) var(--bv-easing) var(--bv-delay, 0ms) forwards; }

/* Дружим с «уменьшить анимацию» */
@media (prefers-reduced-motion: reduce) {
  .bv-reveal { opacity: 1; transform: none; animation: none !important; }
}
