Widening Horizon Hero

Twelve rooms on Paros

Ahorizonyoucankeepforaweek.

Come for the light at the edge of the pool, stay for how slowly everything else moves.

An infinity pool meeting the sea at dusk with two loungers and olive trees
The sea pool, a little after eightOstria Cove, Paros
About this block

Widening Horizon HeroPRO

A centred hotel hero with a serif headline, a short line and two pills above a panoramic photograph that begins as a framed picture with soft corners and, as it scrolls towards the middle of the screen, widens edge to edge while the view eases back from a slight zoom, finished with two quiet captions.

Hotel22: Widening Horizon Hero

A centered serif headline and two pills sit above a panoramic photograph that starts inset with rounded corners and, as you scroll it toward the middle of the screen, widens to the full page width while easing back from a slight zoom.

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.

Upgrade Now

Installation

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

bash
npx shadcn add "https://beste.dev/r/hotel22?email=YOUR_EMAIL&license_key=YOUR_KEY"

Base UI flavor

bash
npx shadcn add "https://beste.dev/r-base/hotel22?email=YOUR_EMAIL&license_key=YOUR_KEY"

This installs the block to components/beste/block/hotel22.tsx plus the button22 sliding-marker pill for the buttons and the text1 word stagger for the headline.

Quick start

The installed file exports hotel22Demo alongside the block: the exact props behind the preview above. Spread it to get a working section in one line.

tsx
import { Hotel22, hotel22Demo } from "@/components/beste/block/hotel22";

export default function Page() {
  return <Hotel22 {...hotel22Demo} />;
}

Then replace the demo with your own props. Written out, a trimmed setup looks like this:

tsx
import { Hotel22 } from "@/components/beste/block/hotel22";

export default function Page() {
  return (
    <Hotel22
      eyebrow="Twelve rooms on Paros"
      heading="A horizon you can keep for a week."
      description="Come for the light at the edge of the pool, stay for how slowly everything else moves."
      buttons={[
        { label: "Book a stay", href: "/book", tone: "dark" },
        { label: "See the rooms", href: "/rooms", tone: "outline" },
      ]}
      image={{
        src: "https://oud.pics/b/hotel/ostria-pool-dusk.webp",
        alt: "An infinity pool meeting the sea at dusk",
      }}
      captions={{ left: "The sea pool, a little after eight", right: "Ostria Cove, Paros" }}
    />
  );
}

Props

PropTypeDefaultDescription
eyebrowstring–Small line above the heading
headingstring–Serif <h1>, staggered word by word through Text1
descriptionstring–Paragraph under the heading
buttonsActionButton[][]Pill actions under the copy
imageImage–The panoramic photograph; the whole band is omitted without it
captionsCaptions–Two small captions under the photograph
classNamestring–Extra classes for the outer <section>
ts
type ActionButton = {
  label: string;
  href: string;
  tone?: "primary" | "light" | "dark" | "outline";
};

type Image = {
  src: string;
  alt: string;
};

type Captions = {
  left?: string;
  right?: string;
};

Behavior notes

  • The widening is a scroll-linked clip-path: from when the band's top enters the viewport until its center reaches the viewport center, the side insets go from 12 percent to 0 and the corner radius from 6px to 0, while the image scales from 1.18 to 1.
  • The photo fades in from a 24px blur only after it has loaded (a cached image is detected on mount), so a slow image never pops in sharp.
  • The copy fades up from a blur in sequence after the headline, with the delays timed off the heading's word count; the photo band follows shortly after.
  • Captions fade in once when they scroll into view, spread to the left and right edges of a max-w-7xl container.
  • The photo is 4:5 on phones, 16:9 from the small breakpoint and 21:9 from the large breakpoint.
  • With reduced motion the photo stays full width with 6px rounded corners and no zoom, and the entrance fades are skipped.

More Hotel blocks

View all Hotel
PRO

hotel36

Portrait Film Split Hero

PRO

hotel35

Watch the Film Hero

PRO

hotel2

Day in Four Hours Hero

Get Pro