crucıble

Pastel

A self-contained soft-pastel theme preset — a generously rounded card with heading, body, stat, tag, and buttons in a low-contrast candy palette over a dreamy tinted gradient, with soft shadows, drifting color orbs, and optional grain. A keyboard-operable radiogroup of hue chips (Mint / Peach / Lavender / Sky) re-tokens the whole panel live; the orbs pin to a calm static pose under reduced motion.

motionfree

Installation

CLI

npx shadcn@latest add @crucible/pastel

Manual — install dependencies, then copy the source

npm install motion

Props

PropTypeDefaultDescription
variantstringControlled active preset id (matches a preset's id).
defaultVariantstring"mint" (first preset)Initial preset id when uncontrolled.
onVariantChange(id: string) => voidFires with the next preset id whenever the switcher changes.
presetsPastelPreset[]the four built-in hue familiesOverride the built-in preset set (chips + palettes).
colorsPartial<PastelPalette>Token overrides merged over the active preset — makes any palette reachable.
speednumber1Orb-drift speed multiplier.
intensitynumber1Floating-orb opacity/presence multiplier.
pausedbooleanfalseFreeze the orbs at their resting pose.
grainbooleantrueSubtle film grain over the card.
taglinestring"Just for you"Small pill above the heading.
headingstring"Sweet spot"Rounded display heading.
descriptionstring"Soft surfaces, gentle color. Pick a hue."Body line under the heading.
statValuestring"24"Stat figure.
statLabelstring"day streak"Stat unit / label.
tagstring"cozy"Small outline tag.
primaryLabelstring"Get started"Filled button label.
secondaryLabelstring"Maybe later"Soft button label.
labelstring"Soft pastel theme preset"Accessible label for the panel region.
switcherLabelstring"Hue family"Accessible label for the switcher group.
Also accepts all props of Omit<React.ComponentPropsWithoutRef<"section">, "onChange">they pass through to the underlying element.

Honors prefers-reduced-motion with a designed static fallback, and passes className through.