{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "testimonial-section-01",
  "title": "Testimonial Section",
  "description": "A high-contrast social proof section with customer quotes and identities.",
  "dependencies": [
    "lucide-react"
  ],
  "registryDependencies": [
    "@rivelle/utils",
    "@rivelle/avatar",
    "@rivelle/badge"
  ],
  "files": [
    {
      "path": "registry/nova/blocks/testimonial-section-01.tsx",
      "content": "import * as React from \"react\";\nimport { Quote, Sparkles } from \"lucide-react\";\n\nimport { Avatar, AvatarFallback } from \"@/components/ui/avatar\";\nimport { Badge } from \"@/components/ui/badge\";\nimport { cn } from \"@/lib/utils\";\n\nconst testimonials = [\n  {\n    quote:\n      \"Northstar replaced the weekly status meeting with a workspace people actually trust.\",\n    name: \"Mina Park\",\n    role: \"VP Product, Arc\",\n  },\n  {\n    quote:\n      \"It gives our studio structure without sanding away the way creative teams naturally work.\",\n    name: \"Jon Bell\",\n    role: \"Founder, Common\",\n  },\n  {\n    quote:\n      \"We shipped the migration in days and immediately had a clearer view of every decision.\",\n    name: \"Lena Ortiz\",\n    role: \"COO, Linear North\",\n  },\n];\n\nfunction TestimonialSection01({\n  className,\n  ...props\n}: React.ComponentProps<\"section\">) {\n  return (\n    <section\n      className={cn(\n        \"bg-foreground px-5 py-24 text-background sm:px-8 sm:py-32\",\n        className,\n      )}\n      data-slot=\"testimonial-section\"\n      id=\"customers\"\n      {...props}\n    >\n      <div className=\"mx-auto max-w-7xl\">\n        <Badge\n          className=\"border-background/15 bg-background/10 text-background\"\n          variant=\"outline\"\n        >\n          <Sparkles /> Customer stories\n        </Badge>\n        <div className=\"mt-7 flex flex-col justify-between gap-5 md:flex-row md:items-end\">\n          <h2 className=\"max-w-3xl text-balance text-4xl font-semibold tracking-[-.05em] sm:text-6xl\">\n            Trusted when the work really matters.\n          </h2>\n          <p className=\"max-w-sm text-sm leading-relaxed text-background/60\">\n            From small studios to product organizations, teams use Northstar to\n            keep context close and progress visible.\n          </p>\n        </div>\n        <div className=\"mt-14 grid gap-4 lg:grid-cols-3\">\n          {testimonials.map(({ quote, name, role }) => (\n            <figure\n              className=\"flex min-h-72 flex-col rounded-[1.75rem] border border-background/12 bg-background/[.055] p-6 sm:p-8\"\n              key={name}\n            >\n              <Quote className=\"size-6 text-primary\" />\n              <blockquote className=\"mt-8 text-balance text-xl font-medium leading-relaxed tracking-[-.025em]\">\n                “{quote}”\n              </blockquote>\n              <figcaption className=\"mt-auto flex items-center gap-3 pt-8\">\n                <Avatar>\n                  <AvatarFallback>\n                    {name\n                      .split(\" \")\n                      .map((part) => part[0])\n                      .join(\"\")}\n                  </AvatarFallback>\n                </Avatar>\n                <span>\n                  <strong className=\"block text-sm\">{name}</strong>\n                  <small className=\"text-background/55\">{role}</small>\n                </span>\n              </figcaption>\n            </figure>\n          ))}\n        </div>\n      </div>\n    </section>\n  );\n}\n\nexport { TestimonialSection01 };\n",
      "type": "registry:block"
    }
  ],
  "type": "registry:block"
}