Biblioteca do Design System

Tokens, componentes e padrões de tela do novo e-commerce da Lamas Destilaria, extraídos do Figma em 10/09/2026. Tudo nesta página é desenhado com os próprios tokens que ela documenta.


Como usar

  1. Tokens: copie o bloco da seção Arquivos (ou use o botão de download). Componentes nunca usam hex nem px soltos — sempre var(--…).
  2. Fontes: Work Sans (Google Fonts) para corpo e interface; Arpona (Adobe Fonts, kit do projeto) para títulos. Nesta prévia a Arpona aparece substituída pela Spectral, porque o kit é privado.
  3. Mobile-first: o estilo base é o mobile (frame 390px). O desktop entra em min-width: 1024px. Não existe breakpoint de tablet ainda.
  4. Temas: Light é o padrão. data-theme="dark" em qualquer elemento troca aquele bloco inteiro — é o equivalente ao "modo explícito" do Figma (é assim que o footer escuro funciona).
  5. Fonte da verdade: o arquivo Figma Lamas Destilaria — Ecommerce. Se esta página e o Figma discordarem, vale o Figma.

Princípios

Regras que explicam as decisões. Quando algo não estiver especificado, decida por elas.

RegraNa prática
Token primeiroNenhum componente existe antes dos seus tokens. Valor novo → cria o token, depois usa.
O dourado não veste controleBotão, input, toggle e chip são neutros (preto/branco/cinza). O dourado aparece em link, ícone pontual, filete e no Badge Gold — nunca como fundo de algo clicável.
Quanto mais longe da página, mais redondoImagem: 0. Botão Squared: 6. Campo: 8. Card: 10. Flutuante: 14. Modal/drawer: 18. Botão pílula, tag e avatar: 999.
Foto sempre com véuTexto branco sobre imagem só com --color-overlay-media por baixo. Sem o véu, o contraste não é garantido.
Overline para rótulo curto, Caption para fraseCaixa alta com tracking de 12% (Overline) só em 1–3 palavras. Frase longa em caixa alta usa Caption (2%).
Toque mínimo de 44pxNo mobile, todo alvo clicável tem pelo menos --size-control-md, mesmo que o ícone visível tenha 24px.
Headline é o teto48px no desktop é o maior texto do site. Uma por página.

Cores

Duas camadas. Primitivos são os valores brutos da marca e não entram direto em componente. Semânticos dizem para que a cor serve e mudam entre Light e Dark. Use sempre o semântico.

Primitivos

Semânticos

A coluna "Agora" mostra o valor do tema ativo. Use a chave Tema escuro na lateral para comparar.

AgoraTokenLightDarkUso

Contraste (calculado ao vivo)

Texto normal precisa de 4,5:1 (WCAG AA). Texto grande e bordas de controle precisam de 3:1. Os valores são recalculados quando você troca o tema.

ParFrenteFundoRazãoResultado

Tipografia

Duas famílias: Arpona (serifada) para títulos e Work Sans para todo o resto. Cada classe CSS junta o par Mobile/Desktop do Figma e troca sozinha em 1024px.

Mapa Figma → CSS

ClasseMobile (< 1024px)Desktop (≥ 1024px)Uso
.t-headlineMobile/01 · Arpona 30 / 110%Desktop/01 · Arpona 48 / 100%Frase de hero. Uma por página.
.t-heading-xlMobile/02 · Arpona 24 / 110%Desktop/02 · Arpona 36 / 110%H1 de PDP e PLP.
.t-heading-lgMobile/03 · Arpona 20 / 120% · caixa altaDesktop/03 · Arpona 30 / 110% · caixa altaH2 de seção.
.t-heading-mdMobile/04 · Arpona 18 / 120%Desktop/04 · Arpona 24 / 120%H3; lista Brasil/Minas.
.t-heading-smMobile/05 · Arpona 16 / 120%Desktop/05 · Work Sans 20 / 120%Nome de produto em card. ⚠ famílias diferentes — ver Pendências.
.t-sub-headlineWork Sans 18 / 160% (igual nos dois)Parágrafo logo abaixo da headline.
.t-bodyWork Sans 16 / 160%Corpo de texto. Nunca abaixo de 16px em texto corrido no mobile.
.t-body-smWork Sans 14 / 140%Texto secundário, frete, ficha técnica.
.t-captionWork Sans 12 / 140% · tracking 2%Legenda, aviso legal, frases longas em caixa alta.
.t-overlineWork Sans Medium 12 / 120% · tracking 12% · caixa altaRótulo curto (1–3 palavras), categoria, eyebrow.
.t-labelWork Sans Medium 14 / 120% · tracking 2%Rótulo de campo e de seletor.
.t-buttonWork Sans SemiBold 14 / 100% · tracking 8% · caixa altaTexto de botão e link de ação.
.t-price-lgMobile/09 · SemiBold 16Desktop/13 · SemiBold 20Preço principal na PDP. ⚠ ver Pendências.
.t-priceDesktop/14 · SemiBold 14 / 120%Preço no card e no carrinho.
.t-price-strikeDesktop/15 · Regular 14 · riscadoPreço cheio ao lado do preço com desconto.
Entrelinha e tracking estão em % no Figma. No CSS viram unitless (160% → 1.6) e em (12% → 0.12em). Os estilos Caption, Overline, Label, Button e Price não têm versão mobile no Figma, então valem para os dois tamanhos (no Figma aparecem com prefixo "Desktop/").

