Feedback

Loading and status affordances: skeletons shimmer with the motion tokens and fall back to a static fill under reduced motion; progress is a thin blue bar; notices are inline; avatars carry initials.

Skeleton

<div style="display:flex;gap:var(--space-md);align-items:center;flex:1">
	<span class="saga-skeleton saga-skeleton--circle"></span>
	<div style="flex:1">
		<span class="saga-skeleton saga-skeleton--text"></span>
		<span class="saga-skeleton saga-skeleton--text"></span>
		<span class="saga-skeleton saga-skeleton--text"></span>
	</div>
</div>
<span class="saga-skeleton saga-skeleton--block"></span>
<span class="saga-skeleton" style="width:12rem"></span>

Skeleton inside a stat card

<div class="saga-card saga-card--stat" style="min-width:14rem" aria-busy="true">
	<span class="saga-skeleton" style="width:3rem;height:1.5rem"></span>
	<span class="saga-skeleton saga-skeleton--text" style="width:7rem"></span>
	<span class="saga-skeleton saga-skeleton--text" style="width:10rem"></span>
</div>

Progress

Set the fill with the --value custom property; keep the numbers on the element for assistive tech.

<div class="saga-progress" role="progressbar" aria-valuenow="35" aria-valuemin="0" aria-valuemax="100" aria-label="Upload"><div class="saga-progress__bar" style="--value:35%"></div></div>
<div class="saga-progress saga-progress--lg" role="progressbar" aria-valuenow="80" aria-valuemin="0" aria-valuemax="100" aria-label="Completion"><div class="saga-progress__bar" style="--value:80%"></div></div>
<div class="saga-progress saga-progress--indeterminate" role="progressbar" aria-label="Working"><div class="saga-progress__bar"></div></div>

Notices

Reports refresh nightly; today's sessions appear tomorrow.
Out of window This session starts before the program's first day.
Survey launched in 1 session.
<div class="saga-notice" role="status"><span class="saga-notice__icon"><iconify-icon icon="material-symbols-light:info-outline-rounded"></iconify-icon></span><div class="saga-notice__body">Reports refresh nightly; today's sessions appear tomorrow.</div></div>
<div class="saga-notice saga-notice--warning" role="status"><span class="saga-notice__icon"><iconify-icon icon="material-symbols-light:warning-outline-rounded"></iconify-icon></span><div class="saga-notice__body"><span class="saga-notice__title">Out of window</span> This session starts before the program's first day.</div></div>
<div class="saga-notice saga-notice--danger" role="alert"><span class="saga-notice__icon"><iconify-icon icon="material-symbols-light:error-outline-rounded"></iconify-icon></span><div class="saga-notice__body">Your changes were not saved.</div><button class="saga-btn saga-btn--quiet saga-btn--icon saga-btn--sm saga-notice__dismiss" aria-label="Dismiss"><iconify-icon icon="material-symbols-light:close-rounded"></iconify-icon></button></div>
<div class="saga-notice saga-notice--success" role="status"><span class="saga-notice__icon"><iconify-icon icon="material-symbols-light:check-circle-outline-rounded"></iconify-icon></span><div class="saga-notice__body">Survey launched in 1 session.</div></div>

Avatars

ow OW OW TE ESIRAJ
<span class="saga-avatar saga-avatar--sm">ow</span>
<span class="saga-avatar">OW</span>
<span class="saga-avatar saga-avatar--lg">OW</span>
<span class="saga-avatar saga-avatar--inverse">TE</span>
<span class="saga-avatar" aria-label="Tutor"><iconify-icon icon="material-symbols-light:person-outline-rounded" class="saga-icon saga-icon--lg"></iconify-icon></span>
<span class="saga-avatar-group"><span class="saga-avatar saga-avatar--sm">ES</span><span class="saga-avatar saga-avatar--sm">IR</span><span class="saga-avatar saga-avatar--sm">AJ</span></span>

Icon sizes

<iconify-icon class="saga-icon" icon="material-symbols-light:edit-outline-rounded"></iconify-icon>
<iconify-icon class="saga-icon saga-icon--lg" icon="material-symbols-light:edit-outline-rounded"></iconify-icon>
<iconify-icon class="saga-icon saga-icon--xl" icon="material-symbols-light:edit-outline-rounded"></iconify-icon>