Three bug fixes
Admin Feature Controls now visible
The config page HTML was wrapped in a full document structure (<!DOCTYPE html><html><body>...) which Jellyfin can't inject into its web shell. Stripped to a bare page fragment. The "Feature Controls" section now appears in Dashboard → Plugins → Achievement Badges.
Activity feed privacy actually works now
Root cause: two separate save functions (settings panel + notification prefs) each POSTed only their own subset of fields. The backend replaces the entire preferences object on save, so saving from one panel would reset the other panel's fields to defaults — including appearInActivityFeed. Both save functions now GET current prefs first, merge their changes in, then POST the complete object. No more field clobbering.
Light theme — comprehensive CSS fix
Added overrides for every remaining element invisible on white:
- Streak heatmap cells, personal records, server stats
- Notification preferences labels, badge card borders
- Compare stat names (SCORE, BADGES, PRESTIGE, etc.)
- Category completion ring labels + fractions
- Activity feed rows, goal cards, settings sections
- Muted text, input field borders