Espaçamento

Escala de base 4, alinhada ao grid de 8. Componentes usam o token semântico (o papel), nunca o degrau da escala direto.

Escala

TokenValor

Semânticos

TokenAponta paraValorUso

Raio

Quanto mais longe da página, mais redondo. Imagem de mídia é sempre reta.

ExemploTokenValorUso

Grid e breakpoints

Estilo no FigmaFrameColunasMargemGutterBaseline
Desktop/12 col1440px12--space-layout-margin-desktop 96--space-layout-gutter-desktop 248px
Mobile / 4 col390px4--space-layout-margin-mobile 16--space-layout-gutter-mobile 168px

Largura máxima do conteúdo no desktop: --size-layout-max-width (1248 = 1440 − 2 × 96). Coluna de texto sobre mídia: --size-layout-content-column (470, mantém 45–75 caracteres por linha).

Mobile / 4 col (margem 16, gutter 16)

Tablet: não existe. Até ele ser desenhado, o desktop entra em 1024px (proposta desta biblioteca, a confirmar). Sugestão já registrada no projeto: 768px com 8 colunas.

Ícones

Família Vuesax, estilo linear, 24px. A cor vem de currentColor — o ícone herda a cor do texto do controle onde está.

search-normal
traço 1.5
bag-2
traço 1 ⚠
profile-circle
estilo bold ⚠
global
traço 1 ⚠
menu
traço 1.5
Icon / Chevron
componente DS
Pesos misturados: busca e menu usam traço 1.5, sacola e globo usam 1, e o perfil está na versão bold (preenchida). Padronize em linear 1.5 ao implementar e confirme com design. Os ícones de redes sociais do footer ainda são placeholders.

Button

Duas famílias com as mesmas 27 variantes (3 estilos × 3 tamanhos × 3 estados): Pill (pílula, principal) e Squared (cantos de 6px, mais discreto — usado em cards, vídeo e newsletter). Cores sempre neutras.

Pill · MD · passe o mouse para ver o hover

Squared · SM, MD e LG

Propriedades

FigmaValoresCSS
FamíliaPill · Squared.btn · .btn.btn--squared
StylePrimary · Secondary · Ghost.btn--primary · .btn--secondary · .btn--ghost
SizeSM (36) · MD (44) · LG (56).btn--sm · padrão · .btn--lg
StateDefault · Hover · Disabledpadrão · :hover · :disabled / aria-disabled="true"
Labeltextoconteúdo do botão (caixa alta via CSS — escreva normal no HTML)
Icon Left / Icon Rightboolean + ícone trocável<svg> antes/depois do texto, 20px

Tokens por tamanho

SizeAlturaPadding lateralGap ícone–texto
SM--size-control-sm 36--space-control-pad-x-sm 16--space-control-gap-sm 8
MD--size-control-md 44--space-control-pad-x-md 24--space-control-gap-md 8
LG--size-control-lg 56--space-control-pad-x-lg 32--space-control-gap-lg 12
SM no Figma está escalado (altura 25,43, padding 11,3, gap 5,65). Implemente o SM com os tokens acima (36/16/8) — é a intenção do sistema. A correção no Figma está pendente.

