Foundations
Give the same components your product’s identity through supported tokens.
1. Semantic
Product roles such as primary color, surface, text and typography.
2. Family
Shared rules for controls, focus, choices and surfaces.
3. Component
Part-specific geometry and presentation. Change one component when a family rule should stay shared.
Use a profile
Start with a maintained theme, then load a schema 1 JSON profile from any component page. Override only what your product needs. Export the profile and keep its exact library version with your editable source.
The values below are CSS declarations for Neutral, based on neutral, using library 0.3.0-alpha.3. References such as var(--panel-primary) resolve inside the rendered theme. This table does not claim computed colors, contrast or font availability.
172 of 172 supported tokens
| Token | Layer | Value |
|---|---|---|
--panel-background | semantic | #ffffff |
--panel-foreground | semantic | #20252b |
--panel-surface | semantic | #ffffff |
--panel-surface-foreground | semantic | #20252b |
--panel-popover | semantic | #ffffff |
--panel-popover-foreground | semantic | #20252b |
--panel-muted | semantic | #59636f |
--panel-subtle | semantic | #f3f5f7 |
--panel-primary | semantic | #303b49 |
--panel-on-primary | semantic | #ffffff |
--panel-primary-hover | semantic | #1c2531 |
--panel-secondary | semantic | #f3f5f7 |
--panel-on-secondary | semantic | #20252b |
--panel-destructive | semantic | #a92626 |
--panel-on-destructive | semantic | #ffffff |
--panel-accent | semantic | #f3f5f7 |
--panel-accent-foreground | semantic | #20252b |
--panel-border | semantic | #aab3bd |
--panel-focus | semantic | #365f99 |
--panel-font-family | semantic | Arial, system-ui, sans-serif |
--panel-font-size | semantic | 16px |
--panel-line-height | semantic | 1.5 |
--panel-border-width | semantic | 1px |
--panel-overlay | semantic | #0f172a66 |
--panel-space-1 | semantic | 4px |
--panel-space-2 | semantic | 8px |
--panel-space-4 | semantic | 16px |
--panel-space-6 | semantic | 24px |
--panel-type-sm | semantic | 14px |
--panel-weight-regular | semantic | 400 |
--panel-weight-medium | semantic | 500 |
--panel-weight-semibold | semantic | 600 |
--panel-icon-size | semantic | 16px |
--panel-control-radius | family | 8px |
--panel-control-shadow | family | none |
--panel-focus-width | family | 2px |
--panel-focus-offset | family | 3px |
--panel-input-border | family | var(--panel-border) |
--panel-control-font-family | family | var(--panel-font-family) |
--panel-control-font-size | family | var(--panel-font-size) |
--panel-control-border-width | family | var(--panel-border-width) |
--panel-control-border-color | family | var(--panel-input-border) |
--panel-surface-border-width | family | var(--panel-border-width) |
--panel-surface-border-color | family | var(--panel-border) |
--panel-surface-background | family | var(--panel-surface) |
--panel-surface-color | family | var(--panel-surface-foreground) |
--panel-choice-background | family | var(--panel-surface-background) |
--panel-choice-border-color | family | var(--panel-control-border-color) |
--panel-choice-selected-background | family | var(--panel-primary) |
--panel-choice-selected-foreground | family | var(--panel-on-primary) |
--panel-input-invalid-border | component | #a92626 |
--panel-button-height | component | 44px |
--panel-button-border-width | component | 1px |
--panel-button-padding-x | component | 16px |
--panel-button-padding-y | component | 8px |
--panel-button-font-size | component | var(--panel-control-font-size) |
--panel-button-weight | component | 600 |
--panel-button-line-height | component | 1.35 |
--panel-button-shadow | component | none |
--panel-button-lg-height | component | 48px |
--panel-button-lg-padding-x | component | 32px |
--panel-button-lg-padding-y | component | 12px |
--panel-link-color | component | var(--panel-primary) |
--panel-link-font-size | component | 14px |
--panel-input-height | component | 44px |
--panel-input-padding-x | component | 16px |
--panel-input-padding-y | component | 10px |
--panel-input-line-height | component | 1.4 |
--panel-input-background | component | var(--panel-surface) |
--panel-label-weight | component | 600 |
--panel-select-height | component | 44px |
--panel-select-font-size | component | 16px |
--panel-select-padding-x | component | 16px |
--panel-select-padding-y | component | 10px |
--panel-select-background | component | var(--panel-surface) |
--panel-select-shadow | component | 0 12px 32px #14283c26 |
--panel-select-item-padding | component | 9px 12px |
--panel-select-item-radius | component | 4px |
--panel-card-radius | component | 12px |
--panel-card-shadow | component | 0 2px 6px #14283c0a |
--panel-card-header-padding | component | 24px |
--panel-card-header-gap | component | 8px |
--panel-card-title-size | component | 20px |
--panel-card-title-line-height | component | 1.3 |
--panel-card-content-padding | component | 0 24px 24px |
--panel-card-description-size | component | 16px |
--panel-dialog-width | component | 672px |
--panel-dialog-padding | component | 24px |
--panel-dialog-gap | component | 16px |
--panel-dialog-radius | component | 12px |
--panel-dialog-mobile-radius | component | 12px |
--panel-dialog-mobile-padding | component | 20px 16px |
--panel-dialog-shadow | component | 0 12px 32px #14283c26 |
--panel-dialog-title-size | component | 20px |
--panel-accordion-radius | component | 8px |
--panel-accordion-item-border | component | var(--panel-border-width) solid var(--panel-border) |
--panel-accordion-item-outline | component | var(--panel-border-width) solid var(--panel-border) |
--panel-accordion-font-size | component | 16px |
--panel-accordion-weight | component | 600 |
--panel-accordion-line-height | component | 1.5 |
--panel-accordion-trigger-padding | component | 16px |
--panel-accordion-trigger-min-height | component | 56px |
--panel-accordion-open-background | component | var(--panel-subtle) |
--panel-accordion-content-padding | component | 16px |
--panel-accordion-content-size | component | 16px |
--panel-accordion-content-line-height | component | 1.6 |
--panel-link-hover-decoration | component | underline |
--panel-accordion-hover-decoration | component | underline |
--panel-label-font-size | component | var(--panel-type-sm) |
--panel-textarea-min-height | component | 96px |
--panel-textarea-padding | component | 12px 16px |
--panel-skeleton-radius | component | var(--panel-control-radius) |
--panel-skeleton-background | component | color-mix(in srgb, var(--panel-primary) 10%, transparent) |
--panel-skeleton-duration | component | 2s |
--panel-loading-button-icon-size | component | var(--panel-icon-size) |
--panel-loading-button-duration | component | 1s |
--panel-popover-width | component | 288px |
--panel-popover-padding | component | var(--panel-space-4) |
--panel-popover-radius | component | var(--panel-control-radius) |
--panel-popover-shadow | component | var(--panel-select-shadow) |
--panel-tooltip-max-width | component | 288px |
--panel-tooltip-padding | component | 6px 12px |
--panel-tooltip-radius | component | var(--panel-control-radius) |
--panel-tooltip-font-size | component | 12px |
--panel-tooltip-background | component | var(--panel-primary) |
--panel-tooltip-foreground | component | var(--panel-on-primary) |
--panel-slider-hit-size | component | 32px |
--panel-slider-vertical-height | component | 160px |
--panel-slider-track-size | component | 6px |
--panel-slider-track-background | component | color-mix(in srgb, var(--panel-primary) 20%, transparent) |
--panel-slider-range-background | component | var(--panel-primary) |
--panel-slider-thumb-size | component | 16px |
--panel-slider-thumb-border | component | color-mix(in srgb, var(--panel-primary) 50%, transparent) |
--panel-sheet-width | component | 75vw |
--panel-sheet-max-width | component | 384px |
--panel-sheet-padding | component | var(--panel-space-6) |
--panel-sheet-gap | component | var(--panel-space-4) |
--panel-sheet-shadow | component | var(--panel-dialog-shadow) |
--panel-sheet-enter-duration | component | 500ms |
--panel-sheet-exit-duration | component | 300ms |
--panel-table-font-size | component | var(--panel-type-sm) |
--panel-table-head-height | component | 40px |
--panel-table-cell-padding | component | 8px |
--panel-table-hover-background | component | color-mix(in srgb, var(--panel-subtle) 50%, transparent) |
--panel-table-selected-background | component | var(--panel-subtle) |
--panel-checkbox-size | component | 20px |
--panel-checkbox-radius | component | 4px |
--panel-checkbox-icon-size | component | 14px |
--panel-switch-width | component | 40px |
--panel-switch-height | component | 24px |
--panel-switch-thumb-size | component | 20px |
--panel-switch-inset | component | 2px |
--panel-switch-background | component | var(--panel-border) |
--panel-switch-checked-background | component | var(--panel-choice-selected-background) |
--panel-switch-thumb-background | component | var(--panel-surface-background) |
--panel-radio-size | component | 20px |
--panel-radio-indicator-size | component | 10px |
--panel-radio-group-gap | component | 12px |
--panel-tabs-gap | component | 4px |
--panel-tabs-list-padding | component | 4px |
--panel-tabs-radius | component | var(--panel-control-radius) |
--panel-tabs-trigger-padding | component | 8px 12px |
--panel-tabs-trigger-radius | component | calc(var(--panel-control-radius) - 2px) |
--panel-tabs-font-size | component | var(--panel-type-sm) |
--panel-badge-padding | component | 2px 8px |
--panel-badge-radius | component | 999px |
--panel-badge-font-size | component | 12px |
--panel-badge-background | component | var(--panel-accent) |
--panel-badge-foreground | component | var(--panel-accent-foreground) |
--panel-separator-color | component | var(--panel-border) |
--panel-separator-size | component | 1px |
--panel-separator-height | component | 24px |