Foundations

Color.

A little color. A clear purpose.

Semantic color names describe a role, not a particular shade. A border stays a border when the appearance changes.

12

Stops with a purpose.

39 palettes: 11 neutral bases and 28 color families. Separate light and dark ramps, plus black and white alpha overlays.

A THEME THAT FEELS LIKE YOU

Workspace settings

Manage your preferences.

light / purple
SavedAll changes saved.
DangerFix the required fields.
WarningReview before continuing.
InformationA little useful context.
DiscoveryTry something new.

Change the brand accent above: Delete stays destructive, Approve stays positive, and feedback retains its own roles. Personalities are configurations of the same semantic system.

Twelve stops. More possibilities.

Explore cool, warm, and tinted neutrals, the full color family set, and transparent black/white overlays. Choose a family and inspect any stop.

neutral light · 12 stops
1–2 · surfaces3–5 · subtle fills6–8 · borders9–10 · solid fills11–12 · text
--dixy-color-neutral-9oklch(0.49 0 0)light palette

Overlays that blend with the surface.

Black and white alpha scales have 12 stops from 5% to 95% opacity. Modal scrims use color.background.overlay; subtle, strong, and inverse roles cover quieter washes and white overlays. Contrast depends on the surface underneath.

Use meaning in your interface.

01Primitive--dixy-color-blue-9
02Semantic role--dixy-color-background-action-primary
03Component alias--dixy-button-primary-background

Choose a role for backgrounds, text, icons, borders, and interactions. Override semantic variables at the Theme boundary; component aliases and portaled dialogs resolve that local theme.

Semantic tokenlight mapping
color.background.overlayblack.a8
color.background.overlay.subtleblack.a4
color.background.overlay.strongblack.a10
color.background.overlay.inversewhite.a8
color.background.canvasbase.1
color.background.surfacebase.2
color.background.surface.raisedwhite
color.background.surface.sunkenbase.3
color.background.subtlebase.3
color.background.inversebase.12
color.background.selectedbrand.5
color.background.disabledbase.3
color.background.action.primarybrand.9
color.background.action.primary.hoverbrand.10
color.background.action.primary.pressedbrand.pressed
color.background.action.primary.subtlebrand.3
color.background.action.primary.subtle.hoverbrand.4
color.background.action.primary.subtle.pressedbrand.5
color.background.action.secondarybase.9
color.background.action.secondary.hoverbase.10
color.background.action.secondary.pressedbase.pressed
color.background.action.secondary.subtlebase.3
color.background.action.secondary.subtle.hoverbase.4
color.background.action.secondary.subtle.pressedbase.5
color.background.action.destructivered.9
color.background.action.destructive.hoverred.10
color.background.action.destructive.pressedred.pressed
color.background.action.destructive.subtlered.3
color.background.action.destructive.subtle.hoverred.4
color.background.action.destructive.subtle.pressedred.5
color.background.action.successgreen.9
color.background.action.success.hovergreen.10
color.background.action.success.pressedgreen.pressed
color.background.action.success.subtlegreen.3
color.background.action.success.subtle.hovergreen.4
color.background.action.success.subtle.pressedgreen.5
color.background.successgreen.3
color.background.success.boldgreen.9
color.background.dangerred.3
color.background.danger.boldred.9
color.background.warningamber.3
color.background.warning.boldamber.9
color.background.informationblue.3
color.background.information.boldblue.9
color.background.discoverypurple.3
color.background.discovery.boldpurple.9

Pairs, states, and contrast.

Solid actions use a dedicated foreground shared across default, hover, and pressed backgrounds. Amber uses a dark foreground in light mode. Validation errors use danger text and border roles, independently of destructive actions.

  • Normal text pairs are tested at 4.5:1; focus indicators and interactive boundaries at 3:1.
  • Subtle borders are decorative separators, not the sole boundary of a control.
  • Tertiary text keeps a readable foreground. Disabled text and icons are reserved for unavailable controls.
  • Custom seeds reduce chroma to fit sRGB and reject unsafe action pairs. These checks do not establish whole-page accessibility.
app.tsx
import "@dixy-ui/react/styles.css";
import { Theme, Button } from "@dixy-ui/react";

export function App() {
  return (
    <Theme appearance="light" accentColor="purple" neutralColor="neutral" radius="md" density="default" motion="system" dir="ltr">
      <Button>Save changes</Button>
      <Button color="danger">Delete</Button>
      <Button color="success">Approve</Button>
    </Theme>
  );
}

Plain CSS or Tailwind v4.

The token package works without React or Tailwind. The optional Tailwind entry maps utilities to the same semantic variables with @theme inline.

app.css
@import "tailwindcss";
@import "@dixy-ui/tokens/tailwind.css";

/* Plain CSS: import @dixy-ui/tokens/color.css instead. */
.workspace {
  background: var(--dixy-color-background-canvas);
  color: var(--dixy-color-text-primary);
}
index.html
<div data-appearance="dark" data-accent="purple" data-neutral="stone">
  <button class="bg-dixy-action-primary text-dixy-on-action-primary hover:bg-dixy-action-primary-hover active:bg-dixy-action-primary-pressed">
    Save changes
  </button>
</div>

Make a custom brand.

custom-theme.tsx
import { createColorPalette, colorThemeVariables } from "@dixy-ui/tokens";
import { Theme } from "@dixy-ui/react";

const palette = createColorPalette([0.54, 0.18, 260]);

export function CustomTheme() {
  return (
    <Theme appearance="dark" style={colorThemeVariables(palette, "dark")}>
      Your interface
    </Theme>
  );
}

Blue is the default library accent. Purple is Dixy’s documentation identity. Choose the neutral base independently with neutralColor="stone", for example. Earlier --dixy-accent and surface variables remain read aliases; new customization should target semantic names.

Design references: Tailwind palette families, Radix scale roles, Atlassian semantics, Tailwind theme variables, and CSS Color 4.