582137790d
Web Home (web/src/routes/+page.svelte:196) stacks the 75 most-played tracks into 3 rows of 25 inside a single horizontal scroller; Android was rendering them as one long LazyRow which makes the section feel sparse and forces a lot of horizontal scrolling to reach mid-rank tracks. Operator request 2026-06-01. Replaces MostPlayedRow's LazyRow with a LazyHorizontalGrid where rows=Fixed(MOST_PLAYED_ROWS=3). Cards stay 140dp (matching web's w-36); density gain comes purely from stacking. Web is row-major (ranks 0..24 across the top row); LazyHorizontalGrid fills column-major. To match web's visual order, the input list is pre-chunked into 3 row-major rows then re-flattened column-by-column before being handed to the grid. With 75 tracks and 3 rows that's 25 columns, ranks 0/25/50 in column 0, 1/26/51 in column 1, etc. MOST_PLAYED_GRID_HEIGHT_DP=600 budgets ~188dp per row (140 cover + 8 spacer + 2 lines of text), plus 2 * 8dp inter-row spacing. Diverges from Flutter (still single-row); intentional, parity-map updated. Backflow to Flutter not tracked yet because the Flutter client is being retired.