Back to Langflow

IBM Accessibility Level 1 — Engineering Compliance Guide

.agents/skills/ibm-a11y-level1-audit/references/ibm-level1-criteria.md

1.11.0.dev4317.9 KB
Original Source

IBM Accessibility Level 1 — Engineering Compliance Guide

Standard: IBM Equal Access Toolkit v7.3 (required as of October 1, 2024) Aligns with: WCAG 2.2 Level A & AA · US Section 508 · EN 301 549 v3.2.1 Source: IBM Accessibility Requirements


What is IBM Level 1?

IBM divides its accessibility requirements into three progressive levels of pace of completion. IBM assigns individual tasks within each requirement (across the Design, Develop, and Test disciplines) to a level, so teams can adopt accessibility incrementally rather than mapping each success criterion to a single level:

LevelPurpose
Level 1Essential tasks — highest user impact, least investment. Addresses the top concerns of people with disabilities.
Level 2Next-most-important issues that may prevent certain users from fully using the product.
Level 3Full WCAG 2.2 A/AA compliance — all three levels must be completed together.

Important: Completing only Level 1 does NOT achieve full WCAG compliance. It represents the first-priority phase in a release planning cycle. However, products completing only Level 1 can still achieve valuable accessibility and many requirements will "Support" conformance.

Scope of this guide

This guide covers only the requirements within IBM's Level 1 pace — the foundational WCAG 2.0 Level A/AA criteria plus 1.4.10 Reflow (the single WCAG 2.1/2.2 addition IBM paces at Level 1, per the v7.3 release notes). A handful of the kept requirements also carry Level 2/3 tasks for full conformance (for example, data tables under 1.3.1, or media alternatives); those follow-on tasks are out of scope here.

Every requirement IBM paces entirely at Level 2 or Level 3 — all WCAG 2.1/2.2 additions and the media audio-description criteria — is listed in Deferred to Level 2 & Level 3 with its authoritative IBM pace level. Those are not part of a Level 1 release.


Quick Reference Checklist

Principle 1: Perceivable

#RequirementKey RuleLevel 1 Tasks
1.1.1Non-text ContentAll non-text content must have a text alternativeAlt text for images, icons, graphics, CAPTCHA
1.3.1Info and RelationshipsStructure conveyed visually must be programmaticSemantic HTML: headings, lists, tables, forms
1.3.2Meaningful SequenceReading order must be programmatically correctDOM order matches visual reading order
1.3.3Sensory CharacteristicsInstructions must not rely only on shape/locationInclude text labels alongside shape/position references
1.4.1Use of ColorColor must not be the only visual cueAdd icons, patterns, or text alongside color indicators
1.4.2Audio ControlAuto-playing audio >3s needs a stop/pause controlProvide volume or mute control independent of system
1.4.3Contrast (Minimum)Text must meet contrast ratios4.5:1 for body text · 3:1 for large text (18pt / 14pt bold)
1.4.4Resize TextText must scale to 200% without lossDo not clip, overlap, or hide text at 200% zoom
1.4.5Images of TextUse real text instead of images of textReplace image-based text with HTML/CSS text
1.4.10ReflowContent must reflow without horizontal scrollLayout must work at 320px wide (400% zoom on desktop)

Principle 2: Operable

