Batch of 4 parallel units, rebased onto current develop and integrated:
- PHASE 1 split-view: clicking an email opens an in-place, collapsible + resizable
reading pane (shared EmailDetail extracted from Senders) instead of a new tab;
list stays interactive, selection preserved, mobile stacks (<768px); list gains
Skeleton loading + EmptyState. (FolderView, SearchResults, +EmailDetail, +split.css)
- PHASE 3 row polish: EmailRow gains onOpen (Gmail fallback kept), a new accessible
Checkbox primitive (ui/checkbox.jsx), 44px rows, clearer hierarchy + hover; keeps
the search why-matched highlight rendering. (EmailRow, ui/checkbox, styles.css)
- PHASE 4 bulk+keys: BulkToolbar hierarchy/responsive/clear-selection; keyboard nav
adds ArrowUp/Down + u=unread, hardened input guard. (BulkToolbar, useListKeyboardNav)
- PHASE 3/4 dashboard: remove dead HeatmapWidget, replace CategoryHeatmap with a
clickable Emails-by-Category bar (a11y: rank by text+count, not colour); Skeleton +
EmptyState on widgets. (widgets, Dashboard, client.js, styles.css)
Each unit was self-code-reviewed and built green; integrated build passes. Supersedes
PRs #40-43 (their branches had a stale 38-commit base).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>