{
 "product": "omvoramedia.com (Omvora Media & Automation website)",
 "standard": "WCAG 2.2 Level A and AA (covers WCAG 2.1 AA, the level IS 17802 (Part 1): 2021 is aligned with for web content)",
 "date": "2026-09-29",
 "audit": {
  "tool": "ops/a11y-audit.mjs (axe-core 4 + keyboard, spacing, reflow, zoom, target-size, motion and form checks)",
  "run_at": "2026-09-28T23:45:34.051Z",
  "pages": [
   "/",
   "/about/",
   "/accessibility/",
   "/contact/",
   "/how-we-work/",
   "/pricing/",
   "/privacy/",
   "/refund-policy/",
   "/services/chatbots/",
   "/services/digital-products/",
   "/services/idea-to-post/",
   "/services/saas/",
   "/services/social-automation/",
   "/terms/",
   "/work/",
   "/dark/",
   "/404.html"
  ]
 },
 "reviewed_by": "Omvora, with AI-assisted testing: the automated audit, a keyboard walk, and a review of the accessibility tree screen readers read, in Chromium and WebKit (25 Sep 2026). Not reviewed by an independent certified accessibility professional.",
 "pending": [
  "A repeat of the owner's VoiceOver (iPhone) test after the OM-60 fix, and passes with TalkBack (Android) and NVDA (Windows)",
  "Review by an independent accessibility professional before the RPwD (Amendment) Rules take effect"
 ],
 "summary": {
  "Supports": 42,
  "Partially supports": 1,
  "Does not support": 0,
  "Not applicable": 12,
  "Not evaluated": 0
 },
 "criteria": [
  {
   "sc": "1.1.1",
   "name": "Non-text Content",
   "level": "A",
   "status": "Supports",
   "remarks": "Every image has an alt attribute; meaningful images are described, decorative ones are empty or hidden; icon-only buttons are named.",
   "method": "audit",
   "evidence": "85 checks, 0 failed"
  },
  {
   "sc": "1.2.1",
   "name": "Audio-only and Video-only (Prerecorded)",
   "level": "A",
   "status": "Not applicable",
   "remarks": "The site has no audio or video content. The short interface sounds carry no information.",
   "method": "review",
   "evidence": "review"
  },
  {
   "sc": "1.2.2",
   "name": "Captions (Prerecorded)",
   "level": "A",
   "status": "Not applicable",
   "remarks": "No prerecorded video with audio.",
   "method": "review",
   "evidence": "review"
  },
  {
   "sc": "1.2.3",
   "name": "Audio Description or Media Alternative (Prerecorded)",
   "level": "A",
   "status": "Not applicable",
   "remarks": "No prerecorded video.",
   "method": "review",
   "evidence": "review"
  },
  {
   "sc": "1.2.4",
   "name": "Captions (Live)",
   "level": "AA",
   "status": "Not applicable",
   "remarks": "No live media.",
   "method": "review",
   "evidence": "review"
  },
  {
   "sc": "1.2.5",
   "name": "Audio Description (Prerecorded)",
   "level": "AA",
   "status": "Not applicable",
   "remarks": "No prerecorded video.",
   "method": "review",
   "evidence": "review"
  },
  {
   "sc": "1.3.1",
   "name": "Info and Relationships",
   "level": "A",
   "status": "Supports",
   "remarks": "Headings, landmarks, lists and form labels are marked up; tables keep their table semantics inside a labelled scroll region.",
   "method": "audit",
   "evidence": "85 checks, 0 failed"
  },
  {
   "sc": "1.3.2",
   "name": "Meaningful Sequence",
   "level": "A",
   "status": "Supports",
   "remarks": "The reading and focus order follow the visual order.",
   "method": "audit",
   "evidence": "34 checks, 0 failed"
  },
  {
   "sc": "1.3.3",
   "name": "Sensory Characteristics",
   "level": "A",
   "status": "Supports",
   "remarks": "No instruction relies on shape, colour, size, position or sound alone.",
   "method": "review",
   "evidence": "review"
  },
  {
   "sc": "1.3.4",
   "name": "Orientation",
   "level": "AA",
   "status": "Supports",
   "remarks": "Pages work in portrait and landscape; a landscape layout is provided for short screens.",
   "method": "review",
   "evidence": "review"
  },
  {
   "sc": "1.3.5",
   "name": "Identify Input Purpose",
   "level": "AA",
   "status": "Supports",
   "remarks": "Personal fields in the contact form carry autocomplete values.",
   "method": "audit",
   "evidence": "17 checks, 0 failed"
  },
  {
   "sc": "1.4.1",
   "name": "Use of Color",
   "level": "A",
   "status": "Supports",
   "remarks": "Links in running text are underlined; highlighted phrases are emphasis, not the only carrier of information.",
   "method": "review",
   "evidence": "review"
  },
  {
   "sc": "1.4.2",
   "name": "Audio Control",
   "level": "A",
   "status": "Supports",
   "remarks": "Only brief interface sounds, each under three seconds and started by the reader; a header button turns them off.",
   "method": "review",
   "evidence": "review"
  },
  {
   "sc": "1.4.3",
   "name": "Contrast (Minimum)",
   "level": "AA",
   "status": "Supports",
   "remarks": "Text at rest meets 4.5:1 (large text 3:1). Words being revealed by the scroll animation pass through lower contrast for a moment by design; the text is present for assistive technology throughout and shown whole with reduced motion or the Animation switch. Measured at rest on 13 devices in three engines. The demonstration phones on the home page are pictures of WhatsApp and Telegram screens in those apps' own colours, hidden from screen readers; their text is incidental under this criterion (part of an inactive user interface and of a picture) and is reported, not hidden, in the device matrix.",
   "method": "audit",
   "evidence": "34 checks, 0 failed"
  },
  {
   "sc": "1.4.4",
   "name": "Resize Text",
   "level": "AA",
   "status": "Supports",
   "remarks": "Pages work at 200 % zoom without loss; zoom is never blocked.",
   "method": "audit",
   "evidence": "34 checks, 0 failed"
  },
  {
   "sc": "1.4.5",
   "name": "Images of Text",
   "level": "AA",
   "status": "Supports",
   "remarks": "The only image of text is the Omvora wordmark, a logotype (exempt).",
   "method": "review",
   "evidence": "review"
  },
  {
   "sc": "1.4.10",
   "name": "Reflow",
   "level": "AA",
   "status": "Supports",
   "remarks": "No horizontal scrolling at 320 CSS px.",
   "method": "audit",
   "evidence": "17 checks, 0 failed"
  },
  {
   "sc": "1.4.11",
   "name": "Non-text Contrast",
   "level": "AA",
   "status": "Supports",
   "remarks": "Form field edges and focus indicators meet 3:1. The checkboxes are the browser's own controls (only their tint is set), which 1.4.11 exempts.",
   "method": "audit",
   "evidence": "1 checks, 0 failed"
  },
  {
   "sc": "1.4.12",
   "name": "Text Spacing",
   "level": "AA",
   "status": "Partially supports",
   "remarks": "No text is lost with WCAG text-spacing overrides, except in the home page story chapters on short screens (measured: 1366 × 640), which are pinned to one screen; each chapter links to its service page, which carries the same content and passes (conforming alternate version), and reduced motion lays the chapters out as plain sections.",
   "method": "audit",
   "evidence": "23 checks, 0 failed, 4 partial"
  },
  {
   "sc": "1.4.13",
   "name": "Content on Hover or Focus",
   "level": "AA",
   "status": "Supports",
   "remarks": "No custom tooltip or hover content; the one title attribute is shown by the browser.",
   "method": "review",
   "evidence": "review"
  },
  {
   "sc": "2.1.1",
   "name": "Keyboard",
   "level": "A",
   "status": "Supports",
   "remarks": "Every control can be reached and used with the keyboard, including the menu and the scrollable tables.",
   "method": "audit",
   "evidence": "34 checks, 0 failed"
  },
  {
   "sc": "2.1.2",
   "name": "No Keyboard Trap",
   "level": "A",
   "status": "Supports",
   "remarks": "Focus never gets stuck.",
   "method": "audit",
   "evidence": "17 checks, 0 failed"
  },
  {
   "sc": "2.1.4",
   "name": "Character Key Shortcuts",
   "level": "A",
   "status": "Not applicable",
   "remarks": "The site defines no single-key shortcuts.",
   "method": "review",
   "evidence": "review"
  },
  {
   "sc": "2.2.1",
   "name": "Timing Adjustable",
   "level": "A",
   "status": "Not applicable",
   "remarks": "Nothing on the site has a time limit.",
   "method": "review",
   "evidence": "review"
  },
  {
   "sc": "2.2.2",
   "name": "Pause, Stop, Hide",
   "level": "A",
   "status": "Supports",
   "remarks": "Nothing moves by itself for more than five seconds: the text animation follows the reader's scrolling; reduced motion and the Animation switch show everything at rest.",
   "method": "audit",
   "evidence": "19 checks, 0 failed"
  },
  {
   "sc": "2.3.1",
   "name": "Three Flashes or Below Threshold",
   "level": "A",
   "status": "Supports",
   "remarks": "Nothing flashes; the slowest glow cycles once every 2.6 seconds.",
   "method": "review",
   "evidence": "review"
  },
  {
   "sc": "2.4.1",
   "name": "Bypass Blocks",
   "level": "A",
   "status": "Supports",
   "remarks": "\"Skip to content\" is the first focus stop on every page and moves focus to the main content.",
   "method": "audit",
   "evidence": "34 checks, 0 failed"
  },
  {
   "sc": "2.4.2",
   "name": "Page Titled",
   "level": "A",
   "status": "Supports",
   "remarks": "Every page has a unique, descriptive title.",
   "method": "audit",
   "evidence": "17 checks, 0 failed"
  },
  {
   "sc": "2.4.3",
   "name": "Focus Order",
   "level": "A",
   "status": "Supports",
   "remarks": "Focus moves in a meaningful order; the menu returns focus to its button when closed.",
   "method": "audit",
   "evidence": "102 checks, 0 failed"
  },
  {
   "sc": "2.4.4",
   "name": "Link Purpose (In Context)",
   "level": "A",
   "status": "Supports",
   "remarks": "Every link has a name that states its purpose in context.",
   "method": "audit",
   "evidence": "34 checks, 0 failed"
  },
  {
   "sc": "2.4.5",
   "name": "Multiple Ways",
   "level": "AA",
   "status": "Supports",
   "remarks": "Every page is reachable from the menu, the footer links and the sitemap.",
   "method": "review",
   "evidence": "review"
  },
  {
   "sc": "2.4.6",
   "name": "Headings and Labels",
   "level": "AA",
   "status": "Supports",
   "remarks": "One h1 per page, no skipped levels; every field has a descriptive label.",
   "method": "audit",
   "evidence": "34 checks, 0 failed"
  },
  {
   "sc": "2.4.7",
   "name": "Focus Visible",
   "level": "AA",
   "status": "Supports",
   "remarks": "Every focusable element shows a visible focus indicator.",
   "method": "audit",
   "evidence": "17 checks, 0 failed"
  },
  {
   "sc": "2.4.11",
   "name": "Focus Not Obscured (Minimum)",
   "level": "AA",
   "status": "Supports",
   "remarks": "A focused element is never hidden behind the fixed header or the chapter dock (scroll padding); the dock leaves the tab order while it is off screen.",
   "method": "audit",
   "evidence": "17 checks, 0 failed"
  },
  {
   "sc": "2.5.1",
   "name": "Pointer Gestures",
   "level": "A",
   "status": "Supports",
   "remarks": "No multipoint or path-based gestures; scrolling is ordinary scrolling.",
   "method": "review",
   "evidence": "review"
  },
  {
   "sc": "2.5.2",
   "name": "Pointer Cancellation",
   "level": "A",
   "status": "Supports",
   "remarks": "Standard links and buttons act on release.",
   "method": "review",
   "evidence": "review"
  },
  {
   "sc": "2.5.3",
   "name": "Label in Name",
   "level": "A",
   "status": "Supports",
   "remarks": "The accessible name of every visible link and button contains its visible words, so Voice Control and Voice Access users can say what they see.",
   "method": "audit",
   "evidence": "17 checks, 0 failed"
  },
  {
   "sc": "2.5.4",
   "name": "Motion Actuation",
   "level": "A",
   "status": "Not applicable",
   "remarks": "No function is operated by device motion.",
   "method": "review",
   "evidence": "review"
  },
  {
   "sc": "2.5.7",
   "name": "Dragging Movements",
   "level": "AA",
   "status": "Not applicable",
   "remarks": "No dragging is required.",
   "method": "review",
   "evidence": "review"
  },
  {
   "sc": "2.5.8",
   "name": "Target Size (Minimum)",
   "level": "AA",
   "status": "Supports",
   "remarks": "Targets are at least 24 × 24 CSS px, or spaced so a 24 px circle on each touches no other; links in sentences are exempt.",
   "method": "audit",
   "evidence": "17 checks, 0 failed"
  },
  {
   "sc": "3.1.1",
   "name": "Language of Page",
   "level": "A",
   "status": "Supports",
   "remarks": "Every page declares lang=\"en\".",
   "method": "audit",
   "evidence": "17 checks, 0 failed"
  },
  {
   "sc": "3.1.2",
   "name": "Language of Parts",
   "level": "AA",
   "status": "Supports",
   "remarks": "Text in another script carries its own lang.",
   "method": "audit",
   "evidence": "17 checks, 0 failed"
  },
  {
   "sc": "3.2.1",
   "name": "On Focus",
   "level": "A",
   "status": "Supports",
   "remarks": "Focusing an element never changes the page or navigates.",
   "method": "audit",
   "evidence": "102 checks, 0 failed"
  },
  {
   "sc": "3.2.2",
   "name": "On Input",
   "level": "A",
   "status": "Supports",
   "remarks": "Changing a form field never submits or navigates on its own.",
   "method": "review",
   "evidence": "review"
  },
  {
   "sc": "3.2.3",
   "name": "Consistent Navigation",
   "level": "AA",
   "status": "Supports",
   "remarks": "The header, menu and footer are the same on every page (one layout).",
   "method": "review",
   "evidence": "review"
  },
  {
   "sc": "3.2.4",
   "name": "Consistent Identification",
   "level": "AA",
   "status": "Supports",
   "remarks": "The same functions carry the same names on every page.",
   "method": "review",
   "evidence": "review"
  },
  {
   "sc": "3.2.6",
   "name": "Consistent Help",
   "level": "A",
   "status": "Supports",
   "remarks": "Contact details and \"Talk to us\" are in the same place on every page.",
   "method": "review",
   "evidence": "review"
  },
  {
   "sc": "3.3.1",
   "name": "Error Identification",
   "level": "A",
   "status": "Supports",
   "remarks": "Every field with a problem is marked invalid and named in an announced message.",
   "method": "audit",
   "evidence": "1 checks, 0 failed"
  },
  {
   "sc": "3.3.2",
   "name": "Labels or Instructions",
   "level": "A",
   "status": "Supports",
   "remarks": "Every field is labelled; required fields say so.",
   "method": "audit",
   "evidence": "17 checks, 0 failed"
  },
  {
   "sc": "3.3.3",
   "name": "Error Suggestion",
   "level": "AA",
   "status": "Supports",
   "remarks": "The message says what to change in each field.",
   "method": "audit",
   "evidence": "1 checks, 0 failed"
  },
  {
   "sc": "3.3.4",
   "name": "Error Prevention (Legal, Financial, Data)",
   "level": "AA",
   "status": "Not applicable",
   "remarks": "The site takes no legal commitment, payment or data change; the enquiry form only sends a message.",
   "method": "review",
   "evidence": "review"
  },
  {
   "sc": "3.3.7",
   "name": "Redundant Entry",
   "level": "A",
   "status": "Not applicable",
   "remarks": "There is no multi-step process.",
   "method": "review",
   "evidence": "review"
  },
  {
   "sc": "3.3.8",
   "name": "Accessible Authentication (Minimum)",
   "level": "AA",
   "status": "Not applicable",
   "remarks": "There is no sign-in.",
   "method": "review",
   "evidence": "review"
  },
  {
   "sc": "4.1.2",
   "name": "Name, Role, Value",
   "level": "A",
   "status": "Supports",
   "remarks": "Controls expose their name, role and state (the menu, the switches, the sound button — its state in aria-pressed only). Every animated sentence reaches screen readers and braille displays as one sentence (an iPhone VoiceOver test on 25 Sep 2026 found word-by-word reading; fixed and now checked on every page). The accessibility tree was reviewed in Chromium and WebKit: text reads as whole sentences, highlights are not announced as marked text, the decorative scroll hint is hidden, the phone demonstrations are hidden (their content is in the copy). A real-device pass is pending.",
   "method": "audit",
   "evidence": "68 checks, 0 failed"
  },
  {
   "sc": "4.1.3",
   "name": "Status Messages",
   "level": "AA",
   "status": "Supports",
   "remarks": "Form errors are announced (role=\"alert\"), and the form's progress note is a polite live region.",
   "method": "review",
   "evidence": "review"
  }
 ]
}
