1daea79f64
android / Build + lint + test (push) Has been cancelled
TrackRow now consumes the LocalServerHealth CompositionLocal (provided once at MainActivity from ServerHealthController.state). When the server is Offline or ServerDown and the track id isn't in LocalCachedTrackIds, the row dims to 0.4 alpha and a tap fires a Toast instead of attempting playback. Replaces the silent "tap-and-fail-to-OfflineException" UX with explicit at-a-glance signaling of which rows in a long list will work. Trailing slot (kebab / like / playlist-add) stays interactive so write affordances can route through MutationQueue — Phase 5 gates those at the action level.