Knowledge Base · Referência visual

Design System do FIRO.

Fonte única de tokens e componentes reutilizáveis para tudo o que construímos - do backoffice ao frontoffice. Blade + Tailwind + Alpine, sem framework externo.

Tokens em design.json 11 secções · componentes vivos Zero dependências externas

Tokens

Extraídos automaticamente de design.json. Editar aí propaga para todas as utilities Tailwind.

Blue (primary)

50

100

200

300

400

500

600

700

800

900

950

Accent

50

100

200

300

400

500

600

700

800

900

950

Tipografia - Poppins

The quick brown fox jumps over the lazy dog

text-xs · 0.75rem

The quick brown fox jumps over the lazy dog

text-sm · 0.875rem

The quick brown fox jumps over the lazy dog

text-base · 1rem

The quick brown fox jumps over the lazy dog

text-lg · 1.125rem

The quick brown fox jumps over the lazy dog

text-xl · 1.25rem

The quick brown fox jumps over the lazy dog

text-2xl · 1.5rem

Botões

<x-btn> - 7 variantes, 4 tamanhos, suporta href, loading e disabled.

<x-btn variant="primary" size="md">Marcar</x-btn>
<x-btn href="/foo" variant="outline">Ir para foo</x-btn>
<x-btn variant="danger" loading>A eliminar</x-btn>

Badges

<x-badge> - 8 variantes, com ou sem dot.

Neutral Primary Accent Sucesso Aviso Erro Info Manual
Ativo Pendente Suspenso Grande Pequeno
<x-badge variant="success" dot>Ativo</x-badge>

Alerts

<x-alert> - 4 variantes, opcionalmente com title e dismissible.

<x-alert variant="warning" title="Atenção" dismissible>
    A tua subscrição expira em 3 dias.
</x-alert>

Cards & Stat cards

<x-card> para contentores; <x-stat-card> para dashboards.

Card padrão

Conteúdo neutro.

Interactive

Hover shadow + cursor pointer.

Selected

Border azul + ring.

Marcações

248

+12% vs. mês anterior

Receita

€ 4.320

-3% vs. mês anterior

Clientes ativos

87

últimos 30 dias

Cancelamentos

6

0%
<x-stat-card label="Marcações" value="248" trend="+12%" trendDirection="up" />

Formulários

<x-form.field> agrega label + hint + erro. Primitivos com border-radius suave, focus ring de 4px, e ícones opcionais.

Inputs

Nome completo do cliente

Opcional

Formato internacional

€

Este email já existe na base de dados.

Não podes alterar isto

Textarea & select nativo

Só visível para a equipa. Máx 500 caracteres.

Select com pesquisa Select2

Pesquisa em milhares de contactos

Podes escolher várias

<x-form.select2 name="customer_id" placeholder="Procurar cliente..." :options="$customers" />

<x-form.select2 name="tags[]" multiple :options="$tags" :value="$selected" />

Controlos booleanos & segmentados

Toggles

Checkboxes

Segmented control

<x-form.toggle name="notify" label="Enviar SMS" checked />

<x-form.segmented name="view" :options="['day' => 'Dia', 'week' => 'Semana']" value="week" />

Exemplo completo

Modo

Opcional

Tabelas

<x-table> com subcomponentes head, body, row, cell.

Cliente Serviço Total Estado
Ana Silva Corte € 18,00 Confirmada
João Costa Massagem € 45,00 Pendente
Maria Rocha Manicure € 22,50 Cancelada

Tabs

<x-tabs> + <x-tab-panel>. Estado gerido por Alpine.

Painel de visão geral: KPIs e gráficos aparecem aqui.

Painel de definições: formulário de configuração.

Painel de logs: histórico de eventos.

Como usar

Regras para manter o sistema consistente.

Do

  • Reusar <x-btn> para tudo que pareça botão ou link com aparência de botão.
  • Usar <x-form.field> sempre que haja label + input.
  • Passar variant semântico em vez de hard-code de cores.
  • Editar design.json para introduzir novos tokens.

Don't

  • Copiar classes Tailwind para reproduzir um botão à mão.
  • Introduzir cores hex em blade views - se falta shade, adiciona ao JSON.
  • Criar variantes num consumidor. Se precisas de nova variante, adiciona ao componente.
  • Usar !important para forçar estilos sobre um componente.