Skip to content

Theme Tokens

Global theme tokens are CSS custom properties installed by the CLI into src/styles/bambi.css. Import once at the root of your app:

@import './styles/bambi.css';

Override any token in your own :root block to customise the theme globally:

:root {
--bambi-primary-500: oklch(60% 0.25 30);
--bambi-radius-md: 0.5rem;
}
[data-theme='dark'], .dark {
--bambi-primary: var(--bambi-primary-400);
}

Component-specific token defaults, such as --bambi-button-*, live in component CSS instead of this global token file. Override them on the component selector, a more specific component selector, or inline style.


Colors use the OKLCH color space. The global token file exposes complete 50 through 950 scales for neutral, primary, danger, success, and warning. Light semantic aliases are defined in :root; dark mode overrides semantic aliases in [data-theme='dark'], .dark.

ScaleDefault semantic aliasPurpose
--bambi-neutral-50--bambi-neutral-950background, foreground, surfaces, bordersBase UI surfaces and text
--bambi-primary-50--bambi-primary-950primary, ring, primary intentBrand and primary actions
--bambi-danger-50--bambi-danger-950dangerDestructive actions
--bambi-success-50--bambi-success-950successPositive actions
--bambi-warning-50--bambi-warning-950warningCautionary actions

By default, light mode maps --bambi-primary to --bambi-primary-500; dark mode maps it to --bambi-primary-400.

TokenLightDark
--bambi-primaryvar(--bambi-primary-500)var(--bambi-primary-400)
--bambi-primary-foregroundoklch(100% 0 0)oklch(9% 0 0)
--bambi-secondaryvar(--bambi-neutral-100)var(--bambi-neutral-800)
--bambi-secondary-foregroundvar(--bambi-neutral-950)var(--bambi-neutral-50)
--bambi-accentvar(--bambi-neutral-100)var(--bambi-neutral-800)
--bambi-accent-foregroundvar(--bambi-neutral-950)var(--bambi-neutral-50)
TokenLightDark
--bambi-dangervar(--bambi-danger-500)var(--bambi-danger-600)
--bambi-danger-foregroundoklch(100% 0 0)var(--bambi-neutral-50)
--bambi-successvar(--bambi-success-500)var(--bambi-success-500)
--bambi-success-foregroundvar(--bambi-neutral-950)var(--bambi-neutral-950)
--bambi-warningvar(--bambi-warning-500)var(--bambi-warning-400)
--bambi-warning-foregroundvar(--bambi-neutral-950)var(--bambi-neutral-950)
--bambi-mutedvar(--bambi-neutral-100)var(--bambi-neutral-800)
--bambi-muted-foregroundvar(--bambi-neutral-500)var(--bambi-neutral-400)
TokenLightDark
--bambi-backgroundvar(--bambi-neutral-50)var(--bambi-neutral-950)
--bambi-foregroundvar(--bambi-neutral-950)var(--bambi-neutral-50)
--bambi-cardvar(--bambi-color-white)var(--bambi-neutral-900)
--bambi-card-foregroundvar(--bambi-neutral-950)var(--bambi-neutral-50)
--bambi-popovervar(--bambi-color-white)var(--bambi-neutral-900)
--bambi-popover-foregroundvar(--bambi-neutral-950)var(--bambi-neutral-50)
TokenLightDark
--bambi-bordervar(--bambi-neutral-200)var(--bambi-neutral-800)
--bambi-inputvar(--bambi-neutral-200)var(--bambi-neutral-800)
--bambi-input-backgroundvar(--bambi-color-white)var(--bambi-neutral-900)
--bambi-input-foregroundvar(--bambi-neutral-950)var(--bambi-neutral-50)
--bambi-input-placeholdervar(--bambi-neutral-500)var(--bambi-neutral-400)
--bambi-ringvar(--bambi-primary)var(--bambi-primary)
--bambi-separatorvar(--bambi-neutral-200)var(--bambi-neutral-800)

These tokens are used internally by components. Override them to change hover colors without touching the base intent colors.

TokenDefault
--bambi-intent-primary-bgvar(--bambi-primary)
--bambi-intent-primary-fgvar(--bambi-primary-foreground)
--bambi-intent-primary-hover-bgvar(--bambi-primary-600) / var(--bambi-primary-300) dark
--bambi-intent-secondary-bgvar(--bambi-secondary)
--bambi-intent-secondary-fgvar(--bambi-secondary-foreground)
--bambi-intent-secondary-hover-bgvar(--bambi-accent)
--bambi-intent-danger-bgvar(--bambi-danger)
--bambi-intent-danger-fgvar(--bambi-danger-foreground)
--bambi-intent-danger-hover-bgvar(--bambi-danger-600) / var(--bambi-danger-400) dark
--bambi-intent-success-bgvar(--bambi-success)
--bambi-intent-success-fgvar(--bambi-success-foreground)
--bambi-intent-success-hover-bgvar(--bambi-success-600) / var(--bambi-success-400) dark
--bambi-intent-warning-bgvar(--bambi-warning)
--bambi-intent-warning-fgvar(--bambi-warning-foreground)
--bambi-intent-warning-hover-bgvar(--bambi-warning-600) / var(--bambi-warning-300) dark

TokenValue
--bambi-radius-sm0.375rem
--bambi-radius-md0.5rem
--bambi-radius-lg0.75rem
--bambi-radius-xl1rem
--bambi-radius-full9999px

TokenValue
--bambi-font-sanssystem-ui, sans-serif
--bambi-font-monoui-monospace, monospace
TokenValue
--bambi-text-xs0.75rem
--bambi-text-sm0.875rem
--bambi-text-base1rem
--bambi-text-lg1.125rem
TokenValue
--bambi-font-weight-normal400
--bambi-font-weight-medium500
--bambi-font-weight-semibold600
--bambi-font-weight-bold700

TokenLightDark
--bambi-shadow-sm0 1px 2px 0 oklch(0% 0 0 / 0.05)oklch(0% 0 0 / 0.3)
--bambi-shadow-md0 4px 6px -1px oklch(0% 0 0 / 0.1), …oklch(0% 0 0 / 0.4), …
--bambi-shadow-lg0 10px 15px -3px oklch(0% 0 0 / 0.1), …oklch(0% 0 0 / 0.4), …

Shadow opacity is higher in dark mode to remain visible on dark surfaces.