Design tokens

Every token as a CSS custom property, with its value in each theme and scale.

On this page

Each token is a CSS custom property on every envUI theme boundary. Use the semantic names in application styles; the values change with the theme, the contrast and the scale.

Color roles

TokenLightDarkLight high contrastDark high contrast
--env-color-bg-accent-emphasisThe fill of accent primary actions, as the primary emphasis fill is of the main one: saturated with white labels in light, soft with dark labels in dark; paired with fg.on-emphasis.#9948b6#dab0ec#6d1888#f2d3ff
--env-color-bg-accent-emphasis-hoverAn accent primary action under the pointer: a grade further from its label, darker in light and lighter in dark.#83319f#eec6ff#63047d#f7e4ff
--env-color-bg-accent-emphasis-pressedAn accent primary action while pressed: in light a grade past its hover, further from its label. In dark, where lightening further would turn the soft fill nearly white, it is instead a small step deeper than rest, still clear of its dark label, so it reads as pressed rather than highlighted.#6d1888#d29ee7#57006e#faedff
--env-color-bg-accent-mutedThe translucent accent tint of soft accent badges in dark and at high contrast; in light they take color.bg.accent.soft.#8e3caa1f#dab0ec24#63047d14#f2d3ff1a
--env-color-bg-accent-softThe tint of a soft accent badge: in light the accent purple at 5%, so the purple text keeps 4.5:1 over it; in dark and at high contrast it is color.bg.accent.muted.#8e3caa0d#dab0ec24#63047d14#f2d3ff1a
--env-color-bg-accent-solidA solid accent fill, such as a solid accent badge; paired with fg.on-emphasis.#8e3caa#dab0ec#63047d#f2d3ff
--env-color-bg-accent-strongThe accent purple of accent actions, such as Button's accent tone, in both themes; paired with fg.on-strong.#9948b6#9948b6#6d1888#6d1888
--env-color-bg-accent-strong-hoverAn accent action under the pointer.#83319f#83319f#63047d#63047d
--env-color-bg-accent-strong-pressedAn accent action while pressed.#6d1888#6d1888#57006e#57006e
--env-color-bg-accent-subtleControls in the accent tone without a fill at rest: transparent, as color.bg.neutral.subtle is.transparenttransparenttransparenttransparent
--env-color-bg-accent-subtle-hoverThe state layer of a control without a fill in the accent tone under the pointer, and the tonal fill of an accent badge: the accent text color at 14%.#8e3caa24#dab0ec2b#63047d24#f7e4ff24
--env-color-bg-accent-subtle-pressedThe accent state layer while pressed: the accent text color at 22%.#8e3caa38#dab0ec40#63047d38#f7e4ff38
--env-color-bg-avatarThe default fill, the powder hue: the fill of an avatar whose hue nothing sets.#c0e2f6#1a466f#c0e2f6#04335b
--env-color-bg-avatar-blushThe blush pink fill, one of the hues an avatar takes from its name: a pastel, and a deep shade in dark.#ffd3d4#732c30#ffd3d4#5e181f
--env-color-bg-avatar-butterThe butter yellow fill, one of the hues an avatar takes from its name: a pastel, and a deep shade in dark.#efdca4#73501f#efdca4#472c00
--env-color-bg-avatar-oatThe warm oat fill, one of the hues an avatar takes from its name: a pastel, and a deep shade in dark.#e7dbce#5a4a3e#e7dbce#3d2f23
--env-color-bg-avatar-orchidThe orchid fill, one of the hues an avatar takes from its name: a pastel, and a deep shade in dark.#fad2ec#683052#fad2ec#531e3f
--env-color-bg-avatar-periwinkleThe periwinkle fill, one of the hues an avatar takes from its name: a pastel, and a deep shade in dark.#dadaff#413c78#dadaff#302964
--env-color-bg-avatar-powderThe powder blue fill, one of the hues an avatar takes from its name: a pastel, and a deep shade in dark.#c0e2f6#1a466f#c0e2f6#04335b
--env-color-bg-avatar-sageThe sage fill, one of the hues an avatar takes from its name: a pastel, and a deep shade in dark.#cee4c3#395432#cee4c3#1d3817
--env-color-bg-avatar-seafoamThe seafoam fill, one of the hues an avatar takes from its name: a pastel, and a deep shade in dark.#b8e7de#004c4b#b8e7de#003837
--env-color-bg-backdropThe backdrop behind dialogs and the command palette: the dark page color at 32% in light, which sets the page back without turning it gray, and black at 70% in dark, where the page color would not darken it and less would barely dim the dark page.#1f1f2252#000000b3#1f1f2252#000000b3
--env-color-bg-backdrop-mutedThe lighter backdrop behind a sheet that leaves the page usable, such as a supporting pane over its main pane: the dark page color at 20% in light and black at 30% in dark.#1f1f2233#0000004d#1f1f2233#0000004d
--env-color-bg-danger-emphasisA solid danger fill, such as a solid danger badge, and the fill of destructive primary actions: a saturated red with white labels in every theme, so in dark, beside the soft primary and accent fills with their dark labels, a destructive action is the deepest and weightiest fill rather than a third pastel; paired with fg.on-strong.#b72b20#bf3e33#7a0200#8d0200
--env-color-bg-danger-emphasis-hoverA destructive primary action under the pointer: darker in light, as every primary hovers there, and a grade lighter in dark, as every dark primary hovers, still 4.5:1 to its white label.#9f0300#c64e43#6b0100#9f0300
--env-color-bg-danger-emphasis-pressedA destructive primary action while pressed: in light a grade past its hover, further from its label; in dark a small step deeper than rest, as every dark primary presses, so it reads as pressed rather than highlighted.#7a0200#b72b20#5a0100#7a0200
--env-color-bg-danger-mutedThe translucent danger tint of badges and alerts: a light red in light, rather than the danger text color, which would lie at the page's own lightness and barely part from it.#f8aca647#ce5e532e#7a020014#ffd3cf1a
--env-color-bg-danger-strongA strong danger fill in both themes; paired with fg.on-strong. Toasts take the neutral strong fill, their tone in the icon.#b72b20#b72b20#8d0200#8d0200
--env-color-bg-danger-strong-hoverA control on the strong danger fill under the pointer: lighter, at the lightest grade that keeps white labels at 4.5:1.#c64e43#c64e43#7a0200#7a0200
--env-color-bg-danger-strong-pressedA control on the strong danger fill while pressed. It can’t lighten further without its white label falling below 4.5:1, so it settles halfway back.#bf3e33#bf3e33#6b0100#6b0100
--env-color-bg-danger-subtleControls in the danger tone without a fill at rest, such as an alert’s dismiss button: transparent, as color.bg.neutral.subtle is.transparenttransparenttransparenttransparent
--env-color-bg-danger-subtle-hoverThe state layer of a control without a fill in the danger tone, such as an error alert’s dismiss button, under the pointer: the danger text color at 14%, in every theme and at high contrast.#b72b2024#ce5e5338#7a020024#ffe4e224
--env-color-bg-danger-subtle-pressedThe danger state layer while pressed: the danger text color at 22%.#b72b2038#ce5e534d#7a020038#ffe4e238
--env-color-bg-defaultThe default surface: Surface, panes, navigation and sheets. A step above the page in every theme.#f4f4f6#28292b#f8f8fa#28292b
--env-color-bg-default-hoverAn interactive default surface, such as a card or a list row, under the pointer.#e7e7e9#383a3d#eaeaec#303234
--env-color-bg-default-pressedAn interactive default surface while pressed. Muted text and an inset focus ring keep their minimums on it.#dddddf#424447#e0e0e2#383a3d
--env-color-bg-done-emphasisA solid done fill; paired with fg.on-emphasis.#4e627e#aac1dd#253650#d2dff0
--env-color-bg-done-mutedThe translucent done tint of badges.#4e627e1f#aac1dd2b#25365014#d2dff01a
--env-color-bg-fieldA well that keeps a fill of its own, such as the color picker's value button and code and references in rich text. Text fields have none: they take the background of what they sit on.#ffffff#1e1f21#ffffff#1e1f21
--env-color-bg-info-strongA strong information fill in both themes; paired with fg.on-strong. Toasts take the neutral strong fill, their tone in the icon.#2c61a6#2c61a6#094285#094285
--env-color-bg-info-strong-hoverA control on the strong information fill under the pointer. Its white label keeps 4.5:1.#376cb2#376cb2#003878#003878
--env-color-bg-info-strong-pressedA control on the strong information fill while pressed. Its white label keeps 4.5:1.#4177be#4177be#003068#003068
--env-color-bg-insetThe page color at half strength, which leans a pill on a button’s fill back toward the page instead of adding another fill, as a diff stat in a tab does.#ffffff80#1e1f2180#ffffff80#1e1f2180
--env-color-bg-list-itemThe fill of a list item: the muted surface in both themes and at high contrast, so items stand apart from the page and from a surface.#ffffff#303234#ffffff#343638
--env-color-bg-list-item-hoverA list item under the pointer.#f1f1f3#424447#f1f1f3#383a3d
--env-color-bg-list-item-pressedA list item while pressed.#e3e3e6#4b4d51#e3e3e6#424447
--env-color-bg-mutedThe filled surface: Surface background="muted", cards, list and radio rows. A step above the default surface in every theme, white in light, so cards stand apart from a pane; the raised surface takes the same fill.#ffffff#303234#ffffff#343638
--env-color-bg-muted-hoverAn interactive muted surface under the pointer.#f1f1f3#424447#f1f1f3#383a3d
--env-color-bg-muted-pressedAn interactive muted surface while pressed.#e3e3e6#4b4d51#e3e3e6#424447
--env-color-bg-navigationA navigation item that isn’t selected, at rest: no fill, over the navigation’s own background.transparenttransparenttransparenttransparent
--env-color-bg-navigation-hoverA navigation item that isn’t selected, under the pointer: a cool gray in every theme, a step quieter than the selection, so the hovered item never reads as the current one.#dfe1e5#424447#d4d4d6#383a3d
--env-color-bg-navigation-pressedA navigation item that isn’t selected, while pressed: two grades deeper than the hover in light. Its label and an inset focus ring keep their minimums on it.#d8dade#4b4d51#ceced0#424447
--env-color-bg-neutral-emphasisA solid neutral fill, such as a solid neutral badge; paired with fg.on-emphasis.#616164#bdbfc3#39393d#dbdde1
--env-color-bg-neutral-mutedThe translucent neutral fill of secondary buttons, chips, switch tracks and skeletons: a layer of the text color, so it keeps its tone on every surface.#1f1f221a#e8eaee20#1f1f220f#e8eaee14
--env-color-bg-neutral-muted-hoverThe neutral fill under the pointer.#1f1f222e#e8eaee33#1f1f222b#e8eaee1f
--env-color-bg-neutral-muted-pressedThe neutral fill while pressed.#1f1f2242#e8eaee47#1f1f2240#e8eaee26
--env-color-bg-neutral-strongThe dark neutral fill of tooltips and toasts in both themes; paired with fg.on-strong, and a toast’s tone icon with fg.{success|info|danger}-on-strong.#434346#424447#434346#424447
--env-color-bg-neutral-strong-hoverA control on the strong neutral fill under the pointer.#616164#5d6166#313134#303234
--env-color-bg-neutral-strong-pressedA control on the strong neutral fill while pressed.#757578#72767b#29292c#28292b
--env-color-bg-neutral-subtleControls without a fill at rest, such as quiet buttons, inactive tabs and menubar triggers.transparenttransparenttransparenttransparent
--env-color-bg-neutral-subtle-hoverThe state layer over a control without a fill, under the pointer.#1f1f2214#e8eaee14#1f1f220f#e8eaee0f
--env-color-bg-neutral-subtle-pressedThe state layer over a control without a fill, while pressed.#1f1f221f#e8eaee1f#1f1f2214#e8eaee14
--env-color-bg-pageThe page behind all content: the app frame, title bars and Surface background="page". Below the default surface in every theme, so the panes and cards on it part from it; the deepest surface in light, where nothing deeper keeps edges and focus rings at 3:1.#eaeaec#1e1f21#f1f1f3#1e1f21
--env-color-bg-page-hoverAn interactive page-colored surface under the pointer.#dddddf#2c2d30#e3e3e6#28292b
--env-color-bg-page-pressedAn interactive page-colored surface while pressed.#d4d4d6#383a3d#dadadc#303234
--env-color-bg-popupPopups over the page: menus, Select lists, popovers, the composer. They take elevation 2. In light white, as the raised surfaces are, its soft shadow keeping its edge over a white card or table; in dark a step lighter than the page.#ffffff#343638#f5f5f7#303234
--env-color-bg-popup-hoverA highlighted row in a popup.#e0e0e2#424447#e7e7e9#383a3d
--env-color-bg-popup-pressedA pressed row in a popup.#d7d7d9#4b4d51#dddddf#424447
--env-color-bg-primary-emphasisThe primary fill of primary actions, chosen radios and the chosen calendar day; paired with fg.on-emphasis. In dark and at high contrast, checked checkboxes, switches that are on, sliders, meters and spinners take it too: a soft blue with dark marks at 4.5:1.#1872e7#9fc1f8#00408f#b5cffb
--env-color-bg-primary-emphasis-hoverA primary action under the pointer: a grade further from its label, darker in light and lighter in dark, so the label gains contrast.#005cc8#bfd5fb#00377c#cddefc
--env-color-bg-primary-emphasis-pressedA primary action while pressed: in light a grade past its hover, further from its label. In dark, where lightening further would turn the soft fill nearly white, it is instead a small step deeper than rest, still clear of its dark label, so it reads as pressed rather than highlighted.#004aa2#8ab3f5#002f6d#e0ebfd
--env-color-bg-primary-mutedThe translucent primary tint of info alerts, and of soft primary badges in dark and at high contrast; in light they take color.bg.primary.soft. An application may put a container in it, with links in fg.link-on-muted.#005cc81f#347eea26#00377c14#cddefc1a
--env-color-bg-primary-softThe tint of a soft primary badge. In light it is the primary blue at 5%, fainter than color.bg.primary.muted, so the blue text keeps 4.5:1 over it on list rows and muted surfaces; in dark and at high contrast it is color.bg.primary.muted.#005cc80d#347eea26#00377c14#cddefc1a
--env-color-bg-primary-solidA solid primary fill, such as a solid primary badge or a navigation item's count, a grade deeper than the emphasis fill in light; paired with fg.on-emphasis.#005cc8#9fc1f8#00377c#cddefc
--env-color-bg-primary-strongThe saturated primary fill of checked checkboxes, switches that are on, sliders, meters and spinners in the light theme at standard contrast, with white marks, the check and the thumb, at 3:1. The dark theme and high contrast put those controls on the emphasis fill instead; in dark this fill, which keeps 3:1 against the surfaces, would put white text below 4.5:1.#1872e7#4b8bec#00408f#00408f
--env-color-bg-primary-strong-hoverA checked control under the pointer.#005cc8#347eea#00377c#00377c
--env-color-bg-primary-strong-pressedA checked control while pressed.#004aa2#1872e7#002f6d#002f6d
--env-color-bg-primary-subtleControls in the primary tone without a fill at rest, such as an alert’s dismiss button: transparent, as color.bg.neutral.subtle is.transparenttransparenttransparenttransparent
--env-color-bg-primary-subtle-hoverThe state layer of a control without a fill in the primary tone, such as an info alert’s dismiss button, under the pointer: the primary text color at 14%, in every theme and at high contrast.#005cc824#347eea33#00377c24#e0ebfd24
--env-color-bg-primary-subtle-pressedThe primary state layer while pressed: the primary text color at 22%.#005cc838#347eea47#00377c38#e0ebfd38
--env-color-bg-raisedA raised surface: Surface background="raised", tables, docked panels and the pager. A step above the default surface in every theme, with the filled surface’s fill: white in light, so it lifts off the page and the panes.#ffffff#303234#ffffff#343638
--env-color-bg-raised-hoverAn interactive raised surface under the pointer.#f1f1f3#424447#f1f1f3#383a3d
--env-color-bg-raised-pressedAn interactive raised surface while pressed.#e3e3e6#4b4d51#e3e3e6#424447
--env-color-bg-recessedA recessed surface: a well that what it holds rises out of, such as a stage for a preview or a drop area, and Surface background="recessed". Below the default surface in every theme: in dark a shade deeper than the page too; in light between the page and the panes, since a gray deeper than the page would take edges and focus rings below 3:1. Everything measured on the page keeps its minimum on it.#f1f1f3#191a1b#f8f8fa#191a1b
--env-color-bg-recessed-hoverAn interactive recessed surface under the pointer.#e3e3e6#28292b#eaeaec#28292b
--env-color-bg-recessed-pressedAn interactive recessed surface while pressed.#dadadc#343638#e0e0e2#343638
--env-color-bg-row-hoverThe state layer over a tree or table row under the pointer: clear over the row's surface, and a step below the selection, so the selected row always reads strongest.#1f1f2212#e8eaee2e#1f1f220f#e8eaee0f
--env-color-bg-row-pressedThe state layer over a tree or table row while pressed, a step stronger than its hover.#1f1f221c#e8eaee33#1f1f2214#e8eaee14
--env-color-bg-selectedSelected navigation items, tree and table rows, Select options and drop targets; paired with fg.on-selected. A blue tint in light and a blue-gray in dark, distinct from the other items around it, at rest and under the pointer: ΔEOK 0.03 or more, 0.04 at high contrast.#d7e5fd#293a55#c8dbfc#1d2e47
--env-color-bg-selected-hoverA selected item under the pointer: visibly deeper than the selection, and distinct from an unselected item under the pointer.#cddefc#33445f#bfd5fb#253650
--env-color-bg-selected-pressedA selected item while pressed. Muted text and an inset focus ring keep their minimums on it.#c8dbfc#3c4e69#bad2fb#293a55
--env-color-bg-success-emphasisA solid success fill; paired with fg.on-emphasis.#176f35#7ad197#00441a#98f0b5
--env-color-bg-success-mutedThe translucent success tint of badges and alerts: a light green in light, rather than the success text color, which would lie at the page's own lightness and barely part from it.#6dc38933#3c90562e#00441a14#98f0b51a
--env-color-bg-success-strongA strong teal success fill in both themes; paired with fg.on-strong. Toasts take the neutral strong fill, their tone in the icon.#236d52#236d52#004e37#004e37
--env-color-bg-success-strong-hoverA control on the strong success fill under the pointer. Its white label keeps 4.5:1.#2f775c#2f775c#00432e#00432e
--env-color-bg-success-strong-pressedA control on the strong success fill while pressed. Its white label keeps 4.5:1.#3b8266#3b8266#003a28#003a28
--env-color-bg-success-subtleControls in the success tone without a fill at rest, such as an alert’s dismiss button: transparent, as color.bg.neutral.subtle is.transparenttransparenttransparenttransparent
--env-color-bg-success-subtle-hoverThe state layer of a control without a fill in the success tone, such as a success alert’s dismiss button, under the pointer: the success text color at 14%, in every theme and at high contrast.#176f3524#3c905638#00441a24#a5fdc124
--env-color-bg-success-subtle-pressedThe success state layer while pressed: the success text color at 22%.#176f3538#3c90564d#00441a38#a5fdc138
--env-color-bg-warning-emphasisA solid warning fill; paired with fg.on-emphasis.#8a5504#ebb750#553200#ffd890
--env-color-bg-warning-mutedThe translucent warning tint of badges and alerts: a clean light amber rather than the warning text color, which would turn a light surface tan.#ffd0783d#a06a1833#ffd0783d#ffd8901a
--env-color-bg-warning-subtleControls in the warning tone without a fill at rest, such as an alert’s dismiss button: transparent, as color.bg.neutral.subtle is.transparenttransparenttransparenttransparent
--env-color-bg-warning-subtle-hoverThe stronger warning tint, which fills a warning alert and a soft badge and lies under a control without a fill in the warning tone, such as a warning alert’s dismiss button, under the pointer: a light amber at 36% in light, at either contrast, so a light surface takes a clean amber rather than tan; the warning text color at 17% in dark, and 14% at high contrast.#ffd0785c#a06a1842#ffd0785c#ffe8be24
--env-color-bg-warning-subtle-pressedThe warning state layer while pressed: the light amber at 50% in light, at either contrast; the warning text color at 25% in dark, and 22% at high contrast.#ffd07880#a06a185c#ffd07880#ffe8be38
--env-color-border-accentA decorative edge in the accent tone, around an outlined accent badge: the accent text color at 55%.#8e3caa8c#dab0ec8c#63047d8c#f7e4ff8c
--env-color-border-dangerA decorative edge in the danger tone, around an outlined badge and a message that failed to send: the danger text color at 55%, in every theme and at high contrast.#b72b208c#f8aca68c#7a02008c#ffe4e28c
--env-color-border-danger-emphasisThe border of an invalid field.#b72b20#f8aca6#7a0200#ffe4e2
--env-color-border-danger-emphasis-hoverAn invalid field border, and a destructive outline button's edge, under the pointer: darker, as the active field border steps.#9f0300#e68c84#6b0100#ffedeb
--env-color-border-danger-emphasis-pressedAn invalid field border, and a destructive outline button's edge, while pressed.#7a0200#d66d63#5a0100#fff6f5
--env-color-border-danger-mutedThe faint edge of an error alert: the danger text color at 28%, in every theme and at high contrast.#b72b2047#f8aca647#7a020047#ffe4e247
--env-color-border-danger-strongThe edge of the strong danger fill where it floats. In light the fill is dark on a light page, so its edge is the fill a step darker, about 1.3:1 from it: it reads as the fill’s own edge rather than a light halo, and still sets the fill apart from a surface of its color. High contrast keeps that step, from the darker high-contrast fill, far above 4.5:1 on the page. In dark, where the fill is lighter than the page as every popup is, it is the popup edge, elevation.2.border, and color.border.default at high contrast. A dark edge, unlike the 0.7 alias color.border-strong, which is the light divider color, border.muted.#9f0300#686b70#6b0100#a1a4a9
--env-color-border-defaultThe boundary of a control that has no other edge: outlined fields and buttons, the track of a switch that is off. At least 3:1 on every surface.#808083#898c91#6b6b6e#a1a4a9
--env-color-border-default-hoverA control boundary under the pointer.#757578#95989c#616164#afb1b6
--env-color-border-default-pressedA control boundary while pressed.#6b6b6e#a1a4a9#57575a#bdbfc3
--env-color-border-doneA decorative edge in the done tone, around an outlined badge: the done text color at 55%, in every theme and at high contrast.#4e627e8c#aac1dd8c#2536508c#deecfd8c
--env-color-border-focusFocus rings: at least 3:1 against what they are drawn on.#0366da#9fc1f8#0053b5#b5cffb
--env-color-border-info-strongThe edge of the strong information fill where it floats. In light the fill is dark on a light page, so its edge is the fill a step darker, about 1.3:1 from it: it reads as the fill’s own edge rather than a light halo, and still sets the fill apart from a surface of its color. High contrast keeps that step, from the darker high-contrast fill, far above 4.5:1 on the page. In dark, where the fill is lighter than the page as every popup is, it is the popup edge, elevation.2.border, and color.border.default at high contrast. A dark edge, unlike the 0.7 alias color.border-strong, which is the light divider color, border.muted.#174d90#686b70#003068#a1a4a9
--env-color-border-mediaA neutral inner edge that defines content of any color, such as the color picker’s area: black at 5% in both themes.#0000000d#0000000d#0000000d#0000000d
--env-color-border-mutedThe hairlines between the items of one list, across its full width: table rows, Markdown rules, menu separators and accordion items; and decorative edges that are not a control’s only boundary: quote bars, keyboard keys and color swatches. Regions separate by space and background instead. A floating layer takes its own, clearer edge, elevation.{level}.border.#d1d1d3#5d6166#6b6b6e#a1a4a9
--env-color-border-muted-hoverA decorative outline under the pointer, such as a resize handle or a pager link.#bfbfc1#7d8185#616164#afb1b6
--env-color-border-muted-pressedA decorative outline while pressed.#a4a4a7#95989c#57575a#bdbfc3
--env-color-border-neutralA decorative edge in the neutral tone, around an outlined badge: the muted text color at 55%, in every theme and at high contrast.#6161648c#bdbfc38c#3131348c#e8eaee8c
--env-color-border-neutral-strongThe edge of the strong neutral fill where it floats, on tooltips and toasts. In light the fill is dark on a light page, so its edge is the fill a step darker, about 1.3:1 from it: it reads as the fill’s own edge rather than a light halo, and still sets the fill apart from a surface of its color. High contrast keeps that step, from the darker high-contrast fill, far above 4.5:1 on the page. In dark, where the fill is lighter than the page as every popup is, it is the popup edge, elevation.2.border, and color.border.default at high contrast. A dark edge, unlike the 0.7 alias color.border-strong, which is the light divider color, border.muted.#313134#686b70#313134#a1a4a9
--env-color-border-primaryA decorative edge in the primary tone, around an outlined primary badge: the primary text color at 55%, in every theme and at high contrast.#005cc88c#9fc1f88c#00377c8c#e0ebfd8c
--env-color-border-primary-emphasisThe active border and label of a focused field, and today’s ring in a calendar.#1872e7#9fc1f8#00408f#b5cffb
--env-color-border-primary-emphasis-hoverAn active field border under the pointer.#005cc8#8ab3f5#00377c#cddefc
--env-color-border-primary-emphasis-pressedAn active field border while pressed.#00408f#75a5f2#002f6d#e0ebfd
--env-color-border-primary-mutedThe faint edge of an info alert: the primary text color at 28%, in every theme and at high contrast.#005cc847#9fc1f847#00377c47#e0ebfd47
--env-color-border-successA decorative edge in the success tone, around an outlined badge: the success text color at 55%, in every theme and at high contrast.#176f358c#7ad1978c#00441a8c#a5fdc18c
--env-color-border-success-mutedThe faint edge of a success alert: the success text color at 28%, in every theme and at high contrast.#176f3547#7ad19747#00441a47#a5fdc147
--env-color-border-success-strongThe edge of the strong success fill where it floats. In light the fill is dark on a light page, so its edge is the fill a step darker, about 1.3:1 from it: it reads as the fill’s own edge rather than a light halo, and still sets the fill apart from a surface of its color. High contrast keeps that step, from the darker high-contrast fill, far above 4.5:1 on the page. In dark, where the fill is lighter than the page as every popup is, it is the popup edge, elevation.2.border, and color.border.default at high contrast. A dark edge, unlike the 0.7 alias color.border-strong, which is the light divider color, border.muted.#03593f#686b70#003a28#a1a4a9
--env-color-border-warningA decorative edge in the warning tone, around an outlined badge: the warning text color at 55%, in every theme and at high contrast.#8a55048c#ebb7508c#5532008c#ffe8be8c
--env-color-border-warning-mutedThe faint edge of a warning alert: the warning text color at 28%, in every theme and at high contrast.#8a550447#ebb75047#55320047#ffe8be47
--env-color-fg-accentAccent text and icons: the purple of an accent badge.#83319f#dab0ec#63047d#f7e4ff
--env-color-fg-avatarThe default initials, on the powder fill.#39648d#9fc4dc#0f3b64#d3efff
--env-color-fg-avatar-figureThe default figure, on the powder fill.#39648d#9fc4dc#0f3b64#d3efff
--env-color-fg-avatar-figure-blushThe default figure on the blush fill, the shade of its initials.#924c4f#e6b2b4#682227#ffe4e5
--env-color-fg-avatar-figure-butterThe default figure on the butter fill, the shade of its initials.#7c5b2a#efdca4#523300#fde9b1
--env-color-fg-avatar-figure-oatThe default figure on the oat fill, the shade of its initials.#6e5e51#d8ccbf#46372b#f5e8db
--env-color-fg-avatar-figure-orchidThe default figure on the orchid fill, the shade of its initials.#864f70#deb3ce#5d2648#ffe2f5
--env-color-fg-avatar-figure-periwinkleThe default figure on the periwinkle fill, the shade of its initials.#5d5a96#bcbbe6#38326d#e8e9ff
--env-color-fg-avatar-figure-powderThe default figure on the powder fill, the shade of its initials.#39648d#9fc4dc#0f3b64#d3efff
--env-color-fg-avatar-figure-sageThe default figure on the sage fill, the shade of its initials.#4d6845#bed4b3#26401f#dbf1d0
--env-color-fg-avatar-figure-seafoamThe default figure on the seafoam fill, the shade of its initials.#266b68#97c9c1#004140#c5f4eb
--env-color-fg-avatar-blushThe initials on the blush fill.#924c4f#e6b2b4#682227#ffe4e5
--env-color-fg-avatar-butterThe initials on the butter fill.#7c5b2a#efdca4#523300#fde9b1
--env-color-fg-avatar-oatThe initials on the oat fill.#6e5e51#d8ccbf#46372b#f5e8db
--env-color-fg-avatar-orchidThe initials on the orchid fill.#864f70#deb3ce#5d2648#ffe2f5
--env-color-fg-avatar-periwinkleThe initials on the periwinkle fill.#5d5a96#bcbbe6#38326d#e8e9ff
--env-color-fg-avatar-powderThe initials on the powder fill.#39648d#9fc4dc#0f3b64#d3efff
--env-color-fg-avatar-sageThe initials on the sage fill.#4d6845#bed4b3#26401f#dbf1d0
--env-color-fg-avatar-seafoamThe initials on the seafoam fill.#266b68#97c9c1#004140#c5f4eb
--env-color-fg-controlThe labels of navigation items, secondary buttons and Select options, the values of meters and sliders, and the thumb of a switch that is off.#434346#e8eaee#29292c#eff1f5
--env-color-fg-dangerDanger text and icons, and field errors.#ac190f#f8aca6#7a0200#ffe4e2
--env-color-fg-danger-on-strongA danger toast’s icon, on the neutral strong fill of toasts in both themes, at 3:1 on its tinted disc.#f8aca6#f8aca6#ffd3cf#ffd3cf
--env-color-fg-danger-hoverA danger text button under the pointer: a grade darker in light and in dark, as a link is.#9f0300#ee9c95#6b0100#ffedeb
--env-color-fg-danger-pressedA danger text button while pressed: a grade past its hover.#7a0200#e68c84#5a0100#fff6f5
--env-color-fg-defaultBody text and the labels of rows, fields and choice controls.#1f1f22#e8eaee#131315#f6f8fc
--env-color-fg-disabledThe label, value and icon of a control that is disabled: quieter than muted text yet still readable, so a disabled control reads as unavailable rather than missing; its fill or outline quiets more. Disabled controls are exempt from the contrast minimums.#808083#898c91#57575a#a1a4a9
--env-color-fg-doneDone text and icons.#455874#aac1dd#253650#deecfd
--env-color-fg-info-on-strongAn information toast’s icon, on the neutral strong fill of toasts in both themes, at 3:1 on its tinted disc.#9fc1f8#9fc1f8#cddefc#cddefc
--env-color-fg-mutedSupporting text, icons, field labels, descriptions and placeholders, row details, unchecked checkbox rings: every former synonym (muted, quiet, icon, field label, hint, placeholder, row detail).#4d4d50#bdbfc3#313134#e8eaee
--env-color-fg-muted-hoverMuted text that responds to the pointer, such as a Disclosure summary, gains contrast.#434346#ccced2#29292c#eff1f5
--env-color-fg-muted-pressedMuted text while pressed.#39393d#dbdde1#1f1f22#f6f8fc
--env-color-fg-on-emphasisText and icons on the emphasis fills: white in light, dark in dark.#ffffff#1e1f21#ffffff#121315
--env-color-fg-on-selectedText and indicators on bg.selected and its states.#0053b5#b5cffb#002f6d#cddefc
--env-color-fg-on-strongWhite in both themes, on the strong fills: labels at 4.5:1 on the danger, accent, neutral, success and information fills, at rest, hovered and pressed; marks at 3:1 on the primary strong fill.#ffffff#ffffff#ffffff#ffffff
--env-color-fg-primaryPrimary text and icons: the primary tone, outlined button labels, the selected tab, a field's focused label, the icon of a pager link.#0053b5#9fc1f8#00377c#e0ebfd
--env-color-fg-rating-starThe filled stars and the filled half of a half star: a clear gold.#dea846#ebb750#553200#ffe8be
--env-color-fg-successSuccess text and icons.#02652b#7ad197#00441a#a5fdc1
--env-color-fg-success-on-strongA success toast’s icon, on the neutral strong fill of toasts in both themes, at 3:1 on its tinted disc.#7ad197#7ad197#98f0b5#98f0b5
--env-color-fg-warningWarning text and icons.#7e4b00#ebb750#553200#ffe8be

