/* скрытое изначальное состояние */
.anim-text {
  opacity: 0;
  transform: translateX(-60px) scale(0.98);
  will-change: transform, opacity;
}

/* класс, который запускает анимацию */
.anim-text.in-view {
  animation: slideInLeft 0.6s cubic-bezier(.2,1,.3,1) forwards;
  animation-delay: var(--delay, 0s);
}

/* ключевые кадры — энергичный заезд с небольшим отскоком */
@keyframes slideInLeft {
  0%   { opacity: 0; transform: translateX(-60px) scale(0.98); }
  60%  { opacity: 1; transform: translateX(10px)  scale(1.02); }
  100% { opacity: 1; transform: translateX(0)   scale(1); }
}

/* отключаем анимацию на тач‑устройствах (по желанию) */
@media (hover: none), (pointer: coarse) {
  .anim-text { opacity: 1; transform: none; animation: none; }
}