header { max-width: 100%; width: 100%; .stack { overflow: hidden; display: grid; grid-template-columns: 1fr; &.glitch span { animation: glitch 340ms cubic-bezier(0.46, 0.29, 0, 1.24) 1 backwards calc(var(--index) * 120ms), jitter 2000ms ease infinite 2s alternate-reverse; } span { font-weight: bold; grid-row-start: 1; grid-column-start: 1; font-size: 4rem; --stack-height: calc(100% / var(--stacks) - 1px); --inverse-index: calc(calc(var(--stacks) - 1) - var(--index)); --clip-top: calc(var(--stack-height) * var(--index)); --clip-bottom: calc(var(--stack-height) * var(--inverse-index)); clip-path: inset(var(--clip-top) 0 var(--clip-bottom) 0); animation: jitter 2000ms ease infinite 2s alternate-reverse; &:nth-child(odd) { --glitch-translate: 8px; } &:nth-child(even) { --glitch-translate: -8px; } } } } @keyframes glitch { 0% { opacity: 0; transform: translateX(-50%); text-shadow: -2px 3px 0 red, 2px -3px 0 blue; } 60% { opacity: 0.5; transform: translateX(50%); } 80% { transform: none; opacity: 1; text-shadow: 2px -3px 0 red, -2px 3px 0 blue; } 100% { text-shadow: none; } } @keyframes jitter { 0% { text-shadow: -2px 3px 0 red, 2px -3px 0 blue; transform: translate(var(--glitch-translate)); } 2% { text-shadow: 2px -3px 0 red, -2px 3px 0 blue; } 4%, 100% { text-shadow: none; transform: none; } }