← Biblioteca componentes/conversao/cta-fechamento-foto/ficha.md Abrir previewmarkupestilo
conversao/cta-fechamento-foto

CTA de fechamento com foto

⚪ externo complexidade baixa prefixo end- cta conversao fechamento assinatura imagem css-puro split sem javascript

A última dobra antes do rodapé. Uma foto sangrada quase apagada, um gradiente de três paradas que fecha em preto sólido em cima e embaixo, grão por cima, e no centro só duas coisas: a frase que a marca assinaria, em itálico grande, e um botão.

É o eco do hero: mesma foto, mesmo escuro, mesma promessa — dita agora por quem já leu a página inteira. Não tem olho, não tem título de seção, não tem lista, não tem formulário. Essa pobreza é o componente: se ele tivesse mais uma coisa, seria mais uma seção, e a página não precisa de mais uma seção nesse ponto.

Sem script. Três tokens. É a peça mais barata da biblioteca e provavelmente a mais reutilizável: toda página institucional precisa acabar, e quase toda acaba desta forma.


Este ou o cta-formulario-lead?

A categoria conversão tem duas peças de dobra inteira, e elas não competem: fazem trabalhos diferentes em momentos diferentes da página.

cta-fechamento-foto cta-formulario-lead
Pede ao visitante um clique 4 campos preenchidos
Onde vive último bloco antes do rodapé onde a conversão realmente acontece — meio ou fim
O que entrega intenção: leva a pessoa até a oferta o lead, com nome, contato e qualificação
Complexidade baixa, CSS puro alta, com script, validação e select composto
Precisa de backend não sim — sem endpoint ele perde lead em silêncio
Custo de montar copiar dois arquivos copiar quatro, mais o select-custom, mais ligar o envio

A regra prática: se a página tem um momento de conversão, ele é o cta-formulario-lead, e este aqui não substitui. Se a página tem um momento de conversão e ainda continua — FAQ, prova social, mais um bloco editorial —, este componente é o que fecha a conta no fim.

Os dois na mesma página é o uso certo, não o excesso. O botão daqui aponta para a âncora do formulário (href="#contato"), então o fechamento não é um segundo pedido: é o mesmo pedido, repetido a quem chegou até o fim. Foi assim na origem.

Ponha pelo menos uma dobra entre os dois. Formulário e fechamento colados leem como insistência, e o segundo cancela o primeiro. Na origem havia o FAQ inteiro no meio.


Quando usar

Quando não usar


Padrão editorial

Slot Regra
.end-sign 6 a 10 palavras, duas linhas — não três. A promessa da marca, não uma oferta: sem número, sem prazo, sem "clique aqui". Duas cláusulas que se espelham em torno de uma vírgula é o ritmo que faz a frase soar assinada. Acima de 10 palavras o max-width:20ch já a quebra em três linhas e ela vira parágrafo.
Quebra da frase A <br> é sua, não do navegador. Escolha onde a frase respira e marque; data-split preserva a tag. O max-width:20ch é a rede de segurança, não o plano.
Rótulo do botão 2 a 4 palavras, a mesma ação do CTA principal. Se lá em cima está "Agende seu diagnóstico", aqui não vire "Fale conosco": rótulo diferente lê como oferta diferente.
Destino do botão A âncora da seção de conversão da própria página. Link para outra página aqui desperdiça a única intenção que a peça produz.

Não use <em> na assinatura. A linha inteira já é itálico; o <em> do h2.sec-title existe para destacar uma palavra dentro de um título reto, e aqui não há reto contra o qual destacar. Se precisar de ênfase, ela vem da quebra de linha.

A frase não repete o título do hero, mas rima com ele. Se o hero diz "Segurança no presente, liberdade no futuro", o fechamento pode fechar o mesmo par por outro lado. Repetir literalmente lê como falta de assunto.


Especificação da imagem

Proporção paisagem, mínimo 1600×900
Peso até 250 KB — é a última imagem da página, não vale mais que isso
Assunto horizonte, cidade, paisagem, mar. Nada com rosto, texto ou detalhe fino
Enquadramento object-fit:cover num bloco largo e baixo: o assunto tem de sobreviver a corte em cima e embaixo
Tratamento já entra em opacity:.3 e grayscale(.5), e o gradiente come as duas pontas. Escolha por atmosfera, não por conteúdo

O teste: se, no preview, você consegue dizer o que está na foto, ela está clara demais para este componente. A foto certa aqui parece um vinco de luz no preto.

loading="lazy" e decoding="async" estão no markup de propósito — é a última imagem da página e ela é puramente decorativa. Se o seu público chega por scroll rápido até o rodapé e você vê a foto entrando, tire o lazy: o custo é um request adiantado, o ganho é não piscar.


Como usar

<link rel="stylesheet" href="componentes/conversao/cta-fechamento-foto/estilo.css">

