i18n + profile card back button + CASSETTE root cause fix
Multi-language support (en / fr / es)
~50 UI strings translated. Users can pick their preferred language in Settings, admin sets the server default in Feature Controls. Tab labels, section headers, button text, toasts all translate. Badge titles/descriptions not yet translated — that's ~170 badges and is future work.
Profile card back button
Added a fixed top-left circular arrow button with iOS safe-area inset support (44x44 touch target). history.back() primary, #!/achievements fallback. Fixes the iOS app trap where users got stuck with no way out.
CASSETTE/VINYL bug — root cause finally found
Previous fixes added a Material Icons allowlist to standalone.js but sidebar.js bypassed it entirely. Equipped badges with invalid icon names rendered raw text ("CASSETTE", "VINYL") in the sidebar showcase pills and header badge dots. Now sidebar.js has the same allowlist.
Also fixed 5 badge definitions with invalid Material Icons names:
- vinyl → album
- cassette → music_note
- sports → audiotrack
- mosque → public
- rocket → rocket_launch