/* screens-overview.jsx — Home, Visão Geral, Fechamento do Dia, Análise de Produtos */

// Deterministic mock data — no client refs
const MOCK = (() => {
  const series = (n, base, vol = 0.15, trend = 0) =>
    Array.from({ length: n }, (_, i) => Math.max(0, base * (1 + trend * i / n + (Math.sin(i * 1.3) + Math.cos(i * 2.1)) * vol)));
  return {
    salesTrend: series(30, 48000, 0.18, 0.4),
    salesLY:    series(30, 42000, 0.16, 0.25),
    storesKPI: PH.stores.slice(0, 6).map((s, i) => ({
      cod: i + 1,
      loja: s,
      vlr: 220000 - i * 28000 + (i % 2 ? 14000 : 0),
      qtd: 1400 - i * 160,
      yoy: [12.4, 8.7, -2.1, 5.6, -6.3, 2.0][i],
      mkp: 2.42 + i * 0.04,
      pa:  1.62 - i * 0.03,
      tkm: 412 + i * 8,
      pm:  255 - i * 4,
      cli: 540 - i * 60,
    })),
    weekly: ["S1","S2","S3","S4","S5","S6","S7","S8","S9","S10","S11","S12"].map((w, i) => ({
      label: w, atual: 180000 + i * 7000 + (i % 3) * 9000, prev: 165000 + i * 5500 + (i % 4) * 7000,
    })),
    topProducts: PH.products.slice(0, 8).map((p, i) => ({
      rank: i + 1,
      nome: p,
      vlr: 92000 - i * 8400,
      qtd: 280 - i * 22,
      yoy: [22.4, 18.1, 11.3, 7.2, 3.5, -1.8, -5.6, -11.0][i],
    })),
    sellers: ["Operadora A","Operadora B","Operadora C","Operadora D","Operadora E"].map((n, i) => ({
      nome: n, loja: PH.stores[i % 4], vlr: 88000 - i * 7400, yoy: [16.8, 12.3, 5.4, -1.2, -8.6][i],
    })),
    forecast: Array.from({ length: 16 }, (_, i) => ({
      sem: `S${i + 1}`,
      real:    i < 9 ? 180000 + i * 7000 + (i % 3) * 9000 : null,
      previsto: i >= 7 ? 195000 + i * 6500 + Math.sin(i) * 8000 : null,
      lo:       i >= 7 ? 175000 + i * 6500 + Math.sin(i) * 8000 : null,
      hi:       i >= 7 ? 215000 + i * 6500 + Math.sin(i) * 8000 : null,
    })),
    coverage: PH.stores.slice(0, 6).map((s, i) => ({
      loja: s,
      rupturaPct: [3.2, 4.8, 7.1, 2.4, 9.2, 5.6][i],
      coberturaDias: [42, 28, 18, 56, 14, 32][i],
      skusCriticos: [12, 18, 27, 8, 41, 19][i],
      faturamentoRisco: [12400, 28900, 51200, 8200, 78400, 31800][i],
    })),
  };
})();

// ============================================================
// HOME — Executive summary with HealthScore + Narrative + Radar + dual YoY
// ============================================================
function HomeScreen({ onNavigate }) {
  const { period, setPeriod, mult: periodMult } = usePeriod();
  // Tanto Atual quanto LY escalam pelo mesmo multiplicador (pra YoY permanecer ~constante)
  const totalVendas = MOCK.salesTrend.reduce((a, b) => a + b, 0) * periodMult;
  const totalLY     = MOCK.salesLY.reduce((a, b) => a + b, 0) * periodMult;
  // YoY agora oscila levemente conforme periodo (Dia volátil, YTD estável)
  const yoyBase = ((totalVendas - totalLY) / totalLY) * 100;
  const yoyAdjust = { "Dia": -3.2, "Semana": 1.4, "Mês": 0, "YTD": 2.1 }[period] || 0;
  const yoy = yoyBase + yoyAdjust;
  // Multiplicadores derivados pros KPIs e gráficos
  const pecasTotal = Math.round(28412 * periodMult);
  const ticketMedio = 412 + (period === "Dia" ? -8 : period === "Semana" ? -3 : period === "YTD" ? 12 : 0);
  const mkpValue = (2.42 + (period === "Dia" ? -0.04 : period === "Semana" ? -0.02 : period === "YTD" ? 0.06 : 0)).toFixed(2);
  // KPIs vs anterior também variam por período
  const vsPrev = { "Dia": 3.2, "Semana": 6.8, "Mês": 8.4, "YTD": 11.2 }[period] || 8.4;
  // Radar values escalam levemente (algumas dimensões reagem mais que outras)
  const radarValue = {
    vendas: Math.round(87 * (period === "Dia" ? 0.92 : period === "Semana" ? 0.96 : period === "YTD" ? 1.04 : 1)),
    meta:   Math.round(74 * (period === "Dia" ? 0.88 : period === "Semana" ? 0.94 : period === "YTD" ? 1.08 : 1)),
    mkp:    Math.round(92 * (period === "Dia" ? 0.96 : 1)),
    ticket: Math.round(81 * (period === "Dia" ? 0.93 : period === "YTD" ? 1.03 : 1)),
    conv:   Math.round(68 * (period === "Dia" ? 0.85 : period === "Semana" ? 0.92 : period === "YTD" ? 1.08 : 1)),
    pa:     Math.round(78 * (period === "Dia" ? 0.94 : 1)),
  };
  const now = new Date();
  const greeting = now.getHours() < 12 ? "Bom dia" : now.getHours() < 18 ? "Boa tarde" : "Boa noite";

  // Storytelling pra Narrative do dia varia conforme periodo
  const narrativePeriodLabel = { "Dia": "hoje", "Semana": "essa semana", "Mês": "nos últimos 30 dias", "YTD": "no ano até aqui" }[period] || "nos últimos 30 dias";
  const narrativeMetaPct = { "Dia": "Meta diária 102% atingida", "Semana": "Meta semanal 96% atingida", "Mês": "A meta do mês está em 87% atingida, com 6 dias úteis restantes", "YTD": "Meta anual 84% atingida com 7 meses restantes" }[period] || "Meta atingida";

  return (
    <div className="space-y-6">
      {/* Greeting + period pills */}
      <div className="flex items-end justify-between flex-wrap gap-3">
        <div>
          <div className="text-[11px] uppercase tracking-[0.18em] text-[var(--fg-muted)]">{now.toLocaleDateString("pt-BR", { month: "long", year: "numeric" })}</div>
          <h1 className="text-[26px] md:text-[30px] font-semibold tracking-tight leading-none mt-1.5">
            {greeting}, <span className="text-[var(--accent)]">Operador</span>. Aqui está o resumo de hoje.
          </h1>
        </div>
        <PeriodPills value={period} onChange={setPeriod} />
      </div>

      {/* HealthScore + Narrative side by side */}
      <div className="grid grid-cols-1 lg:grid-cols-[auto_1fr] gap-5 panel p-5">
        <div className="flex items-center gap-3">
          <HealthScore score={78} />
          <InfoDot
            side="bottom"
            width={300}
            content={
              <div>
                <div className="font-semibold text-[12px] mb-1">{GLOSSARY.health.title}</div>
                <div className="text-[var(--fg-muted)]">{GLOSSARY.health.desc}</div>
              </div>
            }
          />
        </div>
        <div className="flex flex-col gap-3 justify-center border-l border-[var(--border)] pl-5">
          <Narrative
            tone="positive"
            kicker="Resumo do dia"
            icon="sparkles"
            action={<Btn variant="ghost" icon="arrow-right" onClick={() => onNavigate && onNavigate("fechamento")}>Ver detalhe</Btn>}
          >
            Vendas <span className="num font-semibold text-[var(--fg)]">{fmt.money(totalVendas, { compact: true })}</span> {narrativePeriodLabel} —{" "}
            <span className={`num font-semibold ${yoy >= 0 ? "text-[var(--pos)]" : "text-[var(--neg)]"}`}>{yoy >= 0 ? "+" : ""}{yoy.toFixed(1)}%</span> vs. 2025 e{" "}
            <span className="num font-semibold text-[var(--pos)]">+{vsPrev.toFixed(1)}%</span> vs. período anterior. {narrativeMetaPct}.
          </Narrative>
          <Narrative
            tone="warn"
            kicker="Atenção"
            icon="shield-alert"
          >
            <span className="font-semibold text-[var(--fg)] num">125 SKUs</span> em ruptura colocam{" "}
            <span className="num font-semibold text-[var(--fg)]">{fmt.money(210900, { compact: true })}</span> em risco essa semana —
            priorize <span className="font-semibold">Filial 05</span> e <span className="font-semibold">Filial 03</span>.
          </Narrative>
        </div>
      </div>

      {/* KPI strip with dual YoY (vs prev + vs year) — todos refletem o periodo selecionado */}
      <div className="grid grid-cols-2 md:grid-cols-4 gap-3">
        <KPIDual label="Faturamento"  icon="dollar-sign"  value={totalVendas} vsPrev={vsPrev}  vsYear={yoy}  accent format="money" />
        <KPIDual label="Peças"        icon="shopping-bag" value={pecasTotal}   vsPrev={vsPrev * 0.5}  vsYear={8.7 + yoyAdjust}  format="int" />
        <KPIDual label="Ticket médio" icon="trending-up"  value={ticketMedio}  vsPrev={vsPrev * 0.25} vsYear={6.2 + yoyAdjust * 0.5}  format="money" info={GLOSSARY.tkm} />
        <KPIDual label="MKP"          icon="percent"      value={`${mkpValue}×`} vsPrev={vsPrev * 0.04 - 0.3} vsYear={1.1 + yoyAdjust * 0.2}  info={GLOSSARY.mkp} />
      </div>

      {/* Performance Radar + Sales trend */}
      <div className="grid grid-cols-1 lg:grid-cols-[1fr_1.4fr] gap-5">
        <div className="panel p-5 chart-bg">
          <div className="flex items-center justify-between mb-3">
            <div>
              <h3 className="font-semibold text-[14px] flex items-center gap-2"><Icon name="radar" className="w-4 h-4 text-[var(--accent)]" /> Performance multi-dim</h3>
              <p className="text-[11px] text-[var(--fg-muted)] mt-0.5">Atual vs. meta · todas dimensões</p>
            </div>
            <div className="flex items-center gap-3 text-[10px]">
              <span className="flex items-center gap-1"><span className="w-2 h-2 rounded-sm bg-[var(--accent)]" /> Atual</span>
              <span className="flex items-center gap-1"><span className="w-2 h-2 rounded-sm bg-[var(--fg-muted)] opacity-60" style={{ borderTop: "1px dashed var(--fg-muted)" }} /> Meta</span>
            </div>
          </div>
          <div className="flex items-center justify-center pt-2">
            <RadarChart
              size={260}
              axes={[
                { key: "vendas", label: "Vendas",   max: 100 },
                { key: "meta",   label: "Meta",     max: 100 },
                { key: "mkp",    label: "MKP",      max: 100 },
                { key: "ticket", label: "Ticket",   max: 100 },
                { key: "conv",   label: "Conversão",max: 100 },
                { key: "pa",     label: "P.A.",     max: 100 },
              ]}
              value={radarValue}
              target={{ vendas: 80, meta: 80, mkp: 80, ticket: 80, conv: 80, pa: 80 }}
            />
          </div>
        </div>

        <div className="panel p-5 chart-bg">
          <div className="flex items-center justify-between mb-3">
            <div>
              <h3 className="font-semibold text-[14px] flex items-center gap-2"><Icon name="line-chart" className="w-4 h-4 text-[var(--accent)]" /> Vendas · {period.toLowerCase()}</h3>
              <p className="text-[11px] text-[var(--fg-muted)] mt-0.5">2026 vs. mesmo período de 2025</p>
            </div>
            <div className="flex items-center gap-3 text-[10px]">
              <span className="flex items-center gap-1"><span className="w-3 h-0.5 bg-[var(--accent)]" /> 2026</span>
              <span className="flex items-center gap-1"><span className="w-3 h-0.5 bg-[var(--accent-2)]" style={{ borderTop: "1px dashed var(--accent-2)" }} /> 2025</span>
            </div>
          </div>
          <LineChart
            labels={MOCK.weekly.map(w => w.label)}
            series={[
              { name: "Atual", data: MOCK.weekly.map(w => w.atual * periodMult), color: "var(--accent)" },
              { name: "LY",    data: MOCK.weekly.map(w => w.prev * periodMult),  color: "var(--accent-2)", dashed: true },
            ]}
            height={250}
          />
        </div>
      </div>

      {/* 3-col content */}
      <div className="grid grid-cols-1 lg:grid-cols-3 gap-5">
        {/* Ranking lojas */}
        <div className="panel p-5">
          <div className="flex items-center justify-between mb-4">
            <h3 className="font-semibold text-[14px] flex items-center gap-2"><Icon name="trophy" className="w-4 h-4 text-[var(--accent)]" /> Ranking de filiais</h3>
            <button onClick={() => onNavigate("visao")} className="text-[10px] uppercase tracking-wider text-[var(--fg-muted)] hover:text-[var(--accent)] flex items-center gap-1">
              Detalhar <Icon name="arrow-right" className="w-3 h-3" />
            </button>
          </div>
          <div className="space-y-1.5">
            {MOCK.storesKPI.slice(0, 5).map((s, i) => (
              <div key={s.cod} className="flex items-center gap-3 px-2.5 py-2 rounded-lg hover:bg-[var(--panel-2)] transition-colors">
                <div className={`w-7 h-7 rounded-lg flex items-center justify-center text-[11px] font-bold border ${i === 0 ? "bg-[var(--accent-soft)] border-[var(--accent)] text-[var(--accent)]" : "bg-[var(--panel-2)] border-[var(--border)] text-[var(--fg-muted)]"}`}>
                  {i + 1}
                </div>
                <div className="flex-1 min-w-0">
                  <div className="text-[12.5px] font-medium truncate">{s.loja}</div>
                  <div className="text-[10px] text-[var(--fg-faint)]">{fmt.int(s.qtd)} peças</div>
                </div>
                <div className="text-right">
                  <div className="num text-[12.5px] font-mono font-medium">{fmt.money(s.vlr, { compact: true })}</div>
                  <Delta value={s.yoy} />
                </div>
              </div>
            ))}
          </div>
        </div>

        {/* Top produtos */}
        <div className="panel p-5">
          <div className="flex items-center justify-between mb-4">
            <h3 className="font-semibold text-[14px] flex items-center gap-2"><Icon name="package" className="w-4 h-4 text-[var(--accent-2)]" /> Top produtos</h3>
            <button onClick={() => onNavigate("produtos")} className="text-[10px] uppercase tracking-wider text-[var(--fg-muted)] hover:text-[var(--accent)] flex items-center gap-1">
              Ver todos <Icon name="arrow-right" className="w-3 h-3" />
            </button>
          </div>
          <div className="space-y-1.5">
            {MOCK.topProducts.slice(0, 6).map((p) => (
              <div key={p.nome} className="flex items-center gap-3 px-2.5 py-2 rounded-lg hover:bg-[var(--panel-2)] transition-colors">
                <span className="text-[10px] font-mono w-5 text-[var(--fg-faint)]">{p.rank.toString().padStart(2, "0")}</span>
                <div className="flex-1 min-w-0">
                  <div className="text-[11.5px] font-medium truncate">{p.nome}</div>
                  <div className="text-[10px] text-[var(--fg-faint)] num">{fmt.int(p.qtd)} pç</div>
                </div>
                <div className="text-right">
                  <div className="num text-[11.5px] font-mono">{fmt.money(p.vlr, { compact: true })}</div>
                  <Delta value={p.yoy} />
                </div>
              </div>
            ))}
          </div>
        </div>

        {/* WOW · módulos de inteligência */}
        <div className="panel p-5 relative overflow-hidden">
          <div className="absolute -top-12 -right-12 w-40 h-40 rounded-full bg-[var(--accent-glow)] blur-3xl pointer-events-none" />
          <div className="flex items-center justify-between mb-4 relative">
            <h3 className="font-semibold text-[14px] flex items-center gap-2"><Icon name="brain-circuit" className="w-4 h-4 text-[var(--accent)]" /> Inteligência ativa</h3>
            <span className="badge badge-accent">WOW</span>
          </div>
          <div className="space-y-3 relative">
            <button onClick={() => onNavigate("forecast")} className="w-full text-left p-3 rounded-xl border border-[var(--border)] bg-[var(--panel-2)] hover:border-[var(--accent)] transition-colors">
              <div className="flex items-center justify-between mb-1.5">
                <div className="flex items-center gap-2"><Icon name="line-chart" className="w-3.5 h-3.5 text-[var(--accent)]" /> <span className="text-[12px] font-medium">Previsão</span></div>
                <span className="badge badge-accent text-[9px]">94% conf.</span>
              </div>
              <div className="num text-[18px] font-semibold">{fmt.money(2890000, { compact: true })}</div>
              <div className="text-[10px] text-[var(--fg-muted)]">próximas 4 semanas · horizon 30d</div>
            </button>
            <button onClick={() => onNavigate("ruptura")} className="w-full text-left p-3 rounded-xl border border-[var(--border)] bg-[var(--panel-2)] hover:border-[var(--accent)] transition-colors">
              <div className="flex items-center justify-between mb-1.5">
                <div className="flex items-center gap-2"><Icon name="shield-alert" className="w-3.5 h-3.5 text-[var(--warn)]" /> <span className="text-[12px] font-medium">Ruptura</span></div>
                <span className="badge badge-warn text-[9px]">125 SKUs</span>
              </div>
              <div className="num text-[18px] font-semibold text-[var(--warn)]">{fmt.pct(5.4)}</div>
              <div className="text-[10px] text-[var(--fg-muted)]">faturamento em risco · <span className="num">{fmt.money(210900, { compact: true })}</span></div>
            </button>
          </div>
        </div>
      </div>
    </div>
  );
}

