Repaint the site in the mark's own three colours - #31
Merged
Merged
Conversation
Follows MaimoryLab/BootAgent, so the site and the app a visitor downloads read as one product. Both palettes derive from the mark: the cream ground, the ink ring, and the terracotta stem. The mark's terracotta cannot be the action colour -- #D96E49 is 2.79:1 on --paper and 3.35:1 under white, failing AA as text and failing even the 3:1 non-text UI needs. --brand keeps it for the logo and for large decoration; --accent is a deeper #A94623 that clears AA as text on our grounds and as a fill under white. --blue and --blue-deep collapse into that one --accent. The split had stopped tracking anything: --blue-deep carried every link, label and fill because white on --blue was only 4.02:1, leaving --blue holding borders and accent-color. Keeping two names for one distinction that no longer existed was how a label and its own underline ended up different colours. The brand mark stops being an <img> and is inlined. It is two-colour now, and an <img> is an isolated document: currentColor falls back to black there and a custom property does not cross into it at all, so the stem would not paint. Inlined, the ring takes currentColor off the wordmark plate's --ink and inverts with the theme on its own. AgentMark hits the same wall and is already handled. Every raster under public/images/brand/ plus favicon.png is re-rendered from the mark's geometry rather than scaled, and favicon.svg is added ahead of the PNG so 16px stays crisp. NOTICE is corrected: the mark is no longer traced from bootagent-logo.png -- that file is now a rendering of the geometry, not its source. Two e2e assertions pinned literals that moved, and both now name the token they track. The six dark-theme visual baselines are regolded; the agents one had to be deleted first, because a stale cool-grey baseline passed on Playwright's per-pixel threshold while every other screen had gone warm. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
yujiezhang-ops
force-pushed
the
feat/terracotta-brand-palette
branch
from
August 13, 2026 13:03
a0dfa13 to
9275779
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Follows MaimoryLab/BootAgent#180 so the site and the app a visitor downloads read as one product. Both palettes derive from the mark: the cream ground, the ink ring, the terracotta stem.
The constraint that shaped it
The mark's terracotta cannot be the action colour.
#D96E49is 2.79:1 on--paperand 3.35:1 under white — failing AA as text, and failing even the 3:1 non-text UI needs.--brandkeeps it for the logo and large decoration;--accentis a deeper#A94623that clears AA as text on our grounds and as a fill under white.--brand#D96E49#E4855C--accent#A94623#E4855C--ink#211F1B#F4EFE6--paper#EFEAE0#161410--blueand--blue-deepcollapse into one--accentThe split had stopped tracking anything.
--blue-deepcarried every link, label and fill because white on--bluewas only 4.02:1, which left--blueholding borders andaccent-color. Keeping two names for a distinction that no longer existed is how a tab label and its own underline ended up different colours..chip-blueis renamed too, rather than left naming a colour it no longer holds.The brand mark stops being an
<img>It is two-colour now, and an
<img>is an isolated document:currentColorfalls back to black there and a custom property does not cross into it at all, so the stem would not paint. Inlined, the ring takescurrentColoroff the wordmark plate's--inkand inverts with the theme by itself — no second asset.AgentMarkhits the same wall and is already handled that way.Assets
Every raster under
public/images/brand/plusfavicon.pngis re-rendered from the mark's geometry rather than scaled, andfavicon.svgis added ahead of the PNG so 16px stays crisp.NOTICEis corrected on a point that is now backwards: the mark is no longer traced frombootagent-logo.png. That file is a rendering of the geometry, not its source.Tests
Two e2e assertions pinned literals that moved (
--paperonbody,--surfaceon row hover); both now name the token they track.focus-indicator.test.ts's prose cited--blue-softvalues that no longer exist.The six dark-theme visual baselines are regolded. The agents one had to be deleted first: a stale cool-grey baseline still passed on Playwright's per-pixel threshold while every other screen had gone warm, so
--update-snapshotsleft it alone. Worth knowing that a palette shift at that darkness can sit inside the threshold and leave a baseline silently misrepresenting the product.Verification
pnpm vitest run— 100 passed, 9 filespnpm run build— clean, 50 pages,validate-build.mjsokpnpm run test:e2e— 198 passed, 36 skipped, including the axecolor-contrastgates on every critical page in both schemes and the computed focus-ring contrast check🤖 Generated with Claude Code