Changed
[PERF]Focus restoration MutationObserver scoped fromdocument.bodyto.deck-shelves-root— fewer mutation callbacks during idle and user navigation[PERF]Recents validation effect made reactive toshelves/hideRecentsSettingdeps instead of polling every 5s — zero idle work when nothing changes[PERF]Removed 10s fallbacksetInterval(applyPatches)in HomeInject — redundant with the MutationObserver + popstate/hashchange listeners already wired- "Show background art" toggle is now hidden when "Hide recent games" is inactive (instead of disabled) — removes dead UI state
- "Show background art" label updated across all 16 locales to clarify it applies to the first shelf
- QAM action buttons regrouped: Add / Import / Export on the left; Import from TabMaster on the right
- QAM button row alignment fixed: buttons now flush with the 16 px QAM edge instead of over-indented
- Shelf action button (⋯) right-aligned to match the TabMaster import button position
- Card dimensions discovered from the native SteamOS shelf are now persisted to
localStorage(ds-cardsize) per viewport/DPI, so cold boot reuses the last-session values instead of briefly rendering the hardcoded fallback before re-measuring — eliminates the initial card reflow. Cache is keyed byinnerWidth/innerHeight/devicePixelRatioand re-measured whenever the viewport changes. - About page doc sections now render inside the native SteamOS
DialogBody+DialogControlsSection, matching the container decky-loader itself uses for its own settings pages. This restores scrolling on every About subpage (Overview / How to / Shelves / Filters / Support) without a custom bounded-height wrapper.
Fixed
- Focus restoration after returning from a game detail screen (B button): focus now reliably lands back on the exact card/shelf the user activated, instead of intermittently snapping to the first shelf. Root cause was a mix of (a) duplicate activation via
onActivate+onOKButton+vgp_onoklistener pushing multiple history entries (fixed with a 400 ms dedupe guard on card activation), (b) ahideRecentseffect re-running on everyshelves.lengthchange and hijacking focus to the first shelf (now no-ops when something in the shelves root already hasgpfocus), and (c) the restore loop racing Steam's native popstate handler. Restoration now syncs Steam'sm_lastFocusNodeat A-press time for a deterministic native landing, and the post-popstate loop retries onrequestAnimationFramefor up to 800 ms — covering the 1–3 frame window where React remounts cards and the gamepad nav tree is rebuilt. - "Installed" filter no longer includes every UnifiDeck shortcut as installed — UnifiDeck marks all its shortcuts
installed: truein the app overview; the filter now cross-references the[Unifideck] Installedcollection (the same source TabMaster-based tabs use) for non-Steam apps, falling back tosize_on_disk/ local playtime when the collection is absent. Also extended the non-Steam detector to handle UnifiDeck's numericapp_typevalue.