Marca:

Design System

Troque a marca no dropdown acima — todos os tokens --ds-* são reescritos via BrandThemeProvider. Use a sidebar para navegar entre os componentes.

Button

Figma 1355-451 · 4 variants × 3 sizes × 2 states.

lgmdsm
primary
·disabled
secondary
·disabled
border
·disabled
text
·disabled

TextField

Figma 1564-1271 · 4 estados (inactive / selected / disabled / error) × filled/unfilled. O estado 'selected' aparece ao focar qualquer input default.

inactive-empty

Este é um exemplo de descrição

inactive-filled

Este é um exemplo de descrição

selected-empty

Este é um exemplo de descrição

selected-filled

Este é um exemplo de descrição

disabled-empty

Este é um exemplo de descrição

disabled-filled

Este é um exemplo de descrição

error-empty

Este é um exemplo de descrição

Error message

error-filled

Este é um exemplo de descrição

Error message

Select Field

Wrapper de formulário sobre o Select do shadcn, casado com o padrão visual do TextField (label acima, container 48px, borda gray-50 → foreground no foco, chevron 20px). Layout provisório — atualizar quando o node do Figma for enviado.

Default · placeholder

Preenchido / erro

Selecione uma opção

Checkbox Field

Figma 1568-3076 · Caixa 22px (radius sm, stroke thin) + label 14px Semibold + description opcional. Tri-state (unchecked / checked / indeterminate) × enabled/disabled. Controlado ou não controlado.

Enabled

Description text

Description text

Description text

Disabled

Description text

Description text

Description text

Card · variant="card"

21,097 km

Checkbox Card

Figma 4421-20345 · Card com checkbox + label. Quando marcado, expande e revela conteúdo (children) — usado na tarefa 'Objetivo → melhorar performance' para capturar tempo/data por distância.

Colapsado (sem children)

Expansível (com children)

Checkbox Circle

Figma 4421-11840 · Checkbox circular 40px com label abaixo. Usado em listas horizontais (dias da semana) via CheckboxCircleList.

Estados

CheckboxCircleList · dias da semana

Goal Progress Chart

Figma 4503-25959 · Visão do objetivo do atleta. 7 cenários exatos: 'run_event' em andamento (troféu preenchendo + card horizontal com barra parcial e bandeira posicionada) e concluído (troféu 100% + Objetivo concluído com barra cheia); mais 5 objetivos não-prova (Começar a correr, Melhorar performance, Perder peso, Socializar, Cuidar da saúde), renderizados como card compacto com ícone + label.

Prova · em andamento

35%

Faltam

128 dias

Maratona do Rio

Maratona do Rio

25 ABR 2026

Prova · concluída

100%

Objetivo

concluído

Objetivo concluído

Maratona do Rio

25 ABR 2026

Começar a correr

Começar a correr

Melhorar performance

Melhorar performance

Perder peso

Perder peso

Socializar

Socializar

Cuidar da minha saúde

Cuidar da minha saúde

Sprint Count

Figma 4503-25503 · Cabeçalho da tela de Performance com o total de sprints (blocos de treino) do plano. Ícone circular verde + total em Saira bold italic.

80 Sprints
12 Sprints
1 Sprint

Workout Count Chart

Figma 4503-25988 · Card do sprint com feitos / perdidos / restantes. Estado em andamento (fundo gray-25, barra preta + hachura + branco) e concluído (fundo primary-pure, barra 100% verde) — o estado concluído é ativado automaticamente quando done === total.

Em andamento (2 feitos, 1 perdido, 4 total)

Treinos
2/ 4
2 Feitos
1 Perdido

Concluído (4 / 4)

Treinos
4/ 4
4 Feitos

Início do sprint (0 / 5)

Treinos
0/ 5
0 Feitos

Quase lá (3 feitos, 0 perdido, 4 total)

Treinos
3/ 4
3 Feitos

Line Chart

Figma 4503-25848 · Gráfico de linha genérico do DS. Curva suave (Catmull-Rom), grid tracejado, indicador (ponto + rótulo X sublinhado) no ponto destacado — padrão: último. Header com título, valor grande e par sumário à direita.

Tempo total · ano

