Handoff técnico

Guia de implementação para o app TERPIA

Este documento é para quem vai codar — não repete a narrativa de marca (isso está num Brand Guideline separado, com identidade, voz e posicionamento). Aqui estão os tokens, arquivos e componentes prontos para usar direto no projeto. Os valores abaixo já são os mesmos usados no protótipo navegável do app — são reais e testados, não uma proposta nova.

Início rápido

Dois arquivos CSS resolvem 90% do trabalho: tokens (cor, tipografia, espaçamento) e componentes (botões, badges, formulário, cards). Copie a pasta assets/fonts/ e assets/css/ inteira para o projeto.

1. Importar na ordem certa

HTML
<link rel="stylesheet" href="assets/css/tokens.css" />
<link rel="stylesheet" href="assets/css/components.css" />
<!-- seu CSS de tela/produto entra depois destes dois -->

2. Estrutura de pastas esperada

estrutura
projeto/
├── assets/
│   ├── fonts/        → TrajanPro3-*.otf + DMSans-*.woff2
│   ├── css/
│   │   ├── tokens.css      → cor, tipografia, espaçamento, raio, sombra
│   │   └── components.css  → botão, badge, form, card, topbar
│   └── logos/        → ver seção "Ativos de marca"
└── ...

3. Regra de ouro

Nunca escrever um valor de cor, espaçamento ou raio direto no CSS de tela — sempre var(--token). Se o valor que você precisa não existe em tokens.css, é sinal de que precisa ser adicionado lá (e validado com quem cuida da marca) antes de virar um valor solto espalhado pelo código.

Cores

Clique em qualquer cor abaixo para copiar o hex. Todas já estão em tokens.css como custom properties — use sempre a variável, nunca o hex direto.

Paleta

Quando usar cada uma

TokenUso
--green-forestCor primária institucional — topbar, botão escuro, ~55% da UI.
--gold / --gold-deepAcento — CTA primário, estado de foco/hover. Nunca fundo de tela inteira.
--cream / --cream-whiteFundo de app e superfícies elevadas (cards, modais, inputs).
--text-dark / --text-mutedTexto primário e secundário. Nunca usar #000 puro.
--error / --successUso funcional apenas (validação de formulário, status) — nunca decorativo.

Fazer

  • Sempre referenciar via var(--token).
  • Testar contraste de texto sobre --gold/--gold-light antes de usar (são claros).

Não fazer

  • Não hardcodar hex em componentes novos.
  • Não inventar uma cor "quase igual" para resolver um caso pontual — perguntar antes.

Tipografia

Duas fontes, licenciadas e auto-hospedadas — sem Google Fonts, sem CDN externo de terceiros.

@font-face (já em tokens.css)

tokens.css
@font-face {
  font-family: "Trajan Pro 3";
  font-weight: 600;
  src: url("../fonts/TrajanPro3-Semibold.otf") format("opentype");
}
/* + 200 (ExtraLight), 300 (Light), 400 (Regular) — ver tokens.css */
TERPIA

Regras não-negociáveis

Uso em CSS

exemplo
.titulo-destaque {
  font-family: var(--font-display);
  font-weight: 600; /* nunca 700 */
}
.texto-ui {
  font-family: var(--font-sans);
}

Espaçamento, raio e sombra

O projeto não usa uma escala numérica de espaçamento (tipo 4/8/16px) — os valores de raio e sombra são tokenizados; espaçamento interno de componente é definido por componente (ver exemplos de código em cada seção abaixo).

Raio de borda

TokenValorUso
--radius-sm12pxInputs, botões pequenos
--radius-md16pxCards compactos
--radius-lg20pxCards padrão, modais
--radius-xl24pxSuperfícies grandes, seções destacadas
--radius-pill100pxBotões, badges, chips

Sombra

TokenUso
--shadow-sm / --shadow-md / --shadow-lgSombra simples de elevação — botões, painéis.
--card-shadow / --card-shadow-hoverSombra em camadas (duas sombras sobrepostas) para cards — dá profundidade sem parecer "chapada". Use nos cards de conteúdo em vez das sombras simples acima.
--card-shadow
--card-shadow-hover

Breakpoints & layout

O app não é um mockup de celular numa página — é responsivo de verdade, com duas molduras de navegação que trocam no mesmo breakpoint.

TokenValorSignificado
--bp-desktop-min900px≥900px → sidebar fixa lateral (desktop/tablet grande)
--bp-mobile-max899px<900px → navegação inferior, tela cheia (mobile)
--header-h68pxAltura da topbar fixa
--bottomnav-h72pxAltura da navegação inferior mobile
--max-content1180pxLargura máxima de conteúdo em telas grandes

Padrão de media query

exemplo
/* mobile-first: escreva o CSS base para mobile, então sobrescreva para desktop */
@media (min-width: 900px) {
  /* layout desktop: sidebar visível, grid de 2-3 colunas */
}

Movimento & acessibilidade

Tokens de movimento

