The component uses two base classes. .skel-bone-circle (the avatar, 48 × 48 px, border-radius: 50%) and .skel-bone (six rectangular surfaces) share the same ghost-grey background rgba(255, 255, 255, 0.08), position: relative and overflow: hidden. The .card-skel wrapper is 280 px of inner content with 20 px padding — rendered at 322 px including borders. The header row uses display: flex; gap: 14px: the avatar takes 48 px, the remaining div (flex: 1, 218 px) holds the title (14 px tall, 65 % = 142 px) and the subtitle (10 px, 45 % = 98 px).
The shimmer is carried by the ::after pseudo-element of each zone. It is positioned at position: absolute; inset: 0 and carries background: linear-gradient(90deg, transparent 0%, rgba(255, 255, 255, 0.10) 50%, transparent 100%) / 200% 100%. @keyframes shimmerSlide animates background-position from -200% 0 to 200% 0 over 1.8 s ease-in-out infinite. With a background image 200 % wide and the percentage-position formula (offset = p/100 × (W − 2W)), the bright center starts three element-widths off the right edge and ends one width off the left — the shimmer sweeps right to left. It is visible for about 25 % of the cycle (≈ 0.45 s).
The seven zones shimmer in sync: no animation-delay rule is present and all share delay: 0s. The three body lines measure 100 %, 100 % and 60 % (168 px) in width. The second line was intended to show 92 % via the CSS rule .card-skel-line:nth-child(2), but that rule never matches: the lines sit at positions 3, 4 and 5 inside .card-skel (after .card-skel-header and .card-skel-img). The :last-child rule at 60 % does apply correctly. The code contains no JavaScript.
Requires @keyframes, linear-gradient, background-size, animated background-position, position: relative/absolute, inset and overflow: hidden. No site CSS variables (var(--…)) — works on a blank page with no external context.
Without CSS animations (very old browser or disabled hardware acceleration), the zones display as static semi-transparent blocks — the loading structure remains understandable. The inset property requires Chrome 87 / Firefox 87 / Safari 14.1; on older browsers replace it with top: 0; right: 0; bottom: 0; left: 0.