Share phase-aware scales across full and binned development, guard empty
and non-finite ranges, invalidate old renders, and add synthetic/property coverage.
Co-authored-by: Codex <noreply@openai.com>
(cherry picked from commit e21177600167732fd22cbbcda70210c9f3f309f6)