Kaizen Design System
Este documento apresenta os componentes, padrões e diretrizes visuais que compõem o design system do site ofabio.com.br. O objetivo é garantir consistência visual e funcional em todas as páginas do site.
Installation
Como configurar e usar o Design System em seu projeto.
Design Principles
Os valores e diretrizes fundamentais que orientam o Design System.
Colors
A paleta de cores foi projetada para transmitir minimalismo, elegância e sofisticação.
Cores Principais
#000000
var(--primary-color) #333333
var(--secondary-color)
#000000
var(--accent-color)
#E7E5DE
var(--background-color)
Cores de Interface
#000000
var(--text-color)
#333333
var(--light-text)
rgba(0,0,0,0.03)
var(--card-bg)
rgba(0,0,0,0.05)
var(--card-hover)
#F5F3EE
var(--code-bg)
#FFFACC
var(--highlight-bg)
<!-- Exemplo de exibição de cor -->
<div class="color-grid"> <!-- Contêiner Flex/Grid -->
<div class="color-item"> <!-- Item individual -->
<div class="color-sample" style="background-color: var(--primary-color);">
<span style="color: white;">Primary</span> <!-- Nome da cor (cor do texto para contraste) -->
</div>
<div class="color-info"> <!-- Informações -->
<code class="color-value">#000000</code> <!-- Valor (HEX/RGBA) -->
<code class="color-token">var(--primary-color)</code> <!-- Token CSS -->
</div>
</div>
<!-- Repetir para outras cores -->
</div>
/* Estilos para exibição de Cores */
.color-grid {
display: flex;
gap: var(--spacing-md); /* Espaço entre os itens de cor */
flex-wrap: wrap; /* Quebra linha no mobile */
}
.color-item {
display: flex;
flex-direction: column;
align-items: flex-start; /* Alinha info abaixo da amostra */
}
.color-sample {
width: 100px;
height: 100px;
border-radius: var(--radius-sm);
margin-bottom: var(--spacing-sm);
display: flex; /* Para centralizar o texto interno */
align-items: center;
justify-content: center;
font-weight: bold;
border: 1px solid rgba(0,0,0,0.1);
overflow: hidden;
text-align: center;
padding: var(--spacing-xs);
font-size: var(--text-sm);
line-height: 1.2;
}
.color-sample span {
display: block; /* Garante que o span é um bloco para alinhamento */
/* Cor do texto definida inline para garantir contraste */
}
.color-info {
display: flex;
flex-direction: column;
align-items: flex-start;
font-size: var(--text-xs);
line-height: 1.4;
/* Remove default code styling */
}
.color-info code {
background-color: transparent;
padding: 0;
border-radius: 0;
/* Ajustes específicos para legibilidade */
}
.color-info .color-value {
font-weight: 500; /* Valor mais proeminente */
}
.color-info .color-token {
color: var(--light-text); /* Nome do token menos proeminente */
}
Diretrizes de Uso
Use as cores de forma consistente para manter a identidade visual. As cores primárias e de destaque são para elementos de ação e atenção. As cores secundárias e de texto leve são para informações de apoio.
Acessibilidade
Nossa paleta foi desenvolvida com foco em acessibilidade, buscando contraste adequado entre texto e fundo. Verifique sempre a combinação de cores para garantir conformidade com WCAG 2.1 AA, especialmente para textos pequenos.
Tokens CSS
Lista completa das variáveis CSS para cores:
| Token | Valor | Descrição |
|---|---|---|
--primary-color | #000000 | Cor principal do sistema, usada em elementos de destaque e ações primárias |
--secondary-color | #333333 | Cor secundária usada em elementos complementares |
--accent-color | #000000 | Cor de destaque para chamar atenção para elementos específicos |
--background-color | #E7E5DE | Cor de fundo principal do site |
--sidebar-bg | #F5F3EE | Cor de fundo da barra lateral |
--content-bg | var(--background-color) | Cor de fundo da área de conteúdo principal (usa a cor de fundo principal) |
--text-color | #000000 | Cor padrão para texto |
--light-text | #333333 | Cor para texto secundário e com menor ênfase |
--border-color | rgba(0, 0, 0, 0.1) | Cor padrão para bordas e divisores |
--card-bg | rgba(0,0,0,0.03) | Cor de fundo para cards e containers leves |
--card-hover | rgba(0,0,0,0.05) | Cor de fundo para cards e containers leves no estado hover |
--code-bg | #F5F3EE | Cor de fundo para blocos de código e elementos de interface leves |
--highlight-bg | #FFFACC | Cor de fundo para elementos de destaque ou avisos |
Typography
Utilizamos a fonte Epilogue para todo o site, combinando elegância com excelente legibilidade. A escala tipográfica é definida por tokens CSS.
Título H1 - Epilogue (var(--text-5xl))
Usado para títulos principais e heróis de página.
Título H2 - Epilogue (var(--text-2xl))
Usado para títulos de seção.
Título H3 - Epilogue (var(--text-lg))
Usado para subtítulos e títulos de cards.
Texto médio - Epilogue (var(--text-md)). Usado para textos em destaque e introduções de seção.
Texto padrão - Epilogue (var(--text-base)). Este é o texto padrão usado para a maior parte do conteúdo do site.
Texto pequeno - Epilogue (var(--text-sm)). Usado para informações secundárias, navegação e textos complementares.
Etiqueta/Timestamp (var(--text-xs))
Font-size var(--text-xs) pode ser usado para metadados ou etiquetas.
/* Variáveis CSS para Tipografia */
:root {
--text-xs: 0.75rem; /* 12px */
--text-sm: 0.9rem; /* 14px */
--text-base: 1rem; /* 16px */
--text-md: 1.1rem; /* 18px */
--text-lg: 1.2rem; /* 20px */
--text-xl: 1.5rem; /* 24px */
--text-2xl: 2rem; /* 32px */
--text-3xl: 2.5rem; /* 40px */
--text-4xl: 3rem; /* 48px */
--text-5xl: 4.5rem; /* 72px */
/* Default Font */
font-family: 'Epilogue', sans-serif;
font-weight: 400;
line-height: 1.6;
letter-spacing: -0.3px;
}
/* Estilos padrão para elementos tipográficos */
h1, h2, h3, h4, h5, h6 {
font-weight: 400;
line-height: 1.1;
margin-top: var(--spacing-lg);
font-style: normal;
}
h1 { font-size: var(--text-5xl); margin-bottom: var(--spacing-3xl); }
h2 { font-size: var(--text-2xl); margin-bottom: var(--spacing-2xl); }
h3 { font-size: var(--text-lg); margin-bottom: var(--spacing-lg); }
p { font-size: var(--text-base); line-height: 1.6; margin-bottom: var(--spacing-md); }
/* Exemplo de uso com classes utilitárias (se existirem) */
.text-heading-xl { font-size: var(--text-xl); }
.text-small { font-size: var(--text-sm); }
.font-bold { font-weight: 700; }
Hierarquia Tipográfica
Use os tamanhos de fonte para criar uma hierarquia clara no conteúdo, guiando o olho do usuário. Use H1 para o título principal da página, H2 para títulos de seção, etc.
Combinações e Peso
Utilize o peso 400 (regular) para a maioria dos textos e 600 (semi-bold) ou 700 (bold) para elementos de destaque ou navegação, conforme definido nos estilos dos componentes (como links e títulos da sidebar).
Tokens de Tipografia
Variáveis CSS para tamanhos de fonte:
| Token | Valor (rem) | Valor (px base 16) | Uso Típico |
|---|---|---|---|
--text-xs | 0.75rem | 12px | Etiquetas, metadados |
--text-sm | 0.9rem | 14px | Textos secundários, navegação |
--text-base | 1rem | 16px | Texto de corpo padrão |
--text-md | 1.1rem | 18px | Textos de apoio, descrições |
--text-lg | 1.2rem | 20px | Subtítulos (H3) |
--text-xl | 1.5rem | 24px | Títulos menores |
--text-2xl | 2rem | 32px | Títulos de seção (H2) |
--text-3xl | 2.5rem | 40px | Títulos grandes (H1 mobile) |
--text-4xl | 3rem | 48px | Títulos maiores (ex: H1 tablet) |
--text-5xl | 4.5rem | 72px | Título principal (H1 desktop) |
Spacing
Nossa escala de espaçamento é baseada em tokens CSS para garantir consistência vertical e horizontal. Use esses tokens para margens, paddings e lacunas em grids/flexbox.
Escala de Espaçamento Visual
/* Variáveis CSS para Espaçamento */
:root {
--spacing-xs: 0.25rem; /* 4px */
--spacing-sm: 0.5rem; /* 8px */
--spacing-md: 1rem; /* 16px */
--spacing-lg: 1.5rem; /* 24px */
--spacing-xl: 2rem; /* 32px */
--spacing-2xl: 3rem; /* 48px */
--spacing-3xl: 4rem; /* 64px */
--spacing-4xl: 6rem; /* 96px */
--spacing-5xl: 8rem; /* 128px */
}
/* Exemplo de uso */
.element {
margin-bottom: var(--spacing-md);
padding: var(--spacing-lg) var(--spacing-xl);
gap: var(--spacing-sm); /* For flex/grid */
}
/* Exemplo de classes utilitárias (se existirem) */
.mb-md { margin-bottom: var(--spacing-md); }
.py-lg { padding-top: var(--spacing-lg); padding-bottom: var(--spacing-lg); }
.gap-sm { gap: var(--spacing-sm); }
Uso Consistente
Aplique os tokens de espaçamento de forma consistente em todo o layout para criar ritmos verticais e horizontais previsíveis.
Em Componentes
Use tokens de espaçamento para definir o padding interno dos componentes e as margens entre elementos dentro deles.
Em Layouts
Utilize os tokens para definir as lacunas entre itens em layouts flexbox ou grid e para as margens externas dos componentes ou seções.
Tokens de Espaçamento
Variáveis CSS para espaçamento:
| Token | Valor (rem) | Valor (px base 16) | Uso Típico |
|---|---|---|---|
--spacing-xs | 0.25rem | 4px | Espaçamento mínimo |
--spacing-sm | 0.5rem | 8px | Espaçamento pequeno |
--spacing-md | 1rem | 16px | Espaçamento médio (padrão) |
--spacing-lg | 1.5rem | 24px | Espaçamento grande |
--spacing-xl | 2rem | 32px | Espaçamento extra grande |
--spacing-2xl | 3rem | 48px | Espaçamento de seção menor, entre blocos grandes |
--spacing-3xl | 4rem | 64px | Espaçamento entre seções |
--spacing-4xl | 6rem | 96px | Espaçamento grande entre seções |
--spacing-5xl | 8rem | 128px | Espaçamento máximo, em heróis ou entre blocos muito distintos |
Layout
Diretrizes e padrões para a estrutura e organização do conteúdo nas páginas, incluindo contêineres e seções.
Contêiner Principal (`.container`)
Simulação do .container (usado na tag `main` neste layout)
Seção de Conteúdo (`.ds-section`)
Simulação do .ds-section
Seção Principal (`.section-header`)
Simulação do .section-header (usado na introdução)
<!-- Estrutura básica de layout -->
<body>
<header class="top-header">...</header>
<aside class="sidebar">...</aside>
<main class="main-content">
<!-- Seção de Cabeçalho (ex: Introdução) -->
<section id="introduction" class="section-header">
<div class="component-tag"><span>...</span></div>
<h1 class="component-title">...</h1>
<p class="component-description">...</p>
</section>
<!-- Seção de Documentação (para componentes e fundação) -->
<section id="alguma-secao" class="ds-section">
<div class="component-tag"><span>...</span></div>
<h2>Título da Seção</h2>
<p>Descrição...</p>
<!-- Conteúdo da seção (demo, código, uso, props) -->
<div class="demo-area">...</div>
<div class="table-responsive">...</div>
<div class="controls-panel">...</div>
</section>
<!-- Outras seções ds-section -->
</main>
<!-- Footer removido -->
</body>
/* Contêiner principal */
.app-container {
display: flex;
min-height: 100vh;
width: 100%;
}
/* Área de conteúdo principal */
.main-content {
margin-left: var(--sidebar-width);
margin-top: var(--header-height);
padding: var(--spacing-2xl);
width: calc(100% - var(--sidebar-width));
background-color: var(--content-bg);
min-height: calc(100vh - var(--header-height));
}
/* Seções de documentação */
.ds-section {
padding: var(--spacing-xl);
margin-bottom: var(--spacing-2xl);
border: 1px solid var(--border-color);
border-radius: var(--radius-md);
background-color: var(--content-bg);
}
/* Seção de cabeçalho (primeira seção) */
.section-header {
margin-bottom: var(--spacing-2xl);
padding-bottom: var(--spacing-lg);
border-bottom: 1px solid var(--border-color);
background-color: var(--content-bg);
padding-left: var(--spacing-2xl);
padding-right: var(--spacing-2xl);
margin-left: 0;
margin-right: 0;
width: 100%;
}
/* Adjust padding-top for scroll-margin */
#introduction.section-header {
padding-top: calc(var(--spacing-2xl) + var(--header-height));
scroll-margin-top: var(--header-height);
}
/* Responsivo */
@media (max-width: 768px) {
.main-content {
margin-left: 0;
width: 100%;
padding: var(--spacing-lg);
}
.section-header {
padding-left: var(--spacing-lg);
padding-right: var(--spacing-lg);
}
#introduction.section-header {
padding-top: calc(var(--spacing-lg) + var(--header-height));
}
}
Estrutura Base
Use a estrutura `.app-container` > `header`, `aside`, `main` para o layout principal. O conteúdo das páginas deve ficar dentro da tag `
Contêiner de Conteúdo
Utilize a classe `.container` para centralizar e limitar a largura do conteúdo principal em páginas que não são a de documentação, garantindo espaçamento lateral em todas as telas. (Observação: Neste layout de docs, `.main-content` já gerencia a largura devido à sidebar).
Organização de Seções
Divida o conteúdo da página em seções semânticas usando a tag `
Cards
Cards são containers versáteis para agrupar e exibir conteúdo relacionado de forma organizada e visualmente distinta.
Exemplos de uso da classe `.card` em um grid:
Serviço
Este é um exemplo de card de serviço. Os cards são usados para apresentar informações de forma clara e concisa.
Local
Este é um exemplo de card de local. Os cards locais mostram endereços e informações de contato.
Blog
Este é um exemplo de card de blog. Os cards de blog geralmente incluem uma imagem, título e uma breve descrição.
<!-- Exemplo básico de Card -->
<div class="card">
<h3>Título do Card</h3>
<p>Conteúdo do card.</p>
</div>
<!-- Exemplo de Cards em um Grid (usando classes de Grid) -->
<div class="grid grid-2">
<div class="card">Card 1</div>
<div class="card">Card 2</div>
</div>
/* Estilo Base para Cards */
.card {
background: var(--card-bg);
padding: var(--spacing-xl);
border-radius: var(--radius-md);
transition: all 0.3s ease;
border: 1px solid rgba(0, 0, 0, 0.05);
}
.card:hover {
background: var(--card-hover);
transform: translateY(-5px);
}
/* Estilos de Grid usados nos exemplos */
.grid {
display: grid;
gap: var(--spacing-xl);
}
.grid-2 { grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); }
/* ... outros tamanhos de grid ... */
Quando Usar
Use cards para agrupar informações relacionadas, como serviços, artigos de blog, produtos, membros de equipe, etc. São ideais para layouts baseados em grid.
Estrutura
A classe `.card` define o contêiner visual. O conteúdo interno (títulos, parágrafos, imagens, botões) deve seguir as diretrizes tipográficas e de espaçamento do Design System.
Classes CSS
Classe base disponível para estilizar cards:
| Classe | Descrição |
|---|---|
.card | Aplica o estilo visual padrão de card (fundo, padding, borda, sombra sutil no hover). |
Forms
Componentes de formulário para coletar informações do usuário de forma acessível e consistente.
Exemplo de formulário básico:
<form>
<div class="form-group">
<label for="input-id">Campo:</label>
<input type="text" id="input-id" class="form-control" placeholder="...">
</div>
<div class="form-group">
<label for="textarea-id">Mensagem:</label>
<textarea id="textarea-id" class="form-control" placeholder="..."></textarea>
</div>
<button type="submit" class="btn btn-primary">Enviar</button>
</form>
/* Estilos básicos para campos de formulário */
.form-group {
margin-bottom: var(--spacing-lg);
}
label {
display: block;
margin-bottom: var(--spacing-xs);
font-weight: 500;
font-size: var(--text-sm);
color: var(--text-color);
}
.form-control {
width: 100%;
padding: var(--spacing-sm) var(--spacing-md);
border: 1px solid var(--border-color);
border-radius: var(--radius-sm);
font-family: 'Epilogue', sans-serif;
font-size: var(--text-base);
color: var(--text-color);
background-color: var(--content-bg);
outline: none;
transition: border-color 0.2s ease, box-shadow 0.2s ease;
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
}
.form-control:focus {
border-color: var(--primary-color);
box-shadow: 0 0 0 2px rgba(0, 0, 0, 0.1);
}
textarea.form-control {
min-height: 120px;
resize: vertical;
}
/* TODO: Add styles for checkboxes, radios, selects, validation states (error, success) */
Acessibilidade
Sempre associe `
Validação
Indique estados de validação (erro, sucesso) usando classes CSS específicas (a serem definidas e documentadas).
Classes CSS
Classes e estilos para elementos de formulário:
| Elemento/Classe | Descrição |
|---|---|
.form-group | Contêiner para agrupar label e input/textarea. |
label | Estilo para as etiquetas dos campos. |
.form-control | Estilo base para campos de texto, email, senha e áreas de texto. |
textarea.form-control | Ajustes específicos para a área de texto. |
Grids
Sistema de layout baseado em CSS Grid para organizar conteúdo em colunas de forma responsiva.
Exemplos de Grids usando cards como itens:
Grid de 2 colunas (`.grid.grid-2`)
Grid de 3 colunas (`.grid.grid-3`)
Grid de 4 colunas (`.grid.grid-4`)
<!-- Grid de 2 colunas (responsivo) -->
<div class="grid grid-2">
<div>Item 1</div>
<div>Item 2</div>
</div>
<!-- Grid de 3 colunas (responsivo) -->
<div class="grid grid-3">
<div>Item 1</div>
<div>Item 2</div>
<div>Item 3</div>
</div>
<!-- Grid de 4 colunas (responsivo) -->
<div class="grid grid-4">
<div>Item 1</div>
<div>Item 2</div>
<div>Item 3</div>
<div>Item 4</div>
</div>
/* Estilo Base para Grids */
.grid {
display: grid;
gap: var(--spacing-xl);
}
/* Modificadores de Coluna (responsivos) */
.grid-2 {
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
}
.grid-3 {
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
}
.grid-4 {
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
}
/* TODO: Adicionar breakpoints ou variações específicas se necessário */
Uso
Use a classe `.grid` em um contêiner (ex: `div`) e combine-a com uma classe modificadora como `.grid-2`, `.grid-3` ou `.grid-4` para definir o layout em colunas.
Responsividade
As definições `minmax` e `auto-fit` garantem que as colunas se adaptem automaticamente à largura da tela. Em telas menores, os itens que não couberem na mesma linha passarão para a linha seguinte.
Figma Library
Acesse nossa biblioteca de componentes no Figma para utilizar os elementos visuais no seu trabalho de design.
Templates
Templates de página e seção para agilizar o desenvolvimento e garantir consistência nos layouts.
Changelog
Histórico de alterações, novas funcionalidades e correções em cada versão do Design System.
Social Links
Links estilizados para plataformas de mídia social.
Exemplo de links sociais:
Uso
Use o contêiner `.social-links` para agrupar os ícones sociais. Cada link individual deve ter a classe `.social-link` e conter um ícone (ex: Font Awesome) e um `aria-label` para acessibilidade.
Adicionando Ícones
Certifique-se de ter a biblioteca de ícones (como Font Awesome) incluída no seu projeto. Adicione a tag `` com a classe apropriada dentro do link `.social-link`.