What's Changed
✨ New features
- YouTube Music home feed — home shelves (songs, artists, albums, playlists, mixes) now actually load from YTM instead of a dead section (#26)
- YT-only feed fallback + honest empty states — feed builds from YT liked/history/charts when Last.fm is unconfigured or failing; empty Home reports the real cause instead of always blaming offline (#23, #18)
- Windows media keys support — hardware play/pause/next/previous now drive the player
- Linux MPRIS support — now-playing metadata, status, and transport exposed on org.mpris.MediaPlayer2, so status bars, playerctl, and media keys work (#28)
⚡ Performance
- Static ambient background + half-res aura and blur-free glass on Now Playing — major raster-cost reduction
- Faster cold starts via addon search parallelization
- Throttled lyrics clock/position churn; cheaper motion art and tile state
🐛 Fixes
- macOS: YouTube sign-in WebView sent a bare Safari UA and got the "not optimized for your browser" page — now sends a Chrome UA suffix
- macOS: false "no internet" state fixed (#19)
- Windows: YT WebView login getting stuck + blank username fixed (#32)
- Linux: single reused hidden BotGuard WebView — no more per-song popup/taskbar flash/9s stall, and no destroy segfault
- Track resolution now matches Android (tier-aware search + ranked fallback)
- Global in-app shortcuts work regardless of focus
- Reliable progressive DASH serving
- Unmuting restores pre-mute volume; like button updates on state change