j3w1/theme implementation brief — number-field theme: j3w1-theme 1.1.0 profile: default sourceDigest: sha256-C+iD5Q7l0XPU/boMj003wPbPLBOq3C3ZM7s4OfzJ6mc= pin: https://raw.githubusercontent.com/j3w1/theme/v1.1.0/exports/components/number-field.json spec: spec/components/number-field.md site: https://j3w1.github.io/theme/reference/#c-number-field maturity: stable priority: R1 Summary: The text-field box around a native number input with right-aligned tabular digits, an optional unit affix and two square stepper buttons that replace the host spinner. 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. Tokens (resolved): root.bg #000000 ({color.surface.input}) use root.border #a3676b ({color.border.control}) use-and-report (D-007) root.bg-hover #1c0a09 ({color.interaction.hover.bg}) use root.border-focus #e53935 ({color.border.active}) use root.ring #e53935 ({color.interaction.focus.ring}) use root.ring-invalid #ffa2a7 ({color.interaction.focus.ring-container}) use root.border-invalid #e53935 ({color.status.danger.border}) use root.border-disabled #7d1310 ({color.border.disabled}) use root.bg-disabled #160b0b ({color.interaction.disabled.bg}) use root.border-readonly #2b0e0d ({color.border.divider}) use-and-report (D-008) root.bg-readonly #000000 ({color.surface.canvas}) use input.text #e99499 ({color.text.default}) use input.text-disabled #8a5559 ({color.text.disabled}) use input.caret #e99499 ({color.code.caret}) use unit.text #bd787d ({color.text.muted}) use unit.border #2b0e0d ({color.border.divider}) use-and-report (D-008) action.text #e99499 ({color.action.tertiary.text}) use action.bg-hover #1c0a09 ({color.action.tertiary.hover-bg}) use action.border #2b0e0d ({color.border.divider}) use-and-report (D-008) label.text #ffa2a7 ({color.text.bright}) use help.text #bd787d ({color.text.muted}) use message.text #f73f35 ({color.status.danger.text}) use State dependency disclosures: D-007 States: default, hover, focus-visible, invalid, invalid+focus-visible, disabled, read-only default: 1px {color.border.control} on {color.surface.input}; digits {color.text.default}; unit {color.text.muted}; stepper glyphs {color.action.tertiary.text} [—] hover: background → {color.interaction.hover.bg}; a hovered stepper button → {color.action.tertiary.hover-bg} [cursor: text on the input, pointer on the buttons] focus-visible: border → {color.border.active}; ring 1px dashed {color.interaction.focus.ring} at −2px on the box, or on the focused stepper button [the ring] invalid: border 2px {color.status.danger.border}; message with the ✕ glyph [border width 1 → 2px; glyph; `aria-invalid`] invalid+focus-visible: the 2px danger border and the ring in {color.interaction.focus.ring-container} at −4px [double boundary] disabled: text, unit and glyphs {color.text.disabled}; border {color.border.disabled}; background {color.interaction.disabled.bg}; buttons disabled [`disabled`; cursor: not-allowed] read-only: no box: 1px dotted {color.border.divider} bottom edge on {color.surface.canvas}; the stepper is hidden [`readonly`; dotted edge; no buttons] Keyboard: Tab / Shift+Tab: Input, then the increase button, then the decrease button. Up / Down: Steps by the step attribute (native); Shift+Up / Shift+Down step by ten where the host binds it. Page Up / Page Down: Steps by ten times the step where the host binds it. Home / End: Jumps to min or max where the host binds it. ARIA: native with