Valen Brasil

Guia do Design System

Referência única de marca, fundamentos visuais, componentes e telas para os três produtos da Valen Brasil: o website institucional, o blog e o painel interno de gestão de laudos.

Empresa

Valen Brasil Gestão Empresarial Ltda. Avaliação imobiliária em Itajaí, Santa Catarina, desde 2020. Equipe de arquitetos, engenheiros e corretores.

Base técnica

Tailwind + shadcn/ui. Contrato canônico de variáveis, escala de espaçamento Tailwind, ícones Lucide.

Regra número 1

O sistema é exclusivamente claro. Não existe tema escuro nem seção de fundo escuro em nenhum produto.

Marca

Conteúdo e tom

Português do Brasil. Técnico, sóbrio e tranquilizador — vende segurança e responsabilidade técnica, nunca urgência.

Escreva assim
  • “Contamos com uma equipe multidisciplinar.” — a empresa fala em nós.
  • “Descubra o valor do seu imóvel.” — o cliente é você.
  • “Entrega em 3 dias úteis.” — prazos e preços concretos.
  • “Laudo de Avaliação Completo”, “NBR 14653”, “RRT/ART” — termos técnicos com maiúscula.
  • CTA no imperativo curto: “Solicite sua avaliação”.
Não escreva assim
  • Nada de “eu” — a marca nunca fala na primeira pessoa do singular.
  • Nada de urgência artificial: “imperdível”, “últimas vagas”, contagem regressiva.
  • Nada de exclamação em copy de produto.
  • Nada de emoji, em nenhum produto.
  • Nada de promessa sem número: “rápido”, “o melhor preço”.

Estrutura padrão de seção

Aplicação
Avaliação de Imóveis
aplicável em diferentes contextos

eyebrow de uma palavra em caixa alta → título curto em capitalização de frase → subtítulo em minúsculas que continua a frase

Fundamentos

Cores

Verde sage #73945F e cinza #C8CBC6 foram extraídos pixel a pixel do logo. Todo o resto deriva deles.

Verde sage — a cor da marca

50
100
200
300
400
500
600
700
800
900

--primary = 500 · hover = 600 · texto verde = 700 · fundo de destaque = 50

Neutros

0
50
100
200
300
400
500
600
700
800
900

texto 900 forte / 700 corpo / 500 secundário · borda 200 sutil / 300 controle · fundo alternado 50

Semânticas

Entregue
success
Em vistoria
warning
Atrasado
danger
Judicial
info

As três superfícies permitidas

Branco

--surface-page · fundo padrão

Cinza-claro

--surface-subtle · seção alternada

Verde-claro

--surface-contrast · destaque

Contraste: o verde 500 sobre branco não atinge AA para texto pequeno. Texto verde usa sempre o 700; o 500 fica para fundo de botão (com texto branco), ícones e elementos gráficos.

Fundamentos

Tipografia

Jost para títulos, Manrope para leitura e interface, JetBrains Mono para dados técnicos.

Jost 300 · --type-h1 · 3rem/1.15 · tracking -0.015em
Laudo de Avaliação de Imóvel
Manrope 400 · --type-body-lg · 1.125rem/1.65

Descubra o valor do seu imóvel com a visão completa de arquitetos, engenheiros e corretores.

JetBrains Mono 400 · --type-mono · 0.875rem
CNPJ 39.819.814/0001-98
CAU PJ69468-1 · CRECI 11689-J
NBR 14653 · R$ 1.700,00

Escala

TokenTamanhoUsoAmostra
--text-6xl3.75remDisplay de heroValen
--text-5xl3remH1 de páginaValen
--text-4xl2.25remH2 de seçãoValen
--text-2xl1.5remH3, título de painelValen
--text-xl1.25remH4, título de cardValen
--text-base1remCorpoValen
--text-sm0.875remInterface, rótulos, tabelaValen
--text-xs0.75remEyebrow em caixa altaValen
Fundamentos

Espaçamento e grid

Escala Tailwind: 1 unidade = 0,25rem. Container de 1200px, gutter de 1,5rem, seções verticais de 6rem.

1
2
3
4
6
8
12
16
24
TokenValorUso
--container-max1200pxLargura do site e do dashboard
--container-narrow720pxColuna de leitura
--gutter1.5remRespiro lateral
--section-y6remRespiro vertical entre seções
--control-h-sm/md/lg2 / 2.5 / 3remAltura de botões e campos
Fundamentos

Forma, sombra e movimento

Raios

sm 6px
controle 8px
card 12px
modal 16px
imagem 20px
pilula

Elevação

xs repouso
sm
md hover
lg toast
xl modal

