Gambito v1.1
O design system da Chesslab, em componentes.
Tudo o que a landing Shopify usa, extraído em tokens, classes e instruções. A 1.1 traz o que as páginas repetiram em cima disso, e o que a logo passou a fazer: o símbolo monta e pisca, o wordmark acende com o ponteiro. O nome vem da abertura de xadrez: ceder uma peça para ganhar posição.
Como o sistema pensa
Tema por seção
- Cada seção declara
data-tema: claro, névoa, pistache, escuro ou verde. - Componentes leem variáveis semânticas e funcionam em qualquer tema.
- Ritmo aprovado: abertura escura, corpo claro, fecho verde.
Um recurso gráfico por seção
- Tabuleiro, luz, trama, fragmento ou grão. Não se somam.
- No máximo dois planos por composição.
Corte ou raio
- O corte diagonal usa a inclinação do símbolo (2,201).
- Nunca corte e raio no mesmo elemento. Sombra vai no wrapper.
- Nunca cortar a assinatura oficial do logo.
Contraste e botões
- Texto Grafite sobre Laranja e Pistache, sempre.
- O contorno do botão não se move no hover.
- Um botão de conversão por tela, no máximo dois.
Fundações
Cores e temas
Seis cores do kit V5 e oito de apoio. Componentes nunca usam HEX: usam --gb-* (semântico, muda com o tema) ou --cl-* (fixo por decisão de marca, como o laranja do eyebrow).
Paleta
tokens/gambito.tokens.css--cl-snow · #F7F8F2Fundo principal--cl-mist · #E5ECDDSuperfícies de apoio--cl-pistachio · #B9D88AAssinatura e ênfase. Realce em fundos escuros--cl-forest · #284B3CÂncora da marca. Realce em fundos claros--cl-ink · #1D2621Texto e contraste--cl-orange · #F58A52CTA, marcador do eyebrow, borda e quadrado do erro--cl-text-muted · #56635BApoio em fundos claros--cl-text-muted-dark · #CCD8C7Apoio em fundos escuros--cl-border · #D5DDCFFios e contornos em claro--cl-border-mist · #D3DCC9Fios e contornos na névoa--cl-trama · #496A50Trama de apoio e bloco do marcador cortado--cl-marca-clara · #D6E3C9Texto do marcador sobre a Trama--cl-linha-escuraPistache a 22%: fios em fundos escuros--cl-shopify · #96BF48Só no ícone da notificação de pedidoTemas
[data-tema]Cinco temas trocam só as variáveis semânticas. O texto em realce é Verde em fundos claros e Pistache em escuros. O anel de foco é verde nos temas claro e névoa (laranja fica abaixo de 3:1), pistache no escuro e no verde, grafite no pistache. No pistache, o marcador do eyebrow vira grafite (laranja vibra sobre pistache). Laranja cheio não encosta em verde cheio: no verde, a conversão e o acento viram pistache; no pistache, grafite.
claro realce
Neve. Fundo padrão do corpo da página.
nevoa realce
Névoa. Seções de respiro, manifesto, recursos.
pistache realce
Faixa de postura. Uma por página.
escuro realce
Grafite. Abertura, portfólio, rodapé.
verde realce
Verde Estratégia. Fecho com formulário.
<section class="gb-secao" data-tema="escuro">
<div class="gb-wrap">
<p class="gb-mono gb-eyebrow">Portfólio</p>
<h2 class="gb-d-m">Título com <em>realce</em></h2>
</div>
</section>| Variável | Papel |
|---|---|
--gb-fundo | fundo da seção |
--gb-superficie | superfície de apoio (campo, palco, chip) |
--gb-texto / --gb-texto-suave | texto principal e de apoio |
--gb-linha | fios, contornos, bordas |
--gb-realce | ênfase em título, marcos, progresso, "lab" do logo |
--gb-acento | ação pontual (laranja; pistache no verde; grafite no pistache) |
--gb-anel | anel de foco. Verde no claro e na névoa; pistache no escuro, no verde e no menu aberto |
--gb-marcador | ponto de 6 px do eyebrow, do princípio e da aba ativa |
Fundações
Tipografia
Família pretendida: Aloevera Display (arquivos não distribuídos; ver comentário em 00-base.css). Inter é o fallback. Display em peso 500 com tracking -0,012 em (0 no mobile); corpo em 400 com entrelinha 1,7. Realce em título é cor, não itálico.
Escala
.gb-d-xl · .gb-d-l · .gb-d-m · .gb-h3 · .gb-sub · .gb-lead · .gb-small · .gb-mono.gb-d-xl · clamp(36, 4.3vw, 62)Seu negócio merece alto nível
.gb-d-l · clamp(32, 3.9vw, 56)Não criamos lojas. Criamos presença.
.gb-d-m · clamp(26, 2.6vw, 40)Recursos que tornam a compra mais simples.
.gb-h3 · clamp(22, 2vw, 32) · 600Identidade forte
.gb-sub · clamp(19, 1.5vw, 24)Sua loja pode ser a próxima.
.gb-lead · clamp(17, 1.25vw, 19)Na Chesslab, criamos lojas virtuais com design personalizado e soluções criativas.
corpo · 16 / 1.7Texto corrido de parágrafo. Entrelinha generosa, espaçamento normal, medida de 46 a 60 caracteres.
.gb-small · 14Legenda, nota, texto do rodapé.
.gb-mono · 12 · 0.08em · caixa altaRótulo e numeral
Fazer
.gb-d-xlsó no H1 da abertura.- Uma frase por linha no desktop: trechos em
spancomdisplay:block, não<br>oculto. - Medida de leitura com
.gb-medida-curta(30ch),.gb-medida(46ch) ou.gb-medida-longa(60ch).
Evitar
- Itálico. O realce é cor.
- Tracking negativo em corpo de texto.
- Mais de duas linhas em títulos
.gb-d-lno desktop.
Eyebrow e cabeçalho de seção
.gb-eyebrow · .gb-secao-topoPonto quadrado de 6 px e o nome da seção em mono. Sem numeração. O fio de cima (.gb-secao-topo) some quando há tabuleiro atrás, porque competiria com a malha.
- Tokens
--gb-marcador(ponto),--gb-linha(fio),--gb-texto-suave.
Posicionamento
Não criamos lojas.
Criamos presença digital de verdade.
Citação e princípio
.gb-citacao · .gb-principioA citação é o apoio do manifesto: 22 px, cor suave, medida de 46 caracteres. O princípio é a frase de destaque com ponto laranja e legenda de apoio, usada ao lado de uma captura.
- Acessibilidade A citação é um
<blockquote>. - Tokens
--gb-marcador(ponto do princípio),--gb-texto-suave.
A gente não acredita em tema pronto. Nem em “colocar no ar” só por colocar. Acreditamos em e-commerces com alma.
Categorias que se explicam sozinhas.
Menu e vitrine organizados como o cliente pensa, não como o estoque está.
Cartaz e marcador
.gb-cartaz · .gb-marcadorO cartaz passa dos 62 px do display: chega a 104, também limitado pela altura da tela, em peso 600. Até 700 px, no máximo 64. O marcador é a palavra com um bloco cuja borda direita usa o corte do símbolo. Bloco Trama, texto --cl-marca-clara. No pistache o bloco vira Neve e o texto, Grafite. Com data-corte, o bloco nasce vazio e preenche em 320 ms. Para uma frase por linha, cada trecho do cartaz vai num .gb-cartaz__linha, que vira bloco.
- Acessibilidade O bloco leva
aria-hidden="true": a palavra continua no texto. - Tokens
--gb-t-cartaz,--gb-cartaz-lh,--gb-cartaz-tracking. O marcador lê--gb-marcador-core--gb-marcador-texto. - JS
iniciarMarcador(): comdata-corte, o bloco preenche ao entrar na tela.
O corte entra na palavra
Fundações
Layout e medidas
Contêiner de 1328 px, 12 colunas, unidade de 8 px. Gutter, gap e respiro de seção encolhem por breakpoint em tokens/gambito.tokens.css. Pontos de quebra: 1200, 1023, 950, 700 e 375 px.
Seção, wrap e grade
.gb-secao · .gb-wrap · .gb-grade · [data-col]- Tokens
--gb-container,--gb-gutter,--gb-col-gap,--gb-secao-y.
| Token | Base | ≤1200 | ≤950 | ≤700 | ≤375 |
|---|---|---|---|---|---|
--gb-gutter | 56 | 38 | 26 | 20 | 17 |
--gb-col-gap | 32 | 32 | 32 | 16 | 16 |
--gb-secao-y | 128 | 96 | 80 | 64 | 64 |
--gb-altura-cabecalho | 88 (64 rolado) | 88 | 88 | 64 | 64 |
--cl-window-cut | 28 | 28 | 28 | 22 | 22 |
--cl-modulo (tabuleiro) | 88 | 88 | 88 | 56 | 56 |
Espaçamento, raios e elevação
- Tokens
--gb-u(8 px),--cl-radius-control,--cl-radius-card,--cl-radius-pill,--cl-window-cut,--gb-sombra-card.
Fundações
Logo e símbolos
O sprite (assets/sprite.svg) vai inline no topo do <body>. Tudo em currentColor: o logo segue a cor do texto e o “lab” recebe --gb-realce. Ícones são traço de 1,6 em caixa de 20. Nunca usar ↗ ou ↑ como caractere: sempre o símbolo do sprite.
<!-- logo: currentColor no corpo, "lab" em --gb-realce -->
<svg viewBox="0 0 430.221 79.49" role="img" aria-label="Chesslab"><use href="#gb-logo"/></svg>
<!-- ícone -->
<svg viewBox="0 0 20 20" aria-hidden="true"><use href="#gb-seta-ne"/></svg>Fazer
- Logo horizontal com 160 px no cabeçalho, 133 no rodapé, 136 no mobile.
- Símbolo sozinho como marca-d'água, ícone de sucesso ou peça animada.
- Arquivos do kit em
assets/logoseassets/simbolospara peças fora do HTML.
Evitar
- Aplicar o corte diagonal na assinatura do logo.
- Logo Neve sobre Pistache ou Laranja.
- Referenciar o sprite externo por URL quando precisar estilizar partes (o CSS não atravessa).
Símbolo que monta e pisca
.gb-simbolo-vivo · .gb-pisca-no-hoverO corpo aparece, a seta entra pela diagonal do corte e o olho fecha no fim, em 240 ms. A montagem toca cada vez que o símbolo entra na tela e só recomeça quando ele sai por inteiro. O olho pisca de novo quando o ponteiro ou o foco chega a um link ou botão dentro de .gb-pisca-no-hover. O JS copia as três partes do sprite: o <use> não deixa a animação alcançar o olho.
- Acessibilidade Símbolo com significado:
role="img"earia-label. Com movimento reduzido, fica inteiro. - JS
iniciarSimbolo(). No próprio.gb-simbolo-vivo,gb:remontaresconde e monta de novo, egb:piscarpisca o olho (se ainda não montou, monta).
Logo que acende
.gb-logo-vivaNo wordmark grande, uma luz radial segue o ponteiro fino. Sem esse ponteiro, ou com movimento reduzido, a logo fica inteira. O “lab” continua no realce do tema.
- Acessibilidade O svg leva
role="img"earia-label="Chesslab". - Tokens
--gb-realceno “lab”. - JS
iniciarLogoViva(): a luz segue o ponteiro fino.
Componentes
Botões
Três famílias. Em todas, o contorno fica parado: preenchimento e seta respondem por dentro. Passe o mouse ou use Tab para ver os estados. No toque, o JS mostra o estado por 900 ms.
Conversão
.gb-botao-refPill laranja com rótulo Grafite e disco Neve à direita. No hover, o contorno grafite aparece, o disco cresce até a faixa e vira o pill inteiro, o rótulo some e a seta centraliza girando 45°. No teclado o rótulo fica: o anel de foco, grafite nos temas claros e neve no escuro, marca o botão. A caixa não muda de tamanho. Laranja não encosta em verde: no tema verde e na faixa de CTA o pill vira pistache; no pistache, grafite com rótulo neve. Um por tela, no máximo dois. Variante padrão da landing: --traco (faixa laranja de 7 px).
- Acessibilidade O ícone leva
aria-hidden="true". Enviando,aria-busy="true"no botão e o “Enviando…” no.gb-formulario__aviso(role="status"). - Tokens
--gb-ease-refnas transições do disco e do contorno. - JS
iniciarBotoes(): no toque, o estado aparece por 900 ms (.is-preview).
| Variante | Uso |
|---|---|
--traco | padrão: faixa de 7 px na cor do pill entre contorno e disco no hover |
--compacto | 44 px de altura, faixa de 5 px, disco de 30. Cabeçalho |
--grande | 56 px, corpo 18. Faixa de CTA |
--largo | 100% da largura. Formulário e menu mobile |
aria-busy="true" | enviando: 75% de opacidade, sem ponteiro |
Família V5
.gb-botaoRetangular, raio 7, 52 px. Preenchimento cresce em círculo a partir do canto inferior direito; a seta sai por cima e outra entra por baixo. Cinco cores e o secundário --suave (pill sem contorno, 12% do texto no hover). Nos temas escuro e verde, o padrão e o escuro viram pistache com texto grafite, para não sumirem no fundo. O acento é laranja; no verde vira pistache e no pistache, grafite. .gb-botao--largo ocupa 100% da largura.
- Acessibilidade A seta leva
aria-hidden="true". O--verticalacompanhaaria-expanded. - Tokens
--gb-m-buttonno preenchimento e na seta. - JS
iniciarBotoes(): no toque, o estado aparece por 900 ms (.is-preview).
Fazer
--suavecomo secundário ao lado do botão de conversão.--vertical+aria-expandedpara expandir/recolher listas.- Rótulo curto, verbo no infinitivo ou imperativo.
Evitar
- Dois botões cheios lado a lado.
- Laranja cheio ao lado de verde ou pistache cheio.
- Neve sobre Laranja ou Pistache.
- Mudar tamanho, posição ou contorno no hover.
Botão-ícone
.gb-botao-iconeRedondo, 44 px, contorno fino, preenchimento leve no hover. Versão pequena de 30 px para barras (pausar, fechar). Sempre com aria-label. Texto só para o leitor de tela vai num .gb-oculto-visual: fica fora da vista e continua na árvore.
- Acessibilidade
aria-labelno botão,aria-hidden="true"no svg. - Tokens
--gb-linha(contorno),--gb-texto.
Componentes
Fundos e patterns
Cinco recursos decorativos. Regra: um dominante por seção. Todos ficam em position:absolute dentro de uma .gb-secao, com aria-hidden, e o conteúdo (.gb-wrap) fica por cima com z-index:1.
Tabuleiro
.gb-tabuleiro · --claro · --escuroMalha de 88 px (56 no mobile) com poucas casas acesas em Pistache, contraste baixo de propósito. As bordas dissolvem por máscara. Casas por --col/--lin; com data-sorteio="3-7" o JS sorteia as casas (mesma paridade: só se tocam pela diagonal) e com data-loop uma casa muda a cada 2,4 s. Usado na abertura e no fecho (escuro) e no manifesto (claro).
- Acessibilidade A malha leva
aria-hidden="true". - Tokens
--cl-modulo(malha). Variáveis locais--modulo,--repousoe--linha-malha. - JS
iniciarTabuleiro():data-sorteioedata-loop.
Tabuleiro escuro + grão
Chega de lojinha amadora.
Tabuleiro claro
A Chesslab não entrega sites. Entrega lojas que vendem.
Acima, o tabuleiro claro dividindo espaço com o fragmento marca-d'água, como no manifesto da landing (é a única combinação de dois recursos aprovada, por vir da amostra clara do kit).
Luz
.gb-luzDuas luzes largas que derivam devagar, com a geometria do palco da home: uma no alto à direita (--palco-luz-a) e outra que sobe da base à esquerda (--palco-luz-b). No escuro, laranja a 13% e pistache a 9%. No verde, Neve a 6% e pistache a 22%. Nos temas claros, laranja a 16% e pistache a 38%. Aplicar na própria seção junto com .gb-secao--recortada. Usada nos Pilares e no palco da abertura.
- Tokens
--gb-ease-inoutna deriva das luzes.
Luz
A cada projeto, entregamos:
Trama
.gb-trama · .gb-trama__celulaGrade de fragmentos do símbolo em módulos de 88 px. Célula apagada: Verde a 12%; acesa (.is-on): Neve. O JS acende e apaga em ordem aleatória. Usada na faixa pistache de postura, ao lado do título.
- Acessibilidade A grade leva
aria-hidden="true". - JS
iniciarTrama(): as células acendem em ordem aleatória.
Postura
Se sua loja vai competir com grandes marcas, ela precisa ter postura de grande. É isso que a gente constrói.
Grão, fragmento e marca-d'água
.gb-grao · .gb-fragmento · .gb-marca-dagua.gb-grao
- Ruído de 256 px em soft-light a 6%, num
::afterda seção. - Só em fundos escuros (abertura, portfólio, fecho). Em claro não aparece.
.gb-fragmento
- Fragmento do símbolo com 520 px, -18°, 10%, saindo pelo canto inferior direito.
- A seção precisa de
.gb-secao--recortada.
.gb-marca-dagua
- Símbolo inteiro a 14% em Pistache dentro de uma faixa ou card verde.
- Com movimento reduzido mantém 14% (não vira forma chapada).
Componentes
Janela e corte diagonal
O corte no canto superior direito é a assinatura gráfica do sistema. A inclinação vem do detalhe angular do símbolo (Δy/Δx = 2,2010869565). Toda imagem, painel e cartão de destaque passa por ele. Corte ou raio, nunca os dois.
Tamanhos e variantes
.gb-janela · --p · --m · (padrão) · --g · --viva · --verde- Acessibilidade Imagem decorativa com
alt=""; com conteúdo,altdescritivo. - Tokens
--cl-window-cute--cl-cut-rise. Variável local--corte.

