# BYU OIT Design System > A CSS-first design system for BYU applications, distributed with agent-readable component, token, and behavior documentation. Use semantic HTML and native browser behavior first. The linked documentation describes supported markup, behavior, accessibility requirements, and CSS custom properties. Use `byu.css` during development or `byu.min.css` for the equivalent minified stylesheet. --- # Accordion ## Overview The accordion component presents grouped disclosure content through native `
` and `` elements. The component is fully classless. It styles native `
` and `` markup directly so authors can keep the structure semantic and minimal. ## When to use Use an accordion when users need to scan several short, related sections and reveal only the content they care about. ## When not to use Do not use an accordion when content must remain visible for comparison, represents a sequence, or belongs in rows and columns; use visible sections, a stepper, navigation, or a table. ## Usage ```html
What is included?

Shared theme tokens, component CSS, and semantic HTML examples.


Does it need JavaScript?

No. The interaction uses native disclosure behavior.

``` Use this component when the user needs to scan several short sections and expand only the ones they care about. Use nav, a stepper, or a table instead when the content should stay visible side by side, represent sequence, or compare values across rows and columns. Add `
` between items when the design expects a visible divider. It now renders as a subtle system border, while surrounding layout still controls spacing. The summary text should stay short and descriptive enough to make sense on its own. ## Behavior Covered by [Playwright behavior tests](../../tests/e2e/components.spec.js). - ACC-001: The component uses native disclosure semantics and keyboard behavior from `
` and ``. - ACC-002: Multiple items may stay open at the same time. - ACC-003: Comfortable and compact density come from the shared layout theme tokens instead of accordion-specific theme branches. - ACC-004: The summary row keeps a visible focus treatment and a rotating disclosure icon without extra markup. - ACC-005: Content should accept normal block flow such as paragraphs, lists, and small form groups without requiring named inner wrappers. - ACC-006: Dividers are opt-in. Authors provide `
` wherever they want a subtle border between items. - ACC-007: Visual emphasis should come from shared accent, text, and primary tokens rather than one-off component colors. ## Accessibility - Use a native `` as the interactive label for each panel. - Keep the summary concise so it remains understandable when announced on its own. - Group related accordions in a labeled container only when the set needs extra page-level context or an accessible name. - Do not replace the native summary interaction with nested buttons or links. - Do not rely on the disclosure icon alone to communicate open and closed state. ## Variables | Variable | Type | Description | | --- | --- | --- | | `--accordion-accent-color` | `` | Sets the color for disclosure icons and highlighted summary text; change it when the accordion accent should differ from the surrounding text accent. | | `--accordion-color-focus-ring` | `` | Sets --accordion-color-focus-ring so the component can default to shared theme or layout tokens while exposing an overrideable component API. | | `--accordion-content-color` | `` | Sets the text color for expanded accordion content; change it when body copy inside panels needs a different contrast treatment. | | `--accordion-control-gap` | `` | Sets --accordion-control-gap so the component can default to shared theme or layout tokens while exposing an overrideable component API. | | `--accordion-control-min-height` | `` | Sets --accordion-control-min-height so the component can default to shared theme or layout tokens while exposing an overrideable component API. | | `--accordion-control-padding-block` | `` | Sets --accordion-control-padding-block so the component can default to shared theme or layout tokens while exposing an overrideable component API. | | `--accordion-control-padding-inline` | `` | Sets --accordion-control-padding-inline so the component can default to shared theme or layout tokens while exposing an overrideable component API. | | `--accordion-focus-ring-size` | `` | Sets --accordion-focus-ring-size so the component can default to shared theme or layout tokens while exposing an overrideable component API. | | `--accordion-font-family-sans` | `Any` | Sets --accordion-font-family-sans so the component can default to shared theme or layout tokens while exposing an overrideable component API. | | `--accordion-font-size` | `` | Sets --accordion-font-size so the component can default to shared theme or layout tokens while exposing an overrideable component API. | | `--accordion-icon-font-family` | `Any` | Sets --accordion-icon-font-family so the component can default to shared theme or layout tokens while exposing an overrideable component API. | | `--accordion-icon-size` | `` | Sets the disclosure icon font size; change it to make the open and closed indicators larger or smaller without changing summary text size. | | `--accordion-line-height` | `` | Sets --accordion-line-height so the component can default to shared theme or layout tokens while exposing an overrideable component API. | | `--accordion-space-inline` | `` | Sets --accordion-space-inline so the component can default to shared theme or layout tokens while exposing an overrideable component API. | | `--accordion-summary-color` | `` | Sets the default summary label color; change it when collapsed accordion headings need stronger or subtler emphasis. | ## Depends On - `--color-focus-ring` - `--color-text` - `--color-text-accent` - `--font-family-sans` - `--font-line-height-body` - `--font-size` - `--icon-font-family` - `--layout-control-gap` - `--layout-control-icon-size` - `--layout-control-min-height` - `--layout-control-padding-block` - `--layout-control-padding-inline` - `--layout-focus-ring-size` - `--layout-space-inline` --- # Badge ## Overview The badge component presents short inline labels, status values, metadata, and rendered token values with a compact rounded visual treatment. Use `span.badge` for display-only content. Use chips when the user is choosing checkbox or radio values. ## When to use Use a badge for a short read-only label, status, metadata value, or rendered token value. ## When not to use Do not use a badge for links, actions, or selectable values; use a link, button, or chip respectively. ## Usage For a default brand badge, omit `data-variant`: ```html Featured ``` For a status or low-emphasis badge, use `data-variant`: ```html Approved Pending Unavailable ``` Badges can include an optional leading icon through the shared `.icon` pattern: ```html Approved ``` Use badges when the interface needs a short read-only label, status, metadata token, or rendered token value. Use chips when a checkbox or radio group should scan like compact chips while keeping native form behavior. Use a future token input pattern, not a standalone badge, when the user needs to enter, parse, remove, validate, or submit a comma-, tab-, newline-, or space-separated set of tokens. Do not use `a.badge` or `button.badge`; link badges and button badges are not part of this component's public API. ## Behavior Covered by [Playwright behavior tests](../../tests/e2e/components.spec.js). - BDG-001: The default badge and `data-variant="brand"` use a filled brand treatment. - BDG-002: `info`, `success`, `warning`, `error`, and `unavailable` variants use a subtle background with strong-color text and border. - BDG-003: Individual badges stay on one line; use `.cluster` to wrap groups of badges. - BDG-004: Badges use a fixed pill radius by default and can override it with `--badge-border-radius`. ## Accessibility - Use `span.badge` only for display content. - Keep badge text short and descriptive. - Mark decorative icons with `aria-hidden="true"`. - Do not rely on color alone when a status value needs to communicate critical information; include clear text. ## Variables | Variable | Type | Description | | --- | --- | --- | | `--badge-background` | `` | Sets the badge fill color for the default and status variants; change it to tune the visual weight of the badge surface. | | `--badge-border-color` | `` | Sets the badge outline color; change it when the border needs to separate the badge from nearby surfaces or match a status color. | | `--badge-border-radius` | `` | Sets the badge corner shape; change it to move badges from pill-shaped labels toward a squarer product style. | | `--badge-border-width` | `` | Sets the badge surface border width; change it when badges need a stronger or subtler edge. | | `--badge-color` | `` | Sets the badge text and icon color; change it when the fill or border color requires a different contrast pairing. | | `--badge-control-gap` | `` | Sets --badge-control-gap so the component can default to shared theme or layout tokens while exposing an overrideable component API. | | `--badge-control-padding-inline` | `` | Sets --badge-control-padding-inline so the component can default to shared theme or layout tokens while exposing an overrideable component API. | | `--badge-font-family-sans` | `Any` | Sets --badge-font-family-sans so the component can default to shared theme or layout tokens while exposing an overrideable component API. | | `--badge-font-size` | `` | Sets --badge-font-size so the component can default to shared theme or layout tokens while exposing an overrideable component API. | | `--badge-font-size-caption` | `` | Sets --badge-font-size-caption so the component can default to shared theme or layout tokens while exposing an overrideable component API. | | `--badge-icon-size` | `` | Sets the size passed to icons inside badges; change it when icons should read larger or smaller than the label text. | | `--badge-line-height` | `` | Sets --badge-line-height so the component can default to shared theme or layout tokens while exposing an overrideable component API. | ## Depends On - `--color-error-strong` - `--color-error-subtle` - `--color-info-strong` - `--color-info-subtle` - `--color-primary` - `--color-success-strong` - `--color-success-subtle` - `--color-text-inverse` - `--color-unavailable-strong` - `--color-unavailable-subtle` - `--color-warning-strong` - `--color-warning-subtle` - `--font-family-sans` - `--font-line-height-body` - `--font-size` - `--font-size-caption` - `--layout-control-gap` - `--layout-control-padding-inline` - `--layout-surface-border-width` --- # Breadcrumbs ## Overview The breadcrumbs component presents the current page's position inside a hierarchy as a classless ordered list of links. It styles a native `