Basefox · 27 Aug 2026 · checked against HEAD fb1d426
Why this is a list and not an edit. The six blueprints were regenerated
into .claude/blueprints/, which CodeRaven imports on next
activation. Foundation layers have no equivalent inbox —
.claude/context/visualdesign.json is written by the app and
would be overwritten by the next export. Apply these through
Foundation → Update Layer.
Typography — philosophy
The mono face is no longer universal across readouts
was“every date, tier label, price, and chip is set in it”nowChips, status pills, verification lines and the card eyebrow stay
mono. The hero card’s foot band moved to Source Sans 3 at 11.5pt semibold, so the
band label is the one readout that is not mono.
was“Shares the ≥22pt caps-and-narrow rule with hero headlines”nowDisplay narrows at ≥16pt, to wdth 77. Screen titles
still narrow; the threshold quoted is wrong, and caps are not tied to it.
Fonts.swift:26–27, :64
Card Title
was15–16pt · “Sentence case at full width so counters stay open at list density”nowStandard-density card headlines are 18pt semibold and compact rows are
15pt semibold. At 18pt the face narrows to wdth 77, so “full width” holds only for
the compact row.
CardView.swift:132, :188 · Fonts.swift:64
Descriptor
was12pt · “Steel on light grounds, white-at-72% on dark grounds”now11pt · always Palette.heroSub (#3D4838).
Dark grounds were retired this session, so the second clause has no case left.
CardView.swift:70 · Theme.swift:49
Readout
wasUsage list includes “hero band labels”nowDrop hero band labels from this entry — they are Source Sans 3.
Chips, status pills, verification dates, tier labels and dataset-age footers are
still correct.
CardView.swift:89
Typography — typefaces
Archivo rationale
was“drives wght (500–700) … at hero scale (≥22pt) it narrows to wdth 89 …
below 22pt it stays sentence case at full width”nowwght runs 300–900 (.heavy → 800,
.black → 900); narrowing begins at ≥16pt and goes to wdth 77.
The ramp had been flattening everything above bold onto 700, which is why a hero
headline could not out-weigh a row title.
Fonts.swift:26–27, :64, :92–101
Source Sans 3 rationale
was“wght axis driven from 300–700”nowThe weight map is shared across all three roles, so body can be asked
for 800/900 too. Worth stating the ceiling as 900 with the note that only the display
face is exercised that far.
Fonts.swift:92–101
Colour palette — additions
No org-signature role, and no hero tokens
The palette carries ten colours and stops at
the state hues. Eleven tokens the card system now depends on are absent:
Merchant / org signature — the set every card tints its eyebrow,
pill, accent mass and foot band from:
#2A3C22 field,
#7D8668 sage,
#CD5019 copper,
#3D5169 navy,
#D6BD9A tan,
#AAA7A3 stone.
Exchanges draw from the same set via Palette.org.
Hero Card#FBF9F4
— surface. Warmer than a list card’s white, because a hero card is one continuous field.
Hero Ink#232C1E
— text. Reads near-black over a warm accent mass and green over a cool one.
Hero Sub#3D4838
— secondary. Replaces steel under a hero headline, which had receded into its ground.
Band#3E4C35
— the house foot band, used when a merchant accent is too pale to carry white type.
Theme.swift:45, :49, :53, :56, :61–71, :75–82
Guidelines — add the two luminance rules
Where a signature colour may be used is decided by one
number rather than a table. carriesWhiteType (luminance < 0.35)
gates the hero foot band; readsAsTypeOnPaper (luminance < 0.45)
gates the eyebrow, which otherwise falls back to
Signature.field. This is what stops a colour added later from
quietly landing white type on a pale ground.
Urgent as the Ending Soon state — Palette.urgent
/urgentSoft still carry card type E, and
CardKind.endingSoon is intact. The staleness report flagged this;
the code disagrees. Tinted surfaces at 10–12% of the same hue — unchanged, and the new
signature accents follow it.