Card es un primitivo con paleta, y su columna `private` no es deuda: es el
puente THM-2. Clasificados uno a uno sus ocho knobs fuera de alcance ANTES de
tocar una línea —que es la mitad del trabajo—:
- cuatro leen `--_card-palette-*` DIRECTO: el velo de hover de `ghost` y
`outline`, la descripción en `solid` y el filete del pie en `solid`;
- los otros cuatro leen el conmutador por VARIANTE (`--_card-bg`, 4 fuentes;
`--_card-fg`, 2) en la raíz, el título y el cuerpo, y sus ramas son ese
mismo puente.
Un público encima de cualquiera dejaría que un tema lo fijara y matara en
silencio el `color=` de cada instancia (CONTINUE-theming §3.pre). El techo de
card **no es el 100 %**, y forzar la cifra habría sido romper la jaula del
color.
Lo único que faltaba era **la costura**: la rama `outline` del conmutador leía
`var(--color-surface-default)` a pelo — el valor es del sistema, el knob es de
la card. Entra **`outline-bg`** con ese valor verbatim, y el centinela lo
confirma vivo. Ni `ghost` ni el borde transparente se acuñan: son identidad.
Censo: 37 knobs · 28 públicos · **78 %** (idéntico, y así queda escrito en la
ficha). Contrato 97 → **98** claves. Global del catálogo sin bajar (68 %).
Diff de computed: **VACÍO**. 1.216 valores en 7 estados (sonda estándar, 6
nodos = la card y sus cinco ranuras) más 2.484 valores en 18 celdas de
variante / tono / rounded / selected / disabled / lift, con `transition` y
`animation` congeladas — porque el escenario monta UNA card `soft` y la sonda
no barre variantes. Capturas 2× antes y después, miradas.
Centinela R-5.4: **49/98, 49 adjudicadas**, verde. 40 por PATRÓN (la cascada
de paleta, medida aquí: con `data-color=primary` `--card-primary-track` no
mueve nada, `--palette-track` sobre el mismo nodo repinta, y sin `data-color`
`--card-neutral-track` vuelve a pintar) y 9 forzadas sobre el nodo real. Dos
merecen leerse:
- **el trío `emerge-*` no pinta en la demo, y no es culpa de la demo**: el
montaje CEDE al sistema de motion (`:not([data-animation-style])`) y el
escenario arranca con el preset `select-pop`. Quitado el atributo, los tres
alcanzan — y `emerge-distance` tiene ADEMÁS una segunda causa: alimenta
`--motion-distance-md` y la animación acaba en `translate 0` con
`fill-mode: both`, así que `transform` en reposo no puede enseñarlo nunca
(se mide leyendo el hook, 8px → 1234px);
- **`hover-lift` y `press-scale` mueven `transform`, que el guard no
fotografía** — mismo hueco que `rating-group.item-hover-offset` (§13).
Hallazgo de composición, MEDIDO y no forzado: dentro de un `CardGroup` el eje
`radius` de la card está muerto — `[data-card-group] [data-card]` es (0,2,0)
contra la (0,1,0) de la receta, así que manda `--card-group-card-radius`
(`--card-radius-md: 1234px` no mueve nada; el del grupo mueve las dos cards).
Es la anidación concéntrica de §30, deliberada y documentada en
`card-group.css`; se registra porque significa que el token de la card no
tiene efecto en ese contexto.
Guards: censo `--only card` 78 % · `component-audit --only card` PASS ·
`eidos-lint card` 0 invalid · `vitest run src/uix/eidos` sin rojos nuevos (el
conocido `skin-media-player` en `lint.test.ts`) · `rtl:check` 0 ·
`docs:check` 0 · `check` sin errores en ningún fichero tocado · prettier sin
desviaciones NUEVAS sobre el árbol indexado.
Anotado, fuera del eje: la raíz declara `background:` en ATAJO, lo que fija
`background-image: none` y cancela el velo del sistema — card es uno de los 45
componentes de la incidencia §12 de next-features. Arreglarlo mueve píxel.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>