crucıble

Brutal

A self-contained neo-brutalist theme preset — a flat white card with hard 3px black borders, a solid blur-free offset drop-shadow, chunky mono type, a loud accent block, a stat, a rotated corner sticker, and two buttons. Interactive blocks do the classic brutalist nudge toward their shadow on hover and press. A keyboard-operable radiogroup of accent swatches re-tokens the whole panel live; the palette is fully exposed via presets and colors. Pure CSS — reduced motion pins every block to its raised resting pose.

cssfree

Installation

CLI

npx shadcn@latest add @crucible/brutal

Props

PropTypeDefaultDescription
variantstringControlled active preset id (matches a preset's id).
defaultVariantstring"acid" (first preset)Initial preset id when uncontrolled.
onVariantChange(id: string) => voidFires with the next preset id whenever the switcher changes.
presetsBrutalPreset[]the three built-in accentsOverride the built-in preset set (chips + palettes).
colorsPartial<BrutalPalette>Token overrides merged over the active preset — makes any palette reachable.
offsetnumber6Drop-shadow offset in px — the depth of the block.
bordernumber3Border / shadow thickness in px.
pausedbooleanfalseFreeze the tactile press-nudge (also auto-frozen under reduced motion).
kickerstring"NO. 03 / SERIES"Small mono kicker above the heading.
headingstring"PRESS HARD"Chunky display heading.
descriptionstring"Hard edges, honest shadows. Pick your loud."Body line under the heading.
statValuestring"24"Big stat figure.
statLabelstring"SHIPS / DAY"Stat unit / label.
stickerstring"NEW"Small corner sticker text.
primaryLabelstring"Get it"Filled (accent) button label.
secondaryLabelstring"Later"Outline (white) button label.
labelstring"Neo-brutalist theme preset"Accessible label for the panel region.
switcherLabelstring"Accent"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.