Tempo total
20h 45min
Média semanal5h 15
706050403020100
JFMAMJJASONDEZ

Distância mensal · 6 meses

Distância
42 km
Média semanal8,2km
50403020100
JulAgoSetOutNovDez

Metric Card

Figma 4503-25698 · Card destacado (218px por default) com ícone + título, valor grande + unidade, stat secundário e trend. Variantes dark (fundo primary-pure, valor em secondary-pure) e light (fundo gray-25, valor em primary-pure).

Dark · Pace médio · com trend

Pace médio (mês)
05:24min/km
Vel. média23 km/h
+5%

Light · Distância · sem trend

Distância (mês)
42km
Vel. média8,2 km/h

Metric History Card

Figma 4503-25698 · Card auxiliar (fundo gray-25) com lista de períodos (mês/semana) e seu valor, distribuídos verticalmente com justify-between. Pensado para compor ao lado do MetricCard num flex row com items-stretch e gap-400.

Isolado · 3 períodos

Jan00:00
Dez04:35
Nov04:35

Combo · MetricCard (dark) + MetricHistoryCard

Pace médio (mês)
05:24min/km
Vel. média23 km/h
+5%
Jan12 km
Dez38 km
Nov35 km

Training Zones Chart

Figma 4503-25723 · Gráfico de barras verticais para zonas de treino (Z1–Z5). Cada barra tem percentual + duração no topo e o rótulo da zona embaixo. A altura escala proporcionalmente ao maior percentual do conjunto.

Padrão · 5 zonas

Zonas de treino
20%16 min
Z1
40%32 min
Z2
8%9 min
Z3
27%20 min
Z4
5%2 min
Z5

Stat Card

Figma 4503-25772 · Card compacto de estatística (fundo gray-25). Header ícone + título, valor grande (md/24) com unidade, trend opcional embaixo. Use quando só há um número + trend, sem par de labels secundárias.

Cadência média
162ppm
+5%
Passadas
8.240
+12%
Elevação
128m

Radio Field

Figma 1593-3506 (default), 4421-19847 (card) e 4421-20059 (card com ícone + descrição). Selected border = primary/pure.

Default · Enabled

Description text

Description text

Default · Disabled

Description text

Description text

Card · Enabled

Card · Disabled

Card · Ícone + descrição

Nunca corri como esporte antes

Já corro e quero evoluir

Tenho uma corrida marcada

Toggle

Figma 1553-2274 · Track radius full, knob 24px. ON usa primary/pure; OFF usa transparent/dark-20%. Controlado ou não controlado, com estado disabled.

Enabled

OFF (default)
ON (default)

Disabled

OFF
ON

List Item

Figma 1555-2314 · Item de lista com 3 variantes: default (divider inferior), filled (fundo gray-25) e border (contorno gray-25). Slots: leading icon, título, tag inline, descrição, caption, unread dot e trailing (texto, notification bubble, chevron ou custom).

Default

Título

Description text Lorem Ipsum dolor sit amet

Com tagPendente

Description text Lorem Ipsum dolor sit amet

Não lido

Aparece o ponto à esquerda do conteúdo

Filled

Título

Description text Lorem Ipsum dolor sit amet

Notificações

3 novas mensagens

3

Border · variações de trailing

Peso corporal

Última medição há 3 dias

72 Kg
Sem trailing

Passe trailing={null} para ocultar o chevron

Com caption

Description text Lorem Ipsum dolor sit amet

Atualizado agora

Title Section

Figma 4442-74508 · Título de seção com ícone Tabler + label uppercase (Saira Bold Italic 20/24). Ícone é configurável via prop.

Tarefas pendentes
Treinos da semana
Conquistas
Sem ícone

Tabs

Figma 4421-15661 · Navegação em abas. Título italic (Saira) — bold quando ativo — e barra 8px em secondary/pure abaixo do item selecionado. Gap 24, padding lateral 16.

Ativa: zonas

Period Nav

Figma 4508-27802 · Nav horizontal de filtragem por período. Full-bleed (sem padding lateral), com scroll horizontal quando os itens excedem a largura. Item selecionado vira retângulo `corner-radius-md` sobre `primary-pure`; demais são pílulas sobre `gray-0` com texto `gray-50`. Tipografia Saira bold italic 14/20 uppercase.

