@adia-ai/adia-ui-forge 0.8.62 → 0.8.64

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (143) hide show
  1. package/.claude-plugin/plugin.json +2 -2
  2. package/.codex-plugin/plugin.json +3 -3
  3. package/CHANGELOG.md +317 -275
  4. package/README.md +54 -18
  5. package/__init__.py +8 -8
  6. package/agents/a2ui-maintenance-agent.corpus.json +7 -7
  7. package/agents/a2ui-maintenance-agent.md +6 -6
  8. package/agents/a2ui-planner-agent.md +11 -11
  9. package/agents/demo-audit-agent.corpus.json +4 -4
  10. package/agents/demo-audit-agent.md +8 -9
  11. package/agents/framework-checker.md +10 -11
  12. package/agents/framework-planner-agent.md +9 -10
  13. package/agents/gen-ui-review-agent.corpus.json +4 -4
  14. package/agents/gen-ui-review-agent.md +8 -8
  15. package/agents/package-release-agent.corpus.json +4 -4
  16. package/agents/package-release-agent.md +9 -10
  17. package/agents/primitive-authoring-agent.corpus.json +1 -1
  18. package/agents/primitive-authoring-agent.md +5 -5
  19. package/agents/routing-corpus.json +46 -46
  20. package/codex.interface.json +1 -1
  21. package/commands/gen-ui-review.md +1 -1
  22. package/commands/package-release.md +2 -2
  23. package/package.json +1 -1
  24. package/plugin.yaml +2 -2
  25. package/prompts/gen-ui-review.md +1 -1
  26. package/prompts/package-release.md +2 -2
  27. package/references/contracts/a2ui-mcp-surface.md +7 -7
  28. package/references/contracts/migration-guide-format.md +6 -7
  29. package/references/shared/content-trust.md +3 -5
  30. package/skills/a2ui-maintenance/SKILL.md +13 -16
  31. package/skills/a2ui-maintenance/evals/evals.json +2 -2
  32. package/skills/a2ui-maintenance/evals/routing-corpus.json +1 -1
  33. package/skills/a2ui-maintenance/references/anti-patterns.md +10 -10
  34. package/skills/a2ui-maintenance/references/chunk-authoring.md +11 -12
  35. package/skills/a2ui-maintenance/references/corpus-discipline.md +13 -14
  36. package/skills/a2ui-maintenance/references/data-model-reactivity.md +22 -25
  37. package/skills/a2ui-maintenance/references/eval-diagnostics.md +21 -21
  38. package/skills/a2ui-maintenance/references/format-extension-decisions.md +12 -13
  39. package/skills/a2ui-maintenance/references/leverage-rules.md +6 -6
  40. package/skills/a2ui-maintenance/references/mcp-pipeline-ops.md +9 -10
  41. package/skills/a2ui-maintenance/references/mcp-tool-reference.md +11 -12
  42. package/skills/a2ui-maintenance/references/pipeline-overview.md +33 -38
  43. package/skills/a2ui-maintenance/references/semantic-fail-lifting.md +13 -14
  44. package/skills/a2ui-maintenance/references/strategy-engines.md +14 -16
  45. package/skills/a2ui-maintenance/references/surface-lifecycle.md +10 -11
  46. package/skills/a2ui-maintenance/references/zettel-calibration.md +14 -16
  47. package/skills/component-md-authoring/SKILL.md +22 -22
  48. package/skills/component-md-authoring/agents/openai.yaml +1 -1
  49. package/skills/cross-harness-authoring-standards/SKILL.md +19 -21
  50. package/skills/cross-harness-authoring-standards/agents/openai.yaml +1 -1
  51. package/skills/cross-harness-compatibility-standards/SKILL.md +35 -34
  52. package/skills/cross-harness-compatibility-standards/agents/openai.yaml +1 -1
  53. package/skills/demo-audit/SKILL.md +38 -38
  54. package/skills/demo-audit/evals/routing-corpus.json +1 -1
  55. package/skills/demo-audit/references/admin-shell-anatomy.md +21 -25
  56. package/skills/demo-audit/references/app-shell-pitfalls.md +11 -13
  57. package/skills/demo-audit/references/auto-fix-allowlist.md +3 -3
  58. package/skills/demo-audit/references/card-anatomy-sweep.md +10 -11
  59. package/skills/demo-audit/references/chat-shell-anatomy.md +25 -26
  60. package/skills/demo-audit/references/editor-shell-anatomy.md +25 -28
  61. package/skills/demo-audit/references/html-attr-sweep.md +12 -13
  62. package/skills/demo-audit/references/mode7-status-battery.md +4 -4
  63. package/skills/demo-audit/references/native-leak-annotations.md +8 -8
  64. package/skills/demo-audit/references/output-contract-worked-example.md +8 -8
  65. package/skills/demo-audit/references/probe-discipline-and-escalation.md +2 -2
  66. package/skills/demo-audit/references/visual-probe-triage.md +21 -23
  67. package/skills/gen-ui-review/SKILL.md +28 -28
  68. package/skills/gen-ui-review/agents/openai.yaml +1 -1
  69. package/skills/gen-ui-review/evals/evals.json +1 -1
  70. package/skills/gen-ui-review/evals/routing-corpus.json +1 -1
  71. package/skills/gen-ui-review/references/corpus-html-patterns.md +28 -29
  72. package/skills/gen-ui-review/references/exit-gate-mechanics.md +5 -5
  73. package/skills/gen-ui-review/references/lookup-maintenance.md +2 -2
  74. package/skills/gen-ui-review/references/loop-protocol.md +25 -25
  75. package/skills/gen-ui-review/references/rubric-cosmetic.md +10 -10
  76. package/skills/gen-ui-review/references/rubric-decompose.md +15 -16
  77. package/skills/gen-ui-review/references/rubric-score.md +23 -24
  78. package/skills/gen-ui-review/references/scorecard-worked-examples.md +12 -12
  79. package/skills/gen-ui-review/references/scores.schema.json +2 -2
  80. package/skills/llm-client-maintenance/SKILL.md +12 -12
  81. package/skills/llm-client-maintenance/evals/routing-corpus.json +1 -1
  82. package/skills/llm-client-maintenance/references/adapter-contract.md +27 -27
  83. package/skills/llm-client-maintenance/references/add-a-provider.md +25 -25
  84. package/skills/llm-client-maintenance/references/bridge-facade.md +31 -31
  85. package/skills/llm-client-maintenance/references/browser-proxy-boundary.md +17 -17
  86. package/skills/llm-client-maintenance/references/model-registry.md +14 -14
  87. package/skills/llm-client-maintenance/references/streaming-sse.md +21 -21
  88. package/skills/package-release/SKILL.md +21 -23
  89. package/skills/package-release/evals/evals.json +2 -2
  90. package/skills/package-release/evals/routing-corpus.json +2 -2
  91. package/skills/package-release/references/authorization-model.md +6 -8
  92. package/skills/package-release/references/changelog-discipline.md +25 -27
  93. package/skills/package-release/references/cut-procedure.md +129 -136
  94. package/skills/package-release/references/gates-catalog.md +42 -43
  95. package/skills/package-release/references/independent-package-release.md +14 -15
  96. package/skills/package-release/references/invariants-detail.md +9 -9
  97. package/skills/package-release/references/mechanization.md +11 -12
  98. package/skills/package-release/references/migration-guide-authoring.md +20 -20
  99. package/skills/package-release/references/notes-authoring.md +20 -20
  100. package/skills/package-release/references/recovery-paths.md +28 -28
  101. package/skills/primitive-authoring/SKILL.md +19 -19
  102. package/skills/primitive-authoring/agents/openai.yaml +1 -1
  103. package/skills/primitive-authoring/evals/evals.json +2 -2
  104. package/skills/primitive-authoring/evals/routing-corpus.json +2 -2
  105. package/skills/primitive-authoring/references/INDEX.md +22 -22
  106. package/skills/primitive-authoring/references/anti-patterns.md +76 -77
  107. package/skills/primitive-authoring/references/api-contract.md +63 -65
  108. package/skills/primitive-authoring/references/authoring-cycle.md +47 -50
  109. package/skills/primitive-authoring/references/canonical-pattern-index.md +118 -118
  110. package/skills/primitive-authoring/references/code-style.md +50 -52
  111. package/skills/primitive-authoring/references/common-gotchas.md +23 -23
  112. package/skills/primitive-authoring/references/composite-demo-protocol.md +42 -45
  113. package/skills/primitive-authoring/references/css-patterns.md +97 -97
  114. package/skills/primitive-authoring/references/for-attribute-event-contract.md +12 -12
  115. package/skills/primitive-authoring/references/form-control-sizing.md +16 -18
  116. package/skills/primitive-authoring/references/lifecycle-patterns.md +42 -42
  117. package/skills/primitive-authoring/references/llm-bridge.md +21 -21
  118. package/skills/primitive-authoring/references/module-promotion.md +51 -51
  119. package/skills/primitive-authoring/references/primitive-audit.md +16 -16
  120. package/skills/primitive-authoring/references/shell-patterns.md +81 -81
  121. package/skills/primitive-authoring/references/svg-authoring.md +62 -66
  122. package/skills/primitive-authoring/references/token-contract.md +45 -49
  123. package/skills/primitive-authoring/references/trait-pages.md +8 -8
  124. package/skills/primitive-authoring/references/worked-example.md +39 -39
  125. package/skills/primitive-authoring/references/yaml-contract.md +139 -143
  126. package/skills/site-deployment/SKILL.md +25 -26
  127. package/skills/site-deployment/agents/openai.yaml +1 -1
  128. package/skills/site-deployment/evals/routing-corpus.json +1 -1
  129. package/skills/site-deployment/references/deploy-playbooks.md +51 -53
  130. package/skills/site-docs-authoring/SKILL.md +14 -14
  131. package/skills/site-docs-authoring/agents/openai.yaml +1 -1
  132. package/skills/site-docs-authoring/evals/evals.json +1 -1
  133. package/skills/site-docs-authoring/evals/routing-corpus.json +1 -1
  134. package/skills/site-docs-authoring/intent.md +18 -18
  135. package/skills/ssr-compatibility/SKILL.md +24 -25
  136. package/skills/ssr-compatibility/agents/openai.yaml +1 -1
  137. package/skills/ssr-compatibility/evals/evals.json +1 -1
  138. package/skills/ssr-compatibility/evals/routing-corpus.json +1 -1
  139. package/skills/ssr-compatibility/references/consumer-workarounds.md +22 -23
  140. package/skills/ssr-compatibility/references/failure-shapes.md +84 -91
  141. package/skills/ssr-compatibility/references/guard-patterns.md +54 -58
  142. package/skills/ssr-compatibility/references/status-ledger.md +17 -17
  143. package/skills/ssr-compatibility/references/test-without-linkedom.md +26 -27
