Inverted Closing Band

Ready when you are

Give your team back the hour they lose every morning

Bring one clinic across and keep the rest exactly as they are. If the first fortnight does not convince the people doing the work, walk away and we will hand your data back in the shape you sent it.

No implementation fee

Migration, mapping, and the first clinic go-live are part of the subscription.

Cancel at any point

Monthly terms, no notice period, and a full export whenever you ask for one.

A named person

The same engineer stays on your account through the switch and after it.

About this block

Inverted Closing BandPRO

A full-width dark closing band with a light display heading, a paragraph, two actions, and three reassurances sitting under a hairline rule.

Cta82: Inverted Closing Band

A full-width dark closing band with a light display heading, a paragraph, two actions and three reassurances sitting under a hairline rule.

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/cta82?email=YOUR_EMAIL&license_key=YOUR_KEY"

Base UI flavor

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

This installs the block to components/beste/block/cta82.tsx plus the badge23 and button21 components it uses for the eyebrow and the actions.

Quick start

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

tsx
import { Cta82, cta82Demo } from "@/components/beste/block/cta82";

export default function Page() {
  return <Cta82 {...cta82Demo} />;
}

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

tsx
import { Cta82 } from "@/components/beste/block/cta82";

export default function Page() {
  return (
    <Cta82
      badge={{ label: "Ready when you are" }}
      heading="Give your team back the hour they lose every morning"
      description="Bring one clinic across and keep the rest exactly as they are."
      buttons={[
        { label: "Book a demo", href: "/demo" },
        { label: "Read the migration guide", href: "/docs/migration" },
      ]}
      assurances={[
        {
          title: "No implementation fee",
          description: "Migration, mapping, and the first go-live are part of the subscription.",
        },
        {
          title: "Cancel at any point",
          description: "Monthly terms, no notice period, and a full export whenever you ask.",
        },
        {
          title: "A named person",
          description: "The same engineer stays on your account through the switch and after it.",
        },
      ]}
    />
  );
}

Props

PropTypeDefaultDescription
badge{ label: string }Eyebrow above the heading, retoned for the dark surface
headingstringSection heading, capped at max-w-3xl
descriptionstringSupporting paragraph, capped at max-w-xl
buttonsActionLink[][]Actions in source order, first solid and the rest outlined
assurancesAssurance[][]Reassurance columns under the hairline
classNamestringExtra classes for the outer section
ts
type ActionLink = {
  label: string;
  href: string;
};

type Assurance = {
  title: string;
  description: string;
};

Behavior notes

  • The whole section is bg-foreground, so every text token inside is a fixed background value rather than an adaptive one. Swapping in text-foreground anywhere here would make the text vanish against the band.
  • Badge23 is retoned inline with border-background/30 text-background/70, since the component's own tones assume a light surface.
  • Button tones are positional and not overridable: the first action is primary, later ones are outline plus an extra border-background/30 so the outline reads against the dark panel. The ActionLink type deliberately has no tone field.
  • The hairline over the assurances is border-background/20, not border-border. On an inverted surface the standard border token is close to invisible.
  • The gap between the copy and the assurances is intentionally large (mt-16, then md:mt-24), which is what keeps the reassurances reading as a footer to the offer rather than as a second feature row.
  • The copy block is capped at max-w-3xl and left-aligned while the assurances run the full container width, so the band has a clear reading order rather than one centered mass.

More CTA blocks

View all CTA
PRO

cta79

Dark Contact Band

Inverted closing panel on a solid dark surface: an oversized invitation on the left, a paragraph and outline pill CTA on the right, then a ruled row of linked email, phone and studio address.

PRO

cta84

Photo Band Story CTA

A closing call to action set on a photographic panel with a directional gradient, pairing an eyebrow badge, light heading, and two actions with a live customer quote card.

PRO

cta97

Full Bleed Band CTA

An edge-to-edge photographic band whose image drifts under a dark scrim, drifting soft light and film grain, with a centred serif heading that settles in word by word, an intro and two sliding-marker pills.

PRO

cta103

Ink Band CTA

A dark ink band with film grain and no photograph: an eyebrow and a wide serif heading that settles in word by word on the left, an intro, a light sliding-marker pill and an underlined text link on the right.

PRO

cta72

Newsletter Letter Band

A monochrome newsletter CTA band pairing an oversized statement with an inline email-capture form and a reassurance note.

PRO

cta74

Centered Closing CTA

A centered call to action with an eyebrow pill, a large light heading, a short paragraph, and two accent buttons on a clean surface.