{"id":21313,"date":"2026-09-09T18:46:29","date_gmt":"2026-09-09T18:46:29","guid":{"rendered":"https:\/\/tibermx.com\/?page_id=21313"},"modified":"2026-09-09T18:52:13","modified_gmt":"2026-09-09T18:52:13","slug":"diagnostico-de-precalificacion","status":"publish","type":"page","link":"https:\/\/tibermx.com\/index.php\/diagnostico-de-precalificacion\/","title":{"rendered":"Diagn\u00f3stico de Precalificaci\u00f3n"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"21313\" class=\"elementor elementor-21313\">\n\t\t\t\t<div class=\"elementor-element elementor-element-1f8d549 e-flex e-con-boxed e-con e-parent\" data-id=\"1f8d549\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-9e6230c elementor-widget elementor-widget-html\" data-id=\"9e6230c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<!DOCTYPE html>\n<html lang=\"es\">\n<head>\n<meta charset=\"UTF-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n<title>T\u00edber \u2014 Diagn\u00f3stico privado<\/title>\n<style>\n  :root{\n    --navy:#02153d;\n    --teal:#0197af;\n    --lavanda:#ebebff;\n    --morado:#4b2b86;\n    --ink:#14203a;\n    --paper:#fdfdfd;\n    --line:rgba(2,21,61,0.10);\n  }\n  *{box-sizing:border-box;}\n  html,body{margin:0;padding:0;}\n  body{\n    background: var(--lavanda);\n    font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif;\n    color: var(--ink);\n    min-height:100vh;\n    display:flex; align-items:flex-start; justify-content:center;\n    padding: 32px 16px;\n  }\n  .card{\n    width:100%; max-width:560px;\n    background: var(--paper);\n    border-radius: 22px;\n    box-shadow: 0 30px 60px -30px rgba(2,21,61,0.35);\n    overflow:hidden; position:relative;\n  }\n  .brandbar{ display:flex; align-items:center; justify-content:space-between; padding: 22px 28px 0 28px; }\n  .brandmark{ display:flex; align-items:center; gap:8px; font-family: Georgia, \"Times New Roman\", serif; font-size: 15px; letter-spacing: 0.14em; color: var(--navy); text-transform: uppercase; }\n  .brandmark .dot{ width:8px; height:8px; border-radius:50%; background: linear-gradient(135deg, var(--teal), var(--navy)); }\n  .progress-line{ display:flex; gap:5px; padding: 18px 28px 0 28px; }\n  .progress-line span{ height:4px; flex:1; border-radius:4px; background: var(--line); overflow:hidden; position:relative; }\n  .progress-line span i{ display:block; height:100%; width:0%; background: linear-gradient(90deg, var(--teal), var(--navy)); transition: width .4s ease; }\n  .screen{ padding: 26px 28px 32px 28px; display:none; animation: fade .35s ease; }\n  .screen.active{ display:block; }\n  @keyframes fade{ from{opacity:0; transform:translateY(6px);} to{opacity:1; transform:translateY(0);} }\n  .eyebrow{ font-size: 11.5px; letter-spacing: 0.14em; text-transform: uppercase; color: var(--teal); font-weight: 600; margin-bottom: 14px; }\n  h1{ font-family: Georgia, \"Times New Roman\", serif; font-weight: 400; font-size: 26px; line-height:1.25; color: var(--navy); margin: 0 0 12px 0; }\n  h2{ font-family: Georgia, \"Times New Roman\", serif; font-weight: 400; font-size: 21px; line-height:1.32; color: var(--navy); margin: 0 0 20px 0; }\n  p.lede{ font-size: 15px; line-height:1.6; color: rgba(20,32,58,0.72); margin: 0 0 22px 0; }\n  .btn{ display:inline-flex; align-items:center; justify-content:center; gap:8px; width:100%; padding: 15px 20px; border-radius: 12px; border: none; background: var(--navy); color: white; font-size: 15px; font-weight: 600; cursor:pointer; font-family: inherit; transition: transform .15s ease, background .2s ease; }\n  .btn:hover{ background:#051c4d; transform: translateY(-1px); }\n  .foot-note{ text-align:center; font-size: 12.5px; color: rgba(20,32,58,0.5); margin-top: 16px; }\n  .options{ display:flex; flex-direction:column; gap:10px; margin-bottom: 8px;}\n  .opt{ text-align:left; padding: 15px 18px; border-radius: 12px; border: 1.5px solid var(--line); background: white; cursor:pointer; font-family: inherit; font-size: 14.5px; color: var(--ink); transition: all .15s ease; }\n  .opt:hover{ border-color: var(--teal); background: var(--lavanda); }\n  .opt.selected{ border-color: var(--teal); background: linear-gradient(0deg, rgba(1,151,175,0.07), rgba(1,151,175,0.07)), white; box-shadow: inset 0 0 0 1.5px var(--teal); }\n  .nav-row{ display:flex; justify-content:space-between; align-items:center; margin-top:22px; }\n  .back-link{ font-size: 13.5px; color: rgba(20,32,58,0.5); background:none; border:none; cursor:pointer; font-family:inherit; }\n  .back-link:hover{ color: var(--navy); }\n  .result-badge{ display:inline-block; padding: 6px 14px; border-radius: 999px; font-size: 12px; font-weight: 700; letter-spacing: 0.04em; margin-bottom: 10px; }\n  .badge-listo{ background: rgba(1,151,175,0.13); color: var(--teal); }\n  .badge-casi{ background: rgba(75,43,134,0.12); color: var(--morado); }\n  .badge-cerca{ background: rgba(107,74,158,0.14); color: #6b4a9e; }\n  .badge-prep{ background: rgba(2,21,61,0.08); color: var(--navy); }\n  .intent-line{ font-size: 12.5px; color: rgba(20,32,58,0.55); margin-bottom: 16px; }\n  .dti-note{ background: rgba(2,21,61,0.045); border-radius: 12px; padding: 12px 16px; font-size: 13.5px; line-height:1.5; color: var(--ink); margin: 0 0 18px 0; }\n  .dti-note b{ color: var(--navy); }\n  .tips{ list-style:none; padding:0; margin: 6px 0 20px 0; }\n  .tips li{ display:flex; gap:12px; align-items:flex-start; padding: 12px 0; border-top: 1px solid var(--line); font-size: 14.5px; line-height:1.55; color: var(--ink); }\n  .tips li:first-child{ border-top:none; }\n  .tips li .mark{ flex-shrink:0; width:6px; height:6px; border-radius:50%; background: var(--teal); margin-top:8px; }\n  .free-note{ background: var(--lavanda); border-radius: 14px; padding: 16px 18px; font-size: 14px; line-height: 1.55; color: var(--navy); margin: 0 0 20px 0; border-left: 3px solid var(--morado); }\n  .free-note b{ color: var(--morado); }\n  label.field-label{ display:block; font-size: 12.5px; color: rgba(20,32,58,0.6); margin: 0 0 6px 2px; }\n  input[type=email], input[type=tel]{ width:100%; padding: 14px 16px; border-radius: 12px; border: 1.5px solid var(--line); font-size: 15px; font-family: inherit; margin-bottom: 16px; outline: none; }\n  input[type=email]:focus, input[type=tel]:focus{ border-color: var(--teal); }\n  .field-error{ font-size: 12.5px; color: #a33; margin: -10px 0 12px 2px; display:none; }\n  .quote-close{ font-family: Georgia, \"Times New Roman\", serif; font-style: italic; font-size: 17px; color: var(--navy); line-height:1.5; border-left: 3px solid var(--teal); padding-left: 16px; margin: 22px 0; }\n  .lock-icon{ opacity:0.55; }\n<\/style>\n<\/head>\n<body>\n\n<div class=\"card\">\n  <div class=\"brandbar\"><div class=\"brandmark\"><span class=\"dot\"><\/span> T\u00edber<\/div><\/div>\n  <div class=\"progress-line\" id=\"progressLine\"><\/div>\n\n  <!-- 0 Intro -->\n  <div class=\"screen active\" data-screen=\"0\">\n    <div class=\"eyebrow\">Diagn\u00f3stico privado \u00b7 3 minutos<\/div>\n    <h1>\u00bfTu perfil est\u00e1 listo para un cr\u00e9dito hipotecario?<\/h1>\n    <p class=\"lede\">Este ejercicio no calcula un monto \u2014 te dice qu\u00e9 tan preparado est\u00e1 tu perfil hoy y qu\u00e9 te conviene hacer, seg\u00fan tu propia situaci\u00f3n. Tus respuestas no se comparten con nadie mientras las contestas: el resultado aparece aqu\u00ed, solo para ti, antes de pedirte cualquier dato.<\/p>\n    <button class=\"btn\" onclick=\"goTo(1)\">Empezar<\/button>\n    <div class=\"foot-note\">Nadie te est\u00e1 calificando. Solo t\u00fa ves esto primero.<\/div>\n  <\/div>\n\n  <!-- 1 Ingreso -->\n  <div class=\"screen\" data-screen=\"1\">\n    <div class=\"eyebrow\">Pregunta 1 de 8<\/div>\n    <h2>\u00bfCu\u00e1l es tu ingreso mensual aproximado?<\/h2>\n    <div class=\"options\" data-q=\"ingreso\" data-step=\"1\">\n      <button class=\"opt\" data-v=\"1\">Menos de $15,000<\/button>\n      <button class=\"opt\" data-v=\"2\">$15,000 \u2013 $30,000<\/button>\n      <button class=\"opt\" data-v=\"3\">$30,000 \u2013 $50,000<\/button>\n      <button class=\"opt\" data-v=\"4\">$50,000 \u2013 $80,000<\/button>\n      <button class=\"opt\" data-v=\"5\">M\u00e1s de $80,000<\/button>\n    <\/div>\n    <div class=\"nav-row\"><button class=\"back-link\" onclick=\"goTo(0)\">\u2190 Atr\u00e1s<\/button><\/div>\n  <\/div>\n\n  <!-- 2 Comprobaci\u00f3n -->\n  <div class=\"screen\" data-screen=\"2\">\n    <div class=\"eyebrow\">Pregunta 2 de 8<\/div>\n    <h2>\u00bfDe qu\u00e9 forma comprobar\u00edas tus ingresos hoy?<\/h2>\n    <div class=\"options\" data-q=\"comprobacion\" data-step=\"2\">\n      <button class=\"opt\" data-v=\"nomina\">Soy asalariado(a), recibo n\u00f3mina<\/button>\n      <button class=\"opt\" data-v=\"independiente\">Soy independiente o tengo negocio propio<\/button>\n      <button class=\"opt\" data-v=\"combinacion\">Tengo ingresos de ambas formas<\/button>\n      <button class=\"opt\" data-v=\"infonavit\">Voy a usar Infonavit<\/button>\n    <\/div>\n    <div class=\"nav-row\"><button class=\"back-link\" onclick=\"goTo(1)\">\u2190 Atr\u00e1s<\/button><\/div>\n  <\/div>\n\n  <!-- 3 Antig\u00fcedad n\u00f3mina -->\n  <div class=\"screen\" data-screen=\"3\">\n    <div class=\"eyebrow\">Pregunta 3 de 8<\/div>\n    <h2>\u00bfCu\u00e1nto tiempo llevas en tu empleo actual?<\/h2>\n    <div class=\"options\" data-q=\"antiguedad\" data-step=\"3\">\n      <button class=\"opt\" data-v=\"1\">Menos de 6 meses<\/button>\n      <button class=\"opt\" data-v=\"2\">De 6 meses a 1 a\u00f1o<\/button>\n      <button class=\"opt\" data-v=\"3\">De 1 a 2 a\u00f1os<\/button>\n      <button class=\"opt\" data-v=\"4\">M\u00e1s de 2 a\u00f1os<\/button>\n    <\/div>\n    <div class=\"nav-row\"><button class=\"back-link\" onclick=\"goTo(2)\">\u2190 Atr\u00e1s<\/button><\/div>\n  <\/div>\n\n  <!-- 4 Antig\u00fcedad independiente -->\n  <div class=\"screen\" data-screen=\"4\">\n    <div class=\"eyebrow\">Pregunta 3 de 8<\/div>\n    <h2>\u00bfCu\u00e1nto tiempo llevas dado de alta ante el SAT con tu giro actual?<\/h2>\n    <div class=\"options\" data-q=\"antiguedad\" data-step=\"3\">\n      <button class=\"opt\" data-v=\"1\">A\u00fan no estoy dado de alta<\/button>\n      <button class=\"opt\" data-v=\"2\">Menos de 6 meses<\/button>\n      <button class=\"opt\" data-v=\"3\">De 6 meses a 1 a\u00f1o<\/button>\n      <button class=\"opt\" data-v=\"4\">M\u00e1s de 1 a\u00f1o<\/button>\n    <\/div>\n    <div class=\"nav-row\"><button class=\"back-link\" onclick=\"goTo(2)\">\u2190 Atr\u00e1s<\/button><\/div>\n  <\/div>\n\n  <!-- 5 Bur\u00f3 -->\n  <div class=\"screen\" data-screen=\"5\">\n    <div class=\"eyebrow\">Pregunta 4 de 8<\/div>\n    <h2>\u00bfC\u00f3mo describir\u00edas tu manejo del bur\u00f3 de cr\u00e9dito?<\/h2>\n    <div class=\"options\" data-q=\"buro\" data-step=\"4\">\n      <button class=\"opt\" data-v=\"4\">Buen historial, pago puntual<\/button>\n      <button class=\"opt\" data-v=\"3\">Historial regular, alg\u00fan atraso ocasional<\/button>\n      <button class=\"opt\" data-v=\"2\">No tengo historial crediticio todav\u00eda<\/button>\n      <button class=\"opt\" data-v=\"0\">Historial con problemas serios<\/button>\n    <\/div>\n    <div class=\"nav-row\"><button class=\"back-link\" onclick=\"goBackFromBuro()\">\u2190 Atr\u00e1s<\/button><\/div>\n  <\/div>\n\n  <!-- 6 Deudas -->\n  <div class=\"screen\" data-screen=\"6\">\n    <div class=\"eyebrow\">Pregunta 5 de 8<\/div>\n    <h2>\u00bfCu\u00e1nto pagas al mes en total por tus deudas actuales? (tarjetas, auto, otros cr\u00e9ditos)<\/h2>\n    <div class=\"options\" data-q=\"deudaPago\" data-step=\"5\">\n      <button class=\"opt\" data-v=\"0\">No pago nada, no tengo deudas<\/button>\n      <button class=\"opt\" data-v=\"1000\">Menos de $2,000<\/button>\n      <button class=\"opt\" data-v=\"3500\">Entre $2,000 y $5,000<\/button>\n      <button class=\"opt\" data-v=\"7500\">Entre $5,000 y $10,000<\/button>\n      <button class=\"opt\" data-v=\"13000\">M\u00e1s de $10,000<\/button>\n    <\/div>\n    <div class=\"nav-row\"><button class=\"back-link\" onclick=\"goTo(5)\">\u2190 Atr\u00e1s<\/button><\/div>\n  <\/div>\n\n  <!-- 7 Ahorro -->\n  <div class=\"screen\" data-screen=\"7\">\n    <div class=\"eyebrow\">Pregunta 6 de 8<\/div>\n    <h2>\u00bfCu\u00e1nto tienes ahorrado pensando en el enganche?<\/h2>\n    <div class=\"options\" data-q=\"ahorro\" data-step=\"6\">\n      <button class=\"opt\" data-v=\"1\">A\u00fan no empiezo a ahorrar<\/button>\n      <button class=\"opt\" data-v=\"2\">Menos de $100,000<\/button>\n      <button class=\"opt\" data-v=\"3\">$100,000 \u2013 $300,000<\/button>\n      <button class=\"opt\" data-v=\"4\">M\u00e1s de $300,000<\/button>\n    <\/div>\n    <div class=\"nav-row\"><button class=\"back-link\" onclick=\"goTo(6)\">\u2190 Atr\u00e1s<\/button><\/div>\n  <\/div>\n\n  <!-- 8 Momento -->\n  <div class=\"screen\" data-screen=\"8\">\n    <div class=\"eyebrow\">Pregunta 7 de 8<\/div>\n    <h2>\u00bfPara cu\u00e1ndo te gustar\u00eda comprar?<\/h2>\n    <div class=\"options\" data-q=\"momento\" data-step=\"7\">\n      <button class=\"opt\" data-v=\"4\">Ya estoy buscando activamente<\/button>\n      <button class=\"opt\" data-v=\"3\">En los pr\u00f3ximos 6 meses<\/button>\n      <button class=\"opt\" data-v=\"2\">En aproximadamente un a\u00f1o<\/button>\n      <button class=\"opt\" data-v=\"1\">A\u00fan estoy explorando, sin fecha<\/button>\n    <\/div>\n    <div class=\"nav-row\"><button class=\"back-link\" onclick=\"goTo(7)\">\u2190 Atr\u00e1s<\/button><\/div>\n  <\/div>\n\n  <!-- 9 Inter\u00e9s -->\n  <div class=\"screen\" data-screen=\"9\">\n    <div class=\"eyebrow\">Pregunta 8 de 8<\/div>\n    <h2>\u00bfQu\u00e9 tienes en mente?<\/h2>\n    <div class=\"options\" data-q=\"interes\" data-step=\"8\">\n      <button class=\"opt\" data-v=\"familiar\">Casa o depa para vivir<\/button>\n      <button class=\"opt\" data-v=\"flujo\">Depa para poner en renta<\/button>\n      <button class=\"opt\" data-v=\"estrategico\">Terreno o algo m\u00e1s estrat\u00e9gico<\/button>\n      <button class=\"opt\" data-v=\"explorando\">A\u00fan no lo s\u00e9 bien<\/button>\n    <\/div>\n    <div class=\"nav-row\"><button class=\"back-link\" onclick=\"goTo(8)\">\u2190 Atr\u00e1s<\/button><\/div>\n  <\/div>\n\n  <!-- 10 Resultado -->\n  <div class=\"screen\" data-screen=\"10\">\n    <div id=\"resultBadge\"><\/div>\n    <div class=\"intent-line\" id=\"resultIntent\"><\/div>\n    <div class=\"dti-note\" id=\"resultDTI\"><\/div>\n    <h1 id=\"resultHeadline\"><\/h1>\n    <p class=\"lede\" id=\"resultLede\"><\/p>\n    <div id=\"resultFreeNote\"><\/div>\n    <ul class=\"tips\" id=\"resultTips\"><\/ul>\n    <button class=\"btn\" id=\"resultCta\" onclick=\"goTo(11)\"><\/button>\n    <div class=\"foot-note\"><a href=\"#\" onclick=\"goTo(12); return false;\" style=\"color:inherit;\">No gracias, solo quer\u00eda ver mi resultado<\/a><\/div>\n  <\/div>\n\n  <!-- 11 Contacto -->\n  <div class=\"screen\" data-screen=\"11\">\n    <div class=\"eyebrow\">\u00daltimo paso \u00b7 opcional<\/div>\n    <h2 id=\"contactHeadline\"><\/h2>\n    <p class=\"lede\" id=\"contactLede\"><\/p>\n    <label class=\"field-label\" for=\"emailInput\">Correo<\/label>\n    <input type=\"email\" id=\"emailInput\" placeholder=\"tu@correo.com\">\n    <div class=\"field-error\" id=\"emailError\">Escribe un correo v\u00e1lido.<\/div>\n    <label class=\"field-label\" for=\"phoneInput\">Tel\u00e9fono<\/label>\n    <input type=\"tel\" id=\"phoneInput\" placeholder=\"55 1234 5678\">\n    <div class=\"field-error\" id=\"phoneError\">Escribe un tel\u00e9fono v\u00e1lido (10 d\u00edgitos).<\/div>\n    <label class=\"field-label\" for=\"codeInput\">C\u00f3digo de tu asesora (opcional)<\/label>\n    <input type=\"text\" id=\"codeInput\" placeholder=\"Ej. TIB-ERIKA\">\n    <div class=\"foot-note\" id=\"codeHelper\" style=\"margin-top:-8px; margin-bottom:16px; text-align:left;\">\u00bfAlguien de T\u00edber te comparti\u00f3 un c\u00f3digo? Ponlo aqu\u00ed y te damos una sesi\u00f3n de asesor\u00eda personalizada extra, sin costo.<\/div>\n    <button class=\"btn\" onclick=\"submitContact()\">Enviarme esto<\/button>\n    <div class=\"foot-note\"><a href=\"#\" onclick=\"goTo(12); return false;\" style=\"color:inherit;\">No gracias, solo quer\u00eda ver el resultado<\/a><\/div>\n  <\/div>\n\n  <!-- 12 Cierre -->\n  <div class=\"screen\" data-screen=\"12\">\n    <div class=\"eyebrow\">Listo<\/div>\n    <h1>Ya tienes tu resultado.<\/h1>\n    <div class=\"quote-close\">\"No buscamos convencerte de nada. Buscamos que tomes tu pr\u00f3xima decisi\u00f3n con m\u00e1s claridad de la que ten\u00edas hoy.\"<\/div>\n    <p class=\"lede\">Cuando quieras platicarlo con una asesora \u2014 hoy, en tres meses o en un a\u00f1o \u2014 aqu\u00ed vamos a seguir, sin prisa.<\/p>\n    <div class=\"foot-note lock-icon\">\ud83d\udd12 Este ejercicio es privado y no fue visto por nadie m\u00e1s que t\u00fa.<\/div>\n  <\/div>\n\n  <!-- 13 Infonavit -->\n  <div class=\"screen\" data-screen=\"13\">\n    <div class=\"eyebrow\">Infonavit<\/div>\n    <h1>Tu proceso con Infonavit es diferente.<\/h1>\n    <p class=\"lede\">Infonavit eval\u00faa distinto al cr\u00e9dito bancario que revisa este diagn\u00f3stico \u2014 y s\u00ed contamos con opciones para tu caso. Cu\u00e9ntanos c\u00f3mo contactarte y te explicamos c\u00f3mo aplicar\u00eda en tu situaci\u00f3n.<\/p>\n    <button class=\"btn\" onclick=\"goToInfonavitContact()\">Quiero que me contacten<\/button>\n    <div class=\"foot-note\"><a href=\"#\" onclick=\"goTo(12); return false;\" style=\"color:inherit;\">No gracias, era solo curiosidad<\/a><\/div>\n    <div class=\"nav-row\"><button class=\"back-link\" onclick=\"goTo(2)\">\u2190 Atr\u00e1s<\/button><\/div>\n  <\/div>\n\n<\/div>\n\n<script>\n  const totalSteps = 8;\n  const answers = {};\n  let current = 0;\n  let currentBucket = 'listo';\n\n  function buildProgress(){\n    const wrap = document.getElementById('progressLine');\n    wrap.innerHTML = '';\n    for(let i=0;i<totalSteps;i++){\n      const span = document.createElement('span');\n      span.innerHTML = '<i><\/i>';\n      wrap.appendChild(span);\n    }\n  }\n  buildProgress();\n\n  function updateProgress(step){\n    const bars = document.querySelectorAll('#progressLine i');\n    bars.forEach((b,i)=>{ b.style.width = (i < step) ? '100%' : '0%'; });\n  }\n\n  function goTo(step){\n    document.querySelectorAll('.screen').forEach(s=>s.classList.remove('active'));\n    document.querySelector('.screen[data-screen=\"'+step+'\"]').classList.add('active');\n    current = step;\n    if(step === 10){ renderResult(); }\n    if(step === 11){ populateContactText(); }\n    window.scrollTo({top:0, behavior:'smooth'});\n  }\n\n  function goBackFromBuro(){\n    goTo(answers.comprobacion === 'nomina' ? 3 : 4);\n  }\n\n  function goToInfonavitContact(){\n    currentBucket = 'infonavit';\n    goTo(11);\n  }\n\n  function nextScreenFor(q, screenNum){\n    if(q === 'comprobacion'){\n      if(answers.comprobacion === 'nomina') return 3;\n      if(answers.comprobacion === 'infonavit') return 13;\n      return 4;\n    }\n    if(q === 'antiguedad'){ return 5; }\n    return screenNum + 1;\n  }\n\n  document.querySelectorAll('.options').forEach(group=>{\n    group.addEventListener('click', (e)=>{\n      const btn = e.target.closest('.opt');\n      if(!btn) return;\n      group.querySelectorAll('.opt').forEach(o=>o.classList.remove('selected'));\n      btn.classList.add('selected');\n      const q = group.getAttribute('data-q');\n      const stepIdx = parseInt(group.getAttribute('data-step'));\n      answers[q] = btn.getAttribute('data-v');\n      updateProgress(stepIdx);\n      const screenNum = current;\n      setTimeout(()=>{ goTo(nextScreenFor(q, screenNum)); }, 260);\n    });\n  });\n\n  function ingresoMidpoint(v){\n    switch(v){\n      case '1': return 12000;\n      case '2': return 22500;\n      case '3': return 40000;\n      case '4': return 65000;\n      case '5': return 100000;\n      default: return 30000;\n    }\n  }\n\n  function computeDTI(){\n    const ingresoMid = ingresoMidpoint(answers.ingreso);\n    const pago = parseFloat(answers.deudaPago || 0);\n    if(ingresoMid <= 0) return 0;\n    return (pago \/ ingresoMid) * 100;\n  }\n\n  function deudaScoreFromDTI(dti){\n    if(dti <= 0) return 3;\n    if(dti <= 15) return 3;\n    if(dti <= 25) return 2;\n    if(dti <= 35) return 1;\n    return 0;\n  }\n\n  function computeCapacidad(){\n    return (parseInt(answers.ingreso||0)\n      + parseInt(answers.buro||0)\n      + parseInt(answers.antiguedad||0)\n      + deudaScoreFromDTI(computeDTI()));\n  }\n  function computeMomento(){\n    return (parseInt(answers.ahorro||0) + parseInt(answers.momento||0));\n  }\n\n  function renderResult(){\n    const capacidad = computeCapacidad();\n    const momento = computeMomento();\n    const badgeEl = document.getElementById('resultBadge');\n    const intentEl = document.getElementById('resultIntent');\n    const headEl = document.getElementById('resultHeadline');\n    const ledeEl = document.getElementById('resultLede');\n    const tipsEl = document.getElementById('resultTips');\n    const freeNoteEl = document.getElementById('resultFreeNote');\n    const ctaEl = document.getElementById('resultCta');\n    let badgeClass, badgeText, headline, lede, tips, freeNoteHtml, ctaText;\n\n    if(capacidad >= 13){\n      currentBucket = 'listo';\n      badgeClass = 'badge-listo'; badgeText = 'PERFIL LISTO PARA AVANZAR';\n      headline = 'Hoy podr\u00edas estar en condiciones de iniciar un proceso de cr\u00e9dito bancario.';\n      lede = 'Eso no significa que ya deber\u00edas comprar \u2014 significa que vale la pena platicarlo con calma y ver qu\u00e9 opciones tiene sentido para ti.';\n      freeNoteHtml = '';\n      tips = [\n        'Con tu antig\u00fcedad y tu bur\u00f3, ya puedes iniciar el proceso formal de precalificaci\u00f3n.',\n        'Vale la pena comparar esquemas de cr\u00e9dito antes de fijarte en una propiedad en particular.',\n        'Reunir tus estados de cuenta o comprobantes (los \u00faltimos 3 a 6 meses) es un tr\u00e1mite r\u00e1pido cuando decidas avanzar.'\n      ];\n      ctaText = 'Quiero atenci\u00f3n personalizada';\n    } else if(capacidad >= 10){\n      currentBucket = 'cerca';\n      badgeClass = 'badge-cerca'; badgeText = 'MUY CERCA DE CALIFICAR';\n      headline = 'Est\u00e1s muy cerca de calificar.';\n      lede = 'Preferimos revisarlo contigo directamente antes de decirte que no \u2014 hay matices que un cuestionario de 8 preguntas no alcanza a ver del todo.';\n      freeNoteHtml = '<div class=\"free-note\">Le damos el beneficio de la duda a perfiles como el tuyo. <b>Con gusto agendamos un perfilamiento presencial<\/b> para revisar tu caso completo, sin descartarte por lo que no cabe en un formulario.<\/div>';\n      tips = [\n        'Si tus deudas est\u00e1n bien manejadas, eso suele contar m\u00e1s a tu favor de lo que este ejercicio puede reflejar.',\n        'La diferencia entre \"casi\" y \"s\u00ed\" muchas veces se resuelve mejor en una conversaci\u00f3n real que en un cuestionario.',\n        'Un perfilamiento presencial nos permite ver tu caso completo, con el detalle que t\u00fa puedas explicar.'\n      ];\n      ctaText = 'Quiero mi perfilamiento presencial';\n    } else {\n      currentBucket = 'preparando';\n      badgeClass = 'badge-prep'; badgeText = 'MOMENTO DE PREPARARTE';\n      headline = 'Hoy es un buen momento para prepararte, no necesariamente para comprar ya.';\n      lede = 'Eso tambi\u00e9n es una decisi\u00f3n inteligente \u2014 y saberlo ahora te ahorra tiempo y desgaste m\u00e1s adelante.';\n      freeNoteHtml = '<div class=\"free-note\">Esto es informaci\u00f3n que la mayor\u00eda no sabe c\u00f3mo ir armando por su cuenta \u2014 bur\u00f3, antig\u00fcedad, ahorro. <b>Si quieres, te ayudamos gratis<\/b> a ir construyendo tu perfil paso a paso, sin costo y sin compromiso de compra.<\/div>';\n      tips = [\n        'El primer paso realista es ordenar tu historial en el bur\u00f3 y tus deudas activas antes de pensar en un cr\u00e9dito nuevo.',\n        'La antig\u00fcedad laboral o de alta ante el SAT no se puede acelerar \u2014 pero saber desde hoy cu\u00e1nto falta te permite planear con calma.',\n        'No hay prisa \u2014 el momento correcto es cuando t\u00fa est\u00e9s listo, no cuando exista presi\u00f3n externa.'\n      ];\n      ctaText = 'Quiero la asesor\u00eda gratuita';\n    }\n\n    let intentText;\n    if(momento >= 6){ intentText = 'Inter\u00e9s de compra: alto \u2014 ya est\u00e1s en modo activo.'; }\n    else if(momento >= 4){ intentText = 'Inter\u00e9s de compra: medio \u2014 vas construyendo el momento.'; }\n    else { intentText = 'Inter\u00e9s de compra: apenas explorando, sin prisa.'; }\n\n    const dti = Math.round(computeDTI());\n    const dtiHtml = '\ud83d\udcca Tus deudas actuales representan aproximadamente el <b>' + dti + '%<\/b> de tu ingreso mensual estimado.';\n\n    badgeEl.innerHTML = '<span class=\"result-badge '+badgeClass+'\">'+badgeText+'<\/span>';\n    intentEl.textContent = intentText;\n    document.getElementById('resultDTI').innerHTML = dtiHtml;\n    headEl.textContent = headline;\n    ledeEl.textContent = lede;\n    freeNoteEl.innerHTML = freeNoteHtml;\n    tipsEl.innerHTML = tips.map(t=>'<li><span class=\"mark\"><\/span><span>'+t+'<\/span><\/li>').join('');\n    ctaEl.textContent = ctaText;\n  }\n\n  function populateContactText(){\n    const contactHead = document.getElementById('contactHeadline');\n    const contactLede = document.getElementById('contactLede');\n    if(currentBucket === 'infonavit'){\n      contactHead.textContent = 'Cu\u00e9ntanos y te explicamos tu proceso';\n      contactLede.textContent = 'Infonavit funciona distinto al cr\u00e9dito bancario \u2014 s\u00ed contamos con opciones para tu caso. D\u00e9janos tus datos y te contactamos para explicarte c\u00f3mo aplica en tu situaci\u00f3n.';\n    } else if(currentBucket === 'cerca'){\n      contactHead.textContent = 'Agendemos tu perfilamiento presencial';\n      contactLede.textContent = 'D\u00e9janos tus datos y te contactamos para revisar tu caso completo en persona, con calma \u2014 sin descartarte por lo que no alcanza a ver un formulario.';\n    } else if(currentBucket === 'preparando'){\n      contactHead.textContent = 'Arma tu perfil, sin costo';\n      contactLede.textContent = 'D\u00e9janos c\u00f3mo contactarte y te ayudamos a ir mejorando bur\u00f3, ahorro y antig\u00fcedad, a tu ritmo \u2014 sin ning\u00fan compromiso de compra.';\n    } else {\n      contactHead.textContent = '\u00bfA d\u00f3nde te contactamos?';\n      contactLede.textContent = 'Con tu perfil, tiene sentido que alguien te ayude a dar el siguiente paso. D\u00e9janos tus datos y te contactamos para darte atenci\u00f3n seg\u00fan tu situaci\u00f3n.';\n    }\n  }\n\n  const ASESORAS = {\n    'TIB-MIRIAM': 'Miriam',\n    'TIB-ERIKA': 'Erika',\n    'TIB-COCO': 'Coco',\n    'TIB-KARLA': 'Karla'\n  };\n\n  \/\/ Para uso temporal fuera de Claude (ej. Netlify): pega aqu\u00ed tu endpoint real de Formspree.\n  \/\/ Mientras diga 'mppzokbp', el formulario no intenta enviar nada (evita errores).\n  const FORMSPREE_ENDPOINT = 'https:\/\/formspree.io\/f\/mppzokbp';\n\n  async function sendToFormspree(payload){\n    if(FORMSPREE_ENDPOINT.includes('TU_ENDPOINT_AQUI')) return;\n    try{\n      await fetch(FORMSPREE_ENDPOINT, {\n        method: 'POST',\n        headers: {'Content-Type':'application\/json', 'Accept':'application\/json'},\n        body: JSON.stringify(payload)\n      });\n    }catch(err){ console.error('No se pudo enviar a Formspree:', err); }\n  }\n\n  async function submitContact(){\n    const email = document.getElementById('emailInput').value.trim();\n    const phone = document.getElementById('phoneInput').value.trim();\n    const codeRaw = document.getElementById('codeInput').value.trim().toUpperCase();\n    const emailErr = document.getElementById('emailError');\n    const phoneErr = document.getElementById('phoneError');\n    let ok = true;\n\n    if(email && !email.includes('@')){ emailErr.style.display = 'block'; ok = false; }\n    else { emailErr.style.display = 'none'; }\n\n    const digits = phone.replace(\/\\D\/g,'');\n    if(phone && digits.length < 10){ phoneErr.style.display = 'block'; ok = false; }\n    else { phoneErr.style.display = 'none'; }\n\n    if(!ok) return;\n\n    const asesoraAsignada = ASESORAS[codeRaw] || null;\n\n    if(email || phone){\n      const payload = {\n        email, phone,\n        codigo: codeRaw || null,\n        asesora: asesoraAsignada || 'Sin asignar \u2014 repartir',\n        bucket: currentBucket,\n        answers,\n        ts: new Date().toISOString()\n      };\n      try{\n        await window.storage.set('lead:'+Date.now(), JSON.stringify(payload), true);\n      }catch(err){ console.error('No se pudo guardar en Claude (normal fuera de Claude):', err); }\n      await sendToFormspree(payload);\n    }\n    goTo(12);\n  }\n<\/script>\n\n<\/body>\n<\/html>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>T\u00edber \u2014 Diagn\u00f3stico privado T\u00edber Diagn\u00f3stico privado \u00b7 3 minutos \u00bfTu perfil est\u00e1 listo para un cr\u00e9dito hipotecario? Este ejercicio no calcula un monto \u2014 te dice qu\u00e9 tan preparado est\u00e1 tu perfil hoy y qu\u00e9 te conviene hacer, seg\u00fan tu propia situaci\u00f3n. Tus respuestas no se comparten con nadie mientras las contestas: el resultado aparece aqu\u00ed, solo para ti, antes de pedirte cualquier &#8230;<\/p>\n","protected":false},"author":3,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_canvas","meta":{"inline_featured_image":false,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"class_list":["post-21313","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/tibermx.com\/index.php\/wp-json\/wp\/v2\/pages\/21313","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tibermx.com\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/tibermx.com\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/tibermx.com\/index.php\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/tibermx.com\/index.php\/wp-json\/wp\/v2\/comments?post=21313"}],"version-history":[{"count":13,"href":"https:\/\/tibermx.com\/index.php\/wp-json\/wp\/v2\/pages\/21313\/revisions"}],"predecessor-version":[{"id":21329,"href":"https:\/\/tibermx.com\/index.php\/wp-json\/wp\/v2\/pages\/21313\/revisions\/21329"}],"wp:attachment":[{"href":"https:\/\/tibermx.com\/index.php\/wp-json\/wp\/v2\/media?parent=21313"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}