/* Scroll reveal animations — shared across all pages */

@media (prefers-reduced-motion: no-preference) {
    :root {
        --reveal-ease: cubic-bezier(0.16, 1, 0.3, 1);
        --reveal-duration: 0.9s;
        --reveal-offset: 2.25rem;
        --reveal-blur: 5px;
    }

    .reveal-text,
    .reveal-up,
    .reveal-down,
    .reveal-left,
    .reveal-right,
    .reveal-scale,
    .reveal-fade,
    .reveal-blur,
    .reveal-stagger > * {
        will-change: opacity, transform, filter;
    }

    .reveal-text,
    .reveal-up {
        opacity: 0;
        transform: translate3d(0, var(--reveal-offset), 0);
        filter: blur(var(--reveal-blur));
        transition:
            opacity var(--reveal-duration) var(--reveal-ease),
            transform var(--reveal-duration) var(--reveal-ease),
            filter calc(var(--reveal-duration) * 0.7) var(--reveal-ease);
    }

    .reveal-down {
        opacity: 0;
        transform: translate3d(0, calc(var(--reveal-offset) * -0.75), 0);
        filter: blur(var(--reveal-blur));
        transition:
            opacity var(--reveal-duration) var(--reveal-ease),
            transform var(--reveal-duration) var(--reveal-ease),
            filter calc(var(--reveal-duration) * 0.7) var(--reveal-ease);
    }

    .reveal-left {
        opacity: 0;
        transform: translate3d(calc(var(--reveal-offset) * -1), 0, 0);
        filter: blur(4px);
        transition:
            opacity var(--reveal-duration) var(--reveal-ease),
            transform var(--reveal-duration) var(--reveal-ease),
            filter calc(var(--reveal-duration) * 0.7) var(--reveal-ease);
    }

    .reveal-right {
        opacity: 0;
        transform: translate3d(var(--reveal-offset), 0, 0);
        filter: blur(4px);
        transition:
            opacity var(--reveal-duration) var(--reveal-ease),
            transform var(--reveal-duration) var(--reveal-ease),
            filter calc(var(--reveal-duration) * 0.7) var(--reveal-ease);
    }

    .reveal-scale {
        opacity: 0;
        transform: scale(0.94) translate3d(0, 1rem, 0);
        filter: blur(4px);
        transition:
            opacity var(--reveal-duration) var(--reveal-ease),
            transform var(--reveal-duration) var(--reveal-ease),
            filter calc(var(--reveal-duration) * 0.7) var(--reveal-ease);
    }

    .reveal-fade {
        opacity: 0;
        transform: none;
        filter: none;
        transition: opacity var(--reveal-duration) var(--reveal-ease);
    }

    .reveal-blur {
        opacity: 0;
        filter: blur(12px);
        transform: translate3d(0, 1rem, 0);
        transition:
            opacity var(--reveal-duration) var(--reveal-ease),
            transform var(--reveal-duration) var(--reveal-ease),
            filter calc(var(--reveal-duration) * 0.85) var(--reveal-ease);
    }

    .reveal-text.is-visible,
    .reveal-up.is-visible,
    .reveal-down.is-visible,
    .reveal-left.is-visible,
    .reveal-right.is-visible,
    .reveal-scale.is-visible,
    .reveal-fade.is-visible,
    .reveal-blur.is-visible {
        opacity: 1;
        transform: none;
        filter: blur(0);
    }

    .reveal-scale.is-visible {
        transform: scale(1) translate3d(0, 0, 0);
    }

    /* Staggered children */
    .reveal-stagger > * {
        opacity: 0;
        transform: translate3d(0, 1.75rem, 0);
        filter: blur(5px);
        transition:
            opacity var(--reveal-duration) var(--reveal-ease),
            transform var(--reveal-duration) var(--reveal-ease),
            filter calc(var(--reveal-duration) * 0.7) var(--reveal-ease);
    }

    .reveal-stagger.is-visible > * {
        opacity: 1;
        transform: translate3d(0, 0, 0);
        filter: blur(0);
    }

    .reveal-stagger.is-visible > *:nth-child(1)  { transition-delay: 0.04s; }
    .reveal-stagger.is-visible > *:nth-child(2)  { transition-delay: 0.1s; }
    .reveal-stagger.is-visible > *:nth-child(3)  { transition-delay: 0.16s; }
    .reveal-stagger.is-visible > *:nth-child(4)  { transition-delay: 0.22s; }
    .reveal-stagger.is-visible > *:nth-child(5)  { transition-delay: 0.28s; }
    .reveal-stagger.is-visible > *:nth-child(6)  { transition-delay: 0.34s; }
    .reveal-stagger.is-visible > *:nth-child(7)  { transition-delay: 0.4s; }
    .reveal-stagger.is-visible > *:nth-child(8)  { transition-delay: 0.46s; }
    .reveal-stagger.is-visible > *:nth-child(9)  { transition-delay: 0.52s; }
    .reveal-stagger.is-visible > *:nth-child(10) { transition-delay: 0.58s; }
    .reveal-stagger.is-visible > *:nth-child(11) { transition-delay: 0.64s; }
    .reveal-stagger.is-visible > *:nth-child(12) { transition-delay: 0.7s; }

    [data-reveal-delay] {
        transition-delay: calc(var(--reveal-delay, 0) * 1ms) !important;
    }
}

@media (prefers-reduced-motion: reduce) {
    .reveal-text,
    .reveal-up,
    .reveal-down,
    .reveal-left,
    .reveal-right,
    .reveal-scale,
    .reveal-fade,
    .reveal-blur,
    .reveal-stagger > * {
        opacity: 1 !important;
        transform: none !important;
        filter: none !important;
        transition: none !important;
    }
}
