// CENTRAL DA MARCA — Mariana Cabral · Início, Posts entregues, Campanha, Captações, Arquivos. // Exporta window.MC_Inicio, MC_Posts, MC_Campanha, MC_Calendario, MC_Arquivos (function () { const { useState } = React; const h = React.createElement; const D = window.MC_DATA; const S = window.MC_STORE; const { PageHead, StatusPill } = window.MC_UI; // ════════ INÍCIO ════════ function Inicio({ go }) { const { state } = S.useStore(); const r = S.resumo(); const cards = [ { k: "membros", n: (state.campanha && state.campanha.membros != null ? state.campanha.membros : 1), l: "Membros no Clube", x: "Clube inaugurado", rota: "campanha", hl: true }, { k: "novas", n: r.novas, l: "Ideias novas", x: "para analisar", rota: "aprovar-ideias" }, { k: "selecionadas", n: r.selecionadas, l: "Selecionadas", x: "sua lista de interesse", rota: "aprovar-ideias" }, { k: "producao", n: r.producao, l: "Em produção", x: "na agência", rota: "aprovar-ideias" }, { k: "aguardandoDesign", n: r.aguardandoDesign, l: "Conteúdo p/ aprovar", x: "aguardando você", rota: "aprovar-design", alert: true }, { k: "ajustes", n: r.ajustes, l: "Ajustes solicitados", x: "com a agência", 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: "calendario" }, { k: "publicadas", n: r.publicadas, l: "Publicados", x: "no ar", rota: "posts" }, ]; const pendResposta = r.novas + r.analise + r.aguardandoDesign; const proxCap = state.captacoes.slice().sort((a, b) => a.data.localeCompare(b.data))[0]; const pl = (n, s, p) => n + " " + (n === 1 ? s : p); const pendencias = []; if (r.aguardandoDesign) pendencias.push({ t: pl(r.aguardandoDesign, "conteúdo aguardando", "conteúdos aguardando") + " sua aprovação", m: "Aprovar o conteúdo autoriza o agendamento.", rota: "aprovar-design" }); if (r.novas) pendencias.push({ t: pl(r.novas, "ideia nova para analisar", "ideias novas para analisar"), m: "Selecione as que combinam e aprove para produção.", rota: "aprovar-ideias" }); if (r.ajustes) pendencias.push({ t: pl(r.ajustes, "ideia com ajuste solicitado", "ideias com ajuste solicitado"), m: "A agência está trabalhando nos ajustes.", rota: "aprovar-ideias" }); if (proxCap) pendencias.push({ t: "Próxima captação: " + 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, Mariana", sub: "Seu painel do Clube da Maturidade Emocional. Tudo o que precisa de você está reunido aqui." }), pendencias.length > 0 && h("div", { className: "pend-block" }, h("div", { className: "mini-label orange" }, "Pendências"), h("div", { className: "pend-list" }, pendencias.map((p, k) => h("div", { key: k, className: "pend orange" }, h("div", { className: "pend-mid" }, h("div", { className: "pend-t" }, p.t), h("div", { className: "pend-m" }, p.m)), h("button", { className: "btn btn-terra sm", onClick: () => go(p.rota) }, "Abrir") ))) ), h("div", { className: "mini-label" }, "Panorama"), h("div", { className: "resumo-grid" }, cards.filter((c) => c.hl || c.n > 0).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("button", { className: "hero-brand hero-fer", 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" }, "Escreva legendas na voz da marca por plataforma e estruture qualquer tema em conteúdo pronto."), h("span", { className: "hero-fer-cta" }, "Abrir ferramentas →") ), pendResposta > 0 && h("div", { className: "aviso", style: { marginTop: 22 } }, h("div", { className: "aviso-ic" }, "!"), h("div", { className: "aviso-t" }, h("b", null, pl(pendResposta, "item aguardando", "itens aguardando") + " sua resposta. "), pendResposta === 1 ? "Há um item esperando uma decisão sua." : "Há itens esperando uma decisão sua."), h("button", { className: "btn btn-terra sm aviso-go", onClick: () => go(r.aguardandoDesign ? "aprovar-design" : "aprovar-ideias") }, "Resolver agora") ), h("div", { className: "hero-brand", style: { marginTop: 26, marginBottom: 26 } }, h("div", { className: "hero-brand-eyebrow" }, "Clube da Maturidade Emocional"), h("div", { className: "hero-brand-t" }, "“" + D.MARCA.frases[1] + "”"), h("div", { className: "hero-brand-s" }, D.MARCA.proposito) ) ); } 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: "Conteúdos entregues", sub: "Conteúdos entregues pela agência a partir de 22/07/2026 — já produzidos e publicados para o Clube." }), 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 no Drive →") : (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 ════════ const PASSOS_PADRAO = [ { id: "p1", t: "Organizar o perfil @clube emocional", done: false }, { id: "p2", t: "Otimizar a área de membros", done: false }, { id: "p3", t: "Postar 2 vídeos longos no YouTube", done: false }, { id: "p4", t: "Impulsionar post no Instagram", done: false, dep: "p1", depNota: "após organizar o perfil" }, ]; // Fases da campanha, ligadas ao funil das ideias do banco (sistema integrado) const FASES = [ { funil: "Descoberta", nome: "Descoberta", obj: "Alcançar e ser descoberta por novas mulheres.", formatos: "Reels de alcance · carrosséis salváveis" }, { funil: "Consideração", nome: "Consideração", obj: "Gerar identificação e construir autoridade.", formatos: "Carrosséis de autoridade · Reels de identificação" }, { funil: "Desejo", nome: "Desejo", obj: "Despertar o desejo pelo Clube.", formatos: "Reels manifesto · posts institucionais" }, { funil: "Conversão", nome: "Conversão", obj: "Converter seguidoras em membros do Clube.", formatos: "Post de conversão · e-mail · stories de oferta" }, { funil: "Retenção", nome: "Retenção", obj: "Cuidar e reter quem já entrou.", formatos: "Stories recorrentes · materiais do Clube" }, ]; function Campanha() { const { state, actions } = S.useStore(); const camp = state.campanha; const membros = camp.membros != null ? camp.membros : 1; 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 [editMeta, setEditMeta] = useState(false); const feitos = passos.filter((p) => p.done).length; const metaPct = camp.meta > 0 ? Math.min(100, Math.round((membros / camp.meta) * 100)) : 0; const faseAtual = camp.faseAtual || FASES[0].funil; const faseIdx = Math.max(0, FASES.findIndex((f) => f.funil === faseAtual)); const fase = FASES[faseIdx]; const ideiasFase = (fnl) => state.ideias.filter((i) => i.funil === fnl && i.status !== "Arquivada" && i.status !== "Não aprovada"); const escolhidasDe = (fnl) => ideiasFase(fnl).filter((i) => i.selecionada && i.campanha); const linked = ideiasFase(fase.funil); const chosen = escolhidasDe(fase.funil); const paraProduzir = chosen.filter((i) => ["Nova sugestão", "Em análise"].includes(i.status)).map((i) => i.id); return h("div", { className: "page" }, h(PageHead, { eyebrow: "Campanha principal", titulo: "Clube da Maturidade Emocional", sub: "O Clube foi inaugurado. Agora o foco é estruturar a base e crescer com consistência." }), h("div", { className: "camp-hero" }, h("div", null, h("span", { className: "camp-hero-badge" }, "● Clube inaugurado"), h("div", { className: "camp-hero-t" }, "Fase de crescimento"), h("div", { className: "camp-hero-s" }, "Com o Clube no ar e a primeira venda feita, a campanha deixa de ser sobre lançar e passa a ser sobre organizar a base, cuidar de quem entrou e abrir novos canais de entrada — sem pressa e com método.") ), h("div", { className: "camp-count" }, h("div", { className: "camp-count-n" }, membros), h("div", { className: "camp-count-l" }, membros === 1 ? "membro no Clube" : "membros no Clube"), h("div", { className: "camp-count-ctrl" }, h("button", { className: "camp-step", onClick: () => actions.ajustarMembros(-1), disabled: membros <= 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" }, "Fases da campanha"), h("div", { className: "fase-strip" }, FASES.map((f, k) => { const nLink = ideiasFase(f.funil).length, nEsc = escolhidasDe(f.funil).length; return h("button", { key: f.funil, className: "fase-card" + (f.funil === faseAtual ? " on" : "") + (k < faseIdx ? " past" : ""), onClick: () => actions.setCampanha({ faseAtual: f.funil }) }, h("div", { className: "fase-step" }, "Fase " + (k + 1)), h("div", { className: "fase-nome" }, f.nome), h("div", { className: "fase-count" }, nEsc + "/" + nLink + " temas") ); })), h("div", { className: "card fase-detail" }, h("div", { className: "fase-detail-eyebrow" }, "Próxima etapa · Fase " + (faseIdx + 1)), h("div", { className: "fase-detail-t" }, fase.nome), h("div", { className: "fase-detail-obj" }, fase.obj), h("div", { className: "fase-detail-fmt" }, h("b", null, "Formatos: "), fase.formatos), h("div", { className: "fase-choose-h" }, h("span", null, "Escolha os temas desta fase"), h("button", { className: "fase-link", onClick: () => { location.hash = "#aprovar-ideias"; } }, "Abrir no banco de ideias →") ), linked.length === 0 ? h("div", { className: "empty", style: { padding: 26 } }, "Nenhuma sugestão de tema para esta fase ainda.") : h("div", { className: "tema-pick" }, linked.map((i) => h("button", { key: i.id, className: "tema-opt" + (i.selecionada && i.campanha ? " on" : ""), onClick: () => actions.escolherTemaCampanha(i.id) }, h("span", { className: "tema-opt-chk" }, i.selecionada && i.campanha ? "✓" : ""), h("div", { className: "grow" }, h("div", { className: "tema-opt-t" }, i.titulo), h("div", { className: "tema-opt-m" }, h("span", { className: "tag" }, i.formato), h(StatusPill, { status: i.status })) ) ))), h("div", { className: "fase-foot" }, h("span", { className: "fase-foot-n" }, chosen.length + " tema(s) escolhido(s) nesta fase"), paraProduzir.length > 0 && h("button", { className: "btn btn-pri sm", onClick: () => S.aprovarLote(paraProduzir) }, "✓ Aprovar " + paraProduzir.length + " para produção"), faseIdx < FASES.length - 1 && h("button", { className: "btn btn-sec sm", onClick: () => actions.setCampanha({ faseAtual: FASES[faseIdx + 1].funil }) }, "Avançar fase →") ) ), h("div", { className: "mini-label", style: { marginTop: 26 } }, "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) ); })), (camp.meta > 0 && !editMeta) ? h("div", { className: "card meta-card" }, h("div", { className: "grow" }, h("div", { className: "meta-card-l" }, "Meta de membros"), h("div", { className: "meta-card-n" }, camp.meta + (camp.meta === 1 ? " membro" : " membros")) ), h("button", { className: "btn btn-sec sm", onClick: () => { setMt(String(camp.meta)); setEditMeta(true); } }, "↑ Aumentar a meta") ) : h("div", { className: "card" }, h("div", { className: "mini-label" }, "Meta de membros (opcional)"), h("div", { style: { display: "flex", gap: 7, maxWidth: 320 } }, h("input", { className: "input", placeholder: "ex: 30", 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) }); setEditMeta(false); } }, "Definir") ) ) ); } // ════════ CAPTAÇÕES · B-ROLL ════════ 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; } const TIPOS = [ { id: "Post", ic: "▤", d: "Agendar um conteúdo / post" }, { id: "Evento online", ic: "◉", d: "Live, encontro ou aula online" }, { id: "Captação de vídeos", ic: "▦", d: "B-roll / gravação presencial" }, { id: "Aula", ic: "✎", d: "Gravação de aula" }, ]; const kindOf = (ev) => { const t = (ev.tipo || ev.formato || "").toLowerCase(); if (t.includes("post")) return "post"; if (t.includes("online") || t.includes("live")) return "live"; if (t.includes("aula")) return "aula"; return "broll"; }; const isISO = (s) => /^\d{4}-\d{2}-\d{2}$/.test(s || ""); function Calendario() { const { state, actions } = S.useStore(); const [cursor, setCursor] = useState({ y: 2026, m: 6 }); // m 0-index (6=julho) const [menu, setMenu] = useState(false); const [form, setForm] = useState({ tipo: "Captação de vídeos", titulo: "", data: "2026-07-23", hora: "", local: D.LOCAIS[0], link: "", obs: "", temas: [], postId: "" }); const isCap = form.tipo === "Captação de vídeos" || form.tipo === "Aula"; const isLink = form.tipo === "Post" || form.tipo === "Evento online"; // eventos = captações manuais + posts com data marcada (integração com o resto do sistema) const postEvents = state.ideias.filter((i) => isISO(i.design && i.design.dataSugerida)).map((i) => ({ id: "idea-" + i.id, data: i.design.dataSugerida, hora: "", tema: i.titulo, tipo: "Post", local: "", readonly: true })); const eventos = state.captacoes.concat(postEvents); const firstDow = new Date(cursor.y, cursor.m, 1).getDay(); const daysIn = new Date(cursor.y, cursor.m + 1, 0).getDate(); const evByDay = {}; eventos.forEach((e) => { const [y, m, d] = e.data.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 chooseTipo(t) { setForm((f) => ({ ...f, tipo: t })); setMenu(false); } function add() { const titulo = form.titulo.trim() || (isCap && form.temas.length ? form.temas.join(" · ") : form.tipo); actions.addCaptacao({ tipo: form.tipo, data: form.data, hora: form.hora, tema: titulo, local: isCap ? form.local : (form.tipo === "Evento online" ? "Online" : ""), formato: form.tipo, link: isLink ? form.link : "", obs: form.obs, temas: isCap ? form.temas : [] }); setForm((f) => ({ ...f, titulo: "", obs: "", link: "", temas: [], postId: "" })); } const lista = eventos.slice().sort((a, b) => a.data.localeCompare(b.data)); const KIND_LABEL = { broll: "Captação B-roll", aula: "Gravação de aula", live: "Online / live", post: "Post" }; 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 === 21; 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, 3).map((e, k) => { const kk = kindOf(e); return h("span", { key: k, className: "cal-dot" + (kk === "broll" ? "" : " " + kk) }); })) )); } return h("div", { className: "page" }, h(PageHead, { eyebrow: "Agenda", titulo: "Calendário", sub: "Posts com data, eventos online e captações de B-roll reunidos. Adicione itens manualmente pelo botão Agendar." }), 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" }, h("span", null, h("span", { className: "cal-dot" }), "B-roll / captação"), h("span", null, h("span", { className: "cal-dot aula" }), "Gravação de aula"), h("span", null, h("span", { className: "cal-dot live" }), "Online / live"), h("span", null, h("span", { className: "cal-dot post" }), "Post")) ), h("div", { className: "mini-label", style: { marginTop: 24 } }, "Na agenda · " + lista.length), lista.length === 0 ? h("div", { className: "empty" }, "Nada agendado ainda. Use o botão Agendar ao lado para adicionar.") : h("div", { className: "cal-list" }, lista.map((e) => { const kk = kindOf(e); return h("div", { key: e.id, className: "cap-item " + kk }, h("div", { className: "cap-date" }, h("b", null, e.data.split("-")[2]), h("span", null, MESES_NOME[Number(e.data.split("-")[1]) - 1].slice(0, 3))), h("div", { className: "cap-mid" }, h("div", { className: "cap-tema" }, e.tema), h("div", { className: "cap-local" }, KIND_LABEL[kk] + (e.local ? " · " + e.local : "") + (e.hora ? " · " + e.hora : "")), e.obs && h("div", { className: "cap-obs" }, e.obs), e.link && h("a", { className: "cap-link", href: e.link, target: "_blank", rel: "noopener" }, "Abrir link →") ), e.readonly ? null : 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-head" }, h("div", { className: "cap-form-t" }, "Agendar"), h("div", { className: "agendar-wrap" }, h("button", { className: "btn btn-pri sm", onClick: () => setMenu((m) => !m) }, "+ " + form.tipo + " ▾"), menu && h("div", { className: "agendar-menu", onMouseLeave: () => setMenu(false) }, TIPOS.map((t) => h("button", { key: t.id, className: form.tipo === t.id ? "on" : "", onClick: () => chooseTipo(t.id) }, h("span", { className: "agendar-menu-ic" }, t.ic), h("div", { className: "grow" }, h("div", { className: "agendar-menu-n" }, t.id), h("div", { className: "agendar-menu-d" }, t.d)) ))) ) ), h("label", { className: "field-l" }, "Título"), h("input", { className: "input", placeholder: form.tipo === "Post" ? "Nome do post…" : "Nome do evento…", value: form.titulo, onChange: (e) => setForm((f) => ({ ...f, titulo: e.target.value })) }), form.tipo === "Post" && h(React.Fragment, null, h("label", { className: "field-l" }, "Vincular a um conteúdo (opcional)"), h("select", { className: "input", value: form.postId, onChange: (e) => { const id = e.target.value; const it = state.ideias.find((x) => x.id === id); setForm((f) => ({ ...f, postId: id, titulo: it ? it.titulo : f.titulo })); } }, h("option", { value: "" }, "—"), state.ideias.filter((i) => !["Arquivada", "Não aprovada"].includes(i.status)).map((i) => h("option", { key: i.id, value: i.id }, i.titulo.length > 46 ? i.titulo.slice(0, 46) + "…" : i.titulo))) ), 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 })) }), isCap && h(React.Fragment, null, h("label", { className: "field-l" }, "Temas / B-roll"), h("div", { className: "tema-chips" }, D.BROLL.map((t) => h("button", { key: t, className: "tema-chip" + (form.temas.includes(t) ? " on" : ""), onClick: () => toggleTema(t) }, t))), h("label", { className: "field-l" }, "Local"), h("select", { className: "input", value: form.local, onChange: (e) => setForm((f) => ({ ...f, local: e.target.value })) }, D.LOCAIS.map((l) => h("option", { key: l }, l))) ), isLink && h(React.Fragment, null, h("label", { className: "field-l" }, form.tipo === "Evento online" ? "Link da chamada" : "Link do conteúdo (opcional)"), h("input", { className: "input", placeholder: "https://…", value: form.link, onChange: (e) => setForm((f) => ({ ...f, link: e.target.value })) }) ), h("label", { className: "field-l" }, "Observações"), h("textarea", { className: "input area", placeholder: "Notas, materiais, roteiro…", 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 ao calendário") ) ) ) ); } // ════════ ARQUIVOS & LOGOS ════════ function Arquivos() { const cats = ["Identidade", "Templates", "Fotos", "Documentos"]; const [copied, setCopied] = useState(false); function copyDrive() { navigator.clipboard && navigator.clipboard.writeText(D.MARCA.driveUrl); setCopied(true); setTimeout(() => setCopied(false), 1600); } return h("div", { className: "page" }, h(PageHead, { eyebrow: "Recursos", titulo: "Arquivos & Logos", sub: "Tudo da identidade visual, fotos e documentos da marca — organizado e pronto para baixar." }), h("div", { className: "arq-drive" }, h("div", { className: "arq-drive-ic" }, "▲"), h("div", { className: "grow arq-drive-txt" }, h("div", { className: "arq-drive-t" }, "Google Drive da marca"), h("div", { className: "arq-drive-s" }, "Pasta mestre com todos os originais, captações e materiais.")), h("div", { className: "arq-drive-actions" }, h("button", { className: "btn btn-sec", onClick: copyDrive }, copied ? "✓ Link copiado" : "⧉ Copiar link"), h("a", { className: "btn btn-pri", href: D.MARCA.driveUrl, target: "_blank", rel: "noopener" }, "Abrir Drive") ) ), // logos para download h("div", { className: "arq-cat" }, h("div", { className: "arq-cat-h" }, "Logos 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") ) ))) ), // paleta 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) ))) ), cats.map((cat) => { const items = D.ARQUIVOS.filter((a) => a.cat === cat); return h("div", { key: cat, className: "arq-cat" }, h("div", { className: "arq-cat-h" }, cat), h("div", { className: "arq-grid" }, items.map((a) => h("div", { key: a.id, className: "arq" + (a.emBreve ? " arq-soon" : "") }, h("div", { className: "arq-ic" }, a.icon), h("div", { className: "arq-mid" }, h("div", { className: "arq-n" }, a.nome), h("div", { className: "arq-m" }, a.emBreve ? a.tipo : a.tipo + " · " + a.tam)), a.emBreve ? h("span", { className: "arq-soon-tag" }, "Em breve") : h("a", { className: "arq-dl", title: "Abrir no Drive", href: D.MARCA.driveUrl, target: "_blank", rel: "noopener" }, "⤓") ))) ); }) ); } window.MC_Inicio = Inicio; window.MC_Posts = Posts; window.MC_Campanha = Campanha; window.MC_Calendario = Calendario; window.MC_Arquivos = Arquivos; window.MC_fmtData = fmtData; })();