Components / Layout & Navigation / Steps
Steps beta
Where you are in a sequence of things that must happen in order.
- Account
- Workspace
- Billing
- 4Invite team
<ol class="k-steps" style="max-width:430px"> <li data-state="done"><span class="n"><svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m4.5 12.5 5 5L19.5 6.5"/></svg></span><span class="t">Account</span></li> <li data-state="done"><span class="n"><svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m4.5 12.5 5 5L19.5 6.5"/></svg></span><span class="t">Workspace</span></li> <li data-state="current" aria-current="step"><span class="n"></span><span class="t">Billing</span></li> <li><span class="n">4</span><span class="t">Invite team</span></li> </ol>
.k-steps{list-style:none;margin:0;padding:0;display:flex;font-family:var(--k-font)}
.k-steps li{flex:1;display:flex;flex-direction:column;align-items:center;gap:8px;position:relative;text-align:center}
.k-steps li::before{content:"";position:absolute;top:13px;left:calc(-50% + 16px);right:calc(50% + 16px);height:2px;background:var(--k-line);border-radius:2px}
.k-steps li:first-child::before{display:none}
.k-steps li[data-state="done"]::before{background:var(--k-ink)}
.k-steps .n{width:27px;height:27px;border-radius:50%;border:2px solid var(--k-line);background:var(--k-bg);display:grid;place-items:center;font-size:12px;font-weight:600;color:var(--k-ink-3);position:relative;z-index:1}
.k-steps li[data-state="done"] .n{background:var(--k-ink);border-color:var(--k-ink);color:var(--k-bg)}
.k-steps li[data-state="current"] .n{border-color:var(--k-ink);color:var(--k-ink)}
.k-steps li[data-state="current"] .n::after{content:"";width:7px;height:7px;border-radius:50%;background:var(--k-core);position:absolute}
.k-steps .t{font-size:12px;font-weight:550;color:var(--k-ink-3)}
.k-steps li[data-state="current"] .t{color:var(--k-ink)}
.k-steps li[data-state="done"] .t{color:var(--k-ink-2)}
Usage
For checkouts, onboarding and setup flows of three to five steps. The current step carries the core dot — the same signature as the Switch and the Radio.
Accessibility
An ordered list underneath: screen readers get the sequence for free. Mark the current step with aria-current="step".
Related parts
Accordion beta
Disclosure built on native <details>. Zero JavaScript, keyboard and find-in-page included.
Breadcrumbs beta
Where you are, as a path. The last crumb is the page itself — not a link.
Pagination beta
Page numbers with a clear current page: ink-filled, everything else quiet.
Scroll Area beta
A long list in a fixed frame, with a scrollbar that matches the room and a fade that admits there is more.