Sort select that changes how books are presented (course requirement: a choice affecting both selection and presentation). ## Tasks - [ ] `SortSelect` component: accessible `<select>` with `<label>` — options: Title A–Z, Title Z–A, Newest first, Oldest first - [ ] **Sort client-side** over the already-fetched list (never refetch on sort change — graded criterion) - [ ] Persist the chosen sort in `sessionStorage` under `t19.preferences` (`{ "subject": ..., "sort": ... }`); restore on reload; tolerate missing/corrupt data - [ ] Tests: sort change causes **zero** additional API calls, ordering matches the selected option, reload restores the choice ## Acceptance criteria - [ ] `npm run lint` / `npm test` / `npm run build` pass, jsx-a11y clean Branch `feat/<n>-sorting` from main. Part of M3 (due Fri 11/9).