/* BlurText — scroll-triggered word/letter reveal. Rises from below (translateY + / -> 0). */
.blur-text-word,
.blur-text-letter {
    display: inline-block;
    will-change: filter, opacity, transform;
    filter: blur(10px);
    opacity: 0;
    transform: translateY(20px);
    transition: filter 0.5s ease, opacity 0.5s ease, transform 0.5s ease;
}

.blur-text-word.is-visible,
.blur-text-letter.is-visible {
    filter: blur(0);
    opacity: 1;
    transform: translateY(0);
}

.blur-text-word {
    margin-right: 0.25em;
}

/* Gradient-text words: filter on an ancestor breaks background-clip:text in some
   browsers, so these skip the blur step and only animate opacity + position. */
.blur-text-word.blur-text-no-filter,
.blur-text-letter.blur-text-no-filter {
    filter: none;
}