Só isso. Não há script.js — o movimento inteiro vem do core/motion.js, que a página já carrega.

Ganchos

Gancho O quê
[data-split] na .end-sign reveal palavra a palavra, do core. Preserva <br>
[data-rv][data-d="1"] no .end-cta o botão entra depois da frase terminar de se montar
.grain primitiva do core, irmã da .end-media — precisa ficar fora dela para não passar por baixo do gradiente

Variações

Variação Como Quando
Sem foto apagar .end-media e o .grain Página que já tem foto demais, ou projeto sem banco de imagem
Botão fantasma .btn-ghost no lugar de .btn-primary O CTA de verdade está poucas dobras acima e este é só o eco
Dois botões um .btn-primary e um .btn-ghost dentro do mesmo .end-cta Duas saídas legítimas: agendar e falar no WhatsApp
Sem botão apagar o .end-cta inteiro Fechamento puramente editorial, com a conversão morando no rodapé

O .end-cta é flex com justify-content:center e flex-wrap:wrap — o segundo botão entra e quebra no mobile sem nenhuma regra a mais.


Gotchas

Como medir antes de calibrar:

python from PIL import Image, ImageStat print(ImageStat.Stat(Image.open("foto.jpg").convert("L")).mean[0])

Abaixo de ~90 (numa escala de 0 a 255) a foto é escura: suba --end-veu para .5.6. Acima de ~140, desça para .3, senão a imagem briga com a assinatura. Este gotcha foi descoberto no próprio preview: a primeira foto escolhida tinha média 78 e a dobra ficou indistinguível de um fundo liso.


Histórico

Projeto Onde Data O quê
Liberta Wealth site/index.html, .close-sec (entre o FAQ e o rodapé) 2026-08 Origem. Classes .close-, seletores de elemento (.close-media img, .close-sec h2), alcance nas primitivas (.close-sec > .wrap, .close-sec .btn) e a assinatura em var(--serif).

Normalizações aplicadas na extração:

Na origem Aqui Por quê
prefixo close- end- close é verbo em inglês e vai colidir com o primeiro modal, drawer ou toast da categoria sobreposições — a biblioteca já tem .fold-close e [data-fold-close] querendo dizer "fechar". end- é substantivo: o fim da página
.close-media img .end-img seletor de elemento (contrato §6.3)
.close-sec h2 .end-sign idem
.close-sec > .wrap .end-body, segunda classe no .wrap componente não estiliza primitiva do core por descendência
.close-sec .btn{margin-top:36px} .end-cta, wrapper flex mesmo motivo, e de quebra o segundo botão passou a caber sem regra nova
text-align:center na seção na .end-body a centralização era herdada por qualquer coisa colada dentro
font-family:var(--serif) var(--sans) em itálico a biblioteca não tem --serif. A citação do conteudo/manifesto-citacao veio do mesmo site com o mesmo --serif e foi mapeada para --sans itálico, com o argumento de que citação é fala, não rótulo. A assinatura é a mesma voz e recebe o mesmo tratamento — duas peças com a mesma função tipográfica não podem divergir
font-weight:500 300 consequência da troca acima: 500 era o peso do serif; o --sans em 300 é o que casa com a .man-quote
seta diagonal no SVG do botão seta horizontal, a mesma do hero e do cta-formulario-lead o .btn:hover svg do core faz translateX(4px) — uma seta diagonal deslizando na horizontal lê torto
<h2 class="ttl"> <h2 class="end-sign" data-split> reveal palavra a palavra, que é o ritmo de assinatura
<img src alt=""> mais loading="lazy" e decoding="async" é a última imagem da página e é decorativa

Status externo, e o motivo exige nota. A §11 usa externo para duas coisas que aqui não coincidem: (a) nunca rodou em produção e (b) veio de fora, sob licença de terceiro. Este componente é só o caso (a). O código é da própria Liberta Wealth, não há autor externo nem licença a creditar.

O que acontece é que a pasta do projeto tem duas cópias do site: github-repo/, que é a versão confirmada e de onde saíram os 18 componentes da varredura, e site/, uma composição cuja ida ao ar não está confirmada. A seção .close-sec existe somente na site/ — ela não aparece em lugar nenhum da github-repo/. Sem confirmação de produção, não dá para chamar de estavel sem mentir, e experimental diria "só rodou uma vez", que também não se sabe.

Rodando num site de verdade, vira estavel e esta seção ganha a linha do projeto. É o único caminho de saída.

O que esperar no primeiro uso real: o opacity:.3 da foto e o .62 do meio do gradiente foram calibrados numa foto específica, escura e de horizonte. Foto mais clara vai pedir .22/.55; foto muito escura, .4/.7. Ajuste os dois juntos — mexer só num deixa a foto ou chapada ou fantasma.