@horizon-framework/website-dev-docs 2.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/agents/AGENTE_FULLSTACK.md +209 -0
- package/agents/AGENTE_LAYOUT_DESIGNER.md +930 -0
- package/checklists/ADICIONAR_CAMPO.md +95 -0
- package/checklists/CRIAR_SITE_NOVO.md +163 -0
- package/checklists/PUBLICAR_SITE.md +75 -0
- package/checklists/TROCAR_CRM.md +96 -0
- package/commercial/PACOTES_PAGINAS.md +86 -0
- package/commercial/POSSIBILIDADES_VENDA.md +52 -0
- package/index.md +54 -0
- package/knowledge/API_PROPERTY.md +566 -0
- package/knowledge/ARQUITETURA_GERAL.md +169 -0
- package/knowledge/ARQUITETURA_MODULOS_WEB.md +241 -0
- package/knowledge/BATCH_TOTALS_API.md +200 -0
- package/knowledge/CAPABILITIES.md +190 -0
- package/knowledge/COMPONENTES_GLOBAIS_UI.md +407 -0
- package/knowledge/CRMS_INTEGRACOES.md +151 -0
- package/knowledge/DESIGN_AVANCADO.md +403 -0
- package/knowledge/DESIGN_SYSTEM_CATALOG.md +349 -0
- package/knowledge/DESIGN_TEMPLATES_CATALOG.md +61 -0
- package/knowledge/DOMINIO_ENTIDADES.md +328 -0
- package/knowledge/HOOKS_REGISTRY.md +127 -0
- package/knowledge/MODULE_CREATION_PATTERN.md +624 -0
- package/knowledge/NAVEGACAO_DINAMICA.md +233 -0
- package/knowledge/PAGINAS_BASICAS.md +63 -0
- package/knowledge/SEARCH_ENGINE_API.md +1038 -0
- package/knowledge/SISTEMA_MODULAR.md +109 -0
- package/knowledge/SISTEMA_SCHEMAS.md +126 -0
- package/knowledge/SSOT_SPECIFICATION_V2.md +333 -0
- package/knowledge/UI_KIT_COMPLETO.md +125 -0
- package/modules/property/MODULO_IMOBILIARIO.md +356 -0
- package/package.json +17 -0
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
# CRMs e Integrações — Pacotes de Conversão
|
|
2
|
+
|
|
3
|
+
> Referência sobre os pacotes de integração CRM disponíveis e como acessar suas documentações internas.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## CONCEITO
|
|
8
|
+
|
|
9
|
+
Cada CRM suportado pelo Horizon tem um **pacote npm** dedicado em `@horizon-integrations/[crm]`. Esses pacotes são a ponte entre o CRM externo e o Horizon.
|
|
10
|
+
|
|
11
|
+
O pacote NÃO é parte do site — é uma dependência npm. O site instala o pacote e usa seus exports.
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## PACOTES DISPONÍVEIS
|
|
16
|
+
|
|
17
|
+
| Pacote npm | CRM | Localização local |
|
|
18
|
+
|---|---|---|
|
|
19
|
+
| `@horizon-integrations/si9-crm` | SI9 Sistemas | `horizon-integrations/lista-crms/si9` |
|
|
20
|
+
| `@horizon-integrations/jetimob-crm` | Jetimob | `horizon-integrations/lista-crms/jetimob` |
|
|
21
|
+
| `@horizon-integrations/publisher-crm` | Publisher | `horizon-integrations/lista-crms/publisher` |
|
|
22
|
+
| `@horizon-integrations/arbo-crm` | Arbo | `horizon-integrations/lista-crms/arbo` |
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## O QUE CADA PACOTE EXPORTA
|
|
27
|
+
|
|
28
|
+
| Export | Função |
|
|
29
|
+
|---|---|
|
|
30
|
+
| Schema Zod de validação | Valida dados convertidos antes do sync |
|
|
31
|
+
| EntitySchema com source tracking | Schema da entidade com metadados de origem |
|
|
32
|
+
| Conversor de dados | Função que transforma dados crus → formato Horizon |
|
|
33
|
+
| `FICHA_TECNICA_INTEGRACAO.md` | **DOC PRINCIPAL** — campos, tipos SQL, badges, filtros, transformações |
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## NORMALIZAÇÃO DOS CAMPOS EXTRAS
|
|
38
|
+
|
|
39
|
+
Cada CRM tem campos que vão além dos 45 base do Horizon. O conversor normaliza esses campos excedentes seguindo regras padronizadas:
|
|
40
|
+
|
|
41
|
+
| Regra | Exemplo CRM | Resultado Horizon |
|
|
42
|
+
|---|---|---|
|
|
43
|
+
| Ponto → underscore | `insurance.letter` | `insurance_letter` |
|
|
44
|
+
| Hífen → underscore | `air-conditioner` | `air_conditioner` |
|
|
45
|
+
| Objeto aninhado → prefixo | `features.room` | `features_room` |
|
|
46
|
+
| Booleans agrupados → array TEXT[] | `features.shed=true, features.elevator=true` | `features: ["Galpão", "Elevador"]` (labels PT-BR) |
|
|
47
|
+
| Tudo snake_case minúsculo | `SuperHighlight` | `super_highlight` |
|
|
48
|
+
|
|
49
|
+
Os arrays de labels (features, security, recreation, rural) são traduzidos pra PT-BR pelo conversor usando mapas de labels internos.
|
|
50
|
+
|
|
51
|
+
---
|
|
52
|
+
|
|
53
|
+
## PRESET DE EXIBIÇÃO — OBRIGATÓRIO EM TODA FICHA_TECNICA
|
|
54
|
+
|
|
55
|
+
Toda FICHA_TECNICA_INTEGRACAO.md **DEVE** ter uma seção "Preset de Exibição Recomendado" que define:
|
|
56
|
+
|
|
57
|
+
1. **Card de listagem** — Quais campos viram tarja, badge, atributo com ícone
|
|
58
|
+
2. **Página de detalhe — Ficha** — Como organizar as seções de atributos (principal, características, segurança, lazer, dimensões, rural, etc.)
|
|
59
|
+
3. **Página de detalhe — Valores** — Como organizar a caixa de valores lateral por operação
|
|
60
|
+
|
|
61
|
+
Este preset é **agnóstico de tecnologia** — não menciona framework, componente ou site específico. Apenas descreve a organização recomendada dos dados pra qualquer interface.
|
|
62
|
+
|
|
63
|
+
O agente de configuração de dados lê este preset e o traduz pra configuração específica do site (fields-lists, PropertyInfoBlock, ValuesBox, etc.).
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## FICHA TÉCNICA — O QUE CONTÉM
|
|
68
|
+
|
|
69
|
+
A FICHA_TECNICA_INTEGRACAO.md de cada CRM é a **bíblia** da integração. Contém:
|
|
70
|
+
|
|
71
|
+
1. **Campos base** (45 campos Horizon) — como cada campo do CRM mapeia pro Horizon
|
|
72
|
+
2. **Campos extras** — campos específicos do CRM com tipos SQL recomendados
|
|
73
|
+
3. **Situações do site** — quais campos viram badge, tarja, flag
|
|
74
|
+
4. **Transformações recomendadas** — subtipo, valor_m2, etc.
|
|
75
|
+
5. **Mapeamento de labels** — tradução de enums pra PT-BR
|
|
76
|
+
6. **Filtros de busca sugeridos** — quais campos usar como filtro e de que tipo
|
|
77
|
+
7. **FTS** — quais campos incluir no full-text search
|
|
78
|
+
8. **Índices recomendados** — B-tree, GIN, GIST
|
|
79
|
+
9. **Limitações do CRM** — o que a API NÃO fornece
|
|
80
|
+
|
|
81
|
+
---
|
|
82
|
+
|
|
83
|
+
## REGRA OBRIGATÓRIA
|
|
84
|
+
|
|
85
|
+
**SEMPRE ler a FICHA_TECNICA_INTEGRACAO.md do CRM ANTES de qualquer configuração.**
|
|
86
|
+
|
|
87
|
+
O agente deve:
|
|
88
|
+
1. Localizar o pacote npm do CRM (local ou via `node_modules`)
|
|
89
|
+
2. Ler a FICHA_TECNICA completamente
|
|
90
|
+
3. Usar as informações dela pra configurar banco, API e frontend
|
|
91
|
+
4. NÃO inventar campos — usar apenas o que está documentado na ficha
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
## COMO ACESSAR A FICHA TÉCNICA
|
|
96
|
+
|
|
97
|
+
### Via pacote local (desenvolvimento)
|
|
98
|
+
```
|
|
99
|
+
[repo-horizon-integrations]/lista-crms/[crm]/FICHA_TECNICA_INTEGRACAO.md
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
### Via node_modules (projeto do site)
|
|
103
|
+
```
|
|
104
|
+
apps/api/node_modules/@horizon-integrations/[crm]/FICHA_TECNICA_INTEGRACAO.md
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
### Docs internas do pacote (quando existem)
|
|
108
|
+
```
|
|
109
|
+
[pacote]/docs/
|
|
110
|
+
├── API_CAMPOS_PUBLICOS.md → Campos da API mapeados
|
|
111
|
+
├── LACUNAS_E_PENDENCIAS.md → O que falta na integração
|
|
112
|
+
├── PLANO_CONVERSOR.md → Plano de desenvolvimento do conversor
|
|
113
|
+
└── PROGRESSO.md → Status de implementação
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
---
|
|
117
|
+
|
|
118
|
+
## SCRIPTS DE DESENVOLVIMENTO
|
|
119
|
+
|
|
120
|
+
Cada pacote CRM tem seus próprios scripts no `package.json`. Os comandos podem variar entre CRMs — **sempre consultar o `package.json` ou `README.md` do pacote específico** pra saber quais scripts existem e como usá-los.
|
|
121
|
+
|
|
122
|
+
Todos os pacotes CRM provavelmente possuem funções para:
|
|
123
|
+
- **Download** — Baixar dados da API do CRM
|
|
124
|
+
- **Conversão** — Converter dados crus pro formato Horizon
|
|
125
|
+
- **Profiling** — Analisar os dados crus e convertidos (distribuição de campos, valores únicos)
|
|
126
|
+
- **Upload** — Enviar dados convertidos pra API do site
|
|
127
|
+
|
|
128
|
+
Os nomes dos scripts e os detalhes de cada um variam por CRM.
|
|
129
|
+
|
|
130
|
+
### Regras de upload
|
|
131
|
+
|
|
132
|
+
- **Autenticação:** O endpoint de sync da API exige header de autenticação. O valor está no `.env` da API como `API_SECRET_KEY`.
|
|
133
|
+
- **Batching obrigatório:** A API aceita no máximo ~50 itens por request (transação Prisma tem timeout de 5s). Enviar mais causa `Transaction already closed`.
|
|
134
|
+
- **Script de upload do pacote pode não fazer batching** — se der timeout, enviar manualmente em lotes de 50.
|
|
135
|
+
- **API precisa estar rodando** na porta configurada.
|
|
136
|
+
- **Após upload:** Regenerar schema no frontend se houve mudança no pacote CRM.
|
|
137
|
+
|
|
138
|
+
- **API precisa estar rodando** na porta configurada (geralmente 5000)
|
|
139
|
+
- **Após upload:** Regenerar schema no frontend se houve mudança no pacote CRM
|
|
140
|
+
|
|
141
|
+
---
|
|
142
|
+
|
|
143
|
+
## CAMPOS CUSTOMIZADOS (fields[])
|
|
144
|
+
|
|
145
|
+
Alguns CRMs (como SI9) têm campos customizados que o cliente cria livremente. Estes vêm como array JSONB `{field, value}`.
|
|
146
|
+
|
|
147
|
+
O conversor pode ter **campos reconhecidos** — fields customizados que são mapeados automaticamente pra campos Horizon. Exemplo no SI9:
|
|
148
|
+
- Campo custom "Corretor" → alimenta `corretor_nome`
|
|
149
|
+
- Campo custom "Corretor ID" → alimenta `corretor_key`
|
|
150
|
+
|
|
151
|
+
Os campos não reconhecidos são preservados no array `fields` pra exibição na página do imóvel.
|
|
@@ -0,0 +1,403 @@
|
|
|
1
|
+
# Design Avancado — Estilo de Design Horizon (Estilo Jefferson)
|
|
2
|
+
|
|
3
|
+
> Padroes visuais, composicoes, animacoes e estilo de design extraidos das paginas avancadas.
|
|
4
|
+
> Este documento ensina COMO criar paginas e secoes que seguem o estilo Horizon.
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Assinatura Visual — 15 Padroes Recorrentes
|
|
9
|
+
|
|
10
|
+
1. Hero com imagem 70% a direita + conteudo alinhado a esquerda
|
|
11
|
+
2. Gradientes sutis (primary → primary-l1)
|
|
12
|
+
3. Orbs decorativos (blur-3xl) em cantos/backgrounds
|
|
13
|
+
4. Tipografia bold e clara (type-headline com gradiente)
|
|
14
|
+
5. Alternancia background/surface entre secoes
|
|
15
|
+
6. Cards com border + hover glow primary
|
|
16
|
+
7. Carousels com autoplay 4000ms
|
|
17
|
+
8. Spacing generoso (py-24, space-y-32)
|
|
18
|
+
9. Icones em backgrounds arredondados (rounded-2xl + bg-primary/10)
|
|
19
|
+
10. Somente 2 CTAs por section (primary + secondary)
|
|
20
|
+
11. Imagens com overlay gradientes em camadas
|
|
21
|
+
12. Stats com contadores animados (Intersection Observer)
|
|
22
|
+
13. Badges/overlines com icone antes de headlines
|
|
23
|
+
14. Testimonials com avatares e ratings
|
|
24
|
+
15. Gallery em masonry com fade bottom
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## HERO SECTIONS
|
|
29
|
+
|
|
30
|
+
### Estrutura Base (padrao recorrente)
|
|
31
|
+
|
|
32
|
+
```
|
|
33
|
+
[Background Image 70% direita] → [Gradient Overlay camadas] → [Conteudo Esquerda]
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
### Camadas do Hero (de baixo pra cima)
|
|
37
|
+
|
|
38
|
+
1. **Imagem** — posicionada com `left-[20%]`, ocupa ~70% da tela
|
|
39
|
+
2. **Dark overlay** — `bg-background/40`
|
|
40
|
+
3. **Gradiente lateral** — `linear-gradient(to right, black 20%, transparent 70%)`
|
|
41
|
+
4. **Glow ball primary** — radial-gradient com blur-3xl, opacity-50
|
|
42
|
+
|
|
43
|
+
```tsx
|
|
44
|
+
{/* Camada 1: Imagem a direita */}
|
|
45
|
+
<div className="absolute inset-0 left-[20%]">
|
|
46
|
+
<div className="w-full h-full bg-cover bg-center"
|
|
47
|
+
style={{backgroundImage: "url(...)"}} />
|
|
48
|
+
</div>
|
|
49
|
+
|
|
50
|
+
{/* Camada 2: Dark overlay */}
|
|
51
|
+
<div className="absolute inset-0 bg-background/40" />
|
|
52
|
+
|
|
53
|
+
{/* Camada 3: Gradiente lateral */}
|
|
54
|
+
<div className="absolute inset-0"
|
|
55
|
+
style={{background: "linear-gradient(to right, black 20%, transparent 70%)"}} />
|
|
56
|
+
|
|
57
|
+
{/* Camada 4: Glow ball */}
|
|
58
|
+
<div className="absolute top-[-10%] left-[0%] w-[600px] h-[600px] rounded-full opacity-50 blur-3xl"
|
|
59
|
+
style={{background: "radial-gradient(circle, var(--primary) 0%, transparent 70%)"}} />
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### Elementos do Hero (de cima pra baixo)
|
|
63
|
+
|
|
64
|
+
1. **Overline/Badge** — pill com icone + texto
|
|
65
|
+
2. **Headline (h1)** — 4xl mobile → 7xl desktop, linha 2 em gradiente primary
|
|
66
|
+
3. **Body Copy** — text-lg, white/90%, max-w-2xl
|
|
67
|
+
4. **2 CTAs** — primary + outline com backdrop-blur
|
|
68
|
+
|
|
69
|
+
```tsx
|
|
70
|
+
{/* Overline */}
|
|
71
|
+
<div className="inline-flex items-center gap-2 px-4 py-2 rounded-full bg-primary/10">
|
|
72
|
+
<Icon className="size-4 text-primary" />
|
|
73
|
+
<span className="text-sm font-semibold">Label</span>
|
|
74
|
+
</div>
|
|
75
|
+
|
|
76
|
+
{/* Headline com gradiente */}
|
|
77
|
+
<h1 className="type-headline leading-tight leading-trim text-4xl md:text-5xl lg:text-7xl font-bold">
|
|
78
|
+
Texto Normal
|
|
79
|
+
<span className="text-transparent bg-clip-text bg-linear-to-r from-primary to-primary-l1">
|
|
80
|
+
Texto em Gradiente
|
|
81
|
+
</span>
|
|
82
|
+
</h1>
|
|
83
|
+
|
|
84
|
+
{/* CTAs */}
|
|
85
|
+
<Button size="lg" className="bg-primary hover:bg-primary/90">
|
|
86
|
+
Acao Principal
|
|
87
|
+
</Button>
|
|
88
|
+
<Button size="lg" variant="outline"
|
|
89
|
+
className="bg-white/10 backdrop-blur-sm text-white border-white/30">
|
|
90
|
+
Acao Secundaria
|
|
91
|
+
</Button>
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
## LAYERS FLUTUANTES (Orbs Decorativos)
|
|
97
|
+
|
|
98
|
+
Padrao mais marcante do estilo. Orbs de cor com blur gigante que flutuam atras do conteudo.
|
|
99
|
+
|
|
100
|
+
### Tipos de Layers
|
|
101
|
+
|
|
102
|
+
**1. Glow Ball Primary (mais comum)**
|
|
103
|
+
```tsx
|
|
104
|
+
<div className="absolute top-20 left-10 w-96 h-96 bg-primary/5 rounded-full blur-3xl" />
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
**2. Glow Ball Secondary**
|
|
108
|
+
```tsx
|
|
109
|
+
<div className="absolute bottom-20 right-10 w-96 h-96 bg-secondary/5 rounded-full blur-3xl" />
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
**3. Radial Gradient (Hero)**
|
|
113
|
+
```tsx
|
|
114
|
+
<div className="absolute top-[-10%] left-[0%] w-[600px] h-[600px] rounded-full opacity-50 blur-3xl"
|
|
115
|
+
style={{background: "radial-gradient(circle, var(--primary) 0%, transparent 70%)"}} />
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
### Regras dos Orbs
|
|
119
|
+
- SEMPRE `position: absolute` dentro de secao `relative overflow-hidden`
|
|
120
|
+
- SEMPRE `blur-3xl` (nunca blur menor)
|
|
121
|
+
- Opacidade: 5-15% para bg-primary/bg-secondary, 30-50% para radial-gradient
|
|
122
|
+
- Tamanho: w-96 h-96 (padrao) ou w-[600px] h-[600px] (hero)
|
|
123
|
+
- Posicao: cantos opostos da secao (top-left + bottom-right)
|
|
124
|
+
- NUNCA mais que 2 orbs por secao
|
|
125
|
+
|
|
126
|
+
---
|
|
127
|
+
|
|
128
|
+
## BACKGROUNDS E TRANSICOES ENTRE SECOES
|
|
129
|
+
|
|
130
|
+
### Paleta de Backgrounds
|
|
131
|
+
|
|
132
|
+
```
|
|
133
|
+
bg-background → Cor base (escura em dark mode)
|
|
134
|
+
bg-surface → Ligeiramente mais clara
|
|
135
|
+
bg-surface/30 → Surface com transparencia
|
|
136
|
+
bg-card → Fundo de card
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
### Padrao de Alternancia
|
|
140
|
+
|
|
141
|
+
```
|
|
142
|
+
Secao 1: bg-background
|
|
143
|
+
Secao 2: bg-linear-to-br from-background via-surface/30 to-background
|
|
144
|
+
Secao 3: bg-surface
|
|
145
|
+
Secao 4: bg-background
|
|
146
|
+
Secao 5: bg-linear-to-br from-surface/30 via-background to-surface/30
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
### Gradientes de Background
|
|
150
|
+
|
|
151
|
+
```tsx
|
|
152
|
+
{/* Diagonal suave */}
|
|
153
|
+
className="bg-linear-to-br from-background via-surface/30 to-background"
|
|
154
|
+
|
|
155
|
+
{/* Bottom fade */}
|
|
156
|
+
className="bg-linear-to-b from-background to-surface"
|
|
157
|
+
|
|
158
|
+
{/* Right fade */}
|
|
159
|
+
className="bg-linear-to-r from-background to-surface/30"
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
---
|
|
163
|
+
|
|
164
|
+
## TIPOGRAFIA
|
|
165
|
+
|
|
166
|
+
### Classes Custom (SEMPRE usar)
|
|
167
|
+
|
|
168
|
+
```
|
|
169
|
+
type-headline → Bold, leading-tight, leading-trim
|
|
170
|
+
type-body → Normal weight, leading-normal, leading-trim
|
|
171
|
+
type-title → Semibold, leading-tight
|
|
172
|
+
type-overline → Uppercase, tracking-wider, font-semibold
|
|
173
|
+
type-button → font-semibold, leading-trim
|
|
174
|
+
type-display → Muito grande, bold
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
### Escala Responsiva
|
|
178
|
+
|
|
179
|
+
| Contexto | Mobile | Tablet | Desktop |
|
|
180
|
+
|---|---|---|---|
|
|
181
|
+
| h1 (Hero) | text-4xl | text-5xl | text-6xl a text-7xl |
|
|
182
|
+
| h2 (Section Title) | text-3xl | text-4xl | text-5xl |
|
|
183
|
+
| h3 (Card Title) | text-xl | text-2xl | text-2xl a text-3xl |
|
|
184
|
+
| Body | text-base | text-lg | text-lg a text-xl |
|
|
185
|
+
| Overline | text-xs | text-sm | text-sm |
|
|
186
|
+
|
|
187
|
+
### Padrao de Headline com Gradiente
|
|
188
|
+
|
|
189
|
+
```tsx
|
|
190
|
+
<h2 className="type-headline leading-tight leading-trim text-3xl md:text-4xl lg:text-5xl">
|
|
191
|
+
Linha Normal de Texto
|
|
192
|
+
<span className="text-transparent bg-clip-text bg-linear-to-r from-primary to-primary-l1">
|
|
193
|
+
Texto Destacado em Gradiente
|
|
194
|
+
</span>
|
|
195
|
+
</h2>
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
### Largura Maxima de Texto
|
|
199
|
+
- Headlines: sem limite (mas ficam dentro de container)
|
|
200
|
+
- Body/descricao: `max-w-2xl` ou `max-w-3xl` + `mx-auto` se centralizado
|
|
201
|
+
|
|
202
|
+
---
|
|
203
|
+
|
|
204
|
+
## COLORIMETRIA
|
|
205
|
+
|
|
206
|
+
### Uso Proporcional
|
|
207
|
+
|
|
208
|
+
- **Primary:** 70% (headlines, icones, botoes, acentos, gradientes)
|
|
209
|
+
- **Secondary:** 20% (CTAs alternativas, highlights, variacao)
|
|
210
|
+
- **Neutros:** 10% (borders, muted-foreground, separadores)
|
|
211
|
+
|
|
212
|
+
### Cores Recorrentes
|
|
213
|
+
|
|
214
|
+
```tsx
|
|
215
|
+
// Textos
|
|
216
|
+
text-primary // Destaque principal
|
|
217
|
+
text-foreground // Texto padrao
|
|
218
|
+
text-muted-foreground // Texto secundario
|
|
219
|
+
text-white // Sobre fundos escuros
|
|
220
|
+
|
|
221
|
+
// Backgrounds
|
|
222
|
+
bg-primary/10 // Fundo suave de icone/badge
|
|
223
|
+
bg-surface // Fundo alternativo de secao
|
|
224
|
+
bg-card // Fundo de card
|
|
225
|
+
|
|
226
|
+
// Borders
|
|
227
|
+
border-border // Borda padrao
|
|
228
|
+
border-primary/50 // Borda hover
|
|
229
|
+
|
|
230
|
+
// Sombras
|
|
231
|
+
shadow-primary/10 // Sombra colorida no hover
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
### Gradientes de Texto
|
|
235
|
+
```tsx
|
|
236
|
+
// Gradiente primary (mais usado)
|
|
237
|
+
className="text-transparent bg-clip-text bg-linear-to-r from-primary to-primary-l1"
|
|
238
|
+
|
|
239
|
+
// Gradiente primary-secondary (raro)
|
|
240
|
+
className="text-transparent bg-clip-text bg-linear-to-r from-primary to-secondary"
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
---
|
|
244
|
+
|
|
245
|
+
## ESPACAMENTO PADRAO
|
|
246
|
+
|
|
247
|
+
### Padding de Secoes
|
|
248
|
+
```tsx
|
|
249
|
+
className="py-16 md:py-20 lg:py-24" // Padrao
|
|
250
|
+
className="py-24 md:py-32" // Secoes grandes (hero, CTA final)
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
### Gaps
|
|
254
|
+
```
|
|
255
|
+
Entre secoes: space-y-32 ou cada secao com seu py-24
|
|
256
|
+
Entre elementos da secao: gap-12 a gap-20
|
|
257
|
+
Cards em grid: gap-4 a gap-8
|
|
258
|
+
Elementos dentro de card: gap-2 a gap-4
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
### Container
|
|
262
|
+
```tsx
|
|
263
|
+
<div className="container"> {/* max-width automatico + padding lateral */}
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
---
|
|
267
|
+
|
|
268
|
+
## CARDS
|
|
269
|
+
|
|
270
|
+
### Card Padrao (border + hover glow)
|
|
271
|
+
|
|
272
|
+
```tsx
|
|
273
|
+
<div className="p-6 rounded-2xl bg-card border border-border
|
|
274
|
+
hover:border-primary/50 hover:shadow-lg hover:shadow-primary/10
|
|
275
|
+
transition-all duration-300">
|
|
276
|
+
{/* Icone */}
|
|
277
|
+
<div className="inline-flex items-center justify-center size-16 rounded-2xl bg-primary/10">
|
|
278
|
+
<Icon className="size-8 text-primary" />
|
|
279
|
+
</div>
|
|
280
|
+
{/* Titulo */}
|
|
281
|
+
<h3 className="type-title text-lg font-bold mt-4">{title}</h3>
|
|
282
|
+
{/* Descricao */}
|
|
283
|
+
<p className="type-body text-sm text-muted-foreground mt-2">{description}</p>
|
|
284
|
+
</div>
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
### Variacoes
|
|
288
|
+
- **Com imagem top:** imagem acima, conteudo abaixo
|
|
289
|
+
- **Com gradiente:** `bg-linear-to-br from-primary/5 to-transparent`
|
|
290
|
+
- **Com quote icon:** icone de aspas flutuando no top-right
|
|
291
|
+
- **Com badge:** status badge no canto
|
|
292
|
+
|
|
293
|
+
---
|
|
294
|
+
|
|
295
|
+
## ANIMACOES (Framer Motion)
|
|
296
|
+
|
|
297
|
+
### Fade-in on Scroll (mais usado)
|
|
298
|
+
```tsx
|
|
299
|
+
<motion.div
|
|
300
|
+
initial={{ opacity: 0, y: 20 }}
|
|
301
|
+
whileInView={{ opacity: 1, y: 0 }}
|
|
302
|
+
viewport={{ once: true }}
|
|
303
|
+
transition={{ duration: 0.6 }}
|
|
304
|
+
>
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
### Stagger Children (items em sequencia)
|
|
308
|
+
```tsx
|
|
309
|
+
transition={{ duration: 0.6, delay: index * 0.1 }}
|
|
310
|
+
```
|
|
311
|
+
|
|
312
|
+
### Hover Scale (imagens e icones)
|
|
313
|
+
```tsx
|
|
314
|
+
className="group-hover:scale-105 transition-transform duration-500"
|
|
315
|
+
```
|
|
316
|
+
|
|
317
|
+
### Counter Animation (stats)
|
|
318
|
+
```tsx
|
|
319
|
+
// Intersection Observer detecta visibilidade
|
|
320
|
+
// requestAnimationFrame anima de 0 ate o valor
|
|
321
|
+
// Duracao: ~2000ms
|
|
322
|
+
```
|
|
323
|
+
|
|
324
|
+
### Carousel Autoplay
|
|
325
|
+
```tsx
|
|
326
|
+
plugins={[Autoplay({ delay: 4000, stopOnInteraction: true })]}
|
|
327
|
+
```
|
|
328
|
+
|
|
329
|
+
---
|
|
330
|
+
|
|
331
|
+
## IMAGENS
|
|
332
|
+
|
|
333
|
+
### Overlays em Camadas (padrao mais usado)
|
|
334
|
+
```tsx
|
|
335
|
+
{/* Bottom-to-top (para texto sobre imagem) */}
|
|
336
|
+
<div className="absolute inset-0 bg-linear-to-t from-black/80 via-black/10 to-transparent" />
|
|
337
|
+
|
|
338
|
+
{/* Hover reveal */}
|
|
339
|
+
<div className="absolute inset-0 bg-black/0 group-hover:bg-black/40 transition-colors" />
|
|
340
|
+
|
|
341
|
+
{/* Fade lateral (hero) */}
|
|
342
|
+
<div style={{background: "linear-gradient(to right, var(--background) 0%, transparent 25%, transparent 75%, var(--background) 100%)"}} />
|
|
343
|
+
```
|
|
344
|
+
|
|
345
|
+
### Aspect Ratios
|
|
346
|
+
- Hero: full-width, min-h-[90vh]
|
|
347
|
+
- Features: aspect-[4/3]
|
|
348
|
+
- Gallery: aspect-square
|
|
349
|
+
- Video: aspect-video
|
|
350
|
+
|
|
351
|
+
### Masonry Gallery
|
|
352
|
+
```css
|
|
353
|
+
column-count: 2; /* mobile */
|
|
354
|
+
column-gap: 12px;
|
|
355
|
+
@media (min-width: 768px) { column-count: 3; }
|
|
356
|
+
```
|
|
357
|
+
|
|
358
|
+
---
|
|
359
|
+
|
|
360
|
+
## ESTRUTURA PADRAO DE PAGINA
|
|
361
|
+
|
|
362
|
+
### Pagina Simples (4-5 secoes)
|
|
363
|
+
1. Hero Section
|
|
364
|
+
2. Features/Benefits (carousel ou grid alternado)
|
|
365
|
+
3. CTA Section
|
|
366
|
+
4. (Opcional) Testimonials ou FAQ
|
|
367
|
+
|
|
368
|
+
### Pagina Completa (10+ secoes, ex: Institucional)
|
|
369
|
+
1. Hero
|
|
370
|
+
2. About
|
|
371
|
+
3. Stats (contadores animados)
|
|
372
|
+
4. Video
|
|
373
|
+
5. History
|
|
374
|
+
6. Differentials (carousel 6 items)
|
|
375
|
+
7. Gallery (masonry)
|
|
376
|
+
8. Services (grid 4 colunas)
|
|
377
|
+
9. Team (carousel autoplay)
|
|
378
|
+
10. Awards
|
|
379
|
+
11. Units
|
|
380
|
+
12. Testimonials (carousel)
|
|
381
|
+
13. CTA Final
|
|
382
|
+
|
|
383
|
+
### Densidade de Conteudo
|
|
384
|
+
- Pouco texto por secao (max-w-2xl a max-w-3xl)
|
|
385
|
+
- Grande espacamento vertical (py-24, gap-12)
|
|
386
|
+
- Hierarquia clara: Overline → Headline → Body → CTA
|
|
387
|
+
- Whitespace como componente de design
|
|
388
|
+
- Tamanho de imagens: 50% da tela, nunca 100% (exceto hero)
|
|
389
|
+
|
|
390
|
+
---
|
|
391
|
+
|
|
392
|
+
## FLUXO DE CRIACAO
|
|
393
|
+
|
|
394
|
+
1. Definir objetivo e conteudo da pagina
|
|
395
|
+
2. Desenhar wireframe (ASCII) com secoes
|
|
396
|
+
3. Escolher secoes do catalogo (DESIGN_TEMPLATES_CATALOG.md)
|
|
397
|
+
4. Compor a pagina combinando secoes
|
|
398
|
+
5. Aplicar layers flutuantes (orbs decorativos)
|
|
399
|
+
6. Aplicar gradientes entre secoes (alternancia background/surface)
|
|
400
|
+
7. Adicionar animacoes (fade-in on scroll)
|
|
401
|
+
8. Customizar textos, imagens, cores
|
|
402
|
+
9. Testar responsividade (mobile, tablet, desktop)
|
|
403
|
+
10. Rodar checklist do AGENTE_LAYOUT_DESIGNER (18 itens)
|