DesignX
Core@paxeer/core/md3-tokensimplemented

MD3 tokens

Material Design 3 color, shape, and state tokens seeded from Paxeer blue #2841B8. Dark is default.

tokens

Install

$pnpm exec designx add @paxeer/core/md3-tokens

Source code

styles/designx-tokens.csscss
/*
  DesignX MD3 token map
  Seed: #2841B8 (Paxeer blue)

  Dark is the default scheme on :root, so an app that never sets `data-theme`
  still renders correctly. Both schemes are also addressable explicitly via
  [data-theme="dark"] / [data-theme="light"] so the ThemeProvider can pin one,
  and any subtree can be inverted by setting the attribute on a wrapper.

  This file is pure custom properties — no Tailwind, no utility classes. Import
  `theme.css` alongside it to get the Tailwind v4 bridge and the dx-* utilities.
*/

:root,
[data-theme="dark"] {
  color-scheme: dark;

  --md-sys-color-seed: #2841b8;

  --md-sys-color-primary: #b4c5ff;
  --md-sys-color-on-primary: #002878;
  --md-sys-color-primary-container: #3d56ce;
  --md-sys-color-on-primary-container: #dce1ff;
  --md-sys-color-primary-fixed: #dce1ff;
  --md-sys-color-primary-fixed-dim: #b4c5ff;
  --md-sys-color-on-primary-fixed: #00174b;
  --md-sys-color-on-primary-fixed-variant: #14369f;

  --md-sys-color-secondary: #c0c5dd;
  --md-sys-color-on-secondary: #2a3042;
  --md-sys-color-secondary-container: #404659;
  --md-sys-color-on-secondary-container: #dce1f9;
  --md-sys-color-secondary-fixed: #dce1f9;
  --md-sys-color-secondary-fixed-dim: #c0c5dd;
  --md-sys-color-on-secondary-fixed: #151b2c;
  --md-sys-color-on-secondary-fixed-variant: #404659;

  --md-sys-color-tertiary: #e0bbdd;
  --md-sys-color-on-tertiary: #412743;
  --md-sys-color-tertiary-container: #593d5b;
  --md-sys-color-on-tertiary-container: #ffd6fa;
  --md-sys-color-tertiary-fixed: #fdd7fa;
  --md-sys-color-tertiary-fixed-dim: #e0bbdd;
  --md-sys-color-on-tertiary-fixed: #2b122c;
  --md-sys-color-on-tertiary-fixed-variant: #593d5b;

  --md-sys-color-error: #ffb4ab;
  --md-sys-color-on-error: #690005;
  --md-sys-color-error-container: #93000a;
  --md-sys-color-on-error-container: #ffdad6;

  /* Non-MD3 status roles. Kept here so packs never invent their own. */
  --md-sys-color-success: #7bda8a;
  --md-sys-color-on-success: #00390f;
  --md-sys-color-success-container: #08521e;
  --md-sys-color-on-success-container: #96f7a4;

  --md-sys-color-warning: #f2bd6f;
  --md-sys-color-on-warning: #442b00;
  --md-sys-color-warning-container: #613f00;
  --md-sys-color-on-warning-container: #ffddb0;

  --md-sys-color-info: #8bcff0;
  --md-sys-color-on-info: #003549;
  --md-sys-color-info-container: #004d68;
  --md-sys-color-on-info-container: #c3e8ff;

  --md-sys-color-surface: #121318;
  --md-sys-color-on-surface: #e3e2e8;
  --md-sys-color-surface-variant: #44464f;
  --md-sys-color-on-surface-variant: #c5c6d0;
  --md-sys-color-surface-dim: #121318;
  --md-sys-color-surface-bright: #38393f;
  --md-sys-color-surface-container-lowest: #0d0e13;
  --md-sys-color-surface-container-low: #1a1b21;
  --md-sys-color-surface-container: #1e1f25;
  --md-sys-color-surface-container-high: #282a31;
  --md-sys-color-surface-container-highest: #33343b;
  --md-sys-color-surface-tint: #b4c5ff;

  --md-sys-color-outline: #8e909a;
  --md-sys-color-outline-variant: #44464f;
  --md-sys-color-inverse-surface: #e3e2e8;
  --md-sys-color-inverse-on-surface: #303036;
  --md-sys-color-inverse-primary: #2841b8;
  --md-sys-color-scrim: #000000;
  --md-sys-color-shadow: #000000;
}

