Cookest
Aplicação Móvel

Sistema de Tema

Tokens de design da marca Cookest e como são aplicados no Flutter

Sistema de Tema

Toda a linguagem visual do Cookest é definida em lib/src/shared/theme/shadcn_theme.dart.

Tokens de cor

TokenHexUtilização
sage#7A9A65Ações primárias, navegação ativa, estados selecionados, marcas de verificação
darkGreen#1C3A2ACabeçalhos, títulos de ecrãs, texto primário
background#F8F8F6Fundo de todos os ecrãs
surface#FFFFFFCartões, folhas inferiores, diálogos
textMuted#6B7280Texto secundário, metadados (tempos, avaliações)
textCaption#9CA3AFLegendas, etiquetas de navegação (inativo), marcadores de posição
amber#D97706Avisos de prazo, alertas de despensa
amberLight#FFF8E7Fundo da faixa de alerta
border#E5E7EBBordas de campos de entrada, divisores
divider#F0F0EESeparador da navegação inferior, divisores de secção

Tipografia

EstiloFonteTamanhoPesoUtilização
Exibição / Boas-vindasPlayfair Display26pxRegularBoas-vindas no ecrã inicial
Cabeçalho de secçãoPlayfair Display18pxRegular"O que está a cozinhar agora?"
Título da barra de aplicaçãoPlayfair Display22pxBoldTítulos dos ecrãs
Título da receita (cartão)Playfair Display16–18pxRegularNomes de receitas nos cartões
Corpo / Itens de listaInter14pxRegularIngredientes, artigos da despensa
MetadadosInter13pxRegularTempos de cozedura, avaliações, categorias
LegendaInter12pxRegularEstados vazios, texto de ajuda, etiquetas de navegação
Etiqueta de botãoInter14pxMediumTodos os botões
Cabeçalho de secçãoInter15pxSemiBold"Pequeno-almoço", "Lacticínios", etc.

Regra: O Playfair Display aparece apenas nos contextos listados acima. Todo o restante texto usa Inter.

Token de sombra

BoxShadow(
  color: Color(0x09000000),  // rgba(0,0,0,0.035)
  blurRadius: 12,
  offset: Offset(0, 2),
)

Aplicado a: cartões de receitas, cartão em destaque do ecrã inicial, folhas inferiores modais. Mais nada.

Configuração do ThemeData

ThemeData(
  colorScheme: ColorScheme.light(
    primary: Color(0xFF7A9A65),     // sage
    surface: Color(0xFFFFFFFF),
    background: Color(0xFFF8F8F6),
    onSurface: Color(0xFF1C3A2A),
  ),
  cardTheme: CardTheme(
    elevation: 0,
    shape: RoundedRectangleBorder(
      borderRadius: BorderRadius.circular(16),
    ),
  ),
  appBarTheme: AppBarTheme(
    elevation: 0,
    backgroundColor: Color(0xFFF8F8F6),
  ),
)

Microinterações

InteraçãoImplementaçãoDuração
Pressão em cartãoScaleTransition para 0.9780ms
Alternar favoritoAnimação de escala + preenchimento150ms
Troca de ícone de navegaçãoAnimatedSwitcher crossfade150ms
Cor da etiqueta de navegaçãoAnimatedDefaultTextStyle150ms
Deslize para eliminarRevelação progressiva de opacidadeProporcional ao arrasto
Geração do plano de refeiçõesFade-in escalonado por slot80ms entre slots
Confirmações por snackbarScaffoldMessengerPadrão

Especificações da barra de navegação inferior

PropriedadeValor
Altura da barra64px + inserção da área segura do dispositivo
Tamanho do ícone22px (Lucide)
Fonte da etiquetaInter 10px, abaixo do ícone
Estado ativoÍcone verde-sálvia preenchido + etiqueta verde-sálvia (#7A9A65)
Estado inativo#9CA3AF para ícone e etiqueta
Separador superiorLinha de 1px #F0F0EE
Sombra da barraNenhuma
Transição do íconeAnimatedSwitcher crossfade 150ms
Transição da etiquetaAnimatedDefaultTextStyle 150ms

Sistema de espaçamento

ContextoValor
Padding horizontal do ecrã20px (padrão), 16px (itens de lista)
Padding do cartão12–16px
Espaçamento superior do cabeçalho de secção16px
Espaçamento inferior do cabeçalho de secção8px
Raio de borda — chips pílula20px
Raio de borda — cartões16px
Raio de borda — contentores menores12px
Raio de borda — miniaturas de itens de lista10px
Borda do campo de entrada1px #E5E7EB, raio 10px
Contorno de foco do campo de entrada1.5px verde-sálvia

Indicadores de seleção (influência ShadCN)

EstadoAparência
Separador ativo / seletor de diaSublinhado verde-sálvia de 2px — sem fundo preenchido
Chip de categoria ativoPreenchimento verde-sálvia + texto branco
Chip de categoria inativoFundo branco + borda de 1px #E5E7EB + texto #6B7280

Estados interativos

InteraçãoImplementaçãoDuração
Pressão em botãoScaleTransition para 0.9780ms
Deslize para eliminarOpacidade do fundo de eliminação cresce proporcionalmente à distância de deslize; atinge cor completa no limiar de confirmaçãoProporcional ao arrasto
Alternar coração/favoritoAnimação de escala + transição de preenchimento150ms
Geração de slot do plano de refeiçõesFade-in escalonado, atraso de 80ms entre cada slotPor slot
Transição de passo no modo de cozinhaDeslize + fade

On this page