Stepper

A stepper is a numbered step indicator for multi-step flows or to illustrate steps to be taken.

Examples

Basic usage

<nav class="cluster stepper" aria-label="Progress">
                <span class="step">
                    <span class="badge is-circle is-success" aria-label="Complete">&#10003;</span>
                    <span class="step-label">Account</span>
                </span>
                <hr class="divider stepper-connector" />
                <span class="step" aria-current="step">
                    <span class="badge is-circle is-accent">2</span>
                    <span class="step-label">Profile</span>
                </span>
                <hr class="divider stepper-connector" />
                <span class="step is-upcoming">
                    <span class="badge is-circle is-neutral">3</span>
                    <span class="step-label">Preferences</span>
                </span>
                <hr class="divider stepper-connector" />
                <span class="step is-upcoming">
                    <span class="badge is-circle is-neutral">4</span>
                    <span class="step-label">Review</span>
                </span>
            </nav>

Checkmarks for completed steps

<nav class="cluster stepper" aria-label="Progress">
                <span class="step">
                    <span class="badge is-circle is-success" aria-label="Complete">&#10003;</span>
                    <span class="step-label">Account</span>
                </span>
                <hr class="divider stepper-connector" />
                <span class="step">
                    <span class="badge is-circle is-success" aria-label="Complete">&#10003;</span>
                    <span class="step-label">Profile</span>
                </span>
                <hr class="divider stepper-connector" />
                <span class="step" aria-current="step">
                    <span class="badge is-circle is-accent">3</span>
                    <span class="step-label">Preferences</span>
                </span>
                <hr class="divider stepper-connector" />
                <span class="step is-upcoming">
                    <span class="badge is-circle is-neutral">4</span>
                    <span class="step-label">Review</span>
                </span>
            </nav>

Double-digit steps

<nav class="cluster stepper" aria-label="Progress">
                <span class="step">
                    <span class="badge is-circle is-success" aria-label="Complete">&#10003;</span>
                    <span class="step-label">Intro</span>
                </span>
                <hr class="divider stepper-connector" />
                <span class="step">
                    <span class="badge is-circle is-success" aria-label="Complete">&#10003;</span>
                    <span class="step-label">Details</span>
                </span>
                <hr class="divider stepper-connector" />
                <span class="step" aria-current="step">
                    <span class="badge is-circle is-accent">10</span>
                    <span class="step-label">Review</span>
                </span>
                <hr class="divider stepper-connector" />
                <span class="step is-upcoming">
                    <span class="badge is-circle is-neutral">11</span>
                    <span class="step-label">Payment</span>
                </span>
                <hr class="divider stepper-connector" />
                <span class="step is-upcoming">
                    <span class="badge is-circle is-neutral">12</span>
                    <span class="step-label">Confirm</span>
                </span>
            </nav>

Always-compact (badges only)

<nav class="cluster stepper is-compact" aria-label="Progress">
                <span class="step">
                    <span class="badge is-circle is-success" aria-label="Step 1, Account, complete"
                        >&#10003;</span
                    >
                    <span class="step-label">Account</span>
                </span>
                <hr class="divider stepper-connector" />
                <span class="step" aria-current="step">
                    <span class="badge is-circle is-accent" aria-label="Step 2, Profile, current"
                        >2</span
                    >
                    <span class="step-label">Profile</span>
                </span>
                <hr class="divider stepper-connector" />
                <span class="step is-upcoming">
                    <span class="badge is-circle is-neutral" aria-label="Step 3, Review, upcoming"
                        >3</span
                    >
                    <span class="step-label">Review</span>
                </span>
            </nav>

Condensed (responsive collapse)

<nav class="cluster stepper is-condensed" aria-label="Progress">
                <span class="step">
                    <span class="badge is-circle is-success" aria-label="Step 1, Account, complete"
                        >&#10003;</span
                    >
                    <span class="step-label">Account</span>
                </span>
                <hr class="divider stepper-connector" />
                <span class="step">
                    <span class="badge is-circle is-success" aria-label="Step 2, Profile, complete"
                        >&#10003;</span
                    >
                    <span class="step-label">Profile</span>
                </span>
                <hr class="divider stepper-connector" />
                <span class="step" aria-current="step">
                    <span
                        class="badge is-circle is-accent"
                        aria-label="Step 3, Preferences, current"
                        >3</span
                    >
                    <span class="step-label">Preferences</span>
                </span>
                <hr class="divider stepper-connector" />
                <span class="step is-upcoming">
                    <span class="badge is-circle is-neutral" aria-label="Step 4, Review, upcoming"
                        >4</span
                    >
                    <span class="step-label">Review</span>
                </span>
            </nav>

Source comments

Stepper -- numbered step indicator for multi-step flows (extra).

Built on top of .cluster, .badge.is-circle, and .divider. The
stepper itself is a .cluster with nowrap; this file handles the
step pair (.step), the label slot (.step-label), and the
stepper-specific divider modifier (.stepper-connector).

Markup:
  <nav class="cluster stepper" aria-label="Progress">
      <span class="step">
          <span class="badge is-circle is-accent">1</span>
          <span class="step-label">Account</span>
      </span>
      <hr class="divider stepper-connector">
      <span class="step" aria-current="step">
          <span class="badge is-circle is-accent">2</span>
          <span class="step-label">Profile</span>
      </span>
      <hr class="divider stepper-connector">
      <span class="step is-upcoming">
          <span class="badge is-circle is-neutral">3</span>
          <span class="step-label">Review</span>
      </span>
  </nav>

Archetype: composition reuse (P3 + P6). The stepper is mostly
.cluster + .badge + .divider with a thin layer of stepper-
specific glue. Consumers communicate state through badge color
(.is-success for completed, .is-accent for active, .is-neutral
for upcoming); the active step gets aria-current="step" and
brio auto-bolds its label.

Accessibility note for .is-compact / .is-condensed: hidden
labels are display: none, removed from the a11y tree. Add
aria-label on each badge describing step number AND name AND
state in compact mode -- "Step 2, Profile, current".

Container-query threshold (.is-condensed): hardcoded at 30rem
because container query lengths can't be var()-driven.
Consumers needing a different breakpoint write their own
@container rule.

Reference

Source: src/css/extras/stepper.css

Applies to

.stepper

Classes

ClassKindDescription
.is-compactvariantAlways hides labels, showing badges only at every width
.is-condensedvariantAuto-hides labels at narrow container widths via container query

Slots

SlotDescription
.stepper .stepStep pair containing a badge and optional label
.stepper-connectorDivider connector line between steps

Tokens

TokenDefaultDescription
--stepper-gapvar(--ui-gutter-snug)Gap between the badge and label inside each step
--stepper-connector-minvar(--space-lg)Minimum inline size of the divider connector between steps
--cluster-wrapnowrapFlex-wrap override for the cluster composition