Skip to content
Components, switch product

Design tokens

Every color, space, size and font the components use comes from a --gui-* CSS variable in tokens.css. Change a token and every component that reads it follows.

Set a token on :root to change it everywhere, or on any element to change it for the components inside:

/* Taller, rounder fields everywhere. */
:root {
--gui-widget-size: 48px;
--gui-radius-md: 12px;
}
/* A brand focus color in one form only. */
.checkout {
--gui-border-focus: #d96c3f;
}

Your own rules are outside the GolemUI Components cascade layers, so they win over the defaults without extra specificity. Each component page lists the tokens it reads under Styling.

The colors come in two levels. The primitive ramps hold the raw values; the semantic tokens pick from them by purpose. The components read only the semantic tokens, so change those to restyle them, and the ramps to repaint every token that uses them.

RampSteps
--gui-color-neutral-*50, 100, 200, 300, 400, 500, 600, 700, 800, 900, 950
--gui-color-primary-*50, 100, 200, 300, 400, 500, 600, 700, 800, 900, 950
--gui-color-success-*50, 100, 300, 400, 500, 600, 700, 900
--gui-color-info-*50, 100, 300, 400, 500, 600, 700, 900
--gui-color-warning-*50, 100, 300, 400, 500, 600, 700, 900
--gui-color-error-*50, 100, 300, 400, 500, 600, 700, 900

There are also --gui-color-white, --gui-color-black and --gui-color-transparent.

The dark values apply under data-theme="dark", or data-theme="auto" on a dark system. See Themes and dark mode.

TokenLightDark
--gui-bg-defaultvar(--gui-color-white)var(--gui-color-neutral-950)
--gui-bg-surfacevar(--gui-color-white)var(--gui-color-neutral-900)
--gui-bg-surface-hovervar(--gui-color-neutral-200)var(--gui-color-neutral-800)
--gui-bg-surface-activevar(--gui-color-neutral-100)var(--gui-color-neutral-700)
--gui-bg-disabledvar(--gui-color-neutral-300)var(--gui-color-neutral-800)
--gui-bg-inversevar(--gui-color-neutral-900)var(--gui-color-white)
TokenLightDark
--gui-text-defaultvar(--gui-color-neutral-900)var(--gui-color-neutral-50)
--gui-text-secondaryvar(--gui-color-neutral-500)var(--gui-color-neutral-400)
--gui-text-mutedvar(--gui-color-neutral-400)var(--gui-color-neutral-500)
--gui-text-inversevar(--gui-color-white)var(--gui-color-neutral-900)
--gui-text-disabledvar(--gui-color-neutral-400)var(--gui-color-neutral-600)
TokenLightDark
--gui-border-defaultvar(--gui-color-neutral-300)var(--gui-color-neutral-700)
--gui-border-subtlevar(--gui-color-neutral-200)var(--gui-color-neutral-800)
--gui-border-strongvar(--gui-color-neutral-400)var(--gui-color-neutral-600)
--gui-border-disabledvar(--gui-color-neutral-200)var(--gui-color-neutral-700)
--gui-border-focusvar(--gui-color-primary-500)var(--gui-color-primary-500)

The colors of states and actions: primary for buttons and selections, success, info and warning for alerts, error for invalid fields and their messages.

TokenLightDark
--gui-intent-primaryvar(--gui-color-primary-600)var(--gui-color-primary-500)
--gui-intent-primary-hovervar(--gui-color-primary-700)var(--gui-color-primary-400)
--gui-intent-primary-activevar(--gui-color-primary-800)var(--gui-color-primary-300)
--gui-intent-primary-textvar(--gui-color-white)Same
--gui-intent-successvar(--gui-color-success-600)Same
--gui-intent-success-hovervar(--gui-color-success-700)Same
--gui-intent-success-bgvar(--gui-color-success-50)color-mix(in srgb, var(--gui-color-success-500) 20%, transparent)
--gui-intent-success-textvar(--gui-color-success-900)var(--gui-color-success-400)
--gui-intent-infovar(--gui-color-info-600)Same
--gui-intent-info-hovervar(--gui-color-info-700)Same
--gui-intent-info-bgvar(--gui-color-info-50)color-mix(in srgb, var(--gui-color-info-500) 20%, transparent)
--gui-intent-info-textvar(--gui-color-info-900)var(--gui-color-info-400)
--gui-intent-warningvar(--gui-color-warning-500)Same
--gui-intent-warning-hovervar(--gui-color-warning-600)Same
--gui-intent-warning-bgvar(--gui-color-warning-50)color-mix(in srgb, var(--gui-color-warning-500) 20%, transparent)
--gui-intent-warning-textvar(--gui-color-warning-900)var(--gui-color-warning-400)
--gui-intent-errorvar(--gui-color-error-600)var(--gui-color-error-400)
--gui-intent-error-hovervar(--gui-color-error-700)var(--gui-color-error-300)
--gui-intent-error-bgvar(--gui-color-error-50)var(--gui-color-error-900)
--gui-intent-error-textvar(--gui-color-error-900)var(--gui-color-error-100)
TokenDefault
--gui-space-00px
--gui-space-10.25rem
--gui-space-20.5rem
--gui-space-30.75rem
--gui-space-41rem
--gui-space-51.25rem
--gui-space-61.5rem
--gui-space-71.75rem
--gui-space-82rem
--gui-space-102.5rem
--gui-space-123rem

