CSS Tokens
Vesper is built on top of a set of design tokens corresponding to color, spacing, radius, leading, tracking, shadow, stroke, and background. These tokens are exposed in your app as CSS variables when you import the component styles, and can also be used in Tailwind utilities.
Colors
Color tokens are split into primitive and semantic tokens.
Primitive tokens are the raw palette values from our design system.
Semantic tokens are aliases of primitive tokens intended to be more ergonomic for applied use (these will be familiar to you if you've used a library like Tailwind).
For example, the semantic token --vesper-background-primary aliases the primitive --vesper-stone-0 color token value.
We prefer using semantic tokens wherever possible, since they automatically resolve to the correct primitive for the active theme.
Primitive color tokens
| Preview | CSS variable | Light mode value | Dark mode value |
|---|---|---|---|
--vesper-static-black | #071614 | #071614 | |
--vesper-static-white | #f1f8f8 | #f1f8f8 | |
--vesper-transparent | transparent | transparent | |
--vesper-stone-0 | #f8fcfb | #050f0e | |
--vesper-stone-50 | #eef6f6 | #0b1817 | |
--vesper-stone-100 | #e8f2f1 | #13201e | |
--vesper-stone-200 | #dfecea | #1b2826 | |
--vesper-stone-300 | #d0e1e0 | #233431 | |
--vesper-stone-400 | #bdd1cf | #2d4340 | |
--vesper-stone-500 | #a2b9b7 | #395651 | |
--vesper-stone-600 | #718e8c | #5e7d78 | |
--vesper-stone-700 | #51706d | #7d9b97 | |
--vesper-stone-800 | #344b49 | #b3ccc8 | |
--vesper-stone-900 | #050f0e | #e7f0ee | |
--vesper-teal-0 | #f7fbfd | #05181e | |
--vesper-teal-50 | #e7f7fd | #0a2229 | |
--vesper-teal-100 | #d3eff8 | #0e303a | |
--vesper-teal-200 | #aae5f8 | #073e4f | |
--vesper-teal-300 | #8ad2ea | #0d4659 | |
--vesper-teal-400 | #5cbcdb | #0f546b | |
--vesper-teal-500 | #32abd2 | #136b86 | |
--vesper-teal-600 | #1b8eb1 | #1a8fb2 | |
--vesper-teal-700 | #176782 | #46afd2 | |
--vesper-teal-800 | #144a5d | #7dcde8 | |
--vesper-teal-900 | #0c2f3b | #a3e0f5 | |
--vesper-purple-0 | #f8f7fd | #0f0e1b | |
--vesper-purple-50 | #efedfd | #141127 | |
--vesper-purple-100 | #dedafb | #1d1938 | |
--vesper-purple-200 | #c9c2fa | #27214a | |
--vesper-purple-300 | #a89eea | #2f285d | |
--vesper-purple-400 | #7e71d0 | #382f74 | |
--vesper-purple-500 | #6458b6 | #5145a1 | |
--vesper-purple-600 | #4d429a | #7e71d0 | |
--vesper-purple-700 | #342b6e | #9c91e3 | |
--vesper-purple-800 | #272150 | #b4a8ff | |
--vesper-purple-900 | #1d1b2d | #cdc6fa | |
--vesper-mint-0 | #f1fdfb | #041f19 | |
--vesper-mint-50 | #e3fcf9 | #073128 | |
--vesper-mint-100 | #d2f4ef | #0b4137 | |
--vesper-mint-200 | #b6ede2 | #0b5144 | |
--vesper-mint-300 | #7cdecc | #116959 | |
--vesper-mint-400 | #40bfa8 | #15937c | |
--vesper-mint-500 | #29a38d | #1bbb9e | |
--vesper-mint-600 | #227767 | #39c6ac | |
--vesper-mint-700 | #13584b | #4ce5c9 | |
--vesper-mint-800 | #0f3d35 | #82edd9 | |
--vesper-mint-900 | #112c26 | #caf7f1 | |
--vesper-pink-0 | #fdf7fb | #1f0a17 | |
--vesper-pink-50 | #fdedf7 | #2e0f22 | |
--vesper-pink-100 | #fcd9ef | #3d152e | |
--vesper-pink-200 | #ffc2e8 | #491d38 | |
--vesper-pink-300 | #f17ec5 | #6b2450 | |
--vesper-pink-400 | #e557af | #91306c | |
--vesper-pink-500 | #be378a | #be378a | |
--vesper-pink-600 | #91306c | #e34faa | |
--vesper-pink-700 | #6b2450 | #f17ec5 | |
--vesper-pink-800 | #441d35 | #ffc2e8 | |
--vesper-pink-900 | #2e0f22 | #fde2f3 | |
--vesper-yellow-0 | #fff7e5 | #211908 | |
--vesper-yellow-50 | #fff2d6 | #31260c | |
--vesper-yellow-100 | #ffeabd | #3f3112 | |
--vesper-yellow-200 | #ffe0a3 | #534018 | |
--vesper-yellow-300 | #ffca61 | #7a5c1a | |
--vesper-yellow-400 | #ffb71b | #9c7217 | |
--vesper-yellow-500 | #d99a12 | #d09311 | |
--vesper-yellow-600 | #986f16 | #ffb71b | |
--vesper-yellow-700 | #6d5217 | #ffc757 | |
--vesper-yellow-800 | #473715 | #ffd88a | |
--vesper-yellow-900 | #2e2614 | #ffeecc | |
--vesper-green-0 | #f1fdf8 | #041f15 | |
--vesper-green-50 | #e3fcf4 | #073120 | |
--vesper-green-100 | #d2f4e9 | #0b412e | |
--vesper-green-200 | #b1ecd6 | #0b5137 | |
--vesper-green-300 | #78ddb8 | #106043 | |
--vesper-green-400 | #40bf90 | #128159 | |
--vesper-green-500 | #29a376 | #19ae77 | |
--vesper-green-600 | #227758 | #38c28f | |
--vesper-green-700 | #13583f | #4ce5ad | |
--vesper-green-800 | #0f3d2c | #82edc6 | |
--vesper-green-900 | #112c21 | #caf7e9 | |
--vesper-red-0 | #feebe7 | #1d0f0c | |
--vesper-red-50 | #fcdfd9 | #2b130d | |
--vesper-red-100 | #fccac0 | #3d170f | |
--vesper-red-200 | #f99a86 | #5c180a | |
--vesper-red-300 | #f56447 | #85230f | |
--vesper-red-400 | #ef3f1a | #af290e | |
--vesper-red-500 | #cb2c0b | #cb2c0b | |
--vesper-red-600 | #9b2208 | #f04b28 | |
--vesper-red-700 | #6e1d0c | #f37358 | |
--vesper-red-800 | #531609 | #f99b86 | |
--vesper-red-900 | #2f140e | #fac6b7 | |
--vesper-amber-0 | #fff4e5 | #211608 | |
--vesper-amber-50 | #ffedd6 | #31210c | |
--vesper-amber-100 | #ffe4c2 | #432b0e | |
--vesper-amber-200 | #ffd4a3 | #523614 | |
--vesper-amber-300 | #ffba6b | #8a530f | |
--vesper-amber-400 | #ffa033 | #bb690c | |
--vesper-amber-500 | #ed881d | #ed881d | |
--vesper-amber-600 | #a8610b | #ffa333 | |
--vesper-amber-700 | #8d5107 | #ffb35c | |
--vesper-amber-800 | #523614 | #ffcf99 | |
--vesper-amber-900 | #35230d | #ffe7cc | |
--vesper-sky-0 | #f5fbfe | #09101b | |
--vesper-sky-50 | #e5f5ff | #0f1b2d | |
--vesper-sky-100 | #d0e9fb | #10243e | |
--vesper-sky-200 | #acd7f6 | #092e53 | |
--vesper-sky-300 | #7ebeed | #0f4d86 | |
--vesper-sky-400 | #55aae7 | #135ea7 | |
--vesper-sky-500 | #2375c7 | #1671c9 | |
--vesper-sky-600 | #1059a2 | #0091ff | |
--vesper-sky-700 | #134272 | #33a3ff | |
--vesper-sky-800 | #113355 | #70b8ff | |
--vesper-sky-900 | #122130 | #c2e0ff | |
--vesper-alpha-stone-0 | rgba(28, 161, 157, 0.023) | rgba(33, 60, 61, 0.03) | |
--vesper-alpha-stone-50 | rgba(14, 129, 115, 0.043) | rgba(154, 246, 244, 0.035) | |
--vesper-alpha-stone-100 | rgba(19, 124, 99, 0.074) | rgba(184, 244, 243, 0.075) | |
--vesper-alpha-stone-200 | rgba(38, 126, 112, 0.125) | rgba(204, 245, 241, 0.11) | |
--vesper-alpha-stone-300 | rgba(15, 97, 87, 0.169) | rgba(184, 245, 233, 0.161) | |
--vesper-alpha-stone-400 | rgba(8, 78, 75, 0.255) | rgba(168, 225, 217, 0.247) | |
--vesper-alpha-stone-500 | rgba(3, 58, 56, 0.345) | rgba(144, 213, 203, 0.357) | |
--vesper-alpha-stone-600 | rgba(7, 60, 57, 0.572) | rgba(195, 255, 247, 0.461) | |
--vesper-alpha-stone-700 | rgba(17, 59, 55, 0.729) | rgba(207, 252, 246, 0.591) | |
--vesper-alpha-stone-800 | rgba(14, 42, 39, 0.839) | rgba(212, 242, 237, 0.834) | |
--vesper-alpha-stone-900 | rgba(0, 15, 15, 0.973) | rgba(245, 255, 253, 0.937) | |
--vesper-alpha-contrast-0 | transparent | transparent | |
--vesper-alpha-contrast-50 | rgba(7, 22, 20, 0.05) | rgba(241, 248, 248, 0.05) | |
--vesper-alpha-contrast-100 | rgba(7, 22, 20, 0.1) | rgba(241, 248, 248, 0.1) | |
--vesper-alpha-contrast-200 | rgba(7, 22, 20, 0.2) | rgba(241, 248, 248, 0.2) | |
--vesper-alpha-contrast-300 | rgba(7, 22, 20, 0.3) | rgba(241, 248, 248, 0.3) | |
--vesper-alpha-contrast-400 | rgba(7, 22, 20, 0.4) | rgba(241, 248, 248, 0.4) | |
--vesper-alpha-contrast-500 | rgba(7, 22, 20, 0.5) | rgba(241, 248, 248, 0.5) | |
--vesper-alpha-contrast-600 | rgba(7, 22, 20, 0.6) | rgba(241, 248, 248, 0.6) | |
--vesper-alpha-contrast-700 | rgba(7, 22, 20, 0.7) | rgba(241, 248, 248, 0.7) | |
--vesper-alpha-contrast-800 | rgba(7, 22, 20, 0.8) | rgba(241, 248, 248, 0.8) | |
--vesper-alpha-contrast-900 | rgba(7, 22, 20, 0.9) | rgba(241, 248, 248, 0.9) | |
--vesper-alpha-inverse-0 | transparent | transparent | |
--vesper-alpha-inverse-50 | rgba(241, 248, 248, 0.05) | rgba(7, 22, 20, 0.05) | |
--vesper-alpha-inverse-100 | rgba(241, 248, 248, 0.1) | rgba(7, 22, 20, 0.1) | |
--vesper-alpha-inverse-200 | rgba(241, 248, 248, 0.2) | rgba(7, 22, 20, 0.2) | |
--vesper-alpha-inverse-300 | rgba(241, 248, 248, 0.3) | rgba(7, 22, 20, 0.3) | |
--vesper-alpha-inverse-400 | rgba(241, 248, 248, 0.4) | rgba(7, 22, 20, 0.4) | |
--vesper-alpha-inverse-500 | rgba(241, 248, 248, 0.5) | rgba(7, 22, 20, 0.5) | |
--vesper-alpha-inverse-600 | rgba(241, 248, 248, 0.6) | rgba(7, 22, 20, 0.6) | |
--vesper-alpha-inverse-700 | rgba(241, 248, 248, 0.7) | rgba(7, 22, 20, 0.7) | |
--vesper-alpha-inverse-800 | rgba(241, 248, 248, 0.8) | rgba(7, 22, 20, 0.8) | |
--vesper-alpha-inverse-900 | rgba(241, 248, 248, 0.9) | rgba(7, 22, 20, 0.9) | |
--vesper-alpha-black-0 | transparent | transparent | |
--vesper-alpha-black-50 | rgba(7, 22, 20, 0.05) | rgba(7, 22, 20, 0.05) | |
--vesper-alpha-black-100 | rgba(7, 22, 20, 0.1) | rgba(7, 22, 20, 0.1) | |
--vesper-alpha-black-200 | rgba(7, 22, 20, 0.2) | rgba(7, 22, 20, 0.2) | |
--vesper-alpha-black-300 | rgba(7, 22, 20, 0.3) | rgba(7, 22, 20, 0.3) | |
--vesper-alpha-black-400 | rgba(7, 22, 20, 0.4) | rgba(7, 22, 20, 0.4) | |
--vesper-alpha-black-500 | rgba(7, 22, 20, 0.5) | rgba(7, 22, 20, 0.5) | |
--vesper-alpha-black-600 | rgba(7, 22, 20, 0.6) | rgba(7, 22, 20, 0.6) | |
--vesper-alpha-black-700 | rgba(7, 22, 20, 0.7) | rgba(7, 22, 20, 0.7) | |
--vesper-alpha-black-800 | rgba(7, 22, 20, 0.8) | rgba(7, 22, 20, 0.8) | |
--vesper-alpha-black-900 | rgba(7, 22, 20, 0.9) | rgba(7, 22, 20, 0.9) | |
--vesper-alpha-white-0 | transparent | transparent | |
--vesper-alpha-white-50 | rgba(241, 248, 248, 0.05) | rgba(241, 248, 248, 0.05) | |
--vesper-alpha-white-100 | rgba(241, 248, 248, 0.1) | rgba(241, 248, 248, 0.1) | |
--vesper-alpha-white-200 | rgba(241, 248, 248, 0.2) | rgba(241, 248, 248, 0.2) | |
--vesper-alpha-white-300 | rgba(241, 248, 248, 0.3) | rgba(241, 248, 248, 0.3) | |
--vesper-alpha-white-400 | rgba(241, 248, 248, 0.4) | rgba(241, 248, 248, 0.4) | |
--vesper-alpha-white-500 | rgba(241, 248, 248, 0.5) | rgba(241, 248, 248, 0.5) | |
--vesper-alpha-white-600 | rgba(241, 248, 248, 0.6) | rgba(241, 248, 248, 0.6) | |
--vesper-alpha-white-700 | rgba(241, 248, 248, 0.7) | rgba(241, 248, 248, 0.7) | |
--vesper-alpha-white-800 | rgba(241, 248, 248, 0.8) | rgba(241, 248, 248, 0.8) | |
--vesper-alpha-white-900 | rgba(241, 248, 248, 0.9) | rgba(241, 248, 248, 0.9) |
Semantic color tokens
| CSS variable | Alias |
|---|---|
--vesper-background-primary | --vesper-stone-0 |
--vesper-background-secondary | --vesper-stone-50 |
--vesper-background-tertiary | --vesper-stone-100 |
--vesper-background-disabled | --vesper-alpha-stone-50 |
--vesper-background-inverse-primary | --vesper-alpha-stone-900 |
--vesper-background-inverse-secondary | --vesper-alpha-stone-800 |
--vesper-background-inverse-disabled | --vesper-alpha-inverse-50 |
--vesper-background-accent-subtle | --vesper-teal-50 |
--vesper-background-accent-base | --vesper-teal-400 |
--vesper-background-success-subtle | --vesper-green-50 |
--vesper-background-success-base | --vesper-green-600 |
--vesper-background-warning-subtle | --vesper-amber-0 |
--vesper-background-warning-base | --vesper-amber-600 |
--vesper-background-error-subtle | --vesper-red-0 |
--vesper-background-error-base | --vesper-red-500 |
--vesper-background-info-subtle | --vesper-sky-50 |
--vesper-background-info-base | --vesper-sky-600 |
--vesper-background-static-white | --vesper-static-white |
--vesper-background-static-black | --vesper-static-black |
--vesper-background-brand-purple-subtle | --vesper-purple-100 |
--vesper-background-brand-purple-base | --vesper-purple-600 |
--vesper-background-brand-mint-subtle | --vesper-mint-50 |
--vesper-background-brand-mint-base | --vesper-mint-600 |
--vesper-background-brand-pink-subtle | --vesper-pink-50 |
--vesper-background-brand-pink-base | --vesper-pink-600 |
--vesper-background-brand-yellow-subtle | --vesper-yellow-50 |
--vesper-background-brand-yellow-base | --vesper-yellow-400 |
--vesper-text-primary | --vesper-stone-900 |
--vesper-text-secondary | --vesper-stone-800 |
--vesper-text-tertiary | --vesper-stone-700 |
--vesper-text-disabled | --vesper-alpha-stone-500 |
--vesper-text-inverse-primary | --vesper-stone-0 |
--vesper-text-inverse-secondary | --vesper-stone-300 |
--vesper-text-inverse-tertiary | --vesper-stone-500 |
--vesper-text-alpha-disabled | --vesper-alpha-inverse-300 |
--vesper-text-on-color | --vesper-static-white |
--vesper-text-accent | --vesper-teal-700 |
--vesper-text-success | --vesper-mint-600 |
--vesper-text-warning | --vesper-amber-700 |
--vesper-text-error | --vesper-red-600 |
--vesper-text-info | --vesper-sky-600 |
--vesper-text-static-black | --vesper-static-black |
--vesper-text-static-white | --vesper-static-white |
--vesper-text-link-default | --vesper-teal-700 |
--vesper-text-link-hover | --vesper-teal-600 |
--vesper-text-link-visited | --vesper-teal-800 |
--vesper-text-link-disabled | --vesper-alpha-stone-400 |
--vesper-text-brand-purple | --vesper-purple-700 |
--vesper-text-brand-mint | --vesper-mint-600 |
--vesper-text-brand-pink | --vesper-pink-600 |
--vesper-text-brand-yellow | --vesper-yellow-600 |
--vesper-icon-primary | --vesper-stone-900 |
--vesper-icon-secondary | --vesper-stone-800 |
--vesper-icon-tertiary | --vesper-stone-700 |
--vesper-icon-disabled | --vesper-alpha-stone-500 |
--vesper-icon-inverse-primary | --vesper-stone-0 |
--vesper-icon-inverse-secondary | --vesper-stone-300 |
--vesper-icon-inverse-tertiary | --vesper-stone-500 |
--vesper-icon-inverse-disabled | --vesper-alpha-inverse-300 |
--vesper-icon-on-color | --vesper-static-white |
--vesper-icon-accent | --vesper-teal-700 |
--vesper-icon-success | --vesper-mint-600 |
--vesper-icon-warning | --vesper-amber-700 |
--vesper-icon-error | --vesper-red-600 |
--vesper-icon-info | --vesper-sky-600 |
--vesper-icon-static-black | --vesper-static-black |
--vesper-icon-static-white | --vesper-static-white |
--vesper-icon-brand-purple | --vesper-purple-700 |
--vesper-icon-brand-mint | --vesper-mint-600 |
--vesper-icon-brand-pink | --vesper-pink-600 |
--vesper-icon-brand-yellow | --vesper-yellow-600 |
--vesper-border-primary | --vesper-stone-400 |
--vesper-border-secondary | --vesper-stone-300 |
--vesper-border-tertiary | --vesper-stone-200 |
--vesper-border-strong | --vesper-stone-900 |
--vesper-border-disabled | --vesper-alpha-stone-200 |
--vesper-border-focus | --vesper-teal-200 |
--vesper-border-inverse-primary | --vesper-stone-400 |
--vesper-border-inverse-secondary | --vesper-stone-600 |
--vesper-border-inverse-strong | --vesper-stone-0 |
--vesper-border-inverse-disabled | --vesper-alpha-inverse-100 |
--vesper-border-inverse-focus | --vesper-teal-500 |
--vesper-border-static-white | --vesper-static-white |
--vesper-border-static-black | --vesper-static-black |
--vesper-border-accent-subtle | --vesper-teal-200 |
--vesper-border-accent-base | --vesper-teal-600 |
--vesper-border-success-subtle | --vesper-green-200 |
--vesper-border-success-base | --vesper-green-500 |
--vesper-border-warning-subtle | --vesper-amber-200 |
--vesper-border-warning-base | --vesper-amber-500 |
--vesper-border-error-subtle | --vesper-red-200 |
--vesper-border-error-base | --vesper-red-500 |
--vesper-border-info-subtle | --vesper-sky-200 |
--vesper-border-info-base | --vesper-sky-500 |
--vesper-border-brand-purple-subtle | --vesper-purple-200 |
--vesper-border-brand-purple-base | --vesper-purple-500 |
--vesper-border-brand-mint-subtle | --vesper-mint-200 |
--vesper-border-brand-mint-base | --vesper-mint-500 |
--vesper-border-brand-pink-subtle | --vesper-pink-200 |
--vesper-border-brand-pink-base | --vesper-pink-500 |
--vesper-border-brand-yellow-subtle | --vesper-yellow-200 |
--vesper-border-brand-yellow-base | --vesper-yellow-500 |
--vesper-scrim-contrast-subtle | --vesper-alpha-black-300 |
--vesper-scrim-contrast-base | --vesper-alpha-black-600 |
--vesper-scrim-inverse-subtle | --vesper-alpha-white-300 |
--vesper-scrim-inverse-base | --vesper-alpha-white-600 |
--vesper-state-neutral-hover | --vesper-alpha-stone-50 |
--vesper-state-neutral-active | --vesper-alpha-stone-100 |
--vesper-state-contrast-hover | --vesper-alpha-contrast-50 |
--vesper-state-contrast-active | --vesper-alpha-contrast-100 |
--vesper-state-inverse-hover | --vesper-alpha-inverse-100 |
--vesper-state-inverse-active | --vesper-alpha-inverse-200 |
--vesper-tint-neutral-100 | --vesper-alpha-stone-50 |
--vesper-tint-neutral-200 | --vesper-alpha-stone-100 |
--vesper-tint-neutral-300 | --vesper-alpha-stone-200 |
--vesper-tint-neutral-400 | --vesper-alpha-stone-300 |
--vesper-tint-contrast-100 | --vesper-alpha-contrast-50 |
--vesper-tint-contrast-200 | --vesper-alpha-contrast-100 |
--vesper-tint-contrast-300 | --vesper-alpha-contrast-200 |
--vesper-tint-contrast-400 | --vesper-alpha-contrast-300 |
--vesper-tint-inverse-100 | --vesper-alpha-inverse-300 |
--vesper-tint-inverse-200 | --vesper-alpha-inverse-500 |
--vesper-tint-inverse-300 | --vesper-alpha-inverse-700 |
--vesper-tint-inverse-400 | --vesper-alpha-inverse-800 |
Tailwind color classes
If you imported @tenstorrent/vesper/tailwind.css into your css file where you set up Tailwind, these color tokens are available for use in Tailwind's utility classes. Every color token (primitive and semantic) is registered in Tailwind's --color-* namespace as --color-vesper-*, so any Tailwind utility that accepts a color works: bg-*, text-*, border-*, outline-*, ring-*, fill-*, stroke-*, divide-*, shadow-*, accent-*, and so on.
For example:
<div className="bg-vesper-stone-500" />;
<div className="border-vesper-border-secondary" />;
<div className="text-vesper-icon-primary" />;Fonts
| CSS variable | Value |
|---|---|
--vesper-font-sans | "Inter Tight", system-ui, sans-serif |
--vesper-font-mono | "IBM Plex Mono", monospace |
Tailwind font classes
Font tokens are registered in Tailwind's --font-* namespace, so they are available as font-family utilities:
<p className="font-vesper-sans" />;
<code className="font-vesper-mono" />;Leading
Leading (line height) tokens are percentage-based, so they scale with the element's font size.
| CSS variable | Value |
|---|---|
--vesper-leading-none | 100% |
--vesper-leading-tight | 110% |
--vesper-leading-snug | 120% |
--vesper-leading-normal | 140% |
--vesper-leading-relaxed | 150% |
--vesper-leading-loose | 175% |
Tailwind leading classes
Leading tokens are registered in Tailwind's --leading-* namespace, so they are available as line-height utilities:
<p className="leading-vesper-normal" />;
<p className="leading-vesper-loose" />;Tracking
Tracking (letter spacing) tokens are also relative to the element's font size. The values below are expressed in em, so they scale with the font size — for example, --vesper-tracking-tight resolves to -0.25px at a 16px font size.
| CSS variable | Value | Equivalent at 16px font size |
|---|---|---|
--vesper-tracking-tightest | -0.046875em | -0.75px |
--vesper-tracking-tighter | -0.03125em | -0.5px |
--vesper-tracking-tight | -0.015625em | -0.25px |
--vesper-tracking-normal | 0em | 0px |
--vesper-tracking-wide | 0.015625em | 0.25px |
--vesper-tracking-wider | 0.03125em | 0.5px |
--vesper-tracking-widest | 0.046875em | 0.75px |
Tailwind tracking classes
Tracking tokens are registered in Tailwind's --tracking-* namespace, so they are available as letter-spacing utilities:
<h1 className="tracking-vesper-tight" />;
<span className="tracking-vesper-wide" />;Radius
| CSS variable | Value | Equivalent at 16px root font size |
|---|---|---|
--vesper-radius-half | 0.125rem | 2px |
--vesper-radius-1 | 0.25rem | 4px |
--vesper-radius-2 | 0.5rem | 8px |
--vesper-radius-3 | 0.75rem | 12px |
--vesper-radius-4 | 1rem | 16px |
--vesper-radius-6 | 1.5rem | 24px |
--vesper-radius-7 | 1.75rem | 28px |
Tailwind radius classes
Radius tokens are registered in Tailwind's --radius-* namespace, so they work with every border-radius utility, including the side- and corner-specific ones:
<div className="rounded-vesper-2" />;
<div className="rounded-t-vesper-4" />;
<div className="rounded-bl-vesper-half" />;Shadows
| CSS variable | Value |
|---|---|
--vesper-shadow-100 | 0 0.125rem 0.375rem 0.0625rem rgba(9, 34, 33, 0.1) |
--vesper-shadow-200 | 0 0.25rem 0.75rem 0 rgba(9, 34, 33, 0.1) |
--vesper-shadow-300 | 0 0.75rem 2rem 0 rgba(9, 34, 33, 0.15) |
--vesper-shadow-400 | 0 1.5rem 4rem 0 rgba(9, 34, 33, 0.2) |
--vesper-shadow-inset-100 | 0 0.125rem 0.375rem 0 var(--vesper-alpha-contrast-100) inset |
--vesper-shadow-inset-200 | 0 0.125rem 0.75rem 0 var(--vesper-tint-contrast-200) inset |
--vesper-shadow-focus-ring | 0 0 0 0.1875rem var(--vesper-border-focus) |
Tailwind shadow classes
Shadow tokens are registered in Tailwind's --shadow-* namespace, so they are available as box-shadow utilities. Note that the inset tokens already include the inset keyword in their value, so they are also applied with shadow-* (not inset-shadow-*):
<div className="shadow-vesper-200" />;
<div className="shadow-vesper-inset-100" />;
<button className="focus-visible:shadow-vesper-focus-ring" />;Spacing
| CSS variable | Value | Equivalent at 16px root font size |
|---|---|---|
--vesper-spacing-0 | 0rem | 0px |
--vesper-spacing-micro | 0.0625rem | 1px |
--vesper-spacing-half | 0.125rem | 2px |
--vesper-spacing-1 | 0.25rem | 4px |
--vesper-spacing-2 | 0.5rem | 8px |
--vesper-spacing-3 | 0.75rem | 12px |
--vesper-spacing-4 | 1rem | 16px |
--vesper-spacing-5 | 1.25rem | 20px |
--vesper-spacing-6 | 1.5rem | 24px |
--vesper-spacing-8 | 2rem | 32px |
--vesper-spacing-10 | 2.5rem | 40px |
--vesper-spacing-12 | 3rem | 48px |
--vesper-spacing-14 | 3.5rem | 56px |
--vesper-spacing-16 | 4rem | 64px |
--vesper-spacing-20 | 5rem | 80px |
--vesper-spacing-24 | 6rem | 96px |
--vesper-spacing-28 | 7rem | 112px |
--vesper-spacing-32 | 8rem | 128px |
--vesper-spacing-40 | 10rem | 160px |
Tailwind spacing classes
Spacing tokens are registered in Tailwind's --spacing-* namespace as --spacing-vesper-*, so they work with every spacing-based utility — padding, margin, width, height, gap, inset, translate, and so on:
<div className="p-vesper-4 gap-vesper-2" />;
<div className="mt-vesper-8 px-vesper-3" />;
<div className="size-vesper-10 top-vesper-2" />;Animations
| CSS variable | Value |
|---|---|
--vesper-transition-duration-fast | 0.2s |
--vesper-transition-duration-default | 0.3s |
--vesper-transition-duration-slow | 0.6s |
Use them anywhere a duration is expected so that your app's motion stays in step with Vesper's components:
transition: background-color var(--vesper-transition-duration-fast) ease-in-out;Tailwind animation classes
Animation tokens are registered in Tailwind's --transition-duration-* namespace, so they are available through the duration-* utilities:
<div className="transition-colors duration-vesper-fast" />;
<div className="transition-transform duration-vesper-slow" />;Backgrounds
Background tokens provide Vesper's dot pattern as ready-to-use background shorthand values.
| CSS variable | Light mode value | Dark mode value |
|---|---|---|
--vesper-bg-dot-pattern-primary | url(...) repeat top #f8fcfb | url(...) repeat top #050f0e |
--vesper-bg-dot-pattern-secondary | url(...) repeat top #eef6f6 | url(...) repeat top #0b1817 |
--vesper-bg-dot-pattern-tertiary | url(...) repeat top #e8f2f1 | url(...) repeat top #13201e |
--vesper-bg-dot-pattern-inverse | url(...) repeat top rgba(0, 15, 15, 0.973) | url(...) repeat top rgba(245, 255, 253, 0.937) |
Since the dot pattern tokens are background shorthand values, assign them to the background property rather than background-image or background-color:
background: var(--vesper-bg-dot-pattern-secondary);Tailwind background classes
Background tokens are exposed as custom Tailwind utilities rather than theme values:
<div className="bg-vesper-dot-pattern-primary" />;
<div className="bg-vesper-dot-pattern-secondary" />;
<div className="bg-vesper-dot-pattern-tertiary" />;
<div className="bg-vesper-dot-pattern-inverse" />;Both the default and inverse dot patterns also accept any Vesper color token as a background color, using the token name without the vesper- prefix:
<div className="bg-vesper-dot-pattern-teal-200" />;
<div className="bg-vesper-dot-pattern-background-brand-purple-base" />;
<div className="bg-vesper-dot-pattern-inverse-stone-500" />;Strokes
Stroke tokens define the border and outline widths used throughout Vesper.
| CSS variable | Value | Equivalent at 16px font size |
|---|---|---|
--vesper-stroke-base | 0.0625rem | 1px |
--vesper-stroke-strong | 0.125rem | 2px |
border: var(--vesper-stroke-base) solid var(--vesper-border-secondary);
outline: var(--vesper-stroke-strong) solid var(--vesper-border-focus);Tailwind stroke classes
Stroke tokens are registered in Tailwind's --outline-width-* and --border-width-* namespaces, so they are available as outline-width and border-width utilities:
<div className="outline-vesper-base" />;
<div className="border-vesper-strong" />;