# Component tokens Between the raw scales and the components sit per-component token slots. A component reads from its slot, and the slot points at the scale or theme underneath. Retune a component's whole look (its height, radius, or borders) by repointing its slot in one place instead of editing the component CSS. These live in `themes/default.css` inside `@layer tokens`. ## Radius roles The radius scale is mapped onto semantic roles so a rounder or squarer look is a one-line change: | Slot | Default | Used by | |---|---|---| | `--radius` | 4px | The base radius everything else defaults to | | `--radius-control` | `--radius` | Buttons, inputs, selects, tabs | | `--radius-surface` | `--radius` | Cards, panels, `
` | | `--radius-overlay` | `--radius-md` (6px) | Popovers, dropdowns, toasts | | `--radius-dialog` | `--radius-lg` (8px) | Modals, sheets | | `--radius-tag` | `--radius-xs` (2px) | Tags, chips, badges | | `--radius-pill` | `--radius-full` | Pills, status dots, avatars | ## Input slots The form controls read from these: | Slot | Default | |---|---| | `--input-height` | 2.5rem (40px) | | `--input-height-sm` | 2rem (32px) | | `--input-height-lg` | 3rem (48px) | | `--input-padding-x` | 0.875rem | | `--input-padding-y` | 0.5rem | | `--input-radius` | `--radius-control` | | `--input-font-size` | `--text-sm` | | `--input-bg` | `--bg` | | `--input-border` | `--rule` | | `--input-border-hover` | `--rule-strong` | | `--input-border-focus` | `--accent` | | `--input-placeholder` | `--ink-faint` | ## Button slots | Slot | Default | |---|---| | `--button-height` | 2.5rem (40px) | | `--button-height-sm` | 2rem (32px) | | `--button-height-lg` | 3rem (48px) | | `--button-height-hero` | 3.5rem (56px) | | `--button-padding-x` | 1rem | | `--button-padding-x-sm` | 0.75rem | | `--button-padding-x-lg` | 1.25rem | | `--button-radius` | `--radius-control` | | `--button-font-size` | `--text-sm` | | `--button-font-size-lg` | `--text-base` | | `--button-font-weight` | `--weight-medium` | ## Terminal slots The terminal component sits on a fixed dark surface in **both** light and dark mode (unlike bare ``, which uses `--bg-inverse` and flips with the theme): | Slot | Default | |---|---| | `--terminal-bg` | `--neutral-900` | | `--terminal-ink` | `--neutral-100` | | `--terminal-dim` | `--neutral-500` | ## Control glyph slots Two controls draw their glyph from an inline SVG data URI. Data URIs can't reference CSS variables, so the theme ships a literal-color glyph per mode: - `--checkbox-check`: the checkmark stroke; tracks `--accent-ink`. - `--select-caret`: the select dropdown caret; tracks `--ink-dim`. A theme that changes `--accent-ink` or `--ink-dim` should repoint these too (copy the URL and change the `stroke='%23…'` hex). The Elements brand theme and the customer-example recipe both show this. ## Avatar slots (reserved) The theme defines avatar sizing tokens: | Slot | Default | |---|---| | `--avatar-size` | 2rem | | `--avatar-size-xs` | 1.25rem | | `--avatar-size-sm` | 1.5rem | | `--avatar-size-lg` | 2.5rem | | `--avatar-size-xl` | 3.5rem | | `--avatar-radius` | `--radius-pill` | These are **reserved token slots only**. v1 ships no avatar component and no `.avatar` class. The tokens exist so an app (or a future component) can build an avatar on the system's sizing without inventing its own scale.