Cookest
Componentes UI

Tokens de Design

Tokens do sistema de design Cookest — cores, tipografia, espaçamento, raio, sombras, transições e z-index

Tokens de Design

Os tokens de design são a única fonte de verdade para todas as decisões visuais no CUCL. São definidos em src/tokens/ como constantes TypeScript e expostos como propriedades CSS personalizadas em tempo de execução através de @cookest/ui/styles.css.

Importar tokens

import { colors, spacing, typography, effects } from "@cookest/ui/tokens";

Cada ficheiro de tokens exporta também tipos TypeScript para total segurança de tipos:

import type { ColorToken, SpacingToken, FontFamilyToken } from "@cookest/ui/tokens";

Cores

Paleta de marca ancorada no verde-salva (#7A9A65). Todos os tokens têm variantes para modo claro e escuro.

Primário

TokenClaroEscuroUtilização
primary.DEFAULT#7A9A65#8AB575Botões, estados ativos, anéis de foco
primary.light#B4CC9E#6B9A55Destaques ao passar o rato
primary.dark#4E7A3A#A8D490Estados de pressão

A escala completa do primário vai de primary.50 (#F0F5EC) a primary.950 (#1A2B14).

Cores semânticas

TokenClaroEscuroVariável CSS
background#F5F5F0#0E1512--ck-bg
card#FAFAF6#172019--ck-bg-card
heading#1C3A2A#E0EDE4--ck-heading
text#3D5040#B0C8B5--ck-text
muted#7A8E74#6A8A70--ck-text-muted
border#E4EBE0#253D2E--ck-border
surface#FFFFFF#1A261E--ck-surface

Cores de estado

TokenHexVariável CSSUtilização
status.success#4CAF50--ck-successBadges e alertas de sucesso
status.warning#FF9800--ck-warningBadges e alertas de aviso
status.error#F44336--ck-errorMensagens de erro, botões danger
status.info#2196F3--ck-infoBadges e alertas informativos

Utilizar variáveis CSS nos componentes

Os componentes referenciam propriedades CSS personalizadas — nunca valores hexadecimais codificados. O modo escuro funciona automaticamente quando a classe .dark é aplicada a um elemento pai:

// ✅ Correto — usa token
className="text-[var(--ck-heading)]"

// ❌ Errado — cor codificada
className="text-[#1C3A2A]"

Tipografia

Dois tipos de letra são utilizados em todo o sistema:

TokenValorUtilização
fontFamily.serif'Playfair Display', Georgia, …Cabeçalhos, títulos, texto de destaque
fontFamily.sans'Inter', -apple-system, …Corpo de texto, rótulos, texto de interface
fontFamily.mono'JetBrains Mono', 'Fira Code', …Blocos de código

Regra: Playfair Display está reservado apenas para títulos de Modal e cabeçalhos de grande destaque. Todos os elementos de interface utilizam Inter.

Escala de tipos

TokenTamanhoAltura de linhaUtilização
fontSize.xs12px16pxLegendas, texto auxiliar
fontSize.sm14px20pxRótulos, metadados
fontSize.base16px24pxCorpo de texto
fontSize.lg18px28pxSub-cabeçalhos
fontSize.xl20px28pxTítulos de cartão
fontSize.2xl24px32pxCabeçalhos de secção
fontSize.3xl30px36pxCabeçalhos de página
fontSize.4xl36px40pxTexto hero
fontSize.5xl48px1Texto de destaque

Pesos de letra

TokenValor
fontWeight.light300
fontWeight.normal400
fontWeight.medium500
fontWeight.semibold600
fontWeight.bold700

Espaçamento

Baseado numa grelha de 4px com aliases semânticos para margens e preenchimentos de componentes.

Escala base

TokenValorEquivalente em px
spacing[1]0.25rem4px
spacing[2]0.5rem8px
spacing[3]0.75rem12px
spacing[4]1rem16px
spacing[5]1.25rem20px
spacing[6]1.5rem24px
spacing[8]2rem32px
spacing[10]2.5rem40px
spacing[12]3rem48px

Aliases semânticos

AliasValorpxUtilização típica
componentSpacing.xs0.25rem4pxPreenchimento de badges
componentSpacing.sm0.5rem8pxCampos compactos, espaços pequenos
componentSpacing.md0.75rem12pxPreenchimento padrão de componentes
componentSpacing.lg1rem16pxPreenchimento espaçoso
componentSpacing.xl1.5rem24pxPreenchimento de cartões, espaços entre secções
componentSpacing["2xl"]2rem32pxEspaçamento de secções grandes
componentSpacing["3xl"]3rem48pxEspaçamento ao nível da página

Efeitos

Raio de borda

TokenValorUtilização
radius.sm4pxChips pequenos, elementos compactos
radius.md8pxCampos de entrada, botões
radius.lg12pxRodapés de modal, contentores internos
radius.xl16pxCartões, modais
radius["2xl"]24pxPainéis flutuantes
radius.full9999pxBadges, avatares, pílulas

Sombras

TokenValorUtilização
shadow.sm0 1px 2px rgba(0,0,0,0.05)Elevação subtil de cartão
shadow.md0 4px 6px -1px rgba(0,0,0,0.1)Dropdowns
shadow.lg0 10px 15px -3px rgba(0,0,0,0.1)Modais
shadow.primary0 4px 16px rgba(122,154,101,0.35)Botões primários
shadow.primaryHover0 8px 28px rgba(122,154,101,0.5)Botões primários ao passar o rato

Transições

TokenValorUtilização
transition.fast150ms easeAlterações de cor ao passar o rato
transition.normal250ms easeMostrar/ocultar componentes
transition.slow350ms easeTransições ao nível da página
transition.bounce500ms cubic-bezier(0.34, 1.56, 0.64, 1)Microinterações lúdicas

Escala de z-index

TokenValorUtilização
zIndex.dropdown10Painéis dropdown do Select
zIndex.sticky20Cabeçalhos fixos
zIndex.overlay30Fundos de modal
zIndex.modal40Diálogos modais
zIndex.popover50Popovers
zIndex.tooltip60Tooltips

Referência de propriedades CSS personalizadas

Todos os tokens semânticos mapeiam para variáveis CSS aplicadas em :root (claro) e .dark:

:root {
  --ck-primary: #7a9a65;
  --ck-primary-light: #b4cc9e;
  --ck-primary-dark: #4e7a3a;
  --ck-bg: #f5f5f0;
  --ck-bg-card: #fafaf6;
  --ck-heading: #1c3a2a;
  --ck-text: #3d5040;
  --ck-text-muted: #7a8e74;
  --ck-border: #e4ebe0;
  --ck-surface: #ffffff;
  --ck-success: #4caf50;
  --ck-warning: #ff9800;
  --ck-error: #f44336;
  --ck-info: #2196f3;
}

Utilize sempre as propriedades personalizadas var(--ck-*) nos nomes de classe dos componentes em vez de importar as constantes de token. As constantes de token destinam-se à lógica TypeScript; as variáveis CSS destinam-se à estilização.

On this page