j3w1/theme implementation brief — select 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/select.json spec: spec/components/select.md site: https://j3w1.github.io/theme/reference/#c-select maturity: stable priority: R1 Summary: A themed single-choice combobox or multiple-choice list backed by a native select for forms and the no-JavaScript fallback. 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 control.text #e99499 ({color.text.default}) use control.text-disabled #8a5559 ({color.text.disabled}) use chevron.stroke #e99499 ({color.icon.default}) use option.bg #160b0b ({color.surface.raised}) use option.text #e99499 ({color.text.default}) use option.bg-selected #531310 ({color.interaction.selection.bg}) use option.text-selected #f4eeee ({color.interaction.selection.text}) use group.text #bd787d ({color.text.muted}) use label.text #ffa2a7 ({color.text.bright}) use label.required-mark #f73f35 ({color.status.danger.text}) 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, required, invalid, invalid+focus-visible, disabled default: 1px {color.border.control} on {color.surface.input}; value {color.text.default}; chevron {color.icon.default} [the chevron] hover: background → {color.interaction.hover.bg}; border unchanged [cursor: default; hover-capable pointers only] focus-visible: border → {color.border.active}; ring 1px dashed {color.interaction.focus.ring} at −2px [the ring] required: `*` after the label in {color.status.danger.text} plus visually hidden "required" [`required`; the mark] 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 and chevron {color.text.disabled}; border {color.border.disabled}; background {color.interaction.disabled.bg} [`disabled`; cursor: not-allowed] Keyboard: Tab / Shift+Tab: Moves focus in and out. Space / Alt+Down: Opens the themed popup without committing a choice. Up / Down: Opens the single list or moves its active option; Enter or Space commits. In the multiple list, moves the active option. Typing: Moves to an enabled option starting with the typed characters. Space / click; Shift+Up / Shift+Down; Ctrl+Command+A: Toggles a multiple option; extends a range; selects or clears all enabled options. Escape / Tab: Closes the single popup without committing the active option. ARIA: Select-only combobox with listbox popup; multiple variant is a multiselectable listbox (https://www.w3.org/WAI/ARIA/apg/patterns/combobox/) Responsive: Fills its field container with min-width 0; the chevron keeps its 16px slot; long option text truncates inside the box with the native ellipsis. RTL moves the chevron to the inline end. Portability: Native select and label markup progressively enhanced into a theme-owned combobox/listbox. The package owns popup colors; native submission, validation and reset remain intact. The no-JavaScript fallback retains the native control. native: GTK4 DropDown; the popover follows border.overlay on surface.raised. native: Qt QComboBox stylesheet with the drop-down subcontrol; QListView for multiple. native: Terminal UI: the value in a bordered box with a ▾ glyph; a bordered list for multiple. Rules: use only these values; no invented colours; radius 0; borders 1px (2px emphasis); focus is a 1px dashed ring, selection is a fill; do not restyle unrelated elements; report deviations per agents/consume.md; record theme.lock.json at the pinned revision.