{"id":156743,"date":"2026-09-03T14:57:25","date_gmt":"2026-09-03T12:57:25","guid":{"rendered":"https:\/\/gamestrategies.io\/calculadora-kepler-retail\/"},"modified":"2026-09-04T11:16:28","modified_gmt":"2026-09-04T09:16:28","slug":"calculadora-kepler-retail","status":"publish","type":"page","link":"https:\/\/gamestrategies.io\/en\/calculadora-kepler-retail\/","title":{"rendered":"Calculadora de Impacto Operativo en Retail | Kepler"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"156743\" class=\"elementor elementor-156743 elementor-156716 elementor-bc-flex-widget\" data-elementor-post-type=\"page\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-c3f44b05 elementor-widget elementor-widget-html\" data-id=\"c3f44b05\" 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<script>\r\n    document.addEventListener('DOMContentLoaded', function() {\r\n        const form = document.querySelector('.elementor-form');\r\n        const emailField = form.querySelector('input[type=\"email\"]');\r\n        \r\n        form.addEventListener('submit', function(event) {\r\n            const email = emailField.value;\r\n            const bannedDomains = [\"gmail.com\", \"icloud.com\", \"hotmail.com\", \"yahoo.com\"];\r\n            \r\n            \/\/ Extraer el dominio del correo\r\n            const emailDomain = email.split('@').pop();\r\n            \r\n            if (bannedDomains.includes(emailDomain.toLowerCase())) {\r\n                event.preventDefault();  \/\/ Detiene el env\u00edo del formulario\r\n                alert('Por favor, utiliza un correo corporativo.');\r\n                return false; \/\/ Asegura que el formulario no se env\u00ede\r\n            }\r\n        });\r\n\r\n        \/\/ Impide el env\u00edo si se hace por medios no convencionales (refuerza la seguridad)\r\n        form.addEventListener('submit', function(event) {\r\n            if (!emailField.value || emailField.value === \"\") {\r\n                event.preventDefault();  \/\/ Detiene el env\u00edo del formulario\r\n            }\r\n        });\r\n    });\r\n<\/script>\r\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-d07237e3 e-con-full e-flex e-con e-parent\" data-id=\"d07237e3\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-f2dd3279 elementor-widget elementor-widget-html\" data-id=\"f2dd3279\" 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<style>.elementor-element-d07237e3{gap:0!important;padding:0!important;}<\/style>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-63c35fa9 elementor-widget elementor-widget-html\" data-id=\"63c35fa9\" 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<style>\n:root{\n  --white:#FFFFFF; --tint:#EDF7FD; --sky:#27AAF0; --blue:#0060C2; --blue-bright:#007EFE; --navy:#00356B;\n  --orange:#F89A3E; --orange-2:#FFB066; --gray-mid:#B6B6B6; --gray-dark:#515151;\n  --card: rgba(255,255,255,0.85); --text:#0f172a; --muted:#64748b;\n  --primary: var(--blue); --primary-dark: var(--navy); --accent:#ea580c; --success:#16a34a;\n  --border:#e3e8ee; --shadow: 0 34px 70px -34px rgba(0,53,107,0.32); --radius:26px;\n}\n*{ box-sizing:border-box; }\nhtml, body{ height:100%; }\nbody{ margin:0; overflow-x:hidden; font-family:'Open Sans', ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, Arial; color:var(--gray-dark); background:#fff; }\n.bg{ position:absolute; left:50%; top:-8%; transform:translateX(-50%); width:1100px; height:720px; max-width:200vw;\n  background: radial-gradient(circle at 30% 35%, rgba(248,154,62,0.30), transparent 55%), radial-gradient(circle at 72% 62%, rgba(39,170,240,0.34), transparent 55%), radial-gradient(circle at 50% 50%, rgba(0,126,254,0.26), transparent 60%);\n  filter:blur(95px); opacity:.9; z-index:-1; pointer-events:none; }\n.container{ max-width:980px; margin:0 auto; padding:64px 18px 50px; position:relative; z-index:2; }\n.header{ display:flex; justify-content:space-between; align-items:flex-start; gap:16px; margin-bottom:22px; flex-wrap:wrap; }\n.brand{ display:flex; gap:12px; align-items:center; }\n.brand-text{ color:var(--navy); }\n.brand-name{ font-family:'Poppins',sans-serif; font-weight:700; font-size:12px; text-transform:uppercase; letter-spacing:.12em; color:var(--blue); }\n.brand-sub{ font-weight:700; margin-top:3px; color:var(--navy); }\n.header-right{ display:flex; gap:10px; align-items:center; flex-wrap:wrap; }\n.trust{ display:flex; gap:8px; flex-wrap:wrap; }\n.pill{ font-size:11px; font-weight:600; padding:6px 10px; border-radius:999px; background:#fff; border:1px solid var(--border); box-shadow:0 6px 18px -10px rgba(0,53,107,.2); color:var(--navy); }\n.lang{ display:flex; align-items:center; gap:8px; padding:6px 10px; border-radius:999px; background:#fff; border:1px solid var(--border); box-shadow:0 6px 18px -10px rgba(0,53,107,.2); color:var(--navy); }\n.lang-label{ font-size:12px; opacity:.85; }\n.lang-select{ appearance:none; -webkit-appearance:none; border:1px solid var(--border); background:#fff; color:var(--navy); padding:4px 22px 4px 4px; border-radius:999px; font-weight:600; font-size:12px; cursor:pointer; outline:none; }\n.lang-select option{ color:#111827; background:#fff; }\n.card{ background:rgba(255,255,255,.82); -webkit-backdrop-filter:blur(20px); backdrop-filter:blur(20px); border:1px solid rgba(255,255,255,.95); border-radius:var(--radius); padding:28px 26px 24px; box-shadow:var(--shadow); }\n.screen{ display:none; } .screen.active{ display:block; }\n.step{ display:none; } .step.active{ display:block; }\nh1{ font-family:'Poppins',sans-serif; font-weight:800; font-size:clamp(22px,2.8vw,29px); line-height:1.28; letter-spacing:-.3px; margin:0 0 10px; color:var(--navy); }\nh2{ font-family:'Poppins',sans-serif; font-weight:800; font-size:18px; margin:0 0 6px; color:var(--navy); }\nh3{ font-family:'Poppins',sans-serif; font-weight:700; font-size:13.5px; margin:0 0 6px; color:var(--navy); }\n.lead{ font-size:14.5px; line-height:1.6; color:var(--gray-dark); }\n.muted{ color:var(--muted); } .tiny{ font-size:11px; } .small{ font-size:12px; }\n.grid-2{ display:grid; grid-template-columns:1fr 1fr; gap:12px; margin:16px 0 4px; }\n.info-box{ border:1px solid var(--border); border-radius:16px; padding:14px; background:#fff; }\n.info-box ul{ margin:10px 0 0 18px; padding:0; line-height:1.6; font-size:13.5px; }\n.field{ margin-top:10px; display:flex; align-items:center; gap:10px; border:1.5px solid var(--border); border-radius:14px; padding:10px 13px; background:#fff; transition:border-color .16s ease; }\n.field:focus-within{ border-color:var(--sky); }\n.field input, .field select{ flex:1; border:none; outline:none; font-size:16px; background:transparent; color:var(--navy); -webkit-appearance:none; appearance:none; }\n.prefix, .suffix{ font-weight:700; color:var(--gray-mid); }\n.btn{ border:1px solid var(--border); background:#fff; color:var(--navy); padding:11px 18px; border-radius:999px; font-weight:600; font-family:'Poppins',sans-serif; font-size:13.5px; cursor:pointer; transition:transform .18s ease, box-shadow .18s ease; }\n.btn:hover{ transform:translateY(-2px); box-shadow:0 10px 24px -10px rgba(0,53,107,.25); }\n.btn-primary{ background:linear-gradient(135deg, var(--primary), var(--primary-dark)); border:none; color:#fff; box-shadow:0 16px 32px -14px rgba(0,96,194,.55); }\n.btn-ghost{ background:#fff; }\n.btn-small{ padding:8px 14px; font-size:12px; }\n.nav{ margin-top:18px; display:flex; justify-content:space-between; }\n.topbar{ display:flex; justify-content:space-between; align-items:flex-start; gap:12px; margin-bottom:18px; }\n.progress-wrap{ flex:1; max-width:300px; }\n.progress-label{ font-family:'Poppins',sans-serif; font-size:11px; font-weight:600; color:var(--gray-mid); margin-bottom:6px; }\n.progress{ height:5px; background:#e2ecf5; border-radius:999px; overflow:hidden; }\n.progress-bar{ height:100%; background:linear-gradient(90deg, var(--sky), var(--blue-bright)); transition:width .45s cubic-bezier(.22,.9,.32,1); }\n.loading{ text-align:center; padding:22px 0; }\n.spinner{ width:40px; height:40px; border-radius:50%; border:4px solid var(--border); border-top:4px solid var(--blue); margin:0 auto 14px; animation:spin 1s linear infinite; }\n@keyframes spin{ to{ transform:rotate(360deg); } }\n.cards{ display:grid; grid-template-columns:repeat(auto-fit,minmax(200px,1fr)); gap:12px; margin-top:16px; }\n.result-card{ border-radius:16px; padding:14px; background:#fff; border:1px solid var(--border); }\n.result-card .label{ font-size:11.5px; color:var(--gray-mid); font-weight:700; font-family:'Poppins',sans-serif; text-transform:uppercase; letter-spacing:.04em; }\n.result-card .value{ font-size:21px; font-weight:800; margin-top:8px; color:var(--navy); font-family:'Poppins',sans-serif; }\n.result-card.highlight{ background:linear-gradient(135deg, rgba(0,96,194,.06), rgba(39,170,240,.08)); border:1px solid rgba(0,96,194,.3); }\n.proof{ margin-top:14px; border:1px solid var(--border); border-radius:16px; background:#fff; padding:14px; }\n.actions{ display:flex; gap:10px; flex-wrap:wrap; margin-top:16px; }\n.cta-box{ background:linear-gradient(150deg, var(--navy), var(--blue)); border-radius:22px; padding:22px 20px; margin-top:16px; display:flex; justify-content:space-between; align-items:center; gap:16px; flex-wrap:wrap; color:#fff; }\n.cta-box h3{ color:#fff; } .cta-box p{ color:rgba(255,255,255,.82); margin:0; }\n.cta-box .btn-primary{ background:linear-gradient(135deg, var(--orange), var(--orange-2)); box-shadow:0 14px 30px -10px rgba(248,154,62,.55); white-space:nowrap; }\n.footer{ margin-top:22px; text-align:center; color:var(--gray-mid); }\n@media(max-width:860px){ .grid-2{ grid-template-columns:1fr; } .cards{ grid-template-columns:1fr; } .cta-box{ flex-direction:column; align-items:flex-start; } }\n\n\/* ===== Hero oscuro (mismo sistema que \/es\/generador-de-plan-de-formacion-con-ia\/) ===== *\/\n.kc-hero{ width:100vw; margin-left:calc(50% - 50vw); margin-right:calc(50% - 50vw); background:#050e1c; color:#cddcec; position:relative; overflow:hidden; isolation:isolate; }\n.kc-hero::before{ content:''; position:absolute; inset:0; z-index:1; pointer-events:none;\n  background-image:linear-gradient(to right, rgba(125,199,255,.07) 1px, transparent 1px), linear-gradient(to bottom, rgba(125,199,255,.07) 1px, transparent 1px);\n  background-size:64px 64px; -webkit-mask-image:radial-gradient(ellipse 90% 70% at 50% 60%, #000 20%, transparent 75%); mask-image:radial-gradient(ellipse 90% 70% at 50% 60%, #000 20%, transparent 75%); }\n.kc-hero .bg{ width:1200px; height:780px; top:-6%; opacity:.85; filter:blur(110px);\n  background: radial-gradient(circle at 28% 34%, rgba(56,208,255,.42), transparent 58%), radial-gradient(circle at 74% 28%, rgba(123,92,255,.36), transparent 58%), radial-gradient(circle at 52% 74%, rgba(47,123,255,.34), transparent 60%), radial-gradient(circle at 88% 66%, rgba(255,171,94,.18), transparent 55%); }\n.kc-hero .container{ position:relative; z-index:3; }\n.kc-hero .brand-name{ color:#38d0ff !important; } .kc-hero .brand-sub{ color:#fff !important; }\n.kc-hero .pill, .kc-hero .lang{ background:rgba(255,255,255,.06) !important; border-color:rgba(125,199,255,.16) !important; color:#bfe4ff !important; box-shadow:none !important; }\n.kc-hero .lang-label{ display:none !important; }\n.kc-hero .lang{ padding:6px 10px !important; }\n.kc-hero .lang-select{ background:transparent !important; color:#bfe4ff !important; font-weight:600 !important; border-color:rgba(125,199,255,.16) !important; }\n.kc-hero .lang-select option{ color:#111827 !important; background:#fff !important; }\n.kc-hero h1, .kc-hero h2, .kc-hero h3{ color:#fff !important; text-transform:none !important; }\n.kc-hero .lead{ color:#cddcec !important; } .kc-hero .muted{ color:#8da1b8 !important; }\n.kc-hero .card{ background:linear-gradient(165deg, rgba(255,255,255,.075), rgba(255,255,255,.03)) !important; border:1px solid rgba(125,199,255,.16) !important; box-shadow:0 50px 100px -40px rgba(0,0,0,.75), inset 0 1px 0 rgba(255,255,255,.09) !important; }\n.kc-hero .info-box{ background:rgba(255,255,255,.04) !important; border-color:rgba(125,199,255,.16) !important; }\n.kc-hero .info-box h3{ color:#fff !important; }\n.kc-hero .field{ background:rgba(255,255,255,.04) !important; border-color:rgba(125,199,255,.16) !important; }\n.kc-hero .field input, .kc-hero .field select{ background:transparent !important; color:#fff !important; -webkit-text-fill-color:#fff !important; }\n.kc-hero .field select option{ color:#111827 !important; background:#fff !important; -webkit-text-fill-color:#111827 !important; }\n.kc-hero .prefix, .kc-hero .suffix{ color:#8da1b8 !important; }\n.kc-hero .btn-ghost{ background:rgba(255,255,255,.04) !important; color:#9fd8ff !important; border-color:rgba(125,199,255,.16) !important; text-transform:none !important; }\n.kc-hero .btn-primary{ background:linear-gradient(135deg,#38d0ff,#2f7bff 55%,#7b5cff) !important; color:#fff !important; font-weight:600 !important; text-shadow:0 1px 3px rgba(0,0,0,.3) !important; box-shadow:0 16px 40px -16px rgba(56,208,255,.85) !important; text-transform:none !important; }\n.kc-hero .progress{ background:rgba(255,255,255,.09) !important; }\n.kc-hero .progress-bar{ background:linear-gradient(90deg,#38d0ff,#7b5cff) !important; box-shadow:0 0 14px rgba(56,208,255,.65); }\n.kc-hero .result-card{ background:rgba(255,255,255,.05) !important; border-color:rgba(125,199,255,.16) !important; }\n.kc-hero .result-card .label{ color:#8da1b8 !important; } .kc-hero .result-card .value{ color:#fff !important; }\n.kc-hero .result-card.highlight{ background:linear-gradient(135deg, rgba(56,208,255,.16), rgba(123,92,255,.12)) !important; border-color:#38d0ff !important; }\n.kc-hero .proof{ background:rgba(255,255,255,.04) !important; border-color:rgba(125,199,255,.16) !important; }\n.kc-hero .cta-box{ background:linear-gradient(150deg, rgba(56,208,255,.14), rgba(123,92,255,.14)) !important; border:1px solid rgba(125,199,255,.28) !important; }\n.kc-hero .cta-box .btn-primary{ background:linear-gradient(135deg,#ffab5e,#f89a3e) !important; color:#fff !important; font-weight:600 !important; text-shadow:0 1px 3px rgba(0,0,0,.3) !important; box-shadow:0 14px 30px -10px rgba(248,154,62,.55) !important; }\n.kc-hero .footer{ color:#6f8499 !important; }\na.btn.btn-primary#cta-link{ color:#fff !important; font-weight:600 !important; text-shadow:0 1px 3px rgba(0,0,0,.3) !important; }\n\n\/* Menos texto en bienvenida: el segundo recuadro (contexto sectorial) ahora\n   vive, con m\u00e1s detalle, en la secci\u00f3n de evidencia justo debajo. *\/\n#screen-welcome .grid-2{ grid-template-columns:1fr !important; }\n#screen-welcome .grid-2 .info-box:nth-of-type(2){ display:none !important; }\n.kc-hero [data-i18n=\"assumptionsNote\"],\n.kc-hero [data-i18n=\"q3Note\"]{ display:none !important; }\n\n.page-header{ display:none !important; }\n\n\/* ===== Bloque de contenido SEO ===== *\/\n.kc-sec{ width:100vw; margin-left:calc(50% - 50vw); margin-right:calc(50% - 50vw); padding:80px 24px; font-family:'Open Sans',sans-serif; box-sizing:border-box; }\n.kc-sec *{ box-sizing:border-box; }\n.kc-wrap{ max-width:1000px; margin:0 auto; }\n.kc-label{ font-family:'Poppins',sans-serif; font-weight:700; font-size:12px; letter-spacing:.16em; text-transform:uppercase; margin-bottom:14px; }\n.kc-sec h2{ font-family:'Poppins',sans-serif; font-weight:800; font-size:clamp(26px,3.4vw,36px); letter-spacing:-.6px; margin:0 0 16px; text-transform:none; }\n.kc-sec h3{ font-family:'Poppins',sans-serif; font-weight:700; font-size:17.5px; margin:0 0 8px; text-transform:none; }\n.kc-intro{ font-size:16px; line-height:1.75; max-width:720px; margin:0 0 44px; }\n.kc-ev{ background:#071a33; color:#b9cbdd; }\n.kc-ev .kc-label{ color:#ffab5e; } .kc-ev h2{ color:#fff; }\n.kc-ev-grid{ display:grid; grid-template-columns:repeat(3,1fr); gap:20px; text-align:left; }\n@media(max-width:900px){ .kc-ev-grid{ grid-template-columns:1fr; max-width:480px; margin:0 auto; } }\n.kc-ev-card{ background:rgba(255,255,255,.05); border:1px solid rgba(125,199,255,.16); border-radius:20px; padding:28px 24px; }\n.kc-ev-cifra{ font-family:'Poppins',sans-serif; font-weight:800; font-size:32px; background-image:linear-gradient(120deg,#38d0ff,#ffab5e); -webkit-background-clip:text; background-clip:text; color:transparent; margin-bottom:8px; }\n.kc-ev-card p{ font-size:13.5px; line-height:1.65; color:#b9cbdd; margin:0; }\n.kc-guia{ background:linear-gradient(180deg,#eaf4fd,#fff); color:#43536b; }\n.kc-guia .kc-label{ color:#0060c2; } .kc-guia h2,.kc-guia h3{ color:#00356b; }\n.kc-pasos{ list-style:none; padding:0; margin:0; }\n.kc-paso{ display:grid; grid-template-columns:70px 1fr; gap:20px; padding:26px 0; border-top:1px solid #dceaf7; }\n.kc-paso:first-child{ border-top:0; padding-top:0; }\n.kc-paso-n{ font-family:'Poppins',sans-serif; font-weight:800; font-size:34px; background-image:linear-gradient(150deg,#38d0ff,#7b5cff); -webkit-background-clip:text; background-clip:text; color:transparent; }\n.kc-paso p{ font-size:15px; line-height:1.7; margin:0; color:#43536b; } .kc-paso strong{ color:#00356b; }\n@media(max-width:640px){ .kc-paso{ grid-template-columns:1fr; gap:8px; } }\n.kc-faq{ background:linear-gradient(180deg,#fff,#eaf4fd); color:#43536b; }\n.kc-faq .kc-label{ color:#0060c2; } .kc-faq h2{ color:#00356b; }\n.kc-faq-lista{ margin-top:36px; display:grid; gap:10px; }\n.kc-faq details{ border:1px solid #dfeaf6; border-radius:16px; background:#fff; overflow:hidden; }\n.kc-faq details[open]{ border-color:#9fd8ff; box-shadow:0 16px 36px -22px rgba(0,53,107,.4); }\n.kc-faq summary{ cursor:pointer; list-style:none; padding:18px 50px 18px 22px; font-family:'Poppins',sans-serif; font-weight:700; font-size:15.5px; color:#00356b; position:relative; }\n.kc-faq summary::-webkit-details-marker{ display:none; }\n.kc-faq summary::after{ content:''; position:absolute; right:22px; top:50%; width:10px; height:10px; border-right:2px solid #38d0ff; border-bottom:2px solid #38d0ff; transform:translateY(-70%) rotate(45deg); transition:transform .2s ease; }\n.kc-faq details[open] summary::after{ transform:translateY(-30%) rotate(-135deg); }\n.kc-faq details p{ margin:0; padding:0 22px 20px; font-size:14.5px; line-height:1.7; }\n.kc-cta{ background:#050e1c; color:#cddcec; text-align:center; }\n.kc-cta h2{ color:#fff; } .kc-cta p{ font-size:16px; line-height:1.75; margin:0 auto 30px; max-width:560px; }\n.kc-cta .kc-wrap{ max-width:680px; }\n.kc-cta-botones{ display:flex; gap:18px; align-items:center; justify-content:center; flex-wrap:wrap; }\n.kc-cta-link{ font-family:'Poppins',sans-serif; font-weight:700; font-size:14.5px; color:#9fd8ff; text-decoration:none; }\n.kc-cta-link:hover{ text-decoration:underline; }\n<\/style>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b0b48e18 elementor-widget elementor-widget-html\" data-id=\"b0b48e18\" 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<div class=\"kc-hero\"><main class=\"container\">\n    <div class=\"bg\"><\/div>\n    <header class=\"header\">\n      <div class=\"brand\">\n        <div class=\"brand-text\">\n          <div class=\"brand-name\" data-i18n=\"brandName\">Kepler<\/div>\n          <div class=\"brand-sub\" data-i18n=\"brandSub\">Impacto Operativo en Retail<\/div>\n        <\/div>\n      <\/div>\n\n      <div class=\"header-right\">\n        <div class=\"trust\">\n          <span class=\"pill\" data-i18n=\"pillFree\">100% gratuita<\/span>\n          <span class=\"pill\" data-i18n=\"pillInstant\">Resultados inmediatos<\/span>\n          <span class=\"pill\" data-i18n=\"pillStore\">Por tienda<\/span>\n        <\/div>\n\n        <div class=\"lang\">\n          <label class=\"lang-label\" for=\"langSelect\" data-i18n=\"langLabel\">Idioma<\/label>\n          <select id=\"langSelect\" class=\"lang-select\" aria-label=\"Idioma\">\n            <option value=\"es\">ES<\/option>\n            <option value=\"fr\">FR<\/option>\n            <option value=\"en\">EN<\/option>\n          <\/select>\n        <\/div>\n      <\/div>\n    <\/header>\n\n    <!-- WELCOME -->\n    <section id=\"screen-welcome\" class=\"card screen active\">\n      <h1 data-i18n=\"welcomeTitle\">Calculadora de Impacto Operativo (por tienda)<\/h1>\n      <p class=\"lead\" data-i18n=\"welcomeLead\">\n        Estima en menos de 3 minutos cu\u00e1nto ingreso podr\u00eda capturar una tienda con peque\u00f1as mejoras de ejecuci\u00f3n operativa.\n      <\/p>\n\n      <div class=\"grid-2\">\n        <div class=\"info-box\">\n          <h3 data-i18n=\"welcomeBox1Title\">Qu\u00e9 vas a obtener<\/h3>\n          <ul>\n            <li data-i18n=\"welcomeBox1Li1\">\ud83d\udcb8 Impacto anual potencial (esta tienda)<\/li>\n            <li data-i18n=\"welcomeBox1Li2\">\ud83d\ude80 Recuperable en 90 d\u00edas (estimaci\u00f3n)<\/li>\n            <li data-i18n=\"welcomeBox1Li3\">\u23f1 Horas de venta recuperadas \/ mes<\/li>\n          <\/ul>\n        <\/div>\n\n        <div class=\"info-box\">\n          <h3 data-i18n=\"welcomeBox2Title\">Contexto (Retail)<\/h3>\n          <p data-i18n=\"welcomeBox2P1\">\n            Partimos de una aproximaci\u00f3n simple: <strong>Ventas \u2248 Tr\u00e1fico \u00d7 Ticket medio<\/strong>.\n            Investigaciones de <strong>McKinsey<\/strong> y <strong>BCG<\/strong> sobre ejecuci\u00f3n operativa en retail describen la existencia de un \u201cexecution gap\u201d:\n            parte de la demanda que entra en tienda no se captura completamente por roturas, reposici\u00f3n tard\u00eda, ejecuci\u00f3n promo o fricciones operativas.\n          <\/p>\n          <p class=\"muted\" data-i18n=\"welcomeBox2P2\">\n            Este modelo aplica un rango prudente (0,2% a 0,5% de ventas) para estimar cu\u00e1nto de esa demanda podr\u00eda recuperarse mediante disciplina operativa.\n          <\/p>\n        <\/div>\n      <\/div>\n\n      <div class=\"actions\">\n        <button class=\"btn btn-primary\" id=\"btn-start\" data-i18n=\"btnStart\">Empezar<\/button>\n        <button class=\"btn btn-ghost\" id=\"btn-demo-fill\" data-i18n=\"btnExample\">Ver ejemplo<\/button>\n      <\/div>\n\n      <p class=\"tiny muted\" data-i18n=\"privacyNote\">No guardamos datos. Todo se calcula en tu navegador.<\/p>\n    <\/section>\n\n    <!-- FORM -->\n    <section id=\"screen-form\" class=\"card screen\">\n      <div class=\"topbar\">\n        <div class=\"progress-wrap\">\n          <div class=\"progress-label\"><span data-i18n=\"progressLabel\">Progreso<\/span>: <span id=\"progressText\">Paso 1 de 3<\/span><\/div>\n          <div class=\"progress\">\n            <div class=\"progress-bar\" id=\"progressBar\" style=\"width: 33%\"><\/div>\n          <\/div>\n        <\/div>\n        <button class=\"btn btn-ghost btn-small\" id=\"btn-reset\" data-i18n=\"btnReset\" title=\"Reiniciar\">Reiniciar<\/button>\n      <\/div>\n\n      <div class=\"step active\" data-step=\"1\">\n        <h2 data-i18n=\"q1Title\">Tr\u00e1fico mensual de esta tienda<\/h2>\n        <p class=\"muted\" data-i18n=\"q1Help\">Visitas \/ entradas promedio al mes (estimaci\u00f3n si no hay dato exacto).<\/p>\n        <div class=\"field\">\n          <input type=\"number\" min=\"0\" step=\"100\" id=\"trafico_mensual\" placeholder=\"Ej. 120000\" \/>\n          <span class=\"suffix\" data-i18n=\"suffixVisits\">visitas\/mes<\/span>\n        <\/div>\n      <\/div>\n\n      <div class=\"step\" data-step=\"2\">\n        <h2 data-i18n=\"q2Title\">Ticket medio (\u20ac)<\/h2>\n        <p class=\"muted\" data-i18n=\"q2Help\">Valor medio por compra.<\/p>\n        <div class=\"field\">\n          <span class=\"prefix\">\u20ac<\/span>\n          <input type=\"number\" min=\"0\" step=\"0.5\" id=\"ticket_medio\" placeholder=\"Ej. 45\" \/>\n        <\/div>\n      <\/div>\n\n      <div class=\"step\" data-step=\"3\">\n        <h2 data-i18n=\"q3Title\">Nivel de ejecuci\u00f3n operativa en tienda<\/h2>\n        <p class=\"muted\" data-i18n=\"q3Help\">\n          Esto define una mejora prudente sobre ventas (0,2% a 0,5%) seg\u00fan consistencia operativa.\n        <\/p>\n\n        <div class=\"field select\">\n          <select id=\"nivel_operativo\" aria-label=\"Nivel de ejecuci\u00f3n operativa\">\n            <option value=\"\" selected disabled data-i18n=\"opPlaceholder\">Selecciona una opci\u00f3n\u2026<\/option>\n            <option value=\"daily\" data-i18n=\"opDaily\">Ritual diario claro (briefing, foco por franja, seguimiento)<\/option>\n            <option value=\"weekly\" data-i18n=\"opWeekly\">Seguimiento semanal<\/option>\n            <option value=\"monthly\" data-i18n=\"opMonthly\">Revisi\u00f3n mensual<\/option>\n            <option value=\"none\" data-i18n=\"opNone\">Sin sistema homog\u00e9neo<\/option>\n          <\/select>\n        <\/div>\n\n        <p class=\"tiny muted\" data-i18n=\"q3Note\">\n          La mejora modelada es deliberadamente conservadora para evitar sobreestimaciones.\n        <\/p>\n      <\/div>\n\n      <div class=\"nav\">\n        <button class=\"btn btn-ghost\" id=\"btn-back\" data-i18n=\"btnBack\">Atr\u00e1s<\/button>\n        <button class=\"btn btn-primary\" id=\"btn-next\" data-i18n=\"btnNext\">Continuar<\/button>\n      <\/div>\n\n      <p class=\"tiny muted\" data-i18n=\"assumptionsNote\">\n        Metodolog\u00eda: ventas mensuales \u2248 tr\u00e1fico \u00d7 ticket. Impacto = ventas \u00d7 % mejora operativa (prudente). Resultado principal: por tienda.\n      <\/p>\n    <\/section>\n\n    <!-- LOADING -->\n    <section id=\"screen-loading\" class=\"card screen\">\n      <div class=\"loading\">\n        <div class=\"spinner\"><\/div>\n        <h2 data-i18n=\"loadingTitle\">Calculando impacto\u2026<\/h2>\n        <p class=\"muted\" data-i18n=\"loadingText\">Estimaci\u00f3n prudente de impacto anual, 90 d\u00edas y horas recuperadas.<\/p>\n      <\/div>\n    <\/section>\n\n    <!-- RESULTS -->\n    <section id=\"screen-results\" class=\"card screen\">\n      <div class=\"results-head\">\n        <h2 data-i18n=\"resultsTitle\">Impacto estimado (por tienda)<\/h2>\n        <p class=\"muted\" data-i18n=\"resultsSubtitle\">\n          Orden de magnitud. Modelo prudente. La unidad operativa se traduce en un % peque\u00f1o sobre ventas.\n        <\/p>\n      <\/div>\n\n      <div class=\"cards\">\n        <div class=\"result-card\">\n          <div class=\"label\" data-i18n=\"r1Label\">\ud83d\udcb8 Impacto anual potencial<\/div>\n          <div class=\"value\" id=\"out_anual_tienda\">\u20ac\u2014<\/div>\n          <div class=\"small muted\" id=\"out_anual_note\"><\/div>\n        <\/div>\n\n        <div class=\"result-card highlight\">\n          <div class=\"label\" data-i18n=\"r2Label\">\ud83d\ude80 Recuperable en 90 d\u00edas<\/div>\n          <div class=\"value\" id=\"out_90d_tienda\">\u20ac\u2014<\/div>\n          <div class=\"small muted\" data-i18n=\"r2Note\">Estimaci\u00f3n conservadora.<\/div>\n        <\/div>\n\n        <div class=\"result-card\">\n          <div class=\"label\" data-i18n=\"r3Label\">\ud83d\udcc8 Mejora operativa modelada<\/div>\n          <div class=\"value\" id=\"out_uplift\">\u2014<\/div>\n          <div class=\"small muted\" data-i18n=\"r3Note\">Aplicada sobre ventas estimadas.<\/div>\n        <\/div>\n\n        <div class=\"result-card\">\n          <div class=\"label\" data-i18n=\"r4Label\">\u23f1 Horas de venta recuperadas \/ mes<\/div>\n          <div class=\"value\" id=\"out_hours_month\">\u2014<\/div>\n          <div class=\"small muted\" id=\"out_hours_note\"><\/div>\n        <\/div>\n\n        <div class=\"result-card\">\n          <div class=\"label\" data-i18n=\"r5Label\">\ud83d\udc65 Equivalente en empleados (FTE)<\/div>\n          <div class=\"value\" id=\"out_fte\">\u2014<\/div>\n          <div class=\"small muted\" data-i18n=\"r5Note\">Aprox. 160h\/mes por FTE.<\/div>\n        <\/div>\n      <\/div>\n\n      <!-- Escalado opcional -->\n      <div class=\"proof\">\n        <h3 data-i18n=\"scaleTitle\">Opcional: si aplicara en tiendas similares<\/h3>\n        <p class=\"muted\" data-i18n=\"scaleHelp\">\n          Si gestionas varias tiendas (o una zona), indica cu\u00e1ntas tiendas similares aplicar\u00edan este mismo impacto.\n        <\/p>\n\n        <div class=\"field\">\n          <input type=\"number\" min=\"1\" step=\"1\" id=\"num_tiendas_similares\" placeholder=\"Ej. 10\" \/>\n          <span class=\"suffix\" data-i18n=\"suffixStores\">tiendas<\/span>\n        <\/div>\n\n        <div class=\"actions\" style=\"margin-top: 12px;\">\n          <button class=\"btn btn-primary\" id=\"btn-scale\" data-i18n=\"btnScale\">Calcular impacto total<\/button>\n          <button class=\"btn btn-ghost\" id=\"btn-scale-clear\" data-i18n=\"btnScaleClear\">Quitar escalado<\/button>\n        <\/div>\n\n        <p class=\"tiny muted\" id=\"scaleResult\"><\/p>\n      <\/div>\n\n      <div class=\"cta\" style=\"margin-top: 14px;\">\n        <div class=\"cta-box\">\n          <div>\n            <h3 data-i18n=\"ctaTitle\">\u00bfQuieres capturar ese impacto?<\/h3>\n            <p class=\"muted\" data-i18n=\"ctaText\">\n              Podemos estructurar un plan operativo por tienda (rituales, foco por franja y seguimiento) sin cambiar tus sistemas actuales.\n            <\/p>\n          <\/div>\n          <a class=\"btn btn-primary\" id=\"cta-link\" href=\"#\" target=\"_self\" rel=\"noopener\" data-i18n=\"ctaBtn\">Pedir demo<\/a>\n        <\/div>\n\n        <div class=\"actions\">\n          <button class=\"btn btn-ghost\" id=\"btn-recalc\" data-i18n=\"btnRecalc\">Recalcular<\/button>\n          <button class=\"btn btn-ghost\" id=\"btn-copy\" data-i18n=\"btnCopy\">Copiar resultados<\/button>\n        <\/div>\n\n        <p class=\"tiny muted\" id=\"copyStatus\"><\/p>\n      <\/div>\n    <\/section>\n\n    <footer class=\"footer\">\n      <span class=\"tiny muted\">\u00a9 <span id=\"year\"><\/span> \u2014 <span data-i18n=\"footerText\">Herramienta interactiva gratuita<\/span><\/span>\n    <\/footer>\n  <\/main><\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1e13c47a elementor-widget elementor-widget-html\" data-id=\"1e13c47a\" 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<script>\nconst OP_UPLIFT = {\n  daily: 0.002,   \/\/ 0.2%\n  weekly: 0.003,  \/\/ 0.3%\n  monthly: 0.004, \/\/ 0.4%\n  none: 0.005     \/\/ 0.5%\n};\n\nconst RECOVER_90D_SHARE = 0.25;\nconst SALES_EUR_PER_HOUR = 120;\nconst FTE_HOURS_PER_MONTH = 160;\nconst CTA_URL = {\n  es: \"https:\/\/gamestrategies.io\/es\/pedir-una-demo-personalizada\/?utm_source=calculadora_kepler&utm_medium=lead_magnet&utm_campaign=retail\",\n  en: \"https:\/\/gamestrategies.io\/en\/demo\/?utm_source=calculadora_kepler&utm_medium=lead_magnet&utm_campaign=retail\",\n  fr: \"https:\/\/gamestrategies.io\/fr\/demander-une-demo-personalisee\/?utm_source=calculadora_kepler&utm_medium=lead_magnet&utm_campaign=retail\"\n};\n\nconst i18n = {\n  es: {\n    langLabel: \"Idioma\", brandName: \"Kepler\", brandSub: \"Impacto Operativo en Retail\",\n    pillFree: \"100% gratuita\", pillInstant: \"Resultados inmediatos\", pillStore: \"Por tienda\",\n    welcomeTitle: \"Calculadora de Impacto Operativo (por tienda)\",\n    welcomeLead: \"Estima en menos de 3 minutos cu\u00e1nto ingreso podr\u00eda capturar una tienda con peque\u00f1as mejoras de ejecuci\u00f3n operativa.\",\n    welcomeBox1Title: \"Qu\u00e9 vas a obtener\",\n    welcomeBox1Li1: \"\ud83d\udcb8 Impacto anual potencial (esta tienda)\",\n    welcomeBox1Li2: \"\ud83d\ude80 Recuperable en 90 d\u00edas (estimaci\u00f3n)\",\n    welcomeBox1Li3: \"\u23f1 Horas de venta recuperadas \/ mes\",\n    welcomeBox2Title: \"Contexto (Retail)\",\n    welcomeBox2P1: \"Partimos de una aproximaci\u00f3n simple: <strong>Ventas \u2248 Tr\u00e1fico \u00d7 Ticket medio<\/strong>. Investigaciones de <strong>McKinsey<\/strong> y <strong>BCG<\/strong> sobre ejecuci\u00f3n operativa en retail describen la existencia de un \u201cexecution gap\u201d: parte de la demanda que entra en tienda no se captura completamente por roturas, reposici\u00f3n tard\u00eda, ejecuci\u00f3n promo o fricciones operativas.\",\n    welcomeBox2P2: \"Este modelo aplica un rango prudente (0,2% a 0,5% de ventas) para estimar cu\u00e1nto de esa demanda podr\u00eda recuperarse mediante disciplina operativa.\",\n    btnStart: \"Empezar\", btnExample: \"Ver ejemplo\", privacyNote: \"No guardamos datos. Todo se calcula en tu navegador.\",\n    progressLabel: \"Progreso\", btnReset: \"Reiniciar\",\n    q1Title: \"Tr\u00e1fico mensual de esta tienda\", q1Help: \"Visitas \/ entradas promedio al mes (estimaci\u00f3n si no hay dato exacto).\", suffixVisits: \"visitas\/mes\",\n    q2Title: \"Ticket medio (\u20ac)\", q2Help: \"Valor medio por compra.\",\n    q3Title: \"Nivel de ejecuci\u00f3n operativa en tienda\", q3Help: \"Esto define una mejora prudente sobre ventas (0,2% a 0,5%) seg\u00fan consistencia operativa.\",\n    opPlaceholder: \"Selecciona una opci\u00f3n\u2026\", opDaily: \"Ritual diario claro (briefing, foco por franja, seguimiento)\", opWeekly: \"Seguimiento semanal\", opMonthly: \"Revisi\u00f3n mensual\", opNone: \"Sin sistema homog\u00e9neo\",\n    q3Note: \"La mejora modelada es deliberadamente conservadora para evitar sobreestimaciones.\",\n    btnBack: \"Atr\u00e1s\", btnNext: \"Continuar\", btnViewResults: \"Ver resultados\",\n    assumptionsNote: \"Metodolog\u00eda: ventas mensuales \u2248 tr\u00e1fico \u00d7 ticket. Impacto = ventas \u00d7 % mejora operativa (prudente). Resultado principal: por tienda.\",\n    loadingTitle: \"Calculando impacto\u2026\", loadingText: \"Estimaci\u00f3n prudente de impacto anual, 90 d\u00edas y horas recuperadas.\",\n    resultsTitle: \"Impacto estimado (por tienda)\", resultsSubtitle: \"Orden de magnitud. Modelo prudente. La unidad operativa se traduce en un % peque\u00f1o sobre ventas.\",\n    r1Label: \"\ud83d\udcb8 Impacto anual potencial\", r2Label: \"\ud83d\ude80 Recuperable en 90 d\u00edas\", r2Note: \"Estimaci\u00f3n conservadora.\",\n    r3Label: \"\ud83d\udcc8 Mejora operativa modelada\", r3Note: \"Aplicada sobre ventas estimadas.\",\n    r4Label: \"\u23f1 Horas de venta recuperadas \/ mes\", r5Label: \"\ud83d\udc65 Equivalente en empleados (FTE)\", r5Note: \"Aprox. 160h\/mes por FTE.\",\n    scaleTitle: \"Opcional: si aplicara en tiendas similares\", scaleHelp: \"Si gestionas varias tiendas (o una zona), indica cu\u00e1ntas tiendas similares aplicar\u00edan este mismo impacto.\",\n    suffixStores: \"tiendas\", btnScale: \"Calcular impacto total\", btnScaleClear: \"Quitar escalado\",\n    scaleResultPrefix: \"Impacto anual total estimado:\", scaleHoursPrefix: \"Horas recuperadas totales\/mes:\",\n    ctaTitle: \"\u00bfQuieres capturar ese impacto?\", ctaText: \"Podemos estructurar un plan operativo por tienda (rituales, foco por franja y seguimiento) sin cambiar tus sistemas actuales.\", ctaBtn: \"Pedir demo\",\n    btnRecalc: \"Recalcular\", btnCopy: \"Copiar resultados\", footerText: \"Herramienta interactiva gratuita\",\n    err1: \"Indica un tr\u00e1fico mensual v\u00e1lido (0 o m\u00e1s).\", err2: \"Indica un ticket medio v\u00e1lido (mayor que 0).\", err3: \"Selecciona un nivel operativo.\", errScale: \"Indica un n\u00famero de tiendas v\u00e1lido (>= 1).\",\n    copied: \"\u2705 Copiado. Puedes pegarlo en un email o en Slack.\", copyFail: \"No se pudo copiar autom\u00e1ticamente. Selecciona y copia manualmente.\",\n    stepText: (s) => `Paso ${s} de 3`, upliftText: (u) => `+${(u*100).toFixed(1)}%`, hoursText: (h) => `${Math.round(h)} h\/mes`, fteText: (f) => `${f.toFixed(1)} FTE`,\n    annualNote: (monthlySales) => `Ventas estimadas\/mes: ${formatEUR(monthlySales, \"es-ES\")}`, hoursNote: () => `Base: ${SALES_EUR_PER_HOUR}\u20ac \/ hora (prudente)`,\n  },\n  fr: {\n    langLabel: \"Langue\", brandName: \"Kepler\", brandSub: \"Impact Op\u00e9rationnel Retail\",\n    pillFree: \"100% gratuite\", pillInstant: \"R\u00e9sultats imm\u00e9diats\", pillStore: \"Par magasin\",\n    welcomeTitle: \"Calculatrice d\u2019impact op\u00e9rationnel (par magasin)\",\n    welcomeLead: \"En moins de 3 minutes, estimez le chiffre d\u2019affaires qu\u2019un magasin peut capter gr\u00e2ce \u00e0 de petites am\u00e9liorations d\u2019ex\u00e9cution.\",\n    welcomeBox1Title: \"Ce que vous obtenez\",\n    welcomeBox1Li1: \"\ud83d\udcb8 Impact annuel potentiel (ce magasin)\",\n    welcomeBox1Li2: \"\ud83d\ude80 R\u00e9cup\u00e9rable en 90 jours (estimation)\",\n    welcomeBox1Li3: \"\u23f1 Heures de vente r\u00e9cup\u00e9r\u00e9es \/ mois\",\n    welcomeBox2Title: \"Contexte (Retail)\",\n    welcomeBox2P1: \"On part d\u2019une approche simple : <strong>Ventes \u2248 Trafic \u00d7 Panier moyen<\/strong>. Les travaux de <strong>McKinsey<\/strong> et <strong>BCG<\/strong> sur l\u2019ex\u00e9cution retail d\u00e9crivent un \u201cexecution gap\u201d : une partie de la demande qui entre en magasin n\u2019est pas enti\u00e8rement capt\u00e9e (ruptures, r\u00e9assort tardif, ex\u00e9cution promo, frictions).\",\n    welcomeBox2P2: \"Le mod\u00e8le applique une fourchette prudente (0,2% \u00e0 0,5% des ventes) pour estimer la part de demande r\u00e9cup\u00e9rable via la discipline op\u00e9rationnelle.\",\n    btnStart: \"D\u00e9marrer\", btnExample: \"Exemple\", privacyNote: \"Aucune donn\u00e9e stock\u00e9e. Tout est calcul\u00e9 dans votre navigateur.\",\n    progressLabel: \"Progression\", btnReset: \"R\u00e9initialiser\",\n    q1Title: \"Trafic mensuel de ce magasin\", q1Help: \"Visites\/entr\u00e9es moyennes par mois (estimation si besoin).\", suffixVisits: \"visites\/mois\",\n    q2Title: \"Panier moyen (\u20ac)\", q2Help: \"Valeur moyenne par achat.\",\n    q3Title: \"Niveau d\u2019ex\u00e9cution op\u00e9rationnelle en magasin\", q3Help: \"D\u00e9finit un gain prudent sur les ventes (0,2% \u00e0 0,5%) selon la r\u00e9gularit\u00e9.\",\n    opPlaceholder: \"Choisissez une option\u2026\", opDaily: \"Rituel quotidien (brief, focus par cr\u00e9neau, suivi)\", opWeekly: \"Suivi hebdomadaire\", opMonthly: \"Revue mensuelle\", opNone: \"Pas de syst\u00e8me homog\u00e8ne\",\n    q3Note: \"Le gain mod\u00e9lis\u00e9 est volontairement conservateur.\",\n    btnBack: \"Retour\", btnNext: \"Continuer\", btnViewResults: \"Voir r\u00e9sultats\",\n    assumptionsNote: \"M\u00e9thode : ventes mensuelles \u2248 trafic \u00d7 panier. Impact = ventes \u00d7 % gain op\u00e9rationnel (prudent). R\u00e9sultat principal : par magasin.\",\n    loadingTitle: \"Calcul en cours\u2026\", loadingText: \"Estimation prudente : annuel, 90 jours et heures r\u00e9cup\u00e9r\u00e9es.\",\n    resultsTitle: \"Impact estim\u00e9 (par magasin)\", resultsSubtitle: \"Ordre de grandeur. Mod\u00e8le prudent : un petit % appliqu\u00e9 aux ventes estim\u00e9es.\",\n    r1Label: \"\ud83d\udcb8 Impact annuel potentiel\", r2Label: \"\ud83d\ude80 R\u00e9cup\u00e9rable en 90 jours\", r2Note: \"Estimation conservatrice.\",\n    r3Label: \"\ud83d\udcc8 Gain op\u00e9rationnel mod\u00e9lis\u00e9\", r3Note: \"Appliqu\u00e9 aux ventes estim\u00e9es.\",\n    r4Label: \"\u23f1 Heures de vente r\u00e9cup\u00e9r\u00e9es \/ mois\", r5Label: \"\ud83d\udc65 \u00c9quivalent en effectif (FTE)\", r5Note: \"Env. 160h\/mois par FTE.\",\n    scaleTitle: \"Optionnel : appliqu\u00e9 \u00e0 des magasins similaires\", scaleHelp: \"Si vous g\u00e9rez plusieurs magasins (ou une zone), indiquez combien de magasins similaires auraient le m\u00eame impact.\",\n    suffixStores: \"magasins\", btnScale: \"Calculer l\u2019impact total\", btnScaleClear: \"Retirer l\u2019extension\",\n    scaleResultPrefix: \"Impact annuel total estim\u00e9 :\", scaleHoursPrefix: \"Heures r\u00e9cup\u00e9r\u00e9es totales\/mois :\",\n    ctaTitle: \"Voulez-vous capter cet impact ?\", ctaText: \"On peut structurer un plan op\u00e9rationnel par magasin (rituels, focus, suivi) sans changer vos syst\u00e8mes.\", ctaBtn: \"Demander une d\u00e9mo\",\n    btnRecalc: \"Recalculer\", btnCopy: \"Copier les r\u00e9sultats\", footerText: \"Outil interactif gratuit\",\n    err1: \"Veuillez indiquer un trafic mensuel valide (0 ou plus).\", err2: \"Veuillez indiquer un panier moyen valide (> 0).\", err3: \"Veuillez s\u00e9lectionner un niveau.\", errScale: \"Veuillez indiquer un nombre de magasins valide (>= 1).\",\n    copied: \"\u2705 Copi\u00e9. Vous pouvez le coller dans un email ou Slack.\", copyFail: \"Copie automatique impossible. Copiez manuellement.\",\n    stepText: (s) => `\u00c9tape ${s} sur 3`, upliftText: (u) => `+${(u*100).toFixed(1)}%`, hoursText: (h) => `${Math.round(h)} h\/mois`, fteText: (f) => `${f.toFixed(1)} FTE`,\n    annualNote: (monthlySales) => `Ventes estim\u00e9es\/mois : ${formatEUR(monthlySales, \"fr-FR\")}`, hoursNote: () => `Base : ${SALES_EUR_PER_HOUR}\u20ac \/ heure (prudent)`,\n  },\n  en: {\n    langLabel: \"Language\", brandName: \"Kepler\", brandSub: \"Retail Operational Impact\",\n    pillFree: \"100% free\", pillInstant: \"Instant results\", pillStore: \"Per store\",\n    welcomeTitle: \"Operational impact calculator (per store)\",\n    welcomeLead: \"In under 3 minutes, estimate how much revenue a store could capture with small operational execution improvements.\",\n    welcomeBox1Title: \"What you\u2019ll get\",\n    welcomeBox1Li1: \"\ud83d\udcb8 Potential annual impact (this store)\",\n    welcomeBox1Li2: \"\ud83d\ude80 Recoverable in 90 days (estimate)\",\n    welcomeBox1Li3: \"\u23f1 Recovered selling hours \/ month\",\n    welcomeBox2Title: \"Context (Retail)\",\n    welcomeBox2P1: \"We use a simple approximation: <strong>Sales \u2248 Traffic \u00d7 Average basket<\/strong>. <strong>McKinsey<\/strong> and <strong>BCG<\/strong> research on retail execution commonly describes an \u201cexecution gap\u201d: a portion of in-store demand isn\u2019t fully captured due to stockouts, late replenishment, promo execution gaps, or operational friction.\",\n    welcomeBox2P2: \"This model applies a conservative range (0.2% to 0.5% of sales) to estimate the share of demand that could be recovered through operational discipline.\",\n    btnStart: \"Start\", btnExample: \"Example\", privacyNote: \"No data stored. Everything runs in your browser.\",\n    progressLabel: \"Progress\", btnReset: \"Reset\",\n    q1Title: \"Monthly traffic for this store\", q1Help: \"Average visits\/entries per month (estimate if needed).\", suffixVisits: \"visits\/mo\",\n    q2Title: \"Average basket (\u20ac)\", q2Help: \"Average value per purchase.\",\n    q3Title: \"In-store operational execution level\", q3Help: \"Sets a conservative sales uplift (0.2% to 0.5%) based on consistency.\",\n    opPlaceholder: \"Select an option\u2026\", opDaily: \"Daily ritual (briefing, hourly focus, tracking)\", opWeekly: \"Weekly tracking\", opMonthly: \"Monthly review\", opNone: \"No consistent system\",\n    q3Note: \"Modeled uplift is intentionally conservative.\",\n    btnBack: \"Back\", btnNext: \"Continue\", btnViewResults: \"View results\",\n    assumptionsNote: \"Method: monthly sales \u2248 traffic \u00d7 basket. Impact = sales \u00d7 operational uplift (conservative). Main result: per store.\",\n    loadingTitle: \"Calculating\u2026\", loadingText: \"Conservative estimate: annual, 90-day and recovered hours.\",\n    resultsTitle: \"Estimated impact (per store)\", resultsSubtitle: \"Order of magnitude. Conservative model: a small % applied to estimated sales.\",\n    r1Label: \"\ud83d\udcb8 Potential annual impact\", r2Label: \"\ud83d\ude80 Recoverable in 90 days\", r2Note: \"Conservative estimate.\",\n    r3Label: \"\ud83d\udcc8 Modeled operational uplift\", r3Note: \"Applied to estimated sales.\",\n    r4Label: \"\u23f1 Recovered selling hours \/ month\", r5Label: \"\ud83d\udc65 FTE equivalent\", r5Note: \"Approx. 160h\/month per FTE.\",\n    scaleTitle: \"Optional: if applied to similar stores\", scaleHelp: \"If you manage multiple stores (or an area), enter how many similar stores would see the same impact.\",\n    suffixStores: \"stores\", btnScale: \"Calculate total impact\", btnScaleClear: \"Remove scaling\",\n    scaleResultPrefix: \"Estimated total annual impact:\", scaleHoursPrefix: \"Total recovered hours\/mo:\",\n    ctaTitle: \"Want to capture that impact?\", ctaText: \"We can structure an operational plan per store (rituals, hourly focus, tracking) without changing your current systems.\", ctaBtn: \"Request a demo\",\n    btnRecalc: \"Recalculate\", btnCopy: \"Copy results\", footerText: \"Free interactive tool\",\n    err1: \"Please enter a valid monthly traffic number (0 or more).\", err2: \"Please enter a valid average basket (> 0).\", err3: \"Please select an execution level.\", errScale: \"Please enter a valid number of stores (>= 1).\",\n    copied: \"\u2705 Copied. You can paste into an email or Slack.\", copyFail: \"Could not copy automatically. Please copy manually.\",\n    stepText: (s) => `Step ${s} of 3`, upliftText: (u) => `+${(u*100).toFixed(1)}%`, hoursText: (h) => `${Math.round(h)} h\/mo`, fteText: (f) => `${f.toFixed(1)} FTE`,\n    annualNote: (monthlySales) => `Estimated sales\/mo: ${formatEUR(monthlySales, \"en-GB\")}`, hoursNote: () => `Assumption: ${SALES_EUR_PER_HOUR}\u20ac \/ hour (conservative)`,\n  }\n};\n\nfunction toNumber(value){ const n = Number(String(value).replace(',', '.')); return Number.isFinite(n) ? n : 0; }\nfunction formatEUR(n, locale){ const rounded = Math.round(n); return new Intl.NumberFormat(locale, { style: 'currency', currency: 'EUR', maximumFractionDigits: 0 }).format(rounded); }\nfunction stripHtml(html){ return String(html).replace(\/<[^>]*>\/g, '').trim(); }\n\nconst screens = { welcome: document.getElementById('screen-welcome'), form: document.getElementById('screen-form'), loading: document.getElementById('screen-loading'), results: document.getElementById('screen-results') };\nconst steps = Array.from(document.querySelectorAll('.step'));\nlet currentStep = 1;\n\nconst el = {\n  langSelect: document.getElementById('langSelect'),\n  trafico_mensual: document.getElementById('trafico_mensual'), ticket_medio: document.getElementById('ticket_medio'), nivel_operativo: document.getElementById('nivel_operativo'),\n  progressText: document.getElementById('progressText'), progressBar: document.getElementById('progressBar'),\n  out_anual_tienda: document.getElementById('out_anual_tienda'), out_90d_tienda: document.getElementById('out_90d_tienda'), out_uplift: document.getElementById('out_uplift'),\n  out_hours_month: document.getElementById('out_hours_month'), out_fte: document.getElementById('out_fte'), out_anual_note: document.getElementById('out_anual_note'), out_hours_note: document.getElementById('out_hours_note'),\n  num_tiendas_similares: document.getElementById('num_tiendas_similares'), scaleResult: document.getElementById('scaleResult'),\n  copyStatus: document.getElementById('copyStatus'), year: document.getElementById('year'), ctaLink: document.getElementById('cta-link'),\n};\n\nlet currentLang = \"es\";\n\nfunction showScreen(name){ Object.values(screens).forEach(s => s.classList.remove('active')); screens[name].classList.add('active'); }\n\nfunction showStep(stepNum){\n  steps.forEach(s => s.classList.remove('active'));\n  const step = steps.find(s => Number(s.dataset.step) === stepNum); if (step) step.classList.add('active');\n  const t = i18n[currentLang]; el.progressText.textContent = t.stepText(stepNum);\n  const pct = Math.round((stepNum \/ 3) * 100); el.progressBar.style.width = `${pct}%`;\n  const btnNext = document.getElementById('btn-next'); btnNext.innerHTML = (stepNum === 3) ? t.btnViewResults : t.btnNext;\n  const btnBack = document.getElementById('btn-back'); btnBack.style.visibility = stepNum === 1 ? 'hidden' : 'visible';\n}\n\nfunction validateStep(stepNum){\n  const t = i18n[currentLang];\n  const traffic = toNumber(el.trafico_mensual.value); const ticket = toNumber(el.ticket_medio.value); const op = el.nivel_operativo.value;\n  if (stepNum === 1 && traffic < 0) return t.err1;\n  if (stepNum === 2 && ticket <= 0) return t.err2;\n  if (stepNum === 3 && !op) return t.err3;\n  return null;\n}\n\nfunction calculateStore(){\n  const traffic = toNumber(el.trafico_mensual.value); const ticket = toNumber(el.ticket_medio.value); const opKey = el.nivel_operativo.value;\n  const uplift = OP_UPLIFT[opKey] ?? 0; const monthlySales = traffic * ticket;\n  const impactMonthly = monthlySales * uplift; const impactAnnual = impactMonthly * 12; const recover90d = impactAnnual * RECOVER_90D_SHARE;\n  const hoursRecoveredMonth = impactMonthly \/ SALES_EUR_PER_HOUR; const fte = hoursRecoveredMonth \/ FTE_HOURS_PER_MONTH;\n  return { traffic, ticket, opKey, uplift, monthlySales, impactMonthly, impactAnnual, recover90d, hoursRecoveredMonth, fte };\n}\n\nfunction updateResults(){\n  const t = i18n[currentLang]; const locale = currentLang === \"fr\" ? \"fr-FR\" : currentLang === \"en\" ? \"en-GB\" : \"es-ES\"; const r = calculateStore();\n  el.out_anual_tienda.textContent = formatEUR(r.impactAnnual, locale); el.out_90d_tienda.textContent = formatEUR(r.recover90d, locale);\n  el.out_uplift.textContent = t.upliftText(r.uplift); el.out_hours_month.textContent = t.hoursText(r.hoursRecoveredMonth); el.out_fte.textContent = t.fteText(r.fte);\n  el.out_anual_note.textContent = t.annualNote(r.monthlySales); el.out_hours_note.textContent = t.hoursNote();\n  el.scaleResult.textContent = \"\"; el.num_tiendas_similares.value = \"\";\n}\n\nfunction applyTranslations(){\n  const t = i18n[currentLang]; document.documentElement.lang = currentLang;\n  document.querySelectorAll('[data-i18n]').forEach(node => { const key = node.getAttribute('data-i18n'); if (!t[key]) return; node.innerHTML = t[key]; });\n  el.trafico_mensual.placeholder = currentLang === \"en\" ? \"e.g. 120000\" : currentLang === \"fr\" ? \"Ex. 120000\" : \"Ej. 120000\";\n  el.ticket_medio.placeholder = currentLang === \"en\" ? \"e.g. 45\" : currentLang === \"fr\" ? \"Ex. 45\" : \"Ej. 45\";\n  el.num_tiendas_similares.placeholder = currentLang === \"en\" ? \"e.g. 10\" : currentLang === \"fr\" ? \"Ex. 10\" : \"Ej. 10\";\n  if (screens.form.classList.contains('active')) showStep(currentStep);\n  if (screens.results.classList.contains('active')) updateResults();\n  updateCTA();\n}\n\nfunction updateCTA(){ el.ctaLink.href = CTA_URL[currentLang] || CTA_URL.es; }\n\ndocument.getElementById('btn-start').addEventListener('click', () => { showScreen('form'); currentStep = 1; showStep(currentStep); el.copyStatus.textContent = ''; });\ndocument.getElementById('btn-demo-fill').addEventListener('click', () => {\n  el.trafico_mensual.value = 120000; el.ticket_medio.value = 45; el.nivel_operativo.value = \"monthly\";\n  showScreen('form'); currentStep = 1; showStep(currentStep); el.copyStatus.textContent = '';\n});\ndocument.getElementById('btn-back').addEventListener('click', () => { currentStep = Math.max(1, currentStep - 1); showStep(currentStep); });\ndocument.getElementById('btn-next').addEventListener('click', () => {\n  const err = validateStep(currentStep); if (err){ alert(err); return; }\n  if (currentStep < 3){ currentStep += 1; showStep(currentStep); return; }\n  showScreen('loading');\n  setTimeout(() => { updateResults(); updateCTA(); showScreen('results'); }, 900);\n});\ndocument.getElementById('btn-recalc').addEventListener('click', () => { showScreen('form'); currentStep = 1; showStep(currentStep); el.copyStatus.textContent = ''; });\ndocument.getElementById('btn-reset').addEventListener('click', () => {\n  el.trafico_mensual.value = ''; el.ticket_medio.value = ''; el.nivel_operativo.value = '';\n  currentStep = 1; showStep(currentStep); el.copyStatus.textContent = '';\n});\ndocument.getElementById('btn-scale').addEventListener('click', () => {\n  const t = i18n[currentLang]; const locale = currentLang === \"fr\" ? \"fr-FR\" : currentLang === \"en\" ? \"en-GB\" : \"es-ES\";\n  const n = Math.floor(toNumber(el.num_tiendas_similares.value));\n  if (!Number.isFinite(n) || n < 1){ alert(t.errScale); return; }\n  const r = calculateStore(); const totalAnnual = r.impactAnnual * n; const totalHours = r.hoursRecoveredMonth * n;\n  el.scaleResult.textContent = `${t.scaleResultPrefix} ${formatEUR(totalAnnual, locale)} \u00b7 ${t.scaleHoursPrefix} ${Math.round(totalHours)} h\/mes`;\n});\ndocument.getElementById('btn-scale-clear').addEventListener('click', () => { el.num_tiendas_similares.value = \"\"; el.scaleResult.textContent = \"\"; });\ndocument.getElementById('btn-copy').addEventListener('click', async () => {\n  const t = i18n[currentLang]; const locale = currentLang === \"fr\" ? \"fr-FR\" : currentLang === \"en\" ? \"en-GB\" : \"es-ES\";\n  try{\n    const r = calculateStore(); const scaledN = Math.floor(toNumber(el.num_tiendas_similares.value)); const hasScale = Number.isFinite(scaledN) && scaledN >= 1;\n    const scaledLine = hasScale ? (currentLang === \"en\" ? `Total (x${scaledN} similar stores): ${formatEUR(r.impactAnnual * scaledN, locale)} | ${Math.round(r.hoursRecoveredMonth * scaledN)} h\/mo`\n      : currentLang === \"fr\" ? `Total (x${scaledN} magasins similaires) : ${formatEUR(r.impactAnnual * scaledN, locale)} | ${Math.round(r.hoursRecoveredMonth * scaledN)} h\/mois`\n      : `Total (x${scaledN} tiendas similares): ${formatEUR(r.impactAnnual * scaledN, locale)} | ${Math.round(r.hoursRecoveredMonth * scaledN)} h\/mes`) : \"\";\n    const text = [\n      currentLang === \"en\" ? \"Results \u2014 Retail Operational Impact (per store)\" : currentLang === \"fr\" ? \"R\u00e9sultats \u2014 Impact op\u00e9rationnel retail (par magasin)\" : \"Resultados \u2014 Impacto Operativo en Retail (por tienda)\",\n      `${stripHtml(t.r1Label)}: ${formatEUR(r.impactAnnual, locale)}`, `${stripHtml(t.r2Label)}: ${formatEUR(r.recover90d, locale)}`, `${stripHtml(t.r3Label)}: ${t.upliftText(r.uplift)}`,\n      `${stripHtml(t.r4Label)}: ${Math.round(r.hoursRecoveredMonth)} h\/mes`, `${stripHtml(t.r5Label)}: ${r.fte.toFixed(1)} FTE`, scaledLine,\n    ].filter(Boolean).join('\\n');\n    await navigator.clipboard.writeText(text); el.copyStatus.textContent = t.copied;\n  }catch(e){ el.copyStatus.textContent = t.copyFail; }\n});\n\nel.langSelect.addEventListener('change', (e) => { currentLang = e.target.value; localStorage.setItem(\"retail_calc_lang\", currentLang); applyTranslations(); });\nel.year.textContent = String(new Date().getFullYear());\nconst savedLang = localStorage.getItem(\"retail_calc_lang\");\nif (savedLang && i18n[savedLang]) currentLang = savedLang;\nel.langSelect.value = currentLang;\n\napplyTranslations(); updateCTA(); showScreen('welcome');\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-dc91e086 elementor-widget elementor-widget-html\" data-id=\"dc91e086\" 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<section class=\"kc-sec kc-ev\">\n  <div class=\"kc-wrap\">\n    <div class=\"kc-label\">Por qu\u00e9 existe el \u00abexecution gap\u00bb en retail<\/div>\n    <h2>La demanda que entra en tienda y no se convierte en venta<\/h2>\n    <p class=\"kc-intro\" style=\"color:#b9cbdd;\">McKinsey y BCG documentan de forma consistente un \u00abexecution gap\u00bb en retail: una parte de la demanda que llega f\u00edsicamente a la tienda no se captura, no por falta de tr\u00e1fico, sino por fricciones operativas del d\u00eda a d\u00eda.<\/p>\n    <div class=\"kc-ev-grid\">\n      <article class=\"kc-ev-card\">\n        <h3 style=\"color:#fff;\">Roturas de stock<\/h3>\n        <p>Un producto agotado en el lineal es una venta que no ocurre, aunque el cliente estuviera dispuesto a comprarlo. Es una de las causas m\u00e1s citadas de p\u00e9rdida de ventas en tienda f\u00edsica.<\/p>\n      <\/article>\n      <article class=\"kc-ev-card\">\n        <h3 style=\"color:#fff;\">Reposici\u00f3n tard\u00eda<\/h3>\n        <p>El tiempo entre que un producto se agota y vuelve a estar disponible en el lineal es tiempo de ventas perdidas, especialmente en las franjas de mayor tr\u00e1fico.<\/p>\n      <\/article>\n      <article class=\"kc-ev-card\">\n        <h3 style=\"color:#fff;\">Ejecuci\u00f3n promocional inconsistente<\/h3>\n        <p>Una promoci\u00f3n mal montada, fuera de plazo o sin visibilidad adecuada no genera el impacto para el que se dise\u00f1\u00f3, aunque la decisi\u00f3n comercial fuera correcta.<\/p>\n      <\/article>\n    <\/div>\n  <\/div>\n<\/section>\n\n<section class=\"kc-sec kc-guia\">\n  <div class=\"kc-wrap\">\n    <div class=\"kc-label\">La metodolog\u00eda<\/div>\n    <h2>C\u00f3mo calculamos el impacto operativo de tu tienda<\/h2>\n    <p class=\"kc-intro\">Cuatro pasos, todos visibles.<\/p>\n    <ol class=\"kc-pasos\">\n      <li class=\"kc-paso\">\n        <div class=\"kc-paso-n\">01<\/div>\n        <div><h3>Estimamos tus ventas mensuales<\/h3><p><strong>Tr\u00e1fico \u00d7 ticket medio.<\/strong> Es una aproximaci\u00f3n deliberadamente simple: no necesitas tu TPV conectado, solo dos cifras que ya conoces.<\/p><\/div>\n      <\/li>\n      <li class=\"kc-paso\">\n        <div class=\"kc-paso-n\">02<\/div>\n        <div><h3>Aplicamos una mejora conservadora<\/h3><p>Entre el 0,2% y el 0,5% de las ventas estimadas, seg\u00fan tu nivel de ejecuci\u00f3n operativa. Es un rango prudente frente al \u00abexecution gap\u00bb que describen McKinsey y BCG, no un m\u00e1ximo te\u00f3rico.<\/p><\/div>\n      <\/li>\n      <li class=\"kc-paso\">\n        <div class=\"kc-paso-n\">03<\/div>\n        <div><h3>Lo traducimos a horas y personas<\/h3><p>Usamos una referencia de \u20ac120\/hora de venta y 160h\/mes por persona a tiempo completo, para que el impacto se entienda en t\u00e9rminos operativos, no solo en euros.<\/p><\/div>\n      <\/li>\n      <li class=\"kc-paso\">\n        <div class=\"kc-paso-n\">04<\/div>\n        <div><h3>Mostramos lo recuperable en 90 d\u00edas<\/h3><p>El 25% del impacto anual estimado \u2014 el mismo criterio conservador que usamos en el resto de calculadoras Kepler, para no sobrevender lo que se puede lograr r\u00e1pido.<\/p><\/div>\n      <\/li>\n    <\/ol>\n  <\/div>\n<\/section>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-366f1cee elementor-widget elementor-widget-html\" data-id=\"366f1cee\" 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<section class=\"kc-sec kc-faq\">\n  <div class=\"kc-wrap\">\n    <div class=\"kc-label\">Preguntas frecuentes<\/div>\n    <h2>Sobre la calculadora y sus cifras<\/h2>\n    <div class=\"kc-faq-lista\">\n      <details><summary>\u00bfDe d\u00f3nde sale el rango 0,2%\u20130,5%?<\/summary><p>Es un rango prudente que aplicamos sobre el \u00abexecution gap\u00bb que McKinsey y BCG documentan en retail: la parte de la demanda en tienda que no se convierte en venta por roturas de stock, reposici\u00f3n tard\u00eda o ejecuci\u00f3n promocional inconsistente. No es una cifra espec\u00edfica de ning\u00fan estudio, es un rango conservador basado en ese concepto.<\/p><\/details>\n      <details><summary>\u00bfEl resultado es una promesa de cu\u00e1nto voy a ganar?<\/summary><p>No. Es una estimaci\u00f3n de orden de magnitud calculada con una f\u00f3rmula transparente sobre los datos que introduces. No sustituye un diagn\u00f3stico real de tu tienda ni garantiza ning\u00fan resultado.<\/p><\/details>\n      <details><summary>\u00bfGuard\u00e1is los datos que introduzco?<\/summary><p>No. Todo el c\u00e1lculo ocurre en tu navegador; no enviamos ni almacenamos el tr\u00e1fico, el ticket medio ni el nivel operativo en ning\u00fan servidor.<\/p><\/details>\n      <details><summary>\u00bfPor qu\u00e9 \u00abrecuperable en 90 d\u00edas\u00bb es solo una parte del impacto anual?<\/summary><p>Porque cambiar la ejecuci\u00f3n operativa de una tienda no cambia sus resultados de golpe. El 25% es una fracci\u00f3n deliberadamente conservadora, para no sobrevender lo que se puede lograr r\u00e1pido.<\/p><\/details>\n      <details><summary>\u00bfSirve si gestiono varias tiendas?<\/summary><p>S\u00ed. Calcula primero el impacto de una tienda representativa y despu\u00e9s usa el campo opcional \u00absi aplicara en tiendas similares\u00bb en la pantalla de resultados para escalarlo al n\u00famero de tiendas que gestionas.<\/p><\/details>\n    <\/div>\n  <\/div>\n<\/section>\n\n<section class=\"kc-sec kc-cta\">\n  <div class=\"kc-wrap\">\n    <h2>\u00bfQuieres capturar ese impacto?<\/h2>\n    <p>Podemos estructurar un plan operativo por tienda (rituales, foco por franja y seguimiento) sin cambiar tus sistemas actuales.<\/p>\n    <div class=\"kc-cta-botones\">\n      <a class=\"kc-cta-link\" href=\"https:\/\/gamestrategies.io\/es\/pedir-una-demo-personalizada\/?utm_source=calculadora_kepler&utm_medium=lead_magnet&utm_campaign=retail\">Pedir demo \u2192<\/a>\n      <a class=\"kc-cta-link\" href=\"https:\/\/gamestrategies.io\/es\/incentivo-de-ventas-kepler\/\">Descubre Kepler \u2192<\/a>\n    <\/div>\n  <\/div>\n<\/section>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-8efc5a4f elementor-widget elementor-widget-html\" data-id=\"8efc5a4f\" 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<style>\na.kc-cta-link{ color:#9fd8ff !important; font-weight:700 !important; }\na.kc-cta-link:hover{ color:#fff !important; text-decoration:underline !important; }\n.kc-hero .container{ padding-top:100px !important; padding-bottom:60px !important; }\n<\/style>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ca07672e elementor-widget elementor-widget-html\" data-id=\"ca07672e\" 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<style>\n.kc-hero{\n  background: linear-gradient(180deg, #ffffff 0px, #ffffff 30px, #050e1c 100px) !important;\n}\n<\/style>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-0c48275d elementor-widget elementor-widget-html\" data-id=\"0c48275d\" 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<style>\n.kc-hero, .kc-sec{\n  width:100% !important;\n  margin-left:0 !important;\n  margin-right:0 !important;\n}\n<\/style>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-9c50561f elementor-widget elementor-widget-html\" data-id=\"9c50561f\" 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<style>\n.kc-hero{ background:#050e1c !important; }\n<\/style>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-20e8cee3 elementor-widget elementor-widget-html\" data-id=\"20e8cee3\" 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<style>\nbody{ font-size:14px !important; }\n<\/style>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6d0175a1 elementor-widget elementor-widget-html\" data-id=\"6d0175a1\" 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<style>\n.kc-hero h1{ font-size: clamp(22px,2.8vw,29px) !important; line-height:1.28 !important; letter-spacing:-0.3px !important; margin-bottom:10px !important; }\n.kc-hero h2{ font-size: 18px !important; margin-bottom:6px !important; }\n.kc-hero h3{ font-size: 13.5px !important; }\n.kc-hero .lead{ font-size: 14.5px !important; line-height:1.6 !important; }\n<\/style>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-486943ca elementor-widget elementor-widget-html\" data-id=\"486943ca\" 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<style>\n.kc-headline{ font-family:'Poppins',sans-serif; font-weight:700; font-size:15.5px; line-height:1.55; color:#fff; background:rgba(56,208,255,.08); border:1px solid rgba(125,199,255,.25); border-radius:14px; padding:14px 16px; margin:0 0 16px; }\n.kc-headline strong{ color:#9fd8ff; }\n.kc-micro{ display:block; margin-top:4px; font-size:11.5px; color:#8da1b8; font-weight:400; }\n.kc-hero .proof{ opacity:.9; }\n<\/style>\n<script>\n(function(){\n  var MICRO_FTE = { es:\" Es orientativo: no implica reducir plantilla, es el equivalente en tiempo.\", en:\" For reference only \u2014 not a staffing change, just a time equivalent.\", fr:\" \u00c0 titre indicatif : pas un changement d'effectif, juste un \u00e9quivalent en temps.\" };\n\n  function headlineText(lang, r, loc){\n    var fte = i18n[lang].fteText(r.fte);\n    var amt = formatEUR(r.impactAnnual, loc);\n    if (lang === 'en') return 'This store could capture <strong>' + amt + '<\/strong> more a year \u2014 equivalent to the capacity of <strong>' + fte + '<\/strong> extra.';\n    if (lang === 'fr') return 'Ce magasin pourrait capter <strong>' + amt + '<\/strong> de plus par an \u2014 l\u2019\u00e9quivalent de la capacit\u00e9 de <strong>' + fte + '<\/strong> suppl\u00e9mentaire.';\n    return 'Esta tienda podr\u00eda capturar <strong>' + amt + '<\/strong> m\u00e1s al a\u00f1o \u2014 equivalente a la capacidad de <strong>' + fte + '<\/strong> adicional.';\n  }\n\n  function render(){\n    if (typeof calculateStore !== 'function' || typeof formatEUR !== 'function' || typeof currentLang === 'undefined') return;\n    var r = calculateStore();\n    var lang = currentLang;\n    var loc = lang === 'fr' ? 'fr-FR' : lang === 'en' ? 'en-GB' : 'es-ES';\n\n    var head = document.getElementById('kc-headline');\n    if (!head){\n      head = document.createElement('p');\n      head.id = 'kc-headline';\n      head.className = 'kc-headline';\n      var rh = document.querySelector('#screen-results .results-head');\n      if (rh) rh.insertAdjacentElement('afterend', head);\n    }\n    if (head) head.innerHTML = headlineText(lang, r, loc);\n\n    var r5 = document.querySelector('#screen-results [data-i18n=\"r5Note\"]');\n    if (r5){\n      var m = r5.querySelector('.kc-micro');\n      if (!m){ m = document.createElement('span'); m.className = 'kc-micro'; r5.appendChild(m); }\n      m.textContent = MICRO_FTE[lang] || MICRO_FTE.es;\n    }\n  }\n\n  var target = document.getElementById('screen-results');\n  if (target){\n    var mo = new MutationObserver(render);\n    mo.observe(target, { attributes:true, attributeFilter:['class'] });\n  }\n  var sel = document.getElementById('langSelect');\n  if (sel) sel.addEventListener('change', function(){ setTimeout(render, 60); });\n  document.addEventListener('click', function(e){\n    if (e.target && (e.target.id === 'btn-next' || e.target.id === 'btn-recalc')) setTimeout(render, 1000);\n  });\n})();\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2ab0e988 elementor-widget elementor-widget-html\" data-id=\"2ab0e988\" 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<script>\n(function(){\n  var LABEL = { es:\"Sobre unas ventas anuales estimadas de \", en:\"Based on estimated annual sales of \", fr:\"Sur la base de ventes annuelles estim\u00e9es de \" };\n  function fixAnnualNote(){\n    if (typeof calculateStore !== 'function' || typeof formatEUR !== 'function' || typeof currentLang === 'undefined') return;\n    var r = calculateStore();\n    var lang = currentLang;\n    var loc = lang === 'fr' ? 'fr-FR' : lang === 'en' ? 'en-GB' : 'es-ES';\n    var note = document.getElementById('out_anual_note');\n    if (note) note.textContent = (LABEL[lang] || LABEL.es) + formatEUR(r.monthlySales * 12, loc) + '.';\n  }\n  var target = document.getElementById('screen-results');\n  if (target){\n    var mo = new MutationObserver(fixAnnualNote);\n    mo.observe(target, { attributes:true, attributeFilter:['class'] });\n  }\n  var sel = document.getElementById('langSelect');\n  if (sel) sel.addEventListener('change', function(){ setTimeout(fixAnnualNote, 60); });\n  document.addEventListener('click', function(e){\n    if (e.target && (e.target.id === 'btn-next' || e.target.id === 'btn-recalc')) setTimeout(fixAnnualNote, 1000);\n  });\n})();\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-faed4d36 elementor-widget elementor-widget-html\" data-id=\"faed4d36\" 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<script>\n(function(){\n  var CONVERSION_RATE = 0.25;\n  calculateStore = function(){\n    var traffic = toNumber(el.trafico_mensual.value);\n    var ticket = toNumber(el.ticket_medio.value);\n    var opKey = el.nivel_operativo.value;\n    var uplift = OP_UPLIFT[opKey] ?? 0;\n    var buyers = traffic * CONVERSION_RATE;\n    var monthlySales = buyers * ticket;\n    var impactMonthly = monthlySales * uplift;\n    var impactAnnual = impactMonthly * 12;\n    var recover90d = impactAnnual * RECOVER_90D_SHARE;\n    var hoursRecoveredMonth = impactMonthly \/ SALES_EUR_PER_HOUR;\n    var fte = hoursRecoveredMonth \/ FTE_HOURS_PER_MONTH;\n    return { traffic: traffic, ticket: ticket, opKey: opKey, uplift: uplift, monthlySales: monthlySales, impactMonthly: impactMonthly, impactAnnual: impactAnnual, recover90d: recover90d, hoursRecoveredMonth: hoursRecoveredMonth, fte: fte, buyers: buyers };\n  };\n\n  if (typeof i18n !== 'undefined'){\n    if (i18n.es) i18n.es.welcomeBox2P1 = 'Partimos de una aproximaci\u00f3n simple: <strong>Ventas \u2248 Tr\u00e1fico \u00d7 Tasa de conversi\u00f3n (~25%) \u00d7 Ticket medio<\\\/strong>. Investigaciones de <strong>McKinsey<\\\/strong> y <strong>BCG<\\\/strong> sobre ejecuci\u00f3n operativa en retail describen la existencia de un \u201cexecution gap\u201d: parte de la demanda que entra en tienda no se captura completamente por roturas, reposici\u00f3n tard\u00eda, ejecuci\u00f3n promo o fricciones operativas.';\n    if (i18n.en) i18n.en.welcomeBox2P1 = 'We use a simple approximation: <strong>Sales \u2248 Traffic \u00d7 Conversion rate (~25%) \u00d7 Average basket<\\\/strong>. <strong>McKinsey<\\\/strong> and <strong>BCG<\\\/strong> research on retail execution commonly describes an \u201cexecution gap\u201d: a portion of in-store demand isn\u2019t fully captured due to stockouts, late replenishment, promo execution gaps, or operational friction.';\n    if (i18n.fr) i18n.fr.welcomeBox2P1 = 'On part d\u2019une approche simple\u00a0: <strong>Ventes \u2248 Trafic \u00d7 Taux de conversion (~25%) \u00d7 Panier moyen<\\\/strong>. Les travaux de <strong>McKinsey<\\\/strong> et <strong>BCG<\\\/strong> sur l\u2019ex\u00e9cution retail d\u00e9crivent un \u201cexecution gap\u201d\u00a0: une partie de la demande qui entre en magasin n\u2019est pas enti\u00e8rement capt\u00e9e (ruptures, r\u00e9assort tardif, ex\u00e9cution promo, frictions).';\n    if (typeof applyTranslations === 'function') applyTranslations();\n  }\n\n  var LABEL = { es:'Asumiendo ~25% de conversi\u00f3n sobre tu tr\u00e1fico \u2014 ventas anuales estimadas de ', en:'Assuming ~25% conversion on your traffic \u2014 estimated annual sales of ', fr:'En supposant ~25% de conversion sur votre trafic \u2014 ventes annuelles estim\u00e9es de ' };\n  function fixAnnualNote(){\n    if (typeof calculateStore !== 'function' || typeof formatEUR !== 'function' || typeof currentLang === 'undefined') return;\n    var r = calculateStore();\n    var lang = currentLang;\n    var loc = lang === 'fr' ? 'fr-FR' : lang === 'en' ? 'en-GB' : 'es-ES';\n    var note = document.getElementById('out_anual_note');\n    if (note) note.textContent = (LABEL[lang] || LABEL.es) + formatEUR(r.monthlySales * 12, loc) + '.';\n  }\n  var target = document.getElementById('screen-results');\n  if (target){\n    var mo = new MutationObserver(fixAnnualNote);\n    mo.observe(target, { attributes:true, attributeFilter:['class'] });\n  }\n  var sel = document.getElementById('langSelect');\n  if (sel) sel.addEventListener('change', function(){ setTimeout(fixAnnualNote, 60); });\n  document.addEventListener('click', function(e){\n    if (e.target && (e.target.id === 'btn-next' || e.target.id === 'btn-recalc')) setTimeout(fixAnnualNote, 1000);\n  });\n})();\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-9f12eeec elementor-widget elementor-widget-html\" data-id=\"9f12eeec\" 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<style>.elementor-element-dc91e086,.elementor-element-366f1cee{display:none!important;}<\/style>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1d7ea519 elementor-widget elementor-widget-html\" data-id=\"1d7ea519\" 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<section class=\"kc-sec kc-ev\">\n  <div class=\"kc-wrap\">\n    <div class=\"kc-label\">Por qu\u00e9 existe el \u00abexecution gap\u00bb en retail<\/div>\n    <h2>La demanda que entra en tienda y no se convierte en venta<\/h2>\n    <p class=\"kc-intro\" style=\"color:#b9cbdd;\">No es una opini\u00f3n de Kepler. McKinsey estima que una ejecuci\u00f3n retail deficiente puede llegar a costar hasta un <strong>20% de las ventas potenciales<\/strong>. Esta calculadora aplica solo una fracci\u00f3n conservadora de ese techo, nunca el m\u00e1ximo te\u00f3rico.<\/p>\n    <div class=\"kc-ev-grid\">\n      <article class=\"kc-ev-card\">\n        <div class=\"kc-ev-cifra\">Hasta 20%<\/div>\n        <h3>de ventas potenciales perdidas<\/h3>\n        <p>McKinsey estima que una ejecuci\u00f3n retail deficiente \u2014roturas de stock, reposici\u00f3n tard\u00eda, ejecuci\u00f3n promocional inconsistente\u2014 puede costar hasta un 20% de las ventas potenciales de una tienda.<\/p>\n        <div class=\"kc-ev-fuente\">McKinsey, investigaci\u00f3n sobre ejecuci\u00f3n retail y transformaci\u00f3n digital en CPG<\/div>\n      <\/article>\n      <article class=\"kc-ev-card\">\n        <div class=\"kc-ev-cifra\">~25%<\/div>\n        <h3>de productos agotados en el lineal<\/h3>\n        <p>Hasta una cuarta parte de los productos pueden estar fuera de stock en el lineal en un momento dado. Cada rotura es una venta que no ocurre, aunque el cliente estuviera dispuesto a comprar.<\/p>\n        <div class=\"kc-ev-fuente\">Investigaci\u00f3n sectorial sobre roturas de stock (out-of-stock) en retail\/CPG<\/div>\n      <\/article>\n      <article class=\"kc-ev-card\">\n        <div class=\"kc-ev-cifra\">+5%<\/div>\n        <h3>de ingreso por tienda con ejecuci\u00f3n integrada<\/h3>\n        <p>Las marcas que integran bien sus herramientas de ejecuci\u00f3n de campo (seguimiento, disciplina operativa) generan hasta un 5% m\u00e1s de ingreso por tienda que sus competidores.<\/p>\n        <div class=\"kc-ev-fuente\">BCG, investigaci\u00f3n sobre tecnolog\u00eda de ventas integrada en retail\/CPG<\/div>\n      <\/article>\n    <\/div>\n  <\/div>\n<\/section>\n\n<section class=\"kc-sec kc-guia\">\n  <div class=\"kc-wrap\">\n    <div class=\"kc-label\">La metodolog\u00eda<\/div>\n    <h2>C\u00f3mo calculamos el impacto operativo de tu tienda<\/h2>\n    <p class=\"kc-intro\">Cuatro pasos, todos visibles.<\/p>\n    <ol class=\"kc-pasos\">\n      <li class=\"kc-paso\">\n        <div class=\"kc-paso-n\">01<\/div>\n        <div><h3>Estimamos tus compradores y tus ventas mensuales<\/h3><p><strong>Tr\u00e1fico \u00d7 ~25% de conversi\u00f3n \u00d7 ticket medio.<\/strong> El 25% es un punto medio razonable entre los benchmarks t\u00edpicos de conversi\u00f3n en tienda f\u00edsica (moda 15-25%, alimentaci\u00f3n\/conveniencia 40-60%). No asumimos que todo visitante compra.<\/p><\/div>\n      <\/li>\n      <li class=\"kc-paso\">\n        <div class=\"kc-paso-n\">02<\/div>\n        <div><h3>Partimos de un techo del 20%<\/h3><p>McKinsey estima que la ejecuci\u00f3n deficiente puede costar hasta un 20% de las ventas potenciales. Es un m\u00e1ximo, no una media: representa el peor caso documentado, no lo que le pasa autom\u00e1ticamente a cualquier tienda.<\/p><\/div>\n      <\/li>\n      <li class=\"kc-paso\">\n        <div class=\"kc-paso-n\">03<\/div>\n        <div><h3>Aplicamos solo una fracci\u00f3n de ese techo<\/h3><p>Entre el 1% y el 8% de las ventas estimadas, seg\u00fan tu nivel de ejecuci\u00f3n operativa: una tienda con ritual diario claro ya est\u00e1 cerca de capturar todo el potencial (factor bajo); una tienda sin sistema homog\u00e9neo tiene m\u00e1s margen de mejora (factor m\u00e1s alto), pero nunca el m\u00e1ximo te\u00f3rico del 20%.<\/p><\/div>\n      <\/li>\n      <li class=\"kc-paso\">\n        <div class=\"kc-paso-n\">04<\/div>\n        <div><h3>Mostramos lo recuperable en 90 d\u00edas<\/h3><p>El 25% del impacto anual estimado \u2014 el mismo criterio conservador que usamos en el resto de calculadoras Kepler, para no sobrevender lo que se puede lograr r\u00e1pido.<\/p><\/div>\n      <\/li>\n    <\/ol>\n  <\/div>\n<\/section>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-481380f3 elementor-widget elementor-widget-html\" data-id=\"481380f3\" 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<section class=\"kc-sec kc-faq\">\n  <div class=\"kc-wrap\">\n    <div class=\"kc-label\">Preguntas frecuentes<\/div>\n    <h2>Sobre la calculadora y sus cifras<\/h2>\n    <div class=\"kc-faq-lista\">\n      <details><summary>\u00bfDe d\u00f3nde sale el rango 1%\u20138%?<\/summary><p>Es una fracci\u00f3n conservadora de un techo del 20% que McKinsey atribuye a una ejecuci\u00f3n retail deficiente (roturas de stock, reposici\u00f3n tard\u00eda, ejecuci\u00f3n promocional inconsistente). Seg\u00fan tu nivel de disciplina operativa aplicamos entre el 1% y el 8% de ese techo \u2014 nunca el m\u00e1ximo te\u00f3rico, para mantener la estimaci\u00f3n prudente.<\/p><\/details>\n      <details><summary>\u00bfPor qu\u00e9 aplic\u00e1is una tasa de conversi\u00f3n del 25%?<\/summary><p>Porque no todos los visitantes de una tienda compran. El 25% es un punto medio razonable entre los benchmarks del sector (moda 15-25%, alimentaci\u00f3n\/conveniencia 40-60%, lujo 5-12%). Sin este ajuste, la estimaci\u00f3n de ventas de partida ser\u00eda varias veces superior a la real.<\/p><\/details>\n      <details><summary>\u00bfEl resultado es una promesa de cu\u00e1nto voy a ganar?<\/summary><p>No. Es una estimaci\u00f3n de orden de magnitud calculada con una f\u00f3rmula transparente sobre los datos que introduces. No sustituye un diagn\u00f3stico real de tu tienda ni garantiza ning\u00fan resultado.<\/p><\/details>\n      <details><summary>\u00bfGuard\u00e1is los datos que introduzco?<\/summary><p>No. Todo el c\u00e1lculo ocurre en tu navegador; no enviamos ni almacenamos el tr\u00e1fico, el ticket medio ni el nivel operativo en ning\u00fan servidor.<\/p><\/details>\n      <details><summary>\u00bfSirve si gestiono varias tiendas?<\/summary><p>S\u00ed. Calcula primero el impacto de una tienda representativa y despu\u00e9s usa el campo opcional \u00absi aplicara en tiendas similares\u00bb en la pantalla de resultados para escalarlo al n\u00famero de tiendas que gestionas.<\/p><\/details>\n    <\/div>\n  <\/div>\n<\/section>\n\n<section class=\"kc-sec kc-cta\">\n  <div class=\"kc-wrap\">\n    <h2>\u00bfQuieres capturar ese impacto?<\/h2>\n    <p>Podemos estructurar un plan operativo por tienda (rituales, foco por franja y seguimiento) sin cambiar tus sistemas actuales.<\/p>\n    <div class=\"kc-cta-botones\">\n      <a class=\"kc-cta-link\" href=\"https:\/\/gamestrategies.io\/es\/pedir-una-demo-personalizada\/?utm_source=calculadora_kepler&utm_medium=lead_magnet&utm_campaign=retail\">Pedir demo \u2192<\/a>\n      <a class=\"kc-cta-link\" href=\"https:\/\/gamestrategies.io\/es\/incentivo-de-ventas-kepler\/\">Descubre Kepler \u2192<\/a>\n    <\/div>\n  <\/div>\n<\/section>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ba27312e elementor-widget elementor-widget-html\" data-id=\"ba27312e\" 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<script>\n(function(){\n  var CONVERSION_RATE = 0.25;\n  var CEILING = 0.20;\n  var OP_FACTOR = { daily: 0.05, weekly: 0.15, monthly: 0.25, none: 0.40 };\n\n  calculateStore = function(){\n    var traffic = toNumber(el.trafico_mensual.value);\n    var ticket = toNumber(el.ticket_medio.value);\n    var opKey = el.nivel_operativo.value;\n    var factor = OP_FACTOR[opKey] ?? 0;\n    var uplift = CEILING * factor;\n    var buyers = traffic * CONVERSION_RATE;\n    var monthlySales = buyers * ticket;\n    var impactMonthly = monthlySales * uplift;\n    var impactAnnual = impactMonthly * 12;\n    var recover90d = impactAnnual * RECOVER_90D_SHARE;\n    var hoursRecoveredMonth = impactMonthly \/ SALES_EUR_PER_HOUR;\n    var fte = hoursRecoveredMonth \/ FTE_HOURS_PER_MONTH;\n    return { traffic: traffic, ticket: ticket, opKey: opKey, uplift: uplift, monthlySales: monthlySales, impactMonthly: impactMonthly, impactAnnual: impactAnnual, recover90d: recover90d, hoursRecoveredMonth: hoursRecoveredMonth, fte: fte, buyers: buyers };\n  };\n\n  var P1 = { es:'Partimos de una aproximaci\u00f3n simple: <strong>Ventas \u2248 Tr\u00e1fico \u00d7 Tasa de conversi\u00f3n (~25%) \u00d7 Ticket medio<\\\/strong>. Investigaciones de <strong>McKinsey<\\\/strong> sobre ejecuci\u00f3n retail estiman que una ejecuci\u00f3n deficiente puede costar hasta un 20% de las ventas potenciales \u2014por roturas de stock, reposici\u00f3n tard\u00eda o ejecuci\u00f3n promocional inconsistente.', en:'We use a simple approximation: <strong>Sales \u2248 Traffic \u00d7 Conversion rate (~25%) \u00d7 Average basket<\\\/strong>. <strong>McKinsey<\\\/strong> research on retail execution estimates that poor execution can cost up to 20% of potential sales \u2014through stockouts, late replenishment, or inconsistent promo execution.', fr:'On part d\u2019une approche simple\u00a0: <strong>Ventes \u2248 Trafic \u00d7 Taux de conversion (~25%) \u00d7 Panier moyen<\\\/strong>. Les recherches de <strong>McKinsey<\\\/strong> sur l\u2019ex\u00e9cution retail estiment qu\u2019une ex\u00e9cution d\u00e9ficiente peut co\u00fbter jusqu\u2019\u00e0 20% des ventes potentielles \u2014via les ruptures de stock, le r\u00e9assort tardif ou une ex\u00e9cution promotionnelle incoh\u00e9rente.' };\n  var P2 = { es:'Este modelo aplica una fracci\u00f3n prudente de ese techo (entre 1% y 8% de las ventas) seg\u00fan tu nivel de disciplina operativa actual, para evitar sobreestimaciones.', en:'This model applies a conservative fraction of that ceiling (between 1% and 8% of sales) based on your current operational discipline level, to avoid overestimating.', fr:'Ce mod\u00e8le applique une fraction prudente de ce plafond (entre 1% et 8% des ventes) selon votre niveau actuel de discipline op\u00e9rationnelle, pour \u00e9viter toute surestimation.' };\n  var Q3 = { es:'Esto define qu\u00e9 fracci\u00f3n del techo de mejora (hasta 20% seg\u00fan McKinsey) se aplica a tus ventas, seg\u00fan tu consistencia operativa.', en:'This sets what fraction of the improvement ceiling (up to 20% per McKinsey) applies to your sales, based on your operational consistency.', fr:'Cela d\u00e9finit quelle fraction du plafond d\u2019am\u00e9lioration (jusqu\u2019\u00e0 20% selon McKinsey) s\u2019applique \u00e0 vos ventes, selon votre r\u00e9gularit\u00e9 op\u00e9rationnelle.' };\n  var AN = { es:'Metodolog\u00eda: ventas mensuales \u2248 tr\u00e1fico \u00d7 ~25% de conversi\u00f3n \u00d7 ticket. Impacto = ventas \u00d7 mejora operativa (1%-8%, fracci\u00f3n prudente de un techo del 20%). Resultado principal: por tienda.', en:'Method: monthly sales \u2248 traffic \u00d7 ~25% conversion \u00d7 basket. Impact = sales \u00d7 operational uplift (1%-8%, a conservative fraction of a 20% ceiling). Main result: per store.', fr:'M\u00e9thode\u00a0: ventes mensuelles \u2248 trafic \u00d7 ~25% de conversion \u00d7 panier. Impact = ventes \u00d7 am\u00e9lioration op\u00e9rationnelle (1%-8%, fraction prudente d\u2019un plafond de 20%). R\u00e9sultat principal\u00a0: par magasin.' };\n\n  if (typeof i18n !== 'undefined'){\n    ['es','en','fr'].forEach(function(l){ if (i18n[l]){ i18n[l].welcomeBox2P1 = P1[l]; i18n[l].welcomeBox2P2 = P2[l]; i18n[l].q3Help = Q3[l]; i18n[l].assumptionsNote = AN[l]; } });\n    if (typeof applyTranslations === 'function') applyTranslations();\n  }\n\n  var LABEL = { es:'Asumiendo ~25% de conversi\u00f3n sobre tu tr\u00e1fico \u2014 ventas anuales estimadas de ', en:'Assuming ~25% conversion on your traffic \u2014 estimated annual sales of ', fr:'En supposant ~25% de conversion sur votre trafic \u2014 ventes annuelles estim\u00e9es de ' };\n  function fixAnnualNote(){\n    if (typeof calculateStore !== 'function' || typeof formatEUR !== 'function' || typeof currentLang === 'undefined') return;\n    var r = calculateStore();\n    var lang = currentLang;\n    var loc = lang === 'fr' ? 'fr-FR' : lang === 'en' ? 'en-GB' : 'es-ES';\n    var note = document.getElementById('out_anual_note');\n    if (note) note.textContent = (LABEL[lang] || LABEL.es) + formatEUR(r.monthlySales * 12, loc) + '.';\n  }\n  var target = document.getElementById('screen-results');\n  if (target){\n    var mo = new MutationObserver(fixAnnualNote);\n    mo.observe(target, { attributes:true, attributeFilter:['class'] });\n  }\n  var sel = document.getElementById('langSelect');\n  if (sel) sel.addEventListener('change', function(){ setTimeout(fixAnnualNote, 60); });\n  document.addEventListener('click', function(e){\n    if (e.target && (e.target.id === 'btn-next' || e.target.id === 'btn-recalc')) setTimeout(fixAnnualNote, 1000);\n  });\n})();\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-93d1fcd9 elementor-widget elementor-widget-html\" data-id=\"93d1fcd9\" 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<style>.elementor-element-dc91e086,.elementor-element-366f1cee{display:none!important;}<\/style>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-9cb534f3 elementor-widget elementor-widget-html\" data-id=\"9cb534f3\" 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<section class=\"kc-sec kc-ev\">\n  <div class=\"kc-wrap\">\n    <div class=\"kc-label\">Why the retail \"execution gap\" exists<\/div>\n    <h2>The demand that walks into your store and never becomes a sale<\/h2>\n    <p class=\"kc-intro\" style=\"color:#b9cbdd;\">This isn't Kepler's opinion. McKinsey estimates poor retail execution can cost up to <strong>20% of potential sales<\/strong>. This calculator applies only a conservative fraction of that ceiling, never the theoretical maximum.<\/p>\n    <div class=\"kc-ev-grid\">\n      <article class=\"kc-ev-card\">\n        <div class=\"kc-ev-cifra\">Up to 20%<\/div>\n        <h3>of potential sales lost<\/h3>\n        <p>McKinsey estimates that poor retail execution \u2014 stockouts, late replenishment, inconsistent promo execution \u2014 can cost up to 20% of a store's potential sales.<\/p>\n        <div class=\"kc-ev-fuente\">McKinsey, research on retail execution and digital transformation in CPG<\/div>\n      <\/article>\n      <article class=\"kc-ev-card\">\n        <div class=\"kc-ev-cifra\">~25%<\/div>\n        <h3>of shelf products out of stock<\/h3>\n        <p>Up to a quarter of products can be out of stock on the shelf at any given time. Every stockout is a sale that doesn't happen, even when the customer was ready to buy.<\/p>\n        <div class=\"kc-ev-fuente\">Industry research on out-of-stock rates in retail\/CPG<\/div>\n      <\/article>\n      <article class=\"kc-ev-card\">\n        <div class=\"kc-ev-cifra\">+5%<\/div>\n        <h3>revenue per store with integrated execution<\/h3>\n        <p>Brands that integrate their field execution tools well (tracking, operational discipline) generate up to 5% more revenue per store than competitors.<\/p>\n        <div class=\"kc-ev-fuente\">BCG, research on integrated retail\/CPG sales technology<\/div>\n      <\/article>\n    <\/div>\n  <\/div>\n<\/section>\n\n<section class=\"kc-sec kc-guia\">\n  <div class=\"kc-wrap\">\n    <div class=\"kc-label\">The methodology<\/div>\n    <h2>How we calculate your store's operational impact<\/h2>\n    <p class=\"kc-intro\">Four steps, all visible.<\/p>\n    <ol class=\"kc-pasos\">\n      <li class=\"kc-paso\">\n        <div class=\"kc-paso-n\">01<\/div>\n        <div><h3>We estimate your buyers and monthly sales<\/h3><p><strong>Traffic \u00d7 ~25% conversion \u00d7 average basket.<\/strong> 25% is a reasonable midpoint between typical in-store conversion benchmarks (apparel 15-25%, grocery\/convenience 40-60%). We don't assume every visitor buys.<\/p><\/div>\n      <\/li>\n      <li class=\"kc-paso\">\n        <div class=\"kc-paso-n\">02<\/div>\n        <div><h3>We start from a 20% ceiling<\/h3><p>McKinsey estimates poor execution can cost up to 20% of potential sales. It's a maximum, not an average: it represents the documented worst case, not what automatically happens to any given store.<\/p><\/div>\n      <\/li>\n      <li class=\"kc-paso\">\n        <div class=\"kc-paso-n\">03<\/div>\n        <div><h3>We only apply a fraction of that ceiling<\/h3><p>Between 1% and 8% of estimated sales, depending on your operational execution level: a store with a clear daily ritual is already close to capturing its full potential (low factor); a store without a consistent system has more room to improve (higher factor), but never the theoretical 20% maximum.<\/p><\/div>\n      <\/li>\n      <li class=\"kc-paso\">\n        <div class=\"kc-paso-n\">04<\/div>\n        <div><h3>We show what's recoverable in 90 days<\/h3><p>25% of the estimated annual impact \u2014 the same conservative criterion we use across all Kepler calculators, so as not to oversell what can be achieved quickly.<\/p><\/div>\n      <\/li>\n    <\/ol>\n  <\/div>\n<\/section>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-30fa20c4 elementor-widget elementor-widget-html\" data-id=\"30fa20c4\" 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<section class=\"kc-sec kc-faq\">\n  <div class=\"kc-wrap\">\n    <div class=\"kc-label\">Frequently asked questions<\/div>\n    <h2>About the calculator and its figures<\/h2>\n    <div class=\"kc-faq-lista\">\n      <details><summary>Where does the 1%-8% range come from?<\/summary><p>It's a conservative fraction of a 20% ceiling McKinsey attributes to poor retail execution (stockouts, late replenishment, inconsistent promo execution). Depending on your operational discipline level, we apply between 1% and 8% of that ceiling \u2014 never the theoretical maximum, to keep the estimate conservative.<\/p><\/details>\n      <details><summary>Why do you apply a 25% conversion rate?<\/summary><p>Because not every store visitor buys. 25% is a reasonable midpoint across industry benchmarks (apparel 15-25%, grocery\/convenience 40-60%, luxury 5-12%). Without this adjustment, the starting sales estimate would be several times higher than reality.<\/p><\/details>\n      <details><summary>Is the result a promise of how much I'll gain?<\/summary><p>No. It's an order-of-magnitude estimate calculated with a transparent formula on the data you enter. It doesn't replace a real diagnosis of your store or guarantee any outcome.<\/p><\/details>\n      <details><summary>Do you store the data I enter?<\/summary><p>No. All calculation happens in your browser; we don't send or store your traffic, average basket, or operational level on any server.<\/p><\/details>\n      <details><summary>Does this work if I manage multiple stores?<\/summary><p>Yes. First calculate the impact for one representative store, then use the optional \"if applied across similar stores\" field on the results screen to scale it to the number of stores you manage.<\/p><\/details>\n    <\/div>\n  <\/div>\n<\/section>\n\n<section class=\"kc-sec kc-cta\">\n  <div class=\"kc-wrap\">\n    <h2>Want to capture that impact?<\/h2>\n    <p>We can structure an operational plan per store (rituals, time-slot focus, and tracking) without changing your current systems.<\/p>\n    <div class=\"kc-cta-botones\">\n      <a class=\"kc-cta-link\" href=\"https:\/\/gamestrategies.io\/en\/demo\/?utm_source=calculadora_kepler&utm_medium=lead_magnet&utm_campaign=retail\">Request a demo \u2192<\/a>\n      <a class=\"kc-cta-link\" href=\"https:\/\/gamestrategies.io\/en\/sales-incentive-kepler\/\">Discover Kepler \u2192<\/a>\n    <\/div>\n  <\/div>\n<\/section>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-00f69cf1 elementor-widget elementor-widget-html\" data-id=\"00f69cf1\" 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<script>currentLang='en'; if(typeof applyTranslations==='function') applyTranslations(); var sel=document.getElementById('langSelect'); if(sel) sel.value='en';<\/script>\t\t\t\t<\/div>\n\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>Kepler Impacto Operativo en Retail 100% gratuita Resultados inmediatos Por tienda Idioma ESFREN Calculadora de Impacto Operativo (por tienda) Estima en menos de 3 minutos cu\u00e1nto ingreso podr\u00eda capturar una tienda con peque\u00f1as mejoras de ejecuci\u00f3n operativa. Qu\u00e9 vas a obtener \ud83d\udcb8 Impacto anual potencial (esta tienda) \ud83d\ude80 Recuperable en 90 d\u00edas (estimaci\u00f3n) \u23f1 Horas [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":156761,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-156743","page","type-page","status-publish","has-post-thumbnail","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Calculadora de Impacto Operativo en Retail | Kepler<\/title>\n<meta name=\"description\" content=\"Estima en 3 minutos cu\u00e1nto ingreso podr\u00eda capturar tu tienda con peque\u00f1as mejoras de ejecuci\u00f3n operativa. Calculadora gratuita, sin registro.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/gamestrategies.io\/en\/calculadora-kepler-retail\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Calculadora de Impacto Operativo en Retail | Kepler\" \/>\n<meta property=\"og:description\" content=\"Estima en 3 minutos cu\u00e1nto ingreso podr\u00eda capturar tu tienda con peque\u00f1as mejoras de ejecuci\u00f3n operativa. Calculadora gratuita, sin registro.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/gamestrategies.io\/en\/calculadora-kepler-retail\/\" \/>\n<meta property=\"og:site_name\" content=\"Game Strategies\" \/>\n<meta property=\"article:modified_time\" content=\"2026-09-04T09:16:28+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/gamestrategies.io\/wp-content\/uploads\/2026\/09\/kepler-calculator-og-image.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"675\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"11 minutes\" \/>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Calculadora de Impacto Operativo en Retail | Kepler","description":"Estima en 3 minutos cu\u00e1nto ingreso podr\u00eda capturar tu tienda con peque\u00f1as mejoras de ejecuci\u00f3n operativa. Calculadora gratuita, sin registro.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/gamestrategies.io\/en\/calculadora-kepler-retail\/","og_locale":"en_US","og_type":"article","og_title":"Calculadora de Impacto Operativo en Retail | Kepler","og_description":"Estima en 3 minutos cu\u00e1nto ingreso podr\u00eda capturar tu tienda con peque\u00f1as mejoras de ejecuci\u00f3n operativa. Calculadora gratuita, sin registro.","og_url":"https:\/\/gamestrategies.io\/en\/calculadora-kepler-retail\/","og_site_name":"Game Strategies","article_modified_time":"2026-09-04T09:16:28+00:00","og_image":[{"width":1200,"height":675,"url":"https:\/\/gamestrategies.io\/wp-content\/uploads\/2026\/09\/kepler-calculator-og-image.jpg","type":"image\/jpeg"}],"twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"11 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/gamestrategies.io\/en\/calculadora-kepler-retail\/","url":"https:\/\/gamestrategies.io\/en\/calculadora-kepler-retail\/","name":"Calculadora de Impacto Operativo en Retail | Kepler","isPartOf":{"@id":"https:\/\/gamestrategies.io\/en\/#website"},"primaryImageOfPage":{"@id":"https:\/\/gamestrategies.io\/en\/calculadora-kepler-retail\/#primaryimage"},"image":{"@id":"https:\/\/gamestrategies.io\/en\/calculadora-kepler-retail\/#primaryimage"},"thumbnailUrl":"https:\/\/gamestrategies.io\/wp-content\/uploads\/2026\/09\/kepler-calculator-og-image.jpg","datePublished":"2026-09-03T12:57:25+00:00","dateModified":"2026-09-04T09:16:28+00:00","description":"Estima en 3 minutos cu\u00e1nto ingreso podr\u00eda capturar tu tienda con peque\u00f1as mejoras de ejecuci\u00f3n operativa. Calculadora gratuita, sin registro.","breadcrumb":{"@id":"https:\/\/gamestrategies.io\/en\/calculadora-kepler-retail\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/gamestrategies.io\/en\/calculadora-kepler-retail\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/gamestrategies.io\/en\/calculadora-kepler-retail\/#primaryimage","url":"https:\/\/gamestrategies.io\/wp-content\/uploads\/2026\/09\/kepler-calculator-og-image.jpg","contentUrl":"https:\/\/gamestrategies.io\/wp-content\/uploads\/2026\/09\/kepler-calculator-og-image.jpg","width":1200,"height":675,"caption":"Kepler calculator dashboard mockup showing estimated impact figures on a dark SaaS-style background"},{"@type":"BreadcrumbList","@id":"https:\/\/gamestrategies.io\/en\/calculadora-kepler-retail\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Inicio","item":"https:\/\/gamestrategies.io\/en\/"},{"@type":"ListItem","position":2,"name":"Calculadora de Impacto Operativo en Retail | Kepler"}]},{"@type":"WebSite","@id":"https:\/\/gamestrategies.io\/en\/#website","url":"https:\/\/gamestrategies.io\/en\/","name":"Game Strategies","description":"","publisher":{"@id":"https:\/\/gamestrategies.io\/en\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/gamestrategies.io\/en\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/gamestrategies.io\/en\/#organization","name":"Game Strategies","url":"https:\/\/gamestrategies.io\/en\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/gamestrategies.io\/en\/#\/schema\/logo\/image\/","url":"https:\/\/gamestrategies.io\/wp-content\/uploads\/2026\/09\/Logo-GS-fondo-blanco.png","contentUrl":"https:\/\/gamestrategies.io\/wp-content\/uploads\/2026\/09\/Logo-GS-fondo-blanco.png","width":1600,"height":900,"caption":"Game Strategies"},"image":{"@id":"https:\/\/gamestrategies.io\/en\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.linkedin.com\/company\/gamestrategies\/","https:\/\/www.youtube.com\/@Game_strategies","https:\/\/open.spotify.com\/show\/5qmIIai3pkfl7AbW4MbRQG?si=8937886304024047&nd=1&dlsi=ac8d8434702f424c"]}]}},"_links":{"self":[{"href":"https:\/\/gamestrategies.io\/en\/wp-json\/wp\/v2\/pages\/156743","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/gamestrategies.io\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/gamestrategies.io\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/gamestrategies.io\/en\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/gamestrategies.io\/en\/wp-json\/wp\/v2\/comments?post=156743"}],"version-history":[{"count":7,"href":"https:\/\/gamestrategies.io\/en\/wp-json\/wp\/v2\/pages\/156743\/revisions"}],"predecessor-version":[{"id":156820,"href":"https:\/\/gamestrategies.io\/en\/wp-json\/wp\/v2\/pages\/156743\/revisions\/156820"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/gamestrategies.io\/en\/wp-json\/wp\/v2\/media\/156761"}],"wp:attachment":[{"href":"https:\/\/gamestrategies.io\/en\/wp-json\/wp\/v2\/media?parent=156743"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}