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.