Clear the shader texture when opening or stopping playback and default it to black, preventing stale frames from appearing during transitions. Add a rendering test for startup, stop, and reopen behavior.
Replaces custom SVG UI icons with Material Symbols assets across player controls, details, and sidebar navigation, including updated import metadata and icon mappings for library types and skip controls. Adds in-player control labels that appear on hover/focus (including timeline and pause/play state changes), plus a new `test_player_tooltips` coverage path wired into Linux and Windows CI. Updates README usage/licensing notes and export presets to bundle Material icon attribution/license files.
Updates player navigation so the Library action returns to the currently playing movie or series details instead of the generic library view. For episodes, it restores the correct series season and keeps series context open; selecting the active title resumes playback without restarting the stream. Adds a new `test_player_return` integration test and wires it into Linux/Windows CI, plus README updates documenting the behavior and test command.
When an episode ends, the app now keeps the library hidden and shows the loading indicator while the next episode is fetched in VR. This prevents the library from reappearing during autoplay and ensures the wait state stays visible until the next video is ready.
Increase the on-screen keyboard height to fit a new shortcuts row, add `http://` and `https://` buttons, and extract insertion into a shared helper so shortcuts bypass the uppercase transform while letter keys keep existing casing behavior.
Implement automatic next-episode playback with a 5-second on-screen countdown, cancellation, and series-order lookup that works across season boundaries. Update the loading UI and VR pointer targeting to support the countdown flow, adjust shell/login presentation, and add autoplay coverage to tests and CI.
Show a dedicated loading spinner while playback is preparing, seeking, or buffering. This exposes buffering state from the Android and mpv backends, wires the indicator into the VR player UI, updates playback flow to keep it visible even when controls are hidden, and adds coverage for the new loading-state behavior.
Adds a new Passthrough viewing environment alongside Void and Theatre, including runtime support detection, environment blend switching, and safe fallback to Void when unsupported. Updates settings persistence/validation and the settings UI to expose Passthrough with proper disabled state and guidance. Also wires passthrough into world/main environment application flow, adds focused passthrough and settings tests, and introduces Android build setup to fetch/pin OpenXR vendor assets with checksum verification.
Introduces a new `TheatreEnvironment` with tiered seating, curtains, batched geometry, recentering, and fixed cinema-screen projection sizing. Settings UI is split into separate Screen and Environment pages so Theatre/Void can be switched independently, with Void position controls disabled in Theatre and screen reset no longer changing the environment choice. Main/world behavior and README were updated to reflect the new environment flow, and new/updated tests cover persistence, UI behavior, projection rules, and environment switching.
Introduces reusable `SCREEN_KEYS` in settings and adds `reset_screen()` to restore screen-related defaults only. The settings UI now shows a “Reset to defaults” button for the screen section, rebuilds that section after reset, reapplies layout/focus, emits screen updates, and saves immediately. It also fixes format/swap handlers so toggles update local state consistently. Tests were expanded to cover reset behavior, persistence boundaries, save count, and refreshed UI values.
Replaces the old screen-only settings page with a new Settings view that includes library sorting plus screen/environment controls, updates UI labels/tooltips from “Screen settings” to “Settings,” and documents the new behavior in the README. Adds persisted library sort field/order preferences, applies them to Jellyfin library requests while keeping Home fixed to newest-first, and implements stable random pagination via a cached catalog snapshot (cleared on sign-out). Includes new settings tests covering persistence/defaults, API query behavior, random ordering across pages, and the new settings UI interactions.
Randomize the featured library hero while avoiding the previously shown item for each library, rename the default section heading to "Recently Added," and remove the hero eyebrow label to simplify the header.
Replaces the details page’s text-only cast list with a dedicated `CastCarousel` UI component that shows portrait cards, names, and roles in a horizontally scrollable row. It adds previous/next controls, hides the internal scrollbar, and handles horizontal wheel input without breaking vertical page scrolling.
Also adds `tests/test_cast.gd` to cover card rendering, image-tag based portrait loading, navigation button state, wheel behavior, long-text layout safety, and responsive sizing.
This change makes VR pointer input detect horizontal stick movement and emit horizontal mouse-wheel events while preserving vertical scrolling behavior. It also adds a regression test covering carousel scrolling with right and left joystick input.