+ Card “Time de você”: cabeça do visitante proporcional à dos candidatos
+
+
+ O enquadramento automático passa a mirar a proporção da cabeça: a cabeça do visitante fica
+ na mesma ordem de grandeza das cabeças dos candidatos (±20%), medida pela mesma régua nos
+ dois lados. Sem controle novo; arrastar e zoom seguem como escape. Sem rosto detectado, vale
+ o enquadramento de hoje — sem erro visível.
+
+
+ DEGRADED: este design não está certificado. É insumo para decisão humana no
+ gate/PR — o tier degradado nunca aprova.
+
+
+ 1280px · desktop
+ 390px · mobile
+ sem controle novo
+ fallback silencioso
+
+
+
+
+
+
+ Cena 1 · Prévia do card · desktop 1280 — cabeça pequena / proporcional / grande
+
+
+ Mesmo card, mesmo recorte: só o zoom do enquadramento automático muda. O alvo é a faixa
+ proporcional (±20% da cabeça dos candidatos); cobertura da janela sempre prevalece.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ TIME DE
+
+
+ MARIA
+
+
+
+
+
Cabeça pequena demais
+
+ Selfie de longe · hoje fica fora da ordem de grandeza dos candidatos
+
+
+
+
+
+
+
+
+
+
+
+
+
+ TIME DE
+
+
+ MARIA
+
+
+ alvo ±20%
+
+
+
Proporcional (alvo)
+
+ Cabeça na mesma ordem de grandeza dos candidatos, rosto inteiro
+
+
+
+
+
+
+
+
+
+
+
+
+
+ TIME DE
+
+
+ MARIA
+
+
+
+
+
Cabeça grande demais
+
+ Selfie de perto · hoje fica gigante ao lado do time
+
+
+
+
+
+ Foto do visitante = placeholder cinza (NEEDS ASSET). A arte oficial dos candidatos é a
+ real.
+
+
+
+
+
+
+
+ Cena 2 · A mesma régua nos dois lados — caixa do rosto
+
+
+ A medida é a mesma dos dois lados: a caixa do rosto. A referência dos candidatos é medida
+ uma vez sobre a arte-mestre e vira constante; a do visitante é medida na foto no momento do
+ recorte. O alvo é a mesma ordem de grandeza, ±20%.
+
+
+
+
+
+
+
+
+
+
+
+
+ Referência medida uma vez na arte-mestre (aprox. ilustrativa).
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Mesma caixa, medida na foto do visitante; igual em ordem de grandeza.
+
+
+
+
+
Em foto com mais de um rosto, vale o maior rosto (o do visitante).
+
O rosto nunca é cortado pelo enquadramento proporcional.
+
Cobertura da janela prevalece: sem buraco no card, mesmo que limite a proporção.
+
A medida é feita no recorte; arrastar/zoom não re-medem nem re-enquadram.
+
+
+
+
+
+
+
+ Cena 3 · Fallback silencioso · drawer mobile 390 — sem rosto detectado
+
+
+ Sem rosto detectado, com detecção indisponível ou em qualquer falha, vale exatamente o
+ enquadramento de hoje (pelo contorno da foto): nenhum aviso, nenhum erro, nenhum bloqueio. O
+ único erro recuperável continua sendo o do recorte de fundo.
+
+
+
+
+
+
+
+
+
+ Time de você
+
+
+ Confira seu card
+
+
+ O recorte já foi centralizado. Se precisar, arraste a foto ou use os controles.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ TIME DE
+
+
+ MARIA
+
+
+
+
+
+
+
+
+
+
+
+ Sua foto fica neste aparelho e não é enviada para nós.
+
+
+
+
+
+
+
+
+
+ Fallback — sem estado visual novo
+
+
+
Sem rosto detectado: enquadramento de hoje, pelo contorno da foto.
+
Detecção indisponível: mesmo caminho, sem tentar de novo e sem travar.
+
Qualquer falha na detecção: silêncio total — nenhum toast, alerta ou badge.
+
O card nunca falha por causa da detecção; o recorte segue o único erro.
+
Nada de upload: a medida é efêmera, no aparelho, e não entra em analytics.
+
+
+
+ O escape continua o de sempre: arrastar a foto e
+ os controles de zoom/ajuste fino. Nenhum botão novo, nenhum passo novo, nenhum aviso
+ quando a medida não é possível.
+
+
+
+
+
+
+
+
+ Cena 4 · Fluxo e regras — sem controle novo
+
+
+
+ [foto escolhida] → [recorte no aparelho: progresso | erro + retry] → [rosto medido?] — sim
+ → [zoom p/ cabeça a ±20% da cabeça dos candidatos] · não → [enquadramento de hoje, pelo
+ contorno] → [prévia (arrastar/zoom como escape)] → [baixar PNG]
+
+
+
+
+
Ordem de mando
+
+
Cobertura da janela (nunca sobra buraco).
+
Proporção da cabeça (±20%).
+
Nada — em caso de conflito, não se ajusta além do permitido.
+
+
+
+
+ Garantias do recorte
+
+
+
O rosto nunca é cortado pelo enquadramento proporcional.
+
Em multi-rosto, vale o maior (o do visitante).
+
A medida acontece uma vez, no recorte.
+
+
+
+
Intocados
+
+
Sem controle novo; arrastar/zoom seguem como escape.
+
Os 3 modelos anteriores, a arte-mestre e os textos.
+
A nota de privacidade existente.
+
+
+
+
+
+
+
+
+
diff --git a/docs/plans/cards-time-de-voce-escala-cabeca.md b/docs/plans/cards-time-de-voce-escala-cabeca.md
new file mode 100644
index 00000000..e8fb23c1
--- /dev/null
+++ b/docs/plans/cards-time-de-voce-escala-cabeca.md
@@ -0,0 +1,112 @@
+# Card "Time de você": cabeça do visitante proporcional à dos candidatos
+
+Status: rascunho
+Atualizado em: 2026-09-19
+Issue: #1197
+Priority: P2
+Impeccable: C — ajuste de comportamento visual num funil público existente (sem controle novo)
+Design UI: docs/plans/cards-time-de-voce-escala-cabeca-ui-design.html
+Appetite: ~1–1,5 dia eng; cabeça do visitante em proporção com os candidatos, com fallback seguro
+Responsável: —
+
+## Intenção
+
+O card "Time de você" (S15, #1161) já enquadra a foto do visitante sozinho — mas só garante que o recorte cubra a janela da foto, ancorado no topo. Na prática, quem manda uma selfie de longe fica com a cabeça minúscula ao lado dos candidatos; quem manda um enquadramento fechado fica gigante. O pedido que abriu este item foi direto:
+
+> "É possivel automaticamente medir o melhor tamanho para colocar a foto? Talvez basear no tamanho da cabeça do usuario e dos candidatos para ficar proporcional?"
+
+A resposta é sim: medir a cabeça dos dois lados com a mesma régua (detecção de rosto) e usar essa proporção para escolher o zoom do enquadramento automático — com os limites do card mandando acima de tudo e, quando não der para medir, valendo exatamente o enquadramento de hoje. É um ajuste de comportamento no funil público, sem controle novo e sem nada saindo do aparelho.
+
+## Persona e fluxo
+
+- **Persona / contexto:** militante no celular, escolheu uma selfie razoável e viu na prévia a cabeça grande demais (foto de perto) ou pequena demais (foto de longe) em relação aos candidatos.
+- **Job principal:** a foto entrar na proporção certa sozinha, sem ajustar nada — e, se a medida não for possível, continuar exatamente como hoje.
+- **Fluxo desejado:** escolhe a foto → acompanha o recorte no aparelho → o card mede a cabeça do visitante e compara com a dos candidatos → ajusta o enquadramento para ficarem na mesma ordem de grandeza (±20%) → confere a prévia (arrastar/zoom como escape) → baixa o PNG. Sem rosto detectado ou detecção indisponível, a prévia sai como sai hoje, sem aviso de erro.
+- **Anti-goals de produto:** editor de enquadramento obrigatório; detecção de rosto como requisito do fluxo; segundo motor/pesquisa de rosto a cada ajuste; prometer recorte/medida perfeitos; expor erro de detecção; alterar o segmentador ou os 3 modelos existentes; upload/serviço/rede.
+
+### Esboço de fluxo (C)
+
+```text
+[foto escolhida] → [recorte no aparelho: progresso | erro + retry]
+→ [rosto medido?] ─ sim → [zoom para a cabeça ficar ±20% da cabeça dos candidatos]
+ └ não → [enquadramento de hoje, pelo contorno]
+→ [prévia (arrastar/zoom como escape)] → [card pronto] → [baixar PNG]
+```
+
+### Design UI (C)
+
+- Design UI (gate): `docs/plans/cards-time-de-voce-escala-cabeca-ui-design.html`
+- Cenas: prévia "antes" (cabeça pequena demais / grande demais) contra "depois" proporcional e o caminho de fallback (idêntico ao de hoje), em mobile e desktop; sem controle novo.
+- `Design tier: DEGRADED` — o frontier `openai/gpt-5.6-sol` bateu quota; o artefato saiu do `designer-degraded` e **não certifica**: exige sign-off humano no gate/PR.
+
+## Objetivo e aceite
+
+- A cabeça do visitante no card fica na mesma ordem de grandeza das cabeças dos candidatos da arte oficial, com tolerância de ±20%, medida pela mesma régua nos dois lados.
+- O enquadramento automático continua sendo o padrão: nenhum passo novo, nenhum botão novo; arrastar/zoom seguem como escape.
+- O rosto do visitante nunca é cortado pelo enquadramento proporcional.
+- A cobertura da janela da foto prevalece: nunca sobra buraco no card, mesmo que isso limite a proporção.
+- Fallback obrigatório e silencioso: sem rosto detectado, com detecção indisponível ou em qualquer falha, vale o enquadramento atual pelo contorno — o card nunca falha nem mostra erro por causa da detecção de rosto (o único erro recuperável continua sendo o do recorte de fundo).
+- Tudo no aparelho; nenhum byte da foto sai; a nota de privacidade existente continua visível e verdadeira.
+- O resto do funil fica intocado: os 3 modelos anteriores, a galeria, os textos e os controles seguem como estão.
+
+## Dados (intenção)
+
+- **Vou apresentar dados?** Não.
+- **Decisões desbloqueadas:** N/A — nenhuma métrica é apresentada; a medida de cabeça é geometria efêmera no aparelho, não um dado de produto.
+- **Forma:** _adiada ao plano de implementação_ — aqui só a restrição de produto: nada de nome, foto ou medida saindo do aparelho nem entrando em analytics.
+
+## Dados da decisão (literais)
+
+- ID `S18`; slug `cards-time-de-voce-escala-cabeca` (arquivo `docs/plans/cards-time-de-voce-escala-cabeca.md`); tipo `feature`; Priority `P2`; Impeccable `C — ajuste de comportamento visual num funil público existente (sem controle novo)`; Design UI: `docs/plans/cards-time-de-voce-escala-cabeca-ui-design.html`.
+- O enquadramento automático passa a mirar a proporção da cabeça: a cabeça do visitante deve ficar na mesma ordem de grandeza das cabeças dos candidatos da arte oficial, tolerância ±20%.
+- Métrica única dos dois lados: o tamanho da cabeça é medido pela detecção de rosto (mesma métrica sobre a arte dos candidatos e sobre a foto do visitante); a referência dos candidatos é medida uma vez sobre a arte-mestre e registrada como constante literal no código.
+- Em foto com mais de um rosto, vale o maior rosto (o do visitante).
+- Fallback obrigatório: sem rosto detectado, com detecção indisponível ou em qualquer falha, o enquadramento atual pelo bbox continua valendo — o card NUNCA falha nem mostra erro por causa da detecção de rosto (só o recorte de fundo tem estado de erro).
+- A cobertura da janela da foto prevalece: se a proporção exigir ampliar além do necessário para cobrir, a cobertura manda (nunca sobra buraco no card).
+- Nenhum controle novo: continua automático, com arrastar/zoom como escape (como hoje).
+- O rosto nunca é cortado pelo enquadramento proporcional.
+- 100% no aparelho; o modelo de detecção segue o padrão do segmentador (mesma origem, commitado, licença documentada, lazy: só o modelo time paga); sem pin de modelo de execução (roda no modelo padrão da sessão; provider `openai` é reservado ao design).
+- A janela da foto do card time continua a do S15: x=286, y=439, largura=592, altura=577 (card 1080×1440).
+
+## Direção no codebase (hipótese)
+
+- **Áreas prováveis:** detecção no adapter `src/components/cards/cardCutout.ts` reaproveitando `@mediapipe/tasks-vision` + modelo de rosto commitado em `public/cards/`; matemática pura nova/estendida em `src/lib/cardPhotoTransform.ts` (a partir de `frameCardPhotoOnBbox`); estado no `useCardCutout.ts`; render/prévia no `src/components/cards/CardComposer.tsx`.
+- **Precedente a olhar:** S15 (`docs/plans/cards-time-de-voce-impl.md`) — motor/wasm/modelo/licença em `public/cards/` e o seam do stub; testes `tests/unit/cardPhotoTransform.unit.spec.ts`, `cardRender.unit.spec.ts` e e2e `tests/e2e/frontend.e2e.spec.ts` (stub do motor via `NEXT_PUBLIC_CARDS_CUTOUT_STUB=1`).
+- **Risco de acoplamento:** a detecção pega carona no mesmo caminho do recorte (o stub de e2e cobre hoje só o segmentador e o e2e falha em qualquer console error); pan/zoom do visitante continuam sendo o escape e nada pode travar a prévia.
+
+## Dependências
+
+- S15 (#1161) entregue — o modelo, o recorte e o auto-enquadramento existem.
+- S17 não é dependência, mas os dois tocam o mesmo pipeline — se rodarem em paralelo, serializar.
+
+## Fora de escopo
+
+- Editor de enquadramento obrigatório; qualquer controle novo de proporção.
+- Detecção de rosto como requisito do fluxo (foto sem rosto segue funcionando como hoje).
+- Identificação de pessoa / reconhecimento facial (detecção ≠ identificação), escolha entre vários rostos, rosto "perfeito".
+- Re-detectar o rosto a cada arrastar/zoom (a medida é feita no momento do recorte).
+- Alterar o segmentador, os 3 modelos antigos, a arte-mestre, os textos do funil ou a privacidade.
+- Upload/serviço/rede; métricas de uso da detecção; modelos adicionais/CMS/compartilhamento (cortados no S15, seguem cortados).
+
+## Rabbit holes de produto
+
+- **Proporção virar editor de enquadramento.** Se alguém "só completar": nasce um passo obrigatório de ajuste fino de cabeça. **Corte neste item:** automático, ±20% quando der; arrastar/zoom como escape de sempre.
+- **Detecção virar requisito.** Se alguém "só completar": foto sem rosto detectado vira erro ou bloqueia o card. **Corte neste item:** fallback silencioso ao enquadramento atual; o único erro recuperável continua sendo o do recorte.
+- **Medir "no olho".** Se alguém "só completar": a régua vira opinião e cada ajuste reabre a conta. **Corte neste item:** métrica única (caixa do rosto), mesma dos dois lados, referência literal registrada.
+- **Cabeça proporcional a qualquer custo.** Se alguém "só completar": zoom sem limite, buraco no card ou rosto cortado. **Corte neste item:** cobertura > proporção > nada; rosto nunca cortado; fallback.
+
+## Questões em aberto (produto)
+
+- **Medir a referência dos candidatos na arte em tempo de execução ou como constante medida uma vez?** **Opções:** A) constante literal medida uma vez sobre a arte-mestre | B) medir a arte a cada sessão | C) híbrido. **Recomendação:** A — a arte-mestre é fixa e já versionada; a constante é auditável, não custa nada no aparelho e não depende de a detecção acertar a arte a cada uso. _(assumido — validar com produto)_
+- **Prover também um toggle para desligar a proporção ou deixar só automático?** **Opções:** A) só automático com fallback | B) toggle do visitante | C) flag interna. **Recomendação:** A — anti-goal "controle novo"; se o ajuste incomodar, arrastar/zoom já é o escape. _(assumido — validar com produto)_
+- **Qual detector usar?** **Opções:** A) `FaceDetector` (caixa do rosto) | B) `FaceLandmarker` (malha facial) | C) motor próprio. **Recomendação:** A — a medida decidida é o tamanho da cabeça, e a caixa do rosto já a entrega; menos peso no celular e menos superfície. _(assumido — validar com produto)_
+
+## Referências
+
+- GitHub Issue #1197
+- Design UI (gate): `docs/plans/cards-time-de-voce-escala-cabeca-ui-design.html` (+ assets em `cards-time-de-voce-escala-cabeca-ui-design-assets/`)
+- `docs/plans/cards-time-de-voce.md` e `cards-time-de-voce-impl.md` (S15, #1161)
+- `src/lib/cardPhotoTransform.ts` (`frameCardPhotoOnBbox`), `src/components/cards/cardCutout.ts`, `useCardCutout.ts`, `CardComposer.tsx`
+- `public/cards/team-card-base.png` / `team-card-example.jpg` (referência visual) e `selfie_segmenter.LICENSE.txt` (padrão de licença)
+- `tests/unit/cardPhotoTransform.unit.spec.ts`, `tests/unit/cardRender.unit.spec.ts`, `tests/e2e/frontend.e2e.spec.ts`
+- `AGENTS.md` — reserva do provider `openai` ao design e convenções do funil de cards
diff --git a/docs/plans/cards-time-de-voce-harmonizar-cores-ui-design.html b/docs/plans/cards-time-de-voce-harmonizar-cores-ui-design.html
new file mode 100644
index 00000000..ff16452c
--- /dev/null
+++ b/docs/plans/cards-time-de-voce-harmonizar-cores-ui-design.html
@@ -0,0 +1,924 @@
+
+
+
+
+
+
+ DEGRADED — Design S17 · Card Time de você: harmonizar cores
+
+
+
+
+ Card “Time de você”: harmonizar as cores da foto
+
+
+ No estado em que a foto já está pronta, um único controle binário ajusta brilho, contraste e
+ saturação da selfie para o tom das fotos oficiais dos candidatos. Padrão LIGADO; desligar
+ devolve a original na hora; vale para a prévia e para o PNG; nada persiste e não há editor.
+
+
+ DEGRADED: este design não está certificado. É insumo para decisão humana no
+ gate/PR — o tier degradado nunca aprova.
+
+ Cena 1 · Estado pronto · dialog desktop 1280 — “Harmonizar cores” LIGADO (padrão)
+
+
+ O controle entra depois do ajuste fino e antes de “Trocar foto”, com ajuda curta em pt-BR e
+ alvo ≥ 44px. No estado ligado, a prévia já abre harmonizada.
+
+
+
+
+
+
+
+ Time de você
+
+
Confira seu card
+
+ O recorte já foi centralizado. Se precisar, arraste a foto ou use os controles.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ TIME DE
+
+
+ MARIA
+
+
+ Arraste para ajustar
+
+
+ Prévia real · foto harmonizada (placeholder cinza)
+
+
+
+
+
+
+
+
+
+
Ajuste fino
+
+
+
+
+
+
+
+
+
+
+
+
+
+ LIGADO · alvo ≥ 44px
+
+
+
+
+ Sua foto fica neste aparelho e não é enviada para nós.
+
+
+
+
+
+
+
+
+
+
+ Cena 2 · Estado pronto · dialog desktop 1280 — “Harmonizar cores” DESLIGADO
+
+
+ Desligar devolve a foto original na hora; tudo o mais (recorte, enquadramento, controles,
+ CTA) permanece idêntico. Religar reaplica.
+
+
+
+
+
+
+
+ Time de você
+
+
Confira seu card
+
+ O recorte já foi centralizado. Se precisar, arraste a foto ou use os controles.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ TIME DE
+
+
+ MARIA
+
+
+ Arraste para ajustar
+
+
+ Prévia real · foto original (placeholder cinza)
+
+
+
+
+
+
+
+
+
+
Ajuste fino
+
+
+
+
+
+
+
+
+
+
+
+
+
+ DESLIGADO
+
+
+
+
+ Sua foto fica neste aparelho e não é enviada para nós.
+
+
+
+
+
+
+
+
+
+
+ Cena 3 · Estado pronto · drawer mobile 390 — controle LIGADO
+
+
+ No mobile o controle fica na mesma ordem do desktop e o alvo de toque cobre a linha inteira
+ (≥ 44px), sem depender de mirar no trilho.
+
+
+
+
+
+
+
+
+
+ Time de você
+
+
Confira seu card
+
+ Arraste a foto ou use os controles.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ TIME DE
+
+
+ MARIA
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Sua foto fica neste aparelho e não é enviada para nós.
+
+
+
+
+
+
+
+
+
+
+ Anatomia do controle
+
+
+
+ Rótulo: “Harmonizar cores”, sempre visível
+ (nunca só o trilho).
+
+
+ Ajuda: “Ajusta o brilho e as cores da sua foto
+ para combinar com as fotos do card.”
+
+
+ Alvo: a linha inteira é o botão, com altura
+ mínima de 44px; funciona por toque e teclado, com foco visível.
+
+
+ Semântica: binário ligado/desligado
+ (role="switch" + aria-checked); no port, usa o vocabulário
+ de toggle já existente no app (sem shadcn Switch).
+
+
+ Estados: LIGADO (trilho
+ --pt-red, thumb à direita) e DESLIGADO (trilho cinza, thumb à
+ esquerda).
+
+
+ Posição: depois de “Ajuste fino” e antes de
+ “Trocar foto”; só no estado pronto.
+
+ Cena 4 · Antes / depois da prévia — a escolha refletida
+
+
+ Mesmo recorte, mesmo enquadramento, mesma prévia: só o ajuste de brilho/contraste/saturação
+ muda. A foto do visitante é um placeholder cinza (NEEDS ASSET) — nenhuma foto real de
+ terceiro é simulada.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ TIME DE
+
+
+ MARIA
+
+
+
+
+
+
+
+
+ Desligado · foto original
+
+
+ Tom mais frio/des saturado em relação ao card.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ TIME DE
+
+
+ MARIA
+
+
+
+
+
+
+
+
+ Ligado · harmonizada (padrão)
+
+
+ Brilho, contraste e saturação aproximados do tom dos candidatos.
+
+
+
+
+
+
+ NEEDS ASSET: foto real do visitante para validar o ajuste no lugar do
+ placeholder cinza. A referência de tom é a arte oficial
+ team-card-base.png.
+
+
+
+
+
+
+
+ Cena 5 · O que o controle faz — e o que fica fora
+
+
+
+
Faz
+
+
Padrão LIGADO: a prévia abre harmonizada, sem exigir decisão.
+
Desligar devolve a foto original instantaneamente; religar reaplica.
+
A escolha vale para a prévia e para o PNG baixado.
+
100% no aparelho: sem upload, sem rede, sem analytics de PII.
+
Ajuste suave e limitado ao tom das fotos oficiais (brilho, contraste, saturação).
+
Fica só no modelo time-de-voce.
+
A nota de privacidade existente continua visível e verdadeira.
+
+
+
+
Não faz
+
+
Não é editor: sem sliders, curvas, presets ou ajuste manual.
+
Não é retoque de beleza: sem pele, forma ou imperfeições.
+
Não altera o recorte nem o enquadramento.
+
Não persiste: sair e voltar retorna ao padrão LIGADO.
+
Não toca os 3 modelos existentes nem as artes-mestre.
+
Não promete “parecer profissional”.
+
+
+
+
+
+
+
+
+
diff --git a/docs/plans/cards-time-de-voce-harmonizar-cores.md b/docs/plans/cards-time-de-voce-harmonizar-cores.md
new file mode 100644
index 00000000..c266f62c
--- /dev/null
+++ b/docs/plans/cards-time-de-voce-harmonizar-cores.md
@@ -0,0 +1,99 @@
+# Card "Time de você": harmonizar as cores da foto do visitante com o time
+
+Status: rascunho
+Atualizado em: 2026-09-19
+Issue: #1196
+Priority: P2
+Impeccable: C — novo controle em estados já existentes de um funil público
+Design UI: docs/plans/cards-time-de-voce-harmonizar-cores-ui-design.html
+Appetite: ~0,5–1 dia eng; um toggle que deixa a foto do visitante com o tom do time
+Responsável: —
+
+## Intenção
+
+O "Time de você" (S15, #1161, entregue em 2026-09-18) deixou o visitante entrar no card com a própria cara — mas quase sempre com uma selfie de celular ao lado de candidatos fotografados por profissional. O recorte fica bom e a foto ainda assim "destoa" do resto: luz mais quente ou fria, contraste e saturação em outra faixa. O pedido do humano foi literal: **"Seria possivel fazer automaticamente algum balanceamento de cores na foto do usuario para encaixar melhor com as fotos dos candidatos que são profissionais? Talvez possa ser um 'filtro' ativavel ou não, um toggle que o usuario seleciona ou não."**
+
+A S15 listou "correção automática de foto" como rabbit hole e não a entregou; agora o humano pede isso de propósito. É item **novo** (S15 não é editado), com escopo pequeno e explícito: um toggle que ajusta a foto, não um editor.
+
+## Persona e fluxo
+
+- **Persona / contexto:** militante no celular, escolheu uma selfie razoável; vê a prévia e sente que a foto "não parece do time" ao lado dos candidatos.
+- **Job principal:** o card ficar harmônico sem virar edição de imagem e sem perder a cara dele.
+- **Fluxo desejado:** foto recortada e prévia prontas → vê o controle "Harmonizar cores" ligado por padrão → desliga e a foto original volta na hora → baixa o PNG com a escolha que deixou na tela.
+- **Anti-goals de produto:** editor de imagem (slider de cor/curvas/presets), filtro "instagramável", promessa de "parecer profissional", retoque de pele, alterar os 3 modelos existentes, upload/serviço/rede, analytics, persistência, segundo fluxo.
+
+### Esboço de fluxo (C)
+
+```text
+[estado pronto do Time de você] → [controle "Harmonizar cores" LIGADO por padrão]
+→ [desligar = foto original | religar] → [PNG com a escolha atual]
+```
+
+### Design UI (C)
+
+- Design UI (gate): `docs/plans/cards-time-de-voce-harmonizar-cores-ui-design.html` — cenas: controle no estado pronto (ligado/desligado), prévia antes/depois e card baixado, desktop e mobile.
+- `Design tier: DEGRADED` — o frontier `openai/gpt-5.6-sol` bateu quota; o artefato saiu do `designer-degraded` e **não certifica**: exige sign-off humano no gate/PR.
+
+## Objetivo e aceite
+
+- No estado em que a foto já está pronta, o visitante vê "Harmonizar cores" com ajuda curta em pt-BR; funciona por toque e teclado (alvo ≥44px).
+- Padrão ligado: a prévia abre harmonizada; desligar devolve a foto original instantaneamente e religar reaplica.
+- A escolha vale para a prévia e para o PNG baixado; nada é persistido — sair e voltar volta ao padrão ligado.
+- O ajuste é automático, suave e limitado ao tom das fotos oficiais dos candidatos (referência: arte-mestre `public/cards/team-card-base.png`); não é retoque de beleza (nada de pele, forma ou imperfeições) e nunca altera o recorte.
+- 100% no aparelho: sem upload, sem analytics de PII, sem nova dependência de rede; vale só para `time-de-voce` (os 3 modelos existentes intocados).
+- A nota de privacidade existente (`CARD_PRIVACY_NOTE`/`CARD_PHOTO_PRIVACY_NOTE`) continua visível e verdadeira.
+
+## Dados (intenção)
+
+- **Vou apresentar dados?** Não.
+- **Decisões desbloqueadas:** N/A — nenhum dado novo é apresentado; a escolha do toggle é local e não gera métrica.
+- **Forma:** _adiada ao plano de implementação_ — medir "quantos ligam" seria analytics de interação, fora deste item.
+
+## Dados da decisão (literais)
+
+- ID `S17`; slug `cards-time-de-voce-harmonizar-cores` (arquivo `docs/plans/cards-time-de-voce-harmonizar-cores.md`); tipo `feature`; Priority `P2`; Impeccable `C — novo controle em estados já existentes de um funil público`; Design UI `docs/plans/cards-time-de-voce-harmonizar-cores-ui-design.html`.
+- Rótulo do controle: `Harmonizar cores`; ajuda curta em pt-BR (ex.: "Ajusta o brilho e as cores da sua foto para combinar com as fotos do card.").
+- Padrão LIGADO; desligar devolve a foto original instantaneamente; a escolha vale para a prévia e para o PNG baixado; nada é persistido.
+- Ajuste automático, suave e limitado: aproxima brilho, contraste e saturação da foto do visitante do tom das fotos oficiais dos candidatos; referência: arte-mestre `public/cards/team-card-base.png`; não é retoque de beleza (sem suavizar pele, sem mudar forma, sem remover imperfeições); nunca altera o recorte.
+- 100% no aparelho, sem upload, sem analytics de PII, sem nova dependência de rede; vale só para o modelo `time-de-voce` (os 3 modelos existentes intocados).
+- Sem pin de modelo de execução (roda no modelo padrão da sessão; provider `openai` é reservado ao design).
+- A nota de privacidade existente continua visível e verdadeira (o ajuste não muda o que ela promete).
+
+## Direção no codebase (hipótese)
+
+- **Áreas prováveis:** processamento de pixel local no recorte (`src/components/cards/cardCutout.ts`/`useCardCutout.ts`) ou no render puro (`src/lib/cardRender.ts`), via contexto estrutural; estado do toggle no `CardComposer.tsx` (controles do estado pronto).
+- **Precedente a olhar:** `src/components/CampaignNewsletterForm.tsx` (forms/controles) e tokens do tema `campaign-site` em `src/app/(frontend)/styles.css` (`--pt-red`, `--campaign-line`, `--campaign-ink`, `--campaign-muted`, `--field-border`, `--team-blue`); `src/components/ui` não tem shadcn Switch — o app usa radix `Toggle`/`Checkbox` e botões `aria-pressed`.
+- **Risco de acoplamento:** o recorte (`composeCutout`/máscara) não pode ser alterado; os 3 modelos existentes não podem mudar; sem rede/dependência nova; testes de unidade (se o ajuste nascer no recorte, specs próprios; sempre `cardRender.unit.spec.ts`) e e2e `tests/e2e/frontend.e2e.spec.ts` (describe Time de você, stub do motor via `NEXT_PUBLIC_CARDS_CUTOUT_STUB=1`) — o e2e falha em qualquer console error.
+
+## Dependências
+
+- S15 (#1161) entregue em 2026-09-18 — é o fluxo onde o controle entra.
+- Sem dependência dura de S16/S18.
+
+## Fora de escopo
+
+- Editor de imagem: slider de cor, curvas, presets, ajuste manual.
+- Filtro "instagramável", promessa de "parecer profissional" e retoque de beleza (pele, forma, imperfeições).
+- Alterar os 3 modelos existentes ou as artes-mestre.
+- Upload/serviço/rede, analytics, persistência, segundo fluxo.
+
+## Rabbit holes de produto
+
+- **O toggle virar editor.** Se alguém "só completar": nascem sliders de cor/curvas, presets e pack de filtros "de marca". **Corte neste item:** um controle binário, sem ajuste manual.
+- **Escorregar para retoque de beleza.** Se alguém "só completar": suaviza pele e "melhora" o rosto. **Corte neste item:** só brilho/contraste/saturação, nada de forma ou pele.
+- **Processar no servidor ou baixar modelo pesado.** Se alguém "só completar": quebra a promessa de 100% no aparelho. **Corte neste item:** local, sem rede, sem dependência nova.
+
+## Questões em aberto (produto)
+
+- **Padrão ligado ou desligado?** **Opções:** ligado | desligado. **Recomendação:** ligado — é o pedido literal do humano e o card fica bom sem exigir decisão. _(decidido nos literais; confirmar no gate)_
+- **Referência de tom medida na arte dos candidatos ou perfil fixo calibrado?** **Opções:** medir a arte-mestre `team-card-base.png` | perfil fixo (números calibrados uma vez). **Recomendação:** medir a arte como referência, com limites fixos de intensidade — segue o tom real do card sem virar "filtro da casa". _(assumido — validar com produto)_
+- **Toggle só no estado pronto ou também no estado vazio?** **Opções:** só no estado pronto | também antes da foto. **Recomendação:** só no estado pronto — sem foto não há o que harmonizar, e o estado vazio já tem carga própria. _(assumido — validar com produto)_
+
+## Referências
+
+- GitHub Issue #1196
+- Design UI (gate): `docs/plans/cards-time-de-voce-harmonizar-cores-ui-design.html` (+ assets em `cards-time-de-voce-harmonizar-cores-ui-design-assets/`)
+- `docs/plans/cards-time-de-voce.md` / `cards-time-de-voce-impl.md` (S15) — o fluxo onde o controle entra
+- `public/cards/team-card-base.png` — arte-mestre usada como referência de tom
+- `src/components/cards/cardCutout.ts`, `useCardCutout.ts`, `CardComposer.tsx`, `src/lib/cardRender.ts`, `cardCopy.ts`
+- `src/components/CampaignNewsletterForm.tsx`; `src/app/(frontend)/styles.css`; `tests/e2e/frontend.e2e.spec.ts`; `AGENTS.md` (provider `openai` reservado ao design)
diff --git a/docs/plans/cards-time-de-voce-nomes-longos-ui-design.html b/docs/plans/cards-time-de-voce-nomes-longos-ui-design.html
new file mode 100644
index 00000000..ff8a1edc
--- /dev/null
+++ b/docs/plans/cards-time-de-voce-nomes-longos-ui-design.html
@@ -0,0 +1,1189 @@
+
+
+
+
+
+
+ DEGRADED — Design S16 · Card Time de você: nomes longos
+
+
+
+
+ Card “Time de você”: nomes longos cabendo no banner
+
+
+ Militante no celular com nome composto digita o nome inteiro e o banner azul se alarga
+ apenas o necessário a partir da referência 509, agora até o teto de 1000 (antes 660; ≈40 px
+ de margem em cada lado do card), sem nunca cruzar o topo da janela da foto. Acima do teto, a
+ pessoa recebe a mesma mensagem de nome curto de hoje e o CTA segue desabilitado. Nenhum passo
+ novo, nenhuma decisão nova.
+
+
+ DEGRADED: este design não está certificado. É insumo para decisão humana no
+ gate/PR — o tier degradado nunca aprova.
+
+ Cena 1 · Spec de geometria — banner dinâmico 509 → 1000
+
+
+ Centro, y, altura e rotação do banner azul permanecem os do S15; só a largura entra. No teto
+ (largura 1000) o canto mais baixo fica em ≈436, ~3 px acima do topo da janela da foto
+ (y=439) — encosta sem cruzar.
+
+
+
+
+
+
+
+
+
+ TIME DE
+
+
+
+
+
+ y=439
+
+
+ Diagrama fora de escala de fonte, mas com larguras reais sobre a arte oficial.
+
+
+
+
+
+
+
Banner azul
+
+ centro (545, 313) · altura
+ 176 · rotação
+ −4,1° · fill
+ #0061A5 · texto
+ #FFFFFF · 1 linha, sem quebra.
+
+
+
+
Largura dinâmica
+
+ referência 509 quando o nome cabe nela (tinta
+ ≤ 470); alarga só o necessário até o teto
+ 1000 (≈40 px de margem de cada lado); centro
+ mantido em 545.
+
+
+
+
Tinta e cap
+
+ tinta máxima sobe de 470 para
+ 961; cap mínimo legível desce de
+ 56 para
+ 40 (mínimo legível).
+
+
+
+
Limite intocável
+
+ topo da janela da foto em y=439; canto mais
+ baixo do banner no teto (largura 1000) ≈
+ 436. Margens ≈40 px preservadas (x ≈
+ 45…1045 de 1080).
+
+
+
+
+ Banner vermelho intocado: 693×118, centro
+ (545, 162), −3,5°, fill #E50E2F, texto #FFEC01 — as cores do S15 seguem literais. O azul
+ agora pode ultrapassar o vermelho (teto 1000 >
+ 693). Teto 1000 e cap mínimo 40: decisão do humano no gate (2026-09-19).
+
+
+
+
+
+
+
+
+ Cena 2 · Alargamento do banner — referência 509 → teto 1000 · desktop 1280
+
+
+ ANA encosta na referência e pede só 566; MARIA, FULANO, MARIA CLARA, MARIA EDUARDA e MARIA DA
+ CONCEIÇÃO alargam conforme o nome, encostando no teto 1000. O cap desce até o mínimo legível
+ 40; abaixo disso o banner não é desenhado e a mensagem pede um nome mais curto. Nunca há corte
+ silencioso.
+
+
+
+
+
+
+
+
+
+
+
+
+ TIME DE
+
+
+ ANA
+
+
+
ANA
+
+ banner 509 → 566 · cap 130 (referência)
+
+
+
+
+
+
+
+
+
+
+ TIME DE
+
+
+ MARIA
+
+
+
MARIA
+
+ banner 846 · cap 130
+
+
+
+
+
+
+
+
+
+
+ TIME DE
+
+
+ FULANO
+
+
+
FULANO
+
+ banner 964 · cap 130 · já passa o vermelho (693)
+
+
+
+
+
+
+
+
+
+
+ TIME DE
+
+
+ MARIA CLARA
+
+
+
MARIA CLARA
+
+ banner 990 · cap 73 · quase no teto
+
+
+
+
+
+
+
+
+
+
+ TIME DE
+
+
+ MARIA EDUARDA
+
+
+
MARIA EDUARDA
+
+ banner 993 · cap 62 · quase no teto
+
+
+
+
+
+
+
+
+
+
+ TIME DE
+
+
+ MARIA DA CONCEIÇÃO
+
+
+
MARIA DA CONCEIÇÃO
+
+ banner 991 · cap 47 · passa a caber (era too-long)
+
+
+
+
+
+
+
+
+
+ Cena 3 · Compositor · dialog desktop 1280 — campo “Seu nome” com nome composto
+
+
+ Estado inicial: a pessoa digita MARIA CLARA; a prévia ainda é o exemplo congelado. Nenhuma
+ decisão nova e um único CTA primário (desabilitado até ter foto).
+
+
+
+
+
+
+
+
+ Time de você
+
+
+ Entre para o time
+
+
+
+
+
+
+
+
+
+
+
+
+ Vai aparecer em caixa alta depois de “TIME DE”. Use um nome curto e conhecido.
+
+
+ Anotação do gate (não é copy de produto): o banner azul se alarga para caber o nome
+ composto em uma linha.
+
+
+
+
Sua foto de busto
+
+ Para um recorte melhor, escolha uma foto nítida, de frente e com fundo simples.
+
+
+
+
+ Seu nome e sua foto são processados apenas no seu aparelho e não são enviados para nós.
+
+
+
+
+
+
+
+
+
+
+ Cena 4 · Compositor pronto · dialog desktop 1280 — prévia com o banner alargado
+
+
+ A prévia real confirma “TIME DE MARIA CLARA” em uma linha; Zoom, ajuste fino e “Trocar foto”
+ seguem como escape.
+
+
+
+
+
+
+
+ Time de você
+
+
Confira seu card
+
+ O recorte já foi centralizado. Se precisar, arraste a foto ou use os controles.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ TIME DE
+
+
+ MARIA CLARA
+
+
+ Arraste para ajustar
+
+
+ Prévia real · banner alargado para o nome composto
+
+
+
+
+
+
+
+
+
+
Ajuste fino
+
+
+
+
+
+
+
+
+
+ Sua foto fica neste aparelho e não é enviada para nós.
+
+
+
+
+
+
+
+
+
+
+ Cena 5 · Compositor · drawer mobile 390 — campo + prévia
+
+
+ No mobile o mesmo diálogo vira drawer; o campo “Seu nome” e a prévia com o banner alargado
+ convivem no mesmo fluxo, sem passo novo.
+
+
+
+
+
+
+
Faça parte
+
Mostre que você está com Solla
+
+
+
+
+
+
+
+
+ Time de você
+
+
+ Entre para o time
+
+
+
+
+
+
+
+
+
+
+
+
+ Use seu primeiro nome ou o nome pelo qual as pessoas conhecem você.
+
+
+
+
Sua foto de busto
+
+ Foto nítida, de frente e com fundo simples.
+
+
+
+
+ Seu nome e sua foto são processados apenas no seu aparelho e não são enviados para
+ nós.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Time de você
+
+
Confira seu card
+
+ Arraste a foto ou use os controles.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ TIME DE
+
+
+ MARIA CLARA
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Sua foto fica neste aparelho e não é enviada para nós.
+
+
+
+
+
+
+
+
+
+
+
+ Cena 6 · Fora do teto · dialog desktop — mensagem existente + CTA desabilitado
+
+
+ BARTOLOMEUCOSTAJUNIOR (cap 39) e ANTICONSTITUCIONALISSIMAMENTE (cap 30) seguem como
+ too-long: ficam abaixo do cap mínimo 40, o banner não é desenhado, a mensagem é
+ a mesma de hoje e o CTA fica desabilitado. Nada de corte silencioso.
+
+
+
+
+
+
+
+ Nome muito longo
+
+
Encurte o nome
+
+
+
+
+
+
+
+
+
+
+
+
+ TIME DE
+
+
+
+
+
+
+ Não foi possível encaixar esse nome no card. Use um nome mais curto, como você é
+ chamado.
+
+
+ A foto escolhida e o recorte permanecem salvos neste aparelho enquanto você corrige o
+ nome.
+
+
+
+
+
+
+
+
+
+
+ Cena 7 · Nomes que devem caber (aceite, medidos com a fonte real)
+
+
+ Com o teto 1000 (tinta máxima 961) e o cap mínimo 40, os nomes longos cabem em uma linha, sem
+ corte. MARIA DA CONCEIÇÃO passou a caber; só os absurdos abaixo do cap mínimo seguem
+ too-long.
+
+
+
+
+
+
Nome
+
Cap
+
Banner
+
Resultado
+
+
+
+
+
ANA (referência)
+
130
+
566 (referência 509)
+
cabe · alarga só 57
+
+
+
MARIA
+
130
+
846
+
cabe
+
+
+
FULANO
+
130
+
964
+
cabe · já passa o vermelho (693)
+
+
+
MARIA CLARA
+
73
+
990
+
cabe · quase no teto
+
+
+
MARIA EDUARDA
+
62
+
993
+
cabe · quase no teto
+
+
+
MARIA DA CONCEIÇÃO
+
47
+
991
+
cabe · antes too-long
+
+
+
BARTOLOMEUCOSTAJUNIOR
+
39
+
—
+
too-long (cap < 40)
+
+
+
ANTICONSTITUCIONALISSIMAMENTE
+
30
+
—
+
too-long (cap < 40)
+
+
+
+
+
+ Caps e larguras medidos com Brexter 700 (cap ratio 0,72) sobre a arte oficial do S15. Outros
+ nomes do aceite no plano: ANA BEATRIZ 78, JOSÉ CARLOS 78, PEDRO HENRIQUE 62, JOÃO VITOR 89,
+ GUILHERME 94, FERNANDA 98. A medição fina é do plano/implementação — este artefato mostra a
+ intenção visual.
+
+
+
+
+
+
+
diff --git a/docs/plans/cards-time-de-voce-nomes-longos.md b/docs/plans/cards-time-de-voce-nomes-longos.md
new file mode 100644
index 00000000..c83026a9
--- /dev/null
+++ b/docs/plans/cards-time-de-voce-nomes-longos.md
@@ -0,0 +1,107 @@
+# Card "Time de você": nomes longos cabendo no banner
+
+Status: rascunho
+Atualizado em: 2026-09-19
+Issue: #1195
+Priority: P1
+Impeccable: C — ajuste visual num funil público existente (não é superfície nova)
+Design UI: docs/plans/cards-time-de-voce-nomes-longos-ui-design.html
+Appetite: ~0,5–1 dia eng; nomes longos cabendo sem corte no banner do card
+Responsável: —
+
+## Intenção
+
+O modelo "Time de você" (S15, #1161, no ar desde 2026-09-18) já tem o primeiro retorno de campo: nomes compostos não cabem. O verbatim da pessoa: "O card só permite hoje nomes com no máximo 7 letras, mas tem mais espaço no card. Deve mudar para permitir nomes maiores, podemos estender o espaço horizontal ocupado pela segunda linha do título. Ou mesmo diminuir um pouco a fonte da segunda linha para caber."
+
+Medido no navegador com a fonte real (Brexter 700, cap ratio 0,72): hoje `GUSTAVO` (7) passa no cap 57; de 8 letras para cima tudo falha — `FERNANDA` para em 48, `GUILHERME` em 45, `JOÃO VITOR` em 44, `MARIA EDUARDA` em 30. A pessoa é mandada encurtar o nome, mas o banner azul tem folga visível dos dois lados. Esta entrega usa essa folga: o banner azul passa a se alargar só o necessário, podendo passar o banner vermelho e chegar perto da largura toda do card (decisão do humano no gate, 2026-09-19), e os limites de legibilidade são reposicionados, sem tocar no que o S15 mediu.
+
+## Persona e fluxo
+
+- **Persona / contexto:** militante no celular com nome composto (Maria Eduarda, João Vitor, Pedro Henrique) que hoje é obrigado a encurtar ou apelidar o próprio nome para gerar o card.
+- **Job principal:** ver o nome inteiro no card, sem apelido forçado e sem corte.
+- **Fluxo desejado:** abre `#cards` na home (ou `/cards`) → escolhe `Time de você` → digita o nome composto → vê o banner azul se alargar apenas o necessário e o nome inteiro em uma linha na prévia → baixa o PNG. Nenhum passo novo, nenhuma decisão nova.
+- **Anti-goals de produto:** virar editor de texto/layout, permitir duas linhas no banner, mexer no banner vermelho ou na geometria medida do S15, regenerar a arte de exemplo, mexer no modelo de nome (S13) ou nos outros 3 modelos.
+
+### Esboço de fluxo (C)
+
+```text
+[home/#cards ou /cards] → [Time de você] → [digita nome composto]
+→ [banner azul alarga só o necessário até o teto] → [prévia com nome inteiro em 1 linha]
+→ [fora do teto: mensagem de nome curto, como hoje] → [baixar PNG]
+```
+
+### Design UI (C)
+
+- Design UI (gate): `docs/plans/cards-time-de-voce-nomes-longos-ui-design.html`
+- Cenas: nome curto no banner de referência (509), nomes longos com banner alargado (até o teto de 1000) e nome que continua pedindo encurtamento, em desktop e mobile.
+- `Design tier: DEGRADED` — o frontier `openai/gpt-5.6-sol` bateu quota; o artefato saiu do `designer-degraded` e **não certifica**: exige sign-off humano no gate/PR.
+
+## Objetivo e aceite
+
+- Nomes que DEVEM caber (aceite, medidos com a fonte real): MARIA EDUARDA (cap 62), PEDRO HENRIQUE (62), MARIA CLARA (73), ANA BEATRIZ (78), JOSÉ CARLOS (78), JOÃO VITOR (89), GUILHERME (94), FERNANDA (98), MARIA DA CONCEIÇÃO (47), FULANO e MARIA no cap ideal 130.
+- O banner azul do nome deixa de ter largura fixa: mantém a referência 509 quando o nome cabe nela e alarga só o necessário até o teto de 1000 (≈40px de margem em cada lado do card) — pode ultrapassar o banner vermelho (693) como decidido no gate; centro, y, altura e rotação permanecem os do S15.
+- O banner alargado nunca cruza o topo da janela da foto (y=439) nem as margens do card (para qualquer largura ≤1000, o canto mais baixo fica em ~436).
+- Nome continua em uma linha, nunca quebra e nunca é cortado: fora do teto, a pessoa recebe a mesma mensagem de "nome muito longo" do modelo de nome — os absurdos pinados (BARTOLOMEUCOSTAJUNIOR e ANTICONSTITUCIONALISSIMAMENTE) seguem como `too-long`; como o teto subiu, `MARIA DA CONCEIÇÃO` passa a caber e o pin de unit correspondente muda (o nome de teste claramente fora passa a ser o absurdo mais longo).
+- O banner vermelho "TIME DE", as cores e o restante da geometria medida do S15 ficam intocados; os outros 3 modelos do funil e o modelo de nome não mudam.
+- A prévia de exemplo (`team-card-example.jpg`) é referência congelada e fica fora do escopo: não regenerar neste item.
+- Um único editor, privacidade local e download por toque/teclado continuam como hoje.
+
+## Dados (intenção)
+
+- **Vou apresentar dados?** Não.
+- **Decisões desbloqueadas:** N/A — nenhuma métrica é apresentada; o ajuste é de layout/legibilidade, não desbloqueia decisão operacional por dado.
+- **Forma:** _adiada ao plano de implementação_ — nome e imagem seguem insumos locais do card; nenhum conteúdo pessoal entra em analytics.
+
+## Dados da decisão (literais)
+
+- ID `S16`; slug `cards-time-de-voce-nomes-longos`; tipo `feature`; Priority `P1`; Impeccable `C — ajuste visual num funil público existente (não é superfície nova)`; Design UI: `docs/plans/cards-time-de-voce-nomes-longos-ui-design.html`.
+- O banner azul deixa de ter largura fixa: mantém a largura de referência 509 quando o nome cabe nela e se alarga só o necessário, até o teto de 1000 (≈40px de margem em cada lado do card; pode ultrapassar o banner vermelho 693 — decidido no gate em 2026-09-19). Centro 545, y 313, altura 176 e rotação −4,1° inalterados.
+- Tinta máxima disponível sobe de 470 para 961; cap mínimo legível desce de 56 para 40.
+- Nomes que DEVEM caber (exemplos de aceite, medidos): MARIA DA CONCEIÇÃO (cap 47, banner ~991), MARIA EDUARDA/PEDRO HENRIQUE (cap 62), MARIA CLARA (73), ANA BEATRIZ/JOSÉ CARLOS (78), JOÃO VITOR (89), GUILHERME (94), FERNANDA (98), FULANO/MARIA no cap ideal 130.
+- Nomes que continuam recebendo a mensagem de nome curto: os absurdos pinados (BARTOLOMEUCOSTAJUNIOR, cap 39; ANTICONSTITUCIONALISSIMAMENTE, cap 30) — nunca corte silencioso.
+- Sem pin de modelo de execução (roda no modelo padrão da sessão; provider `openai` é reservado ao design).
+- A prévia de exemplo do modelo (`team-card-example.jpg`, mostrada na galeria e no estado vazio) é uma referência congelada e fica FORA do escopo; não regenerar neste item.
+- O banner alargado não pode cruzar o topo da janela da foto (y=439) nem as margens do card.
+- Tudo o mais do S15 permanece literal: banner vermelho 693×118 (centro 545, 162, −3,5°), fill azul `#0061A5`, texto branco `#FFFFFF`, uma linha, sem quebra.
+
+## Direção no codebase (hipótese)
+
+- **Áreas prováveis:** `src/lib/cardModels.ts` (TEAM_CARD_NAME_BANNER/TEAM_CARD_NAME_SLOT), `src/lib/cardNameFit.ts`, `src/lib/cardRender.ts` (drawCardBanner/drawCardName/renderTeamCard), `src/components/cards/CardComposer.tsx`; testes `tests/unit/cardModels.unit.spec.ts`, `tests/unit/cardNameFit.unit.spec.ts`, `tests/unit/cardRender.unit.spec.ts`, e2e `tests/e2e/frontend.e2e.spec.ts` (describe Time de você; hoje pina um nome absurdo como too-long).
+- **Precedente a olhar:** o próprio S15 (`docs/plans/cards-time-de-voce.md` e `-impl.md`) — a geometria medida e o fit de uma linha já estão lá.
+- **Risco de acoplamento:** o fit é compartilhado com o modelo de nome (slot próprio, 714/48) — o ajuste deve ficar no slot do time, sem afrouxar o outro modelo; o e2e falha em qualquer console error. O unit de `cardNameFit` hoje pina `'Maria da Conceição'` e `'Bartolomeucostajunior'` como `too-long` — com o teto novo o primeiro passa a caber e o pin precisa ser reescrito (nome de teste claramente fora).
+
+## Dependências
+
+- S15 (#1161) entregue em 2026-09-18; sem outras dependências.
+
+## Fora de escopo
+
+- Duas linhas no banner ou auto-quebra de nome.
+- Mudar o banner vermelho, as cores ou qualquer outra geometria medida do S15.
+- Regenerar `team-card-example.jpg` ou qualquer arte-mestre.
+- Mexer no modelo de nome (S13) e nos outros 3 modelos do funil.
+- Editor de texto/layout, escolha manual de tamanho de fonte ou largura do banner.
+- Métricas de uso, analytics de nome, ou qualquer persistência do nome.
+
+## Rabbit holes de produto
+
+- **Encolher a fonte até caber sempre.** Se alguém "só completar": nome gigante vira letra ilegível e o aceite de legibilidade morre. **Corte neste item:** cap mínimo 40; abaixo disso, mensagem de nome curto.
+- **Fixar o banner no teto para todo mundo.** Se alguém "só completar": o card de quem tem nome curto deixa de parecer o exemplo do S15. **Corte neste item:** largura dinâmica com referência 509 e alargamento só quando necessário.
+- **Cortar ou elidir o nome na marra.** Se alguém "só completar": entra corte silencioso no lugar da mensagem. **Corte neste item:** nunca cortar; fora do teto, pedir nome curto.
+- **Regenerar o exemplo para "ficar coerente".** Se alguém "só completar": vira produção de arte não pedida. **Corte neste item:** exemplo congelado, fora do escopo.
+
+## Questões em aberto (produto)
+
+- **Teto de largura do banner azul?** **Decidido com o humano em 2026-09-19:** pode passar o vermelho e ir até quase a largura toda do card sem problema → teto de 1000 (≈40px de margem em cada lado), com o banner se alargando só o necessário.
+- **Cap mínimo 40 ou 44?** **Decidido com o humano em 2026-09-19:** 40 — é o valor em que os nomes compostos longos cabem medidos.
+- **Banner dinâmico ou fixo no teto?** **Decidido com o humano em 2026-09-19:** dinâmico — curto mantém a referência 509, longo alarga só o necessário até 1000.
+- **A mensagem de nome curto muda?** **Decidido com o humano em 2026-09-19:** manter idêntica à do modelo de nome — mudar só o limiar, não o texto.
+
+## Referências
+
+- GitHub Issue #1195
+- Design UI (gate): `docs/plans/cards-time-de-voce-nomes-longos-ui-design.html` (+ assets em `cards-time-de-voce-nomes-longos-ui-design-assets/`)
+- `docs/plans/cards-time-de-voce.md` e `docs/plans/cards-time-de-voce-impl.md` — S15, geometria medida e fit
+- `src/lib/cardModels.ts`, `src/lib/cardNameFit.ts`, `src/lib/cardRender.ts`, `src/components/cards/CardComposer.tsx`
+- `tests/unit/cardModels.unit.spec.ts`, `tests/unit/cardNameFit.unit.spec.ts`, `tests/unit/cardRender.unit.spec.ts`, `tests/e2e/frontend.e2e.spec.ts` (describe Time de você)
+- `AGENTS.md` — convenções do funil de cards e fontes commitadas