← Biblioteca componentes/conversao/cta-formulario-lead/ficha.md Abrir previewmarkupestiloscript
conversao/cta-formulario-lead

CTA com formulário de captura

🟡 revisar complexidade alta prefixo lead- cta formulario lead conversao vidro sticky

Seção de conversão em duas colunas sobre foto esmaecida. À esquerda, o argumento: olho, título, apoio e lista de benefícios — e ele acompanha a rolagem, para não sair de vista enquanto a pessoa preenche. À direita, um card de vidro com o formulário: três campos de texto, um select customizado, botão e nota de consentimento.

⚠️ O envio é só front-end

O script valida, trava o formulário e mostra a mensagem de sucesso — mas não manda nada para lugar nenhum. Publicar assim significa perder todos os leads em silêncio, com o visitante achando que deu certo. Ligue o bloco marcado ENVIO no script.js a um endpoint real antes de subir. É por isso que o status é revisar.


Quando usar

Quando não usar


Padrão editorial

Slot Regra
Olho "Comece por aqui", "Próximo passo". Sinaliza que a página acabou.
Título A oferta, com o benefício em <em>: "Agende um diagnóstico gratuito da sua carteira".
Apoio 1 frase, 25 a 40 palavras. O que a pessoa recebe e quanto custa (mesmo que seja nada).
.lead-list 4 a 6 itens, 4 a 8 palavras cada. O que está incluso — não o que a empresa é.
.lead-title 3 a 5 palavras. Repete a ação: "Fale com um especialista".
.lead-req O filtro de qualificação, se houver. Dito na cara: "Requisito: carteira superior a R$ 3 milhões".
.lead-note Consentimento, 10 a 16 palavras. Obrigatório se há tratamento de dados.

O requisito de qualificação em cima do formulário economiza o tempo dos dois lados. Parece que afasta lead; na prática afasta lead errado.

Especificação da imagem


Como usar

<link rel="stylesheet" href="componentes/conversao/select-custom/estilo.css">
<link rel="stylesheet" href="componentes/conversao/cta-formulario-lead/estilo.css">
<script src="componentes/conversao/select-custom/script.js"></script>
<script src="componentes/conversao/cta-formulario-lead/script.js"></script>

Este componente compõe o conversao/select-custom — carregue os dois. O select usa o .lead-field como wrapper, então o bloco .csel-field do CSS dele fica sem uso aqui (pode ficar; não conflita).

Ligando o envio

No script.js, o bloco marcado ENVIO chama sucesso() direto. Troque por:

fetch('/api/lead', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify(Object.fromEntries(new FormData(form)))
}).then(sucesso).catch(erro);

Falta um estado de erro visual — hoje existe só o de sucesso. É o segundo motivo do status revisar.

Variações


Gotchas


Histórico

Projeto Onde Data Diferenças
Liberta Wealth index.html e quem-somos.html, #diagnostico 2026-08 Origem. Prefixos .cta- e .cform- misturados, .cfield/.req/.full sem prefixo, ids #leadForm e #formOk no script, vidro escrito inline, cores #f8f6f2/#9b988f/#66645e/#6f6d66 cruas, rgba(198,206,170,.1) no aviso de sucesso, sem role="status".

Normalizações aplicadas na extração: prefixo único lead-; .cfield.lead-field, .full.is-full, .on.is-on; ids → [data-lead-form] / [data-lead-ok], permitindo mais de um formulário na página; o vidro virou a primitiva .glass; cores cruas → tokens, com color-mix no fundo do aviso; adicionado role="status"; o bloco de envio virou um ponto de extensão marcado, em vez de um comentário solto no fim.

Divergências e pendências: o envio continua sem backend (herdado da origem) e não há estado de erro visual. Enquanto isso não for resolvido, o componente fica em revisar.