fix: stop playback stutter and save failures via async yt-dlp, per-download OPFS workers, lazy playback blobs, GPU composite trims, and landscape pane scrolling

This commit is contained in:
Jonathan Sykes
2026-07-02 23:40:49 +08:00
parent 2af2eebacc
commit ed9f93b0b7
6 changed files with 237 additions and 25 deletions

View File

@@ -1305,6 +1305,12 @@ input[type="range"]::-webkit-slider-thumb:hover { transform: scale(1.25); }
@media (max-width: 1080px) {
.body { flex-direction: column; }
.list-pane { width: auto; border-left: none; border-top: 1px solid var(--line-soft); }
/* In the stacked layout both panes must be allowed to shrink below their
content height (flex min-height defaults to auto), or they overflow the
hidden .body instead of engaging their own scrollbars — on a landscape
phone that made "Up next" unreachable. */
.player-pane { min-height: 0; }
.list-pane { min-height: 0; }
}
/* ============================================================================
@@ -1878,6 +1884,31 @@ input[type="range"]::-webkit-slider-thumb:hover { transform: scale(1.25); }
.hero-tagline { font-size: 13px; }
}
/* ============================================================================
* INSTALLED PWA ON TOUCH DEVICES — drop expensive full-screen composites
*
* The film-grain overlay (mix-blend-mode over the whole viewport), the fixed
* gradient wash, and the chrome backdrop-blurs all re-composite over the
* playing <video> every frame. On iPhones that GPU contention audibly
* stutters audio — backgrounding the PWA (which stops rendering) made
* playback smooth, which is how this was diagnosed. Same cuts as
* data-perf="on", applied automatically where they hurt most; desktop
* browsers and fine-pointer devices are untouched.
* ========================================================================== */
@media (display-mode: standalone) and (pointer: coarse) {
body::before,
body::after { display: none; }
.topbar,
.bottom-nav,
.mini-bar-inner {
backdrop-filter: none;
-webkit-backdrop-filter: none;
}
.player-pane:not(.empty) .player-stage {
box-shadow: 0 0 0 1px var(--line) inset;
}
}
/* ============================================================================
* PORTRAIT PWA — mobile app design refresh
*