{
  "test_case_id": "A11Y-WCAG-014",
  "title": "WCAG 1.4.3 Contrast (Minimum)",
  "category": "wcag_manual",
  "procedure_version": "2026.08.27-rc.9",
  "rule_type": "composite",
  "wcag_criteria": [
    "1.4.3"
  ],
  "level": "AA",
  "risk": "medium",
  "risk_basis": "Detect text that does not have enough luminance contrast against its actual background. People most likely affected: people with low vision; People with colour-vision differences or reduced contrast sensitivity; People using a display in glare or other low-contrast conditions. Text, instructions, values or states may be unreadable even though they remain present in the interface. In the recorded web-desktop-cross-browser environment, apply the criterion to every relevant state and named normative exception; failures in critical tasks and complete processes carry the greatest user impact.",
  "review_status": "draft",
  "reviewed_at": "",
  "review_note": "Template content is subject to a hash-bound internal consistency review. Formal assessment claims require competent execution, current evidence and the applicable legal, participant and organisational authority.",
  "method_label": "WCAG check",
  "tester_level": "Accessibility tester",
  "estimated_duration": "Typically 33–48 minutes for the stated single-target assumptions; use the component breakdown when estimating a real sample.",
  "execution_class": "manual_with_automation_support",
  "automation_support": "supporting_evidence_only",
  "simulation_policy": "simulation_may_support_but_not_replace_manual_execution",
  "plain_summary": "Measure text and images of text in each meaningful state, then apply the large-text thresholds and normative exclusions.",
  "objective": "Detect text that does not have enough luminance contrast against its actual background.",
  "test_subject": "Visible text and images of text in the selected content, including meaningful active and interactive states.",
  "test_targets": [
    "Each unique text or image-of-text foreground/background combination, size, weight and meaningful state in the selected scope."
  ],
  "applicability": "Apply to visible text and images of text unless a recorded normative exclusion applies. Measure inactive components only to decide exclusion; do not treat all disabled-looking content as inactive.",
  "applicability_questions": [
    "Is the target visible text or an image of text?",
    "What are the actual foreground and background colours at the least favourable relevant sample?",
    "Is it large-scale text: at least 24 CSS pixels regular, or approximately 18.66 CSS pixels and bold?",
    "Does a normative exclusion apply?"
  ],
  "inapplicability_conditions": [
    "The selected subject contains no visible text or image of text to which WCAG 1.4.3 applies."
  ],
  "assumptions": [
    "The selected scope identifies the product version, technologies, states and important user journeys being evaluated.",
    "The tester knows how to use this method and any required assistive technology.",
    "Known browser or assistive-technology limitations are recorded instead of being assigned to the product without evidence."
  ],
  "accessibility_support_assumptions": [
    "The result covers only the browsers, platforms, readers and assistive technologies that were actually tested.",
    "Do not apply a result from one technology combination to an untested combination or to every user."
  ],
  "prerequisites": [
    "The product area and test targets are agreed before testing starts.",
    "The operating system, browser, viewport and input method are recorded.",
    "Test data is safe to use and does not expose unnecessary personal information."
  ],
  "required_environment_fields": [
    "operating_system",
    "operating_system_version",
    "browser",
    "browser_version",
    "viewport_css_pixels",
    "input_method"
  ],
  "steps": [
    {
      "step_id": "S1",
      "title": "Inventory unique text presentations",
      "phase": "prepare",
      "action": "Identify each unique foreground, background, font size, font weight and meaningful state for visible text and images of text. Include gradients, background images and changing interactive states.",
      "test_target": "Each unique text or image-of-text foreground/background combination, size, weight and meaningful state in the selected scope.",
      "required_state": "Every selected theme, viewport and meaningful state.",
      "tool_or_command": "Rendered-page inspection, stylesheet inspection and a contrast inventory.",
      "expected": "The inventory is sufficient to explain what was measured and what was sampled.",
      "evidence_to_record": "Target text, page/state, font metrics, foreground/background source and sampling rationale.",
      "decision_effect": "Omitted applicable presentations remain untested.",
      "recovery_or_repeat": "Repeat when text styling, imagery, state colours or themes change.",
      "novice_guidance": "Sample repeated styles only when the computed colours and background conditions are genuinely equivalent.",
      "scenario_purpose": "For WCAG 1.4.3 Contrast (Minimum), prepare the named scenario: Inventory unique text presentations. Target: Each unique text or image-of-text foreground/background combination, size, weight and meaningful state in the selected scope. The preparation must establish this result: The inventory is sufficient to explain what was measured and what was sampled.",
      "user_impact": "Text, instructions, values or states may be unreadable even though they remain present in the interface. This scenario isolates that risk in the action named Inventory unique text presentations.",
      "failure_observation": "During WCAG 1.4.3 Contrast (Minimum), the target, starting state, environment or scope record remains ambiguous for the scenario named Inventory unique text presentations. The preparation result cannot be demonstrated: The inventory is sufficient to explain what was measured and what was sampled.",
      "decision_rules": {
        "passed": "Record passed for the WCAG 1.4.3 Contrast (Minimum) scenario named Inventory unique text presentations only when the evidence (Target text, page/state, font metrics, foreground/background source and sampling rationale.) supports: The inventory is sufficient to explain what was measured and what was sampled.",
        "failed": "Record failed when the action is completed and this failure observation is reproduced: During WCAG 1.4.3 Contrast (Minimum), the target, starting state, environment or scope record remains ambiguous for the scenario named Inventory unique text presentations. The preparation result cannot be demonstrated: The inventory is sufficient to explain what was measured and what was sampled.",
        "not_applicable": "No visible text or image of text in the selected subject matches the criterion's applicability.",
        "blocked": "Record blocked, not passed, when The target is applicable, but a required state, environment, action or evidence item was not completed."
      },
      "limitations_and_claim_boundary": "This WCAG 1.4.3 Contrast (Minimum) scenario covers only the action named Inventory unique text presentations for the recorded target and state. It contributes evidence to 1.4.3; apply the procedure's aggregation, complete-process and conformance-scope rules before making a broader decision."
    },
    {
      "step_id": "S2",
      "title": "Classify size and exclusions",
      "phase": "test",
      "action": "Determine whether each target is normal or large-scale text. Treat text as large-scale at 24 CSS pixels regular, or approximately 18.66 CSS pixels with a bold weight. Evaluate incidental and logotype exclusions before the ratio decision.",
      "test_target": "Each unique text or image-of-text foreground/background combination, size, weight and meaningful state in the selected scope.",
      "required_state": "Rendered font size and weight used by the target in the measured state.",
      "tool_or_command": "Computed-style inspection and rendered context.",
      "expected": "Each target has a documented threshold—4.5:1 or 3:1—or a supported exclusion.",
      "evidence_to_record": "Computed size, weight, threshold and any exclusion evidence.",
      "decision_effect": "An unsupported exclusion or wrong large-text classification prevents a passed result.",
      "recovery_or_repeat": "Reclassify when responsive styles change size or weight.",
      "novice_guidance": "A large typeface shape does not lower the threshold unless the rendered size and weight meet the definition.",
      "scenario_purpose": "For WCAG 1.4.3 Contrast (Minimum), execute the named scenario: Classify size and exclusions. Target: Each unique text or image-of-text foreground/background combination, size, weight and meaningful state in the selected scope. Compare the observation with this result: Each target has a documented threshold—4.5:1 or 3:1—or a supported exclusion.",
      "user_impact": "Text, instructions, values or states may be unreadable even though they remain present in the interface. This scenario isolates that risk in the action named Classify size and exclusions.",
      "failure_observation": "After the tester completes the WCAG 1.4.3 Contrast (Minimum) scenario named Classify size and exclusions, the recorded observation for the target is inconsistent with the required result: Each target has a documented threshold—4.5:1 or 3:1—or a supported exclusion.",
      "decision_rules": {
        "passed": "Record passed for the WCAG 1.4.3 Contrast (Minimum) scenario named Classify size and exclusions only when the evidence (Computed size, weight, threshold and any exclusion evidence.) supports: Each target has a documented threshold—4.5:1 or 3:1—or a supported exclusion.",
        "failed": "Record failed when the action is completed and this failure observation is reproduced: After the tester completes the WCAG 1.4.3 Contrast (Minimum) scenario named Classify size and exclusions, the recorded observation for the target is inconsistent with the required result: Each target has a documented threshold—4.5:1 or 3:1—or a supported exclusion.",
        "not_applicable": "No visible text or image of text in the selected subject matches the criterion's applicability.",
        "blocked": "Record blocked, not passed, when The target is applicable, but a required state, environment, action or evidence item was not completed."
      },
      "limitations_and_claim_boundary": "This WCAG 1.4.3 Contrast (Minimum) scenario covers only the action named Classify size and exclusions for the recorded target and state. It contributes evidence to 1.4.3; apply the procedure's aggregation, complete-process and conformance-scope rules before making a broader decision."
    },
    {
      "step_id": "S3",
      "title": "Sample actual colours",
      "phase": "test",
      "action": "Obtain the specified or underlying foreground and actual background colours. For gradients and images, measure the least favourable relevant areas behind the glyphs. Do not use anti-aliased edge pixels as the authored text colour.",
      "test_target": "Each unique text or image-of-text foreground/background combination, size, weight and meaningful state in the selected scope.",
      "required_state": "Exact rendered state used for the decision.",
      "tool_or_command": "Colour picker plus computed styles or source-image inspection; record the tool and version.",
      "expected": "The colour pair represents the authored text and the least favourable relevant background.",
      "evidence_to_record": "Foreground/background values, sample locations and screenshots for variable backgrounds.",
      "decision_effect": "An unresolvable or changing colour combination is cantTell until defensible samples are obtained.",
      "recovery_or_repeat": "Repeat across every material gradient stop, image region or animated background state.",
      "novice_guidance": "Browser anti-aliasing can make edge pixels lighter or darker; base the calculation on the underlying declared colours where available.",
      "scenario_purpose": "For WCAG 1.4.3 Contrast (Minimum), execute the named scenario: Sample actual colours. Target: Each unique text or image-of-text foreground/background combination, size, weight and meaningful state in the selected scope. Compare the observation with this result: The colour pair represents the authored text and the least favourable relevant background.",
      "user_impact": "Text, instructions, values or states may be unreadable even though they remain present in the interface. This scenario isolates that risk in the action named Sample actual colours.",
      "failure_observation": "After the tester completes the WCAG 1.4.3 Contrast (Minimum) scenario named Sample actual colours, the recorded observation for the target is inconsistent with the required result: The colour pair represents the authored text and the least favourable relevant background.",
      "decision_rules": {
        "passed": "Record passed for the WCAG 1.4.3 Contrast (Minimum) scenario named Sample actual colours only when the evidence (Foreground/background values, sample locations and screenshots for variable backgrounds.) supports: The colour pair represents the authored text and the least favourable relevant background.",
        "failed": "Record failed when the action is completed and this failure observation is reproduced: After the tester completes the WCAG 1.4.3 Contrast (Minimum) scenario named Sample actual colours, the recorded observation for the target is inconsistent with the required result: The colour pair represents the authored text and the least favourable relevant background.",
        "not_applicable": "No visible text or image of text in the selected subject matches the criterion's applicability.",
        "blocked": "Record blocked, not passed, when The target is applicable, but a required state, environment, action or evidence item was not completed."
      },
      "limitations_and_claim_boundary": "This WCAG 1.4.3 Contrast (Minimum) scenario covers only the action named Sample actual colours for the recorded target and state. It contributes evidence to 1.4.3; apply the procedure's aggregation, complete-process and conformance-scope rules before making a broader decision."
    },
    {
      "step_id": "S4",
      "title": "Calculate without rounding",
      "phase": "test",
      "action": "Calculate the WCAG contrast ratio. Compare the unrounded result with 4.5:1 for normal text or 3:1 for large-scale text and images of text.",
      "test_target": "Each unique text or image-of-text foreground/background combination, size, weight and meaningful state in the selected scope.",
      "required_state": "Colour pair and threshold established in S2–S3.",
      "tool_or_command": "A WCAG contrast calculator that exposes input colours and adequate precision.",
      "expected": "The unrounded ratio meets or exceeds the applicable threshold.",
      "evidence_to_record": "Tool/version, input values, unrounded ratio and threshold.",
      "decision_effect": "A value below the threshold fails even when a rounded display appears to equal it.",
      "recovery_or_repeat": "Recalculate after any colour or threshold classification change.",
      "novice_guidance": "A measured ratio is not the final result until applicability, size and exclusion decisions are also recorded.",
      "scenario_purpose": "For WCAG 1.4.3 Contrast (Minimum), execute the named scenario: Calculate without rounding. Target: Each unique text or image-of-text foreground/background combination, size, weight and meaningful state in the selected scope. Compare the observation with this result: The unrounded ratio meets or exceeds the applicable threshold.",
      "user_impact": "Text, instructions, values or states may be unreadable even though they remain present in the interface. This scenario isolates that risk in the action named Calculate without rounding.",
      "failure_observation": "After the tester completes the WCAG 1.4.3 Contrast (Minimum) scenario named Calculate without rounding, the recorded observation for the target is inconsistent with the required result: The unrounded ratio meets or exceeds the applicable threshold.",
      "decision_rules": {
        "passed": "Record passed for the WCAG 1.4.3 Contrast (Minimum) scenario named Calculate without rounding only when the evidence (Tool/version, input values, unrounded ratio and threshold.) supports: The unrounded ratio meets or exceeds the applicable threshold.",
        "failed": "Record failed when the action is completed and this failure observation is reproduced: After the tester completes the WCAG 1.4.3 Contrast (Minimum) scenario named Calculate without rounding, the recorded observation for the target is inconsistent with the required result: The unrounded ratio meets or exceeds the applicable threshold.",
        "not_applicable": "No visible text or image of text in the selected subject matches the criterion's applicability.",
        "blocked": "Record blocked, not passed, when The target is applicable, but a required state, environment, action or evidence item was not completed."
      },
      "limitations_and_claim_boundary": "This WCAG 1.4.3 Contrast (Minimum) scenario covers only the action named Calculate without rounding for the recorded target and state. It contributes evidence to 1.4.3; apply the procedure's aggregation, complete-process and conformance-scope rules before making a broader decision."
    },
    {
      "step_id": "S5",
      "title": "Repeat material variations and recovery",
      "phase": "test",
      "test_target": "Each unique text or image-of-text foreground/background combination, size, weight and meaningful state in the selected scope.",
      "required_state": "For WCAG 1.4.3 Contrast (Minimum): Default, hover, focus, selected, pressed, visited, error, success and other states where text or its background changes and remains applicable. Responsive, theme and background-image variations selected in scope.",
      "tool_or_command": "For WCAG 1.4.3 Contrast (Minimum), use the same recorded method, then change only the state, environment or recovery condition being compared.",
      "action": "Repeat the WCAG 1.4.3 Contrast (Minimum) action for each inventoried variation that can change the outcome. Include relevant default, revealed, error, interruption, recovery and confirmation states and complete the selected process from start to finish where this test can affect task completion.",
      "expected": "Every material variation and required recovery path has its own reproducible observation; no unexecuted state is merged into a passing result.",
      "failure_observation": "After the tester completes the WCAG 1.4.3 Contrast (Minimum) scenario named Repeat material variations and recovery, the recorded observation for the target is inconsistent with the required result: Every material variation and required recovery path has its own reproducible observation; no unexecuted state is merged into a passing result.",
      "evidence_to_record": "Variation identifier; changed state or environment; start and end points; actual observation; recovery result; intervention; evidence reference and target outcome.",
      "decision_effect": "For WCAG 1.4.3 Contrast (Minimum), a reproduced mismatch fails the affected target; an omitted required variation remains untested; conflicting evidence remains cannot tell.",
      "recovery_or_repeat": "Repeat this action for every required variation of Measure minimum text contrast and after a material target, content, state, environment or configuration change. Preserve the original observation.",
      "novice_guidance": "For WCAG 1.4.3 Contrast (Minimum), change one material condition at a time where practical. Do not assume that a passing default state covers errors, overlays, orientation changes, interruptions or recovery.",
      "limitations_and_claim_boundary": "This WCAG 1.4.3 Contrast (Minimum) scenario covers only the action named Repeat material variations and recovery for the recorded target and state. It contributes evidence to 1.4.3; apply the procedure's aggregation, complete-process and conformance-scope rules before making a broader decision.",
      "scenario_purpose": "For WCAG 1.4.3 Contrast (Minimum), execute the named scenario: Repeat material variations and recovery. Target: Each unique text or image-of-text foreground/background combination, size, weight and meaningful state in the selected scope. Compare the observation with this result: Every material variation and required recovery path has its own reproducible observation; no unexecuted state is merged into a passing result.",
      "user_impact": "Text, instructions, values or states may be unreadable even though they remain present in the interface. This scenario isolates that risk in the action named Repeat material variations and recovery.",
      "decision_rules": {
        "passed": "Record passed for the WCAG 1.4.3 Contrast (Minimum) scenario named Repeat material variations and recovery only when the evidence (Variation identifier; changed state or environment; start and end points; actual observation; recovery result; intervention; evidence reference and target outcome.) supports: Every material variation and required recovery path has its own reproducible observation; no unexecuted state is merged into a passing result.",
        "failed": "Record failed when the action is completed and this failure observation is reproduced: After the tester completes the WCAG 1.4.3 Contrast (Minimum) scenario named Repeat material variations and recovery, the recorded observation for the target is inconsistent with the required result: Every material variation and required recovery path has its own reproducible observation; no unexecuted state is merged into a passing result.",
        "not_applicable": "No visible text or image of text in the selected subject matches the criterion's applicability.",
        "blocked": "Record blocked, not passed, when The target is applicable, but a required state, environment, action or evidence item was not completed."
      }
    }
  ],
  "expectations": [
    {
      "expectation_id": "E1",
      "statement": "Normal text and images of normal text meet at least 4.5:1.",
      "outcome_if_unmet": "failed"
    },
    {
      "expectation_id": "E2",
      "statement": "Large-scale text and images of large-scale text meet at least 3:1.",
      "outcome_if_unmet": "failed"
    }
  ],
  "exceptions": [
    "Use only an exception stated in the relevant standard, or an agreed out-of-scope decision. Record the reason and evidence.",
    "A tool limitation, lack of time or unavailable assistive technology is a limitation or incomplete result, not a pass."
  ],
  "outcome_definitions": {
    "passed": "The applicable test target meets every expectation in this rule or procedure.",
    "failed": "The applicable test target does not meet at least one expectation in this rule or procedure.",
    "inapplicable": "The test subject contains no target that matches this rule or procedure's applicability.",
    "cantTell": "The tester cannot fully determine applicability or whether every expectation is met.",
    "untested": "The test subject or target was not evaluated using this rule or procedure."
  },
  "examples": [
    {
      "example_id": "A11Y-WCAG-014-EX-PASSED",
      "outcome": "passed",
      "scenario": "Representative calibration example, not client evidence. Procedure: WCAG 1.4.3 Contrast (Minimum). Target: Each unique text or image-of-text foreground/background combination, size, weight and meaningful state in the selected scope. Action: Identify each unique foreground, background, font size, font weight and meaningful state for visible text and images of text. Include gradients, background images and changing interactive states. Evidence: Target text, page/state, font metrics, foreground/background source and sampling rationale. Observed result: The inventory is sufficient to explain what was measured and what was sampled."
    },
    {
      "example_id": "A11Y-WCAG-014-EX-FAILED",
      "outcome": "failed",
      "scenario": "Representative calibration example, not client evidence. Procedure: WCAG 1.4.3 Contrast (Minimum). Target: Each unique text or image-of-text foreground/background combination, size, weight and meaningful state in the selected scope. The tester completes the recorded action, but the captured evidence does not demonstrate: The inventory is sufficient to explain what was measured and what was sampled. The failed target and state remain separate from unexecuted targets."
    },
    {
      "example_id": "A11Y-WCAG-014-EX-INAPPLICABLE",
      "outcome": "inapplicable",
      "scenario": "Representative scope example, not client evidence. No visible text or image of text in the selected subject matches the criterion's applicability. The completed inventory is retained as the basis for the inapplicable outcome."
    },
    {
      "example_id": "A11Y-WCAG-014-EX-CANTTELL",
      "outcome": "cantTell",
      "scenario": "Representative unresolved example, not client evidence. The actual foreground/background pair, size classification or exclusion cannot be determined after reasonable investigation. The record identifies the conflicting evidence and the expertise or comparison needed to resolve it."
    },
    {
      "example_id": "A11Y-WCAG-014-EX-UNTESTED",
      "outcome": "untested",
      "scenario": "Representative execution-gap example, not client evidence. The target is applicable, but a required state, environment, action or evidence item was not completed. The missing action, state or environment remains open and is not converted to a pass."
    }
  ],
  "sampling_rule": "Test every in-scope instance when practical. For a large population, document a sample that includes each template, content or control type, meaningful state and high-risk task.",
  "complete_process_requirement": "If this check is part of a user journey, test the selected journey from start to finish, including relevant errors and recovery. Record any path that was not tested.",
  "pass_criteria": "Each applicable normal-text presentation has an unrounded contrast ratio of at least 4.5:1, and each applicable large-scale presentation has at least 3:1, or a documented normative exclusion applies.",
  "fail_criteria": "An applicable text or image-of-text presentation has a ratio below its threshold and no normative exclusion applies.",
  "evidence_requirements": [
    "Target text, page, state, theme, font size/weight and foreground/background source.",
    "Foreground and background colour values with sample location for variable backgrounds.",
    "Calculator/version, inputs, unrounded ratio and required threshold.",
    "Rendered context and exact incidental or logotype rationale."
  ],
  "official_source_ids": [
    "W3C-WCAG22",
    "W3C-WCAG22-QUICKREF",
    "W3C-ACT-RULES",
    "W3C-ACT-RULES-FORMAT",
    "W3C-WCAG22-TECHNIQUES",
    "W3C-CONTRAST-MINIMUM"
  ],
  "act_rule_mapping": {
    "format_alignment": "This is a project-authored manual procedure, not a W3C Approved ACT Rule.",
    "approved_rule_ids": [
      "afw4f7"
    ],
    "approved_rules": [
      {
        "rule_id": "afw4f7",
        "title": "Text has minimum contrast",
        "scope_note": "Supports measurable text-contrast coverage within the rule's applicability. Manual review is still needed for exclusions, images of text and untested states.",
        "applicability_summary": "Visible text nodes within the approved rule's measurable HTML/CSS applicability.",
        "expectation_summary": "The text has the applicable minimum contrast ratio against its background.",
        "last_verified": "2026-08-04",
        "wcag_criterion": "1.4.3",
        "status": "approved",
        "url": "https://www.w3.org/WAI/standards-guidelines/act/rules/afw4f7/"
      }
    ],
    "mapping_status": "Supporting ACT rules identified",
    "registry_reviewed_at": "2026-08-27",
    "registry_source_id": "W3C-ACT-RULES",
    "mapping_rationale": "An ACT result can support only the part of this procedure covered by that rule. It does not replace the remaining manual or assistive-technology checks."
  },
  "technique_traceability": [
    {
      "wcag_criterion": "1.4.3",
      "understanding_url": "https://www.w3.org/WAI/WCAG22/Understanding/contrast-minimum.html",
      "techniques_registry_source_id": "W3C-WCAG22-TECHNIQUES",
      "technique_ids_applied": [],
      "failure_ids_applied": [],
      "selection_status": "Select relevant techniques during the test",
      "selection_note": "Techniques are examples, not extra requirements. Record any technique or common failure used, but decide the result against the success criterion."
    }
  ],
  "platform_ids": [
    "web-desktop-cross-browser"
  ],
  "review_requirement": "A qualified accessibility reviewer must confirm the scope, evidence and result before it is reported as final.",
  "known_issues": [
    "Check relevant browser, tool or assistive-technology release notes before assigning unexpected behaviour to the product.",
    "If responsibility is unclear, record the reproducible behaviour and use cannot tell until it is resolved."
  ],
  "change_log": [
    {
      "version": "2026.08.27-rc.9",
      "change": "Reworked for plain language, case-focused steps, scoped evidence and transparent draft review status."
    },
    {
      "version": "2026.08.27-rc.9",
      "change": "Individually authored reference-procedure content prepared for competent review and execution."
    },
    {
      "version": "2026.08.27-rc.9",
      "change": "Removed administrative filler steps, added contextual risk and result boundaries, and prepared the concise worksheet flow for internal consistency review."
    }
  ],
  "tags": [
    "sc-1.4.3",
    "wcag-2.2",
    "wcag-aa",
    "wcag_manual"
  ],
  "status": "draft",
  "authoring_readiness": "content_complete",
  "short_title": "Measure minimum text contrast",
  "catalogue_version": "2026.08.27-rc.9",
  "identity": {
    "stable_case_id": "A11Y-WCAG-014",
    "procedure_title": "WCAG 1.4.3 Contrast (Minimum)",
    "short_user_centred_title": "Measure minimum text contrast",
    "procedure_version": "2026.08.27-rc.9",
    "catalogue_version": "2026.08.27-rc.9",
    "status": "draft",
    "category": "wcag_manual",
    "procedure_type": "composite",
    "execution_class": "manual_with_automation_support",
    "intended_tester_expertise": "Accessibility tester",
    "effort_model": {
      "model": "component_effort_v2",
      "small_scope_minutes": {
        "minimum": 33,
        "maximum": 48
      },
      "warning": "Add a new per-target execution and evidence allowance for each additional target class or state that could produce a different result. Add setup time for each distinct environment.",
      "calculation_guidance": "Add the recorded setup, per-target execution, evidence and technical-review components; then apply the stated variation rule.",
      "unit": "minutes",
      "setup": {
        "typical": 10,
        "includes": "Confirm scope and target, prepare safe data, establish the required state and record the tool or environment version."
      },
      "per_target_execution": {
        "typical": 8,
        "includes": "Perform the procedure once for one target in its selected states; this excludes remediation and retesting."
      },
      "evidence_capture": {
        "typical": 7,
        "includes": "Capture, name and cross-reference the minimum reproducible evidence while removing unnecessary personal or secret data."
      },
      "technical_review": {
        "typical": 8,
        "includes": "Check applicability, observations, outcome logic, evidence sufficiency and report wording before issue publication."
      },
      "typical_total_range": {
        "minimum": 33,
        "maximum": 48
      },
      "assumptions": "one page or component state; add another execution block for each materially different template or state",
      "variation": "Add a new per-target execution and evidence allowance for each additional target class or state that could produce a different result. Add setup time for each distinct environment.",
      "excludes": "Client coordination, inaccessible-environment recovery, recruitment, legal review, remediation implementation and waiting time unless the procedure states otherwise."
    },
    "related_procedures": [],
    "replaces": [],
    "replaced_by": []
  },
  "purpose_and_user_impact": {
    "barrier_detected": "Detect text that does not have enough luminance contrast against its actual background.",
    "people_likely_affected": [
      "People with low vision.",
      "People with colour-vision differences or reduced contrast sensitivity.",
      "People using a display in glare or other low-contrast conditions."
    ],
    "functionality_or_information_at_risk": "Text, instructions, values or states may be unreadable even though they remain present in the interface.",
    "result_scope": "composite_criterion_assessment",
    "claim_boundary": "This WCAG 1.4.3 Contrast (Minimum) procedure determines whether the recorded targets meet WCAG 1.4.3 on web-desktop-cross-browser in the tested states. A broader conformance decision must also account for every applicable target in the declared scope, complete processes, accessibility-supported use and the other WCAG conformance requirements.",
    "why_it_matters": "Text, instructions, values or states may be unreadable even though they remain present in the interface. The procedure is necessary because detect text that does not have enough luminance contrast against its actual background and the result can otherwise conceal a material barrier for the affected people named here."
  },
  "requirement_mappings": [
    {
      "source_id": "W3C-WCAG22",
      "requirement_id": "1.4.3",
      "requirement_level": "AA",
      "requirement_type": "conformance",
      "coverage_type": "full",
      "canonical_source": "https://www.w3.org/TR/WCAG22/",
      "source_status": "W3C Recommendation",
      "source_version_or_publication_date": "WCAG 2.2; 12 December 2024 Recommendation",
      "date_verified": "2026-08-27",
      "reviewer_notes": "Primary conformance mapping for the minimum contrast of text and images of text.",
      "limitations": "The criterion has state, size and exclusion branches. This composite procedure depends on representative but defensible sampling where exhaustive measurement is impractical.",
      "dependent_fields": [
        "applicability_model",
        "normative_exceptions",
        "steps",
        "decision_logic"
      ],
      "mapping_role": "primary_conformance_mapping"
    },
    {
      "source_id": "W3C-ACT-RULES",
      "requirement_id": "afw4f7",
      "requirement_level": "informative",
      "requirement_type": "secondary",
      "coverage_type": "partial",
      "canonical_source": "https://www.w3.org/WAI/standards-guidelines/act/rules/afw4f7/",
      "source_status": "W3C-approved informative ACT rule",
      "source_version_or_publication_date": "Registry status checked 2026-08-27",
      "date_verified": "2026-08-27",
      "reviewer_notes": "Partial supporting check for the approved ACT rule's exact text-contrast applicability and expectation.",
      "limitations": "A passed ACT outcome covers only targets in that rule's applicability; it does not establish correct sampling, images of text, all meaningful states, gradients or final exclusion judgements.",
      "dependent_fields": [
        "act_rule_mapping",
        "decision_logic"
      ],
      "mapping_role": "partial_supporting_check"
    },
    {
      "source_id": "W3C-WCAG22-QUICKREF",
      "requirement_id": "W3C-WCAG22-QUICKREF",
      "requirement_level": "informative",
      "requirement_type": "advisory",
      "coverage_type": "supporting",
      "canonical_source": "https://www.w3.org/WAI/WCAG22/quickref/",
      "source_status": "living_guidance",
      "source_version_or_publication_date": "WCAG 2.2 supporting guidance",
      "date_verified": "2026-08-27",
      "reviewer_notes": "Supporting source. Procedure-level content review remains recorded separately.",
      "limitations": "This source does not override WCAG or create an additional WCAG conformance requirement.",
      "dependent_fields": [
        "prerequisites",
        "environment",
        "steps"
      ]
    },
    {
      "source_id": "W3C-ACT-RULES-FORMAT",
      "requirement_id": "W3C-ACT-RULES-FORMAT",
      "requirement_level": "informative",
      "requirement_type": "advisory",
      "coverage_type": "supporting",
      "canonical_source": "https://www.w3.org/TR/act-rules-format/",
      "source_status": "recommendation",
      "source_version_or_publication_date": "ACT Rules Format 1.1; W3C Recommendation 2026",
      "date_verified": "2026-08-27",
      "reviewer_notes": "Supporting source. Procedure-level content review remains recorded separately.",
      "limitations": "This source does not override WCAG or create an additional WCAG conformance requirement.",
      "dependent_fields": [
        "prerequisites",
        "environment",
        "steps"
      ]
    },
    {
      "source_id": "W3C-WCAG22-TECHNIQUES",
      "requirement_id": "W3C-WCAG22-TECHNIQUES",
      "requirement_level": "informative",
      "requirement_type": "advisory",
      "coverage_type": "supporting",
      "canonical_source": "https://www.w3.org/WAI/WCAG22/Techniques/",
      "source_status": "living_guidance",
      "source_version_or_publication_date": "Techniques for WCAG 2.2",
      "date_verified": "2026-08-27",
      "reviewer_notes": "Supporting source. Procedure-level content review remains recorded separately.",
      "limitations": "This source does not override WCAG or create an additional WCAG conformance requirement.",
      "dependent_fields": [
        "prerequisites",
        "environment",
        "steps"
      ]
    },
    {
      "source_id": "W3C-CONTRAST-MINIMUM",
      "requirement_id": "Understanding 1.4.3",
      "requirement_level": "informative",
      "requirement_type": "advisory",
      "coverage_type": "supporting",
      "canonical_source": "https://www.w3.org/WAI/WCAG22/Understanding/contrast-minimum.html",
      "source_status": "living_guidance",
      "source_version_or_publication_date": "Understanding WCAG 2.2 Success Criterion 1.4.3; checked 4 August 2026",
      "date_verified": "2026-08-27",
      "reviewer_notes": "Criterion-specific informative interpretation used for applicability, exceptions and decision guidance.",
      "limitations": "Understanding guidance is informative and does not add a WCAG conformance requirement.",
      "dependent_fields": [
        "purpose_and_user_impact",
        "applicability_model",
        "normative_exceptions",
        "steps",
        "decision_logic",
        "calibration_examples"
      ]
    }
  ],
  "applicability_model": {
    "test_subject": "Visible text and images of text in the selected content, including meaningful active and interactive states.",
    "test_targets": [
      "Each unique text or image-of-text foreground/background combination, size, weight and meaningful state in the selected scope."
    ],
    "objective_questions": [
      "Is the target visible text or an image of text?",
      "What are the actual foreground and background colours at the least favourable relevant sample?",
      "Is it large-scale text: at least 24 CSS pixels regular, or approximately 18.66 CSS pixels and bold?",
      "Does a normative exclusion apply?"
    ],
    "subjective_judgements": [
      "Decide whether text is incidental, purely decorative, inactive or part of a logotype before excluding it; preserve the context and rationale."
    ],
    "inapplicability_conditions": [
      "The selected subject contains no visible text or image of text to which WCAG 1.4.3 applies."
    ],
    "scope_exclusions": [
      "Non-text user-interface boundaries and meaningful graphics are tested under WCAG 1.4.11, not this procedure."
    ],
    "required_states_and_variations": [
      "Default, hover, focus, selected, pressed, visited, error, success and other states where text or its background changes and remains applicable.",
      "Responsive, theme and background-image variations selected in scope."
    ],
    "complete_process_dependencies": "Include text and images of text in every selected critical process, especially instructions, validation, totals and confirmation states.",
    "conforming_alternate_version_considerations": "Rely on a conforming alternate version only after the WCAG definition and all conformance conditions are verified for both versions and the mechanism used to reach the alternate."
  },
  "normative_exceptions": [
    {
      "name": "Incidental text or image of text",
      "decision_condition": "The text is part of an inactive user-interface component, pure decoration, not visible to anyone, or part of a picture containing significant other visual content.",
      "evidence_needed": "Rendered context, state evidence and explanation of the applicable incidental branch.",
      "common_misinterpretation": "Small, faint, placeholder or secondary text is not automatically incidental; an author-styled disabled appearance is not enough if the control remains operable.",
      "official_source": "https://www.w3.org/WAI/WCAG22/Understanding/contrast-minimum.html",
      "scope_of_exception": "Only the text meeting the recorded incidental branch."
    },
    {
      "name": "Logotype",
      "decision_condition": "The text is part of a logo or brand name.",
      "evidence_needed": "Rendered logo/brand context and identification of the text as part of the logotype.",
      "common_misinterpretation": "Brand-coloured headings, slogans and ordinary product text are not automatically logotypes.",
      "official_source": "https://www.w3.org/WAI/WCAG22/Understanding/contrast-minimum.html",
      "scope_of_exception": "Only text that is part of the logo or brand name."
    }
  ],
  "normative_exceptions_absent_reason": "",
  "environment": {
    "required_tester_expertise": "Accessibility tester",
    "required_platforms": [
      "web-desktop-cross-browser"
    ],
    "minimum_environment_fields": [
      "operating_system",
      "operating_system_version",
      "browser",
      "browser_version",
      "viewport_css_pixels",
      "input_method"
    ],
    "product_and_content_version_required": true,
    "viewport_and_orientation_required": true,
    "input_mode_required": true,
    "relevant_settings": [],
    "known_platform_limitations": [
      "Check relevant browser, tool or assistive-technology release notes before assigning unexpected behaviour to the product.",
      "If responsibility is unclear, record the reproducible behaviour and use cannot tell until it is resolved."
    ],
    "clean_state_requirements": [
      "Start from a documented clean or known state and record pre-existing preferences, extensions and cached data that can change the result."
    ],
    "test_data_and_privacy_constraints": [
      "Use authorised synthetic or controlled data.",
      "Do not record credentials, secrets or unnecessary personal data."
    ],
    "coverage_boundary": [
      "The result covers only the browsers, platforms, readers and assistive technologies that were actually tested.",
      "Do not apply a result from one technology combination to an untested combination or to every user."
    ]
  },
  "decision_logic": {
    "target_passed": "Each applicable normal-text presentation has an unrounded contrast ratio of at least 4.5:1, and each applicable large-scale presentation has at least 3:1, or a documented normative exclusion applies.",
    "target_failed": "An applicable text or image-of-text presentation has a ratio below its threshold and no normative exclusion applies.",
    "target_inapplicable": "No visible text or image of text in the selected subject matches the criterion's applicability.",
    "target_cant_tell": "The actual foreground/background pair, size classification or exclusion cannot be determined after reasonable investigation.",
    "target_untested": "The target is applicable, but a required state, environment, action or evidence item was not completed.",
    "aggregation": "Preserve results per unique presentation and state. One failure prevents a passed aggregate; cantTell and untested remain unresolved.",
    "wcag_requirement_decision": "A WCAG 1.4.3 satisfied decision requires coverage of all applicable content in the conformance scope and the WCAG conformance requirements. A sampled procedure must disclose coverage limitations.",
    "conforming_alternate_version_effect": "Apply a conforming alternate version only after its WCAG definition and every conformance condition have been verified and recorded; otherwise it does not change the decision.",
    "passed_automation_follow_up": "A passed ACT result or automated scan does not cover all images of text, gradients, background images, meaningful states or exclusion judgements. A passed automated or ACT result must never set the criterion to satisfied automatically.",
    "platform_responsibility": "When responsibility is unclear, preserve the reproducible behaviour and environment evidence and use cantTell until a qualified reviewer resolves it.",
    "claim_readiness": "A complete result may become ready_for_review. Schema validity, a passed target or a tool result cannot make it ready_for_scoped_claim without the independent evidence and governance gates."
  },
  "evidence_specification": [
    {
      "evidence_id": "EV1",
      "method": "presentation_inventory",
      "record": "Target text, page, state, theme, font size/weight and foreground/background source.",
      "review_purpose": "Review coverage and threshold selection.",
      "privacy_and_security": "Use a redacted extract or evidence reference. Do not include credentials, secrets or unnecessary personal data.",
      "required_for_formal_result": true
    },
    {
      "evidence_id": "EV2",
      "method": "colour_measurement",
      "record": "Foreground and background colour values with sample location for variable backgrounds.",
      "review_purpose": "Reproduce the colour selection.",
      "privacy_and_security": "Use a redacted extract or evidence reference. Do not include credentials, secrets or unnecessary personal data.",
      "required_for_formal_result": true
    },
    {
      "evidence_id": "EV3",
      "method": "contrast_calculation",
      "record": "Calculator/version, inputs, unrounded ratio and required threshold.",
      "review_purpose": "Recalculate the result independently.",
      "privacy_and_security": "Use a redacted extract or evidence reference. Do not include credentials, secrets or unnecessary personal data.",
      "required_for_formal_result": true
    },
    {
      "evidence_id": "EV4",
      "method": "exception_decision",
      "record": "Rendered context and exact incidental or logotype rationale.",
      "review_purpose": "Review exclusions separately from measurement.",
      "privacy_and_security": "Use a redacted extract or evidence reference. Do not include credentials, secrets or unnecessary personal data.",
      "required_for_formal_result": true
    }
  ],
  "calibration_examples": [
    {
      "example_id": "A11Y-WCAG-014-EX-PASSED",
      "outcome": "passed",
      "scenario": "16 CSS-pixel body text uses #1F1F1F on #FFFFFF and the recorded unrounded ratio exceeds 4.5:1.",
      "explanation": "Normal text meets the correct threshold.",
      "fixture_id": "contrast-normal-pass",
      "fixture_version": "1.0.0",
      "machine_testable": true
    },
    {
      "example_id": "A11Y-WCAG-014-EX-FAILED",
      "outcome": "failed",
      "scenario": "16 CSS-pixel error text uses a red/white pair with an unrounded ratio below 4.5:1.",
      "explanation": "The meaningful error state is applicable and fails the normal-text threshold.",
      "fixture_id": "contrast-error-fail",
      "fixture_version": "1.0.0",
      "machine_testable": true
    },
    {
      "example_id": "A11Y-WCAG-014-EX-INAPPLICABLE",
      "outcome": "inapplicable",
      "scenario": "A selected decorative canvas contains no visible text or image of text.",
      "explanation": "No target matches this procedure; meaningful graphics require a different check.",
      "fixture_id": "",
      "fixture_version": "",
      "machine_testable": false
    },
    {
      "example_id": "A11Y-WCAG-014-EX-CANTTELL",
      "outcome": "cantTell",
      "scenario": "Text is composited over a cross-origin animated background and the least favourable background colour cannot be captured.",
      "explanation": "The colour pair cannot be determined defensibly.",
      "fixture_id": "",
      "fixture_version": "",
      "machine_testable": false
    },
    {
      "example_id": "A11Y-WCAG-014-EX-UNTESTED",
      "outcome": "untested",
      "scenario": "Default text was measured, but the selected error and visited states were not.",
      "explanation": "Applicable meaningful states remain untested.",
      "fixture_id": "",
      "fixture_version": "",
      "machine_testable": false
    },
    {
      "example_id": "A11Y-WCAG-014-EX-PASSED",
      "outcome": "passed",
      "scenario": "Text forming part of a recorded company logotype is below 4.5:1.",
      "explanation": "The ratio is below the normal threshold, but the logotype exclusion applies only to that text.",
      "fixture_id": "",
      "fixture_version": "",
      "machine_testable": false
    }
  ],
  "review_record": {
    "author": "",
    "method_reviewer": "",
    "independent_standards_reviewer": "",
    "accessibility_ui_reviewer": "",
    "author_date": "",
    "method_review_date": "",
    "standards_review_date": "",
    "ui_review_date": "",
    "source_versions_reviewed": [],
    "exceptions_reviewed": false,
    "known_limitations": [
      "This is a source-checked reference implementation subject to independent method and standards agent verification; formal approval remains separate."
    ],
    "open_issues": [
      "Independent review must confirm sampling sufficiency, ACT-rule status and calibration-fixture calculations before status promotion."
    ],
    "decision": "pending",
    "next_review_date": "",
    "status_transition_reason": "",
    "release_gate_id": "",
    "release_gate_completed_at": "",
    "approval_authority": "",
    "approval_date": ""
  },
  "privacy_and_security": {
    "browser_storage": "Worksheet data is stored only in this browser's local storage until the user exports or clears it.",
    "network_transmission": "The static library does not upload worksheet data.",
    "data_minimisation": "Record only evidence necessary to reproduce and review the decision.",
    "redaction": "Remove credentials, secrets and unnecessary personal or participant data before export or sharing.",
    "retention_and_deletion": "Apply the engagement retention schedule and clear local browser data when it is no longer required."
  },
  "version_history": [
    {
      "version": "2026.08.27-rc.9",
      "change": "Reworked for plain language, case-focused steps, scoped evidence and transparent draft review status."
    },
    {
      "version": "2026.08.27-rc.9",
      "change": "Migrated to professional catalogue schema v3 with separated outcomes, structured authority, applicability, evidence, decision and review records."
    },
    {
      "version": "2026.08.27-rc.9",
      "change": "Individually prepared WCAG 1.4.3 procedure content mapped to current normative and informative sources and checked for internal consistency; competent review, real execution and formal claim authority remain separate."
    },
    {
      "version": "2026.08.27-rc.9",
      "change": "Replaced migrated boilerplate with a case-specific reference implementation and completed independent agent content verification."
    },
    {
      "version": "2026.08.27-rc.9",
      "change": "Added explicit preparation and variation/recovery steps plus a bounded representative worked example for paid-template use."
    },
    {
      "version": "2026.08.27-rc.9",
      "change": "Procedure guidance and presentation simplified without changing draft governance status."
    }
  ],
  "migration": {
    "from_schema": "accessibility-test-catalog.v2",
    "from_procedure_version": "2026.08.04.1",
    "migrated_at": "2026-08-27",
    "content_review_state": "commercial_completeness_upgrade_agent_verified",
    "stable_identifier_preserved": true,
    "legacy_url_preserved": true,
    "delivery_model": "professional_delivery_v2",
    "agent_content_validation": {
      "status": "complete",
      "method": "case_specific_semantic_and_operational_checks_v1",
      "checked_fields": [
        "target",
        "state",
        "tool",
        "action",
        "expected_observation",
        "failure_observation",
        "evidence",
        "outcome_rules",
        "claim_boundary",
        "compact_examples"
      ],
      "human_approval_effect": "none"
    }
  },
  "test_type": "conformance",
  "library_layer": "composite",
  "decision_branches": [],
  "supporting_guidance": [],
  "effort_guidance": {
    "unit": "minutes",
    "setup": {
      "typical": 10,
      "includes": "Confirm scope and target, prepare safe data, establish the required state and record the tool or environment version."
    },
    "per_target_execution": {
      "typical": 8,
      "includes": "Perform the procedure once for one target in its selected states; this excludes remediation and retesting."
    },
    "evidence_capture": {
      "typical": 7,
      "includes": "Capture, name and cross-reference the minimum reproducible evidence while removing unnecessary personal or secret data."
    },
    "technical_review": {
      "typical": 8,
      "includes": "Check applicability, observations, outcome logic, evidence sufficiency and report wording before issue publication."
    },
    "typical_total_range": {
      "minimum": 33,
      "maximum": 48
    },
    "assumptions": "one page or component state; add another execution block for each materially different template or state",
    "variation": "Add a new per-target execution and evidence allowance for each additional target class or state that could produce a different result. Add setup time for each distinct environment.",
    "excludes": "Client coordination, inaccessible-environment recovery, recruitment, legal review, remediation implementation and waiting time unless the procedure states otherwise."
  },
  "worked_examples": [
    {
      "example_id": "A11Y-WCAG-014-WORKED-001",
      "example_kind": "representative_synthetic_example",
      "context": "Representative synthetic example for WCAG 1.4.3 Contrast (Minimum) on a fictional, version-frozen product target; no client or participant execution occurred.",
      "inspected": "The tester follows S2 (Classify size and exclusions) using the target, required state, tool and repeat rule stated in this procedure.",
      "observed_output": "After the tester completes the WCAG 1.4.3 Contrast (Minimum) scenario named Classify size and exclusions, the recorded observation for the target is inconsistent with the required result: Each target has a documented threshold—4.5:1 or 3:1—or a supported exclusion.",
      "evidence_captured": [
        "example-evidence-001: target and state record for Each unique text or image-of-text foreground/background combination, size, weight and meaningful state in the selected scope.",
        "example-evidence-002: contemporaneous observation from the named method — Computed size, weight, threshold and any exclusion evidence.",
        "example-evidence-003: comparison note linking the actual observation to the expected result and claim boundary"
      ],
      "tester_reasoning": "The recorded observation does not demonstrate the expected result: Each target has a documented threshold—4.5:1 or 3:1—or a supported exclusion. The failed decision is limited to this synthetic target and state; unexecuted coverage is not inferred.",
      "decision": "failed",
      "completed_finding": {
        "finding_id": "A11Y-WCAG-014-example-finding-001",
        "title": "Measure minimum text contrast: expected result is not demonstrated",
        "severity": "medium",
        "user_impact": "The represented barrier may affect People with low vision.; People with colour-vision differences or reduced contrast sensitivity.; People using a display in glare or other low-contrast conditions.",
        "evidence_refs": [
          "example-evidence-001",
          "example-evidence-002",
          "example-evidence-003"
        ]
      },
      "remediation_advice": "Change the represented target or process so it demonstrates this result: Each target has a documented threshold—4.5:1 or 3:1—or a supported exclusion. Then rerun the affected step and every dependent variation.",
      "reviewer_feedback": "The reviewer confirms applicability, environment, actual-versus-expected comparison, evidence references and bounded wording; unsupported product-wide or conformance language is removed.",
      "final_client_report_wording": "Synthetic training finding: the sampled Measure minimum text contrast target does not meet the procedure expectation in the recorded state. User impact and broader scope require evidence from the buyer's real execution.",
      "retest_outcome": "Synthetic retest example: after the represented change, repeat the failed step plus material error and recovery states. Close the finding only when new evidence demonstrates the expected result; otherwise retain the non-pass outcome.",
      "claim_boundary": "This is a representative, synthetic worked example for training and calibration. It is not evidence from a client product, participant or real assistive-technology execution."
    }
  ]
}