--p · corte 14 px

--m · corte 20 px

--viva · corte 28 px

--verde · corte 28 px
| Classe | Corte | Uso |
|---|---|---|
.gb-janela--p | 14 px | miniaturas, captura no mobile |
.gb-janela--m | 20 px | capturas médias, janela de painel (22) |
| padrão | 28 px (22 no mobile) | quadros de portfólio, cartão de formulário (32) |
.gb-janela--g | 40 px | documento da abertura |
.gb-janela--viva | dobra no hover | cards clicáveis: o corte cresce e a imagem aproxima 3% |
.gb-janela--verde | filtro | P&B + Verde multiplicado a 55%. Mídia dos painéis |
.gb-janela--16x10 · .gb-janela--1x1 · .gb-janela--doc | proporção | 16:10, quadrado, 1:1,03 |
Moldura e capa de entrada
.gb-moldura · .gb-capa · data-reveal="janela"Sombra e contorno fino vão no wrapper .gb-moldura (o clip-path cortaria os dois). A .gb-capa nasce cobrindo a janela no mesmo ângulo do corte e desliza para fora no reveal, enquanto a imagem assenta de 106% para 100%. Para empilhar camadas, o wrapper posicionado é o .gb-plano.
- Acessibilidade A capa leva
aria-hidden="true". - Tokens
--gb-m-reveal,--gb-sombra-moldura. - JS
iniciarReveal()comdata-reveal="janela".
Documento
.gb-docA peça da abertura: folha Neve com corte de 40 px, a captura preenchendo tudo, sombra blur no mesmo recorte e véu de profundidade (--veu) para a peça de trás. A coreografia em loop fica com o GSAP da landing; aqui está a peça parada.
- Acessibilidade Sombra e véu levam
aria-hidden="true"; a captura temalt.

