feat: dark theme foundation, new header/footer, shared site primitives
Adds dark design tokens, Inter + JetBrains Mono, a header with Notes, Process, About and a Book a call button, and a footer with the availability line driven by the tested domain core. Shared primitives live in src/components/site, site constants in src/content/site.ts. Legacy pages (blog, legal, contact, tags, technologies) keep a light surface via LegacyLightSurface. Stub routes for /notes, /process and /book. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,31 @@
|
||||
import Link from "next/link";
|
||||
import * as React from "react";
|
||||
|
||||
type ButtonVariant = "primary" | "secondary";
|
||||
|
||||
type ButtonLinkProps = {
|
||||
readonly href: string;
|
||||
readonly children: React.ReactNode;
|
||||
readonly variant?: ButtonVariant;
|
||||
readonly className?: string;
|
||||
};
|
||||
|
||||
const BASE =
|
||||
"inline-flex items-center justify-center rounded-md px-5 py-2.5 text-sm font-semibold transition-colors focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent";
|
||||
|
||||
const VARIANTS: Record<ButtonVariant, string> = {
|
||||
primary: "bg-accent !text-accent-fg hover:bg-accent-hover",
|
||||
secondary:
|
||||
"border border-border-strong !text-fg hover:border-muted hover:bg-surface",
|
||||
};
|
||||
|
||||
export const ButtonLink: React.FC<ButtonLinkProps> = ({
|
||||
href,
|
||||
children,
|
||||
variant = "primary",
|
||||
className = "",
|
||||
}) => (
|
||||
<Link href={href} className={`${BASE} ${VARIANTS[variant]} ${className}`}>
|
||||
{children}
|
||||
</Link>
|
||||
);
|
||||
Reference in New Issue
Block a user