# Changelog

All notable changes to `@unily/resin-tokens` will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [0.2.0-beta.8] - 2026-09-15

### Fixed

- The `t2-variables-override.manifest.json` published in `0.2.0-beta.7` exposed 105 `var(--rds-futures-*)` defaults (96 colours, 4 shadow colours, and the 5 `font-family` variables). Futures tokens are internal to the design system and have no JSON export, so consumers could not resolve those defaults. The generator now inlines every futures reference to its literal value, matching the original manifest, while leaving `--rds-t2-*` and `--rds-t1-*` aliases untouched. The T3 manifest is unchanged.

## [0.2.0-beta.7] - 2026-09-04

### Added

- New T2 variables override manifest at `dist/utilities/overrides/t2-variables-override.manifest.json`, listing every `--rds-t2-*` variable grouped by category (Color, Layout, Shadow, Shape, Typography). It follows the same schema (`1.1.0`) and `modes.dark` convention as the T3 manifest, exposing dark values only where they differ under `[data-theme="dark"]`. Exported as `@unily/resin-tokens/utilities/overrides/t2-variables`, with new `T2VariableEntry`, `T2VariableGroup`, and `T2VariablesOverrideManifest` types in `preset-override.types.d.ts`.
- `CHANGELOG.md` now ships in the published npm package (added to the package `files` allowlist), alongside `LICENSE.md` and `THIRD_PARTY_LICENSES.md`, so release notes are readable directly from `node_modules/@unily/resin-tokens`.

#### Toast Component Tokens (T1 / T3 Responsive)

New `toast.max-width` tokens in `t1-component-values.json` (emitted as `--rds-t1-toast-max-width-{desktop,tablet,mobile}`), aliased into `component.toast.*` across all three T3 responsive files:

| CSS Variable | Desktop | Tablet | Mobile |
|---|---|---|---|
| `--rds-t3-component-toast-max-width` | `28rem` | `28rem` | `22rem` |

#### New Sizing Primitives — `pico-6` and `half-05` (T1)

| CSS Variable | Value |
|---|---|
| `--rds-t1-sizing-pico-6` | `0.375rem` (6px) |
| `--rds-t1-sizing-half-05` | `0.03125rem` (0.5px) |

Aliased into new T2 / T3 tokens:

| CSS Variable | Value |
|---|---|
| `--rds-t2-layout-component-sizing-mini-{desktop,tablet,mobile}` | `var(--rds-t1-sizing-pico-6)` |
| `--rds-t3-component-sizing-mini` | `0.375rem` (all breakpoints; slots between `nano` 0.25rem and `micro` 0.5rem) |
| `--rds-t2-shape-utility-border-width-half` | `var(--rds-t1-sizing-half-05)` |
| `--rds-t3-border-utility-width-thin` | `var(--rds-t2-shape-utility-border-width-half)` |

#### New `background.interactive` Scheme Group (T3 Multi-Theme)

New 4%-alpha interactive background tint across all six schemes — **6 new CSS variables**. Dark values apply under `[data-theme="dark"]` where they differ:

| CSS Variable | Light | Dark |
|---|---|---|
| `--rds-t3-background-interactive-base` | `var(--rds-t2-color-alpha-4)` | `var(--rds-t2-color-alpha-light-4)` |
| `--rds-t3-background-interactive-alt` | `var(--rds-t2-color-alpha-4)` | `var(--rds-t2-color-alpha-light-4)` |
| `--rds-t3-background-interactive-inverse` | `var(--rds-t2-color-alpha-light-4)` | — |
| `--rds-t3-background-interactive-inverse-alt` | `var(--rds-t2-color-alpha-light-4)` | — |
| `--rds-t3-background-interactive-expressive` | `var(--rds-t2-color-alpha-light-4)` | — |
| `--rds-t3-background-interactive-expressive-alt` | `var(--rds-t2-color-alpha-4)` | `var(--rds-t2-color-alpha-light-4)` |

### Changed

#### Structure Backgrounds More Opaque (T3 Multi-Theme)

| CSS Variable | Light: Old → New | Dark: Old → New |
|---|---|---|
| `--rds-t3-background-structure-base` | `alpha-light-50` → `alpha-light-80` | `alpha-50` → `alpha-70` |
| `--rds-t3-background-structure-alt` | `alpha-light-80` → `alpha-light-90` | `alpha-80` → `alpha-90` |

(Values shorthand for `var(--rds-t2-color-…)`.)

#### Expressive Scheme Colors Reworked (T3 Multi-Theme)

| CSS Variable | Light: Old → New | Dark: Old → New |
|---|---|---|
| `--rds-t3-background-surface-expressive` | `primary-700` → `primary-800` | `primary-800` (unchanged) |
| `--rds-t3-background-structure-expressive` | `accent-1-700` → `primary-700` | `accent-1-800` (unchanged) |
| `--rds-t3-ink-on-background-expressive-default` | `neutral-000` → `accent-1-100` | `neutral-000` (unchanged) |
| `--rds-t3-ink-on-background-expressive-subtle` | `neutral-200` → `accent-1-200` | `neutral-200` (unchanged) |
| `--rds-t3-ink-on-background-expressive-vibrant` | `accent-1-200` → `neutral-000` | `accent-1-300` (unchanged) |

(Values shorthand for `var(--rds-t2-color-…)`.)

#### Base & Alt Interactive Ink Darkened (T3 Multi-Theme)

Light-mode values only; dark values are unchanged. The same change applies to both the `base` and `alt` schemes:

| CSS Variable (`{scheme}` = `base`, `alt`) | Old Value | New Value |
|---|---|---|
| `--rds-t3-ink-on-background-{scheme}-interactive-hover` | `var(--rds-t2-color-action-500)` | `var(--rds-t2-color-action-700)` |
| `--rds-t3-ink-on-background-{scheme}-interactive-active` | `var(--rds-t2-color-secondary-700)` | `var(--rds-t2-color-secondary-800)` |
| `--rds-t3-ink-on-background-{scheme}-interactive-current` | `var(--rds-t2-color-action-700)` | `var(--rds-t2-color-action-800)` |

#### Button Disabled States Reworked (T3 Multi-Theme)

**Base scheme** — dark-mode disabled border/label/icon lightened for contrast (light values unchanged):

| CSS Variable | Dark: Old → New |
|---|---|
| `--rds-t3-component-button-base-primary-disabled-{label,icon}` | `neutral-700` → `neutral-200` |
| `--rds-t3-component-button-base-secondary-disabled-{border,label,icon}` | `neutral-700` → `neutral-300` |
| `--rds-t3-component-button-base-tertiary-disabled-{border,label,icon}` | `neutral-700` → `neutral-300` |
| `--rds-t3-component-button-base-destructive-disabled-{border,label,icon}` | `neutral-700` (no override) → `neutral-200` |

**Inverse scheme** — disabled colors are now theme-invariant (dark overrides removed) and remapped:

| CSS Variable | Old Light | Old Dark | New (both) |
|---|---|---|---|
| `--rds-t3-component-button-inverse-primary-disabled-{fill,fill-2}` | `neutral-500` | `neutral-600` | `neutral-600` |
| `--rds-t3-component-button-inverse-primary-disabled-{label,icon}` | `neutral-700` | `neutral-800` | `neutral-200` |
| `--rds-t3-component-button-inverse-primary-disabled-border` | `alpha-0` | `alpha-10` | `alpha-0` |
| `--rds-t3-component-button-inverse-secondary-disabled-{border,label,icon}` | `neutral-700` | `neutral-800` | `neutral-300` |
| `--rds-t3-component-button-inverse-secondary-disabled-{fill,fill-2}` | `alpha-0` | `alpha-10` | `alpha-0` |
| `--rds-t3-component-button-inverse-tertiary-disabled-{border,label,icon}` | `neutral-700` | `neutral-800` | `neutral-300` |
| `--rds-t3-component-button-inverse-destructive-disabled-{border,label,icon}` | `neutral-700` | `neutral-800` | `neutral-200` |
| `--rds-t3-component-button-inverse-destructive-disabled-{fill,fill-2}` | `alpha-0` | `alpha-10` | `alpha-0` |

(Values shorthand for `var(--rds-t2-color-…)`.)

#### Snapshots

- Updated design token snapshots to reflect the new and changed tokens above.

## [0.2.0-beta.6] - 2026-08-13

### Changed

- Renamed design tokens across the brand primitives (`t2-brand-primitives.json`) and the T3 multi-theme and responsive (desktop, tablet, mobile) layers for consistency. Consumers referencing the affected token names will need to update to the new names.
- Updated token snapshots to reflect the renamed tokens.

## [0.2.0-beta.5] - 2026-07-21

### Added

#### Dark Theme Support (`[data-theme="dark"]`)

The T3 multi-theme layer now ships with dark theme overrides. `tokens/t3-multi-theme.json` is exported by the Design Tokens Exporter Figma plugin (>= 1.5.0) as a single file: the collection's base mode provides the token `$value`s, and each differing token carries its dark value as a Terrazzo mode (`$extensions.mode.default-dark`). No merge step is needed in this repo.

The generated `dist/variables/index.css` keeps base values in `:root` (now also declaring `color-scheme: light`) and adds a `[data-theme="dark"]` block containing only the 340 variables that change in dark mode (plus the AI gradient composites), with `color-scheme: dark`. Activate dark theme with:

```html
<html data-theme="dark">
```

Shadow tokens (`--rds-t3-shadows-*`) and the `.rds-t3-shadow-*` utility classes flip automatically via the variable cascade.

