base './' emits relative asset URLs; the manifest, the service-worker registration and sw.js's precache resolve against their own location; the four hardcoded /image literals turn relative. Verified headless under a simulated /edentext/ subpath: boots, types, SW scope correct.