Movimento e estados

SituaçãoDuraçãoComportamento
Cor de controle120msBotão sólido escurece um passo (500 → 600)
Hover / toggle200msCard clicável sobe 2px e ganha sombra md
Accordion, modal320ms“+” gira 45° para virar “×”
Entrada de seção600msFade suave, sem deslocamento grande
Press120msscale(0.985), sem mudança de cor
FocoBorda --ring + anel de 3px a 28%
Desabilitadoopacity: .45, cursor not-allowed

Easing padrão --ease-out = cubic-bezier(.16,1,.3,1). Sem bounce, sem elástico, sem parallax.

Fundamentos

Iconografia

Lucide, o set padrão do shadcn. Traço 2px, colorido por currentColor. Nunca cole SVG à mão; use o componente Icon.

Componentes

Core

Button, IconButton, Badge, Tag, Card, Separator, Avatar, StatCard.

Componentes

Formulários

Rótulo sempre acima do campo — nunca placeholder no lugar de rótulo.

Componentes

Feedback

Aviso inline, notificação, progresso e modal. Fundo tonal, nunca borda colorida à esquerda.

Componentes

Navegação

Abas, trilha, paginação e item de sidebar.

Componentes

Dados

Tabela e accordion.

Produtos

Website institucional

valenbrasil.com — hero, garantias, tipos de avaliação, aplicações, processo, equipe, história, blog, FAQ e chamada final.

Abrir tela completa →

Produtos

Blog

blog.valenbrasil.com — feed com destaque, últimos artigos filtráveis, seções por tag e página de artigo.

Abrir tela completa →

Produtos

Dashboard

Painel interno de gestão de laudos: visão geral, lista com filtros, detalhe do processo, agenda de vistorias e login.

Abrir painel →  ·  Abrir login →

Implementação

Handoff para desenvolvedores

Next.js + Tailwind + shadcn/ui. Tudo o que é preciso para começar um projeto novo está nesta página.

1. Inicializar o projeto

pnpm dlx shadcn@latest init --preset b3acDp3htA --template next

O ID de preset b3acDp3htA não é resolvível publicamente — ver Pendências. O sistema foi escrito contra o contrato canônico de variáveis do shadcn (--background, --primary, --border etc.), não contra esse preset. Se ele não resolver, rode pnpm dlx shadcn@latest init --template next sem --preset e compare o globals.css gerado com o desta página antes de substituir: os nomes de variável devem bater.

2. Trocar o globals.css

Substitua o app/globals.css gerado pelo arquivo abaixo. Ele mantém todo o contrato do shadcn e só troca os valores pelos da marca. Não há bloco .dark — de propósito.

3. Instalar os ícones

pnpm add lucide-react

O componente Icon resolve ícones do Lucide por nome (name="arrow-right"). Na versão de referência isso é feito via mask-image apontando para assets/icons/, que acompanha o repositório — bom para os kits desta página, sem depender de rede. Num projeto Next.js real, troque a implementação para renderizar o componente do lucide-react (um mapa { "arrow-right": ArrowRight, … }), mantendo a mesma prop name.

4. Copiar tokens e componentes

tokens/ pode ficar como está e ser importado pelo styles.css, ou ter os valores absorvidos direto no globals.css — já feito abaixo para as variáveis do contrato shadcn. components/ deve ser copiado preservando as subpastas (core, data, feedback, forms, navigation): os imports relativos entre arquivos continuam funcionando sem alteração. Cada componente traz um .d.ts com o contrato de props e um .prompt.md descrevendo o uso para agentes de código.

5. Assets de marca

Copie assets/valen-logo.png (lettering) e assets/valen-icone.png (selo) preservando os nomes — são os que o componente Logo usa por padrão. Se a pasta ficar em outro caminho, passe o prefixo pela prop base em vez de renomear.

Regras não negociáveis

01

Somente superfícies claras. Não crie .dark, não use neutral-900 como fundo de seção. Para destacar, bg-sage-50 com texto text-sage-800.

02

Verde é acento, não fundo: botão primário, ícones, links, badges, progresso, estado ativo de navegação.

03

Máximo dois fundos por página, mais o verde-claro pontual.

04

Cards: branco, borda 1px, raio 12px, sombra mínima. Sem gradiente, sem borda colorida só à esquerda.

05

Sem emoji, sem ilustração vetorial desenhada à mão, sem imagem gerada.

06

Logo sempre do arquivo original.

07

Conteúdo em pt-BR, “nós” para a empresa e “você” para o cliente.

Onde está cada coisa

