j3w1/theme implementation brief — badge 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/badge.json spec: spec/components/badge.md site: https://j3w1.github.io/theme/reference/#c-badge maturity: stable priority: R1 Summary: A small square label for a status or a count; every status carries its glyph and its fill, the outline form uses the status border, and an empty badge is a dot with a name. 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): danger.bg #dc282e ({color.status.danger.fill}) use danger.text #f9faf9 ({color.status.danger.on-fill}) use danger.border #e53935 ({color.status.danger.border}) use danger.outline-text #f73f35 ({color.status.danger.text}) use warning.bg #c9973f ({color.status.warning.fill}) use warning.text #0c0909 ({color.status.warning.on-fill}) use warning.border #c9973f ({color.status.warning.border}) use warning.outline-text #c9973f ({color.status.warning.text}) use success.bg #86a46f ({color.status.success.fill}) use success.text #0c0909 ({color.status.success.on-fill}) use success.border #86a46f ({color.status.success.border}) use success.outline-text #86a46f ({color.status.success.text}) use info.bg #7e9ebb ({color.status.info.fill}) use info.text #0c0909 ({color.status.info.on-fill}) use info.border #7e9ebb ({color.status.info.border}) use info.outline-text #7e9ebb ({color.status.info.text}) use neutral.bg #a3676b ({color.status.neutral.fill}) use neutral.text #000000 ({color.status.neutral.on-fill}) use neutral.border #a3676b ({color.status.neutral.border}) use neutral.outline-text #bd787d ({color.status.neutral.text}) use count.bg #7d1310 ({color.action.primary.bg}) use count.text #f4eeee ({color.action.primary.text}) use States: default, empty default: fill, glyph and text for the status; or the outline form [the glyph; the text] empty: an 8px square dot in the status fill; the glyph and text visually hidden [`role="img"` with `aria-label`, or the hidden text; the dot's position beside its subject] ARIA: native span; an empty badge is role="img" with aria-label Responsive: A badge never wraps; the surrounding line wraps around it. Long labels are a design error, not a truncation case. RTL keeps the glyph at the inline start. Portability: A span with a modifier class; a count badge adds a visually hidden unit; an empty badge is a span with role="img" and aria-label; a badge never receives focus and never carries a click handler. native: GTK4 Label with a status style class and the fill through the css-name. native: Qt QLabel with a dynamic status property selected in the stylesheet. native: Terminal UI: the glyph and the label in the status colour; fills only where the emulator supports background colours. 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.