[data-theme="light"] {
  color-scheme: light;

  --md-sys-color-primary: #2841b8;
  --md-sys-color-on-primary: #ffffff;
  --md-sys-color-primary-container: #dce1ff;
  --md-sys-color-on-primary-container: #00164d;
  --md-sys-color-primary-fixed: #dce1ff;
  --md-sys-color-primary-fixed-dim: #b4c5ff;
  --md-sys-color-on-primary-fixed: #00174b;
  --md-sys-color-on-primary-fixed-variant: #14369f;

  --md-sys-color-secondary: #585e71;
  --md-sys-color-on-secondary: #ffffff;
  --md-sys-color-secondary-container: #dce1f9;
  --md-sys-color-on-secondary-container: #151b2c;
  --md-sys-color-secondary-fixed: #dce1f9;
  --md-sys-color-secondary-fixed-dim: #c0c5dd;
  --md-sys-color-on-secondary-fixed: #151b2c;
  --md-sys-color-on-secondary-fixed-variant: #404659;

  --md-sys-color-tertiary: #725572;
  --md-sys-color-on-tertiary: #ffffff;
  --md-sys-color-tertiary-container: #fdd7fa;
  --md-sys-color-on-tertiary-container: #2b122c;
  --md-sys-color-tertiary-fixed: #fdd7fa;
  --md-sys-color-tertiary-fixed-dim: #e0bbdd;
  --md-sys-color-on-tertiary-fixed: #2b122c;
  --md-sys-color-on-tertiary-fixed-variant: #593d5b;

  --md-sys-color-error: #ba1a1a;
  --md-sys-color-on-error: #ffffff;
  --md-sys-color-error-container: #ffdad6;
  --md-sys-color-on-error-container: #410002;

  --md-sys-color-success: #106b2a;
  --md-sys-color-on-success: #ffffff;
  --md-sys-color-success-container: #96f7a4;
  --md-sys-color-on-success-container: #00210a;

  --md-sys-color-warning: #805600;
  --md-sys-color-on-warning: #ffffff;
  --md-sys-color-warning-container: #ffddb0;
  --md-sys-color-on-warning-container: #291800;

  --md-sys-color-info: #00668a;
  --md-sys-color-on-info: #ffffff;
  --md-sys-color-info-container: #c3e8ff;
  --md-sys-color-on-info-container: #001e2c;

  --md-sys-color-surface: #fbf8ff;
  --md-sys-color-on-surface: #1a1b21;
  --md-sys-color-surface-variant: #e2e1ec;
  --md-sys-color-on-surface-variant: #44464f;
  --md-sys-color-surface-dim: #dbd9e0;
  --md-sys-color-surface-bright: #fbf8ff;
  --md-sys-color-surface-container-lowest: #ffffff;
  --md-sys-color-surface-container-low: #f5f2fa;
  --md-sys-color-surface-container: #efedf4;
  --md-sys-color-surface-container-high: #e9e7ef;
  --md-sys-color-surface-container-highest: #e3e2e8;
  --md-sys-color-surface-tint: #2841b8;

  --md-sys-color-outline: #757680;
  --md-sys-color-outline-variant: #c5c6d0;
  --md-sys-color-inverse-surface: #2f3036;
  --md-sys-color-inverse-on-surface: #f2f0f7;
  --md-sys-color-inverse-primary: #b4c5ff;
  --md-sys-color-scrim: #000000;
  --md-sys-color-shadow: #000000;
}