Tokens por estilo e estado

StyleDefaultHoverDisabled
Primaryfundo action-primary-bg · texto action-on-primaryfundo action-primary-bg-hoverfundo action-disabled-bg · texto action-disabled-text
Secondaryborda 1px border-strong · texto text-primaryfundo action-quiet-bg · borda text-primaryborda border-default · texto action-disabled-text
Ghostsem fundo · texto text-primaryfundo action-quiet-bgtexto action-disabled-text

Raio: --radius-button (999) no Pill, --radius-button-squared (6) no Squared. Texto: estilo Button (.t-button).

Acessibilidade

  • Ação → <button>; navegação → <a class="btn">. Nunca <div> clicável.
  • Foco visível: anel de 2px em --color-focus-ring (já no CSS desta biblioteca).
  • Botão só com ícone precisa de aria-label.
  • Sobre foto escura, o Ghost precisa do texto em --color-text-on-media — no Figma o hero usa essa troca.
<button class="btn btn--primary">Comprar</button>
<a class="btn btn--ghost" href="/sobre">Saiba mais</a>
<button class="btn btn--primary btn--squared btn--sm btn--block">Comprar</button>

Badge

Selo de produto. O tom Gold é a única exceção em que o dourado preenche — reservado a coleção especial e edição limitada, nunca a algo clicável.

Novo Edição limitada Esgotado Em estoque
ToneFundoTextoQuando usar
Neutralaction-quiet-bgtext-primaryNovo, informativo.
Goldaccent-signatureaccent-on-accentEdição limitada, coleção especial.
Dangerfeedback-dangerfeedback-on-feedbackEsgotado, alerta.
Successfeedback-successfeedback-on-feedbackDisponível, confirmação.

Padding --space-inset-tag-y × --space-inset-tag-x (4 × 8) · raio --radius-tag · texto Overline (rótulo curto).

<span class="badge badge--gold">Edição limitada</span>

Toggle

Interruptor liga/desliga. Ligado usa o preto de ação — nunca o dourado. Clique para testar.

EstadoTrilhoBotão
Offborder-strongaction-on-primary · --size-toggle-knob 20
Onaction-primary-bg
Off desabilitadoborder-default
On desabilitadoaction-disabled-text

Trilho --size-toggle-track 48 × 28 · padding --space-1 · raio --radius-pill. Use role="switch" + aria-checked e sempre um rótulo visível ou aria-label.

<button class="toggle" role="switch" aria-checked="false" aria-label="Receber novidades"></button>

Input e Form Field

Input é só a caixa. Form Field junta rótulo + Input + mensagem de ajuda. O foco usa o dourado escuro como traço — é borda, não preenchimento, então respeita a regra do dourado.

Input MD · clique para ver o foco

Form Field · Default e Error

Usamos seu e-mail só para o rastreio do pedido.

Falta o domínio completo. Ex.: nome@site.com.br

StateFundoBordaTexto
Default (vazio)bg-base1px border-defaultplaceholder text-disabled
Focusbg-base2px focus-ringtext-primary
Filledbg-base1px border-strongtext-primary
Errorbg-base2px feedback-dangertext-primary · ajuda em feedback-danger
Disabledaction-disabled-bg1px border-defaulttext-disabled
SizeAlturaPaddingTexto
SM--size-control-sm 36--space-field-pad-x-sm 12Body SM 14
MD--size-control-md 44--space-field-pad-x-md 16Body 16
LG--size-control-lg 56--space-field-pad-x-lg 20Body 16

Raio --radius-field (8 — campo não vira pílula). Form Field: pilha com --space-field-stack-gap (8), rótulo em Label, ajuda em Caption.

Borda de 2px sem "pular": no foco e no erro mantenha a borda de 1px e some mais 1px com box-shadow (como no CSS desta página). Assim o campo não muda de tamanho.
Mobile: mantenha o texto do input em 16px no MD — abaixo disso o iOS dá zoom automático no campo.
<div class="form-field">
  <label class="form-field__label" for="email">E-mail</label>
  <div class="field"><input id="email" type="email" placeholder="seu@email.com" aria-describedby="email-h"></div>
  <p class="form-field__helper" id="email-h">Usamos seu e-mail só para o rastreio do pedido.</p>
