diff --git a/docs/plans/espacamento-strip-acoes-inicio.md b/docs/plans/espacamento-strip-acoes-inicio.md
new file mode 100644
index 00000000..dd178a2d
--- /dev/null
+++ b/docs/plans/espacamento-strip-acoes-inicio.md
@@ -0,0 +1,85 @@
+# Reduzir espaçamento horizontal da strip de ações do Início
+
+Status: rascunho
+Atualizado em: 2026-07-29
+Item do roadmap: [docs/roadmap.md](../roadmap.md) (Trilha B — **B72**; chassis UX-1 / pós-B58)
+Impeccable: B — uma linha de layout em `CampaignHomeActionStrip`
+Appetite: ~0,25 dia eng (token Tailwind; sem migration, action ou URL)
+Responsável: —
+
+## Design (Impeccable)
+
+Âncoras: `PRODUCT.md` / `DESIGN.md` · tema `campaign`.
+
+Na implementação: craft compacto → critique → polish (checar 6 ícones staff no iPhone estreito + pan B67 ✓).
+
+Brief compacto:
+
+- **Persona:** assessor/CG escolhendo ação rápida na faixa horizontal.
+- **Job principal:** ver mais ações por viewport sem perder alvo de toque.
+- **Estratégia de cor:** inalterada (B58 ✓).
+- **Anti-goals:** comprimir até labels de duas linhas colidirem; remover `snap-x` ou pan.
+
+## Dados → decisão → apresentação
+
+Dados: N/A — superfície de atalhos, sem métricas.
+
+## Contexto
+
+**B45 ✓** + **B58 ✓** + **B67 ✓** montaram `CampaignHomeActionStrip` com `gap-6` entre itens do `
` (`src/components/campaign/dashboard/CampaignHomeActionStrip.tsx`, linha ~141). Feedback 2026-07-29: distância horizontal entre botões de ação **grande demais** no mobile — a strip parece esparça e exige mais pan para ver as seis ações staff.
+
+## Objetivos
+
+- Reduzir `gap` horizontal da lista (recomendação inicial: `gap-6` → `gap-3` ou `gap-4`; validar no critique que rótulos de duas linhas em `w-[4.75rem]` não colidem).
+- Manter: `snap-x`, `[touch-action:pan-x]`, scrollbar oculta, drag fine-pointer (B67), escala no círculo (B58).
+- Atualizar e2e `campaignHomeActions.e2e.spec.ts` só se assertar distância/posição (improvável).
+- Sem migration, collection, server action ou mudança de catálogo `campaignHomeActions.ts`.
+
+## Decisões travadas
+
+- **Só `gap`, não largura do botão.** `CampaignHomeActionButton` mantém `w-[4.75rem]` e círculo 48px. **Rejeitado:** encolher círculo abaixo de 44px (SC 2.5.5).
+- **Mesmo gap em coarse e fine.** **Rejeitado:** `gap-3` só no mobile — inconsistência visual desktop/mobile sem ganho claro.
+
+## Questões em aberto
+
+- **Valor final do gap?** **Opções:** A `gap-3` (12px) | B `gap-4` (16px). **Recomendação:** **B** — metade do atual sem apertar demais labels de duas linhas; critique pode ajustar para A se ainda parecer largo.
+
+## Abordagem proposta
+
+```mermaid
+flowchart LR
+ Strip["CampaignHomeActionStrip
ul gap-4"]
+ Btn["CampaignHomeActionButton × N"]
+ Strip --> Btn
+```
+
+Componentes:
+
+- **`CampaignHomeActionStrip.tsx`**: alterar classe `gap-6` → `gap-4` (ou valor escolhido no critique).
+- **Migration:** Sem migration.
+
+## Dependências
+
+- Soft: **B44 ✓**, **B58 ✓**, **B67 ✓** (strip estável). Nenhuma dura.
+
+## Não escopo
+
+- Novos rótulos, animação, thumb-zone (**B65**), resultados de busca (**B71**).
+
+## Rabbit holes
+
+- **Responsivo `gap-3 md:gap-6`.** Mitigação: um valor único salvo pedido explícito pós-critique.
+
+## Adiado com gatilho
+
+Nenhum neste item.
+
+## Referências
+
+- `src/components/campaign/dashboard/CampaignHomeActionStrip.tsx`
+- `src/components/campaign/dashboard/CampaignHomeActionButton.tsx`
+- `docs/plans/polimento-strip-acoes-inicio.md` (B58)
+- `docs/plans/restaurar-pan-strip-acoes-inicio.md` (B67)
+- `tests/e2e/campaignHomeActions.e2e.spec.ts`
+
+Qualidade de decisão: 5/5
diff --git a/docs/plans/polimento-resultados-busca-inicio.md b/docs/plans/polimento-resultados-busca-inicio.md
new file mode 100644
index 00000000..a07c8f56
--- /dev/null
+++ b/docs/plans/polimento-resultados-busca-inicio.md
@@ -0,0 +1,98 @@
+# Polimento visual dos resultados de busca no Início
+
+Status: rascunho
+Atualizado em: 2026-07-29
+Item do roadmap: [docs/roadmap.md](../roadmap.md) (Trilha B — **B71**; chassis UX-1 / pós-B48)
+Impeccable: B — encaixe em `HomeSearchMunicipalityGroup` + `HomeSearchHitRow` (B48 ✓)
+Appetite: ~0,25–0,5 dia eng (CSS/markup; sem migration, action ou rota)
+Responsável: —
+
+## Design (Impeccable)
+
+Âncoras: `PRODUCT.md` / `DESIGN.md` (register product) · tema `data-theme='campaign'`.
+
+Na implementação (`implement-roadmap-item`): craft compacto → critique → polish (validar Brave PWA mobile + Safari iOS).
+
+Brief compacto:
+
+- **Persona / contexto:** staff no ritual de busca do Início (mobile PWA ou desktop) — quer ler hits sem ruído visual.
+- **Job principal:** escanear municípios/TIs e tocar o certo; o grupo “Municípios” é rótulo, não cabeçalho de seção.
+- **Estratégia de cor:** Restrained — título `text-muted-foreground` menor; hover `bg-muted` em faixa full-bleed.
+- **Edit where you see:** não — só navegação por `Link`.
+- **Anti-goals:** card com borda por linha (já rejeitado no B48); título em CAPS tipo dashboard SaaS; bullets herdados do site público.
+
+## Dados → decisão → apresentação
+
+Dados: N/A — lista de navegação; votos 2022 à direita permanecem como no B48 (readout A11 / rollup TI).
+
+## Contexto
+
+**B48 ✓** entregou `HomeSearchMunicipalityGroup` e `HomeSearchHitRow`. Feedback de campo (2026-07-29, PWA mobile Brave):
+
+1. **Bullets** nas linhas de resultado — o `` não declara `list-none`; o reset global de `ul` em `src/app/(frontend)/styles.css` (`my-6 ml-6 list-disc`) vaza para superfícies da campanha (precedente já citado no E11: fatores em lista precisaram de reset explícito). Safari pode mascarar; Brave mobile não.
+2. **Título do grupo** “MUNICÍPIOS” (uppercase + tracking) parece separador forte; pedido: **“Municipios”** (só primeira letra maiúscula), menor, sem linha horizontal, menos espaço até a primeira linha.
+3. **Hover/focus** do hit não preenche a largura útil — o `hover:bg-muted/60` fica na caixa do `Link` dentro do padding do scroll (`p-4` no layout `(app)`), não de borda a borda da viewport.
+
+## Objetivos
+
+- Remover marcadores de lista: `list-none m-0 p-0` no `` (e `list-none` nos `- ` se necessário); zerar margens herdadas (`my-6 ml-6`, `[&>li]:mt-2`).
+- Título do grupo de busca (`resultKind === 'search'` → “Municípios”; suggest → “Sugestões” inalterado): **sentence case** (“Municípios” com acento), `text-[11px]` ou `text-xs` sem `uppercase`/`tracking-wide`, peso normal ou `font-medium` discreto; reduzir `gap` entre título e lista (`gap-0.5` ou equivalente); **sem** `border-b`, `Separator` ou pseudo-elemento de linha.
+- Linha de hit: faixa de hover/focus **full-bleed** na área de conteúdo — padrão `-mx-4 px-4 md:-mx-6 md:px-6` no wrapper da linha (espelha `p-4`/`md:p-6` de `campanha/(app)/layout.tsx`) para o fundo ir de borda a borda da tela no mobile; manter alinhamento do texto com o input de busca.
+- Regressão visual: desktop Safari + mobile Brave PWA; e2e existente de busca (`campaignHomeSearch` ou equivalente) continua verde.
+- Sem migration, collection, server action ou mudança de contrato JSON.
+
+## Decisões travadas
+
+- **Corrigir no componente, não no reset global de `ul`.** O leak do `styles.css` do frontend é conhecido; resetar `ul` no tema campanha é escopo maior (R6). **Rejeitado:** alterar `styles.css` neste slice.
+- **Full-bleed só na faixa interativa**, não mover o bloco inteiro de resultados para fora do padding — texto alinhado ao campo de busca. **Rejeitado:** `width: 100vw` sem compensar padding (cria scroll horizontal).
+- **“Municipios” = “Municípios”** (grafia correta pt-BR; pedido era capitalização, não remover acento). **Rejeitado:** string sem acento.
+- **i18n:** strings visíveis em pt-BR; identificadores de componente em inglês.
+
+## Questões em aberto
+
+- **Cantos arredondados no hover full-bleed?** **Opções:** A sem `rounded` na faixa | B `rounded-none` explícito | C manter `rounded-md` só no desktop. **Recomendação:** **A/B** — faixa reta de borda a borda no mobile; no desktop o bleed já é menor visualmente.
+
+## Abordagem proposta
+
+```mermaid
+flowchart LR
+ G["HomeSearchMunicipalityGroup
título + ul list-none"]
+ R["HomeSearchHitRow
bleed wrapper + Link hover"]
+ G --> R
+```
+
+Componentes:
+
+- **`HomeSearchMunicipalityGroup.tsx`**: classes do `` e do ``; `ul` com `list-none m-0 p-0`.
+- **`HomeSearchHitRow.tsx`**: wrapper externo com margem negativa + padding compensatório; `hover:bg-muted/60` (ou token equivalente) na faixa inteira; `focus-visible` alinhado ao mesmo retângulo.
+- **Testes:** unit snapshot de classes (opcional) ou e2e tocando uma linha de resultado; atualizar se assert de título uppercase existir.
+- **Migration:** Sem migration.
+
+## Dependências
+
+- Dura: **B48 ✓** (grupo e linha existem). Soft: **B47 ✓** (slot de resultados). Não bloqueia **B49–B55** — outros grupos devem herdar o mesmo `HomeSearchHitRow` quando chegarem.
+
+## Não escopo
+
+- Layout grid/cap de resultados → **B54**. Sugestões empty → **B68 ✓**. Modo focado / animação → **B66**. Espaçamento da strip de ações → **B72**.
+
+## Rabbit holes
+
+- **Reset global de tipografia no tema campanha.** Mitigação: `list-none` local; adiar escopo R6.
+- **Bleed diferente por breakpoint sem medir padding do layout.** Mitigação: espelhar exatamente `p-4` / `md:p-6` do `(app)/layout.tsx`.
+
+## Adiado com gatilho
+
+Nenhum neste item.
+
+## Referências
+
+- `docs/roadmap.md` (UX-1, B48)
+- `src/components/campaign/dashboard/HomeSearchMunicipalityGroup.tsx`
+- `src/components/campaign/dashboard/HomeSearchHitRow.tsx`
+- `src/app/(frontend)/styles.css` (reset global `ul`)
+- `src/app/(campaign)/campanha/(app)/layout.tsx` (padding do scroll)
+- `docs/plans/busca-global-resultados-municipios.md` (B48 — anti-goals de card/CAPS)
+- AGENTS.md — naming; Feel the action (hover imediato)
+
+Qualidade de decisão: 4/5
diff --git a/docs/roadmap.md b/docs/roadmap.md
index 6d1a1b1a..85c97e0b 100644
--- a/docs/roadmap.md
+++ b/docs/roadmap.md
@@ -1,6 +1,6 @@
# Roadmap — Teqo
-Atualizado em: 2026-07-29 — **B69**–**B70** A4 liderança (exclusivo+limpeza → wizard grid); ~~**B56**~~ ✓ resumo; ~~**B67**~~ ✓; ~~**B68**~~ ✓ sugestões na busca aberta; **B66**; ~~**B59**~~ ✓ chassis wizard; ~~**B58**~~ ✓; **B65**; B48 ✓; B49–B55; wizards B60–B64.
+Atualizado em: 2026-07-29 — **B71**–**B72** polish busca (bullets/título/hover full-bleed) + strip ações (gap); **B69**–**B70** A4 liderança; ~~**B56**~~ ✓; ~~**B67**~~ ✓; ~~**B68**~~ ✓; **B66**; ~~**B59**~~ ✓; **B65**; B48 ✓; B49–B55; wizards B60–B64.
Registro canônico dos **próximos** planos e débitos. Histórico de entregas: resumo abaixo + planos em [`docs/plans/`](plans/) + notebook [`.cursor/rules/projects/nucleos-eleitorais.mdc`](../.cursor/rules/projects/nucleos-eleitorais.mdc).
## Âncoras do calendário eleitoral 2026 (Res. TSE 23.760/2026)
@@ -83,7 +83,7 @@ O discovery literatura→persona→entrevista ([relatório aprovado](research/re
### Demais itens abertos
-- **UX-1 fluxos ação-primeiro (prioridade pós-sessão 29/07)** — evidência: [snapshot](plans/sessao-observada-coordenador-2026-07-29-snapshot.md) · O9–O11 em CUSTOMER.md · **rascunho:** [fluxos-acao-primeiro-inicio.md](plans/fluxos-acao-primeiro-inicio.md). Soft deadline: **03/08**. **Chassis Início:** ~~**B43**~~ ✓ → ~~**B44**~~ ✓ → ~~**B45**~~ ✓ → ~~**B46**~~ ✓ → ~~**B47**~~ ✓ → ~~**B58**~~ ✓ → ~~**B67**~~ ✓ (pan strip) → **B65** (âncora inferior mobile) → **B66** (focus limpa tela + animação) → ~~**B48**~~ ✓ → **B68** (sugestões empty/focus por papel) → **B49–B55** · ~~**B56**~~ ✓ (resumo) · **B57** futuro. **Wizards:** ~~**B59**~~ ✓ → **B60**/**B61**/**B64** · **B62** → **B63** · **B69** → **B70** (A4 liderança).
+- **UX-1 fluxos ação-primeiro (prioridade pós-sessão 29/07)** — evidência: [snapshot](plans/sessao-observada-coordenador-2026-07-29-snapshot.md) · O9–O11 em CUSTOMER.md · **rascunho:** [fluxos-acao-primeiro-inicio.md](plans/fluxos-acao-primeiro-inicio.md). Soft deadline: **03/08**. **Chassis Início:** ~~**B43**~~ ✓ → ~~**B44**~~ ✓ → ~~**B45**~~ ✓ → ~~**B46**~~ ✓ → ~~**B47**~~ ✓ → ~~**B58**~~ ✓ → ~~**B67**~~ ✓ (pan strip) → **B65** (âncora inferior mobile) → **B66** (focus limpa tela + animação) → ~~**B48**~~ ✓ → ~~**B68**~~ ✓ → **B71** (polish resultados busca) · **B72** (gap strip) → **B49–B55** · ~~**B56**~~ ✓ · **B57** futuro. **Wizards:** ~~**B59**~~ ✓ → **B60**/**B61**/**B64** · **B62** → **B63** · **B69** → **B70** (A4 liderança).
- ~~**B43** Início em branco + Quadro~~ — **entregue 2026-07-29** (`/campanha` blank; staff dashboard em `/campanha/quadro`; liderança em `/campanha/contatos`; nav Início+Quadro / Início+Meus contatos; `requireCampaignPageActor` manda leader bloqueado → `/campanha/contatos`; sem migration) · [plano](plans/inicio-em-branco-quadro.md)
- ~~**B44** Botão de ação do Início + lista horizontal~~ — **entregue 2026-07-29** (`CampaignHomeActionButton` + `CampaignHomeActionStrip`; Tooltip fine / long-press Drawer coarse; montado no Início por B45 ✓) · ~1d · Janela 1 · Impeccable C · [plano](plans/botao-acao-inicio-strip.md)
- ~~**B45** Catálogo de ações por persona~~ — **entregue 2026-07-29** (`src/lib/campaignHomeActions.ts` + `CampaignHomeActions`; staff 6 ações com `uncovered-municipalities` → `?coverage=sem_assessor&sort=votos`; leader 2 com `my-contacts` → `/campanha/contatos`; demais inertes; ilha client por limite RSC↔ícones Lucide) · [plano](plans/catalogo-acoes-inicio-por-persona.md)
@@ -103,6 +103,8 @@ O discovery literatura→persona→entrevista ([relatório aprovado](research/re
- **B65** Ancorar busca + ações do Início no limite inferior (mobile) — B46 ✓ entregou ordem/slots mas o spacer `flex-1` não empurra: `min-h-full` no filho do scrollport não cria altura livre; preencher cadeia (`h-full`/flex fill) no chrome do Início; `md+` inalterado; modo focado B47/B66 intacto · Depende de B46 ✓ / B47 ✓ (código) · soft B66 (animação parte do dock) · ~0,25–0,5d · Janela 1 · Paralelizável com B58 / B49 / B59 · Impeccable B · [plano](plans/ancorar-busca-acoes-inicio-mobile.md)
- ~~**B48** Busca — resultados Municípios (+ TIs no mesmo grupo; flag de prioridade alinhada; “2022” / agregado à direita; sem card)~~ — **entregue 2026-07-29** (`POST /campanha/home-search`, `searchHomeMunicipalities`, `HomeSearchMunicipalityGroup`; word-start; assessor scoped; TIs via `loadTerritoryOverview`) · [plano](plans/busca-global-resultados-municipios.md)
- ~~**B68** Sugestões na busca aberta (empty state por papel)~~ — **entregue 2026-07-29** (`POST /campanha/home-search` com `mode: 'suggest'`; `loadHomeSearchSuggestions` + `rankHomeSearchSuggestMunicipalities`; assessor = carteira fria; CG/candidato = `priority === 'alta'` por déficit central + frescor; `homeSearchUiFocused` + seção **Sugestões**; `resultKind`; sem migration) · [plano](plans/sugestoes-busca-vazia-inicio.md)
+- **B71** Polimento visual dos resultados de busca (sem bullets no ``; título “Municípios” discreto sentence-case; hover full-bleed borda a borda) · Depende de B48 ✓ · ~0,25–0,5d · Janela 1 · Paralelizável com B72 / B65 / B49 · Impeccable B · [plano](plans/polimento-resultados-busca-inicio.md)
+- **B72** Reduzir espaçamento horizontal da strip de ações (`gap-6` → `gap-4`) · Depende de B58 ✓ / B67 ✓ (soft) · ~0,25d · Janela 1 · Paralelizável com B71 · Impeccable B · [plano](plans/espacamento-strip-acoes-inicio.md)
- **B49** Busca — resultados Lideranças · Depende de B47 · ~0,5–0,75d · Janela 1 · Impeccable B · [plano](plans/busca-global-resultados-liderancas.md)
- **B50** ~~Busca — resultados Assessores (access B19)~~ — **entregue 2026-07-29** (`searchHomeAdvisors` + `HomeSearchAdvisorGroup`; unrestricted only; word-start no nome; contagem de municípios na linha; `POST /campanha/home-search` agrega `advisors`) · Depende de B47 ✓ · [plano](plans/busca-global-resultados-assessores.md)
- **B51** Busca — resultados Atividades · Depende de B47 · ~0,5–0,75d · Janela 1 · Impeccable B · [plano](plans/busca-global-resultados-atividades.md)
@@ -223,7 +225,9 @@ flowchart TD
B66n["B66 Focus limpa tela
+ animação busca"]
B65n["B65 Âncora inferior
busca+ações mobile"]
B48n["B48 ✓ Busca
Municípios + TIs"]
- B68n["B68 Sugestões busca
vazia por papel"]
+ B68n["B68 ✓ Sugestões busca
vazia por papel"]
+ B71n["B71 Polish resultados
busca Início"]
+ B72n["B72 Gap strip
ações Início"]
B49n["B49 Busca Lideranças"]
B50n["B50 ✓ Busca Assessores"]
B51n["B51 Busca Atividades"]
@@ -316,6 +320,10 @@ flowchart TD
B47n --> B48n
B48n --> B68n
B66n -.empty no focus.-> B68n
+ B48n --> B71n
+ B68n -.mesmo grupo/linha.-> B71n
+ B58n -.gap visual.-> B72n
+ B67n -.strip estável.-> B72n
B47n --> B49n
B47n --> B50n
B47n --> B51n
@@ -446,11 +454,11 @@ flowchart TD
B8F2 -.rank por ZE = débito aberto.-> B14n
```
-Paralelizáveis agora: **B65** (âncora inferior mobile); **B66** (focus limpa busca — melhor após B65); **B68** (sugestões empty — após B48 ✓; melhor após B66); **B59** (chassis wizard — desbloqueia B60/B61/B63/B64/B70); **B62** (simplificar sinal — paralelo a B59); **B69** (simplificar liderança — paralelo a B59/B62; desbloqueia B70); **B49–B53** após B47 ✓ / B48 ✓ (depois B54/B55). Após **B59**: **B60** ∥ **B61** ∥ **B64**. **B63** espera B59+B62. **B70** espera B59+B69. Prefills ricos de B64 com B61/B63 são soft. **B57** futuro (depende B56 ✓). Fill-ins / débitos `*+` e itens já ✓ permanecem fora do caminho crítico UX-1. **D3** só após smoke + folga se UX-1 não absorver o Zap.
+Paralelizáveis agora: **B65** (âncora inferior mobile); **B66** (focus limpa busca — melhor após B65); **B71** (polish resultados busca — após B48 ✓); **B72** (gap strip ações); **B59** (chassis wizard — desbloqueia B60/B61/B63/B64/B70); **B62** (simplificar sinal — paralelo a B59); **B69** (simplificar liderança — paralelo a B59/B62; desbloqueia B70); **B49–B53** após B47 ✓ / B48 ✓ (depois B54/B55). Após **B59**: **B60** ∥ **B61** ∥ **B64**. **B63** espera B59+B62. **B70** espera B59+B69. Prefills ricos de B64 com B61/B63 são soft. **B57** futuro (depende B56 ✓). Fill-ins / débitos `*+` e itens já ✓ permanecem fora do caminho crítico UX-1. **D3** só após smoke + folga se UX-1 não absorver o Zap.
### Sequência por janela (só pendentes)
-**Janela 1 — agora → 05/08 (convenções):** **prioridade pós-29/07 — ~~B43–B48~~ ✓ → ~~B67~~ ✓ (pan strip) **→ B65** (âncora inferior) **→ B66** (focus limpa busca) **→ B68** (sugestões empty) **→\*\* **wizards B59** → B60∥B61∥B64 · B62 → B63 · B69 → B70 (soft 03/08) · **B49–B55** · [fluxos](plans/fluxos-acao-primeiro-inicio.md); smoke + onboarding Onda 0; **E4R ✓** aplicar seed em produção após smoke; demais entregues/pendentes da janela inalterados no detalhe abaixo — foco operacional = polish busca B65/B66/B68 + busca B49+ + wizards B59–B64 + A4 B69/B70.
+**Janela 1 — agora → 05/08 (convenções):** **prioridade pós-29/07 — ~~B43–B48~~ ✓ → ~~B67~~ ✓ (pan strip) **→ B65** (âncora inferior) **→ B66** (focus limpa busca) **→ ~~B68~~ ✓** **→ B71** (polish resultados) **∥ B72** (gap strip) **→** **wizards B59** → B60∥B61∥B64 · B62 → B63 · B69 → B70 (soft 03/08) · **B49–B55** · [fluxos](plans/fluxos-acao-primeiro-inicio.md); smoke + onboarding Onda 0; **E4R ✓** aplicar seed em produção após smoke; demais entregues/pendentes da janela inalterados no detalhe abaixo — foco operacional = polish Início B65/B66/B71/B72 + busca B49+ + wizards B59–B64 + A4 B69/B70.
**Janela 2 — 05/08 → 16/08 (pré-propaganda):** C2 dados reais assim que o jurídico liberar; ~~**E9** fila de alocação~~ (entregue 2026-07-24, antecipada da janela 2); ~~**E16** dossiê do município~~ (entregue 2026-07-25, antecipado da janela 2); D2 se sobrar folga.
@@ -462,7 +470,7 @@ Paralelizáveis agora: **B65** (âncora inferior mobile); **B66** (focus limpa b
**Não cortáveis:** Onda 0 (jurídico/Consent); ~~**B43–B48** chassis UX-1 + busca Municípios~~ ✓; ~~**B67** pan na strip de ações~~ ✓ (entregue 2026-07-29 — B58 escondia a barra; drag fine restaurado); **B65** âncora inferior mobile (B46 ✓ não ancorou — cortar = thumb zone continua falhando no celular); **B66** focus limpa busca (cortar = strip compete com o gesto de buscar até digitar — emenda explícita de produto); **B59–B61** etapas mínimas do wizard de votos (chassis + município sticky + busca município + ajuste — cortar = ações do Início continuam inertes no ritual A1 **e** o CG perde o contexto de município no meio do passo); **B62** simplificar sinal (schema — cortar = wizard B63 e B26 seguem exigindo Fonte/Triangulado); **B69** simplificar liderança (schema `exclusive` + limpeza — cortar = A4/B70 sem modelo e ficha continua inchada); ~~**E4R** seed da planilha~~ (entregue 2026-07-24 — ainda aplicar em produção após smoke); ~~**E8** conta da cadeira~~ (entregue 2026-07-24); ~~**C12** registro-fundação~~ (entregue 2026-07-24); C2 dados reais; assimetria declarado×estimado (relação de campo); ~~**E9** fila de alocação~~ (entregue 2026-07-24 — era o mínimo de "inteligência, não planilha"); ~~**B19** gerenciar assessores~~ (entregue 2026-07-24 — CG/candidato não entram em `/admin`); **B39** lembrar de mim / sessão longa (default de 2 h derruba sessão no onboarding/campo — atrito diário de adoção).
-**Cortes seguros** (se o prazo apertar, nesta ordem): **B68** sugestões na busca aberta (digitação B48 continua; cortar = empty mudo no focus até folga); **B64** wizard tendência standalone (A1 ainda pode embutir tendência via B24 ✓ / passo curto; cortar = sem grid colorido + prefill até folga); **B63** wizard sinal standalone (A1 ainda pode embutir select pós-B62; cortar = sem grid/Drawer de tipos até folga); **B70** wizard liderança standalone (A1 ainda pode embutir passo curto pós-B69; cortar = sem grid 2/3/4 até folga — pacote Cairu sofre); **B57** delta 7d (Início continua com total+cobertura do B56; Δ era futuro de propósito); **B56** resumo no Início (Quadro já tem os mesmos agregados — cortar = Início sem briefing numérico); **B55** ações WA/share na busca (linha continua clicável); **B54** grid/cap (empilhar sempre); **B51**/**B53**/**B52**/**B50**/**B49** grupos secundários da busca (nessa ordem — Municípios B48 fica); **D5** inbox→rascunhos (manter registro manual + `wa.me`); **D4** envio bridge (manter `wa.me`); **D3** fundação do canal (atalho `wa.me` continua); **E12** camada TI (rollup manual por lista; **E17** já dá a leitura regional básica no Início); **E13** planejador de giros (rebaixado na fila de corte em 2026-07-24: "perna"/agenda é a restrição dominante nomeada em campo — cortar só depois de E12; agenda segue manual com J-A/J-B como guia); **E15** backtest (pós-eleição por definição — cortar = perder o aprendizado 2030); **E11** motor v1 (manter a fila E9 ✓ sem sugestões); **B13** símbolo proporcional (manter quantis/LQ como escala); ~~**E14** níveis~~ (entregue 2026-07-27 — `priority` continua, intocado); ~~**B8 F2** polígonos~~ (entregue 2026-07-26 — o mapa não é mais agregado em Salvador); **D2** push (adiar); **A6**; ~~**B14** município mais próximo~~ (entregue 2026-07-26); ~~**B38** sidebar recolhido em tablet~~ (entregue 2026-07-26); ~~**B40** login biométrico~~ (entregue 2026-07-28 — senha + B39 ✓ continuam, e cortar teria custado só o atalho de digital/Face ID; era o mais caro e o primeiro a cair desta leva B39–B42); **B42** polimento mobile da lista de municípios (Popover e card longos continuam usáveis — cortar custa conforto de teclado e densidade no celular); ~~**B41** scroll horizontal + sticky~~ (entregue 2026-07-27) (a tabela continua legível com zoom/pan da página — cortar custa o overflow em tablet; cai **depois** de B42 porque o bug de layout em mesa é mais caro que o polish mobile); ~~**B18** filtros salvos~~ ✓ entregue (lista + filtros manuais continuam; Visitados cobrem “voltar”); **B21** página dos Territórios de Identidade (o painel do E17 ✓ no Início continua entregando a leitura regional) — **B25** cai junto por definição (sem destino, sem link); ~~**B17** seletor de colunas~~ ✓ entregue (tabela completa continua; scroll horizontal); ~~**B22** explicação no header~~ (entregue 2026-07-26); ~~**B23** tooltip nas células~~ (entregue 2026-07-26); ~~**B24** auto-save + justificativa na Tendência~~ (entregue 2026-07-26); **B27** combobox + chips nos Assessores (a lista de checkboxes com "Salvar" continua atribuindo — cortar custa a mesma coerência do B24 mais o tempo do CG procurando nomes numa coluna durante o onboarding; corte junto com B24, já que dividem o endpoint); **B28** e-mail + celular na lista de lideranças (a ficha `/liderancas/[id]` continua mostrando o contato — cortar custa o gesto de copiar/abrir ZAP na varredura; quick win barato de cortar e de fazer); ~~**B30** convite de completar cadastro por WhatsApp na lista~~ (entregue 2026-07-26); **B31** coluna de dobradinhas nas lideranças (o `RelationMultiSelect` da ficha interna continua vinculando — cortar custa o preenchimento em lote do onboarding, uma ficha aberta por liderança, e mantém o vínculo invisível na varredura; corte junto com B27, já que dividem a peça de célula, e antes de B29 só se a mesa já tiver preenchido as dobradinhas à mão); ~~**B32** editar Status de apoio na célula~~ (entregue 2026-07-26); **B34** chips editáveis de municípios na lista de lideranças (o texto simples `row.municipalityNames.join(', ')` continua legível e a ficha `/liderancas/[id]` continua vinculando município via formulário — cortar custa o link direto ao município, a navegação por chip e o atalho de adicionar/remover sem abrir a ficha; corte junto com B31, já que dividem a mesma peça de célula editável, e antes de B29 pelo mesmo motivo de coerência); **B37** chips editáveis de municípios na lista de dobradinhas (o número `municipalityCount` continua legível e a ficha de município continua vinculando dobradinha pelo `MunicipalityStrategyForm` — cortar custa o link direto, a navegação por chip e o atalho de adicionar/remover sem abrir a ficha do município; corte junto com B34, já que dividem a mesma lib e a mesma decisão de container); ~~**B36** coluna de lideranças na lista de dobradinhas~~ (entregue 2026-07-26; a contagem `leadershipCount` era o fallback e a ficha `/liderancas/[id]` continua vinculando dobradinha via formulário — cortar custa o link direto à liderança, a navegação por chip e o atalho de adicionar/remover sem abrir a ficha; corte junto com B31, já que dividem a mesma mutação/schema/lock); ~~**B33** sort + filtro no header das dobradinhas~~ (entregue 2026-07-26); **B29** sort + filtro no header das lideranças (a busca por nome continua funcionando e o escopo do assessor já reduz a lista — cortar custa o recorte por status/setor/município no onboarding da rede e mantém o header rico como cópia única de municípios; por ser o item mais caro desta faixa (~1,5–2 dias com a extração do head), cai **antes** do B26, que é o que sustenta o gate de adoção); **B26** registrar sinal na célula (o formulário completo em `/[slug]?tab=updates` continua sendo o caminho — cortar custa o laço da fila do E9 ✓ e o registro em campo pelo celular, que é justamente onde o gate de adoção se decide; por isso cai **depois** de B22/B23/B24); ~~**C13** renomear Plano de Ação → Atividade~~ (entregue 2026-07-25); **B20** prioritários no Início (lista `?priority=alta` continua; só perde o atalho — mas a seção atual mente, então cortar = conviver com o bug); fill-in **renomear coluna Cobertura** (a lista continua legível com o rótulo longo — corte = header mais largo); fill-in **remover coluna Tipo** (a lista continua completa; só mantém densidade morta — corte = conviver com a coluna); ~~fill-in **remover lista de zonas do Início**~~ ✓ (entregue 2026-07-28 — o mapa B8 F2 ✓ continua abrindo cada ZE); ~~**B16** filtros no header~~ (entregue 2026-07-25); ~~**B15** sort por coluna~~ (entregue 2026-07-24); ~~**A11**/**E17**~~ (entregues 2026-07-24); ~~**E18** documentação de conceitos~~ (entregue 2026-07-24); ~~**E16** dossiê~~ (entregue 2026-07-25); demais débitos/fill-ins.
+**Cortes seguros** (se o prazo apertar, nesta ordem): **B72** gap da strip de ações (pan e rótulos continuam; cortar = espaçamento largo até folga); **B71** polish dos resultados de busca (hits continuam clicáveis; cortar = bullets/título/hover feios até folga); **B68** sugestões na busca aberta (digitação B48 continua; cortar = empty mudo no focus até folga); **B64** wizard tendência standalone (A1 ainda pode embutir tendência via B24 ✓ / passo curto; cortar = sem grid colorido + prefill até folga); **B63** wizard sinal standalone (A1 ainda pode embutir select pós-B62; cortar = sem grid/Drawer de tipos até folga); **B70** wizard liderança standalone (A1 ainda pode embutir passo curto pós-B69; cortar = sem grid 2/3/4 até folga — pacote Cairu sofre); **B57** delta 7d (Início continua com total+cobertura do B56; Δ era futuro de propósito); **B56** resumo no Início (Quadro já tem os mesmos agregados — cortar = Início sem briefing numérico); **B55** ações WA/share na busca (linha continua clicável); **B54** grid/cap (empilhar sempre); **B51**/**B53**/**B52**/**B50**/**B49** grupos secundários da busca (nessa ordem — Municípios B48 fica); **D5** inbox→rascunhos (manter registro manual + `wa.me`); **D4** envio bridge (manter `wa.me`); **D3** fundação do canal (atalho `wa.me` continua); **E12** camada TI (rollup manual por lista; **E17** já dá a leitura regional básica no Início); **E13** planejador de giros (rebaixado na fila de corte em 2026-07-24: "perna"/agenda é a restrição dominante nomeada em campo — cortar só depois de E12; agenda segue manual com J-A/J-B como guia); **E15** backtest (pós-eleição por definição — cortar = perder o aprendizado 2030); **E11** motor v1 (manter a fila E9 ✓ sem sugestões); **B13** símbolo proporcional (manter quantis/LQ como escala); ~~**E14** níveis~~ (entregue 2026-07-27 — `priority` continua, intocado); ~~**B8 F2** polígonos~~ (entregue 2026-07-26 — o mapa não é mais agregado em Salvador); **D2** push (adiar); **A6**; ~~**B14** município mais próximo~~ (entregue 2026-07-26); ~~**B38** sidebar recolhido em tablet~~ (entregue 2026-07-26); ~~**B40** login biométrico~~ (entregue 2026-07-28 — senha + B39 ✓ continuam, e cortar teria custado só o atalho de digital/Face ID; era o mais caro e o primeiro a cair desta leva B39–B42); **B42** polimento mobile da lista de municípios (Popover e card longos continuam usáveis — cortar custa conforto de teclado e densidade no celular); ~~**B41** scroll horizontal + sticky~~ (entregue 2026-07-27) (a tabela continua legível com zoom/pan da página — cortar custa o overflow em tablet; cai **depois** de B42 porque o bug de layout em mesa é mais caro que o polish mobile); ~~**B18** filtros salvos~~ ✓ entregue (lista + filtros manuais continuam; Visitados cobrem “voltar”); **B21** página dos Territórios de Identidade (o painel do E17 ✓ no Início continua entregando a leitura regional) — **B25** cai junto por definição (sem destino, sem link); ~~**B17** seletor de colunas~~ ✓ entregue (tabela completa continua; scroll horizontal); ~~**B22** explicação no header~~ (entregue 2026-07-26); ~~**B23** tooltip nas células~~ (entregue 2026-07-26); ~~**B24** auto-save + justificativa na Tendência~~ (entregue 2026-07-26); **B27** combobox + chips nos Assessores (a lista de checkboxes com "Salvar" continua atribuindo — cortar custa a mesma coerência do B24 mais o tempo do CG procurando nomes numa coluna durante o onboarding; corte junto com B24, já que dividem o endpoint); **B28** e-mail + celular na lista de lideranças (a ficha `/liderancas/[id]` continua mostrando o contato — cortar custa o gesto de copiar/abrir ZAP na varredura; quick win barato de cortar e de fazer); ~~**B30** convite de completar cadastro por WhatsApp na lista~~ (entregue 2026-07-26); **B31** coluna de dobradinhas nas lideranças (o `RelationMultiSelect` da ficha interna continua vinculando — cortar custa o preenchimento em lote do onboarding, uma ficha aberta por liderança, e mantém o vínculo invisível na varredura; corte junto com B27, já que dividem a peça de célula, e antes de B29 só se a mesa já tiver preenchido as dobradinhas à mão); ~~**B32** editar Status de apoio na célula~~ (entregue 2026-07-26); **B34** chips editáveis de municípios na lista de lideranças (o texto simples `row.municipalityNames.join(', ')` continua legível e a ficha `/liderancas/[id]` continua vinculando município via formulário — cortar custa o link direto ao município, a navegação por chip e o atalho de adicionar/remover sem abrir a ficha; corte junto com B31, já que dividem a mesma peça de célula editável, e antes de B29 pelo mesmo motivo de coerência); **B37** chips editáveis de municípios na lista de dobradinhas (o número `municipalityCount` continua legível e a ficha de município continua vinculando dobradinha pelo `MunicipalityStrategyForm` — cortar custa o link direto, a navegação por chip e o atalho de adicionar/remover sem abrir a ficha do município; corte junto com B34, já que dividem a mesma lib e a mesma decisão de container); ~~**B36** coluna de lideranças na lista de dobradinhas~~ (entregue 2026-07-26; a contagem `leadershipCount` era o fallback e a ficha `/liderancas/[id]` continua vinculando dobradinha via formulário — cortar custa o link direto à liderança, a navegação por chip e o atalho de adicionar/remover sem abrir a ficha; corte junto com B31, já que dividem a mesma mutação/schema/lock); ~~**B33** sort + filtro no header das dobradinhas~~ (entregue 2026-07-26); **B29** sort + filtro no header das lideranças (a busca por nome continua funcionando e o escopo do assessor já reduz a lista — cortar custa o recorte por status/setor/município no onboarding da rede e mantém o header rico como cópia única de municípios; por ser o item mais caro desta faixa (~1,5–2 dias com a extração do head), cai **antes** do B26, que é o que sustenta o gate de adoção); **B26** registrar sinal na célula (o formulário completo em `/[slug]?tab=updates` continua sendo o caminho — cortar custa o laço da fila do E9 ✓ e o registro em campo pelo celular, que é justamente onde o gate de adoção se decide; por isso cai **depois** de B22/B23/B24); ~~**C13** renomear Plano de Ação → Atividade~~ (entregue 2026-07-25); **B20** prioritários no Início (lista `?priority=alta` continua; só perde o atalho — mas a seção atual mente, então cortar = conviver com o bug); fill-in **renomear coluna Cobertura** (a lista continua legível com o rótulo longo — corte = header mais largo); fill-in **remover coluna Tipo** (a lista continua completa; só mantém densidade morta — corte = conviver com a coluna); ~~fill-in **remover lista de zonas do Início**~~ ✓ (entregue 2026-07-28 — o mapa B8 F2 ✓ continua abrindo cada ZE); ~~**B16** filtros no header~~ (entregue 2026-07-25); ~~**B15** sort por coluna~~ (entregue 2026-07-24); ~~**A11**/**E17**~~ (entregues 2026-07-24); ~~**E18** documentação de conceitos~~ (entregue 2026-07-24); ~~**E16** dossiê~~ (entregue 2026-07-25); demais débitos/fill-ins.
## Bloqueadores atuais