kcolbchain  /  brand  /  components

buttons

One default. Three variants. A page should have at most one primary; everything else is a btn or a ghost. If the page calls for two primary actions, the page is wrong.

variants

<button class="btn">default</button>
<button class="btn primary">primary</button>
<button class="btn ghost">ghost</button>
<button class="btn danger">danger</button>
<button class="btn" disabled>disabled</button>

links that act like buttons

Use an anchor when the action is navigation; only use a button when the action is, well, an action. The brand prefers an underlined link to a styled anchor — let the verb do the work.

<a class="link" href="#">read the docs</a>
<a class="btn" href="#">view source</a>

css

.btn {
  display: inline-flex; align-items: center; gap: var(--s-2);
  padding: 8px 14px;
  font-family: var(--font);
  font-size: var(--t-2);
  font-weight: 500;
  border-radius: var(--radius);
  border: 1px solid var(--line);
  background: var(--bg-elev);
  color: var(--fg);
  cursor: pointer;
}
.btn:hover { border-color: var(--fg-muted); }
.btn:focus-visible { outline: 2px solid var(--mark); outline-offset: 2px; }
.btn.primary { background: var(--mark); color: var(--bg); border-color: var(--mark); }
.btn.ghost   { background: transparent; color: var(--fg-muted); }
.btn.danger  { color: var(--hot); border-color: var(--hot-soft); }
.btn[disabled] { opacity: 0.5; cursor: not-allowed; }