Cero claves nuevas: su 29 % de deuda eran DOS literales que son la técnica, y
ahora van firmados. Diff de computed 0 sobre 192 valores en 7 estados más los 52
del estado enfocado —el único que se ve— medidos aparte; capturas 2× idénticas
byte a byte; R-5.4 de 0/8 a 8/8 SIN una sola adjudicación.
LA §4 PEDÍA `width` Y `height`, Y LAS DOS SON LA TÉCNICA
El `1px × 1px` no es un tamaño: es la mitad del sr-only canónico (la otra mitad
es el par clip / clip-path). Un tema que lo mueva no cambia una apariencia, rompe
el mecanismo — y a 0×0 algunos motores sacan el enlace del árbol de
accesibilidad, que es exactamente lo único que este componente no puede
permitirse; su propia cabecera ya razona eso mismo para display:none, visibility
y el tabindex negativo. Firmados con /* literal: */, la válvula de
recipe-contract §3: salen del ratio como ausencia ESCRITA, no como deuda. Misma
clase que text-blur y text-scramble.
LOS OTROS 5 KNOBS YA ESTABAN BIEN, Y LAS DOS AUSENCIAS SON DOCTRINA
La tipografía se HEREDA (no hay font-* declarado; acuñarla fijaría el default,
D-TH.5) y el anillo de foco es del SISTEMA (--focus-ring-*, recipe-contract §2).
El `background:` en shorthand no mata ninguna capa de estado: su parte lleva
archetype 'provider', que no recibe velo.
EL INSTRUMENTO LEÍA 0 DE 8 — LA OCTAVA CLASE DE PUNTO CIEGO
Toda su superficie existe SÓLO bajo :focus: sr-only mientras no lo tiene, píldora
cuando sí. El guard no lo enfocaba nunca, y el blur que hace tras abrir lo habría
deshecho igual. Clicarlo tampoco vale: su handler manda el foco a la región de
destino, así que la píldora se va por el camino de entrada.
Nace `openBy: 'focus'`, y con él `openingIsFragile` — el conjunto de aperturas
que el blur y el aparcado del puntero NO deben deshacer, hasta hoy sólo 'hover'.
Es aditivo: las cuatro condiciones que decían `openBy !== 'hover'` pasan a
consultarlo y ninguna configuración existente cambia de rama. Re-verificado sobre
tres del ledger: dialog 37/44 (la cifra exacta de su commit), tooltip 15/23,
context-menu 27/28 — cero regresiones.
ARTEFACTOS
Sonda antes/después → 0 diffs, 0 nodos perdidos (192 valores, 7 estados) · estado
ENFOCADO medido aparte con un script propio (la sonda estándar mide reposo,
tallas, abierto y hover: nunca foco) → 52 valores, 0 diffs · capturas 2×
idénticas byte a byte · R-5.4 8/8, exit 0 · censo --only 71 % → 100 % (knobs 8 →
6: los dos literales pasan a la clase excepción, fuera del ratio) ·
component:audit PASS · eidos-lint 2 morfo-backed / 0 invalid · rtl:check 0 ·
docs:check 0 · suite eidos 439/440 (el rojo conocido, skin-media-player) ·
npm run check COMPLETED sin errores en ficheros tocados · pestaña Tokens añadida
a su demo y VERIFICADA en el navegador: 8 filas, 0 errores de consola.
LO QUE NO ENTRA Y POR QUÉ
docs/audit/theming/README.md es un agregado global y otra sesión tiene `form` en
vuelo en el mismo árbol; se regenerará con su commit. Por lo mismo, de
theming-sentinel.ts sólo entran mis hunks (verificado con git diff --cached).
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>