Skip to content

Bloom art

Bloom Art is not the same surface as a bloom backdrop. A bloom backdrop is a flat gradient (see Blooms). Bloom Art is a composed painterly orb — five canonical variants — used as the visual top of .value-card on marketing and as the bloom backdrop behind chat-result mocks in app.

Three bloom surfaces — at a glance

Display only
no veil
01 · raw gradient — `.bloom-peach`
Body legible — AA at 14 px

Running prose reads cleanly. The veil drops the saturation enough for ink contrast without flattening the bloom.

with veil
02 · `--paper-42` veil over gradient
bloom art
03 · composed SVG — `<BloomArt variant={1} />`

The third column above is Bloom Art. The first two are gradient backdrops (no-veil / with-veil). Different primitives, different legibility contracts.

Anatomy of a Bloom Art variant

Each variant carries:

  1. Sky background
  2. Multi-wash radial ellipses (motion-blurred)
  3. Refractive core (soft halo)
  4. Subject silhouette
  5. Motion-blurred streaks (vertical for 1, 2, 4, 5; diagonal for 3)
  6. Specular highlight
  7. Grain (fractal noise)
  8. Vignette
  9. Glass rim

All five canonical variants

01 · peach bloom
02 · teal tulip
03 · lime diagonal sweep
04 · blue/violet vertical
05 · lavender/peach corner

Variants are referenced by number in the BLOOM_VARIANTS config. Reach for a numbered variant via the BloomArt component:

import { BloomArt } from "@matter/components";

<BloomArt variant={1} />  // pink/peach sunset — ValueCard top
<BloomArt variant={2} />  // teal tulip
<BloomArt variant={3} />  // lime diagonal sweep
<BloomArt variant={4} />  // blue/violet vertical
<BloomArt variant={5} />  // lavender/peach corner

Family pairing — every family × every surface

Each row pairs a .bloom-* family (no veil → with veil) with a hue-adjacent Bloom Art variant.

No veilWith veilBloom Art.bloom-peach
.bloom-lavender
.bloom-sage
.bloom-amber

Where they ship

  • Marketing .value-card — variant 1 is the canonical hero.
  • Chat-result mocks (app) — randomized variant per result, seeded by request ID.
  • OG images — variant 3 for technical content, variant 5 for brand surfaces.

Motion

The composition itself is static SVG — no per-frame keyframes. The "motion" in the name refers to the visual language: motion-blurred streaks, motion-blurred washes (feGaussianBlur with a horizontal-strong stdDeviation).

Compose this with the m-bloom-rise keyframe from @matter/tokens/css/motion-recipes for the stream-in animation when a card appears. The keyframe stays under prefers-reduced-motion: reduce.

.bloom-art {
  animation: m-bloom-rise var(--motion-deliberate) var(--ease-standard) backwards;
}
@media (prefers-reduced-motion: reduce) {
  .bloom-art { animation: none; }
}

Source

The canonical variant config lives at packages/components/src/BloomArt/ (BLOOM_VARIANTS). Single source — the storybook, this design site, and production all read from the same object.

Reach for a numbered variant. Five variants exist by design — they're curated, not coloured.
Don't compose a new bloom orb from scratch. Propose a sixth variant in the BLOOM_VARIANTS config if a new visual language is needed.

On this page