// generator-templates-v3.jsx — new carousels + stories // Uses Glyph, Logo, Placeholder, COLORS, QRCode already in scope (loaded earlier via templates v1/v2) const STK_PAL3 = ["#eadcbe","#f4f1ec","#ffffff","#1b1b1a","#674689","#df4b5a"]; // ───────────────────────────────────────────────────────────────────────── // CARROSSEIS — novos formatos // ───────────────────────────────────────────────────────────────────────── // 1) Dicas de styling — capa com numeração estilo magazine function tplCarouselTipsCover(d) { const fg = d.fg || COLORS.ink, accent = d.accent || COLORS.purple, hookC = d.hookColor || COLORS.coral; return (
guia · {d.eyebrow}
{d.bigNumber}
{d.title}
{d.subtitle}
arrasta →
{d.handle}
); } // 2) Card de dica — formato com número grande + texto curto function tplCarouselTipCard(d) { const fg = d.fg || COLORS.ink, accent = d.accent || COLORS.purple; return (
dica
{d.indicator}
{d.number}
{d.headline}
{d.body}
arrasta →
); } // 3) Carrossel educacional — texto puro sem decoração function tplCarouselEdu(d) { const fg = d.fg || COLORS.ink, accent = d.accent || COLORS.purple; return (
{d.tag}
{d.kicker}
{d.title}
{d.body}
{d.position}
arrasta →
); } // 4) Lookbook — foto full-bleed + texto sobreposto function tplCarouselLookbook(d) { const fg = d.fg || "#fff", accent = d.accent || COLORS.coral; return (
{d.image ? : }
{d.eyebrow}
{d.tag}
{d.title}
{d.body}
{d.position}
arrasta →
); } // 5) Storytelling — citação com aspas estilo magazine literário function tplCarouselQuote(d) { const fg = d.fg || COLORS.ink, accent = d.accent || COLORS.purple; return (
{d.chapter}
"
{d.quote}
{d.author}
{d.context}
{d.position}
arrasta →
); } // 6) Mini comparação — antes/depois lado a lado function tplCarouselCompare(d) { const fg = d.fg || COLORS.ink, accent = d.accent || COLORS.purple; return (
{d.eyebrow}
{d.title}
{d.imageLeft ? : }
{d.labelLeft}
{d.imageRight ? : }
{d.labelRight}
{d.body}
{d.position}
arrasta →
); } // ───────────────────────────────────────────────────────────────────────── // STORIES — novos formatos // ───────────────────────────────────────────────────────────────────────── // 7) Achadinho — story compacto com foto + handwritten "achei pra você" function tplStoryAchadinho(d) { const fg = d.fg || COLORS.ink, accent = d.accent || COLORS.purple, hookC = d.hookColor || COLORS.coral; return (
achadinho
{d.title}
{d.image ? : } {d.badge && (
{d.badge}
)}
{d.itemName}
{d.detail}
{d.price}
{d.cta}
); } // 8) Bastidores — story com foto + handwritten overlay function tplStoryBts(d) { return (
{d.image ? : }
{d.eyebrow}
{d.headline}
{d.body}
{d.cta}
); } // 9) Look do dia — story em duas camadas, foto + cards de peças function tplStoryLookDay(d) { const fg = d.fg || COLORS.ink, accent = d.accent || COLORS.purple; return (
{d.eyebrow}
{d.title}
{d.image ? : }
peças do look
{(d.pieces || "").split("\n").filter(Boolean).slice(0, 3).map((p, i) => (
{i + 1}
{p}
))}
{d.cta}
); } // 10) Cupom — story flash com cupom destacado function tplStoryCoupon(d) { const fg = d.fg || "#fff", accent = d.accent || "#fff"; return (
{d.eyebrow}
{d.discount}
{d.body}
{d.coupon}
{d.terms}
{d.cta}
); } // 11) Pergunta aberta — story estilo IG question sticker function tplStoryQuestion(d) { const fg = d.fg || COLORS.ink, accent = d.accent || COLORS.purple; return (
caixinha de
{d.title}
{d.label}
{d.question}
digita aqui ✎
responde aí 👇
); } // 12) Capa de Reels — formato story que vira capa function tplStoryReelsCover(d) { const fg = d.fg || "#fff", accent = d.accent || COLORS.purple, hookC = d.hookColor || COLORS.coral; return (
{d.image ? : }
▶ {d.duration}
{d.title}
{d.subtitle}
{d.handle}
reels · @lirou
); } // 13) Agenda semanal — calendário de stories function tplStorySchedule(d) { const fg = d.fg || COLORS.ink, accent = d.accent || COLORS.purple; const lines = (d.schedule || "").split("\n").filter(Boolean).slice(0, 7); return (
{d.eyebrow}
{d.title}
{lines.map((line, i) => { const [day, ...rest] = line.split("|").map(s => s.trim()); return (
{day}
{rest.join(" · ")}
); })}
{d.cta}
); } // ─── Registry ─────────────────────────────────────────────────────────── const TEMPLATES_V3 = [ // CARROSSEIS { id: "carousel-tips-cover", group: "Carrossel (1080×1350)", name: "Dicas · capa", w: 1080, h: 1350, render: tplCarouselTipsCover, fields: [ { k: "eyebrow", label: "Eyebrow (tag pequena no canto)", type: "text" }, { k: "bigNumber", label: "Número grande (em Caveat)", type: "text", hint: "ex: 5, 7, 10..." }, { k: "title", label: "Título do carrossel (Caveat · use \\n p/ quebrar)", type: "textarea" }, { k: "subtitle", label: "Subtítulo explicando", type: "textarea" }, { k: "handle", label: "@handle", type: "text" }, { k: "bg", label: "Cor de fundo (preenche o card)", type: "color", options: STK_PAL3 }, { k: "fg", label: "Cor do subtítulo + texto secundário", type: "color", options: STK_PAL3 }, { k: "accent", label: "Cor do número grande + logo + 'arrasta' + @handle", type: "color", options: STK_PAL3 }, { k: "hookColor", label: "Cor do título principal em Caveat", type: "color", options: STK_PAL3 }, ], defaults: { eyebrow: "styling", bigNumber: "7", title: "dicas pra\nrenovar seu\nguarda-roupa", subtitle: "sem gastar muito · só com peças que você já tem (e algumas que vai querer)", handle: "@lirou.closet.65", bg: "#eadcbe", fg: "#1b1b1a", accent: "#674689", hookColor: "#df4b5a" } }, { id: "carousel-tip-card", group: "Carrossel (1080×1350)", name: "Dica · card numerado", w: 1080, h: 1350, render: tplCarouselTipCard, fields: [ { k: "indicator", label: "Indicador (canto superior direito)", type: "text", hint: "ex: 1/7" }, { k: "number", label: "Número grande (Caveat enorme)", type: "text" }, { k: "headline", label: "Manchete forte (Inter bold)", type: "text" }, { k: "body", label: "Texto explicativo", type: "textarea" }, { k: "bg", label: "Cor de fundo (preenche o card)", type: "color", options: STK_PAL3 }, { k: "fg", label: "Cor da manchete + corpo do texto", type: "color", options: STK_PAL3 }, { k: "accent", label: "Cor do número grande + 'dica' + glifo + linha separadora", type: "color", options: STK_PAL3 }, ], defaults: { indicator: "1/7", number: "01", headline: "mistura velho com novo.", body: "uma peça vintage com uma peça atual cria um look que ninguém mais tem. é a forma mais barata de ter estilo único.", bg: "#eadcbe", fg: "#1b1b1a", accent: "#674689" } }, { id: "carousel-edu", group: "Carrossel (1080×1350)", name: "Educacional · texto puro", w: 1080, h: 1350, render: tplCarouselEdu, fields: [ { k: "tag", label: "Tag (canto superior esquerdo)", type: "text" }, { k: "kicker", label: "Kicker (linha curta acima do título)", type: "text" }, { k: "title", label: "Título (Caveat · use \\n p/ quebrar)", type: "textarea" }, { k: "body", label: "Texto longo de baixo", type: "textarea" }, { k: "position", label: "Posição no carrossel (ex: 2/5)", type: "text" }, { k: "bg", label: "Cor de fundo (preenche o card)", type: "color", options: STK_PAL3 }, { k: "fg", label: "Cor do título grande + corpo", type: "color", options: STK_PAL3 }, { k: "accent", label: "Cor da tag + kicker + glifo + número da posição", type: "color", options: STK_PAL3 }, ], defaults: { tag: "explicação", kicker: "antes de comprar, lembre:", title: "moda rápida\ncusta caro.", body: "uma peça vinda do bazar de marca brasileira durou 5 anos no nosso guarda-roupa. peças de fast fashion duram, em média, 7 lavagens.", position: "2/5", bg: "#f4f1ec", fg: "#1b1b1a", accent: "#674689" } }, { id: "carousel-lookbook", group: "Carrossel (1080×1350)", name: "Lookbook · foto full", w: 1080, h: 1350, render: tplCarouselLookbook, fields: [ { k: "image", label: "Foto do look (vai cobrir o card inteiro)", type: "image" }, { k: "imgLabel", label: "Label placeholder", type: "text" }, { k: "eyebrow", label: "Eyebrow (pílula transparente no topo esquerdo)", type: "text" }, { k: "tag", label: "Tag colorida (canto superior direito)", type: "text" }, { k: "title", label: "Título (Caveat · embaixo)", type: "text" }, { k: "body", label: "Descrição curta", type: "textarea" }, { k: "position", label: "Posição (ex: 3/5)", type: "text" }, { k: "bg", label: "Cor de fundo (atrás da foto, caso ela tenha transparência)", type: "color", options: STK_PAL3 }, { k: "fg", label: "Cor do título + corpo (texto sobre a foto · use claro)", type: "color", options: STK_PAL3 }, { k: "accent", label: "Cor da pílula colorida no canto direito", type: "color", options: STK_PAL3 }, ], defaults: { image: "", imgLabel: "look completo", eyebrow: "look 03", tag: "novo", title: "feel the vibe", body: "calça class · tee oversized · tênis branco — tudo no closet.", position: "3/5", bg: "#1b1b1a", fg: "#ffffff", accent: "#df4b5a" } }, { id: "carousel-quote", group: "Carrossel (1080×1350)", name: "Citação · estilo livro", w: 1080, h: 1350, render: tplCarouselQuote, fields: [ { k: "chapter", label: "Capítulo / posição (canto superior direito)", type: "text" }, { k: "quote", label: "Citação (Caveat · use \\n p/ quebrar)", type: "textarea" }, { k: "author", label: "Autor / fonte (caps lock)", type: "text" }, { k: "context", label: "Contexto pequeno (linha cinza embaixo)", type: "text" }, { k: "position", label: "Posição rodapé esquerdo", type: "text" }, { k: "bg", label: "Cor de fundo (preenche o card)", type: "color", options: STK_PAL3 }, { k: "fg", label: "Cor da citação principal + contexto", type: "color", options: STK_PAL3 }, { k: "accent", label: "Cor das aspas decorativas + autor + capítulo + logo", type: "color", options: STK_PAL3 }, ], defaults: { chapter: "cap. 01", quote: "moda não é\nsobre roupa.\né sobre\ncoragem.", author: "lirou closet 65", context: "manifesto · 2025", position: "1/5", bg: "#eadcbe", fg: "#1b1b1a", accent: "#674689" } }, { id: "carousel-compare", group: "Carrossel (1080×1350)", name: "Comparação 2x · antes/depois", w: 1080, h: 1350, render: tplCarouselCompare, fields: [ { k: "imageLeft", label: "Foto esquerda", type: "image" }, { k: "imageRight", label: "Foto direita", type: "image" }, { k: "labelLeft", label: "Label da foto esquerda", type: "text" }, { k: "labelRight", label: "Label da foto direita", type: "text" }, { k: "eyebrow", label: "Eyebrow (canto direito superior)", type: "text" }, { k: "title", label: "Título (Caveat)", type: "text" }, { k: "body", label: "Descrição", type: "textarea" }, { k: "position", label: "Posição (ex: 2/4)", type: "text" }, { k: "bg", label: "Cor de fundo (preenche o card)", type: "color", options: STK_PAL3 }, { k: "fg", label: "Cor do título + corpo + fundo do badge esquerdo", type: "color", options: STK_PAL3 }, { k: "accent", label: "Cor do eyebrow + posição + fundo do badge direito + glifo", type: "color", options: STK_PAL3 }, ], defaults: { imageLeft: "", imageRight: "", labelLeft: "casual", labelRight: "styled", eyebrow: "1 peça · 2 looks", title: "a mesma peça,\noutro vibe.", body: "trocando só os acessórios você muda a história completa da peça. arrasta pra ver mais combinações.", position: "2/4", bg: "#eadcbe", fg: "#1b1b1a", accent: "#674689" } }, // STORIES { id: "story-achadinho", group: "Stories (1080×1920)", name: "Achadinho · peça destaque", w: 1080, h: 1920, render: tplStoryAchadinho, fields: [ { k: "image", label: "Foto da peça", type: "image" }, { k: "imgLabel", label: "Label placeholder", type: "text" }, { k: "title", label: "Frase grande no topo (Caveat)", type: "text" }, { k: "badge", label: "Badge no canto da foto (Caveat curto · 1-2 palavras)", type: "text" }, { k: "itemName", label: "Nome da peça (Caveat médio)", type: "text" }, { k: "detail", label: "Detalhes (tamanho, cor)", type: "text" }, { k: "price", label: "Preço (texto do botão coral)", type: "text" }, { k: "cta", label: "CTA do botão inferior", type: "text" }, { k: "bg", label: "Cor de fundo do story", type: "color", options: STK_PAL3 }, { k: "fg", label: "Cor dos detalhes da peça (linha pequena)", type: "color", options: STK_PAL3 }, { k: "accent", label: "Cor do glifo + 'achadinho' + nome da peça + botão CTA", type: "color", options: STK_PAL3 }, { k: "hookColor", label: "Cor do título grande + badge + botão de preço", type: "color", options: STK_PAL3 }, ], defaults: { image: "", imgLabel: "peça nova", title: "achei pra você", badge: "novo!", itemName: "blusa cropped", detail: "preta · tam P · única", price: "R$ 89", cta: "chama no direct ↗", bg: "#eadcbe", fg: "#1b1b1a", accent: "#674689", hookColor: "#df4b5a" } }, { id: "story-bts", group: "Stories (1080×1920)", name: "Bastidores · foto + frase", w: 1080, h: 1920, render: tplStoryBts, fields: [ { k: "image", label: "Foto bastidor (cobre tudo)", type: "image" }, { k: "imgLabel", label: "Label placeholder", type: "text" }, { k: "eyebrow", label: "Eyebrow (pílula transparente topo esquerdo)", type: "text" }, { k: "headline", label: "Frase forte (Caveat · use \\n p/ quebrar)", type: "textarea" }, { k: "body", label: "Texto curto explicativo", type: "textarea" }, { k: "cta", label: "CTA no rodapé (caps lock)", type: "text" }, { k: "bg", label: "Cor de fundo (atrás da foto)", type: "color", options: STK_PAL3 }, ], defaults: { image: "", imgLabel: "bastidor", eyebrow: "BTS · diário", headline: "preparando\no drop 05", body: "horas garimpando peças únicas, lavando, fotografando. cada drop tem amor por trás.", cta: "fica de olho · sex 19h", bg: "#1b1b1a" } }, { id: "story-look-day", group: "Stories (1080×1920)", name: "Look do dia · com peças", w: 1080, h: 1920, render: tplStoryLookDay, fields: [ { k: "image", label: "Foto do look completo", type: "image" }, { k: "eyebrow", label: "Eyebrow", type: "text" }, { k: "title", label: "Título do look (Caveat)", type: "text" }, { k: "pieces", label: "Peças do look (UMA por linha · até 3)", type: "textarea", hint: "ex:\\ncalça class · R$ 165\\ntop bege · R$ 79" }, { k: "cta", label: "CTA rodapé", type: "text" }, { k: "bg", label: "Cor de fundo do story", type: "color", options: STK_PAL3 }, { k: "fg", label: "Cor do texto das peças (dentro dos cards)", type: "color", options: STK_PAL3 }, { k: "accent", label: "Cor do eyebrow + 'peças do look' + bolinhas numeradas + bordas + CTA", type: "color", options: STK_PAL3 }, ], defaults: { image: "", eyebrow: "look do dia", title: "feel the vibe", pieces: "calça class · R$ 165\ntop bege · R$ 79\ntênis branco · R$ 95", cta: "tudo no perfil ↗", bg: "#eadcbe", fg: "#1b1b1a", accent: "#674689" } }, { id: "story-coupon", group: "Stories (1080×1920)", name: "Cupom · flash sale", w: 1080, h: 1920, render: tplStoryCoupon, fields: [ { k: "eyebrow", label: "Eyebrow (topo)", type: "text" }, { k: "discount", label: "Desconto grande (Caveat enorme · ex: -30%)", type: "text" }, { k: "body", label: "Texto explicando", type: "textarea" }, { k: "coupon", label: "Código do cupom (caps lock grande)", type: "text" }, { k: "terms", label: "Termos (linha pequena)", type: "text" }, { k: "cta", label: "CTA botão branco", type: "text" }, { k: "bg", label: "Cor de fundo do story", type: "color", options: STK_PAL3 }, { k: "fg", label: "Cor do desconto grande + eyebrow + texto principal + termos", type: "color", options: STK_PAL3 }, { k: "accent", label: "Cor da borda tracejada do código de cupom", type: "color", options: STK_PAL3 }, ], defaults: { eyebrow: "⚡ flash sale", discount: "-30%", body: "em todas as peças usando o cupom abaixo", coupon: "LIROU30", terms: "⏱ só nas próximas 6h", cta: "vou no perfil ↗", bg: "#df4b5a", fg: "#ffffff", accent: "#674689" } }, { id: "story-question", group: "Stories (1080×1920)", name: "Pergunta aberta · caixinha", w: 1080, h: 1920, render: tplStoryQuestion, fields: [ { k: "title", label: "Título grande (Caveat · use \\n p/ quebrar)", type: "textarea" }, { k: "label", label: "Label dentro da caixa branca (caps lock)", type: "text" }, { k: "question", label: "Pergunta dentro da caixa", type: "textarea" }, { k: "bg", label: "Cor de fundo do story", type: "color", options: STK_PAL3 }, { k: "fg", label: "Cor da pergunta (dentro da caixa branca)", type: "color", options: STK_PAL3 }, { k: "accent", label: "Cor do glifo + 'caixinha de' + título + label da caixa + 'responde aí'", type: "color", options: STK_PAL3 }, ], defaults: { title: "dúvidas\n& curiosidades", label: "pergunta", question: "quero saber sobre...", bg: "#eadcbe", fg: "#1b1b1a", accent: "#674689" } }, { id: "story-reels-cover", group: "Stories (1080×1920)", name: "Reels · capa de vídeo", w: 1080, h: 1920, render: tplStoryReelsCover, fields: [ { k: "image", label: "Foto/frame do vídeo (cobre tudo)", type: "image" }, { k: "imgLabel", label: "Label placeholder", type: "text" }, { k: "duration", label: "Duração (ex: 0:30)", type: "text" }, { k: "title", label: "Título (Caveat enorme · use \\n p/ quebrar)", type: "textarea" }, { k: "subtitle", label: "Subtítulo", type: "textarea" }, { k: "handle", label: "@handle", type: "text" }, { k: "bg", label: "Cor de fundo (atrás da foto)", type: "color", options: STK_PAL3 }, { k: "fg", label: "Cor do título + subtítulo + handle (texto sobre a foto)", type: "color", options: STK_PAL3 }, { k: "accent", label: "Cor do glifo no topo", type: "color", options: STK_PAL3 }, { k: "hookColor", label: "Cor da pílula de duração + linha separadora", type: "color", options: STK_PAL3 }, ], defaults: { image: "", imgLabel: "frame do reels", duration: "0:30", title: "5 looks\ncom uma\ncalça só", subtitle: "garimpada por R$ 165 e usada de mil formas durante a semana", handle: "@lirou.closet.65", bg: "#1b1b1a", fg: "#ffffff", accent: "#ffffff", hookColor: "#df4b5a" } }, { id: "story-schedule", group: "Stories (1080×1920)", name: "Agenda semanal · roteiro", w: 1080, h: 1920, render: tplStorySchedule, fields: [ { k: "eyebrow", label: "Eyebrow (topo)", type: "text" }, { k: "title", label: "Título (Caveat)", type: "text" }, { k: "schedule", label: "Agenda (formato 'DIA | atividade' · uma por linha · até 7)", type: "textarea", hint: "ex:\\nseg | drop 05 às 19h\\nter | bazar online" }, { k: "cta", label: "CTA rodapé", type: "text" }, { k: "bg", label: "Cor de fundo do story", type: "color", options: STK_PAL3 }, { k: "fg", label: "Cor da atividade (texto principal de cada linha)", type: "color", options: STK_PAL3 }, { k: "accent", label: "Cor do eyebrow + título + dia da semana + bordas + CTA", type: "color", options: STK_PAL3 }, ], defaults: { eyebrow: "semana de", title: "agenda lirou", schedule: "seg | quiz nos stories · 14h\nqua | bastidores do garimpo\nsex | drop 05 às 19h\nsáb | bazar online\ndom | look da semana", cta: "ative as notificações ✦", bg: "#eadcbe", fg: "#1b1b1a", accent: "#674689" } }, ]; if (window.LIROU_TEMPLATES) { window.LIROU_TEMPLATES = window.LIROU_TEMPLATES.concat(TEMPLATES_V3); }