# Tokens Design tokens are the platform-agnostic way to manage design decisions in your application or website. Design tokens provide a platform-agnostic way to manage design decisions through key-value pairs that describe fundamental visual styles. > Design tokens in Panda are largely influenced by the [W3C Token Format](https://tr.designtokens.org/format/). A design token consists of the following properties: - `value`: The value of the token. This can be any valid CSS value. - `description`: An optional description of what the token can be used for. ## Core Tokens Tokens are defined in the `panda.config` file under the `theme` key ```js filename="panda.config.ts" import { defineConfig } from '@pandacss/dev' export default defineConfig({ theme: { // 👇🏻 Define your tokens here extend: { tokens: { colors: { primary: { value: '#0FEE0F' }, secondary: { value: '#EE0F0F' } }, fonts: { body: { value: 'system-ui, sans-serif' } } } } } }) ``` > ⚠️ Token values need to be nested in an object with a `value` key. This is to allow for additional properties like > `description` and more in the future. After defining tokens, you can use them in authoring components and styles. ```jsx import { css } from '../styled-system/css' function App() { return (

Hello World

) } ``` You can also add an optional description to your tokens. This will be used in the autogenerate token documentation. ```js {8} import { defineConfig } from '@pandacss/dev' export default defineConfig({ theme: { tokens: { colors: { danger: { value: '#EE0F0F', description: 'Color for errors' } } } } }) ``` ## Semantic Tokens Semantic tokens are tokens that are designed to be used in a specific context. In most cases, the value of a semantic token references to an existing token. > To reference a value in a semantic token, use the `{}` syntax. For example, assuming we've defined the following tokens: - `red` and `green` are raw tokens that define the color red and green. - `danger` and `success` are semantic tokens that reference the `red` and `green` tokens. ```js import { defineConfig } from '@pandacss/dev' export default defineConfig({ theme: { tokens: { colors: { red: { value: '#EE0F0F' }, green: { value: '#0FEE0F' } } }, semanticTokens: { colors: { danger: { value: '{colors.red}' }, success: { value: '{colors.green}' } } } } }) ``` > ⚠️ Semantic Token values need to be nested in an object with a `value` key. This is to allow for additional properties > like `description` and more in the future. Semantic tokens can also be changed based on the [conditions](/docs/concepts/conditional-styles) like light and dark modes. For example, if you want a color to change automatically based on light or dark mode. ```js import { defineConfig } from '@pandacss/dev' export default defineConfig({ // ... theme: { semanticTokens: { colors: { danger: { value: { base: '{colors.red}', _dark: '{colors.darkred}' } }, success: { value: { base: '{colors.green}', _dark: '{colors.darkgreen}' } } } } } }) ``` > NOTE 🚨: The conditions used in semantic tokens must be an at-rule or parent selector > [condition](/docs/concepts/conditional-styles#reference). ## Token Nesting Tokens can be nested to create a hierarchy of tokens. This is useful when you want to group tokens together. > Tip: You can use the `DEFAULT` key to define the default value of a nested token. ```js import { defineConfig } from '@pandacss/dev' export default defineConfig({ // ... theme: { semanticTokens: { colors: { bg: { DEFAULT: { value: '{colors.gray.100}' }, muted: { value: '{colors.gray.100}' } } } } } }) ``` This allows the use of the `bg` token in the following ways: ```jsx import { css } from '../styled-system/css' function App() { return (
Hello World
) } ``` ## Token Types Panda supports the following token types: ### Colors Colors have meaning and support the purpose of the content, communicating things like hierarchy of information, and states. It is mostly defined as a string value or reference to other tokens. ```jsx const theme = { tokens: { colors: { red: { 100: { value: '#fff1f0' } } } } } ``` ### Gradients Gradient tokens represent a smooth transition between two or more colors. Its value can be defined as a string or a composite value. ```ts type Gradient = | string | { type: 'linear' | 'radial' placement: string | number stops: | Array<{ color: string position: number }> | Array } ``` ```jsx const theme = { tokens: { gradients: { // string value simple: { value: 'linear-gradient(to right, red, blue)' }, // composite value primary: { value: { type: 'linear', placement: 'to right', stops: ['red', 'blue'] } } } } } ``` ### Sizes Size tokens represent the width and height of an element. Its value is defined as a string. ```jsx const theme = { tokens: { sizes: { sm: { value: '12px' } } } } ``` > Size tokens are typically used in `width`, `height`, `min-width`, `max-width`, `min-height`, `max-height` properties. ### Spacings Spacing tokens represent the margin and padding of an element. Its value is defined as a string. ```jsx const theme = { tokens: { spacing: { sm: { value: '12px' } } } } ``` > Spacing tokens are typically used in `margin`, `padding`, `gap`, and `{top|right|bottom|left}` properties. ### Fonts Font tokens represent the font family of a text element. Its value is defined as a string or an array of strings. ```jsx const theme = { tokens: { fonts: { body: { value: 'Inter, sans-serif' }, heading: { value: ['Roboto Mono', 'sans-serif'] } } } } ``` > Font tokens are typically used in `font-family` property. ### Font Sizes Font size tokens represent the size of a text element. Its value is defined as a string. ```jsx const theme = { tokens: { fontSizes: { sm: { value: '12px' } } } } ``` > Font size tokens are typically used in `font-size` property. ### Font Weights Font weight tokens represent the weight of a text element. Its value is defined as a string. ```jsx const theme = { tokens: { fontWeights: { bold: { value: '700' } } } } ``` > Font weight tokens are typically used in `font-weight` property. ### Letter Spacings Letter spacing tokens represent the spacing between letters in a text element. Its value is defined as a string. ```jsx const theme = { tokens: { letterSpacings: { wide: { value: '0.1em' } } } } ``` > Letter spacing tokens are typically used in `letter-spacing` property. ### Line Heights Line height tokens represent the height of a line of text. Its value is defined as a string. ```jsx const theme = { tokens: { lineHeights: { normal: { value: '1.5' } } } } ``` > Line height tokens are typically used in `line-height` property. ### Radii Radii tokens represent the radius of a border. Its value is defined as a string. ```jsx const theme = { tokens: { radii: { sm: { value: '4px' } } } } ``` > Radii tokens are typically used in `border-radius` property. ### Borders A border is a line surrounding a UI element. You can define them as string values or as a composite value ```jsx const theme = { tokens: { borders: { // string value subtle: { value: '1px solid red' }, // string value with reference to color token danger: { value: '1px solid {colors.red.400}' }, // composite value accent: { value: { width: '1px', color: 'red', style: 'solid' } } } } } ``` > Border tokens are typically used in `border`, `border-top`, `border-right`, `border-bottom`, `border-left`, `outline` > properties. ### Border Widths Border width tokens represent the width of a border. Its value is defined as a string. ```jsx const theme = { tokens: { borderWidths: { thin: { value: '1px' }, thick: { value: '2px' }, medium: { value: '1.5px' } } } } ``` ### Shadows Shadow tokens represent the shadow of an element. Its value is defined as single or multiple values containing a string or a composite value. ```ts type CompositeShadow = { offsetX: number offsetY: number blur: number spread: number color: string inset?: boolean } type Shadow = string | CompositeShadow | string[] | CompositeShadow[] ``` ```jsx const theme = { tokens: { shadows: { // string value subtle: { value: '0 1px 2px 0 rgba(0, 0, 0, 0.05)' }, // composite value accent: { value: { offsetX: 0, offsetY: 4, blur: 4, spread: 0, color: 'rgba(0, 0, 0, 0.1)' } }, // multiple string values realistic: { value: ['0 1px 2px 0 rgba(0, 0, 0, 0.05)', '0 1px 4px 0 rgba(0, 0, 0, 0.1)'] } } } } ``` > Shadow tokens are typically used in `box-shadow` property. ### Easings Easing tokens represent the easing function of an animation or transition. Its value is defined as a string or an array of values representing the cubic bezier. ```jsx const theme = { tokens: { easings: { // string value easeIn: { value: 'cubic-bezier(0.4, 0, 0.2, 1)' }, // array value easeOut: { value: [0.4, 0, 0.2, 1] } } } } ``` > Ease tokens are typically used in `transition-timing-function` property. ### Opacity Opacity tokens help you set the opacity of an element. ```js const theme = { tokens: { opacity: { 50: { value: 0.5 } } } } ``` > Opacity tokens are typically used in `opacity` property. ### Z-Index This token type represents the depth of an element's position on the z-axis. ```jsx const theme = { tokens: { zIndex: { modal: { value: 1000 } } } } ``` > Z-index tokens are typically used in `z-index` property. ### Assets Asset tokens represent a url or svg string. Its value is defined as a string or a composite value. ```ts type CompositeAsset = { type: 'url' | 'svg'; value: string } type Asset = string | CompositeAsset ``` ```js const theme = { tokens: { assets: { logo: { value: { type: 'url', value: '/static/logo.png' } }, checkmark: { value: { type: 'svg', value: '...' } } } } } ``` > Asset tokens are typically used in `background-image` property. ### Durations Duration tokens represent the length of time in milliseconds an animation or animation cycle takes to complete. Its value is defined as a string. ```jsx const theme = { tokens: { durations: { fast: { value: '100ms' } } } } ``` > Duration tokens are typically used in `transition-duration` and `animation-duration` properties. ### Animations Animation tokens represent a keyframe animation. Its value is defined as a string value. ```jsx const theme = { tokens: { animations: { spin: { value: 'spin 1s linear infinite' } } } } ``` > Animation tokens are typically used in `animation` property. ### Aspect Ratios Aspect ratio tokens represent the aspect ratio of an element. Its value is defined as a string. ```js const theme = { tokens: { aspectRatios: { '1:1': { value: '1 / 1' }, '16:9': { value: '16 / 9' } } } } ``` ### Cursor Cursor tokens define the style of the mouse pointer when it hovers over a specific element or area. These tokens represent the visual behavior of interactions, indicating actions such as clickable areas, draggable elements, or loading states. Their value is defined as a string. ```js const theme = { tokens: { cursor: { click: { value: 'pointer' }, disabled: { value: 'not-allowed' }, // custom value custom: { value: 'url(cursor.svg), auto' } } } } ``` ## Token Helpers To help defining tokens in a type-safe way, you can use the tokens [Config Functions](/docs/customization/config-functions#token-creators). ## CSS variables The generated CSS variables will be scoped using the `cssVarRoot` selector defined in the config. ```js import { defineConfig } from '@pandacss/dev' export default defineConfig({ cssVarRoot: ':where(:root, :host)' // ... }) ``` This will generate a CSS file similar to the following: ```css :where(:root, :host) { --colors-primary: #0fee0f; --colors-secondary: #ee0f0f; /* ... */ } ``` You can also define type-safe CSS variables using [globalVars](/docs/concepts/writing-styles#property-conflicts). --- _This content is automatically generated from the official Panda CSS documentation._