tooling(theming): el censo aprende a leer la válvula del canon — clase `exception`

Global 58 % → **59 %** sin tocar una línea de CSS: 54 knobs que eran deuda
resultan ser desviaciones que el canon ya había firmado.

`recipe-contract` §3 dice que una desviación anotada `/* literal: <razón> */`
EN SU PROPIA DECLARACIÓN es válida, y `component-audit` la honra desde siempre
(`declarationWindow` + `/literal:/i` en R-2.1, R-2.6 y R-2.7). El censo era el
único instrumento que no: su `strip()` blanquea los comentarios ANTES de
clasificar, así que las **81 anotaciones del catálogo** contaban como literales
sin excusa. Dos instrumentos, un canon, dos respuestas — y la que mandaba era la
del que no sabía leerlo.

Ahora un literal anotado cae en la clase **`exception`, fuera del ratio** como
`system`, y por la misma razón: no es que un tema no lo alcance, es que el canon
ya aceptó por escrito que ahí no va un token.

**54 knobs en 12 componentes**: `prose` 21 (su escala editorial em-relativa, que
su README documenta como decisión — «No 5× duplicated scale»), `proof-of-human`
16 (la escena de tono fijo), `palabras` 3, `timeline` 2 (73 % → **77 %**),
`result` 1 (86 % → **90 %**), y siete más con una cada uno.

Detalles que costaron medición:

- **La anotación vale para la DECLARACIÓN entera**, no sólo para su primera
  línea: un valor partido en varias líneas lleva la nota al final. Se comprueban
  todas las líneas que abarca la declaración.
- **`strip()` blanquea en el sitio** (sustituye por espacios, conserva los
  saltos), así que el cuerpo despojado y el crudo quedan alineados línea a línea
  y basta con guardar el crudo al lado.
- Muta-prueba: retirar una anotación de `prose` mueve el knob de `exception` a
  `literal` (21 → 20) y el conteo vuelve al restaurarla.

Efecto colateral bueno: cada ficha gana una **§1.4 «Excepciones firmadas»** que
las LISTA con su razón. Estaban escritas en el CSS y no se leían desde ninguna
parte; ahora la ficha del componente las enseña, que es donde se decide si una
sigue siendo cierta.

Las 163 fichas cambian porque la plantilla cambia (sección nueva + la línea de
reparto); el README de la auditoría gana la fila de la clase y la nota de que
`system` y `exception` quedan fuera del denominador.

Guards: `--names` 4.105 claves, DESVIADAS 0 · component-audit PASS · docs:check
0 · `check` con 72 errores globales y 0 en los ficheros tocados.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
alpha-0.1-background
dev 2 months ago
parent 1c4f9518bb
commit 5638d67fde

@ -10,8 +10,8 @@
- **Medido**: 2026-08-22 · **162 recetas** con CSS + **8 componentes sin receta** = 170 fichas, el árbol entero de `eidos/components/`
- **La pregunta**: ¿cuánto de la apariencia de cada componente puede cambiar un tema **sin tocar el sistema ni la receta**?
- **Alcance global**: **58%** — 2727 de 4682 knobs pasan por un token público del componente
- **Reparto**: público 2727 · privado 338 · global 1064 · literal 553 · sistema transversal 509 _(fuera del ratio)_
- **Alcance global**: **59%** — 2727 de 4628 knobs pasan por un token público del componente
- **Reparto**: público 2727 · privado 338 · global 1064 · literal 499 · sistema transversal 509 · excepción firmada 54 _(los dos últimos, fuera del ratio)_
- **Sin token público propio**: 24 · **alcance < 20 %**: 17 · **alcance 100 %**: 17 · **con eje `size`**: 58
## Cómo se lee
@ -23,8 +23,11 @@
| `global` | primitivo del sistema (`--space-*`, `--radius-*`, `--color-*`, bundle `--size-{k}-*`…) | sólo moviendo el sistema entero |
| `literal` | ni token: `8px`, `1.25`, `#fff` | no — y viola R-2/R-4 |
| `system` | sistemas transversales que la receta CONSUME por contrato (capa de estado, anillo de foco, planos de depth, motion, bandas z, opacidad, shape, floating-gap) | sí, **a nivel de sistema**, por diseño (recipe-contract §2) — fuera del ratio |
| `exception` | un literal con su anotación `/* literal: <razón> */` en la propia declaración | no hace falta: es la válvula de recipe-contract §3, una desviación ya firmada — fuera del ratio |
**Alcance** = `public / (public + private + global + literal)`.
**Alcance** = `public / (public + private + global + literal)`. `system` y `exception`
quedan fuera del denominador: el primero es tematizable a nivel de sistema por
diseño, el segundo es una desviación que el canon ya aceptó por escrito.
**Límites de la medida** (regex sobre el CSS; sobre-reporta, nunca infra-reporta):
una declaración con varios tokens se clasifica por la primera clase que casa
@ -70,26 +73,26 @@ theming §6.7 lo pone delante (`hover-bg`). Las fichas proponen la forma
| # | componente | fuera de alcance | alcance | knobs | contrato |
| ---: | --- | ---: | ---: | ---: | ---: |
| 1 | [palabras](./palabras.md) | 363 | 22% | 471 | 0 |
| 2 | [chronos](./chronos.md) | 235 | 1% | 245 | 9 |
| 3 | [proof-of-human](./proof-of-human.md) | 77 | 15% | 95 | 20 |
| 4 | [prose](./prose.md) | 73 | 1% | 74 | 2 |
| 5 | [time-range-picker](./time-range-picker.md) | 67 | 20% | 88 | 22 |
| 1 | [palabras](./palabras.md) | 360 | 22% | 468 | 0 |
| 2 | [chronos](./chronos.md) | 234 | 1% | 244 | 9 |
| 3 | [time-range-picker](./time-range-picker.md) | 67 | 20% | 88 | 22 |
| 4 | [proof-of-human](./proof-of-human.md) | 61 | 19% | 79 | 20 |
| 5 | [prose](./prose.md) | 52 | 2% | 53 | 2 |
| 6 | [time-picker](./time-picker.md) | 47 | 18% | 59 | 16 |
| 7 | [color-picker](./color-picker.md) | 39 | 51% | 82 | 54 |
| 8 | [field-langs](./field-langs.md) | 39 | 0% | 41 | 0 |
| 8 | [field-langs](./field-langs.md) | 37 | 0% | 39 | 0 |
| 9 | [date-range-picker](./date-range-picker.md) | 30 | 40% | 53 | 22 |
| 10 | [radio-cards](./radio-cards.md) | 28 | 60% | 72 | 39 |
| 11 | [drawer](./drawer.md) | 26 | 57% | 62 | 44 |
| 12 | [popover](./popover.md) | 26 | 46% | 51 | 36 |
| 13 | [natural-time-picker](./natural-time-picker.md) | 25 | 67% | 77 | 62 |
| 14 | [nav-tree](./nav-tree.md) | 23 | 4% | 25 | 1 |
| 15 | [menubar](./menubar.md) | 22 | 15% | 27 | 5 |
| 16 | [password-field](./password-field.md) | 21 | 40% | 36 | 23 |
| 17 | [aura](./aura.md) | 20 | 43% | 35 | 24 |
| 18 | [float-panel](./float-panel.md) | 20 | 59% | 53 | 28 |
| 19 | [field](./field.md) | 19 | 72% | 73 | 60 |
| 20 | [navigation-menu](./navigation-menu.md) | 19 | 44% | 38 | 26 |
| 14 | [menubar](./menubar.md) | 22 | 15% | 27 | 5 |
| 15 | [nav-tree](./nav-tree.md) | 22 | 4% | 24 | 1 |
| 16 | [aura](./aura.md) | 20 | 43% | 35 | 24 |
| 17 | [float-panel](./float-panel.md) | 20 | 59% | 53 | 28 |
| 18 | [password-field](./password-field.md) | 20 | 41% | 35 | 23 |
| 19 | [navigation-menu](./navigation-menu.md) | 19 | 44% | 38 | 26 |
| 20 | [sidebar](./sidebar.md) | 19 | 55% | 45 | 50 |
## Sin ningún token público propio (24)
@ -107,7 +110,7 @@ La columna «contrato» cuenta las claves **públicas** del bloque del component
| [range-calendar](./range-calendar.md) | 0% | 98 | 0 | 7 | 2 | 4 | 85 | 0 | – |
| [month-grid](./month-grid.md) | 0% | 61 | 0 | 7 | 0 | 5 | 49 | 0 | – |
| [year-grid](./year-grid.md) | 0% | 61 | 0 | 7 | 0 | 5 | 49 | 0 | – |
| [field-langs](./field-langs.md) | 0% | 41 | 0 | 0 | 31 | 8 | 2 | 0 | – |
| [field-langs](./field-langs.md) | 0% | 39 | 0 | 0 | 31 | 6 | 2 | 0 | – |
| [aspect-ratio](./aspect-ratio.md) | 0% | 3 | 0 | 0 | 1 | 2 | 0 | 0 | – |
| [date-picker](./date-picker.md) | 0% | 2 | 0 | 0 | 0 | 2 | 0 | 0 | – |
| [sticky](./sticky.md) | 0% | 2 | 0 | 1 | 0 | 1 | 0 | 1 | – |
@ -115,20 +118,20 @@ La columna «contrato» cuenta las claves **públicas** del bloque del component
| [cascade](./cascade.md) | 0% | 1 | 0 | 0 | 0 | 1 | 0 | 0 | – |
| [motion](./motion.md) | 0% | 1 | 0 | 0 | 0 | 1 | 0 | 0 | – |
| [section](./section.md) | 0% | 1 | 0 | 0 | 0 | 1 | 0 | 4 | – |
| [chronos](./chronos.md) | 1% | 245 | 3 | 21 | 202 | 12 | 7 | 9 | y |
| [prose](./prose.md) | 1% | 74 | 1 | 0 | 43 | 30 | 0 | 2 | y |
| [nav-tree](./nav-tree.md) | 4% | 25 | 1 | 0 | 17 | 6 | 1 | 1 | – |
| [proof-of-human](./proof-of-human.md) | 15% | 95 | 14 | 17 | 29 | 31 | 4 | 20 | – |
| [chronos](./chronos.md) | 1% | 244 | 3 | 21 | 202 | 11 | 7 | 9 | y |
| [prose](./prose.md) | 2% | 53 | 1 | 0 | 43 | 9 | 0 | 2 | y |
| [nav-tree](./nav-tree.md) | 4% | 24 | 1 | 0 | 17 | 5 | 1 | 1 | – |
| [menubar](./menubar.md) | 15% | 27 | 4 | 6 | 16 | 0 | 1 | 5 | y |
| [time-picker](./time-picker.md) | 18% | 59 | 10 | 12 | 24 | 11 | 2 | 16 | y |
| [proof-of-human](./proof-of-human.md) | 19% | 79 | 14 | 17 | 29 | 15 | 4 | 20 | – |
| [anchor-nav](./anchor-nav.md) | 20% | 11 | 2 | 0 | 8 | 0 | 1 | 2 | – |
| [time-range-picker](./time-range-picker.md) | 20% | 88 | 17 | 19 | 33 | 15 | 4 | 22 | y |
| [palabras](./palabras.md) | 22% | 471 | 103 | 1 | 272 | 90 | 5 | 0 | – |
| [skin-media-player](./skin-media-player.md) | 22% | 11 | 2 | 0 | 1 | 6 | 2 | 10 | y |
| [date-range-field](./date-range-field.md) | 25% | 9 | 2 | 0 | 4 | 2 | 1 | 3 | – |
| [time-range-field](./time-range-field.md) | 25% | 9 | 2 | 0 | 4 | 2 | 1 | 3 | – |
| [palabras](./palabras.md) | 22% | 468 | 103 | 1 | 272 | 87 | 5 | 0 | – |
| [surface](./surface.md) | 25% | 4 | 1 | 3 | 0 | 0 | 0 | 25 | – |
| [callout](./callout.md) | 27% | 15 | 4 | 3 | 7 | 1 | 0 | 28 | – |
| [date-range-field](./date-range-field.md) | 29% | 8 | 2 | 0 | 4 | 1 | 1 | 3 | – |
| [time-range-field](./time-range-field.md) | 29% | 8 | 2 | 0 | 4 | 1 | 1 | 3 | – |
| [onion-menu](./onion-menu.md) | 29% | 27 | 7 | 0 | 8 | 9 | 3 | 12 | – |
| [empty-state](./empty-state.md) | 29% | 17 | 5 | 7 | 5 | 0 | 0 | 6 | y |
| [banner](./banner.md) | 30% | 10 | 3 | 5 | 1 | 1 | 0 | 42 | y |
@ -139,8 +142,8 @@ La columna «contrato» cuenta las claves **públicas** del bloque del component
| [menu-dial](./menu-dial.md) | 38% | 8 | 3 | 0 | 1 | 4 | 0 | 3 | y |
| [mockup](./mockup.md) | 38% | 29 | 11 | 0 | 13 | 5 | 0 | 0 | – |
| [date-range-picker](./date-range-picker.md) | 40% | 53 | 20 | 9 | 19 | 2 | 3 | 22 | y |
| [password-field](./password-field.md) | 40% | 36 | 14 | 2 | 9 | 10 | 1 | 23 | y |
| [button-group](./button-group.md) | 40% | 5 | 2 | 0 | 0 | 3 | 0 | 1 | – |
| [password-field](./password-field.md) | 41% | 35 | 14 | 2 | 9 | 9 | 1 | 23 | y |
| [aura](./aura.md) | 43% | 35 | 15 | 0 | 14 | 6 | 0 | 24 | y |
| [qr-code](./qr-code.md) | 43% | 7 | 3 | 0 | 0 | 4 | 0 | 10 | – |
| [navigation-menu](./navigation-menu.md) | 44% | 38 | 15 | 1 | 13 | 5 | 4 | 26 | y |
@ -167,10 +170,10 @@ La columna «contrato» cuenta las claves **públicas** del bloque del component
| [cropper](./cropper.md) | 60% | 27 | 15 | 0 | 3 | 7 | 2 | 15 | – |
| [mark](./mark.md) | 60% | 5 | 3 | 2 | 0 | 0 | 0 | 3 | – |
| [emoji-picker](./emoji-picker.md) | 61% | 32 | 17 | 0 | 8 | 3 | 4 | 17 | – |
| [pin-input](./pin-input.md) | 61% | 19 | 11 | 0 | 6 | 1 | 1 | 20 | y |
| [clipboard](./clipboard.md) | 63% | 8 | 5 | 2 | 1 | 0 | 0 | 6 | – |
| [spin-field](./spin-field.md) | 64% | 27 | 16 | 0 | 8 | 1 | 2 | 20 | – |
| [meter](./meter.md) | 64% | 14 | 9 | 1 | 2 | 2 | 0 | 28 | y |
| [pin-input](./pin-input.md) | 65% | 18 | 11 | 0 | 6 | 0 | 1 | 20 | y |
| [tag-group](./tag-group.md) | 65% | 46 | 28 | 14 | 0 | 1 | 3 | 91 | y |
| [image-adjustments](./image-adjustments.md) | 67% | 18 | 10 | 0 | 4 | 1 | 3 | 12 | – |
| [virtual-list](./virtual-list.md) | 67% | 13 | 8 | 0 | 0 | 4 | 1 | 12 | – |
@ -184,19 +187,19 @@ La columna «contrato» cuenta las claves **públicas** del bloque del component
| [form](./form.md) | 71% | 52 | 36 | 8 | 5 | 2 | 1 | 54 | y |
| [image-picker](./image-picker.md) | 71% | 20 | 12 | 0 | 1 | 4 | 3 | 13 | – |
| [skip-link](./skip-link.md) | 71% | 8 | 5 | 0 | 0 | 2 | 1 | 8 | – |
| [field](./field.md) | 72% | 73 | 49 | 1 | 7 | 11 | 5 | 60 | y |
| [dialog](./dialog.md) | 73% | 33 | 24 | 4 | 4 | 1 | 0 | 37 | y |
| [virtual-grid](./virtual-grid.md) | 73% | 12 | 8 | 0 | 0 | 3 | 1 | 12 | – |
| [timeline](./timeline.md) | 73% | 49 | 36 | 10 | 0 | 3 | 0 | 45 | y |
| [field](./field.md) | 73% | 72 | 49 | 1 | 7 | 10 | 5 | 60 | y |
| [metrics](./metrics.md) | 74% | 50 | 37 | 0 | 9 | 4 | 0 | 68 | y |
| [editable](./editable.md) | 75% | 44 | 30 | 7 | 1 | 2 | 4 | 56 | y |
| [avatar](./avatar.md) | 75% | 36 | 27 | 3 | 0 | 6 | 0 | 0 | y |
| [knob](./knob.md) | 75% | 27 | 18 | 1 | 1 | 4 | 3 | 33 | – |
| [switch](./switch.md) | 76% | 22 | 16 | 4 | 1 | 0 | 1 | 51 | y |
| [file-upload](./file-upload.md) | 76% | 61 | 45 | 9 | 1 | 4 | 2 | 98 | y |
| [timeline](./timeline.md) | 77% | 47 | 36 | 10 | 0 | 1 | 0 | 45 | y |
| [carousel](./carousel.md) | 77% | 35 | 23 | 2 | 0 | 5 | 5 | 27 | – |
| [radio-group](./radio-group.md) | 77% | 75 | 56 | 10 | 7 | 0 | 2 | 61 | y |
| [chat-log](./chat-log.md) | 77% | 42 | 30 | 0 | 4 | 5 | 3 | 31 | – |
| [knob](./knob.md) | 78% | 26 | 18 | 1 | 1 | 3 | 3 | 33 | – |
| [stepper](./stepper.md) | 79% | 60 | 44 | 11 | 0 | 1 | 4 | 69 | y |
| [chat-composer](./chat-composer.md) | 79% | 44 | 31 | 0 | 3 | 5 | 5 | 31 | – |
| [card](./card.md) | 80% | 36 | 28 | 7 | 0 | 0 | 1 | 97 | y |
@ -204,7 +207,6 @@ La columna «contrato» cuenta las claves **públicas** del bloque del component
| [rating-group](./rating-group.md) | 80% | 16 | 12 | 0 | 1 | 2 | 1 | 25 | y |
| [code-block](./code-block.md) | 81% | 26 | 21 | 2 | 3 | 0 | 0 | 20 | – |
| [toggle](./toggle.md) | 81% | 28 | 22 | 1 | 1 | 3 | 1 | 119 | y |
| [fab](./fab.md) | 82% | 17 | 14 | 0 | 2 | 1 | 0 | 10 | – |
| [select](./select.md) | 83% | 72 | 54 | 5 | 3 | 3 | 7 | 101 | y |
| [calendar](./calendar.md) | 84% | 71 | 57 | 7 | 0 | 4 | 3 | 74 | – |
| [chat-message](./chat-message.md) | 84% | 84 | 65 | 0 | 6 | 6 | 7 | 75 | y |
@ -212,7 +214,7 @@ La columna «contrato» cuenta las claves **públicas** del bloque del component
| [combobox](./combobox.md) | 85% | 97 | 76 | 4 | 3 | 6 | 8 | 106 | – |
| [kbd](./kbd.md) | 86% | 14 | 12 | 0 | 1 | 1 | 0 | 13 | – |
| [table](./table.md) | 86% | 46 | 37 | 3 | 0 | 3 | 3 | 45 | – |
| [result](./result.md) | 86% | 22 | 19 | 0 | 0 | 3 | 0 | 27 | – |
| [fab](./fab.md) | 88% | 16 | 14 | 0 | 2 | 0 | 0 | 10 | – |
| [announce](./announce.md) | 88% | 8 | 7 | 0 | 1 | 0 | 0 | 9 | – |
| [media-player](./media-player.md) | 88% | 49 | 43 | 0 | 0 | 6 | 0 | 61 | – |
| [tags-input](./tags-input.md) | 88% | 46 | 37 | 4 | 1 | 0 | 4 | 90 | y |
@ -222,6 +224,7 @@ La columna «contrato» cuenta las claves **públicas** del bloque del component
| [chart](./chart.md) | 89% | 95 | 81 | 0 | 0 | 10 | 4 | 45 | – |
| [card-group](./card-group.md) | 90% | 22 | 18 | 0 | 0 | 2 | 2 | 20 | – |
| [collapsible](./collapsible.md) | 90% | 12 | 9 | 0 | 1 | 0 | 2 | 11 | – |
| [result](./result.md) | 90% | 21 | 19 | 0 | 0 | 2 | 0 | 27 | – |
| [accordion](./accordion.md) | 91% | 65 | 58 | 1 | 0 | 5 | 1 | 76 | y |
| [toolbar](./toolbar.md) | 91% | 35 | 30 | 2 | 0 | 1 | 2 | 54 | y |
| [tree-view](./tree-view.md) | 92% | 28 | 24 | 1 | 0 | 1 | 2 | 46 | – |

