Call-to-action band
Full-width band with one sentence, one line of support, and one action. Accent or quiet surface tone.
id cta-band · revision 48a6cab1e6ab · catalogue 0.1.0
Preview
What this style doesn't cover
- Inter isn't loaded by this package. It shows only where the font is installed; elsewhere the stack falls back to ui-sans-serif, system-ui, sans-serif.
Hover and keyboard focus
The component's own hover and focus styles, switched on for every link and button at once so you can see them without a mouse. In the previews above they work as usual.
Copy it
These two files are exactly what the previews above render. The MCP tool get_component returns the same files.
- Save CtaBand.tsx with your components and styles/neat-harbor.css with your styles.
- Import styles/neat-harbor.css once, after @import "tailwindcss" in your global stylesheet.
- Make sure Tailwind scans the folder that holds the component.
- For dark mode, set data-theme="dark" on the <html> element.
components/CtaBand.tsx
export interface CtaBandProps {
title?: string;
body?: string;
action?: { label: string; href: string };
/** accent fills the band with the accent color; surface keeps it quiet. */
tone?: "accent" | "surface";
}
const focusRing =
"focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[color:var(--nl-focus)]";
/**
* A full-width band with one sentence and one action. Use the accent tone once
* per page at most.
*/
export function CtaBand({
title = "Your next release note is already half written.",
body = "Connect a repository and see the first draft in a few minutes.",
action = { label: "Start a trial", href: "#start" },
tone = "accent",
}: CtaBandProps) {
const accent = tone === "accent";
return (
<section
className={`px-6 py-[var(--nl-section-y)] font-[family-name:var(--nl-font-sans)] ${
accent
? "bg-[color:var(--nl-accent)] text-[color:var(--nl-accent-ink)]"
: "border-y border-[color:var(--nl-line)] bg-[color:var(--nl-surface)] text-[color:var(--nl-ink)]"
}`}
>
<div className="mx-auto flex max-w-6xl flex-col items-start justify-between gap-8 md:flex-row md:items-end">
<div className="max-w-2xl">
<h2 className="text-balance font-[family-name:var(--nl-font-display)] text-3xl font-semibold sm:text-4xl">{title}</h2>
<p className={`mt-4 text-lg ${accent ? "opacity-90" : "text-[color:var(--nl-muted)]"}`}>{body}</p>
</div>
<a
href={action.href}
className={`shrink-0 rounded-[var(--nl-radius)] px-6 py-3 font-medium ${
accent
? "bg-[color:var(--nl-accent-ink)] text-[color:var(--nl-accent)] hover:opacity-90"
: "bg-[color:var(--nl-accent)] text-[color:var(--nl-accent-ink)] hover:opacity-90"
} ${focusRing}`}
>
{action.label}
</a>
</div>
</section>
);
}
styles/neat-harbor.css
/* Neat Labs theme "harbor" (revision 99a4282efae6) for cta-band (revision 48a6cab1e6ab), catalogue 0.1.0. */
:root {
--nl-surface: #FFFFFF;
--nl-ink: #0E1726;
--nl-muted: #4A5568;
--nl-line: #D8DEE8;
--nl-accent: #1D4ED8;
--nl-accent-ink: #FFFFFF;
--nl-focus: #0369A1;
--nl-font-display: "Inter", ui-sans-serif, system-ui, sans-serif;
--nl-font-sans: "Inter", ui-sans-serif, system-ui, sans-serif;
--nl-radius: 12px;
--nl-section-y: 112px;
}
[data-theme="dark"] {
--nl-surface: #121B2E;
--nl-ink: #E6EDF7;
--nl-muted: #9AA8BD;
--nl-line: #24324A;
--nl-accent: #60A5FA;
--nl-accent-ink: #0B1220;
--nl-focus: #7DD3FC;
}
MCP tool call
{
"name": "get_component",
"arguments": {
"id": "cta-band",
"style": "harbor"
}
}