Brand color system

브랜드 컬러 시스템

A color system derived systematically from one primary hue — secondary, accent, and neutrals all follow rules from it. You are designing relationships between colors, not picking colors one at a time.

Also known as: Brand palette브랜드 팔레트
···
html
<div class="wrap">
  <div class="tokens" id="tokens"></div>
  <div class="mock" id="mock">
    <div class="nav" id="nav"><b id="brand">Nord&amp;Co</b><span class="pill" id="navcta">Sign up</span></div>
    <div class="hero"><h4 id="htitle">Design, shipped faster.</h4><button class="pbtn" id="pbtn">Get started</button></div>
  </div>
</div>
css
.wrap{width:min(460px,92%);display:grid;gap:clamp(8px,2.2vmin,14px)}
.tokens{display:grid;grid-template-columns:repeat(5,1fr);gap:6px}
.tokens div{display:grid;gap:3px;justify-items:center}
.tokens i{display:block;width:100%;aspect-ratio:1;border-radius:7px;border:1px solid var(--line)}
.tokens b{font:700 clamp(6px,1.6vmin,7px)/1 ui-monospace,monospace;color:var(--muted);text-transform:uppercase}
.mock{border-radius:14px;overflow:hidden;border:1px solid var(--line);box-shadow:0 10px 26px rgba(0,0,0,.12);cursor:pointer}
.nav{display:flex;justify-content:space-between;align-items:center;padding:10px 14px;font:700 clamp(11px,2.8vmin,13px)/1 system-ui}
.pill{font:700 clamp(8px,2.2vmin,10px)/1 system-ui;padding:5px 10px;border-radius:999px}
.hero{padding:clamp(14px,3.6vmin,22px) 14px;display:grid;gap:10px;justify-items:start}
.hero h4{margin:0;font:800 clamp(13px,3.2vmin,17px)/1.25 system-ui}
.pbtn{border:0;border-radius:9px;padding:8px 16px;font:700 clamp(10px,2.6vmin,12px)/1 system-ui;cursor:pointer}
js
function hslToHex(h, s, l) {
  s /= 100; l /= 100;
  var k = function (n) { return (n + h / 30) % 12; };
  var a = s * Math.min(l, 1 - l);
  var f = function (n) { return l - a * Math.max(-1, Math.min(k(n) - 3, Math.min(9 - k(n), 1))); };
  var hex = function (x) { return Math.round(x * 255).toString(16).padStart(2, '0'); };
  return '#' + hex(f(0)) + hex(f(8)) + hex(f(4));
}
var BRANDS = [{ name: 'Nord&Co', h: 230 }, { name: 'Ember Labs', h: 18 }, { name: 'Verdant', h: 145 }];
var LABELS = ['PRIMARY', 'SECONDARY', 'ACCENT', 'NEUTRAL-900', 'NEUTRAL-50'];
var idx = 0;
var tokens = document.getElementById('tokens');
tokens.innerHTML = LABELS.map(function (l, i) { return '<div><i id="c' + i + '"></i><b>' + l + '</b></div>'; }).join('');
var cells = LABELS.map(function (_, i) { return document.getElementById('c' + i); });
var brand = document.getElementById('brand'), nav = document.getElementById('nav'), navcta = document.getElementById('navcta'), mock = document.getElementById('mock'), pbtn = document.getElementById('pbtn'), htitle = document.getElementById('htitle');
function render() {
  var b = BRANDS[idx], h = b.h;
  var primary = hslToHex(h, 70, 50);
  var secondary = hslToHex(h, 55, 32);
  var accent = hslToHex((h + 150) % 360, 80, 55);
  var neutralDark = hslToHex(h, 15, 12);
  var neutralLight = hslToHex(h, 20, 97);
  var hexes = [primary, secondary, accent, neutralDark, neutralLight];
  cells.forEach(function (el, i) { el.style.background = hexes[i]; });
  brand.textContent = b.name;
  nav.style.background = secondary; nav.style.color = neutralLight;
  navcta.style.background = accent; navcta.style.color = neutralDark;
  mock.style.background = neutralLight;
  htitle.style.color = neutralDark;
  pbtn.style.background = primary; pbtn.style.color = neutralLight;
}
render();
mock.addEventListener('click', function () { idx = (idx + 1) % BRANDS.length; render(); });
setInterval(function () { idx = (idx + 1) % BRANDS.length; render(); }, 2800);

A brand color system usually starts from one primary hue, then derives a secondary by lowering lightness on that same hue (for headers, navigation), an accent from a hue far around the wheel (for CTA buttons), and neutrals by dropping saturation to nearly zero (for text and backgrounds).

Deriving colors by rule instead of picking each one by hand means changing a single seed hue — a rebrand — automatically carries every other color along with it. Nobody has to re-pick a whole swatch set from scratch.

On an actual screen, neutrals dominate the large surfaces — backgrounds, body copy — while primary and secondary divide up structure (navigation, cards), and accent gets used in exactly one place: whatever the user is meant to act on right now. It is the same logic as the 60-30-10 rule.

When to use

Use this when you want to fix one brand hue and derive the rest of the palette automatically — it cuts rebrand cost dramatically.