// ============================================================
// VISÃO GERAL
// ============================================================
function VisaoGeralScreen() {
  const [activeKPI, setActiveKPI] = useState("vlr");
  const { period, setPeriod } = usePeriod();
  const [chartMetric, setChartMetric] = useState("valor"); // "valor" | "yoy"
  const [coachmarkOpen, setCoachmarkOpen] = useState(true);
  const [openFilter, setOpenFilter] = useState(null); // qual filtro está aberto
  const [columnsOpen, setColumnsOpen] = useState(false);
  const [filters, setFilters] = useState({
    filial: ["F01", "F02", "F03", "F04", "F05", "F06"],
    regiao: ["Norte", "Sul", "Sudeste", "Centro-Oeste", "Nordeste"],
    grupo: ["Premium", "Médio", "Popular"],
    estacao: ["Verão", "Outono", "Inverno", "Primavera"],
  });
  const [visibleCols, setVisibleCols] = useState({
    vendas: true, yoy: true, mkp: true, pa: false, tkm: false, pm: false,
  });
  const toast = useToast();

  // Período multiplier vem do PeriodContext global (usePeriod)
  const periodMult = usePeriod().mult;

  // Auto-close coachmark após 6s ou primeira interação
  useEffect(() => {
    if (!coachmarkOpen) return;
    const t = setTimeout(() => setCoachmarkOpen(false), 6000);
    return () => clearTimeout(t);
  }, [coachmarkOpen]);

  const KPI_OPTS = [
    { id: "vlr", label: "Vendas", icon: "dollar-sign", format: "money", info: null },
    { id: "qtd", label: "Peças",  icon: "shopping-bag", format: "int" },
    { id: "cli", label: "Clientes", icon: "users", format: "int" },
    { id: "pm",  label: "P.M.", icon: "tag", format: "money", info: GLOSSARY.pm },
    { id: "tkm", label: "T.K.M.", icon: "trending-up", format: "money", info: GLOSSARY.tkm },
    { id: "pa",  label: "P.A.", icon: "bar-chart-3", format: "num", info: GLOSSARY.pa },
    { id: "mkp", label: "MKP", icon: "percent", format: "num", info: GLOSSARY.mkp },
  ];

  const FILTER_DEFS = [
    { id: "filial",  label: "Filial",  options: ["F01", "F02", "F03", "F04", "F05", "F06"] },
    { id: "regiao",  label: "Região",  options: ["Norte", "Sul", "Sudeste", "Centro-Oeste", "Nordeste"] },
    { id: "grupo",   label: "Grupo",   options: ["Premium", "Médio", "Popular"] },
    { id: "estacao", label: "Estação", options: ["Verão", "Outono", "Inverno", "Primavera"] },
  ];
  const COLUMN_DEFS = [
    { id: "vendas", label: "Vendas" },
    { id: "yoy",    label: "YoY" },
    { id: "mkp",    label: "MKP" },
    { id: "pa",     label: "P.A." },
    { id: "tkm",    label: "T.K.M." },
    { id: "pm",     label: "P.M." },
  ];

  const toggleFilterOption = (filterId, opt) => {
    setFilters((s) => {
      const arr = s[filterId];
      return { ...s, [filterId]: arr.includes(opt) ? arr.filter(x => x !== opt) : [...arr, opt] };
    });
  };
  const toggleColumn = (colId) => setVisibleCols((s) => ({ ...s, [colId]: !s[colId] }));
  const filterLabel = (def) => {
    const sel = filters[def.id];
    if (sel.length === def.options.length) return "Todas";
    if (sel.length === 0) return "Nenhuma";
    return `${sel.length} selec.`;
  };

  return (
    <div className="space-y-6">
      {/* Header bar with narrative + period pills */}
      <div className="flex items-end justify-between flex-wrap gap-3">
        <div>
          <div className="text-[11px] uppercase tracking-[0.18em] text-[var(--fg-muted)]">Performance comercial · todas filiais</div>
          <p className="text-[13px] text-[var(--fg-muted)] mt-1.5 max-w-2xl">
            Vendas <span className="font-semibold text-[var(--fg)] num">+12,4%</span> vs. 2025, com{" "}
            <span className="font-semibold text-[var(--fg)]">Filial 01</span> liderando o ranking.
            <span className="text-[var(--neg)] font-semibold ml-1">Filial 05</span> e <span className="text-[var(--neg)] font-semibold">Filial 03</span> negativas — atenção.
          </p>
        </div>
        <PeriodPills value={period} onChange={setPeriod} />
      </div>

      {/* Filter bar — dropdowns funcionais com checkboxes */}
      <div className="panel p-3 flex flex-wrap items-center gap-2 relative">
        <div className="text-[11px] uppercase tracking-wider text-[var(--fg-muted)] mr-2 px-1">Filtros</div>
        {FILTER_DEFS.map((def) => (
          <div key={def.id} className="relative">
            <button
              onClick={() => setOpenFilter(openFilter === def.id ? null : def.id)}
              className={`badge cursor-pointer transition-colors ${openFilter === def.id ? "border-[var(--accent)] text-[var(--accent)]" : "hover:border-[var(--accent)]"}`}
            >
              {def.label}: {filterLabel(def)} <Icon name="chevron-down" className="w-3 h-3 inline" />
            </button>
            {openFilter === def.id && (
              <>
                <div className="fixed inset-0 z-20" onClick={() => setOpenFilter(null)} />
                <div className="absolute top-full left-0 mt-1.5 w-[200px] panel-hi shadow-[var(--shadow-lg)] z-30 fade-in overflow-hidden">
                  <div className="px-3 py-2 border-b border-[var(--border)] flex items-center justify-between">
                    <span className="text-[11px] font-semibold uppercase tracking-wider text-[var(--fg-muted)]">{def.label}</span>
                    <button
                      onClick={() => setFilters((s) => ({ ...s, [def.id]: filters[def.id].length === def.options.length ? [] : [...def.options] }))}
                      className="text-[10px] text-[var(--accent)] hover:underline"
                    >
                      {filters[def.id].length === def.options.length ? "Limpar" : "Todos"}
                    </button>
                  </div>
                  <div className="max-h-[280px] overflow-y-auto py-1">
                    {def.options.map((opt) => {
                      const checked = filters[def.id].includes(opt);
                      return (
                        <button
                          key={opt}
                          onClick={() => toggleFilterOption(def.id, opt)}
                          className="w-full px-3 py-2 flex items-center gap-2.5 hover:bg-[var(--panel-2)] text-left text-[12px]"
                        >
                          <span className={`w-3.5 h-3.5 rounded border flex items-center justify-center transition-colors ${checked ? "bg-[var(--accent)] border-[var(--accent)]" : "border-[var(--border)]"}`}>
                            {checked && <Icon name="check" className="w-2.5 h-2.5 text-white" strokeWidth={3} />}
                          </span>
                          <span>{opt}</span>
                        </button>
                      );
                    })}
                  </div>
                </div>
              </>
            )}
          </div>
        ))}
        <div className="flex-1" />
        <Btn variant="ghost" icon="eraser" onClick={() => {
          setFilters({
            filial: [...FILTER_DEFS[0].options],
            regiao: [...FILTER_DEFS[1].options],
            grupo: [...FILTER_DEFS[2].options],
            estacao: [...FILTER_DEFS[3].options],
          });
          toast.push({ tone: "info", title: "Filtros limpos", desc: "Visualizando todas filiais" });
        }}>Limpar</Btn>
        <Btn icon="download" onClick={() => toast.push({ tone: "success", title: "XLSX exportado com sucesso", desc: "Arquivo salvo em Downloads" })}>Exportar</Btn>
        <Btn variant="primary" icon="play" onClick={() => toast.push({ tone: "success", title: "Filtros aplicados", desc: "Dados atualizados" })}>Aplicar</Btn>
      </div>

      {/* KPI cards + coachmark */}
      <div className="relative">
        {coachmarkOpen && (
          <div className="absolute -top-2 left-0 z-10 fade-in pointer-events-none">
            <div className="inline-flex items-center gap-2 px-3 py-1.5 rounded-full bg-[var(--accent)] text-white text-[11px] font-medium shadow-[var(--shadow-lg)] coachmark-bounce">
              <Icon name="mouse-pointer-click" className="w-3.5 h-3.5" />
              Clique nos cards pra mudar o gráfico abaixo
            </div>
          </div>
        )}
        <div className="grid grid-cols-2 md:grid-cols-4 lg:grid-cols-7 gap-3 mt-8">
          {KPI_OPTS.map((k) => {
            const total = MOCK.storesKPI.reduce((acc, s) => acc + s[k.id], 0) * (k.format === "num" ? 1 : periodMult);
            return (
              <button
                key={k.id}
                onClick={() => { setActiveKPI(k.id); setCoachmarkOpen(false); }}
                className={`kpi text-left transition-all ${activeKPI === k.id ? "border-[var(--accent)] kpi-accent ring-2 ring-[var(--accent)] ring-opacity-30" : "hover:border-[var(--accent)]"}`}
              >
                <div className="flex items-center gap-1.5 text-[10px] uppercase tracking-wider text-[var(--fg-muted)] font-medium">
                  <Icon name={k.icon} className="w-3 h-3" /> <span>{k.label}</span>
                  {k.info && <InfoDot content={<div><div className="font-semibold text-[12px] mb-1">{k.info.title}</div><div className="text-[var(--fg-muted)]">{k.info.desc}</div></div>} />}
                </div>
                <div className={`num font-semibold tracking-tight text-xl ${activeKPI === k.id ? "text-[var(--accent)]" : ""}`}>
                  {k.format === "money" ? fmt.money(total, { compact: true }) : k.format === "int" ? fmt.int(total) : fmt.num(total / MOCK.storesKPI.length, 2)}
                </div>
                <Delta value={[12.4, 8.7, 2.1, 3.8, 6.2, -0.4, 1.1][KPI_OPTS.findIndex(x => x.id === k.id)]} />
              </button>
            );
          })}
        </div>
      </div>

      {/* Chart + Table grid */}
      <div className="grid grid-cols-1 xl:grid-cols-[1.4fr_1fr] gap-5">
        <div className="panel p-5 chart-bg">
          <div className="flex items-center justify-between mb-4">
            <div>
              <h3 className="font-semibold text-[15px]">
                {KPI_OPTS.find(k => k.id === activeKPI).label} por filial {chartMetric === "yoy" && <span className="text-[var(--accent)] text-[12px] ml-1">· %YoY</span>}
              </h3>
              <p className="text-[11px] text-[var(--fg-muted)] mt-0.5">Ordenado por código de loja · cor indica ranking</p>
            </div>
            <Tabs
              items={[{ id: "valor", label: "Valor" }, { id: "yoy", label: "YoY" }]}
              value={chartMetric}
              onChange={setChartMetric}
            />
          </div>
          <VisaoBarChart kpi={activeKPI} metric={chartMetric} periodMult={periodMult} />
        </div>

        <div className="panel p-5">
          <div className="flex items-center justify-between mb-4 relative">
            <h3 className="font-semibold text-[15px]">Detalhamento</h3>
            <div className="relative">
              <Btn variant="ghost" icon="filter" onClick={() => setColumnsOpen((o) => !o)}>Colunas</Btn>
              {columnsOpen && (
                <>
                  <div className="fixed inset-0 z-20" onClick={() => setColumnsOpen(false)} />
                  <div className="absolute right-0 top-full mt-1.5 w-[180px] panel-hi shadow-[var(--shadow-lg)] z-30 fade-in overflow-hidden">
                    <div className="px-3 py-2 border-b border-[var(--border)]">
                      <span className="text-[11px] font-semibold uppercase tracking-wider text-[var(--fg-muted)]">Colunas visíveis</span>
                    </div>
                    <div className="py-1">
                      {COLUMN_DEFS.map((c) => (
                        <button
                          key={c.id}
                          onClick={() => toggleColumn(c.id)}
                          className="w-full px-3 py-2 flex items-center gap-2.5 hover:bg-[var(--panel-2)] text-left text-[12px]"
                        >
                          <span className={`w-3.5 h-3.5 rounded border flex items-center justify-center transition-colors ${visibleCols[c.id] ? "bg-[var(--accent)] border-[var(--accent)]" : "border-[var(--border)]"}`}>
                            {visibleCols[c.id] && <Icon name="check" className="w-2.5 h-2.5 text-white" strokeWidth={3} />}
                          </span>
                          <span>{c.label}</span>
                        </button>
                      ))}
                    </div>
                  </div>
                </>
              )}
            </div>
          </div>
          <div className="overflow-x-auto -mx-5 px-5">
            <table className="dm-table">
              <thead>
                <tr>
                  <th>Filial</th>
                  {visibleCols.vendas && <th className="text-right">Vendas</th>}
                  {visibleCols.yoy && <th className="text-right">YoY</th>}
                  {visibleCols.mkp && <th className="text-right">MKP</th>}
                  {visibleCols.pa && <th className="text-right">P.A.</th>}
                  {visibleCols.tkm && <th className="text-right">T.K.M.</th>}
                  {visibleCols.pm && <th className="text-right">P.M.</th>}
                </tr>
              </thead>
              <tbody>
                {MOCK.storesKPI.map((s) => (
                  <tr key={s.cod}>
                    <td>
                      <div className="flex items-center gap-2">
                        <div className="w-6 h-6 rounded bg-[var(--panel-2)] border border-[var(--border)] flex items-center justify-center text-[10px] font-mono">{String(s.cod).padStart(2, "0")}</div>
                        <span className="text-[12px] font-medium">{s.loja}</span>
                      </div>
                    </td>
                    {visibleCols.vendas && <td className="text-right num font-mono">{fmt.money(s.vlr * periodMult, { compact: true })}</td>}
                    {visibleCols.yoy && <td className="text-right"><Delta value={s.yoy} /></td>}
                    {visibleCols.mkp && <td className="text-right num font-mono">{s.mkp.toFixed(2)}×</td>}
                    {visibleCols.pa && <td className="text-right num font-mono">{s.pa.toFixed(2)}</td>}
                    {visibleCols.tkm && <td className="text-right num font-mono">{fmt.money(s.tkm, { compact: true })}</td>}
                    {visibleCols.pm && <td className="text-right num font-mono">{fmt.money(s.pm, { compact: true })}</td>}
                  </tr>
                ))}
              </tbody>
            </table>
          </div>
        </div>
      </div>

      {/* Weekly comparison */}
      <div className="panel p-5">
        <div className="flex items-center justify-between mb-4">
          <div>
            <h3 className="font-semibold text-[15px]">Evolução semanal · 12 semanas</h3>
            <p className="text-[11px] text-[var(--fg-muted)] mt-0.5">Acumulado por semana — atual vs. ano anterior</p>
          </div>
          <div className="flex items-center gap-4 text-[11px]">
            <span className="flex items-center gap-1.5"><span className="w-3 h-0.5 rounded bg-[var(--accent)]" />Atual</span>
            <span className="flex items-center gap-1.5"><span className="w-3 h-0.5 rounded bg-[var(--accent-2)]" />Ano anterior</span>
          </div>
        </div>
        <LineChart
          labels={MOCK.weekly.map(w => w.label)}
          series={[
            { name: "Atual", data: MOCK.weekly.map(w => w.atual), color: "var(--accent)" },
            { name: "LY", data: MOCK.weekly.map(w => w.prev), color: "var(--accent-2)", dashed: true },
          ]}
          height={240}
        />
      </div>
    </div>
  );
}

