algorithmic-color-palette
Derive a full UI palette from one or two brand colours — state variants, brand-tinted greys, semantic colours.
Skill by dembrandt
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/dembrandt-algorithmic-color-palette
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: design
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/algorithmic-color-palette
What's inside
- Skill name
algorithmic-color-palette- Description
- Derive a full UI palette from one or two brand colours — state variants, brand-tinted greys, semantic colours. Use when building or expanding a colour system.
- License
- MIT
- Metadata
- priority: 8
- Instructions
- 208 lines in SKILL.md · view on GitHub
Files (1)
- SKILL.md
SKILL.md (first lines)
# Algorithmic Colour Palette A brand palette of 2–3 colours is not enough for a UI. You need shades for states (hover, active, disabled), neutrals for backgrounds and borders, and semantic colours for status. Deriving these algorithmically from the brand colours produces a palette that feels coherent — everything is visually related to the brand rather than pulled from a generic grey or a stock colour library. > **Don't guess the seed colours — extract them (dembrandt engine, optional).** If the brand already exists on the web, pull its *real* palette off the live site instead of eyeballing a hex: `get_color_palette` (or the `extract-design` skill) returns the actual computed brand and neutral colours from the DOM, which you then expand with the methods below. See [`extract-design`](../extract-design/SKILL.md) for setup. ## Deriving Interactive State Colours From each brand colour, generate at minimum three variants: base, darker (hover/active), lighter (tint/background). ### Method: HSL adjustment ``` base: hsl(H, S%, L%) hover: hsl(H, S%, L% - 8%) ← darken by reducing lightness active: hsl(H, S%, L% - 14%) ← darken further tint: hsl(H, S%, L% + 40%) ← lighten significantly for backgrounds subtle: hsl(H, S% * 0.3, L% + 45%) ← heavily desaturated, near-white ``` ### Example: brand primary `#133174` (hsl 224, 70%, 27%) ```css --color-primary-subtle: hsl(224, 21%, 94%); /* background tint */ --color-primary-tint: hsl(224, 70%, 67%); /* light variant */ --color-primary: hsl(224, 70%, 27%); /* base */ --color-primary-hover: hsl(224, 70%, 19%); /* hover: -8% lightness */ --color-primary-active: hsl(224, 70%, 13%); /* active: -14% lightness */ ``` ### Example: success green derived from a teal brand colour If the brand has a green or teal, shift it toward a clearer success green: ```css --color-success-subtle: hsl(142, 20%, 94%); --color-success: hsl(142, 60%, 35%); --color-success-hover: hsl(142, 60%, 27%); ``` ## Deriving Brand-Tinted Greys Generic greys (`#666`, `#999`, `#eee`) feel disconnected from the brand. Desaturating the brand hue produces greys that are subtly tinted — warm, cool, or neutral depending on the brand — and feel like they belong to the same palette. ### Optical Comfort: Avoiding Pure Black on White Pure black `#000000` on pure white `#FFFFFF` causes halation and eye strain. Use a near-black such as `#222222` (`grey-900`) for text and an off-white such as `#EEEEEE` (`grey-50`) for backgrounds; the softened pair still passes WCAG AA/AAA and reads as less harsh. ### Publish Roles, Not Only Swatches Named chips with hex values are not a system until each colour has a role: surface, surface tint, text, link, accent, decoration. Name the humble roles too, the off-white behind cards, stripes and hairlines. A role left unnamed is filled by a framework default, which is how an off-brand neutral ends up painting most of the pixels. Two teams inventing the same missing tint with different values means a role is missing, not a colour. ### Method: desaturate + adjust lightness ``` brand hue H grey-900: hsl(H, 12%, 10%) ← near-black, text grey-700: hsl(H, 10%, 30%) ← dark text, icons grey-500: hsl(H, 8%, 50%) ← secondary text, placeholders grey-300: hsl(H, 6%, 70%) ← disabled text, subtle labels grey-200: hsl(H, 5%, 82%) ← borders, dividers grey-100: hsl(H, 4%, 92%) ← input backgrounds, table stripes grey-50: hsl(H, 3%, 96%) ← page background, subtle fills ``` ### Example: brand primary `#133174` (H = 224, blue-tinted) ```css --color-grey-900: hsl(224, 12%, 10%); /* #16171f — slightly blue-black */ --color-grey-500: hsl(224, 8%, 50%); /* #7b7e8a — cool grey */ --color-grey-200: hsl(224, 5%, 82%); /* #cfd0d5 — cool light border */ --color-grey-50: hsl(224, 3%, 96%); /* #f4f4f6 — near-white with a hint of blue */ ``` Compare to generic `#f5f5f5` (no hue) — the brand-tinted version is subtly different but feels intentional. ## Semantic Colour Derivation Status colours (error, warning, success, info) should feel harmonious with the brand. To achieve cohesion, align their **Saturation** and **Lightness** to create a consistent "visual weight" across the status set. ### Method: Aligned visual weight 1. **Pick the Hues:** Use standard semantic hues (0 for Error, 38 for Warning, 142 for Success). 2. **Align S & L:** Use the saturation and lightness of your Brand Primary as a starting point. 3. **Adjust for Perceived Brightness:** Hues like Yellow/Orange (Warning) feel brighter than Blue/Red. Reduce the lightness of Warning by 5–10% compared to Success or Error to ensure they feel equally "heavy" on the page. | Semantic | Hue (H) | Saturation (S) | Lightness (L) | |---|---|---|---| | **Error** | 0–10 | Match Primary | Match Primary | | **Warning** | 35–45 | Match Primary | Primary L - 10% | | **Success** | 140–160 | Match Primary | Match Primary | | **Info** | 210–230 | Match Primary | Match Primary | **The "Vibrancy" Rule:** If the brand is muted (low saturation), the semantic colours should also be slightly muted. If the brand is neon/vibrant, the semantics should follow suit. Cohesion comes from shared intensity. ## Functional and Interactive Colours Standard UI elements require dedicated functional tokens beyond basic brand and semantic colours. ### Focus States Focus indicators are critical for accessibility. Use a high-visibility colour that works on all backgrounds. - **Default:** Brand Primary (if contrast is high enough). - **Fallback:** A dedicated high-contrast blue `hsl(215, 95%, 50%)`. - **Token:** `--color-focus`. ### Selection and Highlights Text selection and list item highlights should be subtle and non-distracting. - **Method:** Use the primary hue with very high lightness (90%+) and moderate saturation. - **Token:** `--color-selection`. ### Overlays and Modals Backdrops for modals or drawers need a neutral, semi-transparent colour. - **Method:** Use your `grey-900` hue with an alpha channel. - **Token:** `--color-overlay: hsla(H, 12%, 10%, 0.5);` ### Skeleton and Loading Loading states should be neutral and recessive. - **Method:** Use `grey-200` as the base and `grey-100` as the shimmer highlight. - **Token:** `--color-skeleton`. ### Disabled States
From dembrandt/dembrandt-skills, MIT.
More from dembrandt/dembrandt-skills
- 0.785score
app-shell
dembrandt
Top bar, sidebar rail, app launcher, tenant and environment cue, status bar.
SkillAFreshness: A★ 160Claude Code +9 - 0.785score
sticky-and-fixed-elements
dembrandt
Sticky headers, bottom toolbars, floating action buttons and pinned table headers.
SkillAFreshness: A★ 160Claude Code +9 - 0.785score
brand-visual-language
dembrandt
Shape language across type, radius and icons carries brand personality.
SkillAFreshness: A★ 160Claude Code +9 - 0.785score
button-states
dembrandt
Rest, hover, active, focus, disabled and loading states, derived from the base colour.
SkillAFreshness: A★ 160Claude Code +9 - 0.785score
authentic-product-representation
dembrandt
Product visuals must show the real product with real data.
SkillAFreshness: A★ 160Claude Code +9 - 0.785score
component-family-consistency
dembrandt
Buttons, inputs, badges and pills share radius, colour logic, shadow, border and spacing.
SkillAFreshness: A★ 160Claude Code +9 - 0.785score
data-display-and-selection
dembrandt
View modes, row selection, mass actions, sorting, filters, search and table patterns.
SkillAFreshness: A★ 160Claude Code +9 - 0.785score
domain-expert-configuration
dembrandt
Settings for experts who are not developers — domain language, sane defaults, grouping by professional concept.
SkillAFreshness: A★ 160Claude Code +9 - 0.785score
elevation-and-depth
dembrandt
Shadows and layering that lift elements above the surface.
SkillAFreshness: A★ 160Claude Code +9 - 0.785score
extract-design
dembrandt
Extract colours, typography, spacing, components and W3C design tokens from a live website with Dembrandt.
SkillAFreshness: A★ 160Claude Code +9 - 0.785score
color-mode-and-theme
dembrandt
Light, dark or both, and when a theme selector is worth it.
SkillAFreshness: A★ 160Claude Code +9 - 0.785score
generate-ui-from-brand
dembrandt
Pipeline from a URL or DESIGN.md to tokens, decisions and a UI spec.
SkillAFreshness: A★ 160Claude Code +9
Signals
- Stars
- 160
- Forks
- 20
- Open issues
- 0
- Last commit (this folder)
- Oct 1, 2026 (26 days ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- Repository
- github.com/dembrandt/dembrandt-skills
- Website
- www.dembrandt.com/skills
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from dembrandt
- 0.792score
Dembrandt
dembrandt
Design tokens from any live site: colours, type, spacing, components, drift against a baseline.
ConnectorAFreshness: ALocal★ 3.8KClaude Code +5 - 0.785score
authentic-product-representation
dembrandt
Product visuals must show the real product with real data.
SkillAFreshness: A★ 160Claude Code +9 - 0.785score
brand-visual-language
dembrandt
Shape language across type, radius and icons carries brand personality.
SkillAFreshness: A★ 160Claude Code +9 - 0.785score
button-states
dembrandt
Rest, hover, active, focus, disabled and loading states, derived from the base colour.
SkillAFreshness: A★ 160Claude Code +9 - 0.785score
color-mode-and-theme
dembrandt
Light, dark or both, and when a theme selector is worth it.
SkillAFreshness: A★ 160Claude Code +9 - 0.785score
app-shell
dembrandt
Top bar, sidebar rail, app launcher, tenant and environment cue, status bar.
SkillAFreshness: A★ 160Claude Code +9
Cite this page
algorithmic-color-palette skill. Agent Mart. https://agentmart.dev/skills/dembrandt-algorithmic-color-palette (last updated 2026-10-24)