From e391bea837f9740aa8b303dedb6f87c09abd4201 Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Sat, 2 May 2026 22:08:46 +0300 Subject: fix detached playback and scan progress --- web/css/layout.css | 34 +++++++++++++++++++++ web/css/player.css | 87 ++++++++++++++++++++++++++++++++++++++++++++++-------- 2 files changed, 109 insertions(+), 12 deletions(-) (limited to 'web/css') diff --git a/web/css/layout.css b/web/css/layout.css index e52a083..73fd9f5 100644 --- a/web/css/layout.css +++ b/web/css/layout.css @@ -32,6 +32,40 @@ body { } .site-header .spacer { flex: 1 1 auto; } +.scan-indicator { + display: inline-flex; + align-items: center; + gap: 0.4rem; + max-width: min(22rem, 45vw); + padding: 0.25rem 0.55rem; + border: 1px solid var(--border); + border-radius: var(--radius-sm); + background: var(--bg-elevated); + color: var(--text-secondary); + font-size: 0.78rem; + white-space: nowrap; +} +.scan-indicator.hidden { + display: none; +} +.scan-indicator span:last-child { + overflow: hidden; + text-overflow: ellipsis; +} +.scan-dot { + width: 0.5rem; + height: 0.5rem; + flex: 0 0 auto; + border-radius: 50%; + background: var(--accent); + box-shadow: 0 0 0 0 var(--accent-soft); + animation: scanPulse 1.4s ease-out infinite; +} +@keyframes scanPulse { + 0% { box-shadow: 0 0 0 0 var(--accent-soft); } + 100% { box-shadow: 0 0 0 0.45rem transparent; } +} + /* Sidebar */ .sidebar { position: fixed; diff --git a/web/css/player.css b/web/css/player.css index 5628dfd..f3d93ef 100644 --- a/web/css/player.css +++ b/web/css/player.css @@ -7,7 +7,7 @@ border-top: 1px solid var(--border); z-index: 60; display: none; /* hidden by default until something plays */ - transition: inset var(--transition-base); + transition: inset var(--transition-base), width var(--transition-base), height var(--transition-base), box-shadow var(--transition-base); } .player.open { display: block; @@ -15,8 +15,36 @@ .page.has-sidebar .player { inset: auto 0 0 var(--sidebar-width); } -.page.has-sidebar .player.collapsed { - inset: auto auto 0 0; + +/* Collapsed: floating bottom-left card sized to video aspect ratio */ +.player.collapsed { + inset: auto auto 1rem 1rem; + width: var(--collapsed-w, 320px); + height: var(--collapsed-h, 240px); + border-radius: 0.5rem; + box-shadow: 0 8px 32px rgba(0,0,0,0.4); + border: 1px solid var(--border); + overflow: hidden; +} +.player.open.collapsed { + display: flex; + flex-direction: column; +} +.player.collapsed .stage { + flex: 1 1 auto; + height: auto !important; + overflow: hidden; +} +.player.collapsed .controls { + flex: 0 0 auto; + padding: 0.35rem 0.5rem; + gap: 0.35rem; + border-top: 1px solid var(--border); +} +.player.collapsed .big-play .play-icon { + width: 2rem; + height: 2rem; + font-size: 0.8rem; } .player.is-fullscreen { inset: 0; @@ -26,6 +54,35 @@ justify-content: center; } +.detach-page { + margin: 0; + width: 100vw; + height: 100vh; + overflow: hidden; + background: var(--bg-body); +} + +/* Detached popup: fill the whole popup window */ +.player.detached { + position: relative; + inset: 0; + width: 100%; + height: 100%; + border-radius: 0; + border: none; + box-shadow: none; + display: flex; + flex-direction: column; +} +.player.detached .stage { + flex: 1 1 auto; + height: auto !important; + overflow: hidden; +} +.player.detached .controls { + flex: 0 0 auto; +} + .player .stage { position: relative; background: var(--player-stage-bg); @@ -65,15 +122,6 @@ background: var(--player-stage-bg); } -/* Collapsed stage (controls still visible) */ -.player.collapsed .stage { - height: 0 !important; - overflow: hidden; -} -.player.collapsed .big-play { - display: none; -} - /* Overlay controls */ .player .controls { display: flex; @@ -156,6 +204,21 @@ accent-color: var(--accent); } +.detached-bar { + position: fixed; + inset: auto 0 0 0; + background: var(--player-bg); + color: var(--text-primary); + border-top: 1px solid var(--border); + z-index: 59; + padding: 0.5rem 0.75rem; + text-align: center; + font-size: 0.85rem; +} +.detached-bar.hidden { + display: none; +} + /* Big play button */ .big-play { position: absolute; -- cgit v1.2.3