/* ==========================================================================
   Palistory — shared scroll-reveal + tasteful hover motion
   Layout-safe: only animates opacity / transform on reveal and scales images
   *inside* their existing fixed frames. Never repositions or resizes layout.
   ========================================================================== */

/* --- Scroll reveal ------------------------------------------------------- */
[data-reveal] {
    opacity: 0;
    transform: translateY(45px);
    transition: opacity 0.8s cubic-bezier(0.16, 1, 0.3, 1),
                transform 0.8s cubic-bezier(0.16, 1, 0.3, 1);
    will-change: opacity, transform;
}
[data-reveal].is-visible {
    opacity: 1;
    transform: none;
}

/* Reveal variants (opt-in via data-reveal="left|right|zoom") */
[data-reveal="left"]  { transform: translateX(-45px); }
[data-reveal="right"] { transform: translateX(45px); }
[data-reveal="zoom"]  { transform: translateY(24px) scale(0.96); }
[data-reveal="left"].is-visible,
[data-reveal="right"].is-visible,
[data-reveal="zoom"].is-visible { transform: none; }

/* --- Image hover zoom (layout-safe) -------------------------------------
   Only the <img> scales, clipped by its already-overflow:hidden frame.
   We add overflow:hidden defensively in case a frame doesn't set it. */
.box-thumb,
.team-img,
.gallery-thumb,
.gallery-box,
.blog-img,
.event-img,
[data-zoom] {
    overflow: hidden;
}
.box-thumb img,
.team-img img,
.gallery-thumb img,
.gallery-box img,
.blog-img img,
.event-img img,
[data-zoom] img {
    transition: transform 0.6s cubic-bezier(0.16, 1, 0.3, 1);
    will-change: transform;
}
.box-thumb:hover img,
.team-img:hover img,
.gallery-thumb:hover img,
.gallery-box:hover img,
.blog-img:hover img,
.event-img:hover img,
[data-zoom]:hover img {
    transform: scale(1.06);
}

/* --- Gentle card lift on hover ------------------------------------------ */
[data-lift] {
    transition: transform 0.4s cubic-bezier(0.16, 1, 0.3, 1),
                box-shadow 0.4s cubic-bezier(0.16, 1, 0.3, 1);
    will-change: transform;
}
[data-lift]:hover {
    transform: translateY(-6px);
    box-shadow: 0 18px 40px -18px rgba(0, 0, 0, 0.35);
}

/* --- Respect reduced-motion --------------------------------------------- */
@media (prefers-reduced-motion: reduce) {
    [data-reveal] {
        opacity: 1 !important;
        transform: none !important;
        transition: none !important;
    }
    .box-thumb img, .team-img img, .gallery-thumb img, .gallery-box img,
    .blog-img img, .event-img img, [data-zoom] img,
    [data-lift] {
        transition: none !important;
    }
    .box-thumb:hover img, .team-img:hover img, .gallery-thumb:hover img,
    .gallery-box:hover img, .blog-img:hover img, .event-img:hover img,
    [data-zoom]:hover img { transform: none !important; }
    [data-lift]:hover { transform: none !important; box-shadow: none !important; }
}
