Split Headline Hero

Getting paid

The invoice is written

Soft blue gradient backdrop

Payment received

$1,240.00

Bramble Health · May care plan

MethodVisa ending 4417
ReferenceSIR-4821
SettledIn 2 working days

before the room is tidied

Charges attach themselves to the appointment that produced them, so the money side of a clinic day finishes when the clinic day does.

About this block

Split Headline HeroPRO

An editorial hero that breaks its display heading across two lines and slots a square image tile floating a live payment card into the gap, with the paragraph and action landing under a hairline.

Hero166: Split Headline Hero

An editorial hero that breaks its display heading across two lines and slots a square image tile floating a live payment card into the gap, with the paragraph and action landing under a hairline.

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://ui.beste.co/r/hero166?email=YOUR_EMAIL&license_key=YOUR_KEY"

Base UI flavor

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

This installs the block to components/beste/block/hero166.tsx, the receipt3 payment piece it floats on the tile (installed to components/beste/piece/receipt3.tsx), and the badge23 and button21 components it uses for the eyebrow and the action.

Quick start

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

tsx
import { Hero166, hero166Demo } from "@/components/beste/block/hero166";

export default function Page() {
  return <Hero166 {...hero166Demo} />;
}

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

tsx
import { Hero166 } from "@/components/beste/block/hero166";
import { Receipt3 } from "@/components/beste/piece/receipt3";

export default function Page() {
  return (
    <Hero166
      badge={{ label: "Getting paid" }}
      headingLead="The invoice is written"
      headingTail="before the room is tidied"
      description="Charges attach themselves to the appointment that produced them, so the money side finishes when the clinic day does."
      button={{ label: "See how billing works", href: "/billing" }}
      media={
        <Receipt3
          status="Payment received"
          amount="$1,240.00"
          caption="Bramble Health · May care plan"
          rows={[
            { label: "Method", value: "Visa ending 4417" },
            { label: "Reference", value: "SIR-4821" },
          ]}
        />
      }
      image={{ src: "/backdrops/blue.jpg", alt: "Soft blue gradient backdrop" }}
    />
  );
}

Props

PropTypeDefaultDescription
badge{ label: string }Eyebrow above the heading, rendered through Badge23
headingLeadstringFirst line of the heading, rendered as the page h1
headingTailstringSecond line, set beside the tile at the same size
descriptionstringParagraph under the hairline, spanning two columns
button{ label: string; href: string }Single action, right-aligned from md up
mediaReactNodeLive asset on the tile, receipt3 in the demo
image{ src: string; alt: string }Backdrop behind the media tile
classNamestringExtra classes for the outer section
ts
type ActionLink = {
  label: string;
  href: string;
};

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

Behavior notes

  • The heading is split across two props on purpose. headingLead is the h1 spanning all three columns, and headingTail is a p styled identically that spans two, so the tile can sit in the gap without breaking the page into two competing headings.
  • headingTail uses flex items-end, which drops the second line to the bottom of its row so it aligns with the base of the tile beside it rather than floating at the top.
  • Because the tail is a paragraph, screen readers get one heading, not two. Only change that if the second line genuinely reads as a separate heading.
  • The action wrapper is flex items-start md:justify-end. The items-start is load-bearing: the cell is sized by the two-column paragraph beside it, and without it the button would stretch to that full height.
  • The lower row repeats the same md:grid-cols-3 rhythm as the heading row, so the paragraph lines up under the tile edge instead of running the full width.
  • The tile is a fixed band (h-64, then md:h-72) sitting in a single grid column, which is what keeps it near-square while the two heading lines take the remaining width.

More Hero blocks

View all Hero
PRO

hero112

Editorial Split Hero

Two-column studio hero with a two-tone headline, dual CTAs, tall image and a client wordmark strip.

PRO

hero143

Editorial Split Hero

A light editorial hero with an oversized display heading on the left, an offset supporting paragraph and accent button on the right, and a full-bleed image band below.

PRO

hero114

Collage Hero

Split studio hero with a two-tone headline and a four-image arranged collage.

PRO

hero121

Split Hero with Stats

Split hero with a big headline and CTA on the left, a divided vertical stat rail on the right, and a full-width wide image strip below.

PRO

hero192

Half Photo Command Hero

A full-height split install hero: text on the left with an eyebrow, a serif headline that settles in word by word, an intro, a rounded command pill that copies the install command on click and two sliding-marker pills; on the right an edge-to-edge photograph that blurs in and drifts on scroll with a small caption.

PRO

hero175

Split Portrait Hero

A light split hero: eyebrow, a serif headline settling in word by word, intro, a sliding-marker pill and a text link on the left, and a portrait photograph drifting inside its frame on the right with a frosted avatar proof card overlapping its corner, under a slowly drifting soft light.