Skip to content

Customize

The fastest way to brand an app is the system accent — one CSS variable that drives the navbar stripe, footer stripe, and <BrandTile> at once. Everything else (palette tones, semantic roles, fonts) is still overridable; see Advanced.

Set --color-system-accent at :root and your app picks up matching 2px stripes on the navbar and footer plus a branded brand-tile:

:root {
--color-system-accent: var(--color-purple-600);
}

That’s the contract. Defaults to a neutral gray; three siblings track the base via color-mix, so a single override propagates:

TokenWhat it controlsDerivation
--color-system-accentNavbar + footer stripe, .brand-tile bgThe value you set
--color-system-accent-hoverReserved for hover states12% mix toward --color-text
--color-system-accent-mutedReserved for subtle backgrounds12% accent over --color-surface
--color-system-accent-contentTile / icon foregroundlight-dark(paper, black) — heuristic

Bright accents like --color-yellow-400 need a manual -content override so the tile stays legible:

:root {
--color-system-accent: var(--color-yellow-400);
--color-system-accent-content: var(--color-black);
}

See Brand tile and App shell › Branding for full usage.

For everything beyond the system accent, the token layers are documented on the Colors page. Three escape hatches:

Remap a role to a different palette tone — or to any color. Components follow automatically.

:root {
--color-primary: var(--color-green-600);
}

Replace a Flexoki tone everywhere it’s used:

:root {
--color-blue-600: oklch(0.55 0.18 250);
}

Both blocks are stacked on :root — redefine the palette in your own stylesheet to ship a different brand while keeping every semantic role intact.