Kobana UI
GitHub

Underlith

Camada de design tokens que centraliza todas as decisões visuais do Kobana UI.

O Underlith e a fonte unica de verdade para design tokens. Antes dessa integracao, valores da marca estavam hardcoded no globals.css do shadcn — cada produto precisava copiar manualmente, sem garantia de consistencia.

Como funciona

Underlith tokens  →  shadcn variables  →  components
(edite aqui)         (auto-updated)       (sem mudanca)

Todos os tokens vivem em web/styles/underlith.tokens.css. As variaveis do shadcn em globals.css apontam para esses tokens via @import. Zero reescrita de componentes — todos continuam funcionando como antes.

Arquivos

ArquivoPapel
web/styles/underlith.tokens.cssDefinicao dos tokens (fonte unica de verdade)
web/styles/globals.cssVariaveis shadcn apontam para tokens Underlith via @import

Tokens disponiveis

Marca

:root {
  --ul-kobana-lime:   73 99% 66%;
  --ul-kobana-black:  0 0% 0%;
  --ul-kobana-white:  60 20% 99%;
  --ul-kobana-gray:   0 0% 40%;
  --ul-kobana-purple: 285 75% 52%;
}

Tipografia

:root {
  --ul-font-sans:    'Work Sans', sans-serif;
  --ul-font-display: 'Syne', sans-serif;
}

Bridge com Tailwind v4:

@theme inline {
  --font-sans:    var(--ul-font-sans);
  --font-display: var(--ul-font-display);
}
<h1 class="font-display">Titulo</h1>
<p class="font-sans">Corpo</p>

Radius

:root {
  --ul-radius:    0.5rem;
  --ul-radius-sm: calc(var(--ul-radius) - 4px);
  --ul-radius-md: calc(var(--ul-radius) - 2px);
  --ul-radius-lg: var(--ul-radius);
  --ul-radius-xl: calc(var(--ul-radius) + 4px);
}

Status

:root {
  --ul-status-success:    oklch(0.30 0.13 145);
  --ul-status-success-bg: oklch(0.98 0.03 145);
  --ul-status-warning:    oklch(0.40 0.12 75);
  --ul-status-warning-bg: oklch(0.97 0.04 75);
  --ul-status-error:      oklch(0.40 0.16 25);
  --ul-status-error-bg:   oklch(0.97 0.04 25);
  --ul-status-info:       oklch(0.40 0.13 240);
  --ul-status-info-bg:    oklch(0.97 0.04 240);
}

Cores Light/Dark

O arquivo define tokens para ambos os modos. O modo light usa :root, o dark usa .dark:

:root {
  --ul-background: oklch(1 0 0);
  --ul-primary:    oklch(0.205 0 0);
  /* ... */
}

.dark {
  --ul-background: oklch(0.145 0 0);
  --ul-primary:    oklch(0.985 0 0);
  /* ... */
}

Dashboard Theme

A classe .dashboard-theme troca o primary para Kobana Lime:

.dashboard-theme {
  --ul-primary:            hsl(var(--ul-kobana-lime));
  --ul-primary-foreground: hsl(var(--ul-kobana-black));
  --ul-ring:               hsl(var(--ul-kobana-lime));
}

Politica de consumo

Componentes devem consumir apenas var(--ul-color-*). O bridge entre tokens canonicos (--ul-*) e aliases de consumo (--ul-color-*) fica centralizado em globals.css.

/* correto */
.badge-success {
  color: var(--ul-color-status-success);
  background-color: var(--ul-color-status-success-bg);
}

/* errado — nao use tokens canonicos diretamente */
.badge-success {
  color: var(--ul-status-success);
}

Como editar tokens

Sempre edite web/styles/underlith.tokens.css — nunca edite variaveis shadcn diretamente.

/* Mudar o lime da marca: */
--ul-kobana-lime: 73 99% 66%;

/* Mudar a cor primaria: */
--ul-primary: oklch(0.205 0 0);

/* Mudar o radius global: */
--ul-radius: 0.5rem;

Quem deve editar tokens

Underlith e para quem cuida do design system — nao para devs de feature.

  • Mudar uma cor da marca → edite underlith.tokens.css
  • Adicionar uma nova cor da marca → adicione um novo --ul-* token
  • Ajustar radius ou tipografia global → edite o token relevante
  • Mudar uma cor em um componente especifico → isso e preocupacao do componente, nao do token

Regra: se a mudanca deve afetar todos os produtos, pertence ao Underlith. Se e especifica de um componente, fica no componente.

On this page