A present-but-empty PUBLIC_HOST_AUDIO_URL (e.g. `PUBLIC_HOST_AUDIO_URL=` in a
compose file) bypassed the default and stayed blank, so the UI built
root-relative audio links like `app.url/song.mp3` that 404'd, while video links
kept working off PUBLIC_HOST_URL.
Backend: a blank PUBLIC_HOST_AUDIO_URL now inherits PUBLIC_HOST_URL, matching the
README ("same as PUBLIC_HOST_URL but for audio downloads"). Both blank still
stays blank, so intentional root serving is preserved.
Frontend: buildDownloadLink and buildChapterDownloadLink fall back to
PUBLIC_HOST_URL when the audio host is blank.
Added backend and UI regression tests, both verified red against the unfixed
code.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>