ArquivoConteúdo
styles.cssPonto de entrada único; só @imports
tokens/colors, typography, spacing, radius, shadows, motion, fonts, base
components/27 primitivas — .jsx + .d.ts (contrato de props) + .prompt.md
ui_kits/website, blog, dashboard (+ login) — HTMLs interativos
handoff/README.md e globals.css prontos para o projeto Next
readme.mdGuia completo: contexto, conteúdo, fundamentos, iconografia, índice

globals.css completo

Cole no lugar do app/globals.css gerado pelo shadcn. São as mesmas variáveis dos tokens desta página, no formato que o Tailwind espera.

Ver o arquivo inteiro — 197 linhas
/*
  globals.css — Valen Brasil Design System
  Substitua o app/globals.css gerado pelo `shadcn init` por este arquivo.
  Mantém o contrato de variáveis do shadcn/Tailwind (mesmos nomes que o CLI
  gera) e troca apenas os valores pelos da marca, extraídos de template.html.

  Depois de colar este arquivo:
    1. rode `pnpm add lucide-react` (ícones)
    2. copie tokens/ e components/ deste repositório para o projeto Next
    3. importe as fontes (ver bloco @import abaixo, igual a tokens/fonts.css)

  Regra número 1 do sistema: SOMENTE modo claro. Não existe bloco `.dark`
  aqui de propósito — não crie um.
*/

@import url("https://fonts.googleapis.com/css2?family=Jost:wght@200..700&family=Manrope:wght@400..800&family=JetBrains+Mono:wght@400;500&display=swap");

@tailwind base;
@tailwind components;
@tailwind utilities;

@layer base {
  :root {
    /* --- Marca: verde sage extraído do logo (#73945F) --- */
    --sage-50: #f4f7f1;
    --sage-100: #e7ede2;
    --sage-200: #cfdcc6;
    --sage-300: #b2c6a4;
    --sage-400: #93ae81;
    --sage-500: #73945f;
    --sage-600: #5e7c4c;
    --sage-700: #4a633c;
    --sage-800: #3a4e30;
    --sage-900: #2c3a25;

    /* --- Neutros: cinza levemente esverdeado (#C8CBC6 do logo = 300) --- */
    --neutral-0: #ffffff;
    --neutral-50: #fafaf9;
    --neutral-100: #f3f4f2;
    --neutral-200: #e6e8e4;
    --neutral-300: #c8cbc6;
    --neutral-400: #a6aaa4;
    --neutral-500: #82867f;
    --neutral-600: #61645e;
    --neutral-700: #464843;
    --neutral-800: #2b2d29;
    --neutral-900: #141613;
    --neutral-950: #0a0b09;

    /* --- Semânticas --- */
    --success-50: #eef7f0;
    --success-500: #3f8b57;
    --success-700: #2c6640;
    --warning-50: #fbf4e8;
    --warning-500: #b5822b;
    --warning-700: #8a611c;
    --danger-50: #fbeeed;
    --danger-500: #b3453c;
    --danger-700: #8a332c;
    --info-50: #eef2f7;
    --info-500: #4a6b8a;
    --info-700: #35506b;

    /* --- Contrato canônico shadcn/Tailwind --- */
    --background: var(--neutral-0);
    --foreground: var(--neutral-900);
    --card: var(--neutral-0);
    --card-foreground: var(--neutral-900);
    --popover: var(--neutral-0);
    --popover-foreground: var(--neutral-900);
    --primary: var(--sage-500);
    --primary-foreground: #ffffff;
    --secondary: var(--neutral-100);
    --secondary-foreground: var(--neutral-900);
    --muted: var(--neutral-100);
    --muted-foreground: var(--neutral-500);
    --accent: var(--sage-50);
    --accent-foreground: var(--sage-700);
    --destructive: var(--danger-500);
    --destructive-foreground: #ffffff;
    --border: var(--neutral-200);
    --input: var(--neutral-300);
    --ring: var(--sage-500);
    --chart-1: var(--sage-500);
    --chart-2: var(--sage-300);
    --chart-3: var(--neutral-700);
    --chart-4: var(--sage-700);
    --chart-5: var(--neutral-400);
    --sidebar: var(--neutral-50);
    --sidebar-foreground: var(--neutral-700);
    --sidebar-primary: var(--sage-500);
    --sidebar-primary-foreground: #ffffff;
    --sidebar-accent: var(--sage-50);
    --sidebar-accent-foreground: var(--sage-700);
    --sidebar-border: var(--neutral-200);
    --sidebar-ring: var(--sage-500);

    /* --- Aliases de leitura (não fazem parte do contrato shadcn, mas são
       usados pelos componentes deste design system) --- */
    --text-strong: var(--neutral-900);
    --text-body: var(--neutral-700);
    --text-muted: var(--neutral-500);
    --text-on-brand: #ffffff;
    --text-brand: var(--sage-600);
    --surface-page: var(--neutral-0);
    --surface-subtle: var(--neutral-50);
    --surface-card: var(--neutral-0);
    --surface-contrast: var(--sage-50);
    --surface-brand: var(--sage-500);
    --surface-brand-subtle: var(--sage-50);
    --border-subtle: var(--neutral-200);
    --border-strong: var(--neutral-300);
    --border-brand: var(--sage-500);
    --overlay: rgba(20, 22, 19, .55);

    /* --- Tipografia --- */
    --font-display: "Jost", "Helvetica Neue", Arial, sans-serif;
    --font-sans: "Manrope", "Helvetica Neue", Arial, sans-serif;
    --font-mono: "JetBrains Mono", ui-monospace, monospace;

    /* --- Forma --- */
    --radius: 0.5rem;
    --radius-sm: calc(var(--radius) - 2px);
    --radius-md: var(--radius);
    --radius-lg: calc(var(--radius) + 4px);
    --radius-xl: calc(var(--radius) + 8px);
    --radius-2xl: 1.25rem;
    --radius-full: 9999px;
    --radius-card: 0.75rem;
    --radius-control: 0.5rem;
    --radius-pill: 9999px;
  }

  /*
    Sem bloco `.dark`. O sistema é exclusivamente claro — não crie
    `.dark`, não use neutral-900 como fundo de seção. Para destacar,
    use bg-sage-50 com texto text-sage-800.
  */

  * {
    border-color: var(--border);
  }

  body {
    background: var(--surface-page);
    color: var(--text-body);
    font-family: var(--font-sans);
  }
}

