Theming
The project uses Tailwind CSS v4. Theme tokens and custom variants live insrc/app/globals.csswith a class-based dark mode strategy.
Theme Tokens
Core color and font tokens are defined through@theme. Runtime page colors use:root and.darkCSS variables for background/foreground.
--color-primary#4628f1Buttons, links, active tabs, focus rings
--color-background-light#f6f6f8Light page background
--color-background-dark#020617Dark page background
Surface colors are intentionally explicit in component classes for predictable design output:
Panel light
#ffffff
Card/dialog surface
Panel dark
#161b22
Card/dialog surface
Inner dark
#0d1117
Nested surface
Border dark
#1f2937
Dividers/borders
/* src/app/globals.css */ @import "tailwindcss"; @custom-variant dark (&:is(.dark *)); @theme { --color-primary: #4628f1; --color-background-light: #f6f6f8; --color-background-dark: #020617; --font-display: Inter, sans-serif; } :root { --background: #f6f6f8; --foreground: #0f172a; } .dark { --background: #020617; --foreground: #e2e8f0; }
Dark Mode
Dark mode is class-based. Thedarkclass on<html>activates alldark:variants.
// Theme class on <html> document.documentElement.classList.add("dark"); document.documentElement.classList.remove("dark"); document.documentElement.classList.toggle("dark");
<div className="bg-white dark:bg-[#161b22] border border-slate-200 dark:border-[#1f2937]"> <h2 className="text-slate-900 dark:text-white">Panel title</h2> <p className="text-slate-500 dark:text-slate-400">Muted text</p> </div>
The navbar theme toggle persists preference inlocalStorageand toggles thedarkclass before paint to avoid FOUC.
Typography
Inter is the display and body font for this project. It is loaded in global CSS and registered asfont-display.
font-black text-4xlfont-bold text-2xlfont-semibold text-lgtext-basetext-sm text-slate-500font-mono text-xs/* src/app/globals.css */ @import url("https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800;900&display=swap") layer(base); /* usage */ <h1 className="font-display font-black tracking-tight">Heading</h1>
Customize
To change brand color globally, update--color-primaryin the@themeblock.
/* src/app/globals.css */ @theme { --color-primary: #0ea5e9; /* customize brand color */ }