#### Dark values in the T3 variables override manifest (schema 1.1.0)

`dist/utilities/overrides/t3-variables-override.manifest.json` is now theme-aware: every variable whose value changes under `[data-theme="dark"]` carries the dark value in an additive `modes` field, e.g.

```json
{
  "targetVar": "--rds-t3-background-surface-base",
  "defaultValue": "var(--rds-t2-color-neutral-000)",
  "modes": { "dark": "var(--rds-t2-color-neutral-900)" }
}
```

`modes` is present only where the dark value differs from `defaultValue`, so it doubles as the "changes in dark mode" marker. `schemaVersion` bumps to `1.1.0`; consumers reading only `defaultValue` are unaffected. The `T3VariableEntry` type in `preset-override.types.d.ts` documents the new field. The preset manifests (elevation/radius/density) are unchanged — the dark block declares no T2 variables.

### Changed

- `ink.on-background.*.interactive-active` tokens now resolve to `color.action.*` / `color.secondary.*` values from the new base export (previously `color.secondary.auto-shade--noexport` / `color.action.*` mix from the old `t3-multi-theme.json`); 6 `--rds-t3-ink-on-background-*-interactive-active` variables change value.

### Fixed

- Composite AI gradient variables (`--rds-t3-ai-gradients-*`) previously referenced non-existent `var(--rds-t3-color-*)` custom properties for their color stops. The gradient generator now derives each stop's variable name from the alias target's own tier, emitting working `var(--rds-t2-color-*)` references.

## [0.2.0-beta.4] - 2026-07-14

### Added

#### Modal Dimension Tokens (T1 / T3 Responsive)

New `modal.max-width.{small,medium}` and `modal.min-width` tokens in `t1-component-values.json`, aliased into `component.modal.*` across all three T3 responsive files:

| CSS Variable | Desktop | Tablet | Mobile |
|---|---|---|---|
| `--rds-t3-component-modal-max-width-small` | `29rem` | `29rem` | `24.375rem` |
| `--rds-t3-component-modal-max-width-medium` | `40rem` | `40rem` | `24.375rem` |
| `--rds-t3-component-modal-min-width` | `21.375rem` | `21.375rem` | `0rem` |

#### New Theme Scheme Variants — `alt` and `expressive-alt` (T3 Multi-Theme)

`background.surface`, `background.structure`, `ink.on-background`, and `border` now expose the full set of scheme variants (`base`, `alt`, `inverse`, `inverse-alt`, `expressive`, `expressive-alt`). Previously `alt` existed for surface only, and `expressive` / `inverse-alt` were missing or only partially implemented for `ink.on-background` and `border`.

**`ink.on-background`** — two brand-new schemes (`alt`, `inverse-alt`), plus `expressive` promoted from a single leaf value to a full first-class scheme alongside new `expressive-alt`. Each scheme carries the standard 8-token shape (`default`, `subtle`, `vibrant`, `interactive`, `interactive-hover`, `interactive-active`, `interactive-current`, `focus-ring`) — **32 new CSS variables**:

| New CSS Variable Pattern | Example |
|---|---|
| `--rds-t3-ink-on-background-alt-*` | `--rds-t3-ink-on-background-alt-default` → `var(--rds-t2-color-neutral-800)` |
| `--rds-t3-ink-on-background-inverse-alt-*` | `--rds-t3-ink-on-background-inverse-alt-default` → `var(--rds-t2-color-neutral-000)` |
| `--rds-t3-ink-on-background-expressive-*` | `--rds-t3-ink-on-background-expressive-default` → `var(--rds-t2-color-neutral-000)` |
| `--rds-t3-ink-on-background-expressive-alt-*` | `--rds-t3-ink-on-background-expressive-alt-default` → `var(--rds-t2-color-accent-1-default-auto-shade)` |

**`border`** — four new scheme groups (`alt`, `inverse-alt`, `expressive`, `expressive-alt`), each with `structural.{no-border,bold,default,subtle,action}` and `accent.{one,two,three}` — **32 new CSS variables**:

| New CSS Variable Pattern | Example |
|---|---|
| `--rds-t3-border-alt-structural-*` / `--rds-t3-border-alt-accent-*` | `--rds-t3-border-alt-structural-bold` → `var(--rds-t2-color-secondary-dark)` |
| `--rds-t3-border-inverse-alt-structural-*` / `-accent-*` | `--rds-t3-border-inverse-alt-structural-bold` → `var(--rds-t2-color-accent-1-light)` |
| `--rds-t3-border-expressive-structural-*` / `-accent-*` | `--rds-t3-border-expressive-structural-bold` → `var(--rds-t2-color-accent-1-light)` |
| `--rds-t3-border-expressive-alt-structural-*` / `-accent-*` | `--rds-t3-border-expressive-alt-structural-bold` → `var(--rds-t2-color-accent-1-default)` |

**`background.surface`** and **`background.structure`** — new leaves for the same variants:

| CSS Variable | Value |
|---|---|
| `--rds-t3-background-surface-inverse-alt` | `var(--rds-t2-color-neutral-800)` |
| `--rds-t3-background-surface-expressive-alt` | `var(--rds-t2-color-accent-1-light-auto-tint)` |
| `--rds-t3-background-structure-expressive-alt` | `var(--rds-t2-color-accent-1-lightest)` |

### Changed

#### `ink.on-background` — `expressive` renamed to `vibrant` — **BREAKING**

| Old CSS Variable | New CSS Variable | Value |
|---|---|---|
| `--rds-t3-ink-on-background-base-expressive` | `--rds-t3-ink-on-background-base-vibrant` | `var(--rds-t2-color-primary-auto-shade)` (unchanged) |
| `--rds-t3-ink-on-background-inverse-expressive` | `--rds-t3-ink-on-background-inverse-vibrant` | `var(--rds-t2-color-accent-1-light)` (unchanged) |

#### Value Refinements (T3 Multi-Theme)

| CSS Variable | Old Value | New Value |
|---|---|---|
| `--rds-t3-background-structure-expressive` | `var(--rds-t2-color-accent-1-light-auto-tint)` | `var(--rds-t2-color-accent-1-default-auto-shade)` |
| `--rds-t3-ink-on-fill-subtle-status-success` | `var(--rds-t2-color-success-dark)` | `var(--rds-t2-color-success-default-auto-shade)` |
| `--rds-t3-ink-on-fill-subtle-status-error` | `var(--rds-t2-color-error-dark)` | `var(--rds-t2-color-error-default-auto-shade)` |
| `--rds-t3-ink-on-fill-subtle-status-info` | `var(--rds-t2-color-info-dark)` | `var(--rds-t2-color-info-default-auto-shade)` |
| `--rds-t3-border-base-structural-subtle` | `var(--rds-t2-color-neutral-000)` | `var(--rds-t2-color-primary-light-auto-tint)` |
| `--rds-t3-border-inverse-structural-default` | `var(--rds-t2-color-neutral-950)` | `var(--rds-t2-color-neutral-500)` |

#### Snapshots

- Updated design token snapshots to reflect the new modal dimensions, new scheme variants, and value refinements above.

### Removed

#### `background.structure` status/neutral leaves — **BREAKING**

Removed from `background.structure`, which is now scheme-only (`base` / `alt` / `inverse` / `inverse-alt` / `alpha` / `expressive` / `expressive-alt`). Use `border.status.*` (unchanged) for status-driven structural coloring.

| Removed CSS Variable | Old Value |
|---|---|
| `--rds-t3-background-structure-neutral` | `var(--rds-t2-color-neutral-400)` |
| `--rds-t3-background-structure-success` | `var(--rds-t2-color-success-light)` |
| `--rds-t3-background-structure-error` | `var(--rds-t2-color-error-light)` |
| `--rds-t3-background-structure-warning` | `var(--rds-t2-color-warning-light)` |
| `--rds-t3-background-structure-info` | `var(--rds-t2-color-info-light)` |

#### `ink.on-background.status.*` — **BREAKING**

Removed in favor of the expanded per-scheme `ink.on-background.{scheme}.*` groups above; no direct 1:1 replacement.

| Removed CSS Variable | Old Value |
|---|---|
| `--rds-t3-ink-on-background-status-success` | `var(--rds-t2-color-success-dark)` |
| `--rds-t3-ink-on-background-status-error` | `var(--rds-t2-color-error-dark)` |
| `--rds-t3-ink-on-background-status-warning` | `var(--rds-t2-color-warning-dark)` |
| `--rds-t3-ink-on-background-status-info` | `var(--rds-t2-color-info-default)` |

## [0.2.0-beta.3] - 2026-07-06

### Added

#### Component Padding `big` Preset (T1 / T2)

New `density.component.padding.big` preset group in `t1-global-presets.json` with compact / standard / spacious densities across all breakpoints:

| CSS Variable | Value |
|---|---|
| `--rds-t1-density-component-padding-big-compact-desktop-24` | `var(--rds-t1-spacing-regular-24)` |
| `--rds-t1-density-component-padding-big-compact-tablet-20` | `var(--rds-t1-spacing-slim-20)` |
| `--rds-t1-density-component-padding-big-compact-mobile-12` | `var(--rds-t1-spacing-intimate-12)` |
| `--rds-t1-density-component-padding-big-standard-desktop-32` | `var(--rds-t1-spacing-medium-32)` |
| `--rds-t1-density-component-padding-big-standard-tablet-24` | `var(--rds-t1-spacing-regular-24)` |
| `--rds-t1-density-component-padding-big-standard-mobile-16` | `var(--rds-t1-spacing-base-16)` |
| `--rds-t1-density-component-padding-big-spacious-desktop-40` | `var(--rds-t1-spacing-large-40)` |
| `--rds-t1-density-component-padding-big-spacious-tablet-32` | `var(--rds-t1-spacing-medium-32)` |
| `--rds-t1-density-component-padding-big-spacious-mobile-24` | `var(--rds-t1-spacing-regular-24)` |

