## 背景 前端审计第二轮对无障碍做深度审计,发现焦点管理硬缺陷(违反 ARIA 基本原则)与键盘不可达控件,聚合追踪。focusTrap/Select/Tooltip 等已做好的部分不在范围。 ## 所属部分 - [x] 前端 - [ ] 后端 - [ ] 客户端 ## 要做什么 - [ ] Sidebar 折叠后焦点泄漏:`AgentHubWorkbench.module.css:227` 仅 opacity/translateX,无 visibility/inert,不可见控件仍在 Tab 链 - [ ] Inspector 折叠时 `aria-hidden=true` 但内部仍可聚焦(`RightInspector.tsx:159`)→ 违反「aria-hidden 不得含可聚焦元素」 - [ ] 登录页焦点环 alpha 4%/8% 等效不可见:web/desktop `AuthPage.module.css` `box-shadow: 0 0 0 3px var(--glass-tint-plum)` - [ ] 终端 tab 关闭按钮 `<span role="button" tabIndex={-1}>` 键盘永不可达(`TerminalPanel.tsx:262-265`) - [ ] 14 个模块 cursor:pointer 但零 :focus/:focus-visible:TablePreview/SlideshowPreview/FileChangeGroup/DocxPreview/EmptyState/ErrorBoundary/MessageSearchPanel/MetricGrid/RecoveryPanel/AuxPanel/ContextMenu/MultiSelectBar/BrowserPreview/TerminalPanel - [ ] ContactsPage `.linkInput/.phoneSelect/.phoneInput` outline:none 无 focus 替代样式 - [ ] role="tablist" 半成品(仅 aria-selected,无方向键/roving/tabpanel 关联):TaskMainViews/WorkspaceHeader/AuxPanel/DiffReviewPanelParts/TablePreview/TerminalPanel - [ ] SubagentStreamOverlay `aria-live="polite"` 包高频流式区 + 嵌套二层 live region,读屏被持续轰炸;AgentStreamingBar role=status 反复播报 - [ ] 360ms 面板折叠动画(grid+clip-path+translateX)无 prefers-reduced-motion 门控(AgentHubWorkbench.module.css) - [ ] `--glass-text-muted` light ≈2.9:1 低于非文本 3:1(themes.css:528,desktop 顶栏图标簇) - [ ] 小触控目标 <32px:terminal tabClose 16×16、topBarNavBtn 22×22、workspaceTab 28px、conversationActionBtn 26×26 - [ ] 框选模式裸 Delete 直接删消息块无确认;Ctrl+A/C/Delete 未收录快捷键登记表 ## 验收标准 - [ ] 折叠面板不再泄漏焦点;aria-hidden 内无可聚焦元素 - [ ] 所有可交互元素有可见键盘焦点环 - [ ] live region 在流式期间不轰炸(节流/aria-live=off 策略) - [ ] 相关包 typecheck/test 通过;改 CSS 跑 design token 门禁 ## 相关文档 - `docs/component-acceptance.md` §4 无障碍必选项
背景
前端审计第二轮对无障碍做深度审计,发现焦点管理硬缺陷(违反 ARIA 基本原则)与键盘不可达控件,聚合追踪。focusTrap/Select/Tooltip 等已做好的部分不在范围。
所属部分
要做什么
AgentHubWorkbench.module.css:227仅 opacity/translateX,无 visibility/inert,不可见控件仍在 Tab 链aria-hidden=true但内部仍可聚焦(RightInspector.tsx:159)→ 违反「aria-hidden 不得含可聚焦元素」AuthPage.module.cssbox-shadow: 0 0 0 3px var(--glass-tint-plum)<span role="button" tabIndex={-1}>键盘永不可达(TerminalPanel.tsx:262-265).linkInput/.phoneSelect/.phoneInputoutline:none 无 focus 替代样式aria-live="polite"包高频流式区 + 嵌套二层 live region,读屏被持续轰炸;AgentStreamingBar role=status 反复播报--glass-text-mutedlight ≈2.9:1 低于非文本 3:1(themes.css:528,desktop 顶栏图标簇)验收标准
相关文档
docs/component-acceptance.md§4 无障碍必选项