@ -6,7 +6,7 @@
> [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7.
- **Medido**: 2026-08-22 · **Alcance**: **91%** — 58 de 64 knobs por token público
- **Knobs de apariencia**: 65 — público 58 · privado 1 · global 0 · literal 5 · sistema 1 _(fuera del ratio)_
- **Knobs de apariencia**: 65 — público 58 · privado 1 · global 0 · literal 5 · sistema 1 · excepción 0 _(los dos últimos, fuera del ratio)_
- **Contrato hoy** (`lib/recipes/base.ts`): 76 pública(s) — `provider-border-width`, `provider-radius`, `outline-provider-bg`, `outline-provider-border`, `outline-item-border`, `outline-content-bg`, `surface-provider-bg`, `surface-provider-border`, `surface-provider-shadow`, `surface-item-border`, `surface-content-bg`, `ghost-provider-bg`, `ghost-provider-border`, `ghost-item-border`, `ghost-content-bg`, `item-border-width`, `trigger-min-height-xs`, `trigger-min-height-sm`, `trigger-min-height-md`, `trigger-min-height-lg`, `trigger-min-height-full`, `trigger-padding-inline-xs`, `trigger-padding-inline-sm`, `trigger-padding-inline-md`, `trigger-padding-inline-lg`, `trigger-padding-inline-full`, `trigger-padding-block-xs`, `trigger-padding-block-sm`, `trigger-padding-block-md`, `trigger-padding-block-lg`, `trigger-padding-block-full`, `trigger-gap`, `trigger-font-family`, `trigger-font-size-xs`, `trigger-font-size-sm`, `trigger-font-size-md`, `trigger-font-size-lg`, `trigger-font-size-full`, `trigger-font-weight`, `trigger-line-height`, `trigger-fg`, `open-trigger-fg`, `disabled-trigger-fg`, `trigger-hover-fg`, `trigger-transition-duration`, `trigger-transition-ease`, `trigger-focus-ring-offset`, `trigger-focus-ring-width`, `trigger-focus-ring-color`, `content-padding-inline-xs`, `content-padding-inline-sm`, `content-padding-inline-md`, `content-padding-inline-lg`, `content-padding-inline-full`, `content-padding-block-xs`, `content-padding-block-sm`, `content-padding-block-md`, `content-padding-block-lg`, `content-padding-block-full`, `content-font-family`, `content-font-size`, `content-line-height`, `content-fg`, `content-open-duration`, `content-close-duration`, `content-open-ease`, `content-close-ease`, `indicator-size-xs`, `indicator-size-sm`, `indicator-size-md`, `indicator-size-lg`, `indicator-fg`, `open-indicator-fg`, `indicator-rotation`, `indicator-transition-duration`, `indicator-transition-ease`
- **Eje `size`**: sí · **ficheros**: `accordion.css`
@ -32,6 +32,14 @@ _Ninguno._
| 4 | `accordion.css:233` | `[data-accordion-indicator] [data-svg='chevron']` | `block-size` | `100%` |
| 5 | `accordion.css:325` | `[data-accordion-content][data-orientation='horizontal']` | `inline-size` | `100%` |
### 1.4 Excepciones firmadas (0) — fuera del ratio
Literales que llevan su anotación `/* literal: <razón> */` en la propia
declaración: la válvula de recipe-contract §3, la misma que honra
`component-audit`. **Una desviación firmada no es deuda** — se listan para que la
razón se lea, no para acuñarlas.
_Ninguno._
## 2. Sistema transversal (1) — informativo, fuera del ratio
Un tema los alcanza **a nivel de sistema**, por diseño (recipe-contract §2).

@ -5,8 +5,8 @@
> Vista de conjunto: [README](./README.md) · método y protocolo:
> [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7.
- **Medido**: 2026-08-20 · **Alcance**: **—** — 0 de 0 knobs por token público
- **Knobs de apariencia**: 0 — público 0 · privado 0 · global 0 · literal 0 · sistema 0 _(fuera del ratio)_
- **Medido**: 2026-08-22 · **Alcance**: **—** — 0 de 0 knobs por token público
- **Knobs de apariencia**: 0 — público 0 · privado 0 · global 0 · literal 0 · sistema 0 · excepción 0 _(los dos últimos, fuera del ratio)_
- **Contrato hoy** (`lib/recipes/base.ts`): **sin entrada en `base.ts`**
- **Eje `size`**: no · **ficheros**: `alert-dialog.css`
@ -24,6 +24,14 @@ _Ninguno._
_Ninguno._
### 1.4 Excepciones firmadas (0) — fuera del ratio
Literales que llevan su anotación `/* literal: <razón> */` en la propia
declaración: la válvula de recipe-contract §3, la misma que honra
`component-audit`. **Una desviación firmada no es deuda** — se listan para que la
razón se lea, no para acuñarlas.
_Ninguno._
## 2. Sistema transversal (0) — informativo, fuera del ratio
Un tema los alcanza **a nivel de sistema**, por diseño (recipe-contract §2).

@ -5,8 +5,8 @@
> Vista de conjunto: [README](./README.md) · método y protocolo:
> [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7.
- **Medido**: 2026-08-20 · **Alcance**: **20%** — 2 de 10 knobs por token público
- **Knobs de apariencia**: 11 — público 2 · privado 0 · global 8 · literal 0 · sistema 1 _(fuera del ratio)_
- **Medido**: 2026-08-22 · **Alcance**: **20%** — 2 de 10 knobs por token público
- **Knobs de apariencia**: 11 — público 2 · privado 0 · global 8 · literal 0 · sistema 1 · excepción 0 _(los dos últimos, fuera del ratio)_
- **Contrato hoy** (`lib/recipes/base.ts`): 2 pública(s) — `indent`, `rail-width`
- **Eje `size`**: no · **ficheros**: `anchor-nav.css`
@ -33,6 +33,14 @@ _Ninguno._
_Ninguno._
### 1.4 Excepciones firmadas (0) — fuera del ratio
Literales que llevan su anotación `/* literal: <razón> */` en la propia
declaración: la válvula de recipe-contract §3, la misma que honra
`component-audit`. **Una desviación firmada no es deuda** — se listan para que la
razón se lea, no para acuñarlas.
_Ninguno._
## 2. Sistema transversal (1) — informativo, fuera del ratio
Un tema los alcanza **a nivel de sistema**, por diseño (recipe-contract §2).

@ -5,8 +5,8 @@
> Vista de conjunto: [README](./README.md) · método y protocolo:
> [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7.
- **Medido**: 2026-08-21 · **Alcance**: **88%** — 7 de 8 knobs por token público
- **Knobs de apariencia**: 8 — público 7 · privado 0 · global 1 · literal 0 · sistema 0 _(fuera del ratio)_
- **Medido**: 2026-08-22 · **Alcance**: **88%** — 7 de 8 knobs por token público
- **Knobs de apariencia**: 8 — público 7 · privado 0 · global 1 · literal 0 · sistema 0 · excepción 0 _(los dos últimos, fuera del ratio)_
- **Contrato hoy** (`lib/recipes/base.ts`): 9 pública(s) — `fg`, `padding-block`, `padding-inline`, `radius`, `border-width`, `border`, `bg`, `font-size`, `line-height`
- **Eje `size`**: no · **ficheros**: `announce.css`
@ -26,6 +26,14 @@ _Ninguno._
_Ninguno._
### 1.4 Excepciones firmadas (0) — fuera del ratio
Literales que llevan su anotación `/* literal: <razón> */` en la propia
declaración: la válvula de recipe-contract §3, la misma que honra
`component-audit`. **Una desviación firmada no es deuda** — se listan para que la
razón se lea, no para acuñarlas.
_Ninguno._
## 2. Sistema transversal (0) — informativo, fuera del ratio
Un tema los alcanza **a nivel de sistema**, por diseño (recipe-contract §2).

@ -5,8 +5,8 @@
> Vista de conjunto: [README](./README.md) · método y protocolo:
> [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7.
- **Medido**: 2026-08-20 · **Alcance**: **0%** — 0 de 3 knobs por token público
- **Knobs de apariencia**: 3 — público 0 · privado 0 · global 1 · literal 2 · sistema 0 _(fuera del ratio)_
- **Medido**: 2026-08-22 · **Alcance**: **0%** — 0 de 3 knobs por token público
- **Knobs de apariencia**: 3 — público 0 · privado 0 · global 1 · literal 2 · sistema 0 · excepción 0 _(los dos últimos, fuera del ratio)_
- **Contrato hoy** (`lib/recipes/base.ts`): **sin entrada en `base.ts`**
- **Eje `size`**: no · **ficheros**: `aspect-ratio.css`
@ -29,6 +29,14 @@ _Ninguno._
| 1 | `aspect-ratio.css:30` | `[data-box][data-aspect-ratio] > *` | `inline-size` | `100%` |
| 2 | `aspect-ratio.css:31` | `[data-box][data-aspect-ratio] > *` | `block-size` | `100%` |
### 1.4 Excepciones firmadas (0) — fuera del ratio
Literales que llevan su anotación `/* literal: <razón> */` en la propia
declaración: la válvula de recipe-contract §3, la misma que honra
`component-audit`. **Una desviación firmada no es deuda** — se listan para que la
razón se lea, no para acuñarlas.
_Ninguno._
## 2. Sistema transversal (0) — informativo, fuera del ratio
Un tema los alcanza **a nivel de sistema**, por diseño (recipe-contract §2).

@ -5,8 +5,8 @@
> Vista de conjunto: [README](./README.md) · método y protocolo:
> [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7.
- **Medido**: 2026-08-20 · **Alcance**: **37%** — 7 de 19 knobs por token público
- **Knobs de apariencia**: 19 — público 7 · privado 0 · global 8 · literal 4 · sistema 0 _(fuera del ratio)_
- **Medido**: 2026-08-22 · **Alcance**: **37%** — 7 de 19 knobs por token público
- **Knobs de apariencia**: 19 — público 7 · privado 0 · global 8 · literal 4 · sistema 0 · excepción 0 _(los dos últimos, fuera del ratio)_
- **Contrato hoy** (`lib/recipes/base.ts`): 5 pública(s) — `gap`, `artwork-radius`, `artwork-size-card`, `artwork-size-row`, `artwork-size-bar`
- **Eje `size`**: no · **ficheros**: `audio-player.css`
@ -38,6 +38,14 @@ _Ninguno._
| 3 | `audio-player.css:59` | `[data-media-player][data-variant] [data-media-player-title]` | `font-weight` | `600` |
| 4 | `audio-player.css:80` | `[data-media-player][data-variant='card'] [data-media-player-artwork]` | `inline-size` | `100%` |
### 1.4 Excepciones firmadas (0) — fuera del ratio
Literales que llevan su anotación `/* literal: <razón> */` en la propia
declaración: la válvula de recipe-contract §3, la misma que honra
`component-audit`. **Una desviación firmada no es deuda** — se listan para que la
razón se lea, no para acuñarlas.
_Ninguno._
## 2. Sistema transversal (0) — informativo, fuera del ratio
Un tema los alcanza **a nivel de sistema**, por diseño (recipe-contract §2).

@ -6,7 +6,7 @@
> [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7.
- **Medido**: 2026-08-22 · **Alcance**: **43%** — 15 de 35 knobs por token público
- **Knobs de apariencia**: 35 — público 15 · privado 0 · global 14 · literal 6 · sistema 0 _(fuera del ratio)_
- **Knobs de apariencia**: 35 — público 15 · privado 0 · global 14 · literal 6 · sistema 0 · excepción 0 _(los dos últimos, fuera del ratio)_
- **Contrato hoy** (`lib/recipes/base.ts`): 24 pública(s) — `orb-size-sm`, `orb-size-md`, `orb-size-lg`, `orb-radius`, `gap`, `orb-color-idle`, `orb-color-offered`, `orb-color-planned`, `orb-color-reviewing`, `orb-color-acting`, `orb-color-escalated`, `orb-halo-alpha`, `ring-scale`, `ring-track-fg`, `ring-track-width`, `ring-arc-width`, `ring-halo-width`, `ring-halo-opacity`, `status-fg`, `status-weight`, `status-gap`, `status-detail-fg`, `transition-duration`, `transition-ease`
- **Eje `size`**: sí · **ficheros**: `aura.css`
@ -46,6 +46,14 @@ _Ninguno._
| 5 | `aura.css:195` | `[data-aura-region]` | `inline-size` | `1px` |
| 6 | `aura.css:196` | `[data-aura-region]` | `block-size` | `1px` |
### 1.4 Excepciones firmadas (0) — fuera del ratio
Literales que llevan su anotación `/* literal: <razón> */` en la propia
declaración: la válvula de recipe-contract §3, la misma que honra
`component-audit`. **Una desviación firmada no es deuda** — se listan para que la
razón se lea, no para acuñarlas.
_Ninguno._
## 2. Sistema transversal (0) — informativo, fuera del ratio
Un tema los alcanza **a nivel de sistema**, por diseño (recipe-contract §2).

@ -5,8 +5,8 @@
> Vista de conjunto: [README](./README.md) · método y protocolo:
> [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7.
- **Medido**: 2026-08-20 · **Alcance**: **—** — 0 de 0 knobs por token público
- **Knobs de apariencia**: 0 — público 0 · privado 0 · global 0 · literal 0 · sistema 0 _(fuera del ratio)_
- **Medido**: 2026-08-22 · **Alcance**: **—** — 0 de 0 knobs por token público
- **Knobs de apariencia**: 0 — público 0 · privado 0 · global 0 · literal 0 · sistema 0 · excepción 0 _(los dos últimos, fuera del ratio)_
- **Contrato hoy** (`lib/recipes/base.ts`): **sin entrada en `base.ts`**
- **Eje `size`**: no · **ficheros**: `auto-grid.css`
@ -24,6 +24,14 @@ _Ninguno._
_Ninguno._
### 1.4 Excepciones firmadas (0) — fuera del ratio
Literales que llevan su anotación `/* literal: <razón> */` en la propia
declaración: la válvula de recipe-contract §3, la misma que honra
`component-audit`. **Una desviación firmada no es deuda** — se listan para que la
razón se lea, no para acuñarlas.
_Ninguno._
## 2. Sistema transversal (0) — informativo, fuera del ratio
Un tema los alcanza **a nivel de sistema**, por diseño (recipe-contract §2).

@ -6,7 +6,7 @@
> [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7.
- **Medido**: 2026-08-22 · **Alcance**: **75%** — 27 de 36 knobs por token público
- **Knobs de apariencia**: 36 — público 27 · privado 3 · global 0 · literal 6 · sistema 0 _(fuera del ratio)_
- **Knobs de apariencia**: 36 — público 27 · privado 3 · global 0 · literal 6 · sistema 0 · excepción 0 _(los dos últimos, fuera del ratio)_
- **Contrato hoy** (`lib/recipes/base.ts`): **sin entrada en `base.ts`**
- **Eje `size`**: sí · **ficheros**: `avatar.css`
@ -35,6 +35,14 @@ _Ninguno._
| 5 | `avatar.css:123` | `[data-avatar-fallback]` | `line-height` | `1` |
| 6 | `avatar.css:231` | `[data-avatar-badge]` | `line-height` | `1` |
### 1.4 Excepciones firmadas (0) — fuera del ratio
Literales que llevan su anotación `/* literal: <razón> */` en la propia
declaración: la válvula de recipe-contract §3, la misma que honra
`component-audit`. **Una desviación firmada no es deuda** — se listan para que la
razón se lea, no para acuñarlas.
_Ninguno._
## 2. Sistema transversal (0) — informativo, fuera del ratio
Un tema los alcanza **a nivel de sistema**, por diseño (recipe-contract §2).

@ -6,7 +6,7 @@
> [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7.
- **Medido**: 2026-08-22 · **Alcance**: **57%** — 13 de 23 knobs por token público
- **Knobs de apariencia**: 26 — público 13 · privado 1 · global 6 · literal 3 · sistema 3 _(fuera del ratio)_
- **Knobs de apariencia**: 26 — público 13 · privado 1 · global 6 · literal 3 · sistema 3 · excepción 0 _(los dos últimos, fuera del ratio)_
- **Contrato hoy** (`lib/recipes/base.ts`): 31 pública(s) — `pattern-rule`, `pattern-cell`, `pattern-dot-size`, `pattern-glow-size`, `pattern-glow-at`, `pattern-glow-strength`, `pattern-mesh-opacity`, `pattern-noise-opacity`, `pattern-vignette-strength`, `pattern-lines-width`, `pattern-lines-gap`, `pattern-lines-angle`, `pattern-rings-width`, `pattern-rings-gap`, `fade-size`, `fade-at`, `scrim-fg`, `scrim-fg-over-dark`, `scrim-fg-over-light`, `scrim-strength-xs`, `scrim-strength-sm`, `scrim-strength-md`, `scrim-strength-lg`, `scrim-strength-xl`, `gradient-drift-duration`, `pause-offset`, `pause-z`, `parallax-travel`, `spotlight-size`, `spotlight-strength`, `spotlight-fg`
- **Eje `size`**: no · **ficheros**: `background.css`
@ -37,6 +37,14 @@
| 2 | `background.css:77` | `[data-background-layer] :where(img, video)` | `block-size` | `100%` |
| 3 | `background.css:239` | `[data-background-layer][data-pattern='noise']` | `background-image` | `url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.8' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='160' height='160' filter='url(%23n)'/%3E%3C/svg%3E")` |
### 1.4 Excepciones firmadas (0) — fuera del ratio
Literales que llevan su anotación `/* literal: <razón> */` en la propia
declaración: la válvula de recipe-contract §3, la misma que honra
`component-audit`. **Una desviación firmada no es deuda** — se listan para que la
razón se lea, no para acuñarlas.
_Ninguno._
## 2. Sistema transversal (3) — informativo, fuera del ratio
Un tema los alcanza **a nivel de sistema**, por diseño (recipe-contract §2).

@ -6,7 +6,7 @@
> [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7.
- **Medido**: 2026-08-22 · **Alcance**: **59%** — 13 de 22 knobs por token público
- **Knobs de apariencia**: 22 — público 13 · privado 6 · global 1 · literal 2 · sistema 0 _(fuera del ratio)_
- **Knobs de apariencia**: 22 — público 13 · privado 6 · global 1 · literal 2 · sistema 0 · excepción 0 _(los dos últimos, fuera del ratio)_
- **Contrato hoy** (`lib/recipes/base.ts`): 65 pública(s) — `padding-inline-xs`, `padding-inline-sm`, `padding-inline-md`, `padding-inline-lg`, `gap-xs`, `gap-sm`, `gap-md`, `gap-lg`, `font-family`, `font-size-xs`, `font-size-sm`, `font-size-md`, `font-size-lg`, `font-weight`, `line-height`, `letter-spacing`, `border-width`, `radius-sm`, `radius-md`, `radius-lg`, `radius-full`, `dot-size`, `icon-size`, `remove-size`, `remove-margin-start`, `primary-solid`, `primary-text`, `primary-contrast`, `secondary-solid`, `secondary-text`, `secondary-contrast`, `neutral-solid`, `neutral-text`, `neutral-contrast`, `affirm-solid`, `affirm-text`, `affirm-contrast`, `fulfill-track`, `fulfill-border`, `fulfill-solid`, `fulfill-text`, `fulfill-contrast`, `risk-solid`, `risk-text`, `risk-contrast`, `threat-solid`, `threat-text`, `threat-contrast`, `loss-track`, `loss-border`, `loss-solid`, `loss-text`, `loss-contrast`, `primary-track`, `primary-border`, `secondary-track`, `secondary-border`, `neutral-track`, `neutral-border`, `affirm-track`, `affirm-border`, `risk-track`, `risk-border`, `threat-track`, `threat-border` · 5 privada(s) forward — `_palette-track`, `_palette-border`, `_palette-solid`, `_palette-text`, `_palette-contrast`
- **Eje `size`**: sí · **ficheros**: `badge.css`
@ -36,6 +36,14 @@
| 1 | `badge.css:172` | `[data-badge-icon] :is(svg, [data-svg], [data-icon])` | `inline-size` | `100%` |
| 2 | `badge.css:173` | `[data-badge-icon] :is(svg, [data-svg], [data-icon])` | `block-size` | `100%` |
### 1.4 Excepciones firmadas (0) — fuera del ratio
Literales que llevan su anotación `/* literal: <razón> */` en la propia
declaración: la válvula de recipe-contract §3, la misma que honra
`component-audit`. **Una desviación firmada no es deuda** — se listan para que la
razón se lea, no para acuñarlas.
_Ninguno._
## 2. Sistema transversal (0) — informativo, fuera del ratio
Un tema los alcanza **a nivel de sistema**, por diseño (recipe-contract §2).

@ -6,7 +6,7 @@
> [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7.
- **Medido**: 2026-08-22 · **Alcance**: **30%** — 3 de 10 knobs por token público
- **Knobs de apariencia**: 10 — público 3 · privado 5 · global 1 · literal 1 · sistema 0 _(fuera del ratio)_
- **Knobs de apariencia**: 10 — público 3 · privado 5 · global 1 · literal 1 · sistema 0 · excepción 0 _(los dos últimos, fuera del ratio)_
- **Contrato hoy** (`lib/recipes/base.ts`): 42 pública(s) — `gap`, `radius`, `primary-solid`, `primary-contrast`, `primary-track`, `primary-border`, `primary-text`, `secondary-solid`, `secondary-contrast`, `secondary-track`, `secondary-border`, `secondary-text`, `neutral-solid`, `neutral-contrast`, `neutral-track`, `neutral-border`, `neutral-text`, `affirm-solid`, `affirm-contrast`, `affirm-track`, `affirm-border`, `affirm-text`, `fulfill-solid`, `fulfill-contrast`, `fulfill-track`, `fulfill-border`, `fulfill-text`, `risk-solid`, `risk-contrast`, `risk-track`, `risk-border`, `risk-text`, `threat-solid`, `threat-contrast`, `threat-track`, `threat-border`, `threat-text`, `loss-solid`, `loss-contrast`, `loss-track`, `loss-border`, `loss-text`
- **Eje `size`**: sí · **ficheros**: `banner.css`
@ -34,6 +34,14 @@
| ---: | --- | --- | --- | --- |
| 1 | `banner.css:25` | `[data-banner]` | `inline-size` | `100%` |
### 1.4 Excepciones firmadas (0) — fuera del ratio
Literales que llevan su anotación `/* literal: <razón> */` en la propia
declaración: la válvula de recipe-contract §3, la misma que honra
`component-audit`. **Una desviación firmada no es deuda** — se listan para que la
razón se lea, no para acuñarlas.
_Ninguno._
## 2. Sistema transversal (0) — informativo, fuera del ratio
Un tema los alcanza **a nivel de sistema**, por diseño (recipe-contract §2).

@ -5,8 +5,8 @@
> Vista de conjunto: [README](./README.md) · método y protocolo:
> [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7.
- **Medido**: 2026-08-20 · **Alcance**: **100%** — 5 de 5 knobs por token público
- **Knobs de apariencia**: 5 — público 5 · privado 0 · global 0 · literal 0 · sistema 0 _(fuera del ratio)_
- **Medido**: 2026-08-22 · **Alcance**: **100%** — 5 de 5 knobs por token público
- **Knobs de apariencia**: 5 — público 5 · privado 0 · global 0 · literal 0 · sistema 0 · excepción 0 _(los dos últimos, fuera del ratio)_
- **Contrato hoy** (`lib/recipes/base.ts`): 7 pública(s) — `fg`, `bg`, `radius`, `text-font-family`, `text-letter-spacing`, `text-fg`, `invalid-border`
- **Eje `size`**: no · **ficheros**: `barcode.css`
@ -24,6 +24,14 @@ _Ninguno._
_Ninguno._
### 1.4 Excepciones firmadas (0) — fuera del ratio
Literales que llevan su anotación `/* literal: <razón> */` en la propia
declaración: la válvula de recipe-contract §3, la misma que honra
`component-audit`. **Una desviación firmada no es deuda** — se listan para que la
razón se lea, no para acuñarlas.
_Ninguno._
## 2. Sistema transversal (0) — informativo, fuera del ratio
Un tema los alcanza **a nivel de sistema**, por diseño (recipe-contract §2).

@ -5,8 +5,8 @@
> Vista de conjunto: [README](./README.md) · método y protocolo:
> [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7.
- **Medido**: 2026-08-20 · **Alcance**: **100%** — 9 de 9 knobs por token público
- **Knobs de apariencia**: 9 — público 9 · privado 0 · global 0 · literal 0 · sistema 0 _(fuera del ratio)_
- **Medido**: 2026-08-22 · **Alcance**: **100%** — 9 de 9 knobs por token público
- **Knobs de apariencia**: 9 — público 9 · privado 0 · global 0 · literal 0 · sistema 0 · excepción 0 _(los dos últimos, fuera del ratio)_
- **Contrato hoy** (`lib/recipes/base.ts`): 43 pública(s) — `display`, `position`, `width`, `min-width`, `max-width`, `height`, `min-height`, `max-height`, `padding`, `padding-block`, `padding-inline`, `padding-top`, `padding-right`, `padding-bottom`, `padding-left`, `margin`, `margin-block`, `margin-inline`, `margin-top`, `margin-right`, `margin-bottom`, `margin-left`, `gap`, `top`, `right`, `bottom`, `left`, `inset`, `inset-block`, `inset-inline`, `overflow`, `overflow-x`, `overflow-y`, `grow`, `shrink`, `basis`, `order`, `align-self`, `justify-self`, `place-self`, `grid-column`, `grid-row`, `grid-area`
- **Eje `size`**: no · **ficheros**: `box.css`
@ -24,6 +24,14 @@ _Ninguno._
_Ninguno._
### 1.4 Excepciones firmadas (0) — fuera del ratio
Literales que llevan su anotación `/* literal: <razón> */` en la propia
declaración: la válvula de recipe-contract §3, la misma que honra
`component-audit`. **Una desviación firmada no es deuda** — se listan para que la
razón se lea, no para acuñarlas.
_Ninguno._
## 2. Sistema transversal (0) — informativo, fuera del ratio
Un tema los alcanza **a nivel de sistema**, por diseño (recipe-contract §2).

@ -6,7 +6,7 @@
> [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7.
- **Medido**: 2026-08-22 · **Alcance**: **100%** — 20 de 20 knobs por token público
- **Knobs de apariencia**: 23 — público 20 · privado 0 · global 0 · literal 0 · sistema 3 _(fuera del ratio)_
- **Knobs de apariencia**: 23 — público 20 · privado 0 · global 0 · literal 0 · sistema 3 · excepción 0 _(los dos últimos, fuera del ratio)_
- **Contrato hoy** (`lib/recipes/base.ts`): 28 pública(s) — `gap-xs`, `gap-sm`, `gap-md`, `gap-lg`, `font-family`, `font-size-xs`, `font-size-sm`, `font-size-md`, `font-size-lg`, `line-height`, `fg`, `link-radius`, `link-fg`, `hover-link-fg`, `current-link-fg`, `link-font-weight`, `current-link-font-weight`, `separator-fg`, `ellipsis-size`, `ellipsis-radius`, `ellipsis-border-width`, `ellipsis-border`, `hover-ellipsis-border`, `ellipsis-bg`, `ellipsis-fg`, `hover-ellipsis-fg`, `transition-duration`, `transition-ease`
- **Eje `size`**: sí · **ficheros**: `breadcrumb.css`
@ -24,6 +24,14 @@ _Ninguno._
_Ninguno._
### 1.4 Excepciones firmadas (0) — fuera del ratio
Literales que llevan su anotación `/* literal: <razón> */` en la propia
declaración: la válvula de recipe-contract §3, la misma que honra
`component-audit`. **Una desviación firmada no es deuda** — se listan para que la
razón se lea, no para acuñarlas.
_Ninguno._
## 2. Sistema transversal (3) — informativo, fuera del ratio
Un tema los alcanza **a nivel de sistema**, por diseño (recipe-contract §2).

@ -5,8 +5,8 @@
> Vista de conjunto: [README](./README.md) · método y protocolo:
> [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7.
- **Medido**: 2026-08-20 · **Alcance**: **40%** — 2 de 5 knobs por token público
- **Knobs de apariencia**: 5 — público 2 · privado 0 · global 0 · literal 3 · sistema 0 _(fuera del ratio)_
- **Medido**: 2026-08-22 · **Alcance**: **40%** — 2 de 5 knobs por token público
- **Knobs de apariencia**: 5 — público 2 · privado 0 · global 0 · literal 3 · sistema 0 · excepción 0 _(los dos últimos, fuera del ratio)_
- **Contrato hoy** (`lib/recipes/base.ts`): 1 pública(s) — `divider-strength`
- **Eje `size`**: no · **ficheros**: `button-group.css`
@ -28,6 +28,14 @@ _Ninguno._
| 2 | `button-group.css:47` | `[data-button-group][data-equal][data-orientation='vertical'] > [data-button]` | `inline-size` | `100%` |
| 3 | `button-group.css:51` | `[data-button-group][data-equal]:not([data-orientation='vertical'])` | `inline-size` | `100%` |
### 1.4 Excepciones firmadas (0) — fuera del ratio
Literales que llevan su anotación `/* literal: <razón> */` en la propia
declaración: la válvula de recipe-contract §3, la misma que honra
`component-audit`. **Una desviación firmada no es deuda** — se listan para que la
razón se lea, no para acuñarlas.
_Ninguno._
## 2. Sistema transversal (0) — informativo, fuera del ratio
Un tema los alcanza **a nivel de sistema**, por diseño (recipe-contract §2).

@ -6,7 +6,7 @@
> [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7.
- **Medido**: 2026-08-22 · **Alcance**: **55%** — 16 de 29 knobs por token público
- **Knobs de apariencia**: 30 — público 16 · privado 6 · global 0 · literal 7 · sistema 1 _(fuera del ratio)_
- **Knobs de apariencia**: 30 — público 16 · privado 6 · global 0 · literal 7 · sistema 1 · excepción 0 _(los dos últimos, fuera del ratio)_
- **Contrato hoy** (`lib/recipes/base.ts`): 105 pública(s) — `height-xs`, `height-sm`, `height-md`, `height-lg`, `height-xl`, `padding-inline-xs`, `padding-inline-sm`, `padding-inline-md`, `padding-inline-lg`, `padding-inline-xl`, `gap-xs`, `gap-sm`, `gap-md`, `gap-lg`, `gap-xl`, `font-family`, `line-height`, `letter-spacing`, `font-size-xs`, `font-size-sm`, `font-size-md`, `font-size-lg`, `font-size-xl`, `font-weight-xs`, `font-weight-sm`, `font-weight-md`, `font-weight-lg`, `font-weight-xl`, `icon-size-xs`, `icon-size-sm`, `icon-size-md`, `icon-size-lg`, `icon-size-xl`, `radius-sm`, `radius-md`, `radius-lg`, `radius-xl`, `border-width`, `shadow`, `transition-duration`, `transition-ease`, `disabled-opacity`, `primary-track`, `primary-element`, `primary-border`, `primary-solid`, `primary-solid-hover`, `primary-text`, `primary-contrast`, `secondary-track`, `secondary-element`, `secondary-border`, `secondary-solid`, `secondary-solid-hover`, `secondary-text`, `secondary-contrast`, `neutral-track`, `neutral-element`, `neutral-border`, `neutral-solid`, `neutral-solid-hover`, `neutral-text`, `neutral-contrast`, `affirm-track`, `affirm-element`, `affirm-border`, `affirm-solid`, `affirm-solid-hover`, `affirm-text`, `affirm-contrast`, `fulfill-track`, `fulfill-element`, `fulfill-border`, `fulfill-solid`, `fulfill-solid-hover`, `fulfill-text`, `fulfill-contrast`, `risk-track`, `risk-element`, `risk-border`, `risk-solid`, `risk-solid-hover`, `risk-text`, `risk-contrast`, `threat-track`, `threat-element`, `threat-border`, `threat-solid`, `threat-solid-hover`, `threat-text`, `threat-contrast`, `loss-track`, `loss-element`, `loss-border`, `loss-solid`, `loss-solid-hover`, `loss-text`, `loss-contrast`, `palette-track`, `palette-element`, `palette-border`, `palette-solid`, `palette-solid-hover`, `palette-text`, `palette-contrast`
- **Eje `size`**: sí · **ficheros**: `button.css`
@ -39,6 +39,14 @@ _Ninguno._
| 6 | `button.css:309` | `[data-button-sr-only]` | `inline-size` | `1px` |
| 7 | `button.css:310` | `[data-button-sr-only]` | `block-size` | `1px` |
### 1.4 Excepciones firmadas (0) — fuera del ratio
Literales que llevan su anotación `/* literal: <razón> */` en la propia
declaración: la válvula de recipe-contract §3, la misma que honra
`component-audit`. **Una desviación firmada no es deuda** — se listan para que la
razón se lea, no para acuñarlas.
_Ninguno._
## 2. Sistema transversal (1) — informativo, fuera del ratio
Un tema los alcanza **a nivel de sistema**, por diseño (recipe-contract §2).

@ -5,8 +5,8 @@
> Vista de conjunto: [README](./README.md) · método y protocolo:
> [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7.
- **Medido**: 2026-08-21 · **Alcance**: **84%** — 57 de 68 knobs por token público
- **Knobs de apariencia**: 71 — público 57 · privado 7 · global 0 · literal 4 · sistema 3 _(fuera del ratio)_
- **Medido**: 2026-08-22 · **Alcance**: **84%** — 57 de 68 knobs por token público
- **Knobs de apariencia**: 71 — público 57 · privado 7 · global 0 · literal 4 · sistema 3 · excepción 0 _(los dos últimos, fuera del ratio)_
- **Contrato hoy** (`lib/recipes/base.ts`): 74 pública(s) — `gap`, `padding-xs`, `padding-sm`, `padding-md`, `padding-lg`, `radius`, `border-width`, `border`, `invalid-border`, `bg`, `outline-bg`, `outline-shadow`, `fg`, `shadow`, `font-family`, `font-size-xs`, `font-size-sm`, `font-size-md`, `font-size-lg`, `line-height`, `header-gap`, `heading-fg`, `heading-font-size`, `heading-font-weight`, `control-size-xs`, `control-size-sm`, `control-size-md`, `control-size-lg`, `control-radius`, `control-border-width`, `control-border`, `hover-control-border`, `control-bg`, `control-fg`, `hover-control-fg`, `select-min-width`, `select-padding-inline`, `months-gap`, `grid-gap`, `weekday-size`, `weekday-fg`, `weekday-font-size`, `weekday-font-weight`, `day-size-xs`, `day-size-sm`, `day-size-md`, `day-size-lg`, `day-radius`, `day-border-width`, `day-border`, `hover-day-border`, `day-bg`, `day-fg`, `hover-day-fg`, `day-font-weight`, `day-selected-fg`, `range-start-solid`, `range-start-solid-hover`, `range-start-border`, `range-start-text`, `range-end-solid`, `range-end-solid-hover`, `range-end-border`, `range-end-text`, `day-today-border`, `day-today-fg`, `day-today-font-weight`, `day-outside-fg`, `day-outside-opacity`, `day-weekend-fg`, `day-unavailable-decoration`, `transition-duration`, `transition-ease`, `disabled-opacity` · 5 privada(s) forward — `_palette-solid`, `_palette-solid-hover`, `_palette-track`, `_palette-border`, `_palette-text`
- **Eje `size`**: no · **ficheros**: `calendar-select.css`, `calendar.css`
@ -37,6 +37,14 @@ _Ninguno._
| 3 | `calendar.css:88` | `[data-calendar-month-panel]` | `min-inline-size` | `max-content` |
| 4 | `calendar.css:112` | `[data-calendar-grid]` | `inline-size` | `max-content` |
### 1.4 Excepciones firmadas (0) — fuera del ratio
Literales que llevan su anotación `/* literal: <razón> */` en la propia
declaración: la válvula de recipe-contract §3, la misma que honra
`component-audit`. **Una desviación firmada no es deuda** — se listan para que la
razón se lea, no para acuñarlas.
_Ninguno._
## 2. Sistema transversal (3) — informativo, fuera del ratio
Un tema los alcanza **a nivel de sistema**, por diseño (recipe-contract §2).

@ -5,8 +5,8 @@
> Vista de conjunto: [README](./README.md) · método y protocolo:
> [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7.
- **Medido**: 2026-08-20 · **Alcance**: **27%** — 4 de 15 knobs por token público
- **Knobs de apariencia**: 15 — público 4 · privado 3 · global 7 · literal 1 · sistema 0 _(fuera del ratio)_
- **Medido**: 2026-08-22 · **Alcance**: **27%** — 4 de 15 knobs por token público
- **Knobs de apariencia**: 15 — público 4 · privado 3 · global 7 · literal 1 · sistema 0 · excepción 0 _(los dos últimos, fuera del ratio)_
- **Contrato hoy** (`lib/recipes/base.ts`): 28 pública(s) — `gap`, `padding`, `accent-width`, `radius`, `primary-track`, `primary-text`, `primary-solid`, `secondary-track`, `secondary-text`, `secondary-solid`, `neutral-track`, `neutral-text`, `neutral-solid`, `affirm-track`, `affirm-text`, `affirm-solid`, `fulfill-track`, `fulfill-text`, `fulfill-solid`, `risk-track`, `risk-text`, `risk-solid`, `threat-track`, `threat-text`, `threat-solid`, `loss-track`, `loss-text`, `loss-solid` · 3 privada(s) forward — `_palette-track`, `_palette-text`, `_palette-solid`
- **Eje `size`**: no · **ficheros**: `callout.css`
@ -38,6 +38,14 @@
| ---: | --- | --- | --- | --- |
| 1 | `callout.css:37` | `[data-callout-icon]` | `line-height` | `1` |
### 1.4 Excepciones firmadas (0) — fuera del ratio
Literales que llevan su anotación `/* literal: <razón> */` en la propia
declaración: la válvula de recipe-contract §3, la misma que honra
`component-audit`. **Una desviación firmada no es deuda** — se listan para que la
razón se lea, no para acuñarlas.
_Ninguno._
## 2. Sistema transversal (0) — informativo, fuera del ratio
Un tema los alcanza **a nivel de sistema**, por diseño (recipe-contract §2).

@ -5,8 +5,8 @@
> Vista de conjunto: [README](./README.md) · método y protocolo:
> [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7.
- **Medido**: 2026-08-21 · **Alcance**: **90%** — 18 de 20 knobs por token público
- **Knobs de apariencia**: 22 — público 18 · privado 0 · global 0 · literal 2 · sistema 2 _(fuera del ratio)_
- **Medido**: 2026-08-22 · **Alcance**: **90%** — 18 de 20 knobs por token público
- **Knobs de apariencia**: 22 — público 18 · privado 0 · global 0 · literal 2 · sistema 2 · excepción 0 _(los dos últimos, fuera del ratio)_
- **Contrato hoy** (`lib/recipes/base.ts`): 20 pública(s) — `padding-sm`, `padding-md`, `padding-lg`, `grid-gap-sm`, `grid-gap-md`, `grid-gap-lg`, `padding`, `grid-gap`, `card-radius`, `title-font-weight`, `title-fg`, `title-font-family`, `title-font-size`, `title-line-height`, `title-padding-block-end`, `chevron-size`, `chevron-width`, `description-fg`, `description-font-size`, `description-padding-block-end`
- **Eje `size`**: no · **ficheros**: `card-group.css`
@ -27,6 +27,14 @@ _Ninguno._
| 1 | `card-group.css:21` | `[data-card-group]` | `inline-size` | `100%` |
| 2 | `card-group.css:107` | `[data-card-group-item]` | `block-size` | `100%` |
### 1.4 Excepciones firmadas (0) — fuera del ratio
Literales que llevan su anotación `/* literal: <razón> */` en la propia
declaración: la válvula de recipe-contract §3, la misma que honra
`component-audit`. **Una desviación firmada no es deuda** — se listan para que la
razón se lea, no para acuñarlas.
_Ninguno._
## 2. Sistema transversal (2) — informativo, fuera del ratio
Un tema los alcanza **a nivel de sistema**, por diseño (recipe-contract §2).

@ -6,7 +6,7 @@
> [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7.
- **Medido**: 2026-08-22 · **Alcance**: **80%** — 28 de 35 knobs por token público
- **Knobs de apariencia**: 36 — público 28 · privado 7 · global 0 · literal 0 · sistema 1 _(fuera del ratio)_
- **Knobs de apariencia**: 36 — público 28 · privado 7 · global 0 · literal 0 · sistema 1 · excepción 0 _(los dos últimos, fuera del ratio)_
- **Contrato hoy** (`lib/recipes/base.ts`): 97 pública(s) — `padding-inline-xs`, `padding-inline-sm`, `padding-inline-md`, `padding-inline-lg`, `padding-inline-xl`, `padding-block-xs`, `padding-block-sm`, `padding-block-md`, `padding-block-lg`, `padding-block-xl`, `gap-xs`, `gap-sm`, `gap-md`, `gap-lg`, `gap-xl`, `font-family`, `line-height`, `title-font-family`, `title-font-size-xs`, `title-font-size-sm`, `title-font-size-md`, `title-font-size-lg`, `title-font-size-xl`, `title-font-weight`, `title-line-height`, `title-letter-spacing`, `description-font-family`, `description-font-size-xs`, `description-font-size-sm`, `description-font-size-md`, `description-font-size-lg`, `description-font-size-xl`, `description-line-height`, `description-fg`, `body-font-size-xs`, `body-font-size-sm`, `body-font-size-md`, `body-font-size-lg`, `body-font-size-xl`, `body-line-height`, `border-width`, `radius-sm`, `radius-md`, `radius-lg`, `header-gap`, `footer-gap`, `footer-padding-start`, `footer-border-fg`, `emerge-duration`, `emerge-ease`, `emerge-distance`, `hover-lift`, `hover-shadow`, `press-scale`, `press-duration`, `selected-ring-width`, `disabled-opacity`, `primary-solid`, `primary-text`, `primary-contrast`, `secondary-solid`, `secondary-text`, `secondary-contrast`, `neutral-solid`, `neutral-text`, `neutral-contrast`, `affirm-solid`, `affirm-text`, `affirm-contrast`, `fulfill-track`, `fulfill-border`, `fulfill-solid`, `fulfill-text`, `fulfill-contrast`, `risk-solid`, `risk-text`, `risk-contrast`, `threat-solid`, `threat-text`, `threat-contrast`, `loss-track`, `loss-border`, `loss-solid`, `loss-text`, `loss-contrast`, `primary-track`, `primary-border`, `secondary-track`, `secondary-border`, `neutral-track`, `neutral-border`, `affirm-track`, `affirm-border`, `risk-track`, `risk-border`, `threat-track`, `threat-border` · 5 privada(s) forward — `_palette-track`, `_palette-border`, `_palette-solid`, `_palette-text`, `_palette-contrast`
- **Eje `size`**: sí · **ficheros**: `card.css`
@ -32,6 +32,14 @@ _Ninguno._
_Ninguno._
### 1.4 Excepciones firmadas (0) — fuera del ratio
Literales que llevan su anotación `/* literal: <razón> */` en la propia
declaración: la válvula de recipe-contract §3, la misma que honra
`component-audit`. **Una desviación firmada no es deuda** — se listan para que la
razón se lea, no para acuñarlas.
_Ninguno._
## 2. Sistema transversal (1) — informativo, fuera del ratio
Un tema los alcanza **a nivel de sistema**, por diseño (recipe-contract §2).

@ -5,8 +5,8 @@
> Vista de conjunto: [README](./README.md) · método y protocolo:
> [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7.
- **Medido**: 2026-08-21 · **Alcance**: **77%** — 23 de 30 knobs por token público
- **Knobs de apariencia**: 35 — público 23 · privado 2 · global 0 · literal 5 · sistema 5 _(fuera del ratio)_
- **Medido**: 2026-08-22 · **Alcance**: **77%** — 23 de 30 knobs por token público
- **Knobs de apariencia**: 35 — público 23 · privado 2 · global 0 · literal 5 · sistema 5 · excepción 0 _(los dos últimos, fuera del ratio)_
- **Contrato hoy** (`lib/recipes/base.ts`): 27 pública(s) — `indicator-size-xs`, `indicator-size-sm`, `indicator-size-md`, `indicator-size-lg`, `indicator-size-xl`, `indicator-gap-xs`, `indicator-gap-sm`, `indicator-gap-md`, `indicator-gap-lg`, `indicator-gap-xl`, `indicator-size`, `indicator-gap`, `gap`, `radius`, `font-family`, `fg`, `inner-radius-inset`, `trigger-offset`, `frame-padding`, `border-width`, `border`, `surface-bg`, `vertical-block-size`, `indicator-group-padding-block`, `indicator-bg`, `indicator-radius`, `active-indicator-scale` · 2 privada(s) forward — `_palette-solid`, `_palette-element`
- **Eje `size`**: no · **ficheros**: `carousel.css`
@ -33,6 +33,14 @@ _Ninguno._
| 4 | `carousel.css:86` | `[data-carousel][data-orientation='vertical'] [data-carousel-indicator-group]` | `inline-size` | `max-content` |
| 5 | `carousel.css:91` | `[data-carousel][data-block]` | `inline-size` | `100%` |
### 1.4 Excepciones firmadas (0) — fuera del ratio
Literales que llevan su anotación `/* literal: <razón> */` en la propia
declaración: la válvula de recipe-contract §3, la misma que honra
`component-audit`. **Una desviación firmada no es deuda** — se listan para que la
razón se lea, no para acuñarlas.
_Ninguno._
## 2. Sistema transversal (5) — informativo, fuera del ratio
Un tema los alcanza **a nivel de sistema**, por diseño (recipe-contract §2).

@ -5,8 +5,8 @@
> Vista de conjunto: [README](./README.md) · método y protocolo:
> [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7.
- **Medido**: 2026-08-20 · **Alcance**: **0%** — 0 de 1 knobs por token público
- **Knobs de apariencia**: 1 — público 0 · privado 0 · global 0 · literal 1 · sistema 0 _(fuera del ratio)_
- **Medido**: 2026-08-22 · **Alcance**: **0%** — 0 de 1 knobs por token público
- **Knobs de apariencia**: 1 — público 0 · privado 0 · global 0 · literal 1 · sistema 0 · excepción 0 _(los dos últimos, fuera del ratio)_
- **Contrato hoy** (`lib/recipes/base.ts`): **sin entrada en `base.ts`**
- **Eje `size`**: no · **ficheros**: `cascade.css`
@ -26,6 +26,14 @@ _Ninguno._
| ---: | --- | --- | --- | --- |
| 1 | `cascade.css:31` | `[data-stagger][data-reveal-pending]` | `opacity` | `1` |
### 1.4 Excepciones firmadas (0) — fuera del ratio
Literales que llevan su anotación `/* literal: <razón> */` en la propia
declaración: la válvula de recipe-contract §3, la misma que honra
`component-audit`. **Una desviación firmada no es deuda** — se listan para que la
razón se lea, no para acuñarlas.
_Ninguno._
## 2. Sistema transversal (0) — informativo, fuera del ratio
Un tema los alcanza **a nivel de sistema**, por diseño (recipe-contract §2).

@ -6,7 +6,7 @@
> [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7.
- **Medido**: 2026-08-22 · **Alcance**: **89%** — 81 de 91 knobs por token público
- **Knobs de apariencia**: 95 — público 81 · privado 0 · global 0 · literal 10 · sistema 4 _(fuera del ratio)_
- **Knobs de apariencia**: 95 — público 81 · privado 0 · global 0 · literal 10 · sistema 4 · excepción 0 _(los dos últimos, fuera del ratio)_
- **Contrato hoy** (`lib/recipes/base.ts`): 45 pública(s) — `line-width`, `axis-width`, `grid-width`, `bar-radius`, `point-radius`, `area-opacity`, `slice-stroke-width`, `transition-duration`, `transition-ease`, `tooltip-bg`, `tooltip-border`, `tooltip-radius`, `tooltip-shadow`, `tooltip-padding`, `tooltip-gap`, `crosshair-fg`, `crosshair-width`, `caption-font-size`, `caption-fg`, `label-font-size`, `label-fg`, `label-font-weight`, `gauge-label-font-size`, `axis-fg`, `grid-fg`, `separator-fg`, `smith-boundary-fg`, `track-bg`, `track-height`, `track-radius`, `gap`, `legend-row-gap`, `legend-column-gap`, `legend-item-gap`, `swatch-size`, `swatch-radius`, `tooltip-swatch-size`, `bar-list-row-gap`, `bar-list-column-gap`, `bar-segment-gap`, `bar-segment-track-gap`, `bar-segment-track-radius`, `bar-segment-fill-min-inline-size`, `bar-segment-legend-row-gap`, `bar-segment-legend-column-gap`
- **Eje `size`**: no · **ficheros**: `chart.css`
@ -35,6 +35,14 @@ _Ninguno._
| 9 | `chart.css:256` | `[data-chart-bar-segment]` | `inline-size` | `100%` |
| 10 | `chart.css:266` | `[data-chart-bar-segment-fill]` | `block-size` | `100%` |
### 1.4 Excepciones firmadas (0) — fuera del ratio
Literales que llevan su anotación `/* literal: <razón> */` en la propia
declaración: la válvula de recipe-contract §3, la misma que honra
`component-audit`. **Una desviación firmada no es deuda** — se listan para que la
razón se lea, no para acuñarlas.
_Ninguno._
## 2. Sistema transversal (4) — informativo, fuera del ratio
Un tema los alcanza **a nivel de sistema**, por diseño (recipe-contract §2).

@ -5,8 +5,8 @@
> Vista de conjunto: [README](./README.md) · método y protocolo:
> [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7.
- **Medido**: 2026-08-20 · **Alcance**: **79%** — 31 de 39 knobs por token público
- **Knobs de apariencia**: 44 — público 31 · privado 0 · global 3 · literal 5 · sistema 5 _(fuera del ratio)_
- **Medido**: 2026-08-22 · **Alcance**: **79%** — 31 de 39 knobs por token público
- **Knobs de apariencia**: 44 — público 31 · privado 0 · global 3 · literal 5 · sistema 5 · excepción 0 _(los dos últimos, fuera del ratio)_
- **Contrato hoy** (`lib/recipes/base.ts`): 31 pública(s) — `gap`, `bg`, `border`, `border-width`, `focus-border`, `radius`, `padding-inline`, `padding-block`, `input-font-size`, `input-line-height`, `input-fg`, `input-placeholder-fg`, `input-padding-inline`, `input-padding-block`, `context-bg`, `context-accent`, `context-accent-size`, `context-font-size`, `context-fg`, `context-radius`, `context-padding-inline`, `context-padding-block`, `context-gap`, `attachments-gap`, `send-size`, `send-bg`, `send-fg`, `send-radius`, `transition-duration`, `transition-ease`, `disabled-opacity`
- **Eje `size`**: no · **ficheros**: `chat-composer.css`
@ -34,6 +34,14 @@ _Ninguno._
| 4 | `chat-composer.css:179` | `[data-chat-composer-send] > svg` | `inline-size` | `1.1em` |
| 5 | `chat-composer.css:180` | `[data-chat-composer-send] > svg` | `block-size` | `1.1em` |
### 1.4 Excepciones firmadas (0) — fuera del ratio
Literales que llevan su anotación `/* literal: <razón> */` en la propia
declaración: la válvula de recipe-contract §3, la misma que honra
`component-audit`. **Una desviación firmada no es deuda** — se listan para que la
razón se lea, no para acuñarlas.
_Ninguno._
## 2. Sistema transversal (5) — informativo, fuera del ratio
Un tema los alcanza **a nivel de sistema**, por diseño (recipe-contract §2).

@ -5,8 +5,8 @@
> Vista de conjunto: [README](./README.md) · método y protocolo:
> [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7.
- **Medido**: 2026-08-20 · **Alcance**: **100%** — 18 de 18 knobs por token público
- **Knobs de apariencia**: 18 — público 18 · privado 0 · global 0 · literal 0 · sistema 0 _(fuera del ratio)_
- **Medido**: 2026-08-22 · **Alcance**: **100%** — 18 de 18 knobs por token público
- **Knobs de apariencia**: 18 — público 18 · privado 0 · global 0 · literal 0 · sistema 0 · excepción 0 _(los dos últimos, fuera del ratio)_
- **Contrato hoy** (`lib/recipes/base.ts`): 18 pública(s) — `bg`, `padding-inline`, `padding-block`, `item-gap`, `item-padding-inline`, `item-padding-block`, `item-radius`, `item-row-gap`, `title-font-size`, `title-font-weight`, `title-fg`, `title-unread-weight`, `preview-font-size`, `preview-fg`, `preview-unread-fg`, `meta-gap`, `meta-font-size`, `meta-fg`
- **Eje `size`**: no · **ficheros**: `chat-list.css`
@ -24,6 +24,14 @@ _Ninguno._
_Ninguno._
### 1.4 Excepciones firmadas (0) — fuera del ratio
Literales que llevan su anotación `/* literal: <razón> */` en la propia
declaración: la válvula de recipe-contract §3, la misma que honra
`component-audit`. **Una desviación firmada no es deuda** — se listan para que la
razón se lea, no para acuñarlas.
_Ninguno._
## 2. Sistema transversal (0) — informativo, fuera del ratio
Un tema los alcanza **a nivel de sistema**, por diseño (recipe-contract §2).

@ -5,8 +5,8 @@
> Vista de conjunto: [README](./README.md) · método y protocolo:
> [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7.
- **Medido**: 2026-08-20 · **Alcance**: **77%** — 30 de 39 knobs por token público
- **Knobs de apariencia**: 42 — público 30 · privado 0 · global 4 · literal 5 · sistema 3 _(fuera del ratio)_
- **Medido**: 2026-08-22 · **Alcance**: **77%** — 30 de 39 knobs por token público
- **Knobs de apariencia**: 42 — público 30 · privado 0 · global 4 · literal 5 · sistema 3 · excepción 0 _(los dos últimos, fuera del ratio)_
- **Contrato hoy** (`lib/recipes/base.ts`): 31 pública(s) — `bg`, `padding-inline`, `padding-block`, `separator-gap`, `separator-font-size`, `separator-fg`, `separator-bg`, `separator-padding-inline`, `separator-padding-block`, `separator-radius`, `divider-fg`, `divider-line`, `divider-font-size`, `divider-gap`, `event-font-size`, `event-fg`, `event-padding-block`, `pill-bg`, `pill-fg`, `pill-font-size`, `pill-padding-inline`, `pill-height`, `pill-radius`, `pill-shadow`, `pill-offset`, `to-latest-size`, `to-latest-bg`, `to-latest-fg`, `to-latest-border`, `to-latest-shadow`, `to-latest-offset`
- **Eje `size`**: no · **ficheros**: `chat-log.css`
@ -35,6 +35,14 @@ _Ninguno._
| 4 | `chat-log.css:148` | `[data-chat-log-to-latest] svg` | `block-size` | `1em` |
| 5 | `chat-log.css:149` | `[data-chat-log-to-latest] svg` | `inline-size` | `1em` |
### 1.4 Excepciones firmadas (0) — fuera del ratio
Literales que llevan su anotación `/* literal: <razón> */` en la propia
declaración: la válvula de recipe-contract §3, la misma que honra
`component-audit`. **Una desviación firmada no es deuda** — se listan para que la
razón se lea, no para acuñarlas.
_Ninguno._
## 2. Sistema transversal (3) — informativo, fuera del ratio
Un tema los alcanza **a nivel de sistema**, por diseño (recipe-contract §2).

@ -6,7 +6,7 @@
> [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7.
- **Medido**: 2026-08-22 · **Alcance**: **84%** — 65 de 77 knobs por token público
- **Knobs de apariencia**: 84 — público 65 · privado 0 · global 6 · literal 6 · sistema 7 _(fuera del ratio)_
- **Knobs de apariencia**: 84 — público 65 · privado 0 · global 6 · literal 6 · sistema 7 · excepción 0 _(los dos últimos, fuera del ratio)_
- **Contrato hoy** (`lib/recipes/base.ts`): 75 pública(s) — `gap`, `row-gap-run`, `row-gap-group`, `gutter-inline-size`, `bubble-padding-inline-sm`, `bubble-padding-inline-md`, `bubble-padding-inline-lg`, `bubble-padding-block-sm`, `bubble-padding-block-md`, `bubble-padding-block-lg`, `bubble-radius`, `bubble-radius-run`, `bubble-tail-radius`, `bubble-max-inline-size`, `bubble-font-size-sm`, `bubble-font-size-md`, `bubble-font-size-lg`, `bubble-line-height`, `bubble-bg-in`, `bubble-fg-in`, `bubble-bg-out`, `bubble-fg-out`, `bubble-shadow`, `header-gap`, `header-font-size`, `header-font-weight`, `header-fg`, `meta-gap`, `meta-font-size`, `meta-fg`, `status-size`, `status-fg`, `read-status-fg`, `failed-status-fg`, `read-by-gap`, `read-by-font-size`, `read-by-fg`, `read-by-margin`, `emphasize-bg`, `emphasize-radius`, `emphasize-duration`, `reply-padding-inline`, `reply-padding-block`, `reply-accent-size`, `reply-radius`, `reply-bg`, `reply-accent`, `reply-font-size`, `reaction-gap`, `reaction-height`, `reaction-padding-inline`, `reaction-radius`, `reaction-font-size`, `reaction-bg`, `reaction-border`, `reaction-shadow`, `reaction-overlap`, `reaction-pressed-bg`, `reaction-pressed-border`, `reaction-pressed-fg`, `quick-react-gap`, `quick-react-pad`, `quick-react-size`, `quick-react-emoji-size`, `quick-react-hover-bg`, `quick-react-hover-scale`, `actions-bg`, `actions-border`, `actions-shadow`, `actions-radius`, `actions-padding`, `mentioned-bg`, `mentioned-accent`, `actions-gap`, `actions-offset`
- **Eje `size`**: sí · **ficheros**: `chat-message.css`
@ -38,6 +38,14 @@ _Ninguno._
| 5 | `chat-message.css:478` | `[data-chat-message]:hover [data-chat-message-actions], [data-chat-message]:focus-within [data-chat-message-actions]` | `opacity` | `1` |
| 6 | `chat-message.css:484` | `[data-chat-message-actions]` | `opacity` | `1` |
### 1.4 Excepciones firmadas (0) — fuera del ratio
Literales que llevan su anotación `/* literal: <razón> */` en la propia
declaración: la válvula de recipe-contract §3, la misma que honra
`component-audit`. **Una desviación firmada no es deuda** — se listan para que la
razón se lea, no para acuñarlas.
_Ninguno._
## 2. Sistema transversal (7) — informativo, fuera del ratio
Un tema los alcanza **a nivel de sistema**, por diseño (recipe-contract §2).

@ -5,8 +5,8 @@
> Vista de conjunto: [README](./README.md) · método y protocolo:
> [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7.
- **Medido**: 2026-08-20 · **Alcance**: **89%** — 8 de 9 knobs por token público
- **Knobs de apariencia**: 9 — público 8 · privado 0 · global 1 · literal 0 · sistema 0 _(fuera del ratio)_
- **Medido**: 2026-08-22 · **Alcance**: **89%** — 8 de 9 knobs por token público
- **Knobs de apariencia**: 9 — público 8 · privado 0 · global 1 · literal 0 · sistema 0 · excepción 0 _(los dos últimos, fuera del ratio)_
- **Contrato hoy** (`lib/recipes/base.ts`): 7 pública(s) — `gap`, `font-size`, `fg`, `min-block-size`, `dot-size`, `dot-gap`, `dot-fg`
- **Eje `size`**: no · **ficheros**: `chat-typing.css`
@ -26,6 +26,14 @@ _Ninguno._
_Ninguno._
### 1.4 Excepciones firmadas (0) — fuera del ratio
Literales que llevan su anotación `/* literal: <razón> */` en la propia
declaración: la válvula de recipe-contract §3, la misma que honra
`component-audit`. **Una desviación firmada no es deuda** — se listan para que la
razón se lea, no para acuñarlas.
_Ninguno._
## 2. Sistema transversal (0) — informativo, fuera del ratio
Un tema los alcanza **a nivel de sistema**, por diseño (recipe-contract §2).

@ -6,7 +6,7 @@
> [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7.
- **Medido**: 2026-08-22 · **Alcance**: **59%** — 19 de 32 knobs por token público
- **Knobs de apariencia**: 33 — público 19 · privado 8 · global 2 · literal 3 · sistema 1 _(fuera del ratio)_
- **Knobs de apariencia**: 33 — público 19 · privado 8 · global 2 · literal 3 · sistema 1 · excepción 0 _(los dos últimos, fuera del ratio)_
- **Contrato hoy** (`lib/recipes/base.ts`): 44 pública(s) — `size-xs-box-size`, `size-xs-indicator-size`, `size-xs-indicator-stroke`, `size-sm-box-size`, `size-sm-indicator-size`, `size-sm-indicator-stroke`, `size-md-box-size`, `size-md-indicator-size`, `size-md-indicator-stroke`, `size-lg-box-size`, `size-lg-indicator-size`, `size-lg-indicator-stroke`, `size-xl-box-size`, `size-xl-indicator-size`, `size-xl-indicator-stroke`, `radius`, `border-width`, `transition-duration`, `transition-ease`, `stroke-duration`, `stroke-ease`, `bg-off`, `border-off`, `hover-border-off`, `disabled-bg`, `disabled-border`, `disabled-opacity`, `indicator-fg`, `disabled-indicator-fg`, `primary-solid`, `primary-solid-hover`, `neutral-solid`, `neutral-solid-hover`, `secondary-solid`, `secondary-solid-hover`, `affirm-solid`, `affirm-solid-hover`, `group-gap`, `group-label-font-family`, `group-label-font-size`, `group-label-font-weight`, `group-label-line-height`, `group-label-fg`, `disabled-group-label-fg` · 3 privada(s) forward — `_palette-solid`, `_palette-solid-hover`, `_palette-text`
- **Eje `size`**: sí · **ficheros**: `checkbox.css`
@ -40,6 +40,14 @@
| 2 | `checkbox.css:179` | `[data-checkbox-indicator] svg` | `block-size` | `100%` |
| 3 | `checkbox.css:229` | `[data-checkbox-group-label]` | `width` | `fit-content` |
### 1.4 Excepciones firmadas (0) — fuera del ratio
Literales que llevan su anotación `/* literal: <razón> */` en la propia
declaración: la válvula de recipe-contract §3, la misma que honra
`component-audit`. **Una desviación firmada no es deuda** — se listan para que la
razón se lea, no para acuñarlas.
_Ninguno._
## 2. Sistema transversal (1) — informativo, fuera del ratio
Un tema los alcanza **a nivel de sistema**, por diseño (recipe-contract §2).

@ -5,8 +5,8 @@
> Vista de conjunto: [README](./README.md) · método y protocolo:
> [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7.
- **Medido**: 2026-08-22 · **Alcance**: **1%** — 3 de 238 knobs por token público
- **Knobs de apariencia**: 245 — público 3 · privado 21 · global 202 · literal 12 · sistema 7 _(fuera del ratio)_
- **Medido**: 2026-08-22 · **Alcance**: **1%** — 3 de 237 knobs por token público
- **Knobs de apariencia**: 244 — público 3 · privado 21 · global 202 · literal 11 · sistema 7 · excepción 1 _(los dos últimos, fuera del ratio)_
- **Contrato hoy** (`lib/recipes/base.ts`): 9 pública(s) — `cell-min-block-sm`, `cell-min-block-md`, `cell-min-block-lg`, `num-row`, `lane-height-sm`, `lane-height-md`, `lane-height-lg`, `timegrid-block-size`, `disabled-opacity`
- **Eje `size`**: sí · **ficheros**: `chronos.css`
@ -245,23 +245,32 @@
| 20 | `chronos.css:994` | `.chronos-agenda-item` | `border-inline-start` | `var(--space-0-5) solid var(--_chronos-event-accent)` |
| 21 | `chronos.css:1010` | `.chronos-agenda-dot` | `background` | `var(--_chronos-event-accent)` |
### 1.3 Literales (12)
### 1.3 Literales (11)
| # | fichero:línea | selector | propiedad | valor |
| ---: | --- | --- | --- | --- |
| 1 | `chronos.css:29` | `[data-chronos]` | `inline-size` | `100%` |
| 2 | `chronos.css:112` | `.chronos-date-badge-month` | `letter-spacing` | `0.04em` |
| 3 | `chronos.css:247` | `[data-chronos-day-cell]:hover [data-chronos-day-add], [data-chronos-day-add]:focus-visible` | `opacity` | `1` |
| 4 | `chronos.css:333` | `[data-chronos-event-chip][data-draft]` | `opacity` | `0.7` |
| 5 | `chronos.css:474` | `.chronos-editor-fields` | `inline-size` | `100%` |
| 6 | `chronos.css:481` | `.chronos-field` | `inline-size` | `100%` |
| 7 | `chronos.css:491` | `.chronos-editor-fields [data-field], .chronos-editor-fields [data-field-control], .chronos-editor-fields [data-date-field], .chronos-editor-fields [data-select]` | `inline-size` | `100%` |
| 8 | `chronos.css:499` | `.chronos-editor-fields [data-date-field-input], .chronos-editor-fields [data-select-trigger], .chronos-editor-fields [data-field-input]` | `inline-size` | `100%` |
| 9 | `chronos.css:504` | `.chronos-editor-fields [data-date-range-picker]` | `inline-size` | `100%` |
| 10 | `chronos.css:565` | `.chronos-pair > [data-date-range-field-input], .chronos-when-field > [data-time-range-picker], .chronos-band-row > [data-time-range-picker]` | `inline-size` | `max-content` |
| 11 | `chronos.css:581` | `.chronos-when [data-time-range-field-input]` | `inline-size` | `max-content` |
| 12 | `chronos.css:832` | `.chronos-peek-scroll` | `inline-size` | `100%` |
| 2 | `chronos.css:247` | `[data-chronos-day-cell]:hover [data-chronos-day-add], [data-chronos-day-add]:focus-visible` | `opacity` | `1` |
| 3 | `chronos.css:333` | `[data-chronos-event-chip][data-draft]` | `opacity` | `0.7` |
| 4 | `chronos.css:474` | `.chronos-editor-fields` | `inline-size` | `100%` |
| 5 | `chronos.css:481` | `.chronos-field` | `inline-size` | `100%` |
| 6 | `chronos.css:491` | `.chronos-editor-fields [data-field], .chronos-editor-fields [data-field-control], .chronos-editor-fields [data-date-field], .chronos-editor-fields [data-select]` | `inline-size` | `100%` |
| 7 | `chronos.css:499` | `.chronos-editor-fields [data-date-field-input], .chronos-editor-fields [data-select-trigger], .chronos-editor-fields [data-field-input]` | `inline-size` | `100%` |
| 8 | `chronos.css:504` | `.chronos-editor-fields [data-date-range-picker]` | `inline-size` | `100%` |
| 9 | `chronos.css:565` | `.chronos-pair > [data-date-range-field-input], .chronos-when-field > [data-time-range-picker], .chronos-band-row > [data-time-range-picker]` | `inline-size` | `max-content` |
| 10 | `chronos.css:581` | `.chronos-when [data-time-range-field-input]` | `inline-size` | `max-content` |
| 11 | `chronos.css:832` | `.chronos-peek-scroll` | `inline-size` | `100%` |
### 1.4 Excepciones firmadas (1) — fuera del ratio
Literales que llevan su anotación `/* literal: <razón> */` en la propia
declaración: la válvula de recipe-contract §3, la misma que honra
`component-audit`. **Una desviación firmada no es deuda** — se listan para que la
razón se lea, no para acuñarlas.
| # | fichero:línea | selector | propiedad | valor |
| ---: | --- | --- | --- | --- |
| 1 | `chronos.css:112` | `.chronos-date-badge-month` | `letter-spacing` | `0.04em` |
## 2. Sistema transversal (7) — informativo, fuera del ratio
Un tema los alcanza **a nivel de sistema**, por diseño (recipe-contract §2).

@ -5,8 +5,8 @@
> Vista de conjunto: [README](./README.md) · método y protocolo:
> [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7.
- **Medido**: 2026-08-21 · **Alcance**: **63%** — 5 de 8 knobs por token público
- **Knobs de apariencia**: 8 — público 5 · privado 2 · global 1 · literal 0 · sistema 0 _(fuera del ratio)_
- **Medido**: 2026-08-22 · **Alcance**: **63%** — 5 de 8 knobs por token público
- **Knobs de apariencia**: 8 — público 5 · privado 2 · global 1 · literal 0 · sistema 0 · excepción 0 _(los dos últimos, fuera del ratio)_
- **Contrato hoy** (`lib/recipes/base.ts`): 6 pública(s) — `indicator-gap`, `indicator-padding-block`, `indicator-padding-inline`, `indicator-radius`, `indicator-font-size`, `indicator-font-weight` · 2 privada(s) forward — `_palette-solid`, `_palette-element`
- **Eje `size`**: no · **ficheros**: `clipboard.css`
@ -29,6 +29,14 @@
_Ninguno._
### 1.4 Excepciones firmadas (0) — fuera del ratio
Literales que llevan su anotación `/* literal: <razón> */` en la propia
declaración: la válvula de recipe-contract §3, la misma que honra
`component-audit`. **Una desviación firmada no es deuda** — se listan para que la
razón se lea, no para acuñarlas.
_Ninguno._
## 2. Sistema transversal (0) — informativo, fuera del ratio
Un tema los alcanza **a nivel de sistema**, por diseño (recipe-contract §2).

@ -5,8 +5,8 @@
> Vista de conjunto: [README](./README.md) · método y protocolo:
> [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7.
- **Medido**: 2026-08-21 · **Alcance**: **81%** — 21 de 26 knobs por token público
- **Knobs de apariencia**: 26 — público 21 · privado 2 · global 3 · literal 0 · sistema 0 _(fuera del ratio)_
- **Medido**: 2026-08-22 · **Alcance**: **81%** — 21 de 26 knobs por token público
- **Knobs de apariencia**: 26 — público 21 · privado 2 · global 3 · literal 0 · sistema 0 · excepción 0 _(los dos últimos, fuera del ratio)_
- **Contrato hoy** (`lib/recipes/base.ts`): 20 pública(s) — `radius`, `fg`, `border-width`, `border`, `surface-bg`, `header-gap`, `header-padding-inline`, `header-padding-block`, `header-bg`, `title-font-family`, `title-font-size`, `title-fg`, `lang-font-family`, `lang-font-size`, `lang-fg`, `lang-letter-spacing`, `copy-gap`, `copy-font-size`, `copy-fg`, `pre-padding`
- **Eje `size`**: no · **ficheros**: `code-block.css`
@ -31,6 +31,14 @@
_Ninguno._
### 1.4 Excepciones firmadas (0) — fuera del ratio
Literales que llevan su anotación `/* literal: <razón> */` en la propia
declaración: la válvula de recipe-contract §3, la misma que honra
`component-audit`. **Una desviación firmada no es deuda** — se listan para que la
razón se lea, no para acuñarlas.
_Ninguno._
## 2. Sistema transversal (0) — informativo, fuera del ratio
Un tema los alcanza **a nivel de sistema**, por diseño (recipe-contract §2).

@ -5,8 +5,8 @@
> Vista de conjunto: [README](./README.md) · método y protocolo:
> [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7.
- **Medido**: 2026-08-21 · **Alcance**: **100%** — 7 de 7 knobs por token público
- **Knobs de apariencia**: 13 — público 7 · privado 0 · global 0 · literal 0 · sistema 6 _(fuera del ratio)_
- **Medido**: 2026-08-22 · **Alcance**: **100%** — 7 de 7 knobs por token público
- **Knobs de apariencia**: 13 — público 7 · privado 0 · global 0 · literal 0 · sistema 6 · excepción 0 _(los dos últimos, fuera del ratio)_
- **Contrato hoy** (`lib/recipes/base.ts`): 6 pública(s) — `radius`, `soft-bg`, `border-width`, `border`, `padding-inline`, `padding-block` · 1 privada(s) forward — `_palette-text`
- **Eje `size`**: no · **ficheros**: `code.css`
@ -24,6 +24,14 @@ _Ninguno._
_Ninguno._
### 1.4 Excepciones firmadas (0) — fuera del ratio
Literales que llevan su anotación `/* literal: <razón> */` en la propia
declaración: la válvula de recipe-contract §3, la misma que honra
`component-audit`. **Una desviación firmada no es deuda** — se listan para que la
razón se lea, no para acuñarlas.
_Ninguno._
## 2. Sistema transversal (6) — informativo, fuera del ratio
Un tema los alcanza **a nivel de sistema**, por diseño (recipe-contract §2).

@ -5,8 +5,8 @@
> Vista de conjunto: [README](./README.md) · método y protocolo:
> [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7.
- **Medido**: 2026-08-20 · **Alcance**: **90%** — 9 de 10 knobs por token público
- **Knobs de apariencia**: 12 — público 9 · privado 0 · global 1 · literal 0 · sistema 2 _(fuera del ratio)_
- **Medido**: 2026-08-22 · **Alcance**: **90%** — 9 de 10 knobs por token público
- **Knobs de apariencia**: 12 — público 9 · privado 0 · global 1 · literal 0 · sistema 2 · excepción 0 _(los dos últimos, fuera del ratio)_
- **Contrato hoy** (`lib/recipes/base.ts`): 11 pública(s) — `trigger-font-family`, `trigger-font-size`, `trigger-font-weight`, `trigger-fg`, `hover-trigger-fg`, `trigger-radius`, `trigger-padding`, `content-padding`, `transition-duration`, `transition-ease`, `disabled-opacity`
- **Eje `size`**: no · **ficheros**: `collapsible.css`
@ -26,6 +26,14 @@ _Ninguno._
_Ninguno._
### 1.4 Excepciones firmadas (0) — fuera del ratio
Literales que llevan su anotación `/* literal: <razón> */` en la propia
declaración: la válvula de recipe-contract §3, la misma que honra
`component-audit`. **Una desviación firmada no es deuda** — se listan para que la
razón se lea, no para acuñarlas.
_Ninguno._
## 2. Sistema transversal (2) — informativo, fuera del ratio
Un tema los alcanza **a nivel de sistema**, por diseño (recipe-contract §2).

@ -5,8 +5,8 @@
> Vista de conjunto: [README](./README.md) · método y protocolo:
> [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7.
- **Medido**: 2026-08-20 · **Alcance**: **56%** — 9 de 16 knobs por token público
- **Knobs de apariencia**: 16 — público 9 · privado 0 · global 2 · literal 5 · sistema 0 _(fuera del ratio)_
- **Medido**: 2026-08-22 · **Alcance**: **56%** — 9 de 16 knobs por token público
- **Knobs de apariencia**: 16 — público 9 · privado 0 · global 2 · literal 5 · sistema 0 · excepción 0 _(los dos últimos, fuera del ratio)_
- **Contrato hoy** (`lib/recipes/base.ts`): 22 pública(s) — `segment-padding-inline-xs`, `segment-padding-inline-sm`, `segment-padding-inline-md`, `segment-padding-inline-lg`, `segment-padding-inline-xl`, `placeholder-fg`, `literal-fg`, `segment-radius`, `segment-fg`, `segment-invalid-fg`, `segment-readonly-bg`, `segment-readonly-fg`, `segment-readonly-decoration`, `swatch-size-xs`, `swatch-size-sm`, `swatch-size-md`, `swatch-size-lg`, `swatch-size-xl`, `format-select-fg`, `transition-duration`, `transition-ease`, `disabled-opacity`
- **Eje `size`**: sí · **ficheros**: `color-field.css`
@ -33,6 +33,14 @@ _Ninguno._
| 4 | `color-field.css:111` | `[data-color-field-segment][data-segment='hex']` | `min-inline-size` | `6ch` |
| 5 | `color-field.css:158` | `[data-color-field-format-select][data-select]` | `inline-size` | `fit-content` |
### 1.4 Excepciones firmadas (0) — fuera del ratio
Literales que llevan su anotación `/* literal: <razón> */` en la propia
declaración: la válvula de recipe-contract §3, la misma que honra
`component-audit`. **Una desviación firmada no es deuda** — se listan para que la
razón se lea, no para acuñarlas.
_Ninguno._
## 2. Sistema transversal (0) — informativo, fuera del ratio
Un tema los alcanza **a nivel de sistema**, por diseño (recipe-contract §2).

@ -6,7 +6,7 @@
> [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7.
- **Medido**: 2026-08-22 · **Alcance**: **51%** — 40 de 79 knobs por token público
- **Knobs de apariencia**: 82 — público 40 · privado 6 · global 22 · literal 11 · sistema 3 _(fuera del ratio)_
- **Knobs de apariencia**: 82 — público 40 · privado 6 · global 22 · literal 11 · sistema 3 · excepción 0 _(los dos últimos, fuera del ratio)_
- **Contrato hoy** (`lib/recipes/base.ts`): 54 pública(s) — `content-width-sm`, `content-width-md`, `content-width-lg`, `trigger-height-sm`, `trigger-height-md`, `trigger-height-lg`, `trigger-padding-inline-sm`, `trigger-padding-inline-md`, `trigger-padding-inline-lg`, `trigger-gap`, `trigger-radius`, `trigger-border-width`, `trigger-border`, `trigger-bg`, `trigger-fg`, `trigger-hover-border`, `trigger-swatch-size-sm`, `trigger-swatch-size-md`, `trigger-swatch-size-lg`, `trigger-swatch-radius`, `area-height`, `area-radius`, `area-border-width`, `area-border`, `area-thumb-size`, `area-thumb-radius`, `area-thumb-border-width`, `area-thumb-border`, `area-thumb-shadow`, `transparency-cell`, `transparency-cell-alt`, `swatch-size-sm`, `swatch-size-md`, `swatch-size-lg`, `swatch-radius`, `swatch-border`, `swatch-checked-ring`, `swatch-gap`, `eye-dropper-size`, `eye-dropper-radius`, `eye-dropper-bg`, `eye-dropper-fg`, `eye-dropper-hover-fg`, `hue-0`, `hue-60`, `hue-120`, `hue-180`, `hue-240`, `hue-300`, `hue-360`, `saturation-floor`, `transition-duration`, `transition-ease`, `disabled-opacity` · 1 privada(s) forward — `_palette-border`
- **Eje `size`**: sí · **ficheros**: `color-picker-spectrum.css`, `color-picker.css`
@ -66,6 +66,14 @@
| 10 | `color-picker.css:571` | `[data-color-picker-swatch-indicator]` | `inline-size` | `0.5rem` |
| 11 | `color-picker.css:572` | `[data-color-picker-swatch-indicator]` | `block-size` | `0.5rem` |
### 1.4 Excepciones firmadas (0) — fuera del ratio
Literales que llevan su anotación `/* literal: <razón> */` en la propia
declaración: la válvula de recipe-contract §3, la misma que honra
`component-audit`. **Una desviación firmada no es deuda** — se listan para que la
razón se lea, no para acuñarlas.
_Ninguno._
## 2. Sistema transversal (3) — informativo, fuera del ratio
Un tema los alcanza **a nivel de sistema**, por diseño (recipe-contract §2).

@ -6,7 +6,7 @@
> [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7.
- **Medido**: 2026-08-22 · **Alcance**: **70%** — 7 de 10 knobs por token público
- **Knobs de apariencia**: 10 — público 7 · privado 0 · global 3 · literal 0 · sistema 0 _(fuera del ratio)_
- **Knobs de apariencia**: 10 — público 7 · privado 0 · global 3 · literal 0 · sistema 0 · excepción 0 _(los dos últimos, fuera del ratio)_
- **Contrato hoy** (`lib/recipes/base.ts`): 12 pública(s) — `size-xs`, `size-sm`, `size-md`, `size-lg`, `size-xl`, `radius`, `border-width`, `border-fg`, `fill`, `checker-cell`, `checker-bg`, `checker-square`
- **Eje `size`**: sí · **ficheros**: `color-swatch.css`
@ -28,6 +28,14 @@ _Ninguno._
_Ninguno._
### 1.4 Excepciones firmadas (0) — fuera del ratio
Literales que llevan su anotación `/* literal: <razón> */` en la propia
declaración: la válvula de recipe-contract §3, la misma que honra
`component-audit`. **Una desviación firmada no es deuda** — se listan para que la
razón se lea, no para acuñarlas.
_Ninguno._
## 2. Sistema transversal (0) — informativo, fuera del ratio
Un tema los alcanza **a nivel de sistema**, por diseño (recipe-contract §2).

@ -6,7 +6,7 @@
> [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7.
- **Medido**: 2026-08-22 · **Alcance**: **85%** — 76 de 89 knobs por token público
- **Knobs de apariencia**: 97 — público 76 · privado 4 · global 3 · literal 6 · sistema 8 _(fuera del ratio)_
- **Knobs de apariencia**: 97 — público 76 · privado 4 · global 3 · literal 6 · sistema 8 · excepción 0 _(los dos últimos, fuera del ratio)_
- **Contrato hoy** (`lib/recipes/base.ts`): 106 pública(s) — `content-z`, `control-height-xs`, `control-height-sm`, `control-height-md`, `control-height-lg`, `control-height-xl`, `control-font-size-xs`, `control-font-size-sm`, `control-font-size-md`, `control-font-size-lg`, `control-font-size-xl`, `control-gap-xs`, `control-gap-sm`, `control-gap-md`, `control-gap-lg`, `control-gap-xl`, `control-padding-inline-xs`, `control-padding-inline-sm`, `control-padding-inline-md`, `control-padding-inline-lg`, `control-padding-inline-xl`, `content-padding-block-xs`, `content-padding-block-sm`, `content-padding-block-md`, `content-padding-block-lg`, `content-padding-block-xl`, `content-padding-inline-xs`, `content-padding-inline-sm`, `content-padding-inline-md`, `content-padding-inline-lg`, `content-padding-inline-xl`, `content-font-size-xs`, `content-font-size-sm`, `content-font-size-md`, `content-font-size-lg`, `content-font-size-xl`, `control-height`, `control-font-size`, `control-gap`, `control-padding-inline`, `content-padding-block`, `content-padding-inline`, `content-font-size`, `gap`, `font-family`, `fg`, `border-width`, `control-radius`, `control-bg`, `control-border`, `control-shadow`, `control-fg`, `control-line-height`, `disabled-control-bg`, `disabled-control-border`, `disabled-control-fg`, `placeholder-fg`, `disabled-input-fg`, `trigger-size`, `trigger-radius`, `trigger-fg`, `indicator-size`, `content-min-width`, `content-max-width`, `content-max-height`, `content-radius`, `content-fg`, `content-font-family`, `content-line-height`, `viewport-gap`, `viewport-padding-block-end`, `scrollbar-inset`, `group-gap`, `group-padding-block`, `group-heading-padding-block`, `group-heading-padding-inline`, `group-heading-bg`, `group-heading-fg`, `group-heading-font-family`, `group-heading-font-size`, `group-heading-font-weight`, `group-heading-line-height`, `group-heading-letter-spacing`, `separator-thickness`, `separator-margin-block`, `separator-bg`, `item-gap`, `item-padding-inline`, `item-fg`, `disabled-item-fg`, `item-indicator-size`, `selected-tags-gap`, `selected-tags-margin-block-end`, `selected-tag-gap`, `selected-tag-padding-inline-start`, `selected-tag-padding-inline-end`, `selected-tag-inset`, `selected-tag-radius`, `selected-tag-bg`, `selected-tag-border`, `selected-tag-fg`, `selected-tag-line-height`, `selected-tag-font-size-offset`, `selected-tag-remove-size`, `selected-tag-remove-margin-inline-start`, `selected-tag-remove-radius` · 3 privada(s) forward — `_palette-track`, `_palette-border`, `_palette-text`
- **Eje `size`**: no · **ficheros**: `combobox.css`
@ -40,6 +40,14 @@
| 5 | `combobox.css:416` | `[data-combobox-selected-tag-remove]:hover` | `opacity` | `1` |
| 6 | `combobox.css:422` | `[data-combobox-selected-tag-remove]:focus-visible` | `opacity` | `1` |
### 1.4 Excepciones firmadas (0) — fuera del ratio
Literales que llevan su anotación `/* literal: <razón> */` en la propia
declaración: la válvula de recipe-contract §3, la misma que honra
`component-audit`. **Una desviación firmada no es deuda** — se listan para que la
razón se lea, no para acuñarlas.
_Ninguno._
## 2. Sistema transversal (8) — informativo, fuera del ratio
Un tema los alcanza **a nivel de sistema**, por diseño (recipe-contract §2).

@ -5,8 +5,8 @@
> Vista de conjunto: [README](./README.md) · método y protocolo:
> [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7.
- **Medido**: 2026-08-21 · **Alcance**: **98%** — 49 de 50 knobs por token público
- **Knobs de apariencia**: 52 — público 49 · privado 0 · global 0 · literal 1 · sistema 2 _(fuera del ratio)_
- **Medido**: 2026-08-22 · **Alcance**: **98%** — 49 de 50 knobs por token público
- **Knobs de apariencia**: 52 — público 49 · privado 0 · global 0 · literal 1 · sistema 2 · excepción 0 _(los dos últimos, fuera del ratio)_
- **Contrato hoy** (`lib/recipes/base.ts`): 57 pública(s) — `input-padding-inline-sm`, `input-padding-inline-md`, `input-padding-inline-lg`, `input-font-size-sm`, `input-font-size-md`, `input-font-size-lg`, `item-padding-inline-sm`, `item-padding-inline-md`, `item-padding-inline-lg`, `item-font-size-sm`, `item-font-size-md`, `item-font-size-lg`, `input-padding-inline`, `input-font-size`, `item-padding-inline`, `item-font-size`, `radius`, `font-family`, `line-height`, `fg`, `input-padding-block`, `input-margin`, `input-border-width`, `input-border`, `input-radius`, `input-bg`, `input-fg`, `input-placeholder-fg`, `focus-input-border`, `loading-height`, `loading-fg`, `viewport-max-block`, `viewport-gap`, `viewport-padding-inline`, `viewport-padding-block-end`, `scrollbar-inset`, `viewport-padding`, `group-gap`, `group-heading-padding-block`, `group-heading-fg`, `group-heading-font-size`, `group-heading-font-weight`, `group-heading-tracking`, `group-items-gap`, `item-gap`, `item-fg`, `item-icon-size`, `item-icon-fg`, `item-shortcut-gap`, `item-shortcut-fg`, `item-shortcut-font-size`, `selected-item-sub-fg`, `empty-padding-block`, `empty-fg`, `separator-height`, `separator-margin-block`, `separator-bg`
- **Eje `size`**: no · **ficheros**: `command.css`
@ -26,6 +26,14 @@ _Ninguno._
| ---: | --- | --- | --- | --- |
| 1 | `command.css:42` | `[data-command]` | `inline-size` | `100%` |
### 1.4 Excepciones firmadas (0) — fuera del ratio
Literales que llevan su anotación `/* literal: <razón> */` en la propia
declaración: la válvula de recipe-contract §3, la misma que honra
`component-audit`. **Una desviación firmada no es deuda** — se listan para que la
razón se lea, no para acuñarlas.
_Ninguno._
## 2. Sistema transversal (2) — informativo, fuera del ratio
Un tema los alcanza **a nivel de sistema**, por diseño (recipe-contract §2).

@ -5,8 +5,8 @@
> Vista de conjunto: [README](./README.md) · método y protocolo:
> [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7.
- **Medido**: 2026-08-20 · **Alcance**: **—** — 0 de 0 knobs por token público
- **Knobs de apariencia**: 0 — público 0 · privado 0 · global 0 · literal 0 · sistema 0 _(fuera del ratio)_
- **Medido**: 2026-08-22 · **Alcance**: **—** — 0 de 0 knobs por token público
- **Knobs de apariencia**: 0 — público 0 · privado 0 · global 0 · literal 0 · sistema 0 · excepción 0 _(los dos últimos, fuera del ratio)_
- **Contrato hoy** (`lib/recipes/base.ts`): 1 pública(s) — `max-width`
- **Eje `size`**: no · **ficheros**: `container.css`
@ -24,6 +24,14 @@ _Ninguno._
_Ninguno._
### 1.4 Excepciones firmadas (0) — fuera del ratio
Literales que llevan su anotación `/* literal: <razón> */` en la propia
declaración: la válvula de recipe-contract §3, la misma que honra
`component-audit`. **Una desviación firmada no es deuda** — se listan para que la
razón se lea, no para acuñarlas.
_Ninguno._
## 2. Sistema transversal (0) — informativo, fuera del ratio
Un tema los alcanza **a nivel de sistema**, por diseño (recipe-contract §2).

@ -5,8 +5,8 @@
> Vista de conjunto: [README](./README.md) · método y protocolo:
> [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7.
- **Medido**: 2026-08-20 · **Alcance**: **53%** — 16 de 30 knobs por token público
- **Knobs de apariencia**: 33 — público 16 · privado 0 · global 11 · literal 3 · sistema 3 _(fuera del ratio)_
- **Medido**: 2026-08-22 · **Alcance**: **53%** — 16 de 30 knobs por token público
- **Knobs de apariencia**: 33 — público 16 · privado 0 · global 11 · literal 3 · sistema 3 · excepción 0 _(los dos últimos, fuera del ratio)_
- **Contrato hoy** (`lib/recipes/base.ts`): 18 pública(s) — `content-min-width`, `content-max-height`, `content-padding`, `content-radius`, `content-font-size`, `item-gap`, `item-height`, `item-padding-inline`, `item-padding-block`, `item-radius`, `hover-item-bg`, `hover-item-fg`, `item-disabled-opacity`, `heading-padding-inline`, `heading-padding-block`, `heading-font-size`, `separator-bg`, `separator-margin-block`
- **Eje `size`**: no · **ficheros**: `context-menu.css`
@ -40,6 +40,14 @@ _Ninguno._
| 2 | `context-menu.css:127` | `[data-context-menu-sub-trigger]::after` | `block-size` | `0.625rem` |
| 3 | `context-menu.css:152` | `[data-context-menu-separator]` | `block-size` | `1px` |
### 1.4 Excepciones firmadas (0) — fuera del ratio
Literales que llevan su anotación `/* literal: <razón> */` en la propia
declaración: la válvula de recipe-contract §3, la misma que honra
`component-audit`. **Una desviación firmada no es deuda** — se listan para que la
razón se lea, no para acuñarlas.
_Ninguno._
## 2. Sistema transversal (3) — informativo, fuera del ratio
Un tema los alcanza **a nivel de sistema**, por diseño (recipe-contract §2).

@ -5,8 +5,8 @@
> Vista de conjunto: [README](./README.md) · método y protocolo:
> [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7.
- **Medido**: 2026-08-20 · **Alcance**: **60%** — 15 de 25 knobs por token público
- **Knobs de apariencia**: 27 — público 15 · privado 0 · global 3 · literal 7 · sistema 2 _(fuera del ratio)_
- **Medido**: 2026-08-22 · **Alcance**: **60%** — 15 de 25 knobs por token público
- **Knobs de apariencia**: 27 — público 15 · privado 0 · global 3 · literal 7 · sistema 2 · excepción 0 _(los dos últimos, fuera del ratio)_
- **Contrato hoy** (`lib/recipes/base.ts`): 15 pública(s) — `viewport-bg`, `viewport-radius`, `mask-bg`, `grid-line`, `selection-border`, `selection-border-width`, `handle-size`, `handle-bg`, `handle-border`, `handle-border-width`, `zoom-gap`, `zoom-btn-size`, `zoom-btn-bg`, `zoom-btn-fg`, `zoom-btn-border`
- **Eje `size`**: no · **ficheros**: `cropper.css`
@ -36,6 +36,14 @@ _Ninguno._
| 6 | `cropper.css:97` | `[data-cropper-handle]` | `border-radius` | `50%` |
| 7 | `cropper.css:187` | `[data-cropper-zoom-btn]` | `line-height` | `1` |
### 1.4 Excepciones firmadas (0) — fuera del ratio
Literales que llevan su anotación `/* literal: <razón> */` en la propia
declaración: la válvula de recipe-contract §3, la misma que honra
`component-audit`. **Una desviación firmada no es deuda** — se listan para que la
razón se lea, no para acuñarlas.
_Ninguno._
## 2. Sistema transversal (2) — informativo, fuera del ratio
Un tema los alcanza **a nivel de sistema**, por diseño (recipe-contract §2).

@ -5,8 +5,8 @@
> Vista de conjunto: [README](./README.md) · método y protocolo:
> [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7.
- **Medido**: 2026-08-20 · **Alcance**: **—** — 0 de 0 knobs por token público
- **Knobs de apariencia**: 0 — público 0 · privado 0 · global 0 · literal 0 · sistema 0 _(fuera del ratio)_
- **Medido**: 2026-08-22 · **Alcance**: **—** — 0 de 0 knobs por token público
- **Knobs de apariencia**: 0 — público 0 · privado 0 · global 0 · literal 0 · sistema 0 · excepción 0 _(los dos últimos, fuera del ratio)_
- **Contrato hoy** (`lib/recipes/base.ts`): **sin entrada en `base.ts`**
- **Eje `size`**: no · **ficheros**: `css-field.css`
@ -24,6 +24,14 @@ _Ninguno._
_Ninguno._
### 1.4 Excepciones firmadas (0) — fuera del ratio
Literales que llevan su anotación `/* literal: <razón> */` en la propia
declaración: la válvula de recipe-contract §3, la misma que honra
`component-audit`. **Una desviación firmada no es deuda** — se listan para que la
razón se lea, no para acuñarlas.
_Ninguno._
## 2. Sistema transversal (0) — informativo, fuera del ratio
Un tema los alcanza **a nivel de sistema**, por diseño (recipe-contract §2).

@ -6,7 +6,7 @@
> [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7.
- **Medido**: 2026-08-22 · **Alcance**: **100%** — 11 de 11 knobs por token público
- **Knobs de apariencia**: 11 — público 11 · privado 0 · global 0 · literal 0 · sistema 0 _(fuera del ratio)_
- **Knobs de apariencia**: 11 — público 11 · privado 0 · global 0 · literal 0 · sistema 0 · excepción 0 _(los dos últimos, fuera del ratio)_
- **Contrato hoy** (`lib/recipes/base.ts`): 21 pública(s) — `gap-xs`, `gap-sm`, `gap-md`, `gap-lg`, `gap-xl`, `segment-padding-inline-xs`, `segment-padding-inline-sm`, `segment-padding-inline-md`, `segment-padding-inline-lg`, `segment-padding-inline-xl`, `placeholder-fg`, `literal-fg`, `segment-radius`, `segment-fg`, `segment-invalid-fg`, `segment-readonly-bg`, `segment-readonly-fg`, `segment-readonly-decoration`, `transition-duration`, `transition-ease`, `disabled-opacity`
- **Eje `size`**: sí · **ficheros**: `date-field.css`
@ -24,6 +24,14 @@ _Ninguno._
_Ninguno._
### 1.4 Excepciones firmadas (0) — fuera del ratio
Literales que llevan su anotación `/* literal: <razón> */` en la propia
declaración: la válvula de recipe-contract §3, la misma que honra
`component-audit`. **Una desviación firmada no es deuda** — se listan para que la
razón se lea, no para acuñarlas.
_Ninguno._
## 2. Sistema transversal (0) — informativo, fuera del ratio
Un tema los alcanza **a nivel de sistema**, por diseño (recipe-contract §2).

@ -5,8 +5,8 @@
> Vista de conjunto: [README](./README.md) · método y protocolo:
> [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7.
- **Medido**: 2026-08-20 · **Alcance**: **0%** — 0 de 2 knobs por token público
- **Knobs de apariencia**: 2 — público 0 · privado 0 · global 0 · literal 2 · sistema 0 _(fuera del ratio)_
- **Medido**: 2026-08-22 · **Alcance**: **0%** — 0 de 2 knobs por token público
- **Knobs de apariencia**: 2 — público 0 · privado 0 · global 0 · literal 2 · sistema 0 · excepción 0 _(los dos últimos, fuera del ratio)_
- **Contrato hoy** (`lib/recipes/base.ts`): **sin entrada en `base.ts`**
- **Eje `size`**: no · **ficheros**: `date-picker.css`
@ -27,6 +27,14 @@ _Ninguno._
| 1 | `date-picker.css:47` | `[data-popover-content]:has( > [data-date-picker-calendar], > [data-month-grid], > [data-year-grid] )` | `inline-size` | `max-content` |
| 2 | `date-picker.css:48` | `[data-popover-content]:has( > [data-date-picker-calendar], > [data-month-grid], > [data-year-grid] )` | `min-inline-size` | `max-content` |
### 1.4 Excepciones firmadas (0) — fuera del ratio
Literales que llevan su anotación `/* literal: <razón> */` en la propia
declaración: la válvula de recipe-contract §3, la misma que honra
`component-audit`. **Una desviación firmada no es deuda** — se listan para que la
razón se lea, no para acuñarlas.
_Ninguno._
## 2. Sistema transversal (0) — informativo, fuera del ratio
Un tema los alcanza **a nivel de sistema**, por diseño (recipe-contract §2).
@ -39,6 +47,7 @@ _La receta no declara privados propios en su CSS._
## 4. Propuesta de corrección
- **Consume la capa compartida `calendar-surface`.** Un eje que la capa posee se consume como `var(--_x, var(--x))`; el consumidor **no acuña** `--date-picker-{eje}` para él — sería un vocabulario paralelo (README de `eidos/components`, «Capas compartidas» regla 2).
- **Consume la capa compartida `picker-shell`.** Un eje que la capa posee se consume como `var(--_x, var(--x))`; el consumidor **no acuña** `--date-picker-{eje}` para él — sería un vocabulario paralelo (README de `eidos/components`, «Capas compartidas» regla 2).
### 4.1 Tokens a declarar en `lib/recipes/base.ts` (1)

@ -5,8 +5,8 @@
> Vista de conjunto: [README](./README.md) · método y protocolo:
> [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7.
- **Medido**: 2026-08-20 · **Alcance**: **25%** — 2 de 8 knobs por token público
- **Knobs de apariencia**: 9 — público 2 · privado 0 · global 4 · literal 2 · sistema 1 _(fuera del ratio)_
- **Medido**: 2026-08-22 · **Alcance**: **29%** — 2 de 7 knobs por token público
- **Knobs de apariencia**: 8 — público 2 · privado 0 · global 4 · literal 1 · sistema 1 · excepción 1 _(los dos últimos, fuera del ratio)_
- **Contrato hoy** (`lib/recipes/base.ts`): 3 pública(s) — `row-gap`, `separator-fg`, `separator-glyph`
- **Eje `size`**: no · **ficheros**: `date-range-field.css`
@ -25,13 +25,22 @@
_Ninguno._
### 1.3 Literales (2)
### 1.3 Literales (1)
| # | fichero:línea | selector | propiedad | valor |
| ---: | --- | --- | --- | --- |
| 1 | `date-range-field.css:24` | `[data-date-range-field]` | `inline-size` | `100%` |
| 2 | `date-range-field.css:61` | `[data-date-range-field]:has( [data-date-range-field-input][data-endpoint='start'] ):has([data-date-range-field-input][data-endpoint='end'])::before` | `font-size` | `0.9em` |
### 1.4 Excepciones firmadas (1) — fuera del ratio
Literales que llevan su anotación `/* literal: <razón> */` en la propia
declaración: la válvula de recipe-contract §3, la misma que honra
`component-audit`. **Una desviación firmada no es deuda** — se listan para que la
razón se lea, no para acuñarlas.
| # | fichero:línea | selector | propiedad | valor |
| ---: | --- | --- | --- | --- |
| 1 | `date-range-field.css:61` | `[data-date-range-field]:has( [data-date-range-field-input][data-endpoint='start'] ):has([data-date-range-field-input][data-endpoint='end'])::before` | `font-size` | `0.9em` |
## 2. Sistema transversal (1) — informativo, fuera del ratio
Un tema los alcanza **a nivel de sistema**, por diseño (recipe-contract §2).

@ -5,8 +5,8 @@
> Vista de conjunto: [README](./README.md) · método y protocolo:
> [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7.
- **Medido**: 2026-08-20 · **Alcance**: **40%** — 20 de 50 knobs por token público
- **Knobs de apariencia**: 53 — público 20 · privado 9 · global 19 · literal 2 · sistema 3 _(fuera del ratio)_
- **Medido**: 2026-08-22 · **Alcance**: **40%** — 20 de 50 knobs por token público
- **Knobs de apariencia**: 53 — público 20 · privado 9 · global 19 · literal 2 · sistema 3 · excepción 0 _(los dos últimos, fuera del ratio)_
- **Contrato hoy** (`lib/recipes/base.ts`): 22 pública(s) — `accent-border`, `accent-track`, `accent-text`, `overview-gap`, `overview-width`, `overview-header-gap`, `overview-heading-fg`, `overview-heading-font-weight`, `overview-nav-size`, `overview-nav-radius`, `overview-nav-fg`, `overview-nav-font-size`, `overview-grid-gap`, `overview-cell-height`, `overview-cell-radius`, `overview-cell-fg`, `overview-cell-font-size`, `in-range-overview-cell-bg`, `in-range-overview-cell-fg`, `endpoint-overview-cell-bg`, `endpoint-overview-cell-fg`, `endpoint-overview-cell-border`
- **Eje `size`**: sí · **ficheros**: `date-range-picker-time.css`, `date-range-picker.css`
@ -57,6 +57,14 @@
| 1 | `date-range-picker.css:27` | `[data-date-range-picker]` | `inline-size` | `100%` |
| 2 | `date-range-picker.css:272` | `[data-date-range-picker-calendar][data-range-calendar]` | `inline-size` | `max-content` |
### 1.4 Excepciones firmadas (0) — fuera del ratio
Literales que llevan su anotación `/* literal: <razón> */` en la propia
declaración: la válvula de recipe-contract §3, la misma que honra
`component-audit`. **Una desviación firmada no es deuda** — se listan para que la
razón se lea, no para acuñarlas.
_Ninguno._
## 2. Sistema transversal (3) — informativo, fuera del ratio
Un tema los alcanza **a nivel de sistema**, por diseño (recipe-contract §2).

@ -6,7 +6,7 @@
> [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7.
- **Medido**: 2026-08-22 · **Alcance**: **73%** — 24 de 33 knobs por token público
- **Knobs de apariencia**: 33 — público 24 · privado 4 · global 4 · literal 1 · sistema 0 _(fuera del ratio)_
- **Knobs de apariencia**: 33 — público 24 · privado 4 · global 4 · literal 1 · sistema 0 · excepción 0 _(los dos últimos, fuera del ratio)_
- **Contrato hoy** (`lib/recipes/base.ts`): 37 pública(s) — `overlay-bg`, `overlay-opacity`, `overlay-blur`, `overlay-z`, `content-z`, `content-fg`, `content-radius`, `content-max-height`, `content-max-height-sheet`, `content-width-sm`, `content-width-md`, `content-width-lg`, `content-width-xl`, `content-width-inset`, `content-full-inset`, `content-full-radius`, `content-position-inset`, `content-padding-sm`, `content-padding-md`, `content-padding-lg`, `content-padding-full`, `stack-gap`, `header-gap`, `footer-gap`, `footer-margin-top`, `title-font-family`, `title-font-size`, `title-font-weight`, `title-line-height`, `title-letter-spacing`, `title-fg`, `description-font-family`, `description-font-size`, `description-line-height`, `description-fg`, `close-size`, `close-inset`
- **Eje `size`**: sí · **ficheros**: `dialog.css`
@ -36,6 +36,14 @@
| ---: | --- | --- | --- | --- |
| 1 | `dialog.css:197` | `[data-dialog-content][data-sheet]` | `width` | `100%` |
### 1.4 Excepciones firmadas (0) — fuera del ratio
Literales que llevan su anotación `/* literal: <razón> */` en la propia
declaración: la válvula de recipe-contract §3, la misma que honra
`component-audit`. **Una desviación firmada no es deuda** — se listan para que la
razón se lea, no para acuñarlas.
_Ninguno._
## 2. Sistema transversal (0) — informativo, fuera del ratio
Un tema los alcanza **a nivel de sistema**, por diseño (recipe-contract §2).

@ -5,8 +5,8 @@
> Vista de conjunto: [README](./README.md) · método y protocolo:
> [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7.
- **Medido**: 2026-08-20 · **Alcance**: **—** — 0 de 0 knobs por token público
- **Knobs de apariencia**: 6 — público 0 · privado 0 · global 0 · literal 0 · sistema 6 _(fuera del ratio)_
- **Medido**: 2026-08-22 · **Alcance**: **—** — 0 de 0 knobs por token público
- **Knobs de apariencia**: 6 — público 0 · privado 0 · global 0 · literal 0 · sistema 6 · excepción 0 _(los dos últimos, fuera del ratio)_
- **Contrato hoy** (`lib/recipes/base.ts`): 0 pública(s) · 1 privada(s) forward — `_palette-text`
- **Eje `size`**: no · **ficheros**: `display.css`
@ -24,6 +24,14 @@ _Ninguno._
_Ninguno._
### 1.4 Excepciones firmadas (0) — fuera del ratio
Literales que llevan su anotación `/* literal: <razón> */` en la propia
declaración: la válvula de recipe-contract §3, la misma que honra
`component-audit`. **Una desviación firmada no es deuda** — se listan para que la
razón se lea, no para acuñarlas.
_Ninguno._
## 2. Sistema transversal (6) — informativo, fuera del ratio
Un tema los alcanza **a nivel de sistema**, por diseño (recipe-contract §2).

@ -5,9 +5,9 @@
> Vista de conjunto: [README](./README.md) · método y protocolo:
> [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7.
- **Medido**: 2026-08-21 · **Alcance**: **89%** — 8 de 9 knobs por token público
- **Knobs de apariencia**: 16 — público 8 · privado 1 · global 0 · literal 0 · sistema 7 _(fuera del ratio)_
- **Contrato hoy** (`lib/recipes/base.ts`): 10 pública(s) — `preview-padding-block`, `preview-padding-inline`, `preview-radius`, `preview-border-width`, `preview-bg`, `preview-fg`, `preview-font-family`, `preview-font-size`, `preview-shadow`, `preview-z` · 2 privada(s) forward — `_palette-solid`, `_palette-element`
- **Medido**: 2026-08-22 · **Alcance**: **89%** — 8 de 9 knobs por token público
- **Knobs de apariencia**: 16 — público 8 · privado 1 · global 0 · literal 0 · sistema 7 · excepción 0 _(los dos últimos, fuera del ratio)_
- **Contrato hoy** (`lib/recipes/base.ts`): 9 pública(s) — `preview-padding-block`, `preview-padding-inline`, `preview-radius`, `preview-border-width`, `preview-bg`, `preview-fg`, `preview-font-family`, `preview-font-size`, `preview-shadow` · 2 privada(s) forward — `_palette-solid`, `_palette-element`
- **Eje `size`**: no · **ficheros**: `drag-drop.css`
## 1. Knobs fuera de alcance
@ -26,6 +26,14 @@ _Ninguno._
_Ninguno._
### 1.4 Excepciones firmadas (0) — fuera del ratio
Literales que llevan su anotación `/* literal: <razón> */` en la propia
declaración: la válvula de recipe-contract §3, la misma que honra
`component-audit`. **Una desviación firmada no es deuda** — se listan para que la
razón se lea, no para acuñarlas.
_Ninguno._
## 2. Sistema transversal (7) — informativo, fuera del ratio
Un tema los alcanza **a nivel de sistema**, por diseño (recipe-contract §2).

@ -6,7 +6,7 @@
> [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7.
- **Medido**: 2026-08-22 · **Alcance**: **57%** — 34 de 60 knobs por token público
- **Knobs de apariencia**: 62 — público 34 · privado 8 · global 13 · literal 5 · sistema 2 _(fuera del ratio)_
- **Knobs de apariencia**: 62 — público 34 · privado 8 · global 13 · literal 5 · sistema 2 · excepción 0 _(los dos últimos, fuera del ratio)_
- **Contrato hoy** (`lib/recipes/base.ts`): 44 pública(s) — `overlay-bg`, `overlay-blur`, `overlay-opacity`, `overlay-z`, `content-z`, `inline-z`, `handle-bg`, `active-handle-bg`, `handle-radius`, `handle-length`, `handle-thickness`, `handle-active-scale`, `handle-transition-duration`, `handle-transition-ease`, `content-fg`, `content-radius`, `content-shadow-dragging`, `content-ring-dragging-width`, `content-ring-dragging-fg`, `content-ring-dragging-offset`, `content-inset`, `content-width-sm`, `content-width-md`, `content-width-lg`, `content-height-sm`, `content-height-md`, `content-height-lg`, `content-padding-sm`, `content-padding-md`, `content-padding-lg`, `content-padding-full`, `stack-gap`, `header-gap`, `footer-gap`, `footer-margin-top`, `title-font-family`, `title-font-size`, `title-font-weight`, `title-line-height`, `title-fg`, `description-font-family`, `description-font-size`, `description-line-height`, `description-fg`
- **Eje `size`**: sí · **ficheros**: `drawer.css`
@ -53,6 +53,14 @@
| 4 | `drawer.css:267` | `[data-drawer-content][data-variant='persistent'][data-size='full']` | `width` | `100%` |
| 5 | `drawer.css:268` | `[data-drawer-content][data-variant='persistent'][data-size='full']` | `height` | `100%` |
### 1.4 Excepciones firmadas (0) — fuera del ratio
Literales que llevan su anotación `/* literal: <razón> */` en la propia
declaración: la válvula de recipe-contract §3, la misma que honra
`component-audit`. **Una desviación firmada no es deuda** — se listan para que la
razón se lea, no para acuñarlas.
_Ninguno._
## 2. Sistema transversal (2) — informativo, fuera del ratio
Un tema los alcanza **a nivel de sistema**, por diseño (recipe-contract §2).

@ -5,8 +5,8 @@
> Vista de conjunto: [README](./README.md) · método y protocolo:
> [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7.
- **Medido**: 2026-08-20 · **Alcance**: **57%** — 16 de 28 knobs por token público
- **Knobs de apariencia**: 30 — público 16 · privado 0 · global 9 · literal 3 · sistema 2 _(fuera del ratio)_
- **Medido**: 2026-08-22 · **Alcance**: **57%** — 16 de 28 knobs por token público
- **Knobs de apariencia**: 30 — público 16 · privado 0 · global 9 · literal 3 · sistema 2 · excepción 0 _(los dos últimos, fuera del ratio)_
- **Contrato hoy** (`lib/recipes/base.ts`): 19 pública(s) — `content-z`, `content-min-width`, `content-max-height`, `content-padding`, `content-radius`, `content-font-size`, `item-gap`, `item-height`, `item-padding-inline`, `item-padding-block`, `item-radius`, `hover-item-bg`, `hover-item-fg`, `item-disabled-opacity`, `heading-padding-inline`, `heading-padding-block`, `heading-font-size`, `separator-bg`, `separator-margin-block`
- **Eje `size`**: no · **ficheros**: `dropdown-menu.css`
@ -38,6 +38,14 @@ _Ninguno._
| 2 | `dropdown-menu.css:145` | `[data-dropdown-menu-sub-trigger]::after` | `block-size` | `0.625rem` |
| 3 | `dropdown-menu.css:170` | `[data-dropdown-menu-separator]` | `block-size` | `1px` |
### 1.4 Excepciones firmadas (0) — fuera del ratio
Literales que llevan su anotación `/* literal: <razón> */` en la propia
declaración: la válvula de recipe-contract §3, la misma que honra
`component-audit`. **Una desviación firmada no es deuda** — se listan para que la
razón se lea, no para acuñarlas.
_Ninguno._
## 2. Sistema transversal (2) — informativo, fuera del ratio
Un tema los alcanza **a nivel de sistema**, por diseño (recipe-contract §2).

@ -6,7 +6,7 @@
> [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7.
- **Medido**: 2026-08-22 · **Alcance**: **75%** — 30 de 40 knobs por token público
- **Knobs de apariencia**: 44 — público 30 · privado 7 · global 1 · literal 2 · sistema 4 _(fuera del ratio)_
- **Knobs de apariencia**: 44 — público 30 · privado 7 · global 1 · literal 2 · sistema 4 · excepción 0 _(los dos últimos, fuera del ratio)_
- **Contrato hoy** (`lib/recipes/base.ts`): 56 pública(s) — `gap-xs`, `gap-sm`, `gap-md`, `gap-lg`, `gap-xl`, `control-height-xs`, `control-height-sm`, `control-height-md`, `control-height-lg`, `control-height-xl`, `control-padding-inline-xs`, `control-padding-inline-sm`, `control-padding-inline-md`, `control-padding-inline-lg`, `control-padding-inline-xl`, `font-family`, `font-size-xs`, `font-size-sm`, `font-size-md`, `font-size-lg`, `font-size-xl`, `line-height`, `fg`, `area-min-inline-size`, `control-radius`, `control-border-width`, `control-border`, `hover-control-border`, `control-bg`, `control-shadow`, `placeholder-fg`, `trigger-gap`, `trigger-padding-inline`, `trigger-radius`, `trigger-border-width`, `trigger-border`, `hover-trigger-border`, `trigger-bg`, `trigger-fg`, `hover-trigger-fg`, `submit-fg`, `transition-duration`, `transition-ease`, `disabled-opacity`, `primary-solid`, `secondary-solid`, `neutral-solid`, `affirm-solid`, `risk-solid`, `threat-solid`, `primary-border`, `secondary-border`, `neutral-border`, `affirm-border`, `risk-border`, `threat-border` · 3 privada(s) forward — `_palette-solid`, `_palette-border`, `_palette-solid-hover`
- **Eje `size`**: sí · **ficheros**: `editable.css`
@ -37,6 +37,14 @@
| 1 | `editable.css:89` | `[data-editable-preview]` | `inline-size` | `fit-content` |
| 2 | `editable.css:95` | `[data-editable-input]` | `inline-size` | `100%` |
### 1.4 Excepciones firmadas (0) — fuera del ratio
Literales que llevan su anotación `/* literal: <razón> */` en la propia
declaración: la válvula de recipe-contract §3, la misma que honra
`component-audit`. **Una desviación firmada no es deuda** — se listan para que la
razón se lea, no para acuñarlas.
_Ninguno._
## 2. Sistema transversal (4) — informativo, fuera del ratio
Un tema los alcanza **a nivel de sistema**, por diseño (recipe-contract §2).

@ -5,8 +5,8 @@
> Vista de conjunto: [README](./README.md) · método y protocolo:
> [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7.
- **Medido**: 2026-08-20 · **Alcance**: **61%** — 17 de 28 knobs por token público
- **Knobs de apariencia**: 32 — público 17 · privado 0 · global 8 · literal 3 · sistema 4 _(fuera del ratio)_
- **Medido**: 2026-08-22 · **Alcance**: **61%** — 17 de 28 knobs por token público
- **Knobs de apariencia**: 32 — público 17 · privado 0 · global 8 · literal 3 · sistema 4 · excepción 0 _(los dos últimos, fuera del ratio)_
- **Contrato hoy** (`lib/recipes/base.ts`): 17 pública(s) — `trigger-size`, `trigger-radius`, `trigger-font-size`, `panel-width`, `panel-gap`, `header-gap`, `grid-gap`, `grid-max-block-size`, `option-radius`, `option-font-size`, `footer-gap`, `footer-border-fg`, `preview-gap`, `preview-glyph-size`, `preview-name-font-size`, `preview-name-fg`, `preview-min-block-size`
- **Eje `size`**: no · **ficheros**: `emoji-picker.css`
@ -37,6 +37,14 @@ _Ninguno._
| 2 | `emoji-picker.css:109` | `[data-emoji-picker-content] [data-emoji-picker-option]` | `line-height` | `1` |
| 3 | `emoji-picker.css:153` | `[data-emoji-picker-preview] > :first-child` | `line-height` | `1` |
### 1.4 Excepciones firmadas (0) — fuera del ratio
Literales que llevan su anotación `/* literal: <razón> */` en la propia
declaración: la válvula de recipe-contract §3, la misma que honra
`component-audit`. **Una desviación firmada no es deuda** — se listan para que la
razón se lea, no para acuñarlas.
_Ninguno._
## 2. Sistema transversal (4) — informativo, fuera del ratio
Un tema los alcanza **a nivel de sistema**, por diseño (recipe-contract §2).

@ -5,8 +5,8 @@
> Vista de conjunto: [README](./README.md) · método y protocolo:
> [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7.
- **Medido**: 2026-08-20 · **Alcance**: **29%** — 5 de 17 knobs por token público
- **Knobs de apariencia**: 17 — público 5 · privado 7 · global 5 · literal 0 · sistema 0 _(fuera del ratio)_
- **Medido**: 2026-08-22 · **Alcance**: **29%** — 5 de 17 knobs por token público
- **Knobs de apariencia**: 17 — público 5 · privado 7 · global 5 · literal 0 · sistema 0 · excepción 0 _(los dos últimos, fuera del ratio)_
- **Contrato hoy** (`lib/recipes/base.ts`): 6 pública(s) — `gap`, `actions-gap`, `media-bg`, `media-fg`, `media-radius`, `description-measure`
- **Eje `size`**: sí · **ficheros**: `empty-state.css`
@ -38,6 +38,14 @@
_Ninguno._
### 1.4 Excepciones firmadas (0) — fuera del ratio
Literales que llevan su anotación `/* literal: <razón> */` en la propia
declaración: la válvula de recipe-contract §3, la misma que honra
`component-audit`. **Una desviación firmada no es deuda** — se listan para que la
razón se lea, no para acuñarlas.
_Ninguno._
## 2. Sistema transversal (0) — informativo, fuera del ratio
Un tema los alcanza **a nivel de sistema**, por diseño (recipe-contract §2).

@ -5,8 +5,8 @@
> Vista de conjunto: [README](./README.md) · método y protocolo:
> [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7.
- **Medido**: 2026-08-20 · **Alcance**: **82%** — 14 de 17 knobs por token público
- **Knobs de apariencia**: 17 — público 14 · privado 0 · global 2 · literal 1 · sistema 0 _(fuera del ratio)_
- **Medido**: 2026-08-22 · **Alcance**: **88%** — 14 de 16 knobs por token público
- **Knobs de apariencia**: 16 — público 14 · privado 0 · global 2 · literal 0 · sistema 0 · excepción 1 _(los dos últimos, fuera del ratio)_
- **Contrato hoy** (`lib/recipes/base.ts`): 10 pública(s) — `size-xs`, `size-sm`, `size-md`, `size-lg`, `icon-xs`, `icon-sm`, `icon-md`, `icon-lg`, `shadow`, `lift`
- **Eje `size`**: no · **ficheros**: `fab.css`
@ -23,12 +23,20 @@
_Ninguno._
### 1.3 Literales (1)
### 1.3 Literales (0)
_Ninguno._
### 1.4 Excepciones firmadas (1) — fuera del ratio
Literales que llevan su anotación `/* literal: <razón> */` en la propia
declaración: la válvula de recipe-contract §3, la misma que honra
`component-audit`. **Una desviación firmada no es deuda** — se listan para que la
razón se lea, no para acuñarlas.
| # | fichero:línea | selector | propiedad | valor |
| ---: | --- | --- | --- | --- |
| 1 | `fab.css:104` | `[data-fab] [data-button-icon]` | `font-size` | `1em` |
## 2. Sistema transversal (0) — informativo, fuera del ratio
Un tema los alcanza **a nivel de sistema**, por diseño (recipe-contract §2).

@ -5,8 +5,8 @@
> Vista de conjunto: [README](./README.md) · método y protocolo:
> [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7.
- **Medido**: 2026-08-20 · **Alcance**: **94%** — 30 de 32 knobs por token público
- **Knobs de apariencia**: 33 — público 30 · privado 0 · global 1 · literal 1 · sistema 1 _(fuera del ratio)_
- **Medido**: 2026-08-22 · **Alcance**: **94%** — 30 de 32 knobs por token público
- **Knobs de apariencia**: 33 — público 30 · privado 0 · global 1 · literal 1 · sistema 1 · excepción 0 _(los dos últimos, fuera del ratio)_
- **Contrato hoy** (`lib/recipes/base.ts`): 50 pública(s) — `font-size-xs`, `font-size-sm`, `font-size-md`, `font-size-lg`, `font-size-xl`, `article-padding-block-xs`, `article-padding-block-sm`, `article-padding-block-md`, `article-padding-block-lg`, `article-padding-block-xl`, `article-padding-inline-xs`, `article-padding-inline-sm`, `article-padding-inline-md`, `article-padding-inline-lg`, `article-padding-inline-xl`, `thread-indent-xs`, `thread-indent-sm`, `thread-indent-md`, `thread-indent-lg`, `thread-indent-xl`, `font-size`, `article-padding-block`, `article-padding-inline`, `thread-indent`, `radius`, `font-family`, `line-height`, `fg`, `border-width`, `divider`, `gap`, `surface-bg`, `article-gap`, `article-title-fg`, `article-title-font-weight`, `article-title-font-size-3`, `article-title-font-size-4`, `article-title-font-size-5`, `article-title-font-size-6`, `article-description-fg`, `thread-margin-block-start`, `thread-rail-width`, `sentinel-min-block-size`, `sentinel-fg`, `sentinel-font-size`, `sentinel-spinner-size`, `sentinel-spinner-width`, `sentinel-spinner-gap`, `sentinel-spinner-duration`, `sentinel-spinner-reduced-duration` · 2 privada(s) forward — `_palette-solid`, `_palette-element`
- **Eje `size`**: no · **ficheros**: `feed.css`
@ -28,6 +28,14 @@ _Ninguno._
| ---: | --- | --- | --- | --- |
| 1 | `feed.css:30` | `[data-feed-root][data-block]` | `inline-size` | `100%` |
### 1.4 Excepciones firmadas (0) — fuera del ratio
Literales que llevan su anotación `/* literal: <razón> */` en la propia
declaración: la válvula de recipe-contract §3, la misma que honra
`component-audit`. **Una desviación firmada no es deuda** — se listan para que la
razón se lea, no para acuñarlas.
_Ninguno._
## 2. Sistema transversal (1) — informativo, fuera del ratio
Un tema los alcanza **a nivel de sistema**, por diseño (recipe-contract §2).

@ -5,8 +5,8 @@
> Vista de conjunto: [README](./README.md) · método y protocolo:
> [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7.
- **Medido**: 2026-08-20 · **Alcance**: **0%** — 0 de 39 knobs por token público
- **Knobs de apariencia**: 41 — público 0 · privado 0 · global 31 · literal 8 · sistema 2 _(fuera del ratio)_
- **Medido**: 2026-08-22 · **Alcance**: **0%** — 0 de 37 knobs por token público
- **Knobs de apariencia**: 39 — público 0 · privado 0 · global 31 · literal 6 · sistema 2 · excepción 2 _(los dos últimos, fuera del ratio)_
- **Contrato hoy** (`lib/recipes/base.ts`): **sin entrada en `base.ts`**
- **Eje `size`**: no · **ficheros**: `field-langs.css`
@ -52,7 +52,7 @@
_Ninguno._
### 1.3 Literales (8)
### 1.3 Literales (6)
| # | fichero:línea | selector | propiedad | valor |
| ---: | --- | --- | --- | --- |
@ -62,9 +62,18 @@ _Ninguno._
| 4 | `field-langs.css:132` | `[data-field-langs-menu]` | `min-inline-size` | `9rem` |
| 5 | `field-langs.css:139` | `[data-field-langs-menu] [data-field-langs-lang-option]` | `inline-size` | `100%` |
| 6 | `field-langs.css:146` | `[data-field-langs-menu] [data-field-langs-lang-option]` | `line-height` | `1.2` |
| 7 | `field-langs.css:169` | `[data-field-langs-lang-option]::after` | `inline-size` | `0.5em` |
| 8 | `field-langs.css:170` | `[data-field-langs-lang-option]::after` | `block-size` | `0.5em` |
### 1.4 Excepciones firmadas (2) — fuera del ratio
Literales que llevan su anotación `/* literal: <razón> */` en la propia
declaración: la válvula de recipe-contract §3, la misma que honra
`component-audit`. **Una desviación firmada no es deuda** — se listan para que la
razón se lea, no para acuñarlas.
| # | fichero:línea | selector | propiedad | valor |
| ---: | --- | --- | --- | --- |
| 1 | `field-langs.css:169` | `[data-field-langs-lang-option]::after` | `inline-size` | `0.5em` |
| 2 | `field-langs.css:170` | `[data-field-langs-lang-option]::after` | `block-size` | `0.5em` |
## 2. Sistema transversal (2) — informativo, fuera del ratio
Un tema los alcanza **a nivel de sistema**, por diseño (recipe-contract §2).

@ -5,8 +5,8 @@
> Vista de conjunto: [README](./README.md) · método y protocolo:
> [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7.
- **Medido**: 2026-08-22 · **Alcance**: **72%** — 49 de 68 knobs por token público
- **Knobs de apariencia**: 73 — público 49 · privado 1 · global 7 · literal 11 · sistema 5 _(fuera del ratio)_
- **Medido**: 2026-08-22 · **Alcance**: **73%** — 49 de 67 knobs por token público
- **Knobs de apariencia**: 72 — público 49 · privado 1 · global 7 · literal 10 · sistema 5 · excepción 1 _(los dos últimos, fuera del ratio)_
- **Contrato hoy** (`lib/recipes/base.ts`): 60 pública(s) — `gap-xs`, `gap-sm`, `gap-md`, `gap-lg`, `gap-xl`, `font-family`, `label-gap`, `label-font-weight`, `label-line-height`, `label-fg`, `invalid-label-fg`, `disabled-label-fg`, `floating-label-top`, `layout-column-gap`, `required-fg`, `control-height-xs`, `control-height-sm`, `control-height-md`, `control-height-lg`, `control-height-xl`, `segment-height`, `control-padding-inline-xs`, `control-padding-inline-sm`, `control-padding-inline-md`, `control-padding-inline-lg`, `control-padding-inline-xl`, `control-gap-xs`, `control-gap-sm`, `control-gap-md`, `control-gap-lg`, `control-gap-xl`, `control-font-size-xs`, `control-font-size-sm`, `control-font-size-md`, `control-font-size-lg`, `control-font-size-xl`, `control-line-height`, `control-font-weight`, `control-radius`, `control-border-width`, `control-border`, `hover-control-border`, `focus-control-border`, `invalid-control-border`, `control-bg`, `control-ghost-border`, `control-ghost-bg`, `control-bg-readonly`, `disabled-control-bg`, `control-fg`, `control-placeholder-fg`, `affix-fg`, `segment-active-bg`, `segment-active-text`, `message-line-height`, `helper-fg`, `error-fg`, `transition-duration`, `transition-ease`, `disabled-opacity` · 1 privada(s) forward — `_palette-text`
- **Eje `size`**: sí · **ficheros**: `field-control-trigger.css`, `field-segment-state.css`, `field.css`
@ -30,7 +30,7 @@
| ---: | --- | --- | --- | --- |
| 1 | `field.css:320` | `[data-field][data-floating-label]:focus-within > [data-field-label]` | `color` | `var(--_field-palette-text)` |
### 1.3 Literales (11)
### 1.3 Literales (10)
| # | fichero:línea | selector | propiedad | valor |
| ---: | --- | --- | --- | --- |
@ -40,12 +40,21 @@
| 4 | `field-control-trigger.css:46` | `[data-field-control-trigger] :is(svg, [data-icon])` | `block-size` | `1em` |
| 5 | `field.css:13` | `[data-field]` | `inline-size` | `100%` |
| 6 | `field.css:139` | `[data-field-required-indicator]` | `line-height` | `1` |
| 7 | `field.css:144` | `[data-field-optional-indicator]` | `font-size` | `0.85em` |
| 8 | `field.css:146` | `[data-field-optional-indicator]` | `line-height` | `1` |
| 9 | `field.css:159` | `[data-field-control]` | `inline-size` | `100%` |
| 10 | `field.css:208` | `[data-field-input]` | `inline-size` | `100%` |
| 11 | `field.css:299` | `[data-field][data-floating-label] > [data-field-control]` | `inline-size` | `100%` |
| 7 | `field.css:146` | `[data-field-optional-indicator]` | `line-height` | `1` |
| 8 | `field.css:159` | `[data-field-control]` | `inline-size` | `100%` |
| 9 | `field.css:208` | `[data-field-input]` | `inline-size` | `100%` |
| 10 | `field.css:299` | `[data-field][data-floating-label] > [data-field-control]` | `inline-size` | `100%` |
### 1.4 Excepciones firmadas (1) — fuera del ratio
Literales que llevan su anotación `/* literal: <razón> */` en la propia
declaración: la válvula de recipe-contract §3, la misma que honra
`component-audit`. **Una desviación firmada no es deuda** — se listan para que la
razón se lea, no para acuñarlas.
| # | fichero:línea | selector | propiedad | valor |
| ---: | --- | --- | --- | --- |
| 1 | `field.css:144` | `[data-field-optional-indicator]` | `font-size` | `0.85em` |
## 2. Sistema transversal (5) — informativo, fuera del ratio
Un tema los alcanza **a nivel de sistema**, por diseño (recipe-contract §2).

@ -6,7 +6,7 @@
> [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7.
- **Medido**: 2026-08-22 · **Alcance**: **76%** — 45 de 59 knobs por token público
- **Knobs de apariencia**: 61 — público 45 · privado 9 · global 1 · literal 4 · sistema 2 _(fuera del ratio)_
- **Knobs de apariencia**: 61 — público 45 · privado 9 · global 1 · literal 4 · sistema 2 · excepción 0 _(los dos últimos, fuera del ratio)_
- **Contrato hoy** (`lib/recipes/base.ts`): 98 pública(s) — `gap-sm`, `gap-md`, `gap-lg`, `padding-sm`, `padding-md`, `padding-lg`, `control-height-sm`, `control-height-md`, `control-height-lg`, `font-size-sm`, `font-size-md`, `font-size-lg`, `preview-size-sm`, `preview-size-md`, `preview-size-lg`, `font-family`, `line-height`, `fg`, `label-fg`, `label-font-weight`, `dropzone-gap`, `dropzone-min-height`, `dropzone-border-width`, `dropzone-border`, `dropzone-radius`, `dropzone-bg`, `dropzone-fg`, `button-gap`, `button-padding-inline`, `button-border-width`, `button-border`, `hover-button-border`, `button-radius`, `button-bg`, `button-fg`, `hover-button-fg`, `button-solid-fg`, `list-gap`, `item-gap`, `item-padding`, `item-border-width`, `item-border`, `item-radius`, `item-bg`, `item-shadow`, `preview-radius`, `preview-bg`, `preview-fg`, `item-name-fg`, `item-name-font-weight`, `item-size-fg`, `item-size-font-size`, `progress-height`, `progress-radius`, `progress-track-bg`, `transition-duration`, `transition-ease`, `disabled-opacity`, `primary-solid`, `primary-solid-hover`, `primary-text`, `secondary-solid`, `secondary-solid-hover`, `secondary-text`, `neutral-solid`, `neutral-solid-hover`, `neutral-text`, `affirm-solid`, `affirm-solid-hover`, `affirm-text`, `fulfill-solid`, `fulfill-solid-hover`, `fulfill-track`, `fulfill-border`, `fulfill-text`, `risk-solid`, `risk-solid-hover`, `risk-text`, `threat-solid`, `threat-solid-hover`, `threat-text`, `loss-solid`, `loss-solid-hover`, `loss-track`, `loss-border`, `loss-text`, `primary-track`, `primary-border`, `secondary-track`, `secondary-border`, `neutral-track`, `neutral-border`, `affirm-track`, `affirm-border`, `risk-track`, `risk-border`, `threat-track`, `threat-border` · 5 privada(s) forward — `_palette-solid`, `_palette-solid-hover`, `_palette-track`, `_palette-border`, `_palette-text`
- **Eje `size`**: sí · **ficheros**: `file-upload.css`
@ -41,6 +41,14 @@
| 3 | `file-upload.css:163` | `[data-file-upload-item-preview] :where(img, video)` | `block-size` | `100%` |
| 4 | `file-upload.css:184` | `[data-file-upload-item-progress]` | `inline-size` | `100%` |
### 1.4 Excepciones firmadas (0) — fuera del ratio
Literales que llevan su anotación `/* literal: <razón> */` en la propia
declaración: la válvula de recipe-contract §3, la misma que honra
`component-audit`. **Una desviación firmada no es deuda** — se listan para que la
razón se lea, no para acuñarlas.
_Ninguno._
## 2. Sistema transversal (2) — informativo, fuera del ratio
Un tema los alcanza **a nivel de sistema**, por diseño (recipe-contract §2).

@ -5,8 +5,8 @@
> Vista de conjunto: [README](./README.md) · método y protocolo:
> [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7.
- **Medido**: 2026-08-20 · **Alcance**: **100%** — 2 de 2 knobs por token público
- **Knobs de apariencia**: 2 — público 2 · privado 0 · global 0 · literal 0 · sistema 0 _(fuera del ratio)_
- **Medido**: 2026-08-22 · **Alcance**: **100%** — 2 de 2 knobs por token público
- **Knobs de apariencia**: 2 — público 2 · privado 0 · global 0 · literal 0 · sistema 0 · excepción 0 _(los dos últimos, fuera del ratio)_
- **Contrato hoy** (`lib/recipes/base.ts`): 7 pública(s) — `direction`, `align`, `justify`, `wrap`, `align-content`, `row-gap`, `column-gap`
- **Eje `size`**: no · **ficheros**: `flex.css`
@ -24,6 +24,14 @@ _Ninguno._
_Ninguno._
### 1.4 Excepciones firmadas (0) — fuera del ratio
Literales que llevan su anotación `/* literal: <razón> */` en la propia
declaración: la válvula de recipe-contract §3, la misma que honra
`component-audit`. **Una desviación firmada no es deuda** — se listan para que la
razón se lea, no para acuñarlas.
_Ninguno._
## 2. Sistema transversal (0) — informativo, fuera del ratio
Un tema los alcanza **a nivel de sistema**, por diseño (recipe-contract §2).

@ -5,8 +5,8 @@
> Vista de conjunto: [README](./README.md) · método y protocolo:
> [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7.
- **Medido**: 2026-08-20 · **Alcance**: **59%** — 29 de 49 knobs por token público
- **Knobs de apariencia**: 53 — público 29 · privado 3 · global 12 · literal 5 · sistema 4 _(fuera del ratio)_
- **Medido**: 2026-08-22 · **Alcance**: **59%** — 29 de 49 knobs por token público
- **Knobs de apariencia**: 53 — público 29 · privado 3 · global 12 · literal 5 · sistema 4 · excepción 0 _(los dos últimos, fuera del ratio)_
- **Contrato hoy** (`lib/recipes/base.ts`): 28 pública(s) — `bg`, `border`, `border-width`, `radius`, `shadow`, `shadow-topmost`, `active-shadow`, `fg`, `font-family`, `font-size`, `line-height`, `header-bg`, `header-padding-inline`, `header-padding-block`, `header-gap`, `controls-gap`, `title-font-size`, `title-font-weight`, `title-fg`, `body-padding-inline`, `body-padding-block`, `resize-size`, `resize-edge`, `button-size`, `grip-size`, `accent`, `transition-duration`, `transition-ease` · 1 privada(s) forward — `_palette-border`
- **Eje `size`**: no · **ficheros**: `float-panel.css`
@ -47,6 +47,14 @@
| 4 | `float-panel.css:254` | `[data-float-panel-resize-grip]:hover, [data-float-panel-resize-grip][data-grabbed]` | `opacity` | `1` |
| 5 | `float-panel.css:259` | `[data-float-panel-resize-grip]:focus-visible` | `opacity` | `1` |
### 1.4 Excepciones firmadas (0) — fuera del ratio
Literales que llevan su anotación `/* literal: <razón> */` en la propia
declaración: la válvula de recipe-contract §3, la misma que honra
`component-audit`. **Una desviación firmada no es deuda** — se listan para que la
razón se lea, no para acuñarlas.
_Ninguno._
## 2. Sistema transversal (4) — informativo, fuera del ratio
Un tema los alcanza **a nivel de sistema**, por diseño (recipe-contract §2).

@ -5,8 +5,8 @@
> Vista de conjunto: [README](./README.md) · método y protocolo:
> [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7.
- **Medido**: 2026-08-20 · **Alcance**: **—** — 0 de 0 knobs por token público
- **Knobs de apariencia**: 0 — público 0 · privado 0 · global 0 · literal 0 · sistema 0 _(fuera del ratio)_
- **Medido**: 2026-08-22 · **Alcance**: **—** — 0 de 0 knobs por token público
- **Knobs de apariencia**: 0 — público 0 · privado 0 · global 0 · literal 0 · sistema 0 · excepción 0 _(los dos últimos, fuera del ratio)_
- **Contrato hoy** (`lib/recipes/base.ts`): 1 pública(s) — `gap`
- **Eje `size`**: no · **ficheros**: `float.css`
@ -24,6 +24,14 @@ _Ninguno._
_Ninguno._
### 1.4 Excepciones firmadas (0) — fuera del ratio
Literales que llevan su anotación `/* literal: <razón> */` en la propia
declaración: la válvula de recipe-contract §3, la misma que honra
`component-audit`. **Una desviación firmada no es deuda** — se listan para que la
razón se lea, no para acuñarlas.
_Ninguno._
## 2. Sistema transversal (0) — informativo, fuera del ratio
Un tema los alcanza **a nivel de sistema**, por diseño (recipe-contract §2).

@ -6,7 +6,7 @@
> [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7.
- **Medido**: 2026-08-22 · **Alcance**: **71%** — 36 de 51 knobs por token público
- **Knobs de apariencia**: 52 — público 36 · privado 8 · global 5 · literal 2 · sistema 1 _(fuera del ratio)_
- **Knobs de apariencia**: 52 — público 36 · privado 8 · global 5 · literal 2 · sistema 1 · excepción 0 _(los dos últimos, fuera del ratio)_
- **Contrato hoy** (`lib/recipes/base.ts`): 54 pública(s) — `gap-xs`, `gap-sm`, `gap-md`, `gap-lg`, `gap-xl`, `font-family`, `fg`, `radius`, `border-width`, `panel-padding`, `panel-border`, `panel-bg`, `panel-shadow`, `grid-min`, `grid-column-gap`, `action-height-xs`, `action-height-sm`, `action-height-md`, `action-height-lg`, `action-height-xl`, `action-padding-inline-xs`, `action-padding-inline-sm`, `action-padding-inline-md`, `action-padding-inline-lg`, `action-padding-inline-xl`, `action-font-size-xs`, `action-font-size-sm`, `action-font-size-md`, `action-font-size-lg`, `action-font-size-xl`, `action-font-weight`, `action-line-height`, `action-gap`, `action-radius`, `action-border-width`, `error-summary-padding`, `error-summary-border-width`, `error-summary-radius`, `error-summary-font-size`, `error-summary-line-height`, `error-summary-list-indent`, `link-underline-offset`, `auto-fields-gap`, `auto-fields-array-padding`, `auto-fields-border-width`, `auto-fields-radius`, `auto-fields-item-gap`, `auto-fields-item-padding`, `widget-padding-inline`, `widget-radius`, `widget-border-width`, `transition-duration`, `transition-ease`, `disabled-opacity` · 4 privada(s) forward — `_palette-solid`, `_palette-solid-hover`, `_palette-border`, `_palette-contrast`
- **Eje `size`**: sí · **ficheros**: `form.css`
@ -42,6 +42,14 @@
| 1 | `form.css:14` | `[data-form]` | `inline-size` | `100%` |
| 2 | `form.css:214` | `[data-form-error-summary] a` | `text-decoration-color` | `color-mix(in srgb, currentColor 48%, transparent)` |
### 1.4 Excepciones firmadas (0) — fuera del ratio
Literales que llevan su anotación `/* literal: <razón> */` en la propia
declaración: la válvula de recipe-contract §3, la misma que honra
`component-audit`. **Una desviación firmada no es deuda** — se listan para que la
razón se lea, no para acuñarlas.
_Ninguno._
## 2. Sistema transversal (1) — informativo, fuera del ratio
Un tema los alcanza **a nivel de sistema**, por diseño (recipe-contract §2).

@ -6,7 +6,7 @@
> [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7.
- **Medido**: 2026-08-22 · **Alcance**: **93%** — 52 de 56 knobs por token público
- **Knobs de apariencia**: 60 — público 52 · privado 0 · global 1 · literal 3 · sistema 4 _(fuera del ratio)_
- **Knobs de apariencia**: 60 — público 52 · privado 0 · global 1 · literal 3 · sistema 4 · excepción 0 _(los dos últimos, fuera del ratio)_
- **Contrato hoy** (`lib/recipes/base.ts`): 72 pública(s) — `preview-height-sm`, `preview-height-md`, `preview-height-lg`, `track-height-sm`, `track-height-md`, `track-height-lg`, `stop-size-sm`, `stop-size-md`, `stop-size-lg`, `gap-sm`, `gap-md`, `gap-lg`, `padding-block-sm`, `padding-block-md`, `padding-block-lg`, `padding-inline-sm`, `padding-inline-md`, `padding-inline-lg`, `preview-height`, `track-height`, `stop-size`, `gap`, `padding-block`, `padding-inline`, `radius`, `bg`, `border`, `border-width`, `preview-radius`, `preview-bg`, `preview-border`, `track-radius`, `track-border`, `checker-fg`, `checker-cell`, `stop-radius`, `stop-bg`, `stop-ring`, `stop-ring-width`, `stop-shadow`, `selected-stop-shadow`, `stop-actions-gap`, `angle-dial-gap`, `angle-dial-head-gap`, `label-font-size`, `label-fg`, `value-font-size`, `value-fg`, `stop-color-title-font-size`, `stop-color-title-font-weight`, `stop-color-title-fg`, `stop-color-sliders-gap`, `stop-list-gap`, `stop-list-row-gap`, `stop-list-value-gap`, `stop-list-value-padding-block`, `stop-list-value-padding-inline`, `stop-list-value-radius`, `stop-list-value-bg`, `stop-list-value-fg`, `stop-list-value-border`, `stop-list-value-font-size`, `selected-stop-list-value-border`, `stop-list-pos-fg`, `presets-gap`, `preset-grid-gap`, `preset-height`, `preset-radius`, `preset-border`, `hover-preset-border`, `selected-preset-border`, `selected-preset-outline`
- **Eje `size`**: no · **ficheros**: `gradient-builder.css`
@ -30,6 +30,14 @@ _Ninguno._
| 2 | `gradient-builder.css:188` | `[data-gradient-builder-stop-color-sliders]` | `inline-size` | `90%` |
| 3 | `gradient-builder.css:260` | `[data-gradient-builder-preset]` | `inline-size` | `100%` |
### 1.4 Excepciones firmadas (0) — fuera del ratio
Literales que llevan su anotación `/* literal: <razón> */` en la propia
declaración: la válvula de recipe-contract §3, la misma que honra
`component-audit`. **Una desviación firmada no es deuda** — se listan para que la
razón se lea, no para acuñarlas.
_Ninguno._
## 2. Sistema transversal (4) — informativo, fuera del ratio
Un tema los alcanza **a nivel de sistema**, por diseño (recipe-contract §2).

@ -5,8 +5,8 @@
> Vista de conjunto: [README](./README.md) · método y protocolo:
> [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7.
- **Medido**: 2026-08-20 · **Alcance**: **88%** — 23 de 26 knobs por token público
- **Knobs de apariencia**: 27 — público 23 · privado 0 · global 2 · literal 1 · sistema 1 _(fuera del ratio)_
- **Medido**: 2026-08-22 · **Alcance**: **88%** — 23 de 26 knobs por token público
- **Knobs de apariencia**: 27 — público 23 · privado 0 · global 2 · literal 1 · sistema 1 · excepción 0 _(los dos últimos, fuera del ratio)_
- **Contrato hoy** (`lib/recipes/base.ts`): 25 pública(s) — `chip-size-sm`, `chip-size-md`, `chip-size-lg`, `chip-size`, `gap`, `trigger-gap`, `border-width`, `chip-radius`, `chip-border`, `content-width-sm`, `content-width-md`, `content-width-lg`, `stoplist-max-block`, `stoplist-scrollbar-size`, `stoplist-scrollbar-inset`, `presets-panel-width`, `presets-gap`, `presets-min-column`, `preset-height`, `preset-radius`, `preset-border`, `hover-preset-border`, `selected-preset-border`, `selected-preset-outline-offset`, `actions-gap`
- **Eje `size`**: no · **ficheros**: `gradient-picker.css`
@ -29,6 +29,14 @@ _Ninguno._
| ---: | --- | --- | --- | --- |
| 1 | `gradient-picker.css:117` | `[data-gradient-picker-preset]` | `inline-size` | `100%` |
### 1.4 Excepciones firmadas (0) — fuera del ratio
Literales que llevan su anotación `/* literal: <razón> */` en la propia
declaración: la válvula de recipe-contract §3, la misma que honra
`component-audit`. **Una desviación firmada no es deuda** — se listan para que la
razón se lea, no para acuñarlas.
_Ninguno._
## 2. Sistema transversal (1) — informativo, fuera del ratio
Un tema los alcanza **a nivel de sistema**, por diseño (recipe-contract §2).

@ -5,8 +5,8 @@
> Vista de conjunto: [README](./README.md) · método y protocolo:
> [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7.
- **Medido**: 2026-08-21 · **Alcance**: **85%** — 22 de 26 knobs por token público
- **Knobs de apariencia**: 31 — público 22 · privado 2 · global 1 · literal 1 · sistema 5 _(fuera del ratio)_
- **Medido**: 2026-08-22 · **Alcance**: **85%** — 22 de 26 knobs por token público
- **Knobs de apariencia**: 31 — público 22 · privado 2 · global 1 · literal 1 · sistema 5 · excepción 0 _(los dos últimos, fuera del ratio)_
- **Contrato hoy** (`lib/recipes/base.ts`): 38 pública(s) — `row-height-xs`, `row-height-sm`, `row-height-md`, `row-height-lg`, `row-height-xl`, `row-padding-inline-xs`, `row-padding-inline-sm`, `row-padding-inline-md`, `row-padding-inline-lg`, `row-padding-inline-xl`, `font-size-xs`, `font-size-sm`, `font-size-md`, `font-size-lg`, `font-size-xl`, `row-height`, `row-padding-inline`, `font-size`, `gap`, `padding`, `border-width`, `border`, `radius`, `bg`, `fg`, `font-family`, `line-height`, `max-block`, `invalid-border`, `row-gap`, `row-padding-block`, `row-radius`, `row-fg`, `disabled-row-fg`, `selection-checkbox-size`, `selection-checkbox-border`, `selection-checkbox-radius`, `checked-selection-checkbox-fg` · 1 privada(s) forward — `_palette-solid`
- **Eje `size`**: no · **ficheros**: `grid-list.css`
@ -31,6 +31,14 @@
| ---: | --- | --- | --- | --- |
| 1 | `grid-list.css:46` | `[data-grid-list][data-block]` | `inline-size` | `100%` |
### 1.4 Excepciones firmadas (0) — fuera del ratio
Literales que llevan su anotación `/* literal: <razón> */` en la propia
declaración: la válvula de recipe-contract §3, la misma que honra
`component-audit`. **Una desviación firmada no es deuda** — se listan para que la
razón se lea, no para acuñarlas.
_Ninguno._
## 2. Sistema transversal (5) — informativo, fuera del ratio
Un tema los alcanza **a nivel de sistema**, por diseño (recipe-contract §2).

@ -5,8 +5,8 @@
> Vista de conjunto: [README](./README.md) · método y protocolo:
> [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7.
- **Medido**: 2026-08-20 · **Alcance**: **100%** — 2 de 2 knobs por token público
- **Knobs de apariencia**: 2 — público 2 · privado 0 · global 0 · literal 0 · sistema 0 _(fuera del ratio)_
- **Medido**: 2026-08-22 · **Alcance**: **100%** — 2 de 2 knobs por token público
- **Knobs de apariencia**: 2 — público 2 · privado 0 · global 0 · literal 0 · sistema 0 · excepción 0 _(los dos últimos, fuera del ratio)_
- **Contrato hoy** (`lib/recipes/base.ts`): 13 pública(s) — `template-columns`, `template-rows`, `auto-columns`, `auto-rows`, `auto-flow`, `align`, `justify`, `align-content`, `place-items`, `place-content`, `gap`, `row-gap`, `column-gap`
- **Eje `size`**: no · **ficheros**: `grid.css`
@ -24,6 +24,14 @@ _Ninguno._
_Ninguno._
### 1.4 Excepciones firmadas (0) — fuera del ratio
Literales que llevan su anotación `/* literal: <razón> */` en la propia
declaración: la válvula de recipe-contract §3, la misma que honra
`component-audit`. **Una desviación firmada no es deuda** — se listan para que la
razón se lea, no para acuñarlas.
_Ninguno._
## 2. Sistema transversal (0) — informativo, fuera del ratio
Un tema los alcanza **a nivel de sistema**, por diseño (recipe-contract §2).

@ -5,8 +5,8 @@
> Vista de conjunto: [README](./README.md) · método y protocolo:
> [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7.
- **Medido**: 2026-08-20 · **Alcance**: **—** — 0 de 0 knobs por token público
- **Knobs de apariencia**: 0 — público 0 · privado 0 · global 0 · literal 0 · sistema 0 _(fuera del ratio)_
- **Medido**: 2026-08-22 · **Alcance**: **—** — 0 de 0 knobs por token público
- **Knobs de apariencia**: 0 — público 0 · privado 0 · global 0 · literal 0 · sistema 0 · excepción 0 _(los dos últimos, fuera del ratio)_
- **Contrato hoy** (`lib/recipes/base.ts`): 1 pública(s) — `attached-overlap`
- **Eje `size`**: no · **ficheros**: `group.css`
@ -24,6 +24,14 @@ _Ninguno._
_Ninguno._
### 1.4 Excepciones firmadas (0) — fuera del ratio
Literales que llevan su anotación `/* literal: <razón> */` en la propia
declaración: la válvula de recipe-contract §3, la misma que honra
`component-audit`. **Una desviación firmada no es deuda** — se listan para que la
razón se lea, no para acuñarlas.
_Ninguno._
## 2. Sistema transversal (0) — informativo, fuera del ratio
Un tema los alcanza **a nivel de sistema**, por diseño (recipe-contract §2).

@ -5,8 +5,8 @@
> Vista de conjunto: [README](./README.md) · método y protocolo:
> [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7.
- **Medido**: 2026-08-20 · **Alcance**: **—** — 0 de 0 knobs por token público
- **Knobs de apariencia**: 36 — público 0 · privado 0 · global 0 · literal 0 · sistema 36 _(fuera del ratio)_
- **Medido**: 2026-08-22 · **Alcance**: **—** — 0 de 0 knobs por token público
- **Knobs de apariencia**: 36 — público 0 · privado 0 · global 0 · literal 0 · sistema 36 · excepción 0 _(los dos últimos, fuera del ratio)_
- **Contrato hoy** (`lib/recipes/base.ts`): 0 pública(s) · 1 privada(s) forward — `_palette-text`
- **Eje `size`**: no · **ficheros**: `heading.css`
@ -24,6 +24,14 @@ _Ninguno._
_Ninguno._
### 1.4 Excepciones firmadas (0) — fuera del ratio
Literales que llevan su anotación `/* literal: <razón> */` en la propia
declaración: la válvula de recipe-contract §3, la misma que honra
`component-audit`. **Una desviación firmada no es deuda** — se listan para que la
razón se lea, no para acuñarlas.
_Ninguno._
## 2. Sistema transversal (36) — informativo, fuera del ratio
Un tema los alcanza **a nivel de sistema**, por diseño (recipe-contract §2).

@ -5,8 +5,8 @@
> Vista de conjunto: [README](./README.md) · método y protocolo:
> [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7.
- **Medido**: 2026-08-20 · **Alcance**: **—** — 0 de 0 knobs por token público
- **Knobs de apariencia**: 0 — público 0 · privado 0 · global 0 · literal 0 · sistema 0 _(fuera del ratio)_
- **Medido**: 2026-08-22 · **Alcance**: **—** — 0 de 0 knobs por token público
- **Knobs de apariencia**: 0 — público 0 · privado 0 · global 0 · literal 0 · sistema 0 · excepción 0 _(los dos últimos, fuera del ratio)_
- **Contrato hoy** (`lib/recipes/base.ts`): **sin entrada en `base.ts`**
- **Eje `size`**: no · **ficheros**: `highlight.css`
@ -24,6 +24,14 @@ _Ninguno._
_Ninguno._
### 1.4 Excepciones firmadas (0) — fuera del ratio
Literales que llevan su anotación `/* literal: <razón> */` en la propia
declaración: la válvula de recipe-contract §3, la misma que honra
`component-audit`. **Una desviación firmada no es deuda** — se listan para que la
razón se lea, no para acuñarlas.
_Ninguno._
## 2. Sistema transversal (0) — informativo, fuera del ratio
Un tema los alcanza **a nivel de sistema**, por diseño (recipe-contract §2).

@ -5,8 +5,8 @@
> Vista de conjunto: [README](./README.md) · método y protocolo:
> [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7.
- **Medido**: 2026-08-20 · **Alcance**: **—** — 0 de 0 knobs por token público
- **Knobs de apariencia**: 0 — público 0 · privado 0 · global 0 · literal 0 · sistema 0 _(fuera del ratio)_
- **Medido**: 2026-08-22 · **Alcance**: **—** — 0 de 0 knobs por token público
- **Knobs de apariencia**: 0 — público 0 · privado 0 · global 0 · literal 0 · sistema 0 · excepción 0 _(los dos últimos, fuera del ratio)_
- **Contrato hoy** (`lib/recipes/base.ts`): 2 pública(s) — `size`, `stroke-width`
- **Eje `size`**: no · **ficheros**: `icon.css`
@ -24,6 +24,14 @@ _Ninguno._
_Ninguno._
### 1.4 Excepciones firmadas (0) — fuera del ratio
Literales que llevan su anotación `/* literal: <razón> */` en la propia
declaración: la válvula de recipe-contract §3, la misma que honra
`component-audit`. **Una desviación firmada no es deuda** — se listan para que la
razón se lea, no para acuñarlas.
_Ninguno._
## 2. Sistema transversal (0) — informativo, fuera del ratio
Un tema los alcanza **a nivel de sistema**, por diseño (recipe-contract §2).

@ -5,8 +5,8 @@
> Vista de conjunto: [README](./README.md) · método y protocolo:
> [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7.
- **Medido**: 2026-08-20 · **Alcance**: **67%** — 10 de 15 knobs por token público
- **Knobs de apariencia**: 18 — público 10 · privado 0 · global 4 · literal 1 · sistema 3 _(fuera del ratio)_
- **Medido**: 2026-08-22 · **Alcance**: **67%** — 10 de 15 knobs por token público
- **Knobs de apariencia**: 18 — público 10 · privado 0 · global 4 · literal 1 · sistema 3 · excepción 0 _(los dos últimos, fuera del ratio)_
- **Contrato hoy** (`lib/recipes/base.ts`): 12 pública(s) — `gap`, `row-gap`, `label-fg`, `label-font-size`, `label-font-weight`, `value-fg`, `value-font-size`, `value-font-family`, `reset-gap`, `reset-fg`, `reset-font-size`, `hue-track`
- **Eje `size`**: no · **ficheros**: `image-adjustments.css`
@ -31,6 +31,14 @@ _Ninguno._
| ---: | --- | --- | --- | --- |
| 1 | `image-adjustments.css:95` | `[data-image-adjustments-reset]:focus-visible` | `outline-color` | `Highlight` |
### 1.4 Excepciones firmadas (0) — fuera del ratio
Literales que llevan su anotación `/* literal: <razón> */` en la propia
declaración: la válvula de recipe-contract §3, la misma que honra
`component-audit`. **Una desviación firmada no es deuda** — se listan para que la
razón se lea, no para acuñarlas.
_Ninguno._
## 2. Sistema transversal (3) — informativo, fuera del ratio
Un tema los alcanza **a nivel de sistema**, por diseño (recipe-contract §2).

@ -5,8 +5,8 @@
> Vista de conjunto: [README](./README.md) · método y protocolo:
> [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7.
- **Medido**: 2026-08-20 · **Alcance**: **71%** — 12 de 17 knobs por token público
- **Knobs de apariencia**: 20 — público 12 · privado 0 · global 1 · literal 4 · sistema 3 _(fuera del ratio)_
- **Medido**: 2026-08-22 · **Alcance**: **71%** — 12 de 17 knobs por token público
- **Knobs de apariencia**: 20 — público 12 · privado 0 · global 1 · literal 4 · sistema 3 · excepción 0 _(los dos últimos, fuera del ratio)_
- **Contrato hoy** (`lib/recipes/base.ts`): 13 pública(s) — `gap`, `preview-radius`, `preview-bg`, `preview-border`, `preview-aspect`, `toolbar-gap`, `toolbar-inset`, `button-size`, `button-bg`, `button-fg`, `button-border`, `button-radius`, `button-font-size`
- **Eje `size`**: no · **ficheros**: `image-picker.css`
@ -31,6 +31,14 @@ _Ninguno._
| 3 | `image-picker.css:79` | `[data-image-picker-rotate], [data-image-picker-remove]` | `line-height` | `1` |
| 4 | `image-picker.css:109` | `[data-image-picker-rotate]:focus-visible, [data-image-picker-remove]:focus-visible` | `outline-color` | `Highlight` |
### 1.4 Excepciones firmadas (0) — fuera del ratio
Literales que llevan su anotación `/* literal: <razón> */` en la propia
declaración: la válvula de recipe-contract §3, la misma que honra
`component-audit`. **Una desviación firmada no es deuda** — se listan para que la
razón se lea, no para acuñarlas.
_Ninguno._
## 2. Sistema transversal (3) — informativo, fuera del ratio
Un tema los alcanza **a nivel de sistema**, por diseño (recipe-contract §2).

@ -6,7 +6,7 @@
> [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7.
- **Medido**: 2026-08-22 · **Alcance**: **60%** — 21 de 35 knobs por token público
- **Knobs de apariencia**: 35 — público 21 · privado 1 · global 1 · literal 12 · sistema 0 _(fuera del ratio)_
- **Knobs de apariencia**: 35 — público 21 · privado 1 · global 1 · literal 12 · sistema 0 · excepción 0 _(los dos últimos, fuera del ratio)_
- **Contrato hoy** (`lib/recipes/base.ts`): 22 pública(s) — `size-xs`, `size-sm`, `size-md`, `size-lg`, `size-xl`, `radius-none`, `radius-sm`, `radius-md`, `radius-lg`, `radius-full`, `fade-duration`, `fade-ease`, `placeholder-base`, `shimmer-duration`, `font-family`, `fallback-fg`, `fallback-font-size`, `fallback-line-height`, `error-bg`, `error-fg`, `error-font-size`, `error-line-height` · 1 privada(s) forward — `_palette-track`
- **Eje `size`**: sí · **ficheros**: `image.css`
@ -41,6 +41,14 @@
| 11 | `image.css:215` | `[data-image-error-src]` | `inline-size` | `100%` |
| 12 | `image.css:216` | `[data-image-error-src]` | `block-size` | `100%` |
### 1.4 Excepciones firmadas (0) — fuera del ratio
Literales que llevan su anotación `/* literal: <razón> */` en la propia
declaración: la válvula de recipe-contract §3, la misma que honra
`component-audit`. **Una desviación firmada no es deuda** — se listan para que la
razón se lea, no para acuñarlas.
_Ninguno._
## 2. Sistema transversal (0) — informativo, fuera del ratio
Un tema los alcanza **a nivel de sistema**, por diseño (recipe-contract §2).

@ -5,8 +5,8 @@
> Vista de conjunto: [README](./README.md) · método y protocolo:
> [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7.
- **Medido**: 2026-08-21 · **Alcance**: **86%** — 12 de 14 knobs por token público
- **Knobs de apariencia**: 14 — público 12 · privado 0 · global 1 · literal 1 · sistema 0 _(fuera del ratio)_
- **Medido**: 2026-08-22 · **Alcance**: **86%** — 12 de 14 knobs por token público
- **Knobs de apariencia**: 14 — público 12 · privado 0 · global 1 · literal 1 · sistema 0 · excepción 0 _(los dos últimos, fuera del ratio)_
- **Contrato hoy** (`lib/recipes/base.ts`): 13 pública(s) — `font-size`, `font-weight`, `letter-spacing`, `fg`, `radius`, `padding-inline`, `padding-block`, `min-width`, `border-width`, `border`, `surface-bg`, `surface-border-block-end-width`, `surface-shadow`
- **Eje `size`**: no · **ficheros**: `kbd.css`
@ -28,6 +28,14 @@ _Ninguno._
| ---: | --- | --- | --- | --- |
| 1 | `kbd.css:19` | `[data-kbd]` | `line-height` | `1` |
### 1.4 Excepciones firmadas (0) — fuera del ratio
Literales que llevan su anotación `/* literal: <razón> */` en la propia
declaración: la válvula de recipe-contract §3, la misma que honra
`component-audit`. **Una desviación firmada no es deuda** — se listan para que la
razón se lea, no para acuñarlas.
_Ninguno._
## 2. Sistema transversal (0) — informativo, fuera del ratio
Un tema los alcanza **a nivel de sistema**, por diseño (recipe-contract §2).

@ -5,8 +5,8 @@
> Vista de conjunto: [README](./README.md) · método y protocolo:
> [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7.
- **Medido**: 2026-08-22 · **Alcance**: **75%** — 18 de 24 knobs por token público
- **Knobs de apariencia**: 27 — público 18 · privado 1 · global 1 · literal 4 · sistema 3 _(fuera del ratio)_
- **Medido**: 2026-08-22 · **Alcance**: **78%** — 18 de 23 knobs por token público
- **Knobs de apariencia**: 26 — público 18 · privado 1 · global 1 · literal 3 · sistema 3 · excepción 1 _(los dos últimos, fuera del ratio)_
- **Contrato hoy** (`lib/recipes/base.ts`): 33 pública(s) — `gap-sm`, `gap-md`, `gap-lg`, `gap-xl`, `diameter-sm`, `diameter-md`, `diameter-lg`, `diameter-xl`, `label-font-size-sm`, `label-font-size-md`, `label-font-size-lg`, `label-font-size-xl`, `value-font-size-sm`, `value-font-size-md`, `value-font-size-lg`, `value-font-size-xl`, `gap`, `diameter`, `label-font-size`, `value-font-size`, `radius`, `shadow`, `dragging-shadow`, `track-bg`, `face-bg`, `arc-width`, `pointer-inset`, `pointer-width`, `pointer-bg`, `indicator-radius`, `value-fg`, `label-fg`, `label-line-height`
- **Eje `size`**: no · **ficheros**: `knob.css`
@ -24,15 +24,24 @@
| ---: | --- | --- | --- | --- |
| 1 | `knob.css:114` | `[data-knob-value-field] [data-spin-field-input]` | `inline-size` | `calc(var(--_knob-value-digits, 3) * 1ch)` |
### 1.3 Literales (4)
### 1.3 Literales (3)
| # | fichero:línea | selector | propiedad | valor |
| ---: | --- | --- | --- | --- |
| 1 | `knob.css:71` | `[data-knob-value-text]` | `line-height` | `1` |
| 2 | `knob.css:120` | `[data-knob-value-field] [data-spin-field-input]` | `line-height` | `1` |
| 3 | `knob.css:149` | `[data-knob-indicator]::before` | `block-size` | `28%` |
| 4 | `knob.css:159` | `[data-knob-control]:hover` | `filter` | `brightness(1.08)` |
| 3 | `knob.css:159` | `[data-knob-control]:hover` | `filter` | `brightness(1.08)` |
### 1.4 Excepciones firmadas (1) — fuera del ratio
Literales que llevan su anotación `/* literal: <razón> */` en la propia
declaración: la válvula de recipe-contract §3, la misma que honra
`component-audit`. **Una desviación firmada no es deuda** — se listan para que la
razón se lea, no para acuñarlas.
| # | fichero:línea | selector | propiedad | valor |
| ---: | --- | --- | --- | --- |
| 1 | `knob.css:149` | `[data-knob-indicator]::before` | `block-size` | `28%` |
## 2. Sistema transversal (3) — informativo, fuera del ratio
Un tema los alcanza **a nivel de sistema**, por diseño (recipe-contract §2).

@ -5,8 +5,8 @@
> Vista de conjunto: [README](./README.md) · método y protocolo:
> [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7.
- **Medido**: 2026-08-21 · **Alcance**: **100%** — 2 de 2 knobs por token público
- **Knobs de apariencia**: 8 — público 2 · privado 0 · global 0 · literal 0 · sistema 6 _(fuera del ratio)_
- **Medido**: 2026-08-22 · **Alcance**: **100%** — 2 de 2 knobs por token público
- **Knobs de apariencia**: 8 — público 2 · privado 0 · global 0 · literal 0 · sistema 6 · excepción 0 _(los dos últimos, fuera del ratio)_
- **Contrato hoy** (`lib/recipes/base.ts`): 2 pública(s) — `gap`, `disabled-fg` · 1 privada(s) forward — `_palette-text`
- **Eje `size`**: no · **ficheros**: `label.css`
@ -24,6 +24,14 @@ _Ninguno._
_Ninguno._
### 1.4 Excepciones firmadas (0) — fuera del ratio
Literales que llevan su anotación `/* literal: <razón> */` en la propia
declaración: la válvula de recipe-contract §3, la misma que honra
`component-audit`. **Una desviación firmada no es deuda** — se listan para que la
razón se lea, no para acuñarlas.
_Ninguno._
## 2. Sistema transversal (6) — informativo, fuera del ratio
Un tema los alcanza **a nivel de sistema**, por diseño (recipe-contract §2).

@ -6,7 +6,7 @@
> [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7.
- **Medido**: 2026-08-22 · **Alcance**: **100%** — 14 de 14 knobs por token público
- **Knobs de apariencia**: 17 — público 14 · privado 0 · global 0 · literal 0 · sistema 3 _(fuera del ratio)_
- **Knobs de apariencia**: 17 — público 14 · privado 0 · global 0 · literal 0 · sistema 3 · excepción 0 _(los dos últimos, fuera del ratio)_
- **Contrato hoy** (`lib/recipes/base.ts`): 35 pública(s) — `padding-block-xs`, `padding-block-sm`, `padding-block-md`, `padding-block-lg`, `padding-block-xl`, `padding-inline-xs`, `padding-inline-sm`, `padding-inline-md`, `padding-inline-lg`, `padding-inline-xl`, `font-size-xs`, `font-size-sm`, `font-size-md`, `font-size-lg`, `font-size-xl`, `min-width-xs`, `min-width-sm`, `min-width-md`, `min-width-lg`, `min-width-xl`, `padding-block`, `padding-inline`, `font-size`, `min-width`, `max-width`, `gap`, `radius`, `fg`, `font-weight`, `font-family`, `line-height`, `trigger-radius`, `trigger-fg`, `hover-trigger-fg`, `trigger-underline`
- **Eje `size`**: no · **ficheros**: `link-preview.css`
@ -24,6 +24,14 @@ _Ninguno._
_Ninguno._
### 1.4 Excepciones firmadas (0) — fuera del ratio
Literales que llevan su anotación `/* literal: <razón> */` en la propia
declaración: la válvula de recipe-contract §3, la misma que honra
`component-audit`. **Una desviación firmada no es deuda** — se listan para que la
razón se lea, no para acuñarlas.
_Ninguno._
## 2. Sistema transversal (3) — informativo, fuera del ratio
Un tema los alcanza **a nivel de sistema**, por diseño (recipe-contract §2).

@ -5,8 +5,8 @@
> Vista de conjunto: [README](./README.md) · método y protocolo:
> [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7.
- **Medido**: 2026-08-21 · **Alcance**: **36%** — 4 de 11 knobs por token público
- **Knobs de apariencia**: 14 — público 4 · privado 4 · global 1 · literal 2 · sistema 3 _(fuera del ratio)_
- **Medido**: 2026-08-22 · **Alcance**: **36%** — 4 de 11 knobs por token público
- **Knobs de apariencia**: 14 — público 4 · privado 4 · global 1 · literal 2 · sistema 3 · excepción 0 _(los dos últimos, fuera del ratio)_
- **Contrato hoy** (`lib/recipes/base.ts`): 5 pública(s) — `radius`, `gap`, `external-icon-size`, `underline-width`, `underline-offset` · 2 privada(s) forward — `_palette-text`, `_palette-solid-hover`
- **Eje `size`**: no · **ficheros**: `link.css`
@ -34,6 +34,14 @@
| 1 | `link.css:116` | `[data-link-sr-only]` | `width` | `1px` |
| 2 | `link.css:117` | `[data-link-sr-only]` | `height` | `1px` |
### 1.4 Excepciones firmadas (0) — fuera del ratio
Literales que llevan su anotación `/* literal: <razón> */` en la propia
declaración: la válvula de recipe-contract §3, la misma que honra
`component-audit`. **Una desviación firmada no es deuda** — se listan para que la
razón se lea, no para acuñarlas.
_Ninguno._
## 2. Sistema transversal (3) — informativo, fuera del ratio
Un tema los alcanza **a nivel de sistema**, por diseño (recipe-contract §2).

@ -5,8 +5,8 @@
> Vista de conjunto: [README](./README.md) · método y protocolo:
> [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7.
- **Medido**: 2026-08-20 · **Alcance**: **68%** — 23 de 34 knobs por token público
- **Knobs de apariencia**: 37 — público 23 · privado 9 · global 1 · literal 1 · sistema 3 _(fuera del ratio)_
- **Medido**: 2026-08-22 · **Alcance**: **68%** — 23 de 34 knobs por token público
- **Knobs de apariencia**: 37 — público 23 · privado 9 · global 1 · literal 1 · sistema 3 · excepción 0 _(los dos últimos, fuera del ratio)_
- **Contrato hoy** (`lib/recipes/base.ts`): 21 pública(s) — `gap`, `padding`, `radius`, `border-width`, `border`, `bg`, `fg`, `font-family`, `line-height`, `max-block-size`, `invalid-border`, `item-radius`, `item-fg`, `disabled-item-fg`, `item-indicator-size`, `group-gap`, `group-label-padding-block`, `group-label-fg`, `group-label-font-size`, `group-label-font-weight`, `group-label-tracking` · 2 privada(s) forward — `_palette-solid`, `_palette-element`
- **Eje `size`**: no · **ficheros**: `listbox.css`
@ -38,6 +38,14 @@
| ---: | --- | --- | --- | --- |
| 1 | `listbox.css:65` | `[data-listbox][data-block]` | `inline-size` | `100%` |
### 1.4 Excepciones firmadas (0) — fuera del ratio
Literales que llevan su anotación `/* literal: <razón> */` en la propia
declaración: la válvula de recipe-contract §3, la misma que honra
`component-audit`. **Una desviación firmada no es deuda** — se listan para que la
razón se lea, no para acuñarlas.
_Ninguno._
## 2. Sistema transversal (3) — informativo, fuera del ratio
Un tema los alcanza **a nivel de sistema**, por diseño (recipe-contract §2).

@ -5,8 +5,8 @@
> Vista de conjunto: [README](./README.md) · método y protocolo:
> [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7.
- **Medido**: 2026-08-21 · **Alcance**: **60%** — 3 de 5 knobs por token público
- **Knobs de apariencia**: 5 — público 3 · privado 2 · global 0 · literal 0 · sistema 0 _(fuera del ratio)_
- **Medido**: 2026-08-22 · **Alcance**: **60%** — 3 de 5 knobs por token público
- **Knobs de apariencia**: 5 — público 3 · privado 2 · global 0 · literal 0 · sistema 0 · excepción 0 _(los dos últimos, fuera del ratio)_
- **Contrato hoy** (`lib/recipes/base.ts`): 3 pública(s) — `padding-inline`, `padding-block`, `radius` · 2 privada(s) forward — `_palette-element`, `_palette-text`
- **Eje `size`**: no · **ficheros**: `mark.css`
@ -27,6 +27,14 @@ _Ninguno._
_Ninguno._
### 1.4 Excepciones firmadas (0) — fuera del ratio
Literales que llevan su anotación `/* literal: <razón> */` en la propia
declaración: la válvula de recipe-contract §3, la misma que honra
`component-audit`. **Una desviación firmada no es deuda** — se listan para que la
razón se lea, no para acuñarlas.
_Ninguno._
## 2. Sistema transversal (0) — informativo, fuera del ratio
Un tema los alcanza **a nivel de sistema**, por diseño (recipe-contract §2).

@ -5,8 +5,8 @@
> Vista de conjunto: [README](./README.md) · método y protocolo:
> [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7.
- **Medido**: 2026-08-20 · **Alcance**: **—** — 0 de 0 knobs por token público
- **Knobs de apariencia**: 0 — público 0 · privado 0 · global 0 · literal 0 · sistema 0 _(fuera del ratio)_
- **Medido**: 2026-08-22 · **Alcance**: **—** — 0 de 0 knobs por token público
- **Knobs de apariencia**: 0 — público 0 · privado 0 · global 0 · literal 0 · sistema 0 · excepción 0 _(los dos últimos, fuera del ratio)_
- **Contrato hoy** (`lib/recipes/base.ts`): **sin entrada en `base.ts`**
- **Eje `size`**: no · **ficheros**: `mask-field.css`
@ -24,6 +24,14 @@ _Ninguno._
_Ninguno._
### 1.4 Excepciones firmadas (0) — fuera del ratio
Literales que llevan su anotación `/* literal: <razón> */` en la propia
declaración: la válvula de recipe-contract §3, la misma que honra
`component-audit`. **Una desviación firmada no es deuda** — se listan para que la
razón se lea, no para acuñarlas.
_Ninguno._
## 2. Sistema transversal (0) — informativo, fuera del ratio
Un tema los alcanza **a nivel de sistema**, por diseño (recipe-contract §2).

@ -5,8 +5,8 @@
> Vista de conjunto: [README](./README.md) · método y protocolo:
> [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7.
- **Medido**: 2026-08-20 · **Alcance**: **88%** — 43 de 49 knobs por token público
- **Knobs de apariencia**: 49 — público 43 · privado 0 · global 0 · literal 6 · sistema 0 _(fuera del ratio)_
- **Medido**: 2026-08-22 · **Alcance**: **88%** — 43 de 49 knobs por token público
- **Knobs de apariencia**: 49 — público 43 · privado 0 · global 0 · literal 6 · sistema 0 · excepción 0 _(los dos últimos, fuera del ratio)_
- **Contrato hoy** (`lib/recipes/base.ts`): 61 pública(s) — `accent`, `accent-strong`, `bg`, `radius`, `fg`, `fg-muted`, `glass`, `border`, `scrim`, `scrim-height`, `track`, `buffered-bg`, `captions-bg`, `captions-fg`, `captions-radius`, `captions-gap`, `captions-padding-block`, `captions-padding-inline`, `title-font-size`, `title-font-weight`, `title-padding-block`, `title-padding-inline`, `buffering-size`, `buffering-border-width`, `gap-sm`, `gap-md`, `gap-lg`, `gap-xl`, `padding-block-sm`, `padding-block-md`, `padding-block-lg`, `padding-block-xl`, `padding-inline-sm`, `padding-inline-md`, `padding-inline-lg`, `padding-inline-xl`, `time-font-size-sm`, `time-font-size-md`, `time-font-size-lg`, `time-font-size-xl`, `control-height-sm`, `control-height-md`, `control-height-lg`, `control-height-xl`, `gap`, `padding-block`, `padding-inline`, `time-font-size`, `control-height`, `volume-width`, `volume-vertical-length`, `time-slider-min-width`, `rate-button-min-width`, `buffering-radius`, `captions-line-height`, `time-font-family`, `time-padding-inline`, `audio-title-padding-block`, `audio-title-padding-inline`, `volume-float-padding-block`, `volume-float-padding-inline`
- **Eje `size`**: no · **ficheros**: `media-player.css`
@ -31,6 +31,14 @@ _Ninguno._
| 5 | `media-player.css:54` | `[data-media-player-poster]` | `height` | `100%` |
| 6 | `media-player.css:426` | `[data-media-player-rate-float], [data-media-player-caption-float]` | `inline-size` | `max-content` |
### 1.4 Excepciones firmadas (0) — fuera del ratio
Literales que llevan su anotación `/* literal: <razón> */` en la propia
declaración: la válvula de recipe-contract §3, la misma que honra
`component-audit`. **Una desviación firmada no es deuda** — se listan para que la
razón se lea, no para acuñarlas.
_Ninguno._
## 2. Sistema transversal (0) — informativo, fuera del ratio
Un tema los alcanza **a nivel de sistema**, por diseño (recipe-contract §2).

@ -6,7 +6,7 @@
> [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7.
- **Medido**: 2026-08-22 · **Alcance**: **38%** — 3 de 8 knobs por token público
- **Knobs de apariencia**: 8 — público 3 · privado 0 · global 1 · literal 4 · sistema 0 _(fuera del ratio)_
- **Knobs de apariencia**: 8 — público 3 · privado 0 · global 1 · literal 4 · sistema 0 · excepción 0 _(los dos últimos, fuera del ratio)_
- **Contrato hoy** (`lib/recipes/base.ts`): 3 pública(s) — `gap`, `stagger-step`, `backdrop-bg`
- **Eje `size`**: sí · **ficheros**: `menu-dial.css`
@ -31,6 +31,14 @@ _Ninguno._
| 3 | `menu-dial.css:262` | `.menu-dial-glyph` | `block-size` | `1em` |
| 4 | `menu-dial.css:271` | `.menu-dial-glyph::before, .menu-dial-glyph::after` | `block-size` | `2px` |
### 1.4 Excepciones firmadas (0) — fuera del ratio
Literales que llevan su anotación `/* literal: <razón> */` en la propia
declaración: la válvula de recipe-contract §3, la misma que honra
`component-audit`. **Una desviación firmada no es deuda** — se listan para que la
razón se lea, no para acuñarlas.
_Ninguno._
## 2. Sistema transversal (0) — informativo, fuera del ratio
Un tema los alcanza **a nivel de sistema**, por diseño (recipe-contract §2).

@ -5,8 +5,8 @@
> Vista de conjunto: [README](./README.md) · método y protocolo:
> [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7.
- **Medido**: 2026-08-20 · **Alcance**: **15%** — 4 de 26 knobs por token público
- **Knobs de apariencia**: 27 — público 4 · privado 6 · global 16 · literal 0 · sistema 1 _(fuera del ratio)_
- **Medido**: 2026-08-22 · **Alcance**: **15%** — 4 de 26 knobs por token público
- **Knobs de apariencia**: 27 — público 4 · privado 6 · global 16 · literal 0 · sistema 1 · excepción 0 _(los dos últimos, fuera del ratio)_
- **Contrato hoy** (`lib/recipes/base.ts`): 5 pública(s) — `panel-z`, `panel-min-width`, `panel-max-height`, `panel-padding`, `panel-radius`
- **Eje `size`**: sí · **ficheros**: `menubar.css`
@ -48,6 +48,14 @@
_Ninguno._
### 1.4 Excepciones firmadas (0) — fuera del ratio
Literales que llevan su anotación `/* literal: <razón> */` en la propia
declaración: la válvula de recipe-contract §3, la misma que honra
`component-audit`. **Una desviación firmada no es deuda** — se listan para que la
razón se lea, no para acuñarlas.
_Ninguno._
## 2. Sistema transversal (1) — informativo, fuera del ratio
Un tema los alcanza **a nivel de sistema**, por diseño (recipe-contract §2).

@ -6,7 +6,7 @@
> [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7.
- **Medido**: 2026-08-22 · **Alcance**: **64%** — 9 de 14 knobs por token público
- **Knobs de apariencia**: 14 — público 9 · privado 1 · global 2 · literal 2 · sistema 0 _(fuera del ratio)_
- **Knobs de apariencia**: 14 — público 9 · privado 1 · global 2 · literal 2 · sistema 0 · excepción 0 _(los dos últimos, fuera del ratio)_
- **Contrato hoy** (`lib/recipes/base.ts`): 28 pública(s) — `height-xs`, `height-sm`, `height-md`, `height-lg`, `height-xl`, `radius-xs`, `radius-sm`, `radius-md`, `radius-lg`, `radius-xl`, `ring-size-xs`, `ring-size-sm`, `ring-size-md`, `ring-size-lg`, `ring-size-xl`, `ring-thickness-xs`, `ring-thickness-sm`, `ring-thickness-md`, `ring-thickness-lg`, `ring-thickness-xl`, `track-bg`, `ring-track-bg`, `ring-center-bg`, `indicator-bg-below`, `indicator-bg-optimum`, `indicator-bg-above`, `transition-duration`, `transition-ease`
- **Eje `size`**: sí · **ficheros**: `meter.css`
@ -32,6 +32,14 @@
| 1 | `meter.css:10` | `[data-meter]` | `inline-size` | `100%` |
| 2 | `meter.css:55` | `[data-meter-indicator]` | `block-size` | `100%` |
### 1.4 Excepciones firmadas (0) — fuera del ratio
Literales que llevan su anotación `/* literal: <razón> */` en la propia
declaración: la válvula de recipe-contract §3, la misma que honra
`component-audit`. **Una desviación firmada no es deuda** — se listan para que la
razón se lea, no para acuñarlas.
_Ninguno._
## 2. Sistema transversal (0) — informativo, fuera del ratio
Un tema los alcanza **a nivel de sistema**, por diseño (recipe-contract §2).

@ -6,7 +6,7 @@
> [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7.
- **Medido**: 2026-08-22 · **Alcance**: **74%** — 37 de 50 knobs por token público
- **Knobs de apariencia**: 50 — público 37 · privado 0 · global 9 · literal 4 · sistema 0 _(fuera del ratio)_
- **Knobs de apariencia**: 50 — público 37 · privado 0 · global 9 · literal 4 · sistema 0 · excepción 0 _(los dos últimos, fuera del ratio)_
- **Contrato hoy** (`lib/recipes/base.ts`): 68 pública(s) — `gap-xs`, `gap-sm`, `gap-md`, `gap-lg`, `gap-xl`, `gap-xxl`, `icon-gap-xs`, `icon-gap-sm`, `icon-gap-md`, `icon-gap-lg`, `icon-gap-xl`, `icon-gap-xxl`, `icon-box-xs`, `icon-box-sm`, `icon-box-md`, `icon-box-lg`, `icon-box-xl`, `icon-box-xxl`, `icon-border-width`, `icon-bg`, `icon-fg`, `label-font-family`, `label-font-size-xs`, `label-font-size-sm`, `label-font-size-md`, `label-font-size-lg`, `label-font-size-xl`, `label-font-size-xxl`, `label-font-weight`, `label-fg`, `label-line-height`, `label-letter-spacing`, `value-font-family`, `value-font-size-xs`, `value-font-size-sm`, `value-font-size-md`, `value-font-size-lg`, `value-font-size-xl`, `value-font-size-xxl`, `value-font-weight`, `value-fg`, `value-line-height`, `value-letter-spacing`, `value-font-feature`, `description-font-family`, `description-font-size-xs`, `description-font-size-sm`, `description-font-size-md`, `description-font-size-lg`, `description-font-size-xl`, `description-font-size-xxl`, `description-fg`, `description-line-height`, `chart-margin-block-start`, `chart-right-width`, `progress-margin-block-start`, `progress-gap`, `gauge-value-font-size`, `gauge-value-font-weight`, `gauge-value-fg`, `actions-gap`, `actions-margin-block-start`, `actions-padding-block-start`, `actions-border-fg`, `flash-duration`, `flash-ease`, `flash-radius`, `flash-inset` · 5 privada(s) forward — `_palette-track`, `_palette-solid`, `_palette-text`, `_palette-contrast`, `_palette-border`
- **Eje `size`**: sí · **ficheros**: `metrics.css`
@ -39,6 +39,14 @@ _Ninguno._
| 3 | `metrics.css:238` | `[data-metrics-progress]` | `inline-size` | `100%` |
| 4 | `metrics.css:255` | `[data-metrics-gauge-value]` | `line-height` | `1` |
### 1.4 Excepciones firmadas (0) — fuera del ratio
Literales que llevan su anotación `/* literal: <razón> */` en la propia
declaración: la válvula de recipe-contract §3, la misma que honra
`component-audit`. **Una desviación firmada no es deuda** — se listan para que la
razón se lea, no para acuñarlas.
_Ninguno._
## 2. Sistema transversal (0) — informativo, fuera del ratio
Un tema los alcanza **a nivel de sistema**, por diseño (recipe-contract §2).

@ -6,7 +6,7 @@
> [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7.
- **Medido**: 2026-08-22 · **Alcance**: **38%** — 11 de 29 knobs por token público
- **Knobs de apariencia**: 29 — público 11 · privado 0 · global 13 · literal 5 · sistema 0 _(fuera del ratio)_
- **Knobs de apariencia**: 29 — público 11 · privado 0 · global 13 · literal 5 · sistema 0 · excepción 0 _(los dos últimos, fuera del ratio)_
- **Contrato hoy** (`lib/recipes/base.ts`): **sin entrada en `base.ts`**
- **Eje `size`**: no · **ficheros**: `mockup.css`
@ -44,6 +44,14 @@ _Ninguno._
| 4 | `mockup.css:98` | `[data-box][data-mockup][data-chrome='phone']::before` | `inline-size` | `38%` |
| 5 | `mockup.css:99` | `[data-box][data-mockup][data-chrome='phone']::before` | `block-size` | `1.1rem` |
### 1.4 Excepciones firmadas (0) — fuera del ratio
Literales que llevan su anotación `/* literal: <razón> */` en la propia
declaración: la válvula de recipe-contract §3, la misma que honra
`component-audit`. **Una desviación firmada no es deuda** — se listan para que la
razón se lea, no para acuñarlas.
_Ninguno._
## 2. Sistema transversal (0) — informativo, fuera del ratio
Un tema los alcanza **a nivel de sistema**, por diseño (recipe-contract §2).

@ -5,8 +5,8 @@
> Vista de conjunto: [README](./README.md) · método y protocolo:
> [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7.
- **Medido**: 2026-08-21 · **Alcance**: **0%** — 0 de 12 knobs por token público
- **Knobs de apariencia**: 61 — público 0 · privado 7 · global 0 · literal 5 · sistema 49 _(fuera del ratio)_
- **Medido**: 2026-08-22 · **Alcance**: **0%** — 0 de 12 knobs por token público
- **Knobs de apariencia**: 61 — público 0 · privado 7 · global 0 · literal 5 · sistema 49 · excepción 0 _(los dos últimos, fuera del ratio)_
- **Contrato hoy** (`lib/recipes/base.ts`): 0 pública(s) · 5 privada(s) forward — `_palette-solid`, `_palette-solid-hover`, `_palette-track`, `_palette-border`, `_palette-text`
- **Eje `size`**: no · **ficheros**: `month-grid.css`
@ -38,6 +38,14 @@ _Ninguno._
| 4 | `month-grid.css:111` | `[data-popover-content] [data-month-grid]` | `inline-size` | `100%` |
| 5 | `month-grid.css:114` | `[data-popover-content] [data-month-grid-grid]` | `inline-size` | `100%` |
### 1.4 Excepciones firmadas (0) — fuera del ratio
Literales que llevan su anotación `/* literal: <razón> */` en la propia
declaración: la válvula de recipe-contract §3, la misma que honra
`component-audit`. **Una desviación firmada no es deuda** — se listan para que la
razón se lea, no para acuñarlas.
_Ninguno._
## 2. Sistema transversal (49) — informativo, fuera del ratio
Un tema los alcanza **a nivel de sistema**, por diseño (recipe-contract §2).

@ -5,8 +5,8 @@
> Vista de conjunto: [README](./README.md) · método y protocolo:
> [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7.
- **Medido**: 2026-08-20 · **Alcance**: **0%** — 0 de 1 knobs por token público
- **Knobs de apariencia**: 1 — público 0 · privado 0 · global 0 · literal 1 · sistema 0 _(fuera del ratio)_
- **Medido**: 2026-08-22 · **Alcance**: **0%** — 0 de 1 knobs por token público
- **Knobs de apariencia**: 1 — público 0 · privado 0 · global 0 · literal 1 · sistema 0 · excepción 0 _(los dos últimos, fuera del ratio)_
- **Contrato hoy** (`lib/recipes/base.ts`): **sin entrada en `base.ts`**
- **Eje `size`**: no · **ficheros**: `motion.css`
@ -26,6 +26,14 @@ _Ninguno._
| ---: | --- | --- | --- | --- |
| 1 | `motion.css:26` | `[data-animation-pending]` | `opacity` | `1` |
### 1.4 Excepciones firmadas (0) — fuera del ratio
Literales que llevan su anotación `/* literal: <razón> */` en la propia
declaración: la válvula de recipe-contract §3, la misma que honra
`component-audit`. **Una desviación firmada no es deuda** — se listan para que la
razón se lea, no para acuñarlas.
_Ninguno._
## 2. Sistema transversal (0) — informativo, fuera del ratio
Un tema los alcanza **a nivel de sistema**, por diseño (recipe-contract §2).

@ -6,7 +6,7 @@
> [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7.
- **Medido**: 2026-08-22 · **Alcance**: **67%** — 51 de 76 knobs por token público
- **Knobs de apariencia**: 77 — público 51 · privado 5 · global 14 · literal 6 · sistema 1 _(fuera del ratio)_
- **Knobs de apariencia**: 77 — público 51 · privado 5 · global 14 · literal 6 · sistema 1 · excepción 0 _(los dos últimos, fuera del ratio)_
- **Contrato hoy** (`lib/recipes/base.ts`): 62 pública(s) — `band-height-sm`, `band-height-md`, `band-height-lg`, `knob-size-sm`, `knob-size-md`, `knob-size-lg`, `band-height`, `knob-size`, `panel-gap-sm`, `panel-gap-md`, `panel-gap-lg`, `panel-gap`, `band-radius`, `band-border`, `band-border-width`, `line-width`, `line-radius`, `knob-radius`, `knob-shadow`, `knob-focus-ring`, `knob-focus-ring-offset`, `ticks-inset-inline`, `ticks-inset-block-end`, `tick-font-size`, `tick-font-family`, `display-gap`, `time-font-family`, `time-font-size`, `time-font-weight`, `time-letter-spacing`, `meridiem-margin-inline-start`, `meridiem-font-size`, `meridiem-font-weight`, `meridiem-fg`, `period-gap`, `period-font-size`, `period-font-weight`, `period-fg`, `steppers-gap`, `stepper-group-gap`, `stepper-label-font-size`, `stepper-label-font-weight`, `stepper-label-fg`, `stepper-label-letter-spacing`, `periods-gap`, `periods-margin-block`, `chip-font-size`, `trigger-gap`, `trigger-min-width`, `trigger-padding-block`, `trigger-padding-inline`, `trigger-bg`, `trigger-fg`, `trigger-border`, `trigger-border-width`, `trigger-radius`, `trigger-font-size`, `hover-trigger-border`, `open-trigger-border`, `open-trigger-ring`, `trigger-value-empty-fg`, `trigger-icon-fg`
- **Eje `size`**: sí · **ficheros**: `natural-time-picker.css`
@ -52,6 +52,14 @@
| 5 | `natural-time-picker.css:222` | `[data-natural-time-picker-tick]` | `line-height` | `1` |
| 6 | `natural-time-picker.css:292` | `[data-natural-time-picker-panel] [data-natural-time-picker-periods]:not([data-icon-only]) [data-button]` | `inline-size` | `100%` |
### 1.4 Excepciones firmadas (0) — fuera del ratio
Literales que llevan su anotación `/* literal: <razón> */` en la propia
declaración: la válvula de recipe-contract §3, la misma que honra
`component-audit`. **Una desviación firmada no es deuda** — se listan para que la
razón se lea, no para acuñarlas.
_Ninguno._
## 2. Sistema transversal (1) — informativo, fuera del ratio
Un tema los alcanza **a nivel de sistema**, por diseño (recipe-contract §2).

@ -5,8 +5,8 @@
> Vista de conjunto: [README](./README.md) · método y protocolo:
> [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7.
- **Medido**: 2026-08-20 · **Alcance**: **4%** — 1 de 24 knobs por token público
- **Knobs de apariencia**: 25 — público 1 · privado 0 · global 17 · literal 6 · sistema 1 _(fuera del ratio)_
- **Medido**: 2026-08-22 · **Alcance**: **4%** — 1 de 23 knobs por token público
- **Knobs de apariencia**: 24 — público 1 · privado 0 · global 17 · literal 5 · sistema 1 · excepción 1 _(los dos últimos, fuera del ratio)_
- **Contrato hoy** (`lib/recipes/base.ts`): 1 pública(s) — `indent`
- **Eje `size`**: no · **ficheros**: `nav-tree.css`
@ -38,7 +38,7 @@
_Ninguno._
### 1.3 Literales (6)
### 1.3 Literales (5)
| # | fichero:línea | selector | propiedad | valor |
| ---: | --- | --- | --- | --- |
@ -47,8 +47,17 @@ _Ninguno._
| 3 | `nav-tree.css:110` | `[data-nav-tree-trigger]::after` | `block-size` | `0.42em` |
| 4 | `nav-tree.css:112` | `[data-nav-tree-trigger]::after` | `border-inline-end` | `1.5px solid currentcolor` |
| 5 | `nav-tree.css:113` | `[data-nav-tree-trigger]::after` | `border-block-end` | `1.5px solid currentcolor` |
| 6 | `nav-tree.css:114` | `[data-nav-tree-trigger]::after` | `opacity` | `0.55` |
### 1.4 Excepciones firmadas (1) — fuera del ratio
Literales que llevan su anotación `/* literal: <razón> */` en la propia
declaración: la válvula de recipe-contract §3, la misma que honra
`component-audit`. **Una desviación firmada no es deuda** — se listan para que la
razón se lea, no para acuñarlas.
| # | fichero:línea | selector | propiedad | valor |
| ---: | --- | --- | --- | --- |
| 1 | `nav-tree.css:114` | `[data-nav-tree-trigger]::after` | `opacity` | `0.55` |
## 2. Sistema transversal (1) — informativo, fuera del ratio
Un tema los alcanza **a nivel de sistema**, por diseño (recipe-contract §2).

@ -5,8 +5,8 @@
> Vista de conjunto: [README](./README.md) · método y protocolo:
> [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7.
- **Medido**: 2026-08-20 · **Alcance**: **44%** — 15 de 34 knobs por token público
- **Knobs de apariencia**: 38 — público 15 · privado 1 · global 13 · literal 5 · sistema 4 _(fuera del ratio)_
- **Medido**: 2026-08-22 · **Alcance**: **44%** — 15 de 34 knobs por token público
- **Knobs de apariencia**: 38 — público 15 · privado 1 · global 13 · literal 5 · sistema 4 · excepción 0 _(los dos últimos, fuera del ratio)_
- **Contrato hoy** (`lib/recipes/base.ts`): 26 pública(s) — `content-z`, `indicator-w`, `indicator-x`, `trigger-height-sm`, `trigger-height-md`, `trigger-height-lg`, `trigger-font-size-sm`, `trigger-font-size-md`, `trigger-font-size-lg`, `trigger-line-height-sm`, `trigger-line-height-md`, `trigger-line-height-lg`, `trigger-padding-inline-sm`, `trigger-padding-inline-md`, `trigger-padding-inline-lg`, `trigger-radius-sm`, `trigger-radius-md`, `trigger-radius-lg`, `trigger-height`, `trigger-font-size`, `trigger-line-height`, `trigger-padding-inline`, `trigger-radius`, `trigger-fg`, `active-trigger-fg`, `active-trigger-bg`
- **Eje `size`**: sí · **ficheros**: `navigation-menu.css`
@ -46,6 +46,14 @@
| 4 | `navigation-menu.css:354` | `[data-navigation-menu] [data-navigation-menu-indicator]` | `block-size` | `2px` |
| 5 | `navigation-menu.css:370` | `[data-navigation-menu-indicator][data-state='open']` | `opacity` | `1` |
### 1.4 Excepciones firmadas (0) — fuera del ratio
Literales que llevan su anotación `/* literal: <razón> */` en la propia
declaración: la válvula de recipe-contract §3, la misma que honra
`component-audit`. **Una desviación firmada no es deuda** — se listan para que la
razón se lea, no para acuñarlas.
_Ninguno._
## 2. Sistema transversal (4) — informativo, fuera del ratio
Un tema los alcanza **a nivel de sistema**, por diseño (recipe-contract §2).

@ -5,8 +5,8 @@
> Vista de conjunto: [README](./README.md) · método y protocolo:
> [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7.
- **Medido**: 2026-08-20 · **Alcance**: **—** — 0 de 0 knobs por token público
- **Knobs de apariencia**: 0 — público 0 · privado 0 · global 0 · literal 0 · sistema 0 _(fuera del ratio)_
- **Medido**: 2026-08-22 · **Alcance**: **—** — 0 de 0 knobs por token público
- **Knobs de apariencia**: 0 — público 0 · privado 0 · global 0 · literal 0 · sistema 0 · excepción 0 _(los dos últimos, fuera del ratio)_
- **Contrato hoy** (`lib/recipes/base.ts`): **sin entrada en `base.ts`**
- **Eje `size`**: no · **ficheros**: `number-field.css`
@ -24,6 +24,14 @@ _Ninguno._
_Ninguno._
### 1.4 Excepciones firmadas (0) — fuera del ratio
Literales que llevan su anotación `/* literal: <razón> */` en la propia
declaración: la válvula de recipe-contract §3, la misma que honra
`component-audit`. **Una desviación firmada no es deuda** — se listan para que la
razón se lea, no para acuñarlas.
_Ninguno._
## 2. Sistema transversal (0) — informativo, fuera del ratio
Un tema los alcanza **a nivel de sistema**, por diseño (recipe-contract §2).

@ -5,8 +5,8 @@
> Vista de conjunto: [README](./README.md) · método y protocolo:
> [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7.
- **Medido**: 2026-08-20 · **Alcance**: **29%** — 7 de 24 knobs por token público
- **Knobs de apariencia**: 27 — público 7 · privado 0 · global 8 · literal 9 · sistema 3 _(fuera del ratio)_
- **Medido**: 2026-08-22 · **Alcance**: **29%** — 7 de 24 knobs por token público
- **Knobs de apariencia**: 27 — público 7 · privado 0 · global 8 · literal 9 · sistema 3 · excepción 0 _(los dos últimos, fuera del ratio)_
- **Contrato hoy** (`lib/recipes/base.ts`): 12 pública(s) — `trigger-lift`, `trigger-shadow`, `sector-shadow`, `sector-ring-width`, `sector-hover-ring-width`, `glyph-bar-thickness`, `muted-opacity`, `hover-ring-opacity`, `rim-width`, `rim-glow-width`, `rim-glow-opacity`, `rim-glow-blur`
- **Eje `size`**: no · **ficheros**: `onion-menu.css`
@ -43,6 +43,14 @@ _Ninguno._
| 8 | `onion-menu.css:232` | `.onion-menu-trigger-glyph` | `inline-size` | `42%` |
| 9 | `onion-menu.css:233` | `.onion-menu-trigger-glyph` | `block-size` | `42%` |
### 1.4 Excepciones firmadas (0) — fuera del ratio
Literales que llevan su anotación `/* literal: <razón> */` en la propia
declaración: la válvula de recipe-contract §3, la misma que honra
`component-audit`. **Una desviación firmada no es deuda** — se listan para que la
razón se lea, no para acuñarlas.
_Ninguno._
## 2. Sistema transversal (3) — informativo, fuera del ratio
Un tema los alcanza **a nivel de sistema**, por diseño (recipe-contract §2).

@ -6,7 +6,7 @@
> [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7.
- **Medido**: 2026-08-22 · **Alcance**: **100%** — 24 de 24 knobs por token público
- **Knobs de apariencia**: 26 — público 24 · privado 0 · global 0 · literal 0 · sistema 2 _(fuera del ratio)_
- **Knobs de apariencia**: 26 — público 24 · privado 0 · global 0 · literal 0 · sistema 2 · excepción 0 _(los dos últimos, fuera del ratio)_
- **Contrato hoy** (`lib/recipes/base.ts`): 34 pública(s) — `gap-xs`, `gap-sm`, `gap-md`, `gap-lg`, `control-size-xs`, `control-size-sm`, `control-size-md`, `control-size-lg`, `control-padding-inline-xs`, `control-padding-inline-sm`, `control-padding-inline-md`, `control-padding-inline-lg`, `font-family`, `font-size-xs`, `font-size-sm`, `font-size-md`, `font-size-lg`, `line-height`, `control-radius`, `control-border-width`, `control-border`, `hover-control-border`, `control-bg`, `control-fg`, `hover-control-fg`, `selected-border`, `hover-selected-border`, `selected-bg`, `hover-selected-bg`, `selected-fg`, `ellipsis-fg`, `transition-duration`, `transition-ease`, `disabled-opacity`
- **Eje `size`**: sí · **ficheros**: `pagination.css`
@ -24,6 +24,14 @@ _Ninguno._
_Ninguno._
### 1.4 Excepciones firmadas (0) — fuera del ratio
Literales que llevan su anotación `/* literal: <razón> */` en la propia
declaración: la válvula de recipe-contract §3, la misma que honra
`component-audit`. **Una desviación firmada no es deuda** — se listan para que la
razón se lea, no para acuñarlas.
_Ninguno._
## 2. Sistema transversal (2) — informativo, fuera del ratio
Un tema los alcanza **a nivel de sistema**, por diseño (recipe-contract §2).

@ -5,8 +5,8 @@
> Vista de conjunto: [README](./README.md) · método y protocolo:
> [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7.
- **Medido**: 2026-08-20 · **Alcance**: **22%** — 103 de 466 knobs por token público
- **Knobs de apariencia**: 471 — público 103 · privado 1 · global 272 · literal 90 · sistema 5 _(fuera del ratio)_
- **Medido**: 2026-08-22 · **Alcance**: **22%** — 103 de 463 knobs por token público
- **Knobs de apariencia**: 468 — público 103 · privado 1 · global 272 · literal 87 · sistema 5 · excepción 3 _(los dos últimos, fuera del ratio)_
- **Contrato hoy** (`lib/recipes/base.ts`): **sin entrada en `base.ts`**
- **Eje `size`**: no · **ficheros**: `palabras-chrome.css`, `palabras.css`
@ -295,7 +295,7 @@
| ---: | --- | --- | --- | --- |
| 1 | `palabras-chrome.css:452` | `[data-palabras-col-resize]::before` | `inline-size` | `var(--_palabras-col-resize-w)` |
### 1.3 Literales (90)
### 1.3 Literales (87)
| # | fichero:línea | selector | propiedad | valor |
| ---: | --- | --- | --- | --- |
@ -385,11 +385,20 @@
| 84 | `palabras.css:510` | `[data-palabras-doc] [data-palabras-image-placeholder]::before` | `inline-size` | `4.5rem` |
| 85 | `palabras.css:511` | `[data-palabras-doc] [data-palabras-image-placeholder]::before` | `block-size` | `4.5rem` |
| 86 | `palabras.css:512` | `[data-palabras-doc] [data-palabras-image-placeholder]::before` | `background` | `url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='none'%20stroke='%239aa0aa'%20stroke-width='1.75'%20stroke-linecap='round'%20stroke-linejoin='round'%3E%3Crect%20width='18'%20height='18'%20x='3'%20y='3'%20rx='2'%20ry='2'/%3E%3Ccircle%20cx='9'%20cy='9'%20r='2'/%3E%3Cpath%20d='m21%2015-3.086-3.086a2%202%200%200%200-2.828%200L6%2021'/%3E%3C/svg%3E") center / contain no-repeat` |
| 87 | `palabras.css:538` | `[data-palabras-doc] [data-palabras-marks~='code']` | `font-size` | `0.9em` |
| 88 | `palabras.css:546` | `[data-palabras-doc] [data-palabras-marks~='sub']` | `font-size` | `0.75em` |
| 89 | `palabras.css:550` | `[data-palabras-doc] [data-palabras-marks~='sup']` | `font-size` | `0.75em` |
| 90 | `palabras.css:560` | `[data-palabras-doc] [data-palabras-i18n-fallback]::before` | `opacity` | `0.6` |
| 87 | `palabras.css:560` | `[data-palabras-doc] [data-palabras-i18n-fallback]::before` | `opacity` | `0.6` |
### 1.4 Excepciones firmadas (3) — fuera del ratio
Literales que llevan su anotación `/* literal: <razón> */` en la propia
declaración: la válvula de recipe-contract §3, la misma que honra
`component-audit`. **Una desviación firmada no es deuda** — se listan para que la
razón se lea, no para acuñarlas.
| # | fichero:línea | selector | propiedad | valor |
| ---: | --- | --- | --- | --- |
| 1 | `palabras.css:538` | `[data-palabras-doc] [data-palabras-marks~='code']` | `font-size` | `0.9em` |
| 2 | `palabras.css:546` | `[data-palabras-doc] [data-palabras-marks~='sub']` | `font-size` | `0.75em` |
| 3 | `palabras.css:550` | `[data-palabras-doc] [data-palabras-marks~='sup']` | `font-size` | `0.75em` |
## 2. Sistema transversal (5) — informativo, fuera del ratio
Un tema los alcanza **a nivel de sistema**, por diseño (recipe-contract §2).

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save

Powered by TurnKey Linux.