{
  "$comment": "AUTO-GENERATED by scripts/gen-measurement-contract.mjs — do not edit. Read this instead of guessing: docs/MEASUREMENT-CONTRACT.md.",
  "version": "28.9.0",
  "targetSize": {
    "standard": "WCAG 2.2 SC 2.5.8 Target Size (Minimum), level AA — 24×24 CSS px",
    "min": 24,
    "measures": "target",
    "note": "The TARGET is the region that accepts the pointer action, which is not always the painted box. getBoundingClientRect() returns the border box and cannot see a pseudo-element, so it UNDER-REPORTS every selector listed under `expanders`. Measure with elementFromPoint — see `method` — or treat a listed selector as conforming at `targetMin`.",
    "method": "docs/MEASUREMENT-CONTRACT.md#measuring-a-target",
    "expanders": [
      {
        "selector": ".ui-control-inline-affix-action",
        "via": "::after",
        "source": "src/styles/control.css",
        "targetMin": 24,
        "components": [
          "badge",
          "date-picker",
          "input",
          "tag-input",
          "textarea",
          "time-picker"
        ]
      },
      {
        "selector": ".ui-data-table-sort-button",
        "via": "::after",
        "source": "src/styles/table-layout.css",
        "targetMin": 24,
        "components": [
          "data-table"
        ]
      },
      {
        "selector": ".ui-number-input-step",
        "via": "::after",
        "source": "src/styles/control.css",
        "targetMin": 24,
        "components": [
          "number-input"
        ]
      },
      {
        "selector": ".ui-switch",
        "via": ".ui-choice-input",
        "source": "src/styles/control.css",
        "targetMin": 24,
        "components": [
          "label",
          "slider",
          "switch"
        ]
      }
    ]
  },
  "spacing": {
    "scale": "--space-* measures the distance BETWEEN things: page sections, siblings, a Card and its content.",
    "doesNotApplyTo": "The INTERIOR of a control. That geometry is derived from the control band, not from --space-*, so a control's own label sits closer to its edge than --space-2 and is not a finding.",
    "derivation": "interior height = --control-height − (interior padding × 2)",
    "predicate": "An element is a control when its painted block-size equals the resolved --control-height for its size. Segmented's track, Button, Input and Select all satisfy it — a gate that applies a --space-* floor inside a control flags all four, not just Segmented.",
    "reference": "docs/SPACING.md#control-interiors-are-not-on-this-scale"
  },
  "issues": {
    "503": "Segmented track padding read against a --space-2 floor that does not govern control interiors.",
    "506": "NumberInput steppers read as 24×13 (paint); the target is 24×26.",
    "507": "DatePicker calendar button read as 20×20 (paint); the target is 24×24."
  }
}
