Canon nuevo, eidos-native (1 parte, 0 eventos): la pieza de WCAG 2.4.1 que
`site-header` difirió a los shells hace tres semanas y que `app-shell` (F3.1)
necesita para existir. Nace de su fase 0, decisión Q4 firmada.
Lo que decide, y por qué:
- **Las palabras son suyas.** «Ir al contenido principal» no es copy: es el
nombre de un contrato. La regla del tier (B-7 / D-BLK.5) apunta a esta puerta
— si un string parece inevitable, lo posee el componente canónico vía
`texts:` + langs. Por eso el prop es `region`, no `label`, y el vocabulario
es la lista de landmarks de la APG. Cada clave es una FRASE ENTERA: en
castellano el artículo se contrae con la región, así que un «Ir a» +
sustantivo saldría mal en media catálogo.
- **`region` no se estampa**: elige un texto y ninguna capa lo lee. Declararlo
repetiría el error que `Affix` corrigió el 2026-08-15.
- **No compone `Link`**: `Link` es tinta en línea y todo su API describe texto
dentro de un párrafo. Esto es cromo que aparece de la nada, con su geometría
y su suelo; envolverlo sería pisar todos sus props y aun así dejarlos en la
API pública. Los componentes del canon renderizan sus nativos; son los blocks
los que no pueden.
- **El handler mueve el FOCO**, que es lo que el fragmento no hace: un `href`
desplaza la vista y deja el foco en el enlace, y el siguiente Tab vuelve al
cromo que el lector pidió saltar. El destino se hace enfocable sólo mientras
dura el salto. El `href` se queda: es el camino sin JS.
- **Peldaño propio de z (950), el más alto de la escalera estática.** No puede
compartir el de `affix`: un empate lo rompe el orden del DOM y este enlace es
por definición el primer elemento del documento, así que perdería contra
cualquier aviso fijado debajo — el fallo medido en A-95.
Medido con Playwright (el pane del navegador no tiene el foco del SO, así que
`:focus` nunca casa ahí): en reposo 1x1 con clip-path; enfocado `position:
fixed`, z 950, píldora de 181x36 sobre `primary-solid` con tinta blanca y
anillo de foco, igual en claro y en oscuro; el salto deja el foco en
`#demo-main` y el `tabindex` temporal se limpia en el blur; en RTL la píldora
espeja al otro borde (x 338 -> 761) sin una segunda regla.
Y la demo se corrigió a sí misma: decía «Tab desde el botón de abajo» y la
medición enseñó que desde ahí el foco va hacia delante. El botón sube encima
del marco, y de paso salió la otra mitad de la lección — por tabulación NUNCA
se aterriza en el `main`, porque no tiene nada enfocable. Justo por eso el
destino necesita el `tabindex` prestado.
Guards: `component:audit --only skip-link` PASS · `morfo:check` PASS ·
`eidos-lint` 2 selectores morfo-backed, 0 inválidos · `docs:check` 0/0 ·
`svelte-check` 72, ninguno aquí.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>