/* ============================================
   Global visual effects
   ============================================ */

/* Lenis hooks */
html.lenis { height: auto; }
.lenis.lenis-smooth { scroll-behavior: auto !important; }
.lenis.lenis-smooth [data-lenis-prevent] { overscroll-behavior: contain; }
.lenis.lenis-stopped { overflow: hidden; }

/* Grain overlay — sutil, desktop only */
body::before {
    content: '';
    position: fixed;
    inset: 0;
    pointer-events: none;
    z-index: 1;
    opacity: 0.04;
    mix-blend-mode: multiply;
    background-image: url("data:image/svg+xml;utf8,<svg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2' stitchTiles='stitch'/></filter><rect width='100%25' height='100%25' filter='url(%23n)'/></svg>");
    background-size: 200px;
}
@media (max-width: 768px) { body::before { display: none; } }

/* Reveal animation — works with [data-reveal] + IntersectionObserver */
[data-reveal] {
    opacity: 0;
    transform: translateY(20px);
    transition: opacity var(--t-slow) var(--ease-out), transform var(--t-slow) var(--ease-out);
}
[data-reveal].is-visible {
    opacity: 1;
    transform: translateY(0);
}
[data-reveal-delay="1"] { transition-delay: 80ms; }
[data-reveal-delay="2"] { transition-delay: 160ms; }
[data-reveal-delay="3"] { transition-delay: 240ms; }
[data-reveal-delay="4"] { transition-delay: 320ms; }

/* Image reveal with mask wipe */
[data-img-reveal] {
    overflow: hidden;
    position: relative;
}
[data-img-reveal] img {
    transform: scale(1.1);
    transition: transform 1.2s var(--ease-out);
}
[data-img-reveal]::after {
    content: '';
    position: absolute;
    inset: 0;
    background: var(--c-base);
    transform-origin: top;
    transition: transform 0.9s var(--ease-out);
}
[data-img-reveal].is-visible img { transform: scale(1); }
[data-img-reveal].is-visible::after { transform: scaleY(0); }

/* Reduced motion */
@media (prefers-reduced-motion: reduce) {
    *, *::before, *::after {
        animation-duration: 0.01ms !important;
        animation-iteration-count: 1 !important;
        transition-duration: 0.01ms !important;
    }
    [data-reveal] { opacity: 1; transform: none; }
    [data-img-reveal] img { transform: none; }
    [data-img-reveal]::after { display: none; }
}
