- DM: add dl_missing_* fields to AppCtx for sequential queue
- DM player: count_missing_in_season, find_next_missing, download_episode, download_missing_season_start/next
- DM main onResult: auto-continue queue when dl_missing_active, updates status DL X/Y, finishes with done ok/fail
- SdDownloader: file exists returns true (Already on SD) with total=file size, not false
- SdDownloader: set_result_and_close minimal bundle (only success bool) to avoid internal heap OOM crash on close
- SdDownloader: Cancel button becomes Close after done, calls tt_app_stop() directly (manual close per request, auto-close unreliable)
- Fixes crash on close observed in demo mode (file exists) and after download done
Tested on 192.168.68.133: SdDownloader shows Already on SD + Close, DM shows S10 5/6 after sequential, no crash on open/close cycles
- DiscoveryMountain: new UI optimized for episode list (not player anymore)
- Shows episodes for current season, indicates if on SD card (green=On SD, gray=Not DL)
- Per-episode action: download single via SdDownloader or play via Mp3Player
- DL Missing button for missing eps in season (currently single first missing, batch reverted)
- Season selector screen with cached/total counts
- Top-right X close button
- Seasons/episodes cached to cache.json to avoid network fetch every launch
- Fixes: overlay deletion race (deferred timer), ui_timer leak causing crash on close, season selection overwritten by fetch task
- Fixes: unicode ellipsis squares
- SdDownloader: revert to stable single-file mode (batch array caused crashes)
- Remove batch fields and array allocation, keep single url/path download
- Result bundle simple success/path/bytes
- Mp3Player: add resume position support (pos_sec from bundle, total_sec estimate, total_decoded_samples), return position on exit via bundle for DM to save
Tested on 192.168.68.133: opens, shows S10 2/6, Play/DL buttons, close works, no crash on open/close cycles, cache shows 'Loaded from cache, refreshing...'