Components / Feedback & Status / Skeleton
Skeleton beta
Loading placeholders with the same geometry as the real content, so the page never jumps.
Uses: Avatar — include its CSS alongside this one.
<div style="display:grid;gap:12px;max-width:380px" aria-hidden="true">
<div style="display:flex;gap:12px;align-items:center">
<span class="k-sk k-sk-circle" style="width:40px;height:40px"></span>
<div style="display:grid;gap:7px;flex:1"><span class="k-sk" style="height:12px;width:46%"></span><span class="k-sk" style="height:12px;width:72%"></span></div>
</div>
<span class="k-sk" style="height:12px"></span>
<span class="k-sk" style="height:12px;width:84%"></span>
<span class="k-sk" style="height:64px;border-radius:var(--k-radius-lg)"></span>
</div>/* KATA Skeleton */
.k-sk{display:block;border-radius:var(--k-radius-sm);background:linear-gradient(90deg,var(--k-bg-soft) 25%,var(--k-line) 50%,var(--k-bg-soft) 75%);background-size:200% 100%;animation:k-shimmer 1.4s ease-in-out infinite}
.k-sk-circle{border-radius:50%}
@keyframes k-shimmer{0%{background-position:120% 0}100%{background-position:-80% 0}}
@media (prefers-reduced-motion: reduce){.k-sk{animation:none}}
Usage
Match the skeleton to the layout it replaces — same widths, same heights. If the wait passes a second, prefer a spinner with a label instead.
Accessibility
Skeletons are aria-hidden. Announce loading once on the container with role="status"; do not animate for users with prefers-reduced-motion.