feat(tokens): marketing palette - warm neutral ramp, product accents, space 9-11 #100
No reviewers
Labels
No labels
priority
P1
priority
P2
priority
P3
priority
P4
bug
duplicate
enhancement
help wanted
invalid
question
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
Toilville/toilville-design!100
Loading…
Reference in a new issue
No description provided.
Delete branch "feat/toilville-web-palette-tokens"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Stacked on #99. Base is
fix/terracotta-canonical-c05734.Promotes the colour families the approved toilville.com design actually needs,
so the site can be built from tokens instead of the 508 raw hex literals
the Claude Design export carried (82% of them off-palette).
New tokens
neutral.warm-ink#2E2A27#E8E2DEneutral.warm-body#4A443F#C9C1BCneutral.warm-muted#6E6864#A9A09Baccent.spelwork#3A5987#8FA6C9accent.rituals#A6432B#D98874Plus
spelwork-container/rituals-containertints, and space9/10/11(80/96/120px) — the design builds page rhythm above the old 64px ceiling.
Not promoted: the design's muted greys
#9C9591(2.95:1) and#A8A8A8(2.38:1) fail AA.
neutral.warm-mutedis the passing replacement for that role.Why baseline, not a product override
My original plan said "product override with
color_inherits_baseline: false".That was wrong on two counts, and I changed course:
color_inherits_baseline: trueis a merge (baseline ⊕ product), not"no overrides" — so flipping toilville to
falsewould have forced it tore-declare the entire palette.
is already self-contained. So a baseline addition has exactly the same
blast radius as a toilville override would — while keeping toilville's
documented role as the pure grammar (
dist/toilville== baseline).Net: no divergence, so no
RATIONALE.ymlentry is owed. Other products seeonly the three additive space tokens (non-colour tiers always inherit).
Gating
Added to
wcag.py _PAIRSas text-on-surface, and verified they genuinelyfire — I temporarily set
neutral.warm-mutedto#CCCCCCand the gate caughtit at 1.6:1.
Deliberately not gated as white-on-fill: the dark values are light by design
(readable on
#121212), so white-on-fill would fail there. A fill must use thelight value or carry its own ink token, the way #96 paired
accent.consent-textwithtext.on-consent. Noted in a comment at the pairs.extract.pySHORT_ALIASextended — toilville iscss_var_style: short, sonew baseline tokens need an alias to get a friendly var name.
Verification
just check— fully greenpytest generator/tests/ tools/wp_theme_ingestor/test_*.py— 262 passeddist/toilville/skin.csscarries all 7 new colour vars in light + darkOpen question for ville
accent.spelwork/accent.ritualsare named for the products they representon the marketing site. If you'd rather they read as pure palette
(
accent.blue/accent.sienna), say so — trivial rename now, annoying later.https://claude.ai/code/session_01Kbzfscp4w5enUrZxMnDt78