#RequirementKey RuleLevel 1 Tasks
2.1.1KeyboardAll functionality must be keyboard-operableEvery interactive element reachable and usable by keyboard
2.1.2No Keyboard TrapFocus must never get stuckUsers can always tab away; Escape closes modals/overlays
2.2.1Timing AdjustableTime limits must be adjustableAllow 10× extension or turn-off for session timeouts
2.2.2Pause, Stop, HideMoving/auto-updating content must be pausableControls to pause carousels, tickers, auto-advancing slides
2.3.1Three FlashesNo content flashes more than 3× per secondEliminate or threshold-test all flashing content
2.4.1Bypass BlocksSkip-nav or landmark regions must be availableImplement ARIA landmarks (main, nav, banner, footer)
2.4.2Page TitledEvery page/document needs a descriptive titleUnique <title> tags: "Page Name – App Name" pattern
2.4.3Focus OrderTab order must preserve meaningDOM order matches visual order; no arbitrary tabindex values
2.4.4Link PurposeLink text must describe the destinationAvoid "click here" / "read more" — use descriptive text or aria-label
2.4.5Multiple WaysMultiple ways to navigate a set of pagesProvide search + navigation menus
2.4.6Headings and LabelsHeadings and labels must be descriptiveEach heading uniquely describes the section it heads
2.4.7Focus VisibleKeyboard focus indicator must be visibleNever suppress outline without a visible replacement

Principle 3: Understandable

#RequirementKey RuleLevel 1 Tasks
3.1.1Language of PagePage language must be programmatically identifiedSet lang attribute on <html> element
3.1.2Language of PartsLanguage changes within content must be markedAdd lang attribute to any inline text in a different language
3.2.1On FocusReceiving focus must not cause a context changeNo form auto-submit or page redirect on focus
3.2.2On InputChanging a UI setting must not auto-change contextWarn users if changing a dropdown navigates them away
3.2.3Consistent NavigationRepeated navigation must appear in the same orderNav menus, headers, footers stay consistent across pages
3.2.4Consistent IdentificationSame-function components must be identified the same wayIcon and alt text for "Search" must be identical across pages
3.3.1Error IdentificationErrors must identify the field and describe the issueRed border alone is insufficient — add text error message
3.3.2Labels or InstructionsAll inputs must have labels or instructionsVisible <label> or aria-label on every input field
3.3.3Error SuggestionCorrection suggestions must be provided where known"Enter a valid email address (e.g., [email protected])"
3.3.4Error PreventionLegal/financial/data actions must be reversible or confirmableConfirmation step or undo option for destructive actions

Principle 4: Robust

#RequirementKey RuleLevel 1 Tasks
4.1.2Name, Role, ValueAll UI components must expose name, role, and state to ATUse semantic HTML or proper ARIA roles/states/properties

Deferred to Level 2 & Level 3

The following criteria are not part of Level 1 and are excluded from the checklist above. Pace levels are taken from the IBM v7.3 release notes (WCAG 2.1 criteria were added in v7.1, WCAG 2.2 in v7.3). Address these in later release phases.

#RequirementIBM Pace Level
1.3.4Orientation2
1.4.11Non-text Contrast2
1.4.13Content on Hover or Focus2
2.4.11Focus Not Obscured (Minimum) (WCAG 2.2)2
2.5.1Pointer Gestures2
2.5.3Label in Name2
2.5.4Motion Actuation2
2.5.7Dragging Movements (WCAG 2.2)2
2.5.8Target Size (Minimum) (WCAG 2.2)2
4.1.3Status Messages2
1.3.5Identify Input Purpose3
1.4.12Text Spacing3
2.1.4Character Key Shortcuts3
2.5.2Pointer Cancellation3
3.2.6Consistent Help (WCAG 2.2)3
3.3.7Redundant Entry (WCAG 2.2)3
3.3.8Accessible Authentication (Minimum) (WCAG 2.2)3

Media (1.2.x) applies only to prerecorded/live audio and video, which this UI does not currently ship. For completeness: captions (1.2.2 Prerecorded, 1.2.4 Live) are IBM Level 1, while audio-only/video-only alternatives and audio descriptions (1.2.1, 1.2.3, 1.2.5) are Level 3.


Section 508 (Software-specific)

Note: These Section 508 software requirements target non-web software and are tracked separately from the WCAG pace levels above (they are not assigned a Level 1/2/3 pace). For a web UI they are largely satisfied by 4.1.2 Name, Role, Value.

These apply to non-web software and desktop/mobile applications:

