Border
Hairlines separate regions and never decorate. A colored border always carries a meaning.
On this page
ACK
Hairlines
Two contrast levels of hairline, with the same thin line weight. --border separates regions; --border-bright outlines controls and
insets the raised active item.
| Token | Night | Dusk | Day | Bright |
|---|---|---|---|---|
--borderBetween regions and readouts | #3A2C16 | #26272E | #D5D8DD | #C9CDD4 |
--border-brightControl outlines, raised inset, key caps | #523D1E | #33353D | #B9BEC6 | #AAB0B9 |
Semantic borders
Each of these borders is the color of what it reports. They come from OpenBridge's alert and integrity roles and follow the theme.
| Border | Token | Means |
|---|---|---|
| Alarm outline | --alert-alarm-outline-color | An alarm or an emergency in the alert zone: act now. Its 2px ring flashes on the alarm clock until the alarm is acknowledged |
| Stale outline | --alert-low-integrity-border-color | A reading is late; its value is dimmed and carries its age |
| Invalid outline | --alert-invalid-border-color | A reading is lost; its last value is kept with how long ago it was seen |
| Focus ring | --bk-focus-ring, --bk-focus-width, --bk-focus-offset | Keyboard focus, independently of selection or validation |
| Selection | --bk-selected-indicator | The chosen segment or step; it carries a label too |
| Field boundary | --bk-field-* roles | The field state; an invalid field has a dashed border in the text color (--bk-field-invalid-border), which stays while the focus ring is drawn outside it |
| Token | Night | Dusk | Day | Bright |
|---|---|---|---|---|
--alert-alarm-outline-colorAlarm outline | #E90F20 | #E1000E | #AB0000 | #7F0000 |
--alert-low-integrity-border-colorStale outline | #433700 | #8E6A00 | #6B4F00 | #8F6B00 |
--alert-invalid-border-colorInvalid outline | #A60000 | #A60000 | #7F0000 | #FF4D47 |
--bk-focus-ringFocus ring | #FFC878 | #14B8A6 | #0D645E | #0D645E |
--bk-selected-indicatorSelection | #FFC878 | #14B8A6 | #0D9488 | #0D9488 |
Choosing the boundary
| Relationship | Treatment |
|---|---|
| Two regions already separated by space | No additional border unless the boundary needs to remain visible |
| Repeated rows or columns | One shared hairline; avoid doubled edges between neighbors |
| Editable field | The component's field-border roles, including disabled and invalid states |
| Keyboard focus | A separate focus ring that survives selection and invalid styling |
| Report category | An editorial accent with a written category name |
| Diagram service or group | The diagram's service-line or neutral-line role |
Border color and line weight are separate decisions. --border and --border-bright name colors, not widths.
The document rule width is --bk-document-rule-width; keyboard focus has its own width and offset tokens.
A diagram boundary can describe a service or a system without implying a hazard. Alert and integrity outlines
remain reserved for their operational meanings.
Focus, clipping and layout
Use --bk-focus-ring, --bk-focus-width and --bk-focus-offset through the shared component. The field's
invalid border and the focus ring can appear together. Do not replace one state with the other, or clip the
ring with an ancestor's overflow. A border that grows on focus must not move adjacent content; reserve its space
or use an outline. Check focus on the actual background in each theme and with forced colors.
Outlined labels need the surface behind the field, including a card or nested scope. Do not paint a Day-colored patch behind a label to hide a border in every theme. Use the component's label treatment and test it where the field is embedded.
Using borders
Related
- Elevation: hairlines and raised surfaces
- Data integrity: stale and invalid readings
- Accessibility: focus