PageSourceSearch

https://satrack.com/co/wp-content/cache/min/2/co/wp-content/themes…/assets/js/satrack-quiz.js?ver=1790164876

js satrack.com collected 2026-09-24 11:03:41 UTC 75,639 bytes, 236 lines download raw bytes

1(function(){"use strict";var inlineData=null;try{var inlineDataElement=document.querySelector("#satrackQuizDataInline");if(inlineDataElement&&inlineDataElement.textContent){inlineData=JSON.parse(inlineDataElement.textContent)}}catch(e){console.error("Error parsing inline data:",e);inlineData=null}
2if(!inlineData){inlineData={questions:[],webhook_url:"",event:null,event_id:0,event_source:"",event_key:"",event_slug:"",event_name:"",show_email_checkbox:"yes",profiles:[],can_manage:!1,events_nonce:"",all_events:[],admin_action:"",admin_tab:""}}
3if(!inlineData.events_nonce&&window.SatrackQuizConfig&&SatrackQuizConfig.settings_nonce){inlineData.events_nonce=SatrackQuizConfig.settings_nonce}
4function parseJsonFromElement(element){if(!element||!element.textContent){return null}
5try{return JSON.parse(element.textContent)}catch(error){console.error("Error parsing dashboard data:",error);return null}}
6function escapeHtml(value){return String(value==null?"":value).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#039;")}
7function formatLiveNumber(value){var number=Number(value||0);return number.toLocaleString("es-CO")}
8function renderLiveKpis(root,data){var target=root.querySelector("[data-live-kpis]");if(!target)return;var dp=data.dominant_profile||{};var dpLabel=dp.label||"—";var dpDetail=dp.percent?dp.percent+"% del grupo":"Sin respuestas aún";var dpColor=dp.color||"";var kpis=[{label:"Personas suscritas",value:data.total_submissions||0,detail:"Registros del evento"},{label:"Diagnósticos completos",value:data.completed_count||0,detail:(data.completion_rate||0)+"% finalización"},{label:"Promedio total",value:data.average_score||0,detail:"Puntos promedio"},{label:"Perfil dominante",text:dpLabel,detail:dpDetail,color:dpColor},];target.innerHTML=kpis.map(function(item){var valueHtml=item.text!==undefined?'<strong style="font-size:20px;line-height:1.2;'+(item.color?'color:'+escapeHtml(item.color)+';':'')+'">'+escapeHtml(item.text)+'</strong>':'<strong>'+escapeHtml(formatLiveNumber(item.value))+'</strong>';return'<article class="satrack-live-kpi">'+'<span>'+escapeHtml(item.label)+'</span>'+valueHtml+'<small>'+escapeHtml(item.detail)+'</small>'+'</article>'}).join("")}
9function renderLiveQuestionCharts(root,data){var container=root.querySelector("[data-live-question-charts]");if(!container)return;var questions=Array.isArray(data.question_stats)?data.question_stats:[];if(!questions.length){container.innerHTML='<div class="satrack-live-no-data">No hay preguntas configuradas para este evento.</div>';return}
10var currentIndex=Math.min(parseInt(container.getAttribute("data-slide-index")||"0",10),questions.length-1);var slidesHtml=questions.map(function(question){var options=Array.isArray(question.options)?question.options:[];var bars=options.map(function(option){var percent=Number(option.percent||0);return'<div class="satrack-live-answer-row">'+'<div class="satrack-live-answer-meta">'+'<span><b>'+escapeHtml(option.letter)+'</b> '+escapeHtml(option.text)+'</span>'+'<em>'+escapeHtml(formatLiveNumber(option.count||0))+' · '+escapeHtml(percent.toFixed(1))+'%</em>'+'</div>'+'<div class="satrack-live-answer-track">'+'<span style="width:'+Math.max(0,Math.min(100,percent))+'%;background:'+escapeHtml(option.color||"#00a3a8")+'"></span>'+'</div>'+'</div>'}).join("");return'<article class="satrack-live-question-card">'+'<div class="satrack-live-question-title">'+'<span>Pregunta '+escapeHtml(question.index||"")+'</span>'+'<strong>'+escapeHtml(question.label||"")+'</strong>'+'</div>'+'<p>'+escapeHtml(question.question||"")+'</p>'+'<div class="satrack-live-answer-list">'+bars+'</div>'+'</article>'}).join("");var dotsHtml=questions.map(function(_,i){return'<button class="satrack-live-slider-dot" data-slide="'+i+'" aria-label="Pregunta '+(i+1)+'"></button>'}).join("");container.innerHTML='<div class="satrack-live-slider-main">'+'<button class="satrack-live-slider-btn" data-slider-prev aria-label="Pregunta anterior">'+'<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="15,18 9,12 15,6"/></svg>'+'</button>
10'+'<div class="satrack-live-slider-track" data-slider-track>'+slidesHtml+'</div>'+'<button class="satrack-live-slider-btn" data-slider-next aria-label="Siguiente pregunta">'+'<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="9,18 15,12 9,6"/></svg>'+'</button>'+'</div>'+'<div class="satrack-live-slider-dots" data-slider-dots>'+dotsHtml+'</div>';function goToSlide(index){index=Math.max(0,Math.min(questions.length-1,index));container.setAttribute("data-slide-index",String(index));container.querySelectorAll(".satrack-live-question-card").forEach(function(card,i){card.classList.toggle("is-active",i===index)});container.querySelectorAll(".satrack-live-slider-dot").forEach(function(dot,i){dot.classList.toggle("is-active",i===index)});var prevBtn=container.querySelector("[data-slider-prev]");var nextBtn=container.querySelector("[data-slider-next]");if(prevBtn)prevBtn.disabled=index===0;if(nextBtn)nextBtn.disabled=index===questions.length-1;var totalLabel=root.querySelector("[data-live-total-label]");if(totalLabel&&questions[index]){var count=questions[index].response_count||0;totalLabel.textContent=formatLiveNumber(count)+(count===1?" respuesta":" respuestas")}}
11goToSlide(currentIndex);container.querySelector("[data-slider-prev]").addEventListener("click",function(){goToSlide(parseInt(container.getAttribute("data-slide-index")||"0",10)-1)});container.querySelector("[data-slider-next]").addEventListener("click",function(){goToSlide(parseInt(container.getAttribute("data-slide-index")||"0",10)+1)});container.querySelectorAll(".satrack-live-slider-dot").forEach(function(dot){dot.addEventListener("click",function(){goToSlide(parseInt(dot.getAttribute("data-slide")||"0",10))})})}
12function renderLiveProfileChart(root,data){var target=root.querySelector("[data-live-profile-chart]");if(!target)return;var items=Array.isArray(data.profile_distribution)?data.profile_distribution:[];var total=items.reduce(function(sum,item){return sum+Number(item.count||0)},0);if(!items.length||!total){target.innerHTML='<div class="satrack-live-no-data">Aún no hay perfiles finalizados.</div>';return}
13var cursor=0;var gradient=items.map(function(item,index){var start=cursor;var end=index===items.length-1?100:cursor+Number(item.percent||0);cursor=end;return(item.color||"#00a3a8")+" "+start+"% "+end+"%"}).join(", ");var legend=items.map(function(item){return'<li><span style="background:'+escapeHtml(item.color||"#00a3a8")+'"></span>'+'<b>'+escapeHtml(item.label||"Sin perfil")+'</b>'+'<em>'+escapeHtml(formatLiveNumber(item.count||0))+' · '+escapeHtml(Number(item.percent||0).toFixed(1))+'%</em></li>'}).join("");target.innerHTML='<div class="satrack-live-donut" style="--live-donut: conic-gradient('+escapeHtml(gradient)+')">'+'<div><strong>'+escapeHtml(formatLiveNumber(total))+'</strong><span>perfiles</span></div>'+'</div>'+'<ul class="satrack-live-donut-legend">'+legend+'</ul>'}
14function renderLiveGapRanking(root,data){var target=root.querySelector("[data-live-gap-ranking]");if(!target)return;var items=Array.isArray(data.gap_ranking)?data.gap_ranking:[];if(!items.length){target.innerHTML='<div class="satrack-live-no-data">
14Sin respuestas suficientes.</div>';return}
15target.innerHTML=items.map(function(item){var percent=Number(item.avg_percent||0);var clamped=Math.max(0,Math.min(100,percent));var bgSize=clamped>0?(10000/clamped).toFixed(2)+'% 100%':'100% 100%';return'<div class="satrack-live-gap-row">'+'<div><span>Pregunta '+escapeHtml(item.index||"")+'</span><strong>'+escapeHtml(item.label||"")+'</strong></div>'+'<em>'+escapeHtml(percent.toFixed(1))+'%</em>'+'<div class="satrack-live-gap-track"><span style="width:'+clamped+'%;background-size:'+bgSize+'"></span></div>'+'</div>'}).join("")}
16function renderLiveAverageTable(root,data){var target=root.querySelector("[data-live-average-table]");if(!target)return;var questions=Array.isArray(data.question_stats)?data.question_stats:[];if(!questions.length){target.innerHTML='<tr><td colspan="5">No hay datos para mostrar.</td></tr>';return}
17target.innerHTML=questions.map(function(question){var percent=Number(question.avg_percent||0);var clamped=Math.max(0,Math.min(100,percent));var bgSize=clamped>0?(10000/clamped).toFixed(2)+'% 100%':'100% 100%';return'<tr>'+'<td><b>Pregunta '+escapeHtml(question.index||"")+'</b><span>'+escapeHtml(question.label||"")+'</span></td>'+'<td>'+escapeHtml(formatLiveNumber(question.response_count||0))+'</td>'+'<td>'+escapeHtml(Number(question.avg_points||0).toFixed(1))+' / '+escapeHtml(Number(question.max_points||0).toFixed(1))+'</td>'+'<td><div class="satrack-live-table-meter"><span style="width:'+clamped+'%;background-size:'+bgSize+'"></span></div><em>'+escapeHtml(percent.toFixed(1))+'%</em></td>'+'<td>'+escapeHtml(question.dominant_answer||"Sin datos")+'</td>'+'</tr>'}).join("")}
18function renderLiveDashboard(root,data,refreshSeconds){renderLiveKpis(root,data);renderLiveQuestionCharts(root,data);renderLiveProfileChart(root,data);renderLiveGapRanking(root,data);renderLiveAverageTable(root,data);var status=root.querySelector("[data-live-status]");if(status){status.textContent="Actualizado "+(data.updated_at||"")+" · cada "+refreshSeconds+" s"}}
19function initLiveDashboards(){var dashboards=document.querySelectorAll("[data-satrack-live-dashboard]");if(!dashboards.length)return;dashboards.forEach(function(root){var config=parseJsonFromElement(root.querySelector(".satrack-live-dashboard-data"))||{};var refreshSeconds=Math.max(15,Number(config.refresh||root.getAttribute("data-refresh")||30));var isActiveDashboard=root.getAttribute("data-active")==="1"||!!config.active;var select=root.querySelector("[data-live-event-select]");var enterBtn=root.querySelector("[data-live-enter]");var refreshBtn=root.querySelector("[data-live-refresh]");var empty=root.querySelector("[data-live-empty]");var content=root.querySelector("[data-live-content]");var timer=null;if(select&&config.selected_event_key){select.value=config.selected_event_key}
20function setLoading(isLoading){root.classList.toggle("is-loading",!!isLoading)}
21function showEmpty(message){setLoading(!1);if(content)content.style.display="none";if(empty){empty.style.display="block";empty.textContent=message||"No hay datos disponibles."}}
22function loadDashboard(){if(!window.SatrackQuizConfig||!SatrackQuizConfig.ajax_url||!config.nonce){showEmpty("No se pudo inicializar el dashboard.");return}
23var eventKey=select?select.value:config.selected_event_key;if(!eventKey){showEmpty("Selecciona un evento activo para ver sus resultados.");return}
24setLoading(!0);var formData=new FormData();formData.append("action","satrack_quiz_live_dashboard_data");formData.append("security",config.nonce);formData.append("event_key",eventKey);fetch(SatrackQuizConfig.ajax_url,{method:"POST",body:formData,credentials:"same-origin"}).then(function(response){return response.json()}).then(function(json){setLoading(!1);if(!json||!json.success||!json.data){showEmpty(json&&json.data&&json.data.message?json.data.message:"No se pudieron cargar los resultados.");return}
25if(empty)empty.style.display="none";if(content)content.style.display="block";renderLiveDashboard(root,json.data,refreshSeconds)}).catch(function(){showEmpty("Error de conexión al actualizar el dashboard.")})}
26function resetTimer(){if(timer){clearInterval(timer)}
27timer=setInterval(loadDashboard,refreshSeconds*1000)}
28if(select){select.addEventListener("change",function(){if(!isActiveDashboard)return;loadDashboard();resetTimer()})}
29if(enterBtn){enterBtn.addEventListener("click",function(){if(!select||!select.value)return;var selectedOption=select.options[select.selectedIndex];var slug=selectedOption?selectedOption.getAttribute("data-event-slug"):"";if(!slug&&Array.isArray(config.events)){config.events.some(function(event){if(event.key===select.value){slug=event.slug||"";return!0}
30return!1})}
31if(!slug)return;var url=new URL(window.location.href);
31url.searchParams.set("event",slug);window.location.href=url.toString()})}
32if(refreshBtn){refreshBtn.addEventListener("click",function(){loadDashboard();resetTimer()})}
33var modeToggle=root.querySelector("[data-live-mode-toggle]");var darkStorageKey="satrack-live-dark-mode";function applyDarkMode(isDark){root.classList.toggle("is-dark-mode",isDark);if(modeToggle){modeToggle.setAttribute("aria-label",isDark?"Cambiar a modo claro":"Cambiar a modo oscuro")}}
34try{applyDarkMode(localStorage.getItem(darkStorageKey)==="1")}catch(e){}
35if(modeToggle){modeToggle.addEventListener("click",function(){var isDark=!root.classList.contains("is-dark-mode");applyDarkMode(isDark);try{localStorage.setItem(darkStorageKey,isDark?"1":"0")}catch(e){}})}
36if(!isActiveDashboard){if(content)content.style.display="none";setLoading(!1);return}
37var initialData=parseJsonFromElement(root.querySelector(".satrack-live-initial-data"));if(initialData){if(empty)empty.style.display="none";if(content)content.style.display="block";renderLiveDashboard(root,initialData,refreshSeconds)}
38loadDashboard();resetTimer()})}
39initLiveDashboards();var defaultQuestionsTemplate=[{id:"pregunta_1",label:"Poll 1 — Frecuencia de incidentes",question:"¿En los últimos 12 meses, cuántos eventos de seguridad registró su operación de transporte?",helper:"Esta pregunta mide la siniestralidad real de la operación. Mayor puntaje significa mayor exposición efectiva al riesgo físico.",options:[{letter:"A",text:"Ninguno",points:0},{letter:"B",text:"1 a 3 eventos",points:8},{letter:"C",text:"4 a 10 eventos",points:20},{letter:"D",text:"Más de 10 eventos",points:30},{letter:"E",text:"No tenemos registro formal",points:24},],},{id:"pregunta_2",label:"Poll 2 — Velocidad de detección",question:"Cuando ocurre un desvío de ruta no autorizado, ¿cuánto tiempo tarda su equipo en detectarlo?",helper:"Esta pregunta mide la capacidad de respuesta real. A mayor demora en la detección, mayor exposición al riesgo.",options:[{letter:"A",text:"Menos de 5 minutos",points:0},{letter:"B",text:"Entre 5 y 30 minutos",points:8},{letter:"C",text:"Entre 30 minutos y 2 horas",points:20},{letter:"D",text:"Más de 2 horas",points:26},{letter:"E",text:"Nos enteramos después del evento",points:30},],},{id:"pregunta_3",label:"Poll 3 — Nivel de madurez en gestión del riesgo",question:"Siendo honesto con su realidad operativa actual, ¿en cuál nivel de madurez en seguridad de transporte se encuentra su organización?",helper:"Esta pregunta mide la postura institucional frente al riesgo y el nivel de formalización de la gestión preventiva.",options:[{letter:"A",text:"Nivel 1 — Reactivo: actuamos cuando el problema ya ocurrió",points:18},{letter:"B",text:"Nivel 2 — Preventivo: tenemos protocolos pero la reacción es lenta",points:8},{letter:"C",text:"Nivel 3 — Predictivo: anticipamos y actuamos antes del evento",points:0},{letter:"D",text:"No tenemos un sistema formal de gestión de riesgo",points:25},],},{id:"pregunta_4",label:"Poll 4 — Adopción de decisiones de gestión",question:"De las 8 decisiones revisadas — mapeo de rutas, protocolo de pérdida de señal, franjas horarias, auditoría de paradas, riesgo interno, tiempo de detección, rastreo exclusivo e integración de sistemas — ¿cuántas tiene su organización implementadas de forma sistemática hoy?",helper:"Esta pregunta mide la brecha de implementación en prácticas concretas y controlables de gestión del riesgo.",options:[{letter:"A",text:"Casi todas o todas: 7 a 8 decisiones",points:0},{letter:"B",text:"La mayoría: 5 a 6 decisiones",points:5},{letter:"C",text:"Algunas: 3 a 4 decisiones",points:10},{letter:"D",text:"Ninguna o casi ninguna: 0 a 2 decisiones",points:15},],},];var quizData=inlineData&&Array.isArray(inlineData.questions)&&inlineData.questions.length?inlineData.questions:window.SatrackQuizConfig&&Array.isArray(SatrackQuizConfig.settings.questions)&&SatrackQuizConfig.settings.questions.length?SatrackQuizConfig.settings.questions:defaultQuestionsTemplate;var defaultProfiles=[{min:0,max:24,title:"Exposición baja",slug:"baja",class:"perfil-baja",color:"#028d94",bg:"#d8f1ee",border:"#4eecda",pdfTitle:"Guía para mantener una operación de baja exposición al riesgo",pdfUrl:"https://satrack.com/co/wp-content/uploads/sites/2/2026/05/01_exposicion_baja_al_riesgo.pdf",result:"Su operación muestra controles activos, baja siniestralidad, capacidad de detección de anomalías en tiempos aceptables y un conjunto sólido de decisiones de gestión implementadas. El riesgo existe, pero está siendo gestionado de forma efectiva. El desafío ahora es sostener ese nivel y no relajar los controles.",recommendation:"Mida cuánto tarda su equipo en detectar un desvío de ruta hoy. Si no tiene ese número, esa es la primera brecha que debe cerrar, independientemente de todos los controles que ya tiene implementados.",},{min:25,max:54,title:"Exposición moderada",slug:"moderada",class:"perfil-moderada",color:"#a3c138",bg:"#e5fada",border:"#e6fa75",pdfTitle:"Guía para reducir brechas de exposición moderada",pdfUrl:"https://satrack.com/co/wp-content/uploads/sites/2/2026/05/02_exposicion_moderada_al_riesgo.pdf",result:"Existen brechas puntuales: algunos incidentes registrados, tiempos de detección mejorables, postura mayormente reactiva o baja adopción de decisiones sistémicas. El riesgo es gestionable con ajustes concretos y priorizados.",recommendation:"Identifique cuál de las tres rutas más fre
39cuentes de su operación tiene mayor historial de incidentes. Diseñe un protocolo diferenciado para esa ruta específica. No para todas: solo la más crítica.",},{min:55,max:79,title:"Exposición alta",slug:"alta",class:"perfil-alta",color:"#dc7500",bg:"#fcf3d4",border:"#f5e6b3",pdfTitle:"Guía para intervenir una operación con exposición alta",pdfUrl:"https://satrack.com/co/wp-content/uploads/sites/2/2026/05/03_exposicion_alta_al_riesgo.pdf",result:"La operación presenta una combinación de factores de vulnerabilidad activos: incidentes recurrentes, detección lenta, postura reactiva y pocas decisiones implementadas de forma sistemática. Los controles actuales son insuficientes para la magnitud del riesgo.",recommendation:"Implemente el protocolo de pérdida de GPS como alerta de seguridad. No espere a terminar de diseñar los demás protocolos. Esta sola decisión reduce la ventana de acción del delincuente en todos los eventos futuros.",},{min:80,max:100,title:"Exposición crítica",slug:"critica",class:"perfil-critica",color:"#b80505",bg:"#fcebeb",border:"#fad4c6",pdfTitle:"Guía de intervención para exposición crítica",pdfUrl:"https://satrack.com/co/wp-content/uploads/sites/2/2026/05/04_exposicion_critica_al_riesgo.pdf",result:"La operación presenta alta frecuencia de incidentes, detección tardía o nula, ausencia de sistema formal de gestión del riesgo y mínima implementación de decisiones controlables. Se requiere intervención inmediata y rediseño estructural de los controles.",recommendation:"Convoque a su equipo de monitoreo y establezca una regla: cualquier pérdida de señal GPS activa verificación activa en menos de 10 minutos. Sin excepciones. Sin esperar a que el conductor llame.",},];var profiles=inlineData&&Array.isArray(inlineData.profiles)&&inlineData.profiles.length?inlineData.profiles:window.SatrackQuizConfig&&SatrackQuizConfig.settings&&Array.isArray(SatrackQuizConfig.settings.profiles)&&SatrackQuizConfig.settings.profiles.length?SatrackQuizConfig.settings.profiles:defaultProfiles;var currentStep=0;var answers=[];(function(){var heroH1=document.querySelector("#satrackQuizHero h1");var heroP=document.querySelector("#satrackQuizHero > p");var n=quizData.length;if(heroH1&&inlineData&&inlineData.hero_titulo){heroH1.textContent=inlineData.hero_titulo}
40if(heroP){if(inlineData&&inlineData.hero_descripcion){heroP.textContent=inlineData.hero_descripcion.replace(/\{N\}/g,n)}else{heroP.textContent=heroP.textContent.replace(/\d+(?= preguntas)/,n)}}})();var container=document.getElementById("satrackQuizShortcode");if(!container){return}
41var quizHero=document.getElementById("satrackQuizHero");var startBtn=document.getElementById("startSatrackQuiz");var quizCard=document.getElementById("satrackQuizCard");var leadCard=document.getElementById("satrackLeadCard");var resultCard=document.getElementById("satrackResultCard");var questionTitle=document.getElementById("satrackQuestionTitle");var questionHelper=document.getElementById("satrackQuestionHelper");var optionsContainer=document.getElementById("satrackOptions");var stepLabel=document.getElementById("satrackStepLabel");var progressBar=document.getElementById("satrackProgressBar");var progressText=document.getElementById("satrackProgressText");var prevBtn=document.getElementById("satrackPrevBtn");var adminToggle=document.getElementById("satrackQuizAdminToggle");var adminPanel=document.getElementById("satrackQuizAdminPanel");var restartBtn=document.getElementById("satrackRestartQuiz");var form=document.getElementById("satrackQuizForm");var messageBox=document.getElementById("satrackFormMessage");var metaFieldsContainer=document.getElementById("satrackQuizMetaFields");var emailChoiceCard=document.getElementById("satrackEmailChoiceCard");var finalizeLoaderCard=document.getElementById("satrackFinalizeLoaderCard");var emailActions=document.getElementById("satrackEmailActions");var emailLoader=document.getElementById("satrackEmailLoader");var emailYesBtn=document.getElementById("satrackEmailYes");var emailNoBtn=document.getElementById("satrackEmailNo");var submissionId=0;if(form&&inlineData&&Array.isArray(inlineData.form_fields)&&inlineData.form_fields.length){var submitBtn=form.querySelector('[type="submit"]');inlineData.form_fields.forEach(function(field){if(!field.id||!field.label)return;var row=document.createElement("div");row.className="satrack-form-row";var lbl=document.createElement("label");lbl.htmlFor="satrack-cf-"+field.id;lbl.textContent=field.label;row.appendChild(lbl);var inp;if(field.type==="select"){inp=document.createElement("select");inp.id="satrack-cf-"+field.id;inp.name="custom_fields["+field.id+"]";var emptyOpt=document.createElement("option");emptyOpt.value="";emptyOpt.textContent="— Selecciona —";inp.appendChild(emptyOpt);
41(field.options||[]).forEach(function(opt){var o=document.createElement("option");o.value=opt.value;o.textContent=opt.label;inp.appendChild(o)})}else{inp=document.createElement("input");inp.type=field.type||"text";inp.id="satrack-cf-"+field.id;inp.name="custom_fields["+field.id+"]";inp.placeholder=field.placeholder||""}
42if(field.required)inp.required=!0;row.appendChild(inp);if(submitBtn){form.insertBefore(row,submitBtn)}else{form.appendChild(row)}})}
43var resultPdf=document.getElementById("satrackResultPdf");var adminEventSelect=document.getElementById("satrack-admin-event-select");var adminEventNombre=document.getElementById("satrack-admin-event-nombre");var adminEventSlug=document.getElementById("satrack-admin-event-slug");var adminEventDescripcion=document.getElementById("satrack-admin-event-descripcion");var adminEventHeroTitulo=document.getElementById("satrack-admin-event-hero-titulo");var adminEventHeroDescripcion=document.getElementById("satrack-admin-event-hero-descripcion");var adminEventWebhookUrl=document.getElementById("satrack-admin-event-webhook-url");var adminEventShowEmailCheckbox=document.getElementById("satrack-admin-event-show-email-checkbox");var adminEventIsDefault=document.getElementById("satrack-admin-event-is-default");var adminEventSaveBtn=document.getElementById("satrackEventAdminSave");var adminEventStatus=document.getElementById("satrackEventAdminStatus");var adminEventFields=document.getElementById("satrackEventAdminFields");var adminFormFieldsList=document.getElementById("satrackFormFieldsList");var adminAddFieldBtn=document.getElementById("satrack-add-field-btn");var adminSaveEditFieldBtn=document.getElementById("satrack-save-edit-field-btn");var adminCancelEditFieldBtn=document.getElementById("satrack-cancel-edit-field-btn");var adminEditFieldIndex=document.getElementById("satrack-edit-field-index");var adminAddFieldBoxTitle=document.getElementById("satrack-add-field-box-title");var adminNewFieldLabel=document.getElementById("satrack-new-field-label");var adminNewFieldSlug=document.getElementById("satrack-new-field-slug");var adminNewFieldType=document.getElementById("satrack-new-field-type");var adminNewFieldPlaceholder=document.getElementById("satrack-new-field-placeholder");var adminNewFieldRequired=document.getElementById("satrack-new-field-required");var adminNewFieldOptionsRow=document.getElementById("satrack-new-field-options-row");var adminNewFieldOptions=document.getElementById("satrack-new-field-options");var adminSlugUserEdited=!1;var currentFormFields=[];var adminEventLoader=document.getElementById("satrackEventAdminLoader");var adminEventLoaderText=document.getElementById("satrackEventAdminLoaderText");var questionsEditorEl=document.getElementById("satrack-questions-editor");var adminQuestionsSaveBtn=document.getElementById("satrackQuestionsAdminSave");var adminQuestionsStatus=document.getElementById("satrackQuestionsAdminStatus");var addQuestionBtn=document.getElementById("satrackAddQuestion");var profilesEditorEl=document.getElementById("satrack-profiles-editor");var adminProfilesSaveBtn=document.getElementById("satrackProfilesAdminSave");var adminProfilesStatus=document.getElementById("satrackProfilesAdminStatus");var addProfileBtn=document.getElementById("satrackAddProfile");var adminTabBtns=adminPanel?adminPanel.querySelectorAll(".satrack-admin-tab-btn"):[];var adminTabContents=adminPanel?adminPanel.querySelectorAll(".satrack-admin-tab-content"):[];var currentEventId=0;var currentEventSource="";var adminEventsById={};function calculateTotal(){return answers.reduce(function(sum,answer){return sum+Number(answer&&answer.points?answer.points:0)},0)}
44function getProfile(total){return(profiles.find(function(profile){return total>=profile.min&&total<=profile.max})||profiles[profiles.length-1])}
45function updateProgress(){var completed=answers.filter(Boolean).length;var percent=Math.round((completed/quizData.length)*100);if(progressBar){progressBar.style.width=percent+"%"}
46if(progressText){progressText.textContent=percent+"%"}}
47function getQuestionWeight(item){if(!item||!Array.isArray(item.options)||!item.options.length){return""}
48var maxPoints=item.options.reduce(function(max,option){var points=Number(option&&option.points?option.points:0);return points>max?points:max},0);return maxPoints?maxPoints+" pts":""}
49function clearProfileClasses(element){if(!element)return;var toRemove=[];element.classList.forEach(function(cls){if(cls.indexOf("perfil-")===0)toRemove.push(cls)});toRemove.forEach(function(cls){element.classList.remove(cls)})}
50function renderQuestion(){var item=quizData[currentStep];if(!item){return}
51if(stepLabel){var weightLabel=getQuestionWeight(item);stepLabel.textContent="Pregunta "+(currentStep+1)+" de "+quizData.length+(weightLabel?" · "+we
51ightLabel:"")}
52if(questionTitle){questionTitle.textContent=item.question}
53if(questionHelper){questionHelper.textContent=item.helper||""}
54if(!optionsContainer){return}
55optionsContainer.innerHTML="";item.options.forEach(function(option){var selected=answers[currentStep]&&answers[currentStep].letter===option.letter;var button=document.createElement("button");button.type="button";button.className="satrack-option"+(selected?" is-selected":"");button.innerHTML='<span class="satrack-option-letter">'+option.letter+"</span>"+'<span class="satrack-option-text">'+option.text+"</span>";button.addEventListener("click",function(){var stepIndex=currentStep;answers[stepIndex]={question:item.question,label:item.label,letter:option.letter,text:option.text,points:option.points,};updateProgress();if(submissionId){var ansData=new FormData();ansData.append("action","satrack_quiz_update_answer");ansData.append("security",SatrackQuizConfig.nonce);ansData.append("submission_id",submissionId);ansData.append("meta_key","pregunta_"+(stepIndex+1));ansData.append("meta_value",answers[stepIndex].label+" | "+answers[stepIndex].letter+". "+answers[stepIndex].text+" ("+answers[stepIndex].points+" puntos)");fetch(SatrackQuizConfig.ajax_url,{method:"POST",body:ansData,credentials:"same-origin"})}
56if(quizCard){quizCard.classList.add("is-changing")}
57setTimeout(function(){if(currentStep<quizData.length-1){currentStep++;renderQuestion();setTimeout(function(){if(quizCard){quizCard.classList.remove("is-changing")}},40)}else{if(quizCard){quizCard.classList.remove("is-changing")}
58completeQuiz()}},320)});optionsContainer.appendChild(button)});if(prevBtn){prevBtn.style.display=currentStep===0?"none":"inline-flex"}
59updateProgress()}
60function clearMetaFields(){if(!metaFieldsContainer){return}
61metaFieldsContainer.innerHTML=""}
62function appendMetaField(key,value){if(!metaFieldsContainer){return}
63var input=document.createElement("input");input.type="hidden";input.name="meta["+key+"]";input.value=value||"";metaFieldsContainer.appendChild(input)}
64function fillHiddenFields(total,profile){clearMetaFields();appendMetaField("total",total);appendMetaField("perfil",profile.title);appendMetaField("perfil_slug",profile.slug);appendMetaField("resultado",profile.result);appendMetaField("recomendacion",profile.recommendation);appendMetaField("perfil_color",profile.color);appendMetaField("perfil_bg",profile.bg);appendMetaField("perfil_border",profile.border);appendMetaField("pdf_url",profile.pdfUrl);var envioCheck=form?form.querySelector('[name="envio_resultado_correo_check"]'):null;var envioValue=envioCheck&&envioCheck.checked?"si":"no";appendMetaField("envio_resultado_correo_check",envioValue);appendMetaField("envio_resultado_correo",envioValue);answers.forEach(function(answer,index){if(!answer){return}
65appendMetaField("pregunta_"+(index+1),answer.label+" | "+answer.letter+". "+answer.text+" ("+answer.points+" puntos)")});var configuredEventName=inlineData&&inlineData.event_name?inlineData.event_name:window.SatrackQuizConfig&&SatrackQuizConfig.settings?SatrackQuizConfig.settings.event_name||"":"";var configuredEventId=inlineData&&inlineData.event_id?inlineData.event_id:(container?container.getAttribute("data-event-id")||"":"");var configuredEventSource=inlineData&&inlineData.event_source?inlineData.event_source:(container?container.getAttribute("data-event-source")||"":"");var configuredEventSlug=inlineData&&inlineData.event_slug?inlineData.event_slug:(container?container.getAttribute("data-event-slug")||"":"");appendMetaField("event_id",configuredEventId);appendMetaField("event_source",configuredEventSource);appendMetaField("event_slug",configuredEventSlug);appendMetaField("event_name",configuredEventName);appendMetaField("raw_payload",JSON.stringify({answers:answers,total:total,profile:profile.title,profile_slug:profile.slug,result:profile.result,recommendation:profile.recommendation,pdf_url:profile.pdfUrl,event_id:configuredEventId,event_source:configuredEventSource,event_slug:configuredEventSlug,event_name:configuredEventName,}),)}
66function toggleAdminPanel(){if(!adminPanel){return}
67var isHidden=adminPanel.classList.contains("satrack-quiz-hidden");adminPanel.classList.toggle("satrack-quiz-hidden");
67if(isHidden){loadEvents()}}
68function switchTab(tabName){adminTabBtns.forEach(function(btn){if(btn.dataset.tab===tabName){btn.classList.add("satrack-admin-tab-active")}else{btn.classList.remove("satrack-admin-tab-active")}});adminTabContents.forEach(function(content){if(content.dataset.tab===tabName){content.classList.add("satrack-admin-tab-active")}else{content.classList.remove("satrack-admin-tab-active")}})}
69function setAdminLoading(isLoading,message,options){options=options||{};if(adminEventLoader){adminEventLoader.classList.toggle("is-visible",!!isLoading);adminEventLoader.setAttribute("aria-hidden",isLoading?"false":"true")}
70if(adminEventLoaderText&&message){adminEventLoaderText.textContent=message}
71if(adminEventFields){adminEventFields.classList.toggle("is-loading",!!isLoading&&!!options.hideFields)}[adminEventNombre,adminEventSlug,adminEventDescripcion,adminEventHeroTitulo,adminEventHeroDescripcion,adminEventWebhookUrl,adminEventShowEmailCheckbox,adminEventIsDefault,adminEventSaveBtn,adminQuestionsSaveBtn,addQuestionBtn,adminProfilesSaveBtn,addProfileBtn,].forEach(function(field){if(field){field.disabled=!!isLoading}});if(adminEventSelect){adminEventSelect.disabled=!!isLoading&&!!options.lockSelect}}
72function getCurrentAdminTab(fallback){var activeTab=adminPanel?adminPanel.querySelector(".satrack-admin-tab-btn.satrack-admin-tab-active"):null;return activeTab&&activeTab.dataset.tab?activeTab.dataset.tab:fallback||"events"}
73function getAdminEventSource(event){return event?event._source_table||event.source_table||event.event_source||"":""}
74function getAdminEventKeyFromParts(eventId,eventSource){return(eventSource||"")+":"+String(eventId||0)}
75function getAdminEventKey(event){return getAdminEventKeyFromParts(event&&event.id?event.id:0,getAdminEventSource(event))}
76function parseAdminEventSelection(value,eventSource){var rawValue=String(value||"");if(!rawValue||rawValue==="0"){return{id:"0",source:""}}
77var separatorIndex=rawValue.lastIndexOf(":");if(separatorIndex>-1){return{source:rawValue.slice(0,separatorIndex),id:rawValue.slice(separatorIndex+1),}}
78return{id:rawValue,source:eventSource||""}}
79function buildAdminEventUrl(eventId,tabName,eventSource){var parsed=parseAdminEventSelection(eventId,eventSource);var url=new URL(window.location.href);var nextTab=tabName||getCurrentAdminTab("events");url.searchParams.set("page","satrack-quiz-admin");url.searchParams.delete("satrack_quiz_permissions_saved");url.searchParams.delete("satrack_quiz_schema_diagnostic");url.searchParams.delete("_wpnonce");url.searchParams.delete("action");url.searchParams.delete("id_evento");url.searchParams.delete("quiz_action");url.searchParams.delete("event_source");if(nextTab){url.searchParams.set("tab",nextTab)}
80if(parsed.id&&String(parsed.id)!=="0"){url.searchParams.set("accion","editar");url.searchParams.set("event_id",parsed.id);if(parsed.source){url.searchParams.set("event_source",parsed.source)}}else{url.searchParams.set("accion","crear");url.searchParams.delete("event_id")}
81return url.toString()}
82function navigateToAdminEvent(eventId,tabName,eventSource){window.location.href=buildAdminEventUrl(eventId,tabName,eventSource)}
83function hydrateAdminEventsFromInline(){adminEventsById={};if(inlineData&&Array.isArray(inlineData.all_events)){inlineData.all_events.forEach(function(event){if(event&&event.id){adminEventsById[getAdminEventKey(event)]=event}})}
84if(inlineData&&inlineData.event&&inlineData.event.id){adminEventsById[getAdminEventKey(inlineData.event)]=inlineData.event}}
85function renderAdminEventOptions(){if(!adminEventSelect){return}
86var selectedEventKey=inlineData&&inlineData.event_key?String(inlineData.event_key):adminEventSelect.value||"0";adminEventSelect.innerHTML="";var createOption=document.createElement("option");createOption.value="0";createOption.textContent="-- Crear evento nuevo --";adminEventSelect.appendChild(createOption);Object.keys(adminEventsById).forEach(function(eventId){var event=adminEventsById[eventId];var option=document.createElement("option");option.value=eventId;option.dataset.eventId=event.id||"";option.dataset.eventSource=getAdminEventSource(event);option.textContent=(event.nombre||"")+" ("+(event.slug||"")+")"+(String(event.is_default)==="1"?" · Genérico":"");adminEventSelect.appendChild(option)});adminEventSelect.value=selectedEventKey&&adminEventsById[selectedEventKey]?selectedEventKey:"0"}
87function getSelectedInlineAdminEvent(){if(inlineData&&inlineData.event&&inlineData.event.id){return inlineData.event}
88var selectedEventKey=inlineData&&inlineData.event_key?String(inlineData.event_key):adminEventSelect?adminEventSelect.value:"
880";return selectedEventKey&&adminEventsById[selectedEventKey]?adminEventsById[selectedEventKey]:null}
89function populateAdminEventFields(event,questions){if(!event||!event.id){if(adminEventSelect){adminEventSelect.value="0"}
90if(adminEventNombre){adminEventNombre.value=""}
91if(adminEventSlug){adminEventSlug.value=""}
92if(adminEventDescripcion){adminEventDescripcion.value=""}
93if(adminEventHeroTitulo){adminEventHeroTitulo.value=""}
94if(adminEventHeroDescripcion){adminEventHeroDescripcion.value=""}
95currentFormFields=[];renderFormFieldsEditor();if(adminEventWebhookUrl){adminEventWebhookUrl.value=""}
96if(adminEventShowEmailCheckbox){adminEventShowEmailCheckbox.value="yes"}
97if(adminEventIsDefault){adminEventIsDefault.value="no"}
98renderQuestionsEditor(defaultQuestionsTemplate);currentEventId=0;currentEventSource="";setAdminLoading(!1);setAdminEventStatus("","");return}
99currentEventId=String(event.id);currentEventSource=getAdminEventSource(event);if(adminEventSelect){adminEventSelect.value=getAdminEventKey(event)}
100if(adminEventNombre){adminEventNombre.value=event.nombre||""}
101if(adminEventSlug){adminEventSlug.value=event.slug||""}
102if(adminEventDescripcion){adminEventDescripcion.value=event.descripcion||""}
103if(adminEventHeroTitulo){adminEventHeroTitulo.value=event.hero_titulo||""}
104if(adminEventHeroDescripcion){adminEventHeroDescripcion.value=event.hero_descripcion||""}
105if(adminEventWebhookUrl){adminEventWebhookUrl.value=event.webhook_url||""}
106if(adminEventShowEmailCheckbox){adminEventShowEmailCheckbox.value=event.show_email_checkbox||"yes"}
107if(adminEventIsDefault){adminEventIsDefault.value=String(event.is_default)==="1"?"yes":"no"}
108try{currentFormFields=event.form_fields_json?JSON.parse(event.form_fields_json):[]}catch(e){currentFormFields=[]}
109if(!Array.isArray(currentFormFields))currentFormFields=[];renderFormFieldsEditor();var questionsForEdit=Array.isArray(questions)&&questions.length?questions:defaultQuestionsTemplate;renderQuestionsEditor(questionsForEdit);setAdminLoading(!1);setAdminEventStatus("","")}
110function labelToSlug(label){var slug=label.toLowerCase();if(slug.normalize){slug=slug.normalize("NFD").replace(/[̀-ͯ]/g,"")}
111return slug.replace(/[^a-z0-9]+/g,"_").replace(/^_+|_+$/g,"")}
112function fieldOptionsToText(options){if(!options||!options.length)return"";return options.map(function(opt){return opt.value+"|"+opt.label}).join("\n")}
113function renderFormFieldsEditor(){if(!adminFormFieldsList)return;if(!currentFormFields.length){adminFormFieldsList.innerHTML='<p style="color:#64748b;font-size:13px;">No hay campos personalizados. Agrega uno abajo.</p>';return}
114adminFormFieldsList.innerHTML="";currentFormFields.forEach(function(field,index){var div=document.createElement("div");div.style.cssText="display:flex;align-items:center;gap:10px;padding:10px 14px;background:#fff;border:1px solid #dbe5ee;border-radius:8px;margin-bottom:8px;";var typeLabel={text:"Texto",select:"Selector",tel:"Teléfono",number:"Número"}[field.type]||field.type;div.innerHTML='<span style="flex:1;font-size:13px;"><strong>'+(field.label||"")+"</strong>"+' <code style="background:#f1f5f9;padding:1px 5px;border-radius:3px;font-size:11px;">'+(field.id||"")+"</code>"+' <em style="color:#64748b;">('+typeLabel+(field.required?", requerido":"")+")</em>"+(field.placeholder?' — <span style="color:#888;">'+field.placeholder+"</span>":"")+(field.type==="select"&&field.options&&field.options.length?" · "+field.options.length+" opciones":"")+"</span>"+'<button type="button" class="button" style="min-width:32px;" data-edit-field="'+index+'" title="Editar">✏️</button>'+'<button type="button" class="button" style="min-width:32px;color:#b80505;" data-remove-field="'+index+'" title="Eliminar">✕</button>';adminFormFieldsList.appendChild(div)});adminFormFieldsList.querySelectorAll("[data-edit-field]").forEach(function(btn){btn.addEventListener("click",function(){openEditField(parseInt(this.getAttribute("data-edit-field"),10))})});adminFormFieldsList.querySelectorAll("[data-remove-field]").forEach(function(btn){btn.addEventListener("click",function(){currentFormFields.splice(parseInt(this.getAttribute("data-remove-field"),10),1);renderFormFieldsEditor()})})}
115function openEditField(index){var field=currentFormFields[index];if(!field)return;if(adminNewFieldLabel)adminNewFieldLabel.value=field.label||"";if(adminNewFieldSlug)adminNewFieldSlug.value=field.id||"";if(adminNewFieldType)adminNewFieldType.value=field.type||"text";if(adminNewFieldPlaceholder)adminNewFieldPlaceholder.value=field.placeholder||"";if(adminNewFieldRequired)adminNewFieldRequired.checked=!!field.required;if(adminNewFieldOptionsRow)adminNewFieldOptionsRow.style.display=field.type==="select"?"block":"none";
115if(adminNewFieldOptions)adminNewFieldOptions.value=field.type==="select"?fieldOptionsToText(field.options):"";if(adminEditFieldIndex)adminEditFieldIndex.value=index;if(adminAddFieldBoxTitle)adminAddFieldBoxTitle.textContent="Editar campo";if(adminAddFieldBtn)adminAddFieldBtn.style.display="none";if(adminSaveEditFieldBtn)adminSaveEditFieldBtn.style.display="";if(adminCancelEditFieldBtn)adminCancelEditFieldBtn.style.display="";adminSlugUserEdited=!0;if(adminNewFieldLabel)adminNewFieldLabel.focus()}
116function cancelEditField(){resetAddFieldForm();if(adminEditFieldIndex)adminEditFieldIndex.value="";if(adminAddFieldBoxTitle)adminAddFieldBoxTitle.textContent="Agregar campo";if(adminAddFieldBtn)adminAddFieldBtn.style.display="";if(adminSaveEditFieldBtn)adminSaveEditFieldBtn.style.display="none";if(adminCancelEditFieldBtn)adminCancelEditFieldBtn.style.display="none"}
117function resetAddFieldForm(){if(adminNewFieldLabel)adminNewFieldLabel.value="";if(adminNewFieldSlug)adminNewFieldSlug.value="";if(adminNewFieldType)adminNewFieldType.value="text";if(adminNewFieldPlaceholder)adminNewFieldPlaceholder.value="";if(adminNewFieldRequired)adminNewFieldRequired.checked=!1;if(adminNewFieldOptions)adminNewFieldOptions.value="";if(adminNewFieldOptionsRow)adminNewFieldOptionsRow.style.display="none";adminSlugUserEdited=!1}
118function buildCustomFieldFromPendingForm(showErrors){var label=adminNewFieldLabel?adminNewFieldLabel.value.trim():"";if(!label){if(showErrors){setAdminEventStatus("La etiqueta del campo personalizado es requerida.","error");if(adminNewFieldLabel)adminNewFieldLabel.focus()}
119return null}
120var type=adminNewFieldType?adminNewFieldType.value:"text";var slugRaw=adminNewFieldSlug?adminNewFieldSlug.value.trim():"";var fieldId=slugRaw?slugRaw.replace(/[^a-z0-9_]+/gi,"_").replace(/^_+|_+$/g,"").toLowerCase():labelToSlug(label);if(!fieldId){fieldId="campo_"+(currentFormFields.length+1)}
121var field={id:fieldId,label:label,type:type,placeholder:adminNewFieldPlaceholder?adminNewFieldPlaceholder.value.trim():"",required:!!(adminNewFieldRequired&&adminNewFieldRequired.checked),};if(type==="select"){var optionsText=adminNewFieldOptions?adminNewFieldOptions.value.trim():"";field.options=optionsText.split("\n").map(function(line){var sepIdx=line.indexOf("|");if(sepIdx===-1){return{value:line.trim(),label:line.trim()}}
122return{value:line.slice(0,sepIdx).trim(),label:line.slice(sepIdx+1).trim()||line.slice(0,sepIdx).trim(),}}).filter(function(option){return option.value});if(!field.options.length){if(showErrors){setAdminEventStatus("El campo tipo selector necesita al menos una opción.","error");if(adminNewFieldOptions)adminNewFieldOptions.focus()}
123return null}}
124return field}
125function addPendingCustomField(showErrors){var field=buildCustomFieldFromPendingForm(showErrors);if(!field){return!1}
126currentFormFields.push(field);renderFormFieldsEditor();resetAddFieldForm();setAdminEventStatus("Campo agregado. Guarda el evento para persistirlo.","");return!0}
127function saveEditField(showErrors){var idx=adminEditFieldIndex?parseInt(adminEditFieldIndex.value,10):NaN;if(isNaN(idx)||idx<0||idx>=currentFormFields.length){cancelEditField();return!1}
128var field=buildCustomFieldFromPendingForm(showErrors);if(!field)return!1;currentFormFields[idx]=field;cancelEditField();renderFormFieldsEditor();setAdminEventStatus("Campo actualizado. Guarda el evento para persistirlo.","");return!0}
129function hasPendingCustomField(){return!!((adminNewFieldLabel&&adminNewFieldLabel.value.trim())||(adminNewFieldPlaceholder&&adminNewFieldPlaceholder.value.trim())||(adminNewFieldOptions&&adminNewFieldOptions.value.trim()))}
130if(adminNewFieldLabel){adminNewFieldLabel.addEventListener("input",function(){if(!adminSlugUserEdited&&adminNewFieldSlug){adminNewFieldSlug.value=labelToSlug(this.value.trim())}})}
131if(adminNewFieldSlug){adminNewFieldSlug.addEventListener("input",function(){adminSlugUserEdited=this.value.trim()!==""})}
132if(adminNewFieldType){adminNewFieldType.addEventListener("change",function(){if(adminNewFieldOptionsRow){adminNewFieldOptionsRow.style.display=this.value==="select"?"block":"none"}})}
133if(adminAddFieldBtn){adminAddFieldBtn.addEventListener("click",function(){addPendingCustomField(!0)})}
134if(adminSaveEditFieldBtn){adminSaveEditFieldBtn.addEventListener("click",function(){saveEditField(!0)})}
135if(adminCancelEditFieldBtn){adminCancelEditFieldBtn.addEventListener("click",function(){cancelEditField()})}
136function loadEvents(){setAdminLoading(!1);hydrateAdminEventsFromInline();renderAdminEventOptions();populateAdminEventFields(getSelectedInlineAdminEvent(),inlineData&&inlineData.questions?inlineData.questions:[])}
137function loadEventDetails(eventId){var selectedOption=adminEventSelect?adminEventSelect.options[adminEventSelect.selectedIndex]:null;var selectedSource=selectedOption&&selectedOption.dataset?selectedOption.dataset.eventSource||"":"";var parsed=parseAdminEventSelection(eventId,selectedSource);navigateToAdminEvent(parsed.id,undefined,parsed.source)}
138function saveEvent(){if(!adminEventNombre||!adminEventSlug||!adminEventWebhookUrl){setAdminEventStatus("Completa todos los campos requeridos.","error");return}
139if(adminEventNombre.value.trim()===""||adminEventSlug.value.trim()===""){setAdminEventStatus("El nombre y slug del evento son requeridos.","error");return}
140var isEditingField=adminEditFieldIndex&&adminEditFieldIndex.value!==""&&!isNaN(parseInt(adminEditFieldIndex.value,10));if(isEditingField){if(!saveEditField(!0))return}else if(hasPendingCustomField()&&!addPendingCustomField(!0)){return}
141setAdminEventStatus("Guardando evento...","");setAdminLoading(!0,"Guardando evento...",{lockSelect:!0});var data=new FormData();data.append("action","satrack_quiz_save_event");data.append("security",inlineData&&inlineData.events_nonce?inlineData.events_nonce:"");data.append("event_id",currentEventId||0);data.append("event_source",currentEventSource||"");data.append("nombre",adminEventNombre.value);data.append("slug",adminEventSlug.value);data.append("descripcion",adminEventDescripcion.value);data.append("hero_titulo",adminEventHeroTitulo?adminEventHeroTitulo.value:"");data.append("hero_descripcion",adminEventHeroDescripcion?adminEventHeroDescripcion.value:"");data.append("form_fields_json",JSON.stringify(currentFormFields));data.append("webhook_url",adminEventWebhookUrl.value);data.append("show_email_checkbox",adminEventShowEmailCheckbox.value);data.append("is_default",adminEventIsDefault?adminEventIsDefault.value:"no");
141fetch(SatrackQuizConfig.ajax_url,{method:"POST",body:data,credentials:"same-origin",}).then(function(response){if(!response.ok){throw new Error("HTTP "+response.status+": "+response.statusText)}
142return response.text()}).then(function(text){var json;try{json=JSON.parse(text)}catch(e){console.error("Invalid JSON response:",text);setAdminLoading(!1);setAdminEventStatus("Error: respuesta inválida del servidor.","error");return}
143if(json&&json.success){var fieldsCount=json.data&&typeof json.data.fields_count!=="undefined"?Number(json.data.fields_count):currentFormFields.length;setAdminEventStatus("Evento guardado correctamente. Campos personalizados guardados: "+fieldsCount+".","success");if(json.data&&json.data.event_id){currentEventId=json.data.event_id}
144if(json.data&&json.data.event_source){currentEventSource=json.data.event_source}
145setTimeout(function(){navigateToAdminEvent(currentEventId||0,"events",currentEventSource||"")},500)}else{var errorMsg=json&&json.data&&json.data.message?json.data.message:"Error desconocido";setAdminLoading(!1);setAdminEventStatus(errorMsg,"error")}}).catch(function(error){console.error("Error saving event:",error);setAdminLoading(!1);setAdminEventStatus("Error de conexión: "+error.message,"error")})}
146function saveQuestions(){if(!currentEventId||currentEventId===0){setAdminQuestionsStatus("Selecciona un evento primero.","error");return}
147var questionsData=getQuestionsData();if(!questionsData.length){setAdminQuestionsStatus("Agrega al menos una pregunta.","error");return}
148setAdminQuestionsStatus("Guardando preguntas...","");setAdminLoading(!0,"Guardando preguntas...",{lockSelect:!0});var data=new FormData();data.append("action","satrack_quiz_save_questions");data.append("security",inlineData&&inlineData.events_nonce?inlineData.events_nonce:"");data.append("event_id",currentEventId||0);data.append("event_source",currentEventSource||"");data.append("questions",JSON.stringify(questionsData));fetch(SatrackQuizConfig.ajax_url,{method:"POST",body:data,credentials:"same-origin",}).then(function(response){if(!response.ok){throw new Error("HTTP "+response.status+": "+response.statusText)}
149return response.text()}).then(function(text){var json;try{json=JSON.parse(text)}catch(e){console.error("Invalid JSON response:",text);setAdminLoading(!1);setAdminQuestionsStatus("Error: respuesta inválida del servidor.","error");return}
150if(json&&json.success){setAdminQuestionsStatus("Preguntas guardadas correctamente.","success");setAdminLoading(!1);setTimeout(function(){navigateToAdminEvent(currentEventId,"questions",currentEventSource||"")},500)}else{var errorMsg=json&&json.data&&json.data.message?json.data.message:"Error desconocido";setAdminLoading(!1);setAdminQuestionsStatus(errorMsg,"error")}}).catch(function(error){console.error("Error saving questions:",error);setAdminLoading(!1);setAdminQuestionsStatus("Error de conexión: "+error.message,"error")})}
151function saveProfiles(){var profilesData=getProfilesData();if(!profilesData.length){setAdminProfilesStatus("Agrega al menos un perfil.","error");return}
152setAdminProfilesStatus("Guardando perfiles...","");setAdminLoading(!0,"Guardando perfiles...",{lockSelect:!0});var data=new FormData();data.append("action","satrack_quiz_save_settings");data.append("security",inlineData&&inlineData.events_nonce?inlineData.events_nonce:"");data.append("profiles",JSON.stringify(profilesData));fetch(SatrackQuizConfig.ajax_url,{method:"POST",body:data,credentials:"same-origin",}).then(function(response){if(!response.ok){throw new Error("HTTP "+response.status+": "+response.statusText)}
153return response.text()}).then(function(text){var json;try{json=JSON.parse(text)}catch(e){console.error("Invalid JSON response:",text);setAdminLoading(!1);setAdminProfilesStatus("Error: respuesta inválida del servidor.","error");return}
154if(json&&json.success){profiles=json.data&&json.data.settings&&Array.isArray(json.data.settings.profiles)?json.data.settings.profiles:profilesData;renderProfilesEditor(profiles);setAdminLoading(!1);setAdminProfilesStatus("Perfiles guardados correctamente.","success")}else{var errorMsg=json&&json.data&&json.data.message?json.data.message:"Error desconocido";setAdminLoading(!1);setAdminProfilesStatus(errorMsg,"error")}}).catch(function(error){console.error("Error saving profiles:",error);setAdminLoading(!1);setAdminProfilesStatus("Error de conexión: "+error.message,"error")})}
155function setAdminEventStatus(message,type){if(!adminEventStatus){return}
156adminEventStatus.textContent=message;adminEventStatus.className="satrack-admin-status"+(type?" "+type:"")}
157function setAdminQuestionsStatus(message,type){if(!adminQuestionsStatus){return}
158adminQuestionsStatus.textContent=message;adminQuestionsStatus.className="satrack-admin-status"+(type?" "+type:"")}
159function setAdminProfilesStatus(message,type){if(!adminProfilesStatus){return}
160adminProfilesStatus.textContent=message;adminProfilesStatus.className="satrack-admin-status"+(type?" "+type:"")}
161function showResultScreen(profile,total){if(resultCard){clearProfileClasses(resultCard);resultCard.classList.add(profile.class)}
162var profileTitle=document.getElementById("satrackResultProfile");var resultText=document.getElementById("satrackResultText");var recommendationText=document.getElementById("satrackRecommendationText");if(profileTitle){profileTitle.innerHTML="";var titleText=document.createTextNode(profile.title+" | ");var scoreSpan=document.createElement("span");scoreSpan.className="satrack-result-points";scoreSpan.textContent=total+" puntos";profileTitle.appendChild(titleText);profileTitle.appendChild(scoreSpan)}
163if(resultText){resultText.textContent=profile.result}
164if(recommendationText){recommendationText.textContent=profile.recommendation}
165if(resultPdf&&profile.pdfUrl){resultPdf.href=profile.pdfUrl;resultPdf.style.display="inline-flex"}
166if(leadCard)leadCard.style.display="none";hideFinalizeLoader();if(emailChoiceCard){emailChoiceCard.style.display="none"}
167if(resultCard)resultCard.style.display="block";if(quizHero)quizHero.style.display="none";scrollToQuiz()}
168function scrollToQuiz(){if(!container){return}
169setTimeout(function(){var rect=container.getBoundingClientRect();var absTop=rect.top+(window.pageYOffset||document.documentElement.scrollTop);window.scrollTo({top:Math.max(0,absTop-16),behavior:"smooth"})},80)}
170function hideFinalizeLoader(){if(emailChoiceCard){emailChoiceCard.classList.remove("is-finalizing")}
171if(emailActions){emailActions.style.display=""}
172if(emailLoader){emailLoader.classList.remove("is-visible")}
173if(finalizeLoaderCard){finalizeLoaderCard.style.display="none"}}
174function showFinalizeLoader(){if(leadCard)leadCard.style.display="none";if(quizCard)quizCard.style.display="none";if(resultCard)resultCard.style.display="none";if(quizHero)quizHero.style.display="none";if(emailChoiceCard){emailChoiceCard.style.display="block";emailChoiceCard.classList.add("is-finalizing");if(emailActions)emailActions.style.display="none";if(emailLoader)emailLoader.classList.add("is-visible");if(finalizeLoaderCard)finalizeLoaderCard.style.display="none";return}
175if(finalizeLoaderCard){finalizeLoaderCard.style.display="block"}}
176function completeQuiz(){var total=calculateTotal();var profile=getProfile(total);if(submissionId){var metaItems=[["total",String(total)],["perfil",profile.title],["perfil_slug",profile.slug],["resultado",profile.result],["recomendacion",profile.recommendation],["pdf_url",profile.pdfUrl||""],];metaItems.forEach(function(pair){var d=new FormData();d.append("action","satrack_quiz_update_answer");d.append("security",SatrackQuizConfig.nonce);d.append("submission_id",submissionId);d.append("meta_key",pair[0]);d.append("meta_value",pair[1]);fetch(SatrackQuizConfig.ajax_url,{method:"POST",body:d,credentials:"same-origin"})})}
177if(quizCard)quizCard.style.display="none";if(emailChoiceCard){hideFinalizeLoader();emailChoiceCard.style.display="block"}else{finalizeQuiz("no")}
178scrollToQuiz()}
179function finalizeQuiz(envioCorreo){var total=calculateTotal();var profile=getProfile(total);var startedAt=Date.now();showFinalizeLoader();var data=new FormData();data.append("action","satrack_quiz_finalize");data.append("security",SatrackQuizConfig.nonce);data.append("submission_id",submissionId||0);data.append("envio_correo",envioCorreo);data.append("total",String(total));data.append("perfil",profile.title);data.append("perfil_slug",profile.slug);data.append("resultado",profile.result);data.append("recomendacion",profile.recommendation);data.append("perfil_color",profile.color||"");data.append("perfil_bg",profile.bg||"");data.append("perfil_border",profile.border||"");data.append("pdf_url",profile.pdfUrl||"");data.append("webhook_url",inlineData.webhook_url||"");function finish(){var elapsed=Date.now()-startedAt;var wait=Math.max(0,500-elapsed);setTimeout(function(){showResultScreen(profile,total)},wait)}
180fetch(SatrackQuizConfig.ajax_url,{method:"POST",body:data,credentials:"same-origin"}).then(finish).catch(finish);scrollToQuiz()}
181function resetQuiz(){currentStep=0;answers=[];submissionId=0;if(form){form.reset();var fields=form.querySelectorAll("input, button");fields.forEach(function(f){f.disabled=!1})}
182var submitBtn=document.getElementById("satrackSubmitForm");if(submitBtn){var originalLabel=submitBtn.getAttribute("data-label");submitBtn.textContent=originalLabel||"Diagnosticar";submitBtn.style.opacity=""}
183var msgBox=document.getElementById("satrackFormMessage");if(msgBox){msgBox.textContent="";msgBox.className="satrack-form-message"}
184if(leadCard){leadCard.classList.remove("is-saving");leadCard.style.display="none"}
185hideFinalizeLoader();if(emailChoiceCard){emailChoiceCard.style.display="none"}
186if(resultCard){clearProfileClasses(resultCard);resultCard.style.display="none"}
187if(quizCard)quizCard.style.display="none";if(quizHero)quizHero.style.display="block";updateProgress();scrollToQuiz()}
188function showMessage(text,type){if(!messageBox){return}
189messageBox.textContent=text;messageBox.className="satrack-form-message "+(type==="error"?"error":"success")}
190function clearMessage(){if(!messageBox){return}
191messageBox.textContent="";messageBox.className="satrack-form-message"}
192function submitForm(event){event.preventDefault();if(!form){return}
193clearMessage();var formData=new FormData(form);formData.append("security",SatrackQuizConfig.nonce);fetch(SatrackQuizConfig.ajax_url,{method:"POST",body:formData,credentials:"same-origin",}).then(function(response){return response.json()}).then(function(data){if(data.success){showMessage("Tu diagnóstico se guardó correctamente.","success");var total=calculateTotal();var profile=getProfile(total);showResultScreen(profile,total)}else{showMessage(data.data&&data.data.message?data.data.message:"Hubo un error al enviar el formulario.","error")}}).catch(function(){showMessage("Error de conexión. Intenta de nuevo más tarde.","error")})}
194if(startBtn){startBtn.addEventListener("click",function(){if(quizHero){quizHero.style.display="none"}
195if(leadCard){leadCard.style.display="block"}
196scrollToQuiz()})}
197if(prevBtn){prevBtn.addEventListener("click",function(){if(currentStep<=0){return}
198if(quizCard){quizCard.classList.add("is-changing")}
199setTimeout(function(){currentStep--;renderQuestion();
199setTimeout(function(){if(quizCard){quizCard.classList.remove("is-changing")}},40)},280)})}
200if(restartBtn){restartBtn.addEventListener("click",resetQuiz)}
201if(emailYesBtn){emailYesBtn.addEventListener("click",function(){finalizeQuiz("si")})}
202if(emailNoBtn){emailNoBtn.addEventListener("click",function(){finalizeQuiz("no")})}
203if(adminToggle){adminToggle.addEventListener("click",toggleAdminPanel)}
204if(adminEventSelect){adminEventSelect.addEventListener("change",function(){loadEventDetails(this.value)})}
205adminTabBtns.forEach(function(btn){btn.addEventListener("click",function(){switchTab(btn.dataset.tab)})});if(adminEventSaveBtn){adminEventSaveBtn.addEventListener("click",saveEvent)}
206if(adminQuestionsSaveBtn){adminQuestionsSaveBtn.addEventListener("click",saveQuestions)}
207if(adminProfilesSaveBtn){adminProfilesSaveBtn.addEventListener("click",saveProfiles)}
208if(adminPanel&&adminEventSelect){loadEvents()}
209if(adminPanel&&inlineData&&inlineData.admin_tab){switchTab(inlineData.admin_tab)}
210if(form){form.addEventListener("submit",function(event){event.preventDefault();var submitBtn=document.getElementById("satrackSubmitForm");var msgBox=document.getElementById("satrackFormMessage");var formData=new FormData(form);formData.append("action","satrack_quiz_save_lead");formData.append("security",SatrackQuizConfig.nonce);if(leadCard)leadCard.classList.add("is-saving");var fields=form.querySelectorAll("input, button");fields.forEach(function(f){f.disabled=!0});if(submitBtn){submitBtn.textContent="Guardando..."}
211if(msgBox){msgBox.textContent="Guardando tu información...";msgBox.className="satrack-form-message"}
212function startQuiz(){if(leadCard)leadCard.style.display="none";if(quizCard)quizCard.style.display="block";renderQuestion();scrollToQuiz()}
213function onError(){if(leadCard)leadCard.classList.remove("is-saving");fields.forEach(function(f){f.disabled=!1});if(submitBtn){submitBtn.textContent=submitBtn.getAttribute("data-label")||"Diagnosticar"}
214if(msgBox){msgBox.textContent="Error de conexión. Intenta de nuevo.";msgBox.className="satrack-form-message error"}}
215if(submitBtn&&!submitBtn.getAttribute("data-label")){submitBtn.setAttribute("data-label",submitBtn.textContent.trim())}
216fetch(SatrackQuizConfig.ajax_url,{method:"POST",body:formData,credentials:"same-origin"}).then(function(r){return r.json()}).then(function(data){if(data&&data.success&&data.data&&data.data.submission_id){submissionId=data.data.submission_id}
217startQuiz()}).catch(onError)})}
218document.addEventListener("DOMContentLoaded",function(){var showEmailCheckbox=container.getAttribute("data-show-email-checkbox");if("no"===showEmailCheckbox){var checkboxRow=document.querySelector(".satrack-form-checkbox");if(checkboxRow){checkboxRow.style.display="none"}}});function escAttr(str){return String(str||"").replace(/&/g,"&amp;").replace(/"/g,"&quot;").replace(/'/g,"&#39;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}
219function renderOptionRow(opt,qi,oi){var letter=String.fromCharCode(65+oi);return'<div class="sve-option-row" data-oi="'+oi+'">'+'<span class="sve-option-letter">'+letter+'</span>'+'<input type="text" class="sve-opt-text" data-qi="'+qi+'" data-oi="'+oi+'" value="'+escAttr(opt.text||"")+'" placeholder="Texto de la opción">'+'<input type="number" class="sve-opt-pts" data-qi="'+qi+'" data-oi="'+oi+'" value="'+Number(opt.points||0)+'" min="0" max="999" placeholder="pts" title="Puntos">'+'<button type="button" class="sve-remove-opt" data-qi="'+qi+'" data-oi="'+oi+'" title="Eliminar opción">&times;</button>'+'</div>'}
220function renderQuestionCard(q,qi,expanded){var options=Array.isArray(q.options)?q.options:[];var optHtml=options.map(function(opt,oi){return renderOptionRow(opt,qi,oi)}).join("");var open=expanded!==!1;return'<div class="sve-card" data-qi="'+qi+'">'+'<div class="sve-card-head">'+'<button type="button" class="sve-toggle" aria-expanded="'+open+'" data-qi="'+qi+'">'+'<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round"><polyline points="6,9 12,15 18,9"/></svg>'+'</button>'+'<span class="sve-card-title">Pregunta '+(qi+1)+'</span>
220'+'<span class="sve-card-subtitle" data-subtitle="'+qi+'">'+escapeHtml(q.label||"")+'</span>'+'<button type="button" class="sve-remove-q" data-qi="'+qi+'" title="Eliminar pregunta">&times;</button>'+'</div>'+'<div class="sve-card-body"'+(open?"":' style="display:none"')+' data-body="'+qi+'">'+'<div class="sve-field">'+'<label>Encabezado / Label</label>'+'<input type="text" class="sve-q-label" data-qi="'+qi+'" value="'+escAttr(q.label||"")+'" placeholder="ej: Poll 1 — Frecuencia de incidentes">'+'</div>'+'<div class="sve-field">'+'<label>Texto de la pregunta</label>'+'<textarea class="sve-q-question" data-qi="'+qi+'" rows="2" placeholder="¿Pregunta completa para el participante?">'+escapeHtml(q.question||"")+'</textarea>'+'</div>'+'<div class="sve-field">'+'<label>Texto de ayuda <em>(opcional)</em></label>'+'<textarea class="sve-q-helper" data-qi="'+qi+'" rows="2" placeholder="Contexto adicional visible bajo la pregunta...">'+escapeHtml(q.helper||"")+'</textarea>'+'</div>'+'<div class="sve-field">'+'<label>Opciones de respuesta</label>'+'<div class="sve-options-list" data-opts="'+qi+'">'+optHtml+'</div>'+'<button type="button" class="sve-add-opt button" data-qi="'+qi+'">+ Agregar opción</button>'+'</div>'+'</div>'+'</div>'}
221function renderQuestionsEditor(questions){if(!questionsEditorEl)return;questions=Array.isArray(questions)?questions:[];if(!questions.length){questionsEditorEl.innerHTML='<p class="sve-empty">No hay preguntas. Haz clic en "+ Agregar pregunta" para comenzar.</p>';return}
222questionsEditorEl.innerHTML=questions.map(function(q,qi){return renderQuestionCard(q,qi,!0)}).join("");attachQuestionsEvents()}
223function attachQuestionsEvents(){if(!questionsEditorEl)return;questionsEditorEl.querySelectorAll(".sve-toggle").forEach(function(btn){btn.addEventListener("click",function(){var qi=btn.getAttribute("data-qi");var body=questionsEditorEl.querySelector('[data-body="'+qi+'"]');var open=btn.getAttribute("aria-expanded")==="true";btn.setAttribute("aria-expanded",String(!open));if(body)body.style.display=open?"none":""})});questionsEditorEl.querySelectorAll(".sve-remove-q").forEach(function(btn){btn.addEventListener("click",function(){if(!confirm("¿Eliminar esta pregunta?"))return;renderQuestionsEditor(getQuestionsData().filter(function(_,i){return i!==parseInt(btn.getAttribute("data-qi"),10)}))})});questionsEditorEl.querySelectorAll(".sve-add-opt").forEach(function(btn){btn.addEventListener("click",function(){var qi=parseInt(btn.getAttribute("data-qi"),10);var data=getQuestionsData();if(data[qi]){data[qi].options.push({letter:"",text:"",points:0});var saved=getSavedQCardState();renderQuestionsEditor(data);restoreQCardState(saved)}})});questionsEditorEl.querySelectorAll(".sve-remove-opt").forEach(function(btn){btn.addEventListener("click",function(){var qi=parseInt(btn.getAttribute("data-qi"),10);var oi=parseInt(btn.getAttribute("data-oi"),10);var data=getQuestionsData();if(data[qi]){data[qi].options.splice(oi,1);var saved=getSavedQCardState();renderQuestionsEditor(data);restoreQCardState(saved)}})});questionsEditorEl.querySelectorAll(".sve-q-label").forEach(function(input){input.addEventListener("input",function(){var qi=input.getAttribute("data-qi");var sub=questionsEditorEl.querySelector('[data-subtitle="'+qi+'"]');if(sub)sub.textContent=input.value})})}
224function getSavedQCardState(){var state={};if(!questionsEditorEl)return state;questionsEditorEl.querySelectorAll(".sve-toggle").forEach(function(btn){state[btn.getAttribute("data-qi")]=btn.getAttribute("aria-expanded")==="true"});return state}
225function restoreQCardState(state){if(!questionsEditorEl)return;questionsEditorEl.querySelectorAll(".sve-toggle").forEach(function(btn){var qi=btn.getAttribute("data-qi");var open=state[qi]!==!1;btn.setAttribute("aria-expanded",String(open));var body=questionsEditorEl.querySelector('[data-body="'+qi+'"]');if(body)body.style.display=open?"":"none"})}
226function getQuestionsData(){if(!questionsEditorEl)return[];var result=[];questionsEditorEl.querySelectorAll(".sve-card").forEach(function(card,qi){var labelEl=card.querySelector(".sve-q-label");var questionEl=card.querySelector(".sve-q-question");var helperEl=card.querySelector(".sve-q-helper");var options=[];card.querySelectorAll(".sve-option-row").forEach(function(row,oi){var textEl=row.querySelector(".sve-opt-text");var pointsEl=row.querySelector(".sve-opt-pts");options.push({letter:String.fromCharCode(65+oi),text:textEl?textEl.value.trim():"",points:p
226ointsEl?parseInt(pointsEl.value||"0",10):0,})});result.push({id:"pregunta_"+(qi+1),label:labelEl?labelEl.value.trim():"",question:questionEl?questionEl.value.trim():"",helper:helperEl?helperEl.value.trim():"",options:options,})});return result}
227if(addQuestionBtn){addQuestionBtn.addEventListener("click",function(){var data=getQuestionsData();data.push({id:"pregunta_"+(data.length+1),label:"",question:"",helper:"",options:[{letter:"A",text:"",points:0},{letter:"B",text:"",points:0},]});renderQuestionsEditor(data);var last=questionsEditorEl&&questionsEditorEl.querySelector(".sve-card:last-child");if(last)last.scrollIntoView({behavior:"smooth",block:"nearest"})})}
228function hexBase(val,fallback){var s=(val||"").trim();if(/^#[0-9a-fA-F]{6}$/.test(s))return s;if(/^#[0-9a-fA-F]{8}$/.test(s))return s.slice(0,7);return fallback}
229function renderProfileCard(p,pi){var color=p.color||"#00a3a8";return'<div class="sve-card" data-pi="'+pi+'">'+'<div class="sve-card-head">'+'<button type="button" class="sve-toggle" aria-expanded="false" data-pi="'+pi+'">'+'<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round"><polyline points="6,9 12,15 18,9"/></svg>'+'</button>'+'<span class="sve-color-dot" style="background:'+escAttr(color)+'" data-dot="'+pi+'"></span>'+'<span class="sve-card-title" data-ptitle="'+pi+'">'+escapeHtml(p.title||"Perfil "+(pi+1))+'</span>'+'<span class="sve-card-subtitle">'+(p.min||0)+' – '+(p.max||0)+' pts</span>'+'<button type="button" class="sve-remove-p" data-pi="'+pi+'" title="Eliminar perfil">&times;</button>'+'</div>'+'<div class="sve-card-body" data-pbody="'+pi+'" style="display:none">'+'<div class="sve-field-row">'+'<div class="sve-field">'+'<label>Título del perfil</label>'+'<input type="text" class="sve-p-title" data-pi="'+pi+'" value="'+escAttr(p.title||"")+'" placeholder="ej: Exposición baja">'+'</div>'+'<div class="sve-field sve-field-sm">'+'<label>Slug</label>'+'<input type="text" class="sve-p-slug" data-pi="'+pi+'" value="'+escAttr(p.slug||"")+'" placeholder="baja">'+'</div>'+'</div>'+'<div class="sve-field-row">'+'<div class="sve-field sve-field-xs">'+'<label>Desde (pts)</label>'+'<input type="number" class="sve-p-min" data-pi="'+pi+'" value="'+Number(p.min||0)+'" min="0">'+'</div>'+'<div class="sve-field sve-field-xs">'+'<label>Hasta (pts)</label>'+'<input type="number" class="sve-p-max" data-pi="'+pi+'" value="'+Number(p.max||0)+'" min="0">'+'</div>'+'<div class="sve-field sve-field-xs">'+'<label>Color</label>'+'<input type="color" class="sve-p-color" data-pi="'+pi+'" value="'+escAttr(color)+'">'+'</div>'+'<div class="sve-field sve-field-xs">'+'<label>Color fondo</label>'+'<input type="color" class="sve-p-bg" data-pi="'+pi+'" value="'+escAttr(hexBase(p.bg,color))+'">'+'</div>'+'<div class="sve-field sve-field-xs">'+'<label>Color borde</label>'+'<input type="color" class="sve-p-border-color" data-pi="'+pi+'" value="'+escAttr(hexBase(p.border,color))+'">'+'</div>'+'</div>'+'<div class="sve-field">'+'<label>Texto de resultado</label>'+'<textarea class="sve-p-result" data-pi="'+pi+'" rows="3" placeholder="Descripción del perfil que ve el participante...">'+escapeHtml(p.result||"")+'</textarea>'+'</div>'+'<div class="sve-field">'+'<label>Recomendación</label>'+'<textarea class="sve-p-rec" data-pi="'+pi+'" rows="3" placeholder="Acción concreta que se recomienda al participante...">'+escapeHtml(p.recommendation||"")+'</textarea>'+'</div>'+'<div class="sve-field-row">'+'<div class="sve-field">'+'<label>Título del PDF <em>(opcional)</em></label>'+'<input type="text" class="sve-p-pdftitle" data-pi="'+pi+'" value="'+escAttr(p.pdfTitle||"")+'" placeholder="Guía para...">'+'</div>'+'<div class="sve-field">'+'<label>URL del PDF <em>(opcional)</em></label>'+'<input type="url" class="sve-p-pdfurl" data-pi="'+pi+'" value="'+escAttr(p.pdfUrl||"")+'" placeholder="https://">'+'</div>'+'</div>'+'</div>'+'</div>'}
230function renderProfilesEditor(profs){if(!profilesEditorEl)return;profs=Array.isArray(profs)?profs:[];if(!profs.length){profilesEditorEl.innerHTML='<p class="sve-empty">No hay perfiles. Haz clic en "+ Agregar perfil" para comenzar.</p>';return}
231profilesEditorEl.innerHTML=profs.map(function(p,pi){return renderProfileCard(p,pi)}).join("");attachProfilesEvents()}
232function attachProfilesEvents(){if(!profilesEditorEl)return;profilesEditorEl.querySelectorAll(".sve-toggle").forEach(function(btn
232){btn.addEventListener("click",function(){var pi=btn.getAttribute("data-pi");var body=profilesEditorEl.querySelector('[data-pbody="'+pi+'"]');var open=btn.getAttribute("aria-expanded")==="true";btn.setAttribute("aria-expanded",String(!open));if(body)body.style.display=open?"none":""})});profilesEditorEl.querySelectorAll(".sve-remove-p").forEach(function(btn){btn.addEventListener("click",function(){if(!confirm("¿Eliminar este perfil?"))return;renderProfilesEditor(getProfilesData().filter(function(_,i){return i!==parseInt(btn.getAttribute("data-pi"),10)}))})});profilesEditorEl.querySelectorAll(".sve-p-title").forEach(function(input){input.addEventListener("input",function(){var pi=input.getAttribute("data-pi");var lbl=profilesEditorEl.querySelector('[data-ptitle="'+pi+'"]');if(lbl)lbl.textContent=input.value||"Perfil";var slugEl=profilesEditorEl.querySelector('.sve-p-slug[data-pi="'+pi+'"]');if(slugEl&&!slugEl.dataset.userEdited){slugEl.value=input.value.toLowerCase().normalize("NFD").replace(/[̀-ͯ]/g,"").replace(/[^a-z0-9]+/g,"_").replace(/^_+|_+$/g,"")}})});profilesEditorEl.querySelectorAll(".sve-p-slug").forEach(function(input){input.addEventListener("input",function(){input.dataset.userEdited="1"})});profilesEditorEl.querySelectorAll(".sve-p-color").forEach(function(input){input.addEventListener("input",function(){var pi=input.getAttribute("data-pi");var dot=profilesEditorEl.querySelector('[data-dot="'+pi+'"]');if(dot)dot.style.background=input.value})});profilesEditorEl.querySelectorAll(".sve-p-min, .sve-p-max").forEach(function(input){input.addEventListener("input",function(){var pi=input.getAttribute("data-pi");var card=profilesEditorEl.querySelector('[data-pi="'+pi+'"]');if(!card)return;var minEl=card.querySelector(".sve-p-min");var maxEl=card.querySelector(".sve-p-max");var sub=card.querySelector(".sve-card-subtitle");if(sub&&minEl&&maxEl)sub.textContent=(minEl.value||0)+" – "+(maxEl.value||0)+" pts"})})}
233function getProfilesData(){if(!profilesEditorEl)return[];var result=[];profilesEditorEl.querySelectorAll(".sve-card").forEach(function(card){var g=function(cls){var el=card.querySelector(cls);return el?el.value.trim():""};var color=g(".sve-p-color")||"#00a3a8";var bgColor=g(".sve-p-bg")||color;var borderColor=g(".sve-p-border-color")||color;result.push({title:g(".sve-p-title"),slug:g(".sve-p-slug"),min:parseInt(g(".sve-p-min")||"0",10),max:parseInt(g(".sve-p-max")||"0",10),color:color,bg:bgColor,border:borderColor,class:"perfil-"+(g(".sve-p-slug")||"custom"),result:g(".sve-p-result"),recommendation:g(".sve-p-rec"),pdfTitle:g(".sve-p-pdftitle"),pdfUrl:g(".sve-p-pdfurl"),})});return result}
234if(addProfileBtn){addProfileBtn.addEventListener("click",function(){var data=getProfilesData();data.push({title:"",slug:"",min:0,max:0,color:"#00a3a8",result:"",recommendation:"",pdfTitle:"",pdfUrl:""});renderProfilesEditor(data);var last=profilesEditorEl&&profilesEditorEl.querySelector(".sve-card:last-child");if(last){last.scrollIntoView({behavior:"smooth",block:"nearest"});var toggle=last.querySelector(".sve-toggle");if(toggle)toggle.click()}})}
235if(profilesEditorEl){renderProfilesEditor(profiles)}
236if(inlineData&&inlineData.can_manage){console.log("=== Satrack Quiz Admin Debug ===");console.log("Admin Panel found:",!!adminPanel);console.log("Event Select found:",!!adminEventSelect);console.log("Event Nombre found:",!!adminEventNombre);console.log("Event Slug found:",!!adminEventSlug);console.log("Webhook URL found:",!!adminEventWebhookUrl);console.log("Event Save Button found:",!!adminEventSaveBtn);console.log("Questions Editor found:",!!questionsEditorEl);console.log("Questions Save Button found:",!!adminQuestionsSaveBtn);console.log("Profiles Editor found:",!!profilesEditorEl);console.log("Profiles Save Button found:",!!adminProfilesSaveBtn);console.log("Nonce available:",!!inlineData.events_nonce);console.log("Can manage:",inlineData.can_manage);console.log("Ajax URL:",SatrackQuizConfig.ajax_url);console.log("All checks passed, admin panel ready")}})()

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.