Selecionado: 2024-12 · role=tablist · ←/→, Home/End navegam.

Bottom Sheet

Figma 4421-16739 · Folha modal ancorada no rodapé com overlay escuro, cantos superiores 24, sombra `0 -12px 12px`, animação de slide, botão FECHAR flutuante e home indicator. Comportamento mobile-first.

Action Modal

Figma 4508-27893 · Modal centralizado com overlay escuro (`gray-100` 60%), card `gray-0` radius 24, ícone destacado 72×72 em `feedback-negative`, título Saira bold italic vermelho, descrição Red Hat Display 14/20 e CTA `Button variant='border' size='lg'` full-width. Botão X flutuante acima do card (top -39, right 10).

Effort Rating

Figma 4496-25291 · Percepção de esforço (feedback pós-treino). 5 níveis (😌 🙂 😐 😓 🥵). Selecionado vira círculo primary-pure 56 com emoji 34; demais 40 com emoji 28. Legenda troca ao mudar.

Leve: Parece que posso manter esse ritmo durante horas. Fácil de respirar e manter uma conversa.

Valor: light

Round Button

Figma 1355-502 · Botão circular (ícone). 4 tipos × 3 tamanhos × enabled/disabled. Padding: sm=8 / md=16 / lg=24. Ícone: sm·md=24 / lg=32. Default icon = run (Tabler).

primary
secondary
border
icon-only

Avatar

Figma 2401-12227 · Sizes lg (80) / md (68). Estado enabled muda a cor da borda. Photo vs iniciais. Badge: lg = pencil (editar), md = trophy (enabled colore o badge).

size lg · 80px
RA
RA
size md · 68px
RA
RA

Workout Card

Figma 1462-2106 · Card de treino com 3 estados (success / pending / fail). Mesmo componente, variantes via prop.

Fartlek

18 min

2,8 km

Aquecer

1km • Z1

Principal

6x 200m • Z3

Intervalo

3min caminhada

Fartlek

18 min

2,8 km

Aquecer

1km • Z1

Principal

6x 200m • Z3

Intervalo

3min caminhada

Fartlek

18 min

2,8 km

Aquecer

1km • Z1

Principal

6x 200m • Z3

Intervalo

3min caminhada

Com coluna de data (Figma 4421-14759) — usada em "Meus treinos".

TER30

Tiros 6x800m

42 min

4,5 km

Treino

Aquecimento + 6x800m rec 400m + volta calma

QUA01

Base aeróbica

45 min

7,2 km

Treino

Base aeróbica, terreno misto

Next Workout

Figma 4444-75280 · Seção 'Próximo Treino' da home do atleta. Duas variações: empty state (sem treino) e agendado (dia + WorkoutCard + botão 'VER MEUS TREINOS'). O WorkoutCard reutilizado carrega os 3 status (success / pending / fail).

Próximo treino · Empty

Sem treinos por enquanto!

Finalize as tarefas pendentes para receber o seu primeiro treino

Próximo treino · Agendado
SEX01

Fartleck

18 min

2,8 km

Aquecer

1km • Z1

Principal

6x 200m • Z3

Intervalo

3min caminhada

Workout Date Sheet

Figma 4470-20437 · Folhinha de calendário usada no cabeçalho da página do treino. Mesmas 3 variantes do WorkoutCard (pending / success / fail) — success adiciona badge verde com ícone Run; fail adiciona badge branco com borda dashed e X.

SÁB24Fev
SÁB24Fev
SÁB24Fev

Workout Summary Card

Figma 4472-20657 · Card com resumo do treino: linhas divididas por borda tracejada, algumas com barra de progresso comparando realizado × planejado. Base do componente — variações/estados por status virão em seguida.

Status
Concluído
Tipo
Nome do objetivo
Distância
4,8 km6 km
Tempo
0:20:300:30:00
FC média
100 Bpm
FC máxima
130 Bpm
Calorias queimadas
100
Clima
Ensolarado
Esforço
Muito Difícil • 7-9
Percurso
Variado

Workout Step