let barData_idx_unused = 0; // legacy placeholder, unused

// helper sub-component because of mid-fn JSX const
function VisaoBarChart({ kpi, metric = "valor", periodMult = 1 }) {
  const isYoY = metric === "yoy";
  // Derivar YoY% deterministic por loja+KPI
  const yoyMap = { vlr: [12.4, 8.7, -2.1, 5.6, -6.3, 2.0], qtd: [9.1, 6.4, -3.2, 4.1, -7.8, 1.4], cli: [11.2, 7.3, 0.8, 4.5, -3.1, 2.6], pm: [3.4, 2.1, 1.6, 0.9, -0.4, 1.0], tkm: [5.6, 4.2, 1.1, 3.7, -1.8, 2.3], pa: [-1.2, 0.3, -0.8, 1.4, -2.1, 0.4], mkp: [1.4, 1.1, 0.6, 0.9, -0.3, 0.5] };

  const data = MOCK.storesKPI.map((s, i) => {
    const raw = kpi === "vlr" ? s.vlr : kpi === "qtd" ? s.qtd : kpi === "cli" ? s.cli : kpi === "pm" ? s.pm : kpi === "tkm" ? s.tkm : kpi === "pa" ? s.pa : s.mkp;
    const value = isYoY ? (yoyMap[kpi] || yoyMap.vlr)[i] : raw * (kpi === "vlr" || kpi === "qtd" || kpi === "cli" ? periodMult : 1);
    return { label: s.loja.replace("Filial ", "F"), value };
  });

  // Color by rank (sort by value) ou por sinal (verde positivo / vermelho negativo) se YoY
  let colored;
  if (isYoY) {
    colored = data.map((d) => ({ ...d, color: d.value >= 0 ? "var(--pos)" : "var(--neg)" }));
  } else {
    const sorted = [...data].sort((a, b) => b.value - a.value);
    const colors = ["var(--accent)", "var(--accent-2)", "#7dd3fc", "#a78bfa", "#fbbf24", "#fb7185"];
    colored = data.map((d) => ({ ...d, color: colors[sorted.findIndex(s => s.label === d.label)] || "var(--fg-faint)" }));
  }

  return (
    <BarChart
      data={colored}
      height={260}
      format={(v) => isYoY ? `${v >= 0 ? "+" : ""}${v.toFixed(1)}%` : kpi === "vlr" || kpi === "pm" || kpi === "tkm" ? fmt.money(v, { compact: true, currency: false }) : kpi === "pa" || kpi === "mkp" ? v.toFixed(2) : fmt.int(v)}
    />
  );
}

