Skip to content

Design Tokens

Cosella’s design system is built on a comprehensive token system using Tailwind v4 @theme {} blocks. All tokens are defined as CSS custom properties and exposed as Tailwind utility classes.

Terminal window
pnpm add @cosella/tokens
@import "tailwindcss";
@import "@cosella/tokens/theme.css";
@import "@cosella/tokens/components.css";
import { brand, colorVar, duration, ease, zIndex, radius } from '@cosella/tokens';
import { ThemeProvider, useTheme } from '@cosella/tokens';

All tokens are available as Tailwind classes:

<div className="bg-brand-500 text-white rounded-lg p-4">
Brand background with white text
</div>
<div className="bg-bg-raised border-border text-text-primary">
Card-like surface
</div>
<div className="text-success font-medium">
Success text
</div>

Primary brand palette with 11 shades:

TokenTailwind ClassLight ModeDark Mode
brand-50bg-brand-50oklch(97% 0.02 145)oklch(97% 0.02 145)
brand-100bg-brand-100oklch(93% 0.04 145)oklch(93% 0.04 145)
brand-200bg-brand-200oklch(87% 0.07 145)oklch(87% 0.07 145)
brand-300bg-brand-300oklch(78% 0.11 145)oklch(78% 0.11 145)
brand-400bg-brand-400oklch(67% 0.15 145)oklch(67% 0.15 145)
brand-500bg-brand-500oklch(58% 0.12 148)oklch(58% 0.12 148)
brand-600bg-brand-600oklch(48% 0.09 148)oklch(48% 0.09 148)
brand-700bg-brand-700oklch(40% 0.07 145)oklch(40% 0.07 145)
brand-800bg-brand-800hsl(128 14% 22%)hsl(128 14% 22%)
brand-900bg-brand-900oklch(23% 0.03 145)oklch(23% 0.03 145)
brand-950bg-brand-950oklch(15% 0.02 145)oklch(15% 0.02 145)
TokenTailwind ClassValue
neutral-50bg-neutral-50oklch(98% 0.003 250)
neutral-100bg-neutral-100oklch(95% 0.005 250)
neutral-200bg-neutral-200hsl(214 32% 91%)
neutral-300bg-neutral-300oklch(83% 0.012 250)
neutral-400bg-neutral-400oklch(70% 0.012 250)
neutral-500bg-neutral-500oklch(58% 0.012 250)
neutral-600bg-neutral-600oklch(47% 0.01 250)
neutral-700bg-neutral-700oklch(37% 0.008 250)
neutral-800bg-neutral-800oklch(27% 0.006 265)
neutral-900bg-neutral-900oklch(17% 0.01 265)

Context-aware colors that adapt to light/dark mode:

TokenTailwind ClassLight ModeDark Mode
bg-basebg-bg-basegreen-mistoklch(17% 0.01 265)
bg-raisedbg-bg-raisedwhiteoklch(20% 0.01 265)
bg-subtlebg-bg-subtlegreen-mistoklch(23% 0.01 265)
text-primarytext-text-primaryblackoklch(94% 0.008 240)
text-secondarytext-text-secondarybrand-800oklch(94% 0.008 240)
text-mutedtext-text-mutedoklch(60% 0.02 250)oklch(60% 0.015 250)
primarybg-primarybrand-800oklch(58% 0.12 148)
borderborder-borderneutral-200oklch(17% 0.01 265)
TokenTailwind ClassValue
successbg-successoklch(44% 0.13 145)
warningbg-warningoklch(65% 0.18 80)
dangerbg-dangeroklch(53% 0.22 20)
infobg-infooklch(55% 0.16 220)
TokenTailwind Class (bg)Tailwind Class (text)
badge-bluebg-badge-blue-bgtext-badge-blue-text
badge-greenbg-badge-green-bgtext-badge-green-text
badge-redbg-badge-red-bgtext-badge-red-text
badge-amberbg-badge-amber-bgtext-badge-amber-text
badge-purplebg-badge-purple-bgtext-badge-purple-text
--font-sans: 'Epilogue', system-ui, sans-serif;
--font-mono: 'JetBrains Mono', ui-monospace, monospace;
className="font-sans" {/* Epilogue */}
className="font-mono" {/* JetBrains Mono */}
TokenTailwind ClassSizeLine Height
text-xstext-xs0.75rem (12px)1rem
text-smtext-sm0.875rem (14px)1.25rem
text-basetext-base1rem (16px)1.5rem
text-lgtext-lg1.125rem (18px)1.75rem
text-xltext-xl1.25rem (20px)1.75rem
text-2xltext-2xl1.5rem (24px)2rem
text-3xltext-3xl1.875rem (30px)2.25rem
text-4xltext-4xl2.25rem (36px)2.5rem

