# Skeleton Documentation
## Get Started
# Introduction
Learn more about Skeleton and how it can serve you.
Skeleton provides a uniform design language and structured framework for controlling the look and feel of your product and user experience. It serves as an opinionated design system that aims to greatly reduce the amount of time spent managing design elements and patterns, allowing you to more quickly build and manage your frontend interfaces at scale.
## In a Nutshell
{
Design System
This aims to augment Tailwind CSS. It provides themes, styled elements, and provides opinionated guardrails for integrating your fully
featured design system.
Components
Turnkey components built atop the foundation of{' '}
Zag.js
. These automatically adapt to the Skeleton design system out of the box. Currently available for Svelte and React.
}
## Our Philosophy
{
Framework Agnostic
Skeleton's core features are framework agnostic, only requiring the use of{' '}
Tailwind CSS
. This provides full access to all design system features, while enabling you to standardize the design process for your framework of
choice.
Native-First
We aim to embrace the interface of the web, not replace it. This is why Skeleton defaults to semantic HTML elements and native browser
APIs. Beyond ease of use, we feel this offers a huge advantages to accessibility.
Simple Standards
We aim to standardize the design process, providing common conventions that are easy to learn and retain, whether you work alone or in
a team environment. Covering common fixtures such as themes, colors, typography, spacing, and more.
Utility-First
Skeleton embraces the{' '}
utility-first
{' '}
methodology for styling, supporting all features provided by{' '}
Tailwind
, while extending its capabilities in meaningful ways. Providing full support for the encapsulated components of the modern web.
Opt-In by Default
Most features in Skeleton are modular and opt-in by default. Enabling interface features like buttons and typography via dedicated
utility classes. This allows for a simple escape hatch when you need to draw outside the lines and generate custom interfaces.
Adaptive
Skeleton is intended to adapt to the design and aesthetic of your project, while still providing reasonable defaults. Providing a
powerful{' '}
theme generator
{' '}
for custom themes, while also supplying a curated set of themes for those less design savvy.
Skeleton has maintained a frequent release cadence over for years. Just take a look at our{' '}
Releases
.
Community Tools
We promote community-based projects that help augment Skeleton and improve your productivity, such as the{' '}
Figma UI Kit
.
}
# Installation
Learn how to install and setup Skeleton for your project.
## Guides
doc.id.includes('installation/')} class="md:grid-cols-2" />
## Mixing UI Libraries
Skeleton's design system is perfect for complementing headless component libraries, such as [Bits UI](/docs/\[framework]/integrations/bits-ui), [Melt UI](/docs/\[framework]/integrations/melt-ui), [Radix](/docs/\[framework]/integrations/radix-ui), and [Zag.js](https://zagjs.com/). As well as "Tailwind component" libraries such as the [Tailwind Plus](https://tailwindcss.com/plus). Supporting any component system that supports Tailwind, but very specifically allows you to insert or substitute Skeleton-provided utility classes.
### Unsupported Libraries
Unfortunately, Skeleton cannot integrate with [Flowbite React](https://flowbite-react.com/), [Flowbite Svelte](https://flowbite-svelte.com/), or [Daisy UI](https://daisyui.com/) at this time. Similar to Skeleton, these libraries make changes to Tailwind that directly overlaps with many of our core features, including class names and color values.
# Fundamentals
An introduction to the core concepts of Skeleton.
Skeleton is comprised of three pillars - the design system, our extensions to Tailwind, and an optional suite of framework-specific components. Together these form a comprehensive solution for designing and implementing complex web interfaces at scale.
***
## Design System
Explore each pillar of the Skeleton design system. Provided via the Skeleton core.
doc.id.includes('design/')} class="md:grid-cols-2" />
***
## Tailwind Components
Tailwind components that act as primitives for creating complex interfaces. Provided via the Skeleton core.
doc.id.includes('tailwind-components/')} class="md:grid-cols-2" />
***
## Framework Components
Skeleton also offers optional component packages for select component frameworks. Each component automatically adapts to Skeleton's design system. While still allowing a high level of customization.
### Supported Frameworks
\| Framework | NPM Package | Description |
\| --------- | ------------------------------- | ------------------------------- |
\| React | `@skeletonlabs/skeleton-react` | Contains all React components. |
\| Svelte | `@skeletonlabs/skeleton-svelte` | Contains all Svelte components. |
### Powered by Zag.js
Skeleton's components are built on **Zag.js**, which provides a collection of framework-agnostic UI component patterns to manage logic and state. Zag is actively maintained by industry veterans, such as [Segun Adebayo](https://github.com/segunadebayo) - the creator and core maintainer for [Chakra UI](https://www.chakra-ui.com/), [Ark UI](https://ark-ui.com/), and [PandaCSS](https://panda-css.com/).
View Zag.js
### Importing Components
You may import components per each Skeleton framework as follows.
```ts
import { Avatar } from '@skeletonlabs/skeleton-react';
```
This also includes access to the component prop types.
```ts
import type { AvatarRootProps, ... } from '@skeletonlabs/skeleton-react';
```
### Composed Pattern
Skeleton components are granular. This offers direct access to all children within the tree, similar to working with raw HTML. This allows passing in arbitrary props and attributes directly to the template within. Including: `required`, `data-*`, `style`, `className`, and more.
```tsx
export default function Avatar() {
return (
SK
);
}
```
### Styling Components
Skeleton components implement a universal convention for accepting CSS utility classes via the `className` attribute. Use this to pass any CSS utility class.
```tsx
export default function Avatar() {
return (
SK
);
}
```
### Extensible Markup
Skeleton components provide a mechanism for overwriting the internal HTML with custom markup. Use the `element` prop to provide a custom element, this prop accepts a function which the `attributes` are passed into. Then spread the `attributes` to your custom elements. Note that this is an optional and advanced feature aimed at power users, and should not be needed for normal usage.
```tsx
export default function () {
return (
} />
Content for Item 1
);
}
```
### Custom Animations
Using the extensible markup pattern, you may implement custom animations. We showcase this below with [Motion](https://motion.dev/), but you could also use framework agnostic solutions such as [Anime.js](https://animejs.com/) or [Animate.css](https://animate.style/).
```tsx
import { Accordion } from '@skeletonlabs/skeleton-react';
import { motion, AnimatePresence } from 'motion/react';
export default function CustomAnimation() {
return (
{['1', '2', '3'].map((item) => (
Item {item}
(
{!attributes.hidden && (
Content for item {item}
)}
)}
/>
))}
);
}
```
1. Implement the `element` snippet to gain access to the `attributes`.
2. Spread the `attributes` to the custom element, a `
` in this example.
3. Wrap the custom element in Motion's ``.
4. Then implement conditional rendering that triggers animations when `attributes.hidden` is toggled.
### Data Model Pattern
Skeleton components maintain a uniform pattern for handling data flow in and out. We lean into the Zag convention for this, which handles this explicitly with a prop for data in and event handler for data out. As opposed to two-way binding (such as `bind:` in Svelte). You can see this in practice below for the Switch component.
```tsx
import { Switch } from '@skeletonlabs/skeleton-react';
import { useState } from 'react';
export default function Default() {
const [checked, setChecked] = useState(false);
return (
setChecked(e.checked)}>
Label
);
}
```
In this example the Switch component uses `checked` to pass state in, and `onCheckedChange` to listen and update then the state is modified internally. Please note the prop, event prop, and key within the event payload may vary from component to component. For example:
* `` - handled via `open` / `onOpenChange` / `e.change`
* `` - handled via `value` / `onValueChange` / `e.value`
* `` - handled via `step` / `onStepChange` / `e.step`
This pattern is utilized for all relevant components, and is documented via the [API Reference](/docs/framework-components/switch#api-reference) table per component.
### Provider Pattern
Most Skeleton components also support the Provider Pattern. This utilizes a provider component that replaces the root and provides access to the underlying component APIs. In practice, this allows direct access to Zag.js API features, such as programmatic control for overlay components, the ability to clear input components, and more.
```tsx
import { Portal, Tooltip, useTooltip } from '@skeletonlabs/skeleton-react';
export default function TooltipExample() {
const tooltip = useTooltip();
return (
<>
AnchorContent
>
);
}
```
### Learn More
For a comprehensive guide to how Skeleton implements components, refer to our [contribution guidelines](/docs/\[framework]/resources/contribute/components).
```
```
# Core API
Learn about the specific features Skeleton introduces to Tailwind.
The heart of Skeleton is the framework agnostic core package. This adapts and extends Tailwind to introduce Skeleton's global styles, color system, typography, and more. Each section below details available theme properties and utility classes.
## Introduction
Below you will find documentation covering Skeleton's core features.
* **Skeleton Theme Property** - represents the CSS design token within each Skeleton theme file.
* **Tailwind @theme Property** - represents the `@theme` property provided to Tailwind.
* **Class** - represents one or more utility classes generated by `@theme` injection.
## @base
Extends Tailwind's base layer with a set of opinionated global styles. Refer to [Globals](/docs/svelte/design/globals) for details.
View Global Styles
## @theme
Uses Tailwind's `@theme` to implement a variety of new properties and utility classes.
View Theme Properties
### Animations
Provides keyframe-driven animation utilities used by Skeleton's internal components.
\| Skeleton Theme Property | Tailwind @theme Property | Class |
\| ------------------------------------------------------ | ------------------------------------------------------ | -------------------------------------------------- |
\| {`--`}animate-progress-linear-indeterminate-horizontal | {`--`}animate-progress-linear-indeterminate-horizontal | `animate-progress-linear-indeterminate-horizontal` |
\| {`--`}animate-progress-linear-indeterminate-vertical | {`--`}animate-progress-linear-indeterminate-vertical | `animate-progress-linear-indeterminate-vertical` |
\| {`--`}animate-progress-circular-indeterminate | {`--`}animate-progress-circular-indeterminate | `animate-progress-circular-indeterminate` |
### Colors
Extends Tailwind's color palette with Skeleton theme-specific color values. Refer to [Colors](/docs/\[framework]/design/colors) for details.
\| Key | Accepted Values |
\| -------- | ---------------------------------------------------------------------------------------------------------------- |
\| Property | `accent`, `bg`, `border`, `caret`, `decoration`, `divide`, `fill`, `outline`, `ring`, `shadow`, `stroke`, `text` |
\| Color | `primary`, `secondary`, `tertiary`, `success`, `warning`, `error`, `surface` |
\| Shade | `50`, `100`, `200`, `300`, `400`, `500`, `600`, `700`, `800`, `900`, `950` |
Represents the most common and standard color properties available to use.
\| Skeleton Theme Property | Tailwind @theme Property | Class |
\| ------------------------------------ | ------------------------------------ | ------------------------------------- |
\| {`--`}color-\[color]-\[shade] | {`--`}color-\[color]-\[shade] | `[property]-[color]-[shade]` |
\| {`--`}color-\[color]-contrast-\[shade] | {`--`}color-\[color]-contrast-\[shade] | `[property]-[color]-contrast-[shade]` |
\| {`--`}color-\[color]-contrast-light | {`--`}color-\[color]-contrast-light | `[property]-[color]-contrast-light` |
\| {`--`}color-\[color]-contrast-dark | {`--`}color-\[color]-contrast-dark | `[property]-[color]-contrast-dark` |
\| {`--`}color-root-bg-light | {`--`}color-root-bg-light | `[property]-root-bg-light` |
\| {`--`}color-root-bg-dark | {`--`}color-root-bg-dark | `[property]-root-bg-dark` |
#### Brand
Represents a variable accent color that can be tailored for light and dark mode. Refer to [Brand Color](/docs/svelte/design/colors#brand-color) for details.
\| Skeleton Theme Property | Tailwind @theme Property | Class |
\| -------------------------------- | -------------------------------- | --------------------------------- |
\| {`--`}color-brand-light | {`--`}color-brand-light | `[property]-brand-light` |
\| {`--`}color-brand-contrast-light | {`--`}color-brand-contrast-light | `[property]-brand-contrast-light` |
\| {`--`}color-brand-dark | {`--`}color-brand-dark | `[property]-brand-dark` |
\| {`--`}color-brand-contrast-dark | {`--`}color-brand-contrast-dark | `[property]-brand-contrast-dark` |
#### Color Pairings
Extends colors to implement [Color Pairing](/docs/\[framework]/design/colors#color-pairings), balancing colors for light and dark mode using the CSS `light-dark()` function.
\| Skeleton Theme Property | Tailwind @theme Property | Class |
\| -------------------------------------------- | -------------------------------------------- | --------------------------------------------- |
\| {`--`}color-\[color]-\[shade]-\[shade] | {`--`}color-\[color]-\[shade]-\[shade] | `[property]-[color]-[shade]-[shade]` |
\| {`--`}color-\[color]-contrast-\[shade]-\[shade] | {`--`}color-\[color]-contrast-\[shade]-\[shade] | `[property]-[color]-contrast-[shade]-[shade]` |
> NOTE: Pairing values are specific; shade 500 does not include a pairing.
### Edges
Sets the default width for Tailwind's border, ring, and outline utilities to match theme values.
\| Skeleton Theme Property | Tailwind @theme Property | Class |
\| --------------------------- | --------------------------- | --------- |
\| {`--`}default-border-width | {`--`}default-border-width | `border` |
\| {`--`}default-ring-width | {`--`}default-ring-width | `ring` |
\| {`--`}default-outline-width | {`--`}default-outline-width | `outline` |
> IMPORTANT: never set `outline` to `0px` as this would violate accessibility.
#### Border Radius
Extends Tailwind's radius properties with theme-specific sizes.
\| Skeleton Theme Property | Tailwind @theme Property | Class |
\| ----------------------- | ------------------------ | ------------------- |
\| {`--`}radius-base | {`--`}radius-base | `rounded-base` |
\| {`--`}radius-container | {`--`}radius-container | `rounded-container` |
#### Corner Shape
Enables the [corner-shape](/docs/\[framework]/tailwind-utilities/corner-shapes#browser-support) utility, and sets the default `base` and `container` sizes respectively.
\| Skeleton Theme Property | Tailwind @theme Property | Class |
\| ---------------------------- | ------------------------ | ---------------------- |
\| | | corner-shape-\* |
\| {`--`}corner-shape-base | | corner-shape-base |
\| {`--`}corner-shape-container | | corner-shape-container |
> NOTE: this is an emerging feature with limited browser support. Make sure to utilize progressive enhancement.
### Element Sizes
A roster of element sizes matching Tailwind's built-in `--type-*` scale. These are the basis for button, badge, chip, and field sizes. As well as enabling uniform [icons sizes](/docs/\[framework]/design/iconography#sizes). Can also be used with `size-*`, `w-*`, `h-*`, and more (ex: `size-elem-xl`).
\| Skeleton Theme Property | Tailwind @theme Property | Class |
\| ----------------------- | ------------------------ | ---------------------- |
\| | {`--`}spacing-elem-xs | `[property]-elem-xs` |
\| | {`--`}spacing-elem-sm | `[property]-elem-sm` |
\| | {`--`}spacing-elem-base | `[property]-elem-base` |
\| | {`--`}spacing-elem-lg | `[property]-elem-lg` |
\| | {`--`}spacing-elem-xl | `[property]-elem-xl` |
\| | {`--`}spacing-elem-2xl | `[property]-elem-2xl` |
\| | {`--`}spacing-elem-3xl | `[property]-elem-3xl` |
\| | {`--`}spacing-elem-4xl | `[property]-elem-4xl` |
\| | {`--`}spacing-elem-5xl | `[property]-elem-5xl` |
\| | {`--`}spacing-elem-6xl | `[property]-elem-6xl` |
\| | {`--`}spacing-elem-7xl | `[property]-elem-7xl` |
\| | {`--`}spacing-elem-8xl | `[property]-elem-8xl` |
\| | {`--`}spacing-elem-9xl | `[property]-elem-9xl` |
### Spacing
Integrates Tailwind's [spacing property](https://tailwindcss.com/docs/functions-and-directives#spacing-function) to modify [dynamic scaling](/docs/\[framework]/design/spacing) for various utility classes.
\| Skeleton Theme Property | Tailwind @theme Property | Class |
\| ----------------------- | ------------------------ | --------- |
\| {`--`}spacing | {`--`}spacing | (various) |
### Typography
Introduces a [typographic scale](https://designcode.io/typographic-scales) to all Tailwind [font sizes](https://tailwindcss.com/docs/font-size) and [line-height](https://tailwindcss.com/docs/line-height) properties using the following formula.
```plaintext
--text-{size}: calc({remSize} * var(--text-scaling));
--text-{size}--line-height: calc(calc(1 / {remSize}) * var(--text-scaling));
```
\| Skeleton Theme Property | Tailwind @theme Property | Class |
\| ----------------------- | ------------------------ | ----- |
\| {`--`}text-scaling | | |
#### Base
Controls the style of the base (aka global) default page text.
\| Skeleton Theme Property | Tailwind @theme Property | Class |
\| ------------------------------- | --------------------------- | ---------------------------- |
\| {`--`}typo-base--font-family | {`--`}font-typo-base | `font-typo-base` |
\| {`--`}typo-base--font-size | {`--`}text-typo-base | `text-typo-base` |
\| {`--`}typo-base--color-light | {`--`}color-typo-base-light | `[property]-typo-base-light` |
\| {`--`}typo-base--color-dark | {`--`}color-typo-base-dark | `[property]-typo-base-dark` |
\| {`--`}typo-base--line-height | {`--`}leading-typo-base | `leading-typo-base` |
\| {`--`}typo-base--font-weight | | |
\| {`--`}typo-base--font-style | | |
\| {`--`}typo-base--letter-spacing | {`--`}tracking-typo-base | `tracking-typo-base` |
\| {`--`}typo-base--font-stretch | | |
\| {`--`}typo-base--font-kerning | | |
\| {`--`}typo-base--text-shadow | {`--`}text-shadow-typo-base | `text-shadow-typo-base` |
\| {`--`}typo-base--word-spacing | | |
\| {`--`}typo-base--hyphens | | |
\| {`--`}typo-base--text-transform | | |
#### Heading
Controls the style of the heading text.
\| Skeleton Theme Property | Tailwind @theme Property | Class |
\| ---------------------------------- | ------------------------------ | ------------------------------- |
\| {`--`}typo-heading--font-family | {`--`}font-typo-heading | `font-typo-heading` |
\| {`--`}typo-heading--color-light | {`--`}color-typo-heading-light | `[property]-typo-heading-light` |
\| {`--`}typo-heading--color-dark | {`--`}color-typo-heading-dark | `[property]-typo-heading-dark` |
\| {`--`}typo-heading--font-weight | | |
\| {`--`}typo-heading--font-style | | |
\| {`--`}typo-heading--letter-spacing | {`--`}tracking-typo-heading | `tracking-typo-heading` |
\| {`--`}typo-heading--font-stretch | | |
\| {`--`}typo-heading--font-kerning | | |
\| {`--`}typo-heading--text-shadow | {`--`}text-shadow-typo-heading | `text-shadow-typo-heading` |
\| {`--`}typo-heading--word-spacing | | |
\| {`--`}typo-heading--hyphens | | |
\| {`--`}typo-heading--text-transform | | |
#### Anchor
Controls the style of anchor links.
\| Skeleton Theme Property | Tailwind @theme Property | Class |
\| ---------------------------------------------------- | ----------------------------- | ------------------------------ |
\| {`--`}typo-anchor--font-family | {`--`}font-typo-anchor | `font-typo-anchor` |
\| {`--`}typo-anchor--font-size | {`--`}text-typo-anchor | `text-typo-anchor` |
\| {`--`}typo-anchor--color-light | {`--`}color-typo-anchor-light | `[property]-typo-anchor-light` |
\| {`--`}typo-anchor--color-dark | {`--`}color-typo-anchor-dark | `[property]-typo-anchor-dark` |
\| {`--`}typo-anchor--line-height | {`--`}leading-typo-anchor | `leading-typo-anchor` |
\| {`--`}typo-anchor--font-weight | | |
\| {`--`}typo-anchor--font-style | | |
\| {`--`}typo-anchor--letter-spacing | {`--`}tracking-typo-anchor | `tracking-typo-anchor` |
\| {`--`}typo-anchor--font-stretch | | |
\| {`--`}typo-anchor--font-kerning | | |
\| {`--`}typo-anchor--text-shadow | {`--`}text-shadow-typo-anchor | `text-shadow-typo-anchor` |
\| {`--`}typo-anchor--word-spacing | | |
\| {`--`}typo-anchor--hyphens | | |
\| {`--`}typo-anchor--text-transform | | |
\| {`--`}typo-anchor--text-decoration-line | | |
\| {`--`}typo-anchor--text-decoration-color | | |
\| {`--`}typo-anchor--text-decoration-style | | |
\| {`--`}typo-anchor--text-decoration-thickness | | |
\| {`--`}typo-anchor--text-underline-offset | | |
\| {`--`}typo-anchor--text-underline-position | | |
\| {`--`}typo-anchor--hover--text-decoration-line | | |
\| {`--`}typo-anchor--hover--text-decoration-color | | |
\| {`--`}typo-anchor--hover--text-decoration-style | | |
\| {`--`}typo-anchor--hover--text-decoration-thickness | | |
\| {`--`}typo-anchor--hover--text-underline-offset | | |
\| {`--`}typo-anchor--hover--text-underline-position | | |
\| {`--`}typo-anchor--active--text-decoration-line | | |
\| {`--`}typo-anchor--active--text-decoration-color | | |
\| {`--`}typo-anchor--active--text-decoration-style | | |
\| {`--`}typo-anchor--active--text-decoration-thickness | | |
\| {`--`}typo-anchor--active--text-underline-offset | | |
\| {`--`}typo-anchor--active--text-underline-position | | |
\| {`--`}typo-anchor--focus--text-decoration-line | | |
\| {`--`}typo-anchor--focus--text-decoration-color | | |
\| {`--`}typo-anchor--focus--text-decoration-style | | |
\| {`--`}typo-anchor--focus--text-decoration-thickness | | |
\| {`--`}typo-anchor--focus--text-underline-offset | | |
\| {`--`}typo-anchor--focus--text-underline-position | | |
## @utility
Implements Skeleton's Tailwind-specific components and utilities.
View Utilities
### Presets
Provides a reusable set of canned [Preset](/docs/\[framework]/tailwind-utilities/presets) styles for use with buttons, badges, cards, and more.
### Tailwind Components
Allows you to style semantic HTML elements with utility classes.
doc.id.includes('tailwind-components/')} class="md:grid-cols-2" />
## Themes
Provides a curated set of handcrafted themes for Skeleton.
Browse Themes
***
## Arbitrary Syntax
If a certain Tailwind-generated utility class is not available to represent a Skeleton theme property, consider using [Tailwind's arbitrary syntax](https://tailwindcss.com/docs/adding-custom-styles#using-arbitrary-values) to supplement this.
```html
Heading Font Style
```
# Migrate from v4
Learn how to migrate from Skeleton v4 to the latest v5 release.
Skeleton v5 represents a notable update to the core API and theme layer. This improves and expands your theme's design tokens, introduces new Tailwind Components such as Disclosures, provides size options for buttons and form fields, establishes the new brand color properties, and more.
## Prerequisites
For older versions of Skeleton, please complete the following guides below before you proceed.
\| Path | Guide |
\| ---------------- | ----------------------------------------------------------------------------- |
\| Version v2 to v4 | [View Guide](https://v4.skeleton.dev/docs/svelte/get-started/migrate-from-v2) |
\| Version v3 to v4 | [View Guide](https://v4.skeleton.dev/docs/svelte/get-started/migrate-from-v3) |
We recommend you handle all migration changes on a dedicated feature branch, allowing you to easily revert if needed.
```bash
git checkout -b migration
```
Make sure you've accounted for the following:
* Your app is running the latest release of Skeleton v4.x (`4.15.2`)
* All critical dependencies have been updated (optional but recommended)
* Your app is in a fully functional state before you proceed
For `svelte`, the minimum peer dependency has been raised from `^5.29.0` to `^5.40.0`. React remains unchanged.
```bash
npm install svelte@latest
```
***
## Themes
### Preset Themes
Preset themes will automatically update with all changes. No action is required on your part.
### Custom Themes
We recommend importing custom themes into the Theme Generator to automatically convert to the new format. This will also allow you to configure any new or updated settings, while fine tuning the overall design.
Auto-Convert Themes →
> TIP: custom fonts will not be imported. You can, however, implement these via the **Typography** controls.
### Design Tokens
Please refer to the [Core API](/docs/\[framework]/get-started/core-api#base) documentation for a complete token reference. Refer to the [Cerberus](https://github.com/skeletonlabs/skeleton/blob/main/packages/skeleton/src/themes/cerberus.css) theme for a complete theme reference. We'll now cover all notable changes below.
#### Renamed
The following token keys have changed, each value remains the same.
**Base Typography**
\| v4 Token | v5 Token |
\| ------------------------ | ----------------------------- |
\| `--base-font-family` | `--typo-base--font-family` |
\| `--base-font-size` | `--typo-base--font-size` |
\| `--base-font-color` | `--typo-base--color-light` |
\| `--base-font-color-dark` | `--typo-base--color-dark` |
\| `--base-line-height` | `--typo-base--line-height` |
\| `--base-font-weight` | `--typo-base--font-weight` |
\| `--base-font-style` | `--typo-base--font-style` |
\| `--base-letter-spacing` | `--typo-base--letter-spacing` |
**Heading Typography**
\| v4 Token | v5 Token |
\| --------------------------- | -------------------------------- |
\| `--heading-font-family` | `--typo-heading--font-family` |
\| `--heading-font-color` | `--typo-heading--color-light` |
\| `--heading-font-color-dark` | `--typo-heading--color-dark` |
\| `--heading-font-weight` | `--typo-heading--font-weight` |
\| `--heading-font-style` | `--typo-heading--font-style` |
\| `--heading-letter-spacing` | `--typo-heading--letter-spacing` |
**Anchor Typography**
\| v4 Token | v5 Token |
\| -------------------------- | ------------------------------- |
\| `--anchor-font-family` | `--typo-anchor--font-family` |
\| `--anchor-font-size` | `--typo-anchor--font-size` |
\| `--anchor-font-color` | `--typo-anchor--color-light` |
\| `--anchor-font-color-dark` | `--typo-anchor--color-dark` |
\| `--anchor-line-height` | `--typo-anchor--line-height` |
\| `--anchor-font-weight` | `--typo-anchor--font-weight` |
\| `--anchor-font-style` | `--typo-anchor--font-style` |
\| `--anchor-letter-spacing` | `--typo-anchor--letter-spacing` |
**Anchor Decoration**
\| v4 Token | v5 Token |
\| --------------------------------- | --------------------------------------------- |
\| `--anchor-text-decoration` | `--typo-anchor--text-decoration-line` |
\| `--anchor-text-decoration-hover` | `--typo-anchor--hover--text-decoration-line` |
\| `--anchor-text-decoration-active` | `--typo-anchor--active--text-decoration-line` |
\| `--anchor-text-decoration-focus` | `--typo-anchor--focus--text-decoration-line` |
**Root Background**
\| v4 Token | v5 Token |
\| ------------------------------ | ----------------------- |
\| `--body-background-color` | `--color-root-bg-light` |
\| `--body-background-color-dark` | `--color-root-bg-dark` |
#### Added
The following tokens expand the capabilities of your themes. Recommended default values have been provided.
**Typography**
\| Token | Default |
\| ----------------------------- | ------- |
\| `--typo-base--font-stretch` | inherit |
\| `--typo-base--font-kerning` | inherit |
\| `--typo-base--text-shadow` | inherit |
\| `--typo-base--word-spacing` | inherit |
\| `--typo-base--hyphens` | inherit |
\| `--typo-base--text-transform` | inherit |
\| Token | Default |
\| -------------------------------- | ------- |
\| `--typo-heading--font-stretch` | inherit |
\| `--typo-heading--font-kerning` | inherit |
\| `--typo-heading--text-shadow` | inherit |
\| `--typo-heading--word-spacing` | inherit |
\| `--typo-heading--hyphens` | inherit |
\| `--typo-heading--text-transform` | inherit |
\| Token | Default |
\| ------------------------------- | ------- |
\| `--typo-anchor--font-stretch` | inherit |
\| `--typo-anchor--font-kerning` | inherit |
\| `--typo-anchor--text-shadow` | inherit |
\| `--typo-anchor--word-spacing` | inherit |
\| `--typo-anchor--hyphens` | inherit |
\| `--typo-anchor--text-transform` | inherit |
**Anchor Decorations**
\| Token | Default |
\| ------------------------------------------ | ------- |
\| `--typo-anchor--text-decoration-color` | inherit |
\| `--typo-anchor--text-decoration-style` | inherit |
\| `--typo-anchor--text-decoration-thickness` | inherit |
\| `--typo-anchor--text-underline-offset` | inherit |
\| `--typo-anchor--text-underline-position` | inherit |
\| Token | Default |
\| ------------------------------------------------- | ------- |
\| `--typo-anchor--hover--text-decoration-color` | inherit |
\| `--typo-anchor--hover--text-decoration-style` | inherit |
\| `--typo-anchor--hover--text-decoration-thickness` | inherit |
\| `--typo-anchor--hover--text-underline-offset` | inherit |
\| `--typo-anchor--hover--text-underline-position` | inherit |
\| Token | Default |
\| -------------------------------------------------- | ------- |
\| `--typo-anchor--active--text-decoration-color` | inherit |
\| `--typo-anchor--active--text-decoration-style` | inherit |
\| `--typo-anchor--active--text-decoration-thickness` | inherit |
\| `--typo-anchor--active--text-underline-offset` | inherit |
\| `--typo-anchor--active--text-underline-position` | inherit |
\| Token | Default |
\| ------------------------------------------------- | ------- |
\| `--typo-anchor--focus--text-decoration-color` | inherit |
\| `--typo-anchor--focus--text-decoration-style` | inherit |
\| `--typo-anchor--focus--text-decoration-thickness` | inherit |
\| `--typo-anchor--focus--text-underline-offset` | inherit |
\| `--typo-anchor--focus--text-underline-position` | inherit |
**Edges**
\| Key | Default |
\| ------------------------- | ------- |
\| `--default-outline-width` | 1px |
**Corner Shapes**
\| Key | Default |
\| -------------------------- | ------- |
\| `--corner-shape-base` | initial |
\| `--corner-shape-container` | initial |
**Colors**
\| Key | Default |
\| ------------------------------ | --------------------------------- |
\| `--color-brand-light` | var(--color-primary-500) |
\| `--color-brand-contrast-light` | var(--color-primary-contrast-500) |
\| `--color-brand-dark` | var(--color-primary-500) |
\| `--color-brand-contrast-dark` | var(--color-primary-contrast-500) |
#### Removed
\| Key | Notes |
\| ------------------------ | ----------------------------------------------------------------------------------------------- |
\| `--default-divide-width` | This is a bugfix; the value is derived from `--default-border-width` |
\| `--heading-font-size` | Now derived from the [typographic scale](/docs/\[framework]/design/typography#typographic-scale) |
\| `--heading-line-height` | Now derived from the [typographic scale](/docs/\[framework]/design/typography#typographic-scale) |
***
## Utility Classes
Several utility classes have been replaced or removed. Relevant replacements are noted below.
\| v4 Class | v5 Replacement | Docs |
\| ----------------------- | ---------------------------------------------------------- | ---------------------------------------------------------------- |
\| `card-hover` | The `card` utility auto-applies styles to ``/`