- git: fetch branch and changed files in one `git status --porcelain --branch` (3 subprocesses -> 2)
- transcript: read only the last 1 MB from the file tail instead of parsing the whole jsonl
- color: add a shared palette and route heat() and every widget through it
- widgets: drop the preview bridge functions; preview now calls the component fns directly
- add unit tests for the pure helpers (parse_branch, interval merge, heat, percentages, formatting)