// ============================================================
// FECHAMENTO DO DIA
// ============================================================
function FechamentoScreen() {
  const [period, setPeriod] = useState("Dia");
  const today = new Date().toLocaleDateString("pt-BR", { weekday: "long", day: "numeric", month: "long" });
  // Multiplicador local: Fechamento opera em escala de dia/semana, não meses
  const fMult = { "Dia": 1, "Ontem": 0.94, "Semana": 6.8 }[period] || 1;
  return (
    <div className="space-y-6">
      <div className="flex items-end justify-between flex-wrap gap-3">
        <div>
          <div className="text-[11px] uppercase tracking-[0.18em] text-[var(--fg-muted)] capitalize">{today}</div>
          <p className="text-[13px] text-[var(--fg-muted)] mt-1.5 max-w-2xl">
            Vendas <span className="font-semibold text-[var(--fg)] num">+18,2%</span> vs. ontem e <span className="font-semibold text-[var(--fg)] num">+12,6%</span> vs. mesmo dia de 2025.
            A meta diária está <span className="font-semibold text-[var(--pos)]">113% atingida</span> com 3 filiais acima do plano.
          </p>
        </div>
        <PeriodPills value={period} onChange={setPeriod} options={["Dia", "Ontem", "Semana"]} />
      </div>

      <div className="panel p-6 relative overflow-hidden glow-accent">
        <div className="absolute -top-20 right-10 w-72 h-72 rounded-full bg-[var(--accent-glow)] blur-3xl pointer-events-none" />
        <div className="relative flex items-end justify-between flex-wrap gap-4">
          <div>
            <div className="flex items-center gap-2 mb-1.5">
              <Icon name="sun-medium" className="w-4 h-4 text-[var(--accent)]" />
              <span className="text-[11px] uppercase tracking-[0.16em] text-[var(--accent)] font-semibold">Fechamento do dia</span>
            </div>
            <div className="text-[20px] font-semibold tracking-tight capitalize">{today}</div>
            <p className="text-[12px] text-[var(--fg-muted)] mt-0.5">Resumo executivo para a direção · atualizado a cada 15 min</p>
          </div>
          <div className="flex items-center gap-3">
            <div className="text-right">
              <div className="text-[11px] text-[var(--fg-muted)]">Meta do dia</div>
              <div className="num text-[20px] font-semibold">{fmt.money(180000, { compact: true })}</div>
            </div>
            <Donut value={114} max={100} color="var(--accent)" label="114%" sub="meta" size={84} />
          </div>
        </div>
      </div>

      <div className="grid grid-cols-2 lg:grid-cols-4 gap-3">
        <KPI label={period === "Semana" ? "Vendas semana" : period === "Ontem" ? "Vendas ontem" : "Vendas hoje"} icon="dollar-sign" value={204120 * fMult} delta={18.2 * (period === "Ontem" ? 0.7 : 1)} compact accent />
        <KPI label="Peças vendidas" icon="shopping-bag" value={Math.round(3812 * fMult)} delta={11.4 * (period === "Ontem" ? 0.8 : 1)} compact format="int" />
        <KPI label="Atendimentos" icon="users" value={Math.round(2104 * fMult)} delta={4.8 * (period === "Ontem" ? 0.6 : 1)} compact format="int" />
        <KPI label="% Meta" icon="target" value={period === "Ontem" ? "97,2%" : period === "Semana" ? "108,7%" : "113,4%"} delta={6.1} compact />
      </div>

      <div className="grid grid-cols-1 lg:grid-cols-2 gap-5">
        <div className="panel p-5">
          <SectionHead title="Filiais · status do dia" icon="store" />
          <div className="space-y-2">
            {MOCK.storesKPI.map((s, i) => {
              const meta = 30000 - i * 1800;
              const real = s.vlr / 7;  // a "daily" sample
              const pct = (real / meta) * 100;
              return (
                <div key={s.cod} className="flex items-center gap-3 px-3 py-2.5 rounded-lg bg-[var(--panel-2)] border border-[var(--border-soft)]">
                  <div className="text-[10px] font-mono w-8 text-[var(--fg-faint)]">{String(s.cod).padStart(2,"0")}</div>
                  <div className="flex-1 min-w-0">
                    <div className="flex items-center gap-2">
                      <span className="text-[12.5px] font-medium truncate">{s.loja}</span>
                      <span className={`badge text-[9px] ${pct >= 100 ? "badge-pos" : pct >= 80 ? "badge-warn" : "badge-neg"}`}>{pct.toFixed(0)}% meta</span>
                    </div>
                    <Progress value={pct} max={120} height={4} color={pct >= 100 ? "var(--pos)" : pct >= 80 ? "var(--warn)" : "var(--neg)"} />
                  </div>
                  <div className="text-right min-w-[88px]">
                    <div className="num text-[12px] font-mono">{fmt.money(real, { compact: true })}</div>
                    <div className="text-[10px] text-[var(--fg-faint)] num">/ {fmt.money(meta, { compact: true })}</div>
                  </div>
                </div>
              );
            })}
          </div>
        </div>

        <div className="panel p-5 chart-bg">
          <SectionHead title="Horário de pico" subtitle="Vendas acumuladas por hora · comparativo dia anterior" icon="clock" />
          {(() => {
            // 14 horas (9h-22h) — gera valores deterministicos pra Hoje e Ontem.
            // Padrão: pico no almoço (12-13h) + pico noturno (18-20h).
            const hours = Array.from({ length: 14 }, (_, i) => 9 + i);
            const peakAt = (h, peak) => Math.exp(-Math.pow((h - peak) / 2.2, 2));
            const valToday = (h) => Math.round(8000 + 12000 * peakAt(h, 13) + 16000 * peakAt(h, 19));
            const valYday  = (h) => Math.round(7000 + 11000 * peakAt(h, 12.5) + 14000 * peakAt(h, 18.5));
            const maxV = Math.max(...hours.map(valToday), ...hours.map(valYday));
            return (
              <div className="mt-3">
                <div className="flex items-end gap-1.5" style={{ height: 220 }}>
                  {hours.map((h, i) => {
                    const today = valToday(h);
                    const yday  = valYday(h);
                    const todayH = (today / maxV) * 100;
                    const ydayH  = (yday  / maxV) * 100;
                    return (
                      <div key={h} className="flex-1 flex flex-col items-center gap-1 min-w-0 group relative">
                        <div className="w-full flex items-end gap-0.5" style={{ height: 200 }}>
                          <div
                            className="flex-1 rounded-t transition-all"
                            style={{ height: `${todayH}%`, background: "var(--accent)", boxShadow: "0 0 8px var(--accent-glow)" }}
                            title={`Hoje · ${h}h: ${fmt.money(today, { compact: true })}`}
                          />
                          <div
                            className="flex-1 rounded-t transition-all"
                            style={{ height: `${ydayH}%`, background: "var(--border)" }}
                            title={`Ontem · ${h}h: ${fmt.money(yday, { compact: true })}`}
                          />
                        </div>
                        <span className="text-[9px] font-mono text-[var(--fg-faint)]">{h}h</span>
                      </div>
                    );
                  })}
                </div>
                <div className="flex items-center justify-between gap-4 text-[11px] mt-3 pt-3 border-t border-[var(--border-soft)]">
                  <div className="flex items-center gap-4">
                    <span className="flex items-center gap-1.5"><span className="w-2.5 h-2.5 rounded bg-[var(--accent)]" />Hoje</span>
                    <span className="flex items-center gap-1.5"><span className="w-2.5 h-2.5 rounded bg-[var(--border)]" />Ontem</span>
                  </div>
                  <div className="text-[10px] text-[var(--fg-muted)] flex items-center gap-1">
                    <Icon name="trending-up" className="w-3 h-3 text-[var(--pos)]" />
                    Pico do dia: <span className="font-semibold text-[var(--fg)] ml-1">19h</span> · <span className="num font-mono ml-1">{fmt.money(Math.max(...hours.map(valToday)), { compact: true })}</span>
                  </div>
                </div>
              </div>
            );
          })()}
        </div>
      </div>

      {/* Vendedoras — ranking visual com gradiente decrescente por posição */}
      <div className="panel p-5">
        <SectionHead title="Top vendedoras de hoje" subtitle="Ranking acumulado · atualizado em tempo real" icon="medal" />
        <div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-5 gap-3">
          {MOCK.sellers.map((v, i) => {
            // Hierarquia visual decrescente: ouro → prata → bronze → cinza → cinza claro
            const podium = [
              { bg: "linear-gradient(180deg, color-mix(in oklch, #FFD700 18%, var(--panel-2)) 0%, var(--panel-2) 100%)", border: "#FFD700", badge: "bg-gradient-to-br from-[#FFD700] to-[#FFA500] text-white border-[#FFA500]", icon: "crown", iconColor: "#FFD700", label: "1º lugar" },
              { bg: "linear-gradient(180deg, color-mix(in oklch, #C0C0C0 14%, var(--panel-2)) 0%, var(--panel-2) 100%)", border: "#C0C0C0", badge: "bg-gradient-to-br from-[#C0C0C0] to-[#9E9E9E] text-white border-[#9E9E9E]", icon: "medal", iconColor: "#9E9E9E", label: "2º lugar" },
              { bg: "linear-gradient(180deg, color-mix(in oklch, #CD7F32 12%, var(--panel-2)) 0%, var(--panel-2) 100%)", border: "#CD7F32", badge: "bg-gradient-to-br from-[#CD7F32] to-[#8B5A2B] text-white border-[#8B5A2B]", icon: "medal", iconColor: "#CD7F32", label: "3º lugar" },
              { bg: "var(--panel-2)", border: "var(--border)", badge: "bg-[var(--panel)] text-[var(--fg-muted)] border-[var(--border)]", icon: null, iconColor: null, label: "4º lugar" },
              { bg: "var(--panel-2)", border: "var(--border)", badge: "bg-[var(--panel)] text-[var(--fg-faint)] border-[var(--border)]", icon: null, iconColor: null, label: "5º lugar" },
            ];
            const p = podium[i] || podium[4];
            const isTop3 = i < 3;
            return (
              <div
                key={v.nome}
                className="p-4 rounded-xl border relative overflow-hidden transition-all hover:scale-[1.02]"
                style={{
                  background: p.bg,
                  borderColor: isTop3 ? p.border : "var(--border)",
                  borderWidth: isTop3 ? "1.5px" : "1px",
                  boxShadow: i === 0 ? `0 8px 24px -8px ${p.border}` : undefined,
                  opacity: i >= 3 ? 0.92 : 1,
                }}
                title={p.label}
              >
                {/* Glow só no 1º lugar */}
                {i === 0 && <div className="absolute -top-6 -right-6 w-20 h-20 rounded-full opacity-50 blur-2xl" style={{ background: p.border }} />}

                <div className="flex items-center gap-2 mb-2 relative">
                  <div className={`w-8 h-8 rounded-lg flex items-center justify-center text-[12px] font-bold border ${p.badge}`}>
                    {i + 1}
                  </div>
                  {p.icon && <Icon name={p.icon} className="w-4 h-4" style={{ color: p.iconColor }} fill={i === 0 ? p.iconColor : "none"} />}
                </div>
                <div className="text-[12.5px] font-medium relative">{v.nome}</div>
                <div className="text-[10px] text-[var(--fg-faint)] relative">{v.loja}</div>
                <div className="mt-3 num text-[18px] font-semibold relative">{fmt.money(v.vlr, { compact: true })}</div>
                <Delta value={v.yoy} />
              </div>
            );
          })}
        </div>
      </div>

      {/* Calendário de meta diária */}
      <MetaCalendar />
    </div>
  );
}

