3a14fcc4ca
Lifts the UI from wireframe to a finished heritage look: Fraunces (display serif) + Inter (sans) via next/font; a proper hero landing with a feature triad and the Origin mark; a warm bronze-tinted background gradient for depth; a sticky branded header and refined footer. Polished button (sizes + bronze focus ring + shadow), card (rounded-xl, soft layered shadow), and input (bronze focus) primitives that carry across every page. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Signed-off-by: Justin Paul <justin@jpaul.me>
36 lines
1.3 KiB
TypeScript
36 lines
1.3 KiB
TypeScript
import * as React from "react";
|
|
import { cva, type VariantProps } from "class-variance-authority";
|
|
|
|
import { cn } from "@/lib/utils";
|
|
|
|
const buttonVariants = cva(
|
|
"inline-flex items-center justify-center gap-2 rounded-lg font-medium transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-bronze focus-visible:ring-offset-2 focus-visible:ring-offset-[var(--background)] disabled:pointer-events-none disabled:opacity-50",
|
|
{
|
|
variants: {
|
|
variant: {
|
|
default: "bg-bronze text-paper shadow-sm hover:bg-bronze-deep hover:shadow",
|
|
outline:
|
|
"border border-[var(--border)] bg-[var(--surface)] hover:border-bronze hover:text-bronze",
|
|
ghost: "text-[var(--foreground)] hover:bg-bronze/10",
|
|
},
|
|
size: {
|
|
default: "h-10 px-4 text-sm",
|
|
sm: "h-9 px-3 text-sm",
|
|
lg: "h-12 px-6 text-base",
|
|
},
|
|
},
|
|
defaultVariants: { variant: "default", size: "default" },
|
|
},
|
|
);
|
|
|
|
export interface ButtonProps
|
|
extends React.ButtonHTMLAttributes<HTMLButtonElement>,
|
|
VariantProps<typeof buttonVariants> {}
|
|
|
|
export const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(
|
|
({ className, variant, size, ...props }, ref) => (
|
|
<button ref={ref} className={cn(buttonVariants({ variant, size, className }))} {...props} />
|
|
),
|
|
);
|
|
Button.displayName = "Button";
|