/* Word-by-word fade + slide-up + blur reveal, used across every page. */
.reveal-word {
    display: inline-block;
    opacity: 0;
    transform: translateY(14px);
    filter: blur(6px);
    will-change: transform, opacity, filter;
}
.reveal-word.run {
    animation: wordRevealIn 0.5s cubic-bezier(0.16, 1, 0.3, 1) forwards;
}
@keyframes wordRevealIn {
    to {
        opacity: 1;
        transform: translateY(0);
        filter: blur(0);
    }
}

/* Respect users who've asked for less motion */
@media (prefers-reduced-motion: reduce) {
    .reveal-word {
        opacity: 1 !important;
        transform: none !important;
        filter: none !important;
        animation: none !important;
    }
}

/* Simple fade + slight rise + blur, for supporting text, media, and buttons.
   Lighter than the word-by-word heading reveal: one unit, no stagger. */
.js [data-rise] {
    opacity: 0;
    transform: translateY(16px);
    filter: blur(5px);
    transition: opacity 0.7s ease, transform 0.7s cubic-bezier(0.16, 1, 0.3, 1), filter 0.7s ease;
}
.js [data-rise].is-in {
    opacity: 1;
    transform: none;
    filter: blur(0);
}

@media (prefers-reduced-motion: reduce) {
    .js [data-rise] {
        opacity: 1 !important;
        transform: none !important;
        filter: none !important;
        transition: none !important;
    }
}
