diff --git a/.jules/palette.md b/.jules/palette.md index ea004e2d2..1eb172b7e 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. + +## 2026-10-09 - Accessible External Links +**Learning:** `target="_blank"` external links without explicit accessible warnings fail to notify screen reader users of context changes and lack visual indicators for sighted users. English-only `aria-label` overrides visible text and breaks localization. +**Action:** For `target="_blank"` external links, always provide both an assistive-technology warning (e.g., visually hidden `.sr-only` text inside the `` tag) and a visible warning (e.g., an `aria-hidden="true"` icon). diff --git a/scanner/dashboard/index.html b/scanner/dashboard/index.html index 132bc31b2..24cbdf36d 100644 --- a/scanner/dashboard/index.html +++ b/scanner/dashboard/index.html @@ -281,7 +281,7 @@

Dashboard

function openDetail(f){ lastFocus = document.activeElement; const s = String(f.severity||'INFO').toUpperCase(); - const refs = (f.references||[]).map(r=>`
${esc(r)}`).join('
'); + const refs = (f.references||[]).map(r=>`${esc(r)} (opens in a new tab)`).join('
'); const owasp = (f.owasp||[]).join(', '); const cwe = (f.cwe||[]).join(', '); const d = document.getElementById('detail');