Plus a matching T2 `layout.component.padding.big` entry in `t2-brand-primitives.json` (`--rds-t2-layout-component-padding-big-{desktop,tablet,mobile}`) referencing the spacious presets.

#### Component Sizing Scale (T2)

New `layout.component.sizing.*` group in `t2-brand-primitives.json` — 12 sizes × 3 breakpoints (`--rds-t2-layout-component-sizing-{size}-{breakpoint}`):

| Size | Desktop | Tablet | Mobile |
|---|---|---|---|
| `pico` | `sizing.micro-2` | `sizing.micro-2` | `sizing.micro-2` |
| `nano` | `sizing.miniature-4` | `sizing.miniature-4` | `sizing.miniature-4` |
| `micro` | `sizing.tiny-8` | `sizing.tiny-8` | `sizing.tiny-8` |
| `tiny` | `sizing.small-12` | `sizing.small-12` | `sizing.small-12` |
| `small` | `sizing.base-16` | `sizing.base-16` | `sizing.base-16` |
| `medium` | `sizing.intermediate-20` | `sizing.intermediate-20` | `sizing.base-16` |
| `large` | `sizing.regular-24` | `sizing.regular-24` | `sizing.intermediate-20` |
| `big` | `sizing.bigger-28` | `sizing.bigger-28` | `sizing.regular-24` |
| `huge` | `sizing.medium-32` | `sizing.medium-32` | `sizing.bigger-28` |
| `massive` | `sizing.bigger-48` | `sizing.bigger-48` | `sizing.medium-32` |
| `giant` | `sizing.huge-64` | `sizing.huge-64` | `sizing.bigger-48` |
| `colossal` | `sizing.vast-96` | `sizing.massive-80` | `sizing.huge-64` |

#### New T3 Responsive Sizing Steps

`component.sizing` in the T3 responsive files gained three new small steps, emitted with responsive overrides for all breakpoints:

| CSS Variable | Resolves to (desktop / tablet / mobile) |
|---|---|
| `--rds-t3-component-sizing-pico` | `0.125rem` (all breakpoints) |
| `--rds-t3-component-sizing-nano` | `0.25rem` (all breakpoints) |
| `--rds-t3-component-sizing-micro` | `0.5rem` (all breakpoints) |

#### Action Tabs Component Tokens (T3 Locked)

New `component.action-tabs` group in `t3-locked-futures.json`:

| CSS Variable | Value |
|---|---|
| `--rds-t3-locked-component-action-tabs-fill-1` | `var(--rds-futures-color-brand-neutral-0)` |
| `--rds-t3-locked-component-action-tabs-fill-2` | `var(--rds-futures-color-brand-blue-0)` |
| `--rds-t3-locked-component-action-tabs-fill-tab` | `var(--rds-futures-color-brand-blue-50)` |
| `--rds-t3-locked-component-action-tabs-border` | `var(--rds-futures-color-brand-neutral-0)` |
| `--rds-t3-locked-component-action-tabs-label-default` | `var(--rds-futures-color-brand-neutral-600)` |
| `--rds-t3-locked-component-action-tabs-label-hover` | `var(--rds-futures-color-brand-purple-700)` |
| `--rds-t3-locked-component-action-tabs-label-active` | `var(--rds-futures-color-brand-neutral-700)` |
| `--rds-t3-locked-component-action-tabs-label-disabled` | `var(--rds-futures-color-brand-neutral-400)` |

### Changed

#### Futures Primitives Color Adjustments (T0)

| CSS Variable | Old Value | New Value |
|---|---|---|
| `--rds-futures-color-brand-blue-50` | `#d6e0f5` | `#f1f4fc` |
| `--rds-futures-color-brand-blue-100` | `#afc7f4` | `#c3dafd` |
| `--rds-futures-color-brand-neutral-600` | `#4c4c4c` | `#505050` |

These ripple through every T2/T3 semantic token that references the blue and neutral ramps.

#### Bold Status Fills Lightened (T3 Multi-Theme)

All four `fill.bold.status.*` tokens moved from `default` to `auto-tint` weights:

| CSS Variable | Old Value | New Value |
|---|---|---|
| `--rds-t3-fill-bold-status-success` | `var(--rds-t2-color-success-default)` | `var(--rds-t2-color-success-auto-tint)` |
| `--rds-t3-fill-bold-status-warning` | `var(--rds-t2-color-warning-default)` | `var(--rds-t2-color-warning-auto-tint)` |
| `--rds-t3-fill-bold-status-error` | `var(--rds-t2-color-error-default)` | `var(--rds-t2-color-error-auto-tint)` |
| `--rds-t3-fill-bold-status-info` | `var(--rds-t2-color-info-default)` | `var(--rds-t2-color-info-auto-tint)` |

#### Button State Colors (T3 Multi-Theme)

Base primary **disabled** state re-mapped to a lighter fill with darker label/icon:

| CSS Variable | Old Value | New Value |
|---|---|---|
| `--rds-t3-component-button-base-primary-disabled-fill` | `var(--rds-t2-color-neutral-500)` | `var(--rds-t2-color-neutral-200)` |
| `--rds-t3-component-button-base-primary-disabled-border` | `var(--rds-t2-color-action-default)` | `var(--rds-t2-color-neutral-300)` |
| `--rds-t3-component-button-base-primary-disabled-label` | `var(--rds-t2-color-neutral-300)` | `var(--rds-t2-color-neutral-500)` |
| `--rds-t3-component-button-base-primary-disabled-icon` | `var(--rds-t2-color-neutral-300)` | `var(--rds-t2-color-neutral-500)` |
| `--rds-t3-component-button-base-primary-disabled-fill-2` | `var(--rds-t2-color-neutral-500)` | `var(--rds-t2-color-neutral-200)` |

Inverse primary **active** state:

| CSS Variable | Old Value | New Value |
|---|---|---|
| `--rds-t3-component-button-inverse-primary-active-fill` | `var(--rds-t2-color-action-light-auto-shade)` | `var(--rds-t2-color-action-light)` |
| `--rds-t3-component-button-inverse-primary-active-border` | `var(--rds-t2-color-alpha-0)` | `var(--rds-t2-color-primary-light-auto-tint)` |

#### Input Placeholder Contrast (T3 Locked)

| CSS Variable | Old Value | New Value |
|---|---|---|
| `--rds-t3-locked-component-input-wip-base-default-placeholder` | `var(--rds-futures-color-brand-neutral-400)` | `var(--rds-futures-color-brand-neutral-600)` |

#### T3 Responsive Sizing Re-aliased onto T2 (no value change)

The existing `component.sizing.{tiny,small,medium,large,big,huge,massive,giant,colossal}` tokens in all three responsive files now reference the new T2 `layout.component.sizing.*` tokens instead of T1 `sizing.*` primitives. Generated `--rds-t3-component-sizing-*` variables now point at `--rds-t2-layout-component-sizing-*` intermediates, but **all resolved values are unchanged**.

## [0.2.0-beta.2] - 2026-06-09

### Changed

- Updated T3 multi-theme and responsive token values
- Refreshed generated CSS custom properties and snapshots

## [0.2.0-beta.1] - 2026-06-08

### Changed

Value changes to generated CSS custom properties in `dist/variables/index.css`, sourced from updates to `t3-multi-theme.json` and `t3-responsive-mobile.json`. All variable **names** are unchanged.

#### T3 Multi-Theme — Border & Input Field Colors

| CSS Variable | Old Value | New Value |
|---|---|---|
| `--rds-t3-border-base-structural-subtle` | `var(--rds-t2-color-neutral-100)` | `var(--rds-t2-color-neutral-000)` |
| `--rds-t3-component-input-base-default-border` | `var(--rds-t2-color-neutral-100)` | `var(--rds-t2-color-neutral-300)` |
| `--rds-t3-component-input-base-disabled-border` | `var(--rds-t2-color-neutral-200)` | `var(--rds-t2-color-neutral-300)` |
| `--rds-t3-component-input-inverse-default-border` | `var(--rds-t2-color-neutral-500)` | `var(--rds-t2-color-neutral-200)` |

#### T3 Responsive — CTA Button Min-Width (mobile / `:root`)

| CSS Variable | Old Value | New Value |
|---|---|---|
| `--rds-t3-component-cta-button-min-width-small` | `5.875rem` | `6.25rem` |
| `--rds-t3-component-cta-button-min-width-medium` | `11.25rem` | `8rem` |
| `--rds-t3-component-cta-button-min-width-large` | `11.25rem` | `10.125rem` |

> These three were converted from `{cta-button.min-width.*.mobile}` token references to hard-coded `rem` literals in `t3-responsive-mobile.json`. The values shown are the mobile/base declarations emitted at `:root`.

### Notes

The following edits reorder source token JSON only and produce **no change** to generated CSS variable names or values:

- `component.scrollbar` group moved within `t3-locked-futures.json`.
- `split-card.image-height` token reordered ahead of `ai-input` in `t3-responsive-mobile.json`, `t3-responsive-tablet.json`, and `t3-responsive-desktop.json`.

## [0.2.0-beta.0] - 2026-05-12

### Added