Componentes
Cards e superfícies
Painel
.gb-painel · [data-cor]Painel opaco com o corte da identidade, janela à esquerda e texto à direita. Quatro cores da paleta, em variáveis locais (não data-tema, que mudaria o tema do cabeçalho do site). Na landing os quatro grudam (sticky) e cobrem-se pela rolagem; aqui, empilhados.
- Tokens Variáveis locais
--painele--painel-suave, pordata-cor.
-
01Identidade forte
Criamos uma identidade digital única que transmite confiança e diferencia sua marca.
-
02Design pensado
Seu layout é desenhado do zero, com estética e usabilidade pensadas para converter.
-
03Velocidade otimizada
Lojas rápidas e leves, que carregam em segundos em qualquer dispositivo.
-
04Estrutura para escalar
Base sólida para crescer, lançar produtos e suportar campanhas sem perder estabilidade.
Faixa de CTA
.gb-faixa · .gb-marca-daguaFaixa Verde com corte, símbolo como marca-d'água, título e apoio à esquerda, botão de conversão grande à direita. Com .gb-pisca-no-hover na faixa, o olho do símbolo pisca quando o ponteiro fino passa sobre a faixa ou o foco do teclado chega ao botão. Para isso o símbolo vai com as três partes do sprite inline: dentro de um <use>, o CSS não alcança o olho.
- Acessibilidade A marca-d’água leva
aria-hidden="true".
Sua loja pode ser a próxima.
Vamos criar o seu e-commerce Shopify de alto nível.
Card de projeto
.gb-projeto · .gb-galeria · .gb-marca · .gb-tagQuadro 16:10 com corte e hover vivo, marca do cliente como máscara em currentColor (segue o tema), tag opcional de parceria e legenda. Na galeria, 2 × 2 no desktop e uma coluna no mobile; a tag desce de linha quando o card tem menos de 500 px.
- Acessibilidade A marca é um
spancomrole="img"earia-label; a imagem temaltcom o nome da loja. - Tokens
--marca,--marca-we--marca-hnostyleda marca.--gb-col-gapna galeria.
-

