.skeleton { @apply pointer-events-none relative overflow-hidden rounded-sm bg-surface-tertiary/70; } /* TODO: Skeleton with parent are not visible */ /* Animation types */ .skeleton--shimmer { &::after { @apply absolute inset-0 -translate-x-full animate-skeleton bg-linear-to-r from-transparent via-surface-tertiary to-transparent content-['']; } /* When applied to a parent container with multiple skeletons */ &:has(.skeleton) { &::after { content: none; } /* Single synchronized shimmer that passes over all children */ &::before { @apply absolute inset-0 -translate-x-full animate-skeleton content-['']; background: linear-gradient( 90deg, transparent 0%, rgba(255, 255, 255, 0.5) 50%, transparent 100% ); z-index: 10; pointer-events: none; /* Use mix-blend-mode to only show over skeleton elements */ mix-blend-mode: overlay; } /* Ensure children don't have their own shimmer */ & .skeleton { &::after { content: none; } } } } .skeleton--pulse { @apply animate-pulse; } .skeleton--none { }