// ============================================================
// MetaCalendar — daily meta achievement heatmap (current month)
// ============================================================
function MetaCalendar() {
  // monthOffset: 0 = mês atual, -1 = mês anterior, -2 = dois meses atrás, etc.
  // Avanço (>) bloqueado em 0 — não simulamos dados futuros.
  const [monthOffset, setMonthOffset] = useState(0);
  const today = new Date();
  const baseYear = today.getFullYear();
  const baseMonth = today.getMonth();
  // Data de referência do mês visualizado (dia 1 evita estouro em meses com 28-31 dias)
  const refDate = new Date(baseYear, baseMonth + monthOffset, 1);
  const year = refDate.getFullYear();
  const month = refDate.getMonth();
  const firstDay = new Date(year, month, 1).getDay();
  const daysInMonth = new Date(year, month + 1, 0).getDate();
  // Em mês passado, todos os dias já são "fechados" (todayDay = último dia do mês)
  const isCurrentMonth = monthOffset === 0;
  const todayDay = isCurrentMonth ? today.getDate() : daysInMonth;

  // Pseudo-random but deterministic meta % per day — varia com monthOffset pra simular meses diferentes
  const seed = monthOffset * 0.4;
  const dailyData = Array.from({ length: daysInMonth }, (_, i) => {
    const day = i + 1;
    const dow = new Date(year, month, day).getDay();
    const isWeekend = dow === 0 || dow === 6;
    if (day > todayDay) return { day, future: true };
    // Higher meta on weekends, mix of beat/miss
    const base = isWeekend ? 110 : 85;
    const wobble = Math.sin((i + seed) * 1.3) * 22 + Math.cos((i + seed) * 0.7) * 18;
    const pct = Math.max(40, Math.min(140, base + wobble));
    const real = (pct / 100) * (isWeekend ? 42000 : 28000);
    return { day, pct, real, isWeekend, future: false };
  });

  const padding = Array(firstDay).fill(null);
  const totalCells = [...padding, ...dailyData];

  // Header stats
  const completed = dailyData.filter(d => !d.future);
  const beat = completed.filter(d => d.pct >= 100).length;
  const missed = completed.filter(d => d.pct < 80).length;
  const totalReal = completed.reduce((acc, d) => acc + (d.real || 0), 0);

  const colorFor = (pct) => {
    if (pct == null) return null;
    if (pct >= 120) return "var(--pos)";
    if (pct >= 100) return "color-mix(in oklch, var(--pos) 70%, var(--bg))";
    if (pct >= 80)  return "var(--warn)";
    return "var(--neg)";
  };

  const monthName = refDate.toLocaleDateString("pt-BR", { month: "long", year: "numeric" });
  const weekdays = ["D", "S", "T", "Q", "Q", "S", "S"];
  const canGoNext = monthOffset < 0;
  const canGoPrev = monthOffset > -11; // limite arbitrário de 11 meses atrás

  return (
    <div className="panel p-5">
      <div className="flex items-center justify-between flex-wrap gap-3 mb-4">
        <div>
          <h3 className="font-semibold text-[15px] flex items-center gap-2 capitalize">
            <Icon name="calendar-days" className="w-4 h-4 text-[var(--accent)]" /> Calendário de meta · {monthName}
          </h3>
          <p className="text-[11px] text-[var(--fg-muted)] mt-0.5">Acompanhamento diário · verde = bateu meta · vermelho = abaixo</p>
        </div>
        <div className="flex items-center gap-4">
          {/* Cluster de navegação: setas + label do mês, agrupados num "pill" pra separar visualmente do Exportar */}
          <div className="flex items-center gap-1 rounded-lg border border-[var(--border)] bg-[var(--panel-2)]/40 p-0.5">
            <button
              onClick={() => canGoPrev && setMonthOffset(monthOffset - 1)}
              disabled={!canGoPrev}
              className="w-7 h-7 rounded-md flex items-center justify-center text-[var(--fg-muted)] hover:text-[var(--fg)] hover:bg-[var(--panel-2)] disabled:opacity-30 disabled:cursor-not-allowed"
              title="Mês anterior"
            >
              <Icon name="chevron-left" className="w-3.5 h-3.5" />
            </button>
            <div className="text-[10.5px] uppercase tracking-wider text-[var(--fg-muted)] font-semibold px-1 min-w-[44px] text-center select-none">
              {monthOffset === 0 ? "Atual" : `${monthOffset}`}
            </div>
            <button
              onClick={() => canGoNext && setMonthOffset(monthOffset + 1)}
              disabled={!canGoNext}
              className="w-7 h-7 rounded-md flex items-center justify-center text-[var(--fg-muted)] hover:text-[var(--fg)] hover:bg-[var(--panel-2)] disabled:opacity-30 disabled:cursor-not-allowed"
              title={canGoNext ? "Próximo mês" : "Sem dados futuros"}
            >
              <Icon name="chevron-right" className="w-3.5 h-3.5" />
            </button>
          </div>
          <Btn icon="download">Exportar</Btn>
        </div>
      </div>

      <div className="grid grid-cols-1 lg:grid-cols-[1.6fr_1fr] gap-5">
        {/* Calendar grid */}
        <div>
          <div className="grid grid-cols-7 gap-1.5">
            {weekdays.map((w, i) => (
              <div key={i} className="text-center text-[10px] uppercase tracking-wider text-[var(--fg-faint)] font-semibold pb-1">{w}</div>
            ))}
            {totalCells.map((cell, i) => {
              if (!cell) return <div key={i} className="aspect-square" />;
              if (cell.future) {
                return (
                  <div key={i} className="aspect-square rounded-md flex items-start justify-start p-1.5 text-[10px] text-[var(--fg-faint)] border border-dashed border-[var(--border)]">
                    {cell.day}
                  </div>
                );
              }
              const color = colorFor(cell.pct);
              const isToday = cell.day === todayDay;
              return (
                <Tooltip
                  key={i}
                  width={220}
                  content={
                    <div>
                      <div className="font-semibold text-[12px] mb-1">{cell.day.toString().padStart(2, "0")}/{(month + 1).toString().padStart(2, "0")}</div>
                      <div className="text-[var(--fg-muted)] space-y-0.5">
                        <div className="flex justify-between gap-3">
                          <span>Realizado:</span><span className="num font-mono font-semibold text-[var(--fg)]">{fmt.money(cell.real, { compact: true })}</span>
                        </div>
                        <div className="flex justify-between gap-3">
                          <span>% da meta:</span><span className="num font-mono font-semibold" style={{ color }}>{cell.pct.toFixed(0)}%</span>
                        </div>
                        <div className="text-[10px] mt-1">{cell.isWeekend ? "Final de semana — meta ampliada" : "Dia útil"}</div>
                      </div>
                    </div>
                  }
                >
                  <div
                    className={`aspect-square rounded-md flex flex-col items-start justify-between p-1.5 border cursor-help relative overflow-hidden transition-transform hover:scale-105 ${isToday ? "ring-2 ring-[var(--accent)]" : ""}`}
                    style={{ borderColor: "var(--border)", background: `color-mix(in oklch, ${color} 18%, var(--panel))` }}
                  >
                    <div className="text-[10px] font-semibold text-[var(--fg)]">{cell.day}</div>
                    <div className="num font-mono text-[9.5px]" style={{ color }}>{cell.pct.toFixed(0)}%</div>
                  </div>
                </Tooltip>
              );
            })}
          </div>
          {/* Legend */}
          <div className="mt-4 pt-3 border-t border-[var(--border)] flex items-center gap-3 flex-wrap text-[10.5px]">
            <span className="text-[var(--fg-muted)] uppercase tracking-wider">Legenda</span>
            <span className="flex items-center gap-1.5"><span className="w-3 h-3 rounded" style={{ background: "color-mix(in oklch, var(--pos) 22%, var(--panel))", border: "1px solid var(--border)" }} />≥ 120%</span>
            <span className="flex items-center gap-1.5"><span className="w-3 h-3 rounded" style={{ background: "color-mix(in oklch, color-mix(in oklch, var(--pos) 70%, var(--bg)) 22%, var(--panel))", border: "1px solid var(--border)" }} />100–119%</span>
            <span className="flex items-center gap-1.5"><span className="w-3 h-3 rounded" style={{ background: "color-mix(in oklch, var(--warn) 22%, var(--panel))", border: "1px solid var(--border)" }} />80–99%</span>
            <span className="flex items-center gap-1.5"><span className="w-3 h-3 rounded" style={{ background: "color-mix(in oklch, var(--neg) 22%, var(--panel))", border: "1px solid var(--border)" }} />&lt; 80%</span>
          </div>
        </div>

        {/* Side stats + narrative */}
        <div className="space-y-3">
          <Narrative tone={beat > missed ? "positive" : "warn"} icon="target" kicker="Resumo do mês">
            <span className="num font-semibold text-[var(--fg)]">{beat} de {completed.length}</span> dias bateram a meta —{" "}
            <span className="num font-semibold text-[var(--fg)]">{((beat / completed.length) * 100).toFixed(0)}%</span> de aderência.
            <span className="num font-semibold text-[var(--neg)] ml-1">{missed}</span> dias abaixo de 80% precisam de plano de recuperação.
          </Narrative>

          <div className="grid grid-cols-2 gap-2">
            <div className="p-3 rounded-lg bg-[var(--panel-2)] border border-[var(--border)]">
              <div className="text-[10px] uppercase tracking-wider text-[var(--fg-muted)]">Realizado · mês</div>
              <div className="num text-[18px] font-semibold mt-0.5">{fmt.money(totalReal, { compact: true })}</div>
              <Delta value={12.8} />
            </div>
            <div className="p-3 rounded-lg bg-[var(--panel-2)] border border-[var(--border)]">
              <div className="text-[10px] uppercase tracking-wider text-[var(--fg-muted)]">Meta restante</div>
              <div className="num text-[18px] font-semibold mt-0.5">{fmt.money(280000, { compact: true })}</div>
              <div className="text-[10px] text-[var(--fg-faint)]">faltam 6 dias úteis</div>
            </div>
            <div className="p-3 rounded-lg bg-[var(--panel-2)] border border-[var(--border)]">
              <div className="text-[10px] uppercase tracking-wider text-[var(--fg-muted)]">Melhor dia</div>
              <div className="num text-[18px] font-semibold mt-0.5 text-[var(--pos)]">142%</div>
              <div className="text-[10px] text-[var(--fg-faint)]">15/06 · sábado</div>
            </div>
            <div className="p-3 rounded-lg bg-[var(--panel-2)] border border-[var(--border)]">
              <div className="text-[10px] uppercase tracking-wider text-[var(--fg-muted)]">Pior dia</div>
              <div className="num text-[18px] font-semibold mt-0.5 text-[var(--neg)]">52%</div>
              <div className="text-[10px] text-[var(--fg-faint)]">04/06 · terça</div>
            </div>
          </div>
        </div>
      </div>
    </div>
  );
}

// ============================================================
// ANÁLISE DE PRODUTOS — with deep drilldown drawer (key differentiator)
// ============================================================
// ============================================================
// CURVA ABC — Pareto / concentration of revenue by SKU classification
// ============================================================
function CurvaABC({ activeCurva = null, onSelectCurva, periodMult = 1 }) {
  const dark = useDarkMode();
  const [scope, setScope] = useState("rede");
  const [coachOpen, setCoachOpen] = useState(true);
  // Coachmark só some no primeiro clique em qualquer curva (sem timeout)
  useEffect(() => { if (activeCurva) setCoachOpen(false); }, [activeCurva]);

  // Proporções por período — Dia/Semana tem mais concentração na Curva A (eventos pontuais
  // amplificam top sellers); YTD se equilibra mais entre B e C (mix mais distribuído ao longo do ano).
  const proportions = periodMult <= 0.3
    ? { a: 70, b: 23, c: 7 }     // Dia/Semana: concentrado em A
    : periodMult >= 5
    ? { a: 54, b: 30, c: 16 }    // YTD: mais distribuído
    : { a: 62, b: 27, c: 11 };   // Mês: padrão
  const totalReceita = periodMult * 2011000; // receita total escalada (1,245M+542k+224k = 2,011M baseline)
  const data = [
    { curva: "A", skus: 248, pctSkus: 20, vendas: Math.round(totalReceita * proportions.a / 100), pctVendas: proportions.a, color: "var(--accent)",   desc: `Top 20% que faz ${proportions.a}% da receita — proteja a qualquer custo.` },
    { curva: "B", skus: 372, pctSkus: 30, vendas: Math.round(totalReceita * proportions.b / 100), pctVendas: proportions.b, color: "var(--accent-2)", desc: `30% do catálogo, ${proportions.b}% da receita — gerencie com regularidade.` },
    { curva: "C", skus: 620, pctSkus: 50, vendas: Math.round(totalReceita * proportions.c / 100), pctVendas: proportions.c, color: "var(--fg-muted)", desc: `Cauda longa — candidatos a phase-out se não complementarem mix.` },
  ];
  const totalVendas = data.reduce((acc, d) => acc + d.vendas, 0);
  const size = 180, stroke = 22, r = (size - stroke) / 2;
  const c = 2 * Math.PI * r;
  let offset = 0;
  const segments = data.map((d) => {
    const dash = (d.pctVendas / 100) * c;
    const seg = { d, dash, offset };
    offset += dash;
    return seg;
  });

  return (
    <div className="panel p-5 relative">
      <div className="flex items-center justify-between mb-4">
        <div>
          <h3 className="font-semibold text-[15px] flex items-center gap-2">
            <Icon name="layers" className="w-4 h-4 text-[var(--accent)]" /> Curva ABC
            <InfoDot content={
              <div>
                <div className="font-semibold text-[12px] mb-1">Classificação ABC (Pareto)</div>
                <div className="text-[var(--fg-muted)]">SKUs ordenados por receita e divididos em 3 grupos: A (top, ~80% da receita), B (médio), C (cauda).</div>
              </div>
            } width={300} />
          </h3>
          <p className="text-[11px] text-[var(--fg-muted)] mt-0.5">Concentração de receita por classe · 1.240 SKUs ativos</p>
        </div>
        <Tabs items={[{ id: "rede", label: "Rede" }, { id: "filial", label: "Filial" }, { id: "grupo", label: "Grupo" }]} value={scope} onChange={setScope} />
      </div>

      <div className="grid grid-cols-1 lg:grid-cols-[auto_1fr] gap-6 items-center">
        {/* Donut + center stat */}
        <div className="relative shrink-0 mx-auto" style={{ width: size, height: size }}>
          <svg width={size} height={size} className="-rotate-90">
            <circle cx={size / 2} cy={size / 2} r={r} stroke="var(--border)" strokeWidth={stroke} fill="none" />
            {segments.map((s, i) => (
              <circle
                key={i}
                cx={size / 2} cy={size / 2} r={r}
                stroke={s.d.color}
                strokeWidth={stroke}
                fill="none"
                strokeDasharray={`${s.dash} ${c - s.dash}`}
                strokeDashoffset={-s.offset}
                style={{ filter: dark ? `drop-shadow(0 0 6px ${s.d.color})` : "none" }}
              />
            ))}
          </svg>
          <div className="absolute inset-0 flex flex-col items-center justify-center">
            <span className="num text-[22px] font-semibold tracking-tight">{fmt.money(totalVendas, { compact: true })}</span>
            <span className="text-[9px] uppercase tracking-wider text-[var(--fg-muted)] mt-0.5">receita total</span>
          </div>
        </div>

        {/* Class breakdown — cards clicaveis filtram a tabela abaixo */}
        <div className="grid grid-cols-1 md:grid-cols-3 gap-3">
          {data.map((d) => {
            const isActive = activeCurva === d.curva;
            return (
              <button
                key={d.curva}
                onClick={() => onSelectCurva && onSelectCurva(isActive ? null : d.curva)}
                className="p-4 rounded-xl border bg-[var(--panel-2)] relative text-left transition-all hover:scale-[1.02] cursor-pointer"
                style={{
                  borderColor: isActive ? d.color : "var(--border)",
                  borderWidth: isActive ? "2px" : "1px",
                  boxShadow: isActive ? `0 0 0 4px color-mix(in oklch, ${d.color} 18%, transparent)` : undefined,
                }}
                title={isActive ? `Limpar filtro Curva ${d.curva}` : `Filtrar produtos da Curva ${d.curva}`}
              >
                {/* Coachmark "clique pra filtrar" — fica acima da Curva A apenas, some no primeiro clique */}
                {d.curva === "A" && coachOpen && (
                  <div className="absolute -top-3 left-1/2 -translate-x-1/2 z-10 pointer-events-none whitespace-nowrap fade-in">
                    <div className="inline-flex items-center gap-1.5 px-2.5 py-1 rounded-full bg-[var(--accent)] text-white text-[10.5px] font-medium shadow-[var(--shadow-lg)] coachmark-bounce">
                      <Icon name="mouse-pointer-click" className="w-3 h-3" />
                      Clique pra filtrar
                    </div>
                  </div>
                )}
                <div className="flex items-center gap-2 mb-2">
                  <div className="w-9 h-9 rounded-lg flex items-center justify-center text-[14px] font-bold" style={{ background: `color-mix(in oklch, ${d.color} 14%, transparent)`, color: d.color, border: `1px solid color-mix(in oklch, ${d.color} 40%, transparent)` }}>
                    {d.curva}
                  </div>
                  <div className="flex-1">
                    <div className="text-[11px] uppercase tracking-wider text-[var(--fg-muted)] flex items-center gap-1">
                      Curva {d.curva}
                      {isActive && <Icon name="check-circle-2" className="w-3 h-3" style={{ color: d.color }} />}
                    </div>
                    <div className="num text-[16px] font-semibold tracking-tight">{fmt.money(d.vendas, { compact: true })}</div>
                  </div>
                </div>
                <div className="grid grid-cols-2 gap-2 pt-2 border-t border-[var(--border-soft)] text-[11px]">
                  <div>
                    <div className="text-[10px] text-[var(--fg-faint)] uppercase">SKUs</div>
                    <div className="num font-mono font-semibold">{fmt.int(d.skus)} <span className="text-[var(--fg-faint)] font-normal">({d.pctSkus}%)</span></div>
                  </div>
                  <div className="text-right">
                    <div className="text-[10px] text-[var(--fg-faint)] uppercase">Da receita</div>
                    <div className="num font-mono font-semibold" style={{ color: d.color }}>{d.pctVendas}%</div>
                  </div>
                </div>
                <div className="mt-2 text-[10.5px] text-[var(--fg-muted)] leading-snug">{d.desc}</div>
                <div className="mt-2 pt-2 border-t border-[var(--border-soft)] text-[10px] text-[var(--accent)] font-medium flex items-center gap-1">
                  <Icon name="mouse-pointer-click" className="w-2.5 h-2.5" />
                  {isActive ? "Filtrando · clique pra limpar" : "Clique pra filtrar tabela"}
                </div>
              </button>
            );
          })}
        </div>
      </div>
    </div>
  );
}

