#main-content<a href="#main-content" class="skip-link">Skip to main content</a>| Was | Now | Why |
|---|---|---|
| <div class="topnav"> | <nav aria-label="Main navigation"> | Screen readers say "main navigation landmark" |
| <div class="content"> | <main id="main-content"> | Screen readers say "main content landmark" |
| <div class="nav-tabs"> | role="tablist" | Announces as a tab group |
| Nav tab <div> | role="tab" tabindex="0" aria-selected | Tab panel pattern, keyboard accessible |
| Logo <div> | role="img" aria-label="Margin" | Screen reader reads brand name |
| User menu <button> | aria-haspopup="menu" aria-expanded aria-label | Announces menu state on open/close |
| Transaction count <span> | aria-live="polite" | Screen reader reads count when it updates |
div — tabindex+keydown added by IIFE| Selector | Added attributes | Example |
|---|---|---|
| .subnav-item | tabindex="0" role="tab" | Sales → Invoices, Quotes, Credit Notes… |
| .dash-action-item | tabindex="0" role="button" | Dashboard quick-action cards |
| .supplier-list-item | tabindex="0" role="button" | Supplier rows in list view |
| .article-card, .news-item | tabindex="0" role="button" | Knowledge centre articles, news feed |
| .faq-item, .wizard-option | tabindex="0" role="button" | FAQ accordions, setup wizard choices |
| .gs-result-item | tabindex="0" role="button" | Global search results (Ctrl+K) |
| .link-cell | tabindex="0" role="button" | Table cell links (invoice #, supplier name) |
.click()| Image | Was | Now |
|---|---|---|
| Invoice QR code | no alt attribute | alt="QR code" |
| Document viewer (receipt/bill image) | alt="" (empty — treated as decorative) | alt="Document: [supplier name]" (set dynamically in JS when loaded) |
| Decorative UI elements (logo mark, glow, SVG icons in buttons) | No marking | aria-hidden="true" focusable="false" |
| Breadcrumb separator › | Visible to screen readers (#ccc — low contrast) | aria-hidden="true" (decorative — exempt from contrast) |