About this set
One activity panel shown in the three states a real tab panel goes through: Loaded, with three rows of avatars, names and recent actions; Loading, with skeleton rows that shimmer; and Empty, with an icon, a heading and a line of guidance. The tabs here switch between the states so you can design and review all three side by side, and each panel is ready to copy into an app that fetches tab content. The loading panel carries aria-busy and a visually hidden Loading activity message, and its skeleton rows are hidden from screen readers so they are not read out as empty content. The plain CSS version is a radio group with :has() choosing the panel and a gradient shimmer on each skeleton bar. The Bootstrap version uses .nav-pills with the Tab plugin and Bootstrap’s own placeholders with .placeholder-wave, recoloured to soft grey. The Tailwind version draws the skeleton with after: utilities and a custom shine animation, and uses a small WAI-ARIA tabs script.
What’s included
- Loaded, loading and empty versions of the same panel
- Skeleton rows are aria-hidden, with a hidden loading message
- Bootstrap version uses .placeholder and .placeholder-wave
- Shimmer stops under prefers-reduced-motion
- Avatar colours darkened so the white initials pass 4.5:1
Accessibility
In the plain CSS version the tabs are a radio group, not ARIA tabs: the radios sit inside an element with role="radiogroup" and an aria-label, each takes its name from its visible label, Tab enters the group and the arrow keys move the selection (radios have no Home or End). In the Bootstrap and Tailwind versions they follow the WAI-ARIA tabs pattern: role tablist, tab and tabpanel, aria-selected, aria-controls, a roving tabindex, arrow keys plus Home and End. Focus shows a 2px indigo outline. The loading panel has aria-busy and hidden text, and the shimmer animation is switched off under prefers-reduced-motion.
Customise it
Change the skeleton colour #eceff5 and the shimmer timing in .sk (plain CSS), the .sk .placeholder rule (Bootstrap) or --color-tab-skeleton and --animate-shine (Tailwind). The selected tab colour is #4f46e5, --bs-nav-pills-link-active-bg or --color-tab-accent.

















