Skip to main content

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

Measures we take

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.

  1. 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.
  2. 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.
  3. Wide comparison tables on/tax-codes/compare scroll horizontally below 480px viewport width. A vertical stacked layout for narrow viewports is in flight for 2026-Q3.
  4. 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.
  5. 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.
  6. 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)

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.

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:

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:

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.