Split monolithic script.js (78K lines) into 17 domain modules
Extracts the single 77,957-line script.js into focused modules:
core.js (874) - Global state, confirm dialog, websocket, constants
init.js (2358) - Initialization, personal settings, navigation
media-player.js (2398) - Media player, audio, visualizer, radio
settings.js (3657) - Settings page, quality profiles, API keys, auth
search.js (1542) - Search functionality, page data loading
sync-spotify.js (2538) - Spotify sync, YouTube backend, hero section
downloads.js (6398) - Wing It, batched polling, cancel, notifications
wishlist-tools.js (7234) - Wishlist, matched downloads, tools, retag
sync-services.js (9076) - Tidal, Deezer, Beatport, YouTube, ListenBrainz sync
artists.js (4610) - Artists page, artist downloads
api-monitor.js (3798) - API rate monitor gauges
library.js (6652) - Library, artist detail, enhanced management
beatport-ui.js (3902) - Beatport sliders, genre browser
discover.js (8920) - Discover page and all sub-sections
enrichment.js (3551) - All enrichment workers, library repair
stats-automations.js (7575) - Stats, automations, issues, import
pages-extra.js (2874) - Playlist explorer, server playlists, active downloads
Load order: core.js first (globals), init.js last (DOMContentLoaded).
All other modules define functions and load in any order.
No functional changes - pure extraction along existing section boundaries.