feat(repo-appearance): tint shelf spine and add icon to spine header
- ShelfSpineView reads `@Shared(.repositoryAppearances)` for the book's
repo, derives `effectiveTintColor = repoColor ?? .accentColor`, and
feeds that color into `spineBackgroundColor`. The proximity-distance
ladder (selected=1.0, neighbor=0.5, …, far=0.05) is unchanged — only
the hue swaps. Hover-bumped intensity for unselected spines and the
neutral fallback when no book is open both still work.
- ShelfSpineHeader gains a 14pt icon at the top of the VStack, drawn
via the shared RepositoryIconImage so tinting matches the sidebar
exactly. Notification-dot top padding shifts when the icon is
present so the spacing reads consistently with or without an icon.