Elevation

TokenLightDarkLight high contrastDark high contrast
--env-elevation-0-borderThe edge of a level-0 layer, which lies in the page: none.transparenttransparenttransparenttransparent
--env-elevation-1-borderThe edge of a level-1 layer, the same as every level's: where a floating layer is solid, the edge and its fill set it apart.#b1b1b4#686b70#6b6b6e#a1a4a9
--env-elevation-2-borderThe edge of menus, Select and Combobox lists, popovers, hover cards, pickers, rich text suggestions, docked panels and drag images: about 2:1 against a popup's own fill and the page, and at least 1.6:1 against every surface it floats over.#b1b1b4#686b70#6b6b6e#a1a4a9
--env-elevation-3-borderThe edge of dialogs, sheets and the command palette where they are solid: in light the default border's gray, a step stronger than level 2's, as the light backdrop dims the page to about level 2's gray; in dark the same as level 2's. A dialog and the palette otherwise part by their fill and the popups' soft shadow, a sheet by its fill.#808083#686b70#131315#a1a4a9

Typography

TokenComfortableCompact
--env-font-familyenvUI's typeface, Geist, which the package ships, falling back to the system's sans-serif.'envUI Geist', sans-serif'envUI Geist', sans-serif
--env-font-size-bodyRunning text: Text's body variant and a type role's default, 15 px in the comfortable scale.0.9375rem0.8125rem
--env-font-size-body-smSupporting text: Text's body-sm and caption variants, 14 px in the comfortable scale.0.875rem0.75rem
--env-font-size-captionCaptions, a menu's group labels and other small secondary text.0.75rem0.6875rem
--env-font-size-headlineA page's heading: Text's headline variant, 22 px in the comfortable scale: a clear step above a section's title.1.375rem1.25rem
--env-font-size-labelThe label of a control, and the text of menu, tree and option rows.0.875rem0.8125rem
--env-font-size-label-smA label inside a field at the control height, such as a combobox chip's.0.8125rem0.75rem
--env-font-size-titleA section's heading: Text's title variant, 18 px in the comfortable scale: a step above body text in size as well as weight.1.125rem1rem
--env-font-weight-bodyThe weight of running text, which the body type roles take: regular.400400
--env-font-weight-mediumMedium, 500: headings, labels that lead and emphasis in a row.500500
--env-font-weight-regularRegular, 400: running text and most labels.400400
--env-font-weight-semiboldSemibold, 600: the strongest emphasis in a small space, such as today in a calendar.600600
--env-type-bodyRunning text: Text's body variant, regular.font-family: 'envUI Geist', sans-serif; font-size: 0.9375rem; font-weight: 400; letter-spacing: 0rem; line-height: 1.4emfont-family: 'envUI Geist', sans-serif; font-size: 0.9375rem; font-weight: 400; letter-spacing: 0rem; line-height: 1.4em
--env-type-body-smSupporting text: Text's body-sm and caption variants, regular.font-family: 'envUI Geist', sans-serif; font-size: 0.875rem; font-weight: 400; letter-spacing: 0rem; line-height: 1.4emfont-family: 'envUI Geist', sans-serif; font-size: 0.875rem; font-weight: 400; letter-spacing: 0rem; line-height: 1.4em
--env-type-displayDisplay text, Text's display variant: medium, 1.75 to 2.75 rem with the window, set tight.500 clamp(1.75rem, 1.25rem + 2.5vw, 2.75rem) / 1.1 'envUI Geist', sans-serif500 clamp(1.75rem, 1.25rem + 2.5vw, 2.75rem) / 1.1 'envUI Geist', sans-serif
--env-type-headlineA page's heading: Text's headline variant, medium, its lines tighter than body text's and its letters a touch closer, as larger type wants.font-family: 'envUI Geist', sans-serif; font-size: 1.375rem; font-weight: 500; letter-spacing: -0.0125rem; line-height: 1.3emfont-family: 'envUI Geist', sans-serif; font-size: 1.375rem; font-weight: 500; letter-spacing: -0.0125rem; line-height: 1.3em
--env-type-titleA section's heading: Text's title variant, medium, its lines a little tighter than body text's and its letters a touch closer.font-family: 'envUI Geist', sans-serif; font-size: 1.125rem; font-weight: 500; letter-spacing: -0.00625rem; line-height: 1.35emfont-family: 'envUI Geist', sans-serif; font-size: 1.125rem; font-weight: 500; letter-spacing: -0.00625rem; line-height: 1.35em

