OGANIKO DESIGN SYSTEM

Stepper os-010

Also known as: Progress tracker, Wizard steps, Pipeline indicator

Show where something is in a fixed multi-step process — completed, current and upcoming steps on one horizontal line, with a hover description per step.

Example
default (hover a step for its description)
  1. 1Intake
  2. 2Brand pack
  3. 3Angles — we are here
  4. 4Creative
  5. 5Delivered
Variants
sm (compact, for cards and list rows — no hover descriptions)
  1. 1Intake
  2. 2Brand
  3. 3Angles
  4. 4Creative
  5. 5Delivered
How it works
Pure CSS on a semantic ordered list — no JS. Each <li> carries one state class: done (filled accent-green dot with a check), now (bold label, black-ring dot), todo (muted). Connector lines are ::before pseudo-elements between dots; completed segments turn green. An optional data-desc attribute renders a dark tooltip below the step on hover. The consumer sets the state classes — in AdCraft they are computed from which pipeline state files exist on disk, so the tracker cannot disagree with reality.
Relationships
Compare os-002 Tabs (navigation between peer sections, any order) — the stepper is for a fixed sequence with exactly one current position.
Parameters
NameTypeDefaultDescription
stateclass per litododone | now | todo — exactly one now per stepper
data-descattribute—Optional hover tooltip text per step
--smmodifier—og-stepper--sm: compact dots and labels for cards
Tokens
--og-fresh-leaf --og-black --muted --line
Provenance
VariantProven inLive atDate
default21st.dev — @originui "Stepper" (external assimilation), rebuilt as tokenized vanilla CSS on a semantic <ol>21st.dev2026-08-10
smOS-020 AdCraft operations console — corridor client cardsAdCraft ops console (docs/app)2026-08-10
Used in AdCraft (OS-020) — the pipeline progress tracker in every client case room and corridor card of the operations console. Assimilated per the standing rule: any 21st.dev component used in a project is added to ODS with a usage note.
Code
os-010 · Source: packages/og-stepper.css ▾
<link rel="stylesheet" href="og-stepper.css">

<ol class="og-stepper">
  <li class="done" data-desc="…">
    <span class="dot"><span>1</span></span>Intake</li>
  <li class="now" data-desc="…">
    <span class="dot"><span>2</span></span>Brand pack</li>
  <li class="todo">
    <span class="dot"><span>3</span></span>Angles</li>
</ol>

<!-- compact: og-stepper og-stepper--sm -->