CERO claves nuevas: dos literales firmados y tres declaraciones adjudicadas por
doctrina. Diff de computed 0 sobre 2.240 valores en 7 estados; R-5.4 9/9 sin una
sola adjudicación — su contrato ya era sano.
LOS TRES QUE FALTAN SON CANAL DE VALOR, NO DEUDA
font-family, font-size y font-weight leen var(--_s-tvl-*, <primitivo>), y el
privado lo escribe el componente INLINE en cada render: eidos.resolve(size,'md')
y sus dos hermanos SIEMPRE producen un valor, así que el estilo inline siempre
está y el fallback del CSS sólo cubre el render previo a que aterrice. Un
--s-text-virtual-list-font-* quedaría pisado por ese inline y MENTIRÍA — la
clase de --gp-current-gradient, del preview-z de drag-drop y del canal de rect
del indicador de navigation-menu.
El mando aquí ES la prop (size / family / weight), y el tema llega por donde
viven esos tokens: la capa tipográfica. Y hay una razón dura para que el triple
viaje por una variable y no por un token de receta: el canvas que mide el texto
lee getComputedStyle del contenedor, así que la fuente pintada y la medida
tienen que ser la MISMA — una indirección que pudiera divergir rompería el
cálculo de anchuras de la virtualización.
LOS DOS LITERALES SON IDENTIDAD
La lista ES el ancho de su contenedor; el espaciador ES el del scroller.
Firmados con su anotación, fuera del ratio.
Su techo real es el 70 % y está medido: mismo caso que listbox (68 % a
propósito) o waveform (86 %). Lo que queda fuera no es deriva, es una decisión
con dueño escrita.
VERIFICACIÓN
Sonda antes/después 0 diffs (2.240 valores · 7 estados · 10 nodos) · R-5.4 9/9 ·
component:audit PASS · censo 70 % con las tres filas restantes explicadas ·
eidos-lint 4 morfo-backed / 0 invalid / 0 class-hooks · rtl:check 0 ·
docs:check 0 · suite eidos 439/440 (el rojo es skin-media-player, el conocido).
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>