#### Poppins Font Family
- Added the **Poppins** font family (Light 300, Regular 400, Medium 500, Bold 700) under `assets/fonts/Poppins/`, alongside a per-family `font-face.css` declaring all weights with `font-display: swap`.

#### Font Build Pipeline
- `scripts/build.mjs` now **auto-discovers** every folder under `assets/fonts/<Family>/`, copies its `.ttf` files into `dist/fonts/<Family>/`, and concatenates each folder's `font-face.css` into a single bundled `dist/fonts/fonts.css` with `url(...)` references rewritten to be folder-prefixed (`./<Family>/<file>.ttf`). Adding a new font is now a drop-in operation: ship a folder containing `.ttf` files plus a `font-face.css` and no script changes are needed.

#### `alpha-light` Color Scale (T0 / T1)
- New translucent-white scale `color.brand.alpha-light.{0,10,20,30,40,50,60,70,80,90,100}` (white at 0 % → 100 % opacity). Mirrored at T2 as `color.alpha-light.*`, enabling on-dark overlay surfaces.

#### Extended `alpha` Color Scale (T0 / T1)
- The translucent-black `color.brand.alpha.*` scale was extended from `{0, 20, 40, 80}` to the full `{0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100}` set, and propagated through T2 (`color.alpha.*`) for use in on-light overlay surfaces.

#### Two-fill Button Tokens (T3)
- All interactive button color slots in `t3-multi-theme.json` (primary / secondary / action / AI / state / status surfaces) now expose a second fill via a `fill-2` token alongside the existing fill. Enables gradient or two-tone button styling without consumers having to plumb two custom variables.

#### Global Scrollbar Styling
- New `scripts/scrollbar-overrides.mjs` build step that appends global scrollbar pseudo-element rules to the generated `dist/variables/index.css`, wired into `scripts/build.mjs`. Consumers importing `@unily/resin-tokens/variables` now get consistent, design-token-driven scrollbars out of the box.
  - Uses the existing `--rds-t3-locked-component-scrollbar-*` tokens (width, radius, on-light, on-dark) for colour and shape.
  - Cross-browser coverage: Firefox `scrollbar-width` / `scrollbar-color` (gated behind `@supports not selector(::-webkit-scrollbar)`) and `::-webkit-scrollbar-*` pseudo-elements for Chromium/Safari/Edge.
  - Output is delimited by `/* [RESIN:scrollbar-overrides:start] */` and `/* [RESIN:scrollbar-overrides:end] */` markers so the rules can be regenerated idempotently.
- Added `tests/scrollbar-overrides.test.cjs` to lock in the generated CSS contract.

### Changed

#### Brand color rename — **BREAKING**
- The `color.brand.combi.*` scale was renamed to `color.brand.purple.*` across all source token files (`futures-primitives.json`, `t2-brand-primitives.json`, `t3-locked-futures.json`, `t3-multi-theme.json`), and its hex values were refreshed (e.g. `combi.500: #452fa0` → `purple.500: #3615bc`, with the rest of the ramp updated to match).
- **Impact**: any consumer reading the primitive CSS variables directly (e.g. `--rds-t1-color-brand-combi-500`) must migrate to `--rds-t1-color-brand-purple-500`. Semantic T2/T3 variables (`color.primary.*`, `color.action.*`, etc.) keep the same names but now resolve to the new purple values.

#### Default body / meta font family — **BREAKING**
- `typography.font-family.body-futures` and `typography.font-family.meta-futures` changed from `TT Neoris` to `Poppins`. Consumers relying on the default body / meta font stack will see a typeface change. Heading typography is unaffected.

#### Typography wiring fix
- All `heading.*.font-family` references in `t2-brand-primitives.json` now point to `{typography.font-family.heading}` instead of `{typography.font-family.body}`, so heading presets correctly resolve to the heading typeface rather than the body typeface.

#### T3 semantic color refactor
- Extensive value updates in `t3-multi-theme.json`: many surface, action, and on-state references shifted from `dark` / heavier weights to softer `default` / lighter weights (e.g. action hover/active now use `default-auto-tint` / `default-auto-shade` rather than `dark`), several status references moved from `*-light-auto-tint` to `lightest`, and selected backgrounds re-mapped onto `alpha-light.*` / `alpha.*`. Consumers will see a visible refresh of action/AI button styling, modal/sheet backgrounds, and selection states after upgrading.

#### T3-locked refresh
- `t3-locked-futures.json` values were re-pointed onto the renamed `purple` ramp and the new `alpha` / `alpha-light` scales, with several lock points shifted to lighter ramp steps to keep the futures theme aligned with the multi-theme refresh.

#### Neutral 950 alias
- `t2-brand-primitives.json` `color.neutral.950` no longer hard-codes `#000000`; it now aliases `{color.brand.neutral.900-brand}` so the darkest neutral stays in sync with the brand neutral scale.

#### Build and Publishing
- Added `publishConfig` (`"access": "public"`, npm registry), `homepage`, `repository.directory`, and `bugs.url` metadata to `package.json` so the package can be published from this monorepo path.
- Package now ships `LICENSE.md` and `THIRD_PARTY_LICENSES.md` alongside the generated `dist/` artefacts.
- Added `licenses:check` and `licenses:generate` scripts, wired into `prepublishOnly` (`npm run build:tokens && npm run licenses:check`).

### Removed

#### Legacy fonts.css source — **BREAKING**
- Deleted the hand-maintained `utilities/fonts.css` source file. The published `@font-face` stylesheet at `@unily/resin-tokens/fonts` is now generated by the Step 7 build from per-family `assets/fonts/<Family>/font-face.css` files. The published path `dist/fonts/fonts.css` is unchanged for consumers; only internal contributors editing fonts are affected.

## [0.1.0-beta.6] - 2026-04-09

### Added

- Generated override manifest contracts in 
  - `elevation-preset-override.manifest.json`
  - `radius-preset-override.manifest.json`
  - `density-preset-override.manifest.json`
  - `t3-variables-override.manifest.json`

#### New Component Tokens

**Search Bar (T3)**
- `--rds-t3-component-search-bar-min-width-*` - Minimum width tokens for search bar component across breakpoints

**Text Trim (T1)**
- New `text-trim` properties for improved typography rendering

#### New T1 Global Primitives
- Additional dimension and spacing tokens for finer control

#### New T3 Semantic Tokens
- Expanded component-level tokens for new UI components

### Changed

#### Token Snapshots
- Updated design token snapshots with new values and refined token definitions
- Replaced `dimension` types with `number` for position values to fix type consistency

#### Build Process
- Reordered `build:tokens` script to run tests after building tokens for improved validation workflow

#### Fonts stylesheet output location — **BREAKING**

- `@unily/resin-tokens/fonts` now resolves to:
  - `dist/fonts/fonts.css`
  - (previously `dist/utilities/fonts.css`)
- Font-face `url(...)` references were updated to resolve relative to `dist/fonts/fonts.css`.

### Fixed

- Fixed gradient token generation and references
- Corrected type mismatches between `dimension` and `number` types in position values

### Removed

#### Legacy override and utility paths — **BREAKING**

- Removed old utility CSS export and file:
  - `@unily/resin-tokens/utilities/overrides` (CSS entrypoint)
  - `dist/utilities/variables-overrides.css`

#### T3 flat manifest generation/exposure — **BREAKING**

- Removed generation of:
  - `dist/variables/t3-variables.json`
- Removed package exposure of that flat manifest path.
- Consumers should use the grouped manifest:
  - `@unily/resin-tokens/utilities/overrides/t3-variables`

## [0.1.0-beta.5] - 2026-03-11

### Added

#### Build Output: Responsive Media Queries and Breakpoint Export

- Added mobile-first responsive override generation in `dist/variables/index.css`, emitting `@media (min-width: 834px)` and `@media (min-width: 1440px)` blocks from responsive token inputs.
- Added generated SCSS breakpoint variables file at `dist/variables/breakpoints.scss` (for example: `$rds-breakpoint-mobile-390`, `$rds-breakpoint-tablet-834`, `$rds-breakpoint-desktop-1440`).
- Added package subpath export `./variables/breakpoints` in `package.json`, allowing consumers to import `dist/variables/breakpoints.scss` directly.

#### New Typography Emphasis CSS Variables (T2)

| CSS Variable | Value |
|---|---|
| `--rds-t2-typography-body-large-desktop-weight-emphasis` | `var(--rds-t1-typography-font-weight-medium-500)` |
| `--rds-t2-typography-body-small-mobile-weight-emphasis` | `var(--rds-t1-typography-font-weight-medium-500)` |
| `--rds-t2-typography-caption-desktop-weight-emphasis` | `var(--rds-t1-typography-font-weight-medium-500)` |
| `--rds-t2-typography-caption-mobile-weight-emphasis` | `var(--rds-t1-typography-font-weight-medium-500)` |
| `--rds-t2-typography-caption-tablet-weight-emphasis` | `var(--rds-t1-typography-font-weight-medium-500)` |
| `--rds-t2-typography-label-small-desktop-weight-emphasis` | `var(--rds-t1-typography-font-weight-medium-500)` |
| `--rds-t2-typography-label-small-mobile-weight-emphasis` | `var(--rds-t1-typography-font-weight-medium-500)` |
| `--rds-t2-typography-label-small-tablet-weight-emphasis` | `var(--rds-t1-typography-font-weight-medium-500)` |

#### New T3 CSS Variables and Utility Classes for Bold Type

