Onyx Ladder
Vertical step indicator on a series of dark surfaces — each completed step glows gently, future steps stay quiet.
The code
<div class="dm-onyx-bg">
<ol class="dm-onyx">
<li class="dm-onyx__step dm-onyx__step--done">
<span class="dm-onyx__dot"></span>
<div><b>Account created</b><small>10:42 AM</small></div>
</li>
<li class="dm-onyx__step dm-onyx__step--done">
<span class="dm-onyx__dot"></span>
<div><b>Email verified</b><small>10:44 AM</small></div>
</li>
<li class="dm-onyx__step dm-onyx__step--active">
<span class="dm-onyx__dot"></span>
<div><b>Profile setup</b><small>In progress</small></div>
</li>
<li class="dm-onyx__step">
<span class="dm-onyx__dot"></span>
<div><b>Workspace ready</b><small>Pending</small></div>
</li>
</ol>
</div> <div class="dm-onyx-bg">
<ol class="dm-onyx">
<li class="dm-onyx__step dm-onyx__step--done">
<span class="dm-onyx__dot"></span>
<div><b>Account created</b><small>10:42 AM</small></div>
</li>
<li class="dm-onyx__step dm-onyx__step--done">
<span class="dm-onyx__dot"></span>
<div><b>Email verified</b><small>10:44 AM</small></div>
</li>
<li class="dm-onyx__step dm-onyx__step--active">
<span class="dm-onyx__dot"></span>
<div><b>Profile setup</b><small>In progress</small></div>
</li>
<li class="dm-onyx__step">
<span class="dm-onyx__dot"></span>
<div><b>Workspace ready</b><small>Pending</small></div>
</li>
</ol>
</div>.dm-onyx-bg { padding: 24px; border-radius: 16px; background: #0a0a14; }
.dm-onyx {
list-style: none; padding: 0; margin: 0;
display: flex; flex-direction: column; gap: 0;
background: #14141f;
border: 1px solid #1f1f30;
border-radius: 10px;
overflow: hidden;
}
.dm-onyx__step {
display: flex; align-items: center; gap: 12px;
padding: 11px 16px;
border-left: 2px solid transparent;
}
.dm-onyx__step + .dm-onyx__step { border-top: 1px solid #1f1f30; }
.dm-onyx__step b { display: block; font: 600 12px system-ui, sans-serif; color: #cbd5e1; }
.dm-onyx__step small { font: 500 10px ui-monospace, monospace; color: #6b7080; }
.dm-onyx__dot {
width: 10px; height: 10px;
border-radius: 50%;
background: #2a2a3d;
flex-shrink: 0;
}
.dm-onyx__step--done .dm-onyx__dot { background: #6366f1; }
.dm-onyx__step--done b { color: #fff; }
.dm-onyx__step--active {
background: rgba(99, 102, 241, 0.06);
border-left-color: #6366f1;
}
.dm-onyx__step--active .dm-onyx__dot {
background: #818cf8;
box-shadow: 0 0 0 4px rgba(129, 140, 248, 0.15);
}
.dm-onyx__step--active b { color: #c7d2fe; } .dm-onyx-bg { padding: 24px; border-radius: 16px; background: #0a0a14; }
.dm-onyx {
list-style: none; padding: 0; margin: 0;
display: flex; flex-direction: column; gap: 0;
background: #14141f;
border: 1px solid #1f1f30;
border-radius: 10px;
overflow: hidden;
}
.dm-onyx__step {
display: flex; align-items: center; gap: 12px;
padding: 11px 16px;
border-left: 2px solid transparent;
}
.dm-onyx__step + .dm-onyx__step { border-top: 1px solid #1f1f30; }
.dm-onyx__step b { display: block; font: 600 12px system-ui, sans-serif; color: #cbd5e1; }
.dm-onyx__step small { font: 500 10px ui-monospace, monospace; color: #6b7080; }
.dm-onyx__dot {
width: 10px; height: 10px;
border-radius: 50%;
background: #2a2a3d;
flex-shrink: 0;
}
.dm-onyx__step--done .dm-onyx__dot { background: #6366f1; }
.dm-onyx__step--done b { color: #fff; }
.dm-onyx__step--active {
background: rgba(99, 102, 241, 0.06);
border-left-color: #6366f1;
}
.dm-onyx__step--active .dm-onyx__dot {
background: #818cf8;
box-shadow: 0 0 0 4px rgba(129, 140, 248, 0.15);
}
.dm-onyx__step--active b { color: #c7d2fe; }