Aurora
A soft, drifting aurora glow behind your content - the hero-section backdrop. It's pure CSS
(blurred repeating gradients over a stripe texture), the wrapper sizes to whatever you put
inside it, and the PetalAurora
hook pauses the drift while the section is off-screen. prefers-reduced-motion
freezes the motion but keeps the glow.
Basic Aurora
Drop your content inside and pad it - the wrapper grows to fit. No colors
means the default palette, which auto-inverts on light backgrounds and renders natural in dark.
Ship your Phoenix app this weekend
Auth, billing, orgs and a component library that looks like you hired a designer.
Custom Colors
Pass any palette as colors
(three to six CSS colors) and the gradient is built for you, in order. Here's the same
component with three different sets.
Aurora with Content
A full call-to-action section. Slow the drift with speed
and put your buttons straight inside - there's no z-index dance to get right.
Start selling today
Everything wired up out of the box, so you can spend the weekend on the part that's yours.
Aurora Card
Set it behind cards for feature highlights. A lower opacity
keeps the glow subtle so the copy stays readable.
Build interfaces in record time with a component library and design system that agree.
Every component is server-rendered and ships almost no JavaScript by default.
Testimonial with Aurora
Flood more of the container by pushing the mask out, and you've got a testimonial section that pulls the eye without shouting.
"The aurora took our landing page from fine to the thing people mention on calls. Two attributes and it was done."
Properties
attr :id, :string, doc: "defaults to a generated id (needed by the pause-offscreen hook)"
attr :colors, :list, default: ["#3b82f6", "#a5b4fc", "#93c5fd", "#ddd6fe", "#60a5fa"], doc: "3-6 CSS colors; the gradient is built from them in order"
attr :invert, :string, default: "auto", values: ["auto", "none", "always"], doc: "auto inverts on light and not in dark; none/always force one look"
attr :speed, :string, default: "60s", doc: "duration of one drift cycle"
attr :opacity, :string, default: "0.5", doc: "strength of the glow"
attr :blur, :string, default: "10px", doc: "softness of the glow"
attr :mask_position, :string, doc: "position of the radial mask"
attr :mask_coverage, :string, doc: "coverage stops of the radial mask"
attr :class, :any, default: nil
attr :rest, :global
slot :inner_block