diff --git a/frontend/app/globals.css b/frontend/app/globals.css
index 517decd..55e685a 100644
--- a/frontend/app/globals.css
+++ b/frontend/app/globals.css
@@ -1,44 +1,56 @@
@import "tailwindcss";
-/* Brand palette (docs/brand): warm ink + bronze + paper. */
+/* Brand palette + type (docs/brand): warm ink + bronze + paper, serif display. */
@theme {
--color-bronze: #a06a42;
--color-bronze-deep: #8a5836;
--color-paper: #f7f3ec;
--color-ink: #1a1a17;
- --font-serif: Georgia, "Times New Roman", "Liberation Serif", ui-serif, serif;
+ --font-sans: var(--font-inter), ui-sans-serif, system-ui, -apple-system, sans-serif;
+ --font-serif: var(--font-fraunces), Georgia, "Times New Roman", ui-serif, serif;
}
-/* Adaptive tokens (ink/paper flip for light/dark; bronze + paper are constant). */
+/* Adaptive tokens — ink/paper flip for light/dark; bronze + paper are constant. */
:root {
- --background: #f7f3ec; /* paper */
- --foreground: #1a1a17; /* ink */
+ --background: #f7f3ec;
+ --foreground: #1a1a17;
--muted: #6b6862;
- --surface: #fbf8f2;
- --border: #e4dccb;
+ --surface: #fffdf9;
+ --border: #e6ddcc;
}
@media (prefers-color-scheme: dark) {
:root {
- --background: #1a1a17; /* warm near-black */
- --foreground: #f2eee6; /* warm off-white */
+ --background: #161410;
+ --foreground: #f2eee6;
--muted: #9a968e;
- --surface: #232019;
- --border: #3a352c;
+ --surface: #211d17;
+ --border: #353029;
}
}
body {
- background: var(--background);
+ /* A faint bronze warmth pooled at the top gives the flat paper some depth. */
+ background:
+ radial-gradient(
+ 1100px 520px at 50% -8%,
+ color-mix(in srgb, var(--color-bronze) 9%, var(--background)),
+ var(--background) 60%
+ );
+ background-attachment: fixed;
color: var(--foreground);
- font-family: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
+ font-family: var(--font-sans);
}
-/* Headings use the heritage serif register. */
h1,
h2,
h3,
.font-serif {
font-family: var(--font-serif);
+ letter-spacing: -0.015em;
+}
+
+::selection {
+ background: color-mix(in srgb, var(--color-bronze) 22%, transparent);
}
diff --git a/frontend/app/layout.tsx b/frontend/app/layout.tsx
index 6c97fc7..f3ddafd 100644
--- a/frontend/app/layout.tsx
+++ b/frontend/app/layout.tsx
@@ -1,38 +1,55 @@
import type { Metadata } from "next";
+import { Fraunces, Inter } from "next/font/google";
import Link from "next/link";
import "./globals.css";
+// Heritage display serif + clean humanist sans (per docs/brand typography).
+const serif = Fraunces({
+ subsets: ["latin"],
+ variable: "--font-fraunces",
+ display: "swap",
+ axes: ["opsz"],
+});
+const sans = Inter({ subsets: ["latin"], variable: "--font-inter", display: "swap" });
+
export const metadata: Metadata = {
- title: "Provenance",
- description: "Where it came from matters — family and land, every fact sourced.",
+ title: "Provenance — where it came from matters",
+ description:
+ "Trace your family and your land in one place — every fact linked to the record it came from. Self-hosted, sourced, and yours to keep.",
icons: { icon: "/favicon.svg" },
};
export default function RootLayout({ children }: { children: React.ReactNode }) {
return (
-
-
-
-
+
+
+
-
{children}
+
+
{children}
+