Skip to content
The Membrane Palette
Feedbackstable

Progress

Native <progress> bars (determinate or indeterminate, three sizes, register tones) and a spinner for short unmeasured waits.

Examples

Determinate and indeterminate

64%
8 of 8
HTML for “Determinate and indeterminate”
<div class="mp-stack">
  <div class="mp-field">
    <label class="mp-field__label" for="progress-course">Course completion — 64%</label>
    <progress class="mp-progress" id="progress-course" value="64" max="100" data-tone="human">64%</progress>
  </div>
  <div class="mp-field">
    <label class="mp-field__label" for="progress-upload">Uploading materials</label>
    <progress class="mp-progress" id="progress-upload" data-size="sm"></progress>
  </div>
  <div class="mp-field">
    <label class="mp-field__label" for="progress-gate">Modules completed — 8 of 8</label>
    <progress class="mp-progress" id="progress-gate" value="8" max="8" data-tone="success" data-size="lg">8 of 8</progress>
  </div>
</div>

Spinner

Generating feedback…
HTML for “Spinner”
<div class="mp-cluster">
  <span class="mp-spinner" aria-hidden="true"></span>
  <span class="type-small" role="status">Generating feedback…</span>
</div>

Guidance

Uses the native <progress> element, so value, max and the indeterminate state are announced by assistive tech without extra ARIA. Default value color is teal (digital: systems at work); data-tone="human" for learner progress.

Accessibility

  • Label every progress bar (<label for> or aria-label); include the number in the label when it matters.
  • A spinner is decorative — announce the wait with visible text in a role="status" element.
  • Under reduced motion the indeterminate bar holds in the middle and the spinner becomes a full ring; both pulse in place (--duration-loop), so the wait never looks frozen.

API

Progress classes
ClassKind
.mp-progressroot
.mp-spinnerroot
Progress attributes
AttributeValues
data-tonehuman · success
data-sizesm · lg

States styled: :indeterminate. Set the native attribute or ARIA state; there are no state classes.

Progress component tokens
TokenDefaultLight · dark
--mp-progress-height0.5rem—
--mp-progress-trackvar(--color-bg-tertiary)#E2DCD2 · #2E2E34
--mp-progress-valuevar(--color-action-secondary)#1B756D · #3AAFA8
--mp-spinner-size1.25rem—

Design tokens consumed: --border-width-medium --color-action-primary --color-action-secondary --color-bg-tertiary --color-success-text --duration-loop --ease-in-out --radius-full --transition-default

Verified contrast

The build measures each pair for the defaults and for every tone, variant and state that reassigns a token, over page and card surfaces. The ratios below are the worst case in each mode; a pair below its minimum stops the build.

Progress contrast pairs
UsePairLightDarkMinimum
progress value vs track--mp-progress-value on --mp-progress-track3.624.063.0

Source