{
  "test_case_id": "A11Y-WCAG-040",
  "title": "WCAG 2.5.8 Target Size (Minimum)",
  "category": "wcag_manual",
  "procedure_version": "2026.08.27-rc.9",
  "rule_type": "atomic",
  "wcag_criteria": [
    "2.5.8"
  ],
  "level": "AA",
  "risk": "medium",
  "risk_basis": "Detect pointer targets that are too small and too close to other targets for reliable activation. People most likely affected: people with hand tremors, limited dexterity or reduced fine-motor control; People using touch, a stylus or a pointer in difficult conditions. Users may activate the wrong control, be unable to activate a target reliably or abandon a task. 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": "Check each pointer target against the 24 by 24 CSS-pixel minimum and all five normative exceptions.",
  "objective": "Detect pointer targets that are too small and too close to other targets for reliable activation.",
  "test_subject": "All author-controlled pointer input targets in each selected page, view and meaningful responsive state.",
  "test_targets": [
    "Each author-controlled pointer input target, measured by its CSS-pixel target area and bounding box."
  ],
  "applicability": "Apply to pointer input targets. Do not count a target only while it is obscured by interaction-generated content; do test targets in the newly displayed content.",
  "applicability_questions": [
    "Can this element receive pointer input for a function?",
    "Is its target area at least 24 CSS pixels wide and 24 CSS pixels high?",
    "If undersized, does exactly one of the five normative exceptions apply?"
  ],
  "inapplicability_conditions": [
    "The selected subject contains no pointer input target."
  ],
  "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 pointer targets",
      "phase": "prepare",
      "action": "List every unique pointer target and repeated target class in each selected responsive and revealed state. Record targets hidden by an overlay separately from targets introduced by that overlay.",
      "test_target": "Each author-controlled pointer input target, measured by its CSS-pixel target area and bounding box.",
      "required_state": "All selected viewport widths, orientations and revealed layers.",
      "tool_or_command": "Browser developer tools and a pointer-target inventory worksheet.",
      "expected": "The inventory identifies every applicable target class and state to measure.",
      "evidence_to_record": "Page, state, viewport, target identifier, function and repetition count.",
      "decision_effect": "Missing inventory items become untested rather than silently passing.",
      "recovery_or_repeat": "Repeat when layout, content or component geometry changes.",
      "novice_guidance": "The visible icon is not always the complete clickable target; inspect the actual hit area.",
      "scenario_purpose": "For WCAG 2.5.8 Target Size (Minimum), prepare the named scenario: Inventory pointer targets. Target: Each author-controlled pointer input target, measured by its CSS-pixel target area and bounding box. The preparation must establish this result: The inventory identifies every applicable target class and state to measure.",
      "user_impact": "Users may activate the wrong control, be unable to activate a target reliably or abandon a task. This scenario isolates that risk in the action named Inventory pointer targets.",
      "failure_observation": "During WCAG 2.5.8 Target Size (Minimum), the target, starting state, environment or scope record remains ambiguous for the scenario named Inventory pointer targets. The preparation result cannot be demonstrated: The inventory identifies every applicable target class and state to measure.",
      "decision_rules": {
        "passed": "Record passed for the WCAG 2.5.8 Target Size (Minimum) scenario named Inventory pointer targets only when the evidence (Page, state, viewport, target identifier, function and repetition count.) supports: The inventory identifies every applicable target class and state to measure.",
        "failed": "Record failed when the action is completed and this failure observation is reproduced: During WCAG 2.5.8 Target Size (Minimum), the target, starting state, environment or scope record remains ambiguous for the scenario named Inventory pointer targets. The preparation result cannot be demonstrated: The inventory identifies every applicable target class and state to measure.",
        "not_applicable": "No pointer input target exists in the selected subject.",
        "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 2.5.8 Target Size (Minimum) scenario covers only the action named Inventory pointer targets for the recorded target and state. It contributes evidence to 2.5.8; apply the procedure's aggregation, complete-process and conformance-scope rules before making a broader decision."
    },
    {
      "step_id": "S2",
      "title": "Measure the target area",
      "phase": "test",
      "action": "Measure the active target's width and height in CSS pixels using its actual pointer hit area. A target meets the size branch only when a 24 by 24 CSS-pixel square fits within it.",
      "test_target": "Each author-controlled pointer input target, measured by its CSS-pixel target area and bounding box.",
      "required_state": "Rendered state at the recorded viewport and zoom; browser zoom does not change CSS-pixel dimensions.",
      "tool_or_command": "Browser geometry inspection, hit-area overlay or a validated measurement tool.",
      "expected": "Each target is classified as at least 24 by 24 CSS pixels or undersized.",
      "evidence_to_record": "Target bounding box, active-area dimensions, viewport and tool/version.",
      "decision_effect": "A target at least 24 by 24 CSS pixels can pass this condition; an undersized target proceeds to S3.",
      "recovery_or_repeat": "Repeat when responsive layout or state changes the hit area.",
      "novice_guidance": "Rounded, clipped or irregular shapes can be undersized even when their bounding box is 24 by 24; confirm a 24-pixel square fits inside the active area.",
      "scenario_purpose": "For WCAG 2.5.8 Target Size (Minimum), execute the named scenario: Measure the target area. Target: Each author-controlled pointer input target, measured by its CSS-pixel target area and bounding box. Compare the observation with this result: Each target is classified as at least 24 by 24 CSS pixels or undersized.",
      "user_impact": "Users may activate the wrong control, be unable to activate a target reliably or abandon a task. This scenario isolates that risk in the action named Measure the target area.",
      "failure_observation": "After the tester completes the WCAG 2.5.8 Target Size (Minimum) scenario named Measure the target area, the recorded observation for the target is inconsistent with the required result: Each target is classified as at least 24 by 24 CSS pixels or undersized.",
      "decision_rules": {
        "passed": "Record passed for the WCAG 2.5.8 Target Size (Minimum) scenario named Measure the target area only when the evidence (Target bounding box, active-area dimensions, viewport and tool/version.) supports: Each target is classified as at least 24 by 24 CSS pixels or undersized.",
        "failed": "Record failed when the action is completed and this failure observation is reproduced: After the tester completes the WCAG 2.5.8 Target Size (Minimum) scenario named Measure the target area, the recorded observation for the target is inconsistent with the required result: Each target is classified as at least 24 by 24 CSS pixels or undersized.",
        "not_applicable": "No pointer input target exists in the selected subject.",
        "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 2.5.8 Target Size (Minimum) scenario covers only the action named Measure the target area for the recorded target and state. It contributes evidence to 2.5.8; apply the procedure's aggregation, complete-process and conformance-scope rules before making a broader decision."
    },
    {
      "step_id": "S3",
      "title": "Calculate spacing for undersized targets",
      "phase": "test",
      "action": "For each undersized target, centre a circle with a 24 CSS-pixel diameter on the centre of its bounding box. Confirm that the circle intersects neither another target nor the 24-pixel circle of another undersized target.",
      "test_target": "Each author-controlled pointer input target, measured by its CSS-pixel target area and bounding box.",
      "required_state": "Same geometry and adjacent targets measured in S2.",
      "tool_or_command": "Geometry overlay or calculation that records bounding-box centres, 12 CSS-pixel radii and intersection results.",
      "expected": "Every undersized target either satisfies the exact spacing calculation or proceeds to another exception.",
      "evidence_to_record": "Coordinates or overlay for each circle, adjacent-target geometry and intersection result.",
      "decision_effect": "Intersection with any other target or undersized-target circle means the spacing exception is not met.",
      "recovery_or_repeat": "Recalculate for every layout or state that changes position or dimensions.",
      "novice_guidance": "Measure from the bounding-box centre, including for irregular shapes; do not substitute edge-to-edge gap alone.",
      "scenario_purpose": "For WCAG 2.5.8 Target Size (Minimum), execute the named scenario: Calculate spacing for undersized targets. Target: Each author-controlled pointer input target, measured by its CSS-pixel target area and bounding box. Compare the observation with this result: Every undersized target either satisfies the exact spacing calculation or proceeds to another exception.",
      "user_impact": "Users may activate the wrong control, be unable to activate a target reliably or abandon a task. This scenario isolates that risk in the action named Calculate spacing for undersized targets.",
      "failure_observation": "After the tester completes the WCAG 2.5.8 Target Size (Minimum) scenario named Calculate spacing for undersized targets, the recorded observation for the target is inconsistent with the required result: Every undersized target either satisfies the exact spacing calculation or proceeds to another exception.",
      "decision_rules": {
        "passed": "Record passed for the WCAG 2.5.8 Target Size (Minimum) scenario named Calculate spacing for undersized targets only when the evidence (Coordinates or overlay for each circle, adjacent-target geometry and intersection result.) supports: Every undersized target either satisfies the exact spacing calculation or proceeds to another exception.",
        "failed": "Record failed when the action is completed and this failure observation is reproduced: After the tester completes the WCAG 2.5.8 Target Size (Minimum) scenario named Calculate spacing for undersized targets, the recorded observation for the target is inconsistent with the required result: Every undersized target either satisfies the exact spacing calculation or proceeds to another exception.",
        "not_applicable": "No pointer input target exists in the selected subject.",
        "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 2.5.8 Target Size (Minimum) scenario covers only the action named Calculate spacing for undersized targets for the recorded target and state. It contributes evidence to 2.5.8; apply the procedure's aggregation, complete-process and conformance-scope rules before making a broader decision."
    },
    {
      "step_id": "S4",
      "title": "Evaluate the remaining exceptions",
      "phase": "test",
      "action": "For each target that does not meet size or spacing, evaluate equivalent control, inline target, user-agent control and essential presentation in that order. Record the exact condition and evidence for any exception used.",
      "test_target": "Each author-controlled pointer input target, measured by its CSS-pixel target area and bounding box.",
      "required_state": "Same target function and state used for measurement.",
      "tool_or_command": "DOM/style inspection, functional comparison and documented standards judgement.",
      "expected": "A named normative exception is supported by evidence, or the target fails.",
      "evidence_to_record": "Exception name, decision condition, evidence and reviewer question where judgement is material.",
      "decision_effect": "A target with no supported exception fails; ambiguity after reasonable investigation is cantTell.",
      "recovery_or_repeat": "Retest the target without the exception if the design or function changes.",
      "novice_guidance": "Do not use “allowed spacing” or “essential” without the exact calculation or rationale.",
      "scenario_purpose": "For WCAG 2.5.8 Target Size (Minimum), execute the named scenario: Evaluate the remaining exceptions. Target: Each author-controlled pointer input target, measured by its CSS-pixel target area and bounding box. Compare the observation with this result: A named normative exception is supported by evidence, or the target fails.",
      "user_impact": "Users may activate the wrong control, be unable to activate a target reliably or abandon a task. This scenario isolates that risk in the action named Evaluate the remaining exceptions.",
      "failure_observation": "After the tester completes the WCAG 2.5.8 Target Size (Minimum) scenario named Evaluate the remaining exceptions, the recorded observation for the target is inconsistent with the required result: A named normative exception is supported by evidence, or the target fails.",
      "decision_rules": {
        "passed": "Record passed for the WCAG 2.5.8 Target Size (Minimum) scenario named Evaluate the remaining exceptions only when the evidence (Exception name, decision condition, evidence and reviewer question where judgement is material.) supports: A named normative exception is supported by evidence, or the target fails.",
        "failed": "Record failed when the action is completed and this failure observation is reproduced: After the tester completes the WCAG 2.5.8 Target Size (Minimum) scenario named Evaluate the remaining exceptions, the recorded observation for the target is inconsistent with the required result: A named normative exception is supported by evidence, or the target fails.",
        "not_applicable": "No pointer input target exists in the selected subject.",
        "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 2.5.8 Target Size (Minimum) scenario covers only the action named Evaluate the remaining exceptions for the recorded target and state. It contributes evidence to 2.5.8; 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 author-controlled pointer input target, measured by its CSS-pixel target area and bounding box.",
      "required_state": "For WCAG 2.5.8 Target Size (Minimum): Default and every responsive layout that changes target geometry. Revealed menus, dialogs, validation, toolbars and other layers containing new targets.",
      "tool_or_command": "For WCAG 2.5.8 Target Size (Minimum), use the same recorded method, then change only the state, environment or recovery condition being compared.",
      "action": "Repeat the WCAG 2.5.8 Target Size (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 2.5.8 Target Size (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 2.5.8 Target Size (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 pointer target size and spacing and after a material target, content, state, environment or configuration change. Preserve the original observation.",
      "novice_guidance": "For WCAG 2.5.8 Target Size (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 2.5.8 Target Size (Minimum) scenario covers only the action named Repeat material variations and recovery for the recorded target and state. It contributes evidence to 2.5.8; apply the procedure's aggregation, complete-process and conformance-scope rules before making a broader decision.",
      "scenario_purpose": "For WCAG 2.5.8 Target Size (Minimum), execute the named scenario: Repeat material variations and recovery. Target: Each author-controlled pointer input target, measured by its CSS-pixel target area and bounding box. 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": "Users may activate the wrong control, be unable to activate a target reliably or abandon a task. This scenario isolates that risk in the action named Repeat material variations and recovery.",
      "decision_rules": {
        "passed": "Record passed for the WCAG 2.5.8 Target Size (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 2.5.8 Target Size (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 pointer input target exists in the selected subject.",
        "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": "The active pointer target contains a 24 by 24 CSS-pixel area, or a named normative exception is evidenced.",
      "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-040-EX-PASSED",
      "outcome": "passed",
      "scenario": "Representative calibration example, not client evidence. Procedure: WCAG 2.5.8 Target Size (Minimum). Target: Each author-controlled pointer input target, measured by its CSS-pixel target area and bounding box. Action: List every unique pointer target and repeated target class in each selected responsive and revealed state. Record targets hidden by an overlay separately from targets introduced by that overlay. Evidence: Page, state, viewport, target identifier, function and repetition count. Observed result: The inventory identifies every applicable target class and state to measure."
    },
    {
      "example_id": "A11Y-WCAG-040-EX-FAILED",
      "outcome": "failed",
      "scenario": "Representative calibration example, not client evidence. Procedure: WCAG 2.5.8 Target Size (Minimum). Target: Each author-controlled pointer input target, measured by its CSS-pixel target area and bounding box. The tester completes the recorded action, but the captured evidence does not demonstrate: The inventory identifies every applicable target class and state to measure. The failed target and state remain separate from unexecuted targets."
    },
    {
      "example_id": "A11Y-WCAG-040-EX-INAPPLICABLE",
      "outcome": "inapplicable",
      "scenario": "Representative scope example, not client evidence. No pointer input target exists in the selected subject. The completed inventory is retained as the basis for the inapplicable outcome."
    },
    {
      "example_id": "A11Y-WCAG-040-EX-CANTTELL",
      "outcome": "cantTell",
      "scenario": "Representative unresolved example, not client evidence. The active hit area, adjacency or an exception condition cannot be determined after reasonable inspection. The record identifies the conflicting evidence and the expertise or comparison needed to resolve it."
    },
    {
      "example_id": "A11Y-WCAG-040-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": "The target contains a 24 by 24 CSS-pixel area or satisfies one documented normative exception using its exact decision condition.",
  "fail_criteria": "The target is undersized and does not satisfy spacing, equivalent control, inline target, user-agent control or essential presentation.",
  "evidence_requirements": [
    "Target identifiers, functions, pages, viewports and revealed states.",
    "Active-area dimensions and bounding boxes in CSS pixels.",
    "Circle centres, 12 CSS-pixel radii, neighbouring geometry and intersection result.",
    "Named exception, condition and evidence for each exception used."
  ],
  "official_source_ids": [
    "W3C-WCAG22",
    "W3C-WCAG22-QUICKREF",
    "W3C-WCAG22-TECHNIQUES",
    "W3C-TARGET-SIZE-MINIMUM"
  ],
  "act_rule_mapping": {
    "format_alignment": "This is a project-authored manual procedure, not a W3C Approved ACT Rule.",
    "approved_rule_ids": [],
    "approved_rules": [],
    "mapping_status": "No supporting ACT rule selected",
    "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": "2.5.8",
      "understanding_url": "https://www.w3.org/WAI/WCAG22/Understanding/target-size-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-2.5.8",
    "wcag-2.2",
    "wcag-aa",
    "wcag_manual"
  ],
  "status": "draft",
  "authoring_readiness": "content_complete",
  "short_title": "Measure pointer target size and spacing",
  "catalogue_version": "2026.08.27-rc.9",
  "identity": {
    "stable_case_id": "A11Y-WCAG-040",
    "procedure_title": "WCAG 2.5.8 Target Size (Minimum)",
    "short_user_centred_title": "Measure pointer target size and spacing",
    "procedure_version": "2026.08.27-rc.9",
    "catalogue_version": "2026.08.27-rc.9",
    "status": "draft",
    "category": "wcag_manual",
    "procedure_type": "atomic",
    "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 pointer targets that are too small and too close to other targets for reliable activation.",
    "people_likely_affected": [
      "People with hand tremors, limited dexterity or reduced fine-motor control.",
      "People using touch, a stylus or a pointer in difficult conditions."
    ],
    "functionality_or_information_at_risk": "Users may activate the wrong control, be unable to activate a target reliably or abandon a task.",
    "result_scope": "atomic_conformance_check",
    "claim_boundary": "This WCAG 2.5.8 Target Size (Minimum) procedure determines whether the recorded targets meet WCAG 2.5.8 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": "Users may activate the wrong control, be unable to activate a target reliably or abandon a task. The procedure is necessary because detect pointer targets that are too small and too close to other targets for reliable activation and the result can otherwise conceal a material barrier for the affected people named here."
  },
  "requirement_mappings": [
    {
      "source_id": "W3C-WCAG22",
      "requirement_id": "2.5.8",
      "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 pointer target size and the five stated exceptions.",
      "limitations": "The 24 CSS-pixel requirement is a minimum. Larger targets may still be needed for usability and WCAG 2.5.5 is a separate Level AAA criterion.",
      "dependent_fields": [
        "applicability_model",
        "normative_exceptions",
        "steps",
        "decision_logic"
      ],
      "mapping_role": "primary_conformance_mapping"
    },
    {
      "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-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-TARGET-SIZE-MINIMUM",
      "requirement_id": "Understanding 2.5.8",
      "requirement_level": "informative",
      "requirement_type": "advisory",
      "coverage_type": "supporting",
      "canonical_source": "https://www.w3.org/WAI/WCAG22/Understanding/target-size-minimum.html",
      "source_status": "living_guidance",
      "source_version_or_publication_date": "Understanding WCAG 2.2 Success Criterion 2.5.8; 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": "All author-controlled pointer input targets in each selected page, view and meaningful responsive state.",
    "test_targets": [
      "Each author-controlled pointer input target, measured by its CSS-pixel target area and bounding box."
    ],
    "objective_questions": [
      "Can this element receive pointer input for a function?",
      "Is its target area at least 24 CSS pixels wide and 24 CSS pixels high?",
      "If undersized, does exactly one of the five normative exceptions apply?"
    ],
    "subjective_judgements": [
      "Essential presentation and functional equivalence require documented human judgement; escalate rather than assuming either exception."
    ],
    "inapplicability_conditions": [
      "The selected subject contains no pointer input target."
    ],
    "scope_exclusions": [
      "Targets while obscured by content displayed due to user interaction or scripted behaviour are not measured in the obscured state; targets in the overlaying content remain applicable."
    ],
    "required_states_and_variations": [
      "Default and every responsive layout that changes target geometry.",
      "Revealed menus, dialogs, validation, toolbars and other layers containing new targets."
    ],
    "complete_process_dependencies": "Measure targets used in every selected complete process; an unmeasured critical-process target remains untested.",
    "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": "Spacing",
      "decision_condition": "The target is undersized, but a 24 CSS-pixel-diameter circle centred on its bounding box does not intersect another target or the corresponding circle for any other undersized target.",
      "evidence_needed": "CSS-pixel bounding boxes, circle centres/radii and intersection results for all adjacent targets.",
      "common_misinterpretation": "A vague visual gap is not sufficient; the 24 CSS-pixel circles must be evaluated, including against full-size targets.",
      "official_source": "https://www.w3.org/WAI/WCAG22/Understanding/target-size-minimum.html",
      "scope_of_exception": "Only the measured undersized target."
    },
    {
      "name": "Equivalent control",
      "decision_condition": "Another control on the same page performs the same function and itself meets the target-size requirement or an allowed exception.",
      "evidence_needed": "Identifiers, functions and measurements for both controls, plus evidence that either can complete the same result.",
      "common_misinterpretation": "A different route, partially equivalent action or inaccessible alternative is not an equivalent control.",
      "official_source": "https://www.w3.org/WAI/WCAG22/Understanding/target-size-minimum.html",
      "scope_of_exception": "Only the undersized target with the qualifying equivalent."
    },
    {
      "name": "Inline target",
      "decision_condition": "The target is in a sentence or its size is otherwise constrained by the line-height of non-target text.",
      "evidence_needed": "Rendered text context, line box and DOM extract showing that the target is inline within or constrained by non-target text.",
      "common_misinterpretation": "Being visually near text does not make an icon button or standalone link inline.",
      "official_source": "https://www.w3.org/WAI/WCAG22/Understanding/target-size-minimum.html",
      "scope_of_exception": "Only the target constrained by the text line."
    },
    {
      "name": "User-agent control",
      "decision_condition": "The size of the target is determined by the user agent and has not been modified by the author.",
      "evidence_needed": "Identification of the native user-agent control and evidence that author styles or scripts did not modify its target size.",
      "common_misinterpretation": "A native-looking author control or an author-styled scrollbar does not qualify automatically.",
      "official_source": "https://www.w3.org/WAI/WCAG22/Understanding/target-size-minimum.html",
      "scope_of_exception": "Only the unmodified user-agent-controlled target."
    },
    {
      "name": "Essential presentation",
      "decision_condition": "The particular target size or spacing is essential to the information being conveyed or is legally required for the presentation.",
      "evidence_needed": "A specific rationale showing why changing the target geometry would fundamentally change the information or make the legally required presentation invalid.",
      "common_misinterpretation": "A design preference, density goal, brand layout or implementation difficulty is not essential.",
      "official_source": "https://www.w3.org/WAI/WCAG22/Understanding/target-size-minimum.html",
      "scope_of_exception": "Only the portion whose geometry is demonstrably essential."
    }
  ],
  "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": "The target contains a 24 by 24 CSS-pixel area or satisfies one documented normative exception using its exact decision condition.",
    "target_failed": "The target is undersized and does not satisfy spacing, equivalent control, inline target, user-agent control or essential presentation.",
    "target_inapplicable": "No pointer input target exists in the selected subject.",
    "target_cant_tell": "The active hit area, adjacency or an exception condition cannot be determined after reasonable inspection.",
    "target_untested": "The target is applicable, but a required state, environment, action or evidence item was not completed.",
    "aggregation": "Preserve one result per target and material geometry state. Any failure prevents a passed aggregate; cantTell and untested remain unresolved.",
    "wcag_requirement_decision": "A WCAG 2.5.8 decision may be satisfied only after all applicable targets in the conformance scope and conformance requirements are considered. Inapplicable rule outcomes are not copied directly into that report decision.",
    "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": "Automation may find candidate dimensions, but a tester must verify actual hit areas, adjacency, irregular geometry and every exception. 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": "target_inventory",
      "record": "Target identifiers, functions, pages, viewports and revealed states.",
      "review_purpose": "Show that applicable target classes were not omitted.",
      "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": "geometry_measurement",
      "record": "Active-area dimensions and bounding boxes in CSS pixels.",
      "review_purpose": "Reproduce the size classification.",
      "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": "spacing_calculation",
      "record": "Circle centres, 12 CSS-pixel radii, neighbouring geometry and intersection result.",
      "review_purpose": "Review the exact spacing exception calculation.",
      "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": "Named exception, condition and evidence for each exception used.",
      "review_purpose": "Prevent unsupported exception claims.",
      "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-040-EX-PASSED",
      "outcome": "passed",
      "scenario": "A 20 by 20 CSS-pixel icon has a bounding-box-centred 24-pixel circle that intersects no target or other undersized-target circle.",
      "explanation": "The target passes through the exact spacing exception.",
      "fixture_id": "target-size-spacing-pass",
      "fixture_version": "1.0.0",
      "machine_testable": true
    },
    {
      "example_id": "A11Y-WCAG-040-EX-FAILED",
      "outcome": "failed",
      "scenario": "Two 20 by 20 CSS-pixel icon targets touch, so their 24-pixel circles intersect.",
      "explanation": "The targets fail size and spacing and no other exception applies.",
      "fixture_id": "target-size-spacing-fail",
      "fixture_version": "1.0.0",
      "machine_testable": true
    },
    {
      "example_id": "A11Y-WCAG-040-EX-INAPPLICABLE",
      "outcome": "inapplicable",
      "scenario": "A static article contains no pointer input target.",
      "explanation": "No target matches applicability.",
      "fixture_id": "",
      "fixture_version": "",
      "machine_testable": false
    },
    {
      "example_id": "A11Y-WCAG-040-EX-CANTTELL",
      "outcome": "cantTell",
      "scenario": "An embedded cross-origin control exposes no measurable hit area and ownership cannot be established.",
      "explanation": "The tester cannot determine the target geometry or responsibility defensibly.",
      "fixture_id": "",
      "fixture_version": "",
      "machine_testable": false
    },
    {
      "example_id": "A11Y-WCAG-040-EX-UNTESTED",
      "outcome": "untested",
      "scenario": "Portrait targets were measured, but the selected landscape layout was not tested.",
      "explanation": "A required responsive variation remains untested.",
      "fixture_id": "",
      "fixture_version": "",
      "machine_testable": false
    },
    {
      "example_id": "A11Y-WCAG-040-EX-PASSED",
      "outcome": "passed",
      "scenario": "A small map pin is fixed to the only position that conveys the mapped location, with an evidence-backed essential-presentation decision.",
      "explanation": "This is a borderline exception example; the exception applies only to the pin geometry, not the rest of the map interface.",
      "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 standards review must confirm exception interpretation and the spacing 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 2.5.8 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": "atomic",
  "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-040-WORKED-001",
      "example_kind": "representative_synthetic_example",
      "context": "Representative synthetic example for WCAG 2.5.8 Target Size (Minimum) on a fictional, version-frozen product target; no client or participant execution occurred.",
      "inspected": "The tester follows S2 (Measure the target area) using the target, required state, tool and repeat rule stated in this procedure.",
      "observed_output": "After the tester completes the WCAG 2.5.8 Target Size (Minimum) scenario named Measure the target area, the recorded observation for the target is inconsistent with the required result: Each target is classified as at least 24 by 24 CSS pixels or undersized.",
      "evidence_captured": [
        "example-evidence-001: target and state record for Each author-controlled pointer input target, measured by its CSS-pixel target area and bounding box.",
        "example-evidence-002: contemporaneous observation from the named method — Target bounding box, active-area dimensions, viewport and tool/version.",
        "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 is classified as at least 24 by 24 CSS pixels or undersized. The failed decision is limited to this synthetic target and state; unexecuted coverage is not inferred.",
      "decision": "failed",
      "completed_finding": {
        "finding_id": "A11Y-WCAG-040-example-finding-001",
        "title": "Measure pointer target size and spacing: expected result is not demonstrated",
        "severity": "medium",
        "user_impact": "The represented barrier may affect People with hand tremors, limited dexterity or reduced fine-motor control.; People using touch, a stylus or a pointer in difficult 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 is classified as at least 24 by 24 CSS pixels or undersized. 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 pointer target size and spacing 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."
    }
  ]
}