/*
  @theme inline — mapeamento opcional para Tailwind v4 (utilitários como
  bg-primary, text-foreground, rounded-card passam a funcionar direto).
  Em Tailwind v3 com tailwind.config, mapeie as mesmas variáveis em
  theme.extend.colors / theme.extend.borderRadius em vez deste bloco.
*/
@theme inline {
  --color-background: var(--background);
  --color-foreground: var(--foreground);
  --color-card: var(--card);
  --color-card-foreground: var(--card-foreground);
  --color-popover: var(--popover);
  --color-popover-foreground: var(--popover-foreground);
  --color-primary: var(--primary);
  --color-primary-foreground: var(--primary-foreground);
  --color-secondary: var(--secondary);
  --color-secondary-foreground: var(--secondary-foreground);
  --color-muted: var(--muted);
  --color-muted-foreground: var(--muted-foreground);
  --color-accent: var(--accent);
  --color-accent-foreground: var(--accent-foreground);
  --color-destructive: var(--destructive);
  --color-destructive-foreground: var(--destructive-foreground);
  --color-border: var(--border);
  --color-input: var(--input);
  --color-ring: var(--ring);
  --color-chart-1: var(--chart-1);
  --color-chart-2: var(--chart-2);
  --color-chart-3: var(--chart-3);
  --color-chart-4: var(--chart-4);
  --color-chart-5: var(--chart-5);
  --color-sidebar: var(--sidebar);
  --color-sidebar-foreground: var(--sidebar-foreground);
  --color-sidebar-primary: var(--sidebar-primary);
  --color-sidebar-primary-foreground: var(--sidebar-primary-foreground);
  --color-sidebar-accent: var(--sidebar-accent);
  --color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
  --color-sidebar-border: var(--sidebar-border);
  --color-sidebar-ring: var(--sidebar-ring);
  --font-display: var(--font-display);
  --font-sans: var(--font-sans);
  --font-mono: var(--font-mono);
  --radius-sm: var(--radius-sm);
  --radius-md: var(--radius-md);
  --radius-lg: var(--radius-lg);
  --radius-xl: var(--radius-xl);
}
Implementação

Pendências conhecidas

01

Fontes. Jost, Manrope e JetBrains Mono são aproximações do Google Fonts — os arquivos originais do site (Framer) não foram fornecidos. Com os WOFF2 reais, a troca é imediata em tokens/fonts.css.

02

Preset shadcn b3acDp3htA. O ID não é resolvível publicamente; o sistema foi escrito contra o contrato canônico do shadcn. Comparar com o globals.css gerado no primeiro projeto real.

03

Repositórios vazios. valen-design e valen-blog só têm README — nenhum valor foi derivado de código. Website e blog são reconstruções fiéis de conteúdo, não cópias pixel-perfect.

04

Dashboard. Não existe produto correspondente hoje; o fluxo de gestão de laudos é composição original e precisa de validação da operação.