브랜드 컬러 시스템

Brand color system

기본색(Primary) 하나에서 보조색·강조색·중립색까지 규칙적으로 파생시킨 색 체계. 낱개 색이 아니라 "관계"를 디자인하는 것입니다.

다른 이름: 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);

브랜드 컬러 시스템은 보통 기본색(Primary) 하나를 정한 뒤, 같은 색상(H)에서 명도만 낮춘 보조색(Secondary, 헤더·내비게이션용), 색상환에서 멀리 떨어진 강조색(Accent, CTA 버튼용), 그리고 채도를 거의 0으로 낮춘 중립색(텍스트·배경용) 순서로 파생시킵니다.

이렇게 규칙으로 파생시키면 브랜드색을 하나만 바꿔도(리브랜딩) 나머지 색이 같은 공식으로 자동으로 따라옵니다 — 디자이너가 색상표를 통째로 다시 고르지 않아도 됩니다.

실제 화면에서는 중립색이 압도적으로 넓은 면(배경·본문)을 차지하고, Primary·Secondary는 구조를 나누는 데(네비게이션, 카드), Accent는 "지금 눌러야 할 것" 한 곳에만 씁니다 — 60-30-10 법칙과 같은 원리입니다.

언제 쓰나

브랜드 색을 하나만 정해두고 전체 팔레트를 자동으로 파생시키고 싶을 때 씁니다. 리브랜딩 비용을 크게 줄입니다.