Crystalline frost grows across the headline like ice forming on glass; the cursor acts as warmth, melting frost where it passes.
import FrostedTypography from '@crazygl/hero-frosted-typography';
export default function Page() {
return (
<FrostedTypography
heading="Winter glass."
frostColor="#e6f2ff"
frostRoughness={0.6}
growDuration={2.8}
ctaLabel="Explore the collection"
/>
);
}frostColor (bright crystal highlight), frostBaseColor (cooler body tint), frostRoughness (0 = soft condensation, 1 = sharp shattered ice), frostGrowthDirection (0–360° the ridges flow along).growOnLoad, growDuration (how long the frost takes to form), growChunkiness (uniform fade vs advancing crystalline patches).heatRadius, heatStrength (how much the cursor melts), heatDecay (how fast a melted patch refreezes).particleCount, particleSize, particleSpeed for the airborne ice flecks.bgTop / bgBottom gradient, transparentBackground, plus heading, headingFontFamily, headingFontWeight, headingSize, lineSpacing, headingY.npm install @crazygl/hero-frosted-typographyThe component takes the same props you see in the live customizer on the right — every default ships poster-quality.
import FrostedTypography from '@crazygl/hero-frosted-typography';
export default function Landing() {
return (
<FrostedTypography />
);
}The wrapper renders static HTML on the server and only initialises the canvas after hydration, so search engines see your copy.
// app/page.tsx — works in SSR-first frameworks (Next, Remix, Astro, etc.)
'use client';
import FrostedTypography from '@crazygl/hero-frosted-typography';
export default function Page() {
return (
<section>
<FrostedTypography
heading="Say hi."
subheading="Your new hero."
/>
<article>
<h2>Welcome</h2>
<p>Your content keeps its own voice below the hero.</p>
</article>
</section>
);
}