Build a brand color palette that works in practice: five roles from primary to accent, a strong variant and an on color for every filled role, contrast numbers for every declared pairing, light and dark surface checks, and export as editable SVG and CSS a site can use the same day. Use when creating or fixing brand colors, choosing palette roles, checking whether brand text pairings pass WCAG, or shipping palette files to a site or deck.
./install.sh brand-palette-designname: "brand_palette_design" description: "Build a brand color palette that works in practice: five roles from primary to accent, a strong variant and an on color for every filled role, contrast numbers for every declared pairing, light and dark surface checks, and export as editable SVG and CSS a site can use the same day. Use when creating or fixing brand colors, choosing palette roles, checking whether brand text pairings pass WCAG, or shipping palette files to a site or deck."
Most palette work stops at a row of nice swatches. The failures show up later: white button text on a bright accent, grey captions nobody can read, a dark mode built by guessing. This skill ships a palette as a usage system. Every color has a role, every role that carries text has a checked pairing, and the deliverable is a palette file plus generated CSS and an editable SVG sheet, not a screenshot of swatches.
Use a color theory skill for harmony basics, such as how analogous and complementary schemes are built. Use this skill when the palette has to survive buttons, body text, forms, charts, and a dark surface.
scripts/palette.py: a roles map plus a pairs list. Each pair names a foreground role, a background role, its use in plain words, and a level: normal, large, or nontext. Declare every pairing the brand will actually use, including captions, footer text on brand bands, input borders, and dark surface text. Two complete starting files ship in assets/: service-palette.json and product-palette.json.python3 scripts/palette.py contrast '#C75B26' '#FFFFFF' for a single pair.python3 scripts/palette.py check assets/service-palette.json for a whole palette. Exit code 1 means at least one declared pair fails, and the output names it with its ratio.references/pairing-rules.md: keep the hue, move lightness in small steps, stop just past the threshold, and record the fix in the palette file.references/pairing-rules.md for the full matrix. The short version:python3 scripts/palette.py export assets/service-palette.json out/ to write a CSS file with one custom property per role plus a dark theme block, and an SVG swatch sheet with real text elements a designer can edit. Edit the JSON and regenerate. Hand-editing the CSS forks the palette.Both files in assets/ pass every declared pair with the bundled checker. Numbers below come from checker runs on these exact files.
Harbor and Brick, for a local service business. Deep harbour blue primary #1B4F72 with white button text at 8.72:1, green secondary #1F6F5B at 6.03:1 with white, burnt orange accent #C75B26 kept to large badges at 4.24:1 while its strong variant #9A4419 carries call to action labels at 6.53:1 with white. Ink #1A2027 on white measures 16.41:1, body text on the dark surface #12222E measures 14.52:1. The feel is steady and trade-credible, and the accent stays rare enough to mean "call now".
Violet Circuit, for a software product. Violet primary #4A2FB5 with white at 8.88:1, teal secondary #0E6B6E with white at 6.27:1, hot orange accent #D9480F restricted to large use at 4.30:1 with its strong variant #B23A0B carrying upgrade button labels at 5.99:1. Ink on the tinted alt surface #F1EEFA measures 15.74:1, and text on the dark surface #171126 measures 16.49:1, so the same file covers the marketing page, the app, and dark mode.
A finished palette ships:
publisher key 2e43c913833850e6d80f939677e3de76e806d47785c0f1caaca90f9d18c98e1e
No ratings yet — be the first to rate it.