{"id":6282,"date":"2026-05-27T20:03:57","date_gmt":"2026-05-28T02:03:57","guid":{"rendered":"https:\/\/proyectum.com\/mx\/?page_id=6282"},"modified":"2026-07-29T10:14:50","modified_gmt":"2026-07-29T16:14:50","slug":"cep_proyectum","status":"publish","type":"page","link":"https:\/\/proyectum.com\/mx\/cep_proyectum\/","title":{"rendered":"CEP_Proyectum"},"content":{"rendered":"\n<!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>CEP \u2014 Calibrador de \u00c9xito en Proyectos | Proyectum<\/title>\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Montserrat:wght@300;400;500;600&#038;display=swap\" rel=\"stylesheet\"\/>\n<style>\n:root{\n  --navy:#03294C;--navy-dark:#021d38;--navy-mid:#1a4a72;--navy-light:#eef4f9;--navy-tint:#d0e3f0;\n  --gold:#E2A235;--gold-dark:#c4861d;--gold-light:#fdf6e8;--gold-tint:#f5daa0;\n  --gray-900:#1a1a1a;--gray-700:#444;--gray-500:#777;--gray-300:#ccc;--gray-100:#f5f5f5;\n  --success:#1b7f4e;--success-bg:#e8f5ee;--success-bd:#a8d5bc;\n  --danger:#9e0c23;--danger-bg:#fdf0f2;--danger-bd:#f5c6ce;\n  --font:'Montserrat',sans-serif;--radius:10px;--shadow:0 2px 14px rgba(3,41,76,.09);\n}\n*{box-sizing:border-box;margin:0;padding:0}\nhtml{scroll-behavior:smooth}\nbody{font-family:var(--font);font-weight:400;color:var(--gray-900);background:#fff;font-size:19px;line-height:1.75}\nstrong{font-weight:500}\n\n\/* NAV *\/\nnav{background:#fff;border-bottom:2px solid var(--navy-light);padding:0 1.5rem;display:flex;align-items:center;justify-content:space-between;height:56px;position:sticky;top:0;z-index:100;gap:12px}\n.nav-brand{display:flex;align-items:center;gap:12px}\n.nav-logo{width:36px;height:36px;background:var(--navy);border-radius:8px;display:flex;align-items:center;justify-content:center}\n.nav-logo span{color:#fff;font-size:15px;font-weight:600;letter-spacing:-.5px}\n.nav-title{font-size:14px;font-weight:500;color:var(--navy)}\n.nav-sub{font-size:10px;color:var(--gray-500);font-weight:300}\n.nav-steps{display:flex;gap:3px;flex-shrink:0}\n.step-pill{padding:4px 11px;border-radius:20px;font-size:11px;font-weight:400;cursor:pointer;border:1px solid var(--gray-300);background:#fff;color:var(--gray-500);transition:.2s;font-family:var(--font);white-space:nowrap}\n.step-pill.active{background:var(--navy);border-color:var(--navy);color:#fff;font-weight:500}\n.step-pill:hover:not(.active){border-color:var(--navy);color:var(--navy)}\n.step-pill.locked{opacity:.4;cursor:default;pointer-events:none}\n\n\/* HERO *\/\n.hero{background:var(--navy);color:#fff;padding:3rem 2rem 2.5rem;text-align:center;position:relative;overflow:hidden}\n.hero::before{content:'';position:absolute;right:-60px;top:-60px;width:260px;height:260px;border-radius:50%;background:rgba(226,162,53,.07);pointer-events:none}\n.hero::after{content:'';position:absolute;left:-50px;bottom:-80px;width:200px;height:200px;border-radius:50%;background:rgba(226,162,53,.05);pointer-events:none}\n.hero-eyebrow{display:inline-block;background:rgba(226,162,53,.15);color:var(--gold);border:1px solid rgba(226,162,53,.3);border-radius:20px;font-size:11px;font-weight:500;padding:4px 14px;margin-bottom:1rem;letter-spacing:.07em;text-transform:uppercase}\n.hero h1{font-size:clamp(20px,4vw,30px);font-weight:300;letter-spacing:-.3px;margin-bottom:.6rem}\n.hero h1 strong{font-weight:600;color:var(--gold)}\n.hero p{font-size:16px;font-weight:300;opacity:.8;max-width:700px;margin:0 auto}\n\n\/* MAIN *\/\nmain{width:100%;padding:2rem 3rem 5rem}\n.section{display:none}\n.section.active{display:block;animation:fi .25s ease}\n@keyframes fi{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}\n\n\/* STEP HEADER *\/\n.step-header{display:flex;align-items:center;gap:12px;margin-bottom:1.25rem;padding-bottom:.75rem;border-bottom:1px solid var(--navy-light)}\n.step-num{width:36px;height:36px;border-radius:50%;background:var(--navy);color:#fff;display:flex;align-items:center;justify-content:center;font-size:14px;font-weight:500;flex-shrink:0}\n.step-header h2{font-size:20px;font-weight:500;color:var(--navy)}\n.step-header p{font-size:16px;color:var(--gray-500);font-weight:300;margin-top:2px;display:none}\n\n\/* FIELDS *\/\n.field-group{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-bottom:1.25rem}\n@media(max-width:520px){.field-group{grid-template-columns:1fr}}\n.field{display:flex;flex-direction:column;gap:5px}\n.field.full{grid-column:1\/-1}\nlabel{font-size:11px;font-weight:500;color:var(--navy-mid);text-transform:uppercase;letter-spacing:.07em}\ninput[type=text],textarea{border:1px solid var(--gray-300);border-radius:var(--radius);padding:.55rem .85rem;font-family:var(--font);font-weight:300;font-size:14px;color:var(--gray-900);background:#fff;transition:.2s;outline:none;width:100%}\ninput[type=text]:focus,textarea:focus{border-color:var(--navy);box-shadow:0 0 0 3px rgba(3,41,76,.08)}\ntextarea{resize:vertical;min-height:72px}\n\n\/* INFO BOX *\/\n.info-box{background:var(--navy-light);border-radius:var(--radius);padding:.9rem 1.1rem;font-size:19px;color:var(--gray-700);font-weight:300;margin-bottom:1.5rem;line-height:1.6;border:1px solid var(--navy-tint)}\n.info-box strong{color:var(--navy);font-weight:500}\n\n\/* SECTION DIVIDER *\/\n.section-divider{font-size:12px;font-weight:500;color:var(--navy-mid);text-transform:uppercase;letter-spacing:.08em;margin:2rem 0 1.25rem;padding-bottom:.6rem;border-bottom:2px solid var(--navy-light)}\n\n\/* PURPOSE CARD *\/\n.purpose-lead{font-size:20px;font-weight:300;color:var(--navy);line-height:1.75;margin-bottom:1.5rem}\n.feature-grid{display:grid;grid-template-columns:1fr 1fr;gap:.85rem;margin-bottom:1.5rem}\n@media(max-width:500px){.feature-grid{grid-template-columns:1fr}}\n.feature-card{background:var(--navy-light);border-radius:var(--radius);padding:1rem 1.1rem;border:1px solid var(--navy-tint)}\n.feature-card-num{font-size:22px;font-weight:600;color:var(--gold);margin-bottom:.25rem}\n.feature-card-title{font-size:19px;font-weight:500;color:var(--navy);margin-bottom:.3rem}\n.feature-card-desc{font-size:17px;color:var(--gray-500);font-weight:300;line-height:1.5}\n\n\/* GUIDE STEPS *\/\n.guide-step{display:flex;gap:14px;align-items:flex-start;margin-bottom:1.1rem}\n.guide-dot{width:28px;height:28px;border-radius:50%;background:var(--navy);color:#fff;font-size:12px;font-weight:500;display:flex;align-items:center;justify-content:center;flex-shrink:0;margin-top:2px}\n.guide-body h4{font-size:20px;font-weight:500;color:var(--navy);margin-bottom:.2rem}\n.guide-body p{font-size:19px;color:var(--gray-500);font-weight:300;line-height:1.55}\n.guide-connector{width:1px;height:16px;background:var(--navy-tint);margin-left:13px}\n\n\/* FAQ *\/\n.faq-item{border:1px solid var(--navy-tint);border-radius:var(--radius);margin-bottom:.6rem;overflow:hidden}\n.faq-q{display:flex;align-items:center;justify-content:space-between;padding:.9rem 1.1rem;cursor:pointer;font-size:19px;font-weight:500;color:var(--navy);background:#fff;border:none;width:100%;text-align:left;font-family:var(--font)}\n.faq-q:hover{background:var(--navy-light)}\n.faq-icon{font-size:18px;color:var(--gold);flex-shrink:0;transition:transform .2s;font-weight:300}\n.faq-a{display:none;padding:.1rem 1.1rem 1rem;font-size:19px;color:var(--gray-700);font-weight:300;line-height:1.6;background:var(--navy-light)}\n.faq-item.open .faq-icon{transform:rotate(45deg)}\n.faq-item.open .faq-a{display:block}\n\n\/* PRIVACY *\/\n.privacy-box{background:var(--navy-light);border:1px solid var(--navy-tint);border-radius:var(--radius);padding:1.25rem;margin-bottom:1.25rem}\n.privacy-box h3{font-size:20px;font-weight:500;color:var(--navy);margin-bottom:.75rem;padding-bottom:.5rem;border-bottom:1px solid var(--navy-tint)}\n.privacy-box p{font-size:19px;color:var(--gray-700);font-weight:300;line-height:1.65;margin-bottom:.6rem}\n.privacy-box p:last-child{margin-bottom:0}\n.privacy-box a{color:var(--navy);text-decoration:underline;font-size:16px}\n\n.check-row{display:flex;align-items:flex-start;gap:12px;padding:1rem 1.1rem;border:1px solid var(--navy-tint);border-radius:var(--radius);margin-bottom:.6rem;background:#fff;cursor:pointer;transition:.2s}\n.check-row:hover{background:var(--navy-light)}\n.check-row input[type=checkbox]{width:18px;height:18px;accent-color:var(--navy);cursor:pointer;flex-shrink:0;margin-top:2px}\n.check-row-text{font-size:19px;color:var(--gray-700);font-weight:300;line-height:1.5}\n.check-row-text strong{color:var(--navy);font-weight:500}\n\n.consent-error{display:none;font-size:17px;color:var(--danger);font-weight:300;padding:.4rem .6rem;background:var(--danger-bg);border-radius:6px;margin-top:.5rem}\n.mode-toggle-row{display:flex;align-items:center;justify-content:space-between;padding:1rem 1.1rem;border-radius:var(--radius);background:var(--navy-light);border:1px solid var(--navy-tint);margin-bottom:1.25rem}\n.mode-toggle-info strong{font-size:19px;font-weight:500;color:var(--navy);display:block;margin-bottom:.2rem}\n.mode-toggle-info p{font-size:17px;font-weight:300;color:var(--gray-500);line-height:1.5}\n.toggle-switch{position:relative;width:44px;height:24px;flex-shrink:0}\n.toggle-switch input{opacity:0;width:0;height:0}\n.toggle-slider{position:absolute;inset:0;background:var(--gray-300);border-radius:12px;cursor:pointer;transition:.3s}\n.toggle-slider:before{content:'';position:absolute;width:18px;height:18px;left:3px;bottom:3px;background:#fff;border-radius:50%;transition:.3s}\n.toggle-switch input:checked + .toggle-slider{background:var(--navy)}\n.toggle-switch input:checked + .toggle-slider:before{transform:translateX(20px)}\n.confidential-badge{display:none;align-items:center;gap:6px;background:var(--navy);color:var(--gold);font-size:12px;font-weight:500;padding:4px 12px;border-radius:20px;margin-left:10px}\n.confidential-badge.active{display:inline-flex}\n\n\/* WEIGHT BAR *\/\n.weight-bar-wrap{background:var(--gray-100);border-radius:var(--radius);padding:.9rem 1.25rem;margin-bottom:1.5rem;display:flex;align-items:center;gap:16px}\n.weight-bar-track{flex:1;height:8px;background:#ddd;border-radius:4px;overflow:hidden}\n.weight-bar-fill{height:100%;border-radius:4px;transition:width .3s,background .3s}\n.weight-bar-label{font-size:19px;font-weight:500;min-width:48px;text-align:right}\n\n\/* DIM CARD *\/\n.dim-card{background:#fff;border:1px solid #e4edf4;border-radius:var(--radius);padding:1rem 1.1rem;margin-bottom:.6rem;box-shadow:none;border-bottom:1px solid #e4edf4}\n.dim-card-header{display:flex;align-items:center;gap:10px;margin-bottom:.7rem}\n.dim-badge{background:var(--navy-light);color:var(--navy);border-radius:20px;font-size:11px;font-weight:500;padding:3px 10px;flex-shrink:0;border:1px solid var(--navy-tint)}\n.dim-name{font-size:19px;font-weight:500;color:var(--navy)}\n.dim-desc{display:none}\n.slider-row{display:flex;align-items:center;gap:10px;margin-bottom:.5rem}\n.slider-label{font-size:17px;color:var(--gray-500);width:115px;flex-shrink:0;font-weight:300}\ninput[type=range]{flex:1;min-width:0;accent-color:var(--navy);cursor:pointer}\n.slider-val{font-size:19px;font-weight:500;color:var(--navy);width:40px;text-align:right;flex-shrink:0}\n.threshold-note{font-size:17px;margin-top:.3rem;font-weight:300}\n.ai-spinner{width:18px;height:18px;border:2px solid var(--navy-tint);border-top-color:var(--navy);border-radius:50%;animation:spin .7s linear infinite;flex-shrink:0}\n@keyframes spin{to{transform:rotate(360deg)}}\n.rec-card{background:#fff;border:1px solid #e4edf4;border-radius:var(--radius);padding:1.1rem 1.25rem;margin-bottom:.75rem;box-shadow:var(--shadow)}\n.rec-card-header{display:flex;align-items:center;gap:10px;margin-bottom:.6rem}\n.rec-dim-tag{background:var(--navy-light);color:var(--navy);border-radius:20px;font-size:11px;font-weight:500;padding:3px 10px;border:1px solid var(--navy-tint);flex-shrink:0}\n.rec-risk-tag{border-radius:20px;font-size:11px;font-weight:600;padding:3px 10px;flex-shrink:0}\n.rec-risk-high{background:#fdf0f2;color:#9e0c23;border:1px solid #f5c6ce}\n.rec-risk-mid{background:#fdf6e8;color:#854f0b;border:1px solid #f5daa0}\n.rec-risk-ok{background:#e8f5ee;color:#1b7f4e;border:1px solid #a8d5bc}\n.rec-text{font-size:19px;color:var(--gray-700);font-weight:300;line-height:1.65;margin-bottom:.5rem}\n.rec-refs{display:flex;flex-wrap:wrap;gap:.4rem;margin-top:.5rem}\n.rec-ref{background:var(--navy-light);color:var(--navy-mid);font-size:11px;font-weight:400;padding:2px 9px;border-radius:10px;border:1px solid var(--navy-tint)}\n.risk-alert{display:flex;gap:10px;align-items:flex-start;padding:.9rem 1.1rem;border-radius:var(--radius);margin-bottom:.75rem;font-size:19px;font-weight:300}\n.risk-alert.high{background:#fdf0f2;color:#9e0c23;border:1px solid #f5c6ce}\n.risk-alert.mid{background:#fdf6e8;color:#854f0b;border:1px solid #f5daa0}\n\n\/* SCORE *\/\n.score-hero{background:var(--navy);color:#fff;border-radius:var(--radius);padding:1.25rem 1.5rem;margin-bottom:1rem;display:flex;align-items:center;gap:1.25rem}\n.score-big{font-size:52px;font-weight:300;line-height:1;flex-shrink:0;color:var(--gold)}\n.score-big span{font-size:22px;opacity:.45;color:#fff}\n.score-info h3{font-size:22px;font-weight:500;margin-bottom:.3rem}\n.score-info p{font-size:19px;opacity:.72;font-weight:300}\n.verdict-badge{display:inline-block;padding:.3rem 1rem;border-radius:20px;font-size:15px;font-weight:600;margin-top:.6rem;background:var(--gold);color:var(--navy)}\n.score-grid{display:grid;grid-template-columns:1fr 1fr;gap:.75rem;margin-bottom:1.25rem}\n@media(max-width:500px){.score-grid{grid-template-columns:1fr}}\n.score-dim{background:#fff;border:1px solid #e4edf4;border-radius:var(--radius);padding:1rem;box-shadow:var(--shadow)}\n.score-dim-name{font-size:13px;font-weight:500;color:var(--navy-mid);margin-bottom:.5rem;text-transform:uppercase;letter-spacing:.05em}\n.score-dim-bar{height:6px;background:var(--gray-100);border-radius:3px;overflow:hidden;margin-bottom:.4rem}\n.score-dim-fill{height:100%;border-radius:3px;transition:width .4s}\n.score-dim-nums{display:flex;justify-content:space-between;font-size:14px;color:var(--gray-500);font-weight:300}\n\n\/* ALERTS *\/\n.alerts-section{margin-bottom:1.25rem}\n.alert{display:flex;gap:8px;align-items:flex-start;padding:.7rem 1rem;border-radius:var(--radius);margin-bottom:.5rem;font-size:19px;font-weight:300}\n.alert.danger{background:var(--danger-bg);color:var(--danger);border:1px solid var(--danger-bd)}\n.alert.success{background:var(--success-bg);color:var(--success);border:1px solid var(--success-bd)}\n.alert-icon{width:16px;height:16px;flex-shrink:0;margin-top:2px}\n\n\/* TABLE *\/\n.compare-table{width:100%;border-collapse:collapse;font-size:16px;margin-bottom:1.5rem}\n.compare-table th{font-weight:500;font-size:12px;text-transform:uppercase;letter-spacing:.05em;color:var(--navy-mid);padding:.65rem 1rem;text-align:left;border-bottom:2px solid var(--navy-tint);background:var(--navy-light)}\n.compare-table td{padding:.7rem 1rem;border-bottom:1px solid #eef3f8;font-weight:300;color:var(--gray-700);font-size:14px}\n.compare-table tr:last-child td{border-bottom:none;background:var(--navy-light)}\n.compare-table .dim-col{font-weight:500;color:var(--navy)}\n.tag-ok{background:var(--success-bg);color:var(--success);padding:2px 8px;border-radius:10px;font-size:11px;font-weight:500}\n.tag-bad{background:var(--danger-bg);color:var(--danger);padding:2px 8px;border-radius:10px;font-size:11px;font-weight:500}\n\n\/* BUTTONS *\/\n.btn-row{display:flex;gap:.75rem;flex-wrap:wrap;margin-top:1.5rem}\n.btn{display:inline-flex;align-items:center;gap:6px;padding:.65rem 1.5rem;border-radius:var(--radius);font-family:var(--font);font-size:17px;font-weight:500;cursor:pointer;border:none;transition:.2s;text-decoration:none}\n.btn-primary{background:var(--navy);color:#fff}\n.btn-primary:hover{background:var(--navy-mid)}\n.btn-ghost{background:transparent;color:var(--navy);border:1.5px solid var(--navy-tint)}\n.btn-ghost:hover{background:var(--navy-light);border-color:var(--navy)}\n\n\/* FOOTER *\/\nfooter{background:var(--navy);padding:1.5rem 2rem;text-align:center;font-size:14px;color:rgba(255,255,255,.45);font-weight:300}\nfooter strong{color:var(--gold);font-weight:500}\n@media print{.no-print{display:none!important}}\n<\/style>\n<\/head>\n<body>\n\n<nav class=\"no-print\">\n  <div class=\"nav-brand\">\n    <div class=\"nav-logo\"><span>P<\/span><\/div>\n    <div>\n      <div class=\"nav-title\">Calibrador de \u00c9xito en Proyectos<\/div>\n      <div class=\"nav-sub\">Proyectum \u00b7 CEP v1.0<\/div>\n    <\/div>\n  <\/div>\n  <div class=\"nav-steps\">\n    <button class=\"step-pill active\"  id=\"pill-0\" onclick=\"goTo(0)\">Inicio<\/button>\n    <button class=\"step-pill locked\"  id=\"pill-1\" onclick=\"goTo(1)\">1 \u00b7 Proyecto<\/button>\n    <button class=\"step-pill locked\"  id=\"pill-2\" onclick=\"goTo(2)\">2 \u00b7 Calibrar<\/button>\n    <button class=\"step-pill locked\"  id=\"pill-3\" onclick=\"goTo(3)\">3 \u00b7 Medir<\/button>\n    <button class=\"step-pill locked\"  id=\"pill-4\" onclick=\"goTo(4)\">4 \u00b7 Resultado<\/button>\n  <\/div>\n<\/nav>\n\n  <h1>Calibrador de \u00c9xito en Proyectos <strong>(CEP)<\/strong><\/h1>\n  <p>Define qu\u00e9 significa el \u00e9xito antes de empezar. Mide con los mismos criterios al cierre. Elimina el debate retrospectivo.<\/p>\n<\/div>\n\n<main>\n\n<!-- \u2550\u2550 PASO 0: BIENVENIDA \u2550\u2550 -->\n<section class=\"section active\" id=\"s0\">\n  <div class=\"step-header\">\n    <div class=\"step-num\" style=\"background:var(--gold);color:var(--navy)\">\u25cf<\/div>\n    <div><h2>Bienvenida al CEP<\/h2><p>Lee las instrucciones y acepta los t\u00e9rminos antes de continuar.<\/p><\/div>\n  <\/div>\n\n  <!-- QU\u00c9 ES EL CEP -->\n  <p class=\"purpose-lead\">El CEP es un instrumento de calibraci\u00f3n que permite acordar, antes de iniciar un proyecto, qu\u00e9 significa el \u00e9xito \u2014 y medirlo con los mismos criterios al cierre. Elimina el debate retrospectivo sobre si el proyecto fue exitoso o no.<\/p>\n  <div class=\"feature-grid\">\n    <div class=\"feature-card\">\n      <div class=\"feature-card-num\">01<\/div>\n      <div class=\"feature-card-title\">Definici\u00f3n anticipada<\/div>\n      <div class=\"feature-card-desc\">El \u00e9xito se acuerda antes de empezar, no se interpreta al final. Eso cambia radicalmente la conversaci\u00f3n durante la ejecuci\u00f3n.<\/div>\n    <\/div>\n    <div class=\"feature-card\">\n      <div class=\"feature-card-num\">02<\/div>\n      <div class=\"feature-card-title\">Cinco dimensiones calibrables<\/div>\n      <div class=\"feature-card-desc\">Par\u00e1metros de entrega, realizaci\u00f3n de beneficios, satisfacci\u00f3n de stakeholders, calidad del entregable y aprendizaje organizacional.<\/div>\n    <\/div>\n    <div class=\"feature-card\">\n      <div class=\"feature-card-num\">03<\/div>\n      <div class=\"feature-card-title\">Pesos y umbrales por proyecto<\/div>\n      <div class=\"feature-card-desc\">No todos los proyectos tienen el mismo perfil de \u00e9xito. Cada equipo asigna pesos seg\u00fan la prioridad estrat\u00e9gica de cada dimensi\u00f3n.<\/div>\n    <\/div>\n    <div class=\"feature-card\">\n      <div class=\"feature-card-num\">04<\/div>\n      <div class=\"feature-card-title\">Veto por umbral m\u00ednimo<\/div>\n      <div class=\"feature-card-desc\">Una dimensi\u00f3n cr\u00edtica por debajo de su umbral genera veto, aunque el score global sea alto. Protege contra el promedio enga\u00f1oso.<\/div>\n    <\/div>\n  <\/div>\n  <div class=\"info-box\">\n    <strong>Base acad\u00e9mica:<\/strong> El CEP integra los marcos de Cooke-Davies (2002), la gesti\u00f3n de realizaci\u00f3n de beneficios del PMI, la evidencia emp\u00edrica de Flyvbjerg (Oxford, 2023) y los hallazgos del KPMG-IPMA Global Outlook 2019 sobre factores de \u00e9xito en proyectos.\n  <\/div>\n\n  <!-- SEPARADOR -->\n  <div class=\"section-divider\">C\u00f3mo usarlo<\/div>\n\n  <!-- GU\u00cdA PASO A PASO -->\n  <div class=\"guide-step\">\n    <div class=\"guide-dot\">1<\/div>\n    <div class=\"guide-body\">\n      <h4>Captura los datos del proyecto<\/h4>\n      <p>Nombre, organizaci\u00f3n, patrocinador ejecutivo, director de proyecto, fechas y objetivo estrat\u00e9gico. Esta informaci\u00f3n forma parte del acta de constituci\u00f3n.<\/p>\n    <\/div>\n  <\/div>\n  <div class=\"guide-connector\"><\/div>\n  <div class=\"guide-step\">\n    <div class=\"guide-dot\">2<\/div>\n    <div class=\"guide-body\">\n      <h4>Calibra las cinco dimensiones<\/h4>\n      <p>Asigna un <strong>peso relativo<\/strong> a cada dimensi\u00f3n (los pesos deben sumar 100%) y define el <strong>umbral m\u00ednimo aceptable<\/strong> para cada una. Este acuerdo debe documentarse y firmarse junto con el acta de constituci\u00f3n.<\/p>\n    <\/div>\n  <\/div>\n  <div class=\"guide-connector\"><\/div>\n  <div class=\"guide-step\">\n    <div class=\"guide-dot\">3<\/div>\n    <div class=\"guide-body\">\n      <h4>Ejecuta el proyecto<\/h4>\n      <p>Durante la ejecuci\u00f3n, el calibrador puede renegociarse formalmente si las condiciones estrat\u00e9gicas cambian. Cualquier ajuste debe registrarse con fecha y firma del patrocinador.<\/p>\n    <\/div>\n  <\/div>\n  <div class=\"guide-connector\"><\/div>\n  <div class=\"guide-step\">\n    <div class=\"guide-dot\">4<\/div>\n    <div class=\"guide-body\">\n      <h4>Mide al cierre<\/h4>\n      <p>Captura el score real de cada dimensi\u00f3n con base en evidencia documentada \u2014 no en percepci\u00f3n subjetiva. El sistema calcula el score ponderado y detecta vetos autom\u00e1ticamente.<\/p>\n    <\/div>\n  <\/div>\n  <div class=\"guide-connector\"><\/div>\n  <div class=\"guide-step\">\n    <div class=\"guide-dot\">5<\/div>\n    <div class=\"guide-body\">\n      <h4>Exporta el reporte<\/h4>\n      <p>Genera un PDF del acuerdo inicial (para firmar al arranque) y un PDF del reporte de cierre (con el comparativo, el veredicto y las alertas de veto).<\/p>\n    <\/div>\n  <\/div>\n  <div class=\"info-box\" style=\"margin-top:1.25rem\">\n    <strong>Escala de referencia para el score:<\/strong> 0\u201349 = no alcanzado \u00b7 50\u201364 = parcialmente alcanzado \u00b7 65\u201379 = alcanzado \u00b7 80\u2013100 = superado. El veredicto final es: Exitoso (\u226580, sin vetos) \u00b7 Aceptable (65\u201379) \u00b7 Desafiado (50\u201364) \u00b7 Fallido (&lt;50) \u00b7 Veto por umbral (cualquier dimensi\u00f3n bajo su m\u00ednimo).\n  <\/div>\n\n  <!-- SEPARADOR -->\n  <div class=\"section-divider\">Preguntas frecuentes<\/div>\n\n  <!-- FAQ -->\n  <div class=\"faq-item\">\n    <button class=\"faq-q\" onclick=\"toggleFaq(this)\">\u00bfPuedo modificar las dimensiones del CEP? <span class=\"faq-icon\">+<\/span><\/button>\n    <div class=\"faq-a\">La versi\u00f3n actual utiliza las cinco dimensiones validadas por la literatura. Los pesos y umbrales son completamente personalizables por proyecto. Si necesitas dimensiones adicionales o ajustadas a tu sector, contacta a Proyectum para una versi\u00f3n personalizada del instrumento.<\/div>\n  <\/div>\n  <div class=\"faq-item\">\n    <button class=\"faq-q\" onclick=\"toggleFaq(this)\">\u00bfMis datos se almacenan en alg\u00fan servidor? <span class=\"faq-icon\">+<\/span><\/button>\n    <div class=\"faq-a\">No. Todo el instrumento corre directamente en tu navegador. Ning\u00fan dato capturado en el CEP se env\u00eda a servidores externos ni a Proyectum. La \u00fanica forma de conservar tu trabajo es exportando el PDF o guardando una copia del archivo.<\/div>\n  <\/div>\n  <div class=\"faq-item\">\n    <button class=\"faq-q\" onclick=\"toggleFaq(this)\">\u00bfQu\u00e9 pasa si los pesos no suman 100%? <span class=\"faq-icon\">+<\/span><\/button>\n    <div class=\"faq-a\">El sistema lo indica con un indicador visual en rojo. Mientras los pesos no sumen exactamente 100%, el score ponderado al cierre no ser\u00e1 matem\u00e1ticamente correcto. Es un requisito obligatorio para cerrar el acuerdo.<\/div>\n  <\/div>\n  <div class=\"faq-item\">\n    <button class=\"faq-q\" onclick=\"toggleFaq(this)\">\u00bfQu\u00e9 significa el \u00abveto por umbral\u00bb? <span class=\"faq-icon\">+<\/span><\/button>\n    <div class=\"faq-a\">Si al cierre una dimensi\u00f3n obtiene un score real por debajo del umbral m\u00ednimo acordado al inicio, el proyecto no puede declararse exitoso \u2014 independientemente de cu\u00e1ntos puntos obtenga en el resto de las dimensiones. Es un mecanismo que protege contra el efecto de promediar y ocultar dimensiones cr\u00edticas fallidas.<\/div>\n  <\/div>\n  <div class=\"faq-item\">\n    <button class=\"faq-q\" onclick=\"toggleFaq(this)\">\u00bfCu\u00e1ndo se debe usar el CEP en el ciclo de vida del proyecto? <span class=\"faq-icon\">+<\/span><\/button>\n    <div class=\"faq-a\">La calibraci\u00f3n (paso 2) debe completarse antes de la aprobaci\u00f3n formal del proyecto y firmarse junto con el acta de constituci\u00f3n. La medici\u00f3n (paso 3) se realiza al cierre del proyecto, una vez que los entregables han sido aceptados y los beneficios son verificables. El instrumento tambi\u00e9n puede usarse a mitad del proyecto como revisi\u00f3n de estado.<\/div>\n  <\/div>\n  <div class=\"faq-item\">\n    <button class=\"faq-q\" onclick=\"toggleFaq(this)\">\u00bfPuedo usar el CEP para un portafolio de proyectos? <span class=\"faq-icon\">+<\/span><\/button>\n    <div class=\"faq-a\">El CEP en su versi\u00f3n actual est\u00e1 dise\u00f1ado para un proyecto a la vez. Para an\u00e1lisis de portafolio \u2014 comparar m\u00faltiples proyectos o agregar resultados \u2014 Proyectum ofrece una versi\u00f3n en Excel con dashboard de portafolio. Solic\u00edtala en proyectum.com\/mx.<\/div>\n  <\/div>\n\n  <!-- PRIVACIDAD Y CONSENTIMIENTO -->\n  <div style=\"margin-top:2rem\">\n    <div class=\"step-header\" style=\"margin-bottom:1rem\">\n      <div class=\"step-num\" style=\"background:var(--gold);color:var(--navy);font-size:12px\">\u2713<\/div>\n      <div><h2>T\u00e9rminos y privacidad<\/h2><p>Debes aceptar ambos puntos para acceder al calibrador.<\/p><\/div>\n    <\/div>\n\n    <div class=\"privacy-box\">\n      <h3>Aviso de privacidad y t\u00e9rminos de uso<\/h3>\n      <p><strong>Tu informaci\u00f3n no sale de tu navegador.<\/strong> Todo lo que capturas en el CEP se procesa localmente en tu dispositivo. Proyectum no tiene acceso, no almacena y no puede ver ning\u00fan dato que ingreses. Cuando cierras la pesta\u00f1a, la informaci\u00f3n desaparece por completo.<\/p>\n      <p><strong>Compromiso de Proyectum:<\/strong> este instrumento no transmite datos a ning\u00fan servidor externo, excepto cuando t\u00fa eliges enviar el reporte por correo \u2014 acci\u00f3n que realizas expl\u00edcitamente y en la que t\u00fa controlas a qui\u00e9n se env\u00eda. Proyectum se compromete a no usar esa informaci\u00f3n para ning\u00fan prop\u00f3sito distinto al env\u00edo que solicitas.<\/p>\n      <p><strong>Para proyectos confidenciales:<\/strong> activa el <strong>Modo Confidencial<\/strong> en el paso 1. Podr\u00e1s trabajar con c\u00f3digos en lugar de nombres reales. El instrumento funciona igual y la informaci\u00f3n sensible nunca aparece en ning\u00fan documento exportado.<\/p>\n      <p><strong>Propiedad intelectual:<\/strong> el CEP, su metodolog\u00eda y materiales son propiedad de Proyectum. Uso interno en organizaciones: permitido. Reproducci\u00f3n comercial: requiere autorizaci\u00f3n expresa. <a href=\"https:\/\/proyectum.com\/mx\" target=\"_blank\">proyectum.com\/mx<\/a><\/p>\n    <\/div>\n\n    <label class=\"check-row\" for=\"ck1\">\n      <input type=\"checkbox\" id=\"ck1\" onchange=\"checkConsent()\"\/>\n      <div class=\"check-row-text\"><strong>Acepto los t\u00e9rminos de uso del instrumento CEP.<\/strong> He le\u00eddo y entendido las condiciones de uso, alcance y limitaciones del Calibrador de \u00c9xito en Proyectos de Proyectum.<\/div>\n    <\/label>\n\n    <label class=\"check-row\" for=\"ck2\">\n      <input type=\"checkbox\" id=\"ck2\" onchange=\"checkConsent()\"\/>\n      <div class=\"check-row-text\"><strong>Acepto el compromiso bilateral de privacidad.<\/strong> Entiendo que Proyectum no accede ni almacena mis datos, que todo corre en mi navegador, y que para proyectos confidenciales puedo activar el Modo Confidencial para trabajar con informaci\u00f3n anonimizada.<\/div>\n    <\/label>\n\n    <div class=\"consent-error\" id=\"consent-error\">Debes aceptar ambos puntos para continuar.<\/div>\n\n    <div class=\"btn-row\">\n      <button class=\"btn btn-primary\" onclick=\"tryEnter()\">Acceder al calibrador \u2192<\/button>\n    <\/div>\n  <\/div>\n<\/section>\n\n<!-- \u2550\u2550 PASO 1: PROYECTO \u2550\u2550 -->\n<section class=\"section\" id=\"s1\">\n  <div class=\"step-header\">\n    <div class=\"step-num\">1<\/div>\n    <div><h2>Datos del proyecto<\/h2><\/div>\n  <\/div>\n  <div class=\"mode-toggle-row\">\n    <div class=\"mode-toggle-info\">\n      <strong>Modo Confidencial <span class=\"confidential-badge\" id=\"conf-badge\">Activo<\/span><\/strong>\n      <p>Act\u00edvalo para trabajar con datos anonimizados. El instrumento funciona igual y ning\u00fan dato sensible aparece en los documentos exportados.<\/p>\n    <\/div>\n    <label class=\"toggle-switch\" style=\"margin-left:1.5rem\">\n      <input type=\"checkbox\" id=\"conf-toggle\" onchange=\"toggleConfidential(this.checked)\"\/>\n      <span class=\"toggle-slider\"><\/span>\n    <\/label>\n  <\/div>\n\n  <div class=\"field-group\">\n    <div class=\"field\"><label>Fecha de acuerdo<\/label><input type=\"text\" id=\"f-date-start\" placeholder=\"dd\/mm\/aaaa\"\/><\/div>\n    <div class=\"field\"><label>Fecha estimada de cierre<\/label><input type=\"text\" id=\"f-date-end\" placeholder=\"dd\/mm\/aaaa\"\/><\/div>\n    <div class=\"field full\"><label>Objetivo estrat\u00e9gico<\/label><textarea id=\"f-objective\" placeholder=\"El valor de negocio que justifica este proyecto\u2026\"><\/textarea><\/div>\n    <div class=\"field\"><label>Correo del destinatario<\/label><input type=\"text\" id=\"f-email-client\" placeholder=\"correo@empresa.com\"\/><\/div>\n    <div class=\"field\"><label>Nombre del contacto<\/label><input type=\"text\" id=\"f-contact\" placeholder=\"Nombre completo\"\/><\/div>\n  <\/div>\n  <div class=\"btn-row\">\n    <button class=\"btn btn-ghost\" onclick=\"goTo(0)\">\u2190 Instrucciones<\/button>\n    <button class=\"btn btn-primary\" onclick=\"goTo(2)\">Siguiente: Calibrar dimensiones \u2192<\/button>\n  <\/div>\n<\/section>\n\n<!-- \u2550\u2550 PASO 2: CALIBRAR \u2550\u2550 -->\n<section class=\"section\" id=\"s2\">\n  <div class=\"step-header\">\n    <div class=\"step-num\">2<\/div>\n    <div><h2>Calibraci\u00f3n de dimensiones<\/h2><\/div>\n  <\/div>\n  <div class=\"weight-bar-wrap no-print\">\n    <span style=\"font-size:15px;color:var(--gray-500);font-weight:300;flex:1\">Suma de pesos<\/span>\n    <div class=\"weight-bar-track\"><div class=\"weight-bar-fill\" id=\"wb-fill\" style=\"width:100%;background:var(--navy)\"><\/div><\/div>\n    <span class=\"weight-bar-label\" id=\"wb-label\" style=\"color:var(--navy)\">100%<\/span>\n  <\/div>\n  <div id=\"dims-container\"><\/div>\n\n\n  <!-- AN\u00c1LISIS PROYECTUM -->\n  <div class=\"analisis-box\" id=\"analisis-box\">\n    <div class=\"analisis-box-header\">\n      <div>\n        <div class=\"analisis-box-title\">Solicitar an\u00e1lisis interpretado de Proyectum<\/div>\n        <div class=\"analisis-box-sub\">Nuestro equipo revisa tu perfil de calibraci\u00f3n y te env\u00eda un informe con interpretaci\u00f3n experta, alertas de riesgo y recomendaciones estrat\u00e9gicas por dimensi\u00f3n.<\/div>\n      <\/div>\n      <span class=\"analisis-badge\">Servicio Proyectum<\/span>\n    <\/div>\n    <div style=\"margin-bottom:.75rem\">\n      <div class=\"analisis-deliverable\"><span class=\"analisis-deliverable-icon\">\u2192<\/span>Lectura cr\u00edtica de la distribuci\u00f3n de pesos y umbrales de tu proyecto espec\u00edfico.<\/div>\n      <div class=\"analisis-deliverable\"><span class=\"analisis-deliverable-icon\">\u2192<\/span>Identificaci\u00f3n de tensiones y riesgos en el perfil de calibraci\u00f3n.<\/div>\n      <div class=\"analisis-deliverable\"><span class=\"analisis-deliverable-icon\">\u2192<\/span>Recomendaciones accionables por dimensi\u00f3n con referencias a marcos PMI, Agile y gesti\u00f3n de beneficios.<\/div>\n      <div class=\"analisis-deliverable\"><span class=\"analisis-deliverable-icon\">\u2192<\/span>Tiempo de respuesta: 48 horas h\u00e1biles.<\/div>\n    <\/div>\n    <label class=\"analisis-check\" for=\"ck-analisis\">\n      <input type=\"checkbox\" id=\"ck-analisis\" onchange=\"toggleAnalisis(this.checked)\"\/>\n      <div class=\"analisis-check-text\">\n        <strong>Solicito el an\u00e1lisis interpretado de Proyectum.<\/strong> Acepto que Proyectum reciba los datos de calibraci\u00f3n de este proyecto para generar el an\u00e1lisis. Entiendo que esta informaci\u00f3n ser\u00e1 tratada con estricta confidencialidad y usada exclusivamente para este prop\u00f3sito. No ser\u00e1 compartida con terceros ni usada para ning\u00fan otro fin.\n      <\/div>\n    <\/label>\n    <div id=\"analisis-btn-wrap\" style=\"display:none;margin-top:1rem\">\n      <button class=\"btn btn-primary\" id=\"btn-mail-analisis\" onclick=\"sendEmail('analisis')\">Enviar perfil a Proyectum para an\u00e1lisis \u2192<\/button>\n      <div id=\"mail-status-analisis\" style=\"display:none;margin-top:.75rem;font-size:16px;font-weight:300;padding:.6rem 1rem;border-radius:var(--radius)\"><\/div>\n    <\/div>\n  <\/div>\n\n  <div class=\"btn-row\">\n    <button class=\"btn btn-ghost\" onclick=\"goTo(1)\">\u2190 Atr\u00e1s<\/button>\n    <button class=\"btn btn-primary\" onclick=\"goTo(3)\">Siguiente: Medir al cierre \u2192<\/button>\n    <button class=\"btn btn-ghost\" onclick=\"recalibrar()\">Recalibrar durante el proyecto<\/button>\n  <\/div>\n<\/section>\n\n<!-- \u2550\u2550 PASO 3: MEDIR \u2550\u2550 -->\n<section class=\"section\" id=\"s3\">\n  <div class=\"step-header\">\n    <div class=\"step-num\">3<\/div>\n    <div><h2>Medici\u00f3n al cierre<\/h2><\/div>\n  <\/div>\n  <div id=\"score-dims-container\"><\/div>\n  <div class=\"btn-row\">\n    <button class=\"btn btn-ghost\" onclick=\"goTo(2)\">\u2190 Atr\u00e1s<\/button>\n    <button class=\"btn btn-primary\" onclick=\"goTo(4)\">Ver resultado \u2192<\/button>\n  <\/div>\n<\/section>\n\n<!-- \u2550\u2550 PASO 4: RESULTADO \u2550\u2550 -->\n<section class=\"section\" id=\"s4\">\n  <div class=\"step-header\">\n    <div class=\"step-num\">4<\/div>\n    <div><h2>Resultado del proyecto<\/h2><\/div>\n  <\/div>\n  <div id=\"result-container\"><\/div>\n  <div class=\"btn-row no-print\">\n    <button class=\"btn btn-ghost\" onclick=\"goTo(3)\">\u2190 Ajustar scores<\/button>\n    <button class=\"btn btn-ghost\" id=\"btn-mail-cierre\" onclick=\"sendEmail('cierre')\">Enviar reporte por correo<\/button>\n    <button class=\"btn btn-ghost\" onclick=\"resetAll()\">Nuevo proyecto<\/button>\n  <\/div>\n  <div id=\"mail-status-cierre\" style=\"display:none;margin-top:.75rem;font-size:14px;font-weight:300;padding:.6rem 1rem;border-radius:var(--radius)\"><\/div>\n<\/section>\n\n<\/main>\n\n<footer class=\"no-print\">\n  <strong>Proyectum<\/strong> \u00b7 Calibrador de \u00c9xito en Proyectos v1.0 \u00b7\n  Basado en: Cooke-Davies (2002) \u00b7 PMI BRM \u00b7 Flyvbjerg (2023) \u00b7 KPMG-IPMA (2019) \u00b7 Standish CHAOS (2020)\n<\/footer>\n\n<script>\nconst DIMS=[\n  {id:'params',   name:'Par\u00e1metros de entrega',        desc:'El proyecto se entrega dentro de los rangos acordados de tiempo, costo y alcance, con las tolerancias negociadas al inicio.',  dw:20,dt:60},\n  {id:'benefits', name:'Realizaci\u00f3n de beneficios',    desc:'El valor de negocio que justific\u00f3 la inversi\u00f3n se materializa y es medible en el plazo definido.',                             dw:30,dt:70},\n  {id:'satisf',   name:'Satisfacci\u00f3n de stakeholders', desc:'Patrocinador, usuarios finales y equipo eval\u00faan el resultado como aceptable o superior a sus expectativas.',                   dw:20,dt:60},\n  {id:'quality',  name:'Calidad del entregable',       desc:'Lo producido funciona como se esperaba, cumple los criterios de aceptaci\u00f3n y es sostenible operativamente.',                   dw:15,dt:65},\n  {id:'learning', name:'Aprendizaje organizacional',   desc:'El proyecto dej\u00f3 capacidad instalada, conocimiento documentado o madurez que la organizaci\u00f3n no ten\u00eda antes.',                 dw:15,dt:50},\n];\nconst W={},T={},S={};\nDIMS.forEach(d=>{W[d.id]=d.dw;T[d.id]=d.dt;S[d.id]=0;});\n\nlet accepted=false;\n\nfunction tryEnter(){\n  const c1=document.getElementById('ck1').checked;\n  const c2=document.getElementById('ck2').checked;\n  const err=document.getElementById('consent-error');\n  if(!c1||!c2){err.style.display='block';return;}\n  err.style.display='none';\n  accepted=true;\n  document.querySelectorAll('.step-pill.locked').forEach(p=>p.classList.remove('locked'));\n  goTo(1);\n}\n\nfunction checkConsent(){\n  const c1=document.getElementById('ck1').checked;\n  const c2=document.getElementById('ck2').checked;\n  if(c1&&c2) document.getElementById('consent-error').style.display='none';\n}\n\nfunction toggleFaq(btn){\n  const item=btn.closest('.faq-item');\n  item.classList.toggle('open');\n}\n\nfunction goTo(n){\n  if(n>0&&!accepted){tryEnter();return;}\n  document.querySelectorAll('.section').forEach((s,i)=>s.classList.toggle('active',i===n));\n  document.querySelectorAll('.step-pill').forEach((p,i)=>p.classList.toggle('active',i===n));\n  if(n===2)buildCalibrate();\n  if(n===3)buildMeasure();\n  if(n===4)buildResult();\n  window.scrollTo({top:0,behavior:'smooth'});\n}\n\nfunction recalibrar(){\n  if(!confirm('\u00bfConfirmas que quieres recalibrar? Esto requiere nueva aprobaci\u00f3n del patrocinador. Los umbrales y pesos actuales se conservan como punto de partida.')) return;\n  \/\/ Reset scores but keep weights\/thresholds\n  DIMS.forEach(d=>{ S[d.id]=0; });\n  buildCalibrate();\n  window.scrollTo({top:0,behavior:'smooth'});\n  const statusDiv=document.createElement('div');\n  statusDiv.style.cssText='margin-top:1rem;padding:.75rem 1rem;background:var(--navy-light);border-radius:var(--radius);font-size:16px;font-weight:300;color:var(--navy);border:1px solid var(--navy-tint)';\n  statusDiv.textContent='Recalibraci\u00f3n iniciada. Ajusta los pesos y umbrales seg\u00fan las nuevas condiciones del proyecto y vuelve a enviar el acuerdo.';\n  const container=document.getElementById('dims-container');\n  container.parentNode.insertBefore(statusDiv, container);\n  setTimeout(()=>statusDiv.remove(), 6000);\n}\n\nfunction toggleAnalisis(on){\n  document.getElementById('analisis-btn-wrap').style.display = on ? 'block' : 'none';\n}\n\nfunction toggleConfidential(on){\n  const badge=document.getElementById('conf-badge');\n  const placeholders={\n    'f-contact':      on?'Contacto-1':'Nombre completo',\n    'f-email-client': on?'correo-anonimizado@empresa.com':'correo@empresa.com',\n    'f-objective':    on?'Descripci\u00f3n gen\u00e9rica del prop\u00f3sito del proyecto\u2026':'El valor de negocio que justifica este proyecto\u2026'\n  };\n  badge.classList.toggle('active', on);\n  Object.entries(placeholders).forEach(([id,ph])=>{\n    const el=document.getElementById(id); if(el) el.placeholder=ph;\n  });\n}\n\nfunction buildCalibrate(){\n  const c=document.getElementById('dims-container');c.innerHTML='';\n  DIMS.forEach((d,i)=>{\n    const el=document.createElement('div');el.className='dim-card';\n    el.innerHTML=`<div class=\"dim-card-header\"><span class=\"dim-badge\">D${i+1}<\/span><span class=\"dim-name\">${d.name}<\/span><\/div>\n    <div class=\"dim-desc\">${d.desc}<\/div>\n    <div class=\"slider-row\"><span class=\"slider-label\">Peso relativo<\/span><input type=\"range\" min=\"0\" max=\"50\" step=\"1\" value=\"${W[d.id]}\" oninput=\"setW('${d.id}',+this.value)\"><span class=\"slider-val\" id=\"wv-${d.id}\">${W[d.id]}%<\/span><\/div>\n    <div class=\"slider-row\"><span class=\"slider-label\">Umbral m\u00ednimo<\/span><input type=\"range\" min=\"0\" max=\"100\" step=\"5\" value=\"${T[d.id]}\" oninput=\"setT('${d.id}',+this.value)\"><span class=\"slider-val\" id=\"tv-${d.id}\">${T[d.id]}<\/span><\/div>`;\n    c.appendChild(el);\n  });\n  refreshWBar();\n}\n\nfunction buildMeasure(){\n  const c=document.getElementById('score-dims-container');c.innerHTML='';\n  DIMS.forEach((d,i)=>{\n    const el=document.createElement('div');el.className='dim-card';\n    el.innerHTML=`<div class=\"dim-card-header\"><span class=\"dim-badge\">D${i+1}<\/span><span class=\"dim-name\">${d.name}<\/span><span style=\"margin-left:auto;font-size:14px;color:var(--gray-500);font-weight:300\">Peso: ${W[d.id]}% \u00b7 Umbral: ${T[d.id]}<\/span><\/div>\n    <div class=\"dim-desc\">${d.desc}<\/div>\n    <div class=\"slider-row\"><span class=\"slider-label\">Score real<\/span><input type=\"range\" min=\"0\" max=\"100\" step=\"5\" value=\"${S[d.id]}\" oninput=\"setS('${d.id}',+this.value)\"><span class=\"slider-val\" id=\"sv-${d.id}\">${S[d.id]}<\/span><\/div>\n    <div class=\"threshold-note\" id=\"stn-${d.id}\"><\/div>`;\n    c.appendChild(el);refreshSTN(d.id);\n  });\n}\n\nfunction buildResult(){\n  let total=0;const alerts=[];\n  DIMS.forEach(d=>{total+=(W[d.id]\/100)*S[d.id];if(S[d.id]<T[d.id])alerts.push({name:d.name,score:S[d.id],threshold:T[d.id]});});\n  const score=Math.round(total);const hasVeto=alerts.length>0;\n  const verdict=hasVeto?'Veto por umbral':score>=80?'Exitoso':score>=65?'Aceptable':score>=50?'Desafiado':'Fallido';\n  const meta={name:'\u2014',org:'\u2014',sponsor:'\u2014',pm:'\u2014',ds:v('f-date-start')||'\u2014',de:v('f-date-end')||'\u2014',obj:v('f-objective')||'\u2014'};\n  let dimsHTML='';\n  DIMS.forEach((d,i)=>{\n    const contrib=Math.round((W[d.id]\/100)*S[d.id]);const ok=S[d.id]>=T[d.id];\n    dimsHTML+=`<div class=\"score-dim\"><div class=\"score-dim-name\">D${i+1} \u00b7 ${d.name}<\/div><div class=\"score-dim-bar\"><div class=\"score-dim-fill\" style=\"width:${S[d.id]}%;background:${ok?'#1b7f4e':'#9e0c23'}\"><\/div><\/div><div class=\"score-dim-nums\"><span>Score: <strong>${S[d.id]}<\/strong> \u00b7 Umbral: ${T[d.id]} \u00b7 Peso: ${W[d.id]}%<\/span><span>${ok?'<span class=\"tag-ok\">OK<\/span>':'<span class=\"tag-bad\">Veto \u25b2<\/span>'} <strong>${contrib}<\/strong>pts<\/span><\/div><\/div>`;\n  });\n  let rows='';\n  DIMS.forEach((d,i)=>{\n    const diff=S[d.id]-T[d.id];\n    rows+=`<tr><td class=\"dim-col\">D${i+1} \u00b7 ${d.name}<\/td><td>${W[d.id]}%<\/td><td>${T[d.id]}<\/td><td><strong>${S[d.id]}<\/strong><\/td><td>${diff>=0?`<span class=\"tag-ok\">+${diff}<\/span>`:`<span class=\"tag-bad\">${diff}<\/span>`}<\/td><td><strong>${Math.round((W[d.id]\/100)*S[d.id])}<\/strong><\/td><\/tr>`;\n  });\n  const alertsHTML=hasVeto\n    ?alerts.map(a=>`<div class=\"alert danger\"><svg class=\"alert-icon\" viewBox=\"0 0 16 16\" fill=\"none\"><path d=\"M8 2L14 13H2L8 2Z\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><path d=\"M8 6v3.5M8 11v.5\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"\/><\/svg><span><strong>${a.name}:<\/strong> score ${a.score} por debajo del umbral m\u00ednimo (${a.threshold}).<\/span><\/div>`).join('')\n    :`<div class=\"alert success\"><svg class=\"alert-icon\" viewBox=\"0 0 16 16\" fill=\"none\"><path d=\"M3 8l3.5 3.5L13 5\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/svg><span>Todas las dimensiones superaron sus umbrales m\u00ednimos acordados.<\/span><\/div>`;\n  document.getElementById('result-container').innerHTML=`\n    <div style=\"font-size:17px;color:var(--gray-500);font-weight:300;margin-bottom:1rem;line-height:1.8\"><strong style=\"color:var(--navy)\">${meta.name}<\/strong> \u00b7 ${meta.org}<br>Patrocinador: ${meta.sponsor} \u00b7 Director: ${meta.pm}<br>Acuerdo: ${meta.ds} \u00b7 Cierre estimado: ${meta.de}<\/div>\n    <div class=\"score-hero\"><div class=\"score-big\">${score}<span>\/100<\/span><\/div><div class=\"score-info\"><h3>Score de \u00e9xito ponderado<\/h3><p>${meta.obj}<\/p><span class=\"verdict-badge\">${verdict}<\/span><\/div><\/div>\n    <div class=\"alerts-section\">${alertsHTML}<\/div>\n    <div class=\"score-grid\">${dimsHTML}<\/div>\n    <p style=\"font-size:19px;font-weight:500;color:var(--navy);margin-bottom:.75rem;margin-top:1rem\">Comparativo por dimensi\u00f3n<\/p>\n    <table class=\"compare-table\"><thead><tr><th>Dimensi\u00f3n<\/th><th>Peso<\/th><th>Umbral<\/th><th>Score real<\/th><th>Diferencia<\/th><th>Contribuci\u00f3n<\/th><\/tr><\/thead>\n    <tbody>${rows}<tr><td colspan=\"5\" style=\"font-weight:500;text-align:right;color:var(--navy)\">Score total ponderado<\/td><td><strong style=\"font-size:15px;color:var(--navy)\">${score}<\/strong><\/td><\/tr><\/tbody><\/table>\n    <div style=\"margin-top:1.25rem;padding:1rem 1.25rem;background:var(--navy-light);border-radius:var(--radius);font-size:14px;color:var(--gray-500);line-height:1.8;border:1px solid var(--navy-tint)\">\n      <strong style=\"color:var(--navy)\">Escala:<\/strong> 80\u2013100 = Exitoso \u00b7 65\u201379 = Aceptable \u00b7 50\u201364 = Desafiado \u00b7 0\u201349 = Fallido. Veto por umbral anula el score global.<br>\n      <strong style=\"color:var(--navy)\">CEP v1.0 \u00b7 Proyectum<\/strong> \u00b7 Cooke-Davies (2002) \u00b7 PMI BRM \u00b7 Flyvbjerg (2023) \u00b7 KPMG-IPMA (2019)\n    <\/div>`;\n}\n\nfunction setW(id,val){W[id]=val;document.getElementById('wv-'+id).textContent=val+'%';refreshWBar();}\nfunction setT(id,val){T[id]=val;document.getElementById('tv-'+id).textContent=val;}\nfunction setS(id,val){S[id]=val;document.getElementById('sv-'+id).textContent=val;refreshSTN(id);}\nfunction refreshSTN(id){\n  const el=document.getElementById('stn-'+id);if(!el)return;\n  const ok=S[id]>=T[id];\n  el.textContent=ok?`Umbral alcanzado: ${S[id]} \u2265 ${T[id]}`:`Umbral no alcanzado: ${S[id]} < ${T[id]}`;\n  el.style.color=ok?'var(--success)':'var(--danger)';\n}\nasync function sendEmail(tipo){\n  const PROYECTUM_EMAIL='contacto@mx.proyectum.com';\n  const WP_ENDPOINT='https:\/\/proyectum.com\/mx\/wp-json\/cep\/v1\/send-email';\n\n  const clientEmail=v('f-email-client')||'';\n  const statusId='mail-status-'+tipo;\n  const btnId='btn-mail-'+tipo;\n  const statusEl=document.getElementById(statusId);\n  const btnEl=document.getElementById(btnId);\n\n  if(!clientEmail){\n    if(statusEl) showMailStatus(statusEl,'error','Agrega el correo del cliente en el paso 1 antes de enviar.');\n    else alert('Agrega el correo del cliente en el paso 1 antes de enviar.');\n    return;\n  }\n\n  if(btnEl){ btnEl.disabled=true; btnEl.textContent='Enviando\u2026'; }\n  if(statusEl) showMailStatus(statusEl,'loading','Enviando correo\u2026');\n\n  const meta={\n    proyecto:'\u2014',\n    organizacion:'\u2014',\n    patrocinador:'\u2014',\n    director:'\u2014',\n    contacto:v('f-contact')||'\u2014',\n    fecha_inicio:v('f-date-start')||'\u2014',\n    fecha_cierre:v('f-date-end')||'\u2014',\n    objetivo:v('f-objective')||'\u2014',\n    email_cliente:clientEmail\n  };\n\n  let payload={tipo, meta, proyectum_email:PROYECTUM_EMAIL};\n\n  if(tipo==='calibracion'||tipo==='analisis'){\n    payload.dimensiones=DIMS.map(d=>({\n      nombre:d.name,\n      peso:W[d.id],\n      umbral:T[d.id]\n    }));\n  }\n\n  if(tipo==='cierre'){\n    let total=0;const alertas=[];\n    DIMS.forEach(d=>{\n      total+=(W[d.id]\/100)*S[d.id];\n      if(S[d.id]<T[d.id]) alertas.push(d.name);\n    });\n    payload.dimensiones=DIMS.map(d=>({\n      nombre:d.name,\n      peso:W[d.id],\n      umbral:T[d.id],\n      score:S[d.id],\n      contribucion:Math.round((W[d.id]\/100)*S[d.id]),\n      ok:S[d.id]>=T[d.id]\n    }));\n    payload.score_total=Math.round(total);\n    payload.veto=alertas.length>0;\n    payload.veto_dims=alertas;\n    const score=Math.round(total);\n    payload.veredicto=alertas.length>0?'Veto por umbral':score>=80?'Exitoso':score>=65?'Aceptable':score>=50?'Desafiado':'Fallido';\n  }\n\n  try{\n    const res=await fetch(WP_ENDPOINT,{\n      method:'POST',\n      headers:{'Content-Type':'application\/json'},\n      body:JSON.stringify(payload)\n    });\n    const data=await res.json();\n    if(data.success){\n      if(tipo==='analisis'){\n      showMailStatus(statusEl,'success','Perfil enviado a Proyectum. Recibir\u00e1s el an\u00e1lisis interpretado en 48 horas h\u00e1biles en '+clientEmail+'.');\n      btnEl.textContent='Perfil enviado \u2713';\n    } else {\n      showMailStatus(statusEl,'success','Correo enviado correctamente a '+clientEmail+' y a Proyectum.');\n      btnEl.textContent='Correo enviado \u2713';\n    }\n      btnEl.textContent='Correo enviado \u2713';\n    } else {\n      throw new Error(data.message||'Error desconocido');\n    }\n  } catch(e){\n    showMailStatus(statusEl,'error','No se pudo enviar el correo. Verifica la conexi\u00f3n o contacta a soporte.');\n    btnEl.disabled=false;\n    btnEl.textContent=tipo==='calibracion'?'Enviar acuerdo por correo':tipo==='analisis'?'Enviar perfil a Proyectum para an\u00e1lisis \u2192':'Enviar reporte por correo';\n  }\n}\n\nfunction showMailStatus(el,type,msg){\n  el.style.display='block';\n  const styles={\n    loading:'background:var(--navy-light);color:var(--navy)',\n    success:'background:var(--success-bg);color:var(--success)',\n    error:'background:var(--danger-bg);color:var(--danger)'\n  };\n  el.style.cssText='display:block;margin-top:.75rem;font-size:14px;font-weight:300;padding:.6rem 1rem;border-radius:var(--radius);'+styles[type];\n  el.textContent=msg;\n}\n\nfunction refreshWBar(){\n  const total=Object.values(W).reduce((a,b)=>a+b,0);\n  const label=document.getElementById('wb-label');const fill=document.getElementById('wb-fill');if(!label)return;\n  label.textContent=total+'%';label.style.color=total===100?'var(--success)':'var(--danger)';\n  fill.style.width=Math.min(total,100)+'%';fill.style.background=total===100?'#1b7f4e':'var(--navy)';\n}\nfunction v(id){return document.getElementById(id)?.value?.trim();}\n\nfunction resetAll(){\n  DIMS.forEach(d=>{W[d.id]=d.dw;T[d.id]=d.dt;S[d.id]=0;});\n  document.querySelectorAll('input[type=text],textarea').forEach(el=>el.value='');\n  document.getElementById('ck1').checked=false;\n  document.getElementById('ck2').checked=false;\n  accepted=false;\n  document.querySelectorAll('.step-pill').forEach(p=>p.classList.add('locked'));\n  document.getElementById('pill-0').classList.remove('locked');\n  goTo(0);\n}\nbuildCalibrate();\n<\/script>\n<\/body>\n<\/html>\n","protected":false},"excerpt":{"rendered":"<p>CEP \u2014 Calibrador de \u00c9xito en Proyectos | Proyectum P Calibrador de \u00c9xito en Proyectos Proyectum \u00b7 CEP v1.0 Inicio 1 \u00b7 Proyecto 2 \u00b7 Calibrar 3 \u00b7 Medir 4 \u00b7 Resultado Calibrador de \u00c9xito en Proyectos (CEP) Define qu\u00e9 significa el \u00e9xito antes de empezar. Mide con los mismos criterios al cierre. Elimina el [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-6282","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/proyectum.com\/mx\/wp-json\/wp\/v2\/pages\/6282","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/proyectum.com\/mx\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/proyectum.com\/mx\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/proyectum.com\/mx\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/proyectum.com\/mx\/wp-json\/wp\/v2\/comments?post=6282"}],"version-history":[{"count":17,"href":"https:\/\/proyectum.com\/mx\/wp-json\/wp\/v2\/pages\/6282\/revisions"}],"predecessor-version":[{"id":8085,"href":"https:\/\/proyectum.com\/mx\/wp-json\/wp\/v2\/pages\/6282\/revisions\/8085"}],"wp:attachment":[{"href":"https:\/\/proyectum.com\/mx\/wp-json\/wp\/v2\/media?parent=6282"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}