# Jetons

Les noms de chaque valeur Feitio : d'où ils viennent, comment les utiliser en CSS et TypeScript, et la liste complète.

## Quels sont-ils

Chaque valeur Feitio (couleur, espace, type, coin, durée) est un jeton nommé. Personne ne rédige une valeur à la main : vous écrivez le nom, et la valeur provient du thème et du mode.

## D'où ils viennent

-   La source est un fichier JSON en format ouvert [DTCG](https://www.designtokens.org/), dans `tokens/` : `base.tokens.json` pour ce qui ne change pas avec le thème, et un fichier par thème et mode dans `tokens/themes/`.
-   `bun run build` génère les variables CSS (`css/tokens.css`) et les noms TypeScript (`js/tokens.ts`).
-   `bun run check` teste le contraste de chaque paire de couleurs et si chaque couleur convient à un écran ordinaire (sRGB).

## Comment les utiliser

### CSS

```css
.minha-area {
  padding: var(--feitio-space-5) var(--feitio-space-4);
  border-radius: var(--feitio-radius);
  background: var(--feitio-color-surface-raised);
}
```

### TypeScript

`js/tokens.ts` exporte chaque nom avec sa variable, et le type `TokenName` : un mauvais nom ne compile pas.

```jsx
import { tokens, type TokenName } from '@feitio/core/js/tokens.ts';

const gap: TokenName = 'space.4';
element.style.gap = tokens[gap];   // 'var(--feitio-space-4)'
```

## Les jetons de base

Tout de même dans chaque thème et mode.

Token

Valeur

Group

`--feitio-font-text`

`"Alegreya", "Georgia", serif`

Type

`--feitio-font-ui`

`"Alegreya Sans", "Gill Sans", sans-serif`

Type

`--feitio-font-weight-regular`

`400`

Type

`--feitio-font-weight-medium`

`500`

Type

`--feitio-font-weight-bold`

`700`

Type

`--feitio-font-weight-heavy`

`800`

Type

`--feitio-font-size-small`

`1rem`

Type

`--feitio-font-size-body`

`1.25rem`

Type

`--feitio-font-size-h3`

`1.5rem`

Type

`--feitio-font-size-h2`

`2rem`

Type

`--feitio-font-size-h1`

`2.75rem`

Type

`--feitio-font-size-display`

`4rem`

Type

`--feitio-line-height-text`

`1.6`

Line height

`--feitio-line-height-heading`

`1.08`

Line height

`--feitio-space-1`

`0.25rem`

Space

`--feitio-space-2`

`0.5rem`

Space

`--feitio-space-3`

`1rem`

Space

`--feitio-space-4`

`1.5rem`

Space

`--feitio-space-5`

`2.5rem`

Space

`--feitio-space-6`

`4rem`

Space

`--feitio-space-7`

`6rem`

Space

`--feitio-measure-reading`

`46rem`

Measure

`--feitio-radius-top-left`

`6px`

Corners

`--feitio-radius-top-right`

`10px`

Corners

`--feitio-radius-bottom-right`

`6px`

Corners

`--feitio-radius-bottom-left`

`8px`

Corners

`--feitio-border-width`

`1px`

Stroke

`--feitio-focus-width`

`3px`

Mise au point

`--feitio-focus-offset`

`3px`

Mise au point

`--feitio-duration-place`

`260ms`

Duration

`--feitio-duration-change`

`320ms`

Duration

`--feitio-easing-place`

`cubic-bezier(0.2, 0.9, 0.3, 1.25)`

Easing

`--feitio-easing-change`

`cubic-bezier(0.3, 0, 0.2, 1)`

Easing

## The color roles

Les valeurs du thème principal, jour et nuit. Une façade remplit les mêmes noms avec d'autres valeurs.

Token

Jour

Nuit

`--feitio-color-surface`

`oklch(96% 0.018 80)`

`oklch(22% 0.016 55)`

`--feitio-color-surface-raised`

`oklch(92.5% 0.026 76)`

`oklch(27.5% 0.02 55)`

`--feitio-color-surface-top`

`oklch(98.5% 0.01 85)`

`oklch(31% 0.022 55)`

`--feitio-color-text`

`oklch(26% 0.022 55)`

`oklch(93% 0.022 80)`

`--feitio-color-text-soft`

`oklch(46% 0.025 55)`

`oklch(76% 0.03 72)`

`--feitio-color-accent`

`oklch(54% 0.165 40)`

`oklch(54% 0.165 40)`

`--feitio-color-accent-strong`

`oklch(50% 0.16 38)`

`oklch(77% 0.15 52)`

`--feitio-color-on-accent`

`oklch(97% 0.015 80)`

`oklch(97% 0.015 80)`

`--feitio-color-line`

`oklch(26% 0.022 55 / 0.15)`

`oklch(93% 0.022 80 / 0.15)`

`--feitio-color-shadow`

`oklch(26% 0.022 55 / 0.9)`

`oklch(12% 0.01 55 / 0.95)`

`--feitio-color-ok`

`oklch(45% 0.09 140)`

`oklch(78% 0.1 140)`

`--feitio-color-ok-surface`

`oklch(91% 0.04 135)`

`oklch(30% 0.04 140)`

`--feitio-color-warn`

`oklch(50% 0.1 85)`

`oklch(83% 0.11 88)`

`--feitio-color-warn-surface`

`oklch(92% 0.06 90)`

`oklch(32% 0.05 85)`

`--feitio-color-error`

`oklch(45% 0.15 15)`

`oklch(76% 0.12 15)`

`--feitio-color-error-surface`

`oklch(91% 0.04 15)`

`oklch(31% 0.06 15)`

## Règles

-   Aucune valeur manuscrite où existe un jeton.
-   Un nouveau jeton entre dans le JSON, jamais dans le CSS généré : la construction écrase les modifications manuelles.
-   Une nouvelle couleur passe par le test de contraste avant d'entrer.
