diff --git a/.jules/palette.md b/.jules/palette.md index ea004e2d..6e0d719c 100644 --- a/.jules/palette.md +++ b/.jules/palette.md @@ -81,3 +81,7 @@ ## 2026-08-12 - Skip to Content Accessibility **Learning:** Screen reader and keyboard-only users experience significant friction when forced to navigate through repetitive header controls on every page load. **Action:** Keep a visible-on-focus skip link as the first interactive element, target a programmatically focusable main container, and give the focused link a high-contrast outline. + +## 2024-05-18 - Visual parity for ARIA states +**Learning:** For frontend UX, always map ARIA states (like `aria-busy="true"`) and semantic states (like `:disabled`) to CSS visual styles (e.g., `opacity`, `cursor: not-allowed`, or `pointer-events: none`) to ensure visual parity with the accessibility tree. +**Action:** When adding or verifying accessible states like `aria-busy` or `disabled`, ensure corresponding CSS styles exist so sighted users also receive visual feedback. diff --git a/scanner/dashboard/console.html b/scanner/dashboard/console.html index 7ec262af..dacb57e0 100644 --- a/scanner/dashboard/console.html +++ b/scanner/dashboard/console.html @@ -25,6 +25,7 @@ main{max-width:1000px;margin:0 auto;padding:20px} input{font:inherit;padding:8px 10px;border:1px solid var(--border);border-radius:8px;min-width:280px} button{font:inherit;font-weight:600;padding:8px 14px;border:0;border-radius:8px;background:var(--primary);color:var(--on-primary);cursor:pointer} + button:disabled,button[aria-busy="true"]{opacity:0.6;cursor:not-allowed} button.ghost{background:var(--surface);color:var(--primary);border:1px solid var(--border)} .card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:16px 18px;margin-bottom:16px} .stats{display:flex;gap:12px;flex-wrap:wrap}