Implementar o Dashboard de Metricas (`/dashboard`) com os KPIs do modelo Bowtie (CR total, tempo por stage, taxa de recompra, NPS, deals parados), graficos simples e feed de atividade recente, para que o Vinicius e atendentes possam monitorar a saude comercial da Propek.
ACCEPTANCE CRITERIA (0/11)
☐ AC1: Rota `/dashboard` renderiza o dashboard de metricas
☐ AC2: Seletor de periodo no topo ("7 dias"/"30 dias"/"90 dias") — ao alterar, recarrega todos os graficos e cards com o novo periodo
☐ AC3: Grid de 9 cards de metrica no topo com valores do endpoint `GET /api/crm/dashboard/metrics`: Leads qualificados/mes, CR total (%), dt medio por stage (dias), Pedidos/mes, Ticket medio (R$), Deals parados >SLA, NPS medio, Taxa recompra 90d (%), Follow-ups pendentes
☐ AC4: Cada card de metrica exibe: label, valor principal formatado, indicador visual de target (verde se atingido, vermelho se abaixo) — targets conforme PRD: CR 15-25%, NPS 8+, Recompra 40%+
☐ AC5: Grafico de funil Bowtie (componente `bowtie-funnel.tsx`) usando Recharts BarChart ou FunnelChart, dados do `GET /api/crm/dashboard/funnel`, exibe stages em sequencia com taxa de conversao entre cada par de stages
☐ AC6: Grafico "Pedidos por semana" (componente `orders-chart.tsx`) usando Recharts BarChart — dados dos ultimos 12 semanas calculados a partir dos pedidos (pode usar orders_count com granularidade semanal se disponivel, senao agrupar no frontend)
☐ AC7: Grafico "Pipeline por stage" (componente `pipeline-chart.tsx`) usando Recharts StackedBarChart ou simples BarChart — distribuicao de deals abertos por stage (B2B e B2C separados)
☐ AC8: Feed de atividade recente (`activity-feed.tsx`) exibindo as ultimas 20 acoes do endpoint `GET /api/crm/dashboard/activity`, cada item com: descricao, ator, timestamp relativo, link para o deal/cliente
☐ AC9: Polling de 5 minutos nos cards de metrica e graficos (`refetchInterval: 300000`), feed de atividade sem polling (refetch on focus)
☐ AC10: Estado de loading com skeletons em cada secao
☐ AC11: Estado vazio adequado quando nao ha dados suficientes (ex: "Sem dados suficientes para calcular CR — aguardando primeiros deals")