// 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; })();