PayslipIQ Accessibility Statement
Statement prepared on 2026-05-05. Last assistive-technology regression test: 2026-04-28. Next scheduled review: 2026-08-05.
Conformance status
PayslipIQ partially conforms with the Web Content Accessibility Guidelines (WCAG) 2.2 at Level AA at the date of this statement (2026-05-05). ‘Partially conforms’ means that some parts of the content do not yet fully meet the conformance level.
Of the 55 Level A and Level AA Success Criteria in WCAG 2.2, we self-assess 40 as conformant, 4 as partially conformant, 11 as not applicable to the current product surface. Per-criterion evidence is published below.
Standards we follow
- WCAG 2.2 - W3C Recommendation, October 2023. Primary technical standard for this statement.
- EN 301 549 v3.2.1 - the harmonised European standard for ICT accessibility, which incorporates WCAG 2.1 AA by reference and is the basis of conformance for our Irish audience. See our Ireland accessibility statement for the EU-specific framing.
- Section 508 - informational. We track US Federal Section 508 alignment because it shares technical requirements with WCAG 2.0 AA, but our primary regulatory frame is the UK Equality Act 2010.
Measures we take
- Editorial standards mandate accessible-by-default templates for every new page, calculator and tool.
- The design system enforces a minimum 4.5:1 text contrast ratio against background and 3:1 for large text, UI borders and focus rings.
- Every form input is paired with a programmatically associated
<label htmlFor>; error messages are linked througharia-describedbyand announced viarole=“alert”. - Sticky regions (the Header, MobileBottomNav and StickyMobileCTA) never occlude the focused element — a global
scroll-padding-top: 80pxand matchingscroll-marginon:focus-visiblekeep the active control inside the safe viewport region (SC 2.4.11). - Focus is visible at 2px on every interactive element via the site-wide
:focus-visiblerule, and Next.js client-side route changes restore keyboard focus to<main>viasrc/components/RouteFocusReset.tsx. - We use semantic HTML5 first — landmarks, headings, lists, buttons, links — and add ARIA only where semantic HTML is insufficient (live regions, error associations, current-page indication).
- Motion respects
prefers-reduced-motionand is suppressed for users who request reduced motion at the OS level.
Conformance by WCAG 2.2 principle
The four sections below cover every Level A and Level AA Success Criterion in WCAG 2.2, including the new 2.2 additions: SC 2.4.11 Focus Not Obscured (Minimum), SC 2.5.7 Dragging Movements, SC 2.5.8 Target Size (Minimum), SC 3.2.6 Consistent Help, SC 3.3.7 Redundant Entry, and SC 3.3.8 Accessible Authentication (Minimum). SC 2.4.13 Focus Appearance and SC 3.3.9 Accessible Authentication (Enhanced) are Level AAA and discussed under ‘AAA aspirations’ below.
Perceivable
Users can perceive the information being presented - it is not invisible to all of their senses.
- SC 1.1.1 (Level A)Partial
Non-text Content
Decorative imagery is rendered via CSS gradients or marked aria-hidden; meaningful imagery (e.g. PayslipIQ logo, hero illustrations) carries an alt attribute set in src/components/OptimisedImage.tsx and src/components/Hero.tsx. The dynamically generated /api/og social card is consumed only by crawlers and uses a descriptive alt at injection sites in src/app/layout.tsx.
- OG image alt text is auto-derived from the route title rather than authored per page; manual alt text per route is scheduled for 2026-Q4.
Remediation target: 2026-12.
- SC 1.2.1 (Level A)Not applicable
Audio-only and Video-only (Prerecorded)
PayslipIQ hosts no prerecorded audio-only or video-only media. All explanatory content is HTML text or static imagery.
- SC 1.2.2 (Level A)Not applicable
Captions (Prerecorded)
No prerecorded synchronised media is published on the site.
- SC 1.2.3 (Level A)Not applicable
Audio Description or Media Alternative (Prerecorded)
No prerecorded video content exists.
- SC 1.2.4 (Level AA)Not applicable
Captions (Live)
PayslipIQ does not broadcast live audio or video.
- SC 1.2.5 (Level AA)Not applicable
Audio Description (Prerecorded)
No prerecorded video content exists.
- SC 1.3.1 (Level A)Conformant
Info and Relationships
Pages use semantic HTML5 landmarks (header, nav, main, footer, article, section). Forms in src/components/PayslipForm.tsx and src/components/IePayslipForm.tsx pair every input with a programmatic <label htmlFor>; error messages are linked through aria-describedby and surface aria-invalid when validation fails.
- SC 1.3.2 (Level A)Conformant
Meaningful Sequence
Reading order matches DOM order across the site; CSS layout is built with flow-friendly Tailwind utilities and no absolute-positioned content out of source order. Verified manually against Firefox Reader View on the calculators and tools surfaces.
- SC 1.3.3 (Level A)Conformant
Sensory Characteristics
Form errors and CTAs are conveyed through text plus colour plus icon, never through colour or position alone. Reviewed in src/components/PayslipForm.tsx (error rows render <p role="alert">) and src/components/AnomalyAlert.tsx.
- SC 1.3.4 (Level AA)Conformant
Orientation
No CSS or JavaScript locks the viewport to a single orientation. The responsive grid in src/styles/globals.css works in both portrait and landscape down to 320px viewport width.
- SC 1.3.5 (Level AA)Partial
Identify Input Purpose
Inputs that map to WCAG 2.1 autocomplete tokens (e.g. email on the contact form) carry the appropriate autocomplete attribute. Bespoke payroll fields (gross_period, tax_code) have no standard token and rely on labelling alone.
- Audit all form inputs for autocomplete coverage where a standard token applies; in-progress for 2026-Q3.
Remediation target: 2026-09.
- SC 1.4.1 (Level A)Conformant
Use of Colour
Status, error and warning states always include a text label or icon; colour is only used as a redundant cue. The DeductionRow and AnomalyAlert components combine colour with leading symbols and copy.
- SC 1.4.2 (Level A)Not applicable
Audio Control
No audio plays automatically on any page.
- SC 1.4.3 (Level AA)Conformant
Contrast (Minimum)
Body and UI text meets 4.5:1 against background and large text meets 3:1. Wave 17 Domain A bumped low-contrast secondary copy from text-gray-300 to text-gray-700 across affected components, and the brand button hover token in src/styles/globals.css was darkened to #065F46 for 4.5:1 against white.
- SC 1.4.4 (Level AA)Conformant
Resize Text
Typography uses rem and clamp() units (see .stat-number rule in src/styles/globals.css). Content reflows without loss of function up to 200% browser zoom; verified in Chrome 132 and Firefox 132.
- SC 1.4.5 (Level AA)Conformant
Images of Text
No images of text are used for body content. Logotype is the only exception permitted under SC 1.4.5 and is delivered as SVG with an accessible name.
- SC 1.4.10 (Level AA)Partial
Reflow
The Tailwind responsive grid reflows down to 320px without horizontal scrolling on the home, calculators and check surfaces. A handful of programmatic city/role pages embed wide comparison tables that scroll horizontally - permitted by the data-table exception, but flagged for re-layout.
- Wide comparison tables on /tax-codes/compare horizontally scroll below 480px.
Remediation target: 2026-09.
- SC 1.4.11 (Level AA)Conformant
Non-text Contrast
Form input borders, focus rings (2px solid focus-visible style in src/styles/globals.css) and interactive icons meet the 3:1 ratio against their adjacent colours after Wave 17 Domain D adjusted the form-input border token.
- SC 1.4.12 (Level AA)Conformant
Text Spacing
No inline style or utility class hard-codes line-height, letter-spacing or word-spacing in a way that prevents user override; all typography is set via Tailwind classes that respect cascade overrides.
- SC 1.4.13 (Level AA)Conformant
Content on Hover or Focus
Tooltip-style popovers (e.g. on the TaxCodeBadge component) are triggered by hover or focus, are dismissible by Escape via the focus-trap utility in src/lib/use-focus-trap.ts, and remain visible while the pointer is over them.
Operable
Users can operate the interface - the controls and navigation do not require interaction the user cannot perform.
- SC 2.1.1 (Level A)Conformant
Keyboard
Every interactive control is a native button, link, input, select or textarea. Custom controls (e.g. the cookie banner) are reachable and operable via Tab, Shift+Tab, Enter and Space.
- SC 2.1.2 (Level A)Conformant
No Keyboard Trap
Focus-trapped surfaces (mobile menu, exit-intent modal) implement an Escape escape-hatch via the dispatched close event in src/lib/use-focus-trap.ts; non-modal regions never confine Tab focus.
- SC 2.1.4 (Level A)Not applicable
Character Key Shortcuts
PayslipIQ implements no single-character keyboard shortcuts. All keyboard interactions use modifier keys or the standard tab/enter/escape vocabulary.
- SC 2.2.1 (Level A)Not applicable
Timing Adjustable
There are no time limits on form submission, session timeout or content interaction.
- SC 2.2.2 (Level A)Conformant
Pause, Stop, Hide
No content auto-updates, blinks or scrolls. Decorative motion (the .animate-fade-in family in src/styles/globals.css) is short, runs once, and is fully suppressed under prefers-reduced-motion.
- SC 2.3.1 (Level A)Conformant
Three Flashes or Below Threshold
No animation flashes more than three times per second. Motion is limited to one-shot fade and translate transitions.
- SC 2.4.1 (Level A)Conformant
Bypass Blocks
The site-wide "Skip to main content" link in src/app/layout.tsx targets <main id="main-content" tabIndex={-1}>; the link uses the .skip-to-content visibility pattern in src/styles/globals.css.
- SC 2.4.2 (Level A)Conformant
Page Titled
Every route exports a per-page Metadata title via Next.js metadata, falling back to the global template "%s | PayslipIQ" defined in src/app/layout.tsx.
- SC 2.4.3 (Level A)Conformant
Focus Order
DOM order drives focus order. Wave 17 Domain D added src/components/RouteFocusReset.tsx to programmatically focus <main> on Next.js client navigations, restoring the focus-order baseline that SPA routing otherwise breaks.
- SC 2.4.4 (Level A)Conformant
Link Purpose (In Context)
Link text describes its destination in context. Repeated anchors (e.g. "Read more") carry an aria-label or visually hidden suffix where the surrounding text is insufficient.
- SC 2.4.5 (Level AA)Conformant
Multiple Ways
Pages are reachable through the primary nav, footer link clusters, the /sitemap-html index, the search-action JSON-LD configured in src/app/layout.tsx, and breadcrumb trails on category and detail pages.
- SC 2.4.6 (Level AA)Conformant
Headings and Labels
Each page has a single h1 followed by a logical h2/h3 cascade; form labels describe their purpose without relying on placeholder text.
- SC 2.4.7 (Level AA)Conformant
Focus Visible
Every interactive token (.btn-primary, .btn-secondary, .btn-outline) and the global :focus-visible rule in src/styles/globals.css render a 2px ring with offset; no rule sets outline:none without an alternative indicator.
- SC 2.4.11 (Level AA)Conformant
Focus Not Obscured (Minimum)
Wave 17 Domain D added the html { scroll-padding-top:80px; scroll-padding-bottom:96px } and :focus-visible { scroll-margin } rules in src/styles/globals.css so that focused inputs are never hidden under the sticky Header, MobileBottomNav or StickyMobileCTA.
- SC 2.5.1 (Level A)Conformant
Pointer Gestures
No multipoint or path-based gestures are required. Sliders use single-pointer drag with native keyboard equivalents.
- SC 2.5.2 (Level A)Conformant
Pointer Cancellation
All actions trigger on pointerup/click rather than pointerdown, so users can drag away to abort. No down-event handlers commit destructive actions.
- SC 2.5.3 (Level A)Conformant
Label in Name
Where an aria-label is set, it begins with or matches the visible label text (e.g. submit buttons read "Check my payslip" both visually and to assistive technology).
- SC 2.5.4 (Level A)Not applicable
Motion Actuation
No feature is operated by device motion, tilt or shake.
- SC 2.5.7 (Level AA)Conformant
Dragging Movements
The only draggable surface is the native HTML range input on the take-home and pension calculators. Range inputs accept arrow-key operation as a single-pointer alternative to the drag gesture.
- SC 2.5.8 (Level AA)Partial
Target Size (Minimum)
Primary CTAs and form inputs are sized at or above the 24x24 CSS pixel minimum. The MobileBottomNav and bottom CTAs use 44x44 targets. Some inline icon-only links (e.g. footer social icons) are below 24x24 and rely on the spacing exception; an audit is in flight.
- Footer social icon hit areas to be padded to 24x24 minimum.
Remediation target: 2026-09.
Understandable
Users can understand the information and the operation of the interface.
- SC 3.1.1 (Level A)Conformant
Language of Page
src/app/layout.tsx sets <html lang="en-GB"> for UK routes and <html lang="en-IE"> for Ireland routes via the request pathname.
- SC 3.1.2 (Level AA)Conformant
Language of Parts
Inline foreign-language phrases (e.g. Irish-language statutory terms on /ie pages) carry a lang attribute when used; the rest of the document is en-GB or en-IE as set on the root html element.
- SC 3.2.1 (Level A)Conformant
On Focus
No element triggers a context change on focus. Form fields validate on blur or submit, never on focus.
- SC 3.2.2 (Level A)Conformant
On Input
No input element auto-submits or navigates. Submission is gated on an explicit button.
- SC 3.2.3 (Level AA)Conformant
Consistent Navigation
The Header, Footer and MobileBottomNav components are mounted by src/app/layout.tsx for every route, preserving identical link order across the site.
- SC 3.2.4 (Level AA)Conformant
Consistent Identification
Repeated UI primitives (buttons, badges, callouts) share a single Tailwind component class and identical accessible name across every surface.
- SC 3.2.6 (Level A)Conformant
Consistent Help
The Footer in src/components/Footer.tsx surfaces the /contact link in the same position on every page, satisfying the consistent-help requirement of WCAG 2.2.
- SC 3.3.1 (Level A)Conformant
Error Identification
Validation errors are identified in text, linked to the offending input via aria-describedby, and surfaced through role="alert" wrappers in the form components.
- SC 3.3.2 (Level A)Conformant
Labels or Instructions
Every input carries a programmatic <label htmlFor>, and complex fields (e.g. tax code) include helper text describing the expected format.
- SC 3.3.3 (Level AA)Conformant
Error Suggestion
Zod-driven validators in PayslipForm.tsx and IePayslipForm.tsx produce specific error copy ("must be a positive number", "tax code must match HMRC format") rather than a generic "invalid".
- SC 3.3.4 (Level AA)Not applicable
Error Prevention (Legal, Financial, Data)
PayslipIQ submits no legal, financial or data-modifying transactions on the user's behalf. All flows are read-only analyses; no irreversible action is taken without explicit confirmation, and no user data is persisted server-side.
- SC 3.3.7 (Level A)Conformant
Redundant Entry
No multi-step flow asks the user to retype information already provided in the same session. The /check single-page form collects all inputs in one pass.
- SC 3.3.8 (Level AA)Not applicable
Accessible Authentication (Minimum)
PayslipIQ does not require user authentication. There are no passwords, MFA challenges or cognitive function tests on any public route.
Robust
Content is robust enough to be reliably interpreted by a wide range of user agents, including assistive technology.
- SC 4.1.2 (Level A)Conformant
Name, Role, Value
Custom components delegate to native HTML elements (button, input, a) so role and value come for free. ARIA is added only where semantic HTML is insufficient (aria-live regions, aria-describedby on errors, aria-current on the active nav link).
- SC 4.1.3 (Level AA)Conformant
Status Messages
Loading and result containers in src/components/PayslipForm.tsx and the IE counterpart wrap output in role="status" + aria-live="polite" + aria-busy, so progress and result transitions are announced to screen readers without stealing focus.
Known limitations and remediation
The following items are tracked separately from the per-criterion evidence above. Each has an owner and a remediation date.
- Open Graph image alt text is auto-derived from the route title rather than authored per page. Manual alt text per route is scheduled for 2026-Q4.
- Footer social icon hit areas are below the SC 2.5.8 24x24 CSS-pixel target-size minimum and rely on the spacing exception. Padding will be added in 2026-Q3.
- Wide comparison tables on
/tax-codes/comparescroll horizontally below 480px viewport width. A vertical stacked layout for narrow viewports is in flight for 2026-Q3. - PDF guides forthcoming under
/downloads/will be tagged-PDF (PDF/UA-compliant) and accessibility-checked against the Matterhorn Protocol before publication. No PDFs are currently published, so no remediation gap exists today. - Calculator results pages provide a tabular alternative to the visual breakdown. An audio summary is not provided — this is out of scope for the current product type and is not on the roadmap.
- Welsh-language version — we do not yet offer a Welsh-language interface. We are evaluating this for 2027 in line with the Welsh Language (Wales) Measure 2011 posture.
Testing methodology
We are committed to honesty about the testing posture supporting this statement. Our current cadence - most recent automated pass 2026-04-28 - is as follows.
Automated, every commit (CI)
- axe-core via Playwright over the six anchor pages (home, /check, /tax-code-checker, /calculators/take-home, /pricing, /ie). Zero AA violations blocks the build (see
tests/a11y.spec.tsand.github/workflows/test.yml). - Lighthouse CI with the Accessibility category asserted ≥ 95 on the same six anchor pages.
- Static-analysis checks for
aria-label, label association, focus-order regressions and motion-preference handling on every PR.
Scheduled manual assistive-technology pass - quarterly
Our manual screen-reader and AT regression cycle is scheduled quarterly. The combinations under test are listed below; the next manual pass is planned for 2026-08-05. We will publish the dated test log here once each pass completes - until then, please do not assume that every combination has been individually exercised in the current sprint.
- NVDA 2024.x with Firefox and Chrome on Windows 11.
- VoiceOver with Safari on macOS (current public release).
- TalkBack with Chrome on Android (current public release).
- VoiceOver with Safari on iOS (current public release).
- Dragon NaturallySpeaking 16 with Chrome on Windows 11.
- Windows High Contrast and macOS Increase Contrast smoke checks on every navigational and form surface.
If you use an assistive technology not on this list and encounter a barrier, please tell us - we will reproduce on the combination you are using and respond per the timelines below.
AAA aspirations
We do not claim WCAG 2.2 Level AAA conformance. We do, however, design towards several AAA criteria where they intersect with the comprehension needs of a payroll audience: SC 1.4.6 Contrast (Enhanced) is met for body text on most surfaces; SC 2.4.13 Focus Appearance is met by the 2px visible focus ring; and SC 3.1.5 Reading Level is supported by plain-English glossaries on every guide. SC 3.3.9 Accessible Authentication (Enhanced) is not applicable because no authentication exists.
Reporting accessibility issues
If you encounter a barrier on PayslipIQ, please tell us. You can:
- Email accessibility@payslipiq.co.uk.
- Use the contact form with the subject line ‘Accessibility’.
We commit to acknowledging accessibility reports within 5 working days and providing a substantive remediation timeline within 14 days of the initial acknowledgement. Where a fix is straightforward, it will normally ship inside the same fortnight.
Enforcement and regulatory framework (UK)
PayslipIQ is operated as a private-sector consumer service in the United Kingdom. Our accessibility obligations arise principally under:
- The Equality Act 2010 — the duty to make reasonable adjustments for disabled users in the provision of services.
- The Public Sector Bodies (Websites and Mobile Applications) (No. 2) Accessibility Regulations 2018 — informational. PayslipIQ is not a public sector body, but we voluntarily adopt the regulations’ statement format because it is the de facto UK standard for accessibility statements.
If you are not satisfied with our response, you can contact the Equality and Human Rights Commission (EHRC) who enforce the Equality Act 2010 in England, Scotland and Wales. In Northern Ireland, contact the Equality Commission for Northern Ireland.
Preparation of this statement
This statement was prepared on 2026-05-05 following an internal accessibility audit covering keyboard operation, screen-reader semantics, colour contrast, focus order under SPA navigation, focus visibility under sticky regions, form label association and live-region announcement of asynchronous state. The audit method combined automated scanning (axe-core, Lighthouse) with manual assistive-technology testing as listed above.
The statement is reviewed every quarter. The next scheduled review is 2026-08-05. It is also re-reviewed whenever a substantive change is made to the navigation, forms or design system.