{"id":14789,"date":"2025-07-19T12:13:51","date_gmt":"2025-07-19T18:13:51","guid":{"rendered":"https:\/\/velaproducciones.com\/?page_id=14789"},"modified":"2026-10-16T14:17:24","modified_gmt":"2026-10-16T20:17:24","slug":"generador-de-buyer-persona","status":"publish","type":"page","link":"https:\/\/velaproducciones.com\/en\/generador-de-buyer-persona\/","title":{"rendered":"Generador de Buyer Persona"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"14789\" class=\"elementor elementor-14789\" data-elementor-post-type=\"page\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-7c10b1ff elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"7c10b1ff\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-71c85b15\" data-id=\"71c85b15\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-62956c12 elementor-widget elementor-widget-text-editor\" data-id=\"62956c12\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\n<p>\u00a0<\/p>\n<p>\u00a0<\/p>\n<p><\/p>\n<p><script src=\"https:\/\/cdn.tailwindcss.com\"><\/script><\/p>\n<p>  <\/p>\n<p><script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/html2pdf.js\/0.10.1\/html2pdf.bundle.min.js\"><\/script><style>\n        body {\n            font-family: 'Inter', sans-serif;\n            background-color: #f9f8ff;\n        }\n        .post-it {\n            box-shadow: 10px 10px 25px rgba(0,0,0,0.1);\n            transition: all 0.3s ease;\n            padding: 2rem;\n            border-radius: 4px;\n            margin-bottom: 2.5rem;\n        }\n        .post-it-yellow { background-color: #fef9c3; transform: rotate(-1.5deg); }\n        .post-it-pink { background-color: #fce7f3; transform: rotate(1deg); }\n        .post-it-blue { background-color: #dbeafe; transform: rotate(-1deg); }\n        .post-it-green { background-color: #dcfce7; transform: rotate(1.2deg); }\n        .post-it-purple { background-color: #e2ddf9; transform: rotate(-0.5deg); }\n\n        .form-label { font-weight: 600; color: #334155; margin-bottom: 0.75rem; display: block; }\n        .form-input, .form-select, .form-textarea {\n            width: 100%; border: 1px solid #d1d5db; border-radius: 0.5rem; padding: 0.75rem 1rem;\n            color: #334155; transition: all 0.2s ease-in-out; background-color: #f9fafb;\n        }\n        .form-input:focus, .form-select:focus, .form-textarea:focus {\n            outline: none; border-color: #4f46e5; box-shadow: 0 0 0 3px rgba(79, 70, 229, 0.2);\n        }\n        .checkbox-label {\n            display: flex; flex-direction: column; align-items: center; justify-content: center; cursor: pointer;\n            padding: 0.75rem 0.5rem; border: 2px solid #e2ddf9; border-radius: 0.75rem; transition: all 0.2s ease-in-out;\n            font-size: 0.8rem; text-align: center; height: 70px;\n        }\n        .checkbox-label svg { margin-bottom: 0.25rem; transition: transform 0.2s; }\n        .checkbox-label:hover { border-color: #e2ddf9; transform: translateY(-2px); }\n        .form-checkbox:checked + .checkbox-label { background-color: #f4f2ff; border-color: #6254e7; color: #4a3ccb; font-weight: 600; }\n        .form-checkbox:checked + .checkbox-label svg { transform: scale(1.1); }\n        \n        .btn {\n            font-weight: 700; padding: 1rem 2rem; border-radius: 0.75rem; transition: all 0.2s;\n            border: none; cursor: pointer; width: 100%; box-shadow: 0 4px 14px 0 rgba(0, 0, 0, 0.1);\n            display: flex; align-items: center; justify-content: center;\n        }\n        .btn:disabled { opacity: 0.7; cursor: not-allowed; }\n        .btn-primary { background-image: linear-gradient(to right, #6254e7, #9289f1); color: white; }\n        .btn-primary:hover:not(:disabled) { transform: translateY(-2px); box-shadow: 0 10px 20px -5px rgba(99, 102, 241, 0.4); }\n        .btn-secondary { background-image: linear-gradient(to right, #10b981, #34d399); color: white; }\n        .btn-secondary:hover:not(:disabled) { transform: translateY(-2px); box-shadow: 0 10px 20px -5px rgba(16, 185, 129, 0.4); }\n        \n        .whiteboard { background-color: #ffffff; border-radius: 1rem; padding: 2.5rem; box-shadow: 0 20px 25px -5px rgb(0 0 0 \/ 0.1), 0 8px 10px -6px rgb(0 0 0 \/ 0.1); }\n        .infographic-header { display: flex; align-items: center; border-bottom: 1px solid #e2ddf9; padding-bottom: 1.5rem; margin-bottom: 1.5rem; }\n        .infographic-avatar-container {\n            width: 100px; height: 100px; border-radius: 50%; margin-right: 1.5rem; border: 4px solid #e2ddf9;\n            display: flex; align-items: center; justify-content: center; background-color: #f4f2ff; overflow: hidden;\n        }\n        .infographic-avatar { width: 100%; height: 100%; border-radius: 50%; object-fit: cover; }\n        .spinner {\n            border: 4px solid rgba(255, 255, 255, 0.3); width: 24px; height: 24px; border-radius: 50%;\n            border-left-color: #ffffff; animation: spin 1s ease infinite; margin-left: 0.75rem;\n        }\n        .avatar-spinner {\n            border: 4px solid rgba(0, 0, 0, 0.1); width: 36px; height: 36px; border-radius: 50%;\n            border-left-color: #6254e7; animation: spin 1s ease infinite;\n        }\n        @keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } }\n        .infographic-quote {\n            font-style: italic; color: #4a3ccb; text-align: center; padding: 1.5rem; background-color: #f4f2ff;\n            border-left: 5px solid #6254e7; margin-bottom: 2rem; border-radius: 0.5rem; font-size: 1.1rem;\n        }\n        .strategy-item { padding: 1rem; background-color: #f9fafb; border-radius: 0.5rem; border: 1px solid #e2ddf9; transition: all 0.2s; }\n        .strategy-item:hover { transform: translateY(-2px); box-shadow: 0 4px 6px -1px rgb(0 0 0 \/ 0.05), 0 2px 4px -2px rgb(0 0 0 \/ 0.05); }\n\n        .infographic-section { padding: 1.5rem; border-radius: 0.75rem; border: 1px solid; }\n        .pdf-footer { text-align: center; font-size: 0.75rem; color: #696687; padding-top: 1.5rem; margin-top: 1.5rem; border-top: 1px solid #e2ddf9;}\n        .pdf-render .post-it { box-shadow: none !important; transform: rotate(0deg) !important; }\n    <\/style><\/p>\n<div id=\"generator-container\" class=\"max-w-4xl mx-auto p-4 md:p-8\"><header class=\"text-center mb-10\"><img decoding=\"async\" class=\"mx-auto h-12 mb-4\" src=\"https:\/\/velaproducciones.com\/wp-content\/uploads\/2024\/11\/vela-producciones.png\" alt=\"Vela Producciones Logo\" width=\"111\" height=\"111\" \/>\n<h1 class=\"text-4xl md:text-5xl font-extrabold text-slate-800 bg-clip-text text-transparent bg-gradient-to-r from-indigo-500 to-purple-500\">Generador de Buyer Persona<\/h1>\n<p class=\"mt-3 text-lg text-slate-600\">Descubre a tu cliente ideal. Responde y crea un perfil estrat\u00e9gico en minutos.<\/p>\n<\/header><form id=\"persona-form\">\n<div class=\"post-it post-it-yellow\">\n<h2 class=\"text-2xl font-bold mb-6 text-slate-800\">1. Perfil Demogr\u00e1fico<\/h2>\n<div class=\"grid grid-cols-1 md:grid-cols-2 gap-6\">\n<div><label class=\"form-label\" for=\"gender\">G\u00e9nero del Persona<\/label><select id=\"gender\" class=\"form-select\">\n<option value=\"femenino\">Femenino<\/option>\n<option value=\"masculino\">Masculino<\/option>\n<option value=\"ambos\">Ambos (sirve para hombres y mujeres)<\/option>\n<\/select><\/div>\n<div><label class=\"form-label\" for=\"age\">Rango de Edad<\/label><select id=\"age\" class=\"form-select\">\n<option>18-24 a\u00f1os<\/option>\n<option>25-34 a\u00f1os<\/option>\n<option>35-44 a\u00f1os<\/option>\n<option>45-55 a\u00f1os<\/option>\n<option>55+ a\u00f1os<\/option>\n<\/select><\/div>\n<div><label class=\"form-label\" for=\"location\">Ubicaci\u00f3n Principal<\/label><input id=\"location\" class=\"form-input\" type=\"text\" placeholder=\"Ej: Ciudad de Guatemala, Zona 10\" \/><\/div>\n<div><label class=\"form-label\" for=\"occupation\">Ocupaci\u00f3n o Rol<\/label><input id=\"occupation\" class=\"form-input\" type=\"text\" placeholder=\"Ej: Gerente, Estudiante, Profesional\" \/><\/div>\n<\/div>\n<\/div>\n<div class=\"post-it post-it-pink\">\n<h2 class=\"text-2xl font-bold mb-6 text-slate-800\">2. Intereses, Metas y Valores<\/h2>\n<div><label class=\"form-label\" for=\"passions\">\u00bfQu\u00e9 le apasiona?<\/label><textarea id=\"passions\" class=\"form-textarea\" rows=\"3\" placeholder=\"Ej: La tecnolog\u00eda, el bienestar, los viajes...\"><\/textarea><\/div>\n<div class=\"mt-6\"><label class=\"form-label\" for=\"future-goals\">\u00bfCu\u00e1les son sus metas a futuro?<\/label><textarea id=\"future-goals\" class=\"form-textarea\" rows=\"3\" placeholder=\"Ej: Crecer profesionalmente, empezar un negocio...\"><\/textarea><\/div>\n<div class=\"mt-6\"><label class=\"form-label\" for=\"brand-affinity\">\u00bfQu\u00e9 marcas admira y por qu\u00e9?<\/label><textarea id=\"brand-affinity\" class=\"form-textarea\" rows=\"3\" placeholder=\"Ej: Apple por su dise\u00f1o, Nike por su inspiraci\u00f3n...\"><\/textarea><\/div>\n<\/div>\n<div class=\"post-it post-it-blue\">\n<h2 class=\"text-2xl font-bold mb-6 text-slate-800\">3. Psicolog\u00eda de la Decisi\u00f3n<\/h2>\n<div><label class=\"form-label\" for=\"info-sources\">\u00bfD\u00f3nde busca informaci\u00f3n para decidir?<\/label><textarea id=\"info-sources\" class=\"form-textarea\" rows=\"3\" placeholder=\"Ej: Blogs de tecnolog\u00eda, podcasts de marketing...\"><\/textarea><\/div>\n<div class=\"mt-6\"><label class=\"form-label\" for=\"purchase-trigger\">\u00bfQu\u00e9 le har\u00eda buscar una soluci\u00f3n AHORA?<\/label><textarea id=\"purchase-trigger\" class=\"form-textarea\" rows=\"3\" placeholder=\"Ej: 'Mi negocio creci\u00f3 y no puedo manejar todo'...\"><\/textarea><\/div>\n<div class=\"mt-6\"><label class=\"form-label\" for=\"purchase-barriers\">\u00bfQu\u00e9 dudas o razones le impedir\u00edan comprar?<\/label><textarea id=\"purchase-barriers\" class=\"form-textarea\" rows=\"3\" placeholder=\"Ej: 'No estoy seguro si funcionar\u00e1 para m\u00ed', 'El precio es muy alto'...\"><\/textarea><\/div>\n<div class=\"mt-6\"><label class=\"form-label\" for=\"success-metric\">\u00bfC\u00f3mo se ver\u00eda el \u00e9xito para esta persona?<\/label><textarea id=\"success-metric\" class=\"form-textarea\" rows=\"3\" placeholder=\"Ej: 'Ahorrar 10 horas a la semana', 'Duplicar mis ventas'...\"><\/textarea><\/div>\n<\/div>\n<div class=\"post-it post-it-green\">\n<h2 class=\"text-2xl font-bold mb-6 text-slate-800\">4. Palabras Claves de B\u00fasqueda<\/h2>\n<div><label class=\"form-label\" for=\"keywords\">\u00bfQu\u00e9 frases o palabras usar\u00eda para buscarte en internet?<\/label><textarea id=\"keywords\" class=\"form-textarea\" rows=\"3\" placeholder=\"Ej: 'mejor software para pymes', 'c\u00f3mo aliviar dolor de espalda'...\"><\/textarea><\/div>\n<\/div>\n<div class=\"post-it post-it-purple\">\n<h2 class=\"text-2xl font-bold mb-6 text-slate-800\">5. Comportamiento y Comunicaci\u00f3n<\/h2>\n<div class=\"grid grid-cols-1 md:grid-cols-2 gap-6\">\n<div><label class=\"form-label\" for=\"buyer-type\">\u00bfQu\u00e9 tipo de comprador es?<\/label><select id=\"buyer-type\" class=\"form-select\">\n<option>Decisor<\/option>\n<option>Influenciable<\/option>\n<option>Racional<\/option>\n<option>Emocional<\/option>\n<option>Impulsivo<\/option>\n<option>Esc\u00e9ptico<\/option>\n<option>Leal<\/option>\n<option>Buscador de Ofertas<\/option>\n<option>Por Prop\u00f3sito<\/option>\n<option>De Conveniencia<\/option>\n<\/select><\/div>\n<div><label class=\"form-label\" for=\"ai-comfort\">Comodidad con Agentes de IA<\/label><select id=\"ai-comfort\" class=\"form-select\">\n<option>Muy C\u00f3modo\/a<\/option>\n<option>C\u00f3modo\/a<\/option>\n<option>Neutral<\/option>\n<option>Inc\u00f3modo\/a<\/option>\n<option>Muy Inc\u00f3modo\/a<\/option>\n<\/select><\/div>\n<\/div>\n<div class=\"mt-6\"><label class=\"form-label\">\u00bfQu\u00e9 redes sociales utiliza m\u00e1s?<\/label>\n<div class=\"grid grid-cols-3 md:grid-cols-6 gap-2 mt-2\">\n<div><input id=\"social-instagram\" class=\"form-checkbox hidden\" type=\"checkbox\" \/><label class=\"checkbox-label\" for=\"social-instagram\">Instagram<\/label><\/div>\n<div><input id=\"social-facebook\" class=\"form-checkbox hidden\" type=\"checkbox\" \/><label class=\"checkbox-label\" for=\"social-facebook\">Facebook<\/label><\/div>\n<div><input id=\"social-tiktok\" class=\"form-checkbox hidden\" type=\"checkbox\" \/><label class=\"checkbox-label\" for=\"social-tiktok\">TikTok<\/label><\/div>\n<div><input id=\"social-linkedin\" class=\"form-checkbox hidden\" type=\"checkbox\" \/><label class=\"checkbox-label\" for=\"social-linkedin\">LinkedIn<\/label><\/div>\n<div><input id=\"social-pinterest\" class=\"form-checkbox hidden\" type=\"checkbox\" \/><label class=\"checkbox-label\" for=\"social-pinterest\">Pinterest<\/label><\/div>\n<div><input id=\"social-x\" class=\"form-checkbox hidden\" type=\"checkbox\" \/><label class=\"checkbox-label\" for=\"social-x\">X<\/label><\/div>\n<\/div>\n<\/div>\n<div class=\"mt-6\"><label class=\"form-label\">\u00bfPor d\u00f3nde prefiere ser contactado?<\/label>\n<div class=\"grid grid-cols-2 md:grid-cols-4 gap-2 mt-2\">\n<div><input id=\"contact-email\" class=\"form-checkbox hidden\" type=\"checkbox\" \/><label class=\"checkbox-label\" for=\"contact-email\">Email<\/label><\/div>\n<div><input id=\"contact-whatsapp\" class=\"form-checkbox hidden\" type=\"checkbox\" \/><label class=\"checkbox-label\" for=\"contact-whatsapp\">WhatsApp<\/label><\/div>\n<div><input id=\"contact-phone\" class=\"form-checkbox hidden\" type=\"checkbox\" \/><label class=\"checkbox-label\" for=\"contact-phone\">Llamada<\/label><\/div>\n<div><input id=\"contact-social\" class=\"form-checkbox hidden\" type=\"checkbox\" \/><label class=\"checkbox-label\" for=\"contact-social\">Redes<\/label><\/div>\n<\/div>\n<\/div>\n<\/div>\n<button id=\"generate-btn\" class=\"btn btn-primary\" type=\"submit\"> <span id=\"btn-text\">Generar Buyer Persona<\/span><\/button>\n<div id=\"btn-spinner\" class=\"spinner hidden\">\u00a0<\/div>\n<\/form><\/div>\n<div id=\"infographic-output\" class=\"hidden max-w-5xl mx-auto p-4 md:p-8\">\n<div id=\"infographic-content\" class=\"whiteboard\">\n<div class=\"infographic-header\">\n<div class=\"infographic-avatar-container\"><img id=\"persona-avatar\" class=\"infographic-avatar hidden\" alt=\"Avatar del Buyer Persona\" \/>\n<div id=\"avatar-spinner\" class=\"avatar-spinner\">\u00a0<\/div>\n<\/div>\n<div>\n<h1 id=\"persona-name\" class=\"text-4xl font-extrabold text-slate-800\">\u00a0<\/h1>\n<h2 id=\"persona-role\" class=\"text-xl text-indigo-600 font-semibold\">\u00a0<\/h2>\n<\/div>\n<\/div>\n<p id=\"persona-quote\" class=\"infographic-quote\">\u00a0<\/p>\n<div class=\"grid grid-cols-1 md:grid-cols-2 gap-6\">\n<div class=\"post-it post-it-yellow\">\n<h3><span>\ud83d\udc64<\/span> Bio y Demograf\u00eda<\/h3>\n<ul class=\"space-y-3 text-slate-700 mt-4\">\n<li class=\"flex items-center\"><span>\ud83c\udf82<\/span><strong class=\"w-24 inline-block ml-2\">Edad:<\/strong> <span id=\"persona-age\"><\/span><\/li>\n<li class=\"flex items-center\"><span>\ud83d\udccd<\/span><strong class=\"w-24 inline-block ml-2\">Ubicaci\u00f3n:<\/strong> <span id=\"persona-location\"><\/span><\/li>\n<li class=\"flex items-center\"><span>\ud83d\udcbc<\/span><strong class=\"w-24 inline-block ml-2\">Ocupaci\u00f3n:<\/strong> <span id=\"persona-occupation\"><\/span><\/li>\n<\/ul>\n<\/div>\n<div class=\"post-it post-it-pink\">\n<h3><span>\ud83c\udfaf<\/span> Metas y Medida del \u00c9xito<\/h3>\n<div class=\"mt-4 space-y-2\">\n<p class=\"text-slate-600 text-sm\"><strong>Objetivos a futuro:<\/strong> <span id=\"persona-future-goals\"><\/span><\/p>\n<p class=\"text-slate-600 text-sm\"><strong>El \u00e9xito se ve como:<\/strong> <span id=\"persona-success-metric\" class=\"font-semibold\"><\/span><\/p>\n<\/div>\n<\/div>\n<div class=\"post-it post-it-blue\">\n<h3><span>\ud83d\udc96<\/span> Intereses y Pasiones<\/h3>\n<p id=\"persona-passions\" class=\"text-slate-700 mt-4\">\u00a0<\/p>\n<\/div>\n<div class=\"post-it post-it-green\">\n<h3><span>\ud83e\udde0<\/span> Psicolog\u00eda de la Decisi\u00f3n<\/h3>\n<ul class=\"space-y-4 text-slate-700 mt-4\">\n<li><strong>Disparador de Compra (Trigger):<\/strong> <span id=\"persona-purchase-trigger\" class=\"block mt-1 text-sm italic\"><\/span><\/li>\n<li><strong>Principales Barreras (Objeciones):<\/strong> <span id=\"persona-purchase-barriers\" class=\"block mt-1 text-sm italic\"><\/span><\/li>\n<li><strong>Fuentes de Confianza:<\/strong> <span id=\"persona-info-sources\" class=\"block mt-1 text-sm italic\"><\/span><\/li>\n<\/ul>\n<\/div>\n<div class=\"md:col-span-2 post-it post-it-yellow\">\n<h3><span>\ud83d\udd11<\/span> Palabras Claves de B\u00fasqueda<\/h3>\n<p id=\"persona-keywords\" class=\"text-slate-700 italic mt-4\">\u00a0<\/p>\n<\/div>\n<div class=\"md:col-span-2 post-it post-it-pink\">\n<h3><span>\ud83d\uded2<\/span> Perfil de Comprador y Afinidad<\/h3>\n<ul class=\"space-y-3 text-slate-700 mt-4\">\n<li><strong>Tipo de Comprador:<\/strong> <span id=\"persona-buyer-type\" class=\"font-semibold text-indigo-700\"><\/span><\/li>\n<li><strong>Marcas que Admira:<\/strong> <span id=\"persona-brand-affinity\"><\/span><\/li>\n<\/ul>\n<\/div>\n<div class=\"md:col-span-2 post-it post-it-blue\">\n<h3><span>\ud83d\udcac<\/span> Comunicaci\u00f3n y Tecnolog\u00eda<\/h3>\n<ul class=\"space-y-3 text-slate-700 mt-4\">\n<li><strong>Redes Sociales Preferidas:<\/strong> <span id=\"persona-social-channels\"><\/span><\/li>\n<li><strong>Canales de Contacto Preferidos:<\/strong> <span id=\"persona-contact-channels\" class=\"font-semibold\"><\/span><\/li>\n<li><strong>Comodidad con Agentes de IA:<\/strong> <span id=\"persona-ai-comfort\" class=\"font-semibold\"><\/span><\/li>\n<\/ul>\n<\/div>\n<div class=\"md:col-span-2 infographic-section bg-gradient-to-br from-indigo-50 to-purple-50 border-indigo-200\">\n<h3 class=\"text-indigo-800 font-bold text-lg\"><span>\ud83d\ude80<\/span> Plan Estrat\u00e9gico de Marketing Sugerido<\/h3>\n<div id=\"persona-strategy\" class=\"space-y-3 text-sm text-indigo-900 mt-4\">\u00a0<\/div>\n<\/div>\n<\/div>\n<div class=\"pdf-footer\">Copyright \u00a9 2025 Derechos Reservados | Powered by: Vela Producciones<\/div>\n<\/div>\n<div class=\"acciones-resultado no-imprimir\">\n  <button type=\"button\" class=\"btn btn-secondary\" id=\"btn-descargar-pdf\">Descargar en PDF<\/button>\n  <button type=\"button\" class=\"btn btn-secondary\" id=\"btn-imprimir\">Imprimir<\/button>\n  <button type=\"button\" class=\"btn btn-reiniciar\" id=\"btn-otro-perfil\">Crear otro perfil<\/button>\n  <p class=\"nota-acciones\">El PDF y la impresi\u00f3n incluyen el perfil completo con tu avatar y el plan de marketing.<\/p>\n<\/div><\/div>\n<p><script>\n        document.addEventListener('DOMContentLoaded', (event) => {\n            const nameData = {\n                femenino: [\"Sof\u00eda\", \"Camila\", \"Valentina\", \"Isabella\", \"Luciana\"],\n                masculino: [\"Mateo\", \"Santiago\", \"Mat\u00edas\", \"Sebasti\u00e1n\", \"Alejandro\"],\n                apellidos: [\"L\u00f3pez\", \"P\u00e9rez\", \"Gonz\u00e1lez\", \"Rodr\u00edguez\", \"Garc\u00eda\"]\n            };\n\n            const form = document.getElementById('persona-form');\n            form.addEventListener('submit', async function(e) {\n                e.preventDefault();\n                \n                const generateBtn = document.getElementById('generate-btn');\n                const btnText = document.getElementById('btn-text');\n                const btnSpinner = document.getElementById('btn-spinner');\n                \n                generateBtn.disabled = true;\n                btnText.innerText = 'Generando Perfil...';\n                btnSpinner.classList.remove('hidden');\n\n                const data = {\n                    gender: document.getElementById('gender').value,\n                    age: document.getElementById('age').value,\n                    location: document.getElementById('location').value,\n                    occupation: document.getElementById('occupation').value,\n                    passions: document.getElementById('passions').value,\n                    futureGoals: document.getElementById('future-goals').value,\n                    brandAffinity: document.getElementById('brand-affinity').value,\n                    infoSources: document.getElementById('info-sources').value,\n                    purchaseTrigger: document.getElementById('purchase-trigger').value,\n                    purchaseBarriers: document.getElementById('purchase-barriers').value,\n                    successMetric: document.getElementById('success-metric').value,\n                    keywords: document.getElementById('keywords').value,\n                    buyerType: document.getElementById('buyer-type').value,\n                    aiComfort: document.getElementById('ai-comfort').value,\n                    socialChannels: Array.from(document.querySelectorAll('input[id^=\"social-\"]:checked')).map(cb => cb.nextElementSibling.innerText),\n                    contactChannels: Array.from(document.querySelectorAll('input[id^=\"contact-\"]:checked')).map(cb => cb.nextElementSibling.innerText),\n                };\n\n                \/* Un solo g\u00e9nero para el nombre y para la foto: con \u00abAmbos\u00bb se elige uno al azar y ese\n                   mismo se manda al generador de im\u00e1genes. *\/\n                const generoFoto = (data.gender === 'ambos')\n                    ? (Math.random() < 0.5 ? 'femenino' : 'masculino')\n                    : data.gender;\n                const listaNombres = nameData[generoFoto] || nameData.femenino;\n                const firstName = listaNombres[Math.floor(Math.random() * listaNombres.length)];\n                const lastName = nameData.apellidos[Math.floor(Math.random() * nameData.apellidos.length)];\n                const fullName = `${firstName} ${lastName}`;\n                \n                const llmPromise = fetch('\/wp-json\/vela\/v1\/generate-persona', {\n                    method: 'POST',\n                    headers: { 'Content-Type': 'application\/json' },\n                    body: JSON.stringify({ personaData: data })\n                }).then(res => {\n                    if (!res.ok) {\n                        \/* 429 = el servidor est\u00e1 limitando solicitudes; 503 = ocupado. No es un\n                           error de quien visita: se avisa en pantalla y se sigue con sus datos. *\/\n                        if (window.velaAvisoProveedor) { window.velaAvisoProveedor('texto', res.status); }\n                        throw new Error('La respuesta del servidor para el texto no fue exitosa (' + res.status + ').');\n                    }\n                    return res.json();\n                }).catch(err => {\n                    console.error(\"Error en la API de persona:\", err);\n                    return null;\n                });\n\n                const imagePromise = fetch('\/wp-json\/vela\/v1\/generate-image', {\n                    method: 'POST',\n                    headers: { 'Content-Type': 'application\/json' },\n                    body: JSON.stringify({\n                        gender: generoFoto,\n                        age: data.age,\n                        occupation: data.occupation,\n                        personaData: data\n                    })\n                }).then(res => {\n                    if (!res.ok) {\n                        if (window.velaAvisoProveedor) { window.velaAvisoProveedor('imagen', res.status); }\n                        throw new Error('La respuesta del servidor para la imagen no fue exitosa (' + res.status + ').');\n                    }\n                    return res.json();\n                }).then(result => result.imageUrl)\n                .catch(err => {\n                    console.error(\"Error en la API de imagen:\", err);\n                    return velaInicialesSvg(firstName.charAt(0) + lastName.charAt(0));\n                });\n\n                const [enhancedData, imageUrl] = await Promise.all([llmPromise, imagePromise]);\n\n                document.getElementById('generator-container').classList.add('hidden');\n                document.getElementById('infographic-output').classList.remove('hidden');\n\n                document.getElementById('persona-name').innerText = fullName;\n                document.getElementById('persona-role').innerText = data.occupation || 'Rol Principal';\n                document.getElementById('persona-age').innerText = data.age;\n                document.getElementById('persona-location').innerText = data.location || 'Guatemala';\n                document.getElementById('persona-occupation').innerText = data.occupation || 'No especificado';\n                document.getElementById('persona-buyer-type').innerText = data.buyerType;\n                document.getElementById('persona-social-channels').innerText = data.socialChannels.join(', ') || 'Ninguna seleccionada';\n                document.getElementById('persona-contact-channels').innerText = data.contactChannels.join(', ') || 'Ninguno seleccionado';\n                document.getElementById('persona-ai-comfort').innerText = data.aiComfort;\n\n                if (enhancedData) {\n                    document.getElementById('persona-quote').innerText = `\"${enhancedData.quote || ''}\"`;\n                    document.getElementById('persona-future-goals').innerText = enhancedData.futureGoalsExpanded || data.futureGoals;\n                    document.getElementById('persona-success-metric').innerText = enhancedData.successMetricExpanded || data.successMetric;\n                    document.getElementById('persona-passions').innerText = enhancedData.passionsExpanded || data.passions;\n                    document.getElementById('persona-purchase-trigger').innerText = enhancedData.purchaseTriggerExpanded || data.purchaseTrigger;\n                    document.getElementById('persona-purchase-barriers').innerText = enhancedData.purchaseBarriersExpanded || data.purchaseBarriers;\n                    document.getElementById('persona-info-sources').innerText = enhancedData.infoSourcesExpanded || data.infoSources;\n                    document.getElementById('persona-brand-affinity').innerText = enhancedData.brandAffinityExpanded || data.brandAffinity;\n                    document.getElementById('persona-keywords').innerText = enhancedData.keywordsExpanded || data.keywords;\n                } else {\n                    document.getElementById('persona-quote').innerText = `\"${data.successMetric.split('. ')[0] || 'Una cita que resuma mi meta principal.'}\"`;\n                    document.getElementById('persona-future-goals').innerText = data.futureGoals || 'No especificado.';\n                    document.getElementById('persona-success-metric').innerText = data.successMetric || 'No definido.';\n                    document.getElementById('persona-passions').innerText = data.passions || 'No especificado.';\n                    document.getElementById('persona-purchase-trigger').innerText = data.purchaseTrigger || 'No especificado.';\n                    document.getElementById('persona-purchase-barriers').innerText = data.purchaseBarriers || 'No especificado.';\n                    document.getElementById('persona-info-sources').innerText = data.infoSources || 'No especificado.';\n                    document.getElementById('persona-brand-affinity').innerText = data.brandAffinity || 'No especificado.';\n                    document.getElementById('persona-keywords').innerText = data.keywords || 'No especificadas.';\n                }\n\n                const avatarImg = document.getElementById('persona-avatar');\n                const avatarSpinner = document.getElementById('avatar-spinner');\n                avatarImg.src = imageUrl;\n                avatarImg.onload = () => {\n                    avatarImg.classList.remove('hidden');\n                    avatarSpinner.classList.add('hidden');\n                };\n                 avatarImg.onerror = () => {\n                    avatarSpinner.classList.add('hidden');\n                    avatarImg.src = velaInicialesSvg(firstName.charAt(0) + lastName.charAt(0));\n                    avatarImg.classList.remove('hidden');\n                };\n\n                let strategyHTML = '';\n                strategyHTML += `<div class=\"strategy-item\"><strong>1. Activo Digital Central (P\u00e1gina Web):<\/strong> Es tu base de operaciones. Debe ser profesional, r\u00e1pida y comunicar claramente c\u00f3mo ayudas al cliente a lograr su 'medida de \u00e9xito': <strong>'${data.successMetric || 'sus metas'}'<\/strong>. Es el destino final de toda tu publicidad.<\/div>`;\n                strategyHTML += `<div class=\"strategy-item\"><strong>2. Marketing de Contenidos Estrat\u00e9gico:<\/strong> Crea contenido (art\u00edculos, videos, gu\u00edas en PDF) que responda directamente a sus barreras: <strong>'${data.purchaseBarriers || 'sus dudas'}'<\/strong>. Esto genera confianza y demuestra tu expertise antes de que siquiera te contacten.<\/div>`;\n                strategyHTML += `<div class=\"strategy-item\"><strong>3. Posicionamiento en Buscadores (SEO):<\/strong> Utiliza sus propias palabras (<strong>'${data.keywords || 'b\u00fasquedas relevantes'}'<\/strong>) para optimizar tu web y crear contenido que responda a sus b\u00fasquedas en Google.<\/div>`;\n                if (data.socialChannels.length > 0) {\n                    strategyHTML += `<div class=\"strategy-item\"><strong>4. Activaci\u00f3n en Redes Sociales:<\/strong> Conc\u00e9ntrate en <strong>${data.socialChannels.join(', ')}<\/strong>. El contenido debe centrarse en el 'disparador de compra' (<strong>'${data.purchaseTrigger || 'su necesidad principal'}'<\/strong>) para ser relevante y oportuno, captando su atenci\u00f3n en el momento exacto de necesidad.<\/div>`;\n                }\n                strategyHTML += `<div class=\"strategy-item\"><strong>5. Publicidad Segmentada (SEM\/Social Ads):<\/strong> Invierte en anuncios pagados usando sus palabras clave y dirigi\u00e9ndolos a su perfil demogr\u00e1fico y de intereses. Una campa\u00f1a bien segmentada puede generar prospectos de alta calidad r\u00e1pidamente.<\/div>`;\n                if (data.infoSources) {\n                    strategyHTML += `<div class=\"strategy-item\"><strong>6. Estrategia de Colaboraciones:<\/strong> Identifica a los expertos o medios que tu cliente sigue (<strong>'${data.infoSources}'<\/strong>) y busca oportunidades de colaboraci\u00f3n, como entrevistas en podcasts o art\u00edculos de invitado.<\/div>`;\n                }\n                strategyHTML += `<div class=\"strategy-item\"><strong>7. Email Marketing y Nutrici\u00f3n de Leads:<\/strong> Ofrece un recurso gratuito (gu\u00eda, checklist) en tu web a cambio de su email. Luego, usa una secuencia de correos autom\u00e1ticos para educarlos, superar sus objeciones y presentar tu oferta.<\/div>`;\n                if (data.brandAffinity) {\n                    strategyHTML += `<div class=\"strategy-item\"><strong>8. Alineaci\u00f3n de Marca y Experiencia:<\/strong> Tu cliente admira marcas como <strong>'${data.brandAffinity}'<\/strong>. Analiza qu\u00e9 tienen en com\u00fan y aseg\u00farate de que la experiencia con tu marca refleje esas mismas cualidades.<\/div>`;\n                }\n                if (data.aiComfort.includes('C\u00f3modo')) {\n                    strategyHTML += `<div class=\"strategy-item\"><strong>9. Automatizaci\u00f3n Inteligente:<\/strong> Dado que tu cliente se siente c\u00f3modo con la IA, implementa un chatbot en tu web para responder preguntas frecuentes 24\/7 y agendar citas.<\/div>`;\n                }\n                strategyHTML += `<div class=\"strategy-item\"><strong>10. Gesti\u00f3n de Relaciones (CRM):<\/strong> Utiliza un CRM para centralizar la informaci\u00f3n de cada prospecto y cliente. Da seguimiento personalizado a trav\u00e9s de sus canales preferidos (<strong>${data.contactChannels.join(', ') || 'Email'}<\/strong>) para construir relaciones a largo plazo.<\/div>`;\n\n                document.getElementById('persona-strategy').innerHTML = strategyHTML;\n                \n                generateBtn.disabled = false;\n                btnText.innerText = 'Generar Buyer Persona';\n                btnSpinner.classList.add('hidden');\n            });\n        });\n\n        function downloadPDF() {\n            const element = document.getElementById('infographic-content');\n            element.classList.add('pdf-render');\n            const personaName = document.getElementById('persona-name').innerText.replace(\/ \/g, '_');\n            const opt = {\n                margin:       [0.2, 0.2, 0.2, 0.2],\n                filename:     `Buyer_Persona_${personaName}.pdf`,\n                image:        { type: 'jpeg', quality: 0.98 },\n                html2canvas:  { scale: 2, useCORS: true, letterRendering: true },\n                jsPDF:        { unit: 'in', format: 'letter', orientation: 'portrait' }\n            };\n            html2pdf().set(opt).from(element).save().then(() => {\n                element.classList.remove('pdf-render');\n            });\n        }\n    <\/script><\/p>\n<p>\u00ab`<\/p>\n\n<p class=\"wp-block-paragraph\">\u00a0<\/p>\n\n<script>\n\/* Acciones del resultado (Vela, 2026-10-10). Va aparte del guion principal para no tocarlo. *\/\n(function () {\n  function limpiarResultado() {\n    ['persona-name','persona-role','persona-age','persona-location','persona-occupation',\n     'persona-buyer-type','persona-social-channels','persona-contact-channels','persona-ai-comfort',\n     'persona-quote','persona-future-goals','persona-success-metric','persona-passions',\n     'persona-purchase-trigger','persona-purchase-barriers','persona-info-sources',\n     'persona-brand-affinity','persona-keywords'].forEach(function (id) {\n      var el = document.getElementById(id);\n      if (el) { el.textContent = ''; }\n    });\n    var estrategia = document.getElementById('persona-strategy');\n    if (estrategia) { estrategia.innerHTML = ''; }\n    var avatar = document.getElementById('persona-avatar');\n    if (avatar) { avatar.removeAttribute('src'); avatar.classList.add('hidden'); }\n    var spinner = document.getElementById('avatar-spinner');\n    if (spinner) { spinner.classList.remove('hidden'); }\n  }\n\n  function crearOtroPerfil() {\n    var salida = document.getElementById('infographic-output');\n    var generador = document.getElementById('generator-container');\n    var formulario = document.getElementById('persona-form');\n    if (formulario) { formulario.reset(); }          \/\/ deja el formulario como al principio\n    limpiarResultado();\n    if (salida) { salida.classList.add('hidden'); }\n    if (generador) { generador.classList.remove('hidden'); }\n    var boton = document.getElementById('generate-btn');\n    var texto = document.getElementById('btn-text');\n    var flechita = document.getElementById('btn-spinner');\n    if (boton) { boton.disabled = false; }\n    if (texto) { texto.innerText = 'Generar Buyer Persona'; }\n    if (flechita) { flechita.classList.add('hidden'); }\n    var destino = document.getElementById('generator-container');\n    if (destino && destino.scrollIntoView) { destino.scrollIntoView({ behavior: 'smooth', block: 'start' }); }\n  }\n\n  document.addEventListener('DOMContentLoaded', function () {\n    var pdf = document.getElementById('btn-descargar-pdf');\n    var imp = document.getElementById('btn-imprimir');\n    var otro = document.getElementById('btn-otro-perfil');\n    if (pdf) {\n      pdf.addEventListener('click', function () {\n        if (typeof downloadPDF === 'function') {\n          pdf.disabled = true;\n          var original = pdf.innerText;\n          pdf.innerText = 'Preparando el PDF...';\n          try { downloadPDF(); } finally { setTimeout(function () { pdf.disabled = false; pdf.innerText = original; }, 2500); }\n        }\n      });\n    }\n    if (imp) { imp.addEventListener('click', function () { window.print(); }); }\n    if (otro) { otro.addEventListener('click', crearOtroPerfil); }\n  });\n})();\n<\/script>\n\n<style>\n\/* Acciones del resultado: PDF, imprimir y volver a empezar (Vela, 2026-10-10) *\/\n.acciones-resultado { display: flex; flex-wrap: wrap; gap: .75rem; max-width: 1000px; margin: 1.5rem auto 0; }\n.acciones-resultado .btn { flex: 1 1 190px; width: auto; }\n.btn-outline {\n  background: #fff; color: #4a3ccb; border: 2px solid #e2ddf9; font-weight: 700;\n  padding: 1rem 2rem; border-radius: .75rem; cursor: pointer; display: flex; align-items: center;\n  justify-content: center; box-shadow: 0 4px 14px 0 rgba(0,0,0,.06); transition: all .2s;\n  font-family: inherit; font-size: 1rem;\n}\n.btn-outline:hover { border-color: #6254e7; transform: translateY(-2px); }\n.acciones-resultado .nota-acciones { flex: 1 1 100%; font-size: .82rem; color: #696687; text-align: center; margin: 0; }\n\n\/* Impresi\u00f3n: solo la infograf\u00eda, sin formulario ni botones *\/\n@media print {\n  #generator-container, #generador-formulario, .acciones-resultado, .no-imprimir,\n  header, footer, nav, .chat-burbuja, #btn-spinner { display: none !important; }\n  body { background: #fff !important; }\n  #infographic-output { display: block !important; padding: 0 !important; max-width: 100% !important; }\n  #infographic-content.whiteboard {\n    box-shadow: none !important; border: 1px solid #e2ddf9 !important; padding: 0 !important;\n    break-inside: avoid; page-break-inside: avoid;\n  }\n  .infographic-section { break-inside: avoid; page-break-inside: avoid; }\n  .pdf-footer { display: block !important; text-align: center; font-size: .8rem; color: #696687;\n    border-top: 1px solid #e2ddf9; margin-top: 1.5rem; padding-top: .75rem; }\n}\n<\/style>\n<!-- VELA-ANTIDESBORDE-INICIO -->\n<style>\n\/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n   ARREGLOS DE LA FICHA DEL BUYER PERSONA \u2014 texto que se sal\u00eda del cuadro\n   \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n   Reportado por Carla el 2026-10-10: \u00abalgunas palabras no quedan bien dentro de su\n   cuadro, algunas se desbordan y otras se ven cortadas hasta por la mitad\u00bb.\n\n   LA CAUSA, medida en el navegador: cada l\u00ednea del perfil es\n       <li class=\"flex items-center\">\n         <span>\ud83c\udf82<\/span><strong class=\"w-24 inline-block\">Edad:<\/strong> <span>35-44 a\u00f1os<\/span>\n       <\/li>\n   \u00b7 `w-24` = ancho FIJO de 96 px, y etiquetas como \u00abCanales de Contacto Preferidos:\u00bb\n     miden m\u00e1s del doble \u2192 el texto se sale de su caja y se monta encima del valor.\n   \u00b7 El <li> es `flex` sin `wrap` \u2192 el valor no puede bajar a la l\u00ednea siguiente.\n   \u00b7 El h1 del nombre ten\u00eda la altura justa de dos l\u00edneas: las letras que bajan (g, j, p)\n     rozaban el borde.\n\n   Las reglas de abajo son las m\u00ednimas para que nada se salga ni se corte, en m\u00f3vil y en\n   escritorio. No cambian colores, ni tama\u00f1os de letra, ni el dise\u00f1o: solo dejan que el\n   texto se acomode.\n   \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\n\n\/* 1 \u00b7 la lista del perfil se parte en dos l\u00edneas cuando hace falta *\/\n#infographic-content li { flex-wrap: wrap; align-items: flex-start; gap: .1rem .4rem; }\n\/* 2 \u00b7 las etiquetas dejan de tener ancho fijo: usan el que necesiten *\/\n#infographic-content li strong { width: auto !important; min-width: 5.5rem; margin-right: .2rem; }\n\/* 3 \u00b7 los valores largos (ciudades, oficios, palabras clave) se parten en vez de salirse *\/\n#infographic-content li span, #infographic-content li strong,\n#infographic-content .strategy-item, #infographic-content p { overflow-wrap: anywhere; }\n\/* 4 \u00b7 el nombre con espacio para las letras que bajan *\/\n#persona-name { line-height: 1.22; padding-bottom: .08em; }\n\/* 5 \u00b7 los hijos de la rejilla pueden encogerse (si no, desbordan la tarjeta) *\/\n#infographic-content .grid > * { min-width: 0; }\n\/* 6 \u00b7 el texto del avatar y su caja, alineados aunque el nombre sea largo *\/\n#infographic-content .infographic-header { flex-wrap: wrap; }\n\/* 7 \u00b7 en el m\u00f3vil: menos relleno y los botones a lo ancho *\/\n@media (max-width: 640px) {\n  #infographic-content.post-it, #infographic-content { padding: 1rem !important; }\n  #infographic-output { padding: .75rem !important; }\n  .acciones-resultado .btn { flex: 1 1 100%; }\n  #infographic-content li strong { min-width: 0; }\n}\n\n\/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n   8 \u00b7 LOS BOTONES DEL TEMA TIENEN ALTURA FIJA (50 px)\n   \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n   La hoja del tema ewebot trae `button, input[type=\"submit\"] { height: 50px; }`.\n   En esta p\u00e1gina afecta a los botones de la herramienta: si un texto ocupa dos\n   l\u00edneas (por ejemplo \u00abCrear otro perfil\u00bb en un tel\u00e9fono), queda cortado.\n   Se devuelve la altura autom\u00e1tica SOLO a los botones de la herramienta.\n   \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\n#generator-container button, .acciones-resultado button, #infographic-output button {\n  height: auto !important; min-height: 44px; overflow: visible; text-transform: none;\n}\n\n\/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n   9 \u00b7 CAMPOS DEL FORMULARIO: el tema les pisa el relleno\n   \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n   La hoja del tema trae `input[type=\"text\"], select { height: 41px; padding: 8px 0; }`,\n   que gana por especificidad a nuestras clases. Efecto (medido el 2026-10-10): los\n   campos de \u00abG\u00e9nero del Persona\u00bb, \u00abRango de Edad\u00bb, etc. perd\u00edan el relleno lateral y el\n   texto quedaba pegado al borde, como si se saliera de su caja. Estas reglas devuelven\n   el relleno y la altura autom\u00e1tica SOLO a los campos de la herramienta.\n   \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\n#generator-container .form-input, #generator-container .form-select,\n#generator-container .form-textarea, #generator-container input[type=\"text\"] {\n  border-radius: .75rem !important;\n  height: auto !important; min-height: 3rem !important; max-height: none !important;\n  padding: .8rem 1rem !important; line-height: 1.45 !important;\n  box-sizing: border-box !important; overflow: visible !important;\n}\n#generator-container select { text-overflow: ellipsis; }\n#generator-container .form-label { line-height: 1.4; }\n\n\/* Los botones de la herramienta tampoco se aprietan: el ancho lo pone su texto. *\/\n.acciones-resultado .btn, #generator-container .btn { flex: 0 1 auto; width: auto; max-width: 100%;\n  padding: .95rem 1.4rem; white-space: normal; overflow-wrap: anywhere; text-align: center; }\n.acciones-resultado { align-items: center; }\n\n\/* \u2500\u2500 paleta pastel y color por funci\u00f3n (archivo compartido) \u2500\u2500 *\/\n\/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n   PALETA PASTEL Y COLOR POR FUNCI\u00d3N \u00b7 Herramientas de Vela Producciones\n   \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n   Pedido de Carla (2026-10-10): \u00abasignar colores espec\u00edficos a todos los botones y\n   tarjetas de cada herramienta, asegurando coherencia visual entre ellas\u2026 y aplicar\n   sombras tanto a las tarjetas como a los botones para aportar profundidad\u00bb.\n   Referencia de color: las tarjetas (post-it) del Generador de Buyer Persona, que ya\n   usaban esta paleta suave:\n       amarillo #fef9c3 \u00b7 rosa #fce7f3 \u00b7 azul #dbeafe \u00b7 verde #dcfce7 \u00b7 lila #e2ddf9\n   (m\u00e1s el lila clar\u00edsimo #f4f2ff que la ficha ya usaba en la cita y el avatar).\n\n   ESTE ARCHIVO ES LA \u00daNICA FUENTE DE LA PALETA. Se inyecta, tal cual, en las cinco\n   herramientas:\n     \u00b7 las tres nuevas (Calculadora, Validador, Plan de contenido) \u2014 v\u00eda `generar.py`,\n       que ya pega `diseno.css` + `anti-desborde.css`;\n     \u00b7 \u00abArquitectura del Emprendedor\u00bb \u2014 v\u00eda `generar-snippet.py`;\n     \u00b7 el Generador de Buyer Persona \u2014 v\u00eda `parche-buyer-persona.py`.\n   Cambiar un color aqu\u00ed lo cambia en las cinco. Nada de copias.\n\n   \u2500\u2500 REGLA DE COLOR DE LOS BOTONES (una funci\u00f3n = un color) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n     \u00edndigo   .btn-primario    producir el resultado: Generar, Calcular, Analizar, Armar plan\n     esmeralda .btn-secundario  sacar el documento: Imprimir, Descargar \/ Guardar en PDF\n     rosa     .btn-reiniciar    empezar de nuevo: Reiniciar, Borrar, Crear otro perfil\n     amarillo .btn-ejemplo      ver un ejemplo \/ cargar datos de muestra\n     azul     .btn-copiar       copiar al portapapeles (resumen, enlace, tabla)\n     lila     .btn-neutro       todo lo dem\u00e1s (volver, cerrar, ayuda, seg\u00fan)\n\n   \u2500\u2500 REGLA DE COLOR DE LAS TARJETAS (un significado = un color) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n     lila     .tono-lila        el resultado: lo que la persona se lleva\n     azul     .tono-azul        n\u00fameros, c\u00e1lculos, datos duros\n     verde    .tono-verde       lo que est\u00e1 bien, lo validado, el plan a seguir\n     amarillo .tono-amarillo    aviso, riesgo, cuidado, lo que hay que vigilar\n     rosa     .tono-rosa        pasos, proceso, personas\n     \u00edndigo   .tono-indigo      dato de entrada, nota neutral\n\n   Las sombras van en dos escalas (reposo y elevada) para que todo tenga la misma\n   profundidad: `--sombra-tarjeta` \/ `--sombra-tarjeta-alto` y `--sombra-boton` \/\n   `--sombra-boton-alto`.\n   \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\n\n:root{\n  \/* \u2500\u2500 paleta pastel (referencia: las tarjetas del Buyer Persona) \u2500\u2500 *\/\n  --p-lila:#e2ddf9;      --p-lila-borde:#ddd6fe;      --p-lila-texto:#5b21b6;\n  --p-azul:#dbeafe;      --p-azul-borde:#bfdbfe;      --p-azul-texto:#1e40af;\n  --p-verde:#dcfce7;     --p-verde-borde:#bbf7d0;     --p-verde-texto:#166534;\n  --p-amarillo:#fef9c3;  --p-amarillo-borde:#fde68a;  --p-amarillo-texto:#854d0e;\n  --p-rosa:#fce7f3;      --p-rosa-borde:#fbcfe8;      --p-rosa-texto:#9d174d;\n  --p-indigo:#f4f2ff;    --p-indigo-borde:#e2ddf9;    --p-indigo-texto:#3730a3;\n\n  \/* \u2500\u2500 sombras: la misma profundidad en todas las herramientas \u2500\u2500 *\/\n  --sombra-tarjeta:0 12px 28px -14px rgba(15,23,42,.30), 0 2px 6px -2px rgba(15,23,42,.06);\n  --sombra-tarjeta-alto:0 22px 40px -18px rgba(15,23,42,.34), 0 3px 8px -2px rgba(15,23,42,.07);\n  --sombra-post-it:10px 10px 25px rgba(0,0,0,.10);\n  --sombra-post-it-alto:14px 14px 30px rgba(0,0,0,.14);\n  --sombra-boton:0 4px 12px -2px rgba(15,23,42,.18);\n  --sombra-boton-alto:0 12px 22px -8px rgba(15,23,42,.34);\n}\n\n\/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 TARJETAS: una sola profundidad \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n   Todas las tarjetas de las cinco herramientas comparten radio y sombra. Los post-it del\n   Buyer Persona conservan su sombra desplazada y su inclinaci\u00f3n: es su se\u00f1o de identidad. *\/\n.blanco,.tarjeta-modulo,.pregunta,.dimension,.metrica,.consejo,.nota,.aviso,.realidad,\n.pasos-vacio,.resultado-caja,\n\/* las tarjetas de la ficha del Buyer Persona: misma profundidad que las dem\u00e1s *\/\n.whiteboard,.infographic-section,.strategy-item,.infographic-quote{\n  box-shadow:var(--sombra-tarjeta);\n  transition:transform .25s ease, box-shadow .25s ease;\n}\n.blanco:hover,.tarjeta-modulo:hover,.dimension:hover,.metrica:hover{\n  box-shadow:var(--sombra-tarjeta-alto);\n  transform:translateY(-2px);\n}\n.post-it{box-shadow:var(--sombra-post-it)}\n.post-it:hover{box-shadow:var(--sombra-post-it-alto)}\n\n\/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 TONOS PASTEL DE TARJETA \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n   Se pone la clase en la tarjeta (`.blanco.tono-azul`) y el color viene de aqu\u00ed. *\/\n.tono-lila{background:var(--p-lila); border:1px solid var(--p-lila-borde)}\n.tono-azul{background:var(--p-azul); border:1px solid var(--p-azul-borde)}\n.tono-verde{background:var(--p-verde); border:1px solid var(--p-verde-borde)}\n.tono-amarillo{background:var(--p-amarillo); border:1px solid var(--p-amarillo-borde)}\n.tono-rosa{background:var(--p-rosa); border:1px solid var(--p-rosa-borde)}\n.tono-indigo{background:var(--p-indigo); border:1px solid var(--p-indigo-borde)}\n\n\/* El texto de una tarjeta pastel pide m\u00e1s contraste que el gris pizarra normal. *\/\n.tono-lila h2,.tono-lila h3,.tono-lila h4,.tono-lila .rotulo,.tono-lila .nombre{color:var(--p-lila-texto)}\n.tono-azul h2,.tono-azul h3,.tono-azul h4,.tono-azul .rotulo,.tono-azul .nombre{color:var(--p-azul-texto)}\n.tono-verde h2,.tono-verde h3,.tono-verde h4,.tono-verde .rotulo,.tono-verde .nombre{color:var(--p-verde-texto)}\n.tono-amarillo h2,.tono-amarillo h3,.tono-amarillo h4,.tono-amarillo .rotulo,.tono-amarillo .nombre{color:var(--p-amarillo-texto)}\n.tono-rosa h2,.tono-rosa h3,.tono-rosa h4,.tono-rosa .rotulo,.tono-rosa .nombre{color:var(--p-rosa-texto)}\n.tono-indigo h2,.tono-indigo h3,.tono-indigo h4,.tono-indigo .rotulo,.tono-indigo .nombre{color:var(--p-indigo-texto)}\n.tono-lila .gris,.tono-azul .gris,.tono-verde .gris,.tono-amarillo .gris,.tono-rosa .gris,\n.tono-indigo .gris{color:#475569}\n\n\/* Los recuadros de dentro de una tarjeta pastel se quedan claros para que se distingan. *\/\n.tono-lila .consejo,.tono-azul .consejo,.tono-verde .consejo,.tono-amarillo .consejo,\n.tono-rosa .consejo,.tono-indigo .consejo{background:rgba(255,255,255,.65)}\n.tono-lila .nota,.tono-azul .nota,.tono-verde .nota,.tono-amarillo .nota,\n.tono-rosa .nota,.tono-indigo .nota{background:rgba(255,255,255,.65)}\n\n\/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 BOTONES: un color por funci\u00f3n, con sombra \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\n.btn{box-shadow:var(--sombra-boton)}\n\/* El relleno se declara DOS veces a prop\u00f3sito: el tema del sitio pinta los <button> con un gris\n   (#efefef) y, si el degradado tardara en pintarse, se ver\u00eda el gris por debajo. Con\n   `background-color` del mismo tono, el bot\u00f3n nunca aparece gris. *\/\n.btn-primario{background-color:#6254e7; background-image:linear-gradient(to right,#6254e7,#9289f1); color:#fff}\n.btn-primario:hover:not(:disabled){transform:translateY(-2px);\n  box-shadow:0 14px 26px -10px rgba(99,102,241,.65)}\n.btn-secundario{background-color:#10b981; background-image:linear-gradient(to right,#10b981,#34d399); color:#fff}\n.btn-secundario:hover:not(:disabled){transform:translateY(-2px);\n  box-shadow:0 14px 26px -10px rgba(16,185,129,.65)}\n.btn-reiniciar{background:var(--p-rosa); border:1px solid var(--p-rosa-borde); color:var(--p-rosa-texto);\n  box-shadow:0 8px 18px -8px rgba(236,72,153,.55)}\n.btn-reiniciar:hover:not(:disabled){transform:translateY(-2px); border-color:#f9a8d4;\n  box-shadow:0 14px 26px -10px rgba(236,72,153,.6)}\n.btn-ejemplo{background:var(--p-amarillo); border:1px solid var(--p-amarillo-borde); color:var(--p-amarillo-texto);\n  box-shadow:0 8px 18px -8px rgba(245,158,11,.55)}\n.btn-ejemplo:hover:not(:disabled){transform:translateY(-2px); border-color:#fcd34d;\n  box-shadow:0 14px 26px -10px rgba(245,158,11,.6)}\n.btn-copiar{background:var(--p-azul); border:1px solid var(--p-azul-borde); color:var(--p-azul-texto);\n  box-shadow:0 8px 18px -8px rgba(59,130,246,.55)}\n.btn-copiar:hover:not(:disabled){transform:translateY(-2px); border-color:#93c5fd;\n  box-shadow:0 14px 26px -10px rgba(59,130,246,.6)}\n.btn-neutro{background:var(--p-indigo); border:1px solid var(--p-indigo-borde); color:var(--p-indigo-texto);\n  box-shadow:0 8px 18px -8px rgba(99,102,241,.45)}\n.btn-neutro:hover:not(:disabled){transform:translateY(-2px); border-color:#a5b4fc; color:#312e81;\n  box-shadow:0 14px 26px -10px rgba(99,102,241,.5)}\n\n\/* Al pulsar, el bot\u00f3n se hunde: da sensaci\u00f3n de que respondi\u00f3. *\/\n.btn:active:not(:disabled){transform:translateY(0); box-shadow:var(--sombra-boton)}\n\n\/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 PESTA\u00d1AS \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n   La pesta\u00f1a activa va en \u00edndigo (es la que produce), las dem\u00e1s en blanco con sombra. *\/\n.pestana{box-shadow:var(--sombra-boton)}\n.pestana.activa{box-shadow:0 10px 20px -8px rgba(99,102,241,.6)}\n\n\/* En impresi\u00f3n, nada de sombras ni elevaciones: el papel no las tiene. *\/\n@media print{\n  .blanco,.tarjeta-modulo,.pregunta,.dimension,.metrica,.consejo,.nota,.aviso,.post-it,.pestana,.btn{\n    box-shadow:none !important; transform:none !important;\n  }\n}\n@media (prefers-reduced-motion:reduce){\n  .blanco,.tarjeta-modulo,.dimension,.metrica,.post-it,.btn,.pestana{transition:none !important}\n}\n<\/style>\n<!-- VELA-ANTIDESBORDE-FIN -->\n\n<!-- VELA-ACCIONES-JS-INICIO -->\n<script>\n\/* Acciones del resultado (Vela, 2026-10-10). Va aparte del guion principal para no tocarlo. *\/\n(function () {\n  \/* Iniciales dibujadas aqu\u00ed (sin depender de ning\u00fan servicio externo). *\/\n  window.velaInicialesSvg = function (iniciales) {\n    var texto = (iniciales || 'VP').toString().toUpperCase().slice(0, 2);\n    var svg = '<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"300\" height=\"300\">' +\n      '<rect width=\"300\" height=\"300\" fill=\"#9289f1\"\/>' +\n      '<text x=\"150\" y=\"150\" font-family=\"Inter,Arial,sans-serif\" font-size=\"110\" fill=\"#ffffff\" ' +\n      'text-anchor=\"middle\" dominant-baseline=\"central\">' + texto + '<\/text><\/svg>';\n    return 'data:image\/svg+xml;charset=utf-8,' + encodeURIComponent(svg);\n  };\n\n  \/* Si la foto no se pudo generar (tope de solicitudes o fallo del proveedor), se avisa en vez de\n     dejar una imagen rota o en blanco. *\/\n  function avisarFotoNoGenerada(motivo) {\n    var avatar = document.getElementById('persona-avatar');\n    if (!avatar) { return; }\n    var caja = avatar.parentNode;\n    var aviso = document.getElementById('vela-aviso-foto');\n    if (!aviso) {\n      aviso = document.createElement('p');\n      aviso.id = 'vela-aviso-foto';\n      aviso.className = 'micro gris';\n      aviso.style.textAlign = 'center';\n      aviso.style.margin = '.4rem 0 0';\n      caja.appendChild(aviso);\n    }\n    aviso.textContent = motivo || 'No se pudo generar la foto en este momento. Vuelve a intentarlo en unos minutos.';\n  }\n\n  \/* Aviso general cuando el generador no pudo escribir la parte con inteligencia artificial o la\n     foto. Antes, al llegar al tope de solicitudes (HTTP 429) el navegador no dec\u00eda nada: el perfil\n     sal\u00eda con los datos escritos por la persona y la foto con iniciales, sin explicar por qu\u00e9.\n     Ahora se avisa arriba de la ficha, en lenguaje llano, y el aviso se rehace si despu\u00e9s falla la\n     otra parte (as\u00ed no se queda a medias: si fallan las dos, lo dice). *\/\n  window.velaFallas = { texto: null, imagen: null };\n  window.velaAvisoProveedor = function (parte, estado) {\n    if (parte === 'texto' || parte === 'imagen') { window.velaFallas[parte] = estado || 0; }\n    var ficha = document.getElementById('infographic-output');\n    if (!ficha) { return; }\n    var aviso = document.getElementById('vela-aviso-proveedor');\n    if (!aviso) {\n      aviso = document.createElement('div');\n      aviso.id = 'vela-aviso-proveedor';\n      aviso.className = 'vela-aviso no-imprimir';\n      ficha.insertBefore(aviso, ficha.firstChild);\n    }\n    var tope = (window.velaFallas.texto === 429 || window.velaFallas.texto === 503 ||\n                window.velaFallas.imagen === 429 || window.velaFallas.imagen === 503);\n    var falloTexto = (window.velaFallas.texto !== null);\n    var falloFoto = (window.velaFallas.imagen !== null);\n    var queFalta = (falloTexto && falloFoto) ? 'el texto trabajado y la foto'\n                 : (falloTexto ? 'el texto trabajado' : 'la foto');\n    if (falloTexto && falloFoto) {\n      aviso.textContent = tope\n        ? 'Ahora mismo hay mucha gente generando perfiles. El perfil qued\u00f3 con lo que escribiste: ' +\n          'falta ' + queFalta + '. Vuelve a intentarlo en unos minutos.'\n        : 'No pudimos conectar con el generador en este instante. El perfil qued\u00f3 con lo que ' +\n          'escribiste: falta ' + queFalta + '. Vuelve a intentarlo en unos minutos.';\n    } else if (falloFoto) {\n      aviso.textContent = tope\n        ? 'La foto del perfil no se pudo generar porque hay mucha gente us\u00e1ndolo ahora mismo. ' +\n          'Mientras tanto mostramos las iniciales; vuelve a intentarlo en unos minutos.'\n        : 'La foto del perfil no se pudo generar en este momento. Mientras tanto mostramos las iniciales.';\n    } else {\n      aviso.textContent = tope\n        ? 'Ahora mismo hay mucha gente generando perfiles. Te mostramos el perfil con lo que ' +\n          'escribiste; el texto trabajado y la foto vuelven en unos minutos.'\n        : 'No pudimos conectar con el generador en este instante. El perfil qued\u00f3 armado con la ' +\n          'informaci\u00f3n que escribiste; vuelve a intentarlo en unos minutos.';\n    }\n  };\n\n  function limpiarResultado() {\n    ['persona-name','persona-role','persona-age','persona-location','persona-occupation',\n     'persona-buyer-type','persona-social-channels','persona-contact-channels','persona-ai-comfort',\n     'persona-quote','persona-future-goals','persona-success-metric','persona-passions',\n     'persona-purchase-trigger','persona-purchase-barriers','persona-info-sources',\n     'persona-brand-affinity','persona-keywords'].forEach(function (id) {\n      var el = document.getElementById(id);\n      if (el) { el.textContent = ''; }\n    });\n    var estrategia = document.getElementById('persona-strategy');\n    if (estrategia) { estrategia.innerHTML = ''; }\n    var avatar = document.getElementById('persona-avatar');\n    if (avatar) { avatar.removeAttribute('src'); avatar.classList.add('hidden'); }\n    var spinner = document.getElementById('avatar-spinner');\n    if (spinner) { spinner.classList.remove('hidden'); }\n    \/* Los avisos de la vez anterior no deben quedarse pegados al perfil nuevo. *\/\n    if (window.velaFallas) { window.velaFallas.texto = null; window.velaFallas.imagen = null; }\n    ['vela-aviso-proveedor', 'vela-aviso-foto'].forEach(function (id) {\n      var viejo = document.getElementById(id);\n      if (viejo && viejo.parentNode) { viejo.parentNode.removeChild(viejo); }\n    });\n  }\n\n  function crearOtroPerfil() {\n    var salida = document.getElementById('infographic-output');\n    var generador = document.getElementById('generator-container');\n    var formulario = document.getElementById('persona-form');\n    if (formulario) { formulario.reset(); }          \/\/ deja el formulario como al principio\n    limpiarResultado();\n    if (salida) { salida.classList.add('hidden'); }\n    if (generador) { generador.classList.remove('hidden'); }\n    var boton = document.getElementById('generate-btn');\n    var texto = document.getElementById('btn-text');\n    var flechita = document.getElementById('btn-spinner');\n    if (boton) { boton.disabled = false; }\n    if (texto) { texto.innerText = 'Generar Buyer Persona'; }\n    if (flechita) { flechita.classList.add('hidden'); }\n    var destino = document.getElementById('generator-container');\n    if (destino && destino.scrollIntoView) { destino.scrollIntoView({ behavior: 'smooth', block: 'start' }); }\n  }\n\n  \/* PDF. Dos arreglos sobre la funci\u00f3n original:\n       \u00b7 Se genera desde una COPIA de la ficha anclada arriba a la izquierda, para que el\n         desplazamiento del documento no se convierta en hueco vac\u00edo al principio.\n       \u00b7 Se le dice a html2pdf que los saltos de p\u00e1gina solo ocurran entre tarjetas, nunca antes de\n         la ficha entera (que no cabe en una hoja y hac\u00eda que el PDF arrancara con un folio en blanco).\n     La funci\u00f3n original (downloadPDF) queda sustituida: el bot\u00f3n resuelve el nombre en el momento\n     del clic, as\u00ed que esta versi\u00f3n es la que se usa. *\/\n  window.downloadPDF = function () {\n    var original = document.getElementById('infographic-content');\n    if (!original) { return; }\n    if (typeof html2pdf !== 'function') { window.print(); return; }\n\n    var clon = original.cloneNode(true);\n    clon.removeAttribute('id');\n    clon.classList.add('pdf-render');\n    var caja = document.createElement('div');\n    caja.setAttribute('data-vela-pdf', '1');\n    caja.style.cssText = 'position:fixed;left:0;top:0;width:1000px;background:#fff;z-index:99999;' +\n      'padding:0;margin:0;box-shadow:none;';\n    caja.appendChild(clon);\n    document.body.appendChild(caja);\n\n    var nombre = ((document.getElementById('persona-name') || {}).innerText || 'Buyer_Persona')\n      .trim().replace(\/\\s+\/g, '_');\n    var opciones = {\n      margin: [0.15, 0.15, 0.15, 0.15],\n      filename: 'Buyer_Persona_' + nombre + '.pdf',\n      image: { type: 'jpeg', quality: 0.95 },\n      html2canvas: { scale: 2, useCORS: true, letterRendering: true, scrollX: 0, scrollY: 0, windowWidth: 1000 },\n      jsPDF: { unit: 'in', format: 'letter', orientation: 'portrait' },\n      pagebreak: { mode: ['css', 'legacy'], avoid: ['.infographic-section', '.post-it', '.dimension'] }\n    };\n    html2pdf().set(opciones).from(clon).save().then(function () {\n      caja.remove();\n    }).catch(function () {\n      caja.remove();\n      window.print();   \/\/ si algo falla, al menos que pueda imprimirlo\n    });\n  };\n\n  \/* Nota (2026-10-10): al imprimir, la ficha quedaba a 274 px del borde superior. La causa se midi\u00f3\n     en el navegador: la cabecera del tema (`.gt3_header_builder`, 108 px) y el t\u00edtulo de la p\u00e1gina\n     (`.gt3-page-title_wrapper`, 156 px) siguen ocupando su sitio, porque `visibility: hidden` los\n     oculta pero NO libera el espacio. Se arregla en el CSS de impresi\u00f3n (esos dos bloques a\n     `display: none`), sin mover la ficha en el DOM: mover elementos obliga a devolverlos a su sitio\n     y, si el navegador no avisa, la p\u00e1gina se queda desordenada en pantalla. *\/\n\n  document.addEventListener('DOMContentLoaded', function () {\n    \/\/ El avatar avisa si la foto no carg\u00f3: se ponen las iniciales y se explica.\n    var avatar = document.getElementById('persona-avatar');\n    if (avatar) {\n      avatar.addEventListener('error', function () {\n        var nombre = (document.getElementById('persona-name') || {}).innerText || 'VP';\n        var partes = nombre.trim().split(\/\\s+\/);\n        var iniciales = (partes[0] || '').charAt(0) + ((partes[1] || '').charAt(0) || '');\n        if (avatar.src.indexOf('data:image\/svg') === -1) {\n          avatar.src = window.velaInicialesSvg(iniciales || 'VP');\n        }\n        avisarFotoNoGenerada();\n      });\n    }\n\n    var pdf = document.getElementById('btn-descargar-pdf');\n    var imp = document.getElementById('btn-imprimir');\n    var otro = document.getElementById('btn-otro-perfil');\n    if (pdf) {\n      pdf.addEventListener('click', function () {\n        if (typeof downloadPDF === 'function') {\n          pdf.disabled = true;\n          var original = pdf.innerText;\n          pdf.innerText = 'Preparando el PDF...';\n          try { downloadPDF(); } finally { setTimeout(function () { pdf.disabled = false; pdf.innerText = original; }, 2500); }\n        }\n      });\n    }\n    if (imp) { imp.addEventListener('click', function () { window.print(); }); }\n    if (otro) { otro.addEventListener('click', crearOtroPerfil); }\n  });\n})();\n<\/script>\n<!-- VELA-ACCIONES-JS-FIN -->\n\n<!-- VELA-ACCIONES-CSS-INICIO -->\n<style>\n\/* Acciones del resultado: PDF, imprimir y volver a empezar (Vela, 2026-10-10) *\/\n.acciones-resultado { display: flex; flex-wrap: wrap; gap: .75rem; max-width: 1000px; margin: 1.5rem auto 0; }\n.acciones-resultado .btn { flex: 0 1 auto; width: auto; }\n.acciones-resultado .nota-acciones { flex: 1 1 100%; font-size: .82rem; color: #696687; text-align: center; margin: 0; }\n\n\/* Bot\u00f3n blanco con borde (\u00abCrear otro perfil\u00bb). Esta p\u00e1gina nombra sus botones en ingl\u00e9s\n   (.btn-primary, .btn-secondary); .btn-neutro es el nombre del sistema compartido de las dem\u00e1s\n   herramientas (herramientas\/comun\/diseno.css), as\u00ed que se define aqu\u00ed igual para que el bot\u00f3n\n   se vea id\u00e9ntico en las cinco. Carla, 2026-10-10: \u00absi un bot\u00f3n es verde, debe serlo en todas\n   las herramientas\u00bb. *\/\n.btn-neutro { background: #ffffff; color: #334155; border: 1px solid #e2ddf9; }\n.btn-neutro:hover:not(:disabled) { border-color: #e2ddf9; color: #4a3ccb; transform: translateY(-2px); }\n\n\/* Aviso cuando el generador no pudo escribir el texto o la foto (por ejemplo, tope de\n   solicitudes). \u00c1mbar, para que se lea sin asustar; nunca sale en el PDF ni al imprimir. *\/\n.vela-aviso { background: #fffbeb; border: 1px solid #fde68a; border-left: 4px solid #f59e0b;\n  color: #78350f; border-radius: .5rem; padding: .75rem 1rem; margin: 0 0 1rem; font-size: .9rem;\n  line-height: 1.45; }\n\n\/* Impresi\u00f3n: SOLO la ficha, y pegada al principio de la primera hoja.\n   \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n   POR QU\u00c9 (Carla, 2026-10-10: \u00abal descargar o dar imprimir, el documento inicia en una p\u00e1gina en\n   blanco y hasta la segunda p\u00e1gina se ve el documento\u00bb). Dos causas, las dos medidas en el navegador:\n     \u00b7 La ficha ten\u00eda `break-inside: avoid` y mide ~3.400 px, m\u00e1s que una hoja. Cuando un bloque\n       marcado como \u00abno partir\u00bb no cabe en una p\u00e1gina, el navegador lo empuja ENTERO a la siguiente:\n       de ah\u00ed el folio en blanco. html2pdf respeta el mismo CSS, as\u00ed que el PDF sal\u00eda igual.\n     \u00b7 Al imprimir se colaba toda la p\u00e1gina del sitio (cabecera, h\u00e9roe y t\u00edtulo del tema) antes de\n       la ficha.\n   Arreglo: se oculta todo con `visibility` y solo se ve la ficha, anclada arriba a la izquierda con\n   position absolute; y `break-inside` vuelve a `auto` en la ficha, dejando el \u00abno partir\u00bb solo en\n   las tarjetas peque\u00f1as. *\/\n@media print {\n  body * { visibility: hidden !important; }\n  #infographic-output, #infographic-output * { visibility: visible !important; }\n  #infographic-output {\n    position: absolute !important; left: 0 !important; top: 0 !important;\n    width: 100% !important; max-width: 100% !important; padding: 0 !important; margin: 0 !important;\n  }\n  #infographic-content, #infographic-content.whiteboard {\n    box-shadow: none !important; border: none !important; padding: 0 !important; margin: 0 !important;\n    break-inside: auto !important; page-break-inside: auto !important;\n  }\n  .infographic-section, .post-it, .dimension, .experimento { break-inside: avoid; page-break-inside: avoid; }\n  #generator-container, .acciones-resultado, .no-imprimir, #btn-spinner, .chat-burbuja { display: none !important; }\n  \/* La cabecera del tema (108 px) y el t\u00edtulo de la p\u00e1gina (156 px) se quedaban como espacio en blanco\n     al principio del primer folio: `visibility: hidden` los oculta pero conserva su sitio, as\u00ed que la\n     ficha \u2014anclada con `top: 0` a su contenedor\u2014 empezaba a 274 px del borde (medido, 2026-10-10).\n     Con `display: none` desaparecen del flujo y la ficha arranca pegada al borde de la hoja. *\/\n  .gt3_header_builder, .gt3-page-title_wrapper, .gt3-page-title { display: none !important; }\n  body { margin: 0 !important; padding: 0 !important; background: #fff !important; }\n  .pdf-footer { display: block !important; text-align: center; font-size: .8rem; color: #696687;\n    border-top: 1px solid #e2ddf9; margin-top: 1rem; padding-top: .5rem; }\n}\n<\/style>\n<!-- VELA-ACCIONES-CSS-FIN -->\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>\u00a0 \u00a0 Generador de Buyer Persona Descubre a tu cliente ideal. Responde y crea un perfil estrat\u00e9gico en minutos. 1. Perfil Demogr\u00e1fico G\u00e9nero del PersonaFemeninoMasculino Rango de Edad18-24 a\u00f1os25-34 a\u00f1os35-44 a\u00f1os45-55 a\u00f1os55+ a\u00f1os Ubicaci\u00f3n Principal Ocupaci\u00f3n o Rol 2. Intereses, Metas y Valores \u00bfQu\u00e9 le apasiona? \u00bfCu\u00e1les son sus metas a futuro? \u00bfQu\u00e9 marcas admira [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-14789","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.7 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Generador de Buyer Persona &#187; Vela Producciones<\/title>\n<meta name=\"description\" content=\"Gener\u00e1 el buyer persona de tu negocio gratis: defin\u00ed a qui\u00e9n le vend\u00e9s, qu\u00e9 necesita y c\u00f3mo hablarle para mejorar tus campa\u00f1as.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/velaproducciones.com\/en\/generador-de-buyer-persona\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Generador de Buyer Persona &#187; Vela Producciones\" \/>\n<meta property=\"og:description\" content=\"Gener\u00e1 el buyer persona de tu negocio gratis: defin\u00ed a qui\u00e9n le vend\u00e9s, qu\u00e9 necesita y c\u00f3mo hablarle para mejorar tus campa\u00f1as.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/velaproducciones.com\/en\/generador-de-buyer-persona\/\" \/>\n<meta property=\"og:site_name\" content=\"Vela Producciones\" \/>\n<meta property=\"article:modified_time\" content=\"2026-10-16T20:17:24+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/velaproducciones.com\/wp-content\/uploads\/2024\/11\/vela-producciones.png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/velaproducciones.com\\\/generador-de-buyer-persona\\\/\",\"url\":\"https:\\\/\\\/velaproducciones.com\\\/generador-de-buyer-persona\\\/\",\"name\":\"Generador de Buyer Persona &#187; Vela Producciones\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/velaproducciones.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/velaproducciones.com\\\/generador-de-buyer-persona\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/velaproducciones.com\\\/generador-de-buyer-persona\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/velaproducciones.com\\\/wp-content\\\/uploads\\\/2024\\\/11\\\/vela-producciones.png\",\"datePublished\":\"2025-07-19T18:13:51+00:00\",\"dateModified\":\"2026-10-16T20:17:24+00:00\",\"description\":\"Gener\u00e1 el buyer persona de tu negocio gratis: defin\u00ed a qui\u00e9n le vend\u00e9s, qu\u00e9 necesita y c\u00f3mo hablarle para mejorar tus campa\u00f1as.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/velaproducciones.com\\\/generador-de-buyer-persona\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/velaproducciones.com\\\/generador-de-buyer-persona\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/velaproducciones.com\\\/generador-de-buyer-persona\\\/#primaryimage\",\"url\":\"https:\\\/\\\/velaproducciones.com\\\/wp-content\\\/uploads\\\/2024\\\/11\\\/vela-producciones.png\",\"contentUrl\":\"https:\\\/\\\/velaproducciones.com\\\/wp-content\\\/uploads\\\/2024\\\/11\\\/vela-producciones.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/velaproducciones.com\\\/generador-de-buyer-persona\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\\\/\\\/velaproducciones.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Generador de Buyer Persona\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/velaproducciones.com\\\/#website\",\"url\":\"https:\\\/\\\/velaproducciones.com\\\/\",\"name\":\"Vela Producciones\",\"description\":\"Creaci\u00f3n y Manejo de P\u00e1ginas WEB, Optimizaci\u00f3n SEO y de Estrategias de Marketing Digital\",\"publisher\":{\"@id\":\"https:\\\/\\\/velaproducciones.com\\\/#organization\"},\"alternateName\":\"VelaWeb\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/velaproducciones.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Organization\",\"LocalBusiness\",\"ProfessionalService\"],\"@id\":\"https:\\\/\\\/velaproducciones.com\\\/#organization\",\"name\":\"Vela Producciones\",\"alternateName\":[\"Grupo Vela S.A.\",\"Vela Producciones Guatemala\"],\"url\":\"https:\\\/\\\/velaproducciones.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/velaproducciones.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/velaproducciones.com\\\/wp-content\\\/uploads\\\/2024\\\/11\\\/Logo_Vela_Producciones-500x500-1.png\",\"contentUrl\":\"https:\\\/\\\/velaproducciones.com\\\/wp-content\\\/uploads\\\/2024\\\/11\\\/Logo_Vela_Producciones-500x500-1.png\",\"width\":540,\"height\":540,\"caption\":\"Grupo Vela S.A.\"},\"image\":{\"@id\":\"https:\\\/\\\/velaproducciones.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.linkedin.com\\\/company\\\/velaproducciones\",\"https:\\\/\\\/www.instagram.com\\\/velawebproducciones\\\/\",\"https:\\\/\\\/www.facebook.com\\\/VelaWebProducciones\"],\"legalName\":\"Grupo Vela S.A.\",\"description\":\"Vela Producciones es la divisi\u00f3n comercial de Grupo Vela S.A. para marketing digital, producci\u00f3n audiovisual y eventos, en Ciudad de Guatemala. Estrategia, contenido, posicionamiento (SEO y visibilidad en asistentes de IA), pauta y producci\u00f3n, con medici\u00f3n.\",\"address\":{\"@type\":\"PostalAddress\",\"streetAddress\":\"Edificio 01010, oficina 702\",\"addressLocality\":\"Ciudad de Guatemala\",\"addressRegion\":\"Guatemala\",\"postalCode\":\"01010\",\"addressCountry\":\"GT\"},\"telephone\":\"+502 2220-9556\",\"contactPoint\":[{\"@type\":\"ContactPoint\",\"contactType\":\"customer service\",\"telephone\":\"+502 2220-9556\",\"areaServed\":\"GT\",\"availableLanguage\":[\"es\"]},{\"@type\":\"ContactPoint\",\"contactType\":\"sales\",\"telephone\":\"+1 305 447-7124\",\"areaServed\":\"US\",\"availableLanguage\":[\"es\",\"en\"]}],\"areaServed\":[{\"@type\":\"Country\",\"name\":\"Guatemala\"},{\"@type\":\"Country\",\"name\":\"Estados Unidos\"}],\"openingHoursSpecification\":[{\"@type\":\"OpeningHoursSpecification\",\"dayOfWeek\":[\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\"],\"opens\":\"09:00\",\"closes\":\"17:00\"}],\"knowsAbout\":[\"Marketing digital\",\"Posicionamiento en buscadores (SEO)\",\"Visibilidad en asistentes de IA (GEO y AEO)\",\"Comercio electr\u00f3nico y WooCommerce\",\"Redes sociales\",\"Google Ads y Meta Ads\",\"Producci\u00f3n audiovisual\",\"Transmisi\u00f3n de eventos\",\"Fotograf\u00eda comercial\",\"Anal\u00edtica y medici\u00f3n\"],\"hasOfferCatalog\":{\"@type\":\"OfferCatalog\",\"name\":\"Servicios de Vela Producciones\",\"itemListElement\":[{\"@type\":\"Offer\",\"itemOffered\":{\"@type\":\"Service\",\"name\":\"Desarrollo web y ecommerce\",\"description\":\"Sitios web, tiendas en l\u00ednea, optimizaci\u00f3n de velocidad y estructura t\u00e9cnica.\"}},{\"@type\":\"Offer\",\"itemOffered\":{\"@type\":\"Service\",\"name\":\"Posicionamiento SEO\",\"description\":\"Optimizaci\u00f3n org\u00e1nica: investigaci\u00f3n de palabras clave, contenido, enlazado interno y t\u00e9cnico.\"}},{\"@type\":\"Offer\",\"itemOffered\":{\"@type\":\"Service\",\"name\":\"GEO y AEO (visibilidad en asistentes de IA)\",\"description\":\"Optimizaci\u00f3n para que ChatGPT, Gemini y Perplexity citen y recomienden la marca: datos estructurados, entidad consistente y medici\u00f3n.\"}},{\"@type\":\"Offer\",\"itemOffered\":{\"@type\":\"Service\",\"name\":\"Redes sociales\",\"description\":\"Estrategia, producci\u00f3n de contenido y calendarizaci\u00f3n para Instagram, Facebook, TikTok y LinkedIn.\"}},{\"@type\":\"Offer\",\"itemOffered\":{\"@type\":\"Service\",\"name\":\"Campa\u00f1as SEM y pauta digital\",\"description\":\"Google Ads, Meta Ads y TikTok Ads, con seguimiento de conversiones.\"}},{\"@type\":\"Offer\",\"itemOffered\":{\"@type\":\"Service\",\"name\":\"Producci\u00f3n de video corporativo\",\"description\":\"Spots publicitarios, videos institucionales, reels y piezas narrativas para marca.\"}},{\"@type\":\"Offer\",\"itemOffered\":{\"@type\":\"Service\",\"name\":\"Transmisiones y cobertura de eventos\",\"description\":\"Producci\u00f3n multic\u00e1mara, streaming en vivo y cobertura para eventos corporativos.\"}},{\"@type\":\"Offer\",\"itemOffered\":{\"@type\":\"Service\",\"name\":\"Fotograf\u00eda comercial\",\"description\":\"Producto, corporativa y de eventos.\"}},{\"@type\":\"Offer\",\"itemOffered\":{\"@type\":\"Service\",\"name\":\"Dise\u00f1o de marca e identidad visual\",\"description\":\"Logotipo, manual de marca y aplicaciones.\"}},{\"@type\":\"Offer\",\"itemOffered\":{\"@type\":\"Service\",\"name\":\"Anal\u00edtica y reportes\",\"description\":\"Configuraci\u00f3n de medici\u00f3n y reportes de resultados por canal.\"}}]}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Generador de Buyer Persona &#187; Vela Producciones","description":"Gener\u00e1 el buyer persona de tu negocio gratis: defin\u00ed a qui\u00e9n le vend\u00e9s, qu\u00e9 necesita y c\u00f3mo hablarle para mejorar tus campa\u00f1as.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/velaproducciones.com\/en\/generador-de-buyer-persona\/","og_locale":"en_US","og_type":"article","og_title":"Generador de Buyer Persona &#187; Vela Producciones","og_description":"Gener\u00e1 el buyer persona de tu negocio gratis: defin\u00ed a qui\u00e9n le vend\u00e9s, qu\u00e9 necesita y c\u00f3mo hablarle para mejorar tus campa\u00f1as.","og_url":"https:\/\/velaproducciones.com\/en\/generador-de-buyer-persona\/","og_site_name":"Vela Producciones","article_modified_time":"2026-10-16T20:17:24+00:00","og_image":[{"url":"https:\/\/velaproducciones.com\/wp-content\/uploads\/2024\/11\/vela-producciones.png","type":"","width":"","height":""}],"twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/velaproducciones.com\/generador-de-buyer-persona\/","url":"https:\/\/velaproducciones.com\/generador-de-buyer-persona\/","name":"Generador de Buyer Persona &#187; Vela Producciones","isPartOf":{"@id":"https:\/\/velaproducciones.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/velaproducciones.com\/generador-de-buyer-persona\/#primaryimage"},"image":{"@id":"https:\/\/velaproducciones.com\/generador-de-buyer-persona\/#primaryimage"},"thumbnailUrl":"https:\/\/velaproducciones.com\/wp-content\/uploads\/2024\/11\/vela-producciones.png","datePublished":"2025-07-19T18:13:51+00:00","dateModified":"2026-10-16T20:17:24+00:00","description":"Gener\u00e1 el buyer persona de tu negocio gratis: defin\u00ed a qui\u00e9n le vend\u00e9s, qu\u00e9 necesita y c\u00f3mo hablarle para mejorar tus campa\u00f1as.","breadcrumb":{"@id":"https:\/\/velaproducciones.com\/generador-de-buyer-persona\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/velaproducciones.com\/generador-de-buyer-persona\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/velaproducciones.com\/generador-de-buyer-persona\/#primaryimage","url":"https:\/\/velaproducciones.com\/wp-content\/uploads\/2024\/11\/vela-producciones.png","contentUrl":"https:\/\/velaproducciones.com\/wp-content\/uploads\/2024\/11\/vela-producciones.png"},{"@type":"BreadcrumbList","@id":"https:\/\/velaproducciones.com\/generador-de-buyer-persona\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/velaproducciones.com\/"},{"@type":"ListItem","position":2,"name":"Generador de Buyer Persona"}]},{"@type":"WebSite","@id":"https:\/\/velaproducciones.com\/#website","url":"https:\/\/velaproducciones.com\/","name":"Vela Producciones","description":"Creaci\u00f3n y Manejo de P\u00e1ginas WEB, Optimizaci\u00f3n SEO y de Estrategias de Marketing Digital","publisher":{"@id":"https:\/\/velaproducciones.com\/#organization"},"alternateName":"VelaWeb","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/velaproducciones.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Organization","LocalBusiness","ProfessionalService"],"@id":"https:\/\/velaproducciones.com\/#organization","name":"Vela Producciones","alternateName":["Grupo Vela S.A.","Vela Producciones Guatemala"],"url":"https:\/\/velaproducciones.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/velaproducciones.com\/#\/schema\/logo\/image\/","url":"https:\/\/velaproducciones.com\/wp-content\/uploads\/2024\/11\/Logo_Vela_Producciones-500x500-1.png","contentUrl":"https:\/\/velaproducciones.com\/wp-content\/uploads\/2024\/11\/Logo_Vela_Producciones-500x500-1.png","width":540,"height":540,"caption":"Grupo Vela S.A."},"image":{"@id":"https:\/\/velaproducciones.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.linkedin.com\/company\/velaproducciones","https:\/\/www.instagram.com\/velawebproducciones\/","https:\/\/www.facebook.com\/VelaWebProducciones"],"legalName":"Grupo Vela S.A.","description":"Vela Producciones es la divisi\u00f3n comercial de Grupo Vela S.A. para marketing digital, producci\u00f3n audiovisual y eventos, en Ciudad de Guatemala. Estrategia, contenido, posicionamiento (SEO y visibilidad en asistentes de IA), pauta y producci\u00f3n, con medici\u00f3n.","address":{"@type":"PostalAddress","streetAddress":"Edificio 01010, oficina 702","addressLocality":"Ciudad de Guatemala","addressRegion":"Guatemala","postalCode":"01010","addressCountry":"GT"},"telephone":"+502 2220-9556","contactPoint":[{"@type":"ContactPoint","contactType":"customer service","telephone":"+502 2220-9556","areaServed":"GT","availableLanguage":["es"]},{"@type":"ContactPoint","contactType":"sales","telephone":"+1 305 447-7124","areaServed":"US","availableLanguage":["es","en"]}],"areaServed":[{"@type":"Country","name":"Guatemala"},{"@type":"Country","name":"Estados Unidos"}],"openingHoursSpecification":[{"@type":"OpeningHoursSpecification","dayOfWeek":["Monday","Tuesday","Wednesday","Thursday","Friday"],"opens":"09:00","closes":"17:00"}],"knowsAbout":["Marketing digital","Posicionamiento en buscadores (SEO)","Visibilidad en asistentes de IA (GEO y AEO)","Comercio electr\u00f3nico y WooCommerce","Redes sociales","Google Ads y Meta Ads","Producci\u00f3n audiovisual","Transmisi\u00f3n de eventos","Fotograf\u00eda comercial","Anal\u00edtica y medici\u00f3n"],"hasOfferCatalog":{"@type":"OfferCatalog","name":"Servicios de Vela Producciones","itemListElement":[{"@type":"Offer","itemOffered":{"@type":"Service","name":"Desarrollo web y ecommerce","description":"Sitios web, tiendas en l\u00ednea, optimizaci\u00f3n de velocidad y estructura t\u00e9cnica."}},{"@type":"Offer","itemOffered":{"@type":"Service","name":"Posicionamiento SEO","description":"Optimizaci\u00f3n org\u00e1nica: investigaci\u00f3n de palabras clave, contenido, enlazado interno y t\u00e9cnico."}},{"@type":"Offer","itemOffered":{"@type":"Service","name":"GEO y AEO (visibilidad en asistentes de IA)","description":"Optimizaci\u00f3n para que ChatGPT, Gemini y Perplexity citen y recomienden la marca: datos estructurados, entidad consistente y medici\u00f3n."}},{"@type":"Offer","itemOffered":{"@type":"Service","name":"Redes sociales","description":"Estrategia, producci\u00f3n de contenido y calendarizaci\u00f3n para Instagram, Facebook, TikTok y LinkedIn."}},{"@type":"Offer","itemOffered":{"@type":"Service","name":"Campa\u00f1as SEM y pauta digital","description":"Google Ads, Meta Ads y TikTok Ads, con seguimiento de conversiones."}},{"@type":"Offer","itemOffered":{"@type":"Service","name":"Producci\u00f3n de video corporativo","description":"Spots publicitarios, videos institucionales, reels y piezas narrativas para marca."}},{"@type":"Offer","itemOffered":{"@type":"Service","name":"Transmisiones y cobertura de eventos","description":"Producci\u00f3n multic\u00e1mara, streaming en vivo y cobertura para eventos corporativos."}},{"@type":"Offer","itemOffered":{"@type":"Service","name":"Fotograf\u00eda comercial","description":"Producto, corporativa y de eventos."}},{"@type":"Offer","itemOffered":{"@type":"Service","name":"Dise\u00f1o de marca e identidad visual","description":"Logotipo, manual de marca y aplicaciones."}},{"@type":"Offer","itemOffered":{"@type":"Service","name":"Anal\u00edtica y reportes","description":"Configuraci\u00f3n de medici\u00f3n y reportes de resultados por canal."}}]}}]}},"_links":{"self":[{"href":"https:\/\/velaproducciones.com\/en\/wp-json\/wp\/v2\/pages\/14789","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/velaproducciones.com\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/velaproducciones.com\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/velaproducciones.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/velaproducciones.com\/en\/wp-json\/wp\/v2\/comments?post=14789"}],"version-history":[{"count":47,"href":"https:\/\/velaproducciones.com\/en\/wp-json\/wp\/v2\/pages\/14789\/revisions"}],"predecessor-version":[{"id":15366,"href":"https:\/\/velaproducciones.com\/en\/wp-json\/wp\/v2\/pages\/14789\/revisions\/15366"}],"wp:attachment":[{"href":"https:\/\/velaproducciones.com\/en\/wp-json\/wp\/v2\/media?parent=14789"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}