@@ -1,15 +1,15 @@
1
- # Trait Detail Pages the required template
1
+ # Trait Detail Pages, the required template
2
2
 
3
3
  Every trait detail page under `site/pages/traits/<name>/` follows one binding section template. The 41-page Phase B sweep proved what a loose contract produces: bimodal quality (portfolio-grade pages next to abstract-box demos) and zero pages teaching restraint. Navigate-by-template is the contract. Source: ADR-0019.
4
4
 
5
- Trait pages are this skill's charter (traits live in `packages/web-components/traits/`); `site-docs-authoring` owns `site/pages/{architecture,getting-started,guides,patterns,reference}` not `traits/`.
5
+ Trait pages are this skill's charter (traits live in `packages/web-components/traits/`); `site-docs-authoring` owns `site/pages/{architecture,getting-started,guides,patterns,reference}`, not `traits/`.
6
6
 
7
7
  ## Required sections, in order
8
8
 
9
9
  | # | Section (`data-property=`) | Required? | Purpose |
10
10
  |---|---|---|---|
11
11
  | 1 | `<header>` | always | `<h1>` trait name + `<tag-ui>trait</tag-ui>` + category tag matching `_catalog.json` SoT |
12
- | 2 | `hero` | always | "In context" demo with real product chrome no abstract boxes |
12
+ | 2 | `hero` | always | "In context" demo with real product chrome, no abstract boxes |
13
13
  | 3 | `minimal` | always | Single-tag declarative usage; `<h2>` reads "Bare minimum" |
