Pinna-Brelstaff Illusion

Open fullscreen view @keyframes moveDot { 0% { background-position: calc(var(--tile) * 4.6) calc(var(--tile2) / -2), 0 0, 0 0, 0 0, 0 0, 0 0; } 100% { background-position: calc(var(--tile) * -5.2) calc(var(--tile2) / -2), 0 0, 0 0, 0 0, 0 0, 0 0; } } :root { --size: 90em; --tile: calc(var(--size) / 14); --tile2: calc(var(--tile) / 2); margin: 0; height: 100vh; overflow: hidden; background: #777; font-size: 1vmin; &::before, &::after { content: ""; --c: radial-gradient(#0000 0 0); width: var(--size); aspect-ratio: 1; position: absolute; top: 50%; left: 50%; translate: -50% -50%; background: var(--c), linear-gradient(#0000 var(--tile2), #777 0) 0 0 / var(--tile) var(--tile), linear-gradient(90deg, #0000 var(--tile2), #777 0) 0 0 / var(--tile) var(--tile), conic-gradient(at 1px 1px, #000 25%, #0000 0 50%, #000 0) 0 0 / var(--tile) var(--tile), conic-gradient(at calc(var(--tile2) - 1px) calc(var(--tile2) - 1px), #fff 75%, #0000 0) 0 0 / var(--tile) var(--tile); } &::after { --c: radial-gradient(#1fb 0.5em, #0000 calc(0.5em + 1px)) calc(var(--tile) * -5.2) calc(var(--tile2) / -2); scale: 1 -1; transform: translate(0, var(--tile2)); clip-path: polygon(33% 13%, 62% 13%, 62% 20%, 70% 20%, 69% 27%, 77% 27%, 77% 34%, 83% 34%, 84% 63%, 77% 63%, 76% 70%, 69% 70%, 70% 77%, 63% 77%, 62% 84%, 33% 84%, 34% 77%, 27% 77%, 27% 70%, 20% 70%, 19% 63%, 12% 63%, 12% 34%, 19% 34%, 19% 27%, 26% 27%, 26% 20%, 33% 20%); animation: moveDot 2s alternate linear infinite; } }

About This Illusion

This illusion is particularly dizzying. Follow the bluish dot as it moves from right to left and back again. It will appear as though parts of the tiled background are shifting, even though they are static. The only moving element is the dot.

From a CSS perspective, I coded the pattern using conic gradients, and applied it to the ::before and ::after pseudo-elements. I then flipped one upside down and clipped it.

Try This