| CSS Variable | Utility Class | Generated Rule |
|---|---|---|
| `--rds-t3-type-body-bold-font-weight` | `.rds-t3-font-type-body-bold` | `font-weight: var(--rds-t3-type-body-bold-font-weight);` |
| `--rds-t3-type-caption-bold-font-weight` | `.rds-t3-font-type-caption-bold` | `font-weight: var(--rds-t3-type-caption-bold-font-weight);` |

These are present in the current `dist/variables/index.css` with responsive overrides for mobile, tablet, and desktop.

#### New CSS Variables (Spacing and Component Updates)

| CSS Variable | Value |
|---|---|
| `--rds-t1-density-component-padding-expansive-compact-mobile-32` | `var(--rds-t1-spacing-medium-32)` |
| `--rds-t1-density-component-padding-generous-compact-mobile-24` | `var(--rds-t1-spacing-regular-24)` |
| `--rds-t1-density-component-padding-generous-compact-tablet-32` | `var(--rds-t1-spacing-medium-32)` |
| `--rds-t1-density-component-padding-generous-standard-mobile-20` | `var(--rds-t1-spacing-slim-20)` |
| `--rds-t1-density-component-padding-huge-compact-mobile-24` | `var(--rds-t1-spacing-regular-24)` |
| `--rds-t3-component-cta-button-min-width-small` | `5.875rem` |
| `--rds-t3-component-cta-button-min-width-medium` | `6.75rem` |
| `--rds-t3-component-cta-button-min-width-large` | `8.25rem` |

#### New AI Gradient CSS Variable Family (T3)

Added normalized gradient variables under:

- `--rds-t3-ai-gradients-base-*`
- `--rds-t3-ai-gradients-inverse-*`
- `--rds-t3-ai-base-accent-*`
- `--rds-t3-ai-inverse-accent-*`

This replaces the previous single token style for AI gradients and enables granular references to angle, color stops, and positions.

### Changed

| CSS Variable | Old Value | New Value |
|---|---|---|
| `--rds-t1-density-component-padding-expansive-standard-mobile-32` | `var(--rds-t1-spacing-medium-32)` | `var(--rds-t1-spacing-large-40)` |
| `--rds-t3-component-tooltip-max-width-basic` | `0rem` | `21.375rem` |

### Removed

| CSS Variable | Replacement / Note |
|---|---|
| `--rds-t1-density-component-padding-expansive-compact-mobile-24` | replaced by `--rds-t1-density-component-padding-expansive-compact-mobile-32` |
| `--rds-t1-density-component-padding-generous-compact-mobile-12` | replaced by `--rds-t1-density-component-padding-generous-compact-mobile-24` |
| `--rds-t1-density-component-padding-generous-compact-tablet-16` | replaced by `--rds-t1-density-component-padding-generous-compact-tablet-32` |
| `--rds-t1-density-component-padding-generous-standard-mobile-16` | replaced by `--rds-t1-density-component-padding-generous-standard-mobile-20` |
| `--rds-t1-density-component-padding-huge-compact-mobile-12` | replaced by `--rds-t1-density-component-padding-huge-compact-mobile-24` |
| `--rds-t3-component-button-min-width-small` | replaced by `--rds-t3-component-cta-button-min-width-small` |
| `--rds-t3-component-button-min-width-medium` | replaced by `--rds-t3-component-cta-button-min-width-medium` |
| `--rds-t3-component-button-min-width-large` | replaced by `--rds-t3-component-cta-button-min-width-large` |
| `--rds-t3-gradients-ai-base-border` | replaced by `--rds-t3-ai-gradients-base-border-*` family |
| `--rds-t3-gradients-ai-base-text` | replaced by `--rds-t3-ai-gradients-base-text-*` family |
| `--rds-t3-gradients-ai-inverse-border` | replaced by `--rds-t3-ai-gradients-inverse-border-*` family |
| `--rds-t3-gradients-ai-inverse-text` | replaced by `--rds-t3-ai-gradients-inverse-text-*` family |

### Notes

- `t3-locked-futures.json` was updated in this branch, but it does not introduce net new/removed/changed CSS custom property names in the generated output.

## [0.1.0-beta.4] - 2026-02-20

### Fixed

#### Missing T3 Locked Tokens — DTCG Token ID Collision
- **Issue:** `t3-locked-futures.json` and `t3-multi-theme.json` defined tokens under the same paths (e.g., `component.button.base.primary.disabled.fill`), resulting in identical DTCG token IDs. Because Terrazzo loads token files sequentially and deduplicates by ID, the later file (`t3-multi-theme.json`) silently overwrote all overlapping tokens from `t3-locked-futures.json`. This meant the CSS `variableName` function only saw one token per ID, with `source.loc` pointing to `t3-multi-theme.json` — so `--rds-t3-locked-*` variants were never generated for any overlapping token.
- **Fix:** The Figma exporter (`code.ts`) now wraps all tokens from the "t3 locked futures" collection under a `locked` parent key, giving them distinct DTCG IDs (e.g., `locked.component.button.base.primary.disabled.fill`). The special-case `t3-locked-` prefix in `terrazzo.config.mjs` was removed since the `locked` segment is now part of the token ID itself — the standard `t3-` tier prefix combined with `locked-` from the ID produces the same `--rds-t3-locked-*` CSS variable names.
- **~264 previously missing CSS variables** are now correctly generated across these groups:
  - `--rds-t3-locked-background-*` (surface, structure, overlay)
  - `--rds-t3-locked-border-*` (base, inverse, status)
  - `--rds-t3-locked-component-button-*` (base and inverse variants: primary, secondary, tertiary, destructive, success — all states)
  - `--rds-t3-locked-component-input-field-*` (all input field component tokens)
  - `--rds-t3-locked-ink-*` (on-background, on-fill)
  - `--rds-t3-locked-state-focus-*` (offset, radius, width)

#### Opacity Token Type Correction (T3 Locked)
- Changed all opacity tokens from `$type: "dimension"` (with `rem` units) to `$type: "number"` with correct decimal values (0–1 range)
- Affected tokens: `opacity.0` through `opacity.100` in `t3-locked-futures.json`
- Previously generated invalid CSS (e.g., `0.625rem` for 10% opacity); now outputs correct unitless values (e.g., `0.1`)

---

## [0.1.0-beta.3] - 2026-02-17

### Added

#### New Component Tokens (T3 Locked)
- **Scrollbar component tokens**: `component.scrollbar.on-light`, `component.scrollbar.on-dark`, `component.scrollbar.radius`, `component.scrollbar.width` — new scrollbar styling primitives
- **Rounded button radius**: `component.button.base.radius-rounded` (`{radius.circular-999}`) — pill-shaped button variant

#### AI Input Component Tokens (T3 Responsive)
- **`component.ai-input.max-height`** and **`component.ai-input.max-width`** — responsive dimension tokens for the AI input component across desktop, tablet, and mobile breakpoints

#### Multi-Theme Border Token
- **`border.structural.bold`** (`{color.accent-1.light}`) — new bold border variant for expressive structural borders
- **`border.structural.action`** (`{color.action.light}`) — new action border variant replacing the removed `interactive` token

#### New CSS Variables

| CSS Variable | Value | Description |
|---|---|---|
| `--rds-t3-locked-component-scrollbar-on-light` | `rgba(23, 23, 24, 0.3000)` | Scrollbar color on light backgrounds |
| `--rds-t3-locked-component-scrollbar-on-dark` | `color(srgb 1 1 1 / 0.2)` | Scrollbar color on dark backgrounds |
| `--rds-t3-locked-component-scrollbar-radius` | `var(--rds-t1-radius-interactive-pill-999px)` | Scrollbar border radius |
| `--rds-t3-locked-component-scrollbar-width` | `var(--rds-t1-sizing-tiny-8)` | Scrollbar track width |
| `--rds-t3-locked-border-interactive-radius-rounded` | `var(--rds-t1-radius-circular-999)` | Pill-shaped button radius |
| `--rds-t3-component-ai-input-max-height` | `15rem` (tablet) | AI input max height (responsive) |
| `--rds-t3-component-ai-input-max-width` | `40rem` (tablet) | AI input max width (responsive) |
| `--rds-t3-border-base-structural-bold` | `var(--rds-t2-color-secondary-dark)` | Bold structural border (base) |
| `--rds-t3-border-base-structural-action` | `var(--rds-t2-color-action-default)` | Action structural border (base) |
| `--rds-t3-border-inverse-structural-bold` | `var(--rds-t2-color-accent-1-light)` | Bold structural border (inverse) |
| `--rds-t3-border-inverse-structural-action` | `var(--rds-t2-color-action-light)` | Action structural border (inverse) |

Additionally, the following T3 responsive typography sub-token variables are **new**. These exist for **every** typography style across all breakpoints:

| CSS Variable Pattern | Example |
|---|---|
| `--rds-t3-type-{style}-font-family` | `--rds-t3-type-display-font-family` |
| `--rds-t3-type-{style}-font-weight` | `--rds-t3-type-display-font-weight` |
| `--rds-t3-type-{style}-font-size` | `--rds-t3-type-display-font-size` |

Where `{style}` is one of: `display`, `header-1`, `header-2`, `header-3`, `header-4`, `header-5`, `subtitle`, `body-large`, `body-small`, `button`, `button-small`, `caption`, `overline`, `code-block`, `label`, `label-small`.

### Changed

#### Typography Token Naming Convention (T2 Brand Primitives) — **BREAKING**
- Renamed `typography.font.*` → `typography.font-family.*` (display, heading, body, meta, mono)
- Renamed `typography.*.*.font` → `typography.*.*.font-family` across all typography styles and breakpoints
- Renamed `typography.*.*.weight` → `typography.*.*.font-weight` across all typography styles and breakpoints
- Renamed `typography.*.*.size` → `typography.*.*.font-size` across all typography styles and breakpoints