</div>

Accordion

Item de lista que abre e fecha — FAQ, detalhes do produto, notas de degustação e links do footer mobile. O divisor fica embaixo de cada item, para empilhar sem borda dupla.

Enviamos para todo o Brasil. Pedidos até 14h saem no mesmo dia útil, com rastreio por e-mail.
ParteEspecificação
Itemborda inferior --size-border-hairline em --color-border-default
Cabeçalhopadding vertical --space-4 (16) · gap --space-4 · título em Heading SM desktop (Work Sans 20) text-primary
ChevronIcon / Chevron, --size-icon-lg 24 · para baixo fechado, para cima aberto (girar 180°)
Painelpadding inferior --space-6 (24) · Body 16/160% em text-secondary

Comportamento: cada item abre de forma independente (não fecha os outros). Cabeçalho é <button aria-expanded> controlando uma region. No footer mobile, o painel contém uma lista de links (<ul><li><a>), não um parágrafo.

Card de produto

Ainda não é componente no Figma (é um nó solto na Home). Abaixo, o padrão com os valores normalizados para a escala de tokens — o original tem gaps de 21 e 29,78 e usa padding de 205px para posicionar o badge. Confirme com design antes de fechar.

Novoimagem · raio 0
Single Malt Whisky

Rarus

R$ 220,00
ParteEspecificação
Cardlargura --size-card-product (294) · raio --radius-surface · borda 1px border-default
Imagem294 × 246 · raio 0 · Badge no canto superior direito (16px de recuo)
Categoria / nomeCaption text-secondary / Heading SM
Preço + variantesPrice · chips de volume (selecionado com borda border-strong)
BotãoButton Squared · Primary · SM · largura total

Desktop: 4 por linha, gutter 24 (fecha os 1248). Mobile: carrossel horizontal com o mesmo card de 294 — o próximo card "espia" na borda para indicar que dá para arrastar.

Carrossel mobile (arraste)

Implementação: overflow-x: auto + scroll-snap-type: x mandatory, scroll-padding igual à margem mobile, barra de rolagem escondida, região com aria-label e tabindex="0" para rolar pelo teclado.

Seções da Home

Como cada seção se comporta no desktop (1440) e no mobile (390). Os links abrem o nó exato no Figma.

SeçãoDesktopMobileTokens-chave (mobile)
Nav
Figma
Faixa de aviso + menu com logo 158px, 6 links e 4 ícones, sobre o hero com véu de 40%.Faixa em 2 linhas centralizada. Logo 34px; links e idioma vão para o menu hambúrguer. Ícones busca, perfil, sacola, menu — cada um com área de toque de 44px. Header de 60px.padding stack-xs × margin-mobile · alvo size-control-md
Hero
Figma
Foto 1440 × 895, texto na coluna de 470 à esquerda. Headline + sub-headline + 2 CTAs.390 × 699, conteúdo ancorado embaixo. Recorte da foto centralizado na garrafa. CTA Ghost sobe para MD (toque).padding section-y-mobile × margin-mobile · gap stack-md · CTAs stack-sm
Vitrine de produtos
Figma
Título + filete dourado, 4 cards de 294 com gutter 24.Título em largura total; cards viram carrossel horizontal com espiada do próximo.gap título–cards stack-lg · cards gutter-mobile · largura size-card-product
Seção de mídia (Vídeo, Inovação, Nossa Missão)
Figma
Foto 1440 × 599 com véu, texto na coluna de 470.390 × 560, texto ancorado embaixo em largura total. Recorte focal em cada foto.padding section-y-mobile × margin-mobile · gap stack-md · véu overlay-media
Premiações
Figma
7 medalhas de 129px entre setas.Carrossel de medalhas de 96px, sem setas (arrastar).gap gutter-mobile · section-y-mobile
Depoimentos
Figma
Bloco invertido (fundo preto). 3 cards de 364 lado a lado.Cards empilhados em largura total, altura pelo conteúdo.surface-inverse · card inset-card · gap stack-md
Brasil / Minas
Figma
2 colunas: foto 812 + texto 502.Foto em cima (390 × 276, mesma proporção), texto embaixo.texto: padding section-y-mobile × margin-mobile · gap stack-lg
Footer
atual · proposta
3 blocos: marca + newsletter, 4 colunas de links, base legal.Proposta: accordion (ver abaixo).ver seção seguinte

