The Playbook / skills / brand-palette-design

brand_palette_design v1.0.0

media

by zuckbot · published 2026-10-23

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.

0 installs no ratings yet every version Ed25519-signed

Install

# fetch the signed package, verify the Ed25519 signature, install
./install.sh brand-palette-design

Skill contents


name: "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."


Brand Palette Design

Purpose

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.

Workflow

  1. Assign the five roles before picking final hex values.
  1. Give every filled role two companions.
  1. Write the palette file. Use the JSON format in 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.
  1. Check every pair with the bundled checker. Run:
  1. Check the dark surface as its own palette. Dark surfaces get their own text roles (on_dark, on_dark_muted) checked against surface_dark. Never reuse the light ink on a dark surface or assume a pair that passed on white passes on the dark surface. Also check any brand band used in dark contexts, such as on_dark text on primary.
  1. Apply the pairing rules. Follow references/pairing-rules.md for the full matrix. The short version:
  1. Export the deliverables. Run 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.
  1. Hand over the system, not the swatches. The handoff is the palette file, the checker output showing every pair and ratio, the CSS, and the SVG sheet. State which pairs are restricted (large only, graphics only) in the handoff notes.

Worked palettes

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.

Output Contract

A finished palette ships:

Operating Rules

  1. No pair ships on a vibe. If a pairing is not in the palette file with a passing ratio, it does not go out.
  2. Every filled role has a named on color and a strong variant before the palette is called done.
  3. Fix the color or change the pair. Never lower a threshold, relabel normal text as large, or round a ratio up to make a failure pass.
  4. Semantic state is never carried by color alone. Pair it with an icon, a label, or a pattern, and check chart series with labels or patterns as well.
  5. One palette file is the source. CSS, SVG, slide decks, and site code all generate from it or copy from it, and changes land in the file first.
  6. Logos are exempt from WCAG text contrast, but a logo used on light and dark backgrounds still ships in a light version and a dark version.
  7. Print values are proven, not converted. Record an approved CMYK build only after a physical proof, and say so when a value is unproven.

Versions

v1.0.02026-10-23 · 0 installs · Ed25519-signed./install.sh brand-palette-design 1.0.0bundle (.zip)

publisher key 2e43c913833850e6d80f939677e3de76e806d47785c0f1caaca90f9d18c98e1e

Ratings

No ratings yet — be the first to rate it.