# Tokens

Los nombres de cada valor Feitio: de dónde provienen, cómo usarlos en CSS y TypeScript, y la lista completa.

## What they are

Cada valor Feitio (color, espacio, tipo, esquina, duración) es un token con nombre. Nadie escribe un valor a mano: escribís el nombre y el valor viene del tema y modo.

## Where they come from

-   La fuente es JSON en abierto [DTCG](https://www.designtokens.org/), en `tokens/`: `base.tokens.json` para lo que no cambia con el tema, y un archivo por tema y modo en `tokens/themes/`.
-   `bun run build` genera las variables CSS (`css/tokens.css`) y los nombres TypeScript (`js/tokens.ts`).
-   `bun run check` prueba el contraste de cada par de color y si cada color se ajusta a una pantalla ordinaria (sRGB).

## How to use

### 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` exporta cada nombre con su variable, y el tipo `TokenName`: un nombre incorrecto no se compila.

```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)'
```

## Los tokens base

Lo mismo en cada tema y modo.

Token

Valor

Grupo

`--feitio-font-text`

`"Alegreya", "Georgia", serif`

Tipo

`--feitio-font-ui`

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

Tipo

`--feitio-font-weight-regular`

`400`

Tipo

`--feitio-font-weight-medium`

`500`

Tipo

`--feitio-font-weight-bold`

`700`

Tipo

`--feitio-font-weight-heavy`

`800`

Tipo

`--feitio-font-size-small`

`1rem`

Tipo

`--feitio-font-size-body`

`1.25rem`

Tipo

`--feitio-font-size-h3`

`1.5rem`

Tipo

`--feitio-font-size-h2`

`2rem`

Tipo

`--feitio-font-size-h1`

`2.75rem`

Tipo

`--feitio-font-size-display`

`4rem`

Tipo

`--feitio-line-height-text`

`1.6`

Altura de línea

`--feitio-line-height-heading`

`1.08`

Altura de línea

`--feitio-space-1`

`0.25rem`

Espacio

`--feitio-space-2`

`0.5rem`

Espacio

`--feitio-space-3`

`1rem`

Espacio

`--feitio-space-4`

`1.5rem`

Espacio

`--feitio-space-5`

`2.5rem`

Espacio

`--feitio-space-6`

`4rem`

Espacio

`--feitio-space-7`

`6rem`

Espacio

`--feitio-measure-reading`

`46rem`

Medida

`--feitio-radius-top-left`

`6px`

Bordes

`--feitio-radius-top-right`

`10px`

Bordes

`--feitio-radius-bottom-right`

`6px`

Bordes

`--feitio-radius-bottom-left`

`8px`

Bordes

`--feitio-border-width`

`1px`

Línea

`--feitio-focus-width`

`3px`

Enfoque

`--feitio-focus-offset`

`3px`

Enfoque

`--feitio-duration-place`

`260ms`

Duración

`--feitio-duration-change`

`320ms`

Duración

`--feitio-easing-place`

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

Suavizado

`--feitio-easing-change`

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

Suavizado

## Los roles de color

Los valores del tema principal, durante el día y por la noche. Una fachada rellena los mismos nombres con otros valores.

Token

Día

Noche

`--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)`

## Reglas

-   No hay valor escrito a mano donde exista un token.
-   Un nuevo token va en el JSON, nunca en el CSS generado: la compilación sobrescribe las ediciones manuales.
-   Un nuevo color pasa por la prueba de contraste antes de entrar.
