Theme builder

Every colour in the library resolves through one token layer, so a theme is a handful of CSS declarations rather than a fork. Change them here and the whole site follows — this page, the sidebar, the header. When it looks right, copy the CSS out.

Editing
Presets

Intents

Six meanings. Each base colour drives a whole derived ramp — hover, border, badge, callout.

Primary--primaryPrimary text--primary-foregroundSecondary--secondarySecondary text--secondary-foregroundSuccess--successSuccess text--success-foregroundError--errorError text--error-foregroundWarning--warningWarning text--warning-foregroundInfo--infoInfo text--info-foreground

Surfaces

Backgrounds in depth order. `background` is the page, `surface` sits on it, `surface-raised` on that.

Background--backgroundSurface--surfaceSurface raised--surface-raisedSurface overlay--surface-overlaySurface sunken--surface-sunkenSurface inset--surface-insetMuted--mutedMuted text--muted-foreground

Text

Foreground colours by emphasis, not by shade.

Foreground--foregroundMuted--foreground-mutedSubtle--foreground-subtleOn emphasis--foreground-on-emphasis

Borders

Divider and outline colours.

Border--borderBorder muted--border-mutedBorder strong--border-strong

Interaction

The focus ring and links. The hover and selection overlays are alpha mixes — edit those by hand.

Focus ring--focusLink--linkLink hover--link-hover

Data visualisation

Eight categorical slots in a fixed order. The order is the colour-blind-safety mechanism — re-hue them if you must, but keep adjacent slots far apart.

Series 1--chart-1Series 2--chart-2Series 3--chart-3Series 4--chart-4Series 5--chart-5Series 6--chart-6Series 7--chart-7Series 8--chart-8

Density

One scale for everything you click or type into, so a button, an input and a date field on the same row line up. Declared once — a control is not a different height in the dark.

Height — small18px
1840
Height — default24px
2448
Height — large32px
3264
Padding — small2px
220
Padding — default4px
428
Padding — large6px
636

Preview

Intents

Control scale

Labels

noneprimarysuccesswarningerror
noneprimarysuccesswarningerror1299+

Feedback

Deploy queued

Rolling out to production in a moment.

Check the contrast

A subtle surface hides a subtle border. Both are yours to move.

Form

Remember meNotificationsA link

Surfaces

Background

Surface

Surface raised

Muted copy on it

Subtle copy on it

Table

ServiceStatusapi-gatewayHealthyworker-queueDegradedimage-resizeDown

Chart series

Contrast

Measured against what is on screen in the theme you are editing, derived steps included. WCAG 2.2 asks for 4.5 on body text and 3 on anything non-text, like a border or the focus ring.

Measured in the browser — nothing to report while rendering on the server.

Your theme

Nothing changed yet

Pick a preset or open a group and click a swatch. The CSS to copy appears here, and your theme is kept in this browser until you reset it.

xUI 2.0.0 — Apache 2.0 licensed. Built with Angular and Tailwind CSS.