TokenValorUso
--easecubic-bezier(0.22,1,0.36,1)Curva padrão de toda transição/animação
--t-fast180msHover, toggle, micro-interação
--t-med280msTransição de tela, modal
--t-slow350msTransições grandes (splash, onboarding)

Obrigatório: tokens.css já zera as durações via @media (prefers-reduced-motion: reduce) — nunca remova esse bloco, e nunca crie uma animação com duration hardcoded fora dos tokens acima (ela não vai respeitar essa preferência).

Foco visível

Todo elemento interativo precisa de estado de foco visível — :focus-visible já vem estilizado globalmente em tokens.css (contorno dourado). Não remova o outline sem substituir por algo igualmente visível.

Contraste

Combinações aprovadas

  • --text-dark sobre --cream/--cream-white
  • --cream/--gold-light sobre --green-forest
  • --green-forest sobre --gold (botão primário)

Nunca combinar

  • --gold ou --gold-light como cor de texto sobre --cream (contraste insuficiente)
  • --text-muted sobre --green-forest (dessatura demais)

Botões

Classe base .btn + um modificador. Nunca estilizar um <button> do zero — sempre compor com estas classes.

HTML
<button class="btn btn-primary">Falar com a equipe</button>
<button class="btn btn-outline btn-sm">Ver detalhes</button>
<button class="btn btn-primary btn-block" disabled>Enviando…</button>
ClasseQuando usar
.btn-primaryAção principal da tela — sempre uma por tela.
.btn-darkAção secundária com peso visual (ex: em hero escuro).
.btn-outlineAção secundária neutra.
.btn-ghostSó sobre fundo --green-forest.
.btn-linkAção terciária, aparência de link.

Badges

Para status e categorização curta — nunca para texto de leitura, só rótulo.

Padrão Destaque Ativo Concluído
HTML
<span class="badge badge--gold">Em análise</span>
<span class="badge badge--complete">Concluído</span>

Formulário

CPF inválido — confira os números.
HTML
<div class="form-field">
  <label for="nome">Nome completo</label>
  <input id="nome" type="text" />
</div>

<!-- estado de erro: adicionar .has-error no wrapper e .is-invalid no input -->
<div class="form-field has-error">
  <input class="is-invalid" />
  <div class="error-msg">Mensagem de erro</div>
</div>

Cards

Consulta médica

Avaliação individual para definição do tratamento.

HTML
<div class="card">
  <strong>Consulta médica</strong>
  <p>Avaliação individual para definição do tratamento.</p>
</div>

Topbar

Referência do cabeçalho fixo já usado no protótipo do app — reaproveitar em vez de recriar.

HTML
<header class="topbar">
  <div class="topbar__brand">
    <img src="imagens/logo-horizontall-para-fundo-escuro.png" alt="TERPIA" />
    <span class="topbar__tag">Assessoria Canábica</span>
  </div>
</header>

Ativos de marca

Local canônico dos arquivos: Brand-guideline/imagens/. Não recriar, não exportar de novo a partir de captura de tela.

Logo vertical — fundo claroimagens/logo-vertical-para-fundo-claro.png

Splash screen, telas de onboarding, capa de documento.

Logo vertical — fundo escuroimagens/logo-vertical-para-fundo-escuro.png

Sobre --green-forest ou fundos com luminosidade abaixo de ~40%.

Logo horizontal — fundo escuroimagens/logo-horizontall-para-fundo-escuro.png

Topbar do app, cabeçalho fixo.

Símbolo isolado — fundo claroimagens/simbolo-claro.png

Favicon, ícone de app (fallback), avatar.

Ícone transparente (todo dourado) — para fundo escuroimagens/icone-tranparente-para-fundo-escuto.png

Fundo alfa-transparente — para sobrepor em foto, splash animado ou qualquer fundo escuro variável.

Ícone transparente (dourado + verde) — para fundo claroimagens/icone-transparente-para-fundo-claro.png

Fundo alfa-transparente — para sobrepor em foto clara ou fundo claro variável.

Tamanho mínimo

Assinatura completa: 160px digital / 35mm impresso. Símbolo isolado: 32px digital / 10mm impresso. Abaixo disso, usar sempre o símbolo isolado, nunca espremer a assinatura completa.

Checklist antes de sair para produção

Importou tokens.css antes de components.css?
As 6 fontes (4 Trajan + 2 DM Sans) estão em assets/fonts/ no build de produção?
Nenhum hex, px de raio ou sombra hardcoded fora de tokens.css?
Trajan Pro 3 usada só em título, nunca peso 700, nunca em texto de UI?
prefers-reduced-motion testado (as transições realmente desligam)?
:focus-visible continua visível em todo elemento interativo custom?
Testado em <900px (nav inferior) e ≥900px (sidebar)?
Logo/símbolo usados são os arquivos oficiais de imagens/, não recriados?

Contato

Dúvida sobre um token que falta, uma cor "quase certa" que você precisa, ou uma exceção de layout: confirme com o guardião da marca antes de decidir sozinho por conveniência de prazo.