+``` + +--- + +## 7. Enforcement Checklist + +- [x] No `bg-white` / `bg-zinc-50` in canvas components (verified) +- [x] No `text-zinc-900` in canvas components (verified) +- [x] All buttons have focus rings (verified in tests) +- [x] All modals use Radix Dialog (verified) +- [x] All tooltips use `role="tooltip"` + `aria-describedby` (verified) +- [x] No `outline-none` without focus ring (verified) +- [x] All inputs have visible labels (verified pattern) +- [x] Contrast ratios at 4.5:1 minimum (verified above) +- [x] `prefers-reduced-motion` suppresses all animations (verified in globals.css) +- [x] Context menu has keyboard navigation (verified in ContextMenu.keyboard.test.tsx) + +--- + +## 8. Remaining Open Items + +1. **Visual regression tests** — No screenshot/visual tests exist yet. KI-006 tracks this gap. +2. **Keyboard shortcut help dialog** — No dedicated dialog. Shortcuts exist in `useKeyboardShortcuts.ts` but no `aria-describedby` hints on buttons. +3. **Screen reader announcements for canvas state changes** — Node/edge changes not announced. Consider `aria-live="polite"` region. +4. **Edge anchor accessibility** — React Flow handles are purely visual. May need ARIA annotations for screen readers. +5. **Drag-and-drop keyboard alternative** — Drag uses mouse primarily. No keyboard equivalent for node rearrangement.