Figma 4478-21022 / 4478-21027 · Etapa de treino na seção Descrição. Formato simples (pill cinza com label + valores em negrito separados por •) ou em bloco 'Repetir Nx' agrupando 2+ itens dentro de uma borda cinza.

Simples
Aquecimento

500 mZ27:21 - 7:50/km

Desaquecimento

500 m70 - 80 bpm

Descanso

1 minuto e 10 segundos

Em bloco (repetir Nx)
Aquecimento

500 mZ27:21 - 7:50/km

Repetir 10x
Corrida

400 mZ55:57 - 6:08/km

Descanso

1 minuto e 10 segundos

Desaquecimento

500 mZ27:21 - 7:50/km

Com descrição livre
Aquecimento

500 mMuito Fácil7:21 - 7:50/km

Ritmo bem leve, dá pra conversar tranquilo

Repetir 10x
Corrida

400 mRitmo Intenso5:57 - 6:08/km

Respiração ofegante, ritmo constante. Dá pra falar só poucas palavras

Descanso

1 minuto e 10 segundos

Prescrição por tipo de intensidade
Zona de treinamento
Aquecimento

500 mZ27:21 - 7:50/km

Corrida

400 mZ55:57 - 6:08/km

Frequência cardíaca
Aquecimento

500 m70 - 80 bpm

Corrida

400 m170 - 180 bpm

Pace
Aquecimento

500 m7:21 - 7:50/km

Corrida

400 m5:57 - 6:08/km

Percepção de esforço (RPE)
Aquecimento

500 mMuito Fácil7:21 - 7:50/km

Ritmo bem leve, dá pra conversar tranquilo

Repetir 10x
Corrida

400 mRitmo Intenso5:57 - 6:08/km

Respiração ofegante, ritmo constante. Dá pra falar só poucas palavras

Descanso

1 minuto e 10 segundos

Task List

Figma 4443-74879 · Lista vertical de tarefas com timeline. Estado done → botão Editar (text); pending → botão Acessar (border). O conector entre dois itens é verde se ambos forem done, cinza caso contrário.

Todos pendentes
Finalize seu perfil
Relação com a corrida
Defina seu objetivo
Sua disponibilidade
Informações de saúde
Misto (Figma)
Finalize seu perfil
Relação com a corrida
Defina seu objetivo
Sua disponibilidade
Informações de saúde
Todos concluídos
Finalize seu perfil
Relação com a corrida
Defina seu objetivo
Sua disponibilidade
Informações de saúde

Home Week Mark

Figma 1418-2387 · Célula de dia da semana (topo do app do atleta). today = card branco 64px / dia 28px; demais = pílula translúcida 48px / dia 16px. Mark: dot (rest), run (planned/success), x dashed (fail). success usa secondary.pure da marca.

semana — fundo escuro (contexto real)
28D
29S
30T
01Q
02Q
03S
04S
30S
rest
30S
train (planned)
30S
train + success
30S
train + fail
30S
today (rest)
30S
today + train

Week Day Mark

Figma 1418-2829 · Célula compacta de dia (28×46) sobre fundo claro. Estrutura vertical: ponto (today) + CalendarMark chip + letra do dia. Delega o marcador ao CalendarMark (chip + onLight) — ajustes de estado feitos lá refletem aqui.

faixa semanal — fundo claro
S
T
Q
Q
S
S
D
D
S
rest
S
rest · today
S
pending
S
pending · today
S
success
S
success · today
S
fail
S
fail · today

Calendar Mark

Figma 1418-2166 · Marcador 28px do calendário. Renderizado sobre fundo escuro. Estados: Dot (descanso) · Icon+trainingDay (pendente) · Icon+success (concluído) · Icon+fail (perdido) · Number (número do dia) · Empty (placeholder). today adiciona anel branco por cima.

Icon · pending
Icon · today
Icon · success
Icon · success + today
Icon · fail
Dot (rest)
10
Number
20
Number · today
Empty

Month Calendar

Figma 1418-2166 · Calendário mensal (modalidade corrida) + resumo lateral. Consome CalendarMark para todas as células. Renderize sobre fundo escuro (primary).

Janeiro2025
DSTQQSS
20
Realizado
57%
Percorrido
6,5km
Treinado
12:06h

Message Box

