My build was breaking old Safari, and no check could see it

I had added fallbacks for older browsers — a plain viewport height before the dynamic one, a solid colour before a mixed one — and considered the matter handled. A reviewer model pointed out that one of those fallback lines was missing from the built stylesheet. The minifier had removed it as a duplicate.

That was the small problem. The build tool’s default CSS target was a recent Safari, and for that target it had rewritten every min-width media query into the newer range syntax. A Safari older than that target skips such a block entirely, so for those visitors the desktop layout did not exist: one column, a squeezed game frame, no grid. A second defect sat next to it — a colour built from a custom property is accepted when the stylesheet is parsed and only fails later, which silently defeats the fallback line written above it. The header went transparent.

Neither defect existed in the source I had reviewed. Both existed in the file visitors received. So the fix was two things: the CSS target now names the same browsers the games are tested in, and the quality gate reads the built stylesheets of every page and rejects range-syntax media queries and unguarded modern values.

The lesson I keep relearning here: check the thing that is served, not the thing that was written.

Play what all this was for