Fill anything missing, in a fixed order.
The business’s own always comes first. The outlined box is what this business’s page uses.

Each piece resolves through three layers, the business’s own first. Whatever a business has always shows, and the page keeps the same layout; only the sources change. While a needed sample has not arrived the brand layer is pending and every branded surface stays neutral. One layer feeds every surface, so layers never mix.
resolveBrand(business, intake, assessment): BrandResolution
Try it: initials for a business without a logo
Relationship functions
| Function | From → to | Home |
|---|---|---|
| brandRoles | overrides + own colors → primary, secondary, accents | resolve.ts |
| suggestFromCandidates | candidates → suggested palette | resolve.ts |
| companionPalette | declared primary + candidates → palette | resolve.ts |
| monogram | name → two initials | resolve.ts |