/* Two reserved rows keep the promise and CTA still as the first line erases.
   The full first phrase remains readable without JavaScript. */
.intro h1[data-hero-headline]{line-height:1.15;min-height:2.3em}
[data-hero-phrase],[data-hero-promise]{display:block;white-space:nowrap;min-height:1.15em}
[data-hero-headline] br{display:none}
[data-hero-phrase]::after{content:'';display:inline-block;width:.035em;height:.78em;margin-left:.08em;background:currentColor;vertical-align:-.02em;opacity:0}
[data-typing-phase] [data-hero-phrase]::after{opacity:1;animation:hero-caret 1s steps(1,end) infinite}
@keyframes hero-caret{50%{opacity:0}}
@media(prefers-reduced-motion:reduce){[data-hero-phrase]::after{display:none}}
/* A fluid fallback keeps the two-line opening usable before enhancement. */
@media(max-width:760px){.intro h1[data-hero-headline]{font-size:min(clamp(26px,8.1vw,62px),calc((100vw - 64px) / var(--hero-length,19) * 1.6))}}