#RequirementKey Rule
502.2.1User Control of Accessibility FeaturesPlatform accessibility settings (contrast, font size) must remain user-controllable
502.2.2No Disruption of Accessibility FeaturesApps must not override OS accessibility features or keyboard shortcuts
502.3.1Object InformationAll UI objects must expose role, state, name, boundary, and description via platform APIs
502.3.2Modification of Object InformationUser-settable states/properties must be settable programmatically via AT
502.3.3Row, Column, and HeadersData tables must programmatically expose row/column headers
502.3.4ValuesCurrent values and allowed ranges must be programmatically available
502.3.5Modification of ValuesAT must be able to set values in interactive controls

Engineering Implementation Guidance

These are practical implementation patterns. Most support Level 1 criteria; a few support criteria that IBM paces at Level 2/3 (tagged inline) and are included so the patterns stay in one place.

HTML/Semantic Structure

html
<!-- GOOD: Semantic structure -->
<main>
  <h1>Page Title</h1>
  <nav aria-label="Primary navigation">...</nav>
  <section aria-labelledby="section-heading">
    <h2 id="section-heading">Section Name</h2>
  </section>
</main>
<footer>...</footer>

<!-- GOOD: Proper form labels -->
<label for="email">Email address</label>
<input id="email" type="email" autocomplete="email" required aria-describedby="email-error" />
<span id="email-error" role="alert">Please enter a valid email address.</span>

Color Contrast

Body text:        contrast ≥ 4.5:1   (1.4.3 — Level 1)
Large text:       contrast ≥ 3:1    (1.4.3 — Level 1; ≥18pt regular or ≥14pt bold)
UI components:    contrast ≥ 3:1    (1.4.11 — Level 2; borders, icons, focus rings)
Disabled states:  exempt
Logos/brand:      exempt

Recommended tools: IBM Equal Access Checker (browser extension for Chrome/Firefox), axe DevTools, Colour Contrast Analyser.

Focus Management

css
/* NEVER do this without a visible replacement */
:focus { outline: none; }

/* DO this instead */
:focus-visible {
  outline: 2px solid #0f62fe; /* IBM Blue — meets 3:1 contrast */
  outline-offset: 2px;
}
javascript
// When opening a modal, move focus to the first focusable element
dialog.addEventListener('open', () => {
  dialog.querySelector('button, [href], input, [tabindex]').focus();
});

// Trap focus inside the modal while open
// Release focus and return it to the trigger element on close

Keyboard Navigation

All custom interactive components must support standard key interactions:

ComponentKeys Required
ButtonEnter, Space
LinkEnter
CheckboxSpace
Radio groupArrow keys within group, Tab to move away
Select/ListboxArrow keys, Home, End, Enter
Dialog/ModalEscape to close, focus trap
TabsArrow keys to switch tabs
Tree/MenuArrow keys, Home, End, Escape

ARIA Usage

html
<!-- Live regions for status messages -->
<div role="status" aria-live="polite">File uploaded successfully.</div>
<div role="alert" aria-live="assertive">Error: Session expired.</div>

<!-- Custom buttons with meaningful labels -->
<button aria-label="Close dialog">×</button>
<button aria-expanded="false" aria-controls="menu-id">Menu</button>

<!-- Icon-only buttons always need accessible names -->
<button aria-label="Search">
  <svg aria-hidden="true" focusable="false">...</svg>
</button>

<!-- Loading states -->
<button aria-disabled="true" aria-busy="true">Saving...</button>

Images and Media

html
<!-- Meaningful image -->


<!-- Decorative image -->


<!-- Complex image with long description -->
<figure>
  
  <figcaption id="arch-desc">
    Three-tier system: frontend React app calls REST API, which connects to PostgreSQL database.
  </figcaption>
</figure>

Touch / Pointer Targets (supports 2.5.8 Target Size — IBM Level 2)

css
/* Ensure all interactive elements meet 24×24px minimum */
button,
a,
[role="button"],
input[type="checkbox"],
input[type="radio"] {
  min-width: 24px;
  min-height: 24px;
}

