// Accessibility · TRUSTING Framework in Practice
This Site
Passed Its Own Test.
Uncrossed Signals builds tools and checks accessibility. This page is the veracity — a live structural AT audit of this site, run against our own AT Checker before publish. No exemptions. No exceptions.
This page documents two audit runs. The first used AT Checker v1.0 at initial deployment. After upgrading the checker to v3.0 — which added contrast, font size, text spacing, and touch target checks — we re-ran the audit and found additional issues not visible to the original tool. Both runs are recorded below in full, including what v3.0 found and the fixes applied. A third pass was completed after the site was refactored from a single-page app to a multi-page structure with dedicated URLs, a hamburger nav for mobile, and full hash-routing replaced by standard browser navigation. No exemptions. No exceptions.
// Structure
Language attribute present
lang="en" on <html> on every page
Unique, descriptive page title per page
Each page carries its own <title> — e.g. "Privacy Policy — Uncrossed Signals, LLC" — distinct from every other page title
Single H1 per page
Multi-page architecture: each file is its own document with exactly one H1. The inert workaround used in the prior SPA build is no longer needed.
Heading hierarchy logical
H1 → H2 → H3 structure maintained per page with no skipped levels
<main> landmark present with label
Each page has one <main id="main-content"> with a descriptive aria-label identifying the page and site
<nav> landmarks labelled
Primary nav: aria-label="Main navigation"; mobile drawer: aria-label="Mobile navigation" — both identifiable as separate landmarks
Charset declared
UTF-8 character encoding meta present on every page
Viewport meta allows zoom
No user-scalable=no or maximum-scale=1 on any page
// Images
No content images without alt text
TRUSTING badge loaded as <img alt="" aria-hidden="true"> — decorative, correctly suppressed from AT
SVG elements have accessibility attributes
Nav sigil SVG marked aria-hidden="true" focusable="false" on every page — decorative, not interactive
// Forms
No form inputs present
No form fields on this site — no label audit required
All buttons have accessible text
Hamburger button carries aria-label="Open navigation menu" toggled to "Close navigation menu" on state change
// ARIA
No aria-hidden with focusable children
All aria-hidden elements are purely decorative with no interactive children
No unlabelled dialogs
No dialog elements present on any page
aria-current="page" on active nav link
Nav script reads data-page on <body> and sets aria-current="page" on matching [data-nav] links in both desktop and mobile nav on every page load
Privacy table has accessible label
aria-label="Data practices by product" applied to the data table on the privacy page; all <th> carry scope="col"
Pillars list uses semantic <ol>
TRUSTING pillars converted from div soup to a proper ordered list — screen readers announce "list of 8 items" and count through each pillar
// Keyboard
Skip navigation link present
Visually hidden skip link as first focusable element on every page — visible on keyboard focus, routes to <main id="main-content">
Nav links are real <a> elements with href
All navigation uses anchor elements with root-relative href paths — correct link semantics for AT; browser back/forward and bookmarking work natively
No positive tabindex values
Natural tab order maintained throughout all pages
No outline:none detected
:focus-visible styles applied to all interactive elements in styles.css
// Motion
Animations respect prefers-reduced-motion
@media (prefers-reduced-motion: reduce) in styles.css suppresses all scan-line, pulse, and fadeUp animations across all pages
No autoplay media
No audio or video elements present on any page
// Visual
Font sizes use relative units
rem used throughout styles.css; px reserved for decorative SVG elements only
Active nav state uses non-color indicator
Active link distinguished by green color AND a 2px border-bottom — satisfies WCAG 1.4.1 (not color alone)
Status/badge elements have text labels or are decorative
Signal-dot spans marked aria-hidden="true" — surrounding text ("Active", "Nominal") carries the meaning
// Links
All links have descriptive text
No generic "click here" or "read more" anchor text used on any page
No new-tab links without warning
Only mailto links open externally — no target="_blank" in use across the site
Prose links have non-color visual distinction
text-decoration: underline applied globally to all links in styles.css base rule; nav links explicitly opt out via text-decoration: none
Link color overrides browser default
Base a { color: var(--green) } eliminates browser purple on all pages; visited state uses --green-dim (#2A9940, 4.0:1 on sapphire)
// Contrast + Size
All declared font sizes meet 12px floor
0.75rem minimum throughout styles.css; --text-dim corrected from #5E6B7D (2.79:1, fail) to #8090A8 (4.67:1, pass); finding and note text raised from 0.78rem to 0.82rem
5 colors flagged by heuristic scan — confirmed false positives
Background and decorative colors flagged; heuristic cannot distinguish text from background without rendered context. All text color pairings verified against WebAIM contrast checker. No text contrast failures confirmed.
// Spacing + Targets
Touch targets meet 44px minimum
min-height: 44px on all nav links, buttons, and CTAs in styles.css; mobile drawer links raised to 52px
Tight line-height declarations resolved
Heading line-height set to 1.2 minimum; sub-1.5 values exist only on decorative large display elements, not body text
// Mobile
Navigation accessible on small screens
Hamburger menu replaces overflowing desktop nav at ≤768px — no horizontal scrolling required to reach navigation links
Hamburger button fully accessible
aria-expanded reflects drawer state; aria-controls="nav-drawer" links button to drawer; aria-label toggles between "Open" and "Close navigation menu"; Escape key closes drawer and returns focus to button
// Site Architecture
Dedicated URL per page
Refactored from SPA to multi-page — each section now lives at its own URL (/about, /trusting, /at-veracity, /privacy). Pages are bookmarkable, shareable, and deep-linkable. Privacy policy URL is stable for use in app disclosures.
Shared stylesheet — single source of truth
All styles consolidated into /assets/css/styles.css with clearly commented universal vs page-specific sections — no inline style blocks on any page
Refactor build additions: SPA converted to multi-page site with dedicated URLs; nav buttons converted to real <a href> elements; aria-current="page" set by shared nav script reading data-page on <body>; active state gains 2px border-bottom (non-color indicator); hamburger drawer added for mobile; TRUSTING pillars converted from div soup to semantic <ol>; badge converted from inline SVG blob to external image reference; all CSS extracted to shared stylesheet; base link rule added to eliminate browser-default purple on all pages.
// Prior audit record — AT Checker v1.0 · May 2026
The v1.0 checker covered structure, images, forms, ARIA, keyboard, motion, visual, and link checks. It did not include contrast, font size, text spacing, or touch target rules. The 5 warnings below were all documented and addressed at time of first deployment.
Multiple H1 headings (3)
SPA architecture — 3 pages in DOM simultaneously. Fixed: inert attribute applied. Now resolved permanently by multi-page refactor.
Heading levels skipped
Same SPA cause. Resolved permanently by multi-page refactor.
Brand table without aria-label
Section was commented out at time of audit — resolved before re-enable.
1 non-interactive element with onclick
Fixed at time of audit. Now resolved permanently — all nav uses real <a href> elements.
No skip navigation link detected
Fixed at time of audit — visually hidden skip link added as first focusable element on every page.