diff --git a/docs/features/html-import.md b/docs/features/html-import.md
index 7cb7bf493..a9a2815d6 100644
--- a/docs/features/html-import.md
+++ b/docs/features/html-import.md
@@ -108,7 +108,7 @@ Callers splice the fragment into the page tree via `insertImportedNodes(parentId
| `select` | `base.select` | `fieldId`, `name`, `id`, `required`, `disabled`, `multiple` | Yes |
| `optgroup` | `base.option-group` | `label`, `disabled` | Yes |
| `option` | `base.option` | `value`, `label`, `selected`, `disabled` | No |
-| `button` | `base.button`, `base.submit` when submit-type / inside a form without a type, or `base.container` tagged `button` when a non-submit button wraps element children | `label`, `disabled` | No for text-only and for submit buttons; yes for compound non-submit buttons |
+| `button` | `base.button`, `base.submit` when submit-type / inside a form without a type, or `base.container` tagged `button` when a non-submit button wraps element children | `label`, `disabled` | No for text-only; yes when the button wraps element children |
| `ul`, `ol` | `base.container` | `tag` = tag name | Yes |
| `div`, `section`, `article`, `main`, `header`, `footer`, `nav`, `aside` | `base.container` | `tag` = tag name | Yes |
| `area`, `base`, `br`, `col`, `embed`, `hr`, `link`, `meta`, `param`, `source`, `track`, `wbr` (void elements) | `base.container` | `tag: 'custom'`, `customTag` = tag name | **No** |
@@ -122,7 +122,7 @@ Callers splice the fragment into the page tree via `insertImportedNodes(parentId
- **Direct text inside a recursing container is preserved.** The walker iterates `childNodes` (not just `children`): element children route through the rules, and each significant text node becomes a synthesized `base.text` child with `tag: 'none'` in document order. That no-wrapper text mode publishes back to bare text, so `
98%
` and `
Buy milk
` import as containers holding their original text without adding selector-visible wrapper elements. Whitespace-only text (indentation between tags) is skipped; internal whitespace runs collapse to single spaces, and boundary spaces are kept when the text run sits between element siblings.
- **`` metadata is preserved separately.** Classes, safe HTML attributes (`id`, ARIA, `data-*`, etc.), and harvested inline styles on `` are returned as `fragment.body` rather than inserted into `rootIds`. Full-site import applies them to `base.body`; paste-style HTML import can ignore them without changing the fragment structure.
- `base.link` uses the prop `text` (not `label`). `base.button` uses `label` (not `text`). These match the module source.
-- **Button-like elements keep what they wrap.** `base.button` is `canHaveChildren: false`, so an `a.btn` or a `