14
14
  | 4 | `declarative` | always | `<X traits="trait-name">` code-ui block |
15
15
  | 5 | `config` | conditional | Only when the trait declares `config` attrs in `defineTrait()`; live sliders + readouts |
@@ -26,13 +26,13 @@ Trait-specific extras (`state`, `lifecycle`, scenario `usage` recipes) slot betw
26
26
 
27
27
  - `data-property` values are lowercase hyphen-separated tokens; canonical set as in the table. **`minimal`, not `bare`.**
28
28
  - `data-artifact-label` values are lowercase descriptive prose ("settle log") OR code-shaped strings describing the demo axis (`speed=120 (slow, dramatic)`). HTML-entity escapes inside attribute values are correct.
29
- - Header category tag MUST match the trait's `category` in `packages/web-components/traits/_catalog.json` catalog SoT, never page-author judgment.
30
- - Imports in code-ui blocks use the full package name `@adia-ai/web-components/traits` never internal aliases like `@traits/index.js`.
29
+ - Header category tag MUST match the trait's `category` in `packages/web-components/traits/_catalog.json`, catalog SoT, never page-author judgment.
30
+ - Imports in code-ui blocks use the full package name `@adia-ai/web-components/traits`, never internal aliases like `@traits/index.js`.
31
31
  - Inline-style tokens use canonical names: `--a-border` (dashed borders), `--a-radius-md` / `--a-radius-lg`, `--a-accent` / `--a-accent-fg`.