Spacing

TokenComfortableCompact
--env-space-1Spacing step 1: 4 px, the same in both scales.0.25rem0.25rem
--env-space-2Spacing step 2: 8 px in the comfortable scale, 6 px in compact.0.5rem0.375rem
--env-space-3Spacing step 3: 12 px in the comfortable scale, 10 px in compact.0.75rem0.625rem
--env-space-4Spacing step 4: 16 px in the comfortable scale, 12 px in compact.1rem0.75rem
--env-space-5Spacing step 5: 24 px in the comfortable scale, 20 px in compact.1.5rem1.25rem
--env-space-6Spacing step 6: 32 px in the comfortable scale, 26 px in compact.2rem1.625rem
--env-space-7Spacing step 7: 40 px in the comfortable scale, 32 px in compact.2.5rem2rem
--env-space-8Spacing step 8: 48 px in the comfortable scale, 38 px in compact.3rem2.375rem
--env-space-9Spacing step 9: 64 px in the comfortable scale, 52 px in compact.4rem3.25rem

Corners

TokenComfortableCompact
--env-radius-fullThe full corner of a pill, such as a button, a field, a badge or a navigation item: half the tallest single-line control, the large control height or the touch height, whichever is more, so anything taller keeps the same corners and becomes a rounded rectangle.calc(max(3rem, 2.75rem) / 2)calc(max(3rem, 2.75rem) / 2)
--env-radius-lgMedium corners: fields, tables, alerts and other blocks.1rem0.75rem
--env-radius-mdCorners between sm and lg, such as a navigation item's indicator.0.75rem0.625rem
--env-radius-noneSquare corners.0rem0rem
--env-radius-row-innerThe corners where connected rows meet: small, so the rows read as one block.0.5rem0.5rem
--env-radius-row-outerThe outer corners of connected rows, the first row's top and the last row's bottom: a surface's.1.75rem1.75rem
--env-radius-row-singleA row that stands alone, with the outer corners on every side.1.75rem1.75rem
--env-radius-smSmall corners: buttons in a group, chips, menu rows, list rows inside a surface.0.5rem0.375rem
--env-radius-surfaceThe rounded corners of surfaces, dialogs and popups.1.75rem1.75rem
--env-radius-xlThe largest corners of the scale.1.75rem1.375rem
--env-radius-xsThe smallest corners, such as a checkbox's box and a color swatch.0.25rem0.1875rem

