feat(shell): metaball ambient + translucent bars/panels/controls, drop carousel fades

Smoke rounds 3-4 (owner feedback). Checkpoint during iteration.

Ambient (the big one): rewrote ambient.wgsl from translating gaussian blobs to a
METABALL field (r²/d² summed + smoothstep iso-surface) with 2-octave domain warp
— lobes fuse/stretch/split like an amoeba / lava lamp (the Cider motion that was
missing), faster clock, more contrast.

Surfaces made background-aware (translucent when the dynamic background is on):
- Search results view (root + toolbar), artist Network panel + its tab-row
  header (transparent to avoid double-translucent compounding), JUMP TO bar
  (JumpNavBar bar-bg passed in — can't import ShellState without a cycle).
- Discover toolbars + tab pill + BrowseHeaderTools; SearchResultsView toolbar.
- CircleAction (shared: playlist/album/artist/etc. action buttons) on-surface
  secondary fill goes glass; playlist Sort dropdown; QbzSelect closed control.
- New app-background-bar-alpha knob (0.3, env QBZ_BG_BAR_ALPHA): thin bars go
  MORE transparent than panels (surface-alpha 0.5).
- Content well: frosted tint (0.22) + 1px hairline border → distinct panel.
- Album/Artist header gradient auto-suppressed under the dynamic background
  (they clashed); header text stays light on the dynamic backdrop.
- Discover carousel edge-fade "shadows" hidden when active (Carousel /
  PlaylistCarousel / ArtistCarousel / PinnedCarousel).

Base: 76ea5a82. Prior checkpoint: 4e405338.

cc
This commit is contained in:
vicrodh committed 2026-07-17 08:08:33 -06:00
1 parent 4e40533870
commit a0f5cf2bf5
20 files changed
+169 -87

No files matched your search

+4
View File
@@ -3254,6 +3254,10 @@ export global AppearanceState {
// of the shell chrome when the background is active.
in-out property <float> app-background-dim: 0.35;
in-out property <float> app-background-surface-alpha: 0.5;
// Thin BARS (jump-nav, discover toolbar, network tab row, playlist action
// bar) go MORE transparent than the panels — they read as chrome strips over
// the frosted content panel, not solid bars. Env QBZ_BG_BAR_ALPHA.
in-out property <float> app-background-bar-alpha: 0.3;
// Callbacks. Unwired in this replica — the Rust side may bind them
// later. Kept generic (key + value) so the controller can dispatch.