##### T2 Font Family Top-Level Renames

| Old CSS Variable | New CSS Variable |
|---|---|
| `--rds-t2-typography-font-body` | `--rds-t2-typography-font-family-body` |
| `--rds-t2-typography-font-display` | `--rds-t2-typography-font-family-display` |
| `--rds-t2-typography-font-heading` | `--rds-t2-typography-font-family-heading` |
| `--rds-t2-typography-font-meta` | `--rds-t2-typography-font-family-meta` |
| `--rds-t2-typography-font-mono` | `--rds-t2-typography-font-family-mono` |

##### T2 Typography Property Renames

The following rename pattern applies to **all** typography styles (`display`, `header-1` through `header-5`, `subtitle`, `body-large`, `body-small`, `button`, `button-small`, `caption`, `overline`, `code-block`, `label`, `label-small`) across **all** breakpoints (`desktop`, `tablet`, `mobile`):

| Old CSS Variable Pattern | New CSS Variable Pattern |
|---|---|
| `--rds-t2-typography-{style}-{bp}-font` | `--rds-t2-typography-{style}-{bp}-font-family` |
| `--rds-t2-typography-{style}-{bp}-weight` | `--rds-t2-typography-{style}-{bp}-font-weight` |
| `--rds-t2-typography-{style}-{bp}-size` | `--rds-t2-typography-{style}-{bp}-font-size` |

<details>
<summary>Full list of renamed T2 typography CSS variables (click to expand)</summary>

