Pular para o conteúdo principal

Theming

O sistema de temas usa Tailwind CSS v3 com tokens organizados em objetos aninhados por secao. Forks sobrescrevem theme.config.ts para personalizar cores.

theme.config.ts

A estrutura usa objetos aninhados (nested), nao chaves flat com prefixo. Cada secao do layout tem seu proprio objeto de cores:

// app/config/theme/colors.ts
export const themeColors = {
// Cores globais (top-level)
primary: '#a3d712',
'bg-primary': '#1a1d1e',
secondary: '#a0a0a0',
'bg-secondary': '#212425',
texts: '#ffffff',
links: '#a3d712',
titles: '#ffffff',
'button-bg': '#a3d712',
'button-text': '#1a1d1e',
success: '#22c55e',
error: '#ef4444',
warning: '#f59e0b',
info: '#3b82f6',

// Game cards
game: {
title: '#ffffff',
subtitle: '#a0a0a0',
'button-bg': '#a3d712',
'button-text': '#1a1d1e',
overlay: 'rgba(0,0,0,0.6)',
icon: '#ffffff',
},

// Header
header: {
bg: '#1a1d1e',
links: '#ffffff',
texts: '#a0a0a0',
'register-bg': '#a3d712',
'register-text': '#1a1d1e',
'login-bg': 'transparent',
'login-text': '#ffffff',
},

// Sidebar
sidebar: {
bg: '#212425',
links: '#ffffff',
titles: '#a0a0a0',
'button-bg': '#a3d712',
'button-text': '#1a1d1e',
'cta-bg': '#a3d712',
'cta-text': '#1a1d1e',
},

// Footer
footer: {
'bg-primary': '#1a1d1e',
'bg-secondary': '#212425',
links: '#a0a0a0',
titles: '#ffffff',
texts: '#a0a0a0',
'button-bg': '#a3d712',
'button-text': '#1a1d1e',
},

// Auth modals
auth: {
'bg-primary': '#212425',
'bg-inputs': '#323637',
'text-inputs': '#ffffff',
'bg-close': '#323637',
'icon-close': '#ffffff',
links: '#a3d712',
titles: '#ffffff',
texts: '#a0a0a0',
'button-bg': '#a3d712',
'button-text': '#1a1d1e',
backdrop: 'rgba(0,0,0,0.5)',
},

// Payments modals
payments: {
'bg-primary': '#212425',
titles: '#ffffff',
texts: '#a0a0a0',
'button-bg': '#a3d712',
'button-text': '#1a1d1e',
},
};

Tokens por secao

Cores globais (top-level)

TokenClasse TailwindUso
primarybg-primary, text-primaryCor primaria da marca
bg-primarybg-bg-primaryFundo principal do app
secondarytext-secondaryTextos secundarios
bg-secondarybg-bg-secondaryFundo secundario
textstext-textsCor de texto padrao
linkstext-linksCor de links
titlestext-titlesCor de titulos
button-bgbg-button-bgFundo de botoes globais
button-texttext-button-textTexto de botoes globais
successbg-success, text-successSucesso
errorbg-error, text-errorErro
warningbg-warning, text-warningAviso
infobg-info, text-infoInformativo

Game (cards de jogos)

TokenClasse TailwindUso
game.titletext-game-titleTitulo do card
game.subtitletext-game-subtitleSubtitulo/provider
game.button-bgbg-game-button-bgBotao "Jogar"
game.button-texttext-game-button-textTexto do botao
game.overlaybg-game-overlayOverlay no hover
game.icontext-game-iconIcones do card
TokenClasse TailwindUso
header.bgbg-header-bgFundo do header
header.linkstext-header-linksLinks de navegacao
header.textstext-header-textsTextos auxiliares
header.register-bgbg-header-register-bgBotao registrar (fundo)
header.register-texttext-header-register-textBotao registrar (texto)
header.login-bgbg-header-login-bgBotao login (fundo)
header.login-texttext-header-login-textBotao login (texto)
TokenClasse TailwindUso
sidebar.bgbg-sidebar-bgFundo da sidebar
sidebar.linkstext-sidebar-linksLinks de menu
sidebar.titlestext-sidebar-titlesTitulos de secao
sidebar.button-bgbg-sidebar-button-bgBotao na sidebar
sidebar.button-texttext-sidebar-button-textTexto do botao
sidebar.cta-bgbg-sidebar-cta-bgCTA especial (fundo)
sidebar.cta-texttext-sidebar-cta-textCTA especial (texto)
TokenClasse TailwindUso
footer.bg-primarybg-footer-bg-primaryFundo principal
footer.bg-secondarybg-footer-bg-secondaryFundo secundario
footer.linkstext-footer-linksLinks
footer.titlestext-footer-titlesTitulos
footer.textstext-footer-textsTextos
footer.button-bgbg-footer-button-bgBotao (fundo)
footer.button-texttext-footer-button-textBotao (texto)

