docs(theming): align THEMING.md + README with current color/scaling engine

Reconcile the theming reference with the engine as already committed
(color-model redesign, scaling axis, P2 fixes) so the doc is internally
consistent:

- TOC: add §23 (scaling), §24 (P2 corrections), §25 (color model); fix
  the §21 entry to its resolved heading.
- §4: intent->scale mapping was stale (risk->amber not orange,
  loss->plum not purple); note intents auto-derive via
  CANONICAL_INTENT_SCALES (identity = step 9, cross-ref §25); correct
  token counts (31-scale palette = 744 --scale-* tokens; 9 roles = 216
  primitives).
- §3 / anti-pattern G: "30 escalas" -> 31; reconcile "never add a scale"
  with §25.7 (a brand theme brings its own palette).
- §21 / §22: mark the two-level color RFC as resolved in §25 (anchor
  model discarded); drop the stale present-tense "vigente" claim.
- README reference table: add §23 / §24 / §25 rows.

Docs only -- no engine or demo changes.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
active-uix
dev 4 months ago
parent 89147d0e1b
commit 8090efc833

@ -564,6 +564,9 @@ Resumen rápido de lo que cubre, para no duplicar aquí:
| Cobertura universal de TSC (sin excepciones) | §18 |
| Variants son canon del eidos, NO del theme (con `EIDOS_VARIANTS`) | §19 |
| **Correcciones del engine: densidad viva + `contrast` on-solid (2026-06-01)** | §20 |
| **Eje de `scaling` (zoom global), separado de densidad** | §23 |
| **Correcciones P2: texto on-solid por luminancia + superficies translúcidas** | §24 |
| **Modelo de color: paleta (31 escalas) + roles (alias) + intents (auto-derivados)** | §25 |
Lo que sigue en este README son las decisiones operativas de la **capa
visual como módulo** (typography sourcing, picker patterns, API

@ -17,9 +17,12 @@
valida transitividad al generar.
- **226 KB raw / 25 KB gzip** de CSS foundation por defecto. Usa
`npm run eidos:purge` para apps en producción → −46 a −55%.
- **Modelo de color**: paleta de 31 escalas (diseñable) → roles de
jerarquía (alias explícito) → intents (auto-derivados por convención
del libro, identidad = step 9). Ver §25.
- **Compatible con** persistencia versionada, themes CSS-only,
runtime overrides, dark/light, density (compact/comfortable/spacious),
reduced motion, multi-axis breakpoints.
scaling (zoom 90–110, eje aparte), reduced motion, multi-axis breakpoints.
---
@ -46,8 +49,11 @@
18. [Cobertura universal de TSC](#18-cobertura-universal-de-tsc)
19. [Variants son canon del eidos, NO del theme](#19-variants-son-canon-del-eidos-no-del-theme)
20. [Correcciones del engine de theming (2026-06-01)](#20-correcciones-del-engine-de-theming-2026-06-01)
21. [Propuesta abierta — modelo de color de dos niveles (RFC, NO implementado)](#21-propuesta-abierta--modelo-de-color-de-dos-niveles-rfc-no-implementado)
21. [Modelo de color de dos niveles (RFC — RESUELTO en §25)](#21-modelo-de-color-de-dos-niveles-rfc--resuelto-en-25)
22. [Mejoras pendientes del theming](#22-mejoras-pendientes-del-theming)
23. [Eje de `scaling` (zoom global)](#23-eje-de-scaling-zoom-global--2026-06-02)
24. [Correcciones P2 del engine (2026-06-02)](#24-correcciones-p2-del-engine-2026-06-02)
25. [Modelo de color — paleta + roles/intents derivados](#25-modelo-de-color--paleta--rolesintents-derivados-2026-06-02)
---
@ -384,7 +390,9 @@ En la práctica, **la mayoría de las apps SÓLO tocan las capas 1-3**
### Cuándo crear un token nuevo en cada capa
- **Capa 1** (scale): jamás añades. Usa las 30 escalas Radix existentes.
- **Capa 1** (scale): una app rara vez; un **tema de marca** SÍ trae o
amplía su propia paleta (§25.7). Las **31 escalas** por defecto cubren
el caso general.
- **Capa 2** (primitive): rara vez. Sólo si añades un role canónico
nuevo (lo cual cambiaría el book canon — no lo hagas).
- **Capa 3** (color): si añades un nuevo `{slot}` (raro). Hoy hay 9
@ -438,12 +446,19 @@ neutral — gray default threat — active negative consequence
| neutral | gray | Sin carga |
| affirm | teal | Light positive, mint-fresh |
| fulfill | green | Completion, classic success |
| risk | orange | Caution, warning |
| risk | amber | Caution, warning |
| threat | red | Active danger |
| loss | purple | Posterior gravity, deep |
| loss | plum | Posterior gravity, deep |
Cada escala genera 12 steps + 12 alpha steps = 24 tokens × 9 roles =
**216 color primitives**. Es la mayor parte del bloat del foundation.
> **Los intents auto-derivan de la paleta** (`CANONICAL_INTENT_SCALES`,
> identidad = step 9): `neutral→gray · affirm→teal · fulfill→green ·
> risk→amber · threat→red · loss→plum`. La jerarquía (`primary` /
> `secondary` / `tertiary`) la elige el tema. Modelo completo en **§25**.
La **paleta** son **31 escalas** de 12 steps + 12 alpha = 24 tokens c/u
(**744 tokens `--scale-*`** — el grueso del bloat del foundation). Sobre
ella, los 9 roles aliasan vía `--primitive-{role}-{step}` (9 × 24 =
**216 primitives**).
### Por qué 9 roles y no 4 (como shadcn) o 14 (como Mantine)
@ -1433,10 +1448,12 @@ eidos.dom.apply(...);
Es output. Cualquier cambio se sobrescribe al regenerar. Si necesitas
cambiar algo, edita `lib/themes/base.ts` o `lib/recipes/base.ts`.
### G. Crear nuevas escalas físicas
### G. Crear escalas físicas sueltas dentro de una app
Las 30 escalas Radix cubren todas las paletas razonables. Si crees
necesitar una nueva, replantéate el role mapping antes.
Las **31 escalas** por defecto cubren las paletas razonables. Un **tema
de marca** SÍ trae su propia paleta como escalas (§25.7) — eso es
legítimo. Lo que NO debes hacer es añadir una escala one-off dentro de
una app cuando remapear un role a una escala existente ya resuelve el caso.
### H. Re-exportar entre layers
@ -1859,9 +1876,9 @@ un ramp interactivo.
La propuesta (dos niveles: accents/neutral ricos + intents de **un solo color
ancla** con slots derivados por `color-mix()`, más ampliar la librería hacia
paridad Radix) está documentada como RFC en
[`COLOR_MODEL_RFC.md`](./COLOR_MODEL_RFC.md). **Estado: propuesta — no
implementada.** El modelo actual descrito en este documento (rol → escala de 12
pasos) sigue siendo el vigente.
[`COLOR_MODEL_RFC.md`](./COLOR_MODEL_RFC.md). _(Estado original: propuesta.
**Resuelto en §25** — se adoptó paleta rica + alias / auto-derivación y se
descartó el ancla de un solo color.)_
---
@ -1874,10 +1891,12 @@ pasos) sigue siendo el vigente.
Backlog vivo de mejoras al sistema. Ordenado por impacto, no por prioridad.
1. **Modelo de color de dos niveles** _(mayor)_ — accents/neutral ricos +
intents de **un solo color ancla** con slots derivados, y ampliar la librería
de paletas hacia paridad Radix (~24–30 escalas). Diseño completo en §21 /
[`COLOR_MODEL_RFC.md`](./COLOR_MODEL_RFC.md). Estado: propuesta.
1. ✅ **Modelo de color — paleta + roles/intents derivados** _(mayor · resuelto 2026-06-02)_
— adoptado el modelo Radix-style: **paleta** de 31 escalas (diseñable por el
tema) + **roles de jerarquía** como alias explícito + **intents auto-derivados**
por convención del libro (identidad = step 9). Se **descartó** el "intent =
ancla de un solo color". Modelo completo en §25 /
[`COLOR_MODEL_RFC.md`](./COLOR_MODEL_RFC.md).
2. ✅ **Variant `surface`/`soft` vía alpha en vez de tinte opaco** _(resuelto 2026-06-02)_
— el tinte `soft` por rol (Button + Badge `{role}-soft-bg`) se computaba

Loading…
Cancel
Save

Powered by TurnKey Linux.