function ProdutosScreen() {
  const [q, setQ] = useState("");
  const [pivot, setPivot] = useState("sku");
  const { period, setPeriod, mult: periodMult } = usePeriod();
  const [openProduct, setOpenProduct] = useState(null);
  const [curvaFilter, setCurvaFilter] = useState(null); // "A" | "B" | "C" | null

  // Pivot define como agrupamos os produtos. SKU = todos, Grupo = agrupa por grupo (subset menor), etc.
  const pivotFilter = (p, i) => {
    if (pivot === "sku") return true;
    if (pivot === "grupo") return i % 3 !== 2; // agrupa, mostra menos linhas
    if (pivot === "marca") return i % 2 === 0;
    if (pivot === "fornecedor") return i < 5;
    return true;
  };

  // Curva A = ranks 1-2 (top), B = 3-5, C = 6-8
  const curvaFilterFn = (p, i) => {
    if (!curvaFilter) return true;
    if (curvaFilter === "A") return p.rank <= 2;
    if (curvaFilter === "B") return p.rank >= 3 && p.rank <= 5;
    if (curvaFilter === "C") return p.rank >= 6;
    return true;
  };

  const filtered = MOCK.topProducts
    .filter((p) => p.nome.toLowerCase().includes(q.toLowerCase()))
    .filter(pivotFilter)
    .filter(curvaFilterFn);

  return (
    <div className="space-y-6">
      {/* Header — narrative + period */}
      <div className="flex items-end justify-between flex-wrap gap-3">
        <div>
          <div className="text-[11px] uppercase tracking-[0.18em] text-[var(--fg-muted)]">Catálogo · 1.240 SKUs ativos</div>
          <p className="text-[13px] text-[var(--fg-muted)] mt-1.5 max-w-2xl">
            <span className="font-semibold text-[var(--fg)] num">+11,4%</span> de peças vendidas hoje vs. 2025.
            Curva A concentra <span className="font-semibold text-[var(--fg)] num">62%</span> da receita —
            <span className="font-semibold text-[var(--warn)] ml-1">125 SKUs</span> em ruptura precisam de reposição imediata.
          </p>
        </div>
        <PeriodPills value={period} onChange={setPeriod} />
      </div>

      {/* Filter + pivot pills */}
      <div className="panel p-4 flex flex-wrap items-center gap-3">
        <div className="relative flex-1 min-w-[240px] max-w-[400px]">
          <Icon name="search" className="w-3.5 h-3.5 absolute left-3 top-1/2 -translate-y-1/2 text-[var(--fg-faint)]" />
          <input value={q} onChange={(e) => setQ(e.target.value)} placeholder="Buscar SKU ou descrição…" className="input pl-9" />
        </div>
        <Tabs items={[
          { id: "sku", label: "SKU", count: 1240 },
          { id: "grupo", label: "Grupo", count: 24 },
          { id: "marca", label: "Marca", count: 38 },
          { id: "fornecedor", label: "Fornecedor", count: 12 },
        ]} value={pivot} onChange={setPivot} />
        <div className="flex-1" />
        <Btn icon="download">Exportar</Btn>
      </div>

      <div className="grid grid-cols-2 md:grid-cols-4 gap-3">
        <KPI label="SKUs ativos" icon="package" value={1240} delta={3.2} compact format="int" />
        <KPI label="Vendidos hoje" icon="zap" value={Math.round(418 * periodMult)} delta={11.4} compact format="int" accent />
        <KPI label="Em ruptura" icon="alert-triangle" value="125" delta={-18.4} compact info={GLOSSARY.ruptura} />
        <KPI label="Top SKU vendas" icon="trophy" value={92340 * periodMult} delta={22.1} compact format="money" />
      </div>

      {/* Curva ABC module — clicavel pra filtrar tabela abaixo */}
      <CurvaABC activeCurva={curvaFilter} onSelectCurva={setCurvaFilter} periodMult={periodMult} />

      <div className="panel overflow-hidden">
        <div className="px-5 py-3 border-b border-[var(--border)] flex items-center justify-between flex-wrap gap-2">
          <div className="flex items-center gap-3">
            <h3 className="font-semibold text-[14px]">Detalhe por {pivot === "sku" ? "SKU" : pivot}</h3>
            {curvaFilter && (
              <button
                onClick={() => setCurvaFilter(null)}
                className="badge badge-accent text-[10px] flex items-center gap-1 hover:opacity-80"
                title="Limpar filtro de curva"
              >
                Curva {curvaFilter}
                <Icon name="x" className="w-2.5 h-2.5" />
              </button>
            )}
            {q && (
              <span className="badge text-[10px]">"{q}" · {filtered.length} resultado{filtered.length !== 1 ? "s" : ""}</span>
            )}
          </div>
          <span className="text-[11px] text-[var(--fg-muted)] flex items-center gap-1">
            <Icon name="mouse-pointer-click" className="w-3 h-3" />
            Clique em uma linha para drilldown
          </span>
        </div>
        <table className="dm-table">
          <thead>
            <tr>
              <th className="w-[40px]">#</th>
              <th>Produto</th>
              <th>Grupo</th>
              <th className="text-right">Vendas</th>
              <th className="text-right">Peças</th>
              <th className="text-right">YoY</th>
              <th className="text-right">MKP</th>
              <th className="text-right">Cobertura</th>
              <th className="w-10"></th>
            </tr>
          </thead>
          <tbody>
            {filtered.map((p, i) => (
              <tr key={p.nome} onClick={() => setOpenProduct(p)} className="cursor-pointer">
                <td className="num font-mono text-[var(--fg-faint)]">{(p.rank).toString().padStart(2,"0")}</td>
                <td>
                  <div className="flex items-center gap-2.5">
                    <div className="w-9 h-9 rounded-md placeholder-stripes shrink-0" />
                    <div className="min-w-0">
                      <div className="text-[12.5px] font-medium truncate">{p.nome}</div>
                      <div className="text-[10px] font-mono text-[var(--fg-faint)]">SKU · {1000 + i * 137}</div>
                    </div>
                  </div>
                </td>
                <td><span className="badge">{PH.groups[i % PH.groups.length]}</span></td>
                <td className="text-right num font-mono">{fmt.money(p.vlr * periodMult, { compact: true })}</td>
                <td className="text-right num font-mono">{fmt.int(Math.round(p.qtd * periodMult))}</td>
                <td className="text-right"><Delta value={p.yoy} /></td>
                <td className="text-right num font-mono">{(2.2 + i * 0.08).toFixed(2)}×</td>
                <td className="text-right num font-mono">
                  <span className={[12, 18, 24, 32, 42, 28, 8, 14][i % 8] < 20 ? "text-[var(--warn)]" : "text-[var(--fg-muted)]"}>
                    {[12, 18, 24, 32, 42, 28, 8, 14][i % 8]}d
                  </span>
                </td>
                <td><Icon name="chevron-right" className="w-4 h-4 text-[var(--fg-faint)]" /></td>
              </tr>
            ))}
          </tbody>
        </table>
      </div>

      {/* Drilldown drawer */}
      {openProduct && <ProductDrilldown product={openProduct} onClose={() => setOpenProduct(null)} />}
    </div>
  );
}

