You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
svelte-kit-vice/src/uix/eidos/components/form/form.css

222 lines
7.6 KiB

[data-form] {
--_form-gap: var(--form-gap-md);
--_form-padding: 0;
--_form-border: transparent;
--_form-bg: transparent;
--_form-shadow: none;
--_form-action-height: var(--form-action-height-md);
feat(audit): component re-audit + fixes P0–P5 (P4 complete, P5 in progress) Re-audit of the whole component catalog at pilot depth (91 fichas + the checkpoint verdicts in docs/audit/components/) and the executed fix packages. - P0–P3: doctrine (sema participation, CANON §3 intent, component-guide §5 + API naming, §32 outline), guards (morfo-vocabulary-check S10/S11d, component-audit A-3.1/A-1.4/S9, eidos-lint classHooks), morfo contracts (role=application removed ×4, aria-selected off the Day, drp translationRef, field data-state prune, pin-input commit-set, media-player renames), 13 new sema packs + 12 morfos family-default → pack. - P4 (N1–N10) COMPLETE: selectionMode (select/combobox/toggle-group/calendar); onValueCommit terminal-callback norm (pin-input/search/password/textarea + date/time/color-field add); typed validation reason + onInvalid (tags-input, css-field); index/onIndexChange (carousel); deselectable; openDelay/ groupSkipDelay; allowCustomValue; defaultValue prune. - P5 (in progress): S1 class-hooks codemod (22 hooks → data-attrs across cropper/button/image-picker/toggle/image-adjustments); S5 outline remnant in field.css; depth pass (data-depth=overlay on tooltip/toast/float-panel); touch-rows (--touch-target token, decoupled ::before hit-slop, area-not-visual, 44 AAA). S6 (Field composition) + S8 (calendar-surface) pending. Verification: errors-outside-(alpha|words|palabras|chronos) == 59 (baseline); morfo-vocabulary-check exit 0; eidos-lint class-hooks/invalid 0 on touched components; per-component vitest suites green. Handoff + remaining plan: docs/process/continue-audit-fixes-2026-07.md Excluded (broken by the N1 rename, left broken per user decision, not staged): words/**, palabras/**, chronos, web/routes/alpha/**. Reconciliation pending: the touch-rows ::before for checkbox/switch reverses changelog §37's earlier pseudo-element rejection (WCAG-overlap) that had routed markers to a labeled-row/Field task — flagged for the user in the handoff. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
3 months ago
--_form-action-padding-inline: var(--form-action-padding-inline-md);
--_form-action-font-size: var(--form-action-font-size-md);
display: flex;
flex-direction: column;
gap: var(--_form-gap);
uix(form): temable — 71 % → 86 %, y 24 claves suyas NO PINTAN por una cascada Diez claves nuevas (54 → 64), un literal firmado, veinte adjudicaciones medidas y un hallazgo que espera firma. Diff de computed 0 sobre 832 valores en 7 estados; capturas 2× antes/después. LAS DIEZ IBAN A LOS PRIMITIVOS A PELO El resumen de errores (error-summary-{bg,fg,border}) —es el señalizador de nivel de página y su superficie, su tinta y su borde SON el tono risk—, el acento de formulario inválido (invalid-accent, un privado con UNA sola fuente, no un conmutador), las tres superficies del árbol de AutoFields, las dos del widget y el subrayado a media tinta de los enlaces del resumen (link-underline-fg, el par del -offset que ya existía). ⚠ R-5.3 CAZÓ MI NOMBRE EN EL ACTO: lo acuñé como link-underline-color y la tinta es `fg` (theming §6.7 r7, firmado el 20). Renombrado antes de commitear. El guard de nombres funciona — es el vocabulario DIMENSIONAL el que no cubre (ver badge, hoy mismo). ⚠⚠ VEINTICUATRO CLAVES DEL CONTRATO NO PINTAN, Y ES UNA CASCADA [data-form-submit], [data-form-reset] y los dos botones del array llevan también data-button porque COMPONEN el Button canónico, y [data-button] casa con la MISMA especificidad (0,1,0) pero carga DESPUÉS: gana button.css. Medido propiedad a propiedad sobre el nodo real —altura, padding-inline, tamaño y peso de letra, interlineado, hueco, radio, grosor de borde, el par de transición y la opacidad deshabilitada—: NINGUNA se mueve. Es el defecto que gradient-picker documentó (36 de sus 45 claves) y que emoji-picker encontró hoy en su trigger. Allí la respuesta fue RETIRAR las declaraciones muertas; aquí son 24 claves públicas, y eso es una decisión del autor, no del que ejecuta. Quedan adjudicadas POR PATRÓN (una razón arquitectónica escrita una vez) y anotadas en §13 con la pregunta de fondo, que es la misma de §12.9 con el plano overlay: qué manda, el componente compuesto o la receta que lo compone. Si mandan las recetas, se sube la especificidad y no se retira nada; si mandan los compuestos, hay ~63 claves públicas que retirar en tres componentes. LAS DEMÁS ADJUDICACIONES SON RAMAS QUE LA DEMO NO MONTA El layout grid (forzado alcanza — y ojo: su grid-template-columns sólo CAMBIA si el valor altera el número de columnas; con 90px pasa de una columna de 502px a cuatro de 110,5), el resumen de errores VACÍO (sin <ul> que indentar ni <a> que subrayar) y toda la rama de ARRAY de AutoFields: el modo `auto` de la demo monta group y field, nunca array, item ni widget. Fuera por doctrina: los tres privados del panel son un CONMUTADOR (variante plain contra panel) y los cuatro --_form-action-* leen el forward de paleta THM-2. VERIFICACIÓN Sonda antes/después 0 diffs (832 valores · 7 estados) · R-5.4 22/64 con las 20 + el patrón adjudicados, exit 0 · component:audit PASS (tras el renombrado) · --names 0 desviadas · censo --only 86 % · eidos-lint 36 morfo-backed / 0 invalid / 0 class-hooks · rtl:check 0 · docs:check 0 · suite eidos 439/440 (el rojo conocido) · el ledger sigue en sus 63 hunks de prettier previos. Rama con cuatro sesiones en paralelo: índice construido desde HEAD + sólo mis hunks (base.ts por bloque), verificado con `git diff --cached`. No entra docs/audit/theming/README.md — es un agregado global que ahora mismo mezcla trabajo en vuelo de otras sesiones. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2 months ago
inline-size: 100%; /* literal: identity — a form IS its container's width */
min-inline-size: 0;
padding: var(--_form-padding);
border: var(--form-border-width) solid var(--_form-border);
border-radius: var(--form-radius);
background: var(--_form-bg);
box-shadow: var(--_form-shadow);
refactor(eidos): el catálogo habla un idioma — 269 claves al vocabulario firmado D-TH.6, ejecutada. El slot de tinta pasa a `fg` y el modificador interactivo se pone delante, que es lo que theming §6.7 r7 documentaba sin guard desde que se escribió. Value-preserving: renombra la clave en `recipes/base.ts` y sus 793 referencias en 101 ficheros; no toca un solo valor. claves renombradas 269 en 66 componentes referencias 793 en 101 ficheros censo antes/después 162 recetas · 5.203 knobs · 1.841 públicos (37 %) · 56 sin contrato — IDÉNTICO, como debe ser un rename --names antes/después 269 desviadas → 0 Qué NO entra, y por qué: 47 `{rol}-{slot-de-rol}` canónicas: COLOR_ROLE_SLOTS pone el modificador detrás POR CONSTRUCCIÓN (`primary-solid-hover`) 13 exentas firmadas `--focus-ring-*` es familia del sistema; el color de `aura` es un sustantivo; `stop-color` ES una parte de gradient-builder 47 hovers neutros por VALOR: migran a la capa de estado (§38 + R-4.3), no se renombran — firma 3 6 ocurrencias en historia changelog, errores-toxico, PLAN-affix/background: reescribir un registro fechado lo vuelve mentira El clasificador vive en el censo (`--names`), no en un script suelto, para que el guard R-5.3 consuma la MISMA gramática que el codemod. Su muta-prueba (`__names-mutatest.ts`, 27 casos) es lo que hizo el trabajo: cazó que yo promovía al frente CUALQUIER valor declarado por el morfo, y así `--sidebar-width-icon` (la anchura del raíl colapsado) se convertía en `--sidebar-icon-width` (la anchura de un icono), que es otra cosa. La firma dice «delante lo interactivo, detrás lo dimensional y contextual»: ahora sólo promociona el vocabulario interactivo cerrado, y lo contextual —`below`, `loaded`, `vertical`, `icon`— se queda donde estaba. Los cinco casos de regresión están en la muta-prueba. También cazó que `dropdown-menu.item-bg-hover` lee `var(--color-primary-element)`: es un hover CON VALENCIA (el palette swap de recipe-contract §2), no el hover bespoke que §38 deprecó. Clasificar por el nombre lo habría metido en una migración que no le toca; se clasifica por el VALOR. Verificación (§7.4, artefacto por paso): diff de generated/ 269 renombres 1:1 · 0 cambios de valor · 22 privados reapuntados a los nombres nuevos (`__names-verify-diff`) computed tag-group · field · tabs: 6.467 valores en 23 estados, 0 diffs — y comprobado en el navegador que sirve el CSS nuevo, para que ese 0 no sea el de una copia cacheada huérfanos 0 en código suite eidos 434 pasan · 1 rojo, el conocido (`skin-media-player`). `recipe-css-contract` verde: es el guard que caza el `var()` sin fallback a un nombre que ya no se emite, o sea el fallo exacto de un rename a medias component:audit 163 PASS · 3 NEEDS-WORK, los tres SIN TOCAR por esto check 0 errores en ficheros tocados (los 73 globales son de otras sesiones de la rama; se atribuye por fichero) rtl:check 0 · docs:check 0 formato el renombrado no alarga ninguna línea: ningún fichero tiene más líneas de 100 chars que antes, así que no se pasa prettier — hacerlo reformateaba 300 ficheros de deriva ajena Entra aquí la corrección del repaso de los 7 ya hechos: `gradient-builder.checker-color` → `checker-fg` (el damero de transparencia; ahí `color` era slot). Sus `stop-color-*` no se tocan. Queda para el paso siguiente: R-5.3 no puede graduar a `error` directo mientras los 47 hovers neutros sigan hablando el idioma viejo — o migran antes (firma 3, ya firmada), o el guard necesita una exención greppable. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2 months ago
color: var(--form-fg);
font-family: var(--form-font-family);
}
eidos: theming fixes + size/variant parity batch + docs - theme: add surface.muted + content.muted to color contract (neutral-3 + neutral-10). Plugs 17 broken --color-content-muted and 3 broken --color-surface-muted references in recipes/components. - form.css: fix --color-neutral-element-hover typo → --color-neutral-hover. - archetypes.css + events.css: replace raw hsl/rgba indigo with color-mix(var(--color-primary-solid) …) — no raw colors left in eidos. - combobox dark scrollbar: unscope ::-webkit-scrollbar rules in uix.css and duplicate --uix-line on :root + :root[data-mode='dark'] so portaled overlays (Combobox listbox, Popover, Dialog, Drawer) inherit the theme. - sizes: 20 components expand from sm/md/lg to xs..xl (form controls, text inputs, progress/meter, field/form) or xs..lg (nav controls: breadcrumb, pagination, tag-group, toolbar). Composite panels keep sm/md/lg deliberately. - variants: field + toolbar drop arbitrary ControlVariant narrowings; both expose all 3 (surface | outline | ghost) with new outline CSS. - pagination demo: disambiguate siblingCount/boundaryCount as "per side" in label + API table (Radix/MUI convention). - docs: CHECKLIST §C-2.6 (contract token presence) + §D-7.4 (chip parity) + §D-7.5 (size category) added. DEMO_AUTHORING §12.7 (chip parity) + §12.8 (size category cheatsheet) added. eidos/README + active_architecture.md sync texts/migration nomenclature. - PENDIENTES.md: normas N-1..N-5 implantadas en esta sesión. Verification: 88/88 eidos tests, 0 type errors, 67/67 component:audit PASS. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
[data-form][data-size='xs'] {
--_form-gap: var(--form-gap-xs);
--_form-action-height: var(--form-action-height-xs);
feat(audit): component re-audit + fixes P0–P5 (P4 complete, P5 in progress) Re-audit of the whole component catalog at pilot depth (91 fichas + the checkpoint verdicts in docs/audit/components/) and the executed fix packages. - P0–P3: doctrine (sema participation, CANON §3 intent, component-guide §5 + API naming, §32 outline), guards (morfo-vocabulary-check S10/S11d, component-audit A-3.1/A-1.4/S9, eidos-lint classHooks), morfo contracts (role=application removed ×4, aria-selected off the Day, drp translationRef, field data-state prune, pin-input commit-set, media-player renames), 13 new sema packs + 12 morfos family-default → pack. - P4 (N1–N10) COMPLETE: selectionMode (select/combobox/toggle-group/calendar); onValueCommit terminal-callback norm (pin-input/search/password/textarea + date/time/color-field add); typed validation reason + onInvalid (tags-input, css-field); index/onIndexChange (carousel); deselectable; openDelay/ groupSkipDelay; allowCustomValue; defaultValue prune. - P5 (in progress): S1 class-hooks codemod (22 hooks → data-attrs across cropper/button/image-picker/toggle/image-adjustments); S5 outline remnant in field.css; depth pass (data-depth=overlay on tooltip/toast/float-panel); touch-rows (--touch-target token, decoupled ::before hit-slop, area-not-visual, 44 AAA). S6 (Field composition) + S8 (calendar-surface) pending. Verification: errors-outside-(alpha|words|palabras|chronos) == 59 (baseline); morfo-vocabulary-check exit 0; eidos-lint class-hooks/invalid 0 on touched components; per-component vitest suites green. Handoff + remaining plan: docs/process/continue-audit-fixes-2026-07.md Excluded (broken by the N1 rename, left broken per user decision, not staged): words/**, palabras/**, chronos, web/routes/alpha/**. Reconciliation pending: the touch-rows ::before for checkbox/switch reverses changelog §37's earlier pseudo-element rejection (WCAG-overlap) that had routed markers to a labeled-row/Field task — flagged for the user in the handoff. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
3 months ago
--_form-action-padding-inline: var(--form-action-padding-inline-xs);
eidos: theming fixes + size/variant parity batch + docs - theme: add surface.muted + content.muted to color contract (neutral-3 + neutral-10). Plugs 17 broken --color-content-muted and 3 broken --color-surface-muted references in recipes/components. - form.css: fix --color-neutral-element-hover typo → --color-neutral-hover. - archetypes.css + events.css: replace raw hsl/rgba indigo with color-mix(var(--color-primary-solid) …) — no raw colors left in eidos. - combobox dark scrollbar: unscope ::-webkit-scrollbar rules in uix.css and duplicate --uix-line on :root + :root[data-mode='dark'] so portaled overlays (Combobox listbox, Popover, Dialog, Drawer) inherit the theme. - sizes: 20 components expand from sm/md/lg to xs..xl (form controls, text inputs, progress/meter, field/form) or xs..lg (nav controls: breadcrumb, pagination, tag-group, toolbar). Composite panels keep sm/md/lg deliberately. - variants: field + toolbar drop arbitrary ControlVariant narrowings; both expose all 3 (surface | outline | ghost) with new outline CSS. - pagination demo: disambiguate siblingCount/boundaryCount as "per side" in label + API table (Radix/MUI convention). - docs: CHECKLIST §C-2.6 (contract token presence) + §D-7.4 (chip parity) + §D-7.5 (size category) added. DEMO_AUTHORING §12.7 (chip parity) + §12.8 (size category cheatsheet) added. eidos/README + active_architecture.md sync texts/migration nomenclature. - PENDIENTES.md: normas N-1..N-5 implantadas en esta sesión. Verification: 88/88 eidos tests, 0 type errors, 67/67 component:audit PASS. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
--_form-action-font-size: var(--form-action-font-size-xs);
}
[data-form][data-size='sm'] {
--_form-gap: var(--form-gap-sm);
--_form-action-height: var(--form-action-height-sm);
feat(audit): component re-audit + fixes P0–P5 (P4 complete, P5 in progress) Re-audit of the whole component catalog at pilot depth (91 fichas + the checkpoint verdicts in docs/audit/components/) and the executed fix packages. - P0–P3: doctrine (sema participation, CANON §3 intent, component-guide §5 + API naming, §32 outline), guards (morfo-vocabulary-check S10/S11d, component-audit A-3.1/A-1.4/S9, eidos-lint classHooks), morfo contracts (role=application removed ×4, aria-selected off the Day, drp translationRef, field data-state prune, pin-input commit-set, media-player renames), 13 new sema packs + 12 morfos family-default → pack. - P4 (N1–N10) COMPLETE: selectionMode (select/combobox/toggle-group/calendar); onValueCommit terminal-callback norm (pin-input/search/password/textarea + date/time/color-field add); typed validation reason + onInvalid (tags-input, css-field); index/onIndexChange (carousel); deselectable; openDelay/ groupSkipDelay; allowCustomValue; defaultValue prune. - P5 (in progress): S1 class-hooks codemod (22 hooks → data-attrs across cropper/button/image-picker/toggle/image-adjustments); S5 outline remnant in field.css; depth pass (data-depth=overlay on tooltip/toast/float-panel); touch-rows (--touch-target token, decoupled ::before hit-slop, area-not-visual, 44 AAA). S6 (Field composition) + S8 (calendar-surface) pending. Verification: errors-outside-(alpha|words|palabras|chronos) == 59 (baseline); morfo-vocabulary-check exit 0; eidos-lint class-hooks/invalid 0 on touched components; per-component vitest suites green. Handoff + remaining plan: docs/process/continue-audit-fixes-2026-07.md Excluded (broken by the N1 rename, left broken per user decision, not staged): words/**, palabras/**, chronos, web/routes/alpha/**. Reconciliation pending: the touch-rows ::before for checkbox/switch reverses changelog §37's earlier pseudo-element rejection (WCAG-overlap) that had routed markers to a labeled-row/Field task — flagged for the user in the handoff. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
3 months ago
--_form-action-padding-inline: var(--form-action-padding-inline-sm);
--_form-action-font-size: var(--form-action-font-size-sm);
}
[data-form][data-size='lg'] {
--_form-gap: var(--form-gap-lg);
--_form-action-height: var(--form-action-height-lg);
feat(audit): component re-audit + fixes P0–P5 (P4 complete, P5 in progress) Re-audit of the whole component catalog at pilot depth (91 fichas + the checkpoint verdicts in docs/audit/components/) and the executed fix packages. - P0–P3: doctrine (sema participation, CANON §3 intent, component-guide §5 + API naming, §32 outline), guards (morfo-vocabulary-check S10/S11d, component-audit A-3.1/A-1.4/S9, eidos-lint classHooks), morfo contracts (role=application removed ×4, aria-selected off the Day, drp translationRef, field data-state prune, pin-input commit-set, media-player renames), 13 new sema packs + 12 morfos family-default → pack. - P4 (N1–N10) COMPLETE: selectionMode (select/combobox/toggle-group/calendar); onValueCommit terminal-callback norm (pin-input/search/password/textarea + date/time/color-field add); typed validation reason + onInvalid (tags-input, css-field); index/onIndexChange (carousel); deselectable; openDelay/ groupSkipDelay; allowCustomValue; defaultValue prune. - P5 (in progress): S1 class-hooks codemod (22 hooks → data-attrs across cropper/button/image-picker/toggle/image-adjustments); S5 outline remnant in field.css; depth pass (data-depth=overlay on tooltip/toast/float-panel); touch-rows (--touch-target token, decoupled ::before hit-slop, area-not-visual, 44 AAA). S6 (Field composition) + S8 (calendar-surface) pending. Verification: errors-outside-(alpha|words|palabras|chronos) == 59 (baseline); morfo-vocabulary-check exit 0; eidos-lint class-hooks/invalid 0 on touched components; per-component vitest suites green. Handoff + remaining plan: docs/process/continue-audit-fixes-2026-07.md Excluded (broken by the N1 rename, left broken per user decision, not staged): words/**, palabras/**, chronos, web/routes/alpha/**. Reconciliation pending: the touch-rows ::before for checkbox/switch reverses changelog §37's earlier pseudo-element rejection (WCAG-overlap) that had routed markers to a labeled-row/Field task — flagged for the user in the handoff. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
3 months ago
--_form-action-padding-inline: var(--form-action-padding-inline-lg);
--_form-action-font-size: var(--form-action-font-size-lg);
}
eidos: theming fixes + size/variant parity batch + docs - theme: add surface.muted + content.muted to color contract (neutral-3 + neutral-10). Plugs 17 broken --color-content-muted and 3 broken --color-surface-muted references in recipes/components. - form.css: fix --color-neutral-element-hover typo → --color-neutral-hover. - archetypes.css + events.css: replace raw hsl/rgba indigo with color-mix(var(--color-primary-solid) …) — no raw colors left in eidos. - combobox dark scrollbar: unscope ::-webkit-scrollbar rules in uix.css and duplicate --uix-line on :root + :root[data-mode='dark'] so portaled overlays (Combobox listbox, Popover, Dialog, Drawer) inherit the theme. - sizes: 20 components expand from sm/md/lg to xs..xl (form controls, text inputs, progress/meter, field/form) or xs..lg (nav controls: breadcrumb, pagination, tag-group, toolbar). Composite panels keep sm/md/lg deliberately. - variants: field + toolbar drop arbitrary ControlVariant narrowings; both expose all 3 (surface | outline | ghost) with new outline CSS. - pagination demo: disambiguate siblingCount/boundaryCount as "per side" in label + API table (Radix/MUI convention). - docs: CHECKLIST §C-2.6 (contract token presence) + §D-7.4 (chip parity) + §D-7.5 (size category) added. DEMO_AUTHORING §12.7 (chip parity) + §12.8 (size category cheatsheet) added. eidos/README + active_architecture.md sync texts/migration nomenclature. - PENDIENTES.md: normas N-1..N-5 implantadas en esta sesión. Verification: 88/88 eidos tests, 0 type errors, 67/67 component:audit PASS. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
[data-form][data-size='xl'] {
--_form-gap: var(--form-gap-xl);
--_form-action-height: var(--form-action-height-xl);
feat(audit): component re-audit + fixes P0–P5 (P4 complete, P5 in progress) Re-audit of the whole component catalog at pilot depth (91 fichas + the checkpoint verdicts in docs/audit/components/) and the executed fix packages. - P0–P3: doctrine (sema participation, CANON §3 intent, component-guide §5 + API naming, §32 outline), guards (morfo-vocabulary-check S10/S11d, component-audit A-3.1/A-1.4/S9, eidos-lint classHooks), morfo contracts (role=application removed ×4, aria-selected off the Day, drp translationRef, field data-state prune, pin-input commit-set, media-player renames), 13 new sema packs + 12 morfos family-default → pack. - P4 (N1–N10) COMPLETE: selectionMode (select/combobox/toggle-group/calendar); onValueCommit terminal-callback norm (pin-input/search/password/textarea + date/time/color-field add); typed validation reason + onInvalid (tags-input, css-field); index/onIndexChange (carousel); deselectable; openDelay/ groupSkipDelay; allowCustomValue; defaultValue prune. - P5 (in progress): S1 class-hooks codemod (22 hooks → data-attrs across cropper/button/image-picker/toggle/image-adjustments); S5 outline remnant in field.css; depth pass (data-depth=overlay on tooltip/toast/float-panel); touch-rows (--touch-target token, decoupled ::before hit-slop, area-not-visual, 44 AAA). S6 (Field composition) + S8 (calendar-surface) pending. Verification: errors-outside-(alpha|words|palabras|chronos) == 59 (baseline); morfo-vocabulary-check exit 0; eidos-lint class-hooks/invalid 0 on touched components; per-component vitest suites green. Handoff + remaining plan: docs/process/continue-audit-fixes-2026-07.md Excluded (broken by the N1 rename, left broken per user decision, not staged): words/**, palabras/**, chronos, web/routes/alpha/**. Reconciliation pending: the touch-rows ::before for checkbox/switch reverses changelog §37's earlier pseudo-element rejection (WCAG-overlap) that had routed markers to a labeled-row/Field task — flagged for the user in the handoff. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
3 months ago
--_form-action-padding-inline: var(--form-action-padding-inline-xl);
eidos: theming fixes + size/variant parity batch + docs - theme: add surface.muted + content.muted to color contract (neutral-3 + neutral-10). Plugs 17 broken --color-content-muted and 3 broken --color-surface-muted references in recipes/components. - form.css: fix --color-neutral-element-hover typo → --color-neutral-hover. - archetypes.css + events.css: replace raw hsl/rgba indigo with color-mix(var(--color-primary-solid) …) — no raw colors left in eidos. - combobox dark scrollbar: unscope ::-webkit-scrollbar rules in uix.css and duplicate --uix-line on :root + :root[data-mode='dark'] so portaled overlays (Combobox listbox, Popover, Dialog, Drawer) inherit the theme. - sizes: 20 components expand from sm/md/lg to xs..xl (form controls, text inputs, progress/meter, field/form) or xs..lg (nav controls: breadcrumb, pagination, tag-group, toolbar). Composite panels keep sm/md/lg deliberately. - variants: field + toolbar drop arbitrary ControlVariant narrowings; both expose all 3 (surface | outline | ghost) with new outline CSS. - pagination demo: disambiguate siblingCount/boundaryCount as "per side" in label + API table (Radix/MUI convention). - docs: CHECKLIST §C-2.6 (contract token presence) + §D-7.4 (chip parity) + §D-7.5 (size category) added. DEMO_AUTHORING §12.7 (chip parity) + §12.8 (size category cheatsheet) added. eidos/README + active_architecture.md sync texts/migration nomenclature. - PENDIENTES.md: normas N-1..N-5 implantadas en esta sesión. Verification: 88/88 eidos tests, 0 type errors, 67/67 component:audit PASS. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
--_form-action-font-size: var(--form-action-font-size-xl);
}
[data-form][data-variant='panel'] {
--_form-padding: var(--form-panel-padding);
--_form-border: var(--form-panel-border);
--_form-bg: var(--form-panel-bg);
--_form-shadow: var(--form-panel-shadow);
}
[data-form][data-layout='grid'] {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(min(100%, var(--form-grid-min)), 1fr));
align-items: start;
column-gap: var(--form-grid-column-gap);
row-gap: var(--_form-gap);
}
[data-form][data-pending] {
cursor: progress;
}
form: PASS audit + refine R-1.2 to require morfo declaration Full walk of Form (largest finding set in the project): - Morfo: validated. 14 parts — Provider/Submit/Reset/ErrorSummary + 9 AutoFields parts for the reflective renderer. Provider declares data-pending/dirty/touched/invalid/submitted on the contract. Sema events `commit-submit` (fulfill), `signal-invalid` (risk), `commit-reset` (neutral) are correct. - `texts.label` added with catalog entry (`label = 'Formulario' / 'Form'`). - Recipe CSS: `[data-form][data-invalid]` rule added. Low-emphasis affordance — the ErrorSummary picks up the risk border but field cells keep their own `[data-invalid]` styling via the Field recipe. - README rewritten with canonical sections: - `## Baseline` summarizing air / soma / morfo coverage - `## Comparativa` (was `## Reference Comparison`) — extended to include shadcn-svelte plus AutoFields differentiators (discriminated unions, array fields, first-error focus, validation timing modes) - `## Decisiones` documenting the small-wrapper rule, AutoFields exception, validation timing ownership, the no-noise-on-load default, sema event placement, and the low-emphasis invalid treatment - `## Gaps` (new) with disposition markers — apg is `descartar` (no APG for "Form" — APG covers individual widgets), AutoFields i18n is `implementar`, multi-step / submission feedback / etc. are `diferir`, auto-save / optimistic UI are `descartar` Audit script refinement: - R-1.2 (data-disabled styles) now only fires when the morfo *declares* `data-disabled` on any part. Form's Provider doesn't emit a disabled state at the root (individual fields handle it themselves), so demanding defensive CSS for a state the contract never emits was a false-positive. The rule still fires correctly for components that DO declare `data-disabled` in their morfo. Audit: PASS 7 → 8. Form flips to PASS with only one remaining warn (`A-1.4` no apg URL — `descartar` documented as a gap). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
/* Whole-form invalid signal: a thin top accent and the ErrorSummary
bordering match the risk tone. Individual fields keep their own
`[data-invalid]` styling via the Field recipe — the form-level
indicator is a low-emphasis affordance so the page-level "errors
present" state reads at a glance. */
[data-form][data-invalid] {
uix(form): temable — 71 % → 86 %, y 24 claves suyas NO PINTAN por una cascada Diez claves nuevas (54 → 64), un literal firmado, veinte adjudicaciones medidas y un hallazgo que espera firma. Diff de computed 0 sobre 832 valores en 7 estados; capturas 2× antes/después. LAS DIEZ IBAN A LOS PRIMITIVOS A PELO El resumen de errores (error-summary-{bg,fg,border}) —es el señalizador de nivel de página y su superficie, su tinta y su borde SON el tono risk—, el acento de formulario inválido (invalid-accent, un privado con UNA sola fuente, no un conmutador), las tres superficies del árbol de AutoFields, las dos del widget y el subrayado a media tinta de los enlaces del resumen (link-underline-fg, el par del -offset que ya existía). ⚠ R-5.3 CAZÓ MI NOMBRE EN EL ACTO: lo acuñé como link-underline-color y la tinta es `fg` (theming §6.7 r7, firmado el 20). Renombrado antes de commitear. El guard de nombres funciona — es el vocabulario DIMENSIONAL el que no cubre (ver badge, hoy mismo). ⚠⚠ VEINTICUATRO CLAVES DEL CONTRATO NO PINTAN, Y ES UNA CASCADA [data-form-submit], [data-form-reset] y los dos botones del array llevan también data-button porque COMPONEN el Button canónico, y [data-button] casa con la MISMA especificidad (0,1,0) pero carga DESPUÉS: gana button.css. Medido propiedad a propiedad sobre el nodo real —altura, padding-inline, tamaño y peso de letra, interlineado, hueco, radio, grosor de borde, el par de transición y la opacidad deshabilitada—: NINGUNA se mueve. Es el defecto que gradient-picker documentó (36 de sus 45 claves) y que emoji-picker encontró hoy en su trigger. Allí la respuesta fue RETIRAR las declaraciones muertas; aquí son 24 claves públicas, y eso es una decisión del autor, no del que ejecuta. Quedan adjudicadas POR PATRÓN (una razón arquitectónica escrita una vez) y anotadas en §13 con la pregunta de fondo, que es la misma de §12.9 con el plano overlay: qué manda, el componente compuesto o la receta que lo compone. Si mandan las recetas, se sube la especificidad y no se retira nada; si mandan los compuestos, hay ~63 claves públicas que retirar en tres componentes. LAS DEMÁS ADJUDICACIONES SON RAMAS QUE LA DEMO NO MONTA El layout grid (forzado alcanza — y ojo: su grid-template-columns sólo CAMBIA si el valor altera el número de columnas; con 90px pasa de una columna de 502px a cuatro de 110,5), el resumen de errores VACÍO (sin <ul> que indentar ni <a> que subrayar) y toda la rama de ARRAY de AutoFields: el modo `auto` de la demo monta group y field, nunca array, item ni widget. Fuera por doctrina: los tres privados del panel son un CONMUTADOR (variante plain contra panel) y los cuatro --_form-action-* leen el forward de paleta THM-2. VERIFICACIÓN Sonda antes/después 0 diffs (832 valores · 7 estados) · R-5.4 22/64 con las 20 + el patrón adjudicados, exit 0 · component:audit PASS (tras el renombrado) · --names 0 desviadas · censo --only 86 % · eidos-lint 36 morfo-backed / 0 invalid / 0 class-hooks · rtl:check 0 · docs:check 0 · suite eidos 439/440 (el rojo conocido) · el ledger sigue en sus 63 hunks de prettier previos. Rama con cuatro sesiones en paralelo: índice construido desde HEAD + sólo mis hunks (base.ts por bloque), verificado con `git diff --cached`. No entra docs/audit/theming/README.md — es un agregado global que ahora mismo mezcla trabajo en vuelo de otras sesiones. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2 months ago
--_form-invalid-accent: var(--form-invalid-accent);
form: PASS audit + refine R-1.2 to require morfo declaration Full walk of Form (largest finding set in the project): - Morfo: validated. 14 parts — Provider/Submit/Reset/ErrorSummary + 9 AutoFields parts for the reflective renderer. Provider declares data-pending/dirty/touched/invalid/submitted on the contract. Sema events `commit-submit` (fulfill), `signal-invalid` (risk), `commit-reset` (neutral) are correct. - `texts.label` added with catalog entry (`label = 'Formulario' / 'Form'`). - Recipe CSS: `[data-form][data-invalid]` rule added. Low-emphasis affordance — the ErrorSummary picks up the risk border but field cells keep their own `[data-invalid]` styling via the Field recipe. - README rewritten with canonical sections: - `## Baseline` summarizing air / soma / morfo coverage - `## Comparativa` (was `## Reference Comparison`) — extended to include shadcn-svelte plus AutoFields differentiators (discriminated unions, array fields, first-error focus, validation timing modes) - `## Decisiones` documenting the small-wrapper rule, AutoFields exception, validation timing ownership, the no-noise-on-load default, sema event placement, and the low-emphasis invalid treatment - `## Gaps` (new) with disposition markers — apg is `descartar` (no APG for "Form" — APG covers individual widgets), AutoFields i18n is `implementar`, multi-step / submission feedback / etc. are `diferir`, auto-save / optimistic UI are `descartar` Audit script refinement: - R-1.2 (data-disabled styles) now only fires when the morfo *declares* `data-disabled` on any part. Form's Provider doesn't emit a disabled state at the root (individual fields handle it themselves), so demanding defensive CSS for a state the contract never emits was a false-positive. The rule still fires correctly for components that DO declare `data-disabled` in their morfo. Audit: PASS 7 → 8. Form flips to PASS with only one remaining warn (`A-1.4` no apg URL — `descartar` documented as a gap). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
}
[data-form][data-invalid] [data-form-error-summary] {
border-color: var(--_form-invalid-accent);
}
fix(theming): form cede el cromo de submit/reset al Button que componen El bloque de accion de form.css vestia CUATRO nodos con las mismas 23 claves: submit/reset (que COMPONEN el Button canonico - ahi muertas Y contradictorias: declaraban un boton solido de tinta blanca mientras se pintaba surface verde, discrepando en silencio desde siempre) y array-add/array-remove, <button> PELADOS donde las 23 son su UNICO cromo y estan 23/23 VIVAS (medido montandolos a la fuerza: la demo nunca los monta). Ejecuta la doctrina YA FIRMADA que nombra a Form.Submit por su nombre (component-guide.md:126-146, consumer pattern rule 5) - la opcion de escalar a (0,2,0) queda descartada por escrito: si se quiere el submit solido, el camino es <Form.Submit variant="solid">, no ganar la cascada. - El bloque de accion apunta ya SOLO a los dos botones del array; mueren 4 reglas y se estrechan 5 grupos. Los 4 privados THM-2 de submit/reset fuera (nadie los consumia): el diff del generado son EXACTAMENTE 14 lineas (su suelo y su forward). Las 23 publicas SE QUEDAN. - Ceder submit/reset: 0 px sobre 79.296 valores (16 escenarios, V1) + sonda 0/834 con CONTROL POSITIVO (el CSSOM vivo no contiene una sola regla de submit/reset ni un --_form-palette-*). El cromo del array, intacto contra los valores pre-firma; su eje de talla sigue llegando por herencia. - Centinela 22/64 exit 0, identico conjunto: solo cambia la RAZON de las 23 ("rama array que la demo no monta") - la anterior era falsa a medias (los botones del array NO llevan data-button) y el "24" era un error triplicado (ficha, README, ledger): son 23. - CONTINUE: la firma del compuesto EJECUTADA; gradient-picker (36) y emoji-picker (3) des-RANCIADOS - ejecutados el 2026-08-20/23, hoy 0 adjudicaciones por compuesto (verificado; ademas su mecanismo era OTRO: especificidad de popover.css, no orden de emision). - next-features 13: DOS expedientes nuevos destapados y NO ejecutados aqui: los botones del array deben COMPONER el Button (soma+morfo, clase A-112, y son perceptualmente mudos) - y el eje size de form NO llega a sus acciones (<Form size="xs"> renderiza acciones md; solo sobrevive el row-gap). Verificacion: V1 (verificador independiente, informe recuperado de disco tras interrupcion) + ejecutor con gates completos (vitest 442+1 ajeno - check 0 atribuibles - docs-check 0/0 - eidos-lint 0 invalid). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2 months ago
/* The action chrome is the AutoFields array's, and ONLY its.
`form-auto-fields.svelte` renders `array-add` / `array-remove` as bare
`<button>`s composing nothing, so what follows is the only chrome those two
nodes have — the size axis reaches them by INHERITING `--_form-action-*`
from the provider above.
`Form.Submit` / `Form.Reset` are deliberately absent: they compose the
canonical `<Button>` through its `child` snippet, and
`docs/guides/component-guide.md:126-146` names `Form.Submit` when it states
consumer pattern rule 5 — the composer's recipe paints NO chrome on the
composed node. They used to ride in every rule of this block and never won
a pixel: `[data-button]` matches at the same specificity (0,1,0) and loads
later. Signed 2026-08-24; ceding measured at ZERO diffs on both nodes over
79,296 computed values across 16 scenarios. */
[data-form-auto-fields-array-add],
[data-form-auto-fields-array-remove] {
--_form-action-bg: var(--color-neutral-element);
eidos: theming fixes + size/variant parity batch + docs - theme: add surface.muted + content.muted to color contract (neutral-3 + neutral-10). Plugs 17 broken --color-content-muted and 3 broken --color-surface-muted references in recipes/components. - form.css: fix --color-neutral-element-hover typo → --color-neutral-hover. - archetypes.css + events.css: replace raw hsl/rgba indigo with color-mix(var(--color-primary-solid) …) — no raw colors left in eidos. - combobox dark scrollbar: unscope ::-webkit-scrollbar rules in uix.css and duplicate --uix-line on :root + :root[data-mode='dark'] so portaled overlays (Combobox listbox, Popover, Dialog, Drawer) inherit the theme. - sizes: 20 components expand from sm/md/lg to xs..xl (form controls, text inputs, progress/meter, field/form) or xs..lg (nav controls: breadcrumb, pagination, tag-group, toolbar). Composite panels keep sm/md/lg deliberately. - variants: field + toolbar drop arbitrary ControlVariant narrowings; both expose all 3 (surface | outline | ghost) with new outline CSS. - pagination demo: disambiguate siblingCount/boundaryCount as "per side" in label + API table (Radix/MUI convention). - docs: CHECKLIST §C-2.6 (contract token presence) + §D-7.4 (chip parity) + §D-7.5 (size category) added. DEMO_AUTHORING §12.7 (chip parity) + §12.8 (size category cheatsheet) added. eidos/README + active_architecture.md sync texts/migration nomenclature. - PENDIENTES.md: normas N-1..N-5 implantadas en esta sesión. Verification: 88/88 eidos tests, 0 type errors, 67/67 component:audit PASS. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
--_form-action-bg-hover: var(--color-neutral-hover);
--_form-action-border: var(--color-neutral-border);
--_form-action-color: var(--color-neutral-text);
--_form-action-shadow: none;
display: inline-flex;
align-items: center;
justify-content: center;
gap: var(--form-action-gap);
min-block-size: var(--_form-action-height);
feat(audit): component re-audit + fixes P0–P5 (P4 complete, P5 in progress) Re-audit of the whole component catalog at pilot depth (91 fichas + the checkpoint verdicts in docs/audit/components/) and the executed fix packages. - P0–P3: doctrine (sema participation, CANON §3 intent, component-guide §5 + API naming, §32 outline), guards (morfo-vocabulary-check S10/S11d, component-audit A-3.1/A-1.4/S9, eidos-lint classHooks), morfo contracts (role=application removed ×4, aria-selected off the Day, drp translationRef, field data-state prune, pin-input commit-set, media-player renames), 13 new sema packs + 12 morfos family-default → pack. - P4 (N1–N10) COMPLETE: selectionMode (select/combobox/toggle-group/calendar); onValueCommit terminal-callback norm (pin-input/search/password/textarea + date/time/color-field add); typed validation reason + onInvalid (tags-input, css-field); index/onIndexChange (carousel); deselectable; openDelay/ groupSkipDelay; allowCustomValue; defaultValue prune. - P5 (in progress): S1 class-hooks codemod (22 hooks → data-attrs across cropper/button/image-picker/toggle/image-adjustments); S5 outline remnant in field.css; depth pass (data-depth=overlay on tooltip/toast/float-panel); touch-rows (--touch-target token, decoupled ::before hit-slop, area-not-visual, 44 AAA). S6 (Field composition) + S8 (calendar-surface) pending. Verification: errors-outside-(alpha|words|palabras|chronos) == 59 (baseline); morfo-vocabulary-check exit 0; eidos-lint class-hooks/invalid 0 on touched components; per-component vitest suites green. Handoff + remaining plan: docs/process/continue-audit-fixes-2026-07.md Excluded (broken by the N1 rename, left broken per user decision, not staged): words/**, palabras/**, chronos, web/routes/alpha/**. Reconciliation pending: the touch-rows ::before for checkbox/switch reverses changelog §37's earlier pseudo-element rejection (WCAG-overlap) that had routed markers to a labeled-row/Field task — flagged for the user in the handoff. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
3 months ago
padding-inline: var(--_form-action-padding-inline);
border: var(--form-action-border-width) solid var(--_form-action-border);
border-radius: var(--form-action-radius);
background: var(--_form-action-bg);
box-shadow: var(--_form-action-shadow);
color: var(--_form-action-color);
font-family: var(--form-font-family);
font-size: var(--_form-action-font-size);
font-weight: var(--form-action-font-weight);
line-height: var(--form-action-line-height);
text-decoration: none;
transition:
background var(--form-transition-duration) var(--form-transition-ease),
border-color var(--form-transition-duration) var(--form-transition-ease),
box-shadow var(--form-transition-duration) var(--form-transition-ease),
color var(--form-transition-duration) var(--form-transition-ease);
}
fix(theming): form cede el cromo de submit/reset al Button que componen El bloque de accion de form.css vestia CUATRO nodos con las mismas 23 claves: submit/reset (que COMPONEN el Button canonico - ahi muertas Y contradictorias: declaraban un boton solido de tinta blanca mientras se pintaba surface verde, discrepando en silencio desde siempre) y array-add/array-remove, <button> PELADOS donde las 23 son su UNICO cromo y estan 23/23 VIVAS (medido montandolos a la fuerza: la demo nunca los monta). Ejecuta la doctrina YA FIRMADA que nombra a Form.Submit por su nombre (component-guide.md:126-146, consumer pattern rule 5) - la opcion de escalar a (0,2,0) queda descartada por escrito: si se quiere el submit solido, el camino es <Form.Submit variant="solid">, no ganar la cascada. - El bloque de accion apunta ya SOLO a los dos botones del array; mueren 4 reglas y se estrechan 5 grupos. Los 4 privados THM-2 de submit/reset fuera (nadie los consumia): el diff del generado son EXACTAMENTE 14 lineas (su suelo y su forward). Las 23 publicas SE QUEDAN. - Ceder submit/reset: 0 px sobre 79.296 valores (16 escenarios, V1) + sonda 0/834 con CONTROL POSITIVO (el CSSOM vivo no contiene una sola regla de submit/reset ni un --_form-palette-*). El cromo del array, intacto contra los valores pre-firma; su eje de talla sigue llegando por herencia. - Centinela 22/64 exit 0, identico conjunto: solo cambia la RAZON de las 23 ("rama array que la demo no monta") - la anterior era falsa a medias (los botones del array NO llevan data-button) y el "24" era un error triplicado (ficha, README, ledger): son 23. - CONTINUE: la firma del compuesto EJECUTADA; gradient-picker (36) y emoji-picker (3) des-RANCIADOS - ejecutados el 2026-08-20/23, hoy 0 adjudicaciones por compuesto (verificado; ademas su mecanismo era OTRO: especificidad de popover.css, no orden de emision). - next-features 13: DOS expedientes nuevos destapados y NO ejecutados aqui: los botones del array deben COMPONER el Button (soma+morfo, clase A-112, y son perceptualmente mudos) - y el eje size de form NO llega a sus acciones (<Form size="xs"> renderiza acciones md; solo sobrevive el row-gap). Verificacion: V1 (verificador independiente, informe recuperado de disco tras interrupcion) + ejecutor con gates completos (vitest 442+1 ajeno - check 0 atribuibles - docs-check 0/0 - eidos-lint 0 invalid). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2 months ago
/* The remove button is the quiet one of the pair. */
[data-form-auto-fields-array-remove] {
--_form-action-bg: transparent;
--_form-action-bg-hover: color-mix(in srgb, var(--color-neutral-track) 70%, transparent);
--_form-action-border: transparent;
feat(color)!: una palabra, un significado - primary/secondary son SIEMPRE jerarquia La homonimia muere: `primary`/`secondary` significan JERARQUIA DE MARCA en el catalogo ENTERO, tambien dentro de los seis primitivos de tinta (text, heading, display, code, label, s-text). El paso de tinta del 82 % se llama `subtle` - PROP y TOKEN, sin excepcion: el nombre es el contrato en el artefacto (la misma ley que la FIRMA B' y la 12.9; se rechazo por escrito la via "solo el prop con tabla de traduccion" - las excepciones legitimas son las FIRMADAS con razon, no las inventadas al decidir para abaratar). - Los seis CONTENT_INK, IDENTICOS: {subtle, muted, disabled, on-solid}; el nivel-1 es el DEFAULT sin prop. `label` gana `on-solid` (cierra la divergencia de familia registrada en e4fa616e5). - Renombre completo: --color-content-secondary -> --color-content-subtle y la clave de config content.secondary -> content.subtle (RUPTURA de API de tema). 355 referencias por patrones acotados; la raiz SIN prefijo (cssVar('color-content-secondary'), render-css.ts) incluida; en grafito.ts conviven tres claves `subtle` (content/border/shadow) y solo cambio content. El generado, reproducido BYTE A BYTE aplicando solo el renombre al anterior. - Codemod value-preserving: 11 call sites (6 secondary->subtle incl. expresiones y ternarias; 5 primary->fuera, incl. TRES defaults de prop) con la condicion ROJA caracterizada (--style-caption-color es el UNICO estilo cuya tinta default no es primary; los 5 sitios caen en ramas body). alpha/ (untracked, TERMINATED) fuera. - Las 6 demos migradas al vocabulario nuevo (s-text: CERO cambios, no tiene lista de tinta); label arranca en el default y pinta IDENTICO (contrafactual medido: el estado viejo habria pintado el morado de marca). - Neutra en pixel, MEDIDO: nivel 1 ESTRICTO CERO en 71.200 valores (blocks enteros, s-text entero, subarboles data-*); nivel 2: 31 diffs, todos trazados a las ediciones firmadas del harness (anchos de chips, reindexado de la lista de label con las tintas supervivientes byte a byte). Total 171.712 valores + 59.072 de re-corridas a 0 de ruido. - Guards: CONTENT_INK identicos entre los seis y sin nombres de rol (mutacion: muerde), y el generado sin rastro del token viejo con las 6 definiciones del nuevo. Dos cronicas fechadas en docs/old-deprecated, intactas a proposito. - Docs: changelog 54 - reference (eje de tinta) - next-features 13 (divergencia de label RESUELTA). Supervision: verificador independiente pre-firma (dos claims MURIERON en verificacion antes de tocar codigo), tres agentes en fases (censo+baseline -> implementacion+codemod -> demos -> verificacion de dos niveles -> docs). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2 months ago
--_form-action-color: var(--color-content-subtle);
}
[data-form-auto-fields-array-add]:not(:disabled):hover,
[data-form-auto-fields-array-remove]:not(:disabled):hover {
background: var(--_form-action-bg-hover);
}
[data-form-auto-fields-array-add]:focus-visible,
[data-form-auto-fields-array-remove]:focus-visible {
outline: var(--focus-ring-width) solid var(--focus-ring-color);
outline-offset: var(--focus-ring-offset);
}
[data-form-auto-fields-array-add]:disabled,
[data-form-auto-fields-array-remove]:disabled {
cursor: not-allowed;
opacity: var(--form-disabled-opacity);
}
[data-form-error-summary] {
padding: var(--form-error-summary-padding);
uix(form): temable — 71 % → 86 %, y 24 claves suyas NO PINTAN por una cascada Diez claves nuevas (54 → 64), un literal firmado, veinte adjudicaciones medidas y un hallazgo que espera firma. Diff de computed 0 sobre 832 valores en 7 estados; capturas 2× antes/después. LAS DIEZ IBAN A LOS PRIMITIVOS A PELO El resumen de errores (error-summary-{bg,fg,border}) —es el señalizador de nivel de página y su superficie, su tinta y su borde SON el tono risk—, el acento de formulario inválido (invalid-accent, un privado con UNA sola fuente, no un conmutador), las tres superficies del árbol de AutoFields, las dos del widget y el subrayado a media tinta de los enlaces del resumen (link-underline-fg, el par del -offset que ya existía). ⚠ R-5.3 CAZÓ MI NOMBRE EN EL ACTO: lo acuñé como link-underline-color y la tinta es `fg` (theming §6.7 r7, firmado el 20). Renombrado antes de commitear. El guard de nombres funciona — es el vocabulario DIMENSIONAL el que no cubre (ver badge, hoy mismo). ⚠⚠ VEINTICUATRO CLAVES DEL CONTRATO NO PINTAN, Y ES UNA CASCADA [data-form-submit], [data-form-reset] y los dos botones del array llevan también data-button porque COMPONEN el Button canónico, y [data-button] casa con la MISMA especificidad (0,1,0) pero carga DESPUÉS: gana button.css. Medido propiedad a propiedad sobre el nodo real —altura, padding-inline, tamaño y peso de letra, interlineado, hueco, radio, grosor de borde, el par de transición y la opacidad deshabilitada—: NINGUNA se mueve. Es el defecto que gradient-picker documentó (36 de sus 45 claves) y que emoji-picker encontró hoy en su trigger. Allí la respuesta fue RETIRAR las declaraciones muertas; aquí son 24 claves públicas, y eso es una decisión del autor, no del que ejecuta. Quedan adjudicadas POR PATRÓN (una razón arquitectónica escrita una vez) y anotadas en §13 con la pregunta de fondo, que es la misma de §12.9 con el plano overlay: qué manda, el componente compuesto o la receta que lo compone. Si mandan las recetas, se sube la especificidad y no se retira nada; si mandan los compuestos, hay ~63 claves públicas que retirar en tres componentes. LAS DEMÁS ADJUDICACIONES SON RAMAS QUE LA DEMO NO MONTA El layout grid (forzado alcanza — y ojo: su grid-template-columns sólo CAMBIA si el valor altera el número de columnas; con 90px pasa de una columna de 502px a cuatro de 110,5), el resumen de errores VACÍO (sin <ul> que indentar ni <a> que subrayar) y toda la rama de ARRAY de AutoFields: el modo `auto` de la demo monta group y field, nunca array, item ni widget. Fuera por doctrina: los tres privados del panel son un CONMUTADOR (variante plain contra panel) y los cuatro --_form-action-* leen el forward de paleta THM-2. VERIFICACIÓN Sonda antes/después 0 diffs (832 valores · 7 estados) · R-5.4 22/64 con las 20 + el patrón adjudicados, exit 0 · component:audit PASS (tras el renombrado) · --names 0 desviadas · censo --only 86 % · eidos-lint 36 morfo-backed / 0 invalid / 0 class-hooks · rtl:check 0 · docs:check 0 · suite eidos 439/440 (el rojo conocido) · el ledger sigue en sus 63 hunks de prettier previos. Rama con cuatro sesiones en paralelo: índice construido desde HEAD + sólo mis hunks (base.ts por bloque), verificado con `git diff --cached`. No entra docs/audit/theming/README.md — es un agregado global que ahora mismo mezcla trabajo en vuelo de otras sesiones. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2 months ago
border: var(--form-error-summary-border-width) solid var(--form-error-summary-border);
border-radius: var(--form-error-summary-radius);
uix(form): temable — 71 % → 86 %, y 24 claves suyas NO PINTAN por una cascada Diez claves nuevas (54 → 64), un literal firmado, veinte adjudicaciones medidas y un hallazgo que espera firma. Diff de computed 0 sobre 832 valores en 7 estados; capturas 2× antes/después. LAS DIEZ IBAN A LOS PRIMITIVOS A PELO El resumen de errores (error-summary-{bg,fg,border}) —es el señalizador de nivel de página y su superficie, su tinta y su borde SON el tono risk—, el acento de formulario inválido (invalid-accent, un privado con UNA sola fuente, no un conmutador), las tres superficies del árbol de AutoFields, las dos del widget y el subrayado a media tinta de los enlaces del resumen (link-underline-fg, el par del -offset que ya existía). ⚠ R-5.3 CAZÓ MI NOMBRE EN EL ACTO: lo acuñé como link-underline-color y la tinta es `fg` (theming §6.7 r7, firmado el 20). Renombrado antes de commitear. El guard de nombres funciona — es el vocabulario DIMENSIONAL el que no cubre (ver badge, hoy mismo). ⚠⚠ VEINTICUATRO CLAVES DEL CONTRATO NO PINTAN, Y ES UNA CASCADA [data-form-submit], [data-form-reset] y los dos botones del array llevan también data-button porque COMPONEN el Button canónico, y [data-button] casa con la MISMA especificidad (0,1,0) pero carga DESPUÉS: gana button.css. Medido propiedad a propiedad sobre el nodo real —altura, padding-inline, tamaño y peso de letra, interlineado, hueco, radio, grosor de borde, el par de transición y la opacidad deshabilitada—: NINGUNA se mueve. Es el defecto que gradient-picker documentó (36 de sus 45 claves) y que emoji-picker encontró hoy en su trigger. Allí la respuesta fue RETIRAR las declaraciones muertas; aquí son 24 claves públicas, y eso es una decisión del autor, no del que ejecuta. Quedan adjudicadas POR PATRÓN (una razón arquitectónica escrita una vez) y anotadas en §13 con la pregunta de fondo, que es la misma de §12.9 con el plano overlay: qué manda, el componente compuesto o la receta que lo compone. Si mandan las recetas, se sube la especificidad y no se retira nada; si mandan los compuestos, hay ~63 claves públicas que retirar en tres componentes. LAS DEMÁS ADJUDICACIONES SON RAMAS QUE LA DEMO NO MONTA El layout grid (forzado alcanza — y ojo: su grid-template-columns sólo CAMBIA si el valor altera el número de columnas; con 90px pasa de una columna de 502px a cuatro de 110,5), el resumen de errores VACÍO (sin <ul> que indentar ni <a> que subrayar) y toda la rama de ARRAY de AutoFields: el modo `auto` de la demo monta group y field, nunca array, item ni widget. Fuera por doctrina: los tres privados del panel son un CONMUTADOR (variante plain contra panel) y los cuatro --_form-action-* leen el forward de paleta THM-2. VERIFICACIÓN Sonda antes/después 0 diffs (832 valores · 7 estados) · R-5.4 22/64 con las 20 + el patrón adjudicados, exit 0 · component:audit PASS (tras el renombrado) · --names 0 desviadas · censo --only 86 % · eidos-lint 36 morfo-backed / 0 invalid / 0 class-hooks · rtl:check 0 · docs:check 0 · suite eidos 439/440 (el rojo conocido) · el ledger sigue en sus 63 hunks de prettier previos. Rama con cuatro sesiones en paralelo: índice construido desde HEAD + sólo mis hunks (base.ts por bloque), verificado con `git diff --cached`. No entra docs/audit/theming/README.md — es un agregado global que ahora mismo mezcla trabajo en vuelo de otras sesiones. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2 months ago
background: var(--form-error-summary-bg);
color: var(--form-error-summary-fg);
font-size: var(--form-error-summary-font-size);
line-height: var(--form-error-summary-line-height);
}
[data-form-error-summary][data-hidden],
[data-form-error-summary][hidden] {
display: none;
}
[data-form-error-summary] ul {
margin: 0;
padding-inline-start: var(--form-error-summary-list-indent);
}
[data-form-error-summary] a {
color: inherit;
uix(form): temable — 71 % → 86 %, y 24 claves suyas NO PINTAN por una cascada Diez claves nuevas (54 → 64), un literal firmado, veinte adjudicaciones medidas y un hallazgo que espera firma. Diff de computed 0 sobre 832 valores en 7 estados; capturas 2× antes/después. LAS DIEZ IBAN A LOS PRIMITIVOS A PELO El resumen de errores (error-summary-{bg,fg,border}) —es el señalizador de nivel de página y su superficie, su tinta y su borde SON el tono risk—, el acento de formulario inválido (invalid-accent, un privado con UNA sola fuente, no un conmutador), las tres superficies del árbol de AutoFields, las dos del widget y el subrayado a media tinta de los enlaces del resumen (link-underline-fg, el par del -offset que ya existía). ⚠ R-5.3 CAZÓ MI NOMBRE EN EL ACTO: lo acuñé como link-underline-color y la tinta es `fg` (theming §6.7 r7, firmado el 20). Renombrado antes de commitear. El guard de nombres funciona — es el vocabulario DIMENSIONAL el que no cubre (ver badge, hoy mismo). ⚠⚠ VEINTICUATRO CLAVES DEL CONTRATO NO PINTAN, Y ES UNA CASCADA [data-form-submit], [data-form-reset] y los dos botones del array llevan también data-button porque COMPONEN el Button canónico, y [data-button] casa con la MISMA especificidad (0,1,0) pero carga DESPUÉS: gana button.css. Medido propiedad a propiedad sobre el nodo real —altura, padding-inline, tamaño y peso de letra, interlineado, hueco, radio, grosor de borde, el par de transición y la opacidad deshabilitada—: NINGUNA se mueve. Es el defecto que gradient-picker documentó (36 de sus 45 claves) y que emoji-picker encontró hoy en su trigger. Allí la respuesta fue RETIRAR las declaraciones muertas; aquí son 24 claves públicas, y eso es una decisión del autor, no del que ejecuta. Quedan adjudicadas POR PATRÓN (una razón arquitectónica escrita una vez) y anotadas en §13 con la pregunta de fondo, que es la misma de §12.9 con el plano overlay: qué manda, el componente compuesto o la receta que lo compone. Si mandan las recetas, se sube la especificidad y no se retira nada; si mandan los compuestos, hay ~63 claves públicas que retirar en tres componentes. LAS DEMÁS ADJUDICACIONES SON RAMAS QUE LA DEMO NO MONTA El layout grid (forzado alcanza — y ojo: su grid-template-columns sólo CAMBIA si el valor altera el número de columnas; con 90px pasa de una columna de 502px a cuatro de 110,5), el resumen de errores VACÍO (sin <ul> que indentar ni <a> que subrayar) y toda la rama de ARRAY de AutoFields: el modo `auto` de la demo monta group y field, nunca array, item ni widget. Fuera por doctrina: los tres privados del panel son un CONMUTADOR (variante plain contra panel) y los cuatro --_form-action-* leen el forward de paleta THM-2. VERIFICACIÓN Sonda antes/después 0 diffs (832 valores · 7 estados) · R-5.4 22/64 con las 20 + el patrón adjudicados, exit 0 · component:audit PASS (tras el renombrado) · --names 0 desviadas · censo --only 86 % · eidos-lint 36 morfo-backed / 0 invalid / 0 class-hooks · rtl:check 0 · docs:check 0 · suite eidos 439/440 (el rojo conocido) · el ledger sigue en sus 63 hunks de prettier previos. Rama con cuatro sesiones en paralelo: índice construido desde HEAD + sólo mis hunks (base.ts por bloque), verificado con `git diff --cached`. No entra docs/audit/theming/README.md — es un agregado global que ahora mismo mezcla trabajo en vuelo de otras sesiones. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2 months ago
text-decoration-color: var(--form-link-underline-fg);
text-underline-offset: var(--form-link-underline-offset);
}
[data-form-auto-fields-group],
[data-form-auto-fields-array],
[data-form-auto-fields-discriminated],
[data-form-auto-fields-field],
[data-form-auto-fields-placeholder] {
display: grid;
gap: var(--form-auto-fields-gap);
min-inline-size: 0;
}
[data-form-auto-fields-array] {
padding: var(--form-auto-fields-array-padding);
uix(form): temable — 71 % → 86 %, y 24 claves suyas NO PINTAN por una cascada Diez claves nuevas (54 → 64), un literal firmado, veinte adjudicaciones medidas y un hallazgo que espera firma. Diff de computed 0 sobre 832 valores en 7 estados; capturas 2× antes/después. LAS DIEZ IBAN A LOS PRIMITIVOS A PELO El resumen de errores (error-summary-{bg,fg,border}) —es el señalizador de nivel de página y su superficie, su tinta y su borde SON el tono risk—, el acento de formulario inválido (invalid-accent, un privado con UNA sola fuente, no un conmutador), las tres superficies del árbol de AutoFields, las dos del widget y el subrayado a media tinta de los enlaces del resumen (link-underline-fg, el par del -offset que ya existía). ⚠ R-5.3 CAZÓ MI NOMBRE EN EL ACTO: lo acuñé como link-underline-color y la tinta es `fg` (theming §6.7 r7, firmado el 20). Renombrado antes de commitear. El guard de nombres funciona — es el vocabulario DIMENSIONAL el que no cubre (ver badge, hoy mismo). ⚠⚠ VEINTICUATRO CLAVES DEL CONTRATO NO PINTAN, Y ES UNA CASCADA [data-form-submit], [data-form-reset] y los dos botones del array llevan también data-button porque COMPONEN el Button canónico, y [data-button] casa con la MISMA especificidad (0,1,0) pero carga DESPUÉS: gana button.css. Medido propiedad a propiedad sobre el nodo real —altura, padding-inline, tamaño y peso de letra, interlineado, hueco, radio, grosor de borde, el par de transición y la opacidad deshabilitada—: NINGUNA se mueve. Es el defecto que gradient-picker documentó (36 de sus 45 claves) y que emoji-picker encontró hoy en su trigger. Allí la respuesta fue RETIRAR las declaraciones muertas; aquí son 24 claves públicas, y eso es una decisión del autor, no del que ejecuta. Quedan adjudicadas POR PATRÓN (una razón arquitectónica escrita una vez) y anotadas en §13 con la pregunta de fondo, que es la misma de §12.9 con el plano overlay: qué manda, el componente compuesto o la receta que lo compone. Si mandan las recetas, se sube la especificidad y no se retira nada; si mandan los compuestos, hay ~63 claves públicas que retirar en tres componentes. LAS DEMÁS ADJUDICACIONES SON RAMAS QUE LA DEMO NO MONTA El layout grid (forzado alcanza — y ojo: su grid-template-columns sólo CAMBIA si el valor altera el número de columnas; con 90px pasa de una columna de 502px a cuatro de 110,5), el resumen de errores VACÍO (sin <ul> que indentar ni <a> que subrayar) y toda la rama de ARRAY de AutoFields: el modo `auto` de la demo monta group y field, nunca array, item ni widget. Fuera por doctrina: los tres privados del panel son un CONMUTADOR (variante plain contra panel) y los cuatro --_form-action-* leen el forward de paleta THM-2. VERIFICACIÓN Sonda antes/después 0 diffs (832 valores · 7 estados) · R-5.4 22/64 con las 20 + el patrón adjudicados, exit 0 · component:audit PASS (tras el renombrado) · --names 0 desviadas · censo --only 86 % · eidos-lint 36 morfo-backed / 0 invalid / 0 class-hooks · rtl:check 0 · docs:check 0 · suite eidos 439/440 (el rojo conocido) · el ledger sigue en sus 63 hunks de prettier previos. Rama con cuatro sesiones en paralelo: índice construido desde HEAD + sólo mis hunks (base.ts por bloque), verificado con `git diff --cached`. No entra docs/audit/theming/README.md — es un agregado global que ahora mismo mezcla trabajo en vuelo de otras sesiones. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2 months ago
border: var(--form-auto-fields-border-width) solid var(--form-auto-fields-border);
border-radius: var(--form-auto-fields-radius);
uix(form): temable — 71 % → 86 %, y 24 claves suyas NO PINTAN por una cascada Diez claves nuevas (54 → 64), un literal firmado, veinte adjudicaciones medidas y un hallazgo que espera firma. Diff de computed 0 sobre 832 valores en 7 estados; capturas 2× antes/después. LAS DIEZ IBAN A LOS PRIMITIVOS A PELO El resumen de errores (error-summary-{bg,fg,border}) —es el señalizador de nivel de página y su superficie, su tinta y su borde SON el tono risk—, el acento de formulario inválido (invalid-accent, un privado con UNA sola fuente, no un conmutador), las tres superficies del árbol de AutoFields, las dos del widget y el subrayado a media tinta de los enlaces del resumen (link-underline-fg, el par del -offset que ya existía). ⚠ R-5.3 CAZÓ MI NOMBRE EN EL ACTO: lo acuñé como link-underline-color y la tinta es `fg` (theming §6.7 r7, firmado el 20). Renombrado antes de commitear. El guard de nombres funciona — es el vocabulario DIMENSIONAL el que no cubre (ver badge, hoy mismo). ⚠⚠ VEINTICUATRO CLAVES DEL CONTRATO NO PINTAN, Y ES UNA CASCADA [data-form-submit], [data-form-reset] y los dos botones del array llevan también data-button porque COMPONEN el Button canónico, y [data-button] casa con la MISMA especificidad (0,1,0) pero carga DESPUÉS: gana button.css. Medido propiedad a propiedad sobre el nodo real —altura, padding-inline, tamaño y peso de letra, interlineado, hueco, radio, grosor de borde, el par de transición y la opacidad deshabilitada—: NINGUNA se mueve. Es el defecto que gradient-picker documentó (36 de sus 45 claves) y que emoji-picker encontró hoy en su trigger. Allí la respuesta fue RETIRAR las declaraciones muertas; aquí son 24 claves públicas, y eso es una decisión del autor, no del que ejecuta. Quedan adjudicadas POR PATRÓN (una razón arquitectónica escrita una vez) y anotadas en §13 con la pregunta de fondo, que es la misma de §12.9 con el plano overlay: qué manda, el componente compuesto o la receta que lo compone. Si mandan las recetas, se sube la especificidad y no se retira nada; si mandan los compuestos, hay ~63 claves públicas que retirar en tres componentes. LAS DEMÁS ADJUDICACIONES SON RAMAS QUE LA DEMO NO MONTA El layout grid (forzado alcanza — y ojo: su grid-template-columns sólo CAMBIA si el valor altera el número de columnas; con 90px pasa de una columna de 502px a cuatro de 110,5), el resumen de errores VACÍO (sin <ul> que indentar ni <a> que subrayar) y toda la rama de ARRAY de AutoFields: el modo `auto` de la demo monta group y field, nunca array, item ni widget. Fuera por doctrina: los tres privados del panel son un CONMUTADOR (variante plain contra panel) y los cuatro --_form-action-* leen el forward de paleta THM-2. VERIFICACIÓN Sonda antes/después 0 diffs (832 valores · 7 estados) · R-5.4 22/64 con las 20 + el patrón adjudicados, exit 0 · component:audit PASS (tras el renombrado) · --names 0 desviadas · censo --only 86 % · eidos-lint 36 morfo-backed / 0 invalid / 0 class-hooks · rtl:check 0 · docs:check 0 · suite eidos 439/440 (el rojo conocido) · el ledger sigue en sus 63 hunks de prettier previos. Rama con cuatro sesiones en paralelo: índice construido desde HEAD + sólo mis hunks (base.ts por bloque), verificado con `git diff --cached`. No entra docs/audit/theming/README.md — es un agregado global que ahora mismo mezcla trabajo en vuelo de otras sesiones. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2 months ago
background: var(--form-auto-fields-array-bg);
}
[data-form-auto-fields-array-toolbar],
[data-form-auto-fields-item-toolbar] {
display: flex;
align-items: center;
justify-content: space-between;
gap: var(--form-action-gap);
}
[data-form-auto-fields-item] {
display: grid;
gap: var(--form-auto-fields-item-gap);
padding: var(--form-auto-fields-item-padding);
border-radius: var(--form-auto-fields-radius);
uix(form): temable — 71 % → 86 %, y 24 claves suyas NO PINTAN por una cascada Diez claves nuevas (54 → 64), un literal firmado, veinte adjudicaciones medidas y un hallazgo que espera firma. Diff de computed 0 sobre 832 valores en 7 estados; capturas 2× antes/después. LAS DIEZ IBAN A LOS PRIMITIVOS A PELO El resumen de errores (error-summary-{bg,fg,border}) —es el señalizador de nivel de página y su superficie, su tinta y su borde SON el tono risk—, el acento de formulario inválido (invalid-accent, un privado con UNA sola fuente, no un conmutador), las tres superficies del árbol de AutoFields, las dos del widget y el subrayado a media tinta de los enlaces del resumen (link-underline-fg, el par del -offset que ya existía). ⚠ R-5.3 CAZÓ MI NOMBRE EN EL ACTO: lo acuñé como link-underline-color y la tinta es `fg` (theming §6.7 r7, firmado el 20). Renombrado antes de commitear. El guard de nombres funciona — es el vocabulario DIMENSIONAL el que no cubre (ver badge, hoy mismo). ⚠⚠ VEINTICUATRO CLAVES DEL CONTRATO NO PINTAN, Y ES UNA CASCADA [data-form-submit], [data-form-reset] y los dos botones del array llevan también data-button porque COMPONEN el Button canónico, y [data-button] casa con la MISMA especificidad (0,1,0) pero carga DESPUÉS: gana button.css. Medido propiedad a propiedad sobre el nodo real —altura, padding-inline, tamaño y peso de letra, interlineado, hueco, radio, grosor de borde, el par de transición y la opacidad deshabilitada—: NINGUNA se mueve. Es el defecto que gradient-picker documentó (36 de sus 45 claves) y que emoji-picker encontró hoy en su trigger. Allí la respuesta fue RETIRAR las declaraciones muertas; aquí son 24 claves públicas, y eso es una decisión del autor, no del que ejecuta. Quedan adjudicadas POR PATRÓN (una razón arquitectónica escrita una vez) y anotadas en §13 con la pregunta de fondo, que es la misma de §12.9 con el plano overlay: qué manda, el componente compuesto o la receta que lo compone. Si mandan las recetas, se sube la especificidad y no se retira nada; si mandan los compuestos, hay ~63 claves públicas que retirar en tres componentes. LAS DEMÁS ADJUDICACIONES SON RAMAS QUE LA DEMO NO MONTA El layout grid (forzado alcanza — y ojo: su grid-template-columns sólo CAMBIA si el valor altera el número de columnas; con 90px pasa de una columna de 502px a cuatro de 110,5), el resumen de errores VACÍO (sin <ul> que indentar ni <a> que subrayar) y toda la rama de ARRAY de AutoFields: el modo `auto` de la demo monta group y field, nunca array, item ni widget. Fuera por doctrina: los tres privados del panel son un CONMUTADOR (variante plain contra panel) y los cuatro --_form-action-* leen el forward de paleta THM-2. VERIFICACIÓN Sonda antes/después 0 diffs (832 valores · 7 estados) · R-5.4 22/64 con las 20 + el patrón adjudicados, exit 0 · component:audit PASS (tras el renombrado) · --names 0 desviadas · censo --only 86 % · eidos-lint 36 morfo-backed / 0 invalid / 0 class-hooks · rtl:check 0 · docs:check 0 · suite eidos 439/440 (el rojo conocido) · el ledger sigue en sus 63 hunks de prettier previos. Rama con cuatro sesiones en paralelo: índice construido desde HEAD + sólo mis hunks (base.ts por bloque), verificado con `git diff --cached`. No entra docs/audit/theming/README.md — es un agregado global que ahora mismo mezcla trabajo en vuelo de otras sesiones. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2 months ago
background: var(--form-auto-fields-item-bg);
}
[data-form-auto-fields-widget] {
min-block-size: var(--_form-action-height);
feat(audit): component re-audit + fixes P0–P5 (P4 complete, P5 in progress) Re-audit of the whole component catalog at pilot depth (91 fichas + the checkpoint verdicts in docs/audit/components/) and the executed fix packages. - P0–P3: doctrine (sema participation, CANON §3 intent, component-guide §5 + API naming, §32 outline), guards (morfo-vocabulary-check S10/S11d, component-audit A-3.1/A-1.4/S9, eidos-lint classHooks), morfo contracts (role=application removed ×4, aria-selected off the Day, drp translationRef, field data-state prune, pin-input commit-set, media-player renames), 13 new sema packs + 12 morfos family-default → pack. - P4 (N1–N10) COMPLETE: selectionMode (select/combobox/toggle-group/calendar); onValueCommit terminal-callback norm (pin-input/search/password/textarea + date/time/color-field add); typed validation reason + onInvalid (tags-input, css-field); index/onIndexChange (carousel); deselectable; openDelay/ groupSkipDelay; allowCustomValue; defaultValue prune. - P5 (in progress): S1 class-hooks codemod (22 hooks → data-attrs across cropper/button/image-picker/toggle/image-adjustments); S5 outline remnant in field.css; depth pass (data-depth=overlay on tooltip/toast/float-panel); touch-rows (--touch-target token, decoupled ::before hit-slop, area-not-visual, 44 AAA). S6 (Field composition) + S8 (calendar-surface) pending. Verification: errors-outside-(alpha|words|palabras|chronos) == 59 (baseline); morfo-vocabulary-check exit 0; eidos-lint class-hooks/invalid 0 on touched components; per-component vitest suites green. Handoff + remaining plan: docs/process/continue-audit-fixes-2026-07.md Excluded (broken by the N1 rename, left broken per user decision, not staged): words/**, palabras/**, chronos, web/routes/alpha/**. Reconciliation pending: the touch-rows ::before for checkbox/switch reverses changelog §37's earlier pseudo-element rejection (WCAG-overlap) that had routed markers to a labeled-row/Field task — flagged for the user in the handoff. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
3 months ago
padding-inline: var(--form-widget-padding-inline);
uix(form): temable — 71 % → 86 %, y 24 claves suyas NO PINTAN por una cascada Diez claves nuevas (54 → 64), un literal firmado, veinte adjudicaciones medidas y un hallazgo que espera firma. Diff de computed 0 sobre 832 valores en 7 estados; capturas 2× antes/después. LAS DIEZ IBAN A LOS PRIMITIVOS A PELO El resumen de errores (error-summary-{bg,fg,border}) —es el señalizador de nivel de página y su superficie, su tinta y su borde SON el tono risk—, el acento de formulario inválido (invalid-accent, un privado con UNA sola fuente, no un conmutador), las tres superficies del árbol de AutoFields, las dos del widget y el subrayado a media tinta de los enlaces del resumen (link-underline-fg, el par del -offset que ya existía). ⚠ R-5.3 CAZÓ MI NOMBRE EN EL ACTO: lo acuñé como link-underline-color y la tinta es `fg` (theming §6.7 r7, firmado el 20). Renombrado antes de commitear. El guard de nombres funciona — es el vocabulario DIMENSIONAL el que no cubre (ver badge, hoy mismo). ⚠⚠ VEINTICUATRO CLAVES DEL CONTRATO NO PINTAN, Y ES UNA CASCADA [data-form-submit], [data-form-reset] y los dos botones del array llevan también data-button porque COMPONEN el Button canónico, y [data-button] casa con la MISMA especificidad (0,1,0) pero carga DESPUÉS: gana button.css. Medido propiedad a propiedad sobre el nodo real —altura, padding-inline, tamaño y peso de letra, interlineado, hueco, radio, grosor de borde, el par de transición y la opacidad deshabilitada—: NINGUNA se mueve. Es el defecto que gradient-picker documentó (36 de sus 45 claves) y que emoji-picker encontró hoy en su trigger. Allí la respuesta fue RETIRAR las declaraciones muertas; aquí son 24 claves públicas, y eso es una decisión del autor, no del que ejecuta. Quedan adjudicadas POR PATRÓN (una razón arquitectónica escrita una vez) y anotadas en §13 con la pregunta de fondo, que es la misma de §12.9 con el plano overlay: qué manda, el componente compuesto o la receta que lo compone. Si mandan las recetas, se sube la especificidad y no se retira nada; si mandan los compuestos, hay ~63 claves públicas que retirar en tres componentes. LAS DEMÁS ADJUDICACIONES SON RAMAS QUE LA DEMO NO MONTA El layout grid (forzado alcanza — y ojo: su grid-template-columns sólo CAMBIA si el valor altera el número de columnas; con 90px pasa de una columna de 502px a cuatro de 110,5), el resumen de errores VACÍO (sin <ul> que indentar ni <a> que subrayar) y toda la rama de ARRAY de AutoFields: el modo `auto` de la demo monta group y field, nunca array, item ni widget. Fuera por doctrina: los tres privados del panel son un CONMUTADOR (variante plain contra panel) y los cuatro --_form-action-* leen el forward de paleta THM-2. VERIFICACIÓN Sonda antes/después 0 diffs (832 valores · 7 estados) · R-5.4 22/64 con las 20 + el patrón adjudicados, exit 0 · component:audit PASS (tras el renombrado) · --names 0 desviadas · censo --only 86 % · eidos-lint 36 morfo-backed / 0 invalid / 0 class-hooks · rtl:check 0 · docs:check 0 · suite eidos 439/440 (el rojo conocido) · el ledger sigue en sus 63 hunks de prettier previos. Rama con cuatro sesiones en paralelo: índice construido desde HEAD + sólo mis hunks (base.ts por bloque), verificado con `git diff --cached`. No entra docs/audit/theming/README.md — es un agregado global que ahora mismo mezcla trabajo en vuelo de otras sesiones. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2 months ago
border: var(--form-widget-border-width) solid var(--form-widget-border);
border-radius: var(--form-widget-radius);
uix(form): temable — 71 % → 86 %, y 24 claves suyas NO PINTAN por una cascada Diez claves nuevas (54 → 64), un literal firmado, veinte adjudicaciones medidas y un hallazgo que espera firma. Diff de computed 0 sobre 832 valores en 7 estados; capturas 2× antes/después. LAS DIEZ IBAN A LOS PRIMITIVOS A PELO El resumen de errores (error-summary-{bg,fg,border}) —es el señalizador de nivel de página y su superficie, su tinta y su borde SON el tono risk—, el acento de formulario inválido (invalid-accent, un privado con UNA sola fuente, no un conmutador), las tres superficies del árbol de AutoFields, las dos del widget y el subrayado a media tinta de los enlaces del resumen (link-underline-fg, el par del -offset que ya existía). ⚠ R-5.3 CAZÓ MI NOMBRE EN EL ACTO: lo acuñé como link-underline-color y la tinta es `fg` (theming §6.7 r7, firmado el 20). Renombrado antes de commitear. El guard de nombres funciona — es el vocabulario DIMENSIONAL el que no cubre (ver badge, hoy mismo). ⚠⚠ VEINTICUATRO CLAVES DEL CONTRATO NO PINTAN, Y ES UNA CASCADA [data-form-submit], [data-form-reset] y los dos botones del array llevan también data-button porque COMPONEN el Button canónico, y [data-button] casa con la MISMA especificidad (0,1,0) pero carga DESPUÉS: gana button.css. Medido propiedad a propiedad sobre el nodo real —altura, padding-inline, tamaño y peso de letra, interlineado, hueco, radio, grosor de borde, el par de transición y la opacidad deshabilitada—: NINGUNA se mueve. Es el defecto que gradient-picker documentó (36 de sus 45 claves) y que emoji-picker encontró hoy en su trigger. Allí la respuesta fue RETIRAR las declaraciones muertas; aquí son 24 claves públicas, y eso es una decisión del autor, no del que ejecuta. Quedan adjudicadas POR PATRÓN (una razón arquitectónica escrita una vez) y anotadas en §13 con la pregunta de fondo, que es la misma de §12.9 con el plano overlay: qué manda, el componente compuesto o la receta que lo compone. Si mandan las recetas, se sube la especificidad y no se retira nada; si mandan los compuestos, hay ~63 claves públicas que retirar en tres componentes. LAS DEMÁS ADJUDICACIONES SON RAMAS QUE LA DEMO NO MONTA El layout grid (forzado alcanza — y ojo: su grid-template-columns sólo CAMBIA si el valor altera el número de columnas; con 90px pasa de una columna de 502px a cuatro de 110,5), el resumen de errores VACÍO (sin <ul> que indentar ni <a> que subrayar) y toda la rama de ARRAY de AutoFields: el modo `auto` de la demo monta group y field, nunca array, item ni widget. Fuera por doctrina: los tres privados del panel son un CONMUTADOR (variante plain contra panel) y los cuatro --_form-action-* leen el forward de paleta THM-2. VERIFICACIÓN Sonda antes/después 0 diffs (832 valores · 7 estados) · R-5.4 22/64 con las 20 + el patrón adjudicados, exit 0 · component:audit PASS (tras el renombrado) · --names 0 desviadas · censo --only 86 % · eidos-lint 36 morfo-backed / 0 invalid / 0 class-hooks · rtl:check 0 · docs:check 0 · suite eidos 439/440 (el rojo conocido) · el ledger sigue en sus 63 hunks de prettier previos. Rama con cuatro sesiones en paralelo: índice construido desde HEAD + sólo mis hunks (base.ts por bloque), verificado con `git diff --cached`. No entra docs/audit/theming/README.md — es un agregado global que ahora mismo mezcla trabajo en vuelo de otras sesiones. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2 months ago
background: var(--form-widget-bg);
refactor(eidos): el catálogo habla un idioma — 269 claves al vocabulario firmado D-TH.6, ejecutada. El slot de tinta pasa a `fg` y el modificador interactivo se pone delante, que es lo que theming §6.7 r7 documentaba sin guard desde que se escribió. Value-preserving: renombra la clave en `recipes/base.ts` y sus 793 referencias en 101 ficheros; no toca un solo valor. claves renombradas 269 en 66 componentes referencias 793 en 101 ficheros censo antes/después 162 recetas · 5.203 knobs · 1.841 públicos (37 %) · 56 sin contrato — IDÉNTICO, como debe ser un rename --names antes/después 269 desviadas → 0 Qué NO entra, y por qué: 47 `{rol}-{slot-de-rol}` canónicas: COLOR_ROLE_SLOTS pone el modificador detrás POR CONSTRUCCIÓN (`primary-solid-hover`) 13 exentas firmadas `--focus-ring-*` es familia del sistema; el color de `aura` es un sustantivo; `stop-color` ES una parte de gradient-builder 47 hovers neutros por VALOR: migran a la capa de estado (§38 + R-4.3), no se renombran — firma 3 6 ocurrencias en historia changelog, errores-toxico, PLAN-affix/background: reescribir un registro fechado lo vuelve mentira El clasificador vive en el censo (`--names`), no en un script suelto, para que el guard R-5.3 consuma la MISMA gramática que el codemod. Su muta-prueba (`__names-mutatest.ts`, 27 casos) es lo que hizo el trabajo: cazó que yo promovía al frente CUALQUIER valor declarado por el morfo, y así `--sidebar-width-icon` (la anchura del raíl colapsado) se convertía en `--sidebar-icon-width` (la anchura de un icono), que es otra cosa. La firma dice «delante lo interactivo, detrás lo dimensional y contextual»: ahora sólo promociona el vocabulario interactivo cerrado, y lo contextual —`below`, `loaded`, `vertical`, `icon`— se queda donde estaba. Los cinco casos de regresión están en la muta-prueba. También cazó que `dropdown-menu.item-bg-hover` lee `var(--color-primary-element)`: es un hover CON VALENCIA (el palette swap de recipe-contract §2), no el hover bespoke que §38 deprecó. Clasificar por el nombre lo habría metido en una migración que no le toca; se clasifica por el VALOR. Verificación (§7.4, artefacto por paso): diff de generated/ 269 renombres 1:1 · 0 cambios de valor · 22 privados reapuntados a los nombres nuevos (`__names-verify-diff`) computed tag-group · field · tabs: 6.467 valores en 23 estados, 0 diffs — y comprobado en el navegador que sirve el CSS nuevo, para que ese 0 no sea el de una copia cacheada huérfanos 0 en código suite eidos 434 pasan · 1 rojo, el conocido (`skin-media-player`). `recipe-css-contract` verde: es el guard que caza el `var()` sin fallback a un nombre que ya no se emite, o sea el fallo exacto de un rename a medias component:audit 163 PASS · 3 NEEDS-WORK, los tres SIN TOCAR por esto check 0 errores en ficheros tocados (los 73 globales son de otras sesiones de la rama; se atribuye por fichero) rtl:check 0 · docs:check 0 formato el renombrado no alarga ninguna línea: ningún fichero tiene más líneas de 100 chars que antes, así que no se pasa prettier — hacerlo reformateaba 300 ficheros de deriva ajena Entra aquí la corrección del repaso de los 7 ya hechos: `gradient-builder.checker-color` → `checker-fg` (el damero de transparencia; ahí `color` era slot). Sus `stop-color-*` no se tocan. Queda para el paso siguiente: R-5.3 no puede graduar a `error` directo mientras los 47 hovers neutros sigan hablando el idioma viejo — o migran antes (firma 3, ya firmada), o el guard necesita una exención greppable. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2 months ago
color: var(--form-fg);
font: inherit;
}

Powered by TurnKey Linux.