Auth (modais de autenticacao e validacao)

TokenClasse TailwindUso
auth.bg-primarybg-auth-bg-primaryFundo do modal
auth.bg-inputsbg-auth-bg-inputsFundo dos inputs e selects
auth.text-inputstext-auth-text-inputsTexto dos inputs
auth.bg-closebg-auth-bg-closeFundo do botao fechar
auth.icon-closetext-auth-icon-closeIcone do botao fechar
auth.linkstext-auth-linksDestaques, labels, badges, carousel ativo
auth.titlestext-auth-titlesTitulos dos modais
auth.textstext-auth-textsTextos secundarios, subtitulos
auth.button-bgbg-auth-button-bgBotao primario (fundo)
auth.button-texttext-auth-button-textBotao primario (texto)
auth.backdropbg-auth-backdropOverlay backdrop

Todos os modais de validacao (ValidationBlockerOverlay, ValidationStepsModal, PasswordValidationModal) e o Modal base usam exclusivamente tokens auth.*. Ao trocar essas cores no fork, todos os modais se adaptam automaticamente.

Payments (modais de pagamento)

TokenClasse TailwindUso
payments.bg-primarybg-payments-bg-primaryFundo do modal
payments.titlestext-payments-titlesTitulos
payments.textstext-payments-textsTextos
payments.button-bgbg-payments-button-bgBotao (fundo)
payments.button-texttext-payments-button-textBotao (texto)

tailwind.config.ts

O Tailwind config usa ESM import (nao require):

// tailwind.config.ts
import { themeColors } from './app/config/theme.config';
import forms from '@tailwindcss/forms';
import typography from '@tailwindcss/typography';
import aspectRatio from '@tailwindcss/aspect-ratio';

export default {
content: ['./app/**/*.{ts,tsx}'],
important: true,
darkMode: 'class',
theme: {
// SUBSTITUI theme.colors completamente — sem paleta default do Tailwind
colors: themeColors,
extend: {
screens: {
xxs: '390px',
xs: '368px',
},
},
},
plugins: [forms, typography, aspectRatio, textFill],
};
aviso

O theme.colors substitui completamente a paleta default do Tailwind (sem extend). Isso significa que classes como bg-white, text-gray-500, bg-blue-600 etc. nao existem. Todas as cores devem usar os tokens definidos em themeColors.

Plugins

PluginUso
@tailwindcss/formsReset de estilos de formulario
@tailwindcss/typographyClasse prose para conteudo rich-text
@tailwindcss/aspect-ratioaspect-w-* / aspect-h-* para iframes

Custom screens

BreakpointTamanhoUso
xxs390pxiPhone 12/13/14 Pro
xs368pxDevices menores

Font

A fonte principal e Montserrat, self-hosted via @fontsource/montserrat (nao Google Fonts CDN).

// Importada no entry point
import '@fontsource/montserrat/400.css';
import '@fontsource/montserrat/500.css';
import '@fontsource/montserrat/600.css';
import '@fontsource/montserrat/700.css';

Definida no Tailwind config como fontFamily.sans e no CSS global.

Como personalizar em um fork

  1. Copie app/config/theme/colors.ts para o fork
  2. Altere as cores desejadas (mantendo a estrutura aninhada)
  3. Pronto — Tailwind compila automaticamente com os novos tokens
  4. Para adicionar novas secoes, adicione um novo objeto aninhado e use as classes geradas (bg-{secao}-{token}, text-{secao}-{token})