Google’s AMP cache processes my site correctly, whereas Cloudflare’s has a bug. Compare and note the navigation icons:
The icons are SVGs with a USE attribute that reference the source inline SVG data by #identifier… Cloudflare is erroneously transforming those #ids and breaking them. Avoiding the USE would likely fix it, but this pattern permits multiple image references from one source - and all browsers I’ve tested render it properly.
This appears to be a bug in Cloudflare’s backend that transforms the USE #id HREFs.