Skip to content
6

Hero 3

Editorial centered hero on a faded grid, with a serif headline, sub-copy, dual CTA and a logo cloud of customer wordmarks.

Preview

Installation

npx shadcn@latest add https://hirael.com/r/hero-03.json

Code

components/blocks/hero-03.tsx
'use client';

import { ArrowRight, Compass, Dna, Gem, ShieldCheck, Sun } from 'lucide-react';

import { Button } from '@/registry/hirael/bases/radix/ui/button';

const LOGOS = [
  { name: 'Helix', icon: Dna },
  { name: 'Northwind', icon: Compass },
  { name: 'Vanta', icon: ShieldCheck },
  { name: 'Quartz', icon: Gem },
  { name: 'Lumen', icon: Sun },
] as const;

const Hero03 = () => {
  return (
    <section data-slot="hero" className="relative isolate overflow-hidden bg-background">
      <div
        aria-hidden
        className="pointer-events-none absolute inset-0 -z-10 opacity-30 [mask-image:radial-gradient(ellipse_at_center,black_20%,transparent_72%)]"
        style={{
          backgroundImage:
            'linear-gradient(to right, var(--border) 1px, transparent 1px), linear-gradient(to bottom, var(--border) 1px, transparent 1px)',
          backgroundSize: '64px 64px',
        }}
      />
      <div
        aria-hidden
        className="pointer-events-none absolute inset-x-0 top-0 -z-10 h-px"
        style={{
          background: 'linear-gradient(to right, transparent, var(--primary) 50%, transparent)',
        }}
      />
      {/* Three orbs rather than one grey one: the grid alone left the section
          reading as bare background in both themes. */}
      <div
        aria-hidden
        className="pointer-events-none absolute -top-40 left-1/2 -z-10 size-130 -translate-x-1/2 rounded-full opacity-25 blur-3xl"
        style={{ background: 'var(--primary)' }}
      />
      <div
        aria-hidden
        className="pointer-events-none absolute -start-24 top-40 -z-10 size-96 rounded-full opacity-20 blur-3xl"
        style={{ background: 'var(--accent-cool)' }}
      />
      <div
        aria-hidden
        className="pointer-events-none absolute -end-24 bottom-0 -z-10 size-96 rounded-full opacity-15 blur-3xl"
        style={{ background: 'var(--warm)' }}
      />

      <div className="mx-auto flex w-full max-w-4xl flex-col items-center gap-8 px-6 py-24 text-center md:px-10 lg:py-32">
        <span className="inline-flex items-center gap-2 rounded-full border border-border bg-card/70 px-3.5 py-1.5 font-mono text-[10px] uppercase tracking-[0.14em] text-muted-foreground backdrop-blur-sm">
          Since 2021 · One calm workspace
        </span>

        <h1 className="max-w-3xl font-serif text-5xl font-medium leading-[1.02] tracking-tight sm:text-6xl md:text-7xl">
          Software that respects your time.
        </h1>

        <p className="max-w-xl text-base leading-relaxed text-muted-foreground sm:text-lg">
          Plan, build, and ship from one workspace your whole team will actually enjoy using. No tab sprawl, no
          busywork.
        </p>

        <div className="flex flex-col items-center gap-3 sm:flex-row">
          <Button asChild size="lg" className="group h-12 rounded-full px-7 text-base">
            <a href="#">
              Start free
              <ArrowRight className="size-4 transition-transform duration-300 group-hover:translate-x-0.5 rtl:rotate-180 rtl:group-hover:-translate-x-0.5" />
            </a>
          </Button>
          <Button asChild size="lg" variant="outline" className="h-12 rounded-full px-7 text-base">
            <a href="#">Book a demo</a>
          </Button>
        </div>

        <div className="mt-12 flex w-full flex-col items-center gap-5">
          <p className="font-mono text-[10px] uppercase tracking-[0.16em] text-muted-foreground">Trusted by teams at</p>
          <div className="flex flex-wrap items-center justify-center gap-x-10 gap-y-4">
            {LOGOS.map((logo) => (
              <span
                key={logo.name}
                className="inline-flex items-center gap-2 text-sm font-medium text-muted-foreground transition-colors hover:text-foreground"
              >
                <logo.icon aria-hidden className="size-4" />
                {logo.name}
              </span>
            ))}
          </div>
        </div>
      </div>
    </section>
  );
};

export default Hero03;

Dependencies

shadcn registry

button

npm

lucide-react