This page demonstrates SCREEN_READER accessibility violations — ARIA, labels, form controls, and accessible names. The enquiry form, team section, and media embeds each contain real violations with inline descriptions.
Tell us about your project and we'll respond within one business day. The form below plants several label and button name violations.
The embedded maps below demonstrate two iframe-related SCREEN_READER violations.
London HQ
↑ <iframe> with no title attribute — rule: frame-title (Serious · SCREEN_READER).
Lagos Office
↑ title="Office Map" — duplicated on the next iframe too. Rule: frame-title-unique (Serious · SCREEN_READER).
Singapore Office
↑ Second title="Office Map" — identical to Lagos iframe above. Axe fires frame-title-unique on both.
We serve enterprise and mid-market clients across finance, health, agriculture, and public sector.
↑ The <summary> above is empty — no text, no label. Screen reader users hear "disclosure widget" with no context. Rule: summary-name (Moderate · SCREEN_READER).
We offer fixed-price projects, time-and-materials, and embedded team engagements from 1 month to 3 years.
Yes — we integrate with your existing infrastructure. We're technology-agnostic and have experience across all major cloud and enterprise platforms.
This section demonstrates custom ARIA widget violations embedded in a typical feature showcase layout.
WCAG 2.1 AA conformance
↑ div[role="progressbar"] — no aria-label or aria-labelledby. Screen reader says "82 of 100" with no description of what's measured. Rule: aria-progressbar-name (Critical · SCREEN_READER).
Section 508 coverage
↑ div[role="meter"] — no aria-label. Rule: aria-meter-name (Critical · SCREEN_READER).
↑ div[role="checkbox"] is missing required aria-checked attribute. Screen readers cannot announce the checked state. Rule: aria-required-attr (Critical · SCREEN_READER).
↑ div[role="tablist"] contains plain <div> children — none have role="tab". Rule: aria-required-children (Critical · SCREEN_READER).
Your session will expire in 5 minutes. Any unsaved work will be lost.
↑ div[role="dialog"] has no aria-label or aria-labelledby. Screen readers announce "dialog" with no purpose. Rule: aria-dialog-name (Serious · SCREEN_READER).
↑ aria-hidden="true" hides this button from screen readers while tabindex="0" keeps it focusable — keyboard users land on an invisible element. Rule: aria-hidden-focus (Serious · SCREEN_READER).
Runs on every deployment via our CI pipeline.
↑ This card has aria-exploded="true" — not a real WAI-ARIA attribute. Ignored by all ATs. Rule: aria-valid-attr (Critical · SCREEN_READER).
Quarterly screen-reader testing with real users.
↑ aria-expanded="yes" — invalid value. Must be "true" or "false". Rule: aria-valid-attr-value (Critical · SCREEN_READER).
↑ aria-checked="false" is not allowed on role="link". Only valid on checkbox, radio, switch, etc. Rule: aria-allowed-attr (Serious · SCREEN_READER).
↑ role="superbutton" is not a valid WAI-ARIA role — ATs ignore it. Rule: aria-roles (Critical · SCREEN_READER).
How would you like to provide feedback?
↑ The three pill buttons use role="option" without a role="listbox" parent (aria-required-parent · Critical). The icon button uses role="menuitem" with no name (aria-command-name · Critical). Both SCREEN_READER.
↑ div[role="textbox"][contenteditable] has no aria-label, aria-labelledby, or title. Screen reader says "text field" with no description of what to type. Rule: aria-input-field-name (Serious · SCREEN_READER).