Address review: preserve unmatched themes, validate write path, lock blend direction
- Picker surfaces a selectable 'Current' option when a stored theme matches no
preset, so editing an unrelated field never silently erases a publisher's
colours (extract resolveSelectedTheme as a pure, tested helper).
- buildPublicationRecord validates basicTheme through parseBasicTheme, so the
write path is symmetric with the read path and no invalid theme can be stored.
- Add tests: mix() blend direction, --btn-primary-fg wiring, parsed-theme
round-trip, write-boundary validation, and .astro injection source-guards.