@snow-labs/brutal-ui 0.3.1 → 0.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/brutal/cta-section.js +8 -4
- package/dist/components/brutal/cta-section.js.map +1 -1
- package/dist/components/brutal/hero.js +4 -4
- package/dist/components/brutal/hero.js.map +1 -1
- package/dist/components/brutal/index.js +12 -8
- package/dist/components/brutal/index.js.map +1 -1
- package/dist/index.js +12 -8
- package/dist/index.js.map +1 -1
- package/dist/templates/index.js +12 -8
- package/dist/templates/index.js.map +1 -1
- package/dist/templates/saas-launch.js +12 -8
- package/dist/templates/saas-launch.js.map +1 -1
- package/dist/templates/studio.js +12 -8
- package/dist/templates/studio.js.map +1 -1
- package/package.json +1 -1
package/dist/templates/studio.js
CHANGED
|
@@ -356,11 +356,11 @@ function BrutalHero({
|
|
|
356
356
|
variant === "centered" && "mx-auto"
|
|
357
357
|
), children: description }),
|
|
358
358
|
/* @__PURE__ */ jsxs("div", { className: cn(
|
|
359
|
-
"flex flex-
|
|
360
|
-
variant === "centered" && "justify-center"
|
|
359
|
+
"flex flex-col gap-3 sm:flex-row sm:gap-4",
|
|
360
|
+
variant === "centered" && "sm:justify-center"
|
|
361
361
|
), children: [
|
|
362
|
-
/* @__PURE__ */ jsx(Button, { variant: ctaVariant, size: "xl", render: /* @__PURE__ */ jsx("a", { href: ctaHref }), children: ctaText }),
|
|
363
|
-
secondaryText && /* @__PURE__ */ jsx(Button, { variant: "outline", size: "xl", render: /* @__PURE__ */ jsx("a", { href: secondaryHref || "#" }), children: secondaryText })
|
|
362
|
+
/* @__PURE__ */ jsx(Button, { variant: ctaVariant, size: "xl", className: "w-full sm:w-auto", render: /* @__PURE__ */ jsx("a", { href: ctaHref }), children: ctaText }),
|
|
363
|
+
secondaryText && /* @__PURE__ */ jsx(Button, { variant: "outline", size: "xl", className: "w-full sm:w-auto", render: /* @__PURE__ */ jsx("a", { href: secondaryHref || "#" }), children: secondaryText })
|
|
364
364
|
] }),
|
|
365
365
|
proof && /* @__PURE__ */ jsxs("p", { className: "flex items-center gap-2 text-sm font-medium opacity-70", children: [
|
|
366
366
|
/* @__PURE__ */ jsx("span", { className: "inline-flex size-5 items-center justify-center border border-current text-xs", children: "\u2713" }),
|
|
@@ -757,12 +757,13 @@ function CTAButtons({
|
|
|
757
757
|
secondaryText,
|
|
758
758
|
secondaryHref
|
|
759
759
|
}) {
|
|
760
|
-
return /* @__PURE__ */ jsxs("div", { className: "flex flex-
|
|
760
|
+
return /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-3 sm:flex-row sm:justify-center sm:gap-4", children: [
|
|
761
761
|
/* @__PURE__ */ jsx(
|
|
762
762
|
Button,
|
|
763
763
|
{
|
|
764
764
|
variant: ctaVariant,
|
|
765
765
|
size: "xl",
|
|
766
|
+
className: "w-full sm:w-auto",
|
|
766
767
|
render: /* @__PURE__ */ jsx("a", { href: ctaHref }),
|
|
767
768
|
children: ctaText
|
|
768
769
|
}
|
|
@@ -771,7 +772,8 @@ function CTAButtons({
|
|
|
771
772
|
Button,
|
|
772
773
|
{
|
|
773
774
|
variant: "outline",
|
|
774
|
-
size: "
|
|
775
|
+
size: "xl",
|
|
776
|
+
className: "w-full sm:w-auto",
|
|
775
777
|
render: /* @__PURE__ */ jsx("a", { href: secondaryHref || "#" }),
|
|
776
778
|
children: secondaryText
|
|
777
779
|
}
|
|
@@ -801,12 +803,13 @@ function SplitCTA(props) {
|
|
|
801
803
|
/* @__PURE__ */ jsx("h2", { className: "brutal-h1 mb-6", children: props.headline }),
|
|
802
804
|
props.description && /* @__PURE__ */ jsx("p", { className: "brutal-body mb-4 opacity-80", children: props.description }),
|
|
803
805
|
props.stats && /* @__PURE__ */ jsx("p", { className: "brutal-label mb-8 opacity-60", children: props.stats }),
|
|
804
|
-
/* @__PURE__ */ jsxs("div", { className: "flex flex-
|
|
806
|
+
/* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-3 sm:flex-row sm:gap-4", children: [
|
|
805
807
|
/* @__PURE__ */ jsx(
|
|
806
808
|
Button,
|
|
807
809
|
{
|
|
808
810
|
variant: props.ctaVariant || "cta",
|
|
809
811
|
size: "xl",
|
|
812
|
+
className: "w-full sm:w-auto",
|
|
810
813
|
render: /* @__PURE__ */ jsx("a", { href: props.ctaHref || "#" }),
|
|
811
814
|
children: props.ctaText
|
|
812
815
|
}
|
|
@@ -815,7 +818,8 @@ function SplitCTA(props) {
|
|
|
815
818
|
Button,
|
|
816
819
|
{
|
|
817
820
|
variant: "outline",
|
|
818
|
-
size: "
|
|
821
|
+
size: "xl",
|
|
822
|
+
className: "w-full sm:w-auto",
|
|
819
823
|
render: /* @__PURE__ */ jsx("a", { href: props.secondaryHref || "#" }),
|
|
820
824
|
children: props.secondaryText
|
|
821
825
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/lib/utils.ts","../../src/components/ui/button.tsx","../../src/components/ui/sheet.tsx","../../src/components/brutal/nav.tsx","../../src/components/brutal/section.tsx","../../src/components/brutal/hero.tsx","../../src/components/brutal/section-divider.tsx","../../src/components/ui/card.tsx","../../src/components/brutal/feature-grid.tsx","../../src/components/brutal/testimonials.tsx","../../src/components/ui/input.tsx","../../src/components/brutal/newsletter.tsx","../../src/components/brutal/cta-section.tsx","../../src/components/brutal/footer.tsx","../../src/templates/studio.tsx"],"names":["ButtonPrimitive","jsx","SheetPrimitive","jsxs","InputPrimitive"],"mappings":"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","file":"studio.js","sourcesContent":["import { clsx, type ClassValue } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n","\"use client\";\n\nimport { Button as ButtonPrimitive } from \"@base-ui/react/button\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"../../lib/utils\";\n\nconst buttonVariants = cva(\n \"group/button inline-flex shrink-0 items-center justify-center rounded-lg whitespace-nowrap font-bold transition-all duration-150 select-none outline-none disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n {\n variants: {\n variant: {\n // Primary: Black bg, white text, offset shadow\n default:\n \"border-brutal border-foreground bg-primary text-primary-foreground shadow-brutal hover:-translate-x-0.5 hover:-translate-y-0.5 hover:shadow-brutal-lg active:translate-x-px active:translate-y-px active:shadow-brutal-sm\",\n // CTA: Mint green bg — the Bannerbear signature\n cta: \"border-brutal border-foreground bg-cta text-cta-foreground shadow-brutal hover:-translate-x-0.5 hover:-translate-y-0.5 hover:shadow-brutal-lg active:translate-x-px active:translate-y-px active:shadow-brutal-sm\",\n // Brand: Dynamic brand color bg\n brand:\n \"border-brutal border-foreground bg-brand text-brand-foreground shadow-brutal hover:-translate-x-0.5 hover:-translate-y-0.5 hover:shadow-brutal-lg active:translate-x-px active:translate-y-px active:shadow-brutal-sm\",\n // Outline: White bg, black border, offset shadow\n outline:\n \"border-brutal border-foreground bg-background text-foreground shadow-brutal hover:-translate-x-0.5 hover:-translate-y-0.5 hover:shadow-brutal-lg active:translate-x-px active:translate-y-px active:shadow-brutal-sm\",\n // Secondary: Light bg, border, smaller shadow\n secondary:\n \"border-brutal border-foreground bg-secondary text-secondary-foreground shadow-brutal-sm hover:-translate-x-0.5 hover:-translate-y-0.5 hover:shadow-brutal active:translate-x-px active:translate-y-px active:shadow-none\",\n // Ghost: No border/shadow, subtle hover\n ghost: \"hover:bg-secondary hover:text-foreground\",\n // Link: Text only\n link: \"text-foreground underline-offset-4 hover:underline\",\n // Destructive\n destructive:\n \"border-brutal border-destructive bg-destructive text-destructive-foreground shadow-brutal hover:-translate-x-0.5 hover:-translate-y-0.5 hover:shadow-brutal-lg active:translate-x-px active:translate-y-px active:shadow-brutal-sm\",\n // Nav: Thin border, no shadow (for nav Sign In buttons)\n nav: \"border border-foreground bg-background text-foreground hover:bg-foreground hover:text-background\",\n },\n size: {\n xs: \"h-7 gap-1 px-2.5 text-xs\",\n sm: \"h-8 gap-1.5 px-3 text-sm\",\n default: \"h-10 gap-2 px-5 text-sm\",\n lg: \"h-12 gap-2 px-7 text-base\",\n xl: \"h-14 gap-2.5 px-9 text-lg\",\n icon: \"size-10\",\n \"icon-sm\": \"size-8\",\n \"icon-lg\": \"size-12\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n);\n\nfunction Button({\n className,\n variant = \"default\",\n size = \"default\",\n ...props\n}: ButtonPrimitive.Props & VariantProps<typeof buttonVariants>) {\n return (\n <ButtonPrimitive\n data-slot=\"button\"\n className={cn(buttonVariants({ variant, size, className }))}\n {...props}\n />\n );\n}\n\nexport { Button, buttonVariants };\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Dialog as SheetPrimitive } from \"@base-ui/react/dialog\"\n\nimport { cn } from \"../../lib/utils\"\nimport { Button } from \"./button\"\nimport { XIcon } from \"lucide-react\"\n\nfunction Sheet({ ...props }: SheetPrimitive.Root.Props) {\n return <SheetPrimitive.Root data-slot=\"sheet\" {...props} />\n}\n\nfunction SheetTrigger({ ...props }: SheetPrimitive.Trigger.Props) {\n return <SheetPrimitive.Trigger data-slot=\"sheet-trigger\" {...props} />\n}\n\nfunction SheetClose({ ...props }: SheetPrimitive.Close.Props) {\n return <SheetPrimitive.Close data-slot=\"sheet-close\" {...props} />\n}\n\nfunction SheetPortal({ ...props }: SheetPrimitive.Portal.Props) {\n return <SheetPrimitive.Portal data-slot=\"sheet-portal\" {...props} />\n}\n\nfunction SheetOverlay({ className, ...props }: SheetPrimitive.Backdrop.Props) {\n return (\n <SheetPrimitive.Backdrop\n data-slot=\"sheet-overlay\"\n className={cn(\n \"fixed inset-0 z-50 bg-black/60 transition-opacity duration-150 data-ending-style:opacity-0 data-starting-style:opacity-0\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SheetContent({\n className,\n children,\n side = \"right\",\n showCloseButton = true,\n ...props\n}: SheetPrimitive.Popup.Props & {\n side?: \"top\" | \"right\" | \"bottom\" | \"left\"\n showCloseButton?: boolean\n}) {\n return (\n <SheetPortal>\n <SheetOverlay />\n <SheetPrimitive.Popup\n data-slot=\"sheet-content\"\n data-side={side}\n className={cn(\n \"fixed z-50 flex flex-col gap-4 border-brutal border-foreground bg-background bg-clip-padding text-sm shadow-brutal-lg transition duration-200 ease-in-out data-ending-style:opacity-0 data-starting-style:opacity-0 data-[side=bottom]:inset-x-0 data-[side=bottom]:bottom-0 data-[side=bottom]:h-auto data-[side=bottom]:data-ending-style:translate-y-[2.5rem] data-[side=bottom]:data-starting-style:translate-y-[2.5rem] data-[side=left]:inset-y-0 data-[side=left]:left-0 data-[side=left]:h-full data-[side=left]:w-3/4 data-[side=left]:data-ending-style:translate-x-[-2.5rem] data-[side=left]:data-starting-style:translate-x-[-2.5rem] data-[side=right]:inset-y-0 data-[side=right]:right-0 data-[side=right]:h-full data-[side=right]:w-3/4 data-[side=right]:data-ending-style:translate-x-[2.5rem] data-[side=right]:data-starting-style:translate-x-[2.5rem] data-[side=top]:inset-x-0 data-[side=top]:top-0 data-[side=top]:h-auto data-[side=top]:data-ending-style:translate-y-[-2.5rem] data-[side=top]:data-starting-style:translate-y-[-2.5rem] data-[side=left]:sm:max-w-sm data-[side=right]:sm:max-w-sm\",\n className\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <SheetPrimitive.Close\n data-slot=\"sheet-close\"\n render={\n <Button\n variant=\"ghost\"\n className=\"absolute top-3 right-3\"\n size=\"icon-sm\"\n />\n }\n >\n <XIcon\n />\n <span className=\"sr-only\">Close</span>\n </SheetPrimitive.Close>\n )}\n </SheetPrimitive.Popup>\n </SheetPortal>\n )\n}\n\nfunction SheetHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sheet-header\"\n className={cn(\"flex flex-col gap-0.5 p-4\", className)}\n {...props}\n />\n )\n}\n\nfunction SheetFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sheet-footer\"\n className={cn(\"mt-auto flex flex-col gap-2 p-4\", className)}\n {...props}\n />\n )\n}\n\nfunction SheetTitle({ className, ...props }: SheetPrimitive.Title.Props) {\n return (\n <SheetPrimitive.Title\n data-slot=\"sheet-title\"\n className={cn(\"text-base font-bold text-foreground\", className)}\n {...props}\n />\n )\n}\n\nfunction SheetDescription({\n className,\n ...props\n}: SheetPrimitive.Description.Props) {\n return (\n <SheetPrimitive.Description\n data-slot=\"sheet-description\"\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Sheet,\n SheetTrigger,\n SheetClose,\n SheetContent,\n SheetHeader,\n SheetFooter,\n SheetTitle,\n SheetDescription,\n}\n","\"use client\";\n\nimport { useState, useEffect } from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { Button } from \"../ui/button\";\nimport {\n Sheet,\n SheetContent,\n SheetTrigger,\n SheetTitle,\n} from \"../ui/sheet\";\nimport { Menu } from \"lucide-react\";\n\ninterface NavLink {\n label: string;\n href: string;\n badge?: string;\n active?: boolean;\n}\n\ninterface BrutalNavProps {\n logo: React.ReactNode;\n links: NavLink[];\n ctaText?: string;\n ctaHref?: string;\n variant?: \"solid\" | \"transparent\" | \"floating-pill\";\n className?: string;\n}\n\nexport function BrutalNav({\n logo,\n links,\n ctaText = \"Sign In\",\n ctaHref = \"/admin\",\n variant = \"solid\",\n className,\n}: BrutalNavProps) {\n const [mobileOpen, setMobileOpen] = useState(false);\n const [isScrolled, setIsScrolled] = useState(false);\n\n useEffect(() => {\n if (variant !== \"transparent\") return;\n const onScroll = () => setIsScrolled(window.scrollY > 20);\n onScroll(); // check on mount\n window.addEventListener(\"scroll\", onScroll, { passive: true });\n return () => window.removeEventListener(\"scroll\", onScroll);\n }, [variant]);\n\n const variantStyles = {\n solid: \"sticky top-0 z-50 w-full border-b-brutal border-foreground bg-brand\",\n transparent: cn(\n \"fixed top-0 left-0 right-0 z-50 w-full transition-all duration-200\",\n isScrolled\n ? \"bg-background/80 text-foreground backdrop-blur-md border-b border-foreground/10\"\n : \"bg-transparent text-white\"\n ),\n \"floating-pill\":\n \"fixed top-0 left-0 right-0 z-50 mx-4 mt-4 rounded-full border-brutal border-foreground bg-background shadow-brutal\",\n };\n\n return (\n <header className={cn(variantStyles[variant], className)}>\n <div\n className={cn(\n \"flex h-14 items-center justify-between px-6\",\n variant === \"floating-pill\" ? \"mx-auto max-w-7xl\" : \"brutal-container\"\n )}\n >\n {/* Logo */}\n <a href=\"/\" className=\"flex items-center gap-2 text-lg font-black\">\n {logo}\n </a>\n\n {/* Center links (desktop) */}\n <nav className=\"hidden items-center gap-1 md:flex\">\n {links.map((link) => (\n <a\n key={link.href}\n href={link.href}\n className={cn(\n \"relative rounded-md px-3 py-1.5 text-sm font-bold transition-colors hover:opacity-70\",\n link.active && \"bg-foreground/10\"\n )}\n >\n {link.label}\n {link.badge && (\n <span className=\"absolute -top-1 -right-1 border border-foreground bg-background px-1 font-mono text-[9px] font-bold uppercase text-foreground\">\n {link.badge}\n </span>\n )}\n </a>\n ))}\n </nav>\n\n {/* Right side: CTA + Hamburger */}\n <div className=\"flex items-center gap-2\">\n <Button\n variant=\"nav\"\n size=\"sm\"\n render={<a href={ctaHref} />}\n className=\"hidden md:inline-flex\"\n >\n {ctaText}\n </Button>\n\n {/* Mobile hamburger */}\n <Sheet open={mobileOpen} onOpenChange={setMobileOpen}>\n <SheetTrigger\n render={\n <Button variant=\"ghost\" size=\"icon-sm\" className=\"md:hidden\" />\n }\n >\n <Menu className=\"size-5\" />\n <span className=\"sr-only\">Menu</span>\n </SheetTrigger>\n <SheetContent side=\"right\" showCloseButton>\n <SheetTitle>Navigation</SheetTitle>\n <nav className=\"flex flex-col gap-1 px-2 pt-4\">\n {links.map((link) => (\n <a\n key={link.href}\n href={link.href}\n onClick={() => setMobileOpen(false)}\n className={cn(\n \"flex items-center gap-2 rounded-md px-3 py-2.5 text-sm font-bold transition-colors hover:bg-foreground/5\",\n link.active && \"bg-foreground/10\"\n )}\n >\n {link.label}\n {link.badge && (\n <span className=\"border border-foreground bg-background px-1 font-mono text-[9px] font-bold uppercase text-foreground\">\n {link.badge}\n </span>\n )}\n </a>\n ))}\n <div className=\"mt-4 border-t border-foreground/10 pt-4\">\n <Button\n variant=\"default\"\n size=\"default\"\n render={<a href={ctaHref} />}\n className=\"w-full\"\n >\n {ctaText}\n </Button>\n </div>\n </nav>\n </SheetContent>\n </Sheet>\n </div>\n </div>\n </header>\n );\n}\n","import { cn } from \"../../lib/utils\";\n\nexport type SectionColor =\n | \"white\"\n | \"brand\"\n | \"brand-muted\"\n | \"blue\"\n | \"gray\"\n | \"cream\"\n | \"black\"\n | \"cta\";\n\nexport type SectionPattern =\n | \"dots\"\n | \"stripes\"\n | \"noise\"\n | \"grain\"\n | \"crosshatch\"\n | \"grid-dots\"\n | \"gradient-mesh\"\n | \"none\";\n\ninterface BrutalSectionProps {\n children: React.ReactNode;\n color?: SectionColor;\n className?: string;\n containerSize?: \"sm\" | \"default\" | \"lg\";\n padding?: \"sm\" | \"default\" | \"lg\";\n pattern?: SectionPattern;\n /** @deprecated Use pattern=\"dots\" instead */\n dots?: boolean;\n /** @deprecated Use pattern=\"stripes\" instead */\n stripes?: boolean;\n id?: string;\n}\n\nconst colorMap: Record<SectionColor, string> = {\n white: \"bg-background text-foreground\",\n brand: \"bg-brand\",\n \"brand-muted\": \"bg-brand-muted text-foreground\",\n blue: \"bg-section-blue\",\n gray: \"bg-section-gray text-foreground\",\n cream: \"bg-section-cream text-foreground\",\n black: \"bg-foreground text-background\",\n cta: \"bg-cta\",\n};\n\nconst containerMap = {\n sm: \"brutal-container-sm\",\n default: \"brutal-container\",\n lg: \"brutal-container-lg\",\n};\n\nconst paddingMap = {\n sm: \"brutal-section-sm\",\n default: \"brutal-section\",\n lg: \"brutal-section py-28 sm:py-36 md:py-44\",\n};\n\nconst patternMap: Record<SectionPattern, string> = {\n dots: \"brutal-dots\",\n stripes: \"brutal-stripes\",\n noise: \"brutal-noise\",\n grain: \"brutal-grain\",\n crosshatch: \"brutal-crosshatch\",\n \"grid-dots\": \"brutal-grid-dots\",\n \"gradient-mesh\": \"brutal-gradient-mesh\",\n none: \"\",\n};\n\nexport function BrutalSection({\n children,\n color = \"white\",\n className,\n containerSize = \"default\",\n padding = \"default\",\n pattern,\n dots = false,\n stripes = false,\n id,\n}: BrutalSectionProps) {\n const resolvedPattern = pattern\n ?? (dots ? \"dots\" : undefined)\n ?? (stripes ? \"stripes\" : undefined)\n ?? \"none\";\n\n return (\n <section\n id={id}\n className={cn(\n paddingMap[padding],\n colorMap[color],\n patternMap[resolvedPattern],\n className\n )}\n >\n <div className={containerMap[containerSize]}>{children}</div>\n </section>\n );\n}\n","import { cn } from \"../../lib/utils\";\nimport { Button } from \"../ui/button\";\nimport { BrutalSection } from \"./section\";\nimport type { SectionPattern } from \"./section\";\n\ntype HeroVariant = \"split\" | \"centered\" | \"overlap\" | \"asymmetric\";\n\ninterface BrutalHeroProps {\n variant?: HeroVariant;\n badge?: string;\n badgePosition?: \"above\" | \"inline\" | \"floating\";\n headline: string;\n description: string;\n ctaText: string;\n ctaHref?: string;\n ctaVariant?: \"cta\" | \"brand\" | \"default\";\n secondaryText?: string;\n secondaryHref?: string;\n visual?: React.ReactNode;\n color?: \"white\" | \"brand\" | \"brand-muted\" | \"gray\";\n pattern?: SectionPattern;\n proof?: string;\n className?: string;\n}\n\nexport function BrutalHero({\n variant = \"split\",\n badge,\n badgePosition = \"above\",\n headline,\n description,\n ctaText,\n ctaHref = \"#\",\n ctaVariant = \"cta\",\n secondaryText,\n secondaryHref,\n visual,\n color = \"brand\",\n pattern,\n proof,\n className,\n}: BrutalHeroProps) {\n const badgeElement = badge && (\n <div\n className={cn(\n \"inline-flex w-fit border-brutal border-foreground bg-background px-3 py-1 font-mono text-xs font-bold uppercase tracking-widest text-foreground shadow-brutal-sm\",\n badgePosition === \"floating\" && \"absolute -top-3 left-6 z-10\",\n )}\n >\n {badge}\n </div>\n );\n\n const textContent = (\n <div className={cn(\n \"flex flex-col gap-6\",\n variant === \"centered\" && \"items-center text-center\",\n )}>\n {badgePosition === \"above\" && badgeElement}\n\n <h1 className={cn(\n \"brutal-display text-balance\",\n variant === \"centered\" && \"mx-auto max-w-4xl\",\n )}>\n {badgePosition === \"inline\" && badgeElement}\n {headline}\n </h1>\n\n <p className={cn(\n \"brutal-body-lg max-w-lg opacity-80\",\n variant === \"centered\" && \"mx-auto\",\n )}>\n {description}\n </p>\n\n <div className={cn(\n \"flex flex-wrap gap-4\",\n variant === \"centered\" && \"justify-center\",\n )}>\n <Button variant={ctaVariant} size=\"xl\" render={<a href={ctaHref} />}>\n {ctaText}\n </Button>\n {secondaryText && (\n <Button variant=\"outline\" size=\"xl\" render={<a href={secondaryHref || \"#\"} />}>\n {secondaryText}\n </Button>\n )}\n </div>\n\n {proof && (\n <p className=\"flex items-center gap-2 text-sm font-medium opacity-70\">\n <span className=\"inline-flex size-5 items-center justify-center border border-current text-xs\">\n ✓\n </span>\n {proof}\n </p>\n )}\n </div>\n );\n\n const layoutClass = {\n split: \"grid items-center gap-12 lg:grid-cols-2 lg:gap-16\",\n centered: \"flex flex-col items-center gap-12\",\n overlap: \"relative\",\n asymmetric: \"grid items-center gap-12 lg:grid-cols-[3fr_2fr] lg:gap-16\",\n }[variant];\n\n return (\n <BrutalSection color={color} padding=\"lg\" pattern={pattern} className={cn(\"relative\", className)}>\n {badgePosition === \"floating\" && badgeElement}\n\n <div className={layoutClass}>\n {textContent}\n\n {visual && variant === \"overlap\" ? (\n <div className=\"pointer-events-none absolute inset-0 flex items-center justify-center opacity-20\">\n {visual}\n </div>\n ) : visual ? (\n <div className={cn(\n \"flex items-center justify-center\",\n variant === \"asymmetric\" && \"-rotate-2 transform\",\n )}>\n {visual}\n </div>\n ) : null}\n </div>\n </BrutalSection>\n );\n}\n","import { cn } from \"../../lib/utils\";\n\ntype DividerVariant =\n | \"wave\"\n | \"jagged\"\n | \"curve\"\n | \"castle\"\n | \"torn-paper\"\n | \"brush-stroke\"\n | \"geometric\"\n | \"blob\"\n | \"diagonal\"\n | \"zigzag\"\n | \"hand-drawn\";\n\ninterface SectionDividerProps {\n from?: string;\n to?: string;\n flip?: boolean;\n className?: string;\n variant?: DividerVariant;\n layers?: boolean;\n}\n\nconst paths: Record<DividerVariant, string> = {\n wave: \"M0,64 C160,128 320,0 480,64 C640,128 800,0 960,64 L960,160 L0,160 Z\",\n jagged: \"M0,80 L80,40 L160,80 L240,20 L320,80 L400,40 L480,80 L560,20 L640,80 L720,40 L800,80 L880,20 L960,80 L960,160 L0,160 Z\",\n curve: \"M0,128 Q480,-32 960,128 L960,160 L0,160 Z\",\n castle: \"M0,80 L0,60 L80,60 L80,80 L120,80 L120,40 L200,40 L200,80 L240,80 L240,60 L320,60 L320,80 L360,80 L360,40 L440,40 L440,80 L480,80 L480,60 L560,60 L560,80 L600,80 L600,40 L680,40 L680,80 L720,80 L720,60 L800,60 L800,80 L840,80 L840,40 L920,40 L920,80 L960,80 L960,160 L0,160 Z\",\n \"torn-paper\": \"M0,70 C30,65 45,85 80,72 C115,59 130,90 170,78 C210,66 225,88 270,75 C315,62 340,92 380,79 C420,66 445,86 490,73 C535,60 560,88 600,76 C640,64 665,90 710,77 C755,64 780,84 830,71 C875,58 900,86 960,80 L960,160 L0,160 Z\",\n \"brush-stroke\": \"M0,90 C80,50 120,100 200,60 C280,20 360,110 480,70 C600,30 640,100 720,80 C800,60 880,100 960,70 L960,160 L0,160 Z\",\n geometric: \"M0,100 L120,60 L240,80 L360,40 L480,90 L600,50 L720,70 L840,30 L960,80 L960,160 L0,160 Z\",\n blob: \"M0,80 C80,120 160,40 280,80 C400,120 440,30 560,70 C680,110 760,40 960,80 L960,160 L0,160 Z\",\n diagonal: \"M0,160 L960,60 L960,160 Z\",\n zigzag: \"M0,80 L60,40 L120,80 L180,40 L240,80 L300,40 L360,80 L420,40 L480,80 L540,40 L600,80 L660,40 L720,80 L780,40 L840,80 L900,40 L960,80 L960,160 L0,160 Z\",\n \"hand-drawn\": \"M0,72 C20,68 35,82 60,75 C85,68 95,84 125,76 C155,68 170,85 200,77 C230,69 245,83 275,75 C305,67 320,86 350,78 C380,70 395,82 425,74 C455,66 470,84 500,76 C530,68 545,83 575,75 C605,67 620,85 650,77 C680,69 695,82 725,74 C755,66 770,84 800,76 C830,68 845,83 875,75 C905,67 920,82 960,74 L960,160 L0,160 Z\",\n};\n\nexport function SectionDivider({\n from = \"hsl(var(--background))\",\n to = \"hsl(var(--background))\",\n flip = false,\n className = \"\",\n variant = \"wave\",\n layers = false,\n}: SectionDividerProps) {\n return (\n <div\n className={cn(\"relative -my-px w-full overflow-hidden\", className)}\n style={{ backgroundColor: from }}\n >\n {layers && (\n <svg\n viewBox=\"0 0 960 160\"\n preserveAspectRatio=\"none\"\n className=\"absolute inset-0 block w-full opacity-30\"\n style={{\n height: \"clamp(40px, 6vw, 80px)\",\n transform: flip ? \"scaleY(-1) translateY(4px)\" : \"translateY(-4px)\",\n }}\n >\n <path d={paths[variant]} fill={to} />\n </svg>\n )}\n <svg\n viewBox=\"0 0 960 160\"\n preserveAspectRatio=\"none\"\n className=\"relative block w-full\"\n style={{\n height: \"clamp(40px, 6vw, 80px)\",\n transform: flip ? \"scaleY(-1)\" : undefined,\n }}\n >\n <path d={paths[variant]} fill={to} />\n </svg>\n </div>\n );\n}\n","import * as React from \"react\";\n\nimport { cn } from \"../../lib/utils\";\n\nfunction Card({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card\"\n className={cn(\n \"group/card flex flex-col gap-4 rounded-lg border-brutal border-foreground bg-card p-5 text-card-foreground shadow-brutal transition-all duration-150 hover:-translate-x-0.5 hover:-translate-y-0.5 hover:shadow-brutal-lg\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction CardHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-header\"\n className={cn(\"flex flex-col gap-1\", className)}\n {...props}\n />\n );\n}\n\nfunction CardTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-title\"\n className={cn(\"text-lg font-bold leading-snug\", className)}\n {...props}\n />\n );\n}\n\nfunction CardDescription({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-description\"\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n );\n}\n\nfunction CardAction({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-action\"\n className={cn(\"self-start justify-self-end\", className)}\n {...props}\n />\n );\n}\n\nfunction CardContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-content\"\n className={cn(\"\", className)}\n {...props}\n />\n );\n}\n\nfunction CardFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-footer\"\n className={cn(\n \"flex items-center border-t-brutal border-foreground pt-4\",\n className\n )}\n {...props}\n />\n );\n}\n\nexport {\n Card,\n CardHeader,\n CardFooter,\n CardTitle,\n CardAction,\n CardDescription,\n CardContent,\n};\n","import { cn } from \"../../lib/utils\";\nimport {\n Card,\n CardHeader,\n CardTitle,\n CardDescription,\n CardContent,\n} from \"../ui/card\";\nimport { BrutalSection } from \"./section\";\n\ntype FeatureGridVariant = \"icon-top\" | \"icon-left\" | \"numbered\" | \"bento\";\n\ninterface Feature {\n icon?: React.ReactNode;\n title: string;\n description: string;\n featured?: boolean;\n stat?: string;\n}\n\ninterface BrutalFeatureGridProps {\n variant?: FeatureGridVariant;\n badge?: string;\n headline: string;\n description?: string;\n features: Feature[];\n columns?: 2 | 3 | 4;\n color?: \"white\" | \"brand\" | \"brand-muted\" | \"gray\" | \"cream\";\n className?: string;\n}\n\nconst colMap = {\n 2: \"sm:grid-cols-2\",\n 3: \"sm:grid-cols-2 lg:grid-cols-3\",\n 4: \"sm:grid-cols-2 lg:grid-cols-4\",\n};\n\nexport function BrutalFeatureGrid({\n variant = \"icon-top\",\n badge,\n headline,\n description,\n features,\n columns = 3,\n color = \"white\",\n className,\n}: BrutalFeatureGridProps) {\n return (\n <BrutalSection color={color} className={className}>\n <div className=\"mb-12 max-w-2xl\">\n {badge && (\n <p className=\"brutal-label mb-4 text-brand\">{badge}</p>\n )}\n <h2 className=\"brutal-h2 mb-4\">{headline}</h2>\n {description && (\n <p className=\"brutal-body text-muted-foreground\">{description}</p>\n )}\n </div>\n\n <div\n className={cn(\n \"grid gap-6\",\n variant === \"bento\" ? \"sm:grid-cols-2 lg:grid-cols-3\" : colMap[columns],\n )}\n >\n {features.map((feature, i) => (\n <FeatureCard\n key={feature.title}\n feature={feature}\n variant={variant}\n index={i}\n />\n ))}\n </div>\n </BrutalSection>\n );\n}\n\nfunction FeatureCard({\n feature,\n variant,\n index,\n}: {\n feature: Feature;\n variant: FeatureGridVariant;\n index: number;\n}) {\n const isBentoFeatured = variant === \"bento\" && feature.featured;\n\n if (variant === \"icon-left\") {\n return (\n <div className=\"flex gap-4 border-brutal border-foreground border-l-4 border-l-brand bg-background p-5 shadow-brutal transition-all duration-150 hover:-translate-x-0.5 hover:-translate-y-0.5 hover:shadow-brutal-lg\">\n {feature.icon && (\n <div className=\"flex size-12 shrink-0 items-center justify-center border-brutal border-foreground bg-brand-muted text-2xl shadow-brutal-sm\">\n {feature.icon}\n </div>\n )}\n <div>\n {feature.stat && (\n <p className=\"brutal-label mb-1 text-brand\">{feature.stat}</p>\n )}\n <h3 className=\"brutal-h4 mb-1\">{feature.title}</h3>\n <p className=\"text-sm text-muted-foreground\">{feature.description}</p>\n </div>\n </div>\n );\n }\n\n if (variant === \"numbered\") {\n return (\n <Card>\n <CardHeader>\n <span className=\"brutal-display mb-2 block text-brand opacity-20\">\n {String(index + 1).padStart(2, \"0\")}\n </span>\n {feature.stat && (\n <p className=\"brutal-label mb-1 text-brand\">{feature.stat}</p>\n )}\n <CardTitle>{feature.title}</CardTitle>\n </CardHeader>\n <CardContent>\n <CardDescription>{feature.description}</CardDescription>\n </CardContent>\n </Card>\n );\n }\n\n return (\n <Card\n className={cn(\n isBentoFeatured && \"sm:col-span-2 bg-brand-muted\",\n )}\n >\n <CardHeader>\n {feature.icon && (\n <div className=\"mb-2 inline-flex size-12 items-center justify-center border-brutal border-foreground border-b-brand bg-brand-muted text-2xl shadow-brutal-sm\">\n {feature.icon}\n </div>\n )}\n {feature.stat && (\n <p className=\"brutal-label mb-1 text-brand\">{feature.stat}</p>\n )}\n <CardTitle>{feature.title}</CardTitle>\n </CardHeader>\n <CardContent>\n <CardDescription>{feature.description}</CardDescription>\n </CardContent>\n </Card>\n );\n}\n","import { cn } from \"../../lib/utils\";\nimport { BrutalSection } from \"./section\";\nimport type { SectionColor, SectionPattern } from \"./section\";\n\nexport interface Testimonial {\n name: string;\n handle?: string;\n avatar?: string;\n text: string;\n role?: string;\n company?: string;\n companyLogo?: string;\n rating?: 1 | 2 | 3 | 4 | 5;\n featured?: boolean;\n}\n\ninterface BrutalTestimonialsProps {\n badge?: string;\n headline?: string;\n testimonials: Testimonial[];\n variant?: \"masonry\" | \"featured-grid\" | \"carousel\" | \"wall-of-love\";\n color?: SectionColor;\n pattern?: SectionPattern;\n className?: string;\n}\n\nfunction StarRating({ rating }: { rating: number }) {\n return (\n <div className=\"flex gap-0.5\">\n {Array.from({ length: 5 }, (_, i) => (\n <span\n key={i}\n className={cn(\n \"text-sm\",\n i < rating ? \"text-amber-500\" : \"text-foreground/20\"\n )}\n >\n ★\n </span>\n ))}\n </div>\n );\n}\n\nfunction TestimonialCard({\n t,\n className,\n}: {\n t: Testimonial;\n className?: string;\n}) {\n return (\n <div\n className={cn(\n \"relative break-inside-avoid border-brutal border-foreground bg-background p-5 text-foreground shadow-brutal transition-all duration-150 hover:-translate-x-0.5 hover:-translate-y-0.5 hover:shadow-brutal-lg\",\n className\n )}\n >\n {/* Decorative quote mark */}\n <span className=\"pointer-events-none absolute top-3 right-4 select-none font-serif text-5xl leading-none text-foreground/[0.06]\">\n “\n </span>\n\n {t.rating && (\n <div className=\"mb-3\">\n <StarRating rating={t.rating} />\n </div>\n )}\n\n <p className=\"relative mb-4 text-sm leading-relaxed\">{t.text}</p>\n\n <div className=\"flex items-center gap-3\">\n {t.avatar ? (\n <img\n src={t.avatar}\n alt={t.name}\n className=\"size-9 border-2 object-cover\"\n style={{ borderColor: \"hsl(var(--brand))\" }}\n />\n ) : (\n <div\n className=\"flex size-9 items-center justify-center border-2 font-bold text-brand-foreground\"\n style={{\n borderColor: \"hsl(var(--brand))\",\n backgroundColor: \"hsl(var(--brand))\",\n }}\n >\n {t.name[0]}\n </div>\n )}\n <div className=\"min-w-0 flex-1\">\n <p className=\"text-sm font-bold\">{t.name}</p>\n {(t.role || t.company) && (\n <p className=\"truncate text-xs text-muted-foreground\">\n {t.role}\n {t.role && t.company && \" · \"}\n {t.company}\n </p>\n )}\n {!t.role && !t.company && t.handle && (\n <p className=\"font-mono text-xs text-muted-foreground\">\n {t.handle}\n </p>\n )}\n </div>\n {t.companyLogo && (\n <img\n src={t.companyLogo}\n alt={t.company || \"\"}\n className=\"h-5 object-contain opacity-60\"\n />\n )}\n </div>\n </div>\n );\n}\n\nfunction MasonryLayout({ testimonials }: { testimonials: Testimonial[] }) {\n return (\n <div className=\"columns-1 gap-6 sm:columns-2 lg:columns-3\">\n {testimonials.map((t, i) => (\n <TestimonialCard key={i} t={t} className=\"mb-6\" />\n ))}\n </div>\n );\n}\n\nfunction FeaturedGridLayout({\n testimonials,\n}: {\n testimonials: Testimonial[];\n}) {\n const featured = testimonials.find((t) => t.featured) || testimonials[0];\n const rest = testimonials.filter((t) => t !== featured);\n\n return (\n <div className=\"grid gap-6 lg:grid-cols-2\">\n {/* Large featured card */}\n {featured && (\n <TestimonialCard\n t={featured}\n className=\"flex flex-col justify-between p-8 lg:row-span-2\"\n />\n )}\n {/* Smaller grid */}\n {rest.map((t, i) => (\n <TestimonialCard key={i} t={t} />\n ))}\n </div>\n );\n}\n\nfunction CarouselLayout({ testimonials }: { testimonials: Testimonial[] }) {\n return (\n <div className=\"-mx-6 flex snap-x snap-mandatory gap-6 overflow-x-auto px-6 pb-4\">\n {testimonials.map((t, i) => (\n <TestimonialCard\n key={i}\n t={t}\n className=\"w-80 flex-none snap-center\"\n />\n ))}\n </div>\n );\n}\n\nfunction WallOfLoveLayout({ testimonials }: { testimonials: Testimonial[] }) {\n return (\n <div className=\"relative max-h-[600px] overflow-hidden\">\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-4\">\n {testimonials.map((t, i) => (\n <TestimonialCard key={i} t={t} />\n ))}\n </div>\n {/* Fade overlay at bottom */}\n <div className=\"pointer-events-none absolute inset-x-0 bottom-0 h-32 bg-gradient-to-t from-background to-transparent\" />\n </div>\n );\n}\n\nexport function BrutalTestimonials({\n badge,\n headline,\n testimonials,\n variant = \"masonry\",\n color = \"blue\",\n pattern,\n className,\n}: BrutalTestimonialsProps) {\n return (\n <BrutalSection color={color} pattern={pattern} className={className}>\n {(headline || badge) && (\n <div className=\"mb-12 text-center\">\n {badge && <p className=\"brutal-label mb-4 opacity-70\">{badge}</p>}\n {headline && <h2 className=\"brutal-h2\">{headline}</h2>}\n </div>\n )}\n\n {variant === \"masonry\" && <MasonryLayout testimonials={testimonials} />}\n {variant === \"featured-grid\" && (\n <FeaturedGridLayout testimonials={testimonials} />\n )}\n {variant === \"carousel\" && (\n <CarouselLayout testimonials={testimonials} />\n )}\n {variant === \"wall-of-love\" && (\n <WallOfLoveLayout testimonials={testimonials} />\n )}\n </BrutalSection>\n );\n}\n","import * as React from \"react\";\nimport { Input as InputPrimitive } from \"@base-ui/react/input\";\n\nimport { cn } from \"../../lib/utils\";\n\nfunction Input({ className, type, ...props }: React.ComponentProps<\"input\">) {\n return (\n <InputPrimitive\n type={type}\n data-slot=\"input\"\n className={cn(\n \"h-10 w-full min-w-0 rounded-lg border-brutal border-foreground bg-background px-3 py-2 text-base transition-all outline-none placeholder:text-muted-foreground focus-visible:ring-2 focus-visible:ring-ring/20 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive md:text-sm\",\n className\n )}\n {...props}\n />\n );\n}\n\nexport { Input };\n","import { Button } from \"../ui/button\";\nimport { Input } from \"../ui/input\";\nimport { BrutalSection } from \"./section\";\n\ninterface NewsletterProps {\n headline?: string;\n description?: string;\n placeholder?: string;\n buttonText?: string;\n onSubmit?: (email: string) => void;\n color?: \"white\" | \"brand\" | \"gray\" | \"black\";\n className?: string;\n}\n\nexport function Newsletter({\n headline = \"Stay in the loop\",\n description,\n placeholder = \"you@example.com\",\n buttonText = \"Subscribe\",\n onSubmit,\n color = \"white\",\n className,\n}: NewsletterProps) {\n return (\n <BrutalSection color={color} padding=\"sm\" className={className}>\n <div className=\"mx-auto max-w-md border-brutal border-foreground bg-background p-8 text-foreground shadow-brutal-lg\">\n <h3 className=\"brutal-h3 mb-2\">{headline}</h3>\n {description && (\n <p className=\"brutal-body mb-6 text-muted-foreground\">{description}</p>\n )}\n <form\n onSubmit={(e) => {\n e.preventDefault();\n const form = e.target as HTMLFormElement;\n const email = new FormData(form).get(\"email\") as string;\n onSubmit?.(email);\n }}\n className=\"flex gap-3\"\n >\n <Input type=\"email\" name=\"email\" placeholder={placeholder} required className=\"flex-1\" />\n <Button type=\"submit\" variant=\"cta\">{buttonText}</Button>\n </form>\n </div>\n </BrutalSection>\n );\n}\n","import { cn } from \"../../lib/utils\";\nimport { Button } from \"../ui/button\";\nimport { BrutalSection } from \"./section\";\nimport type { SectionColor, SectionPattern } from \"./section\";\n\ninterface BrutalCTAProps {\n headline: string;\n description?: string;\n ctaText: string;\n ctaHref?: string;\n ctaVariant?: \"cta\" | \"brand\" | \"default\" | \"outline\";\n secondaryText?: string;\n secondaryHref?: string;\n color?: SectionColor;\n pattern?: SectionPattern;\n className?: string;\n variant?: \"centered\" | \"split\" | \"with-visual\" | \"floating-card\";\n visual?: React.ReactNode;\n stats?: string;\n}\n\nfunction CTAButtons({\n ctaText,\n ctaHref = \"#\",\n ctaVariant = \"cta\",\n secondaryText,\n secondaryHref,\n}: Pick<\n BrutalCTAProps,\n \"ctaText\" | \"ctaHref\" | \"ctaVariant\" | \"secondaryText\" | \"secondaryHref\"\n>) {\n return (\n <div className=\"flex flex-wrap items-center justify-center gap-4\">\n <Button\n variant={ctaVariant}\n size=\"xl\"\n render={<a href={ctaHref} />}\n >\n {ctaText}\n </Button>\n {secondaryText && (\n <Button\n variant=\"outline\"\n size=\"lg\"\n render={<a href={secondaryHref || \"#\"} />}\n >\n {secondaryText}\n </Button>\n )}\n </div>\n );\n}\n\nfunction CenteredCTA(props: BrutalCTAProps) {\n return (\n <div className=\"mx-auto max-w-2xl text-center\">\n <h2 className=\"brutal-h1 mb-6\">{props.headline}</h2>\n {props.description && (\n <p className=\"brutal-body mb-4 opacity-80\">{props.description}</p>\n )}\n {props.stats && (\n <p className=\"brutal-label mb-8 opacity-60\">{props.stats}</p>\n )}\n <CTAButtons\n ctaText={props.ctaText}\n ctaHref={props.ctaHref}\n ctaVariant={props.ctaVariant}\n secondaryText={props.secondaryText}\n secondaryHref={props.secondaryHref}\n />\n </div>\n );\n}\n\nfunction SplitCTA(props: BrutalCTAProps) {\n return (\n <div className=\"grid items-center gap-12 lg:grid-cols-2\">\n <div>\n <h2 className=\"brutal-h1 mb-6\">{props.headline}</h2>\n {props.description && (\n <p className=\"brutal-body mb-4 opacity-80\">{props.description}</p>\n )}\n {props.stats && (\n <p className=\"brutal-label mb-8 opacity-60\">{props.stats}</p>\n )}\n <div className=\"flex flex-wrap gap-4\">\n <Button\n variant={props.ctaVariant || \"cta\"}\n size=\"xl\"\n render={<a href={props.ctaHref || \"#\"} />}\n >\n {props.ctaText}\n </Button>\n {props.secondaryText && (\n <Button\n variant=\"outline\"\n size=\"lg\"\n render={<a href={props.secondaryHref || \"#\"} />}\n >\n {props.secondaryText}\n </Button>\n )}\n </div>\n </div>\n {props.visual && <div>{props.visual}</div>}\n </div>\n );\n}\n\nfunction WithVisualCTA(props: BrutalCTAProps) {\n return (\n <div className=\"relative\">\n {props.visual && (\n <div className=\"pointer-events-none absolute inset-0 flex items-center justify-center opacity-10\">\n {props.visual}\n </div>\n )}\n <div className=\"relative mx-auto max-w-2xl text-center\">\n <h2 className=\"brutal-h1 mb-6\">{props.headline}</h2>\n {props.description && (\n <p className=\"brutal-body mb-4 opacity-80\">{props.description}</p>\n )}\n {props.stats && (\n <p className=\"brutal-label mb-8 opacity-60\">{props.stats}</p>\n )}\n <CTAButtons\n ctaText={props.ctaText}\n ctaHref={props.ctaHref}\n ctaVariant={props.ctaVariant}\n secondaryText={props.secondaryText}\n secondaryHref={props.secondaryHref}\n />\n </div>\n </div>\n );\n}\n\nfunction FloatingCardCTA(props: BrutalCTAProps) {\n return (\n <div className=\"relative z-10 -mt-16\">\n <div className=\"mx-auto max-w-2xl border-brutal border-foreground bg-background p-8 text-center text-foreground shadow-brutal-lg\">\n <h2 className=\"brutal-h1 mb-6\">{props.headline}</h2>\n {props.description && (\n <p className=\"brutal-body mb-4 opacity-80\">{props.description}</p>\n )}\n {props.stats && (\n <p className=\"brutal-label mb-8 opacity-60\">{props.stats}</p>\n )}\n <CTAButtons\n ctaText={props.ctaText}\n ctaHref={props.ctaHref}\n ctaVariant={props.ctaVariant}\n secondaryText={props.secondaryText}\n secondaryHref={props.secondaryHref}\n />\n </div>\n </div>\n );\n}\n\nexport function BrutalCTA({\n variant = \"centered\",\n color = \"black\",\n className,\n pattern,\n ...props\n}: BrutalCTAProps) {\n // floating-card variant doesn't wrap in a section — it floats above the previous section\n if (variant === \"floating-card\") {\n return (\n <div className={cn(\"brutal-container px-6\", className)}>\n <FloatingCardCTA {...props} variant={variant} color={color} />\n </div>\n );\n }\n\n return (\n <BrutalSection color={color} pattern={pattern} className={className}>\n {variant === \"centered\" && <CenteredCTA {...props} variant={variant} color={color} />}\n {variant === \"split\" && <SplitCTA {...props} variant={variant} color={color} />}\n {variant === \"with-visual\" && <WithVisualCTA {...props} variant={variant} color={color} />}\n </BrutalSection>\n );\n}\n","import { cn } from \"../../lib/utils\";\nimport { Button } from \"../ui/button\";\nimport { Input } from \"../ui/input\";\n\ninterface FooterColumn {\n title: string;\n links: { label: string; href: string }[];\n}\n\ninterface BrutalFooterProps {\n logo: React.ReactNode;\n tagline?: string;\n columns: FooterColumn[];\n bottomLeft?: string;\n bottomRight?: string;\n variant?: \"mega\" | \"minimal\" | \"newsletter\";\n socials?: {\n twitter?: string;\n github?: string;\n linkedin?: string;\n discord?: string;\n };\n newsletter?: {\n headline?: string;\n description?: string;\n placeholder?: string;\n buttonText?: string;\n };\n className?: string;\n}\n\nfunction SocialsRow({\n socials,\n}: {\n socials: NonNullable<BrutalFooterProps[\"socials\"]>;\n}) {\n const items = [\n { key: \"twitter\", label: \"Twitter\", url: socials.twitter },\n { key: \"github\", label: \"GitHub\", url: socials.github },\n { key: \"linkedin\", label: \"LinkedIn\", url: socials.linkedin },\n { key: \"discord\", label: \"Discord\", url: socials.discord },\n ].filter((s) => s.url);\n\n if (items.length === 0) return null;\n\n return (\n <div className=\"flex items-center gap-4\">\n {items.map((s) => (\n <a\n key={s.key}\n href={s.url!}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"text-sm font-bold transition-colors hover:text-muted-foreground\"\n >\n {s.label}\n </a>\n ))}\n </div>\n );\n}\n\nfunction NewsletterSection({\n newsletter,\n}: {\n newsletter: NonNullable<BrutalFooterProps[\"newsletter\"]>;\n}) {\n return (\n <div className=\"mb-10 border-b-brutal border-foreground pb-10\">\n <div className=\"mx-auto max-w-lg text-center\">\n <h3 className=\"brutal-h4 mb-2\">\n {newsletter.headline || \"Stay in the loop\"}\n </h3>\n {newsletter.description && (\n <p className=\"brutal-caption mb-4\">{newsletter.description}</p>\n )}\n <form\n onSubmit={(e) => e.preventDefault()}\n className=\"flex gap-2\"\n >\n <Input\n type=\"email\"\n placeholder={newsletter.placeholder || \"you@email.com\"}\n className=\"flex-1\"\n />\n <Button variant=\"default\" size=\"default\" type=\"submit\">\n {newsletter.buttonText || \"Subscribe\"}\n </Button>\n </form>\n </div>\n </div>\n );\n}\n\nfunction MegaContent({\n logo,\n tagline,\n columns,\n socials,\n}: Pick<BrutalFooterProps, \"logo\" | \"tagline\" | \"columns\" | \"socials\">) {\n return (\n <div className=\"mb-10 flex flex-col gap-8 sm:flex-row sm:items-start sm:justify-between\">\n {/* Logo + tagline */}\n <div className=\"max-w-xs\">\n <div className=\"mb-2 text-xl font-black\">{logo}</div>\n {tagline && (\n <p className=\"mb-4 text-sm text-muted-foreground\">{tagline}</p>\n )}\n {socials && <SocialsRow socials={socials} />}\n </div>\n\n {/* Link columns */}\n <div className=\"grid grid-cols-2 gap-8 sm:grid-cols-3 md:gap-12\">\n {columns.map((col) => (\n <div key={col.title}>\n <h3 className=\"brutal-label mb-3 text-muted-foreground\">\n {col.title}\n </h3>\n <ul className=\"flex flex-col gap-2\">\n {col.links.map((link) => (\n <li key={link.href}>\n <a\n href={link.href}\n className=\"text-sm font-medium transition-colors hover:text-muted-foreground\"\n >\n {link.label}\n </a>\n </li>\n ))}\n </ul>\n </div>\n ))}\n </div>\n </div>\n );\n}\n\nfunction MinimalContent({\n logo,\n columns,\n socials,\n}: Pick<BrutalFooterProps, \"logo\" | \"columns\" | \"socials\">) {\n const allLinks = columns.flatMap((col) => col.links);\n\n return (\n <div className=\"mb-6 flex flex-col items-center gap-4 sm:flex-row sm:justify-between\">\n <div className=\"text-xl font-black\">{logo}</div>\n <nav className=\"flex flex-wrap items-center justify-center gap-x-6 gap-y-2\">\n {allLinks.map((link) => (\n <a\n key={link.href}\n href={link.href}\n className=\"text-sm font-medium transition-colors hover:text-muted-foreground\"\n >\n {link.label}\n </a>\n ))}\n </nav>\n {socials && <SocialsRow socials={socials} />}\n </div>\n );\n}\n\nexport function BrutalFooter({\n logo,\n tagline,\n columns,\n bottomLeft,\n bottomRight,\n variant = \"mega\",\n socials,\n newsletter,\n className,\n}: BrutalFooterProps) {\n return (\n <footer\n className={cn(\n \"w-full border-t-4 bg-background px-6 py-12 text-foreground\",\n className\n )}\n style={{ borderTopColor: \"hsl(var(--brand))\" }}\n >\n <div className=\"brutal-container\">\n {/* Newsletter section (only for newsletter variant) */}\n {variant === \"newsletter\" && newsletter && (\n <NewsletterSection newsletter={newsletter} />\n )}\n\n {/* Main content */}\n {variant === \"minimal\" ? (\n <MinimalContent logo={logo} columns={columns} socials={socials} />\n ) : (\n <MegaContent\n logo={logo}\n tagline={tagline}\n columns={columns}\n socials={socials}\n />\n )}\n\n {/* Bottom bar */}\n <div className=\"flex items-center justify-between border-t-brutal border-foreground pt-6 font-mono text-xs uppercase tracking-widest text-muted-foreground\">\n <span>{bottomLeft || \"Built with care\"}</span>\n <span>{bottomRight || new Date().getFullYear()}</span>\n </div>\n </div>\n </footer>\n );\n}\n","import { BrutalNav } from \"../components/brutal/nav\";\nimport { BrutalHero } from \"../components/brutal/hero\";\nimport { SectionDivider } from \"../components/brutal/section-divider\";\nimport { BrutalFeatureGrid } from \"../components/brutal/feature-grid\";\nimport { BrutalTestimonials } from \"../components/brutal/testimonials\";\nimport { Newsletter } from \"../components/brutal/newsletter\";\nimport { BrutalCTA } from \"../components/brutal/cta-section\";\nimport { BrutalFooter } from \"../components/brutal/footer\";\n\ninterface StudioProps {\n logo: React.ReactNode;\n nav: {\n links: { label: string; href: string; badge?: string; active?: boolean }[];\n ctaText?: string;\n ctaHref?: string;\n };\n hero: {\n badge?: string;\n headline: string;\n description: string;\n ctaText: string;\n ctaHref?: string;\n visual?: React.ReactNode;\n proof?: string;\n };\n features: {\n badge?: string;\n headline: string;\n description?: string;\n items: { icon?: React.ReactNode; title: string; description: string }[];\n };\n testimonials?: {\n badge?: string;\n headline?: string;\n items: { name: string; handle?: string; avatar?: string; text: string; role?: string; company?: string; rating?: 1 | 2 | 3 | 4 | 5; featured?: boolean }[];\n };\n newsletter?: {\n headline?: string;\n description?: string;\n onSubmit?: (email: string) => void;\n };\n cta: {\n headline: string;\n description?: string;\n ctaText: string;\n ctaHref?: string;\n };\n footer: {\n tagline?: string;\n columns: { title: string; links: { label: string; href: string }[] }[];\n };\n}\n\nexport function StudioTemplate({\n logo,\n nav,\n hero,\n features,\n testimonials,\n newsletter,\n cta,\n footer,\n}: StudioProps) {\n return (\n <div>\n <BrutalNav logo={logo} links={nav.links} ctaText={nav.ctaText} ctaHref={nav.ctaHref} variant=\"floating-pill\" />\n\n <BrutalHero\n variant=\"asymmetric\"\n badge={hero.badge}\n headline={hero.headline}\n description={hero.description}\n ctaText={hero.ctaText}\n ctaHref={hero.ctaHref}\n visual={hero.visual}\n proof={hero.proof}\n color=\"brand\"\n pattern=\"grain\"\n />\n\n <SectionDivider from=\"hsl(var(--brand))\" to=\"hsl(var(--background))\" variant=\"brush-stroke\" />\n\n <BrutalFeatureGrid\n variant=\"numbered\"\n badge={features.badge}\n headline={features.headline}\n description={features.description}\n features={features.items}\n color=\"white\"\n />\n\n {testimonials && (\n <>\n <SectionDivider from=\"hsl(var(--background))\" to=\"hsl(var(--section-gray))\" variant=\"diagonal\" />\n <BrutalTestimonials\n variant=\"featured-grid\"\n badge={testimonials.badge}\n headline={testimonials.headline}\n testimonials={testimonials.items}\n color=\"gray\"\n />\n <SectionDivider from=\"hsl(var(--section-gray))\" to=\"hsl(var(--background))\" variant=\"diagonal\" flip />\n </>\n )}\n\n {newsletter && (\n <Newsletter\n headline={newsletter.headline}\n description={newsletter.description}\n onSubmit={newsletter.onSubmit}\n />\n )}\n\n <BrutalCTA\n variant=\"floating-card\"\n headline={cta.headline}\n description={cta.description}\n ctaText={cta.ctaText}\n ctaHref={cta.ctaHref}\n color=\"brand\"\n />\n\n <BrutalFooter\n variant=\"minimal\"\n logo={logo}\n tagline={footer.tagline}\n columns={footer.columns}\n />\n </div>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/lib/utils.ts","../../src/components/ui/button.tsx","../../src/components/ui/sheet.tsx","../../src/components/brutal/nav.tsx","../../src/components/brutal/section.tsx","../../src/components/brutal/hero.tsx","../../src/components/brutal/section-divider.tsx","../../src/components/ui/card.tsx","../../src/components/brutal/feature-grid.tsx","../../src/components/brutal/testimonials.tsx","../../src/components/ui/input.tsx","../../src/components/brutal/newsletter.tsx","../../src/components/brutal/cta-section.tsx","../../src/components/brutal/footer.tsx","../../src/templates/studio.tsx"],"names":["ButtonPrimitive","jsx","SheetPrimitive","jsxs","InputPrimitive"],"mappings":"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","file":"studio.js","sourcesContent":["import { clsx, type ClassValue } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n","\"use client\";\n\nimport { Button as ButtonPrimitive } from \"@base-ui/react/button\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"../../lib/utils\";\n\nconst buttonVariants = cva(\n \"group/button inline-flex shrink-0 items-center justify-center rounded-lg whitespace-nowrap font-bold transition-all duration-150 select-none outline-none disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n {\n variants: {\n variant: {\n // Primary: Black bg, white text, offset shadow\n default:\n \"border-brutal border-foreground bg-primary text-primary-foreground shadow-brutal hover:-translate-x-0.5 hover:-translate-y-0.5 hover:shadow-brutal-lg active:translate-x-px active:translate-y-px active:shadow-brutal-sm\",\n // CTA: Mint green bg — the Bannerbear signature\n cta: \"border-brutal border-foreground bg-cta text-cta-foreground shadow-brutal hover:-translate-x-0.5 hover:-translate-y-0.5 hover:shadow-brutal-lg active:translate-x-px active:translate-y-px active:shadow-brutal-sm\",\n // Brand: Dynamic brand color bg\n brand:\n \"border-brutal border-foreground bg-brand text-brand-foreground shadow-brutal hover:-translate-x-0.5 hover:-translate-y-0.5 hover:shadow-brutal-lg active:translate-x-px active:translate-y-px active:shadow-brutal-sm\",\n // Outline: White bg, black border, offset shadow\n outline:\n \"border-brutal border-foreground bg-background text-foreground shadow-brutal hover:-translate-x-0.5 hover:-translate-y-0.5 hover:shadow-brutal-lg active:translate-x-px active:translate-y-px active:shadow-brutal-sm\",\n // Secondary: Light bg, border, smaller shadow\n secondary:\n \"border-brutal border-foreground bg-secondary text-secondary-foreground shadow-brutal-sm hover:-translate-x-0.5 hover:-translate-y-0.5 hover:shadow-brutal active:translate-x-px active:translate-y-px active:shadow-none\",\n // Ghost: No border/shadow, subtle hover\n ghost: \"hover:bg-secondary hover:text-foreground\",\n // Link: Text only\n link: \"text-foreground underline-offset-4 hover:underline\",\n // Destructive\n destructive:\n \"border-brutal border-destructive bg-destructive text-destructive-foreground shadow-brutal hover:-translate-x-0.5 hover:-translate-y-0.5 hover:shadow-brutal-lg active:translate-x-px active:translate-y-px active:shadow-brutal-sm\",\n // Nav: Thin border, no shadow (for nav Sign In buttons)\n nav: \"border border-foreground bg-background text-foreground hover:bg-foreground hover:text-background\",\n },\n size: {\n xs: \"h-7 gap-1 px-2.5 text-xs\",\n sm: \"h-8 gap-1.5 px-3 text-sm\",\n default: \"h-10 gap-2 px-5 text-sm\",\n lg: \"h-12 gap-2 px-7 text-base\",\n xl: \"h-14 gap-2.5 px-9 text-lg\",\n icon: \"size-10\",\n \"icon-sm\": \"size-8\",\n \"icon-lg\": \"size-12\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n);\n\nfunction Button({\n className,\n variant = \"default\",\n size = \"default\",\n ...props\n}: ButtonPrimitive.Props & VariantProps<typeof buttonVariants>) {\n return (\n <ButtonPrimitive\n data-slot=\"button\"\n className={cn(buttonVariants({ variant, size, className }))}\n {...props}\n />\n );\n}\n\nexport { Button, buttonVariants };\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Dialog as SheetPrimitive } from \"@base-ui/react/dialog\"\n\nimport { cn } from \"../../lib/utils\"\nimport { Button } from \"./button\"\nimport { XIcon } from \"lucide-react\"\n\nfunction Sheet({ ...props }: SheetPrimitive.Root.Props) {\n return <SheetPrimitive.Root data-slot=\"sheet\" {...props} />\n}\n\nfunction SheetTrigger({ ...props }: SheetPrimitive.Trigger.Props) {\n return <SheetPrimitive.Trigger data-slot=\"sheet-trigger\" {...props} />\n}\n\nfunction SheetClose({ ...props }: SheetPrimitive.Close.Props) {\n return <SheetPrimitive.Close data-slot=\"sheet-close\" {...props} />\n}\n\nfunction SheetPortal({ ...props }: SheetPrimitive.Portal.Props) {\n return <SheetPrimitive.Portal data-slot=\"sheet-portal\" {...props} />\n}\n\nfunction SheetOverlay({ className, ...props }: SheetPrimitive.Backdrop.Props) {\n return (\n <SheetPrimitive.Backdrop\n data-slot=\"sheet-overlay\"\n className={cn(\n \"fixed inset-0 z-50 bg-black/60 transition-opacity duration-150 data-ending-style:opacity-0 data-starting-style:opacity-0\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SheetContent({\n className,\n children,\n side = \"right\",\n showCloseButton = true,\n ...props\n}: SheetPrimitive.Popup.Props & {\n side?: \"top\" | \"right\" | \"bottom\" | \"left\"\n showCloseButton?: boolean\n}) {\n return (\n <SheetPortal>\n <SheetOverlay />\n <SheetPrimitive.Popup\n data-slot=\"sheet-content\"\n data-side={side}\n className={cn(\n \"fixed z-50 flex flex-col gap-4 border-brutal border-foreground bg-background bg-clip-padding text-sm shadow-brutal-lg transition duration-200 ease-in-out data-ending-style:opacity-0 data-starting-style:opacity-0 data-[side=bottom]:inset-x-0 data-[side=bottom]:bottom-0 data-[side=bottom]:h-auto data-[side=bottom]:data-ending-style:translate-y-[2.5rem] data-[side=bottom]:data-starting-style:translate-y-[2.5rem] data-[side=left]:inset-y-0 data-[side=left]:left-0 data-[side=left]:h-full data-[side=left]:w-3/4 data-[side=left]:data-ending-style:translate-x-[-2.5rem] data-[side=left]:data-starting-style:translate-x-[-2.5rem] data-[side=right]:inset-y-0 data-[side=right]:right-0 data-[side=right]:h-full data-[side=right]:w-3/4 data-[side=right]:data-ending-style:translate-x-[2.5rem] data-[side=right]:data-starting-style:translate-x-[2.5rem] data-[side=top]:inset-x-0 data-[side=top]:top-0 data-[side=top]:h-auto data-[side=top]:data-ending-style:translate-y-[-2.5rem] data-[side=top]:data-starting-style:translate-y-[-2.5rem] data-[side=left]:sm:max-w-sm data-[side=right]:sm:max-w-sm\",\n className\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <SheetPrimitive.Close\n data-slot=\"sheet-close\"\n render={\n <Button\n variant=\"ghost\"\n className=\"absolute top-3 right-3\"\n size=\"icon-sm\"\n />\n }\n >\n <XIcon\n />\n <span className=\"sr-only\">Close</span>\n </SheetPrimitive.Close>\n )}\n </SheetPrimitive.Popup>\n </SheetPortal>\n )\n}\n\nfunction SheetHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sheet-header\"\n className={cn(\"flex flex-col gap-0.5 p-4\", className)}\n {...props}\n />\n )\n}\n\nfunction SheetFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sheet-footer\"\n className={cn(\"mt-auto flex flex-col gap-2 p-4\", className)}\n {...props}\n />\n )\n}\n\nfunction SheetTitle({ className, ...props }: SheetPrimitive.Title.Props) {\n return (\n <SheetPrimitive.Title\n data-slot=\"sheet-title\"\n className={cn(\"text-base font-bold text-foreground\", className)}\n {...props}\n />\n )\n}\n\nfunction SheetDescription({\n className,\n ...props\n}: SheetPrimitive.Description.Props) {\n return (\n <SheetPrimitive.Description\n data-slot=\"sheet-description\"\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Sheet,\n SheetTrigger,\n SheetClose,\n SheetContent,\n SheetHeader,\n SheetFooter,\n SheetTitle,\n SheetDescription,\n}\n","\"use client\";\n\nimport { useState, useEffect } from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { Button } from \"../ui/button\";\nimport {\n Sheet,\n SheetContent,\n SheetTrigger,\n SheetTitle,\n} from \"../ui/sheet\";\nimport { Menu } from \"lucide-react\";\n\ninterface NavLink {\n label: string;\n href: string;\n badge?: string;\n active?: boolean;\n}\n\ninterface BrutalNavProps {\n logo: React.ReactNode;\n links: NavLink[];\n ctaText?: string;\n ctaHref?: string;\n variant?: \"solid\" | \"transparent\" | \"floating-pill\";\n className?: string;\n}\n\nexport function BrutalNav({\n logo,\n links,\n ctaText = \"Sign In\",\n ctaHref = \"/admin\",\n variant = \"solid\",\n className,\n}: BrutalNavProps) {\n const [mobileOpen, setMobileOpen] = useState(false);\n const [isScrolled, setIsScrolled] = useState(false);\n\n useEffect(() => {\n if (variant !== \"transparent\") return;\n const onScroll = () => setIsScrolled(window.scrollY > 20);\n onScroll(); // check on mount\n window.addEventListener(\"scroll\", onScroll, { passive: true });\n return () => window.removeEventListener(\"scroll\", onScroll);\n }, [variant]);\n\n const variantStyles = {\n solid: \"sticky top-0 z-50 w-full border-b-brutal border-foreground bg-brand\",\n transparent: cn(\n \"fixed top-0 left-0 right-0 z-50 w-full transition-all duration-200\",\n isScrolled\n ? \"bg-background/80 text-foreground backdrop-blur-md border-b border-foreground/10\"\n : \"bg-transparent text-white\"\n ),\n \"floating-pill\":\n \"fixed top-0 left-0 right-0 z-50 mx-4 mt-4 rounded-full border-brutal border-foreground bg-background shadow-brutal\",\n };\n\n return (\n <header className={cn(variantStyles[variant], className)}>\n <div\n className={cn(\n \"flex h-14 items-center justify-between px-6\",\n variant === \"floating-pill\" ? \"mx-auto max-w-7xl\" : \"brutal-container\"\n )}\n >\n {/* Logo */}\n <a href=\"/\" className=\"flex items-center gap-2 text-lg font-black\">\n {logo}\n </a>\n\n {/* Center links (desktop) */}\n <nav className=\"hidden items-center gap-1 md:flex\">\n {links.map((link) => (\n <a\n key={link.href}\n href={link.href}\n className={cn(\n \"relative rounded-md px-3 py-1.5 text-sm font-bold transition-colors hover:opacity-70\",\n link.active && \"bg-foreground/10\"\n )}\n >\n {link.label}\n {link.badge && (\n <span className=\"absolute -top-1 -right-1 border border-foreground bg-background px-1 font-mono text-[9px] font-bold uppercase text-foreground\">\n {link.badge}\n </span>\n )}\n </a>\n ))}\n </nav>\n\n {/* Right side: CTA + Hamburger */}\n <div className=\"flex items-center gap-2\">\n <Button\n variant=\"nav\"\n size=\"sm\"\n render={<a href={ctaHref} />}\n className=\"hidden md:inline-flex\"\n >\n {ctaText}\n </Button>\n\n {/* Mobile hamburger */}\n <Sheet open={mobileOpen} onOpenChange={setMobileOpen}>\n <SheetTrigger\n render={\n <Button variant=\"ghost\" size=\"icon-sm\" className=\"md:hidden\" />\n }\n >\n <Menu className=\"size-5\" />\n <span className=\"sr-only\">Menu</span>\n </SheetTrigger>\n <SheetContent side=\"right\" showCloseButton>\n <SheetTitle>Navigation</SheetTitle>\n <nav className=\"flex flex-col gap-1 px-2 pt-4\">\n {links.map((link) => (\n <a\n key={link.href}\n href={link.href}\n onClick={() => setMobileOpen(false)}\n className={cn(\n \"flex items-center gap-2 rounded-md px-3 py-2.5 text-sm font-bold transition-colors hover:bg-foreground/5\",\n link.active && \"bg-foreground/10\"\n )}\n >\n {link.label}\n {link.badge && (\n <span className=\"border border-foreground bg-background px-1 font-mono text-[9px] font-bold uppercase text-foreground\">\n {link.badge}\n </span>\n )}\n </a>\n ))}\n <div className=\"mt-4 border-t border-foreground/10 pt-4\">\n <Button\n variant=\"default\"\n size=\"default\"\n render={<a href={ctaHref} />}\n className=\"w-full\"\n >\n {ctaText}\n </Button>\n </div>\n </nav>\n </SheetContent>\n </Sheet>\n </div>\n </div>\n </header>\n );\n}\n","import { cn } from \"../../lib/utils\";\n\nexport type SectionColor =\n | \"white\"\n | \"brand\"\n | \"brand-muted\"\n | \"blue\"\n | \"gray\"\n | \"cream\"\n | \"black\"\n | \"cta\";\n\nexport type SectionPattern =\n | \"dots\"\n | \"stripes\"\n | \"noise\"\n | \"grain\"\n | \"crosshatch\"\n | \"grid-dots\"\n | \"gradient-mesh\"\n | \"none\";\n\ninterface BrutalSectionProps {\n children: React.ReactNode;\n color?: SectionColor;\n className?: string;\n containerSize?: \"sm\" | \"default\" | \"lg\";\n padding?: \"sm\" | \"default\" | \"lg\";\n pattern?: SectionPattern;\n /** @deprecated Use pattern=\"dots\" instead */\n dots?: boolean;\n /** @deprecated Use pattern=\"stripes\" instead */\n stripes?: boolean;\n id?: string;\n}\n\nconst colorMap: Record<SectionColor, string> = {\n white: \"bg-background text-foreground\",\n brand: \"bg-brand\",\n \"brand-muted\": \"bg-brand-muted text-foreground\",\n blue: \"bg-section-blue\",\n gray: \"bg-section-gray text-foreground\",\n cream: \"bg-section-cream text-foreground\",\n black: \"bg-foreground text-background\",\n cta: \"bg-cta\",\n};\n\nconst containerMap = {\n sm: \"brutal-container-sm\",\n default: \"brutal-container\",\n lg: \"brutal-container-lg\",\n};\n\nconst paddingMap = {\n sm: \"brutal-section-sm\",\n default: \"brutal-section\",\n lg: \"brutal-section py-28 sm:py-36 md:py-44\",\n};\n\nconst patternMap: Record<SectionPattern, string> = {\n dots: \"brutal-dots\",\n stripes: \"brutal-stripes\",\n noise: \"brutal-noise\",\n grain: \"brutal-grain\",\n crosshatch: \"brutal-crosshatch\",\n \"grid-dots\": \"brutal-grid-dots\",\n \"gradient-mesh\": \"brutal-gradient-mesh\",\n none: \"\",\n};\n\nexport function BrutalSection({\n children,\n color = \"white\",\n className,\n containerSize = \"default\",\n padding = \"default\",\n pattern,\n dots = false,\n stripes = false,\n id,\n}: BrutalSectionProps) {\n const resolvedPattern = pattern\n ?? (dots ? \"dots\" : undefined)\n ?? (stripes ? \"stripes\" : undefined)\n ?? \"none\";\n\n return (\n <section\n id={id}\n className={cn(\n paddingMap[padding],\n colorMap[color],\n patternMap[resolvedPattern],\n className\n )}\n >\n <div className={containerMap[containerSize]}>{children}</div>\n </section>\n );\n}\n","import { cn } from \"../../lib/utils\";\nimport { Button } from \"../ui/button\";\nimport { BrutalSection } from \"./section\";\nimport type { SectionPattern } from \"./section\";\n\ntype HeroVariant = \"split\" | \"centered\" | \"overlap\" | \"asymmetric\";\n\ninterface BrutalHeroProps {\n variant?: HeroVariant;\n badge?: string;\n badgePosition?: \"above\" | \"inline\" | \"floating\";\n headline: string;\n description: string;\n ctaText: string;\n ctaHref?: string;\n ctaVariant?: \"cta\" | \"brand\" | \"default\";\n secondaryText?: string;\n secondaryHref?: string;\n visual?: React.ReactNode;\n color?: \"white\" | \"brand\" | \"brand-muted\" | \"gray\";\n pattern?: SectionPattern;\n proof?: string;\n className?: string;\n}\n\nexport function BrutalHero({\n variant = \"split\",\n badge,\n badgePosition = \"above\",\n headline,\n description,\n ctaText,\n ctaHref = \"#\",\n ctaVariant = \"cta\",\n secondaryText,\n secondaryHref,\n visual,\n color = \"brand\",\n pattern,\n proof,\n className,\n}: BrutalHeroProps) {\n const badgeElement = badge && (\n <div\n className={cn(\n \"inline-flex w-fit border-brutal border-foreground bg-background px-3 py-1 font-mono text-xs font-bold uppercase tracking-widest text-foreground shadow-brutal-sm\",\n badgePosition === \"floating\" && \"absolute -top-3 left-6 z-10\",\n )}\n >\n {badge}\n </div>\n );\n\n const textContent = (\n <div className={cn(\n \"flex flex-col gap-6\",\n variant === \"centered\" && \"items-center text-center\",\n )}>\n {badgePosition === \"above\" && badgeElement}\n\n <h1 className={cn(\n \"brutal-display text-balance\",\n variant === \"centered\" && \"mx-auto max-w-4xl\",\n )}>\n {badgePosition === \"inline\" && badgeElement}\n {headline}\n </h1>\n\n <p className={cn(\n \"brutal-body-lg max-w-lg opacity-80\",\n variant === \"centered\" && \"mx-auto\",\n )}>\n {description}\n </p>\n\n <div className={cn(\n \"flex flex-col gap-3 sm:flex-row sm:gap-4\",\n variant === \"centered\" && \"sm:justify-center\",\n )}>\n <Button variant={ctaVariant} size=\"xl\" className=\"w-full sm:w-auto\" render={<a href={ctaHref} />}>\n {ctaText}\n </Button>\n {secondaryText && (\n <Button variant=\"outline\" size=\"xl\" className=\"w-full sm:w-auto\" render={<a href={secondaryHref || \"#\"} />}>\n {secondaryText}\n </Button>\n )}\n </div>\n\n {proof && (\n <p className=\"flex items-center gap-2 text-sm font-medium opacity-70\">\n <span className=\"inline-flex size-5 items-center justify-center border border-current text-xs\">\n ✓\n </span>\n {proof}\n </p>\n )}\n </div>\n );\n\n const layoutClass = {\n split: \"grid items-center gap-12 lg:grid-cols-2 lg:gap-16\",\n centered: \"flex flex-col items-center gap-12\",\n overlap: \"relative\",\n asymmetric: \"grid items-center gap-12 lg:grid-cols-[3fr_2fr] lg:gap-16\",\n }[variant];\n\n return (\n <BrutalSection color={color} padding=\"lg\" pattern={pattern} className={cn(\"relative\", className)}>\n {badgePosition === \"floating\" && badgeElement}\n\n <div className={layoutClass}>\n {textContent}\n\n {visual && variant === \"overlap\" ? (\n <div className=\"pointer-events-none absolute inset-0 flex items-center justify-center opacity-20\">\n {visual}\n </div>\n ) : visual ? (\n <div className={cn(\n \"flex items-center justify-center\",\n variant === \"asymmetric\" && \"-rotate-2 transform\",\n )}>\n {visual}\n </div>\n ) : null}\n </div>\n </BrutalSection>\n );\n}\n","import { cn } from \"../../lib/utils\";\n\ntype DividerVariant =\n | \"wave\"\n | \"jagged\"\n | \"curve\"\n | \"castle\"\n | \"torn-paper\"\n | \"brush-stroke\"\n | \"geometric\"\n | \"blob\"\n | \"diagonal\"\n | \"zigzag\"\n | \"hand-drawn\";\n\ninterface SectionDividerProps {\n from?: string;\n to?: string;\n flip?: boolean;\n className?: string;\n variant?: DividerVariant;\n layers?: boolean;\n}\n\nconst paths: Record<DividerVariant, string> = {\n wave: \"M0,64 C160,128 320,0 480,64 C640,128 800,0 960,64 L960,160 L0,160 Z\",\n jagged: \"M0,80 L80,40 L160,80 L240,20 L320,80 L400,40 L480,80 L560,20 L640,80 L720,40 L800,80 L880,20 L960,80 L960,160 L0,160 Z\",\n curve: \"M0,128 Q480,-32 960,128 L960,160 L0,160 Z\",\n castle: \"M0,80 L0,60 L80,60 L80,80 L120,80 L120,40 L200,40 L200,80 L240,80 L240,60 L320,60 L320,80 L360,80 L360,40 L440,40 L440,80 L480,80 L480,60 L560,60 L560,80 L600,80 L600,40 L680,40 L680,80 L720,80 L720,60 L800,60 L800,80 L840,80 L840,40 L920,40 L920,80 L960,80 L960,160 L0,160 Z\",\n \"torn-paper\": \"M0,70 C30,65 45,85 80,72 C115,59 130,90 170,78 C210,66 225,88 270,75 C315,62 340,92 380,79 C420,66 445,86 490,73 C535,60 560,88 600,76 C640,64 665,90 710,77 C755,64 780,84 830,71 C875,58 900,86 960,80 L960,160 L0,160 Z\",\n \"brush-stroke\": \"M0,90 C80,50 120,100 200,60 C280,20 360,110 480,70 C600,30 640,100 720,80 C800,60 880,100 960,70 L960,160 L0,160 Z\",\n geometric: \"M0,100 L120,60 L240,80 L360,40 L480,90 L600,50 L720,70 L840,30 L960,80 L960,160 L0,160 Z\",\n blob: \"M0,80 C80,120 160,40 280,80 C400,120 440,30 560,70 C680,110 760,40 960,80 L960,160 L0,160 Z\",\n diagonal: \"M0,160 L960,60 L960,160 Z\",\n zigzag: \"M0,80 L60,40 L120,80 L180,40 L240,80 L300,40 L360,80 L420,40 L480,80 L540,40 L600,80 L660,40 L720,80 L780,40 L840,80 L900,40 L960,80 L960,160 L0,160 Z\",\n \"hand-drawn\": \"M0,72 C20,68 35,82 60,75 C85,68 95,84 125,76 C155,68 170,85 200,77 C230,69 245,83 275,75 C305,67 320,86 350,78 C380,70 395,82 425,74 C455,66 470,84 500,76 C530,68 545,83 575,75 C605,67 620,85 650,77 C680,69 695,82 725,74 C755,66 770,84 800,76 C830,68 845,83 875,75 C905,67 920,82 960,74 L960,160 L0,160 Z\",\n};\n\nexport function SectionDivider({\n from = \"hsl(var(--background))\",\n to = \"hsl(var(--background))\",\n flip = false,\n className = \"\",\n variant = \"wave\",\n layers = false,\n}: SectionDividerProps) {\n return (\n <div\n className={cn(\"relative -my-px w-full overflow-hidden\", className)}\n style={{ backgroundColor: from }}\n >\n {layers && (\n <svg\n viewBox=\"0 0 960 160\"\n preserveAspectRatio=\"none\"\n className=\"absolute inset-0 block w-full opacity-30\"\n style={{\n height: \"clamp(40px, 6vw, 80px)\",\n transform: flip ? \"scaleY(-1) translateY(4px)\" : \"translateY(-4px)\",\n }}\n >\n <path d={paths[variant]} fill={to} />\n </svg>\n )}\n <svg\n viewBox=\"0 0 960 160\"\n preserveAspectRatio=\"none\"\n className=\"relative block w-full\"\n style={{\n height: \"clamp(40px, 6vw, 80px)\",\n transform: flip ? \"scaleY(-1)\" : undefined,\n }}\n >\n <path d={paths[variant]} fill={to} />\n </svg>\n </div>\n );\n}\n","import * as React from \"react\";\n\nimport { cn } from \"../../lib/utils\";\n\nfunction Card({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card\"\n className={cn(\n \"group/card flex flex-col gap-4 rounded-lg border-brutal border-foreground bg-card p-5 text-card-foreground shadow-brutal transition-all duration-150 hover:-translate-x-0.5 hover:-translate-y-0.5 hover:shadow-brutal-lg\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction CardHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-header\"\n className={cn(\"flex flex-col gap-1\", className)}\n {...props}\n />\n );\n}\n\nfunction CardTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-title\"\n className={cn(\"text-lg font-bold leading-snug\", className)}\n {...props}\n />\n );\n}\n\nfunction CardDescription({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-description\"\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n );\n}\n\nfunction CardAction({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-action\"\n className={cn(\"self-start justify-self-end\", className)}\n {...props}\n />\n );\n}\n\nfunction CardContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-content\"\n className={cn(\"\", className)}\n {...props}\n />\n );\n}\n\nfunction CardFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-footer\"\n className={cn(\n \"flex items-center border-t-brutal border-foreground pt-4\",\n className\n )}\n {...props}\n />\n );\n}\n\nexport {\n Card,\n CardHeader,\n CardFooter,\n CardTitle,\n CardAction,\n CardDescription,\n CardContent,\n};\n","import { cn } from \"../../lib/utils\";\nimport {\n Card,\n CardHeader,\n CardTitle,\n CardDescription,\n CardContent,\n} from \"../ui/card\";\nimport { BrutalSection } from \"./section\";\n\ntype FeatureGridVariant = \"icon-top\" | \"icon-left\" | \"numbered\" | \"bento\";\n\ninterface Feature {\n icon?: React.ReactNode;\n title: string;\n description: string;\n featured?: boolean;\n stat?: string;\n}\n\ninterface BrutalFeatureGridProps {\n variant?: FeatureGridVariant;\n badge?: string;\n headline: string;\n description?: string;\n features: Feature[];\n columns?: 2 | 3 | 4;\n color?: \"white\" | \"brand\" | \"brand-muted\" | \"gray\" | \"cream\";\n className?: string;\n}\n\nconst colMap = {\n 2: \"sm:grid-cols-2\",\n 3: \"sm:grid-cols-2 lg:grid-cols-3\",\n 4: \"sm:grid-cols-2 lg:grid-cols-4\",\n};\n\nexport function BrutalFeatureGrid({\n variant = \"icon-top\",\n badge,\n headline,\n description,\n features,\n columns = 3,\n color = \"white\",\n className,\n}: BrutalFeatureGridProps) {\n return (\n <BrutalSection color={color} className={className}>\n <div className=\"mb-12 max-w-2xl\">\n {badge && (\n <p className=\"brutal-label mb-4 text-brand\">{badge}</p>\n )}\n <h2 className=\"brutal-h2 mb-4\">{headline}</h2>\n {description && (\n <p className=\"brutal-body text-muted-foreground\">{description}</p>\n )}\n </div>\n\n <div\n className={cn(\n \"grid gap-6\",\n variant === \"bento\" ? \"sm:grid-cols-2 lg:grid-cols-3\" : colMap[columns],\n )}\n >\n {features.map((feature, i) => (\n <FeatureCard\n key={feature.title}\n feature={feature}\n variant={variant}\n index={i}\n />\n ))}\n </div>\n </BrutalSection>\n );\n}\n\nfunction FeatureCard({\n feature,\n variant,\n index,\n}: {\n feature: Feature;\n variant: FeatureGridVariant;\n index: number;\n}) {\n const isBentoFeatured = variant === \"bento\" && feature.featured;\n\n if (variant === \"icon-left\") {\n return (\n <div className=\"flex gap-4 border-brutal border-foreground border-l-4 border-l-brand bg-background p-5 shadow-brutal transition-all duration-150 hover:-translate-x-0.5 hover:-translate-y-0.5 hover:shadow-brutal-lg\">\n {feature.icon && (\n <div className=\"flex size-12 shrink-0 items-center justify-center border-brutal border-foreground bg-brand-muted text-2xl shadow-brutal-sm\">\n {feature.icon}\n </div>\n )}\n <div>\n {feature.stat && (\n <p className=\"brutal-label mb-1 text-brand\">{feature.stat}</p>\n )}\n <h3 className=\"brutal-h4 mb-1\">{feature.title}</h3>\n <p className=\"text-sm text-muted-foreground\">{feature.description}</p>\n </div>\n </div>\n );\n }\n\n if (variant === \"numbered\") {\n return (\n <Card>\n <CardHeader>\n <span className=\"brutal-display mb-2 block text-brand opacity-20\">\n {String(index + 1).padStart(2, \"0\")}\n </span>\n {feature.stat && (\n <p className=\"brutal-label mb-1 text-brand\">{feature.stat}</p>\n )}\n <CardTitle>{feature.title}</CardTitle>\n </CardHeader>\n <CardContent>\n <CardDescription>{feature.description}</CardDescription>\n </CardContent>\n </Card>\n );\n }\n\n return (\n <Card\n className={cn(\n isBentoFeatured && \"sm:col-span-2 bg-brand-muted\",\n )}\n >\n <CardHeader>\n {feature.icon && (\n <div className=\"mb-2 inline-flex size-12 items-center justify-center border-brutal border-foreground border-b-brand bg-brand-muted text-2xl shadow-brutal-sm\">\n {feature.icon}\n </div>\n )}\n {feature.stat && (\n <p className=\"brutal-label mb-1 text-brand\">{feature.stat}</p>\n )}\n <CardTitle>{feature.title}</CardTitle>\n </CardHeader>\n <CardContent>\n <CardDescription>{feature.description}</CardDescription>\n </CardContent>\n </Card>\n );\n}\n","import { cn } from \"../../lib/utils\";\nimport { BrutalSection } from \"./section\";\nimport type { SectionColor, SectionPattern } from \"./section\";\n\nexport interface Testimonial {\n name: string;\n handle?: string;\n avatar?: string;\n text: string;\n role?: string;\n company?: string;\n companyLogo?: string;\n rating?: 1 | 2 | 3 | 4 | 5;\n featured?: boolean;\n}\n\ninterface BrutalTestimonialsProps {\n badge?: string;\n headline?: string;\n testimonials: Testimonial[];\n variant?: \"masonry\" | \"featured-grid\" | \"carousel\" | \"wall-of-love\";\n color?: SectionColor;\n pattern?: SectionPattern;\n className?: string;\n}\n\nfunction StarRating({ rating }: { rating: number }) {\n return (\n <div className=\"flex gap-0.5\">\n {Array.from({ length: 5 }, (_, i) => (\n <span\n key={i}\n className={cn(\n \"text-sm\",\n i < rating ? \"text-amber-500\" : \"text-foreground/20\"\n )}\n >\n ★\n </span>\n ))}\n </div>\n );\n}\n\nfunction TestimonialCard({\n t,\n className,\n}: {\n t: Testimonial;\n className?: string;\n}) {\n return (\n <div\n className={cn(\n \"relative break-inside-avoid border-brutal border-foreground bg-background p-5 text-foreground shadow-brutal transition-all duration-150 hover:-translate-x-0.5 hover:-translate-y-0.5 hover:shadow-brutal-lg\",\n className\n )}\n >\n {/* Decorative quote mark */}\n <span className=\"pointer-events-none absolute top-3 right-4 select-none font-serif text-5xl leading-none text-foreground/[0.06]\">\n “\n </span>\n\n {t.rating && (\n <div className=\"mb-3\">\n <StarRating rating={t.rating} />\n </div>\n )}\n\n <p className=\"relative mb-4 text-sm leading-relaxed\">{t.text}</p>\n\n <div className=\"flex items-center gap-3\">\n {t.avatar ? (\n <img\n src={t.avatar}\n alt={t.name}\n className=\"size-9 border-2 object-cover\"\n style={{ borderColor: \"hsl(var(--brand))\" }}\n />\n ) : (\n <div\n className=\"flex size-9 items-center justify-center border-2 font-bold text-brand-foreground\"\n style={{\n borderColor: \"hsl(var(--brand))\",\n backgroundColor: \"hsl(var(--brand))\",\n }}\n >\n {t.name[0]}\n </div>\n )}\n <div className=\"min-w-0 flex-1\">\n <p className=\"text-sm font-bold\">{t.name}</p>\n {(t.role || t.company) && (\n <p className=\"truncate text-xs text-muted-foreground\">\n {t.role}\n {t.role && t.company && \" · \"}\n {t.company}\n </p>\n )}\n {!t.role && !t.company && t.handle && (\n <p className=\"font-mono text-xs text-muted-foreground\">\n {t.handle}\n </p>\n )}\n </div>\n {t.companyLogo && (\n <img\n src={t.companyLogo}\n alt={t.company || \"\"}\n className=\"h-5 object-contain opacity-60\"\n />\n )}\n </div>\n </div>\n );\n}\n\nfunction MasonryLayout({ testimonials }: { testimonials: Testimonial[] }) {\n return (\n <div className=\"columns-1 gap-6 sm:columns-2 lg:columns-3\">\n {testimonials.map((t, i) => (\n <TestimonialCard key={i} t={t} className=\"mb-6\" />\n ))}\n </div>\n );\n}\n\nfunction FeaturedGridLayout({\n testimonials,\n}: {\n testimonials: Testimonial[];\n}) {\n const featured = testimonials.find((t) => t.featured) || testimonials[0];\n const rest = testimonials.filter((t) => t !== featured);\n\n return (\n <div className=\"grid gap-6 lg:grid-cols-2\">\n {/* Large featured card */}\n {featured && (\n <TestimonialCard\n t={featured}\n className=\"flex flex-col justify-between p-8 lg:row-span-2\"\n />\n )}\n {/* Smaller grid */}\n {rest.map((t, i) => (\n <TestimonialCard key={i} t={t} />\n ))}\n </div>\n );\n}\n\nfunction CarouselLayout({ testimonials }: { testimonials: Testimonial[] }) {\n return (\n <div className=\"-mx-6 flex snap-x snap-mandatory gap-6 overflow-x-auto px-6 pb-4\">\n {testimonials.map((t, i) => (\n <TestimonialCard\n key={i}\n t={t}\n className=\"w-80 flex-none snap-center\"\n />\n ))}\n </div>\n );\n}\n\nfunction WallOfLoveLayout({ testimonials }: { testimonials: Testimonial[] }) {\n return (\n <div className=\"relative max-h-[600px] overflow-hidden\">\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-4\">\n {testimonials.map((t, i) => (\n <TestimonialCard key={i} t={t} />\n ))}\n </div>\n {/* Fade overlay at bottom */}\n <div className=\"pointer-events-none absolute inset-x-0 bottom-0 h-32 bg-gradient-to-t from-background to-transparent\" />\n </div>\n );\n}\n\nexport function BrutalTestimonials({\n badge,\n headline,\n testimonials,\n variant = \"masonry\",\n color = \"blue\",\n pattern,\n className,\n}: BrutalTestimonialsProps) {\n return (\n <BrutalSection color={color} pattern={pattern} className={className}>\n {(headline || badge) && (\n <div className=\"mb-12 text-center\">\n {badge && <p className=\"brutal-label mb-4 opacity-70\">{badge}</p>}\n {headline && <h2 className=\"brutal-h2\">{headline}</h2>}\n </div>\n )}\n\n {variant === \"masonry\" && <MasonryLayout testimonials={testimonials} />}\n {variant === \"featured-grid\" && (\n <FeaturedGridLayout testimonials={testimonials} />\n )}\n {variant === \"carousel\" && (\n <CarouselLayout testimonials={testimonials} />\n )}\n {variant === \"wall-of-love\" && (\n <WallOfLoveLayout testimonials={testimonials} />\n )}\n </BrutalSection>\n );\n}\n","import * as React from \"react\";\nimport { Input as InputPrimitive } from \"@base-ui/react/input\";\n\nimport { cn } from \"../../lib/utils\";\n\nfunction Input({ className, type, ...props }: React.ComponentProps<\"input\">) {\n return (\n <InputPrimitive\n type={type}\n data-slot=\"input\"\n className={cn(\n \"h-10 w-full min-w-0 rounded-lg border-brutal border-foreground bg-background px-3 py-2 text-base transition-all outline-none placeholder:text-muted-foreground focus-visible:ring-2 focus-visible:ring-ring/20 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive md:text-sm\",\n className\n )}\n {...props}\n />\n );\n}\n\nexport { Input };\n","import { Button } from \"../ui/button\";\nimport { Input } from \"../ui/input\";\nimport { BrutalSection } from \"./section\";\n\ninterface NewsletterProps {\n headline?: string;\n description?: string;\n placeholder?: string;\n buttonText?: string;\n onSubmit?: (email: string) => void;\n color?: \"white\" | \"brand\" | \"gray\" | \"black\";\n className?: string;\n}\n\nexport function Newsletter({\n headline = \"Stay in the loop\",\n description,\n placeholder = \"you@example.com\",\n buttonText = \"Subscribe\",\n onSubmit,\n color = \"white\",\n className,\n}: NewsletterProps) {\n return (\n <BrutalSection color={color} padding=\"sm\" className={className}>\n <div className=\"mx-auto max-w-md border-brutal border-foreground bg-background p-8 text-foreground shadow-brutal-lg\">\n <h3 className=\"brutal-h3 mb-2\">{headline}</h3>\n {description && (\n <p className=\"brutal-body mb-6 text-muted-foreground\">{description}</p>\n )}\n <form\n onSubmit={(e) => {\n e.preventDefault();\n const form = e.target as HTMLFormElement;\n const email = new FormData(form).get(\"email\") as string;\n onSubmit?.(email);\n }}\n className=\"flex gap-3\"\n >\n <Input type=\"email\" name=\"email\" placeholder={placeholder} required className=\"flex-1\" />\n <Button type=\"submit\" variant=\"cta\">{buttonText}</Button>\n </form>\n </div>\n </BrutalSection>\n );\n}\n","import { cn } from \"../../lib/utils\";\nimport { Button } from \"../ui/button\";\nimport { BrutalSection } from \"./section\";\nimport type { SectionColor, SectionPattern } from \"./section\";\n\ninterface BrutalCTAProps {\n headline: string;\n description?: string;\n ctaText: string;\n ctaHref?: string;\n ctaVariant?: \"cta\" | \"brand\" | \"default\" | \"outline\";\n secondaryText?: string;\n secondaryHref?: string;\n color?: SectionColor;\n pattern?: SectionPattern;\n className?: string;\n variant?: \"centered\" | \"split\" | \"with-visual\" | \"floating-card\";\n visual?: React.ReactNode;\n stats?: string;\n}\n\nfunction CTAButtons({\n ctaText,\n ctaHref = \"#\",\n ctaVariant = \"cta\",\n secondaryText,\n secondaryHref,\n}: Pick<\n BrutalCTAProps,\n \"ctaText\" | \"ctaHref\" | \"ctaVariant\" | \"secondaryText\" | \"secondaryHref\"\n>) {\n return (\n <div className=\"flex flex-col gap-3 sm:flex-row sm:justify-center sm:gap-4\">\n <Button\n variant={ctaVariant}\n size=\"xl\"\n className=\"w-full sm:w-auto\"\n render={<a href={ctaHref} />}\n >\n {ctaText}\n </Button>\n {secondaryText && (\n <Button\n variant=\"outline\"\n size=\"xl\"\n className=\"w-full sm:w-auto\"\n render={<a href={secondaryHref || \"#\"} />}\n >\n {secondaryText}\n </Button>\n )}\n </div>\n );\n}\n\nfunction CenteredCTA(props: BrutalCTAProps) {\n return (\n <div className=\"mx-auto max-w-2xl text-center\">\n <h2 className=\"brutal-h1 mb-6\">{props.headline}</h2>\n {props.description && (\n <p className=\"brutal-body mb-4 opacity-80\">{props.description}</p>\n )}\n {props.stats && (\n <p className=\"brutal-label mb-8 opacity-60\">{props.stats}</p>\n )}\n <CTAButtons\n ctaText={props.ctaText}\n ctaHref={props.ctaHref}\n ctaVariant={props.ctaVariant}\n secondaryText={props.secondaryText}\n secondaryHref={props.secondaryHref}\n />\n </div>\n );\n}\n\nfunction SplitCTA(props: BrutalCTAProps) {\n return (\n <div className=\"grid items-center gap-12 lg:grid-cols-2\">\n <div>\n <h2 className=\"brutal-h1 mb-6\">{props.headline}</h2>\n {props.description && (\n <p className=\"brutal-body mb-4 opacity-80\">{props.description}</p>\n )}\n {props.stats && (\n <p className=\"brutal-label mb-8 opacity-60\">{props.stats}</p>\n )}\n <div className=\"flex flex-col gap-3 sm:flex-row sm:gap-4\">\n <Button\n variant={props.ctaVariant || \"cta\"}\n size=\"xl\"\n className=\"w-full sm:w-auto\"\n render={<a href={props.ctaHref || \"#\"} />}\n >\n {props.ctaText}\n </Button>\n {props.secondaryText && (\n <Button\n variant=\"outline\"\n size=\"xl\"\n className=\"w-full sm:w-auto\"\n render={<a href={props.secondaryHref || \"#\"} />}\n >\n {props.secondaryText}\n </Button>\n )}\n </div>\n </div>\n {props.visual && <div>{props.visual}</div>}\n </div>\n );\n}\n\nfunction WithVisualCTA(props: BrutalCTAProps) {\n return (\n <div className=\"relative\">\n {props.visual && (\n <div className=\"pointer-events-none absolute inset-0 flex items-center justify-center opacity-10\">\n {props.visual}\n </div>\n )}\n <div className=\"relative mx-auto max-w-2xl text-center\">\n <h2 className=\"brutal-h1 mb-6\">{props.headline}</h2>\n {props.description && (\n <p className=\"brutal-body mb-4 opacity-80\">{props.description}</p>\n )}\n {props.stats && (\n <p className=\"brutal-label mb-8 opacity-60\">{props.stats}</p>\n )}\n <CTAButtons\n ctaText={props.ctaText}\n ctaHref={props.ctaHref}\n ctaVariant={props.ctaVariant}\n secondaryText={props.secondaryText}\n secondaryHref={props.secondaryHref}\n />\n </div>\n </div>\n );\n}\n\nfunction FloatingCardCTA(props: BrutalCTAProps) {\n return (\n <div className=\"relative z-10 -mt-16\">\n <div className=\"mx-auto max-w-2xl border-brutal border-foreground bg-background p-8 text-center text-foreground shadow-brutal-lg\">\n <h2 className=\"brutal-h1 mb-6\">{props.headline}</h2>\n {props.description && (\n <p className=\"brutal-body mb-4 opacity-80\">{props.description}</p>\n )}\n {props.stats && (\n <p className=\"brutal-label mb-8 opacity-60\">{props.stats}</p>\n )}\n <CTAButtons\n ctaText={props.ctaText}\n ctaHref={props.ctaHref}\n ctaVariant={props.ctaVariant}\n secondaryText={props.secondaryText}\n secondaryHref={props.secondaryHref}\n />\n </div>\n </div>\n );\n}\n\nexport function BrutalCTA({\n variant = \"centered\",\n color = \"black\",\n className,\n pattern,\n ...props\n}: BrutalCTAProps) {\n // floating-card variant doesn't wrap in a section — it floats above the previous section\n if (variant === \"floating-card\") {\n return (\n <div className={cn(\"brutal-container px-6\", className)}>\n <FloatingCardCTA {...props} variant={variant} color={color} />\n </div>\n );\n }\n\n return (\n <BrutalSection color={color} pattern={pattern} className={className}>\n {variant === \"centered\" && <CenteredCTA {...props} variant={variant} color={color} />}\n {variant === \"split\" && <SplitCTA {...props} variant={variant} color={color} />}\n {variant === \"with-visual\" && <WithVisualCTA {...props} variant={variant} color={color} />}\n </BrutalSection>\n );\n}\n","import { cn } from \"../../lib/utils\";\nimport { Button } from \"../ui/button\";\nimport { Input } from \"../ui/input\";\n\ninterface FooterColumn {\n title: string;\n links: { label: string; href: string }[];\n}\n\ninterface BrutalFooterProps {\n logo: React.ReactNode;\n tagline?: string;\n columns: FooterColumn[];\n bottomLeft?: string;\n bottomRight?: string;\n variant?: \"mega\" | \"minimal\" | \"newsletter\";\n socials?: {\n twitter?: string;\n github?: string;\n linkedin?: string;\n discord?: string;\n };\n newsletter?: {\n headline?: string;\n description?: string;\n placeholder?: string;\n buttonText?: string;\n };\n className?: string;\n}\n\nfunction SocialsRow({\n socials,\n}: {\n socials: NonNullable<BrutalFooterProps[\"socials\"]>;\n}) {\n const items = [\n { key: \"twitter\", label: \"Twitter\", url: socials.twitter },\n { key: \"github\", label: \"GitHub\", url: socials.github },\n { key: \"linkedin\", label: \"LinkedIn\", url: socials.linkedin },\n { key: \"discord\", label: \"Discord\", url: socials.discord },\n ].filter((s) => s.url);\n\n if (items.length === 0) return null;\n\n return (\n <div className=\"flex items-center gap-4\">\n {items.map((s) => (\n <a\n key={s.key}\n href={s.url!}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"text-sm font-bold transition-colors hover:text-muted-foreground\"\n >\n {s.label}\n </a>\n ))}\n </div>\n );\n}\n\nfunction NewsletterSection({\n newsletter,\n}: {\n newsletter: NonNullable<BrutalFooterProps[\"newsletter\"]>;\n}) {\n return (\n <div className=\"mb-10 border-b-brutal border-foreground pb-10\">\n <div className=\"mx-auto max-w-lg text-center\">\n <h3 className=\"brutal-h4 mb-2\">\n {newsletter.headline || \"Stay in the loop\"}\n </h3>\n {newsletter.description && (\n <p className=\"brutal-caption mb-4\">{newsletter.description}</p>\n )}\n <form\n onSubmit={(e) => e.preventDefault()}\n className=\"flex gap-2\"\n >\n <Input\n type=\"email\"\n placeholder={newsletter.placeholder || \"you@email.com\"}\n className=\"flex-1\"\n />\n <Button variant=\"default\" size=\"default\" type=\"submit\">\n {newsletter.buttonText || \"Subscribe\"}\n </Button>\n </form>\n </div>\n </div>\n );\n}\n\nfunction MegaContent({\n logo,\n tagline,\n columns,\n socials,\n}: Pick<BrutalFooterProps, \"logo\" | \"tagline\" | \"columns\" | \"socials\">) {\n return (\n <div className=\"mb-10 flex flex-col gap-8 sm:flex-row sm:items-start sm:justify-between\">\n {/* Logo + tagline */}\n <div className=\"max-w-xs\">\n <div className=\"mb-2 text-xl font-black\">{logo}</div>\n {tagline && (\n <p className=\"mb-4 text-sm text-muted-foreground\">{tagline}</p>\n )}\n {socials && <SocialsRow socials={socials} />}\n </div>\n\n {/* Link columns */}\n <div className=\"grid grid-cols-2 gap-8 sm:grid-cols-3 md:gap-12\">\n {columns.map((col) => (\n <div key={col.title}>\n <h3 className=\"brutal-label mb-3 text-muted-foreground\">\n {col.title}\n </h3>\n <ul className=\"flex flex-col gap-2\">\n {col.links.map((link) => (\n <li key={link.href}>\n <a\n href={link.href}\n className=\"text-sm font-medium transition-colors hover:text-muted-foreground\"\n >\n {link.label}\n </a>\n </li>\n ))}\n </ul>\n </div>\n ))}\n </div>\n </div>\n );\n}\n\nfunction MinimalContent({\n logo,\n columns,\n socials,\n}: Pick<BrutalFooterProps, \"logo\" | \"columns\" | \"socials\">) {\n const allLinks = columns.flatMap((col) => col.links);\n\n return (\n <div className=\"mb-6 flex flex-col items-center gap-4 sm:flex-row sm:justify-between\">\n <div className=\"text-xl font-black\">{logo}</div>\n <nav className=\"flex flex-wrap items-center justify-center gap-x-6 gap-y-2\">\n {allLinks.map((link) => (\n <a\n key={link.href}\n href={link.href}\n className=\"text-sm font-medium transition-colors hover:text-muted-foreground\"\n >\n {link.label}\n </a>\n ))}\n </nav>\n {socials && <SocialsRow socials={socials} />}\n </div>\n );\n}\n\nexport function BrutalFooter({\n logo,\n tagline,\n columns,\n bottomLeft,\n bottomRight,\n variant = \"mega\",\n socials,\n newsletter,\n className,\n}: BrutalFooterProps) {\n return (\n <footer\n className={cn(\n \"w-full border-t-4 bg-background px-6 py-12 text-foreground\",\n className\n )}\n style={{ borderTopColor: \"hsl(var(--brand))\" }}\n >\n <div className=\"brutal-container\">\n {/* Newsletter section (only for newsletter variant) */}\n {variant === \"newsletter\" && newsletter && (\n <NewsletterSection newsletter={newsletter} />\n )}\n\n {/* Main content */}\n {variant === \"minimal\" ? (\n <MinimalContent logo={logo} columns={columns} socials={socials} />\n ) : (\n <MegaContent\n logo={logo}\n tagline={tagline}\n columns={columns}\n socials={socials}\n />\n )}\n\n {/* Bottom bar */}\n <div className=\"flex items-center justify-between border-t-brutal border-foreground pt-6 font-mono text-xs uppercase tracking-widest text-muted-foreground\">\n <span>{bottomLeft || \"Built with care\"}</span>\n <span>{bottomRight || new Date().getFullYear()}</span>\n </div>\n </div>\n </footer>\n );\n}\n","import { BrutalNav } from \"../components/brutal/nav\";\nimport { BrutalHero } from \"../components/brutal/hero\";\nimport { SectionDivider } from \"../components/brutal/section-divider\";\nimport { BrutalFeatureGrid } from \"../components/brutal/feature-grid\";\nimport { BrutalTestimonials } from \"../components/brutal/testimonials\";\nimport { Newsletter } from \"../components/brutal/newsletter\";\nimport { BrutalCTA } from \"../components/brutal/cta-section\";\nimport { BrutalFooter } from \"../components/brutal/footer\";\n\ninterface StudioProps {\n logo: React.ReactNode;\n nav: {\n links: { label: string; href: string; badge?: string; active?: boolean }[];\n ctaText?: string;\n ctaHref?: string;\n };\n hero: {\n badge?: string;\n headline: string;\n description: string;\n ctaText: string;\n ctaHref?: string;\n visual?: React.ReactNode;\n proof?: string;\n };\n features: {\n badge?: string;\n headline: string;\n description?: string;\n items: { icon?: React.ReactNode; title: string; description: string }[];\n };\n testimonials?: {\n badge?: string;\n headline?: string;\n items: { name: string; handle?: string; avatar?: string; text: string; role?: string; company?: string; rating?: 1 | 2 | 3 | 4 | 5; featured?: boolean }[];\n };\n newsletter?: {\n headline?: string;\n description?: string;\n onSubmit?: (email: string) => void;\n };\n cta: {\n headline: string;\n description?: string;\n ctaText: string;\n ctaHref?: string;\n };\n footer: {\n tagline?: string;\n columns: { title: string; links: { label: string; href: string }[] }[];\n };\n}\n\nexport function StudioTemplate({\n logo,\n nav,\n hero,\n features,\n testimonials,\n newsletter,\n cta,\n footer,\n}: StudioProps) {\n return (\n <div>\n <BrutalNav logo={logo} links={nav.links} ctaText={nav.ctaText} ctaHref={nav.ctaHref} variant=\"floating-pill\" />\n\n <BrutalHero\n variant=\"asymmetric\"\n badge={hero.badge}\n headline={hero.headline}\n description={hero.description}\n ctaText={hero.ctaText}\n ctaHref={hero.ctaHref}\n visual={hero.visual}\n proof={hero.proof}\n color=\"brand\"\n pattern=\"grain\"\n />\n\n <SectionDivider from=\"hsl(var(--brand))\" to=\"hsl(var(--background))\" variant=\"brush-stroke\" />\n\n <BrutalFeatureGrid\n variant=\"numbered\"\n badge={features.badge}\n headline={features.headline}\n description={features.description}\n features={features.items}\n color=\"white\"\n />\n\n {testimonials && (\n <>\n <SectionDivider from=\"hsl(var(--background))\" to=\"hsl(var(--section-gray))\" variant=\"diagonal\" />\n <BrutalTestimonials\n variant=\"featured-grid\"\n badge={testimonials.badge}\n headline={testimonials.headline}\n testimonials={testimonials.items}\n color=\"gray\"\n />\n <SectionDivider from=\"hsl(var(--section-gray))\" to=\"hsl(var(--background))\" variant=\"diagonal\" flip />\n </>\n )}\n\n {newsletter && (\n <Newsletter\n headline={newsletter.headline}\n description={newsletter.description}\n onSubmit={newsletter.onSubmit}\n />\n )}\n\n <BrutalCTA\n variant=\"floating-card\"\n headline={cta.headline}\n description={cta.description}\n ctaText={cta.ctaText}\n ctaHref={cta.ctaHref}\n color=\"brand\"\n />\n\n <BrutalFooter\n variant=\"minimal\"\n logo={logo}\n tagline={footer.tagline}\n columns={footer.columns}\n />\n </div>\n );\n}\n"]}
|
package/package.json
CHANGED