Colors
Color primitives organized into scales. Each scale has numbered shades from light to dark, plus semantic variants (muted, subtle) for transparency effects.
Blue
--color-blue-*#3e44fePurple
--color-purple-*#aa33ffNeutral
--color-neutral-*#676776Warning
--color-warning-*#ff9f40Success
--color-success-*#33cc61Info
--color-info-*#3d85f2Error
--color-error-*#f23d3dBase Colors
Fundamental color values
#13141c#13141c80Black at 50% - translucent chrome intended to sit over a backdrop blur#ffffff#00000000#00000099Spacing
Consistent spacing scale based on a base unit. Use these tokens for margins, padding, and gaps.
--spacing-00px--spacing-18px--spacing-216px--spacing-324px--spacing-432px--spacing-540px--spacing-648px--spacing-864px--spacing-1080px--spacing-1296px--spacing-offset-10px--spacing-offset-20px--spacing-offset-30px--spacing-offset-40px--spacing-component-spacing0px--spacing-internal-padding32px--spacing-column-count4px--spacing-gutter16px--spacing-margin24px--spacing-2-col-offset-min-width280px--spacing-3-col-offset-min-width300px--spacing-min-width340px--spacing-default-width360px--spacing-max-width767px--spacing-horizontal-padding16px--spacing-block-vertical-padding2.5rem--spacing-block-transition2.5rem--spacing-block-vertical-padding-hero7.5rem--spacing-block-vertical-padding-card1rem--spacing-block-default2.5rem--spacing-block-internal-s0.5rem--spacing-block-internal-l1.5rem--spacing-block-internal-m1rem--spacing-card-vertical-padding1rem--spacing-card-horizontal-padding1rem--spacing-card-margin1rem--spacing-carousel-card-gap-s1rem--spacing-carousel-card-gap-l1rem--spacing-carousel-logo-card-width160px--spacing-carousel-logo-card-gap24pxCorner Radius
Border radius values for rounding corners. Applied consistently across the design system.
--corner-medium8px--corner-full400px--corner-large12px--corner-small4pxShadows
Elevation shadows create depth and hierarchy. Use sparingly - shadows are more prominent in light mode.
--shadow-none--shadow-focus--shadow-focus-ringVisible focus indicator for interactive elements (buttons, links, form fields). Use this on `:focus-visible` to meet WCAG 2.2 visible-focus requirements. Two theme-aware layers: a 3px gap ring in the surface/background colour, then a 5px violet ring in the focus-border colour — resolving on dark surfaces to #13141C (gap) + #989CFE (ring). `shadow.focus` is the softer drop-shadow used in non-keyboard contexts; this token is the keyboard-a11y ring shared by Primary/Secondary/Play buttons.--shadow-focus-danger--shadow-large--shadow-medium--shadow-small--shadow-glow--shadow-glow-secondary--shadow-pressedTypography
Type system including font families, sizes, weights, and line heights.
Text Styles
Composite typography tokens combining font properties into ready-to-use styles.
--text-style-body--text-style-body-1--text-style-body-2--text-style-body-3--text-style-caption--text-style-eyebrow--text-style-h1--text-style-h2--text-style-h3--text-style-h4--text-style-h5--text-style-h6--text-style-h7--text-style-buttonType Hierarchy
Font Families
ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz
0123456789 !@#$%^&*()
--typography-font-family-basePrimary font for body text and UIAvenirNextLTPro,sans-serifABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz
0123456789 !@#$%^&*()
--typography-font-family-monomonospace,sans-serifFont Sizes
--typography-font-size-h12.5rem--typography-font-size-h22rem--typography-font-size-h31.75rem--typography-font-size-h41.5rem--typography-font-size-h51.25rem--typography-font-size-h61rem--typography-font-size-body1remBody text--typography-font-size-caption0.75rem--typography-font-size-body-11rem--typography-font-size-body-20.875rem--typography-font-size-body-30.875rem--typography-font-size-h71rem--typography-font-size-eyebrow0.75rem--typography-font-size-button0.875remButton label. 14 / 14 / 16 / 16 across sm/md/lg/xl.Font Weights
--typography-font-weight-lightlight (300)300 weight - light text--typography-font-weight-regularregular (400)--typography-font-weight-semiboldsemibold (700)700 weight - the Demi face. Numbered to match the loaded font, not the CSS keyword: AvenirNextLTPro ships Demi at 700 and Bold at 800, so the keyword's 600 had no face behind it and fell up to Demi anyway.--typography-font-weight-mediummedium (500)500 weight--typography-font-weight-boldbold (800)800 weight - the Bold face, which the loaded font ships at 800.Line Heights
--typography-line-height-100100 (100%)--typography-line-height-120120 (120%)--typography-line-height-130130 (130%)--typography-line-height-140140 (140%)--typography-line-height-160160 (160%)--typography-line-height-relaxedrelaxed (200%)--typography-line-height-tighttight (100%)--typography-line-height-buttonbutton (100%)Button label. Always 100%.Letter Spacings
--typography-letter-spacing-h1h1 (-0.02em)Drawn as -1.6px on the 80px H1. Held in em so it stays proportional as the heading halves toward small.--typography-letter-spacing-h2h2 (-0.03em)Drawn as -1.92px on the 64px H2.--typography-letter-spacing-h3h3 (-0.0125em)Drawn as -0.6px on the 48px H3.--typography-letter-spacing-normalnormal (0em)Normal letter spacing--typography-letter-spacing-tighttight (-0.025em)Tighter - large headings--typography-letter-spacing-widewide (0.05em)Wider - overlines, all-caps--typography-letter-spacing-h4h4 (-0.0075em)Drawn as -0.3px on the 40px H4.--typography-letter-spacing-h5h5 (-0.005em)Drawn as -0.16px on the 32px H5.--typography-letter-spacing-h6h6 (-0.015em)H6. Design sheet 2026-08-13: -1.5%. Was +0.015em, which was the wrong sign.--typography-letter-spacing-h7h7 (-0.015em)H7. Design sheet 2026-08-13: -1.5%. Was +0.015em, which was the wrong sign.--typography-letter-spacing-bodybody (0em)Body. The site default, and the same value as Body 1 on the design sheet: 0.--typography-letter-spacing-eyebroweyebrow (0.0025em)Drawn as 0.035px on the 14px eyebrow. Positive — the same magnitude as body, opening rather than tightening.--typography-letter-spacing-captioncaption (0.005em)Drawn as 0.06px on the 12px caption.--typography-letter-spacing-buttonbutton (0.005em)Drawn as 0.08px on the 16px button. Same em as the caption; kept separate so tuning one never moves the other.--typography-letter-spacing-body-1body-1 (0em)Body 1. Design sheet 2026-08-13: 0.--typography-letter-spacing-body-1-demibody-1-demi (-0.0025em)Body 1 Demi. Design sheet 2026-08-13: -0.25%. The demi weight tracks tighter than the regular.--typography-letter-spacing-body-2body-2 (0em)Body 2. Design sheet 2026-08-13: 0.--typography-letter-spacing-body-3body-3 (0em)Body 3. Design sheet 2026-08-13: 0.--typography-letter-spacing-body-3-regularbody-3-regular (-0.0025em)Body 3 Regular. Design sheet 2026-08-13: -0.25%.Borders
Composite border tokens combining width, style, and color.
--border-standardstandardStandard 1px solid border--border-inputinput1px solid high-contrast border for form-field inputs--border-transparenttransparent--border-errorerror--border-dasheddashed--border-controlcontrolResting border for a control the user can operate — select and dropdown triggers. Pairs with controlHover and controlActive; the three step through theme.stroke.highContrast together.--border-control-hovercontrolHoverControl border under the pointer.--border-control-activecontrolActiveControl border while the control is open or engaged. Also draws the dropdown panel, so the trigger and its panel match while the menu shows.Opacity
Opacity levels for creating tinted variants and transparency effects.
--opacity-softsoft (15%)--opacity-mutedmuted (50%)Half opacity (50%)--opacity-subtlesubtle (25%)Mostly transparent (25%)--opacity-strongstrong (60%)Animation
Motion tokens for consistent, purposeful animations across the UI.
Duration
--duration-normalnormal (200ms)Normal - button feedback, tooltipsEasing
--easing-easeeasecubic-bezier(0.25, 0.1, 0.25, 1)General purpose easingTheme Tokens
Semantic tokens that adapt to light/dark mode. These reference primitive tokens but switch values based on the active theme.
Surfaces
Layered backgrounds for creating depth
#ffffff#13141c--theme-surface-11Base canvas - the lowest layer#f3f3f8#1e1f28--theme-surface-22Raised surface - cards, panels#d8d8e8#3c3c48--theme-surface-33Overlay surface - modals, popovers#f3f3f8#1e1f28--theme-surface-defaultdefault#f3f3f8#181921--theme-surface-alternativealternative#13141c80#13141c80--theme-surface-navnavSite header chrome at rest - translucent, pairs with an 8px backdrop blur. Constant across modes: the header is always dark glass.#13141c#13141c--theme-surface-nav-opennav-openSite header chrome once a menu is open - opaque, no blur. Constant across modes.#c0c0d1#3c3c48--theme-surface-interactive-defaultdefault#8b8b9e#676776--theme-surface-interactive-hoverhover#f3f3f8#3c3c48--theme-background-subtlesubtle#d8d8e8#4a4a57--theme-background-hoverhover#ffffff#13141c--theme-background-sitesiteBase page background color applied to <body> via layout.css. Do not remove without updating layout.css.Text Colors
#1e1f28#f3f3f8--theme-text-primaryprimaryFull-contrast text color applied to headings via layout.css. Near-black on light (Neutral 900), near-white on dark (Neutral 25), matching Figma Base/Text/Primary.#13141c#ffffff--theme-text-inverseinversePure black on light, pure white on dark, matching Figma Base/Text/Inverse. Was a legacy alias of primary; pinned to its own value once primary moved to Neutral 900/25.#3c3c48#aaaabd--theme-text-secondarysecondary#676776#8b8b9e--theme-text-placeholderplaceholderPlaceholder text in form inputs, matching Figma Base/Text/Placeholder. Neutral 500 on light, Neutral 400 on dark. Distinct from textMuted (general muted text), which sits one step darker on light.#4a4a57#8b8b9e--theme-text-mutedtextMutedBorder Colors
#c0c0d1#3c3c48--theme-borderborder#d8d8e8#25252e--theme-border-subtleborderSubtleFeedback States
#33cc61#5eeb88--theme-color-successsuccess#1358bf#3d85f2--theme-color-infoinfo#f23d3d#f56262--theme-color-errorerrorElevation
--theme-elevation-11Subtle lift - cards0px 1px 2px 0px [object Object]0px 0px 0px 0px [object Object]--theme-elevation-22Medium lift - dropdowns0px 4px 6px 0px [object Object]0px 0px 0px 0px [object Object]--theme-elevation-33High lift - modals0px 10px 15px 0px [object Object]0px 10px 15px 0px [object Object]Color
#aa33ff#b752ff--theme-color-accent-defaultdefault#8829cc#aa33ff--theme-color-accent-hoverhover#d599ff#600f99--theme-color-accent-low-contrastlowContrast#2e34e5#5157fe--theme-color-primary-hoverhoverStroke
#666afe#989cfe--theme-stroke-focus-borderfocusBorder#aaaabd#8b8b9e--theme-stroke-high-contrast-defaultdefault#8b8b9e#c0c0d1--theme-stroke-high-contrast-hoverhover#1e1f28#f3f3f8--theme-stroke-high-contrast-activeactive#13141c#ffffff--theme-stroke-high-contrast-inverseinverse#c0c0d1#3c3c48--theme-stroke-soft-contrast-defaultdefault#8b8b9e#676776--theme-stroke-soft-contrast-hoverhover#676776#8b8b9e--theme-stroke-soft-contrast-activeactive#d8d8e8#25252e--theme-stroke-soft-contrast-dividerdividerBorder
1px solid {color.neutral.600}1px solid {color.neutral.200}--border-standardstandardStandard 1px solid border1px solid {color.neutral.300}1px solid {color.neutral.400}--border-inputinput1px solid high-contrast border for form-field inputsComponents
Button
Primary action trigger
IconButton
Icon-only button
PlayButton
Media play button
DropdownMenu
Action menu
ContextMenu
Right-click menu
Pagination
Page navigation
Layout Grid
Token-driven page layout. Press Ctrl+G to toggle the debug overlay.
Use PageLayout as your starting template — it shares this grid system with debug off by default. Import grid-debug.css and callinitGridDebug(container) to enable Ctrl+G toggling.
Main Content
Two-thirds width on desktop, full width on mobile
Full-bleed section — content extends to viewport edges