Accessibility statement
What TDACorp Identity does for accessibility, how it is tested, and what is not yet verified. It describes the repository as it is, and it does not claim conformance with any standard.
On this page
Draft
About this statement
This statement covers the web pages of TDACorp Identity: the sign-in, registration and recovery flows, the account area, and the public trust pages. It says what the code does, which automated and manual checks exist, and what is still owed.
Note
TDACorp Identity is in pre-production. This statement describes behaviour that exists in the repository today. It is not a conformance report, not a VPAT, and not a claim that the product meets any accessibility law or standard.
Last reviewed 5 October 2026.
Scope
| In scope | Notes |
|---|---|
| Sign-in | Identify step, password step, passkey offer, second-factor step, recovery-code step, an ended sign-in, magic-link pages |
| Registration | Registration, email verification, passkey set-up after registration |
| Recovery | Start recovery, continue recovery, cancel recovery, secure your account |
| Consent and sign-out | The OpenID Connect consent screen and the sign-out confirmation |
| Account area | Account home, Profile, Security, Sessions, Activity, Notifications, Privacy and data, Access tokens, Connected apps, Developer, Organizations |
| Trust pages | Overview, security, vulnerability disclosure, privacy, cookies, retention, terms, data processing, subprocessors, incident response, accessibility |
| Error pages | The 404 page and the generic error page |
| Security and sign-in messages sent by the platform, each with an HTML part and a plain-text part |
| Out of scope | Why |
|---|---|
| tdacorp.in, the marketing website | A separate product with its own statement |
| Other TDACorp products that use this platform | Each product renders its own pages and is responsible for its own accessibility |
| The administrative console and the operator command-line tool | Not part of the end-user pages covered by the automated matrix described below |
| Authenticator hardware, platform passkey prompts, mail clients | Provided by your device and software, outside this platform's control |
Conformance target
The repository's target is WCAG 2.2 level AA. The automated checks use the rule tags wcag2a, wcag2aa, wcag21a, wcag21aa and wcag22aa.
| Question | Answer |
|---|---|
| Is there a stated target? | Yes. WCAG 2.2 AA, as recorded in the repository's accessibility review and test configuration |
| Is conformance claimed? | No. Automated scans cannot establish conformance, and manual checks are still owed (see known limitations) |
| Has an independent accessibility audit been done? | No |
| Is a VPAT or accessibility conformance report published? | No |
| Is any legal compliance claimed? | No. This page is not legal advice |
What is tested
Automated scans
An end-to-end suite runs axe-core in a real Chromium browser against a real running instance of the platform. The same scan runs in four combinations for every page.
| Dimension | Values |
|---|---|
| Colour-scheme preference | Light and dark, set with browser media emulation |
| Viewport width | 1280 CSS pixels and 320 CSS pixels |
| Rules | WCAG 2.0, 2.1 and 2.2, levels A and AA |
| Extra assertion | The page must not scroll sideways, which checks WCAG 1.4.10 reflow |
| Failure behaviour | Any violation fails the test, and the message carries the rule, the impact and the offending selectors |
The scanner is axe-core 4.13.0 through @axe-core/playwright 4.13.0, as recorded in the repository's review.
Pages and states covered
| Group | Covered by the axe matrix |
|---|---|
| Public flow pages | Sign-in, register, recover, signed-out, sign-out, step-up, error page, and the pages a mailed token opens (shown in their "not valid" state) |
| Trust pages | All eleven: the overview, security, vulnerability disclosure, privacy, cookies, retention, terms, data processing, subprocessors, incident response and accessibility |
| Sign-in states | The password step, the refused-password error state, the client-side validation error on the identify step, the passkey offer, the second-factor step, the recovery-code step, an ended sign-in |
| Consent | The consent screen of a relying-party sign-in |
| Account area | Every page in the account area except a single developer client's detail page, signed in |
| Open overlays | The account All settings menu and the notifications bell dialog (opened at desktop width), plus the component gallery with a dialog open |
| Error pages | The 404 page |
| Redirect behaviour | A signed-out visit to an account page is sent to sign-in, with the page kept for after |
Behavioural tests
| Test | What it checks |
|---|---|
| Keyboard sign-in | The whole password sign-in is completed with Tab, typing and Enter and no pointer (WCAG 2.1.1, 2.4.3, 2.4.7). When a step changes, the step title takes focus so a screen reader announces it |
| Focus indicator and traps | For the first 14 Tab presses on the sign-in page, every focused control shows a visible indicator (outline or ring), focus moves through more than three distinct controls, and focus is not pinned on one |
| Reduced motion | With the reduce preference set, no element has a CSS animation, no animation is running, and no transition outlasts one frame, on sign-in, register, the privacy page, the component gallery, and the signed-in account shell with its notifications bell open. The same measurement with the preference off must find a real transition, so the check cannot pass by looking at nothing |
| Phone layout | On a 412 pixel phone profile, public pages and account pages do not scroll sideways. The account area is reached through a horizontal navigation strip of eight links under the bar, with the current page marked by aria-current. There is no bottom bar and no More sheet |
| Contrast tokens | A unit test parses the stylesheet and asserts WCAG contrast for both colour schemes: the three text tiers at 4.5:1 on the page and surface grounds, accent, status and info text and the button label on the accent fill at 4.5:1, and the focus ring at 3:1. The field line is only pinned to its approved value with a floor of 1.5:1, which is below 3:1 (see limitations) |
| Component markup | Component tests assert label wiring and ARIA attributes, and that no component renders an inline style |
Note
These are descriptions of what the tests assert. This page does not publish the result of the latest run. Run the suite yourself, or ask, if you need the current result.
Defects the automated checks found and fixed
| Page | Rule | Cause | Fix |
|---|---|---|---|
| Subprocessors page at 320 px | WCAG 1.4.10 | A long unbreakable table cell made the page scroll sideways | Table cells wrap anywhere |
| Account security page | Target size (WCAG 2.5.8) | Link-style buttons such as remove passkey were under 24 px | Minimum block size of 24 px |
| Account tables at 320 px | Scrollable region focusable (WCAG 2.1.1) | A table wrapper that scrolls was not reachable by keyboard | Wrapper given a region role, a tab stop and an accessible label |
These came from the earlier generation of the pages. The matrix now runs against the current web application, and the repository's review does not record a separate list of defects for it.
Keyboard and focus behaviour
| Behaviour | What the code does |
|---|---|
| Skip link | Every page begins with a "Skip to content" link, rendered by the shared layout, and the error boundary page has one too |
| Visible focus | One global rule gives every link, button, input, select, textarea, summary and element with a tab index a 2 pixel outline in the focus-ring colour with a 1 pixel offset on keyboard focus |
| Focus ring contrast | The focus ring colour is asserted at 3:1 against its ground in both schemes |
| Step changes | In the sign-in flow the step title takes focus when the step changes, so the next Tab reaches the first field of the new step |
| Dialogs | Dialogs use the native dialog element, so focus trapping and Escape are the browser's own behaviour |
| Menus | Menus use the browser's native popover, with keyboard handling in a shared helper. The account All settings menu is scanned open |
| Notifications | The notifications bell opens a dialog, which is scanned open and closes with Escape |
| Switches | A switch is a native checkbox with the switch role, so Space works and the value submits with the form |
| Touch targets | With a fine pointer, controls are 24, 26 or 30 px high. On coarse pointers buttons, form fields, menu items and navigation items grow to at least 44 px, and checkboxes and radio buttons to 24 px |
| No pointer-only actions | The keyboard test completes sign-in with no pointer. Other flows are covered only by the automated scans, not by a keyboard script |
Forms and error handling
| Aspect | Behaviour |
|---|---|
| Labels | A field's label, hint and error are tied to one control by generated for and id, aria-describedby and aria-invalid attributes, not written by hand per page |
| Required fields | aria-required is set from the form's required flag |
| Errors | An error message is rendered in a paragraph with the alert role, so it is announced when it appears. Errors name the problem in words, and the page does not rely on colour alone |
| Status | Status always has an icon or a word (alerts and status pills), never colour alone |
| Autocomplete | Sign-in fields carry autocomplete hints: username webauthn for the identifier, current-password for the password. The recovery-code field turns autocomplete off and disables capitalisation and spell-check |
| Numeric codes | The one-time code input uses numeric input mode |
| Live regions | The sign-in, registration and recovery flows use live regions. Whether the announcements read well in a screen reader has not been checked by hand (see limitations) |
| Destructive actions | Deactivating an account needs a typed phrase, "delete my account", with a hint to type it exactly as shown, and a confirmation dialog |
| Time limits | A sign-in in progress lasts at most 10 minutes. A step-up proof lasts 10 minutes. A magic link is valid for 15 minutes. These are security limits. No control to extend them exists |
Colour contrast and themes
| Aspect | Behaviour |
|---|---|
| Themes | Dark and light. The light scheme follows the operating-system preference (prefers-color-scheme) with no script. The stylesheet also honours a theme attribute on the root element, but nothing in the product sets it |
| Manual theme switch | None. To change the theme, change your operating-system or browser preference. A site-level toggle is not built |
| Default | Dark for browsers that express no light preference |
| Browser chrome | The theme colour meta tag matches the page ground of each scheme |
| Text contrast | Three text tiers asserted at 4.5:1 on page and surface grounds, in both schemes |
| Status and accent text | Accent, status and info text asserted at 4.5:1 on the page ground, and the button label on the accent fill at 4.5:1 |
| Non-text contrast | Focus ring asserted at 3:1. The field line is the approved kit value, pinned with a floor of 1.5:1, which is below the 3:1 of WCAG 1.4.11. This is an open owner decision |
| Colour alone | Never the only signal. Status carries an icon or a word, and activity events carry a word: Routine, Review or Review now |
| Fonts | IBM Plex Sans and Plex Mono, self-hosted, latin subset, with size-adjusted local fallbacks. No third-party font is requested |
| Forced colours and high contrast | Not specially handled. The stylesheet has no forced-colours or contrast-preference rules |
Motion
| Aspect | Behaviour |
|---|---|
| Feedback motion | 120 ms for hover, press and switch feedback |
| Disclosure motion | 200 ms for menus and sheets |
| Sign-in pages | No entrance motion, no film grain, no entrance keyframes |
| Reduced motion | When the browser reports a reduce preference, animation is turned off and transitions are cut to 0.01 ms globally, and smooth scrolling is disabled |
| Verification | An end-to-end test measures this, as described above |
Responsive layout and zoom
| Aspect | Behaviour |
|---|---|
| Viewport | The viewport meta sets the device width and does not restrict zoom |
| Reflow | Pages are scanned at 320 CSS pixels and asserted not to scroll sideways |
| Tables | Wide tables on the account pages scroll inside a keyboard-focusable, labelled region rather than scrolling the page. The subprocessor table wraps long text |
| Phone navigation | A horizontal strip of eight navigation links under the bar at 760 px and below |
| Text zoom to 200 percent | Not yet checked by hand (see limitations) |
Language
| Aspect | Behaviour |
|---|---|
| Page language | Every page sets lang="en" |
| Available languages | English only |
| Locale and time zone | An account can store a locale and a time zone, and times are shown through a local-time component. The interface text itself is not translated |
| Plain language | Copy is written to be short and direct, and error messages say what to do next |
| Messages are in English, with a plain-text part and an HTML part |
| Check | Result |
|---|---|
| Format | Every message carries a plain-text part and an HTML part rendered from one block list, so they cannot diverge. The HTML is a table layout with inline styles, a dark colour scheme, a document language and a title |
| Images | None. The header is a text wordmark, and a test fails if a template carries an image. There are no tracking pixels or remote images, so alt text does not apply |
| Links | All use https://, are separated by whitespace and do not end in punctuation. No tracking parameters |
| Bearer links | A link that carries a secret opens a confirmation page and acts only on a form submission, so a mail scanner prefetching the link changes nothing |
| Subject lines | Descriptive |
| Recipients | One recipient per message |
| Enforcement | A deliverability test in the email package enforces these properties |
Assistive technology
| Technology | Status |
|---|---|
| Screen readers (NVDA, VoiceOver, JAWS, TalkBack) | No supported combination is claimed. A manual pass of sign-in, consent and authenticator enrolment is still owed |
| Keyboard only | The password sign-in is tested keyboard-only. Other flows are scanned automatically but not scripted by keyboard |
| Browser zoom and text resize | Reflow at 320 px is tested. 200 percent text zoom is not yet checked by hand |
| Voice control | Not tested |
| Switch access | Not tested |
| Screen magnifiers | Not tested |
| Passkey prompts | Provided by your browser and operating system. How they announce is outside this platform's control |
Note
This statement does not list supported browsers, screen readers or devices, because none has been verified by a person using it. The automated checks run in Chromium only.
Known limitations
| Limitation | Detail | Status |
|---|---|---|
| No manual screen reader pass | NVDA or VoiceOver testing of sign-in, consent and authenticator enrolment, including how the error note and passkey prompt state are announced, has not been done | Owed |
| Live-region announcements unverified | The sign-in, registration and recovery flows use live regions, and whether the announcements are timely and clear is not checked by hand | Owed |
| Focus order on consent | The visible order of Allow and Deny on the consent screen is a product decision that has not been settled | Owner decision pending |
| 200 percent text zoom | Not yet checked by hand | Owed |
| Windows forced colours | Not yet checked, and no forced-colours styling exists | Owed |
| No light and dark switch | The theme follows the operating system. There is no on-page control | Not built |
| Field line contrast | The border of form fields is below the 3:1 non-text contrast of WCAG 1.4.11, by an approved kit value | Owner decision pending |
| axe cannot judge focus order or traps | Automated tools cannot decide whether focus order is logical. Only the sign-in keyboard test covers it | Partly covered |
| Chromium only | The automated scans and behavioural tests run in Chromium. Other browsers are not tested by the suite | Known |
| Error page not scanned | The 500 page needs a fault-injection instance and is not in the scan. It is static markup on the same shell as the pages that are scanned | Known gap |
| Email round trips not scanned | States that need a mailed link beyond the "check your email" step are scanned only in their invalid-token state | Known gap |
| English only | No translations exist | Not built |
| No independent audit | No third-party accessibility audit and no user testing with people who use assistive technology | Not done |
| Security time limits | Sign-in, step-up and magic-link time limits cannot be extended, because they are security controls | By design |
| Other products | Products built on the platform may have their own barriers | Out of scope |
How to report an accessibility problem
Email security@tdacorp.in. The address is the published contact for the trust pages, and no separate accessibility mailbox exists yet.
| What helps | Why |
|---|---|
| The page address, and what you were trying to do | So the problem can be found and reproduced |
| What went wrong, and what you expected | So the barrier is clear |
| The browser, operating system and any assistive technology | So it can be reproduced under the same conditions |
| Whether you can use the platform at all | So the problem is prioritised against what blocks you |
Note
No response time is promised. TDACorp runs no round-the-clock rota, and the disclosure policy's response times are intentions rather than commitments. Do not send a password, a recovery code or a one-time code in a report.
Alternatives
| If you cannot use | Alternative available today |
|---|---|
| A password field | A passkey, or a one-time sign-in link sent by email |
| A passkey prompt | A password, followed by an authenticator code or a recovery code where a second factor is set |
| An authenticator app | A recovery code (batches of 10, each works once), or a passkey |
| The web page for a security action | Email security@tdacorp.in. Nothing guarantees an out-of-band alternative for every action, because each action acts only on a signed-in account |
| A data export download | Request it again from Privacy and data. The download is available for 7 days |
Note
No telephone, chat, or postal alternative is published.
What this page does not claim
| Not claimed | Detail |
|---|---|
| Conformance | No claim of WCAG 2.2 AA conformance, EN 301 549, Section 508 or any legal accessibility compliance |
| Audit | No independent accessibility audit, no VPAT, no user testing with assistive technology users |
| Assistive technology support | No screen reader, browser or device combination is declared supported |
| Latest test result | The description of the tests is not a publication of their latest run |
| Completeness | Automated tools find only part of the barriers a person can meet |
| Other surfaces | tdacorp.in, the administrative console, and products built on the platform are not covered |
| Future features | A theme switch, translations, forced-colours styling and a dedicated accessibility mailbox are not built and are not promised |
See also the trust overview, the security practices and the privacy policy.