SIGN IN SIGN UP

fix: hide the screen-reader data table on a wrapper div

`width` and `height` are minimums on a table box, so the visually-hidden
recipe applied straight to the a11y fallback `<table>` never shrank it —
it stayed at its intrinsic size (119x2184px in production) while
`clip-path` hid it. Absolutely positioned, that size lands in the host
page's nearest scroll container: a chat thread was carrying ~1900px of
dead scroll space below its last chart, and `MAX_SR_TABLE_ROWS` puts the
worst case near 20,000px.

Move the hiding onto a wrapper div, which honours 1x1, and leave the
table unstyled so it keeps its role, aria-label, caption, and
`th[scope=col]` structure. `display: block` on the table would also
collapse it but drops the implicit row/columnheader/cell roles.

Switch the sr-only recipe from `overflow: hidden` to `overflow: clip`
while here. A 1x1 `hidden` box wrapping taller content is a scrollable
scroll container, and Chrome makes a scroller with no focusable
descendants an implicit tab stop — the wrapper would have traded dead
space for an invisible keyboard stop. `clip` never scrolls.

Guard it with a Playwright containment invariant: no HTML box a chart
renders may lay out beyond `.oc-root` unless something clips it, and
every `.oc-sr-only` box stays 1x1. Verified failing before the fix and
passing after, across all four browser projects.
R
Riley Hilliard committed
fcbfc2b377d8b507a53894ab799bcc9fed355f11
Parent: 4e5873d
Committed by Riley Hilliard <2060731+rileyhilliard@users.noreply.github.com> on 8/19/2026, 2:40:23 PM