Sizes

TokenComfortableCompact
--env-control-border-widthThe hairline border of controls and fields, which stays 1 px in both scales.1px1px
--env-control-font-sizeThe text of a control and of a field's value: the body size, and 1 rem under a coarse pointer, where smaller text makes touch browsers zoom into a focused field.0.9375rem0.9375rem
--env-control-gapThe space between a control's icon and its label.0.4375rem0.375rem
--env-control-heightThe height a control takes when it sets no size: md, unless a container sets it to another control height for what it holds, as a table cell does with sm.2.5rem2.5rem
--env-control-height-lgThe large control height, for a control of size lg, such as a prominent call to action.3rem2.75rem
--env-control-height-mdThe medium control height, every control's default size.2.5rem2.25rem
--env-control-height-smThe small control height: a control of size sm, the actions in a table cell, a title bar or a panel header.2rem1.75rem
--env-control-height-touchThe height every control grows to under a coarse pointer, whatever the scale, and the width of a button: its own box is its hit area. Rows grow to it too.2.75rem2.75rem
--env-control-icon-sizeThe icon in a control. 1 rem in both scales: icons never get smaller than this.1rem1rem
--env-control-target-minThe smallest a pressable target may be in either dimension, in both scales: WCAG 2.2's 24 px minimum. A control smaller than its size, such as a segment inside a small rail or an action inside a small field, keeps at least this.1.5rem1.5rem
--env-icon-size-lgA leading icon in a large row, such as a list item's.1.25rem1.125rem
--env-icon-size-mdAn icon beside body text, such as in a tree or a select trigger.1.125rem1rem
--env-icon-size-smA small icon, such as inside a control: the control's icon size, 1 rem.1rem1rem
--env-picture-size-lgA picture beside a name with a second line, such as an account header.3rem3rem
--env-picture-size-mdA picture beside a name in a list, a comment or a toolbar: an avatar's default size.2rem2rem
--env-picture-size-smA small picture, beside compact text such as a combobox option or the application's name in a top bar.1.5rem1.5rem
--env-picture-size-xlThe largest picture, such as on a profile page or a sign-in screen.5.5rem5.5rem
--env-row-content-heightThe line a tree row reserves for its label and icon, 20 px in both scales; the row's density adds its block padding around it.1.25rem1.25rem
--env-row-heightThe day of a calendar, and the base of a popup's row: a menu's, a select's or a combobox's rows are a quarter rem taller.2.25rem1.75rem
--env-row-padding-block-lgRow density lg.0.75rem0.375rem
--env-row-padding-block-mdRow density md: the default of tables and lists.0.5rem0.25rem
--env-row-padding-block-smRow density sm: a tree's default.0.25rem0.125rem
--env-row-padding-block-xsRow density xs: the block padding of each row of a data component, such as a table, a tree or a list.0.125rem0rem
--env-row-padding-inlineText in rows keeps clear of the large outer corners, whether a row stands alone or is connected.1.5rem1.25rem
--env-title-bar-heightA window title bar drawn by the application, which holds controls of size sm.2.5rem2rem
--env-tree-row-padding-block-lgA tree row's block padding at density lg: the row density's in the comfortable scale.0.75rem0.4375rem
--env-tree-row-padding-block-mdA tree row's block padding at density md: the row density's in the comfortable scale.0.5rem0.3125rem
--env-tree-row-padding-block-smA tree row's block padding at density sm, its default, so that a row is as tall as a menu row in either scale: the row density's in the comfortable scale.0.25rem0.25rem

