j3w1/theme implementation brief — search-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/search-field.json
spec: spec/components/search-field.md site: https://j3w1.github.io/theme/reference/#c-search-field
maturity: stable priority: R1
Summary: The text-field box around a native search input with a magnifier, a clear button that appears with a value, an optional shortcut hint, a loading glyph and a no-results status line.
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.border-disabled #7d1310 ({color.border.disabled}) use
root.bg-disabled #160b0b ({color.interaction.disabled.bg}) use
input.text #e99499 ({color.text.default}) use
input.text-disabled #8a5559 ({color.text.disabled}) use
input.placeholder #a3676b ({color.text.placeholder}) use
input.caret #e99499 ({color.code.caret}) use
icon.stroke #e99499 ({color.icon.default}) use
loading.glyph #bd787d ({color.text.muted}) use
clear.text #e99499 ({color.action.tertiary.text}) use
clear.bg-hover #1c0a09 ({color.action.tertiary.hover-bg}) use
kbd.text #bd787d ({color.text.muted}) use
kbd.border #531310 ({color.border.default}) use
label.text #ffa2a7 ({color.text.bright}) use
help.text #bd787d ({color.text.muted}) use
status.text #bd787d ({color.text.muted}) use
State dependency disclosures: D-007
States: default, hover, focus-visible, placeholder-shown, filled, loading, disabled, no-results
default: 1px {color.border.control} on {color.surface.input}; magnifier {color.icon.default}; text {color.text.default} [the magnifier]
hover: background → {color.interaction.hover.bg}; the clear button → {color.action.tertiary.hover-bg} when hovered [cursor: text]
focus-visible: border → {color.border.active}; ring 1px dashed {color.interaction.focus.ring} at −2px; the hint hides [the ring]
placeholder-shown: placeholder in {color.text.placeholder}, italic; no clear button [italic; the clear button is absent]
filled: as default with a value; the clear button is present [the clear button]
loading: the static `⋯` glyph in {color.text.muted} replaces the magnifier; the input stays editable [glyph; `aria-busy`]
disabled: text and icon {color.text.disabled}; border {color.border.disabled}; background {color.interaction.disabled.bg}; no clear button [`disabled`; cursor: not-allowed]
no-results: the status line "No results for …" in {color.text.muted} below the help; the box unchanged [the status text; `role="status"`]
Keyboard:
Tab / Shift+Tab: Input, then the clear button when it is visible.
Escape: Clears a non-empty value and keeps focus; with an empty value, nothing.
Enter: Runs the search when the host does not search as you type.
/ or Ctrl+K: Focuses the field from anywhere on the page when the host binds the shortcut shown in the hint.
ARIA: native with