bg-verde-500 existem como base técnica. O app consome papéis semânticos (bg-surface, bg-brand, text-success, text-danger), que alternam dinamicamente no tema escuro e claro.
success, success-fg, -subtle, -text
warning, warning-fg, -subtle, -text
danger, danger-fg, -subtle, -text
info, info-fg, -subtle, -text
| Combinação | Papel no produto | Razão | Conformidade | Amostra |
|---|---|---|---|---|
| Branco (#FFFFFF) no Preto (#0C0D10) | Títulos principais e botões flutuantes | 18.2:1 | AAA · Aprovado | Manifesto |
| Preto (#0C0D10) no Creme (#D8D5CD) | Botão primário de CTA e chips ativos | 13.5:1 | AAA · Aprovado | Confirmar |
| Verde (#5BB170) no Preto (#0C0D10) | Feedback de sucesso e badges confirmados | 7.4:1 | AAA · Aprovado | Confirmada |
| Âmbar (#F9A91F) no Preto (#0C0D10) | Alertas de pendência e relógio de turnos | 9.1:1 | AAA · Aprovado | Pendente |
| Saibro (#D1401F) com Branco (#FFFFFF) | Botão de erro / cancelamento destrutivo | 4.9:1 | AA · Aprovado | Cancelar |
| Token | Papel no tema |
|---|---|
| --canvas / --surface | fundos da aplicação (#0C0D10, #16171A) |
| --line / --line-strong | bordas e divisores estruturais (#1F2024, #2A2B30) |
| --fg / --fg-muted / --fg-subtle | hierarquia de texto (#FFFFFF, #B4AFAB, #757575) |
| --brand / --brand-cream | acento nobre da marca (#D8D5CD) |
| --success / --success-subtle | verde funcional para confirmações e checks (#5BB170, #162418) |
| --warning / --warning-subtle | âmbar funcional para lembretes e pendências (#F9A91F, #2A2010) |
| --danger / --danger-subtle | saibro/coral para cancelamentos e erros (#D1401F, #2A1412) |
| --info / --info-subtle | neutro para manutenção e comunicados (#757575, #1F2024) |
| Token | Papel no tema |
|---|---|
| --font-sans | família principal do app (Geist) |
| --font-mono | código, relógio e referências bíblicas (Geist Mono) |
| --leading-relaxed | entrelinha 1.65 para leitura contínua das Escrituras |
| --tracking-tight | espaçamento compacto para títulos display (-0.02em) |
Três valores fazem a tela inteira da inscrição na Conferência: 20 de respiro nas laterais, 16 dentro de cada bloco e 12 entre um bloco e outro. A barra de baixo repete os 20 e usa o botão xl de 56.
| Token | Papel no tema |
|---|---|
| --space-base | unidade fundamental da grade (4px) |
| --radius-sm / --radius-md / --radius-lg | curvaturas estruturais (8px, 14px, 20px) |
| --radius-pill | botões e badges totalmente circulares (9999px) |
| --touch-target-min | tamanho mínimo para toque móvel (44px) |
| Token | Papel no tema |
|---|---|
| --duration-fast | microinterações e feedback de toque (120ms) |
| --duration-normal | abertura de dropdowns e expansão de itens (200ms) |
| --duration-slow | transições de tela e entrada de modais (350ms) |
| --ease-out | curva padrão de chegada suave [0.22, 1, 0.36, 1] |
Tom de voz: direto, acolhedor, bíblico. Verbos no imperativo gentil (“Leia”, “Ore”, “Compartilhe”), sem jargão de rede social e sem emoji na interface.
A ação principal ocupa a largura toda, no tamanho xl, e mostra o valor da inscrição. Ao tocar, vira carregando sem mudar de largura e termina em sucesso. Abaixo dela, a opção de cupom.
Quando o banco recusa, a resposta surge no lugar e oferece três saídas em ordem de peso: accent para resolver com Pix agora, secondary para trocar o cartão e texto para falar com a organização.
| Estado | primary | accent | secondary | outline | text | destructive |
|---|---|---|---|---|---|---|
| Padrão |
|
|
|
|
|
|
| Hover |
|
|
|
|
|
|
| Foco |
|
|
|
|
|
|
| Pressionado |
|
|
|
|
|
|
| Desabilitado |
|
|
|
|
|
|
| Carregando |
|
|
|
|
|
|
| Sucesso |
|
|
|
|
|
|
| Token | Papel no tema |
|---|---|
| --accent / --accent-hover / --accent-pressed | primary (creme #D8D5CD) |
| --surface-white / --surface-white-hover | accent (branco puro #FFFFFF) |
| --surface-dark / --line | secondary (#16171A / #1F2024) |
| --line-strong / --hover | outline, text (#2A2B30) |
| --danger / --danger-fg | destructive (coral #D97A66) |
| --focus | anel duplo de foco acessível (WCAG) |
| --radius-full | formato pill (9999px) |
| --duration-fast / --curve-out | compressão de toque tátil (200ms) |
| Propriedade | Tipo | Padrão | Descrição |
|---|---|---|---|
| variant | "primary" | "accent" | "secondary" | "outline" | "text" | "destructive" | "primary" | Hierarquia visual da ação. |
| size | "sm" | "md" | "lg" | "xl" | "md" | Altura 34, 42, 48 e 56px. Alinha perfeitamente à grade de inputs. |
| loading | boolean | false | Trava o botão, exibe o spinner e anuncia aria-busy. |
| loadingText | string | undefined | Texto exibido durante a requisição assíncrona. |
| success | boolean | false | Confirmação tátil: o ícone vira check animado. |
| successText | string | undefined | Texto exibido na confirmação de sucesso. |
| leadingIcon | ReactNode | undefined | Ícone antes do rótulo textual. |
| trailingIcon | ReactNode | undefined | Ícone posicionado após o rótulo. |
| fullWidth | boolean | false | Ocupa 100% da largura do contêiner mobile. |
| iconOnly | boolean | false | Quadrado/circular. Prefira o componente IconButton. |
| asChild | boolean | false | Delega o elemento raiz preservando tipagem e acessibilidade. |
| Estado | Padrão | Com valor | Foco | Erro | Desabilitado |
|---|---|---|---|---|---|
| Texto simples |
|
|
|
|
|
| Com ícone |
mail
|
mail
|
mail
|
mail
|
mail
|
| Busca |
search
|
search
|
search
|
search
|
search
|
| Senha |
lock
|
lock
|
lock
|
lock
|
lock
|
| Área de texto |
|
|
|
|
|
| Token | Papel no tema |
|---|---|
| --input-bg | fundo do campo (#16171A) |
| --input-border | borda padrão de repouso (#2A2B30) |
| --input-focus | anel e contorno no foco ativo (#D8D5CD) |
| --input-error | borda e mensagem de validação (#D97A66) |
| --input-placeholder | texto guia suave (#757575) |
| --radius-md | cantos arredondados (14px) |
| Propriedade | Tipo | Padrão | Descrição |
|---|---|---|---|
| label | string | undefined | Rótulo acessível persistente posicionado acima do campo. |
| placeholder | string | undefined | Exemplo de preenchimento visível enquanto o campo está vazio. |
| value | string | "" | Valor controlado do campo. |
| onChangeText | (val: string) => void | undefined | Callback disparado a cada caractere digitado. |
| leadingIcon | ReactNode | undefined | Ícone prefixo (ex: lupa, envelope, cadeado). |
| clearable | boolean | false | Exibe o botão de limpar o campo em 1 toque. |
| mask | "phone" | "cpf" | "cep" | "currency" | undefined | Aplica formatação automática em tempo de digitação. |
| error | string | undefined | Mensagem de erro explicativa que altera a borda para coral. |
| success | string | undefined | Mensagem de confirmação positiva acompanhada de check verde. |
| autoGrow | boolean | false | Permite que o Textarea cresça conforme o texto aumenta. |
| Estado | Básico | Com valor | Foco | Erro | Desabilitado |
|---|---|---|---|---|---|
| Padrão |
Tradução
arrow_drop_down
|
NAA
arrow_drop_down
|
NAA
arrow_drop_down
|
NAA
arrow_drop_down
|
NAA
arrow_drop_down
|
| Hover |
Tradução
arrow_drop_down
|
NAA
arrow_drop_down
|
NAA
arrow_drop_down
|
NAA
arrow_drop_down
|
NAA
arrow_drop_down
|
| Foco |
Tradução
arrow_drop_down
|
NAA
arrow_drop_down
|
NAA
arrow_drop_down
|
NAA
arrow_drop_down
|
NAA
arrow_drop_down
|
| Erro |
Tradução
arrow_drop_down
|
NAA
arrow_drop_down
|
NAA
arrow_drop_down
|
NAA
arrow_drop_down
|
NAA
arrow_drop_down
|
| Token | Papel no tema |
|---|---|
| --select-bg | fundo da barra e do popover (#16171A / #121316) |
| --select-border | borda sutil do componente (#2A2B30) |
| --select-hover | destaque do item selecionado (#1F2024) |
| --select-accent | marcação em creme da versão ativa (#D8D5CD) |
| Propriedade | Tipo | Padrão | Descrição |
|---|---|---|---|
| value | string | undefined | Valor selecionado controlado. |
| onValueChange | (value: string) => void | undefined | Callback disparado ao escolher uma opção. |
| placeholder | string | "Selecione..." | Texto padrão quando nada está selecionado. |
| disabled | boolean | false | Desabilita o disparador. |
| searchable | boolean | false | Ativa o campo de busca no cabeçalho da lista. |
| Estado | Desligado | Ligado |
|---|---|---|
| Padrão |
|
|
| Hover |
|
|
| Foco |
|
|
| Pressionado |
|
|
| Desabilitado |
|
|
| Carregando |
progress_activity
|
progress_activity
|
| Token | Papel no tema |
|---|---|
| --switch-track-off | fundo do switch inativo (#2A2B30) |
| --switch-track-on | fundo do switch ativo (#D8D5CD) |
| --switch-thumb | thumb tátil deslizante (#0C0D10 / #FFFFFF) |
| --checkbox-border | borda da caixa (#2A2B30) |
| --checkbox-checked | preenchimento ao marcar (#D8D5CD) |
| --radio-dot | ponto interno no radio (#D8D5CD) |
| Propriedade | Tipo | Padrão | Descrição |
|---|---|---|---|
| checked | boolean | false | Estado ativo/ligado do controle. |
| onChange | (checked: boolean) => void | undefined | Callback disparado na alteração de estado. |
| label | string | undefined | Rótulo acessível da linha. |
| description | string | undefined | Texto descritivo de apoio abaixo do rótulo. |
| disabled | boolean | false | Desabilita o clique e reduz a opacidade. |
| size | "sm" | "md" | "md" | Tamanho do switch (22px ou 28px). |
| Token | Papel no tema |
|---|---|
| --dropdown-bg | fundo do menu flutuante (#121316) |
| --dropdown-border | linha externa de contorno (#2A2B30) |
| --dropdown-hover | fundo do item com foco (#1F2024) |
| --dropdown-danger | ação destrutiva em coral (#D97A66) |
| Propriedade | Tipo | Padrão | Descrição |
|---|---|---|---|
| open | boolean | undefined | Controle externo de visibilidade. |
| onOpenChange | (open: boolean) => void | undefined | Callback disparado ao abrir ou fechar. |
| align | "start" | "center" | "end" | "end" | Alinhamento horizontal em relação ao botão de disparo. |
| Token | Papel no tema |
|---|---|
| --chip-active-bg | fundo do chip selecionado (#D8D5CD) |
| --chip-active-fg | texto do chip selecionado (#0C0D10) |
| --chip-inactive-border | borda em repouso (#2A2B30) |
| --radius-full | formato pill completo |
| Propriedade | Tipo | Padrão | Descrição |
|---|---|---|---|
| selected | boolean | false | Indica se o chip está marcado. |
| onSelect | () => void | undefined | Callback disparado ao tocar no chip. |
| icon | ReactNode | undefined | Ícone opcional à esquerda. |
| removable | boolean | false | Exibe botão X para remover o filtro aplicado. |
| Estado | Livre | Selecionado | Ocupado | Seu turno |
|---|---|---|---|---|
| Padrão |
19:00
|
19:00
|
19:00
|
19:00
|
| Hover |
19:00
|
19:00
|
19:00
|
19:00
|
| Foco |
19:00
|
19:00
|
19:00
|
19:00
|
| Token | Papel no tema |
|---|---|
| --slot-selected-bg | fundo do turno escolhido (#D8D5CD) |
| --slot-selected-fg | texto do turno escolhido (#0C0D10) |
| --slot-occupied-fg | texto riscado inativo (#757575) |
| --radius-md | arredondamento do botão de hora (12px) |
| Propriedade | Tipo | Padrão | Descrição |
|---|---|---|---|
| slots | Array<{ time: string, available: boolean }> | [] | Lista completa de turnos do dia. |
| selectedTime | string | null | null | Horário atualmente selecionado. |
| onSelect | (time: string) => void | undefined | Callback disparado ao clicar num turno livre. |
| duration | number | 60 | Duração do turno em minutos. |
| Token | Papel no tema |
|---|---|
| --card-bg | superfície padrão (#16171A) |
| --card-accent-bg | superfície em destaque creme (#D8D5CD) |
| --card-border | borda estrutural (#2A2B30) |
| --radius-lg | cantos arredondados generosos (20px) |
| Propriedade | Tipo | Padrão | Descrição |
|---|---|---|---|
| variant | "surface" | "accent" | "outline" | "surface" | Estilo e contraste do contêiner. |
| padding | "sm" | "md" | "lg" | "md" | Espaçamento interno do card. |
| interactive | boolean | false | Adiciona feedback de toque e hover. |
| Token | Papel no tema |
|---|---|
| --badge-primary-bg | fundo de destaque creme (#D8D5CD) |
| --badge-neutral-border | borda discreta de tag (#2A2B30) |
| --status-success | verde suave institucional (#8DB596) |
| --status-live | coral suave para transmissões (#D97A66) |
| Propriedade | Tipo | Padrão | Descrição |
|---|---|---|---|
| variant | "default" | "outline" | "accent" | "default" | Estilo visual do badge. |
| status | "confirmed" | "pending" | "live" | "recorded" | undefined | Semântica de status com ícone correspondente. |
| icon | ReactNode | undefined | Ícone opcional acoplado ao rótulo. |
| Token | Papel no tema |
|---|---|
| --sheet-bg | fundo do painel inferior (#16171A) |
| --sheet-drag-handle | puxador cinza superior (#757575) |
| --overlay-backdrop | escurecimento do fundo com blur (rgba(0,0,0,0.65)) |
| --radius-xl | cantos superiores arredondados (24px) |
| Propriedade | Tipo | Padrão | Descrição |
|---|---|---|---|
| open | boolean | false | Controla a exibição da folha ou modal. |
| onOpenChange | (open: boolean) => void | undefined | Callback disparado ao abrir ou fechar. |
| title | string | undefined | Título de cabeçalho do painel. |
| snapPoints | string[] | ["50%", "90%"] | Alturas permitidas ao arrastar no celular. |
| Token | Papel no tema |
|---|---|
| --toast-bg | fundo de alto contraste (#FFFFFF) |
| --toast-fg | texto escuro legível (#0C0D10) |
| --toast-shadow | sombra suave profunda (0 12px 32px rgba(0,0,0,0.5)) |
| --toast-duration | tempo de permanência em tela (2600ms) |
| Propriedade | Tipo | Padrão | Descrição |
|---|---|---|---|
| title | string | undefined | Mensagem principal de confirmação. |
| description | string | undefined | Texto secundário explicativo. |
| action | { label: string, onClick: () => void } | undefined | Botão de ação rápida dentro do toast. |
| duration | number | 2600 | Tempo em milissegundos antes de desaparecer. |
| Token | Papel no tema |
|---|---|
| --tabs-track | trilho escuro (#16171A) |
| --tabs-thumb | indicador ativo em creme (#D8D5CD) |
| --tabs-indicator-ease | curva cubic-bezier(.2,.8,.2,1) |
| Propriedade | Tipo | Padrão | Descrição |
|---|---|---|---|
| value | string | undefined | Identificador da aba atualmente ativa. |
| onValueChange | (value: string) => void | undefined | Callback disparado ao tocar em outra aba. |
| variant | "segmented" | "underline" | "segmented" | Estilo visual das abas. |
| Estado | Inativo | Hover | Foco | Ativo | Com novidade |
|---|---|---|---|---|---|
| TabBar Item |
home
Início
|
home
Início
|
home
Início
|
home
Início
|
home
Início
|
| Navbar Link |
Estudos
|
Estudos
|
Estudos
|
Estudos
|
Estudos
|
| Sidebar Item |
volunteer_activism
Sala de Oração
|
volunteer_activism
Sala de Oração
|
volunteer_activism
Sala de Oração
|
volunteer_activism
Sala de Oração
|
volunteer_activism
Sala de Oração
NOVO
|
| Token | Papel no tema |
|---|---|
| --tabbar-bg | fundo da barra de abas (#0C0D10) |
| --tabbar-active-fg | ícone e rótulo ativo (#D8D5CD) |
| --tabbar-inactive-fg | ícone e rótulo inativo (#757575) |
| --navbar-bg | cabeçalho da aplicação (#121316) |
| --safe-area-bottom | respiro inferior de home indicator (pb-safe) |
| --avatar-bg | superfície padrão de avatar (#D8D5CD) |
| Propriedade | Tipo | Padrão | Descrição |
|---|---|---|---|
| activeTab | "home" | "bible" | "plan" | "feed" | "more" | "home" | Aba selecionada no rodapé. |
| onChange | (tab: string) => void | undefined | Callback disparado ao tocar em outra aba. |
| safeArea | boolean | true | Aplica o padding inferior automático de Safe Area. |
| badgeCount | number | boolean | undefined | Exibe ponto verde ou contagem de novidades na aba. |
| Token | Papel no tema |
|---|---|
| --skeleton-bg | fundo base do esqueleto (#1F2024) |
| --skeleton-shimmer | brilho translúcido em movimento (#2A2B30) |
| --spinner-track | trilho circular a 20% de opacidade |
| Propriedade | Tipo | Padrão | Descrição |
|---|---|---|---|
| loading | boolean | true | Indica se deve exibir o esqueleto ou o conteúdo filho. |
| lines | number | 3 | Quantidade de linhas de texto do esqueleto. |
Tab bar · 5 abas