Standard Tailwind spacing scale plus extras:

TokenTailwind ClassValue
spacing-1p-1 / m-10.25rem (4px)
spacing-2p-2 / m-20.5rem (8px)
spacing-4p-4 / m-41rem (16px)
spacing-6p-6 / m-61.5rem (24px)
spacing-8p-8 / m-82rem (32px)
spacing-12p-12 / m-123rem (48px)
spacing-16p-16 / m-164rem (64px)
spacing-18p-18 / m-184.5rem
spacing-22p-22 / m-225.5rem
spacing-72p-72 / m-7218rem
spacing-80p-80 / m-8020rem
TokenTailwind ClassValue
radius-nonerounded-none0
radius-smrounded-sm0.25rem (4px)
radius-mdrounded-md0.375rem (6px)
radius-lgrounded-lg0.5rem (8px)
radius-xlrounded-xl0.75rem (12px)
radius-2xlrounded-2xl1rem (16px)
radius-fullrounded-full9999px
TokenTailwind ClassUsage
shadow-smshadow-smSubtle elevation
shadow-mdshadow-mdCards, dropdowns
shadow-lgshadow-lgModals, popovers
shadow-overlayshadow-overlayFull-screen overlays
TokenTailwind ClassValue
duration-instantduration-instant0ms
duration-fastduration-fast100ms
duration-normalduration-normal200ms
duration-slowduration-slow350ms
duration-xslowduration-xslow500ms
TokenTailwind ClassValue
ease-defaultease-defaultcubic-bezier(0.4, 0, 0.2, 1)
ease-inease-incubic-bezier(0.4, 0, 1, 1)
ease-outease-outcubic-bezier(0, 0, 0.2, 1)
ease-springease-springcubic-bezier(0.34, 1.56, 0.64, 1)
TokenTailwind ClassValueUsage
z-dropdownz-dropdown1000Dropdowns, menus
z-stickyz-sticky1100Sticky elements
z-overlay-windowz-overlay-window1200Electron overlays
z-modalz-modal1300Modals
z-toastz-toast1400Toast notifications

Specialized tokens for the desktop overlay UI:

TokenUsage
glass-bgOverlay background (#0f1510)
glass-textOverlay text (#e5eae5)
glass-subtleHover states, cards
glass-cardTranscript cards, responses
glass-dividerDividers
glass-hoverButton hover states
glass-borderAll borders
glass-pressedButton active/pressed
glass-panel-*Panel backgrounds (25%, 40%, 95% alpha)
glass-dangerRisk panel background
glass-warningObjections panel background
glass-successPayment panel background

Dark mode is activated by adding .dark class to <html>:

import { ThemeProvider } from '@cosella/tokens';
<ThemeProvider>{children}</ThemeProvider>

All tokens automatically adapt to dark mode via CSS custom properties.

The components.css file provides pre-built CSS classes:

/* Layout */
.cs-page-shell /* Page container */
.cs-page-stack /* Vertical stack */
.cs-page-header /* Page header */
/* Panels */
.cs-panel /* Card/panel */
/* Forms */
.cs-input /* Text input */
.cs-select /* Select dropdown */
/* Navigation */
.cs-tabs /* Tab container */
.cs-tab /* Tab item */
.cs-tab-active /* Active tab */
/* Tables */
.cs-table-wrap /* Table wrapper */
.cs-table /* Table element */
.cs-table-head /* Table header */
.cs-table-row /* Table row */
.cs-table-cell /* Table cell */
/* Badges */
.cs-badge /* Base badge */
.cs-badge-blue /* Blue badge */
.cs-badge-green /* Green badge */
.cs-badge-red /* Red badge */
.cs-badge-amber /* Amber badge */
.cs-badge-purple /* Purple badge */
/* Buttons */
.cs-btn /* Base button */
.cs-btn-primary /* Primary button */
.cs-btn-outline /* Outline button */
.cs-btn-ghost /* Ghost button */
.cs-btn-destructive /* Destructive button */
.cs-btn-sm /* Small button */
.cs-btn-md /* Medium button */
.cs-btn-lg /* Large button */
/* Typography */
.cs-page-title /* Page title */
.cs-section-title /* Section title */
.cs-card-title /* Card title */
.cs-body /* Body text */
.cs-label /* Form label */