| Old CSS Variable | New CSS Variable |
|---|---|
| `--rds-t2-typography-display-desktop-font` | `--rds-t2-typography-display-desktop-font-family` |
| `--rds-t2-typography-display-desktop-weight` | `--rds-t2-typography-display-desktop-font-weight` |
| `--rds-t2-typography-display-desktop-size` | `--rds-t2-typography-display-desktop-font-size` |
| `--rds-t2-typography-display-tablet-font` | `--rds-t2-typography-display-tablet-font-family` |
| `--rds-t2-typography-display-tablet-weight` | `--rds-t2-typography-display-tablet-font-weight` |
| `--rds-t2-typography-display-tablet-size` | `--rds-t2-typography-display-tablet-font-size` |
| `--rds-t2-typography-display-mobile-font` | `--rds-t2-typography-display-mobile-font-family` |
| `--rds-t2-typography-display-mobile-weight` | `--rds-t2-typography-display-mobile-font-weight` |
| `--rds-t2-typography-display-mobile-size` | `--rds-t2-typography-display-mobile-font-size` |
| `--rds-t2-typography-header-1-desktop-font` | `--rds-t2-typography-header-1-desktop-font-family` |
| `--rds-t2-typography-header-1-desktop-weight` | `--rds-t2-typography-header-1-desktop-font-weight` |
| `--rds-t2-typography-header-1-desktop-size` | `--rds-t2-typography-header-1-desktop-font-size` |
| `--rds-t2-typography-header-1-tablet-font` | `--rds-t2-typography-header-1-tablet-font-family` |
| `--rds-t2-typography-header-1-tablet-weight` | `--rds-t2-typography-header-1-tablet-font-weight` |
| `--rds-t2-typography-header-1-tablet-size` | `--rds-t2-typography-header-1-tablet-font-size` |
| `--rds-t2-typography-header-1-mobile-font` | `--rds-t2-typography-header-1-mobile-font-family` |
| `--rds-t2-typography-header-1-mobile-weight` | `--rds-t2-typography-header-1-mobile-font-weight` |
| `--rds-t2-typography-header-1-mobile-size` | `--rds-t2-typography-header-1-mobile-font-size` |
| `--rds-t2-typography-header-2-desktop-font` | `--rds-t2-typography-header-2-desktop-font-family` |
| `--rds-t2-typography-header-2-desktop-weight` | `--rds-t2-typography-header-2-desktop-font-weight` |
| `--rds-t2-typography-header-2-desktop-size` | `--rds-t2-typography-header-2-desktop-font-size` |
| `--rds-t2-typography-header-2-tablet-font` | `--rds-t2-typography-header-2-tablet-font-family` |
| `--rds-t2-typography-header-2-tablet-weight` | `--rds-t2-typography-header-2-tablet-font-weight` |
| `--rds-t2-typography-header-2-tablet-size` | `--rds-t2-typography-header-2-tablet-font-size` |
| `--rds-t2-typography-header-2-mobile-font` | `--rds-t2-typography-header-2-mobile-font-family` |
| `--rds-t2-typography-header-2-mobile-weight` | `--rds-t2-typography-header-2-mobile-font-weight` |
| `--rds-t2-typography-header-2-mobile-size` | `--rds-t2-typography-header-2-mobile-font-size` |
| `--rds-t2-typography-header-3-desktop-font` | `--rds-t2-typography-header-3-desktop-font-family` |
| `--rds-t2-typography-header-3-desktop-weight` | `--rds-t2-typography-header-3-desktop-font-weight` |
| `--rds-t2-typography-header-3-desktop-size` | `--rds-t2-typography-header-3-desktop-font-size` |
| `--rds-t2-typography-header-3-tablet-font` | `--rds-t2-typography-header-3-tablet-font-family` |
| `--rds-t2-typography-header-3-tablet-weight` | `--rds-t2-typography-header-3-tablet-font-weight` |
| `--rds-t2-typography-header-3-tablet-size` | `--rds-t2-typography-header-3-tablet-font-size` |
| `--rds-t2-typography-header-3-mobile-font` | `--rds-t2-typography-header-3-mobile-font-family` |
| `--rds-t2-typography-header-3-mobile-weight` | `--rds-t2-typography-header-3-mobile-font-weight` |
| `--rds-t2-typography-header-3-mobile-size` | `--rds-t2-typography-header-3-mobile-font-size` |
| `--rds-t2-typography-header-4-desktop-font` | `--rds-t2-typography-header-4-desktop-font-family` |
| `--rds-t2-typography-header-4-desktop-weight` | `--rds-t2-typography-header-4-desktop-font-weight` |
| `--rds-t2-typography-header-4-desktop-size` | `--rds-t2-typography-header-4-desktop-font-size` |
| `--rds-t2-typography-header-4-tablet-font` | `--rds-t2-typography-header-4-tablet-font-family` |
| `--rds-t2-typography-header-4-tablet-weight` | `--rds-t2-typography-header-4-tablet-font-weight` |
| `--rds-t2-typography-header-4-tablet-size` | `--rds-t2-typography-header-4-tablet-font-size` |
| `--rds-t2-typography-header-4-mobile-font` | `--rds-t2-typography-header-4-mobile-font-family` |
| `--rds-t2-typography-header-4-mobile-weight` | `--rds-t2-typography-header-4-mobile-font-weight` |
| `--rds-t2-typography-header-4-mobile-size` | `--rds-t2-typography-header-4-mobile-font-size` |
| `--rds-t2-typography-header-5-desktop-font` | `--rds-t2-typography-header-5-desktop-font-family` |
| `--rds-t2-typography-header-5-desktop-weight` | `--rds-t2-typography-header-5-desktop-font-weight` |
| `--rds-t2-typography-header-5-desktop-size` | `--rds-t2-typography-header-5-desktop-font-size` |
| `--rds-t2-typography-header-5-tablet-font` | `--rds-t2-typography-header-5-tablet-font-family` |
| `--rds-t2-typography-header-5-tablet-weight` | `--rds-t2-typography-header-5-tablet-font-weight` |
| `--rds-t2-typography-header-5-tablet-size` | `--rds-t2-typography-header-5-tablet-font-size` |
| `--rds-t2-typography-header-5-mobile-font` | `--rds-t2-typography-header-5-mobile-font-family` |
| `--rds-t2-typography-header-5-mobile-weight` | `--rds-t2-typography-header-5-mobile-font-weight` |
| `--rds-t2-typography-header-5-mobile-size` | `--rds-t2-typography-header-5-mobile-font-size` |
| `--rds-t2-typography-subtitle-desktop-font` | `--rds-t2-typography-subtitle-desktop-font-family` |
| `--rds-t2-typography-subtitle-desktop-weight` | `--rds-t2-typography-subtitle-desktop-font-weight` |
| `--rds-t2-typography-subtitle-desktop-size` | `--rds-t2-typography-subtitle-desktop-font-size` |
| `--rds-t2-typography-subtitle-tablet-font` | `--rds-t2-typography-subtitle-tablet-font-family` |
| `--rds-t2-typography-subtitle-tablet-weight` | `--rds-t2-typography-subtitle-tablet-font-weight` |
| `--rds-t2-typography-subtitle-tablet-size` | `--rds-t2-typography-subtitle-tablet-font-size` |
| `--rds-t2-typography-subtitle-mobile-font` | `--rds-t2-typography-subtitle-mobile-font-family` |
| `--rds-t2-typography-subtitle-mobile-weight` | `--rds-t2-typography-subtitle-mobile-font-weight` |
| `--rds-t2-typography-subtitle-mobile-size` | `--rds-t2-typography-subtitle-mobile-font-size` |
| `--rds-t2-typography-body-large-desktop-font` | `--rds-t2-typography-body-large-desktop-font-family` |
| `--rds-t2-typography-body-large-desktop-weight` | `--rds-t2-typography-body-large-desktop-font-weight` |
| `--rds-t2-typography-body-large-desktop-size` | `--rds-t2-typography-body-large-desktop-font-size` |
| `--rds-t2-typography-body-large-tablet-font` | `--rds-t2-typography-body-large-tablet-font-family` |
| `--rds-t2-typography-body-large-tablet-weight` | `--rds-t2-typography-body-large-tablet-font-weight` |
| `--rds-t2-typography-body-large-tablet-size` | `--rds-t2-typography-body-large-tablet-font-size` |
| `--rds-t2-typography-body-large-mobile-font` | `--rds-t2-typography-body-large-mobile-font-family` |
| `--rds-t2-typography-body-large-mobile-weight` | `--rds-t2-typography-body-large-mobile-font-weight` |
| `--rds-t2-typography-body-large-mobile-size` | `--rds-t2-typography-body-large-mobile-font-size` |
| `--rds-t2-typography-body-small-desktop-font` | `--rds-t2-typography-body-small-desktop-font-family` |
| `--rds-t2-typography-body-small-desktop-weight` | `--rds-t2-typography-body-small-desktop-font-weight` |
| `--rds-t2-typography-body-small-desktop-size` | `--rds-t2-typography-body-small-desktop-font-size` |
| `--rds-t2-typography-body-small-tablet-font` | `--rds-t2-typography-body-small-tablet-font-family` |
| `--rds-t2-typography-body-small-tablet-weight` | `--rds-t2-typography-body-small-tablet-font-weight` |
| `--rds-t2-typography-body-small-tablet-size` | `--rds-t2-typography-body-small-tablet-font-size` |
| `--rds-t2-typography-body-small-mobile-font` | `--rds-t2-typography-body-small-mobile-font-family` |
| `--rds-t2-typography-body-small-mobile-weight` | `--rds-t2-typography-body-small-mobile-font-weight` |
| `--rds-t2-typography-body-small-mobile-size` | `--rds-t2-typography-body-small-mobile-font-size` |
| `--rds-t2-typography-button-desktop-font` | `--rds-t2-typography-button-desktop-font-family` |
| `--rds-t2-typography-button-desktop-weight` | `--rds-t2-typography-button-desktop-font-weight` |
| `--rds-t2-typography-button-desktop-size` | `--rds-t2-typography-button-desktop-font-size` |
| `--rds-t2-typography-button-tablet-font` | `--rds-t2-typography-button-tablet-font-family` |
| `--rds-t2-typography-button-tablet-weight` | `--rds-t2-typography-button-tablet-font-weight` |
| `--rds-t2-typography-button-tablet-size` | `--rds-t2-typography-button-tablet-font-size` |
| `--rds-t2-typography-button-mobile-font` | `--rds-t2-typography-button-mobile-font-family` |
| `--rds-t2-typography-button-mobile-weight` | `--rds-t2-typography-button-mobile-font-weight` |
| `--rds-t2-typography-button-mobile-size` | `--rds-t2-typography-button-mobile-font-size` |
| `--rds-t2-typography-button-small-desktop-font` | `--rds-t2-typography-button-small-desktop-font-family` |
| `--rds-t2-typography-button-small-desktop-weight` | `--rds-t2-typography-button-small-desktop-font-weight` |
| `--rds-t2-typography-button-small-desktop-size` | `--rds-t2-typography-button-small-desktop-font-size` |
| `--rds-t2-typography-button-small-tablet-font` | `--rds-t2-typography-button-small-tablet-font-family` |
| `--rds-t2-typography-button-small-tablet-weight` | `--rds-t2-typography-button-small-tablet-font-weight` |
| `--rds-t2-typography-button-small-tablet-size` | `--rds-t2-typography-button-small-tablet-font-size` |
| `--rds-t2-typography-button-small-mobile-font` | `--rds-t2-typography-button-small-mobile-font-family` |
| `--rds-t2-typography-button-small-mobile-weight` | `--rds-t2-typography-button-small-mobile-font-weight` |
| `--rds-t2-typography-button-small-mobile-size` | `--rds-t2-typography-button-small-mobile-font-size` |
| `--rds-t2-typography-caption-desktop-font` | `--rds-t2-typography-caption-desktop-font-family` |
| `--rds-t2-typography-caption-desktop-weight` | `--rds-t2-typography-caption-desktop-font-weight` |
| `--rds-t2-typography-caption-desktop-size` | `--rds-t2-typography-caption-desktop-font-size` |
| `--rds-t2-typography-caption-tablet-font` | `--rds-t2-typography-caption-tablet-font-family` |
| `--rds-t2-typography-caption-tablet-weight` | `--rds-t2-typography-caption-tablet-font-weight` |
| `--rds-t2-typography-caption-tablet-size` | `--rds-t2-typography-caption-tablet-font-size` |
| `--rds-t2-typography-caption-mobile-font` | `--rds-t2-typography-caption-mobile-font-family` |
| `--rds-t2-typography-caption-mobile-weight` | `--rds-t2-typography-caption-mobile-font-weight` |
| `--rds-t2-typography-caption-mobile-size` | `--rds-t2-typography-caption-mobile-font-size` |
| `--rds-t2-typography-overline-desktop-font` | `--rds-t2-typography-overline-desktop-font-family` |
| `--rds-t2-typography-overline-desktop-weight` | `--rds-t2-typography-overline-desktop-font-weight` |
| `--rds-t2-typography-overline-desktop-size` | `--rds-t2-typography-overline-desktop-font-size` |
| `--rds-t2-typography-overline-tablet-font` | `--rds-t2-typography-overline-tablet-font-family` |
| `--rds-t2-typography-overline-tablet-weight` | `--rds-t2-typography-overline-tablet-font-weight` |
| `--rds-t2-typography-overline-tablet-size` | `--rds-t2-typography-overline-tablet-font-size` |
| `--rds-t2-typography-overline-mobile-font` | `--rds-t2-typography-overline-mobile-font-family` |
| `--rds-t2-typography-overline-mobile-weight` | `--rds-t2-typography-overline-mobile-font-weight` |
| `--rds-t2-typography-overline-mobile-size` | `--rds-t2-typography-overline-mobile-font-size` |
| `--rds-t2-typography-code-block-desktop-font` | `--rds-t2-typography-code-block-desktop-font-family` |
| `--rds-t2-typography-code-block-desktop-weight` | `--rds-t2-typography-code-block-desktop-font-weight` |
| `--rds-t2-typography-code-block-desktop-size` | `--rds-t2-typography-code-block-desktop-font-size` |
| `--rds-t2-typography-code-block-tablet-font` | `--rds-t2-typography-code-block-tablet-font-family` |
| `--rds-t2-typography-code-block-tablet-weight` | `--rds-t2-typography-code-block-tablet-font-weight` |
| `--rds-t2-typography-code-block-tablet-size` | `--rds-t2-typography-code-block-tablet-font-size` |
| `--rds-t2-typography-code-block-mobile-font` | `--rds-t2-typography-code-block-mobile-font-family` |
| `--rds-t2-typography-code-block-mobile-weight` | `--rds-t2-typography-code-block-mobile-font-weight` |
| `--rds-t2-typography-code-block-mobile-size` | `--rds-t2-typography-code-block-mobile-font-size` |
| `--rds-t2-typography-label-desktop-font` | `--rds-t2-typography-label-desktop-font-family` |
| `--rds-t2-typography-label-desktop-weight` | `--rds-t2-typography-label-desktop-font-weight` |
| `--rds-t2-typography-label-desktop-size` | `--rds-t2-typography-label-desktop-font-size` |
| `--rds-t2-typography-label-tablet-font` | `--rds-t2-typography-label-tablet-font-family` |
| `--rds-t2-typography-label-tablet-weight` | `--rds-t2-typography-label-tablet-font-weight` |
| `--rds-t2-typography-label-tablet-size` | `--rds-t2-typography-label-tablet-font-size` |
| `--rds-t2-typography-label-mobile-font` | `--rds-t2-typography-label-mobile-font-family` |
| `--rds-t2-typography-label-mobile-weight` | `--rds-t2-typography-label-mobile-font-weight` |
| `--rds-t2-typography-label-mobile-size` | `--rds-t2-typography-label-mobile-font-size` |
| `--rds-t2-typography-label-small-desktop-font` | `--rds-t2-typography-label-small-desktop-font-family` |
| `--rds-t2-typography-label-small-desktop-weight` | `--rds-t2-typography-label-small-desktop-font-weight` |
| `--rds-t2-typography-label-small-desktop-size` | `--rds-t2-typography-label-small-desktop-font-size` |
| `--rds-t2-typography-label-small-tablet-font` | `--rds-t2-typography-label-small-tablet-font-family` |
| `--rds-t2-typography-label-small-tablet-weight` | `--rds-t2-typography-label-small-tablet-font-weight` |
| `--rds-t2-typography-label-small-tablet-size` | `--rds-t2-typography-label-small-tablet-font-size` |
| `--rds-t2-typography-label-small-mobile-font` | `--rds-t2-typography-label-small-mobile-font-family` |
| `--rds-t2-typography-label-small-mobile-weight` | `--rds-t2-typography-label-small-mobile-font-weight` |
| `--rds-t2-typography-label-small-mobile-size` | `--rds-t2-typography-label-small-mobile-font-size` |

</details>

#### Typography Token Structure (T3 Responsive — Desktop, Tablet, Mobile) — **BREAKING**
- `fontFamily`, `fontWeight`, and `fontSize` have been extracted from the inline `$value` object into separate sibling sub-tokens (`font-family`, `font-weight`, `font-size`) for all typography styles (display, header-1 through header-5, subtitle, body-large, body-small, button, button-small, caption, overline, code-block, label, label-small)

