// js/components/pages/Insights.jsx
// Analytics e insights de vendas/estoque/clientes
// Extraído de index.html em Fase 6 (2026-04-29): L5282-L6280
// Deps runtime: fmt, today, saleFinalTotal, itemNet, nid, VendedorMetaBar, Marcas, Pagar, Receber
(function() {
  'use strict';
  const {useState, useMemo} = React;

  // [REFACTOR Wave 1 PR1 — 2026-05-14] STitle + KCard extraídos pra widgets/insights/.
  // [v224.73 + v224.55] vars+check MOVED to component body (preventivo · regra_validacao_helpers_runtime)

function Insights({sales,products,clients,quotes,payables,receivables,metas,allUsers,gastos}){
  // [v224.73 FIX 2026-05-30] vars+check em render time (15 refs)
  const STitle = window.ZNX?.widgets?.STitle;
  const KCard = window.ZNX?.widgets?.KCard;
  const HBar = window.ZNX?.widgets?.HBar;
  const BarChart12 = window.ZNX?.widgets?.insights?.BarChart12;
  const GeralPanel = window.ZNX?.widgets?.insights?.GeralPanel;
  const OperacionalPanel = window.ZNX?.widgets?.insights?.OperacionalPanel;
  const FinanceiroPanel = window.ZNX?.widgets?.insights?.FinanceiroPanel;
  const IAPanel = window.ZNX?.widgets?.insights?.IAPanel;
  const insightsCalcs = window.ZNX?.insights?.calcs;
  const insightsProducts = window.ZNX?.insights?.products;
  const insightsClients = window.ZNX?.insights?.clients;
  const insightsVendors = window.ZNX?.insights?.vendors;
  const insightsFinanceiro = window.ZNX?.insights?.financeiro;
  const insightsOperacional = window.ZNX?.insights?.operacional;
  const insightsIA = window.ZNX?.insights?.ia;
  if (!STitle || !KCard || !HBar || !BarChart12 || !GeralPanel || !OperacionalPanel || !FinanceiroPanel || !IAPanel ||
      !insightsCalcs || !insightsProducts || !insightsClients || !insightsVendors || !insightsFinanceiro ||
      !insightsOperacional || !insightsIA) {
    const _msg = `[Insights v224.73] widgets/bundles faltando: STitle=${!!STitle}, KCard=${!!KCard}, HBar=${!!HBar}, BarChart12=${!!BarChart12}, GeralPanel=${!!GeralPanel}, OperacionalPanel=${!!OperacionalPanel}, FinanceiroPanel=${!!FinanceiroPanel}, IAPanel=${!!IAPanel}, insightsCalcs=${!!insightsCalcs}, insightsProducts=${!!insightsProducts}, insightsClients=${!!insightsClients}, insightsVendors=${!!insightsVendors}, insightsFinanceiro=${!!insightsFinanceiro}, insightsOperacional=${!!insightsOperacional}, insightsIA=${!!insightsIA}`;
    console.error(_msg);
    window.Sentry?.captureMessage?.(_msg, 'error');
  }
  // [Bug #642 fase 2 20260518] `gastos` prop adicionado — feeds createMonthlyData com fonte real
  // de despesas (alinhado Bug #619). Sem gastos → fallback BRUTO (back-compat).
  const[tab,setTab]=useState('geral');
  const[insFilterVendedor,setInsFilterVendedor]=useState('');
  const[insFilterMarca,setInsFilterMarca]=useState('');
  const[insFilterStatus,setInsFilterStatus]=useState('');
  const now=new Date();
  const todayStr=today();
  const cm=`${now.getFullYear()}-${String(now.getMonth()+1).padStart(2,'0')}`;


  // ── 12-month trend ──
  // [Wave 6 KIMI 2026-05-16] 40 cálculos extraídos pra lib/insights/*.js + BarChart12 widget.
  // [Bug #642 fase 2 20260518] Passa gastos pra factory — curM/lastM agora têm lucroLiquido+margemLiquida
  const monthlyData = useMemo(() => insightsCalcs.createMonthlyData(sales, products, clients, gastos), [sales, products, clients, gastos]);

  const curM=monthlyData[11];
  const lastM=monthlyData[10];
  const growth=lastM.revenue>0?(curM.revenue-lastM.revenue)/lastM.revenue*100:0;
  // [Bug #642 fase 2] profGrowth agora usa lucroLiquido (consistência cross-page com Bug #619 Relatorio).
  // Fallback profit (BRUTO) se lucroLiquido undefined (back-compat segurança).
  const profGrowth=lastM.lucroLiquido>0?(curM.lucroLiquido-lastM.lucroLiquido)/lastM.lucroLiquido*100:0;

  // ── Products (5 cálculos → lib/insights/products.js) ──
  const topProducts = useMemo(() => insightsProducts.createTopProducts(sales, products), [sales, products]);
  const brandData = useMemo(() => insightsProducts.createBrandData(sales, products), [sales, products]);
  const brandGrowth = useMemo(() => insightsProducts.createBrandGrowth(sales, products), [sales, products, now]);
  const prodMomentum = useMemo(() => insightsProducts.createProdMomentum(sales, products), [sales, products]);
  const promoSuggestions = useMemo(() => insightsProducts.createPromoSuggestions(sales, products), [sales, products]);

  // ── Client LTV (linchpin cadeia) ──
  const clientLTV = useMemo(() => insightsClients.createClientLTV(sales, clients, todayStr), [sales, clients, todayStr]);

  // ── Vendors (5 cálculos → lib/insights/vendors.js) ──
  const vendorStats = useMemo(() => insightsVendors.createVendorStats(sales, quotes, allUsers, metas, cm), [sales, quotes, allUsers, metas, cm]);
  const vendorDeepStats = useMemo(() => insightsVendors.createVendorDeepStats(sales, clients, products, allUsers, cm, monthlyData), [sales, clients, products, allUsers, cm, monthlyData, now]);

  // ── Core (stock + funnel + aging + pareto) ──
  const stockHealth = useMemo(() => insightsCalcs.createStockHealth(sales, products), [sales, products]);
  const qFunnel = useMemo(() => insightsCalcs.createQFunnel(quotes), [quotes]);
  const recAging = useMemo(() => insightsCalcs.createRecAging(receivables, payables), [receivables, payables]);
  const paretoData = useMemo(() => insightsCalcs.createParetoData(clientLTV), [clientLTV]);

  // ── BarChart12 widget extraído pra widgets/insights/BarChart12.jsx (ref via window) ──

  // ═══════════════════════════════════════════════════════════════════
  // [PACOTE COMPLETO v112] Datasets novos
  // ═══════════════════════════════════════════════════════════════════

  // ── A1: Funil completo de orçamento → venda ──
  const funnelExtended = useMemo(() => insightsCalcs.createFunnelExtended(quotes), [quotes]);

  // ── A3: Top categorias de produto ──
  const topCategorias = useMemo(() => insightsCalcs.createTopCategorias(sales, products), [sales, products]);

  // ── B1: Análise RFM (deps clientLTV) ──
  const rfmMatrix = useMemo(() => insightsClients.createRfmMatrix(clientLTV, todayStr), [clientLTV, todayStr]);

  // ── B2: Cohort de retenção ──
  const cohortRetention = useMemo(() => insightsCalcs.createCohortRetention(clients, sales), [clients, sales]);

  // ── B3: Cross-sell ──
  const crossSell = useMemo(() => insightsCalcs.createCrossSell(sales, products), [sales, products]);

  // ── B5: Distribuição de LTV (deps clientLTV) ──
  const ltvDistribution = useMemo(() => insightsClients.createLtvDistribution(clientLTV), [clientLTV]);

  // ══════════════════════════════════════════════════════════════
  // [v120 INS2 — ESTRATÉGICO] Aba Clientes CRM (cadeia clientsEnriched)
  // ══════════════════════════════════════════════════════════════
  const clientsEnriched = useMemo(() => insightsClients.createClientsEnriched(clientLTV, clients, sales, products, receivables), [clientLTV, clients, sales, products, receivables]);
  const concentracao = useMemo(() => insightsClients.createConcentracao(clientLTV), [clientLTV]);
  const freqDistribution = useMemo(() => insightsClients.createFreqDistribution(clientsEnriched), [clientsEnriched]);
  const segmentStats = useMemo(() => insightsClients.createSegmentStats(clientsEnriched), [clientsEnriched]);
  const channelStats = useMemo(() => insightsClients.createChannelStats(clientsEnriched), [clientsEnriched]);
  const rfmSegments = useMemo(() => insightsClients.createRfmSegments(clientsEnriched), [clientsEnriched]);
  const inadimplentes = useMemo(() => insightsClients.createInadimplentes(clientsEnriched), [clientsEnriched]);

  // ── C3/C4/C5: Vendedoras analytics ──
  const tempoFechamentoVendedoras = useMemo(() => insightsVendors.createTempoFechamentoVendedoras(quotes), [quotes]);
  const descontosVendedoras = useMemo(() => insightsVendors.createDescontosVendedoras(sales), [sales]);
  const retencaoVendedoras = useMemo(() => insightsVendors.createRetencaoVendedoras(sales, allUsers), [sales, allUsers]);

  // ── D1/D3/D4: Financeiro analytics ──
  const cashFlowProjetado = useMemo(() => insightsFinanceiro.createCashFlowProjetado(receivables, payables, todayStr), [receivables, payables, todayStr]);
  const margemPorCategoria = useMemo(() => insightsFinanceiro.createMargemPorCategoria(sales, products), [sales, products]);
  const roiPorMarca = useMemo(() => insightsFinanceiro.createRoiPorMarca(sales, products, todayStr), [sales, products, todayStr]);

  // ── E2: Cancelamentos com motivo ──
  const cancelamentos = useMemo(() => insightsFinanceiro.createCancelamentos(quotes, sales), [quotes, sales]);

  // ── E3/E4: Operacional analytics ──
  const tempoMedioRetirada = useMemo(() => insightsOperacional.createTempoMedioRetirada(sales), [sales]);
  const padroesHorario = useMemo(() => insightsOperacional.createPadroesHorario(sales), [sales]);

  // ── F1/F2/F3/F4: IA Insights ──
  const previsaoProximoMes = useMemo(() => insightsIA.createPrevisaoProximoMes(monthlyData), [monthlyData]);
  const alertasIA = useMemo(() => insightsIA.createAlertasIA(monthlyData, brandGrowth, clientLTV, stockHealth), [monthlyData, brandGrowth, clientLTV, stockHealth]);
  const anomalias = useMemo(() => insightsIA.createAnomalias(quotes, sales, allUsers, todayStr), [quotes, sales, allUsers, todayStr]);
  const recomendacoes = useMemo(() => insightsIA.createRecomendacoes(clientLTV, brandGrowth, todayStr), [clientLTV, brandGrowth, todayStr]);



  // [REWRITE v112 2026-05-08] Pacote completo Insights:
  //  - Removidas abas vazias (Produtos + Marcas — viviam só placeholder "foi movido")
  //  - 2 abas novas: 🎯 Operacional + 🤖 IA Insights
  const TABS=[
    {id:'geral',label:'Visão Geral',icon:'📊'},
    {id:'clientes',label:'Clientes',icon:'👥'},
    {id:'vendedores',label:'Vendedores',icon:'👔'},
    {id:'financeiro',label:'Estoque & Financeiro',icon:'💰'},
    {id:'operacional',label:'Operacional',icon:'🎯'},
    {id:'ia',label:'IA Insights',icon:'🤖'},
  ];

  return(
    <div>
      <div className="page-header">
        <div>
          <div className="page-title">✦ Insights</div>
          <div style={{fontSize:12,color:'#9CA3AF',marginTop:2}}>Inteligência completa da operação — atualizado em tempo real</div>
        </div>
      </div>

      {/* Tab nav */}
      <div style={{display:'flex',gap:6,marginBottom:24,flexWrap:'wrap',borderBottom:'1px solid #F3F4F6',paddingBottom:14}}>
        {TABS.map(t=>(
          <button key={t.id} onClick={()=>setTab(t.id)} style={{padding:'8px 16px',borderRadius:8,fontSize:12,fontWeight:600,cursor:'pointer',transition:'all .15s',background:tab===t.id?'#2563EB':'transparent',color:tab===t.id?'#000':'#A89070',border:`1px solid ${tab===t.id?'#2563EB':'#E4E7EC'}`,display:'flex',alignItems:'center',gap:6}}>
            {t.icon} {t.label}
          </button>
        ))}
      </div>

      {/* ══ VISÃO GERAL ══ */}
      {/* [Wave 5 KIMI 2026-05-15] tab='geral' extraído para GeralPanel.jsx (BarChart12 helper interno L289 passado como prop) */}
      {tab==='geral'&&(
        <GeralPanel
          curM={curM}
          lastM={lastM}
          growth={growth}
          profGrowth={profGrowth}
          qFunnel={qFunnel}
          monthlyData={monthlyData}
          paretoData={paretoData}
          stockHealth={stockHealth}
          sales={sales}
          topCategorias={topCategorias}
          rfmMatrix={rfmMatrix}
          crossSell={crossSell}
          BarChart12={BarChart12}
        />
      )}

      {/* ══ CLIENTES ══ */}
      {tab==='clientes'&&(
        <div>
          <div style={{display:'grid',gridTemplateColumns:'repeat(4,1fr)',gap:14,marginBottom:20}}>
            <KCard label="Total de Clientes" value={clients.length} color='#2196f3'/>
            <KCard label="Ativos (compra ≤30d)" value={clientLTV.filter(c=>c.daysSince<=30).length} color='#16A34A' sub={`${clientLTV.length>0?(clientLTV.filter(c=>c.daysSince<=30).length/clientLTV.length*100).toFixed(0):0}% da base`}/>
            <KCard label="Risco de Churn (31–90d)" value={clientLTV.filter(c=>c.daysSince>30&&c.daysSince<=90).length} color='#EA580C'/>
            <KCard label="Inativos (+90d)" value={clientLTV.filter(c=>c.daysSince>90).length} color='#DC2626'/>
          </div>
          <div style={{display:'grid',gridTemplateColumns:'1fr 1fr',gap:16,marginBottom:16}}>
            <div className="card">
              <STitle t="👑 Top 15 — LTV (Lifetime Value)" s="Total gasto desde sempre"/>
              {clientLTV.slice(0,15).map((c,i)=>(
                <HBar key={c.name} label={`${i+1}. ${c.name}`} value={c.total} max={clientLTV[0]?.total||1} fmtFn={fmt} color={i===0?'#2563EB':i<3?'#EA580C':'#3a3020'} sub={`${c.orders}×`}/>
              ))}
            </div>
            <div className="card">
              <STitle t="⚠️ Clientes em Risco de Churn" s="31–90 dias sem compra"/>
              {clientLTV.filter(c=>c.daysSince>30&&c.daysSince<=90).length===0
                ?<div style={{color:'#16A34A',textAlign:'center',padding:20,fontSize:13}}>✓ Todos os clientes estão ativos!</div>
                :<div style={{maxHeight:340,overflowY:'auto'}}>
                  <table><thead><tr><th>Cliente</th><th>Inativo há</th><th>LTV</th><th>Ticket méd.</th></tr></thead>
                    <tbody>{clientLTV.filter(c=>c.daysSince>30&&c.daysSince<=90).map(c=>(
                      <tr key={c.name}>
                        <td style={{fontWeight:500,fontSize:12}}>{c.name}</td>
                        <td style={{color:'#EA580C',fontSize:12,fontWeight:700}}>{c.daysSince}d</td>
                        <td className="gold">{fmt(c.total)}</td>
                        <td className="dim">{fmt(c.avgTicket)}</td>
                      </tr>
                    ))}</tbody>
                  </table>
                </div>
              }
            </div>
          </div>
          <div style={{display:'grid',gridTemplateColumns:'1fr 1fr',gap:16}}>
            <div className="card">
              <STitle t="💀 Inativos +90 dias" s="Requerem reativação urgente"/>
              {clientLTV.filter(c=>c.daysSince>90).length===0
                ?<div style={{color:'#16A34A',textAlign:'center',padding:20,fontSize:13}}>✓ Nenhum inativo!</div>
                :<div style={{maxHeight:280,overflowY:'auto'}}>
                  <table><thead><tr><th>Cliente</th><th>Dias</th><th>LTV Total</th></tr></thead>
                    <tbody>{clientLTV.filter(c=>c.daysSince>90).map(c=>(
                      <tr key={c.name}>
                        <td style={{fontSize:12,fontWeight:500}}>{c.name}</td>
                        <td style={{color:'#DC2626',fontWeight:700}}>{c.daysSince}d</td>
                        <td className="gold">{fmt(c.total)}</td>
                      </tr>
                    ))}</tbody>
                  </table>
                </div>
              }
            </div>
            <div className="card">
              <STitle t="📈 Crescimento Mensal de Clientes" s="Novos clientes por mês"/>
              <BarChart12 data={monthlyData} valueKey="newClients" colorFn={(_,i,last)=>last?'#2196f3':'#2196f344'} labelColor="#2196f3"/>
              <div style={{display:'flex',justifyContent:'space-between',fontSize:11,borderTop:'1px solid #F3F4F6',paddingTop:8}}>
                <span style={{color:'#9CA3AF'}}>Base total: {clients.length} clientes</span>
                <span style={{color:'#2196f3',fontWeight:700}}>+{curM.newClients} este mês</span>
              </div>
            </div>
          </div>

          {/* [NOVO v112] B2 Cohort de retenção + B5 Distribuição LTV */}
          <div style={{display:'grid',gridTemplateColumns:'2fr 1fr',gap:16,marginTop:16}}>
            <div className="card">
              <STitle t="📊 Cohort de Retenção" s="% dos clientes adquiridos no mês que voltaram em 30/60/90 dias"/>
              <div style={{overflowX:'auto'}}>
                <table style={{width:'100%',fontSize:12,minWidth:480}}>
                  <thead><tr style={{background:'#F8FAFB'}}>
                    <th style={{textAlign:'left',padding:'8px 6px'}}>Mês aquisição</th>
                    <th style={{textAlign:'right',padding:'8px 6px'}}>Novos</th>
                    <th style={{textAlign:'right',padding:'8px 6px'}}>Voltou em 30d</th>
                    <th style={{textAlign:'right',padding:'8px 6px'}}>Voltou em 60d</th>
                    <th style={{textAlign:'right',padding:'8px 6px'}}>Voltou em 90d</th>
                  </tr></thead>
                  <tbody>
                    {cohortRetention.map(c=>(
                      <tr key={c.key} style={{borderBottom:'1px solid #F3F4F6'}}>
                        <td style={{padding:'8px 6px',fontWeight:600}}>{c.label}</td>
                        <td style={{padding:'8px 6px',textAlign:'right',color:'#374151'}}>{c.total}</td>
                        <td style={{padding:'8px 6px',textAlign:'right'}}>
                          <span style={{padding:'2px 8px',borderRadius:4,background:c.d30>=50?'#16A34A22':c.d30>=20?'#2563EB22':'#F3F4F6',color:c.d30>=50?'#15803D':c.d30>=20?'#1D4ED8':'#9CA3AF',fontWeight:700}}>{c.d30.toFixed(0)}%</span>
                        </td>
                        <td style={{padding:'8px 6px',textAlign:'right'}}>
                          <span style={{padding:'2px 8px',borderRadius:4,background:c.d60>=60?'#16A34A22':c.d60>=30?'#2563EB22':'#F3F4F6',color:c.d60>=60?'#15803D':c.d60>=30?'#1D4ED8':'#9CA3AF',fontWeight:700}}>{c.d60.toFixed(0)}%</span>
                        </td>
                        <td style={{padding:'8px 6px',textAlign:'right'}}>
                          <span style={{padding:'2px 8px',borderRadius:4,background:c.d90>=70?'#16A34A22':c.d90>=40?'#2563EB22':'#F3F4F6',color:c.d90>=70?'#15803D':c.d90>=40?'#1D4ED8':'#9CA3AF',fontWeight:700}}>{c.d90.toFixed(0)}%</span>
                        </td>
                      </tr>
                    ))}
                  </tbody>
                </table>
              </div>
              <div style={{marginTop:10,fontSize:11,color:'#9CA3AF',fontStyle:'italic'}}>💡 Quanto maior o % de retenção, melhor é a fidelização. Meta saudável: 30%+ em 30d, 50%+ em 90d.</div>
            </div>
            <div className="card">
              <STitle t="💰 Distribuição de LTV" s="Faixas de valor histórico"/>
              {[
                {label:'< R$ 500',val:ltvDistribution.low,color:'#9CA3AF'},
                {label:'R$ 500–2k',val:ltvDistribution.mid,color:'#2563EB'},
                {label:'R$ 2k–5k',val:ltvDistribution.high,color:'#7C3AED'},
                {label:'R$ 5k+',val:ltvDistribution.top,color:'#B89840'}
              ].map(({label,val,color})=>{
                const total=clientLTV.length;
                const pct=total>0?(val/total)*100:0;
                return(
                  <div key={label} style={{marginBottom:10}}>
                    <div style={{display:'flex',justifyContent:'space-between',fontSize:12,marginBottom:4}}>
                      <span style={{color:'#9CA3AF'}}>{label}</span>
                      <span style={{color,fontWeight:700}}>{val} ({pct.toFixed(0)}%)</span>
                    </div>
                    <div style={{background:'#F9FAFB',borderRadius:3,height:6,overflow:'hidden'}}>
                      <div style={{height:'100%',width:`${pct}%`,background:color,borderRadius:3}}/>
                    </div>
                  </div>
                );
              })}
            </div>
          </div>

          {/* [v120 INS2] B2 — Concentração de risco + Ticket médio */}
          <div className="card" style={{marginTop:16}}>
            <STitle t="⚠️ Concentração de risco" s="Quanto da receita depende dos top clientes — alerta vermelho se top 1 ≥ 30%"/>
            <div style={{display:'grid',gridTemplateColumns:'repeat(4,1fr)',gap:14}}>
              <div style={{padding:'12px 14px',background:concentracao.top1Pct>=30?'#FEE2E2':'#F8FAFB',borderRadius:8,borderLeft:'4px solid '+(concentracao.top1Pct>=30?'#DC2626':concentracao.top1Pct>=20?'#EA580C':'#16A34A')}}>
                <div style={{fontSize:10,color:'#9CA3AF',fontWeight:700,letterSpacing:1,textTransform:'uppercase'}}>Top 1 cliente</div>
                <div style={{fontSize:22,fontWeight:800,color:concentracao.top1Pct>=30?'#DC2626':'#1B2A4A',marginTop:2}}>{concentracao.top1Pct.toFixed(1)}%</div>
                <div style={{fontSize:11,color:'#374151',marginTop:2}}>{concentracao.top1Name} · {fmt(concentracao.top1Val)}</div>
              </div>
              <div style={{padding:'12px 14px',background:'#F8FAFB',borderRadius:8}}>
                <div style={{fontSize:10,color:'#9CA3AF',fontWeight:700,letterSpacing:1,textTransform:'uppercase'}}>Top 5 clientes</div>
                <div style={{fontSize:22,fontWeight:800,color:'#1B2A4A',marginTop:2}}>{concentracao.top5Pct.toFixed(1)}%</div>
                <div style={{fontSize:11,color:'#9CA3AF',marginTop:2}}>do faturamento</div>
              </div>
              <div style={{padding:'12px 14px',background:'#F8FAFB',borderRadius:8}}>
                <div style={{fontSize:10,color:'#9CA3AF',fontWeight:700,letterSpacing:1,textTransform:'uppercase'}}>Top 10 clientes</div>
                <div style={{fontSize:22,fontWeight:800,color:'#1B2A4A',marginTop:2}}>{concentracao.top10Pct.toFixed(1)}%</div>
                <div style={{fontSize:11,color:'#9CA3AF',marginTop:2}}>do faturamento</div>
              </div>
              <div style={{padding:'12px 14px',background:'#FEF9E7',borderRadius:8,borderLeft:'4px solid #B89840'}}>
                <div style={{fontSize:10,color:'#B89840',fontWeight:700,letterSpacing:1,textTransform:'uppercase'}}>Ticket médio</div>
                <div style={{fontSize:22,fontWeight:800,color:'#1B2A4A',marginTop:2}}>{fmt(concentracao.avgTicket)}</div>
                <div style={{fontSize:11,color:'#9CA3AF',marginTop:2}}>geral por pedido</div>
              </div>
            </div>
            {concentracao.top1Pct>=30 && (
              <div style={{marginTop:12,padding:'10px 14px',background:'#FEE2E2',borderRadius:6,fontSize:12,color:'#991B1B'}}>
                🚨 <strong>Risco alto de dependência:</strong> {concentracao.top1Name} concentra {concentracao.top1Pct.toFixed(0)}% do faturamento. Se este cliente sair, impacto severo. Diversificar.
              </div>
            )}
          </div>

          {/* [v120 INS2] B3 — Frequência de compra */}
          <div className="card" style={{marginTop:16}}>
            <STitle t="🔁 Frequência de compra" s={`Distribuição de clientes por intervalo médio entre pedidos · Média geral: ${freqDistribution.avgFreq>0?freqDistribution.avgFreq.toFixed(0)+' dias':'—'}`}/>
            <div style={{display:'grid',gridTemplateColumns:'repeat(5,1fr)',gap:10}}>
              {[
                {label:'Muito frequente',sub:'≤15d',val:freqDistribution.muitoFreq,color:'#15803D'},
                {label:'Frequente',sub:'16–45d',val:freqDistribution.freq,color:'#2563EB'},
                {label:'Ocasional',sub:'46–90d',val:freqDistribution.ocas,color:'#7C3AED'},
                {label:'Raro',sub:'90d+',val:freqDistribution.raro,color:'#EA580C'},
                {label:'Compra única',sub:'1 pedido',val:freqDistribution.unico,color:'#9CA3AF'}
              ].map((b,i)=>(
                <div key={i} style={{padding:'10px 12px',background:'#F8FAFB',borderRadius:6,borderTop:'3px solid '+b.color}}>
                  <div style={{fontSize:10,color:'#9CA3AF',fontWeight:700,letterSpacing:0.5,textTransform:'uppercase'}}>{b.label}</div>
                  <div style={{fontSize:9,color:'#9CA3AF',marginBottom:4}}>{b.sub}</div>
                  <div style={{fontSize:24,fontWeight:800,color:b.color}}>{b.val}</div>
                </div>
              ))}
            </div>
          </div>

          {/* [v120 INS2] B4+B5 — Stats por segmento e canal */}
          <div style={{display:'grid',gridTemplateColumns:'1fr 1fr',gap:16,marginTop:16}}>
            <div className="card" style={{padding:0}}>
              <div style={{padding:'14px 16px',borderBottom:'1px solid #E4E7EC'}}>
                <STitle t="🏷️ Por segmento" s="Performance por tipo de cliente"/>
              </div>
              {segmentStats.length===0?<div style={{padding:20,color:'#9CA3AF',textAlign:'center'}}>Sem dados</div>:(
                <table>
                  <thead><tr><th>Segmento</th><th style={{textAlign:'right'}}>Clientes</th><th style={{textAlign:'right'}}>Receita</th><th style={{textAlign:'right'}}>LTV méd.</th></tr></thead>
                  <tbody>
                    {segmentStats.map(s=>(
                      <tr key={s.seg}>
                        <td style={{fontWeight:600}}>{s.seg}</td>
                        <td style={{textAlign:'right'}}>{s.count}</td>
                        <td style={{textAlign:'right'}} className="gold">{fmt(s.totalRev)}</td>
                        <td style={{textAlign:'right'}} className="dim">{fmt(s.avgLTV)}</td>
                      </tr>
                    ))}
                  </tbody>
                </table>
              )}
            </div>
            <div className="card" style={{padding:0}}>
              <div style={{padding:'14px 16px',borderBottom:'1px solid #E4E7EC'}}>
                <STitle t="📡 Por canal de aquisição" s="De onde vêm seus clientes mais valiosos"/>
              </div>
              {channelStats.length===0?<div style={{padding:20,color:'#9CA3AF',textAlign:'center'}}>Sem dados</div>:(
                <table>
                  <thead><tr><th>Canal</th><th style={{textAlign:'right'}}>Clientes</th><th style={{textAlign:'right'}}>Receita</th><th style={{textAlign:'right'}}>LTV méd.</th></tr></thead>
                  <tbody>
                    {channelStats.map(s=>(
                      <tr key={s.ch}>
                        <td style={{fontWeight:600}}>{s.ch}</td>
                        <td style={{textAlign:'right'}}>{s.count}</td>
                        <td style={{textAlign:'right'}} className="gold">{fmt(s.totalRev)}</td>
                        <td style={{textAlign:'right'}} className="dim">{fmt(s.avgLTV)}</td>
                      </tr>
                    ))}
                  </tbody>
                </table>
              )}
            </div>
          </div>

          {/* [v120 INS2] M1 — Segmentação RFM */}
          <div className="card" style={{marginTop:16}}>
            <STitle t="🎯 Segmentação RFM" s="Classificação automática por Recência × Frequência × Valor — base de qualquer ação de CRM"/>
            <div style={{display:'grid',gridTemplateColumns:'repeat(3,1fr)',gap:10,marginTop:10}}>
              {[
                {key:'Champions',ico:'🏆',color:'#15803D',desc:'Compram muito, recente, alto valor — premiar/fidelizar'},
                {key:'Loyal',ico:'💎',color:'#2563EB',desc:'Constantes — ofertas exclusivas pra manter'},
                {key:'Potential Loyalist',ico:'⭐',color:'#7C3AED',desc:'Recentes, alto valor — converter em loyal'},
                {key:'New Customer',ico:'🌱',color:'#16A34A',desc:'Recém-chegados — onboarding ativo'},
                {key:'Promising',ico:'✨',color:'#0891B2',desc:'Compraram pouco mas recentemente — incentivo'},
                {key:'Need Attention',ico:'⚠️',color:'#EA580C',desc:'Atividade média caindo — alerta'},
                {key:'At Risk',ico:'🚨',color:'#DC2626',desc:'Eram bons clientes, sumiram — campanha de retenção URGENTE'},
                {key:'Hibernating',ico:'😴',color:'#9CA3AF',desc:'Sumidos há tempo — reativação ou aceitar perda'},
                {key:'Lost',ico:'💀',color:'#374151',desc:'Provavelmente perdidos — esforço baixo'}
              ].map(seg=>{
                const arr = rfmSegments[seg.key]||[];
                const totalRev = arr.reduce((a,c)=>a+c.total,0);
                return(
                  <div key={seg.key} style={{padding:'12px 14px',background:'#F8FAFB',borderRadius:8,borderLeft:'4px solid '+seg.color}}>
                    <div style={{display:'flex',justifyContent:'space-between',alignItems:'center',marginBottom:4}}>
                      <div style={{fontSize:13,fontWeight:700,color:seg.color}}>{seg.ico} {seg.key}</div>
                      <div style={{fontSize:18,fontWeight:800,color:'#1B2A4A'}}>{arr.length}</div>
                    </div>
                    <div style={{fontSize:10,color:'#6B7280',marginBottom:4,lineHeight:1.4}}>{seg.desc}</div>
                    <div style={{fontSize:11,color:'#9CA3AF'}}>Receita: <strong style={{color:seg.color}}>{fmt(totalRev)}</strong></div>
                  </div>
                );
              })}
            </div>
          </div>

          {/* [v120 INS2] M2 — Inadimplência */}
          <div className="card" style={{marginTop:16}}>
            <STitle t="💸 Inadimplência" s={`${inadimplentes.length} cliente(s) com receivables vencidos · Total: ${fmt(inadimplentes.reduce((a,c)=>a+c.inadValor,0))}`}/>
            {inadimplentes.length===0?<div style={{color:'#15803D',textAlign:'center',padding:20,fontSize:13}}>✅ Nenhum cliente inadimplente!</div>:(
              <div style={{maxHeight:340,overflowY:'auto'}}>
                <table>
                  <thead><tr><th>Cliente</th><th>Segmento</th><th style={{textAlign:'right'}}>Vencido</th><th style={{textAlign:'right'}}>Atraso máx.</th><th style={{textAlign:'right'}}>LTV</th></tr></thead>
                  <tbody>
                    {inadimplentes.slice(0,30).map(c=>(
                      <tr key={c.name}>
                        <td style={{fontWeight:600}}>{c.name}</td>
                        <td className="dim">{c.segment}</td>
                        <td style={{textAlign:'right',color:'#DC2626',fontWeight:700}}>{fmt(c.inadValor)}</td>
                        <td style={{textAlign:'right',color:c.inadDiasMax>60?'#DC2626':'#EA580C',fontWeight:700}}>{c.inadDiasMax}d</td>
                        <td style={{textAlign:'right'}} className="gold">{fmt(c.total)}</td>
                      </tr>
                    ))}
                  </tbody>
                </table>
              </div>
            )}
          </div>

          {/* [v120 INS2] M3+M4+M5 — Tabela master de clientes (top 30) com tudo */}
          <div className="card" style={{marginTop:16,padding:0}}>
            <div style={{padding:'14px 16px',borderBottom:'1px solid #E4E7EC'}}>
              <STitle t="📋 Top 30 clientes — visão completa" s="LTV · score saúde · marca preferida · vendedora dominante · inadimplência"/>
            </div>
            <div style={{overflowX:'auto'}}>
              <table style={{minWidth:920}}>
                <thead><tr>
                  <th>Cliente</th>
                  <th>Segmento</th>
                  <th style={{textAlign:'right'}}>LTV</th>
                  <th style={{textAlign:'right'}}>Pedidos</th>
                  <th style={{textAlign:'right'}}>Frequência</th>
                  <th>Marca preferida</th>
                  <th>Vendedora</th>
                  <th style={{textAlign:'center'}}>Score</th>
                </tr></thead>
                <tbody>
                  {clientsEnriched.slice(0,30).map(c=>{
                    const scoreColor = c.score>=75?'#15803D':c.score>=50?'#B89840':c.score>=25?'#EA580C':'#DC2626';
                    return(
                      <tr key={c.name+'_'+(c.clientId||'avu')}>
                        <td style={{fontWeight:600,fontSize:12}}>
                          {c.name}
                          {c.inadimplente&&<span title={`Atraso ${c.inadDiasMax}d · ${fmt(c.inadValor)}`} style={{marginLeft:6,padding:'1px 6px',background:'#FEE2E2',color:'#B91C1C',borderRadius:4,fontSize:9,fontWeight:700}}>INAD</span>}
                        </td>
                        <td className="dim" style={{fontSize:11}}>{c.segment}</td>
                        <td style={{textAlign:'right'}} className="gold">{fmt(c.total)}</td>
                        <td style={{textAlign:'right'}}>{c.orders}</td>
                        <td style={{textAlign:'right'}} className="dim">{c.diasEntrePedidos?Math.round(c.diasEntrePedidos)+'d':'—'}</td>
                        <td style={{fontSize:11}}>{c.topMarcas[0]?.name||'—'}</td>
                        <td style={{fontSize:11}}>{c.vendedoraDominante?(c.vendedoraDominante.nome+(c.vendedoraDominante.pct>=70?' 🔒':'')):'—'}</td>
                        <td style={{textAlign:'center'}}>
                          <span style={{padding:'3px 10px',background:scoreColor,color:'#fff',borderRadius:6,fontWeight:800,fontSize:12}}>{c.score}</span>
                        </td>
                      </tr>
                    );
                  })}
                </tbody>
              </table>
            </div>
            <div style={{padding:'10px 16px',fontSize:11,color:'#9CA3AF',fontStyle:'italic',borderTop:'1px solid #F3F4F6'}}>💡 Score = recência (40) + frequência (25) + valor (20) + pagamento em dia (15). 🔒 = vendedora detém ≥70% do relacionamento.</div>
          </div>
        </div>
      )}


      {/* ══ MARCAS (legacy, oculto pela condição acima) ══ */}
      {/* ══ VENDEDORES ══ */}
      {tab==='vendedores'&&(
        <div>
          {/* ── Awards ── */}
          <div style={{display:'grid',gridTemplateColumns:'repeat(4,1fr)',gap:14,marginBottom:20}}>
            <KCard label="🏆 Mais Faturou — Mês" value={vendorStats[0]?.name||'—'} sub={vendorStats[0]?fmt(vendorStats[0].revenue):''} color='#2563EB'/>
            <KCard label="🆕 Mais Clientes Novos" value={[...vendorDeepStats].sort((a,b)=>b.newClients-a.newClients)[0]?.name||'—'} sub={`${[...vendorDeepStats].sort((a,b)=>b.newClients-a.newClients)[0]?.newClients||0} novos em 30d`} color='#2196f3'/>
            <KCard label="📈 Ticket Mais Crescendo" value={[...vendorDeepStats].sort((a,b)=>b.ticketGrowth-a.ticketGrowth)[0]?.name||'—'} sub={`+${Math.max(0,[...vendorDeepStats].sort((a,b)=>b.ticketGrowth-a.ticketGrowth)[0]?.ticketGrowth||0).toFixed(0)}% vs mês ant.`} color='#16A34A'/>
            <KCard label="👥 Clientes Mais Crescendo" value={[...vendorDeepStats].sort((a,b)=>b.clientGrowth-a.clientGrowth)[0]?.name||'—'} sub={`+${Math.max(0,[...vendorDeepStats].sort((a,b)=>b.clientGrowth-a.clientGrowth)[0]?.clientGrowth||0).toFixed(0)}% clientes`} color='#9c27b0'/>
          </div>

          {/* ── Vendor Cards (Revenue + Meta) ── */}
          <div style={{display:'grid',gridTemplateColumns:'repeat(auto-fill,minmax(310px,1fr))',gap:16,marginBottom:20}}>
            {vendorStats.map((v,i)=>{
              const deep=vendorDeepStats.find(d=>d.name===v.name)||{};
              const bc=v.pct>=100?'#16A34A':v.pct>=70?'#2563EB':v.pct>=40?'#EA580C':'#DC2626';
              const VCOLS=['#2563EB','#2196f3','#16A34A','#EA580C','#9c27b0','#DC2626'];
              const vcol=VCOLS[i%VCOLS.length];
              return(
                <div key={v.name} className="card" style={{border:i===0?`1px solid ${vcol}66`:'1px solid #E4E7EC',background:i===0?'linear-gradient(135deg,#FFFBEB,#FEF9E7)':'#FFFFFF'}}>
                  {/* Header */}
                  <div style={{display:'flex',justifyContent:'space-between',alignItems:'flex-start',marginBottom:12}}>
                    <div>
                      <div style={{fontWeight:700,fontSize:14,color:'#374151'}}>{i===0?'🏆 ':''}{v.name}</div>
                      <div style={{fontSize:11,color:'#6B7280',marginTop:2}}>{v.salesCount} vendas · {v.quotesTotal} orç. este mês</div>
                    </div>
                    <div style={{textAlign:'right'}}>
                      <div style={{fontSize:18,fontWeight:800,color:'#2563EB'}}>{fmt(v.revenue)}</div>
                      <div style={{fontSize:10,color:'#6B7280'}}>all-time: {fmt(v.totalAllTime)}</div>
                    </div>
                  </div>
                  {/* Meta bar */}
                  {v.meta>0&&(
                    <div style={{marginBottom:12}}>
                      <div style={{display:'flex',justifyContent:'space-between',fontSize:10,marginBottom:3}}>
                        <span style={{color:'#6B7280'}}>Meta {fmt(v.meta)}</span>
                        <span style={{color:bc,fontWeight:700}}>{v.pct.toFixed(1)}%</span>
                      </div>
                      <div style={{background:'#F9FAFB',borderRadius:3,height:6,overflow:'hidden'}}>
                        <div style={{height:'100%',width:`${v.pct}%`,background:bc,borderRadius:3,boxShadow:`0 0 5px ${bc}88`,transition:'width .5s'}}/>
                      </div>
                    </div>
                  )}
                  {/* KPI grid */}
                  <div style={{display:'grid',gridTemplateColumns:'repeat(3,1fr)',gap:6,marginBottom:12}}>
                    {[
                      {label:'Ticket mês',val:v.avgTicket>0?fmt(v.avgTicket):'—',color:'#374151',trend:deep.ticketGrowth},
                      {label:'Conv. ORC',val:v.convRate.toFixed(0)+'%',color:v.convRate>50?'#16A34A':v.convRate>25?'#2563EB':'#DC2626'},
                      {label:'Clientes/mês',val:deep.cmClients||0,color:'#9CA3AF',trend:deep.clientGrowth},
                    ].map(({label,val,color,trend})=>(
                      <div key={label} style={{background:'#F8FAFB',borderRadius:6,padding:'7px 8px',textAlign:'center'}}>
                        <div style={{fontSize:9,color:'#6B7280',marginBottom:2,textTransform:'uppercase',letterSpacing:.4}}>{label}</div>
                        <div style={{fontSize:12,fontWeight:700,color}}>{val}</div>
                        {trend!==undefined&&<div style={{fontSize:9,color:trend>=0?'#16A34A':'#DC2626',marginTop:1}}>{trend>=0?'↑':'↓'}{Math.abs(trend).toFixed(0)}%</div>}
                      </div>
                    ))}
                  </div>
                  {/* New vs losing */}
                  <div style={{display:'grid',gridTemplateColumns:'1fr 1fr',gap:6,marginBottom:12}}>
                    <div style={{background:'#F0FDF4',border:'1px solid #16A34A22',borderRadius:6,padding:'7px 10px',textAlign:'center'}}>
                      <div style={{fontSize:9,color:'#6B7280',marginBottom:2}}>NOVOS CLIENTES</div>
                      <div style={{fontSize:16,fontWeight:800,color:'#16A34A'}}>{deep.newClients||0}</div>
                      <div style={{fontSize:9,color:'#6B7280'}}>nos últimos 30d</div>
                    </div>
                    <div style={{background:deep.losingClients>0?'#FEF2F2':'#F9FAFB',border:`1px solid ${deep.losingClients>0?'#DC262622':'#1A1A1A'}`,borderRadius:6,padding:'7px 10px',textAlign:'center'}}>
                      <div style={{fontSize:9,color:'#6B7280',marginBottom:2}}>SAINDO</div>
                      <div style={{fontSize:16,fontWeight:800,color:deep.losingClients>0?'#DC2626':'#16A34A'}}>{deep.losingClients||0}</div>
                      <div style={{fontSize:9,color:'#6B7280'}}>sem comprar 30d</div>
                    </div>
                  </div>
                  {/* Losing client names */}
                  {deep.losingNames?.length>0&&(
                    <div style={{background:'#FEF2F2',border:'1px solid #FECACA',borderRadius:6,padding:'7px 10px',marginBottom:10}}>
                      <div style={{fontSize:9,color:'#DC2626',marginBottom:4,textTransform:'uppercase',letterSpacing:.5}}>⚠ Clientes em risco</div>
                      {deep.losingNames.map(n=>(
                        <div key={n} style={{fontSize:11,color:'#9CA3AF',marginBottom:2}}>• {n}</div>
                      ))}
                      {deep.losingClients>deep.losingNames.length&&<div style={{fontSize:10,color:'#6B7280'}}>+{deep.losingClients-deep.losingNames.length} outros...</div>}
                    </div>
                  )}
                  {/* Sparklines: Ticket + Clientes */}
                  <div style={{display:'grid',gridTemplateColumns:'1fr 1fr',gap:8}}>
                    {[
                      {label:'Ticket médio — 6m',data:deep.ticketTrend||[],color:vcol},
                      {label:'Clientes únicos — 6m',data:deep.clientTrend||[],color:'#2196f3'},
                    ].map(({label,data,color})=>{
                      const mx=Math.max(1,...data);
                      return(
                        <div key={label}>
                          <div style={{fontSize:9,color:'#6B7280',marginBottom:4,textTransform:'uppercase',letterSpacing:.4}}>{label}</div>
                          <div style={{display:'flex',alignItems:'flex-end',gap:2,height:28}}>
                            {(data.length>0?data:[0,0,0,0,0,0]).map((v,i)=>{
                              const h=mx>0?Math.max(8,Math.round(v/mx*100)):8;
                              const isLast=i===data.length-1;
                              return(<div key={i} style={{flex:1,height:`${h}%`,background:isLast?color:`${color}44`,borderRadius:'2px 2px 0 0',minHeight:2,transition:'height .3s'}}/>);
                            })}
                          </div>
                        </div>
                      );
                    })}
                  </div>
                </div>
              );
            })}
            {vendorStats.length===0&&<div style={{color:'#6B7280',padding:20,fontSize:13}}>Nenhum vendedor cadastrado.</div>}
          </div>

          {/* ── Rankings ── */}
          <div style={{display:'grid',gridTemplateColumns:'repeat(4,1fr)',gap:14,marginBottom:20}}>
            {/* Mais clientes novos */}
            <div className="card">
              <STitle t="🆕 Clientes Novos Fechados" s="Últimos 30 dias por vendedor"/>
              {[...vendorDeepStats].sort((a,b)=>b.newClients-a.newClients).map((v,i)=>(
                <div key={v.name} style={{display:'flex',justifyContent:'space-between',alignItems:'center',marginBottom:8,padding:'6px 8px',background:i===0?'#F0FDF4':'transparent',borderRadius:6,border:i===0?'1px solid #BBF7D0':'none'}}>
                  <span style={{fontSize:12,color:i===0?'#374151':'#6B7280'}}>{i===0?'🥇 ':i===1?'🥈 ':i===2?'🥉 ':''}{v.name}</span>
                  <span style={{fontSize:14,fontWeight:800,color:i===0?'#16A34A':'#555'}}>{v.newClients}</span>
                </div>
              ))}
            </div>
            {/* Crescimento de ticket */}
            <div className="card">
              <STitle t="📈 Crescimento de Ticket" s="Este mês vs mês anterior"/>
              {[...vendorDeepStats].sort((a,b)=>b.ticketGrowth-a.ticketGrowth).map((v,i)=>(
                <div key={v.name} style={{marginBottom:10}}>
                  <div style={{display:'flex',justifyContent:'space-between',alignItems:'center',marginBottom:3}}>
                    <span style={{fontSize:11,color:'#9CA3AF'}}>{v.name}</span>
                    <span style={{fontSize:12,fontWeight:700,color:v.ticketGrowth>=0?'#16A34A':'#DC2626'}}>{v.ticketGrowth>=0?'+':''}{v.ticketGrowth.toFixed(0)}%</span>
                  </div>
                  <div style={{display:'flex',gap:4,fontSize:10,color:'#6B7280'}}>
                    <span>{v.pmTicket>0?fmt(v.pmTicket):'—'}</span>
                    <span>→</span>
                    <span style={{color:'#2563EB'}}>{v.cmTicket>0?fmt(v.cmTicket):'—'}</span>
                  </div>
                </div>
              ))}
            </div>
            {/* Clientes crescendo */}
            <div className="card">
              <STitle t="👥 Carteira Crescendo" s="Clientes únicos este mês vs anterior"/>
              {[...vendorDeepStats].sort((a,b)=>b.clientGrowth-a.clientGrowth).map((v,i)=>(
                <div key={v.name} style={{marginBottom:10}}>
                  <div style={{display:'flex',justifyContent:'space-between',alignItems:'center',marginBottom:3}}>
                    <span style={{fontSize:11,color:'#9CA3AF'}}>{v.name}</span>
                    <span style={{fontSize:12,fontWeight:700,color:v.clientGrowth>=0?'#16A34A':'#DC2626'}}>{v.clientGrowth>=0?'+':''}{v.clientGrowth.toFixed(0)}%</span>
                  </div>
                  <div style={{display:'flex',gap:4,fontSize:10,color:'#6B7280'}}>
                    <span>{v.pmClients} cli.</span>
                    <span>→</span>
                    <span style={{color:'#2196f3'}}>{v.cmClients} cli.</span>
                  </div>
                </div>
              ))}
            </div>
            {/* Perdendo clientes */}
            <div className="card">
              <STitle t="⚠️ Clientes Saindo" s="Sem compra nos últimos 30d por vendedor"/>
              {[...vendorDeepStats].sort((a,b)=>b.losingClients-a.losingClients).map((v,i)=>(
                <div key={v.name} style={{display:'flex',justifyContent:'space-between',alignItems:'center',marginBottom:8,padding:'6px 8px',background:v.losingClients>0&&i===0?'#FEF2F2':'transparent',borderRadius:6,border:v.losingClients>0&&i===0?'1px solid #FECACA':'none'}}>
                  <span style={{fontSize:12,color:'#9CA3AF'}}>{v.name}</span>
                  <span style={{fontSize:14,fontWeight:800,color:v.losingClients>2?'#DC2626':v.losingClients>0?'#EA580C':'#16A34A'}}>{v.losingClients===0?'✓ 0':v.losingClients}</span>
                </div>
              ))}
            </div>
          </div>

          {/* ── Faturamento trend ── */}
          <div className="card">
            <STitle t="📊 Faturamento por Vendedor — Últimos 6 Meses"/>
            {vendorStats.map((v,vi)=>{
              const VCOLS=['#2563EB','#2196f3','#16A34A','#EA580C','#9c27b0','#DC2626'];
              const col=VCOLS[vi%VCOLS.length];
              const last6=monthlyData.slice(6);
              const vals=last6.map(m=>sales.filter(s=>s.sellerName===v.name&&s.date?.startsWith(m.key)&&isFaturada(s)).reduce((a,s)=>a+saleFinalTotal(s),0));
              const mx=Math.max(1,...vals);
              return(
                <div key={v.name} style={{marginBottom:16,display:'flex',alignItems:'flex-end',gap:12}}>
                  <div style={{fontSize:12,color:col,fontWeight:600,width:120,flexShrink:0}}>{v.name}</div>
                  <div style={{flex:1,display:'flex',gap:4,alignItems:'flex-end',height:40}}>
                    {vals.map((rev,i)=>{
                      const h=mx>0?Math.max(4,Math.round(rev/mx*100)):4;
                      const isLast=i===vals.length-1;
                      return(
                        <div key={i} style={{flex:1,display:'flex',flexDirection:'column',alignItems:'center',gap:2}} title={`${last6[i]?.label}: ${fmt(rev)}`}>
                          <div style={{width:'100%',height:`${h}%`,background:isLast?col:`${col}55`,borderRadius:'2px 2px 0 0',minHeight:2,boxShadow:isLast?`0 0 6px ${col}66`:''}}/>
                          <div style={{fontSize:8,color:'#6B7280',whiteSpace:'nowrap'}}>{last6[i]?.label}</div>
                        </div>
                      );
                    })}
                  </div>
                  <div style={{fontSize:12,fontWeight:700,color:'#2563EB',minWidth:80,textAlign:'right'}}>{fmt(vals[vals.length-1])}</div>
                </div>
              );
            })}
            {vendorStats.length===0&&<div style={{color:'#6B7280',fontSize:13}}>Nenhum vendedor cadastrado.</div>}
          </div>

          {/* [NOVO v112] C3+C4+C5: Tempo fechamento + Descontos + Retenção por vendedora */}
          <div style={{display:'grid',gridTemplateColumns:'1fr 1fr 1fr',gap:16,marginTop:20}}>
            <div className="card">
              <STitle t="⏱️ Tempo Médio Fechamento" s="Orçamento → Venda em dias"/>
              {tempoFechamentoVendedoras.length===0?
                <div style={{fontSize:12,color:'#9CA3AF',textAlign:'center',padding:20}}>Sem dados ainda — exige conversões com timestamps</div>:
                tempoFechamentoVendedoras.slice(0,8).map((v,i)=>(
                  <div key={v.nome} style={{display:'flex',justifyContent:'space-between',alignItems:'center',padding:'7px 0',borderBottom:'1px solid #F3F4F6'}}>
                    <div>
                      <div style={{fontSize:12,fontWeight:600,color:'#374151'}}>{i+1}. {v.nome}</div>
                      <div style={{fontSize:10,color:'#9CA3AF'}}>{v.qtd} conversões</div>
                    </div>
                    <div style={{fontSize:14,fontWeight:800,color:i<3?'#16A34A':'#374151'}}>{v.media<1?Math.round(v.media*24)+'h':v.media.toFixed(1)+'d'}</div>
                  </div>
                ))
              }
              <div style={{marginTop:10,fontSize:10,color:'#9CA3AF',fontStyle:'italic'}}>💡 Mais rápido = melhor. Top 3 em verde.</div>
            </div>

            <div className="card">
              <STitle t="💸 Uso de Descontos" s="% das vendas que aplicam desconto"/>
              {descontosVendedoras.length===0?
                <div style={{fontSize:12,color:'#9CA3AF',textAlign:'center',padding:20}}>Sem dados</div>:
                descontosVendedoras.slice(0,8).map(v=>{
                  const corPct=v.pctVendasComDesc>=50?'#DC2626':v.pctVendasComDesc>=25?'#EA580C':'#16A34A';
                  return(
                    <div key={v.nome} style={{padding:'7px 0',borderBottom:'1px solid #F3F4F6'}}>
                      <div style={{display:'flex',justifyContent:'space-between',fontSize:12,marginBottom:3}}>
                        <span style={{fontWeight:600,color:'#374151'}}>{v.nome}</span>
                        <span style={{fontWeight:700,color:corPct}}>{v.pctVendasComDesc.toFixed(0)}%</span>
                      </div>
                      <div style={{display:'flex',gap:8,fontSize:10,color:'#9CA3AF'}}>
                        <span>{v.vendasComDesc}/{v.vendas} vendas</span>
                        {v.descMedio>0&&<span>• Média desconto: {v.descMedio.toFixed(0)}%</span>}
                      </div>
                    </div>
                  );
                })
              }
              <div style={{marginTop:10,fontSize:10,color:'#9CA3AF',fontStyle:'italic'}}>💡 % alta = pode estar dependendo de desconto pra vender.</div>
            </div>

            <div className="card">
              <STitle t="🔁 Taxa de Retenção" s="% de clientes que voltaram (2+ compras)"/>
              {retencaoVendedoras.length===0?
                <div style={{fontSize:12,color:'#9CA3AF',textAlign:'center',padding:20}}>Vendedoras precisam de 3+ clientes pra entrar no ranking</div>:
                retencaoVendedoras.slice(0,8).map((v,i)=>{
                  const corT=v.taxa>=40?'#16A34A':v.taxa>=20?'#2563EB':'#EA580C';
                  return(
                    <div key={v.nome} style={{padding:'7px 0',borderBottom:'1px solid #F3F4F6'}}>
                      <div style={{display:'flex',justifyContent:'space-between',fontSize:12,marginBottom:3}}>
                        <span style={{fontWeight:600,color:'#374151'}}>{i+1}. {v.nome}</span>
                        <span style={{fontWeight:700,color:corT}}>{v.taxa.toFixed(0)}%</span>
                      </div>
                      <div style={{fontSize:10,color:'#9CA3AF'}}>{v.recorrentes}/{v.clientes} clientes voltaram</div>
                    </div>
                  );
                })
              }
              <div style={{marginTop:10,fontSize:10,color:'#9CA3AF',fontStyle:'italic'}}>💡 Top retenção = melhor relacionamento.</div>
            </div>
          </div>
        </div>
      )}

      {/* ══ ESTOQUE & FINANCEIRO ══ */}
      {/* [Wave 5 KIMI 2026-05-15] tab='financeiro' extraído para FinanceiroPanel.jsx */}
      {tab==='financeiro'&&(
        <FinanceiroPanel
          stockHealth={stockHealth}
          recAging={recAging}
          receivables={receivables}
          payables={payables}
          products={products}
          cashFlowProjetado={cashFlowProjetado}
          margemPorCategoria={margemPorCategoria}
          roiPorMarca={roiPorMarca}
        />
      )}

      {/* ══ NOVA ABA: 🎯 OPERACIONAL ══ */}
      {/* [Wave 5 KIMI 2026-05-15] tab='operacional' extraído para OperacionalPanel.jsx */}
      {tab==='operacional'&&(
        <OperacionalPanel
          sales={sales}
          cancelamentos={cancelamentos}
          tempoMedioRetirada={tempoMedioRetirada}
          funnelExtended={funnelExtended}
          padroesHorario={padroesHorario}
        />
      )}

      {/* ══ NOVA ABA: 🤖 IA INSIGHTS ══ */}
      {/* [Wave 5 KIMI 2026-05-15] tab='ia' extraído para IAPanel.jsx */}
      {tab==='ia'&&(
        <IAPanel
          previsaoProximoMes={previsaoProximoMes}
          alertasIA={alertasIA}
          anomalias={anomalias}
          recomendacoes={recomendacoes}
        />
      )}
    </div>
  );
}

  window.ZNX = window.ZNX || {};
  window.ZNX.components = window.ZNX.components || {};
  window.ZNX.components.Insights = Insights;
  window.Insights = Insights;

  window.ZNX.refactor_phase_6_loaded = window.ZNX.refactor_phase_6_loaded || {};
  window.ZNX.refactor_phase_6_loaded.Insights = true;

})();
