You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
svelte-kit-vice/docs/audit/theming/rating-group.md

113 lines
5.8 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# rating-group — alcance de tema: análisis y propuesta
> Generado por `node --import tsx/esm scripts/theming-census.ts --report`.
> Lo **medido** y la **propuesta** se regeneran; el **Veredicto** (§5) se conserva.
> Vista de conjunto: [README](./README.md) · método y protocolo:
> [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7.
- **Medido**: 2026-08-24 · **Alcance**: **100%** — 13 de 13 knobs por token público
- **Knobs de apariencia**: 14 — público 13 · privado 0 · global 0 · literal 0 · sistema 1 · excepción 2 _(los dos últimos, fuera del ratio)_
- **Contrato hoy** (`lib/recipes/base.ts`): 29 pública(s) — `gap-xs`, `gap-sm`, `gap-md`, `gap-lg`, `gap-xl`, `item-size-xs`, `item-size-sm`, `item-size-md`, `item-size-lg`, `item-size-xl`, `font-family`, `font-size-xs`, `font-size-sm`, `font-size-md`, `font-size-lg`, `font-size-xl`, `gap`, `item-size`, `font-size`, `line-height`, `item-fg`, `active-item-fg`, `partial-item-fg`, `invalid-item-fg`, `item-hover-offset`, `focus-radius`, `transition-duration`, `transition-ease`, `disabled-opacity`
- **Eje `size`**: no · **ficheros**: `rating-group.css`
## 1. Knobs fuera de alcance
### 1.1 Directo a primitivo global (0)
_Ninguno._
### 1.2 A través de un privado (0)
_Ninguno._
### 1.3 Literales (0)
_Ninguno._
### 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 | `rating-group.css:68` | `[data-rating-group-item] > :where(svg)` | `inline-size` | `100%` |
| 2 | `rating-group.css:69` | `[data-rating-group-item] > :where(svg)` | `block-size` | `100%` |
## 2. Sistema transversal (1) — informativo, fuera del ratio
Un tema los alcanza **a nivel de sistema**, por diseño (recipe-contract §2).
| # | fichero:línea | selector | propiedad | valor |
| ---: | --- | --- | --- | --- |
| 1 | `rating-group.css:22` | `[data-rating-group]:focus-visible` | `outline` | `var(--focus-ring-width) solid var(--focus-ring-color)` |
## 3. Privados de la receta — ¿de dónde sale su valor?
_La receta no declara privados propios en su CSS._
## 4. Propuesta de corrección
### 4.1 Tokens a declarar en `lib/recipes/base.ts` (0)
Valor **verbatim** del CSS de hoy: el default no se mueve, sólo cambia quién
puede moverlo. Nombres derivados de recipe-contract §1 (ejes lógicos, talla
al final) y theming §6.7 (slots de color, modificador delante). Un token con
DOS valores distintos es una colisión de nombre: son dos knobs, o el nombre
no distingue lo que debería — se marca `⚠`.
| token (`--rating-group-…`) | scope TSC | valor propuesto | usos |
| --- | --- | --- | ---: |
### 4.2 Sin nombre mecánico (2)
- **⚠ decisión: `100%` es un valor identidad o geometría de layout, no un knob de tema — el perímetro de «knob» es D-TH.2, sin firmar** — 2: `inline-size`, `block-size`.
### 4.4 Lo que hay que comprobar a mano (PLAN-theming §1.3 · §7.4)
- [ ] **Privado que no deriva de un público** — §3 lo marca; el privado debe leer el público o desaparecer.
- [ ] **Velo o acento en el nodo equivocado** (`archetype: 'item'` en un envoltorio, un `background` en shorthand que mata la capa de estado) — se mide desde el píxel hacia arriba.
- [ ] **Doble animación** al mover un sello a una superficie con animación propia — registro de `animationstart`/`animationend`.
- [ ] **Diff de computed = 0** en reposo · hover · abierto · disabled · foco, por talla, antes y después.
- [ ] **Centinela por token nuevo**: valor imposible en el root → el nodo lo sigue. Si no, el token miente.
## 5. Veredicto
<!-- veredicto:start -->
**Ejecutado 2026-08-23 · 80 % → 100 %.**
Contrato 25 → **29 claves**. Censo: público 12 → 13, **global 1 → 0**,
**literal 2 → 0** (los dos pasan a `exception`, fuera del ratio), privado 0,
sistema 1. Diff de computed **0** sobre 4.440 valores en 20 estados más 1.184 de
la sonda estándar; capturas 2× antes/después idénticas. Centinela **23/29**, 6
adjudicadas.
**Qué entra (4 claves).** Tres RESUELTAS por talla en el TSC —`gap`,
`item-size`, `font-size`— que jubilan los tres privados `--_rating-group-*` y
los cuatro bloques `[data-size]` que los conmutaban (§7.4-4): eran «privado con
fuentes por TALLA», que es una ESCALA y sube al contrato, no un conmutador. Un
tema alcanza ahora la coordenada resuelta además de los cinco pasos. Y
`invalid-item-fg`, la costura: el tinte de validación leía
`--color-threat-element` a pelo, igual que en sus hermanos de formulario.
**Los dos literales se FIRMAN, no se acuñan.** `inline-size: 100%` /
`block-size: 100%` sobre el glifo son IDENTIDAD —el SVG llena la caja del ítem,
y la caja ES el eje de talla—, así que llevan su `/* literal: … */` y salen del
ratio. Ojo: la demo pinta las estrellas con TEXTO (★/☆), de modo que esa regla
no tiene nodo en esta ruta; su razón es estructural, no medida en pantalla.
**Las seis adjudicaciones son instrumento o estado, ninguna es deuda**:
`partial-item-fg` necesita `allowHalf` y medio valor; `invalid-item-fg` necesita
`[data-invalid]`, y encenderlo en la demo taparía `item-fg`, `active-item-fg` y
`partial-item-fg` durante toda la corrida (su regla es (0,3,0)); `focus-radius`
necesita `:focus-visible`, que el guard quita a propósito; el par de transición
ES la transición que el guard congela; y **`item-hover-offset` mueve un
`transform`, propiedad que el guard no fotografía** — hueco de instrumento
nuevo, medido a mano (`matrix(1,0,0,1,0,-1)` → `matrix(1,0,0,1,0,-40)`) y
registrado en `next-features.md` §13. Todas verificadas forzando el estado sobre
el nodo REAL.
<!-- veredicto:end -->

Powered by TurnKey Linux.