> **Note:** The composite typography `$value` object no longer includes `fontFamily`, `fontWeight`, or `fontSize`. These are now accessible as individual CSS variables (see "New CSS Variables" above). If your code referenced these properties via the composite token, update to use the new sub-token variables instead.

#### Futures Primitives Color Adjustments (T0)
- Lightened base shade (`.0`) for brand palettes:
  - `color.brand.combi.0`: `#eae9ff` → `#f3f2fe`
  - `color.brand.blue.0`: `#c4cfd9` → `#e8eff6`
  - `color.brand.pink.0`: `#dacce3` → `#f0ebf4`
- Adjusted system status base shades:
  - `color.system.error.0`: `#faf3f5` → `#f7ecef`
  - `color.system.info.0`: `#f6f7fc` → `#f0f3fa`

#### Section Padding Presets (T1 Global Presets)
- `section-padding.standard.desktop-48`: `{spacing.roomy-48}` → `{spacing.big-64}`
- `section-padding.standard.tablet-32`: `{spacing.medium-32}` → `{spacing.large-40}`
- `section-padding.spacious.desktop-64`: `{spacing.big-64}` → `{spacing.immense-128}`
- `section-padding.spacious.tablet-48`: `{spacing.roomy-48}` → `{spacing.large-40}`
- `section-padding.spacious.mobile-32`: `{spacing.medium-32}` → `{spacing.regular-24}`

#### AI Gradient Tokens (T3 Multi-Theme)
- Replaced hardcoded hex color values with token references for improved themability:
  - `gradients.ai.base.text` stops now reference `{color.accent-1.light}`, `{color.primary.auto-tint}`, `{color.secondary.light}`
  - `gradients.ai.base.border` stops now reference `{color.primary.dark}`, `{color.primary.default}`
  - `gradients.ai.inverse.text` stops now reference `{color.accent-1.light-auto-shade}`, `{color.primary.light}`, `{color.secondary.light-auto-tint}`
  - `gradients.ai.inverse.border` stops now reference `{color.primary.light}`, `{color.secondary.light}`

#### Multi-Theme Border Tokens (T3 Multi-Theme)
- `border.structural.default`: `{color.primary.light}` → `{color.neutral.950}`
- `border.structural.subtle`: `{color.neutral.300}` → `{color.neutral.900}`
- `text.on-background.subtle`: `{color.neutral.600}` → `{color.neutral.500}`

#### T3 Locked Futures — Extensive Color Rebalancing
- **Background surfaces**: Updated all surface and structure tokens to darker palette values (e.g., `neutral.50` → `neutral.800`, `neutral.0` → `neutral.700`) for improved dark-mode alignment
- **Fill status tokens**: Shifted to darker shades (e.g., `success.700` → `success.800`, `warning.600-brand` → `warning.800`)
- **Fill accent tokens**: Updated to darker palette values (e.g., `combi.200` → `combi.600`, `blue.300` → `blue.600-brand`, `pink.400` → `pink.700`)
- **Text on-background tokens**: Inverted for dark-mode readability (e.g., `neutral.900-brand` → `neutral.0`, `neutral.700` → `neutral.300`)
- **Text on-fill tokens**: Adjusted to lighter values matching new fill contrast (e.g., `success.50` → `success.200`, `error.50` → `error.100`)
- **Border structural tokens**: Rebalanced for dark-mode (e.g., `subtle`: `neutral.400` → `neutral.600`, `divider`: `neutral.900-brand` → `neutral.400`)
- **Border inverse tokens**: Updated (`default`: `neutral.400` → `neutral.500`, `interactive`: `combi.100` → `combi.200`)
- **Border status tokens**: Adjusted (e.g., `success.700` → `success.600-brand`, `warning.600-brand` → `warning.500`, `info.500` → `info.400`)
- **Button component tokens**: Comprehensive color updates across all variants (primary, outline, ghost) and states (default, hover, active, disabled) for both base and inverse themes
- **Badge component**: `border`: `neutral.900-brand` → `neutral.500`
- **Illustration palette**: All gradient/highlight/shader colors replaced with `#ffffff` placeholders; blur, background-blur, offset, spread values reset to `0`; opacity values reset to `0`

### Deprecated

#### Multi-Theme Border Tokens (T3 Multi-Theme)
- **`border.structural.interactive`** — removed; replaced by `border.structural.action`
- **`border.structural.divider`** — removed; no direct replacement (use `border.structural.subtle` or `border.structural.default` depending on context)

##### Deprecated CSS Variables

| Removed CSS Variable | Replacement | Notes |
|---|---|---|
| `--rds-t3-border-base-structural-interactive` | `--rds-t3-border-base-structural-action` | Use the new `action` token instead |
| `--rds-t3-border-base-structural-divider` | `--rds-t3-border-base-structural-subtle` or `--rds-t3-border-base-structural-default` | Choose based on visual intent |
| `--rds-t3-border-inverse-structural-interactive` | `--rds-t3-border-inverse-structural-action` | Use the new `action` token instead |
| `--rds-t3-border-inverse-structural-divider` | `--rds-t3-border-inverse-structural-subtle` or `--rds-t3-border-inverse-structural-default` | Choose based on visual intent |

> **Note:** The `interactive` and `divider` tokens still exist at the **locked** level (`--rds-t3-locked-border-base-structural-interactive`, `--rds-t3-locked-border-base-structural-divider`, etc.) but have been removed from the themeable multi-theme layer.

---

## [0.1.0-beta.2] - 2026-02-04

### Added

#### AI Gradient Tokens
- **Text gradient**: `gradients.ai.base.text` with explicit hex values for AI button label styling
- **Border gradient**: `gradients.ai.base.border` with multi-stop gradient for AI button borders
- **Inverse variants**: `gradients.ai.inverse.text` and `gradients.ai.inverse.border` for dark mode support

### Changed

#### Token File Rename
- Renamed `locked-t3-futures.json` to `t3-locked-futures.json` for naming consistency

#### Terrazzo Configuration
- Updated `terrazzo.config.mjs` to generate `--rds-t3-locked-*` prefixed variables for locked tokens
- Refactored variable name generation logic for improved readability

#### Gradient Generator Plugin
- Modified `gradient-generator.mjs` to output standard hex color format (`#rrggbb`) instead of `color(srgb ...)` for improved browser compatibility

### Fixed

- Fixed `gradients.ai.base.text` resolving to empty value due to undefined token aliases
- Fixed `gradients.ai.base.border` with correct explicit hex color values
- Fixed AI button gradient not rendering due to `color(srgb ...)` format compatibility issues

## [0.1.0-beta.1] - 2026-02-03

### Added

#### T3 Locked Tokens (PR #184)
- New `locked-t3-futures.json` file for locked/immutable T3 token definitions
- Provides stable token references that should not be overridden by themes

#### T3 Semantic Theme Tokens (PR #183)
- **New semantic color roles**: Added `bold` and `subtle` variants for fill and on-fill colors
- **Status colors**: New mappings for error, success, warning, and info states with enhanced granularity
- **Accent and action colors**: Additional semantic tokens for interactive elements
- **Border and surface colors**: New roles including `bold`, `action`, and refined `subtle` values
- **Responsive padding/gap**: Added `none`, `smallest`, `atomic`, `pico` options for desktop and mobile
- **Component sizing**: New `big` size option for component heights

#### T2 Brand Primitives (PR #182)
- **Color system expansion**: More granular shades for success, info, warning, and error states
- **Auto-tint/auto-shade variants**: Finer control over color theming
- **Typography adjustments**: Updated font sizes to use `smaller-14`, `little-12` for better typographic scale
- **Padding sizes**: Added `none`, `smallest`, `atomic`, `pico` across desktop, tablet, and mobile
- **Gap sizes**: Added `none`, `smallest`, `nano`, `pico`, `micro`, `ample`, `generous`, `huge`
- **Border radius**: New `radius-square` token for sharp-cornered designs

#### T1 Global Primitives (PR #181)
- **New dimension tokens**:
  - `tiny-6` (0.375rem) — Fine-grained spacing
  - `smallest-1` (0.0625rem) — Extremely small spacing
  - `bigger-28` (1.75rem) — Larger dimension option

### Changed

#### T3 Theme Tokens (PR #183)
- Replaced deprecated color references (`auto-tint--noexport`, `auto-shade--noexport`) with standardized counterparts for error and success states
- Adjusted `tiny` and `large` gap values for better consistency

### Removed

#### T3 Multi-Theme Tokens (PR #183)
- Removed unused `shadows` section from multi-theme token file
- Removed unused `gradients` section to eliminate redundancy

---

## [0.1.0-beta.0] - Initial Release

### Added
- Initial design tokens structure with Terrazzo build pipeline
- **T1 Global Primitives**: Base dimension, color, and typography primitives
- **T1 Global Presets**: Preset combinations for common use cases
- **T2 Brand Primitives**: Brand-specific color palettes and typography
- **T3 Futures Tokens**: Component-level semantic tokens
- **T3 Multi-Theme Tokens**: Theme-aware semantic tokens (light/dark)
- **T3 Responsive Tokens**: Desktop, tablet, and mobile breakpoint tokens
- **Font assets**: TTNeoris font family with CSS font-face definitions
- **CSS Variables output**: Generated via `@terrazzo/plugin-css`
- **Package exports**: Variables, fonts, utilities, and overrides subpaths
