Accessibility Conformance Report (Self-Assessed)
Format: VPAT 2.5 INT edition (WCAG 2.2, Revised Section 508, EN 301 549)
Report date: 2026-10-12
Report version: 1.3
Vendor: Arivaran.ai Inc.
Product: Arivaran web dashboard, public site and sign-in pages
Product version: continuously deployed web application; evaluated at the source revision this file is committed in
Contact: compliance@arivaran.ai, support@arivaran.ai
1. Read this first: what this report is and is not
This is a self-assessment written by Arivaran.ai Inc. engineering. It is not an independent audit.
- No third party has audited the product for accessibility. An independent audit will be commissioned when a buyer asks for one. Its findings will be folded into this report.
- No human screen-reader audit has been done. Nobody has walked the product with NVDA, JAWS, VoiceOver or TalkBack and recorded the result. No user with a disability has tested it for this report.
- The report is based on automated checks and targeted tests that exist in the product's source tree. Section 4 lists each one, what it measures, and what it cannot measure.
- Automated checks find a minority of accessibility failures. A row with test evidence means "the tests named in the row pass on the surfaces they cover". It does not mean the criterion is met everywhere.
- This report cites tests as they exist at the source revision. It does not attest to the result of any particular test run. Several of the browser-based checks run only when an engineer starts them by hand (section 4 says which), and the automated checks are not a gate on release.
- Where no test or review covers a criterion, the row says "Not Evaluated". We did not rate a criterion on the basis that it is probably fine.
Buyers who need an attested result should ask for the independent audit (section 8).
2. Terms used in the tables
The level names are the VPAT 2.5 names. We apply them more strictly than the VPAT definitions, as follows.
| Level | How it is used in this report |
|---|---|
| Supports | A named test in the source tree exercises the criterion across the in-scope product. No row in this version meets that bar, because no test covers every in-scope surface. |
| Partially Supports | Test evidence exists for part of the product, or a known exception exists. The Remarks column names the tests and the exceptions. Surfaces not named are unmeasured. |
| Does Not Support | A failure of the criterion is known and is described in the Remarks column. |
| Not Applicable | The criterion does not apply to the in-scope product. The Remarks column gives the reason. |
| Not Evaluated | No test or review covers the criterion. This is the honest answer for most criteria that need human judgement. VPAT 2.5 reserves this term for WCAG Level AAA; this report uses it at Levels A and AA because the alternative would be a rating without evidence. |
File paths in the Remarks columns are relative to kuiperdesk/aaDash/ in the source repository unless they start with kuiperdesk/ or .forgejo/. Evidence labels (E1 to E11) refer to section 4.
3. Scope
3.1 Covered
| Surface | What it is | Size, measured at this revision |
|---|---|---|
| Dashboard | The signed-in web application under /dashboard | 178 route files under src/routes/dashboard |
| Public site and other pages outside the dashboard | Marketing, product, pricing, bundle, comparison, legal and policy pages; the sign-up, join, enrol and device sign-in pages; and the remaining standalone pages | 45 route files outside /dashboard (223 route files in total) |
| Sign-in theme | The Keycloak login theme (kuiperdesk/aaDash-keycloak-theme): sign-in, password, one-time code, passkey, registration and reset steps | 10 custom page components; other Keycloak pages use a styled fallback |
Browsers: the browser-based checks in section 4 are written for Chromium (desktop, and Chromium device emulation for Pixel 7 and Pixel Tablet). One spec, the public skip-link spec, also has a Firefox step. Safari, real iOS and Android devices, and browser and assistive-technology pairings were not tested.
3.2 Not covered
Each exclusion below was checked against the source tree. None of the tests in section 4 reach these.
| Not covered | Why |
|---|---|
| Native mobile apps | Separate codebases (kuiperdesk/aaReachAndroid, kuiperdesk/reach-mobile). Not evaluated. |
| The endpoint agent's native user interface and installers | Separate codebases (kuiperdesk/aaagent, kuiperdesk/aaInstaller). Not evaluated. |
| The embedded office editor | A third-party editor (Collabora Online, coolwsd) loaded in a frame by src/components/editor/CollaboraFrame.tsx. Its content is the third party's. The Arivaran page around the frame is in scope; the editor inside it is not. |
| Remote-desktop and remote-session content | The remote screen is drawn to a canvas and carries the remote computer's own interface and audio. The content of a session is not evaluated. The controls around the session are in scope but have no browser-based accessibility test. |
| PDFs and other exports | Evidence bundles, recovery reports, invoices and other generated files (src/lib/compliance/evidence-pdf.ts and others). No generated document has been checked for tagging or reading order. |
| The agent-served MyDesk application and the Beam in-page components | src/mydesk-spa and src/beam-spa are built from the dashboard source but served by the endpoint agent or injected into a visitor's page. Two source scans in section 4 read these directories; no rendered accessibility test covers them. |
| Beam visitor pages | Pages served to visitors of a published address by the gateway service, not by the dashboard. |
| Customer content shown in the dashboard | Mailbox items, file previews, uploaded media, and the video editing component (src/components/media/video-editor/VideoEditor.tsx). |
| Download host and product documentation | The download pages at get.arivaran.ai and written product documentation are not part of the dashboard build and are not evaluated. |
| Transactional email | Sign-up, verification and notification emails. Not evaluated. |
| Stock Keycloak pages | Keycloak pages for which the theme has no custom component use a styled fallback. One unit test checks that the fallback controls are styled and focusable; nothing else is measured. |
3.3 In scope but not reached by any rendered test
These are in scope. The tests do not reach them, so their rows read as unmeasured.
- 165 of the 178 dashboard route files are outside the 13-route signed-in axe pass (E1). Some are covered by component-level tests (E6, E9); most are not.
/privacy,/terms,/policiesand/policies/<document>(including this page) have no axe pass./policies/<document>renders each document, including this report, as HTML elements: headings (starting at level 2, under the page title at level 1), paragraphs, lists, quotations, code blocks, and tables with column header cells. A table or code block that is wider than the page scrolls sideways inside a region that takes keyboard focus and is named by the heading above it.tests/unit/policy-markdown-100.test.tsxrenders every document and checks, per document, that the number of headings, tables, list items, code blocks and rules equals the number in its source, and that no heading, table, list, quotation or bold marker is left as visible text. Limits: that test reads generated markup and a simulated DOM. These pages have not been viewed in a browser or read with a screen reader for this report. Tables have no caption and no row header cells, so a data cell is tied to its column header only. Before this version the pages showed the source as preformatted text, which was a failure of criterion 1.3.1.- Charts, maps and other canvas or SVG graphics in the dashboard have no text-alternative review.
- Toast notifications, tooltips and hover cards have no accessibility test.
- 56 of the 57 interface languages are machine-translated and unreviewed (
config/i18n-release-contract.json). English is the only release language. In the other languages, strings without a translation fall back to English.
4. Evidence base
Counts were taken from the source tree at this revision. Test file totals: 1,244 unit test files under tests/unit, 42 browser specs under tests/e2e, 21 live-host specs under tests/e2e-live, 16 test files in the sign-in theme.
E1. Signed-in routes axe pass (live staging host)
- Test:
tests/e2e-live/staging-live.spec.ts, group "try.app authenticated routes axe (#8476)". Workflow job: "try.app authenticated routes axe (#8476)" in.forgejo/workflows/aadash-staging-smoke.yml. - Routes (13):
/dashboard,/dashboard/endpoints,/dashboard/activity,/dashboard/storage,/dashboard/reach,/dashboard/onboarding,/dashboard/settings,/dashboard/settings/users,/dashboard/settings/alert-rules,/dashboard/settings/billing,/dashboard/settings/editor,/dashboard/devkit,/dashboard/me. - Rules: axe-core, rule tags
wcag2a,wcag2aa,wcag21a,wcag21aa,wcag22aa. No rule is disabled. There is no waiver list, allowlist or baseline; the assertion is zero violations. - Conditions: Chromium, 1280 x 900, light and dark colour schemes, signed in as an administrator, as each page first renders after its loading states settle.
- The same job measures the endpoints table at 1440, 1280, 1024 and 768 px for sideways scrolling.
- The job fails if fewer than 13 routes ran or any was skipped.
- Limits: started by hand (
workflow_dispatch); not run on every change. One role, one viewport, one browser. Each page is measured in its first state only: no dialogs opened, no forms submitted, no error states, no keyboard use.
E2. Public marketing routes axe pass (live staging host)
- Test: same spec, group "try.app marketing routes axe (#21694)". Workflow job: "try.app marketing routes axe (#21694)".
- Routes (12):
/,/pricing,/products,/git,/twin,/beam,/aran,/reach,/developers,/security,/changelog,/demo. Each product-panel state of a route is loaded and measured separately. - Rules and tags as E1. Conditions: Chromium, 1280 x 900, four passes per route (light and dark, with motion and with reduced motion).
- Phone-width cases in the same job measure
/beam,/twinand/compare/twin-recovery-outcomesat 320, 360 and 390 px, light and dark: axe, no sideways scroll, status shown in words. - Limits: started by hand. Chromium only.
E3. Bundle page matrix (live staging host)
- Test: same spec, cases "bundle preview matrix on /bundles/<id>". Workflow job: "try.app bundle preview matrix (#19188)".
- Routes (3):
/bundles/developer,/bundles/datacenter,/bundles/endpoint. - Measures: axe (tags as E1) in light and dark at 1440 x 1000; the skip link is the first focusable element and moves focus to the main region; keyboard selection of the product tabs (End, Enter); no scene animates under reduced motion (with a control that it does animate otherwise); under forced colours the heading, the selection and the page width hold; at 320 x 256 px (1280 x 1024 at 400%) the page does not scroll sideways and keeps its heading and panel.
- Limits: started by hand. Three pages. The 400% case is an emulated viewport, not native browser zoom.
E4. Bundle publication matrix (not run by any workflow)
- Test:
tests/e2e-live/bundle-publication-matrix-19132.spec.ts(17 cases, including text spacing with a long locale, an accessibility-tree snapshot and forced colours). - Limit: no workflow in
.forgejo/workflowsruns this spec. It is listed for completeness and is not used as evidence for any rating.
E5. Language and theme acceptance (live staging host)
- Test:
tests/e2e-live/locale-acceptance-18769.spec.ts(8 cases). Workflow:.forgejo/workflows/aadash-locale-acceptance.yml. - Measures: German long text does not overflow on four signed-in pages at desktop and compact widths; a language switch moves nothing under reduced motion; axe (tags
wcag2a,wcag2aa,wcag21a,wcag21aa,wcag22a,wcag22aa) in light and dark for English, German and Arabic on public and signed-in pages; no link sits under the pinned language card at 1366 x 768. - Limits: started by hand. Three of 57 languages.
E6. Component axe checks in a simulated DOM
- Helper:
tests/helpers/a11y.ts(expectNoAxeViolations). 30 unit test files call it, at 68 call sites. - Default rule tags:
wcag2a,wcag2aa,wcag21a,wcag21aa. Six call sites in five files addwcag22aa. - Disabled rule:
color-contrast, in every call. The simulated DOM (jsdom) does no layout or painting, so it cannot measure contrast, size, position, overflow or visibility. - The
test (a11y)job in.forgejo/workflows/aadash-test.ymlruns one of the 30 files,tests/unit/a11y-axe-smoke.test.tsx(16 cases: button, labelled input, badge, card, settings form, modal dialog, form field error, status badge, and the agentless session pages and network tabs). The other 29 files run in the unit test shards of the same workflow. - Limits: components are rendered alone with stubbed data, not as full pages. The workflow reports its result on a change; it does not block the change from being merged.
E7. Browser specs against a mocked backend
Run in Chromium against a local build with stubbed data.
tests/e2e/auth-surfaces-contrast-21760.spec.ts: the axecolor-contrastrule only, zero nodes, light and dark, on 13 surfaces:/login,/register,/register/verify,/join,/enroll,/device,/dashboard/settings,/dashboard/onboarding,/dashboard,/dashboard/endpoints,/dashboard/jobs,/dashboard/activity,/dashboard/support.tests/e2e/marketing-public-skip-link.spec.ts: the skip link on 16 public routes; at 320 px with long right-to-left text, forced colours and reduced motion; a visible focus indicator with 4.5:1 text in light and dark; not obscured at 200% text; works without JavaScript.tests/e2e/theme-accessibility.spec.ts: on/dashboard, Tab reaches interactive elements (THA-003); oneh1, a main and a navigation landmark, no unnamed buttons (THA-006); under forced colours three named controls show a focus outline (THA-008).tests/e2e/mobile-core.spec.ts(Pixel 7 emulation): the first ten visible buttons on/dashboard, and its inputs, are at least 44 px tall; a skip link exists; reduced motion shortens animation.tests/e2e/tablet-touch.spec.ts(Pixel Tablet emulation): the first twenty buttons on/dashboard, and its inputs, are at least 44 px; navigation drawer.tests/e2e/locale-controls.spec.ts: choosing Arabic setslang="ar"anddir="rtl"on the document.- Limits: the contrast, skip-link and language-control specs run in
.forgejo/workflows/aadash-test.ymlon a change. The theme, mobile and tablet specs run only in.forgejo/workflows/kuiperdesk-build.yml, which runs when a full build is promoted, not on every change. Stubbed data means real-data states are not measured.
E8. Static guards over the source and the design tokens
These read source files or colour tokens. They do not render anything.
- Contrast computed from colour tokens:
tests/unit/token-contrast.test.ts,tests/unit/button-label-contrast-21692.test.ts,tests/unit/muted-foreground-contrast-21908.test.ts,tests/unit/muted-text-alpha-contrast-18769.test.ts,tests/unit/brand-contrast-light-mode-21760.test.ts. - Keyboard:
tests/unit/sortable-header-keyboard-8476.test.ts(no clickable table header without a button) andtests/unit/marketing-scroll-regions-focusable.test.ts(no non-wrapping scroll region without a tab stop). Both scan components, routes and the two agent-served directories. - Overlays:
tests/unit/menu-and-overlay-a11y-8492.test.tsx(no full-screen overlay outside the shared focus handling, on the screens it names). - Input purpose:
tests/unit/autocomplete-coverage.test.ts(every use of the sharedInputcomponent carries anautoCompleteattribute). - Icon-button names: 31
*-action-title.test.tsfiles and 2*-control-title.test.tsfiles check that named icon-only controls carry anaria-labeland a title. - Touch targets:
tests/unit/file-tree-touch-targets-9040.test.ts. - Limits: a token test proves a colour pair, not that a page uses it. A source scan proves a pattern is absent, not that the rendered page works.
E9. Component behaviour tests
tests/unit/dialog-a11y.test.tsx: dialogs are named and modal, keep Tab and Shift+Tab inside, and return focus on Escape.tests/unit/command-palette-a11y.test.tsx: the command palette is a named modal dialog, keeps focus, and returns it on Escape.tests/unit/menu-and-overlay-a11y-8492.test.tsx: arrow keys, Home and End move within the restore-target menu; Tab leaves it.tests/unit/login-a11y.test.tsx(20 cases): one main landmark, oneh1, a programmatic label, an alert linked to its input, a polite live region.tests/unit/swipeable-list-item-focus.test.tsx: hidden swipe actions cannot take keyboard focus.tests/unit/install-to-value-journey.test.tsxandtests/unit/beam-journey-motion-12022.test.tsx: animated product scenes have native pause, play and replay buttons.tests/unit/jobs-refresh-announces-22233.test.ts: a user-started refresh on the jobs page renders a status message.tests/unit/domain-verification-step-a11y-20060.test.tsx: six states of the domain-verification step pass the E6 axe check.tests/unit/policy-markdown-100.test.tsx: each document under/policies/<document>renders as many headings, tables, list items and code blocks as its source has, with no leftover markup characters in the text; scrollable tables and code blocks take focus and are named by a heading. No axe check is part of it.- Limits: simulated DOM; no assistive technology.
E10. Languages and right-to-left
- 57 interface languages; four are right-to-left (Arabic, Hebrew, Persian, Urdu). English is authored; the other 56 are marked "machine-translated-unreviewed" in
config/i18n-release-contract.json. tests/unit/i18n-rtl-direction.test.ts(9 cases): the document'slanganddirfollow the chosen language.- Rendered right-to-left checks exist for Arabic only (E5, E7).
- Limits: translation quality has not been reviewed by a person in any language. The translation debt check (
npm run i18n:release) measured 79,667 missing language-key entries across the 56 preview languages at this revision, against a recorded ceiling of 84,463 (config/i18n-release-contract.json); those strings show in English.
E11. Sign-in theme suite
kuiperdesk/aaDash-keycloak-theme, 16 test files, run by thetest (keycloak theme)job in.forgejo/workflows/aadash-test.yml.src/login/identity-walk-18770.test.tsx(20 cases): no positivetabindex; field order; a focus-visible outline for every focusable element in the frame; animation only when motion is allowed; labels and links at least 24 px tall.src/styles/token-contrast.test.ts(8 cases): alert text meets 4.5:1 in both themes, computed from tokens; buttons keep a border under forced colours.- Limits: the theme suite does not run axe and does not render in a browser. The dashboard's own
/loginpage is measured for colour contrast (E7) and structure (E9). The Keycloak-served steps are not in any automated axe pass in this tree.
What these instruments cannot do
- axe-core detects a minority of WCAG failures. It cannot judge whether alternative text is accurate, whether headings and labels describe their content, whether focus order makes sense, or whether an announcement is useful.
- A simulated DOM does no layout: no contrast, no reflow, no target size, no focus visibility.
- Token and source scans measure intent in the code, not the rendered result.
- No instrument here uses a screen reader, voice control, switch access or screen magnification software.
5. WCAG 2.2 report
These tables also answer Revised Section 508 (501 Web and Software, 504.2 authoring tool, 602.3 support documentation, which incorporate WCAG 2.0 Level A and AA) and EN 301 549 clause 9 (Web), clause 10 (Non-web documents), clause 11.1 to 11.8 (Software) and clause 12 (Documentation and support services), to the extent section 6 and section 7 state.
Table 1: Success Criteria, Level A
| Criteria | Conformance Level | Remarks and Explanations |
|---|---|---|
| 1.1.1 Non-text Content | Partially Supports | axe image and control-name rules pass on the routes in E1, E2, E3 (tests/e2e-live/staging-live.spec.ts) and on the components in E6 (tests/helpers/a11y.ts). 33 source guards check aria-label on named icon buttons (E8, for example tests/unit/users-action-title.test.ts). Not measured: other routes; charts, maps and canvas graphics; whether any text alternative is accurate. |
| 1.2.1 Audio-only and Video-only (Prerecorded) | Not Applicable | The in-scope pages carry no prerecorded audio or video: no media files in public/, and the only video elements are a camera preview and a customer-media editor, both out of scope. |
| 1.2.2 Captions (Prerecorded) | Not Applicable | No prerecorded audio or video in the in-scope pages (see 1.2.1). |
| 1.2.3 Audio Description or Media Alternative (Prerecorded) | Not Applicable | No prerecorded video in the in-scope pages (see 1.2.1). |
| 1.3.1 Info and Relationships | Partially Supports | axe structure rules (lists, definition lists, tables, ARIA parent and child roles, form labels) pass on E1, E2, E3 and E6. tests/unit/login-a11y.test.tsx, tests/unit/profile-card-definition-list-8476.test.tsx and tests/unit/portfolio-panel-heading-outline.test.tsx hold specific structures. tests/unit/policy-markdown-100.test.tsx holds the heading, list and table elements of /policies/<document> against each document's source; those pages have no axe pass and their tables have no row header cells (section 3.3). Known exception: a comment in tests/e2e/theme-accessibility.spec.ts records a skipped heading level on the dashboard overview, not re-measured for this report. |
| 1.3.2 Meaningful Sequence | Not Evaluated | No test compares reading order with visual order. |
| 1.3.3 Sensory Characteristics | Not Evaluated | Needs a human review of instructions; none has been done. |
| 1.4.1 Use of Color | Partially Supports | tests/unit/a11y-axe-smoke.test.tsx checks that the status badge states its status in text. The phone-width cases in E2 check that each fact on /twin and /compare/twin-recovery-outcomes shows its status in words. axe link-in-text-block runs in E1 to E3. Not measured: charts, graphs and status indicators elsewhere. |
| 1.4.2 Audio Control | Not Applicable | No in-scope page plays audio: there is no audio element in the source and the interface sound module is a stub that plays nothing (src/lib/sound/index.ts). Remote-session audio is out of scope. |
| 2.1.1 Keyboard | Partially Supports | Source scans: no clickable table header without a button (tests/unit/sortable-header-keyboard-8476.test.ts), no scroll region without a tab stop (tests/unit/marketing-scroll-regions-focusable.test.ts). Behaviour: dialogs, command palette and one menu (E9); product tabs on three bundle pages (E3); Tab reaches controls on /dashboard (tests/e2e/theme-accessibility.spec.ts). Not measured: a keyboard walk of any full task; the file browser, charts, drag interactions and the remote-session controls. |
| 2.1.2 No Keyboard Trap | Partially Supports | Dialogs and the command palette release focus on Escape (tests/unit/dialog-a11y.test.tsx, tests/unit/command-palette-a11y.test.tsx); Tab leaves the restore-target menu (tests/unit/menu-and-overlay-a11y-8492.test.tsx). Not measured: pages that embed a frame or capture the keyboard for a remote session. |
| 2.1.4 Character Key Shortcuts | Supports | The dashboard binds character-key shortcuts (G then a letter, /) whenever focus is outside a text field (src/lib/hooks/useKeyboardShortcuts.ts). Preferences > Keyboard shortcuts turns them off for the browser in use; shortcuts with a modifier key and Escape keep working (tests/unit/single-key-shortcuts-100.test.tsx). They are on by default and cannot be remapped. A search of the dashboard source found no other character-key shortcut. Not tested with speech-input software. |
| 2.2.1 Timing Adjustable | Partially Supports | A session ends after 15 minutes without input. Two minutes before that, the signed-in pages open an alert dialog that names the clock time the session ends and offers "Stay signed in", which extends the session and can be used any number of times (src/components/auth/SessionIdleWarning.tsx). tests/unit/session-idle-warning-100.test.tsx holds the timing, the extend action and that Escape extends and does not sign out; one case in tests/e2e-live/staging-live.spec.ts opens the dialog on a rendered page, runs axe on it and extends from the keyboard. Exceptions: a session also ends 12 hours after sign-in whatever the activity, with no warning and no way to extend it; input inside the embedded office editor and other framed content does not count as activity, so the warning can open while a person is typing there. Not measured: a screen reader's announcement of the dialog; the sign-in theme's own time limits. |
| 2.2.2 Pause, Stop, Hide | Partially Supports | Animated product scenes on public pages have pause, play and replay buttons (tests/unit/install-to-value-journey.test.tsx, tests/unit/beam-journey-motion-12022.test.tsx) and stop under reduced motion (E3). Not measured: dashboard content that refreshes on its own (live status, activity, jobs). |
| 2.3.1 Three Flashes or Below Threshold | Not Evaluated | No flash analysis has been done. |
| 2.4.1 Bypass Blocks | Partially Supports | Public pages: the skip link is tested on 16 routes (tests/e2e/marketing-public-skip-link.spec.ts), on three bundle pages (E3), and a source walk checks every public page composition reaches it (tests/unit/marketing-skip-link.test.tsx). Dashboard: a test checks that the skip link exists (tests/e2e/mobile-core.spec.ts), not that it works. Sign-in pages: not measured. |
| 2.4.2 Page Titled | Partially Supports | axe document-title passes on E1 to E3. Four routes have a title assertion (tests/e2e/dashboard-overview.spec.ts, tests/e2e/endpoints.spec.ts, tests/e2e/i18n-route-loading-21916.spec.ts). Not reviewed: whether each of the other titles describes its page. |
| 2.4.3 Focus Order | Partially Supports | Dialogs keep and return focus (tests/unit/dialog-a11y.test.tsx); hidden swipe actions take no focus (tests/unit/swipeable-list-item-focus.test.tsx); the sign-in password step has no positive tabindex and a fixed field order (kuiperdesk/aaDash-keycloak-theme/src/login/identity-walk-18770.test.tsx). Not measured: focus order across a full page; where focus goes after navigation inside the dashboard. |
| 2.4.4 Link Purpose (In Context) | Partially Supports | axe link-name passes on E1 to E3 and E6, so links on those routes have a name. Whether each name states the link's purpose has not been reviewed. |
| 2.5.1 Pointer Gestures | Not Evaluated | The dashboard uses swipe, long-press and pull-to-refresh gestures on touch layouts. No test shows that each has a single-pointer alternative. |
| 2.5.2 Pointer Cancellation | Not Evaluated | No test covers it. |
| 2.5.3 Label in Name | Not Evaluated | No test compares visible labels with accessible names. |
| 2.5.4 Motion Actuation | Not Applicable | No in-scope function is operated by moving the device or the user; a source search for device motion and orientation events found none. |
| 3.1.1 Language of Page | Partially Supports | axe html-has-lang and html-lang-valid pass on E1 to E3. The document's lang follows the chosen language after the page loads (tests/unit/i18n-rtl-direction.test.ts, tests/e2e/locale-controls.spec.ts). Exception: the server sends lang="en" for every language (src/routes/__root.tsx) and the value is corrected in the browser. Sign-in theme: not measured. |
| 3.2.1 On Focus | Not Evaluated | No test covers it. |
| 3.2.2 On Input | Not Evaluated | No test covers it. |
| 3.2.6 Consistent Help | Not Evaluated | No review of help placement across pages has been done. |
| 3.3.1 Error Identification | Partially Supports | The shared form field marks an error with aria-invalid and an alert (tests/unit/a11y-axe-smoke.test.tsx); a sign-in failure is an alert linked to its input (tests/unit/login-a11y.test.tsx); six states of the domain-verification step (tests/unit/domain-verification-step-a11y-20060.test.tsx). Other forms have not been reviewed. |
| 3.3.2 Labels or Instructions | Partially Supports | axe label rules pass on E1 to E3 and E6; the sign-in input has a programmatic label (tests/unit/login-a11y.test.tsx); the mobile search input has a label (tests/e2e/mobile-core.spec.ts). Whether labels and instructions are sufficient has not been reviewed. |
| 3.3.7 Redundant Entry | Not Evaluated | No test covers it. |
| 4.1.1 Parsing | Not Applicable | Removed from WCAG 2.2. For WCAG 2.0 and 2.1 the W3C treats it as satisfied for HTML content. |
| 4.1.2 Name, Role, Value | Partially Supports | axe name and ARIA rules pass on E1 to E3 and E6. Component tests cover dialogs, the command palette, a menu, tabs and pressed-state buttons (E9, tests/unit/users-action-title.test.ts). Not measured: custom controls on other routes; the canvas-based remote-session viewer; behaviour with any assistive technology. |
Table 2: Success Criteria, Level AA
| Criteria | Conformance Level | Remarks and Explanations |
|---|---|---|
| 1.2.4 Captions (Live) | Not Applicable | The in-scope pages carry no live audio or video authored by Arivaran. Remote-session content is out of scope. |
| 1.2.5 Audio Description (Prerecorded) | Not Applicable | No prerecorded video in the in-scope pages (see 1.2.1). |
| 1.3.4 Orientation | Not Evaluated | Tests run in a phone portrait layout and a tablet layout (tests/e2e/mobile-core.spec.ts, tests/e2e/tablet-touch.spec.ts), but none rotates the display or checks that both orientations work. |
| 1.3.5 Identify Input Purpose | Partially Supports | Every use of the shared Input component carries autoComplete, and the sign-up form uses semantic values (tests/unit/autocomplete-coverage.test.ts). axe autocomplete-valid passes on E1 to E3. Not covered: native input elements that do not use the shared component. |
| 1.4.3 Contrast (Minimum) | Partially Supports | Rendered contrast is measured by axe on the 13 routes of E1, the 12 routes of E2, the 3 of E3 and the 13 surfaces of tests/e2e/auth-surfaces-contrast-21760.spec.ts, light and dark. Token pairs are computed in E8 and E11. Known exception recorded in tests/unit/token-contrast.test.ts: small status text on its light tint at about 2.9:1; later tests address status text, and the pair has not been re-measured for this report. Not measured: other routes; hover, focus, disabled and error states. |
| 1.4.4 Resize Text | Partially Supports | The skip link stays usable at 200% text on public routes (tests/e2e/marketing-public-skip-link.spec.ts); three bundle pages hold at an emulated 400% (E3); axe meta-viewport passes on E1 to E3. The dashboard has not been tested at 200%. |
| 1.4.5 Images of Text | Not Evaluated | No review of images for embedded text has been done. |
| 1.4.10 Reflow | Partially Supports | No sideways scroll at 320 px on three bundle pages (E3) and on /beam, /twin and /compare/twin-recovery-outcomes (E2); German long text on four signed-in pages at desktop and compact widths (E5). The endpoints table is measured down to 768 px only (E1). The dashboard has not been measured at 320 px. |
| 1.4.11 Non-text Contrast | Partially Supports | Status indicator tokens meet 3:1 (tests/unit/token-contrast.test.ts); three dashboard controls keep a focus outline under forced colours (tests/e2e/theme-accessibility.spec.ts); sign-in buttons keep a border under forced colours (kuiperdesk/aaDash-keycloak-theme/src/styles/token-contrast.test.ts). Not measured: input, checkbox and other control boundaries in general; chart graphics. |
| 1.4.12 Text Spacing | Not Evaluated | A text-spacing case exists for the bundle pages in E4, but no workflow runs it. axe avoid-inline-spacing passes on E1 to E3; it checks only that inline styles do not block a user's spacing. |
| 1.4.13 Content on Hover or Focus | Not Evaluated | Tooltips, hover cards and popovers have no test for dismiss, hover and persist behaviour. |
| 2.4.5 Multiple Ways | Not Evaluated | The dashboard has navigation and a command palette, and the public site has navigation; no test or review assesses this criterion. |
| 2.4.6 Headings and Labels | Not Evaluated | Needs a human review of whether headings and labels describe their content; none has been done. |
| 2.4.7 Focus Visible | Partially Supports | A rendered focus outline is asserted on three dashboard controls under forced colours, with a control that removing it fails (tests/e2e/theme-accessibility.spec.ts); on the skip link in light and dark (tests/e2e/marketing-public-skip-link.spec.ts); a focus-visible rule covers every focusable element in the sign-in frame (kuiperdesk/aaDash-keycloak-theme/src/login/identity-walk-18770.test.tsx, a style-rule check, not a rendering). Not measured: focus visibility across dashboard routes in the default themes. |
| 2.4.11 Focus Not Obscured (Minimum) | Partially Supports | The focused skip link is not obscured at 200% text (tests/e2e/marketing-public-skip-link.spec.ts); no link sits under the pinned language card at 1366 x 768 (E5); no floating control covers a bottom tab (tests/unit/floating-controls-clear-tab-bar-18769.test.tsx, a source scan). Not measured: focused controls under the dashboard's sticky header and bottom bar in general. |
| 2.5.7 Dragging Movements | Not Evaluated | Four source files handle drag events (src/components/chat/ChatWidget.tsx, src/components/remote/InstalledAppGrid.tsx, src/components/remote/SessionPlaybackTimeline.tsx, src/routes/dashboard/settings/published-apps.tsx). No test shows a non-dragging alternative for each. |
| 2.5.8 Target Size (Minimum) | Partially Supports | axe target-size runs under the wcag22aa tag in E1 to E3. Sampled buttons and inputs on /dashboard are at least 44 px on phone and tablet emulation (tests/e2e/mobile-core.spec.ts, tests/e2e/tablet-touch.spec.ts); file tree targets (tests/unit/file-tree-touch-targets-9040.test.ts); sign-in labels and links at least 24 px (kuiperdesk/aaDash-keycloak-theme/src/login/identity-walk-18770.test.tsx). Not measured: other routes at phone width. |
| 3.1.2 Language of Parts | Not Evaluated | No test checks that text in a different language from the page carries a lang attribute. In the 56 preview languages, untranslated strings are shown in English (E10); whether they are marked as English has not been checked. Treat this as a likely failure outside English. |
| 3.2.3 Consistent Navigation | Not Evaluated | No review across pages has been done. |
| 3.2.4 Consistent Identification | Not Evaluated | No review across pages has been done. |
| 3.3.3 Error Suggestion | Not Evaluated | No review of error messages for suggested corrections has been done. |
| 3.3.4 Error Prevention (Legal, Financial, Data) | Not Evaluated | The dashboard has confirmation dialogs for destructive actions; no test or review maps them to the actions this criterion covers (billing changes, deletion, restore). |
| 3.3.8 Accessible Authentication (Minimum) | Not Evaluated | Related evidence only: sign-in fields carry autoComplete values for password managers (tests/unit/autocomplete-coverage.test.ts, kuiperdesk/aaDash-keycloak-theme/src/login/IdentityFrame.test.tsx) and a passkey step exists. No test checks that every sign-in step avoids a cognitive function test or allows paste. |
| 4.1.3 Status Messages | Partially Supports | A polite live region on sign-in (tests/unit/login-a11y.test.tsx); a status message after a user-started refresh on the jobs page (tests/unit/jobs-refresh-announces-22233.test.ts); form errors as alerts (tests/unit/a11y-axe-smoke.test.tsx); the language control's status (tests/e2e/locale-controls.spec.ts). The dashboard announces page changes through src/components/common/RouteAnnouncer.tsx, which no test exercises. Not measured: toast notifications; whether any announcement is spoken by a screen reader. |
Table 3: Success Criteria, Level AAA
Not evaluated. Level AAA is outside this report.
6. Revised Section 508 report
Chapter 3: Functional Performance Criteria
No functional performance criterion has been tested with users or with assistive technology. The ratings below follow from section 5 only.
| Criteria | Conformance Level | Remarks and Explanations |
|---|---|---|
| 302.1 Without Vision | Not Evaluated | No screen-reader testing has been done. Structural evidence is in section 5 (1.1.1, 1.3.1, 4.1.2, 4.1.3). |
| 302.2 With Limited Vision | Not Evaluated | No testing with magnification or with users. Related evidence: 1.4.3, 1.4.4, 1.4.10 in section 5. |
| 302.3 Without Perception of Color | Not Evaluated | Related evidence: 1.4.1 in section 5. |
| 302.4 Without Hearing | Not Applicable | No in-scope function needs hearing; the in-scope pages play no audio. |
| 302.5 With Limited Hearing | Not Applicable | As 302.4. |
| 302.6 Without Speech | Not Applicable | No in-scope function needs speech input. |
| 302.7 With Limited Manipulation | Not Evaluated | No testing with switch or voice control. Related evidence: 2.1.1, 2.5.8 in section 5. See 2.1.4 for character-key shortcuts. |
| 302.8 With Limited Reach and Strength | Not Evaluated | No assessment has been done. |
| 302.9 With Limited Language, Cognitive, and Learning Abilities | Not Evaluated | No assessment has been done. |
Chapter 4: Hardware
Not Applicable. The product is a web application and includes no hardware.
Chapter 5: Software
| Criteria | Conformance Level | Remarks and Explanations |
|---|---|---|
| 501.1 Scope, incorporation of WCAG 2.0 AA | See section 5 | The in-scope product is web content. Its ratings are the WCAG tables in section 5. |
| 502 Interoperability with Assistive Technology | Not Applicable | Applies to platform software and to software that is not web content. The in-scope product is web content running in a browser. Native applications are out of scope (section 3.2). |
| 503.2 User Preferences | Not Applicable | Section 508 excepts web applications from 503.2. Evidence on browser colour-scheme, reduced-motion and forced-colours settings is listed in section 4 (E2, E3, E7). |
| 503.3 Alternative User Interfaces | Not Applicable | The product provides no alternative user interface that works as assistive technology. |
| 503.4 User Controls for Captions and Audio Description | Not Evaluated | The in-scope pages have no media player for prerecorded content. The dashboard includes a video editing component for customer media, which is out of scope and has no accessibility test. |
| 504.2 Content Creation or Editing | Not Evaluated | The dashboard has editing features (settings forms, policy editors). The embedded office editor is a third party's and is out of scope. No assessment of authoring features has been done. |
| 504.2.1 Preservation of Information Provided for Accessibility in Format Conversion | Not Evaluated | File conversion features have not been assessed. |
| 504.2.2 PDF Export | Not Evaluated | Generated PDFs have not been checked for tagging (section 3.2). |
| 504.3 Prompts | Not Evaluated | No assessment has been done. |
| 504.4 Templates | Not Evaluated | No assessment has been done. |
Chapter 6: Support Documentation and Services
| Criteria | Conformance Level | Remarks and Explanations |
|---|---|---|
| 602.2 Accessibility and Compatibility Features | Not Evaluated | This report is the only published description of accessibility features. Product documentation has not been reviewed for it. |
| 602.3 Electronic Support Documentation | Not Evaluated | Product documentation is outside the dashboard build and has not been tested (section 3.2). |
| 602.4 Alternate Formats for Non-Electronic Support Documentation | Not Applicable | No non-electronic support documentation is supplied. |
| 603.2 Information on Accessibility and Compatibility Features | Not Evaluated | Support is by email (section 8). Support staff have not been assessed on accessibility information. |
| 603.3 Accommodation of Communication Needs | Not Evaluated | No assessment has been done. |
7. EN 301 549 report
EN 301 549 V3.2.1 refers to WCAG 2.1. The criteria added in WCAG 2.2 (2.4.11, 2.5.7, 2.5.8, 3.2.6, 3.3.7, 3.3.8) are not part of it; their rows in section 5 are additional.
Chapter 4: Functional Performance Statements
| Criteria | Conformance Level | Remarks and Explanations |
|---|---|---|
| 4.2.1 to 4.2.11 (all statements) | Not Evaluated | No statement has been tested with users or with assistive technology. See section 6, chapter 3, for the related evidence and the statements that do not apply. |
Chapters 5 to 8 and 13
| Criteria | Conformance Level | Remarks and Explanations |
|---|---|---|
| 5 Generic Requirements | Not Evaluated | No assessment has been done. |
| 6 ICT with Two-Way Voice Communication | Not Evaluated | Not assessed. Remote sessions, which can carry audio, are out of scope (section 3.2). |
| 7 ICT with Video Capabilities | Not Applicable | The in-scope pages play no prerecorded or live video authored by Arivaran (see 1.2.1). |
| 8 Hardware | Not Applicable | No hardware. |
| 13 ICT Providing Relay or Emergency Service Access | Not Applicable | The product provides neither. |
Chapter 9: Web
Clause 9.1 to 9.4 maps to WCAG 2.1 as follows. The rating of each clause is the rating of the matching row in section 5.
| Clause | Maps to | Conformance Level |
|---|---|---|
| 9.1.1.1 to 9.1.4.13 | WCAG 1.1.1 to 1.4.13, Level A and AA rows in Tables 1 and 2 | As the matching row |
| 9.2.1.1 to 9.2.5.4 | WCAG 2.1.1 to 2.5.4, Level A and AA rows in Tables 1 and 2 | As the matching row |
| 9.3.1.1 to 9.3.3.4 | WCAG 3.1.1 to 3.3.4, Level A and AA rows in Tables 1 and 2 | As the matching row |
| 9.4.1.1 to 9.4.1.3 | WCAG 4.1.1 to 4.1.3 | As the matching row |
| 9.6 WCAG conformance requirements | The five WCAG conformance requirements | Not Evaluated. Full-page and complete-process conformance cannot be stated from partial evidence. |
Chapter 10: Non-web Documents
| Criteria | Conformance Level | Remarks and Explanations |
|---|---|---|
| 10.1 to 10.4 (all clauses) | Not Evaluated | The product generates documents (PDF evidence bundles, recovery reports, invoices, exports). None has been checked (section 3.2). |
Chapter 11: Software
| Criteria | Conformance Level | Remarks and Explanations |
|---|---|---|
| 11.1 to 11.4 (software that is not web content) | Not Applicable | The in-scope product is web content, rated under chapter 9. Native applications are out of scope (section 3.2). |
| 11.5 Interoperability with Assistive Technology | Not Applicable | Applies to software that is not web content. |
| 11.6 Documented Accessibility Usage | Not Applicable | Applies to platform software. |
| 11.7 User Preferences | Not Evaluated | The surfaces tested in section 4 follow the browser's colour-scheme, reduced-motion and forced-colours settings (E2, E3, E7). Other user preferences and other surfaces have not been assessed. |
| 11.8 Authoring Tools | Not Evaluated | See 504.2 to 504.4 in section 6. |
Chapter 12: Documentation and Support Services
| Criteria | Conformance Level | Remarks and Explanations |
|---|---|---|
| 12.1.1 Accessibility and Compatibility Features | Not Evaluated | This report is the only published description. Product documentation has not been reviewed for it. |
| 12.1.2 Accessible Documentation | Not Evaluated | Product documentation has not been tested. This report itself is served as a web page with heading, list and table elements (section 3.3). That page has no axe pass and has not been read with a screen reader. |
| 12.2.2 Information on Accessibility and Compatibility Features | Not Evaluated | Support staff have not been assessed on accessibility information. |
| 12.2.3 Effective Communication | Not Evaluated | No assessment has been done. |
| 12.2.4 Accessible Documentation (provided by support services) | Not Evaluated | No assessment has been done. |
8. Known gaps and how to report an issue
Known gaps
- No independent audit and no screen-reader audit. Everything in this report is engineering's own reading of automated results.
- Single-character keyboard shortcuts are on by default (2.1.4). They can conflict with speech-input software until turned off in Preferences > Keyboard shortcuts. The choice is kept per browser, not per account, and the shortcuts cannot be remapped.
- Session time limits (2.2.1). The 15-minute inactivity limit warns two minutes ahead and can be extended (Table 1). The 12-hour limit on a session's total length has no warning and cannot be extended, and input inside framed content such as the office editor is not counted as activity.
- Policy documents are checked by a unit test only (1.3.1), including this report.
/policies/<document>renders headings, lists and tables as elements (section 3.3), but those pages have no axe pass, have not been read with a screen reader, and their tables have no captions or row header cells. - Coverage is narrow. 13 of 178 dashboard route files have a rendered axe pass. Most dashboard pages, all dialogs opened from them, and all error states have no rendered accessibility measurement.
- Languages. Only English is authored. The other 56 languages are machine-translated and unreviewed, with English shown where a translation is missing. Right-to-left rendering has been checked for Arabic only.
- Browsers and assistive technology. Chromium only. No Safari, no real mobile device, no screen reader, no voice control, no magnifier.
- Remote sessions, the embedded office editor, generated documents, native apps and the endpoint agent are out of scope (section 3.2). Buyers who rely on those need a separate assessment.
- Possibly stale findings carried in test comments: small status text contrast (1.4.3) and a skipped heading level on the dashboard overview (1.3.1). Neither was re-measured for this report.
- Run results are not attested. The live-host checks (E1, E2, E3, E5) are started by hand, and no automated check blocks a release.
Reporting an accessibility problem
Write to support@arivaran.ai for a problem that is stopping you from using the product, or to compliance@arivaran.ai for questions about this report or to request the independent audit. Please include the page address, what you were trying to do, and the browser and assistive technology you use. This report makes no commitment on response times.
Independent audit
An independent accessibility audit by a third party will be commissioned when a buyer requests it. Its findings, including any that contradict this report, will be folded into the next version of this report.
9. Revision history
| Version | Date | Change |
|---|---|---|
| 1.0 | 2026-10-12 | First version. Self-assessed by engineering from the automated checks and tests in the source tree. |
| 1.1 | 2026-10-12 | /policies/<document> renders headings, lists and tables as elements instead of preformatted source. Section 3.3, the 1.3.1 row, the EN 301 549 12.1.2 remark and known gap 4 restated. No rating changed. |
| 1.2 | 2026-10-12 | The inactivity limit warns two minutes ahead and can be extended. The 2.2.1 row moves from Not Evaluated to Partially Supports, and known gap 3 is restated. |
| 1.3 | 2026-10-12 | Character-key shortcuts can be turned off in Preferences. The 2.1.4 row moves from Does Not Support to Supports, and known gap 2 is restated. |
Published by Arivaran.ai Inc. "Voluntary Product Accessibility Template" and "VPAT" are registered service marks of the Information Technology Industry Council (ITI). This report follows the VPAT 2.5 INT layout. It has not been reviewed by ITI or by any third party.