/* Text animations – add a class (e.g. Elementor → Advanced → CSS Classes) */
:root {
    --ta-dur: .9s;
    --ta-ease: cubic-bezier(.22, 1, .36, 1);
    --ta-step: .04s;
    --ta-delay: 0s;
}
.ta-fast { --ta-dur: .6s; --ta-step: .025s; }
.ta-slow { --ta-dur: 1.4s; --ta-step: .07s; }
.ta-delay-1 { --ta-delay: .15s; }
.ta-delay-2 { --ta-delay: .3s; }
.ta-delay-3 { --ta-delay: .45s; }
.ta-delay-4 { --ta-delay: .6s; }
.ta-delay-5 { --ta-delay: .75s; }

/* ---------- Whole-block animations ---------- */
.ta-fade-up, .ta-fade, .ta-zoom, .ta-slide-left, .ta-slide-right, .ta-blur-in {
    transition: opacity var(--ta-dur) var(--ta-ease) var(--ta-delay),
                transform var(--ta-dur) var(--ta-ease) var(--ta-delay),
                filter var(--ta-dur) var(--ta-ease) var(--ta-delay);
}
html.ta-js .ta-fade-up:not(.ta-in)    { opacity: 0; transform: translate3d(0, 40px, 0); }
html.ta-js .ta-fade:not(.ta-in)       { opacity: 0; }
html.ta-js .ta-zoom:not(.ta-in)       { opacity: 0; transform: scale(.9); }
html.ta-js .ta-slide-left:not(.ta-in) { opacity: 0; transform: translate3d(-70px, 0, 0); }
html.ta-js .ta-slide-right:not(.ta-in){ opacity: 0; transform: translate3d(70px, 0, 0); }
html.ta-js .ta-blur-in:not(.ta-in)    { opacity: 0; filter: blur(14px); transform: scale(1.04); }

/* ---------- Split text (words / letters) ---------- */
.ta-w { display: inline-block; white-space: nowrap; }
.ta-wi, .ta-c { display: inline-block; }

/* Words rise one by one */
.ta-words .ta-w {
    transition: opacity var(--ta-dur) var(--ta-ease), transform var(--ta-dur) var(--ta-ease);
    transition-delay: calc(var(--ta-delay) + min(var(--i) * var(--ta-step) * 2, 2s));
}
html.ta-js .ta-words:not(.ta-in) .ta-w { opacity: 0; transform: translate3d(0, .65em, 0); }

/* Mask reveal: each word slides up from behind a line (premium agency style) */
.ta-mask .ta-w { overflow: hidden; vertical-align: top; padding-bottom: .12em; margin-bottom: -.12em; }
.ta-mask .ta-wi {
    transition: transform calc(var(--ta-dur) * 1.1) var(--ta-ease);
    transition-delay: calc(var(--ta-delay) + min(var(--i) * var(--ta-step) * 1.5, 2s));
}
html.ta-js .ta-mask:not(.ta-in) .ta-wi { transform: translate3d(0, 110%, 0); }

/* Letters pop in one by one */
.ta-chars .ta-c {
    transition: opacity var(--ta-dur) var(--ta-ease), transform var(--ta-dur) var(--ta-ease), filter var(--ta-dur) var(--ta-ease);
    transition-delay: calc(var(--ta-delay) + min(var(--i) * var(--ta-step) * .6, 2.5s));
}
html.ta-js .ta-chars:not(.ta-in) .ta-c { opacity: 0; transform: translate3d(0, .5em, 0) rotate(8deg); filter: blur(4px); }

/* Words appear out of a blur */
.ta-blur .ta-w {
    transition: opacity var(--ta-dur) ease, filter var(--ta-dur) ease, transform var(--ta-dur) var(--ta-ease);
    transition-delay: calc(var(--ta-delay) + min(var(--i) * var(--ta-step) * 2, 2s));
}
html.ta-js .ta-blur:not(.ta-in) .ta-w { opacity: 0; filter: blur(12px); transform: translate3d(0, .25em, 0); }

/* Typewriter */
.ta-typewriter .ta-c {
    transition: opacity 0s linear;
    transition-delay: calc(var(--ta-delay) + var(--i) * var(--ta-step) * 1.5);
}
html.ta-js .ta-typewriter:not(.ta-in) .ta-c { opacity: 0; }
.ta-caret {
    display: inline-block; width: .08em; height: 1em; margin-left: .06em;
    background: currentColor; vertical-align: -.1em;
    animation: ta-blink .9s steps(1) infinite;
}
@keyframes ta-blink { 50% { opacity: 0; } }

/* Scroll scrub: words light up while scrolling (Apple style) */
.ta-scrub .ta-w { opacity: .18; transition: opacity .35s ease; }
.ta-scrub .ta-w.ta-lit { opacity: 1; }

/* ---------- Text effects ---------- */

/* Animated gradient text. Colours: --ta-c1 / --ta-c2 / --ta-c3 */
.ta-gradient:not(.elementor-widget),
.ta-gradient .elementor-heading-title,
.ta-gradient .elementor-widget-container > :is(h1, h2, h3, h4, h5, h6, p, span) {
    background: linear-gradient(90deg, var(--ta-c1, #1f4d3a), var(--ta-c2, #c9a96e), var(--ta-c3, #3f7a5d), var(--ta-c1, #1f4d3a));
    background-size: 300% 100%;
    -webkit-background-clip: text;
    background-clip: text;
    -webkit-text-fill-color: transparent;
    color: transparent;
    animation: ta-gradient 7s linear infinite;
}
@keyframes ta-gradient { to { background-position: 300% 0; } }

/* Shine sweep across the text */
.ta-shine:not(.elementor-widget),
.ta-shine .elementor-heading-title,
.ta-shine .elementor-widget-container > :is(h1, h2, h3, h4, h5, h6, p, span) {
    background: linear-gradient(110deg, currentColor 40%, rgba(255, 255, 255, .95) 50%, currentColor 60%) 0 0 / 250% 100%;
    -webkit-background-clip: text;
    background-clip: text;
    -webkit-text-fill-color: transparent;
    animation: ta-shine 3.5s ease-in-out infinite;
}
@keyframes ta-shine { from { background-position: 150% 0; } to { background-position: -100% 0; } }

/* Underline that draws itself */
.ta-ul {
    background-image: linear-gradient(currentColor, currentColor);
    background-repeat: no-repeat;
    background-position: 0 100%;
    background-size: 0% .07em;
    padding-bottom: .06em;
    -webkit-box-decoration-break: clone;
    box-decoration-break: clone;
    transition: background-size calc(var(--ta-dur) * 1.3) var(--ta-ease) calc(var(--ta-delay) + .2s);
}
.ta-in .ta-ul, html:not(.ta-js) .ta-ul { background-size: 100% .07em; }

/* Highlighter marker behind the text. Colour: --ta-marker */
.ta-mk {
    background-image: linear-gradient(var(--ta-marker, rgba(201, 169, 110, .45)), var(--ta-marker, rgba(201, 169, 110, .45)));
    background-repeat: no-repeat;
    background-position: 0 88%;
    background-size: 0% 42%;
    -webkit-box-decoration-break: clone;
    box-decoration-break: clone;
    transition: background-size calc(var(--ta-dur) * 1.4) var(--ta-ease) calc(var(--ta-delay) + .25s);
}
.ta-in .ta-mk, html:not(.ta-js) .ta-mk { background-size: 100% 42%; }

@media (prefers-reduced-motion: reduce) {
    .ta-gradient *, .ta-gradient, .ta-shine *, .ta-shine { animation: none !important; }
    .ta-caret { animation: none; }
}
