CTA

Focused call-to-action sections for the next step.

Simple sections for the moment you need someone to take the next step. Change the message and actions to fit.

Centered

A short headline, one supporting line, and two actions.

Ready to ship something that feels finished?

Drop in blocks, restyle with your tokens, and keep moving.

tsx
"use client";import { Button } from "@/components/ui/button";import { cn } from "@/lib/utils";type Cta01Props = {  className?: string;};export function Cta01({ className }: Cta01Props) {  return (    <section className={cn("@container w-full bg-background", className)}>      <div className="mx-auto flex w-full max-w-2xl flex-col items-center px-4 py-12 text-center @[32rem]:px-6 @[32rem]:py-16">        <h2 className="text-balance text-xl font-medium tracking-wide text-foreground @[32rem]:text-2xl">          Ready to ship something that feels finished?        </h2>        <p className="mt-3 max-w-md text-pretty text-sm tracking-wide text-muted-foreground">          Drop in blocks, restyle with your tokens, and keep moving.        </p>        <div className="mt-6 flex flex-wrap items-center justify-center gap-2">          <Button type="button" size="sm">            Get started          </Button>          <Button type="button" size="sm" variant="ghost">            Browse blocks          </Button>        </div>      </div>    </section>  );}

Installation

npx @arctis-sh/@arctis-sh/ui@latest add cta-01

Usage

import { Cta01 } from "@/components/blocks/cta/cta-01"
<Cta01 />

Split card

Copy on the left and actions on the right, held together in a filled card.

Start building today

Install a block, drop it in a page, and ship with your theme.

tsx
"use client";import { Button } from "@/components/ui/button";import { cn } from "@/lib/utils";type Cta02Props = {  className?: string;};export function Cta02({ className }: Cta02Props) {  return (    <section className={cn("@container w-full bg-background", className)}>      <div className="mx-auto w-full max-w-4xl px-4 py-10 @[32rem]:px-6 @[32rem]:py-14">        <div          data-slot="block-split"          className="flex flex-col gap-6 rounded-xl bg-muted p-6 @[40rem]:flex-row @[40rem]:items-center @[40rem]:justify-between @[40rem]:gap-10 @[40rem]:p-8"        >          <div className="min-w-0 max-w-md">            <h2 className="text-xl font-medium tracking-wide text-foreground @[32rem]:text-2xl">              Start building today            </h2>            <p className="mt-2 text-sm tracking-wide text-muted-foreground">              Install a block, drop it in a page, and ship with your theme.            </p>          </div>          <div className="flex shrink-0 flex-wrap items-center gap-2">            <Button type="button" size="sm">              Get started            </Button>            <Button type="button" size="sm" variant="outline">              View pricing            </Button>          </div>        </div>      </div>    </section>  );}

Installation

npx @arctis-sh/@arctis-sh/ui@latest add cta-02

Usage

import { Cta02 } from "@/components/blocks/cta/cta-02"
<Cta02 />

Subscribe

A centered signup prompt with a filled email field and subscribe button.

Stay in the loop

New blocks and release notes when they ship. No spam.

tsx
"use client";import { Button } from "@/components/ui/button";import { Input } from "@/components/ui/input";import { cn } from "@/lib/utils";type Cta03Props = {  className?: string;};export function Cta03({ className }: Cta03Props) {  return (    <section className={cn("@container w-full bg-background", className)}>      <div className="mx-auto w-full max-w-3xl px-4 py-10 @[32rem]:px-6 @[32rem]:py-14">        <div className="flex flex-col items-center text-center">          <h2 className="text-xl font-medium tracking-wide text-foreground @[32rem]:text-2xl">            Stay in the loop          </h2>          <p className="mt-2 max-w-md text-sm tracking-wide text-muted-foreground">            New blocks and release notes when they ship. No spam.          </p>          <form            className="mt-6 flex w-full max-w-md flex-col gap-2 @[32rem]:flex-row @[32rem]:items-center"            onSubmit={(event) => event.preventDefault()}          >            <Input              name="email"              type="email"              placeholder="you@company.com"              aria-label="Email"              className="h-9 min-h-9 max-h-9 flex-1 border-0 bg-muted py-0"            />            <Button              type="submit"              className="h-9 min-h-9 max-h-9 w-full shrink-0 whitespace-nowrap @[32rem]:w-auto"            >              Subscribe            </Button>          </form>        </div>      </div>    </section>  );}

Installation

npx @arctis-sh/@arctis-sh/ui@latest add cta-03

Usage

import { Cta03 } from "@/components/blocks/cta/cta-03"
<Cta03 />