{
"schemaVersion": 1,
"theme": "j3w1-theme",
"version": "1.1.0",
"profile": "default",
"profileStatus": "approved",
"release": {
"version": "1.1.0",
"stability": "release",
"policy": "Use the pinned approved default profile. Pending roles in that profile use-and-report their decision IDs; this does not approve them. Proposed profiles are preview-only and blocked for delivery. Heritage profiles are historical-only. Deprecated or heritage roles are blocked for new approved-profile mappings. Consume roles within their documented scope, never primitives. Release numbering does not approve profiles or tokens."
},
"sourceDigest": "sha256-dVVXuyfmUjNjfan99PHe+fKFlhOD0dRrre2xK1AvSJg=",
"id": "text-field",
"family": "forms-basic",
"maturity": "stable",
"priority": "R1",
"coverage": {
"family": "forms-basic",
"priority": "R1",
"maturity": "stable",
"specified": true,
"demonstrated": true,
"tested": true,
"testImplemented": true,
"states": 14
},
"title": "Text field",
"summary": "Single-line free-text entry, covering every native input type that renders as a line box; search, number and password are variants, not separate components.",
"anchors": {
"site": "https://j3w1.github.io/theme/reference/#c-text-field",
"spec": "spec/components/text-field.md",
"brief": "exports/components/text-field.brief.txt"
},
"native": true,
"aria": {
"pattern": "native with ",
"apg": "https://www.w3.org/WAI/ARIA/apg/practices/forms/"
},
"variants": [
{
"id": "default",
"name": "Text"
},
{
"id": "password",
"name": "Password with reveal"
},
{
"id": "search",
"name": "Search with clear"
},
{
"id": "number",
"name": "Number with stepper"
},
{
"id": "affix",
"name": "With prefix and suffix"
}
],
"sizes": [
"compact",
"comfortable"
],
"states": [
"default",
"hover",
"focus-visible",
"placeholder-shown",
"filled",
"required",
"invalid",
"invalid+focus-visible",
"invalid+hover",
"disabled",
"disabled+filled",
"read-only",
"read-only+focus-visible",
"loading"
],
"tokens": {
"root.bg": {
"alias": "color.surface.input",
"value": "#000000",
"status": "approved",
"deprecated": false,
"decisionId": "D-023",
"eligibility": {
"action": "use",
"reason": "Use within the role's documented scope and restrictions.",
"decisionIds": []
}
},
"root.border": {
"alias": "color.border.control",
"value": "#a3676b",
"status": "proposed",
"deprecated": false,
"decisionId": "D-007",
"eligibility": {
"action": "use-and-report",
"reason": "Use the pinned value and disclose every pending decision ID; approval statuses are unchanged.",
"decisionIds": [
"D-007"
]
}
},
"root.bg-hover": {
"alias": "color.interaction.hover.bg",
"value": "#1c0a09",
"status": "observed",
"deprecated": false,
"decisionId": null,
"eligibility": {
"action": "use",
"reason": "Use within the role's documented scope and restrictions.",
"decisionIds": []
}
},
"root.border-focus": {
"alias": "color.border.active",
"value": "#e53935",
"status": "observed",
"deprecated": false,
"decisionId": null,
"eligibility": {
"action": "use",
"reason": "Use within the role's documented scope and restrictions.",
"decisionIds": []
}
},
"root.ring": {
"alias": "color.interaction.focus.ring",
"value": "#e53935",
"status": "observed",
"deprecated": false,
"decisionId": null,
"eligibility": {
"action": "use",
"reason": "Use within the role's documented scope and restrictions.",
"decisionIds": []
}
},
"root.ring-invalid": {
"alias": "color.interaction.focus.ring-container",
"value": "#ffa2a7",
"status": "observed",
"deprecated": false,
"decisionId": null,
"eligibility": {
"action": "use",
"reason": "Use within the role's documented scope and restrictions.",
"decisionIds": []
}
},
"root.border-invalid": {
"alias": "color.status.danger.border",
"value": "#e53935",
"status": "observed",
"deprecated": false,
"decisionId": null,
"eligibility": {
"action": "use",
"reason": "Use within the role's documented scope and restrictions.",
"decisionIds": []
}
},
"root.border-disabled": {
"alias": "color.border.disabled",
"value": "#7d1310",
"status": "observed",
"deprecated": false,
"decisionId": null,
"eligibility": {
"action": "use",
"reason": "Use within the role's documented scope and restrictions.",
"decisionIds": []
}
},
"root.bg-disabled": {
"alias": "color.interaction.disabled.bg",
"value": "#160b0b",
"status": "observed",
"deprecated": false,
"decisionId": null,
"eligibility": {
"action": "use",
"reason": "Use within the role's documented scope and restrictions.",
"decisionIds": []
}
},
"root.border-readonly": {
"alias": "color.border.divider",
"value": "#2b0e0d",
"status": "proposed",
"deprecated": false,
"decisionId": "D-008",
"eligibility": {
"action": "use-and-report",
"reason": "Use the pinned value and disclose every pending decision ID; approval statuses are unchanged.",
"decisionIds": [
"D-008"
]
}
},
"input.text": {
"alias": "color.text.default",
"value": "#e99499",
"status": "observed",
"deprecated": false,
"decisionId": null,
"eligibility": {
"action": "use",
"reason": "Use within the role's documented scope and restrictions.",
"decisionIds": []
}
},
"input.text-disabled": {
"alias": "color.text.disabled",
"value": "#8a5559",
"status": "approved",
"deprecated": false,
"decisionId": "D-003",
"eligibility": {
"action": "use",
"reason": "Use within the role's documented scope and restrictions.",
"decisionIds": []
}
},
"input.placeholder": {
"alias": "color.text.placeholder",
"value": "#bd787d",
"status": "observed",
"deprecated": false,
"decisionId": null,
"eligibility": {
"action": "use",
"reason": "Use within the role's documented scope and restrictions.",
"decisionIds": []
}
},
"input.caret": {
"alias": "color.code.caret",
"value": "#e99499",
"status": "observed",
"deprecated": false,
"decisionId": null,
"eligibility": {
"action": "use",
"reason": "Use within the role's documented scope and restrictions.",
"decisionIds": []
}
},
"input.selection-bg": {
"alias": "color.interaction.text-selection.bg",
"value": "#911410",
"status": "observed",
"deprecated": false,
"decisionId": null,
"eligibility": {
"action": "use",
"reason": "Use within the role's documented scope and restrictions.",
"decisionIds": []
}
},
"input.selection-text": {
"alias": "color.interaction.text-selection.text",
"value": "#f4eeee",
"status": "observed",
"deprecated": false,
"decisionId": null,
"eligibility": {
"action": "use",
"reason": "Use within the role's documented scope and restrictions.",
"decisionIds": []
}
},
"label.text": {
"alias": "color.text.bright",
"value": "#ffa2a7",
"status": "observed",
"deprecated": false,
"decisionId": null,
"eligibility": {
"action": "use",
"reason": "Use within the role's documented scope and restrictions.",
"decisionIds": []
}
},
"label.required-mark": {
"alias": "color.status.danger.text",
"value": "#f73f35",
"status": "observed",
"deprecated": false,
"decisionId": null,
"eligibility": {
"action": "use",
"reason": "Use within the role's documented scope and restrictions.",
"decisionIds": []
}
},
"help.text": {
"alias": "color.text.muted",
"value": "#bd787d",
"status": "observed",
"deprecated": false,
"decisionId": null,
"eligibility": {
"action": "use",
"reason": "Use within the role's documented scope and restrictions.",
"decisionIds": []
}
},
"message.text": {
"alias": "color.status.danger.text",
"value": "#f73f35",
"status": "observed",
"deprecated": false,
"decisionId": null,
"eligibility": {
"action": "use",
"reason": "Use within the role's documented scope and restrictions.",
"decisionIds": []
}
},
"affix.text": {
"alias": "color.text.muted",
"value": "#bd787d",
"status": "observed",
"deprecated": false,
"decisionId": null,
"eligibility": {
"action": "use",
"reason": "Use within the role's documented scope and restrictions.",
"decisionIds": []
}
},
"affix.border": {
"alias": "color.border.divider",
"value": "#2b0e0d",
"status": "proposed",
"deprecated": false,
"decisionId": "D-008",
"eligibility": {
"action": "use-and-report",
"reason": "Use the pinned value and disclose every pending decision ID; approval statuses are unchanged.",
"decisionIds": [
"D-008"
]
}
},
"action.text": {
"alias": "color.action.tertiary.text",
"value": "#e99499",
"status": "observed",
"deprecated": false,
"decisionId": null,
"eligibility": {
"action": "use",
"reason": "Use within the role's documented scope and restrictions.",
"decisionIds": []
}
},
"action.bg-hover": {
"alias": "color.action.tertiary.hover-bg",
"value": "#1c0a09",
"status": "observed",
"deprecated": false,
"decisionId": null,
"eligibility": {
"action": "use",
"reason": "Use within the role's documented scope and restrictions.",
"decisionIds": []
}
},
"loading.glyph": {
"alias": "color.text.muted",
"value": "#bd787d",
"status": "observed",
"deprecated": false,
"decisionId": null,
"eligibility": {
"action": "use",
"reason": "Use within the role's documented scope and restrictions.",
"decisionIds": []
}
}
},
"stateRules": [
{
"state": "default",
"visual": "1px {color.border.control} on {color.surface.input}; text {color.text.default}",
"channel": "—",
"tokens": {
"fg": {
"alias": "color.text.default",
"value": "#e99499",
"status": "observed",
"deprecated": false,
"decisionId": null,
"eligibility": {
"action": "use",
"reason": "Use within the role's documented scope and restrictions.",
"decisionIds": []
}
},
"bg": {
"alias": "color.surface.input",
"value": "#000000",
"status": "approved",
"deprecated": false,
"decisionId": "D-023",
"eligibility": {
"action": "use",
"reason": "Use within the role's documented scope and restrictions.",
"decisionIds": []
}
},
"border": {
"alias": "color.border.control",
"value": "#a3676b",
"status": "proposed",
"deprecated": false,
"decisionId": "D-007",
"eligibility": {
"action": "use-and-report",
"reason": "Use the pinned value and disclose every pending decision ID; approval statuses are unchanged.",
"decisionIds": [
"D-007"
]
}
}
}
},
{
"state": "hover",
"visual": "background → {color.interaction.hover.bg}; border unchanged",
"channel": "cursor: text",
"tokens": {
"fg": {
"alias": "color.text.default",
"value": "#e99499",
"status": "observed",
"deprecated": false,
"decisionId": null,
"eligibility": {
"action": "use",
"reason": "Use within the role's documented scope and restrictions.",
"decisionIds": []
}
},
"bg": {
"alias": "color.interaction.hover.bg",
"value": "#1c0a09",
"status": "observed",
"deprecated": false,
"decisionId": null,
"eligibility": {
"action": "use",
"reason": "Use within the role's documented scope and restrictions.",
"decisionIds": []
}
},
"border": {
"alias": "color.border.control",
"value": "#a3676b",
"status": "proposed",
"deprecated": false,
"decisionId": "D-007",
"eligibility": {
"action": "use-and-report",
"reason": "Use the pinned value and disclose every pending decision ID; approval statuses are unchanged.",
"decisionIds": [
"D-007"
]
}
}
}
},
{
"state": "focus-visible",
"visual": "border → {color.border.active}; ring 1px dashed {color.interaction.focus.ring} at −2px",
"channel": "the ring",
"tokens": {
"fg": {
"alias": "color.text.default",
"value": "#e99499",
"status": "observed",
"deprecated": false,
"decisionId": null,
"eligibility": {
"action": "use",
"reason": "Use within the role's documented scope and restrictions.",
"decisionIds": []
}
},
"bg": {
"alias": "color.surface.input",
"value": "#000000",
"status": "approved",
"deprecated": false,
"decisionId": "D-023",
"eligibility": {
"action": "use",
"reason": "Use within the role's documented scope and restrictions.",
"decisionIds": []
}
},
"border": {
"alias": "color.border.active",
"value": "#e53935",
"status": "observed",
"deprecated": false,
"decisionId": null,
"eligibility": {
"action": "use",
"reason": "Use within the role's documented scope and restrictions.",
"decisionIds": []
}
},
"outline": {
"alias": "color.interaction.focus.ring",
"value": "#e53935",
"status": "observed",
"deprecated": false,
"decisionId": null,
"eligibility": {
"action": "use",
"reason": "Use within the role's documented scope and restrictions.",
"decisionIds": []
}
}
}
},
{
"state": "placeholder-shown",
"visual": "placeholder in {color.text.placeholder}, italic",
"channel": "italic",
"tokens": {
"fg": {
"alias": "color.text.placeholder",
"value": "#bd787d",
"status": "observed",
"deprecated": false,
"decisionId": null,
"eligibility": {
"action": "use",
"reason": "Use within the role's documented scope and restrictions.",
"decisionIds": []
}
},
"bg": {
"alias": "color.surface.input",
"value": "#000000",
"status": "approved",
"deprecated": false,
"decisionId": "D-023",
"eligibility": {
"action": "use",
"reason": "Use within the role's documented scope and restrictions.",
"decisionIds": []
}
},
"border": {
"alias": "color.border.control",
"value": "#a3676b",
"status": "proposed",
"deprecated": false,
"decisionId": "D-007",
"eligibility": {
"action": "use-and-report",
"reason": "Use the pinned value and disclose every pending decision ID; approval statuses are unchanged.",
"decisionIds": [
"D-007"
]
}
}
}
},
{
"state": "filled",
"visual": "as default with a value",
"channel": "—",
"tokens": {}
},
{
"state": "required",
"visual": "`*` after the label in {color.status.danger.text} plus visually hidden \"required\"",
"channel": "`required` attribute; the mark",
"tokens": {}
},
{
"state": "invalid",
"visual": "border 2px {color.status.danger.border}; message with the ✕ glyph",
"channel": "border width 1 → 2px; glyph; `aria-invalid`",
"tokens": {
"fg": {
"alias": "color.text.default",
"value": "#e99499",
"status": "observed",
"deprecated": false,
"decisionId": null,
"eligibility": {
"action": "use",
"reason": "Use within the role's documented scope and restrictions.",
"decisionIds": []
}
},
"bg": {
"alias": "color.surface.input",
"value": "#000000",
"status": "approved",
"deprecated": false,
"decisionId": "D-023",
"eligibility": {
"action": "use",
"reason": "Use within the role's documented scope and restrictions.",
"decisionIds": []
}
},
"border": {
"alias": "color.status.danger.border",
"value": "#e53935",
"status": "observed",
"deprecated": false,
"decisionId": null,
"eligibility": {
"action": "use",
"reason": "Use within the role's documented scope and restrictions.",
"decisionIds": []
}
}
}
},
{
"state": "invalid+focus-visible",
"visual": "the 2px danger border and a 1px dashed ring in {color.interaction.focus.ring-container} at −4px (the control form, recoloured; never the 2px container form)",
"channel": "double boundary",
"tokens": {
"fg": {
"alias": "color.text.default",
"value": "#e99499",
"status": "observed",
"deprecated": false,
"decisionId": null,
"eligibility": {
"action": "use",
"reason": "Use within the role's documented scope and restrictions.",
"decisionIds": []
}
},
"bg": {
"alias": "color.surface.input",
"value": "#000000",
"status": "approved",
"deprecated": false,
"decisionId": "D-023",
"eligibility": {
"action": "use",
"reason": "Use within the role's documented scope and restrictions.",
"decisionIds": []
}
},
"border": {
"alias": "color.status.danger.border",
"value": "#e53935",
"status": "observed",
"deprecated": false,
"decisionId": null,
"eligibility": {
"action": "use",
"reason": "Use within the role's documented scope and restrictions.",
"decisionIds": []
}
},
"outline": {
"alias": "color.interaction.focus.ring-container",
"value": "#ffa2a7",
"status": "observed",
"deprecated": false,
"decisionId": null,
"eligibility": {
"action": "use",
"reason": "Use within the role's documented scope and restrictions.",
"decisionIds": []
}
}
}
},
{
"state": "invalid+hover",
"visual": "as invalid with the hover background",
"channel": "cursor",
"tokens": {}
},
{
"state": "disabled",
"visual": "text {color.text.disabled}; border {color.border.disabled}; background {color.interaction.disabled.bg}; no hover; the label and help keep their colours",
"channel": "`disabled`; cursor: not-allowed",
"tokens": {}
},
{
"state": "disabled+filled",
"visual": "as disabled with a value",
"channel": "`disabled`",
"tokens": {}
},
{
"state": "read-only",
"visual": "no box: 1px dotted {color.border.divider} bottom edge on {color.surface.canvas}; text {color.text.default}; focusable and selectable",
"channel": "`readonly`; dotted edge",
"tokens": {
"fg": {
"alias": "color.text.default",
"value": "#e99499",
"status": "observed",
"deprecated": false,
"decisionId": null,
"eligibility": {
"action": "use",
"reason": "Use within the role's documented scope and restrictions.",
"decisionIds": []
}
},
"bg": {
"alias": "color.surface.canvas",
"value": "#000000",
"status": "approved",
"deprecated": false,
"decisionId": "D-023",
"eligibility": {
"action": "use",
"reason": "Use within the role's documented scope and restrictions.",
"decisionIds": []
}
}
}
},
{
"state": "read-only+focus-visible",
"visual": "the dotted {color.border.divider} edge unchanged, plus the dashed ring at −2px",
"channel": "the ring",
"tokens": {}
},
{
"state": "loading",
"visual": "size unchanged; a static `⋯` glyph in {color.text.muted} inside the box after the input and before any trailing action; input remains editable",
"channel": "glyph; `aria-busy`",
"tokens": {}
}
],
"keyboard": [
{
"key": "Tab / Shift+Tab",
"action": "Moves focus in and out; affix actions (clear, reveal, stepper) are separate tab stops after the input."
},
{
"key": "Escape",
"action": "Clears the value in the search variant when it is non-empty; otherwise nothing."
},
{
"key": "Enter",
"action": "Submits the owning form (native)."
},
{
"key": "Up / Down",
"action": "Number variant steps by the step attribute; Shift multiplies by ten."
}
],
"responsive": "Fills its field container with min-width 0; affixes never wrap; the label is always stacked above (no inline labels in this theme); at 320px the box, help and message stack without clipping. RTL swaps prefix and suffix.",
"portability": {
"web": "native plus , no wrapper role; help and message via aria-describedby in that order; aria-invalid only after interaction or submit; the dashed ring through outline, never box-shadow.",
"nativeFallbacks": [
"GTK4 Entry with a css-name mapping; invalid through the .error style class.",
"Qt QLineEdit stylesheet; invalid through a dynamic property selector.",
"Terminal UI: 1-cell border glyphs; focus as dashed box-drawing; invalid as a 2-cell double line."
]
},
"fixtures": [
"FX-LONG",
"FX-320",
"FX-360",
"FX-ZOOM-200",
"FX-I18N",
"FX-RTL",
"FX-RM",
"FX-HC",
"FX-TOUCH",
"FX-DENSITY",
"FX-STATE-MATRIX"
],
"related": [
"textarea",
"select",
"combobox",
"search-field",
"number-field",
"field"
],
"specimens": [
"admin-form",
"settings-panel"
],
"nonExamples": "Rounded corners. A floating or animated label. An underline-only field with no\nbox. A glow instead of the dashed ring. Placeholder text in red. Disabling by\nopacity. Using colour alone for the invalid state. A hover that changes the\ntext colour.",
"contrast": [
{
"label": "text-field default text",
"state": "default",
"kind": "text",
"min": 4.5,
"fg": "color.text.default",
"bg": "color.surface.input",
"fgHex": "#e99499",
"bgHex": "#000000",
"ratio": 9.16,
"pass": true,
"waiver": null
},
{
"label": "text-field default border",
"state": "default",
"kind": "ui",
"min": 3,
"fg": "color.border.control",
"bg": "color.surface.input",
"fgHex": "#a3676b",
"bgHex": "#000000",
"ratio": 4.71,
"pass": true,
"waiver": null
},
{
"label": "text-field hover text",
"state": "hover",
"kind": "text",
"min": 4.5,
"fg": "color.text.default",
"bg": "color.interaction.hover.bg",
"fgHex": "#e99499",
"bgHex": "#1c0a09",
"ratio": 8.35,
"pass": true,
"waiver": null
},
{
"label": "text-field hover border",
"state": "hover",
"kind": "ui",
"min": 3,
"fg": "color.border.control",
"bg": "color.interaction.hover.bg",
"fgHex": "#a3676b",
"bgHex": "#1c0a09",
"ratio": 4.29,
"pass": true,
"waiver": null
},
{
"label": "text-field focus-visible text",
"state": "focus-visible",
"kind": "text",
"min": 4.5,
"fg": "color.text.default",
"bg": "color.surface.input",
"fgHex": "#e99499",
"bgHex": "#000000",
"ratio": 9.16,
"pass": true,
"waiver": null
},
{
"label": "text-field focus-visible border",
"state": "focus-visible",
"kind": "ui",
"min": 3,
"fg": "color.border.active",
"bg": "color.surface.input",
"fgHex": "#e53935",
"bgHex": "#000000",
"ratio": 4.97,
"pass": true,
"waiver": null
},
{
"label": "text-field focus-visible outline",
"state": "focus-visible",
"kind": "ui",
"min": 3,
"fg": "color.interaction.focus.ring",
"bg": "color.surface.input",
"fgHex": "#e53935",
"bgHex": "#000000",
"ratio": 4.97,
"pass": true,
"waiver": null
},
{
"label": "text-field placeholder-shown text",
"state": "placeholder-shown",
"kind": "text",
"min": 4.5,
"fg": "color.text.placeholder",
"bg": "color.surface.input",
"fgHex": "#bd787d",
"bgHex": "#000000",
"ratio": 6.15,
"pass": true,
"waiver": null
},
{
"label": "text-field placeholder-shown border",
"state": "placeholder-shown",
"kind": "ui",
"min": 3,
"fg": "color.border.control",
"bg": "color.surface.input",
"fgHex": "#a3676b",
"bgHex": "#000000",
"ratio": 4.71,
"pass": true,
"waiver": null
},
{
"label": "text-field invalid text",
"state": "invalid",
"kind": "text",
"min": 4.5,
"fg": "color.text.default",
"bg": "color.surface.input",
"fgHex": "#e99499",
"bgHex": "#000000",
"ratio": 9.16,
"pass": true,
"waiver": null
},
{
"label": "text-field invalid border",
"state": "invalid",
"kind": "ui",
"min": 3,
"fg": "color.status.danger.border",
"bg": "color.surface.input",
"fgHex": "#e53935",
"bgHex": "#000000",
"ratio": 4.97,
"pass": true,
"waiver": null
},
{
"label": "text-field invalid+focus-visible text",
"state": "invalid+focus-visible",
"kind": "text",
"min": 4.5,
"fg": "color.text.default",
"bg": "color.surface.input",
"fgHex": "#e99499",
"bgHex": "#000000",
"ratio": 9.16,
"pass": true,
"waiver": null
},
{
"label": "text-field invalid+focus-visible border",
"state": "invalid+focus-visible",
"kind": "ui",
"min": 3,
"fg": "color.status.danger.border",
"bg": "color.surface.input",
"fgHex": "#e53935",
"bgHex": "#000000",
"ratio": 4.97,
"pass": true,
"waiver": null
},
{
"label": "text-field invalid+focus-visible outline",
"state": "invalid+focus-visible",
"kind": "ui",
"min": 3,
"fg": "color.interaction.focus.ring-container",
"bg": "color.surface.input",
"fgHex": "#ffa2a7",
"bgHex": "#000000",
"ratio": 10.98,
"pass": true,
"waiver": null
},
{
"label": "text-field read-only text",
"state": "read-only",
"kind": "text",
"min": 4.5,
"fg": "color.text.default",
"bg": "color.surface.canvas",
"fgHex": "#e99499",
"bgHex": "#000000",
"ratio": 9.16,
"pass": true,
"waiver": null
},
{
"label": "validation message on the panel surface",
"state": null,
"kind": "text",
"min": 4.5,
"fg": "color.status.danger.text",
"bg": "color.surface.default",
"fgHex": "#f73f35",
"bgHex": "#100c0c",
"ratio": 5.29,
"pass": true,
"waiver": null
},
{
"label": "help text on the panel surface",
"state": null,
"kind": "text",
"min": 4.5,
"fg": "color.text.muted",
"bg": "color.surface.default",
"fgHex": "#bd787d",
"bgHex": "#100c0c",
"ratio": 5.69,
"pass": true,
"waiver": null
},
{
"label": "disabled text (exempt; house floor 3:1)",
"state": "disabled",
"kind": "ui",
"min": 3,
"fg": "color.text.disabled",
"bg": "color.interaction.disabled.bg",
"fgHex": "#8a5559",
"bgHex": "#160b0b",
"ratio": 3.24,
"pass": true,
"waiver": null
},
{
"label": "disabled border (exempt)",
"state": "disabled",
"kind": "ui",
"min": 1,
"fg": "color.border.disabled",
"bg": "color.interaction.disabled.bg",
"fgHex": "#7d1310",
"bgHex": "#160b0b",
"ratio": 1.82,
"pass": true,
"waiver": "disabled controls are exempt from 1.4.11"
},
{
"label": "read-only bottom edge (decorative; the field has no box)",
"state": "read-only",
"kind": "ui",
"min": 1,
"fg": "color.border.divider",
"bg": "color.surface.canvas",
"fgHex": "#2b0e0d",
"bgHex": "#000000",
"ratio": 1.17,
"pass": true,
"waiver": "read-only fields are identified by the readonly attribute and the absence of a box, not by this edge"
}
]
}