/* База: скрыто до появления */
.reveal {
  opacity: 0;
  transform: translate3d(0, 18px, 0);
  transition: opacity .7s ease, transform .9s cubic-bezier(.2,.9,.2,1), filter .9s ease;
  will-change: transform, opacity;
  filter: blur(6px);
}

/* Когда элемент стал видимым */
.reveal.is-visible {
  opacity: 1;
  transform: none;
  filter: blur(0);
}

/* 1) POP: легкое увеличение + проявление */
.reveal-pop {
  opacity: 0;
  transform: scale(.96) translate3d(0, 14px, 0);
  transition: opacity .7s ease, transform .9s cubic-bezier(.2,.9,.2,1), filter .9s ease;
  filter: blur(6px);
  will-change: transform, opacity;
}
.reveal-pop.is-visible {
  opacity: 1;
  transform: scale(1) translate3d(0, 0, 0);
  filter: blur(0);
}

/* 2) RISE: плавный подъем снизу */
.reveal-rise {
  opacity: 0;
  transform: translate3d(0, 28px, 0);
  transition: opacity .7s ease, transform 1s cubic-bezier(.2,.9,.2,1), filter .9s ease;
  filter: blur(6px);
  will-change: transform, opacity;
}
.reveal-rise.is-visible {
  opacity: 1;
  transform: translate3d(0, 0, 0);
  filter: blur(0);
}

/* 3) SHRINK: "уменьшение" к норме (из чуть большего) */
.reveal-shrink {
  opacity: 0;
  transform: scale(1.04);
  transition: opacity .7s ease, transform 1s cubic-bezier(.2,.9,.2,1), filter .9s ease;
  filter: blur(6px);
  will-change: transform, opacity;
}
.reveal-shrink.is-visible {
  opacity: 1;
  transform: scale(1);
  filter: blur(0);
}

/* Уважение reduced motion */
@media (prefers-reduced-motion: reduce) {
  .reveal, .reveal-pop, .reveal-rise, .reveal-shrink {
    transition: none !important;
    transform: none !important;
    filter: none !important;
    opacity: 1 !important;
  }
}