// ============================================================
// PRODUCT DRILLDOWN — slide-in drawer with full breakdown
// ============================================================
function ProductDrilldown({ product, onClose }) {
  const toast = useToast();
  const [byStoreView, setByStoreView] = useState("vendas"); // vendas | estoque | cob
  useEffect(() => {
    const onEsc = (e) => e.key === "Escape" && onClose();
    document.addEventListener("keydown", onEsc);
    return () => document.removeEventListener("keydown", onEsc);
  }, [onClose]);

  // Generated mock breakdowns for this product
  const sku = product.nome.split(" · ")[0];
  const name = product.nome.split(" · ")[1] || product.nome;
  const trend12 = Array.from({ length: 12 }, (_, i) => 4200 + i * 380 + Math.sin(i * 1.1) * 1800);
  const trendLY = Array.from({ length: 12 }, (_, i) => 3600 + i * 290 + Math.sin(i * 1.3 + 0.5) * 1600);
  const months = ["jul", "ago", "set", "out", "nov", "dez", "jan", "fev", "mar", "abr", "mai", "jun"];

  const byStore = PH.stores.slice(0, 6).map((s, i) => ({
    loja: s,
    vendas: 18400 - i * 2200,
    pecas: 64 - i * 7,
    estoque: [12, 28, 48, 8, 64, 22][i],
    cobertura: [9, 18, 32, 6, 42, 14][i],
    yoy: [22.4, 14.2, 8.6, -3.1, 18.4, 4.2][i],
  }));

  const totalVendas = byStore.reduce((acc, s) => acc + s.vendas, 0);
  const totalPecas  = byStore.reduce((acc, s) => acc + s.pecas, 0);
  const totalEstoque= byStore.reduce((acc, s) => acc + s.estoque, 0);

  const bySize = [
    { tam: "PP", v: 12, pct: 8 },
    { tam: "P",  v: 38, pct: 25 },
    { tam: "M",  v: 56, pct: 38 },
    { tam: "G",  v: 32, pct: 22 },
    { tam: "GG", v: 11, pct: 7 },
  ];

  const byColor = [
    { cor: "Preto",   pct: 42, color: "#0a0d18" },
    { cor: "Branco",  pct: 28, color: "#f4f4f5" },
    { cor: "Marinho", pct: 18, color: "#1e3a8a" },
    { cor: "Bordô",   pct: 8,  color: "#9f1239" },
    { cor: "Outras",  pct: 4,  color: "var(--fg-faint)" },
  ];

  const topSellers = ["Operadora A", "Operadora C", "Operadora B"].map((n, i) => ({
    nome: n, loja: PH.stores[i % 4], vendas: 8400 - i * 1600, pecas: 18 - i * 3,
  }));

  const orderHistory = [
    { tipo: "Recebimento", data: "12/06/2026", qtd: 120, status: "concluído", cor: "var(--pos)" },
    { tipo: "Pedido compra", data: "05/06/2026", qtd: 180, status: "produção", cor: "var(--accent-2)" },
    { tipo: "Recebimento", data: "22/05/2026", qtd: 80, status: "concluído", cor: "var(--pos)" },
    { tipo: "Pedido compra", data: "15/05/2026", qtd: 80, status: "concluído", cor: "var(--pos)" },
    { tipo: "Recebimento", data: "08/05/2026", qtd: 60, status: "concluído", cor: "var(--pos)" },
  ];

  return (
    <div className="fixed inset-0 z-50 flex justify-end fade-in" onClick={onClose}>
      <div className="absolute inset-0 bg-black/40 backdrop-blur-sm" />
      <div onClick={(e) => e.stopPropagation()} className="relative w-full max-w-[920px] h-full bg-[var(--bg)] border-l border-[var(--border)] shadow-[var(--shadow-lg)] flex flex-col overflow-hidden" style={{ animation: "slideUp .35s cubic-bezier(.2,.8,.2,1)" }}>
        {/* Header */}
        <div className="shrink-0 px-6 py-4 border-b border-[var(--border)] flex items-center gap-4 bg-[var(--panel)]">
          <button onClick={onClose} className="w-9 h-9 rounded-lg border border-[var(--border)] hover:bg-[var(--panel-2)] flex items-center justify-center">
            <Icon name="x" className="w-4 h-4" />
          </button>
          <div className="w-12 h-12 rounded-lg placeholder-stripes shrink-0" />
          <div className="flex-1 min-w-0">
            <div className="flex items-center gap-2">
              <span className="font-mono text-[11px] text-[var(--fg-faint)]">{sku}</span>
              <span className="badge">{PH.groups[product.rank % PH.groups.length]}</span>
              <span className="badge">Fornecedor 0{(product.rank % 4) + 1}</span>
            </div>
            <h2 className="text-[18px] font-semibold tracking-tight mt-0.5">{name}</h2>
          </div>
          <div className="flex items-center gap-2">
            <Btn
              variant="ghost"
              icon="image"
              onClick={() => toast.push({ tone: "info", title: "Galeria de fotos", desc: `${sku} · 12 imagens disponíveis · abrindo viewer…` })}
            >
              Fotos
            </Btn>
            <Btn
              icon="file-plus-2"
              onClick={() => toast.push({ tone: "success", title: "Pedido em rascunho criado", desc: `${sku} · adicionado ao carrinho de compras` })}
            >
              Criar pedido
            </Btn>
            <Btn
              variant="primary"
              icon="bell"
              onClick={() => toast.push({ tone: "success", title: "Alerta configurado", desc: `Você será notificado quando ${sku} cair abaixo de 7 dias de cobertura` })}
            >
              Alerta personalizado
            </Btn>
          </div>
        </div>

        {/* Body */}
        <div className="flex-1 overflow-y-auto p-6 space-y-5">
          {/* Storytelling header — YoY narrative */}
          <div className="panel p-4 chart-bg">
            <div className="flex items-center gap-2 mb-1.5">
              <span className="neon-dot" />
              <span className="text-[10px] uppercase tracking-[0.18em] text-[var(--accent)] font-semibold">Resumo · ano vs. ano</span>
            </div>
            <p className="text-[13px] text-[var(--fg-muted)] leading-relaxed max-w-3xl">
              <span className="font-semibold text-[var(--fg)] num">{name}</span> vendeu{" "}
              <span className="font-semibold text-[var(--fg)] num">{fmt.money(product.vlr)}</span> nos últimos 30 dias —{" "}
              <span className={`font-semibold num ${product.yoy >= 0 ? "text-[var(--pos)]" : "text-[var(--neg)]"}`}>{product.yoy > 0 ? "+" : ""}{product.yoy.toFixed(1)}%</span>{" "}
              vs. o mesmo período de 2025. Concentração:{" "}
              <span className="font-semibold text-[var(--fg)]">Filial 01</span> responde por <span className="num font-semibold">31%</span> do volume.
              Cobertura média da rede: <span className="num font-semibold">18 dias</span>, com{" "}
              <span className="text-[var(--warn)] font-semibold">2 filiais críticas</span> abaixo de 10d.
            </p>
          </div>

          {/* KPI strip */}
          <div className="grid grid-cols-2 md:grid-cols-4 gap-3">
            <KPI label="Vendas · 30d"  icon="dollar-sign" value={product.vlr}  delta={product.yoy} compact accent />
            <KPI label="Peças vendidas" icon="shopping-bag" value={product.qtd} delta={product.yoy - 2.4} compact format="int" />
            <KPI label="MKP"           icon="percent" value={`${(2.4 + product.rank * 0.05).toFixed(2)}×`} delta={1.6} compact />
            <KPI label="Estoque rede"  icon="package" value={totalEstoque} delta={-8.2} compact format="int" />
          </div>

          {/* Drilldown tabs */}
          <DrilldownTabs />

          {/* Trend chart 12m */}
          <div className="panel p-5">
            <div className="flex items-center justify-between mb-3">
              <div>
                <h3 className="font-semibold text-[14px]">Evolução · 12 meses</h3>
                <p className="text-[11px] text-[var(--fg-muted)] mt-0.5">Vendas mensais · atual vs. 2025</p>
              </div>
              <div className="flex items-center gap-3 text-[11px]">
                <span className="flex items-center gap-1.5"><span className="w-3 h-0.5 bg-[var(--accent)]" />2026</span>
                <span className="flex items-center gap-1.5"><span className="w-3 h-0.5 bg-[var(--accent-2)]" style={{ borderTop: "1px dashed var(--accent-2)" }} />2025</span>
              </div>
            </div>
            <LineChart
              labels={months}
              series={[
                { name: "Atual", data: trend12, color: "var(--accent)" },
                { name: "LY", data: trendLY, color: "var(--accent-2)", dashed: true },
              ]}
              height={200}
            />
          </div>

          {/* Breakdown by store */}
          <div className="panel overflow-hidden">
            <div className="px-5 py-3.5 border-b border-[var(--border)] flex items-center justify-between">
              <div className="flex items-center gap-2">
                <Icon name="store" className="w-4 h-4 text-[var(--fg-muted)]" />
                <h3 className="font-semibold text-[14px]">Por filial</h3>
              </div>
              <Tabs items={[{ id: "vendas", label: "Vendas" }, { id: "estoque", label: "Estoque" }, { id: "cob", label: "Cobertura" }]} value={byStoreView} onChange={setByStoreView} />
            </div>
            <table className="dm-table">
              <thead>
                <tr>
                  <th>Filial</th>
                  {byStoreView === "vendas" && <>
                    <th className="text-right">Vendas</th>
                    <th className="text-right">Peças</th>
                    <th>Participação</th>
                    <th className="text-right">YoY</th>
                  </>}
                  {byStoreView === "estoque" && <>
                    <th className="text-right">Estoque atual</th>
                    <th className="text-right">Mínimo</th>
                    <th>Saturação</th>
                    <th className="text-right">Última entrada</th>
                  </>}
                  {byStoreView === "cob" && <>
                    <th className="text-right">Cobertura</th>
                    <th className="text-right">Vendas 30d</th>
                    <th>Saúde</th>
                    <th className="text-right">Sugestão</th>
                  </>}
                </tr>
              </thead>
              <tbody>
                {byStore.map((s) => {
                  const pct = (s.vendas / totalVendas) * 100;
                  const minimo = Math.round(s.pecas * 0.4);
                  const saturacao = Math.min(100, (s.estoque / (minimo * 2)) * 100);
                  const ultimaEntrada = ["8d", "12d", "5d", "22d", "3d", "15d"][PH.stores.indexOf(s.loja) % 6] || "—";
                  return (
                    <tr key={s.loja}>
                      <td className="text-[12.5px] font-medium">{s.loja}</td>
                      {byStoreView === "vendas" && <>
                        <td className="text-right num font-mono">{fmt.money(s.vendas, { compact: true })}</td>
                        <td className="text-right num font-mono">{s.pecas}</td>
                        <td className="min-w-[160px]">
                          <div className="flex items-center gap-2">
                            <div className="flex-1"><Progress value={pct} max={40} height={4} color="var(--accent)" /></div>
                            <span className="num font-mono text-[11px] w-10 text-right">{pct.toFixed(0)}%</span>
                          </div>
                        </td>
                        <td className="text-right"><Delta value={s.yoy} /></td>
                      </>}
                      {byStoreView === "estoque" && <>
                        <td className="text-right num font-mono">{s.estoque}</td>
                        <td className="text-right num font-mono text-[var(--fg-muted)]">{minimo}</td>
                        <td className="min-w-[160px]">
                          <div className="flex items-center gap-2">
                            <div className="flex-1"><Progress value={saturacao} max={100} height={4} color={saturacao < 50 ? "var(--warn)" : "var(--pos)"} /></div>
                            <span className="num font-mono text-[11px] w-10 text-right">{saturacao.toFixed(0)}%</span>
                          </div>
                        </td>
                        <td className="text-right num font-mono text-[var(--fg-muted)]">{ultimaEntrada}</td>
                      </>}
                      {byStoreView === "cob" && <>
                        <td className="text-right num font-mono">
                          <span style={{ color: s.cobertura < 14 ? "var(--warn)" : "var(--fg)" }}>{s.cobertura}d</span>
                        </td>
                        <td className="text-right num font-mono">{fmt.money(s.vendas, { compact: true })}</td>
                        <td className="min-w-[160px]">
                          <span className={`badge ${s.cobertura < 7 ? "" : ""}`} style={{ background: s.cobertura < 7 ? "color-mix(in oklch, var(--neg) 14%, transparent)" : s.cobertura < 14 ? "color-mix(in oklch, var(--warn) 14%, transparent)" : "color-mix(in oklch, var(--pos) 14%, transparent)", color: s.cobertura < 7 ? "var(--neg)" : s.cobertura < 14 ? "var(--warn)" : "var(--pos)" }}>
                            {s.cobertura < 7 ? "Crítica" : s.cobertura < 14 ? "Atenção" : "Saudável"}
                          </span>
                        </td>
                        <td className="text-right text-[11px]">
                          {s.cobertura < 14 ? <span className="text-[var(--accent)] font-medium">Repor</span> : <span className="text-[var(--fg-faint)]">OK</span>}
                        </td>
                      </>}
                    </tr>
                  );
                })}
                <tr style={{ background: "var(--panel-2)", fontWeight: 600 }}>
                  <td className="text-[11px] uppercase tracking-wider text-[var(--fg-muted)]">Total</td>
                  <td className="text-right num font-mono">{fmt.money(totalVendas, { compact: true })}</td>
                  <td className="text-right num font-mono">{totalPecas}</td>
                  <td></td>
                  <td className="text-right"><Delta value={product.yoy} /></td>
                  <td className="text-right num font-mono">{totalEstoque}</td>
                  <td></td>
                </tr>
              </tbody>
            </table>
          </div>

          {/* Side-by-side: by size + by color + top sellers */}
          <div className="grid grid-cols-1 lg:grid-cols-3 gap-5">
            <div className="panel p-5">
              <h3 className="font-semibold text-[13px] flex items-center gap-2 mb-3"><Icon name="ruler" className="w-4 h-4 text-[var(--fg-muted)]" /> Por tamanho</h3>
              <div className="space-y-2">
                {bySize.map((s) => (
                  <div key={s.tam} className="flex items-center gap-2">
                    <span className="w-7 text-[11px] font-mono font-semibold">{s.tam}</span>
                    <div className="flex-1"><Progress value={s.pct} max={40} height={6} color="var(--accent)" /></div>
                    <span className="num font-mono text-[11px] w-10 text-right">{s.pct}%</span>
                    <span className="text-[10px] text-[var(--fg-faint)] w-8 text-right">{s.v}pç</span>
                  </div>
                ))}
              </div>
            </div>

            <div className="panel p-5">
              <h3 className="font-semibold text-[13px] flex items-center gap-2 mb-3"><Icon name="palette" className="w-4 h-4 text-[var(--fg-muted)]" /> Por cor</h3>
              <div className="flex h-3 rounded-full overflow-hidden border border-[var(--border)] mb-3">
                {byColor.map((c) => (
                  <div key={c.cor} style={{ width: `${c.pct}%`, background: c.color }} title={c.cor} />
                ))}
              </div>
              <div className="space-y-1.5">
                {byColor.map((c) => (
                  <div key={c.cor} className="flex items-center gap-2 text-[11.5px]">
                    <div className="w-3 h-3 rounded-sm border border-[var(--border)]" style={{ background: c.color }} />
                    <span className="flex-1">{c.cor}</span>
                    <span className="num font-mono">{c.pct}%</span>
                  </div>
                ))}
              </div>
            </div>

            <div className="panel p-5">
              <h3 className="font-semibold text-[13px] flex items-center gap-2 mb-3"><Icon name="users" className="w-4 h-4 text-[var(--fg-muted)]" /> Top vendedoras</h3>
              <div className="space-y-2">
                {topSellers.map((v, i) => (
                  <div key={v.nome} className="flex items-center gap-2.5">
                    <div className={`w-6 h-6 rounded-md flex items-center justify-center text-[10px] font-bold ${i === 0 ? "bg-[var(--accent-soft)] border border-[var(--accent)] text-[var(--accent)]" : "bg-[var(--panel-2)] border border-[var(--border)] text-[var(--fg-muted)]"}`}>{i + 1}</div>
                    <div className="flex-1 min-w-0">
                      <div className="text-[11.5px] font-medium truncate">{v.nome}</div>
                      <div className="text-[10px] text-[var(--fg-faint)]">{v.loja}</div>
                    </div>
                    <div className="text-right">
                      <div className="num font-mono text-[11px] font-semibold">{fmt.money(v.vendas, { compact: true })}</div>
                      <div className="text-[10px] text-[var(--fg-faint)] num">{v.pecas} pç</div>
                    </div>
                  </div>
                ))}
              </div>
            </div>
          </div>

          {/* Order history */}
          <div className="panel p-5">
            <h3 className="font-semibold text-[14px] flex items-center gap-2 mb-4"><Icon name="history" className="w-4 h-4 text-[var(--fg-muted)]" /> Histórico de movimentação</h3>
            <div className="space-y-2">
              {orderHistory.map((h, i) => (
                <div key={i} className="flex items-center gap-3 px-3 py-2.5 rounded-lg bg-[var(--panel-2)] border border-[var(--border-soft)]">
                  <div className="w-1 h-8 rounded-full" style={{ background: h.cor }} />
                  <Icon name={h.tipo === "Recebimento" ? "package-check" : "shopping-cart"} className="w-4 h-4 text-[var(--fg-muted)]" />
                  <div className="flex-1">
                    <div className="text-[12.5px] font-medium">{h.tipo}</div>
                    <div className="text-[10px] text-[var(--fg-faint)] num font-mono">{h.data}</div>
                  </div>
                  <div className="text-right">
                    <div className="num text-[12.5px] font-mono font-semibold">{h.qtd} pç</div>
                    <span className="badge text-[9px]" style={{ color: h.cor, borderColor: `color-mix(in oklch, ${h.cor} 40%, transparent)`, background: `color-mix(in oklch, ${h.cor} 12%, transparent)` }}>{h.status}</span>
                  </div>
                </div>
              ))}
            </div>
          </div>
        </div>
      </div>
    </div>
  );
}