HeyMu · Loja Shopify
-

Em parceria com
Pé Direito · Loja Shopify
Notificação
.gb-notificacao · --escuraToast de pedido em vidro fosco: 340 px, ícone quadrado de 40 com a sacola no verde Shopify, título, hora e texto. Variante escura para fundos claros. Marcar com role="status". Só o ícone da notificação usa a cor Shopify.
- Acessibilidade
role="status"numdiv(oasidenão aceita esse papel); o ícone levaaria-hidden="true". - Tokens
--gb-sombra-card,--cl-shopifyno ícone.
Sua loja tem um novo pedido.
Recebemos sua solicitação.
Palco de demonstração
.gb-palco · .gb-seloMoldura com raio 12, barra de 44 px com selo (ponto pistache com halo) e botão de pausa, e área de telas onde cada painel é um container. Altura fixa: trocar o conteúdo não muda a altura da seção. Usado nos Recursos com os componentes vivos da loja de demonstração.
- Acessibilidade O botão de pausa tem
aria-label. - Tokens
--gb-superficie,--gb-linha. Variável local--palco-h(altura).
Seu carrinho · 1 item
Caneca Terra · 300 mlR$ 89,00
Faltam R$ 125,00 para o frete grátis
Componentes
Campos e formulário
Rótulo em pergunta, controle de 56 px com raio 7, borda que escurece no hover, mensagem de erro com ponto laranja. Em cartão escuro, .gb-campos--escuro troca só as variáveis. Estado de sucesso com o símbolo.
Campos
.gb-campo · .gb-campos · [data-estado="erro"]O campo-isca contra robôs, .gb-honeypot, fica fora da tela, do Tab e da árvore, e continua no envio do formulário. O readonly no campo é opcional: barra o preenchimento automático, mas o robô que digita pula o campo.
- Acessibilidade
labelcomfor. No erro,aria-invalid="true"earia-describedbypara a mensagem. O aviso do formulário temrole="status"; o honeypot,aria-hidden="true". - Tokens
--gb-superficie(controle),--gb-linha(borda),--gb-t-small.
Cartão escuro com formulário
.gb-janela .gb-cartao-escuro · .gb-campos--escuroO fecho da landing: cartão Grafite com corte de 32 px sobre a seção verde, campos translúcidos e o botão de conversão largo. Com data-reveal="janela" e uma .gb-capa verde, entra com o wipe diagonal.
- Tokens
.gb-campos--escurotroca--gb-texto,--gb-texto-suavee--gb-anelpara o fundo escuro, também dentro de uma seção clara. - JS
iniciarReveal()comdata-reveal="janela".
Chegou a hora do seu e-commerce dar o checkmate
Você está a um clique de uma loja alto nível
Sucesso
.gb-sucesso- Acessibilidade O ícone leva
aria-hidden="true".
Recebemos sua solicitação.
Componentes
Etapas, abas e chips
Etapas
.gb-etapas · .gb-etapa · [data-progresso]Linha do tempo: marcos quadrados de 44 px com o número em mono, ligados por fio com ponta de seta. O último marco é cheio. Cinco colunas no desktop; até 950 px a linha fica vertical. Com data-progresso e o JS, as etapas acendem pela rolagem (próximas a 40%, vistas a 100%, atual com marco cheio).
- Acessibilidade Lista ordenada (
<ol>), um título por etapa. - Tokens
--gb-realceno marco. Variável local--colunas(padrão 5). - JS
iniciarEtapas()comdata-progresso.
- 1
Descobrimos
Conversa, briefing e coleta de referências.
- 2
Desenhamos
Layout exclusivo no Figma. Sem tema genérico.
- 3
Codamos
Tudo na Shopify com performance e responsividade.
- 4
Revisamos
Você navega, testa e aprova.
- 5
Publicamos
Loja no ar com suporte inicial.
Abas
.gb-abas · .gb-aba · .gb-abas-legendaSeletor vertical: nome de 19 px, ponto laranja que desliza para a esquerda na ativa e texto de benefício que abre embaixo. A linha de progresso (--progresso, de 0 a 1) mostra o avanço quando o script da página anima as abas, como o GSAP da landing; o gambito.js não troca de aba sozinho. Na demonstração, a linha fica parada em 0,6. Até 950 px vira fileira de chips rolável, e o benefício vai para a .gb-abas-legenda, que já vem com o texto da aba ativa. Teclado: setas, Home e End.
- Acessibilidade
role="tablist"comaria-orientation;role="tab"comaria-selectedearia-controls;role="tabpanel"comaria-labelledby. A.gb-abas-legendalevaaria-hidden="true". - Tokens
--gb-realce,--gb-marcador,--gb-superficie. Variável local--progresso. - JS
iniciarAbas(). A lista disparagb:abaa cada troca e na carga, comdetail: { indice, aba, painel }; o evento não borbulha: escutar na própria lista.
Seu carrinho · 1 item
Caneca Terra · 300 mlR$ 89,00
Faltam R$ 125,00 para o frete grátis
Compre junto
Leve as 3 peças e ganhe 10% de desconto
- Caneca Terra
- Café Serra Alta
- Coador de cerâmica
Monte seu kit
Escolha 3 itens e ganhe 15% de desconto
- Caneca Terra
- Café Serra Alta
- Coador de cerâmica
- Garrafa térmica
Chip
.gb-chip · [aria-pressed]- Acessibilidade
aria-pressedmarca o ativo; o ícone levaaria-hidden="true". - Tokens
--gb-realce,--gb-superficie,--gb-linha.
Dúvidas
.gb-faqLista de <details>. Alvo de 44 px, sem o triângulo do navegador. O disco abre no realce; no escuro e no verde o texto do disco aberto é grafite, porque o realce é pistache. A resposta sai em 320 ms. Um item cujo id está na URL abre sozinho.
- Acessibilidade
<details>e<summary>nativos; a seta levaaria-hidden="true". - Tokens
--gb-realceno disco aberto. - JS
iniciarFaq().
O que entra no Gambito?
Peças que as páginas repetiram e a evolução do que o sistema já tinha. Um caso de uma página só fica na página.
O número de uma ficha pode ser ilustrativo?
Não. O número entra com fonte, ano e autorização.
A logo pisca sozinha?
O símbolo monta ao entrar na tela e pisca no fim. Também pisca quando o ponteiro chega a um controle dentro de .gb-pisca-no-hover. O wordmark acende com o ponteiro, noutra peça.
Componentes
Ficha e depoimento
As duas peças de prova que a home e a aceleração repetiram. O número e a citação de cliente só entram na página com fonte, ano e autorização. Aqui a demonstração é a estrutura.
Ficha
.gb-fichaNúmero em realce, métrica e contexto. Ocupa 5 colunas e 7. Abaixo de 700 px, empilha.
- Tokens
--gb-realceno número,--gb-t-subna métrica.
12 colunas
Valor e contexto
A ficha ocupa 5 + 7 colunas da grade.
Depoimento com vídeo
.gb-depoimento · .gb-videoCitação ao lado da janela. O botão abre um dialog com o corte, sem raio. Com data-video (id do YouTube), o iframe só nasce no clique. Sem esse dado, o palco mostra o poster. Sem JS, fica o link alternativo. A duração, quando houver, vai num .gb-video__duracao dentro do rótulo.
- Acessibilidade O botão tem
aria-haspopup="dialog"earia-controls; o<dialog>temaria-label; o fechar,aria-label. - JS
iniciarVideo().
O olho achata ancorado na base.
Componentes
Motion
Quatro durações e três curvas. Tudo respeita prefers-reduced-motion: com movimento reduzido, cada peça aparece no estado final. Sem JavaScript tudo aparece. Se o JS falhar, um cão de guarda mostra tudo em 2,5 s.
--gb-m-fastcor, sublinhado, hover de link, tema do cabeçalho--gb-m-buttonpreenchimento e seta dos botões--gb-m-enterentrada de elementos, troca de painel, zoom de hover--gb-m-revealcapa diagonal e assentamento da imagem--gb-ease-outcubic-bezier(.22,.72,.2,1). Padrão--gb-ease-inoutcubic-bezier(.65,0,.35,1). Cabeçalho, luz--gb-ease-refcubic-bezier(.3,.7,.2,1). Botão de conversãoVocabulário de entrada
[data-reveal] · [data-reveal-grupo] · [data-reveal="linha"] · [data-reveal="janela"]Um atributo por elemento. data-reveal sobe 28 px e aparece; num data-reveal-grupo os filhos entram juntos, escalonados em 80 ms. linha desenha uma régua em X. janela desliza a capa e assenta a imagem. Títulos por linha (data-reveal-titulo) precisam do SplitText do GSAP; sem ele, caem no reveal simples. A máscara de linha dos títulos divididos é a .gb-mascara. Para a entrada genérica (troca de painel, item novo em lista), .gb-entra: sobe 10 px e aparece em 700 ms. O Repetir põe .is-resetting para voltar ao estado escondido sem transição.
- Acessibilidade Com movimento reduzido, cada peça aparece no estado final.
- Tokens
--gb-m-enter,--gb-m-reveal,--gb-ease-out. Variável local--atraso(escalonamento). - JS
iniciarReveal()põegb-motion-cssno<html>e, com os observadores prontos,gb-motion-pronto. Conteúdo inserido depois: chamar de novoiniciarReveal(),iniciarSimbolo()einiciarMarcador(), ouiniciarGambito(); o que já estava ligado não muda.
Processo
Da ideia ao “pedido confirmado”
Aqui é o caminho que seguimos até as suas vendas com a nova loja.
Piscada do símbolo
.gb-simbolo__olho · .is-piscando · .gb-pisca-no-hoverO olho achata ancorado na própria base e desce 6 unidades enquanto fecha, em 240 ms. Num símbolo estático, com as três partes do sprite inline (dentro de um <use> o CSS não alcança o olho), dispara por .is-piscando, pelo ponteiro fino sobre toda a .gb-pisca-no-hover ou pelo foco do teclado num link ou botão dentro dela. A montagem completa — corpo, seta pela diagonal e piscada — é a peça .gb-simbolo-vivo, na seção Logo e símbolos. Não usa GSAP.
- Tokens
--gb-ease-inout. - JS Num
.gb-simbolo-vivo, o eventogb:piscarpisca o olho: é o que o chip da demonstração dispara.
<div class="gb-faixa gb-pisca-no-hover">
<svg class="gb-marca-dagua" viewBox="0 0 83 76.4" aria-hidden="true">
<!-- as três partes de #gb-simbolo, inline: dentro de um <use> o CSS não alcança o olho -->
<g transform="translate(-250.5 -139.8)">
<path class="gb-simbolo__corpo" fill="currentColor" d="M288.792 140.8C268.196 140.8 251.5 157.455 251.5 178C251.5 198.545 268.196 215.2 288.792 215.2C298.713 215.2 307.728 211.334 314.409 205.031L304.554 183.948C303.724 184.128 302.862 184.224 301.978 184.224C295.287 184.224 289.863 178.813 289.863 172.139C289.863 170.485 290.196 168.91 290.798 167.475H277.527C277.191 169.072 277.014 170.727 277.014 172.424C277.014 183.934 285.142 193.548 295.985 195.871L298.097 200.388C295.231 201.575 292.088 202.23 288.792 202.23C275.377 202.23 264.502 191.382 264.502 178C264.502 164.618 275.377 153.77 288.792 153.77C298.441 153.77 306.756 159.343 310.675 167.475L319.249 156.536C312.495 147.016 301.372 140.8 288.792 140.8Z"/>
<path class="gb-simbolo__olho" fill="currentColor" d="M300.632 172.845C303.555 172.845 305.925 170.44 305.925 167.475H295.338C295.338 170.44 297.708 172.845 300.632 172.845Z"/>
<path class="gb-simbolo__seta" fill="currentColor" d="M325.474 195.403L332.5 185.295L324.404 167.475H310.675L318.354 184.071L309.931 195.407L325.474 195.403Z"/>
</g>
</svg>
…
</div>
// ou por JS, no <svg> com as partes inline; tirar a classe no fim deixa piscar de novo
simbolo.addEventListener('animationend', () => simbolo.classList.remove('is-piscando'), { once: true });
simbolo.classList.add('is-piscando');Referência
Regras do sistema
| Regra | Por quê |
|---|---|
| Texto Grafite sobre Laranja e sobre Pistache. Nunca Neve. | Neve sobre Laranja dá 2,3:1; sobre Pistache, 1,5:1. Abaixo do mínimo. |
| Anel de foco verde nos temas claro e névoa. Pistache no escuro, no verde e no menu aberto. No botão laranja, grafite nos temas claros e neve no escuro. | Laranja sobre Neve dá 2,28:1, abaixo dos 3:1 de um componente. Anel verde em volta do laranja mistura as duas cores. |
| Laranja cheio não encosta em verde cheio. Sobre Verde, conversão e acento viram Pistache; sobre Pistache, Grafite. No escuro o laranja fica. | Laranja e verde sólidos lado a lado brigam. Decisão de 16/10/2026. |
| Foco por teclado no botão de conversão mantém o rótulo. | O gesto de o rótulo sumir é hover e toque. Quem chega por Tab precisa ler o botão. |
| Erro de campo: texto na cor do tema, quadrado e borda laranja. | Laranja como texto sobre Neve dá 2,28:1. |
| Corte diagonal ou raio no mesmo elemento. | clip-path ignora border-radius. Sombra e contorno vão no wrapper. |
| Não aplicar o corte na assinatura do logo. | Regra do kit. O corte é recurso gráfico de apoio, não parte do logotipo. |
| Um recurso gráfico dominante por seção; dois planos no máximo. | Tabuleiro, luz, trama, fragmento e grão competem entre si e com o conteúdo. |
| O contorno do botão não se move no hover. | Preenchimento e seta respondem por dentro. Caixa estável, sem salto de layout. |
| Um botão de conversão por tela; no máximo dois na página vista de cima a baixo por seção. | O laranja é destaque pontual. Repetido, deixa de destacar. |
| Eyebrow só com o nome da seção. Sem numeração, sem emoji. | Decisão da landing. Os numerais ficam para marcos e painéis. |
| Setas e ícones do sprite, nunca caracteres. | Peso e alinhamento consistentes em qualquer fonte de fallback. |
| Fio do cabeçalho de seção some sobre tabuleiro. | Competiria com as linhas da malha. |
Tema por data-tema na seção. Painéis usam variáveis locais. | O cabeçalho copia o tema da seção sob ele; um data-tema num painel o confundiria. |
Uma frase por linha no desktop com span em bloco, não <br> oculto. | O SplitText quebra em <br> mesmo com display:none. |
| Campanha: Neve + Laranja + Grafite, sem Verde ou Pistache. | Territórios do kit. Institucional prioriza verdes e neutros. |
Referência
Instalar e versionar
<html lang="pt-BR" class="no-js">
<head>
<link rel="stylesheet" href="ds-gambito-v1/css/gambito.css">
<script>document.documentElement.classList.replace('no-js', 'js');</script>
</head>
<body>
<!-- colar aqui o conteúdo de ds-gambito-v1/assets/sprite.svg -->
<header class="gb-cabecalho" …>
<main id="conteudo">
<section class="gb-secao" data-tema="escuro">…</section>
</main>
<footer class="gb-rodape" data-tema="escuro">…</footer>
<script type="module">
import { iniciarGambito } from './ds-gambito-v1/js/gambito.js';
iniciarGambito();
</script>
</body>Arquivos
tokens/gambito.tokens.css: fonte única de cores, temas, tipografia, medidas e motion.tokens/gambito.tokens.json: o mesmo em JSON para Figma ou Style Dictionary.css/: um arquivo por família de componentes;gambito.cssimporta tudo na ordem.js/gambito.js: comportamentos opcionais, sem dependências.README.md: mapa completo das classes da landing para o Gambito.
Versionar
- Novo componente ou variante: versão menor (1.2, 1.3).
- Token ou marcação que quebra uso existente: Gambito 2.
- Outra direção visual: sistema novo com nome de abertura de xadrez e prefixo próprio (por exemplo
ds-siciliana-v1, classessc-). Os tokens--cl-*da paleta continuam os mesmos.
O que ficou de fora
- A interface da loja de demonstração “Casa Serra” (cliente fictício). Os nomes dos produtos aparecem só como conteúdo das demos do palco.
- O cartão e o rabisco do cursor sobre a palavra “Shopify”.
- A coreografia em loop da pilha de lojas e o tabuleiro em loop com GSAP: o
.gb-doce odata-loopcobrem a versão leve. - Órbita, vitrine, caminhos, ciclo da vaga, modal, carrossel, marquee e o easter egg do rodapé.