BloomBackdrop
Hero example
When to use
Reach for BloomBackdrop when a section needs a painterly bloom behind content — typical mounts include the marketing-site hero, the dashboard's onboarding card, and any feature-introduction surface. The pattern is "BloomBackdrop in position: absolute behind a content container in position: relative; z-index: 1." The optional veiled flag adds a frosted .bloom-veil overlay that softens the bloom so text on top stays legible without a Glass card.
Don't reach for BloomBackdrop for dense data surfaces (tables, lists). The painterly texture fights with reading. Don't use it for repeated rows either — the bloom is hero-tier; one per page is usually right.
<Section style={{ overflow: 'hidden' }}> with a <Container style={{ position: 'relative', zIndex: 1 }}> for the content.overflow: hidden on the parent. The bloom paints outside the section bounds.Anatomy
Two structural pieces:
- BloomArt instance. Positioned
absolutewithinset: 0. Thevariantprop forwards to BloomArt. - Veil overlay (optional). A
.bloom-veildiv positionedabsoluteover the bloom, with a frosted-glass treatment. Activated byveiledflag. Pure CSS — backdrop-filter blur and saturation.
The whole component is wrapped in a <div aria-hidden="true"> so the backdrop is skipped by assistive tech.
Props
| Prop | Type | Default | Description |
|---|---|---|---|
| veiled | boolean | false | — |
Also accepts BloomArtProps.
variant mirrors BloomArt's variants (1–5). veiled toggles the frosted overlay.
States
Stateless. The bloom variant and veil are configuration, not state.
Density
Density-agnostic. BloomBackdrop is hero-tier.
Themes
In dark, the bloom variants render at adjusted lightness. The veil's backdrop blur and saturation also adapt — slightly more saturation in dark to maintain perceived depth.
Tokens consumed
The veil reads --surface-veil (light) or --surface-veil-dark (dark). The bloom embeds its own gradients via BloomArt and consumes no runtime tokens.
Accessibility
- Keyboard interactions. None.
- ARIA roles and properties. Outer wrapper carries
aria-hidden="true". Children (BloomArt + veil) inherit. - Focus order. N/A.
- Screen-reader expectations. Not announced.
- Reduced motion. Static. Any motion is consumer responsibility.
- Forced colors. Bloom flattens to
Canvas. Veil disappears (backdrop-filter unsupported). - WIG rules.
aria-hiddenon the decorative wrapper (decorative-image rule). The backdrop must not interfere with foreground contrast — consumers verify text on top reads at AA against the bloom.
Do / Don't
veiled for surfaces with prose on top. The frost softens the bloom so text stays readable.veiled={false} over body copy. The painterly bloom and prose will fight.overflow: hidden on the parent Section. The bloom paints to the edges.overflow: visible. The bloom escapes the section.Recipes
This component appears in:
- Marketing-site hero blocks.
- Docs corpus recipe — onboarding cards.
Code example
import { BloomBackdrop, Container, Section } from "@matter/components";
export function OnboardingHero({ children }: { children: React.ReactNode }) {
return (
<Section style={{ overflow: "hidden", position: "relative", paddingBlock: 96 }}>
<BloomBackdrop variant={1} veiled />
<Container style={{ position: "relative", zIndex: 1 }}>
{children}
</Container>
</Section>
);
}Source
packages/components/src/BloomArtBloomArt
Painterly liquid-glass orb rendered as SVG — five canonical variants modelled on reference photographs (peach, lavender, sage, amber, peach×lavender mix). Pure decoration; place inside a sized container or pass `height` to control sizing.
Section
Vertical-rhythm wrapper for page sections — pairs with Container for max-width body content. `bloom` paints a tinted backdrop AND propagates --btn-glow to nested buttons. `glow` propagates the cascade without the painted background.