// CENTRAL DA MARCA — Sanvi Activewear · Início, Posts, Movimento Sanvi (campanha), Calendário, Divulgação Logue, Arquivos.
// Exporta window.SV_Inicio, SV_Posts, SV_Campanha, SV_Calendario, SV_Divulgacao, SV_Arquivos
(function () {
  const { useState } = React;
  const h = React.createElement;
  const D = window.SV_DATA;
  const S = window.SV_STORE;
  const { PageHead, StatusPill, Dropdown, MultiDropdown } = window.SV_UI;
  const CAMP = D.CAMPANHA_NOME;

  // ════════ INÍCIO ════════
  function Inicio({ go }) {
    const { state } = S.useStore();
    const r = S.resumo();
    const vendas = (state.campanha && state.campanha.membros != null ? state.campanha.membros : 0);
    const cards = [
      { k: "aguardandoDesign", n: r.aguardandoDesign, l: "Conteúdo p/ aprovar", x: "aguardando você", rota: "aprovar-design", alert: true },
      { k: "novas", n: r.novas, l: "Ideias novas", x: "para analisar", rota: "aprovar-ideias" },
      { k: "ajustes", n: r.ajustes, l: "Ajustes solicitados", x: "com a agência", rota: "aprovar-ideias" },
      { k: "producao", n: r.producao, l: "Em produção", x: "na agência", rota: "aprovar-ideias" },
      { k: "selecionadas", n: r.selecionadas, l: "Selecionadas", x: "sua lista de interesse", rota: "aprovar-ideias" },
      { k: "prontas", n: r.prontas + (D.POSTS_ENTREGUES || []).length, l: "Prontos", x: "prontos para publicar", rota: "posts" },
      { k: "agendadas", n: r.agendadas, l: "Agendados", x: "no calendário", rota: "aprovar-design" },
      { k: "publicadas", n: r.publicadas, l: "Publicados", x: "no ar", rota: "posts" },
      { k: "vendas", n: vendas, l: "Vendas na campanha", x: CAMP, rota: "campanha", hl: true },
    ];
    const cardsVis = cards.filter((c) => c.n > 0);
    const pendResposta = r.novas + r.analise + r.aguardandoDesign;
    const proxCap = state.captacoes.slice().sort((a, b) => a.data.localeCompare(b.data))[0];
    const pendencias = [];
    if (r.aguardandoDesign) pendencias.push({ cls: "terra", t: r.aguardandoDesign + " conteúdo(s) aguardando sua aprovação", m: "Aprovar o conteúdo autoriza o agendamento.", rota: "aprovar-design" });
    if (r.novas) pendencias.push({ cls: "", t: r.novas + " ideia(s) nova(s) para analisar", m: "Selecione as que combinam e aprove para produção.", rota: "aprovar-ideias" });
    if (r.ajustes) pendencias.push({ cls: "wait", t: r.ajustes + " ideia(s) com ajuste solicitado", m: "A agência está trabalhando nos ajustes.", rota: "aprovar-ideias" });
    if (proxCap) pendencias.push({ cls: "wait", t: "Próximo na agenda: " + proxCap.tema, m: fmtData(proxCap.data) + " · " + proxCap.local, rota: "calendario" });

    return h("div", { className: "page" },
      h(PageHead, { eyebrow: "Central da Marca", titulo: "Bom te ver, Sabrina",
        sub: "Seu painel da Sanvi Activewear. Tudo o que precisa de você — aprovar, acompanhar e criar — está reunido aqui." }),

      pendResposta > 0 && h("div", { className: "aviso" },
        h("div", { className: "aviso-ic" }, "!"),
        h("div", { className: "aviso-t" }, h("b", null, pendResposta + " item(ns) aguardando sua resposta. "), "Há ideias e conteúdos esperando uma decisão sua."),
        h("button", { className: "btn btn-terra sm aviso-go", onClick: () => go(r.aguardandoDesign ? "aprovar-design" : "aprovar-ideias") }, "Resolver agora")
      ),

      cardsVis.length > 0 && h(React.Fragment, null,
        h("div", { className: "mini-label" }, "Panorama"),
        h("div", { className: "resumo-grid" }, cardsVis.map((c) => h("button", { key: c.k, className: "rcard" + (c.alert && c.n ? " alert" : "") + (c.hl ? " hl" : ""), onClick: () => go(c.rota) },
          h("div", { className: "rcard-n" }, c.n),
          h("div", { className: "rcard-l" }, c.l),
          h("div", { className: "rcard-x" }, c.x)
        )))
      ),

      h("div", { className: "pend-grid", style: { marginTop: 26, alignItems: "stretch" } },
        h("div", { style: { display: "flex", flexDirection: "column" } },
          h("div", { className: "mini-label" }, "Pendências"),
          pendencias.length === 0 ? h("div", { className: "empty", style: { flex: 1 } }, "Tudo em dia. Nada aguardando você. ✦")
            : h("div", { className: "pend-list", style: { flex: 1 } }, pendencias.map((p, k) => h("div", { key: k, className: "pend " + p.cls, style: { flex: 1 } },
              h("div", { className: "pend-mid" }, h("div", { className: "pend-t" }, p.t), h("div", { className: "pend-m" }, p.m)),
              h("button", { className: "btn btn-sec sm", onClick: () => go(p.rota) }, "Abrir")
            )))
        ),
        h("div", null,
          h("div", { className: "mini-label" }, "Acesso rápido"),
          h("div", { className: "quick-links" },
            [["aprovar-ideias", "✎", "Aprovar ideias", "Banco de ideias e produção", "#E7EFF4", "#D3E1EA", "#4A7A9B"],
             ["aprovar-design", "◫", "Aprovar conteúdo", "Artes aguardando aprovação", "#FDE7DF", "#F6D3C7", "#FC5332"],
             ["divulgacao", "⇄", "Divulgação Logue", "Seu direcionamento semanal da permuta", "#F6E9D6", "#EBD9BF", "#C77E3A"],
             ["calendario", "▦", "Calendário", "Lives, posts e captações", "#E9F3EC", "#D5E7DB", "#3F9E6B"],
             ["arquivos", "▣", "Arquivos & logos", "Marca, fotos e materiais", "#EDF1F3", "#DEE5E9", "#7C93A0"]].map((q) => h("button", { key: q[0], className: "qlink", style: { background: q[4], borderColor: q[5] }, onClick: () => go(q[0]) },
              h("span", { className: "qlink-ic", style: { background: "#fff", color: q[6] } }, q[1]),
              h("div", { className: "grow" }, h("div", { className: "qlink-n" }, q[2]), h("div", { className: "qlink-d" }, q[3])),
              h("span", { className: "qlink-go", style: { color: q[6] } }, "→")
            ))
          )
        )
      ),

      h("button", { className: "hero-brand hero-fer", style: { marginTop: 26, background: "#FC5332" }, onClick: () => go("ferramentas") },
        h("div", { className: "hero-brand-eyebrow" }, "Destaque · Criar com IA"),
        h("div", { className: "hero-brand-t" }, "Ferramentas de conteúdo"),
        h("div", { className: "hero-brand-s" }, "Crie stories e legendas prontos para usar — sempre na voz da Sanvi."),
        h("span", { className: "hero-fer-cta" }, "Abrir ferramentas →")
      ),

      h("div", { className: "hero-brand", style: { marginTop: 22, marginBottom: 26 } },
        h("div", { className: "hero-brand-eyebrow" }, "Sanvi Activewear"),
        h("div", { className: "hero-brand-t" }, "“" + D.MARCA.frases[0] + "”"),
        h("div", { className: "hero-brand-s" }, D.MARCA.proposito)
      )
    );
  }

  // ════════ POSTS ENTREGUES ════════
  function Posts() {
    const { state } = S.useStore();
    const publicadasApp = state.ideias.filter((i) => i.status === "Publicada");
    const todos = D.POSTS_ENTREGUES.concat(publicadasApp.map((i) => ({ id: i.id, titulo: i.titulo, formato: i.formato, pilar: i.pilar, data: (i.design && i.design.dataSugerida) || "—", status: "Publicada", metricas: "recém-publicado" })));
    return h("div", { className: "page" },
      h(PageHead, { eyebrow: "Produção", titulo: "Posts entregues", sub: "Tudo o que a Agência Logue já produziu e publicou para a Sanvi." }),
      h("div", { className: "posts-grid" }, todos.map((p) => h("div", { key: p.id, className: "post" },
        h("div", { className: "post-art" }, h("span", { className: "post-fmt" }, p.formato)),
        h("div", { className: "post-body" },
          h("div", { className: "post-t" }, p.titulo),
          h("div", { style: { marginBottom: 10 } }, h("span", { className: "tag pilar" }, p.pilar)),
          h("div", { className: "post-m" }, h("span", null, p.status || "Publicado"), p.link ? h("a", { href: p.link, target: "_blank", rel: "noopener", className: "post-metric" }, "Abrir →") : (p.metricas ? h("span", { className: "post-metric" }, p.metricas) : null))
        )
      ))),
      todos.length === 0 && h("div", { className: "empty" }, "Nenhum post entregue ainda. Assim que a agência publicar um conteúdo aprovado, ele aparece aqui.")
    );
  }

  // ════════ CAMPANHA · MOVIMENTO SANVI ════════
  const PASSOS_PADRAO = [
    { id: "p1", t: "Padronizar bio, destaques e feed do @sanvi.activewear", done: false },
    { id: "p2", t: "Alinhar os looks da semana com a Sabrina (@sabrinasanchees)", done: false },
    { id: "p3", t: "Publicar 2 Reels de try-on da coleção", done: false },
    { id: "p4", t: "Impulsionar o melhor Reel da semana", done: false, dep: "p1", depNota: "após padronizar o perfil" },
  ];
  function Campanha() {
    const { state, actions } = S.useStore();
    const camp = state.campanha;
    const vendas = camp.membros != null ? camp.membros : 0;
    const passos = camp.passos && camp.passos.length ? camp.passos : PASSOS_PADRAO;
    const doneById = {}; passos.forEach((p) => { doneById[p.id] = p.done; });
    const [notas, setNotas] = useState(camp.notas || "");
    const [mt, setMt] = useState(String(camp.meta || ""));
    const feitos = passos.filter((p) => p.done).length;
    const metaPct = camp.meta > 0 ? Math.min(100, Math.round((vendas / camp.meta) * 100)) : 0;
    return h("div", { className: "page" },
      h(PageHead, { eyebrow: "Campanha principal", titulo: CAMP,
        sub: "O movimento que apresenta a Sanvi como estilo de vida ativo — crescer com consistência, comunidade e prova social." }),
      h("div", { className: "camp-hero" },
        h("div", null,
          h("span", { className: "camp-hero-badge" }, "● Campanha ativa"),
          h("div", { className: "camp-hero-t" }, "Vista energia. Vista Sanvi."),
          h("div", { className: "camp-hero-s" }, "A campanha reúne looks, try-ons e collabs com a Sabrina para transformar seguidoras em clientes e clientes em comunidade — sem pressão estética, com movimento de verdade.")
        ),
        h("div", { className: "camp-count" },
          h("div", { className: "camp-count-n" }, vendas),
          h("div", { className: "camp-count-l" }, vendas === 1 ? "venda na campanha" : "vendas na campanha"),
          h("div", { className: "camp-count-ctrl" },
            h("button", { className: "camp-step", onClick: () => actions.ajustarMembros(-1), disabled: vendas <= 0, title: "Remover" }, "–"),
            h("button", { className: "camp-step add", onClick: () => actions.ajustarMembros(1), title: "Nova venda" }, "+ venda")
          ),
          camp.meta > 0 && h(React.Fragment, null,
            h("div", { className: "camp-bar" }, h("div", { className: "camp-bar-f", style: { width: metaPct + "%" } })),
            h("div", { className: "camp-count-meta" }, metaPct + "% da meta de " + camp.meta)
          )
        )
      ),
      h("div", { className: "mini-label" }, "Próximos passos · " + feitos + "/" + passos.length),
      h("div", { className: "passos" }, passos.map((p) => {
        const travado = p.dep && !doneById[p.dep];
        return h("button", { key: p.id, className: "passo" + (p.done ? " done" : "") + (travado ? " lock" : ""),
          disabled: travado, onClick: () => actions.togglePasso(p.id) },
          h("span", { className: "passo-check" }, p.done ? "✓" : travado ? "🔒" : ""),
          h("span", { className: "passo-t" }, p.t),
          travado && h("span", { className: "passo-dep" }, p.depNota)
        );
      })),
      h("div", { className: "card" },
        h("div", { className: "mini-label" }, "Meta de vendas (opcional)"),
        h("div", { style: { display: "flex", gap: 7, maxWidth: 320 } },
          h("input", { className: "input", placeholder: "ex: 50", value: mt, onChange: (e) => setMt(e.target.value.replace(/\D/g, "")) }),
          h("button", { className: "btn btn-sel sm", onClick: () => actions.setCampanha({ meta: parseInt(mt || "0", 10) }) }, "Definir")
        )
      ),
      h("div", { className: "card" },
        h("div", { className: "mini-label" }, "Notas de estratégia"),
        h("textarea", { className: "input area", style: { minHeight: 90 }, value: notas, onChange: (e) => setNotas(e.target.value) }),
        h("div", { style: { marginTop: 12 } }, h("button", { className: "btn btn-pri sm", onClick: () => actions.setCampanha({ notas }) }, "Salvar notas"))
      )
    );
  }

  // ════════ CALENDÁRIO ════════
  const DIAS_SEM = ["Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sáb"];
  const MESES_NOME = ["janeiro", "fevereiro", "março", "abril", "maio", "junho", "julho", "agosto", "setembro", "outubro", "novembro", "dezembro"];
  function fmtData(iso) { const [y, m, d] = iso.split("-"); return d + "/" + m; }
  function isISO(v) { return typeof v === "string" && /^\d{4}-\d{2}-\d{2}/.test(v); }

  const KINDS = {
    captacao:  { cor: "var(--olive)",   nome: "Captação · try-on / B-roll", ic: "🎥" },
    aula:      { cor: "var(--terra)",   nome: "Gravação de vídeo",          ic: "🎬" },
    live:      { cor: "#5B7B9E",        nome: "Live / provador ao vivo",    ic: "🔴" },
    agendado:  { cor: "var(--gold)",    nome: "Conteúdo agendado",          ic: "📅" },
    publicado: { cor: "var(--ok)",      nome: "Conteúdo publicado",         ic: "✓" },
  };
  function kindFromCap(formato) { return formato === "Vídeo YouTube" ? "aula" : formato === "Live" ? "live" : "captacao"; }

  function buildEventos(state) {
    const evs = [];
    (state.captacoes || []).forEach((c) => evs.push({ id: c.id, date: c.data, hora: c.hora, title: c.tema, place: c.local, obs: c.obs, fmt: c.formato, kind: kindFromCap(c.formato), src: "cap" }));
    (state.ideias || []).forEach((i) => {
      const d = i.design && i.design.dataSugerida;
      if (i.status === "Agendada" && isISO(d)) evs.push({ id: i.id, date: d, title: i.titulo, fmt: i.formato, place: i.pilar, kind: "agendado", src: "ideia" });
      if (i.status === "Publicada" && isISO(d)) evs.push({ id: i.id, date: d, title: i.titulo, fmt: i.formato, place: i.pilar, kind: "publicado", src: "ideia" });
    });
    (D.POSTS_ENTREGUES || []).forEach((p) => { if (isISO(p.publicadoEm)) evs.push({ id: "post-" + p.id, date: p.publicadoEm, title: p.titulo, fmt: p.formato, place: p.pilar, kind: "publicado", src: "post" }); });
    return evs;
  }

  function Calendario() {
    const { state, actions } = S.useStore();
    const [cursor, setCursor] = useState({ y: 2026, m: 6 });
    const [filtro, setFiltro] = useState("todos");
    const [form, setForm] = useState({ data: "2026-07-30", hora: "", local: D.LOCAIS[0], formato: "Try-on / Provador", obs: "", temas: [] });

    const eventos = buildEventos(state);
    const eventosF = eventos.filter((e) => filtro === "todos" || e.kind === filtro);
    const firstDow = new Date(cursor.y, cursor.m, 1).getDay();
    const daysIn = new Date(cursor.y, cursor.m + 1, 0).getDate();
    const evByDay = {};
    eventosF.forEach((e) => { const [y, m, d] = e.date.split("-").map(Number); if (y === cursor.y && m - 1 === cursor.m) (evByDay[d] = evByDay[d] || []).push(e); });

    function toggleTema(t) { setForm((f) => ({ ...f, temas: f.temas.includes(t) ? f.temas.filter((x) => x !== t) : f.temas.concat(t) })); }
    function pick(day) { const iso = cursor.y + "-" + String(cursor.m + 1).padStart(2, "0") + "-" + String(day).padStart(2, "0"); setForm((f) => ({ ...f, data: iso })); }
    function add() {
      const tema = (form.temas.length ? form.temas.join(" · ") : (form.formato === "Live" ? "Live / provador" : "Captação"));
      actions.addCaptacao({ data: form.data, hora: form.hora, tema, local: form.local, formato: form.formato, obs: form.obs });
      setForm((f) => ({ ...f, obs: "", temas: [] }));
    }

    const lista = eventosF.slice().sort((a, b) => a.date.localeCompare(b.date) || (a.hora || "").localeCompare(b.hora || ""));
    const grupos = [];
    lista.forEach((e) => {
      const [y, m] = e.date.split("-").map(Number);
      const chave = MESES_NOME[m - 1] + " " + y;
      let g = grupos.find((x) => x.chave === chave);
      if (!g) { g = { chave, itens: [] }; grupos.push(g); }
      g.itens.push(e);
    });

    const cells = [];
    for (let i = 0; i < firstDow; i++) cells.push(h("div", { key: "e" + i, className: "cal-cell empty" }));
    for (let d = 1; d <= daysIn; d++) {
      const evs = evByDay[d] || [];
      const isToday = cursor.y === 2026 && cursor.m === 6 && d === 29;
      const selected = form.data === (cursor.y + "-" + String(cursor.m + 1).padStart(2, "0") + "-" + String(d).padStart(2, "0"));
      cells.push(h("div", { key: d, className: "cal-cell clickable" + (evs.length ? " has" : "") + (isToday ? " today" : ""), style: selected ? { outline: "2px dashed var(--olive-soft)", outlineOffset: -2 } : undefined, onClick: () => pick(d) },
        h("div", { className: "cal-d" }, d),
        h("div", { className: "cal-dots" }, evs.slice(0, 4).map((e, k) => h("span", { key: k, className: "cal-dot " + e.kind })))
      ));
    }

    const FILTRO_OPTS = [{ value: "todos", label: "Todos os eventos" }].concat(Object.keys(KINDS).map((k) => ({ value: k, label: KINDS[k].nome })));

    return h("div", { className: "page" },
      h(PageHead, { eyebrow: "Agenda", titulo: "Calendário",
        sub: "Tudo em um só lugar: lives e provadores ao vivo, conteúdos publicados e agendados, e as captações de try-on e B-roll." }),
      h("div", { className: "cal-wrap" },
        h("div", null,
          h("div", { className: "cal" },
            h("div", { className: "cal-head" },
              h("button", { className: "cal-nav", onClick: () => setCursor((c) => c.m === 0 ? { y: c.y - 1, m: 11 } : { y: c.y, m: c.m - 1 }) }, "‹"),
              h("div", { className: "cal-month" }, MESES_NOME[cursor.m] + " " + cursor.y),
              h("button", { className: "cal-nav", onClick: () => setCursor((c) => c.m === 11 ? { y: c.y + 1, m: 0 } : { y: c.y, m: c.m + 1 }) }, "›")
            ),
            h("div", { className: "cal-dow" }, DIAS_SEM.map((d) => h("span", { key: d }, d))),
            h("div", { className: "cal-grid" }, cells),
            h("div", { className: "cal-legend" }, Object.keys(KINDS).map((k) => h("span", { key: k, className: "cal-leg" }, h("i", { style: { background: KINDS[k].cor } }), KINDS[k].nome)))
          ),
          h("div", { className: "cal-filterbar" },
            h("div", { className: "mini-label" }, "Agenda · " + lista.length),
            h("div", { style: { marginLeft: "auto" } }, h(Dropdown, { value: filtro, options: FILTRO_OPTS, onChange: setFiltro, align: "right" }))
          ),
          grupos.length === 0
            ? h("div", { className: "empty" }, "Nenhum evento com esse filtro.")
            : grupos.map((g) => h("div", { key: g.chave, className: "cal-group" },
                h("div", { className: "cal-group-h" }, g.chave.charAt(0).toUpperCase() + g.chave.slice(1), h("span", null, g.itens.length + (g.itens.length === 1 ? " evento" : " eventos"))),
                h("div", { className: "cal-list" }, g.itens.map((e) => {
                  const K = KINDS[e.kind];
                  return h("div", { key: e.src + e.id, className: "cap-item " + e.kind },
                    h("div", { className: "cap-date" }, h("b", null, e.date.split("-")[2]), h("span", null, MESES_NOME[Number(e.date.split("-")[1]) - 1].slice(0, 3))),
                    h("div", { className: "cap-mid" },
                      h("span", { className: "cap-kind", style: { background: K.cor + "18", color: K.cor } }, h("i", { style: { background: K.cor } }), K.nome),
                      h("div", { className: "cap-tema" }, e.title),
                      h("div", { className: "cap-local" }, (e.place ? "📍 " + e.place + " · " : "") + (e.fmt || "") + (e.hora ? " · " + e.hora : "")),
                      e.obs && h("div", { className: "cap-obs" }, e.obs)),
                    e.src === "cap" && h("button", { className: "cap-del", onClick: () => actions.removeCaptacao(e.id), title: "Remover" }, "✕")
                  );
                }))
              ))
        ),
        h("div", { className: "cal-side" },
          h("div", { className: "cap-form" },
            h("div", { className: "cap-form-t" }, "Agendar na agenda"),
            h("label", { className: "field-l" }, "Data"),
            h("input", { className: "input", type: "date", value: form.data, onChange: (e) => setForm((f) => ({ ...f, data: e.target.value })) }),
            h("label", { className: "field-l" }, "Horário"),
            h("input", { className: "input", type: "time", value: form.hora, onChange: (e) => setForm((f) => ({ ...f, hora: e.target.value })) }),
            h("label", { className: "field-l" }, "Formato"),
            h(Dropdown, { full: true, value: form.formato, options: ["Try-on / Provador", "Reels", "Stories", "Live", "Vídeo YouTube", "Ensaio"], onChange: (v) => setForm((f) => ({ ...f, formato: v })) }),
            h("label", { className: "field-l" }, "Temas / B-roll"),
            h(MultiDropdown, { full: true, values: form.temas, options: D.BROLL, onToggle: toggleTema, placeholder: "Escolher temas…" }),
            h("label", { className: "field-l" }, "Local"),
            h(Dropdown, { full: true, value: form.local, options: D.LOCAIS.concat(["Online"]), onChange: (v) => setForm((f) => ({ ...f, local: v })) }),
            h("label", { className: "field-l" }, "Observações"),
            h("textarea", { className: "input area", placeholder: "Peças, luz, materiais necessários…", value: form.obs, onChange: (e) => setForm((f) => ({ ...f, obs: e.target.value })) }),
            h("button", { className: "btn btn-pri full", style: { marginTop: 14 }, onClick: add }, "Adicionar à agenda")
          )
        )
      )
    );
  }

  // ════════ DIVULGAÇÃO LOGUE · permuta ════════
  function Divulgacao({ go }) {
    const { state } = S.useStore();
    const P = D.PERMUTA;
    const ideiasLogue = state.ideias.filter((i) => i.pilar === "Divulgação Logue" && i.status !== "Arquivada");
    return h("div", { className: "page" },
      h(PageHead, { eyebrow: "Parceria · Permuta", titulo: "Divulgação — Agência Logue",
        sub: "O contrato com a Agência Logue é de permuta. Este é o seu direcionamento semanal fixo para divulgar a agência — pensado para parecer parceria de verdade, não propaganda." }),

      // resumo do acordo
      h("div", { className: "arq-drive", style: { alignItems: "flex-start" } },
        h("div", { className: "arq-drive-ic" }, "⇄"),
        h("div", { className: "grow" },
          h("div", { className: "arq-drive-t" }, P.parceiro + " · " + P.perfilTag),
          h("div", { className: "arq-drive-s", style: { maxWidth: "62ch" } }, P.contrato)
        ),
        h("a", { className: "btn btn-pri", href: P.perfilUrl, target: "_blank", rel: "noopener" }, "Abrir perfil")
      ),

      h("div", { className: "hero-brand", style: { marginBottom: 24 } },
        h("div", { className: "hero-brand-eyebrow" }, "Como funciona"),
        h("div", { className: "hero-brand-s", style: { maxWidth: "70ch", fontSize: 15 } }, P.resumo)
      ),

      // cadência semanal
      h("div", { className: "mini-label" }, "Direcionamento semanal"),
      h("div", { className: "passos", style: { marginBottom: 26 } }, P.semanal.map((w, k) => h("div", { key: k, className: "cap-item", style: { borderLeftColor: "var(--terra)" } },
        h("div", { className: "cap-date", style: { width: 76 } }, h("b", { style: { fontSize: 15, lineHeight: 1.15, display: "block" } }, w.dia)),
        h("div", { className: "cap-mid" },
          h("span", { className: "cap-kind", style: { background: "var(--terra-tint)", color: "var(--terra)" } }, h("i", { style: { background: "var(--terra)" } }), w.tipo + " · " + w.formato),
          h("div", { className: "cap-tema" }, w.acao),
          h("div", { className: "cap-local" }, "🔁 " + w.recorrencia)
        )
      ))),

      // regras
      h("div", { className: "pend-grid" },
        h("div", null,
          h("div", { className: "mini-label" }, "Regras da divulgação"),
          h("div", { className: "pend-list" }, P.regras.map((rg, k) => h("div", { key: k, className: "pend wait" },
            h("div", { className: "pend-mid" }, h("div", { className: "pend-t", style: { fontSize: 14 } }, rg))
          )))
        ),
        h("div", null,
          h("div", { className: "mini-label" }, "Conteúdos de divulgação sugeridos"),
          ideiasLogue.length === 0
            ? h("div", { className: "empty" }, "Nenhuma ideia de divulgação no momento.")
            : h("div", { className: "quick-links" }, ideiasLogue.map((i) => h("button", { key: i.id, className: "qlink", onClick: () => go("aprovar-ideias") },
                h("span", { className: "qlink-ic" }, "⇄"),
                h("div", { className: "grow" }, h("div", { className: "qlink-n" }, i.titulo), h("div", { className: "qlink-d" }, i.formato + " · " + i.objetivo)),
                h("span", { className: "qlink-go" }, "→")
              )))
        )
      )
    );
  }

  // ════════ ARQUIVOS & LOGOS ════════
  function Arquivos() {
    return h("div", { className: "page" },
      h(PageHead, { eyebrow: "Recursos", titulo: "Arquivos & Logos", sub: "A identidade visual da Sanvi: logo e paleta oficial da marca." }),
      h("div", { className: "arq-cat" },
        h("div", { className: "arq-cat-h" }, "Logo para download"),
        h("div", { className: "logo-grid" }, D.LOGOS.map((l) => h("div", { key: l.id, className: "logo-card" },
          h("div", { className: "logo-prev" }, h("img", { src: l.src, alt: l.nome })),
          h("div", { className: "logo-info" },
            h("div", { className: "logo-n" }, l.nome),
            h("div", { className: "logo-d" }, l.desc),
            h("a", { className: "logo-dl", href: l.src, download: true }, "⤓ Baixar PNG")
          )
        )))
      ),
      h("div", { className: "arq-cat" },
        h("div", { className: "arq-cat-h" }, "Paleta da marca"),
        h("div", { className: "pal-row" }, D.MARCA.paleta.map((p) => h("div", { key: p.hex, className: "pal" },
          h("div", { className: "pal-sw", style: { background: p.hex } }),
          h("div", { className: "pal-n" }, p.nome),
          h("div", { className: "pal-h" }, p.hex)
        )))
      )
    );
  }

  window.SV_Inicio = Inicio;
  window.SV_Posts = Posts;
  window.SV_Campanha = Campanha;
  window.SV_Calendario = Calendario;
  window.SV_Divulgacao = Divulgacao;
  window.SV_Arquivos = Arquivos;
  window.SV_fmtData = fmtData;
})();
