// CENTRAL DA MARCA — Mariana Cabral · Ferramentas funcionais (via window.claude.complete). // Roteiros · Stories · Legendas · Revisar textos · Planejar captações · Banco de hooks. // Exporta window.MC_Ferramentas (function () { const { useState } = React; const h = React.createElement; const { PageHead } = window.MC_UI; const VOZ = "Você trabalha para Mariana Cabral, psicóloga e criadora do Clube da Maturidade Emocional. " + "Público: mulheres de 25 a 50 anos em desenvolvimento pessoal, que muitas vezes sentem culpa, ansiedade, sobrecarga, dependência emocional e dificuldade de impor limites. " + "Tom de voz: acolhedor, elegante, calmo, reflexivo, inteligente, didático e profundo. Conversa de igual para igual, sem jargão, sem autoajuda, sem clichê, sem frases de efeito, sem infantilização. " + "Base tudo em psicologia baseada em evidências e experiência clínica, tornando conceitos complexos acessíveis sem perder profundidade. " + "NUNCA seja dramática, sensacionalista, agressiva ou infantil. NUNCA prometa cura, não patologize comportamentos comuns, não use gatilhos exagerados nem linguagem de coach. " + "Escreva sempre em português do Brasil e entregue o resultado PRONTO PARA USAR, sem pedir mais informações e sem explicar o que você fez."; const PLATAFORMAS = ["Instagram (feed)", "Reels / TikTok", "Stories", "YouTube", "Pinterest", "Blog / Substack", "Newsletter"]; const TOOLS = [ { id: "legenda", nome: "Escrever legendas", ic: "❝", blocks: true, platforms: PLATAFORMAS, entrega: "3 versões (curta, média, reflexiva) + hashtags, adaptadas à plataforma escolhida.", ph: "Ex: legenda para o carrossel 'Três verdades sobre maturidade emocional'", label: "Tema ou conteúdo do post", area: false, system: VOZ + " Você escreve LEGENDAS na voz da Mariana, ADAPTADAS À PLATAFORMA informada em PLATAFORMA: ajuste tamanho, ritmo, uso de quebras de linha e chamada conforme a plataforma (Instagram feed: primeira linha forte + texto editorial; Reels/TikTok: curta e direta; Stories: frases curtas em blocos; YouTube: descrição com contexto; Pinterest: descritiva com palavras-chave; Blog/Substack: introdução editorial mais longa; Newsletter: tom de carta próxima). Entregue blocos prontos para copiar. Separe CADA bloco com uma linha contendo apenas §§§. A primeira linha de cada bloco é o rótulo; da segunda linha em diante vem APENAS o texto final. Entregue nesta ordem: (1) rótulo 'Versão curta'; (2) rótulo 'Versão média'; (3) rótulo 'Versão reflexiva'; (4) rótulo 'Hashtags' com 8 a 12 hashtags de nicho (ou, se a plataforma não usar hashtags, palavras-chave). Cada legenda abre com uma primeira linha que convida à leitura, com elegância." }, { id: "estruturar", nome: "Estruturar temas", ic: "❖", blocks: true, entrega: "Formatos ideais, ângulos, estrutura de conteúdo, CTAs, onde publicar e a que pilar/etapa pertence.", ph: "Ex: a culpa que aparece ao impor limites", label: "Tema que você quer desenvolver", area: false, system: VOZ + " Você é ESTRATEGISTA DE CONTEÚDO da marca. Dado um TEMA, estruture como transformá-lo em conteúdo. Separe CADA bloco com uma linha contendo apenas §§§. A primeira linha de cada bloco é o rótulo; da segunda linha em diante vem o conteúdo. Entregue nesta ordem: (1) 'Formatos recomendados' — 2 a 3 formatos ideais (Reels, carrossel, aula, stories, e-mail) e por quê; (2) 'Ângulos de abordagem' — 3 a 4 recortes possíveis do tema; (3) 'Estrutura sugerida' — o esqueleto do formato principal, parte a parte, com o que dizer em cada parte; (4) 'Ideias de CTA' — 3 CTAs alinhados ao objetivo; (5) 'Onde publicar' — plataformas recomendadas e o objetivo de cada uma; (6) 'Pilar e etapa' — a que pilar da marca e a que etapa do funil (Descoberta, Consideração, Desejo, Conversão, Retenção) o tema pertence. Seja concreta e enxuta." }, ]; function Bloco({ label, body }) { const [c, setC] = useState(false); function cp() { navigator.clipboard && navigator.clipboard.writeText(body); setC(true); setTimeout(() => setC(false), 1600); } return h("div", { className: "fer-out" }, h("div", { className: "fer-out-h" }, h("span", { className: "fer-out-l" }, label), h("button", { className: "fer-copy" + (c ? " ok" : ""), onClick: cp }, c ? "✓ Copiado" : "⧉ Copiar")), h("div", { className: "fer-text" }, body) ); } function Panel({ tool }) { const [tema, setTema] = useState(""); const [ctx, setCtx] = useState(""); const [plat, setPlat] = useState(tool.platforms ? tool.platforms[0] : ""); const [loading, setLoading] = useState(false); const [out, setOut] = useState(""); const [err, setErr] = useState(""); const [copied, setCopied] = useState(false); async function gerar() { if (!tema.trim() || loading) return; setLoading(true); setErr(""); setOut(""); setCopied(false); try { const userMsg = (tool.id === "revisar" ? "TEXTO:\n" : "TEMA: ") + tema.trim() + (tool.platforms ? ("\nPLATAFORMA: " + plat) : "") + (ctx.trim() ? ("\nCONTEXTO (formato, objetivo, local): " + ctx.trim()) : ""); const text = await window.claude.complete({ system: tool.system, max_tokens: 2000, messages: [{ role: "user", content: userMsg }] }); setOut(text || ""); } catch (e) { setErr("Não consegui gerar agora. Tente novamente em alguns segundos."); } setLoading(false); } function copiar() { navigator.clipboard && navigator.clipboard.writeText(out); setCopied(true); setTimeout(() => setCopied(false), 1600); } const blocos = tool.blocks && out ? out.split(/^\s*§§§\s*$/m).map((b) => b.trim()).filter(Boolean).map((b) => { const nl = b.indexOf("\n"); return nl === -1 ? { label: "Resultado", body: b } : { label: b.slice(0, nl).replace(/[*#:]/g, "").trim(), body: b.slice(nl + 1).trim() }; }) : null; return h("div", { className: "fer-panel" }, h("div", { className: "fer-panel-h" }, h("span", { className: "fer-panel-ic" }, tool.ic), h("div", null, h("div", { className: "fer-panel-t" }, tool.nome), h("div", { className: "fer-panel-s" }, "Pronto para usar, na voz da marca")) ), h("div", { className: "fer-entrega" }, "Entrega: " + tool.entrega), h("div", { className: "fer-field" }, h("label", { className: "field-l" }, tool.label), h("textarea", { className: "input area", style: tool.area ? { minHeight: 150 } : { minHeight: 70 }, placeholder: tool.ph, value: tema, onChange: (e) => setTema(e.target.value), onKeyDown: (e) => { if (e.key === "Enter" && (e.metaKey || e.ctrlKey)) gerar(); } }) ), tool.platforms && h("div", { className: "fer-field" }, h("label", { className: "field-l" }, "Plataforma"), h("select", { className: "input", value: plat, onChange: (e) => setPlat(e.target.value) }, tool.platforms.map((p) => h("option", { key: p }, p))) ), tool.id !== "revisar" && h("div", { className: "fer-field" }, h("label", { className: "field-l" }, "Contexto (opcional) — formato, objetivo, local"), h("input", { className: "input", placeholder: "Ex: Reels · identificação · gravar em casa", value: ctx, onChange: (e) => setCtx(e.target.value) }) ), h("div", { className: "fer-run" }, h("button", { className: "btn btn-pri", onClick: gerar, disabled: !tema.trim() || loading }, loading ? "Gerando…" : "✦ Gerar"), h("span", { className: "fer-hint" }, "⌘/Ctrl + Enter") ), err && h("div", { className: "fer-err" }, err), loading && h("div", { className: "fer-loading" }, h("span", { className: "spin" }), " Preparando com cuidado…"), blocos && blocos.length ? h("div", { className: "fer-blocks" }, blocos.map((b, i) => h(Bloco, { key: i, label: b.label, body: b.body }))) : out && h("div", { className: "fer-out" }, h("div", { className: "fer-out-h" }, h("span", { className: "fer-out-l" }, "Resultado"), h("button", { className: "fer-copy" + (copied ? " ok" : ""), onClick: copiar }, copied ? "✓ Copiado" : "⧉ Copiar")), h("div", { className: "fer-text" }, out) ) ); } function Ferramentas() { const [sel, setSel] = useState(TOOLS[0].id); const tool = TOOLS.find((t) => t.id === sel); return h("div", { className: "page" }, h(PageHead, { eyebrow: "Recursos", titulo: "Ferramentas", sub: "Escreva legendas na voz da marca por plataforma e estruture temas em conteúdo — pronto para usar." }), h("div", { className: "fer" }, h("div", { className: "fer-tools" }, TOOLS.map((t) => h("button", { key: t.id, className: "fer-tool" + (sel === t.id ? " on" : ""), onClick: () => setSel(t.id) }, h("span", { className: "fer-tool-ic" }, t.ic), h("div", null, h("div", { className: "fer-tool-n" }, t.nome), h("div", { className: "fer-tool-d" }, t.entrega.split(":")[0])) ))), h(Panel, { key: sel, tool }) ) ); } window.MC_Ferramentas = Ferramentas; })();