Frames completos: Desktop — Home · Mobile — Home (mockup iPhone).

Pendências

O que ainda pode mudar. Onde houver ⚠ nesta página, o motivo está aqui.

Afetam a implementação

  • ButtonVariantes SM (Pill e Squared) estão escaladas no Figma (25,43 / 11,3 / 5,65). Implementar com 36 / 16 / 8.
  • ContrasteBorda do Input vazio usa border-default (#D9D9D9 ≈ 1,4:1 no claro). A regra de acessibilidade para contorno de campo pede 3:1, e o próprio token diz para usar border-strong em inputs. Decisão de design pendente.
  • ContrasteNo tema escuro, texto branco sobre Success e Warning (e Danger no limite) não passa — veja a tabela de contraste com o tema escuro ligado. Afeta o Badge em blocos Dark.
  • TipografiaHeading SM: Mobile é Arpona 16, Desktop é Work Sans 20. Os cards da Home mobile hoje usam o estilo desktop. Definir a família do nome de produto.
  • TipografiaMobile/09 Price (16px) diz ser "preço no card mobile", mas os cards mobile usam Desktop/14 (14px). Esta biblioteca trata 16px como preço principal da PDP no mobile.
  • BreakpointSem tablet. Desktop a partir de 1024px é proposta desta biblioteca.
  • Fococolor/focus/ring existe mas nenhum componente do Figma aplica. A biblioteca já implementa anel de 2px.
  • MovimentoNão há tokens de animação. A biblioteca usa 150ms (cor, toggle) e 200ms (chevron), ease-out, e respeita prefers-reduced-motion.
  • SombraElevação/sombra não definida (vai ser necessária para drawer, dropdown e toast).

Componentes ainda não criados

  • Select (footer usa prévia), drawer do menu hambúrguer (raio --radius-overlay), card de produto, card de depoimento, set de ícones como componente, ícones de redes sociais.

Limpeza no Figma (não bloqueia o dev)

  • Button / Squared Secondary: espessura da borda ligada a uma variável desconhecida ("size/border/Número") em vez de size/border/hairline.
  • Rótulos do footer em accent-signature (dourado) sobre fundo claro dão 2,74:1 — reprovado para texto pequeno. No Dark passa.
  • Descrições desatualizadas: font/family/display ainda cita a Spectral; estilos Desktop 01–05 ainda têm o aviso "[ATENÇÃO: família em Spectral]"; alguns dizem "caixa alta" sem estar em caixa alta.
  • Pesos de ícone misturados (1 / 1.5 / bold).
  • Valores fora da escala herdados do desktop: gaps de 21 e 29,78 no card de produto, avatar do depoimento com padding fracionado, paddings das seções de mídia desktop (151 / 153 / 328).
  • Texto: "Proposíto" → "Propósito" (seção Inovação).

Para o Claude do dev

Um arquivo de regras em Markdown para o assistente de código seguir o design system sozinho: quais tokens usar, como montar cada componente, o que é proibido e o que ainda está em aberto.

Baixar lamas-ds-claude.md

No Claude Code (terminal ou editor)

  1. Salve o arquivo no repositório do tema como .claude/rules/lamas-design-system.md.
  2. Copie lamas-tokens.css e lamas-components.css para a pasta assets/ do tema.
  3. Pronto. O cabeçalho do arquivo faz o Claude carregar as regras automaticamente sempre que abrir arquivos .liquid, .css, .html e similares — e só nesses casos, para não ocupar espaço à toa.

No Claude pelo navegador (claude.ai)

  1. Crie um Projeto para a loja.
  2. Adicione no conhecimento do projeto: este arquivo, lamas-tokens.css e lamas-components.css.

Quando o design system mudar

O link deste arquivo é fixo. Basta baixar de novo, ou pedir ao próprio Claude Code: “baixe o arquivo do link e substitua a regra em .claude/rules”. A versão aparece logo abaixo do título do arquivo.

Arquivos

Estes são os mesmos arquivos que a página usa — não existe cópia separada. O tokens.json segue o formato W3C de design tokens, para quem usa Style Dictionary, Tailwind ou similar.

Baixar lamas-tokens.css Baixar lamas-components.css Baixar tokens.json Baixar regras para o Claude