Restructures the artist page so the gradient header truly covers the
full window width and the network sidebar behaves like Tauri's
sticky aside: anchored to natural-y below the header while the page
is at the top, then pinned to sticky-top once the user scrolls past
the header. The bottom edge stays flush with the now-playing bar.
Layout:
- The outer HorizontalLayout wrapping (Flickable + sidebar column)
is gone. The Flickable is now a direct child of ArtistPageView at
full root.width, so the gradient Rectangle inside it also runs
edge-to-edge. (Tables analogy: header row is colspan=2.)
- Inside the page VerticalLayout, body content (search, popular
tracks, release grids) is wrapped in a HorizontalLayout with a
horizontal-stretch main column on the left and a 300px empty
placeholder on the right when the sidebar is open. The main
column never extends under the sidebar.
Sidebar:
- The sidebar block is no longer a sibling of the Flickable inside
a HorizontalLayout — it's an absolutely-positioned Rectangle
overlay anchored at x = root.width - 300, y bound to
`max(natural-top + page-flickable.viewport-y, sticky-top)`. At
scroll = 0 the sidebar sits at natural-top = 320 (just below the
header). As the user scrolls, the sidebar tracks the page upward
until it pins at sticky-top = 44 (reserving room for the future
sticky JUMP TO bar — harmless until that lands).
- height = root.height - self.y, so the sidebar always extends to
the bottom of the page area (top of the now-playing bar). The
32px bottom inset is gone — no more gap under the sidebar.
cc