Motion

TokenComfortableCompact
--env-motion-duration-fastA small change, such as a state layer, a color under the pointer or a tooltip: 120 ms.0.12s0.12s
--env-motion-duration-mediumA part that opens, moves or fades in, such as a popup or a field's floating label: 160 ms.0.16s0.16s
--env-motion-duration-slowA larger movement, such as a sheet sliding in or a dialog's backdrop: 240 ms.0.24s0.24s
--env-motion-easeThe standard easing of a change on screen, which speeds up and then settles.cubic-bezier(0.45, 0, 0.2, 1)cubic-bezier(0.45, 0, 0.2, 1)
--env-motion-ease-enterElements entering, their fade included, and feedback under the pointer start at once and decelerate into place.cubic-bezier(0.05, 0.7, 0.1, 1)cubic-bezier(0.05, 0.7, 0.1, 1)
--env-motion-ease-exitLeaving elements accelerate away.cubic-bezier(0.4, 0, 1, 1)cubic-bezier(0.4, 0, 1, 1)

States

TokenComfortableCompact
--env-state-disabled-opacityThe opacity of a disabled control, which keeps its colors: 48%.0.480.48
--env-state-focus-opacityThe state layer of keyboard focus, under the focus ring: 10% of the content color.0.10.1
--env-state-hover-opacityThe state layer under the pointer: 8% of the content color over the container.0.080.08
--env-state-pressed-opacityThe state layer while pressed: 10% of the content color over the container.0.10.1