32
32
 
33
33
  ## The two teeth
34
34
 
35
- - **`when-not-to-use` is the highest-impact section.** A page shipping without it defaults to "this trait is good, please use it" wrong for every trait once overuse, density, or a11y tradeoffs enter. The restraint mandate is the pedagogy differentiator (Motion / GSAP / React Spring all whiff on it). Fewer than 2 bullets requires an articulated why.
36
- - **Composes must SHOW.** Listing trait names with prose-only descriptions does not satisfy the contract at least one composition runs as a working demo.
35
+ - **`when-not-to-use` is the highest-impact section.** A page shipping without it defaults to "this trait is good, please use it", wrong for every trait once overuse, density, or a11y tradeoffs enter. The restraint mandate is the pedagogy differentiator (Motion / GSAP / React Spring all whiff on it). Fewer than 2 bullets requires an articulated why.
36
+ - **Composes must SHOW.** Listing trait names with prose-only descriptions does not satisfy the contract, at least one composition runs as a working demo.
37
37
 
38
- No mechanical gate enforces this template yet (ADR-0019's verify-trait-pages.mjs was deferred and does not exist) the 11-section contract is enforced at PR review. Source: ADR-0019.
38
+ No mechanical gate enforces this template yet (ADR-0019's verify-trait-pages.mjs was deferred and does not exist): the 11-section contract is enforced at PR review. Source: ADR-0019.
@@ -2,7 +2,7 @@
2
2
 
3
3
  Two annotated examples: a light presentation component (`<badge-ui>`) and a form-associated component (`<counter-ui>`). Copy the structure; adapt the content.
4
4
 
5
- ## Example 1 Light presentation component: `<badge-ui>`
5
+ ## Example 1, Light presentation component: `<badge-ui>`
6
6
 
7
7
  A small inline container for status labels. Supports cosmetic variants (primary/success/danger) and an optional remove button that fires a `remove` event.
8
8
 
@@ -10,24 +10,24 @@ A small inline container for status labels. Supports cosmetic variants (primary/
10
10
 
11
11
  The REAL anatomy every shipped primitive carries (this example's code blocks
12
12
  below show only the two hand-authored core files, but "copy the structure"
13
- means all of these the yaml SoT and its regenerated artifacts are not
13
+ means all of these: the yaml SoT and its regenerated artifacts are not
14
14
  optional):
15
15
 
16
16
  ```text
17
17
  packages/web-components/components/badge/
18
- badge.yaml # SoT props/slots/events contract (yaml-contract.md); edit FIRST
18
+ badge.yaml # SoT, props/slots/events contract (yaml-contract.md); edit FIRST
19
19
  badge.class.js # the class, non-registering export (test isolation / subclassing)
20
20
  badge.js # side-effect registration wrapper: import class + defineIfFree()
21
21
  badge.css # @scope'd styles
22
22
  badge.html # standalone demo page
23
23
  badge.examples.html # docs-site examples
24
24
  badge.examples.md # examples prose
25
- badge.a2ui.json # GENERATED from the yaml (npm run build:components) never hand-edit
25
+ badge.a2ui.json # GENERATED from the yaml (npm run build:components), never hand-edit
26
26
  badge.d.ts # GENERATED types
27
27
  ```
28
28
 
29
29
  The code below collapses the class + registration into one `badge.js` for
30
- reading compactness only a real component splits them
30
+ reading compactness only, a real component splits them
31
31
  (`badge.class.js` exports, `badge.js` registers).
32
32
 
33
33
  ### `badge.js`
@@ -36,14 +36,14 @@ reading compactness only — a real component splits them
36
36
  import { UIElement } from '../../core/element.js';
37
37
 
38
38
  /**
39
- * <badge-ui> Compact inline status label.
39
+ * <badge-ui>, Compact inline status label.
40
40
  *
41
41
  * Props:
42
- * variant 'neutral' | 'primary' | 'success' | 'danger' (default 'neutral')
43
- * removable show an inline × button that fires 'remove' on click
42
+ * variant, 'neutral' | 'primary' | 'success' | 'danger' (default 'neutral')
43
+ * removable, show an inline × button that fires 'remove' on click
44
44
  *
45
45
  * Events:
46
- * remove user clicked the × button (bubbles)
46
+ * remove, user clicked the × button (bubbles)
47
47
  */
48
48
  class UIBadge extends UIElement {
49
49
  static properties = {
@@ -87,13 +87,13 @@ export { UIBadge };
87
87
 
88
88
  **Annotations:**
89
89
 
90
- - **Class name `UIBadge`, tag `badge-ui`** three-way naming.
91
- - **`variant` default `'neutral'`** string enum, default is the absent- attribute state. No special behavior to "opt into."
92
- - **`removable: default false`** Boolean false (rule 1). Reflects so CSS can match `:scope[removable]`.
93
- - **`#removeBtn` private field** cached DOM ref, nulled on teardown.
94
- - **`#onRemove` stable arrow** reference equality works for `removeEventListener`.
95
- - **Symmetric connected/disconnected** single listener, single removal.
96
- - **Idempotent `connected()`** checks `querySelector('[data-badge-remove]')` before injecting, so an author who pre-slots their own button isn't overridden.
90
+ - **Class name `UIBadge`, tag `badge-ui`**, three-way naming.
91
+ - **`variant` default `'neutral'`**, string enum, default is the absent- attribute state. No special behavior to "opt into."
92
+ - **`removable: default false`**, Boolean false (rule 1). Reflects so CSS can match `:scope[removable]`.
93
+ - **`#removeBtn` private field**, cached DOM ref, nulled on teardown.
94
+ - **`#onRemove` stable arrow**, reference equality works for `removeEventListener`.
95
+ - **Symmetric connected/disconnected**, single listener, single removal.
96
+ - **Idempotent `connected()`**, checks `querySelector('[data-badge-remove]')` before injecting, so an author who pre-slots their own button isn't overridden.
97
97
 
98
98
  ### `badge.css`
99
99
 
@@ -111,7 +111,7 @@ export { UIBadge };
111
111
  }
112
112
 
113
113
  :scope {
114
- /* ── Base styles consume component tokens only ── */
114
+ /* ── Base styles, consume component tokens only ── */
115
115
  display: inline-flex;
116
116
  align-items: center;
117
117
  gap: var(--badge-gap);
@@ -125,7 +125,7 @@ export { UIBadge };
125
125
  white-space: nowrap;
126
126
  }
127
127
 
128
- /* ── Variants token-only overrides ── */
128
+ /* ── Variants, token-only overrides ── */
129
129
  :scope[variant="primary"] {
130
130
  --badge-bg: var(--a-primary-bg);
131
131
  --badge-fg: var(--a-primary-fg);
@@ -166,17 +166,17 @@ export { UIBadge };
166
166
  **Annotations:**
167
167
 
168
168
  - **Two blocks:** `:where(:scope)` for tokens, `:scope` for base. Variants and state third.
169
- - **Variants override tokens only.** No `display`, `padding`, etc. in the variant bodies they just reassign the component's token values.
169
+ - **Variants override tokens only.** No `display`, `padding`, etc. in the variant bodies, they just reassign the component's token values.
170
170
  - **Zero raw colors.** Every color is a token.
171
- - **Zero raw px** spacing via `--a-space-*`, radius via `--a-radius-*`. The only numeric literal is `1px` for the border (allowed carve-out).
171
+ - **Zero raw px**, spacing via `--a-space-*`, radius via `--a-radius-*`. The only numeric literal is `1px` for the border (allowed carve-out).
172
172
  - **Stem `--badge-*`** matches the scope tag `badge-ui`.
173
- - **`color-mix()` on `currentColor`** is the idiomatic hover tint stays theme-aware without introducing a new token.
173
+ - **`color-mix()` on `currentColor`** is the idiomatic hover tint, stays theme-aware without introducing a new token.
174
174
 
175
175
  ---
176
176
 
177
- ## Example 2 Form-associated component: `<counter-ui>`
177
+ ## Example 2, Form-associated component: `<counter-ui>`
178
178
 
179
- A numeric input that shows value + increment/decrement buttons. Form- participating submits a string value with the host form.
179
+ A numeric input that shows value + increment/decrement buttons. Form- participating, submits a string value with the host form.
180
180
 
181
181
  ### `counter.js`
182
182
 
@@ -184,13 +184,13 @@ A numeric input that shows value + increment/decrement buttons. Form- participat
184
184
  import { UIFormElement } from '../../core/form.js';
185
185
 
186
186
  /**
187
- * <counter-ui> Integer counter with +/− controls. Form-associated.
187
+ * <counter-ui>, Integer counter with +/− controls. Form-associated.
188
188
  *
189
189
  * Props:
190
- * value number, default 0 (syncs to form value as string)
191
- * min number, default null (no lower bound)
192
- * max number, default null (no upper bound)
193
- * step number, default 1
190
+ * value, number, default 0 (syncs to form value as string)
191
+ * min, number, default null (no lower bound)
192
+ * max, number, default null (no upper bound)
193
+ * step, number, default 1
194
194
  */
195
195
  class UICounter extends UIFormElement {
196
196
  static properties = {
@@ -221,7 +221,7 @@ class UICounter extends UIFormElement {
221
221
  }
222
222
 
223
223
  connected() {
224
- super.connected(); // registers ElementInternals do not omit
224
+ super.connected(); // registers ElementInternals, do not omit
225
225
 
226
226
  if (!this.querySelector('[data-counter-dec]')) {
227
227
  this.innerHTML = `
@@ -259,12 +259,12 @@ export { UICounter };
259
259
 
260
260
  **Annotations:**
261
261
 
262
- - **`UIFormElement` superclass** inherits `name`, `disabled`, `required` etc. via the spread.
263
- - **`super.connected()` / `super.disconnected()`** both present. Without them, form association silently fails.
264
- - **`min`/`max` default `null`** no magic sentinels. `null` = "no constraint."
265
- - **`#commit()` is the one-place-value-changes** clamps, short-circuits on no-op, fires `change`, calls `syncValue`, triggers `render()`.
266
- - **`syncValue(String(next))`** inherited from `UIFormElement`, updates the form-submitted string representation.
267
- - **Two stable handlers** `#onDecrement`, `#onIncrement`. Both paired in `disconnected()`.
262
+ - **`UIFormElement` superclass**, inherits `name`, `disabled`, `required` etc. via the spread.
263
+ - **`super.connected()` / `super.disconnected()`**, both present. Without them, form association silently fails.
264
+ - **`min`/`max` default `null`**, no magic sentinels. `null` = "no constraint."
265
+ - **`#commit()` is the one-place-value-changes**, clamps, short-circuits on no-op, fires `change`, calls `syncValue`, triggers `render()`.
266
+ - **`syncValue(String(next))`**, inherited from `UIFormElement`, updates the form-submitted string representation.
267
+ - **Two stable handlers**, `#onDecrement`, `#onIncrement`. Both paired in `disconnected()`.
268
268
  - **`render()` updates internal DOM** only when a reflected prop (`value`) changes and CSS selectors can't express the update (text content). CSS handles the disabled state via `:scope[disabled]`.
269
269
 
270
270
  ### `counter.css`
@@ -315,7 +315,7 @@ export { UICounter };
315
315
  font-variant-numeric: tabular-nums;
316
316
  }
317
317
 
318
- /* Disabled state inherited from UIFormElement */
318
+ /* Disabled state, inherited from UIFormElement */
319
319
  :scope[disabled] {
320
320
  --counter-fg: var(--a-fg-muted);
321
321
  --counter-border: 1px solid var(--a-border-subtle);
@@ -327,14 +327,14 @@ export { UICounter };
327
327
 
328
328
  **Annotations:**
329
329
 
330
- - **No variants** in this example the component is functional, not cosmetic. All state communicated via tokens and the `[disabled]` selector.
330
+ - **No variants** in this example: the component is functional, not cosmetic. All state communicated via tokens and the `[disabled]` selector.
331
331
  - **`:scope > [data-*]`** for slotted-like children without `::slotted()`.
332
- - **`pointer-events: none` + `opacity` in the disabled body** this is allowed because `pointer-events` is an interaction property, not a layout property. Same for `cursor`.
332
+ - **`pointer-events: none` + `opacity` in the disabled body**: this is allowed because `pointer-events` is an interaction property, not a layout property. Same for `cursor`.
333
333
  - **`min-width: 3ch`** is a non-layout metric (character-based), not a px literal; no carve-out needed.
334
334
 
335
335
  ---
336
336
 
337
- ## Checklist did this component pass?
337
+ ## Checklist, did this component pass?
338
338
 
339
339
  Run the 30-second self-check from [authoring-cycle.md](authoring-cycle.md) Step 4 against each example:
340
340