Casa Lume, a cliff hotel in the Algarve
Twelve rooms cut into the cliff above Praia da Marinha, each with one arched window shaped to hold the sunset. Dinner starts when the sun touches the sea.
A warm paper hospitality hero built around one tall arched window: inside it, the horizon-gradient background component paints a dusk sky with a low sun on a hazy horizon, a shimmering trail and drifting cloud streaks, rising softly on load. The headline sits to the left of the arch and the intro, a dark Arrow Pill and an underline link to the right, anchored to the bottom; on small screens they stack around it. Every sky setting passes through the sky prop.
A hero built around one tall arched window. Inside it, the horizon-gradient component paints a dusk sky with a low sun, a hazy horizon and drifting cloud streaks, while the headline and the intro sit on either side of the arch.
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/hero271?email=YOUR_EMAIL&license_key=YOUR_KEY"Base UI flavor
npx shadcn add "https://ui.beste.co/r-base/hero271?email=YOUR_EMAIL&license_key=YOUR_KEY"This installs the block to components/beste/block/hero271.tsx plus the horizon-gradient background and the button23 and button2 buttons it uses.
The installed file exports hero271Demo alongside the block: the exact props behind the preview above. Spread it to get a working hero in one line.
import { Hero271, hero271Demo } from "@/components/beste/block/hero271";
export default function Page() {
return <Hero271 {...hero271Demo} />;
}Then replace the demo with your own props. Written out, a trimmed setup looks like this:
import { Hero271 } from "@/components/beste/block/hero271";
export default function Page() {
return (
<Hero271
eyebrow="Casa Lume, a cliff hotel in the Algarve"
heading="Every room faces the evening."
description="Twelve rooms cut into the cliff, each with one arched window shaped to hold the sunset."
buttons={[
{ label: "Book a room", href: "/book" },
{ label: "See the rooms", href: "/rooms" },
]}
sky={{
colors: ["#2a3470", "#b686b8", "#ffc68f", "#ffe2b5"],
sunColor: "#fff0d2",
sunSize: 0.55,
horizon: 0.3,
}}
/>
);
}| Prop | Type | Default | Description |
|---|---|---|---|
eyebrow | string | – | Small line above the headline |
heading | string | – | Headline left of the arch, rendered as the page h1 |
description | string | – | Intro right of the arch |
buttons | ActionButton[] | [] | The first renders as a primary Arrow Pill, every later one as a Button2 underline link |
sky | Omit<HorizonGradientProps, "className" | "children"> | – | Forwarded to the HorizonGradient component: colors, sun color, size and position, horizon, glow, haze, streaks, drift, speed, saturation, grain, transition, seed and interactive |
className | string | – | Extra classes for the outer <section> |
type ActionButton = {
label: string;
href: string;
};div with rounded-t-full and overflow-hidden, so its top is a true half circle at any width. From lg up it stretches to the full height of the hero (at least 34rem); below that it keeps a 3:4 shape between the headline and the intro.bg-background, text-foreground, a ring-border edge on the arch), while the sky inside the window keeps its own fixed palette.interactive on, the sun leans a little toward the cursor.IntersectionObserver and on hidden tabs and respects prefers-reduced-motion; the copy then renders without its rise.