theming
chrome is dark-only by design — there is no light theme and the components assume a black page. what is configurable are the tokens. init writes a fenced block into your globals.css (it also loads poppins via a @font-face rule, trimmed here):
/* @chrome:theme */@theme inline {--color-background: var(--background);--color-foreground: var(--foreground);--color-surface: var(--surface);--color-surface-alt: var(--surface-alt);--color-border: var(--border);--color-muted: var(--muted);--color-accent: var(--accent);--font-sans: "Poppins", sans-serif;}:root,.dark {--background: #000000;--foreground: #ffffff;--surface: #0a0a0a;--surface-alt: #141414;--border: rgba(255, 255, 255, 0.12);--muted: rgba(255, 255, 255, 0.6);--accent: #ffffff;}/* @chrome:end */
the tokens
--background/--foreground— the page. components mostly use raw white-with-opacity classes on top of this, so shifting the background off pure black is the highest- impact edit.--surface/--surface-alt— raised panels (cards, editors, popups).--border— the 1px lines everywhere. raise the alpha for a harder grid, lower it to soften.--muted/--accent— secondary text and the (white) highlight color.--font-sans— swap poppins for anything; the mono styles use your tailwindfont-monostack.
editing safely
edit any token freely. re-running initreplaces only what's between /* @chrome:theme */ and /* @chrome:end */ — everything outside the fence is untouched. if you want your token edits to survive re-init too, move them below the fence; later rules win.
component-level styling doesn't go through tokens at all: the installed source is yours, and className merges via tailwind-merge, so per-instance overrides just work.