Stillwater, thermal pools and sound baths in Reykjavík
Warm pools, singing bowls and a resident cellist in the evenings, with quiet sets from Hildur Guðnadóttir on the first Sunday of every month.
A calm wellness hero over the ripple-gradient background component: the lower half of the frame is water, with soft rings of blue, teal and sand spreading from a few slow points and meeting in gentle interference, and the water fades up into the plain page color so the rings seem to rise out of the paper. Large centered type, an intro, a primary Arrow Pill and an underline link rest in the quiet upper half. Every ripple setting passes through the ripples prop, whose base color also sets the page.
A calm hero over the ripple-gradient component: the lower half is water, with soft rings spreading and meeting beneath large centered type, and the water fades up into the page color so the rings rise out of the paper.
Upgrade to Pro
Pro blocks install through the shadcn CLI with your license key and ship their full source. Docs and live previews stay open to everyone, so you can read every block's details first.
Swap YOUR_EMAIL and YOUR_KEY for the email and license key on your account. Find your license key on your account page.
Radix flavor
npx shadcn add "https://ui.beste.co/r/hero276?email=YOUR_EMAIL&license_key=YOUR_KEY"Base UI flavor
npx shadcn add "https://ui.beste.co/r-base/hero276?email=YOUR_EMAIL&license_key=YOUR_KEY"This installs the block to components/beste/block/hero276.tsx plus the ripple-gradient background and the button23 and button2 buttons it uses.
The installed file exports hero276Demo alongside the block: the exact props behind the preview above. Spread it to get a working hero in one line.
import { Hero276, hero276Demo } from "@/components/beste/block/hero276";
export default function Page() {
return <Hero276 {...hero276Demo} />;
}Then replace the demo with your own props. Written out, a trimmed setup looks like this:
import { Hero276 } from "@/components/beste/block/hero276";
export default function Page() {
return (
<Hero276
eyebrow="Stillwater, thermal pools and sound baths in Reykjavík"
heading="Let the water hold the sound."
description="Warm pools, singing bowls and a resident cellist in the evenings."
buttons={[
{ label: "Book a soak", href: "/book" },
{ label: "Visit the pools", href: "/visit" },
]}
ripples={{
colors: ["#9cc9d6", "#5fa8bf", "#e8c9a0", "#3f7f99"],
baseColor: "var(--background)",
sources: 3,
softness: 0.75,
}}
/>
);
}| Prop | Type | Default | Description |
|---|---|---|---|
eyebrow | string | – | Small line above the headline |
heading | string | – | Large centered headline, rendered as the page h1 |
description | string | – | Intro under the headline |
buttons | ActionButton[] | [] | The first renders as a primary Arrow Pill, every later one as a Button2 underline link |
ripples | Omit<RippleGradientProps, "className" | "children"> | – | Forwarded to the RippleGradient in the lower half: colors, base color, sources, frequency, speed, softness, decay, interference, intensity, saturation, grain, grain size, grain motion, transition and seed. baseColor also paints the page |
className | string | – | Extra classes for the outer <section> |
type ActionButton = {
label: string;
href: string;
};ripples.baseColor, the seam disappears into the paper.foreground, muted-foreground, primary), and the demo baseColor is var(--background) (also the fallback), so the page and the water around the rings follow light and dark mode while the ring colors stay fixed. If you set a fixed baseColor, check it against the theme's foreground.48vh.prefers-reduced-motion the copy renders without its rise and the water holds still.