# BYU OIT Design System > A CSS-first design system for BYU applications. This self-contained document is generated and distributed with the compiled stylesheets for use by coding agents and other automated consumers. Use semantic HTML and native browser behavior first. The component documentation below describes supported markup, behavior, accessibility requirements, and CSS custom properties. Use `byu.css` during development or `byu.min.css` for the equivalent minified stylesheet. ## Included documentation - src/css/accordion.md - src/css/badge.md - src/css/breadcrumbs.md - src/css/button.md - src/css/card.md - src/css/checkbox.md - src/css/chip.md - src/css/code.md - src/css/color.md - src/css/dialog.md - src/css/dropdown.md - src/css/file.md - src/css/footer.md - src/css/form.md - src/css/header.md - src/css/icon.md - src/css/input.md - src/css/layout.md - src/css/loading.md - src/css/nav.md - src/css/pagination.md - src/css/progress.md - src/css/radio.md - src/css/range.md - src/css/select.md - src/css/stepper.md - src/css/switch.md - src/css/table.md - src/css/textarea.md - src/css/tooltip.md - src/css/typography.md - src/js/card.md --- # 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. ## 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. ## 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 `