/* Scheme-independent system tokens. */
:root {
  --md-sys-state-hover-opacity: 0.08;
  --md-sys-state-focus-opacity: 0.12;
  --md-sys-state-pressed-opacity: 0.12;
  --md-sys-state-dragged-opacity: 0.16;
  --md-sys-state-disabled-content-opacity: 0.38;
  --md-sys-state-disabled-container-opacity: 0.12;

  /* Dense MD3 focus ring */
  --md-sys-focus-ring-thickness: 2px;
  --md-sys-focus-ring-offset: 1px;

  --md-sys-shape-corner-none: 0px;
  --md-sys-shape-corner-extra-small: 4px;
  --md-sys-shape-corner-small: 8px;
  --md-sys-shape-corner-medium: 12px;
  --md-sys-shape-corner-large: 16px;
  --md-sys-shape-corner-extra-large: 28px;
  --md-sys-shape-corner-full: 999px;

  /* MD3 elevation. Umbra/penumbra pair per level. */
  --md-sys-elevation-level0: none;
  --md-sys-elevation-level1: 0 1px 2px 0 rgb(0 0 0 / 0.3), 0 1px 3px 1px rgb(0 0 0 / 0.15);
  --md-sys-elevation-level2: 0 1px 2px 0 rgb(0 0 0 / 0.3), 0 2px 6px 2px rgb(0 0 0 / 0.15);
  --md-sys-elevation-level3: 0 4px 8px 3px rgb(0 0 0 / 0.15), 0 1px 3px 0 rgb(0 0 0 / 0.3);
  --md-sys-elevation-level4: 0 6px 10px 4px rgb(0 0 0 / 0.15), 0 2px 3px 0 rgb(0 0 0 / 0.3);
  --md-sys-elevation-level5: 0 8px 12px 6px rgb(0 0 0 / 0.15), 0 4px 4px 0 rgb(0 0 0 / 0.3);

  /* MD3 motion. */
  --md-sys-motion-duration-short1: 50ms;
  --md-sys-motion-duration-short2: 100ms;
  --md-sys-motion-duration-short3: 150ms;
  --md-sys-motion-duration-short4: 200ms;
  --md-sys-motion-duration-medium1: 250ms;
  --md-sys-motion-duration-medium2: 300ms;
  --md-sys-motion-duration-medium3: 350ms;
  --md-sys-motion-duration-medium4: 400ms;
  --md-sys-motion-duration-long1: 450ms;
  --md-sys-motion-duration-long2: 500ms;
  --md-sys-motion-easing-standard: cubic-bezier(0.2, 0, 0, 1);
  --md-sys-motion-easing-emphasized: cubic-bezier(0.2, 0, 0, 1);
  --md-sys-motion-easing-emphasized-decelerate: cubic-bezier(0.05, 0.7, 0.1, 1);
  --md-sys-motion-easing-emphasized-accelerate: cubic-bezier(0.3, 0, 0.8, 0.15);
}
components/designx/core/tokens.tstsx
export const seedColor = "#2841B8";

export const md3Roles = [
  "primary",
  "on-primary",
  "primary-container",
  "on-primary-container",
  "secondary",
  "on-secondary",
  "secondary-container",
  "on-secondary-container",
  "tertiary",
  "on-tertiary",
  "tertiary-container",
  "on-tertiary-container",
  "error",
  "on-error",
  "error-container",
  "on-error-container",
  "surface",
  "on-surface",
  "surface-variant",
  "on-surface-variant",
  "surface-dim",
  "surface-bright",
  "surface-container-lowest",
  "surface-container-low",
  "surface-container",
  "surface-container-high",
  "surface-container-highest",
  "outline",
  "outline-variant",
  "inverse-surface",
  "inverse-on-surface",
  "inverse-primary",
  "scrim",
  "shadow",
] as const;

export type Md3Role = (typeof md3Roles)[number];

/** Pack variants must resolve to these roles — never pack-local colors. */
export const variantRoleMap = {
  "buy-emphasis": {
    container: "primary",
    on: "on-primary",
    containerFill: "primary-container",
    onContainer: "on-primary-container",
  },
  "sell-emphasis": {
    container: "error",
    on: "on-error",
    containerFill: "error-container",
    onContainer: "on-error-container",
  },
} as const;

export type EmphasisVariant = keyof typeof variantRoleMap;

export const typefaceTokens = {
  brand: "var(--md-ref-typeface-brand)",
  plain: "var(--md-ref-typeface-plain)",
  mono: "var(--md-ref-typeface-mono)",
} as const;