Accessibility

Decorative surfaces, kept alt text, and a still frame for reduced motion.

Decorative by default

Backgrounds are rendered aria-hidden. Put real text on top of them, never inside. If a surface carries meaning, label it yourself with an aria-label on its parent.

Images keep their alt

DitherImage leaves the img and its alt in the DOM. Screen readers announce the alt text whether or not the shader starts, and with JavaScript off the original photo shows.

Reduced motion

With prefers-reduced-motion: reduce a surface draws one frame at the effect’s still time and stops. No looping animation, no shimmering. This is per-element, so it also works when the OS setting changes while the page is open.

Without WebGL

If WebGL2 is unavailable an ordered surface renders nothing; build pages so the background is decorative. DitherImage still shows the plain img.