// ============================================================
// COMPARATIVO POR LOJA — tabela completa cross-filial (Vendas, TKM, PA, MKP, Peças, YoY, Cobertura)
// ============================================================
function ComparativoLojasScreen() {
  const { period, setPeriod, mult: periodMult } = usePeriod();
  const [sortBy, setSortBy] = useState("vlr");
  const [sortDir, setSortDir] = useState("desc"); // "asc" | "desc"
  const [regiaoFilter, setRegiaoFilter] = useState("Todas");
  const toast = useToast();

  // Atribuição determinística de região por filial (espelha o que o cliente esperaria ver)
  const regiaoMap = { 0: "Sudeste", 1: "Sudeste", 2: "Sul", 3: "Sul", 4: "Nordeste", 5: "Centro-Oeste" };
  const REGIOES = ["Todas", "Sudeste", "Sul", "Nordeste", "Centro-Oeste"];

  // Dataset enriquecido — coverage vem de MOCK.coverage (mesma ordem de filiais)
  const dataset = MOCK.storesKPI.map((s, i) => {
    const cov = MOCK.coverage[i] || {};
    return {
      cod: s.cod,
      loja: s.loja,
      regiao: regiaoMap[i] || "Sudeste",
      vlr: s.vlr * periodMult,
      qtd: Math.round(s.qtd * periodMult),
      tkm: s.tkm,
      pa: s.pa,
      mkp: s.mkp,
      yoy: s.yoy,
      cobertura: cov.coberturaDias ?? 30,
      rupturaPct: cov.rupturaPct ?? 0,
      meta: s.vlr * periodMult * (0.85 + (i % 3) * 0.08), // meta deterministic
    };
  });

  const filtered = regiaoFilter === "Todas" ? dataset : dataset.filter(d => d.regiao === regiaoFilter);
  const sorted = [...filtered].sort((a, b) => {
    const av = a[sortBy], bv = b[sortBy];
    if (av === bv) return 0;
    const dir = sortDir === "asc" ? 1 : -1;
    return av < bv ? -dir : dir;
  });

  const toggleSort = (col) => {
    if (sortBy === col) {
      setSortDir(d => d === "asc" ? "desc" : "asc");
    } else {
      setSortBy(col);
      setSortDir("desc");
    }
  };

  // KPI strip — agregados sobre o filtered
  const totalRede = filtered.reduce((acc, d) => acc + d.vlr, 0);
  const melhor = filtered.reduce((best, d) => (best == null || d.yoy > best.yoy) ? d : best, null);
  const pior = filtered.reduce((worst, d) => (worst == null || d.yoy < worst.yoy) ? d : worst, null);
  const batendoMeta = filtered.filter(d => d.vlr >= d.meta).length;
  const pctBatendo = filtered.length ? (batendoMeta / filtered.length) * 100 : 0;

  // YoY heatmap — interpolar entre red (-10%) e green (+15%)
  const yoyBg = (yoy) => {
    if (yoy >= 10) return "color-mix(in oklch, var(--pos) 28%, var(--panel))";
    if (yoy >= 5)  return "color-mix(in oklch, var(--pos) 18%, var(--panel))";
    if (yoy >= 0)  return "color-mix(in oklch, var(--pos) 8%, var(--panel))";
    if (yoy >= -5) return "color-mix(in oklch, var(--neg) 12%, var(--panel))";
    return "color-mix(in oklch, var(--neg) 24%, var(--panel))";
  };
  const yoyFg = (yoy) => yoy >= 0 ? "var(--pos)" : "var(--neg)";

  // Cobertura color — <14d crítico, <30d atenção, >=30 ok
  const coberturaColor = (d) => {
    if (d < 14) return "var(--neg)";
    if (d < 30) return "var(--warn)";
    return "var(--fg-muted)";
  };

  const SortHead = ({ col, children, align = "right" }) => (
    <th
      onClick={() => toggleSort(col)}
      className={`text-${align} text-[10.5px] uppercase tracking-wider text-[var(--fg-muted)] font-semibold py-2.5 px-2 cursor-pointer hover:text-[var(--fg)] select-none`}
    >
      <span className="inline-flex items-center gap-1">
        {children}
        {sortBy === col && <Icon name={sortDir === "asc" ? "chevron-up" : "chevron-down"} className="w-3 h-3 text-[var(--accent)]" />}
      </span>
    </th>
  );

  return (
    <div className="space-y-6">
      {/* Header */}
      <div className="flex items-end justify-between flex-wrap gap-3">
        <div>
          <div className="text-[11px] uppercase tracking-[0.18em] text-[var(--fg-muted)]">Inteligência · cross-filial</div>
          <p className="text-[13px] text-[var(--fg-muted)] mt-1.5 max-w-2xl">
            Compare <span className="font-semibold text-[var(--fg)]">todas as métricas</span> entre filiais lado a lado — ordene por qualquer coluna pra achar quem está puxando ou segurando a rede.
          </p>
        </div>
        <PeriodPills value={period} onChange={setPeriod} />
      </div>

      {/* KPI strip */}
      <div className="grid grid-cols-2 lg:grid-cols-4 gap-3">
        <KPI label="Vendas rede" icon="dollar-sign" value={totalRede} delta={9.6} compact accent />
        <div className="panel p-4">
          <div className="text-[10.5px] uppercase tracking-wider text-[var(--fg-muted)] mb-1.5 flex items-center gap-1.5">
            <Icon name="trending-up" className="w-3.5 h-3.5 text-[var(--pos)]" />
            Melhor filial
          </div>
          <div className="text-[15px] font-semibold">{melhor?.loja || "—"}</div>
          <div className="num text-[12px] text-[var(--pos)] mt-0.5">YoY {melhor ? `+${melhor.yoy.toFixed(1)}%` : "—"}</div>
        </div>
        <div className="panel p-4">
          <div className="text-[10.5px] uppercase tracking-wider text-[var(--fg-muted)] mb-1.5 flex items-center gap-1.5">
            <Icon name="trending-down" className="w-3.5 h-3.5 text-[var(--neg)]" />
            Pior filial
          </div>
          <div className="text-[15px] font-semibold">{pior?.loja || "—"}</div>
          <div className="num text-[12px] text-[var(--neg)] mt-0.5">YoY {pior ? `${pior.yoy.toFixed(1)}%` : "—"}</div>
        </div>
        <div className="panel p-4">
          <div className="text-[10.5px] uppercase tracking-wider text-[var(--fg-muted)] mb-1.5 flex items-center gap-1.5">
            <Icon name="target" className="w-3.5 h-3.5 text-[var(--accent)]" />
            Batendo meta
          </div>
          <div className="num text-[18px] font-semibold">
            {batendoMeta}<span className="text-[12px] text-[var(--fg-muted)] ml-1">/ {filtered.length}</span>
          </div>
          <div className="text-[11px] text-[var(--fg-muted)] mt-0.5">{pctBatendo.toFixed(0)}% da rede</div>
        </div>
      </div>

      {/* Filter bar */}
      <div className="panel p-3 flex flex-wrap items-center gap-2">
        <div className="text-[11px] uppercase tracking-wider text-[var(--fg-muted)] mr-2 px-1">Região</div>
        {REGIOES.map((r) => (
          <button
            key={r}
            onClick={() => setRegiaoFilter(r)}
            className={`badge cursor-pointer transition-colors ${regiaoFilter === r ? "border-[var(--accent)] text-[var(--accent)] bg-[var(--accent-soft)]" : "hover:border-[var(--accent)]"}`}
          >
            {r}
          </button>
        ))}
        <div className="ml-auto flex items-center gap-2">
          <span className="text-[11px] text-[var(--fg-muted)]">{filtered.length} filiais</span>
          <Btn icon="download">Exportar</Btn>
        </div>
      </div>

      {/* Tabela comparativa */}
      <div className="panel p-0 overflow-hidden">
        <div className="overflow-x-auto">
          <table className="w-full text-[12px]">
            <thead className="sticky top-0 bg-[var(--panel-2)] border-b border-[var(--border)] z-10">
              <tr>
                <SortHead col="loja" align="left">Filial</SortHead>
                <SortHead col="regiao" align="left">Região</SortHead>
                <SortHead col="vlr">Vendas</SortHead>
                <SortHead col="qtd">Peças</SortHead>
                <SortHead col="tkm">TKM</SortHead>
                <SortHead col="pa">PA</SortHead>
                <SortHead col="mkp">MKP</SortHead>
                <SortHead col="yoy">YoY</SortHead>
                <SortHead col="cobertura">Cobertura</SortHead>
              </tr>
            </thead>
            <tbody>
              {sorted.map((d, idx) => (
                <tr key={d.cod} className="border-b border-[var(--border)] last:border-0 hover:bg-[var(--panel-2)]/40">
                  <td className="py-2.5 px-2">
                    <div className="flex items-center gap-2">
                      <div className="w-6 h-6 rounded-md bg-[var(--accent-soft)] text-[var(--accent)] flex items-center justify-center text-[10px] font-semibold">{d.cod.toString().padStart(2, "0")}</div>
                      <span className="font-medium">{d.loja}</span>
                    </div>
                  </td>
                  <td className="py-2.5 px-2 text-[11.5px] text-[var(--fg-muted)]">{d.regiao}</td>
                  <td className="py-2.5 px-2 text-right num font-mono">{fmt.money(d.vlr, { compact: true })}</td>
                  <td className="py-2.5 px-2 text-right num font-mono">{fmt.int(d.qtd)}</td>
                  <td className="py-2.5 px-2 text-right num font-mono">{fmt.money(d.tkm, { compact: true })}</td>
                  <td className="py-2.5 px-2 text-right num font-mono">{d.pa.toFixed(2)}</td>
                  <td className="py-2.5 px-2 text-right num font-mono">{d.mkp.toFixed(2)}×</td>
                  <td className="py-2.5 px-2 text-right">
                    <span
                      className="inline-block px-2 py-0.5 rounded-md num font-mono font-semibold text-[11.5px]"
                      style={{ background: yoyBg(d.yoy), color: yoyFg(d.yoy), border: "1px solid color-mix(in oklch, " + yoyFg(d.yoy) + " 25%, transparent)" }}
                    >
                      {d.yoy >= 0 ? "+" : ""}{d.yoy.toFixed(1)}%
                    </span>
                  </td>
                  <td className="py-2.5 px-2 text-right">
                    <span className="num font-mono" style={{ color: coberturaColor(d.cobertura) }}>{d.cobertura}d</span>
                  </td>
                </tr>
              ))}
            </tbody>
          </table>
        </div>
        {/* Footer da tabela */}
        <div className="px-4 py-2.5 border-t border-[var(--border)] bg-[var(--panel-2)]/40 flex items-center justify-between text-[10.5px] text-[var(--fg-muted)]">
          <span>Clique em qualquer coluna pra ordenar · cores YoY indicam aceleração ou desaceleração vs. mesmo período de 2025</span>
          <span className="num">Total: {fmt.money(totalRede, { compact: true })}</span>
        </div>
      </div>
    </div>
  );
}

function DrilldownTabs() {
  const [tab, setTab] = useState("vendas");
  return (
    <div className="flex items-center gap-1.5 overflow-x-auto pb-0.5 -mx-1 px-1">
      {[
        { id: "vendas",   label: "Vendas",          icon: "trending-up" },
        { id: "estoque",  label: "Estoque",         icon: "package" },
        { id: "preco",    label: "Preço & Margem",  icon: "tag" },
        { id: "clientes", label: "Clientes",        icon: "users" },
        { id: "fornec",   label: "Fornecedores",    icon: "truck" },
        { id: "campanha", label: "Campanhas",       icon: "megaphone" },
      ].map((t) => (
        <button key={t.id} onClick={() => setTab(t.id)} className={`px-3 py-1.5 text-[11.5px] font-medium rounded-lg whitespace-nowrap flex items-center gap-1.5 transition-colors ${tab === t.id ? "bg-[var(--accent-soft)] text-[var(--accent)] border border-[var(--accent)]" : "border border-[var(--border)] text-[var(--fg-muted)] hover:text-[var(--fg)]"}`}>
          <Icon name={t.icon} className="w-3 h-3" />
          {t.label}
        </button>
      ))}
    </div>
  );
}

Object.assign(window, { MOCK, HomeScreen, VisaoGeralScreen, FechamentoScreen, ProdutosScreen, ComparativoLojasScreen });
