Hero Ribbon Left — React Hero Section
Drop-in hero: the mirrored cut — copy left with a vertical eyebrow rail along its edge, three Gaussian light ribbons sweeping the right over a dot-matrix grid.

Usage
import { HeroRibbonLeft } from "@/components/HeroRibbonLeft";
export function Landing() {
return (
<section style={{ height: "max(640px, 100svh)" }}>
<HeroRibbonLeft
title="Your next big idea."
subtitle="Replace this with your own story."
primaryCta={{ label: "Get started", href: "/start" }}
secondaryCta={null}
interactive
{...{
interactive: true,
title: "Noise, combed\ninto light.",
subtitle: "Three Gaussian light ribbons sweep the right of your copy over a dot-matrix grid — the data-center aesthetic, typeset like a broadsheet."
}}
/>
</section>
);
}Implementation notes & API
Purpose: drop-in hero section — a full first screen with real, selectable DOM text (split layout) over a GPU ribbon-field background. Copy it, ship it. Mount: give the parent an explicit height (e.g. height: 100dvh or a min-height); the shell fills it and clamps its own type with container queries. Props: eyebrow, title, subtitle, primaryCta, secondaryCta, badges, scheme ("dark" | "light"), accent, plus the ribbon-field shader uniforms. Default copy is for demonstration. Supply your own content and CTA href or onClick; children replaces the content stack. Interaction: the ribbon-field background animates on its own; text and CTAs are plain DOM (WCAG AA scrim, screen-reader readable). Guardrails: WebGPU required with graceful degradation; SSR renders inert DOM; prefers-reduced-motion freezes the shader and skips the entrance animation. Do not stack two heroes on one screen.
| Property | Type | Notes / default |
|---|---|---|
title / subtitle | ReactNode | Your content; named heroes include example copy |
eyebrow | string | Optional short label |
primaryCta / secondaryCta | string | HeroCta | null | { label, href } or { label, onClick }; null hides the action |
children | ReactNode | Replaces the entire default content stack |
interactive | boolean | false in the library; enabled in this preview |
scheme | "dark" | "light" | dark |
className / style | string / CSSProperties | Applied to the hero section |
fallback | ReactNode | Content shown if the background renderer is unavailable |