Figma 1372-1183 · Borda escura 2px aparece ao focar o campo. Botão de envio ativa (cor escura) quando há texto.

Envie uma mensagem para o treinador

Trainer Message

Figma 1386-1521 · Mensagem do treinador com avatar 44px (borda accent), balão cinza-25 e timestamp abaixo. Suporta 3 formatos: texto puro, com vídeo (thumbnail + play + label + duração) e com áudio (play + waveform + duração).

Texto
A
Treinador Alef José

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi quis elementum ex.

3 Jan 25 - 10:30

Com vídeo
A
Treinador Alef José

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi quis elementum ex.

3 Jan 25 - 10:30

Com áudio
A
Treinador Alef José
01:24

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi quis elementum ex.

3 Jan 25 - 10:30

Action Card

Figma 4508-27880 · Card inline em `gray-25` radius `md`, padding 16, gap 20. Ícone 56×56 em `feedback-negative` radius `md`, título Saira bold italic 16/20 vermelho, descrição Red Hat 14/20 `gray-100` e CTA `Button variant='primary' size='lg'` full-width (fundo `bg-dark`). Versão não-modal do ActionModal.

AÇÃO NECESSÁRIA

Sua conta tem uma pendência, resolva para receber novos treinos

Trainer Card

Figma 4512-27967 · Card inline em `gray-25` radius `md`, padding 20, gap 20. Avatar 56×56 circular em `primary-pure` com borda 2px `secondary-pure` e IconUser branco. Título Saira bold italic 20/24 `gray-100`, subtítulo Red Hat 14/20 `gray-100`. CTA `Button variant='primary' size='lg'` full-width com IconBrandWhatsapp.

Fale com o treinador

Nome do treinador

Toast

Notificação transitória posicionada em `top-center` (não conflita com bottom nav do PWA). Wrapper do Sonner com tokens DS: fundo `gray-0`, borda-esquerda 4px na cor da variante, título Saira semibold, descrição Red Hat 12/16 em `gray-75`, botão fechar circular. Use `dsToast.success | .error | .warning | .info` — mantenha o título curto e a descrição opcional para contexto.

API: dsToast.success(title, { description }) — variantes: success · error · warning · info. Posição fixa top-center, fechável.

Ícones · Tabler

Biblioteca padrão do DS: @tabler/icons-react. Use stroke={1.5–2.4} para alinhar com o peso visual da marca. shadcn primitives continuam com lucide.

IconHome
IconChartBar
IconSettings
IconUser
IconRun
IconBell
IconCalendar
IconClock
IconHeart
IconHeartbeat
IconTrophy
IconMedal
IconFlame
IconBolt
IconTarget
IconActivity
IconMap
IconMapPin
IconRoute
IconStopwatch
IconBarbell
IconStretching
IconPlayerPlay
IconPlayerPause
IconCheck
IconX
IconPlus
IconChevronRight
IconSearch
IconMessageCircle
IconLogout

Cores · Marca

primary-pure
primary-up
primary-accent
secondary-pure
secondary-up
secondary-accent

Cores · Gray

gray-0
gray-25
gray-50
gray-75
gray-100

Cores · Semânticas

fg-light
fg-dark
fg-color
bg-dark
button-bg-light
button-bg-dark
button-bg-color
button-fg-light
button-fg-dark
button-fg-color
feedback-positive
feedback-negative

Tipografia · Famílias

--ds-font-family-base

Texto base · 0123

--ds-font-family-highlight

Destaque · 0123

Tipografia · Escala

text-xxxsThe quick brown fox 1234
text-xxsThe quick brown fox 1234
text-xsThe quick brown fox 1234
text-smThe quick brown fox 1234
text-mdThe quick brown fox 1234
text-lgThe quick brown fox 1234
text-xlThe quick brown fox 1234
text-xxlThe quick brown fox 1234
text-xxxlThe quick brown fox 1234
text-giantThe quick brown fox 1234

Spacing

spacing-050
spacing-100
spacing-200
spacing-300
spacing-400
spacing-500
spacing-600
spacing-800
spacing-1200
spacing-1600

Raios

radius-none
radius-sm
radius-md
radius-lg
radius-xl
radius-full
QA build