453f8a387b
ShellScaffold already collects TrackActionsViewModel.transientMessages into its own SnackbarHost. Per-route, the shell's hiltViewModel< TrackActionsViewModel>() and the screen's hiltViewModel<TrackActions ViewModel>() resolve to the same NavBackStackEntry-scoped instance, so any kebab action fires the snackbar twice today (once in the screen's own SnackbarHost, once in the shell's). Strip the per-screen wiring from the four shell-wrapped screens that had it (Library, Search, AlbumDetail, PlaylistDetail): VM param, SnackbarHostState, LaunchedEffect, and the Scaffold's snackbarHost. The shell now owns the snackbar exclusively. NowPlayingScreen is intentionally left untouched -- it's outside the shell (full-screen route), so its own snackbar wiring is the only surface that shows the message.