Other tokens

TokenComfortableCompact
--env-badge-count-heightThe height, and the least width, of a counter badge and a diff stat.1.25rem1rem
--env-line-height-bodyThe line height of a theme boundary's text, which an application may set: 1.4 times the font size.1.41.4
--env-top-bar-heightTopBar's height: a single row that holds controls of the control height with space around them.3.25rem2.625rem
--env-viewport-gutterThe least space between the window's edge and a dialog, the command palette or rich text suggestions: 0.75 to 1 rem, with the window.clamp(0.75rem, 2vw, 1rem)clamp(0.75rem, 2vw, 1rem)
--env-window-class-expanded52.5 rem: where expanded starts, such as a tablet held sideways.52.5rem52.5rem
--env-window-class-large75 rem: where large starts, such as a desktop window.75rem75rem
--env-window-class-medium37.5 rem: where medium starts, such as a tablet held upright or a narrow desktop window; narrower is compact, such as a phone.37.5rem37.5rem
--env-z-backdropThe backdrop behind a modal layer, which covers the page and the frame.9090
--env-z-baseThe flow of a page or a component; a part drawn behind its siblings takes calc(var(--env-z-base) - 1).00
--env-z-modalModal layers over their backdrop: dialogs, sheets and the command palette.100100
--env-z-popupPopups anchored to a control, also inside a modal layer: menus, popovers, hover cards, the lists of Select and Combobox, and suggestions.110110
--env-z-raisedA part raised over its siblings inside a component or a region: a sticky table header, a resize handle, the hovered avatar of a group.11
--env-z-stickySticky parts that content scrolls under: a sticky TopBar or PageHeader.2020
--env-z-supporting-paneA supporting pane that opens over its main pane as a sheet, and the backdrop behind it, above the sticky parts.3030
--env-z-toastNotifications, above the popups and modal layers they report on.120120
--env-z-tooltipTooltips, above everything they can describe.130130