Accessibility
Response, ResponseSize from @prepared911/ui/response.
Headings keep the level the Markdown wrote (# is an h1, ### an h3), and the typography role only changes how they look. Lists are list and listitem at every depth, tables are real tables with scope="col" column headers, a block quote is a blockquote, and a rule is a separator.
A link that opens in a new tab announces labels.newTab after its name and carries an icon. A target that is not safe is text, not a dead link. The link underline is Link's, so a link is never told apart by color alone.
A reference is a superscript link whose text is the footnote's number and which is described by the footnotes section. The section is a named region with a numbered list, and each item has an icon link named by labels.footnoteBack that returns to the first reference. The ids that tie them are scoped to the response, so two responses on a page do not collide.
A table too wide for the response scrolls in a focusable region named by labels.table, so a keyboard user can reach it. Each code block is a named figure with a focusable, named scroll area when its lines are wide, and a copy button named by labels.copyCode. See CodeBlock's accessibility notes.
Response adds no live region. A transcript that announces new replies owns that (MessageList's log). Completing unfinished Markdown changes only the markup, never the words, so the text a reader has already heard does not change under them.
An image is drawn as its alt text. A response from a model can name any address, and loading it would tell that address who is reading. An alt-less image draws nothing.
Text, links, code tones, the quote bar and table rules use Chroma foreground and border tokens; index.browser.test.tsx runs axe at WCAG 2.2 AA over a full response in light and dark. Under forced colors each part repaints with system colors (Text, Link, Table and CodeBlock each handle their own). Response adds no motion.
Prose, lists, tables and the quote bar follow the page direction. Code stays flush left and keeps its order.