Manicat UI

Theming

Manicat UI components read semantic tokens, never raw colors. Change one token and every component follows, in both themes.

Components read semantic tokens, never raw colors. Change a token in foundation.css (components/manicat/foundation.css after a CLI install) and every component follows, in both themes.

TokenUsed for
--backgroundThe page behind everything
--surface, --surface-raised, --surface-mutedCards and inputs, floating layers, quiet fills
--foreground, --text-secondary, --text-mutedPrimary, supporting and hint text
--border, --border-subtle, --border-strongSeparators and edges
--accent, --accent-strong, --accent-subtleSelection, progress and helpful context
--success, --warning, --dangerStatus, always paired with a label
--radius-control, --radius-panel, --radius-surfaceControls, menus, cards
--font-display, --font-bodyGeist for headings, Inter for everything else

Accents

Set data-accent on <html> to one of eight accents. Selection controls, sliders and charts all read from it, and each accent ships its own control fills so a white thumb keeps its contrast.

Volume

Select this sentence to see it pick up the accent.

Dark mode

Set data-theme="dark" on <html>, before the page paints to avoid a flash. Dark values are tuned separately rather than inverted, and every component, chart and gradient has its own dark stops.

<html data-theme="dark" data-accent="violet">

next-themes writes .dark and data-theme on the html element.

--accent: var(--accent)--background: var(--background)--surface: var(--surface)

Radii

Manicat UI uses concentric radii. Nested elements step down 4 to 5px from their parent, which is what makes a card full of pills still read as one surface.

TokenValueUsed by
--radius-control1.125remButtons, inputs, selects
--radius-panel1.625remMenus, dialogs, popovers, sheets
--radius-surface2.125remCards and sections

Type

--font-display is Geist, for headings at 30px and above. --font-body is Inter, for everything else. Both are set as CSS variables, so next/font can swap them without touching a component.

:root {
  --font-display: var(--font-geist), sans-serif;
  --font-body: var(--font-inter), sans-serif;
}

Series colors

Charts read --series-1 through --series-4. The palette rotates from --accent, so every accent gets a chart series that is distinct from its neighbours. Override the four variables on any element to rebrand a chart.

Customising parts

For per-component changes, use className, classNames (or styles on native). See Customization.

On this page