Full Bleed Band CTA

Turquoise shallows and a pebble beach seen from above

When you are ready, not before

Comeasyouare.Leavealittlelighter.

There is no right moment to begin and no wrong reason to reach out. The room is here on the days it is hard, and on the days it is merely Tuesday.

About this block

Full Bleed Band CTAPRO

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.

Cta97: Full Bleed Band CTA

A full-bleed closing band: a photograph drifting under an ink wash and film grain, with a centred heading that settles in word by word, a paragraph and a pair of pills over the top.

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

Base UI flavor

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

This installs the block to components/beste/block/cta97.tsx plus the button22 sliding-marker pill and the text1 word stagger it uses.

Quick start

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

tsx
import { Cta97, cta97Demo } from "@/components/beste/block/cta97";

export default function Page() {
  return <Cta97 {...cta97Demo} />;
}

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

tsx
import { Cta97 } from "@/components/beste/block/cta97";

export default function Page() {
  return (
    <Cta97
      eyebrow="When you are ready, not before"
      heading="Come as you are. Leave a little lighter."
      description="There is no right moment to begin and no wrong reason to reach out."
      buttons={[
        { label: "Reach out", href: "/contact", tone: "light" },
        { label: "Read the questions", href: "/faq", tone: "outline" },
      ]}
      image={{ src: "/photos/hills.jpg", alt: "Soft fog rolling over layered green hills" }}
    />
  );
}

Props

PropTypeDefaultDescription
eyebrowstringSmall-caps line above the heading
headingstringSection heading, rendered as an h2 through Text1
descriptionstringParagraph under the heading
buttonsActionButton[][]Pill actions; each defaults to the light tone on this dark band
image{ src: string; alt: string }Full-bleed background photograph
classNamestringExtra classes for the outer <section>
ts
type ActionButton = {
  label: string;
  href: string;
  tone?: "primary" | "light" | "dark" | "outline";
};

Behavior notes

  • Buttons fall back to the light tone rather than primary, which is the right default here: the band is dark, so an unspecified button should come out pale instead of taking the brand colour.
  • The photograph carries the widest drift in the call to action family, -16% to 16% against a 1.35 scale. A band with no rounded frame and no fixed aspect ratio can afford the travel, and the extra scale is what keeps the edges covered at both ends.
  • The grain filter takes its id from useId, so two grain surfaces on one page cannot collide on a global SVG id and end up sharing one filter.
  • Layers sit on explicit negative z-indices inside an isolate context, so the photograph, the foreground/55 wash and the grain stack correctly without any of them escaping behind the section around them.
  • The section carries text-background at its root, so everything inside inherits the pale colour and only the deliberately dimmer lines need an opacity of their own.
  • Entry uses a -15% viewport margin, later than the standard block in the set, so a band this tall is properly on screen before it starts.
  • The whole background is optional: without image the band is a plain ink surface with the wash and grain still over it.

More CTA blocks

View all CTA
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

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

cta67

Image CTA

Cinematic full-bleed image CTA with an overlaid content panel.

PRO

cta95

Parallax Panel CTA

A closing call to action on a rounded photographic panel: the photo drifts under the panel as the page scrolls, soft light and film grain sit over it, and a centred serif heading settles in word by word above the intro, a pill button, an email link and a star rating line.

PRO

cta104

Photo Button CTA

A call to action with the text above the picture: a centred serif heading that settles in word by word and an intro, then a wide rounded photograph drifting under a light scrim and film grain with a single large sliding-marker pill at its centre.

PRO

cta96

Half Photo CTA

A two-panel call to action inside one rounded frame: a soft muted panel with a serif heading that settles in word by word, an intro, a sliding-marker pill and dotted reassurances, beside a photograph that drifts inside its half as the page scrolls.