/* Preferred: 44×44px for comfortable mobile interaction */
.btn-touch {
  min-width: 44px;
  min-height: 44px;
}

Text Spacing Resilience (supports 1.4.12 Text Spacing — IBM Level 3)

Your layouts must not break when users apply these overrides via browser/OS:

css
/* Your CSS must gracefully handle ALL of these applied simultaneously */
line-height: 1.5 !important;
letter-spacing: 0.12em !important;
word-spacing: 0.16em !important;
/* paragraphs: 2× font-size spacing */

Test by injecting the WCAG 1.4.12 bookmarklet to verify no content is clipped or overlapping.


Testing Tools

ToolUse
IBM Equal Access CheckerAutomated browser scan (Chrome/Firefox extension)
axe DevToolsAutomated accessibility auditing
NVDA + FirefoxScreen reader testing (Windows)
VoiceOver + SafariScreen reader testing (macOS/iOS)
TalkBack + ChromeScreen reader testing (Android)
Colour Contrast AnalyserManual color contrast checking
Keyboard-only navigationManual tab/arrow-key walkthrough

Development Workflow

  1. Design phase: Confirm color contrast, touch targets, focus states, and information hierarchy meet Level 1 before handoff.
  2. Development phase: Use semantic HTML first; add ARIA only when no native element exists.
  3. Component completion: Run IBM Equal Access Checker (or axe) — aim for zero violations.
  4. Pull request: Include an accessibility section in your PR description noting what was verified.
  5. Before release: Conduct a manual keyboard walkthrough and brief screen reader test on critical flows.

IBM Automated Checker Integration (CI)

bash
# Install the IBM accessibility-checker
npm install --save-dev accessibility-checker

# Run against a URL
npx achecker http://localhost:3000
javascript
// Jest/Playwright integration example
const aChecker = require('accessibility-checker');

test('Home page has no accessibility violations', async () => {
  const results = await aChecker.getCompliance('http://localhost:3000', 'home-page');
  expect(aChecker.assertCompliance(results)).toBe(0);
});

New in WCAG 2.2 (IBM v7.3)

Six new criteria added — all required as of October 2024. None are Level 1; they appear in Deferred to Level 2 & Level 3 above:

CriterionSummaryIBM Pace Level
2.4.11 Focus Not Obscured (Minimum)Focused element must not be fully hidden by sticky UI2
2.5.7 Dragging MovementsDrag actions must have a single-pointer alternative2
2.5.8 Target Size (Minimum)Touch targets must be at least 24×24 CSS px2
3.2.6 Consistent HelpHelp mechanisms appear in same location across pages3
3.3.7 Redundant EntryDon't re-ask for already-provided info in same session3
3.3.8 Accessible Authentication (Minimum)Allow paste in login fields; support password managers3

Note: 4.1.1 Parsing has been removed from WCAG 2.2 and is no longer a requirement in IBM v7.3.


Common Failures to Avoid

❌ Failure✅ Fix
<div> or <span> used as a button without keyboard/ARIA supportUse <button> or add role="button" + tabindex="0" + keyboard handlers
alt="" on meaningful imagesWrite a descriptive alt that conveys the image's purpose
placeholder used as the only label for an inputAdd a visible <label> element; use placeholder as supplemental hint only
Color alone indicates required fields or errorsAdd an asterisk (*), icon, or text label alongside color
Focus outline removed globally in CSSKeep outline; style it to match design system
Modal opens without moving focus insideOn open, focus the first element or the modal's heading
Modal closes without returning focus to triggerTrack the trigger element and focus() it on close
aria-label that doesn't contain visible button textEnsure aria-label starts with the visible text (e.g., aria-label="Save document" for a button labeled "Save")
role="alert" misused for non-urgent messagesUse role="status" with aria-live="polite" for non-urgent updates
Links that say "Click here" or "Learn more" without contextDescribe the destination: "Learn more about pricing plans"

References