From a3309d344e15106dc89c8487324448bd9b5a40d3 Mon Sep 17 00:00:00 2001 From: yigitdot Date: Mon, 25 May 2026 17:07:32 +0300 Subject: [PATCH 1/6] chore(theme): drop unreferenced --font-sans token MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The `--font-sans` entry in `@theme inline` was never read: `html, body` applies `font-family: var(--font-geist-sans), …` directly, and no component uses the `font-sans` utility class (verified by grep across `.ts(x)` / `.mdx`). Removing it loses no behavior — the `font-sans` utility falls back to Tailwind's default sans stack — and shrinks the theme surface. Closes #105 Co-Authored-By: Claude Opus 4.7 --- app/globals.css | 1 - 1 file changed, 1 deletion(-) diff --git a/app/globals.css b/app/globals.css index 2597936..354d3b1 100644 --- a/app/globals.css +++ b/app/globals.css @@ -22,7 +22,6 @@ --color-ink: var(--ink); --color-paper: var(--paper); --color-whisper: var(--whisper); - --font-sans: var(--font-geist-sans); /* Shared content rail: every Frame centers within --frame-max. */ --frame-max: 1280px; From 9b176938d3425ffc2da95621b6d9052f8385ffe4 Mon Sep 17 00:00:00 2001 From: yigitdot Date: Mon, 25 May 2026 17:08:16 +0300 Subject: [PATCH 2/6] refactor(theme): promote --frame-* tokens to Tailwind v4 namespaces MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Finishes the migration left at the end of #78 / #101: the typography half landed under the `--text-*` namespace (Approach A); the layout half stayed as raw vars consumed via `px-[var(--frame-gutter)]` / `max-w-[var(--frame-max)]` arbitrary-value classes (Approach B). Renames so layout tokens auto-generate utilities: - `--frame-gutter` → `--spacing-frame-gutter` ⇒ `px-frame-gutter` - `--frame-pad-y` → `--spacing-frame-pad-y` ⇒ `py-frame-pad-y` - `--frame-max` → `--container-frame` ⇒ `max-w-frame` - `--frame-min-h-cap` → `--spacing-frame-min-h: min(100svh, 54rem)` ⇒ `min-h-frame-min-h` (the `min()` was already at the lone call site; folding it into the token removes the last arbitrary value) Frame.tsx, Footer.tsx, and Chrome.tsx's