crucıble

Crucible CTA

The closing call-to-action band: headline and subhead over a contained, subtle Ember rise, an Anvil-struck primary CTA beside a quiet secondary link, and a one-shot Sparks burst fired the first time the band scrolls into view (IntersectionObserver, once, skipped under reduced motion). All copy and both effects are prop-controlled.

motionpro

Installation

CLI

npx shadcn@latest add @crucible/crucible-cta

Manual — install dependencies, then copy the source

npm install motion

Props

PropTypeDefaultDescription
headlineReact.ReactNode"The floor is hot. Pour something."Band headline, rendered inside the <h2>.
subheadReact.ReactNode"Start free with 200 pours a month — no card, no cooldown."Supporting line under the headline.
primaryCtaCrucibleCtaAction{ label: "Fire the forge" }Primary call to action, rendered as the Anvil button.
secondaryCtaCrucibleCtaAction{ label: "Talk to the foundry", href: "#" }Secondary call to action, rendered as a quiet link (or button when no href is given).
embersbooleantrueRender the subtle Ember background rising inside the band.
burstbooleantrueFire a single Sparks burst the first time the band scrolls into view. Skipped entirely under reduced motion.
classNamestringExtra classes for the <section> root.
Also accepts all props of Omit<React.ComponentPropsWithoutRef<"section">, "children">they pass through to the underlying element.

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