# AUDIT — tier `blocks`: registro de hallazgos (ledger) > **Fuente única del estado de calidad del tier desde 2026-08-05.** > Sustituye a la clasificación de > [`AUDIT-blocks-2026-08-01.md`](./AUDIT-blocks-2026-08-01.md), que se conserva > intacta: sus **reclamaciones, evidencias y sugerencias son válidas** y esta tabla > las indexa. Lo que no sirve de aquel documento es el veredicto. ## Por qué existe este fichero En el documento del 2026-08-01 los campos «Veredicto» están **desemparejados de su hallazgo**: el de `cta`/`Container` lleva un veredicto sobre `Card`/`BoxProps`; el del contraste de `hero`, uno sobre el drawer de `site-header`; el del import de `$libs/forms`, uno sobre `--_link-palette-text`. La lista de refutados arrastra el mismo desplazamiento: su primera justificación refuta el hallazgo de `feature-grid` que la sección de confirmados declara CONFIRMADO. La reclamación, la evidencia y la sugerencia sí casan entre sí dentro de cada entrada. Lo que viajó movido es el veredicto — y con él la etiqueta CONFIRMADO/REFUTADO. La causa más probable es un **join por posición** entre el array de veredictos y el de hallazgos: un agente caído desplaza la lista entera. El journal del workflow era de sesión y ya no existe, así que el emparejamiento original no se puede recuperar: **hay que volver a medir**. ## Las reglas de este registro 1. **Toda escritura es por `id`.** Ningún proceso vuelve a unir dos listas por posición. Un verificador que no devuelve su `id` no escribe fila. 2. **Las 90 filas parten de `PENDIENTE`**, incluidas las 29 «confirmadas» y las 11 «refutadas»: su etiqueta viajó con el veredicto movido y no es evidencia de nada. 3. **El `id` es re-derivable**: es el orden documental del fichero del 2026-08-01 (`A-01`…`A-29` confirmados · `A-30`…`A-79` sin verificar · `A-80`…`A-90` refutados). Se extrae mecánicamente; no se renumera nunca. 4. **El veredicto se escribe con su mecanismo y su evidencia**, en la ficha de abajo. Un `REFUTADO` sin motivo escrito es exactamente el fallo que estamos arreglando. Estados: `PENDIENTE` · `CONFIRMADO` · `REFUTADO` · `DATO` (cierto y sin defecto) · `ARREGLADO` · `DIFERIDO` (confirmado, disposición firmada, no se toca ahora). Columna **or.** = de qué sección del documento viejo salió la fila (`C` confirmado · `SV` sin verificar · `R` refutado). Es trazabilidad, **no** un veredicto. ## Índice de hallazgos | id | block | dim | sev | or. | afirmación | ancla | estado | | ----- | ---------------------------------------- | ---------- | ----- | ----- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------- | ---------- | | A-01 | `cta` | doctrina | ALTA | C | La disposición «Panel a sangre → app-land, la app pone `container="full"`» es falsa: `Container` siempre aplica padding inline y el block no ofrece… | `src/uix/blocks/cta/README.md` | ARREGLADO | | A-02 | `hero` | percepcion | ALTA | C | En `layout="background"` la CTA secundaria mide 1.78:1 contra su fondo — muy por debajo de AA — y el token que la demo escribe a mano para arreglarlo… | `web/routes/blocks/hero/HeroSite.svelte` | ARREGLADO | | A-03 | `feature-grid` | doctrina | ALTA | C | El README no declara landmark ni cómo ajustar la jerarquía de encabezados, que es obligación explícita de B-8 y de la plantilla; sus dos hermanos sí… | `src/uix/blocks/feature-grid/README.md` | ARREGLADO | | A-04 | `contact` | doctrina | ALTA | C | `CONTACT_ACTION` («la acción nombra lo que está pasando», state.ts:86) solo se cumple a la vista: el nombre accesible del botón es siempre «Enviar»,… | `src/uix/blocks/contact/state.ts` | ARREGLADO | | A-05 | `contact` | doctrina | ALTA | C | El block importa de `$libs/forms`, que no está en la lista de importaciones permitidas de la frontera dura 1 («may import `$uix`, `$adom` and the… | `src/uix/blocks/contact/contact.svelte` | ARREGLADO | | A-06 | `site-footer` | percepcion | ALTA | C | El éxito del alta en la banda de sign-up del footer es PERCEPTIVAMENTE NULO: no suena, no estampa y no emite — el único momento que merecía… | `web/routes/blocks/site-footer/SiteFooterSite.svelte:105` | ARREGLADO | | A-07 | `faq` | doctrina | MEDIA | C | La sección «Coordination» declara UNA sola costura (`value`) pero el block también expone `disabled`: una pregunta que no se puede abrir, sin nada… | `src/uix/blocks/faq/types.ts` | ARREGLADO | | A-08 | `cta` | doctrina | MEDIA | C | La medida de la descripción se construye a mano con un valor fuera de escala (`60ch`) en vez de usar el vocabulario de medida que el canon ya expone… | `src/uix/blocks/cta/cta.svelte` | ARREGLADO | | A-09 | `stats-band` | doctrina | MEDIA | C | En modo `live` el anuncio a lectores de pantalla puede llevar la cifra CRUDA mientras en pantalla se ve la formateada por locale: el block pasa… | `src/uix/blocks/stats-band/stats-band-value.svelte` | CONFIRMADO | | A-10 | `site-header` | doctrina | MEDIA | C | Si el cajón está abierto y el viewport cruza el `breakpoint`, el propio block esconde cajón + overlay + trigger con `display:none`, pero el Drawer… | `src/uix/blocks/site-header/site-header.svelte` | ARREGLADO | | A-11 | `site-header` | doctrina | MEDIA | C | Las demos de site-header y hero redeclaran a mano uniones que ya existen en el canon, y ya han derivado: el `xxl` de `ContainerSize` es inalcanzable… | `web/routes/blocks/site-header/SiteHeaderSite.svelte` | CONFIRMADO | | A-12 | `feature-grid` | doctrina | MEDIA | C | El tipo y la demo describen el chip del icono como `Surface` soft; el código lo pinta solid por defecto, y el README dice solid. Dos de las cuatro… | `src/uix/blocks/feature-grid/types.ts` | ARREGLADO | | A-13 | `testimonials` | percepcion | MEDIA | C | Mismo defecto: `height="100%"` sobre `Card` es inerte, así que la tarjeta no rellena la altura de fila y las caras NO se alinean cuando las citas… | `src/uix/blocks/testimonials/testimonials-item.svelte` | ARREGLADO | | A-14 | `feature-split · pricing · testimonials` | doctrina | MEDIA | C | Ninguno de los tres README declara el landmark ni la jerarquía de encabezados, que es la segunda mitad literal de B-8 y el único apartado a11y propio… | `src/uix/blocks/pricing/README.md` | ARREGLADO | | A-15 | `contact` | doctrina | MEDIA | C | La frase del estado no llega a la tecnología de apoyo: el submit va `disabled` nativo (no es alcanzable con teclado, así que un lector de pantalla… | `src/uix/blocks/contact/contact-reason.svelte` | ARREGLADO | | A-16 | `contact` | doctrina | MEDIA | C | Deriva README↔código: el README afirma en negrita que el block «no valida y no pinta los errores de los campos», y `Contact.Fields` hace exactamente… | `src/uix/blocks/contact/README.md` | ARREGLADO | | A-17 | `content-section` | doctrina | MEDIA | C | La pestaña API de la demo (superficie obligatoria por B-9) publica un default falso para `ContentSection.Media`: dice `width` «def. wide» cuando el… | `web/routes/blocks/content-section/+page.svelte` | ARREGLADO | | A-18 | `team` | doctrina | MEDIA | C | Comentario nuevo en castellano dentro de la fuente de un block, contra la regla del proyecto (comentarios en inglés; los castellanos que quedan son… | `src/uix/blocks/team/team-member-links.svelte` | ARREGLADO | | A-19 | `faq` | percepcion | BAJA | C | El typedoc de `Faq.Header` promete un Box «centered» que el propio root desmiente: la raíz apila con `align="stretch"`, así que la cabecera queda… | `src/uix/blocks/faq/types.ts` | ARREGLADO | | A-20 | `faq` | doctrina | BAJA | C | B-8 incumplido: el block emite un encabezado por pregunta con `aria-level` FIJO en 3, no ofrece forma de ajustarlo y el README no documenta ni el… | `src/uix/blocks/faq/README.md` | ARREGLADO | | A-21 | `stats-band` | doctrina | BAJA | C | El typedoc de `countOptions` anuncia una opción `style` que `CountUp` NO acepta — pasarla es error de tipos. | `src/uix/blocks/stats-band/types.ts` | ARREGLADO | | A-22 | `stats-band` | doctrina | BAJA | C | El README no documenta landmark ni jerarquía de encabezados (B-8); el dato solo vive en la pestaña A11y de la demo. | `src/uix/blocks/stats-band/README.md` | ARREGLADO | | A-23 | `pricing` | doctrina | BAJA | C | Pulsar el segmento de periodo YA ACTIVO devuelve la sección entera al periodo contrario: el block posee el estado y su propio control lo mueve a un… | `src/uix/blocks/pricing/pricing-switch.svelte` | ARREGLADO | | A-24 | `pricing` | percepcion | BAJA | C | Las tarjetas de plan NO son de igual alto y los CTA NO se alinean: `height="100%"` sobre `Card` es un atributo HTML inerte, no una prop. El README y… | `src/uix/blocks/pricing/pricing-plan.svelte` | ARREGLADO | | A-25 | `pricing` | doctrina | BAJA | C | La demo documenta una elevación que el código se niega explícitamente a hacer y que el propio README lista como brecha abierta del canon. | `web/routes/blocks/pricing/+page.svelte` | ARREGLADO | | A-26 | `pricing` | doctrina | BAJA | C | El block exige a la app tres cadenas obligatorias para nombrar el ÚNICO estado que coordina, y justifica esa exigencia citando una lectura de B-7 que… | `src/uix/blocks/pricing/pricing-switch.svelte` | REFUTADO | | A-27 | `testimonials` | doctrina | BAJA | C | El tipo público documenta un default de `variant` que el componente no usa. | `src/uix/blocks/testimonials/types.ts` | ARREGLADO | | A-28 | `testimonials` | doctrina | BAJA | C | `.Items` tipa toda la superficie de `AutoGrid` pero descarta en silencio parte de ella: el spread del consumidor va ANTES de props fijadas a mano. | `src/uix/blocks/testimonials/testimonials-items.svelte` | ARREGLADO | | A-29 | `pricing · testimonials` | percepcion | BAJA | C | Las vistas de 375/768 de estas dos demos no heredan NINGUNO de los ejes de la sección: siempre salen en claro, español y ltr — justo la rama estrecha… | `web/routes/blocks/pricing/+page.svelte` | ARREGLADO | | A-30 | `newsletter` | doctrina | ALTA | SV | UNA sola pulsación de Enter dentro del campo de correo emite DOS `commit-submit` con intents contradictorios (neutral y fulfill) y suenan DOS earcons… | `src/uix/blocks/newsletter/newsletter.svelte:105` | ARREGLADO | | A-31 | `newsletter` | doctrina | ALTA | SV | `signal-warn-invalid` está declarado `persistence:'untilFix'` pero NUNCA se limpia al arreglar: corregido el correo, el form sigue estampado en… | `src/uix/soma/components/form/form-provider.svelte.ts:129` | REFUTADO | | A-32 | `site-header` | percepcion | ALTA | SV | El pack de sema de NavigationMenu NUNCA casa: su regla de cascada apunta a la parte `item` y el estampado cae siempre en el `trigger`, asi que el nav… | `src/uix/sema/components/navigation-menu.ts` | ARREGLADO | | A-33 | `site-header` | percepcion | ALTA | SV | El nav del header emite `commit-select` + `affirm` — con earcon audible — por el simple HOVER del puntero, sin un solo clic: un barrido del raton… | `src/uix/soma/components/navigation-menu/navigation-menu-provider.svelte.ts` | ARREGLADO | | A-34 | `site-header` | percepcion | ALTA | SV | Inversion de dominancia atencional: pasar el raton por encima del nav suena mas largo y mas fuerte que pulsar el CTA principal del block, y con… | `web/routes/blocks/site-header/SiteHeaderSite.svelte` | ARREGLADO | | A-35 | `site-header` | percepcion | ALTA | SV | MUDOS: 4 de los 7 elementos interactivos visibles del header no emiten NADA, y son precisamente los que navegan — el brand «Acme», los… | `web/routes/blocks/site-header/SiteHeaderSite.svelte` | ARREGLADO | | A-36 | `site-header` | percepcion | ALTA | SV | Carrera de estampado en el trigger del drawer: `contact-activate` vive 3 ms antes de que `emerge.open` lo pise en el MISMO nodo, asi que el feedback… | `src/uix/blocks/site-header/site-header.svelte` | ARREGLADO | | A-37 | `banner` | doctrina | ALTA | SV | El block cablea el descarte con `variant="ghost"` y sin tinta, así que la ✕ se pinta SIEMPRE con el ink `primary` del Button sobre el lienzo que el… | `src/uix/blocks/banner/banner.svelte` | ARREGLADO | | A-38 | `banner` | percepcion | ALTA | SV | La pestaña «Notas» afirma que la acción en línea HEREDA la tinta de contraste de la tira «en todos los roles y en los dos modos». La medición lo… | `web/routes/blocks/banner/+page.svelte` | ARREGLADO | | A-39 | `newsletter` | doctrina | ALTA | SV | El ejemplo de uso de la puerta de entrada del block anuncia `onValidSubmit` — exactamente el prop que el block decidió NO exponer porque es un no-op… | `src/uix/blocks/newsletter/index.ts` | ARREGLADO | | A-40 | `contact` | percepcion | ALTA | SV | El clic sobre «Enviar mensaje» —la accion principal de la seccion— no estampa NINGUN evento sema en el momento del gesto; la unica emision llega 915… | `src/uix/blocks/contact/contact-submit.svelte` | ARREGLADO | | A-41 | `contact` | percepcion | ALTA | SV | Un solo Enter dentro de un campo estampa DOS commits con intents distintos; y cuando el envio esta bloqueado estampa un commit que no commitea nada. | `src/uix/morfo/components/field.ts` | ARREGLADO | | A-42 | `contact` | percepcion | ALTA | SV | El nombre accesible del boton de envio queda congelado en «Enviar» en los cinco estados: las palabras de estado que el block posee por B-7 nunca… | `src/uix/blocks/contact/contact-submit.svelte` | ARREGLADO | | A-43 | `contact` | percepcion | ALTA | SV | `Contact.Reason` —la frase que el block existe para que ningun estado bloqueado quede mudo— no es region viva ni esta enlazada al control: cambia sin… | `src/uix/blocks/contact/contact-reason.svelte` | ARREGLADO | | A-44 | `contact` | doctrina | ALTA | SV | Con los tres campos rellenos y el correo mal formado, la seccion afirma «Completa todos los campos para enviar.» y no marca el campo: el camino de… | `src/uix/blocks/contact/contact-fields.svelte` | ARREGLADO | | A-45 | `pricing` | percepcion | ALTA | SV | Un solo clic sobre el periodo YA activo VACIA el segmented control: la seccion queda sin ningun periodo marcado mientras los precios siguen siendo… | `src/uix/blocks/pricing/pricing-switch.svelte` | ARREGLADO | | A-46 | `cta` | percepcion | ALTA | SV | La accion secundaria del cluster («Hablar con ventas») es MUDA: no emite ningun evento sema, y en reposo es tipograficamente identica al parrafo de… | `web/routes/blocks/cta/CtaSite.svelte:72` | REFUTADO | | A-47 | `cta` | percepcion | ALTA | SV | El anillo de foco es practicamente invisible sobre el panel solido: los DOS unicos elementos interactivos del block quedan sin indicador de foco por… | `src/uix/blocks/cta/cta.svelte:111` | CONFIRMADO | | A-48 | `banner` | percepcion | MEDIA | SV | El descarte —el ÚNICO gesto que el block cablea— sólo expresa `contact-activate` (una pulsación); la desaparición de la tira no la expresa nadie, y… | `src/uix/blocks/banner/banner.svelte:59` | CONFIRMADO | | A-49 | `banner` | percepcion | MEDIA | SV | La única llamada a la acción del banner («Ver qué cambia →») es completamente muda: ni estampa ni suena, en clic, en Enter ni en hover. | `web/routes/blocks/banner/BannerSite.svelte:56` | REFUTADO | | A-50 | `site-footer` | percepcion | MEDIA | SV | 18 de los 24 elementos interactivos del footer son `Link` y TODOS son mudos: el block cuya función entera es navegar no tiene canal perceptivo para… | `src/uix/blocks/site-footer/site-footer.svelte:77` | REFUTADO | | A-51 | `newsletter` | doctrina | MEDIA | SV | La acción principal del block no tiene `contact` propio: pulsar «Suscribirme» no estampa NADA sobre el control — el único estampado es el `commit`… | `src/uix/morfo/components/form.ts:90` | ARREGLADO | | A-52 | `site-header` | percepcion | MEDIA | SV | La costura `mobileOpen` cierra el drawer en SILENCIO: el unico camino de cierre que el block documenta como suyo es el unico que no se anuncia,… | `src/uix/blocks/site-header/site-header.svelte` | REFUTADO | | A-53 | `hero` | percepcion | MEDIA | SV | Las dos acciones del hero viven en el mismo `Group`, con la misma jerarquia de par primario/secundario, y responden de forma opuesta: el CTA emite… | `web/routes/blocks/hero/HeroSite.svelte` | CONFIRMADO | | A-54 | `site-header` | doctrina | MEDIA | SV | El morfo de `NavigationMenu` carga el intent evaluable en el MARCO: declara un unico evento, `commit-select` + `affirm`, para lo que solo despliega… | `src/uix/morfo/components/navigation-menu.ts` | ARREGLADO | | A-55 | `banner` | doctrina | MEDIA | SV | «full-bleed por fuera, en columna por dentro» deja de ser cierto en cuanto se pasa `onDismiss`: el `margin-inline-start:auto` del Close es un TERCER… | `src/uix/blocks/banner/banner.svelte` | CONFIRMADO | | A-56 | `banner` | doctrina | MEDIA | SV | B-9 exige el block A SANGRE en la página de demo, «nunca dentro de un marco con padding». En la galería el block se pinta dentro del raíl del… | `web/routes/blocks/_lib/BlockDemo.svelte` | REFUTADO | | A-57 | `newsletter` | percepcion | MEDIA | SV | Con `panel={false}` la nota de privacidad se pinta con MÁS fuerza que la línea de apoyo: la descripción cae a `muted` y la nota se queda con la tinta… | `src/uix/blocks/newsletter/newsletter.svelte` | ARREGLADO | | A-58 | `site-footer` | doctrina | MEDIA | SV | La demo construye tintas a mano en app-land (`color="var(--color-content-*)"`) y son INERTES: con `variant="subtle"` el recipe del Link fuerza… | `web/routes/blocks/site-footer/SiteFooterSite.svelte` | ARREGLADO | | A-59 | `site-footer` | percepcion | MEDIA | SV | El título del grupo se pinta MÁS PEQUEÑO que los enlaces que nombra y con la misma tinta: la única señal de jerarquía que queda es el peso. | `src/uix/blocks/site-footer/site-footer-column-title.svelte` | ARREGLADO | | A-60 | `site-footer` | percepcion | MEDIA | SV | «Tantas columnas como caben, el mismo código para 2 o para 5 grupos» describe el código, no el resultado: `AutoGrid` usa `auto-fill`, que crea las… | `src/uix/blocks/site-footer/site-footer.svelte` | CONFIRMADO | | A-61 | `contact` | percepcion | MEDIA | SV | El submit bloqueado sale del orden de tabulacion, asi que quien navega con teclado nunca llega al control ni se topa con la frase que lo explica. | `src/uix/blocks/contact/contact-submit.svelte` | CONFIRMADO | | A-62 | `team` | percepcion | MEDIA | SV | Los 12 IconButton que el block pone en escena estampan contact-activate y no hacen absolutamente nada: el contacto inicia y nada resuelve, doce veces. | `web/routes/blocks/team/TeamSite.svelte` | CONFIRMADO | | A-63 | `contact` | percepcion | MEDIA | SV | El `Link` «hola@vicen.dev» dentro de `Contact.Detail` es mudo: es el unico elemento interactivo de la columna de datos y no emite nada. | `web/routes/blocks/contact/ContactSite.svelte` | REFUTADO | | A-64 | `pricing` | percepcion | MEDIA | SV | Ese mismo clic muerto emite `commit-toggle` + intent `neutral`: el sistema anuncia que algo quedo fijado cuando la seccion no cambio de estado (los… | `src/uix/blocks/pricing/pricing-switch.svelte` | ARREGLADO | | A-65 | `pricing` | percepcion | MEDIA | SV | Un solo gesto sobre el CTA de un plan produce DOS eventos sema sobre el MISMO elemento a 1 ms: el `commit-select` de la app pisa el… | `web/routes/blocks/pricing/PricingSite.svelte` | CONFIRMADO | | A-66 | `pricing` | percepcion | MEDIA | SV | El plan destacado se grada `fulfill` en lo visual pero su consecuencia suena `affirm`, exactamente igual que los otros dos planes: la lectura… | `web/routes/blocks/pricing/PricingSite.svelte` | REFUTADO | | A-67 | `faq` | percepcion | MEDIA | SV | Un solo clic que cambia de pregunta dispara DOS earcons emerge simultaneos y sin atenuar (collapse descendente + expand ascendente): un gesto, dos… | `src/uix/blocks/faq/faq-list.svelte:14` | CONFIRMADO | | A-68 | `stats-band` | percepcion | MEDIA | SV | Los contadores corren detras de `opacity: 0` — dos observadores distintos (CountUp threshold 0 · Motion 0.1/-10%) y un IO no mira la opacidad… | `src/uix/blocks/stats-band/stats-band-value.svelte:20` | ARREGLADO | | A-69 | `stats-band` | percepcion | MEDIA | SV | Las cuatro cifras no aterrizan nunca juntas y `duration` no significa segundos: con el valor por defecto (2), la cifra grande tarda 7,9 s en… | `src/uix/eidos/components/count-up/count-up.svelte:169` | ARREGLADO | | A-70 | `feature-grid` | percepcion | BAJA | SV | DATO, NO DEFECTO: `feature-grid` no tiene ningun elemento interactivo — nada que emitir y nada que auditar perceptivamente en el. | `src/uix/blocks/feature-grid/feature-grid.svelte` | REFUTADO | | A-71 | `site-footer` | doctrina | BAJA | SV | La página de demo pinta el block ANTES de su propio `h1`, así que el documento arranca en h2/h3 y el h1 llega el último — jerarquía de encabezados… | `web/routes/blocks/_lib/BlockDemo.svelte` | CONFIRMADO | | A-72 | `contact` | percepcion | BAJA | SV | La ventana de vuelo (900 ms) no tiene canal perceptivo propio: ningun `sustain.*`, ningun spinner — solo el cambio de etiqueta visible. | `src/uix/blocks/contact/contact-submit.svelte` | REFUTADO | | A-73 | `content-section` | percepcion | BAJA | SV | DATO, no defecto: el block no pone NINGUN elemento interactivo — cero en toda su region — y nada en el estampa sema. | `web/routes/blocks/content-section/ContentSectionSite.svelte` | DATO | | A-74 | `feature-split` | percepcion | BAJA | SV | Los 3 unicos elementos interactivos del block emiten su contact correctamente, pero no llevan a ningun sitio: los href apuntan a fragmentos que no… | `web/routes/blocks/feature-split/FeatureSplitSite.svelte` | CONFIRMADO | | A-75 | `pricing` | percepcion | BAJA | SV | Volver a pulsar el CTA de un plan YA elegido re-emite un `commit-select`+`affirm` identico: no hay diferencia perceptiva entre «acabas de elegirlo» y… | `web/routes/blocks/pricing/PricingSite.svelte` | CONFIRMADO | | A-76 | `testimonials` | percepcion | BAJA | SV | DATO, no defecto: el block no pone NINGUN elemento interactivo — no hay nada que pulsar y, por tanto, nada mudo; ademas sus Card no fingen afordancia. | `src/uix/blocks/testimonials/testimonials.svelte` | DATO | | A-77 | `stats-band` | percepcion | BAJA | SV | DATO, no defecto: el block no pone NINGUN elemento interactivo — no hay nada que pulsar y por tanto nada que estampar. Toda su superficie perceptiva… | `src/uix/blocks/stats-band/stats-band.svelte` | DATO | | A-78 | `stats-band` | doctrina | BAJA | SV | El
del block sale sin nombre accesible Y sin ningun encabezado dentro, asi que no es una region navegable ni por landmarks ni por… | `src/uix/blocks/stats-band/stats-band.svelte:26` | ARREGLADO | | A-79 | `site-footer` | percepcion | SOSP | SV | Cambiar de idioma en el selector del footer cambia el régimen de toda la página (langs, formatos, dirección) pero suena y se estampa exactamente… | `web/routes/blocks/site-footer/SiteFooterSite.svelte:164` | CONFIRMADO | | A-80 | `faq` | — | — | R | El block reimplementa la autogeneración del `value` que el canon ya hace, y README+index la venden como «la única conveniencia» de `.Item`. | — | ARREGLADO | | A-81 | `cta` | — | — | R | El ejemplo del `index.ts` anuncia `variant="soft"`, una prop que se CORTÓ a propósito: copiarlo es un error de tipos. | — | ARREGLADO | | A-82 | `cta` | — | — | R | La demo redeclara en app-land la unión que el block EXPORTA (`CtaLayout`), duplicando vocabulario. | — | ARREGLADO | | A-83 | `hero` | — | — | R | El block deriva el estado «la copia va sobre sólido» y lo aplica solo a dos de sus piezas, sin publicarlo: cada consumidor lo re-deriva en el punto… | — | ARREGLADO | | A-84 | `feature-grid` | — | — | R | `align` está aplicado a medias: el block declara la prop y solo mueve la caja de la cabecera; el propio tipo instruye al app a repetir la alineación… | — | ARREGLADO | | A-85 | `site-header` | — | — | R | El `aria-label` que la demo escribe para el trigger del cajón nunca llega al DOM: el lector de pantalla anuncia la etiqueta genérica del canon. | — | ARREGLADO | | A-86 | `pricing` | — | — | R | El ejemplo de uso de la superficie pública del block no compila: omite dos props obligatorias. | — | ARREGLADO | | A-87 | `contact` | — | — | R | El propio gating del block deja INALCANZABLE el error por campo: con `progressive` los errores solo se escriben tras un envío inválido, y el envío… | — | ARREGLADO | | A-88 | `team` | — | — | R | `marginTop: 'auto'` no ancla nada: el ítem de la retícula es el `
` del `Motion` (block, estirado), y el `Stack` de dentro mide su contenido, así… | — | ARREGLADO | | A-89 | `contact` | — | — | R | `sent` es un estado TERMINAL del que el block no sabe salir, y lo entra él solo: tras un envío correcto el formulario sigue editable pero la sección… | — | REFUTADO | | A-90 | `contact` | — | — | R | Vocabulario paralelo: `ContactVerification` re-declara palabra por palabra el `ProofOfHumanStatus` del canon, y lo hace señalando a ese mismo… | — | ARREGLADO | | A-91 | `banner` | doctrina | BAJA | F7 | El block re-expone el eje `intent` de `Banner` —que el canon declara fuera del sistema de color abierto, en su propio typedoc— sin registrarlo en sus Gaps… | `src/uix/blocks/banner/README.md` | ARREGLADO | | A-92 | `pricing` | doctrina | BAJA | F7 | Una restricción estructural del modelo de cascada (sólo los presets CSS participan del stagger) vive en un comentario del block y falta en §D.13 de la doctrina… | `docs/theming/motion.md` | CONFIRMADO | | A-93 | `stats-band` | doctrina | MEDIA | F7 | `Motion` no expone su momento «visto» (privado + `data-animation-pending`), así que un block no puede sincronizarse con el revelado sin violar B-6… | `src/uix/eidos/components/motion/motion.svelte` | ARREGLADO | | A-94 | `feature-grid · team · testimonials` | doctrina | MEDIA | F7 | Los tres declaran `= AutoGridProps` y ponen `{...rest}` antes de props fijadas: el consumidor tipa `align`/`width` y se descartan en silencio (A-28 ×3)… | `src/uix/blocks/testimonials/types.ts` | ARREGLADO | | A-95 | `banner` | doctrina | MEDIA | F7 | Con `affix="top"` la tira fijada tapa la cabecera pegada y la navegación queda inalcanzable; la pieza que falta es la que posee las alturas de página (`app-shell`)… | `web/routes/blocks/banner/BannerSite.svelte` | ARREGLADO | | A-96 | `banner` | doctrina | BAJA | F7 | `affixOffset` es prop público sin control vivo en la demo, contra la regla «cada prop público, un control»… | `web/routes/blocks/banner/+page.svelte` | CONFIRMADO | | A-97 | `feature-grid + 6 blocks` | percepcion | MEDIA | F7 | El texto `color="muted"` mide 3,70:1 en claro — bajo AA de cuerpo — en 8 sitios de 7 blocks; el hallazgo estaba enterrado en la ficha de A-70, que es REFUTADO… | `src/uix/blocks/feature-grid/feature-grid-item-text.svelte` | REFUTADO | | A-98 | `hero` | percepcion | MEDIA | F7 | Las acciones no apilan en móvil: `Group` es row/nowrap y a 375px los dos botones ocupan 315 de 327px. Síntoma de [A-99]; cae sin tocar el block… | `src/uix/blocks/hero/hero.svelte` | ARREGLADO | | A-99 | `Group` (canon) | doctrina | MEDIA | F7 | `Group` no aplica NINGUNO de los dos defaults de action row que su README promete (`wrap: wrap` y `align: center`): nunca se los pasa a `Flex`, y el recipe no puede suplirlos… | `src/uix/eidos/components/group/group.svelte` | ARREGLADO | | A-100 | `cta` | percepcion | ALTA | F5-bg | Dentro del panel sólido, las dos tramas TINTADAS hunden el titular blanco bajo AA: `glow` 5,18 → 3,06:1 y `mesh` → 2,27:1. Las de línea oscurecen y suben la copia a 14,35:1 | `src/uix/blocks/cta/cta.svelte` | ARREGLADO | | A-101 | `cta` | doctrina | MEDIA | F5-bg | Un `glow` tintado con el acento del propio panel resuelve EXACTAMENTE al fondo del panel: el halo es invisible por construcción. El acento debe viajar como tinta on-solid | `src/uix/blocks/cta/cta.svelte` | ARREGLADO | | A-102 | `stats-band` | percepcion | BAJA | F5-bg | Sin decoración de sección (columna B: «reveal + Backdrop»); el reveal ya estaba, el fondo no | `src/uix/blocks/stats-band/stats-band.svelte` | ARREGLADO | | A-103 | `testimonials` | percepcion | BAJA | F5-bg | Sin decoración de sección; el halo detrás de las citas es el acabado que las referencias pintan a mano | `src/uix/blocks/testimonials/testimonials.svelte` | ARREGLADO | | A-104 | `feature-split` | percepcion | BAJA | F5-bg | Columna B pedía «`Backdrop` alterno» por fila; se resuelve en la SECCIÓN — una banda por fila obligaría a cada `Row` a poseer estado de alternancia | `src/uix/blocks/feature-split/feature-split.svelte` | ARREGLADO | | A-105 | `site-footer + banner` | doctrina | BAJA | F5-bg | Ambos ganan la capacidad de decoración APAGADA por defecto: la columna B no pide acabado en ninguno, y encenderlo sería inventar un aspecto que nadie pidió | `src/uix/blocks/site-footer/site-footer.svelte` | ARREGLADO | | A-106 | `Button` (canon) | doctrina | MEDIA | F2b-D | `Button` acepta `ref` en su tipo y NUNCA lo reenvía: `bind:ref` tipa bien y no ata nada. Forma exacta de [A-94] — un tipo que promete una superficie que descarta | `src/uix/eidos/components/button/button.svelte` | CONFIRMADO | | A-107 | `Switch` (canon) | doctrina | BAJA | F2b-D | El morfo declara dos partes (`provider` + `thumb`) y ninguna es etiqueta: la etiqueta visible es hermana, no es diana de clic y sólo se ata por `aria-labelledby` | `src/uix/morfo/components/switch.ts` | CONFIRMADO | | A-108 | `Dialog` (canon) | doctrina | MEDIA | F2b-D | Al cerrar devuelve el foco al nodo que lo tenía al abrir; si ese disparador se desmontó, acaba en el `body` — y la trampa sigue armada un frame más | `src/uix/soma/components/dialog/dialog-provider.svelte.ts` | CONFIRMADO | | A-109 | `Banner` (canon) + `banner` | doctrina | MEDIA | F2b-D | DOS landmarks `banner` en toda página con cabecera: el canon estampa `role="banner"` DESPUÉS de los rest props, así que nombrar ambos es lo único que queda | `src/uix/eidos/components/banner/banner.svelte` | ARREGLADO | | A-110 | `feature-split` | doctrina | MEDIA | F2b-D | Único block de sección sin parte `.Header`: sus filas emiten `h2`, así que en una página compuesta la sección no tiene nombre y aporta tres `h2` hermanos | `src/uix/blocks/feature-split/types.ts` | ARREGLADO | | A-111 | `NavigationMenu` (canon) | doctrina | ALTA | F3.1 | Su landmark `