CTA 6
Framed CTA banner over a tokenized gradient surface: an eyebrow label, a serif headline with an italic emphasis, short sub-copy, and a primary action button with a motion reveal.
Preview
Installation
npx shadcn@latest add https://hirael.com/r/cta-06.jsonCode
components/blocks/cta-06.tsx
"use client";
import * as React from "react";
import { GitBranch } from "lucide-react";
import { motion } from "motion/react";
import { Button } from "@/registry/hirael/ui/button";
export default function Cta06() {
return (
<section data-slot="cta" className="bg-background px-4 py-12 md:px-6">
<div className="mx-auto w-full max-w-6xl rounded-xl border border-border bg-muted/20 p-2">
<div className="relative min-h-72 w-full overflow-hidden rounded-lg border border-border bg-card sm:h-80">
<div
aria-hidden
data-slot="cta-surface"
className="pointer-events-none absolute inset-0"
style={{
backgroundImage:
"radial-gradient(120% 120% at 0% 0%, color-mix(in oklch, var(--primary) 16%, transparent), transparent 55%), radial-gradient(100% 100% at 100% 100%, color-mix(in oklch, var(--foreground) 8%, transparent), transparent 60%)",
}}
/>
<div
aria-hidden
className="pointer-events-none absolute inset-0 opacity-[0.4] mix-blend-overlay"
style={{
backgroundImage:
"repeating-linear-gradient(45deg, color-mix(in oklch, var(--foreground) 6%, transparent) 0 1px, transparent 1px 14px)",
}}
/>
<div className="relative z-10 flex h-full flex-col items-start justify-between px-4 pt-6 pb-4 sm:justify-center md:px-8">
<div className="flex flex-col items-start">
<span className="inline-flex items-center gap-2 font-mono text-[10px] uppercase tracking-[0.14em] text-muted-foreground">
<span className="size-1 rounded-full bg-foreground" />
Get started
</span>
<h2 className="mt-3 max-w-lg text-start font-serif text-3xl font-medium leading-[1.05] tracking-tight text-foreground sm:text-4xl md:text-5xl">
Ship faster without{" "}
<span className="italic">fighting your tools.</span>
</h2>
<p className="mt-3 max-w-xl text-start text-sm text-muted-foreground sm:text-base">
Connect your account, get instant insights, and start building
in minutes.
</p>
</div>
<motion.div
initial={{ opacity: 0, y: 16 }}
whileInView={{ opacity: 1, y: 0 }}
viewport={{ once: true }}
transition={{ duration: 0.4, delay: 0.15, ease: "easeOut" }}
className="mt-6 flex w-full flex-wrap items-center gap-3"
>
<Button
asChild
size="lg"
className="w-full rounded-md px-6 sm:w-auto"
>
<a href="#">
<GitBranch className="size-4" />
Get started
</a>
</Button>
<p className="font-mono text-[10px] uppercase tracking-[0.12em] text-muted-foreground">
Free to try
</p>
</motion.div>
</div>
</div>
</div>
</section>
);
}
Dependencies
shadcn registry
button
npm
lucide-reactmotion