{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "saas-landing-01",
  "title": "SaaS Landing",
  "description": "A complete software landing page with product hero, dashboard preview, features, proof, pricing, contact and footer.",
  "dependencies": [
    "lucide-react"
  ],
  "registryDependencies": [
    "@rivelle/utils",
    "@rivelle/avatar",
    "@rivelle/badge",
    "@rivelle/button",
    "@rivelle/card",
    "@rivelle/progress",
    "@rivelle/site-header-01",
    "@rivelle/feature-section-01",
    "@rivelle/testimonial-section-01",
    "@rivelle/pricing-01",
    "@rivelle/contact-form-01",
    "@rivelle/footer-01"
  ],
  "files": [
    {
      "path": "registry/nova/templates/saas-landing-01.tsx",
      "content": "import * as React from \"react\";\nimport {\n  ArrowRight,\n  Check,\n  Command,\n  Play,\n  Sparkles,\n  TrendingUp,\n  Users,\n} from \"lucide-react\";\n\nimport { ContactForm01 } from \"@/components/blocks/contact-form-01\";\nimport { FeatureSection01 } from \"@/components/blocks/feature-section-01\";\nimport { Footer01 } from \"@/components/blocks/footer-01\";\nimport { Pricing01 } from \"@/components/blocks/pricing-01\";\nimport { SiteHeader01 } from \"@/components/blocks/site-header-01\";\nimport { TestimonialSection01 } from \"@/components/blocks/testimonial-section-01\";\nimport { Avatar, AvatarFallback } from \"@/components/ui/avatar\";\nimport { Badge } from \"@/components/ui/badge\";\nimport { Button } from \"@/components/ui/button\";\nimport { Card, CardContent, CardHeader, CardTitle } from \"@/components/ui/card\";\nimport { Progress } from \"@/components/ui/progress\";\nimport { cn } from \"@/lib/utils\";\n\nfunction SaasLanding01({ className, ...props }: React.ComponentProps<\"div\">) {\n  return (\n    <div\n      className={cn(\"min-h-screen bg-background text-foreground\", className)}\n      data-slot=\"saas-landing-template\"\n      {...props}\n    >\n      <SiteHeader01 />\n      <main>\n        <section\n          className=\"relative overflow-hidden px-5 pb-20 pt-20 sm:px-8 sm:pb-28 sm:pt-28\"\n          id=\"top\"\n        >\n          <div className=\"absolute inset-x-0 top-0 -z-10 h-[720px] [background-image:radial-gradient(circle_at_50%_0%,color-mix(in_oklch,var(--primary)_28%,transparent),transparent_48%),linear-gradient(to_right,color-mix(in_oklch,var(--foreground)_5%,transparent)_1px,transparent_1px),linear-gradient(to_bottom,color-mix(in_oklch,var(--foreground)_5%,transparent)_1px,transparent_1px)] [background-size:auto,52px_52px,52px_52px] [mask-image:linear-gradient(to_bottom,black,transparent_90%)]\" />\n          <div className=\"mx-auto max-w-7xl\">\n            <div className=\"mx-auto max-w-4xl text-center\">\n              <Badge variant=\"secondary\">\n                <Sparkles /> The operating system for focused teams\n              </Badge>\n              <h1 className=\"mt-7 text-balance text-5xl font-semibold leading-[.97] tracking-[-.065em] sm:text-7xl lg:text-[5.4rem]\">\n                Turn ambitious plans into{\" \"}\n                <span className=\"text-primary\">visible momentum.</span>\n              </h1>\n              <p className=\"mx-auto mt-7 max-w-2xl text-balance text-base leading-relaxed text-muted-foreground sm:text-lg\">\n                Plan projects, preserve decisions and help every team move with\n                confidence in one calm, connected workspace.\n              </p>\n              <div className=\"mt-9 flex flex-col justify-center gap-3 sm:flex-row\">\n                <Button size=\"lg\">\n                  Start free <ArrowRight />\n                </Button>\n                <Button size=\"lg\" variant=\"outline\">\n                  <Play /> Watch 90-second tour\n                </Button>\n              </div>\n              <p className=\"mt-5 flex items-center justify-center gap-2 text-xs text-muted-foreground\">\n                <Check className=\"size-3.5 text-primary\" /> Free for small teams\n                · No card required\n              </p>\n            </div>\n            <div className=\"relative mx-auto mt-16 max-w-5xl rounded-[2rem] border border-foreground/10 bg-background/75 p-2 shadow-[0_50px_140px_-80px_var(--primary)] backdrop-blur-xl sm:p-4\">\n              <div className=\"overflow-hidden rounded-[1.5rem] border border-foreground/10 bg-muted/35\">\n                <div className=\"flex h-12 items-center gap-2 border-b border-foreground/8 bg-background/80 px-4\">\n                  <span className=\"size-2.5 rounded-full bg-rose-400\" />\n                  <span className=\"size-2.5 rounded-full bg-amber-400\" />\n                  <span className=\"size-2.5 rounded-full bg-emerald-400\" />\n                  <span className=\"ml-3 text-xs font-semibold text-muted-foreground\">\n                    Northstar / Product launch\n                  </span>\n                  <Command className=\"ml-auto size-4 text-muted-foreground\" />\n                </div>\n                <div className=\"grid min-h-[420px] md:grid-cols-[190px_1fr]\">\n                  <aside className=\"hidden border-r border-foreground/8 bg-background/55 p-4 md:block\">\n                    <p className=\"text-xs font-semibold\">Workspace</p>\n                    <div className=\"mt-5 space-y-2\">\n                      {[\"Overview\", \"Projects\", \"Roadmap\", \"Insights\"].map(\n                        (item, index) => (\n                          <div\n                            className={cn(\n                              \"rounded-lg px-3 py-2 text-xs font-medium text-muted-foreground\",\n                              index === 1 && \"bg-primary/10 text-primary\",\n                            )}\n                            key={item}\n                          >\n                            {item}\n                          </div>\n                        ),\n                      )}\n                    </div>\n                  </aside>\n                  <div className=\"p-5 sm:p-7\">\n                    <div className=\"flex items-start justify-between\">\n                      <div>\n                        <p className=\"text-xs font-medium text-muted-foreground\">\n                          Q3 launch\n                        </p>\n                        <h2 className=\"mt-1 text-2xl font-semibold tracking-[-.04em]\">\n                          Product momentum\n                        </h2>\n                      </div>\n                      <div className=\"flex -space-x-2\">\n                        {[\"MC\", \"JO\", \"AK\"].map((initials) => (\n                          <Avatar\n                            className=\"size-8 border-2 border-background\"\n                            key={initials}\n                          >\n                            <AvatarFallback className=\"text-[.6rem]\">\n                              {initials}\n                            </AvatarFallback>\n                          </Avatar>\n                        ))}\n                      </div>\n                    </div>\n                    <div className=\"mt-7 grid gap-4 sm:grid-cols-3\">\n                      <Card>\n                        <CardHeader className=\"pb-2\">\n                          <CardTitle className=\"flex items-center gap-2 text-xs text-muted-foreground\">\n                            <TrendingUp className=\"size-3.5 text-primary\" />{\" \"}\n                            Progress\n                          </CardTitle>\n                        </CardHeader>\n                        <CardContent>\n                          <strong className=\"text-2xl\">74%</strong>\n                          <Progress className=\"mt-3\" value={74} />\n                        </CardContent>\n                      </Card>\n                      <Card>\n                        <CardHeader className=\"pb-2\">\n                          <CardTitle className=\"flex items-center gap-2 text-xs text-muted-foreground\">\n                            <Users className=\"size-3.5 text-primary\" />{\" \"}\n                            Contributors\n                          </CardTitle>\n                        </CardHeader>\n                        <CardContent>\n                          <strong className=\"text-2xl\">18</strong>\n                          <p className=\"mt-2 text-xs text-muted-foreground\">\n                            Across 4 teams\n                          </p>\n                        </CardContent>\n                      </Card>\n                      <Card>\n                        <CardHeader className=\"pb-2\">\n                          <CardTitle className=\"text-xs text-muted-foreground\">\n                            Decisions\n                          </CardTitle>\n                        </CardHeader>\n                        <CardContent>\n                          <strong className=\"text-2xl\">32</strong>\n                          <p className=\"mt-2 text-xs text-emerald-600\">\n                            +8 this week\n                          </p>\n                        </CardContent>\n                      </Card>\n                    </div>\n                    <div className=\"mt-4 rounded-2xl border border-foreground/10 bg-background p-5\">\n                      <div className=\"flex items-center justify-between\">\n                        <p className=\"text-sm font-semibold\">\n                          Launch milestones\n                        </p>\n                        <Badge variant=\"secondary\">On track</Badge>\n                      </div>\n                      <div className=\"mt-5 space-y-4\">\n                        {[\n                          [\"Research synthesis\", \"Complete\"],\n                          [\"Beta onboarding\", \"In review\"],\n                          [\"Public launch\", \"Aug 28\"],\n                        ].map(([title, status], index) => (\n                          <div className=\"flex items-center gap-3\" key={title}>\n                            <span\n                              className={cn(\n                                \"grid size-6 place-items-center rounded-full border text-[.6rem]\",\n                                index === 0\n                                  ? \"border-primary bg-primary text-primary-foreground\"\n                                  : \"border-foreground/15\",\n                              )}\n                            >\n                              {index === 0 ? (\n                                <Check className=\"size-3\" />\n                              ) : (\n                                index + 1\n                              )}\n                            </span>\n                            <span className=\"text-xs font-medium\">{title}</span>\n                            <span className=\"ml-auto text-xs text-muted-foreground\">\n                              {status}\n                            </span>\n                          </div>\n                        ))}\n                      </div>\n                    </div>\n                  </div>\n                </div>\n              </div>\n            </div>\n            <div className=\"mt-12 grid grid-cols-2 gap-6 text-center text-sm font-semibold text-muted-foreground sm:grid-cols-5\">\n              {[\"ARC\", \"COMMON\", \"NORTH/\", \"RATIO\", \"LINEAR+\"].map((brand) => (\n                <span key={brand}>{brand}</span>\n              ))}\n            </div>\n          </div>\n        </section>\n        <FeatureSection01 />\n        <TestimonialSection01 />\n        <section className=\"px-5 py-24 sm:px-8 sm:py-32\" id=\"pricing\">\n          <div className=\"mx-auto max-w-7xl\">\n            <Pricing01 />\n          </div>\n        </section>\n        <ContactForm01 />\n      </main>\n      <Footer01 />\n    </div>\n  );\n}\n\nexport { SaasLanding01 };\n",
      "type": "registry:page",
      "target": "@templates/saas-landing-01.tsx"
    }
  ],
  "type": "registry:page"
}