The grid’s gaps have tokens of their own, so a theme can change them apart from the rest of the spacing. --gui-layout-column-min is the narrowest column of an auto grid. See Grid.

TokenDefault
--gui-layout-gap-none0px
--gui-layout-gap-xsvar(--gui-space-1)
--gui-layout-gap-smvar(--gui-space-2)
--gui-layout-gap-mdvar(--gui-space-4)
--gui-layout-gap-lgvar(--gui-space-6)
--gui-layout-gap-xlvar(--gui-space-8)
--gui-layout-column-min12rem
TokenDefault
--gui-font-familyui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif
--gui-font-xs0.75rem
--gui-font-sm0.875rem
--gui-font-base1rem
--gui-font-lg1.125rem
--gui-font-xl1.25rem
--gui-font-2xl1.5rem
--gui-font-3xl2rem
TokenDefault
--gui-radius-none0px
--gui-radius-sm0.125rem
--gui-radius-md0.25rem
--gui-radius-lg0.5rem
--gui-radius-xl0.75rem
--gui-radius-full9999px

--gui-shadow-focus is the focus ring; --gui-shadow-focus-error replaces it on an invalid field.

TokenDefault
--gui-shadow-sm0 1px 2px 0 rgb(0 0 0 / 0.05)
--gui-shadow-md0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)
--gui-shadow-lg0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1)
--gui-shadow-focus0 0 0 2px var(--gui-bg-default), 0 0 0 4px color-mix(in srgb, var(--gui-border-focus) 50%, transparent)
--gui-shadow-focus-error0 0 0 2px var(--gui-bg-default), 0 0 0 4px color-mix(in srgb, var(--gui-intent-error) 50%, transparent)

--gui-widget-size, 40px by default, is the height of every field and the size of each day of the calendar. Change it to make every field taller or shorter.

A few components have tokens of their own.

--gui-caret-shape and --gui-caret-image draw the arrows of the pickers, selects, dropdowns, number spinner, calendar and accordion. See Carets.

The pills of the tags field, the multi-select and the range fields. They grow on touch screens: see Responsive values.

TokenDefault
--gui-pill-height24px
--gui-pill-action-size16px
--gui-pill-action-hit24px
--gui-pill-font-sizevar(--gui-font-xs)
TokenDefault
--gui-toggle-width38px
--gui-toggle-height20px
--gui-toggle-slider-width16px
--gui-toggle-slider-height16px
--gui-toggle-slider-transform16px
TokenDefault
--gui-calendar-width300px
--gui-calendar-change-month-button-width36px
--gui-calendar-change-month-button-height36px
--gui-calendar-day-button-sizevar(--gui-widget-size)
--gui-calendar-year-button-width66px
--gui-calendar-year-button-height32px
--gui-calendar-year-grid-height216px
--gui-calendar-time-grid-height216px
--gui-calendar-time-button-height32px

The typography of gui-markdown-text.

TokenLightDark
--gui-md-text-colorvar(--gui-text-default)Same
--gui-md-line-height1.6Same
--gui-md-heading-colorvar(--gui-text-default)Same
--gui-md-heading-weight600Same
--gui-md-link-colorvar(--gui-intent-primary)Same
--gui-md-link-hover-colorvar(--gui-intent-primary-hover)Same
--gui-md-blockquote-bgvar(--gui-bg-surface-hover)Same
--gui-md-blockquote-border-colorvar(--gui-border-strong)Same
--gui-md-blockquote-colorvar(--gui-text-secondary)Same
--gui-md-code-bgvar(--gui-color-neutral-300)var(--gui-color-neutral-700)
--gui-md-code-colorvar(--gui-text-default)Same
--gui-md-code-radiusvar(--gui-radius-sm)Same
--gui-md-hr-colorvar(--gui-border-default)Same

On small screens, some tokens shrink so the components fit:

ScreenTokens
768px or narrower--gui-space-6 1.25rem, --gui-space-8 1.5rem, --gui-space-10 2rem
640px or narrower--gui-space-4 0.75rem, --gui-space-6 1rem, --gui-space-8 1.25rem, --gui-space-10 1.5rem, --gui-font-2xl 1.25rem, --gui-font-3xl 1.5rem
400px or narrower--gui-space-3 0.25rem
Touch screens--gui-pill-height 32px, --gui-pill-action-size 24px, --gui-pill-action-hit 32px, --gui-pill-font-size var(--gui-font-sm)

--gui-bp-sm (640px), --gui-bp-md (768px), --gui-bp-lg (1024px) and --gui-bp-xl (1280px) hold the breakpoints for reference. CSS can’t use a variable in a media query, so they don’t change the breakpoints.