A single full-screen fragment shader in raw WebGL2 — domain-warped noise through a cosine palette. 1.4 KB gzipped, versus 175 KB just to import three.js. When the brief only needs "expensive-looking motion" behind a headline, this is the whole answer.
Dithering. An 8-bit screen cannot represent a smooth dark gradient, so it quantises it into visible rings — and banding is the single most reliable tell of a generated background. Adding ±0.5/255 of noise per pixel disperses it into grain you cannot see. It is one line, and it is most of the difference between this reading as premium or as a screensaver.
This is the one place WebGL is still the right call — because there is no asset to bake. Everything else in this lab is an image.