Small integration issue after the three M3 features land — completes the functional requirements. ## Tasks - [ ] Wire `SubjectFilter` + `SortSelect` + `FavoritesView` into the viewer App (shared `t19.preferences` state, subject change resets current book) - [ ] End-to-end manual check: choose subject + sort, reload (sessionStorage), favorite, close + reopen browser (localStorage) - [ ] App interaction tests updated: filter change → fetch + reset; sort change → order changes, no refetch; snapshot updated deliberately - [ ] Cross-check mobile viewport (portrait/landscape) once controls are in ## Acceptance criteria - [ ] All functional requirements demonstrable in one session - [ ] `npm run lint` / `npm test` / `npm run build` pass, zero warnings Branch `feat/<n>-preferences-wiring` from main. Part of M3 (due Fri 11/9).