# RFC — Motor de tipografía reference-grade (eidos) > **Estado: PROPUESTA (2026-06-05).** Plan para elevar la tipografía de eidos a la par > o por encima de los frameworks de referencia, replicando el enfoque del color > (`COLOR_ENGINE_RFC.md`): auditar → comparar → extender de forma ADITIVA detrás del > contrato de tokens congelado, por fases. ## 1. Estado actual (auditoría) `TypographyPrimitiveSet` (`lib/primitives/typography.ts` + `config-types.ts`) → emisión en `render-css.ts` → tokens → componentes `` / `` / ``. - **4 familias** (primary Instrument Sans · secondary/display Lora · mono Azeret Mono). - **8 tamaños** `xxs 10px … xxxl 80px`, cada uno `size` / `lineHeight` / `letterSpacing` **fijos en px**. - **4 pesos** (400/500/600/700). - **13 estilos nombrados** (hero, h1–h6, body, prose, label, caption, code) con size responsive por breakpoint en algunos (`{ base, md }`). - **Eje `--scaling`** (zoom global 90–110%) que multiplica los px. - Tokens: `--font-family-*`, `--font-size-*` (`calc(px * --scaling)`), `--font-line-height-*`, `--font-letter-spacing-*`, `--font-weight-*`, `--style-{name}-*`. - **Brazo de medición**: el motor `canvas-text` (``) cuenta líneas exactas replicando el navegador (productionizado — ver `lib/canvas-text/fix-stext.md`). **Bueno hoy**: estilos semánticos nombrados, sizes responsive, eje de scaling (poco común), contrato de tokens + theming, medición exacta de líneas. ## 2. Comparación con referencia (el gap) | Capacidad | Referencia | Eidos hoy | |---|---|---| | Tipografía **fluida** (`clamp()` por viewport) | Utopia, Carbon, Tailwind(opt) | ❌ px fijos + breakpoints manuales | | **Variable fonts** (1 archivo, wght + opsz) | Material 3, Apple | ❌ TTF estáticas por peso | | **WOFF2 + subsetting + fallback con métricas** (anti-CLS) | Next/Fontaine | ❌ TTF, sin subset, sin `size-adjust` | | **Optical sizing** (`opsz`) | Apple, Material | ❌ | | **Tracking por tamaño** (óptico) | Material, Apple, Radix | ❌ todo `0` | | **`text-wrap: balance`/`pretty`** | Tailwind, Chakra | ❌ | | **Measure** (ancho de línea ~65ch) | clásico, Tailwind prose | ❌ | | **`font-feature-settings`** (tabular-nums…) | Tailwind, Radix | ❌ | | Estilos nombrados · eje de scaling | Chakra/Material · Apple(parcial) | ✅ | ## 3. Modelo de inclusión: extender, no reemplazar **Principio rector (idéntico a color)**: todo lo nuevo es **ADITIVO** sobre `TypographyPrimitiveSet`, detrás del **contrato de tokens congelado**. Lo viejo (px fijos) sigue funcionando; lo nuevo se activa por config. Los nombres de token (`--font-size-X`, `--style-Y-*`) **no cambian** — solo cambia la *fórmula del valor* (igual que en color el token `--scale-*` pasó de hex a `oklch()` sin renombrar). Capas de la implementación, paralelas a color: | Pieza | Dónde | Análogo en color | |---|---|---| | Matemática pura (fluid scale Utopia) | `eidos/lib/type-scale.ts` (puro) | `arts/color` / `build-scheme.ts` | | Tipo + config | `config-types.ts` (`TypographyPrimitiveSet`) | `EidosConfig` | | Emisión CSS | `render-css.ts` (`appendTypographyDeclarations`) | `appendColorScaleDeclarations` | | Fuentes | `themes/fonts.css` (woff2/variable) | `themes/base` (paleta) | | Componentes | `` / `` (props nuevas) | `