/* =====================================================================
   Универсальная система scroll-анимаций.
   Разметка: class="anim anim--<тип>" [+ style="--anim-delay: .15s"].
   JS (assets/js/animations.js) добавляет .is-inview через IntersectionObserver —
   до этого момента элемент в начальном (скрытом/смещённом) состоянии.
   ===================================================================== */

.anim {
    opacity: 0;
    transition: opacity 0.7s cubic-bezier(0.22, 1, 0.36, 1), transform 0.7s cubic-bezier(0.22, 1, 0.36, 1);
    transition-delay: var(--anim-delay, 0s);
    will-change: opacity, transform;
}
.anim.is-inview {
    opacity: 1;
    transform: none;
}

.anim--fade-up {
    transform: translateY(48px);
}
.anim--fade-down {
    transform: translateY(-48px);
}
.anim--fade-left {
    transform: translateX(-56px);
}
.anim--fade-right {
    transform: translateX(56px);
}
.anim--zoom {
    transform: scale(0.9);
}
.anim--rotate {
    transform: rotate(-5deg) scale(0.94);
}

@media (prefers-reduced-motion: reduce) {
    .anim {
        opacity: 1;
        transform: none;
        transition: none;
    }
}

/* ===== Общие ховер-эффекты для карточек/картинок ===== */

.hover-lift {
    transition: transform 0.3s ease, box-shadow 0.3s ease;
}
.hover-lift:hover {
    transform: translateY(-8px);
    box-shadow: 0 16px 32px rgba(0, 0, 0, 0.28);
}

.hover-zoom {
    overflow: hidden;
}
.hover-zoom img,
.hover-zoom video,
img.hover-zoom,
video.hover-zoom {
    transition: transform 0.5s ease;
}
.hover-zoom:hover img,
.hover-zoom:hover video,
img.hover-zoom:hover,
video.hover-zoom:hover {
    transform: scale(1.06);
}

.hover-tilt {
    transition: transform 0.3s ease;
}
.hover-tilt:hover {
    transform: rotate(-1.5deg) scale(1.02);
}
