{"id":9124,"date":"2025-07-03T22:21:45","date_gmt":"2025-07-03T22:21:45","guid":{"rendered":"https:\/\/unlockhere.com\/es-mx\/?page_id=9124"},"modified":"2026-01-06T22:14:46","modified_gmt":"2026-01-06T22:14:46","slug":"esim-gratis","status":"publish","type":"page","link":"https:\/\/unlockhere.com\/es-mx\/esim-gratis\/","title":{"rendered":"Obtener eSIM Gratis en el Operador de tu Elecci\u00f3n"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"9124\" class=\"elementor elementor-9124\" data-elementor-post-type=\"page\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-76db9cc elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"76db9cc\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-f0aaaf3\" data-id=\"f0aaaf3\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2aae528 elementor-widget elementor-widget-html\" data-id=\"2aae528\" 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    \/* \n     * Los estilos est\u00e1n adaptados a este componente con un ID \u00fanico para evitar conflictos.\n     * El componente es compatible con dispositivos m\u00f3viles y se adaptar\u00e1 al dise\u00f1o de su sitio.\n    *\/\n    #eg-visual-update-alert {\n        display: flex;\n        align-items: center;\n        padding: 12px 16px;\n        border-radius: 8px;\n        background-color: #eef7ff;\n        color: #1d4ed8;\n        font-size: 14px;\n        line-height: 1.5;\n        border: 1px solid #dbeafe;\n        margin: 16px 0;\n        \/* La familia de fuentes se hereda de su sitio web para una integraci\u00f3n perfecta. *\/\n    }\n\n    #eg-visual-update-alert .eg-alert-icon {\n        flex-shrink: 0;\n        margin-right: 12px;\n        width: 20px;\n        height: 20px;\n        fill: currentColor;\n    }\n\n    #eg-visual-update-alert .eg-alert-message {\n        margin: 0;\n        padding: 0;\n        font-weight: 500;\n    }\n<\/style>\n<div id=\"eg-visual-update-alert\">\n    <!-- Icono de informaci\u00f3n SVG -->\n    <svg class=\"eg-alert-icon\" viewBox=\"0 0 20 20\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n        <path fill-rule=\"evenodd\" d=\"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a1 1 0 000 2v3a1 1 0 001 1h1a1 1 0 100-2v-3a1 1 0 00-1-1H9z\" clip-rule=\"evenodd\"><\/path>\n    <\/svg>\n    \n    <!-- Mensaje de alerta -->\n    <p class=\"eg-alert-message\">\n        Hemos renovado nuestro dise\u00f1o para hacer todo m\u00e1s simple. Las funciones principales que ya conoces no han cambiado.\n    <\/p>\n<\/div> \t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-280e16c elementor-widget elementor-widget-html\" data-id=\"280e16c\" 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 id=\"esim-page-container\">\n    <!-- External Dependencies -->\n    <script src=\"https:\/\/cdn.tailwindcss.com\"><\/script>\n    <link rel=\"stylesheet\" href=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/font-awesome\/6.4.0\/css\/all.min.css\">\n    <script src=\"https:\/\/cdn.jsdelivr.net\/npm\/sweetalert2@11\"><\/script>\n    \n    <style>\n        \/* Global Scoped Styles *\/\n        #esim-page-container {\n            font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;\n            background-color: transparent;\n            color: #343a40;\n            line-height: 1.7;\n            padding: 2rem 1rem;\n            -webkit-font-smoothing: antialiased;\n            -moz-osx-font-smoothing: grayscale;\n        }\n\n        #esim-page-container main > section {\n            max-width: 1100px;\n            margin: 0 auto 2.5rem auto;\n            background-color: #ffffff;\n            border-radius: 16px;\n            padding: 2.5rem;\n            box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);\n            border: 1px solid #e9ecef;\n        }\n\n        #esim-page-container h1, #esim-page-container h2, #esim-page-container h3, #esim-page-container h4 {\n            font-weight: 700 !important;\n            color: #212529 !important;\n            line-height: 1.3;\n            margin-top: 0;\n        }\n\n        #esim-page-container h2 {\n            font-size: 2.25rem;\n            margin-bottom: 1.5rem;\n            text-align: center;\n        }\n\n        #esim-page-container h3 {\n            font-size: 1.5rem;\n            margin-bottom: 1rem;\n        }\n\n        #esim-page-container p {\n            margin-bottom: 1rem;\n            font-size: 1.05rem;\n            color: #495057;\n        }\n\n        #esim-page-container a {\n            color: #3b82f6;\n            text-decoration: none;\n            font-weight: 600;\n            transition: color 0.3s ease;\n        }\n\n        #esim-page-container a:hover {\n            color: #2563eb;\n            text-decoration: underline;\n        }\n\n        #esim-page-container img {\n            max-width: 100%;\n            height: auto;\n            border-radius: 12px;\n            box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);\n        }\n\n        \/* Mobile image optimization *\/\n        @media (max-width: 768px) {\n            #esim-page-container img {\n                border-radius: 8px;\n                box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);\n                margin: 0.5rem 0;\n            }\n        }\n\n        #esim-page-container .grid-2-col {\n            display: grid;\n            grid-template-columns: 1fr 1fr;\n            gap: 2.5rem;\n            align-items: center;\n        }\n\n        #esim-page-container .grid-3-col {\n            display: grid;\n            grid-template-columns: 1fr 1fr 1fr;\n            gap: 1.5rem;\n        }\n\n        #esim-page-container .custom-card {\n            background-color: #ffffff;\n            padding: 1.5rem;\n            border-radius: 12px;\n            border: 1px solid #e9ecef;\n            height: 100%;\n            color: #343a40;\n        }\n\n        #esim-page-container .benefit-card {\n            text-align: center;\n            padding: 2rem;\n        }\n        #esim-page-container .benefit-card .icon {\n            font-size: 2.5rem;\n            margin-bottom: 1rem;\n            color: #3b82f6;\n        }\n\n        #esim-page-container .compatibility-card h3 .icon {\n            font-size: 1.5rem;\n            color: #3b82f6;\n            margin-right: 0.5rem;\n            vertical-align: middle;\n        }\n        #esim-page-container .compatibility-card ul {\n            list-style: none;\n            padding: 0;\n            margin-top: 1rem;\n        }\n        #esim-page-container .compatibility-card li {\n            background-color: #f0f4ff;\n            padding: 0.75rem 1rem;\n            border-radius: 8px;\n            margin-bottom: 0.5rem;\n            border-left: 3px solid #3b82f6;\n        }\n\n        #esim-page-container .tutorial-step {\n            display: flex;\n            align-items: flex-start;\n            gap: 1.5rem;\n            margin-bottom: 2rem;\n            position: relative;\n        }\n        #esim-page-container .tutorial-step .step-number {\n            font-size: 1.5rem;\n            font-weight: 700;\n            color: #3b82f6;\n            background-color: #e0e7ff;\n            border-radius: 50%;\n            width: 50px;\n            height: 50px;\n            display: inline-flex;\n            align-items: center;\n            justify-content: center;\n            flex-shrink: 0;\n        }\n         #esim-page-container .tutorial-step:not(:last-child)::after {\n            content: '';\n            position: absolute;\n            left: 24px;\n            top: 50px;\n            bottom: -2rem;\n            width: 2px;\n            background-color: #e0e7ff;\n        }\n\n\n        #esim-page-container details {\n            background-color: #ffffff;\n            border: 1px solid #e9ecef;\n            border-radius: 12px;\n            margin-bottom: 1rem;\n            box-shadow: 0 2px 4px rgba(0,0,0,0.03);\n            transition: background-color 0.2s ease;\n        }\n        #esim-page-container details:hover {\n            background-color: #f8f9fa;\n        }\n        #esim-page-container summary {\n            font-weight: 600;\n            font-size: 1.1rem;\n            padding: 1.5rem;\n            cursor: pointer;\n            list-style: none;\n            display: flex;\n            justify-content: space-between;\n            align-items: center;\n        }\n        #esim-page-container summary::-webkit-details-marker { display: none; }\n        #esim-page-container summary::after {\n            content: '+';\n            font-size: 1.5rem;\n            font-weight: 400;\n            transition: transform 0.3s ease;\n        }\n        #esim-page-container details[open] summary {\n            color: #3b82f6;\n        }\n         #esim-page-container details[open] summary::after {\n            transform: rotate(45deg);\n        }\n        #esim-page-container .faq-answer {\n            padding: 0 1.5rem 1.5rem 1.5rem;\n        }\n        #esim-page-container .faq-answer p {\n             margin-bottom: 0;\n        }\n\n        #esim-page-container .cta-section {\n            background: linear-gradient(135deg, #1e3a8a 0%, #3b82f6 100%);\n            color: white !important;\n            text-align: center;\n        }\n        #esim-page-container .cta-section h2, #esim-page-container .cta-section p {\n            color: white !important;\n        }\n        #esim-page-container .cta-button {\n            background-color: white;\n            color: #1e3a8a;\n            padding: 1rem 2.5rem;\n            border-radius: 50px;\n            font-weight: 700;\n            font-size: 1.1rem;\n            display: inline-block;\n            margin-top: 1.5rem;\n            box-shadow: 0 8px 20px rgba(0,0,0,0.2);\n            transition: transform 0.3s ease, box-shadow 0.3s ease;\n        }\n        #esim-page-container .cta-button:hover {\n            transform: translateY(-3px);\n            box-shadow: 0 12px 30px rgba(0,0,0,0.3);\n            text-decoration: none;\n        }\n        \n        \/* Responsive Overrides *\/\n        @media (max-width: 900px) {\n            #esim-page-container {\n                padding: 1rem 0.5rem;\n            }\n            #esim-page-container main > section {\n                padding: 1.5rem 1rem;\n                margin: 0 auto 1.5rem auto;\n            }\n            #esim-page-container h2 { \n                font-size: 1.8rem; \n                margin-bottom: 1rem;\n            }\n            #esim-page-container h3 { \n                font-size: 1.3rem; \n                margin-bottom: 0.75rem;\n            }\n            #esim-page-container p {\n                font-size: 1rem;\n                line-height: 1.6;\n            }\n            #esim-page-container .grid-2-col, #esim-page-container .grid-3-col {\n                grid-template-columns: 1fr;\n                gap: 1.5rem;\n            }\n            #esim-page-container .tutorial-step:not(:last-child)::after {\n                left: 24px;\n            }\n            #esim-page-container .tutorial-step {\n                gap: 1rem;\n                margin-bottom: 1.5rem;\n            }\n            #esim-page-container .benefit-card {\n                padding: 1.5rem;\n            }\n            #esim-page-container .benefit-card .icon {\n                font-size: 2rem;\n            }\n            #esim-page-container .custom-card {\n                padding: 1.25rem;\n            }\n        }\n\n        \/* Enhanced Mobile Optimization *\/\n        @media (max-width: 768px) {\n            #esim-page-container {\n                padding: 0.75rem 0.25rem;\n                line-height: 1.6;\n            }\n            \n            #esim-page-container main > section {\n                padding: 1.25rem 0.875rem;\n                margin: 0 auto 1.25rem auto;\n                border-radius: 12px;\n            }\n            \n            #esim-page-container h2 { \n                font-size: 1.6rem; \n                margin-bottom: 1rem;\n                line-height: 1.2;\n            }\n            \n            #esim-page-container h3 { \n                font-size: 1.2rem; \n                margin-bottom: 0.75rem;\n                line-height: 1.3;\n            }\n            \n            #esim-page-container h4 {\n                font-size: 1.1rem;\n                margin-bottom: 0.5rem;\n            }\n            \n            #esim-page-container p {\n                font-size: 0.95rem;\n                line-height: 1.6;\n                margin-bottom: 0.875rem;\n            }\n            \n            \/* Better touch targets *\/\n            #esim-page-container a {\n                min-height: 44px;\n                display: inline-flex;\n                align-items: center;\n                padding: 0.25rem 0;\n            }\n            \n            \/* Tutorial steps mobile optimization *\/\n            #esim-page-container .tutorial-step {\n                flex-direction: column;\n                text-align: center;\n                gap: 0.75rem;\n                margin-bottom: 2rem;\n                position: relative;\n            }\n            \n            #esim-page-container .tutorial-step .step-number {\n                align-self: center;\n                margin-bottom: 0.5rem;\n            }\n            \n            #esim-page-container .tutorial-step:not(:last-child)::after {\n                left: 50%;\n                transform: translateX(-50%);\n                top: auto;\n                bottom: -1.5rem;\n                height: 1rem;\n                width: 2px;\n            }\n            \n            \/* Cards mobile optimization *\/\n            #esim-page-container .benefit-card {\n                padding: 1.25rem 1rem;\n            }\n            \n            #esim-page-container .benefit-card .icon {\n                font-size: 1.8rem;\n                margin-bottom: 0.75rem;\n            }\n            \n            #esim-page-container .custom-card {\n                padding: 1rem;\n            }\n            \n            \/* Compatibility cards *\/\n            #esim-page-container .compatibility-card ul {\n                margin-top: 0.75rem;\n            }\n            \n            #esim-page-container .compatibility-card li {\n                padding: 0.625rem 0.875rem;\n                font-size: 0.9rem;\n                margin-bottom: 0.375rem;\n            }\n            \n            \/* FAQ mobile optimization *\/\n            #esim-page-container summary {\n                padding: 1.25rem 1rem;\n                font-size: 1rem;\n            }\n            \n            #esim-page-container .faq-answer {\n                padding: 0 1rem 1.25rem 1rem;\n            }\n            \n            #esim-page-container .faq-answer p {\n                font-size: 0.9rem;\n            }\n            \n            \/* CTA section mobile *\/\n            #esim-page-container .cta-section {\n                padding: 2rem 1rem;\n            }\n            \n            #esim-page-container .cta-button {\n                padding: 0.875rem 2rem;\n                font-size: 1rem;\n                margin-top: 1.25rem;\n                min-height: 48px;\n                border-radius: 25px;\n            }\n        }\n\n        \/* Small mobile devices *\/\n        @media (max-width: 480px) {\n            #esim-page-container {\n                padding: 0.5rem 0.125rem;\n            }\n            \n            #esim-page-container main > section {\n                padding: 1rem 0.75rem;\n                margin: 0 auto 1rem auto;\n            }\n            \n            #esim-page-container h2 { \n                font-size: 1.4rem; \n                margin-bottom: 0.875rem;\n            }\n            \n            #esim-page-container h3 { \n                font-size: 1.1rem; \n                margin-bottom: 0.625rem;\n            }\n            \n            #esim-page-container p {\n                font-size: 0.9rem;\n                line-height: 1.5;\n            }\n            \n            #esim-page-container .benefit-card {\n                padding: 1rem 0.75rem;\n            }\n            \n            #esim-page-container .custom-card {\n                padding: 0.875rem;\n            }\n            \n            #esim-page-container .tutorial-step .step-number {\n                width: 40px;\n                height: 40px;\n                font-size: 1.25rem;\n            }\n            \n            #esim-page-container .cta-section {\n                padding: 1.5rem 0.75rem;\n            }\n            \n            #esim-page-container summary {\n                padding: 1rem 0.875rem;\n                font-size: 0.95rem;\n            }\n            \n            #esim-page-container .faq-answer {\n                padding: 0 0.875rem 1rem 0.875rem;\n            }\n            \n            \/* Enhanced touch targets for mobile *\/\n            #esim-page-container details {\n                margin-bottom: 0.875rem;\n            }\n            \n            #esim-page-container summary::after {\n                font-size: 1.25rem;\n                margin-left: 0.5rem;\n            }\n            \n            \/* Better mobile spacing for text blocks *\/\n            #esim-page-container section p:last-child {\n                margin-bottom: 0;\n            }\n            \n            #esim-page-container .grid-2-col > div,\n            #esim-page-container .grid-3-col > div {\n                margin-bottom: 0.5rem;\n            }\n        }\n    <\/style>\n    \n    <main>\n        <section id=\"esim-form-section\">\n            <!-- START: eSIM Form, DO NOT EDIT THIS BLOCK -->\n<div class=\"elementor-widget-container\">\n<!-- eSIM Free Trial Form - Professional Apple-Themed Design -->\n<script src=\"https:\/\/cdn.tailwindcss.com\"><\/script>\n<link rel=\"stylesheet\" href=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/font-awesome\/6.4.0\/css\/all.min.css\">\n<script src=\"https:\/\/cdn.jsdelivr.net\/npm\/sweetalert2@11\"><\/script>\n<style>\n\/* Professional eSIM Form - WordPress Compatible - Scoped Styles *\/\n.esimforms-container {\nfont-family: -apple-system, BlinkMacSystemFont, 'SF Pro Display', 'Inter', 'Segoe UI', Roboto, sans-serif;\npadding: 1rem;\nbox-sizing: border-box;\nbackground: transparent !important;\n\/* Isolate this component from the rest of the page *\/\nisolation: isolate;\ncontain: layout style;\n}\n\n.esimforms-container *,\n.esimforms-container *::before,\n.esimforms-container *::after {\nbox-sizing: border-box;\n}\n\n.esimforms-header-banner {\nbackground: linear-gradient(135deg, #1e3a8a 0%, #3b82f6 100%);\ncolor: white;\npadding: 1.5rem;\nborder-radius: 16px 16px 0 0;\ntext-align: center;\nmargin: -2rem -2rem 2rem -2rem;\n}\n\n.esimforms-container .esimforms-header-title {\nfont-size: 1.5rem;\nfont-weight: 700;\nmargin-bottom: 0.5rem;\nmargin-top: 0;\ndisplay: flex;\nalign-items: center;\njustify-content: center;\ngap: 0.75rem;\ncolor: white !important;\ntext-decoration: none;\nline-height: 1.2;\n}\n\n.esimforms-container .esimforms-header-title,\n.esimforms-container .esimforms-header-title * {\ncolor: white !important;\n}\n\n.esimforms-container .esimforms-header-subtitle {\ndisplay: flex;\nalign-items: center;\njustify-content: center;\ngap: 2rem;\nfont-size: 0.9rem;\nopacity: 0.9;\ncolor: white !important;\ntext-decoration: none;\n}\n\n.esimforms-container .esimforms-header-item {\ndisplay: flex;\nalign-items: center;\ngap: 0.5rem;\ncolor: white !important;\ntext-decoration: none;\n}\n\n.esimforms-form-wrapper {\nmax-width: 800px;\nmargin: 0 auto;\nbackground: white;\nborder-radius: 16px;\nbox-shadow: 0 10px 40px rgba(0, 0, 0, 0.12);\npadding: 2rem;\nborder: 1px solid #e5e7eb;\nposition: relative;\noverflow: hidden;\n}\n\n.esimforms-form-wrapper::before {\ncontent: '';\nposition: absolute;\ntop: 0;\nleft: 0;\nright: 0;\nheight: 4px;\nbackground: linear-gradient(90deg, #3b82f6 0%, #60a5fa 50%, #3b82f6 100%);\nanimation: esimforms-shimmer 2s ease-in-out infinite;\n}\n\n@keyframes esimforms-shimmer {\n                        0% {\n                            transform: translateX(-100%);\n                        }\n                        100% {\n                            transform: translateX(100%);\n                        }\n}\n\n.esimforms-progress-bar {\nbackground: #e5e7eb;\nheight: 8px;\nborder-radius: 4px;\noverflow: hidden;\nmargin-bottom: 2rem;\n}\n\n.esimforms-progress-fill {\nbackground: linear-gradient(90deg, #3b82f6 0%, #60a5fa 100%);\nheight: 100%;\nborder-radius: 4px;\ntransition: width 0.6s ease;\nbox-shadow: 0 2px 8px rgba(59, 130, 246, 0.3);\n}\n\n.esimforms-step {\ndisplay: none;\nopacity: 0;\ntransition: opacity 0.4s ease-in-out;\n}\n\n.esimforms-step.active {\ndisplay: block;\n}\n\n.esimforms-step.is-visible {\nopacity: 1;\n}\n\n.esimforms-step-content {\ntext-align: center;\nmargin-bottom: 2rem;\n}\n\n.esimforms-container .esimforms-step-title {\nfont-size: 1.75rem;\nfont-weight: 700;\ncolor: #1f2937;\nmargin-bottom: 0.75rem;\nline-height: 1.2;\nmargin-top: 0;\n}\n\n.esimforms-step-subtitle {\nfont-size: 1rem;\ncolor: #6b7280;\nfont-weight: 400;\nmargin-bottom: 1.5rem;\n}\n\n.esimforms-plan-grid {\ndisplay: grid;\ngrid-template-columns: repeat(3, 1fr);\ngap: 1rem;\nmargin: 2rem 0;\n}\n\n.esimforms-plan-card {\nbackground: white;\nborder: 2px solid #e5e7eb;\nborder-radius: 16px;\npadding: 2rem 1rem;\ntext-align: center;\ncursor: pointer;\ntransition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);\nposition: relative;\noverflow: hidden;\n}\n\n.esimforms-plan-card::before {\ncontent: '';\nposition: absolute;\ntop: 0;\nleft: 0;\nright: 0;\nbottom: 0;\nbackground: linear-gradient(135deg, #3b82f6 0%, #60a5fa 100%);\nopacity: 0;\ntransition: opacity 0.3s ease;\n}\n\n.esimforms-plan-card:hover {\ntransform: translateY(-8px) scale(1.02);\nbox-shadow: 0 20px 40px rgba(0, 0, 0, 0.15);\nborder-color: #3b82f6;\n}\n\n.esimforms-plan-card.selected {\nborder-color: #3b82f6;\nbackground: #eff6ff;\n}\n\n.esimforms-plan-card.selected::before {\nopacity: 0.08;\n}\n\n.esimforms-plan-icon {\nwidth: 80px;\nheight: 80px;\nmargin: 0 auto 1rem;\ndisplay: flex;\nalign-items: center;\njustify-content: center;\nfont-size: 3rem;\ncolor: #6b7280;\ntransition: all 0.3s ease;\n}\n\n.esimforms-plan-card:hover .esimforms-plan-icon,\n.esimforms-plan-card.selected .esimforms-plan-icon {\ncolor: #3b82f6;\ntransform: scale(1.1);\n}\n\n.esimforms-plan-title {\nfont-size: 1.1rem;\nfont-weight: 600;\ncolor: #1f2937;\nmargin-bottom: 0.5rem;\n}\n\n.esimforms-plan-subtitle {\nfont-size: 0.875rem;\ncolor: #6b7280;\nline-height: 1.4;\n}\n\n.esimforms-plan-badge {\nposition: absolute;\ntop: 1rem;\nright: 1rem;\nbackground: #3b82f6;\ncolor: white;\npadding: 0.25rem 0.75rem;\nborder-radius: 20px;\nfont-size: 0.75rem;\nfont-weight: 600;\n}\n\n.esimforms-options-grid {\ndisplay: grid;\ngrid-template-columns: repeat(auto-fit, minmax(250px, 1fr));\ngap: 1rem;\nmargin: 2rem 0;\n}\n\n.esimforms-option-card {\nbackground: white;\nborder: 2px solid #e5e7eb;\nborder-radius: 12px;\npadding: 1.5rem;\ncursor: pointer;\ntransition: all 0.3s ease;\ntext-align: center;\n}\n\n.esimforms-option-card:hover {\nborder-color: #3b82f6;\ntransform: translateY(-4px);\nbox-shadow: 0 10px 25px rgba(0, 0, 0, 0.1);\n}\n\n.esimforms-option-card.selected {\nborder-color: #3b82f6;\nbackground: #eff6ff;\nbox-shadow: 0 8px 20px rgba(59, 130, 246, 0.2);\n}\n\n.esimforms-option-card.selected .esimforms-option-title {\ncolor: #3b82f6;\n}\n\n.esimforms-option-title {\nfont-size: 1.1rem;\nfont-weight: 600;\ncolor: #1f2937;\nmargin-bottom: 0.5rem;\ndisplay: flex;\nalign-items: center;\njustify-content: center;\ngap: 0.75rem;\n}\n\n.esimforms-option-subtitle {\nfont-size: 0.875rem;\ncolor: #6b7280;\n}\n\n.esimforms-form-group {\nmargin-bottom: 1.5rem;\n}\n\n.esimforms-label {\ndisplay: block;\nfont-size: 0.95rem;\nfont-weight: 600;\ncolor: #374151;\nmargin-bottom: 0.5rem;\ntext-align: left;\n}\n\n.esimforms-input {\nwidth: 100%;\npadding: 0.875rem 1rem;\nborder: 2px solid #e5e7eb;\nborder-radius: 12px;\nfont-size: 1rem;\nbackground: white;\ntransition: all 0.3s ease;\nfont-family: inherit;\n}\n\n.esimforms-input:focus {\noutline: none;\nborder-color: #3b82f6;\nbox-shadow: 0 0 0 4px rgba(59, 130, 246, 0.1);\ntransform: translateY(-1px);\n}\n\n.esimforms-input.error {\nborder-color: #ef4444;\nbox-shadow: 0 0 0 4px rgba(239, 68, 68, 0.1);\n}\n\n.esimforms-selection-summary {\nbackground: #f8fbff;\nborder: 2px solid #e3f2fd;\nborder-radius: 12px;\npadding: 1.5rem;\nmargin-bottom: 2rem;\ntext-align: center;\nfont-size: 1rem;\ncolor: #1f2937;\n}\n\n.esimforms-navigation {\ndisplay: flex;\njustify-content: space-between;\nalign-items: center;\nmargin-top: 2rem;\npadding-top: 1.5rem;\nborder-top: 1px solid #e5e7eb;\n}\n\n.esimforms-btn {\npadding: 0.875rem 2rem;\nborder-radius: 12px;\nfont-size: 1rem;\nfont-weight: 600;\nborder: none;\ncursor: pointer;\ntransition: all 0.3s ease;\ndisplay: inline-flex;\nalign-items: center;\ngap: 0.5rem;\nmin-width: 140px;\njustify-content: center;\n}\n\n.esimforms-btn-primary {\nbackground: linear-gradient(135deg, #3b82f6, #2563eb);\ncolor: white;\nbox-shadow: 0 8px 20px rgba(59, 130, 246, 0.25);\n}\n\n.esimforms-btn-primary:hover {\ntransform: translateY(-2px);\nbox-shadow: 0 12px 28px rgba(59, 130, 246, 0.35);\n}\n\n.esimforms-btn-secondary {\nbackground: #f3f4f6;\ncolor: #374151;\nborder: 1px solid #d1d5db;\n}\n\n.esimforms-btn-secondary:hover {\nbackground: #e5e7eb;\ntransform: translateY(-1px);\n}\n\n.esimforms-btn:disabled {\nopacity: 0.6;\ncursor: not-allowed;\ntransform: none !important;\n}\n\n\/* Enhanced Membership Section *\/\n.esimforms-container .esimforms-membership-section {\nbackground: linear-gradient(135deg, #1e3a8a 0%, #3b82f6 100%);\nborder-radius: 16px;\npadding: 2.5rem;\nmargin: 2rem 0;\ncolor: white;\ntext-align: center;\nposition: relative;\noverflow: hidden;\n}\n\n.esimforms-membership-section::before {\ncontent: '';\nposition: absolute;\ntop: -50%;\nright: -50%;\nwidth: 200%;\nheight: 200%;\n                        background: radial-gradient(circle, rgba(255, 255, 255, 0.1) 0%, transparent 70%);\nanimation: esimforms-rotate 20s linear infinite;\n}\n\n@keyframes esimforms-rotate {\n                        from {\n                            transform: rotate(0deg);\n                        }\n                        to {\n                            transform: rotate(360deg);\n                        }\n}\n\n.esimforms-membership-content {\nposition: relative;\nz-index: 1;\n}\n\n.esimforms-container .esimforms-membership-title {\nfont-size: 2rem;\nfont-weight: 700;\nmargin-bottom: 1rem;\nmargin-top: 0;\n                        text-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\ncolor: white !important;\n}\n\n.esimforms-container .esimforms-membership-subtitle {\nfont-size: 1.1rem;\nmargin-bottom: 2rem;\nopacity: 0.9;\ncolor: white !important;\n}\n\n.esimforms-benefits-grid {\ndisplay: grid;\ngrid-template-columns: repeat(2, 1fr);\ngap: 1rem;\nmargin-bottom: 2rem;\ntext-align: left;\n}\n\n.esimforms-benefit-item {\nbackground: rgba(255, 255, 255, 0.1);\nbackdrop-filter: blur(10px);\nborder-radius: 12px;\npadding: 1rem;\ndisplay: flex;\nalign-items: center;\ngap: 0.75rem;\nborder: 1px solid rgba(255, 255, 255, 0.2);\ntransition: all 0.3s ease;\n}\n\n.esimforms-benefit-item:hover {\nbackground: rgba(255, 255, 255, 0.15);\ntransform: translateY(-2px);\n}\n\n.esimforms-container .esimforms-benefit-icon {\nbackground: rgba(255, 255, 255, 0.2);\nwidth: 40px;\nheight: 40px;\nborder-radius: 10px;\ndisplay: flex;\nalign-items: center;\njustify-content: center;\nfont-size: 1.2rem;\ncolor: white;\n}\n\n.esimforms-container .esimforms-benefit-text {\nflex: 1;\n}\n\n.esimforms-container .esimforms-benefit-title {\nfont-weight: 600;\nfont-size: 0.95rem;\nmargin-bottom: 0.25rem;\ncolor: white;\n}\n\n.esimforms-container .esimforms-benefit-desc {\nfont-size: 0.8rem;\nopacity: 0.8;\ncolor: white;\n}\n\n.esimforms-membership-button {\nbackground: white;\ncolor: #1e3a8a;\npadding: 1rem 2.5rem;\nborder-radius: 12px;\nborder: none;\nfont-weight: 700;\nfont-size: 1.1rem;\ncursor: pointer;\ntransition: all 0.3s ease;\ntext-decoration: none;\ndisplay: inline-block;\nmargin-bottom: 1.5rem;\n                        box-shadow: 0 8px 20px rgba(0, 0, 0, 0.2);\n}\n\n.esimforms-membership-button:hover {\ntransform: translateY(-3px) scale(1.05);\n                        box-shadow: 0 12px 30px rgba(0, 0, 0, 0.3);\n}\n\n.esimforms-code-section {\nborder-top: 1px solid rgba(255, 255, 255, 0.2);\npadding-top: 1.5rem;\nmargin-top: 1.5rem;\ntext-align: center;\n}\n\n.esimforms-container .esimforms-code-title {\nfont-size: 1rem;\nfont-weight: 600;\nmargin-bottom: 1rem;\ncolor: white;\n}\n\n.esimforms-container .esimforms-code-input {\nwidth: 100%;\nmax-width: 350px;\npadding: 0.875rem 1rem;\nborder: 2px solid rgba(255, 255, 255, 0.3);\nborder-radius: 12px;\nfont-size: 1rem;\nmargin: 0 auto 1rem auto;\ntext-align: center;\nfont-family: 'Courier New', monospace;\nletter-spacing: 2px;\nbackground: rgba(255, 255, 255, 0.1);\ncolor: white;\nbackdrop-filter: blur(10px);\ndisplay: block;\n}\n\n.esimforms-container .esimforms-code-input::placeholder {\ncolor: rgba(255, 255, 255, 0.6);\n}\n\n.esimforms-container .esimforms-code-input:focus {\noutline: none;\nborder-color: white;\nbox-shadow: 0 0 0 4px rgba(255, 255, 255, 0.2);\nbackground: rgba(255, 255, 255, 0.15);\n}\n\n.esimforms-code-submit {\nbackground: rgba(255, 255, 255, 0.2);\ncolor: white;\npadding: 0.875rem 2rem;\nborder-radius: 12px;\nborder: 2px solid white;\nfont-weight: 600;\ncursor: pointer;\ntransition: all 0.3s ease;\n}\n\n.esimforms-code-submit:hover {\nbackground: white;\ncolor: #1e3a8a;\ntransform: translateY(-2px);\n}\n\n.esimforms-error-message {\ncolor: #ef4444;\nfont-size: 0.875rem;\nmargin-top: 0.5rem;\ndisplay: flex;\nalign-items: center;\ngap: 0.5rem;\ntransition: all 0.3s ease;\n}\n\n.esimforms-error-message:hover {\ncolor: #dc2626;\ntransform: translateX(2px);\n}\n\n.esimforms-email-suggestion {\nbackground: #fef2f2;\nborder: 1px solid #fecaca;\nborder-radius: 8px;\npadding: 0.5rem 0.75rem;\nfont-size: 0.875rem;\ncolor: #dc2626;\ncursor: pointer;\ndisplay: inline-flex;\nalign-items: center;\ngap: 0.5rem;\nmargin-top: 0.5rem;\ntransition: all 0.3s ease;\n}\n\n.esimforms-email-suggestion:hover {\nbackground: #fee2e2;\nborder-color: #fca5a5;\ntransform: translateY(-1px);\nbox-shadow: 0 2px 8px rgba(239, 68, 68, 0.1);\n}\n\n.esimforms-last-update {\ntext-align: center;\nfont-size: 0.75rem;\ncolor: #10b981;\nfont-weight: 500;\npadding: 0.75rem 1rem;\nmargin: 1.5rem -2rem 0 -2rem;\nbackground: #f8fffe;\nborder-top: 1px solid #e5e7eb;\nborder-radius: 0 0 16px 16px;\ndisplay: flex;\nalign-items: center;\njustify-content: center;\ngap: 0.5rem;\n}\n\n.esimforms-last-update::before {\ncontent: '';\nwidth: 8px;\nheight: 8px;\nborder-radius: 50%;\nbackground-color: #10b981;\nanimation: esimforms-pulse-green 1.5s infinite;\n}\n\n@keyframes esimforms-pulse-green {\n0% {\nbox-shadow: 0 0 0 0 rgba(16, 185, 129, 0.7);\n}\n70% {\nbox-shadow: 0 0 0 8px rgba(16, 185, 129, 0);\n}\n100% {\nbox-shadow: 0 0 0 0 rgba(16, 185, 129, 0);\n}\n}\n\n@media (max-width: 768px) {\n.esimforms-container {\npadding: 0.75rem;\n}\n\n.esimforms-form-wrapper {\npadding: 1.5rem 1rem;\nborder-radius: 12px;\n}\n\n.esimforms-header-banner {\npadding: 1.25rem 1rem;\nmargin: -1.5rem -1rem 1.5rem -1rem;\nborder-radius: 12px 12px 0 0;\n}\n\n.esimforms-container .esimforms-header-title {\nfont-size: 1.3rem;\nflex-direction: column;\ngap: 0.5rem;\ntext-align: center;\n}\n\n.esimforms-container .esimforms-header-subtitle {\nflex-direction: column;\ngap: 0.75rem;\nfont-size: 0.85rem;\n}\n\n.esimforms-container .esimforms-step-title {\nfont-size: 1.5rem;\nline-height: 1.2;\nmargin-bottom: 0.75rem;\n}\n\n.esimforms-step-subtitle {\nfont-size: 0.95rem;\nmargin-bottom: 1.25rem;\n}\n\n.esimforms-container .esimforms-plan-grid {\ngrid-template-columns: 1fr;\ngap: 1rem;\nmargin: 1.5rem 0;\n}\n\n.esimforms-plan-card {\npadding: 1.5rem 1rem;\n}\n\n.esimforms-plan-icon {\nwidth: 60px;\nheight: 60px;\nfont-size: 2.5rem;\nmargin: 0 auto 0.75rem;\n}\n\n.esimforms-plan-title {\nfont-size: 1rem;\nmargin-bottom: 0.5rem;\n}\n\n.esimforms-plan-subtitle {\nfont-size: 0.8rem;\n}\n\n.esimforms-container .esimforms-options-grid {\ngrid-template-columns: 1fr;\ngap: 0.875rem;\nmargin: 1.5rem 0;\n}\n\n.esimforms-option-card {\npadding: 1.25rem 1rem;\n}\n\n.esimforms-option-title {\nfont-size: 1rem;\nflex-direction: column;\ngap: 0.5rem;\ntext-align: center;\n}\n\n.esimforms-option-subtitle {\nfont-size: 0.8rem;\ntext-align: center;\n}\n\n.esimforms-input {\npadding: 0.75rem 0.875rem;\nfont-size: 0.95rem;\nborder-radius: 10px;\n}\n\n.esimforms-label {\nfont-size: 0.9rem;\nmargin-bottom: 0.375rem;\n}\n\n.esimforms-selection-summary {\npadding: 1.25rem 1rem;\nfont-size: 0.95rem;\nmargin-bottom: 1.5rem;\nborder-radius: 10px;\n}\n\n.esimforms-container .esimforms-navigation {\nflex-direction: column;\ngap: 0.75rem;\nmargin-top: 1.5rem;\npadding-top: 1.25rem;\n}\n\n.esimforms-container .esimforms-btn {\nwidth: 100%;\npadding: 0.875rem 1.5rem;\nfont-size: 0.95rem;\nmin-height: 48px;\nborder-radius: 10px;\n}\n\n.esimforms-container .esimforms-benefits-grid {\ngrid-template-columns: 1fr;\ngap: 0.875rem;\nmargin-bottom: 1.5rem;\n}\n\n.esimforms-benefit-item {\npadding: 0.875rem;\n}\n\n.esimforms-container .esimforms-benefit-icon {\nwidth: 36px;\nheight: 36px;\nfont-size: 1.1rem;\n}\n\n.esimforms-container .esimforms-benefit-title {\nfont-size: 0.9rem;\n}\n\n.esimforms-container .esimforms-benefit-desc {\nfont-size: 0.75rem;\n}\n\n.esimforms-container .esimforms-membership-title {\nfont-size: 1.6rem;\nmargin-bottom: 0.875rem;\n}\n\n.esimforms-container .esimforms-membership-subtitle {\nfont-size: 1rem;\nmargin-bottom: 1.5rem;\n}\n\n.esimforms-membership-button {\npadding: 0.875rem 2rem;\nfont-size: 1rem;\nmargin-bottom: 1.25rem;\nmin-height: 48px;\nborder-radius: 10px;\n}\n\n.esimforms-container .esimforms-code-input {\nmax-width: 100%;\npadding: 0.75rem 0.875rem;\nfont-size: 0.95rem;\nmargin: 0 auto 0.875rem auto;\n}\n\n.esimforms-code-submit {\npadding: 0.75rem 1.5rem;\nfont-size: 0.95rem;\nmin-height: 44px;\nborder-radius: 10px;\n}\n\n.esimforms-last-update {\nfont-size: 0.7rem;\npadding: 0.625rem 0.875rem;\nmargin: 1.25rem -1rem 0 -1rem;\n}\n}\n\n\/* Enhanced mobile for small screens *\/\n@media (max-width: 480px) {\n.esimforms-container {\npadding: 0.5rem;\n}\n\n.esimforms-form-wrapper {\npadding: 1.25rem 0.75rem;\n}\n\n.esimforms-header-banner {\npadding: 1rem 0.75rem;\nmargin: -1.25rem -0.75rem 1.25rem -0.75rem;\n}\n\n.esimforms-container .esimforms-header-title {\nfont-size: 1.2rem;\n}\n\n.esimforms-container .esimforms-header-subtitle {\nfont-size: 0.8rem;\n}\n\n.esimforms-container .esimforms-step-title {\nfont-size: 1.3rem;\n}\n\n.esimforms-step-subtitle {\nfont-size: 0.9rem;\n}\n\n.esimforms-plan-card {\npadding: 1.25rem 0.875rem;\n}\n\n.esimforms-plan-icon {\nwidth: 50px;\nheight: 50px;\nfont-size: 2.25rem;\n}\n\n.esimforms-option-card {\npadding: 1rem 0.875rem;\n}\n\n.esimforms-input {\npadding: 0.75rem;\nfont-size: 0.9rem;\n}\n\n.esimforms-container .esimforms-btn {\npadding: 0.75rem 1.25rem;\nfont-size: 0.9rem;\n}\n\n.esimforms-container .esimforms-membership-title {\nfont-size: 1.4rem;\n}\n\n.esimforms-container .esimforms-membership-subtitle {\nfont-size: 0.95rem;\n}\n\n.esimforms-membership-button {\npadding: 0.75rem 1.75rem;\nfont-size: 0.95rem;\n}\n\n.esimforms-last-update {\nfont-size: 0.65rem;\nmargin: 1rem -0.75rem 0 -0.75rem;\n}\n}\n\n\/* Loading animation *\/\n.esimforms-loading {\ndisplay: inline-block;\nwidth: 20px;\nheight: 20px;\nborder: 2px solid #ffffff;\nborder-radius: 50%;\nborder-top-color: transparent;\nanimation: esimforms-spin 1s ease-in-out infinite;\n}\n\n@keyframes esimforms-spin {\n                        to {\n                            transform: rotate(360deg);\n                        }\n}\n\n\/* Enhanced animations *\/\n.esimforms-bounce-in {\nanimation: esimforms-bounceIn 0.6s ease-out;\n}\n\n@keyframes esimforms-bounceIn {\n0% {\nopacity: 0;\ntransform: scale(0.3);\n}\n50% {\nopacity: 1;\ntransform: scale(1.05);\n}\n70% {\ntransform: scale(0.9);\n}\n100% {\nopacity: 1;\ntransform: scale(1);\n}\n}\n\n\/* Success Message Styling *\/\n.esimforms-success-container {\nanimation: esimforms-success-slide-up 0.8s ease-out;\nposition: relative;\noverflow: hidden;\n}\n\n.esimforms-success-container::before {\ncontent: '';\nposition: absolute;\ntop: -50%;\nleft: -50%;\nwidth: 200%;\nheight: 200%;\nbackground: radial-gradient(circle, rgba(255,255,255,0.1) 0%, transparent 70%);\nanimation: esimforms-rotate 15s linear infinite;\n}\n\n@keyframes esimforms-success-slide-up {\n0% {\nopacity: 0;\ntransform: translateY(50px) scale(0.95);\n}\n100% {\nopacity: 1;\ntransform: translateY(0) scale(1);\n}\n}\n\n.esimforms-success-icon {\nanimation: esimforms-success-bounce 1s ease-out;\n}\n\n@keyframes esimforms-success-bounce {\n0%, 20%, 50%, 80%, 100% {\ntransform: translateY(0);\n}\n40% {\ntransform: translateY(-20px);\n}\n60% {\ntransform: translateY(-10px);\n}\n}\n\n.esimforms-success-details {\nanimation: esimforms-fade-in-up 0.6s ease-out 0.3s both;\n}\n\n@keyframes esimforms-fade-in-up {\n0% {\nopacity: 0;\ntransform: translateY(20px);\n}\n100% {\nopacity: 1;\ntransform: translateY(0);\n}\n}\n\n\/* Mobile optimizations for success message *\/\n@media (max-width: 768px) {\n.esimforms-success-container {\npadding: 1.5rem !important;\nmargin: 1rem 0 !important;\n}\n\n.esimforms-success-icon {\nfont-size: 3rem !important;\nmargin-bottom: 1rem !important;\n}\n\n.esimforms-success-container h2 {\nfont-size: 1.5rem !important;\nmargin-bottom: 1rem !important;\n}\n\n.esimforms-success-container p {\nfont-size: 1rem !important;\nmargin-bottom: 1.5rem !important;\n}\n\n.esimforms-success-details {\npadding: 1.5rem !important;\nmargin: 1.5rem 0 !important;\n}\n\n.esimforms-success-details h3 {\nfont-size: 1.25rem !important;\nmargin-bottom: 1rem !important;\n}\n\n.esimforms-success-details > div:first-of-type {\ngrid-template-columns: 1fr !important;\ngap: 0.75rem !important;\nmargin-bottom: 1.5rem !important;\n}\n\n.esimforms-success-details > div:first-of-type > div {\ntext-align: center !important;\n}\n\n.esimforms-success-details > div:last-of-type {\npadding: 1rem !important;\n}\n\n.esimforms-success-details > div:last-of-type h4 {\nfont-size: 1rem !important;\nmargin-bottom: 0.75rem !important;\n}\n\n.esimforms-success-details > div:last-of-type p {\nfont-size: 0.9rem !important;\n}\n\n.esimforms-success-container > div:last-of-type {\nflex-direction: column !important;\ngap: 0.75rem !important;\nmargin-top: 1.5rem !important;\n}\n\n.esimforms-success-container > div:last-of-type a {\nwidth: 100% !important;\njustify-content: center !important;\npadding: 1rem !important;\nfont-size: 0.9rem !important;\n}\n}\n<\/style>\n<div class=\"esimforms-container\">\n<div class=\"esimforms-form-wrapper\">\n<!-- Header Banner -->\n<div class=\"esimforms-header-banner\">\n<h1 class=\"esimforms-header-title\">\n                                <i class=\"fas fa-sim-card\"><\/i> Servicio de eSIM Gratuito\n<\/h1>\n<div class=\"esimforms-header-subtitle\">\n<span class=\"esimforms-header-item\">\n                                    <i class=\"fas fa-globe\"><\/i> Cobertura Mundial\n<\/span>\n<span class=\"esimforms-header-item\">\n                                    <i class=\"fas fa-clock\"><\/i> Activaci\u00f3n Inmediata\n<\/span>\n<span class=\"esimforms-header-item\">\n                                    <i class=\"fas fa-calendar-check\"><\/i> 30 D\u00edas de Prueba\n<\/span>\n<\/div>\n<\/div>\n\n<!-- Progress Bar -->\n<div class=\"esimforms-progress-bar\">\n<div class=\"esimforms-progress-fill\" style=\"width: 25%\"><\/div>\n<\/div>\n\n<!-- Form Container -->\n<form id=\"esimforms-multistep\">\n\n<!-- Step 1: Plan Selection -->\n<div class=\"esimforms-step active is-visible\" data-step=\"1\">\n                <div class=\"esimforms-step-content\">\n                    <h2 class=\"esimforms-step-title\">\u00bfQu\u00e9 tipo de cobertura necesitas?<\/h2>\n                    <p class=\"esimforms-step-subtitle\">Haz clic en el plan que mejor se adapte a tus necesidades<\/p>\n                <\/div>\n\n<div class=\"esimforms-plan-grid\">\n<div class=\"esimforms-plan-card\" data-plan=\"global\">\n    <div class=\"esimforms-plan-icon\">\n        <i class=\"fas fa-globe\"><\/i>\n    <\/div>\n    <h4 class=\"esimforms-plan-title\">Global<\/h4>\n    <p class=\"esimforms-plan-subtitle\">Cobertura en m\u00e1s de 120 pa\u00edses<\/p>\n    <div class=\"esimforms-plan-badge\">M\u00e1s Popular<\/div>\n<\/div>\n<div class=\"esimforms-plan-card\" data-plan=\"regional\">\n    <div class=\"esimforms-plan-icon\">\n        <i class=\"fas fa-map\"><\/i>\n    <\/div>\n    <h4 class=\"esimforms-plan-title\">Regional<\/h4>\n    <p class=\"esimforms-plan-subtitle\">Optimizado para continentes<\/p>\n<\/div>\n<div class=\"esimforms-plan-card\" data-plan=\"local\">\n    <div class=\"esimforms-plan-icon\">\n        <i class=\"fas fa-map-marker-alt\"><\/i>\n    <\/div>\n    <h4 class=\"esimforms-plan-title\">Local<\/h4>\n    <p class=\"esimforms-plan-subtitle\">Planes espec\u00edficos por pa\u00eds<\/p>\n<\/div>\n<\/div>\n\n                <div class=\"esimforms-navigation\">\n                    <div><\/div>\n                    <button type=\"button\" class=\"esimforms-btn esimforms-btn-primary\" onclick=\"eSIMForms.nextStep()\" disabled style=\"opacity: 0.5;\">\n                        <span>Siguiente<\/span>\n                        <i class=\"fas fa-arrow-right\"><\/i>\n                    <\/button>\n                <\/div>\n                <div style=\"color: #6b7280; font-size: 0.9rem; text-align: center; margin-top: 1rem;\">\n                    <i class=\"fas fa-mouse-pointer\" style=\"margin-right: 0.5rem;\"><\/i>\n                    Selecciona tu plan para continuar (autom\u00e1tico o manual)\n                <\/div>\n<\/div>\n\n<!-- Step 2: Region\/Country Selection -->\n<div class=\"esimforms-step\" data-step=\"2\">\n<div class=\"esimforms-step-content\">\n<h2 class=\"esimforms-step-title\" id=\"step2-title\">Selecciona tu destino<\/h2>\n<p class=\"esimforms-step-subtitle\" id=\"step2-subtitle\">Elige d\u00f3nde necesitas cobertura<\/p>\n<\/div>\n\n<div class=\"esimforms-options-grid\" id=\"destination-options\">\n<!-- Options will be populated dynamically -->\n<\/div>\n\n                <div class=\"esimforms-navigation\">\n                    <button type=\"button\" class=\"esimforms-btn esimforms-btn-secondary\" onclick=\"eSIMForms.prevStep()\">\n                        <i class=\"fas fa-arrow-left\"><\/i>\n                        <span>Anterior<\/span>\n                    <\/button>\n                    <button type=\"button\" class=\"esimforms-btn esimforms-btn-primary\" onclick=\"eSIMForms.nextStep()\" disabled style=\"opacity: 0.5;\">\n                        <span>Siguiente<\/span>\n                        <i class=\"fas fa-arrow-right\"><\/i>\n                    <\/button>\n                <\/div>\n                <div style=\"color: #6b7280; font-size: 0.9rem; text-align: center; margin-top: 1rem;\">\n                    <i class=\"fas fa-mouse-pointer\" style=\"margin-right: 0.5rem;\"><\/i>\n                    Selecciona tu destino para continuar (autom\u00e1tico o manual)\n                <\/div>\n<\/div>\n\n<!-- Step 3: Contact Information -->\n<div class=\"esimforms-step\" data-step=\"3\">\n<div class=\"esimforms-step-content\">\n<h2 class=\"esimforms-step-title\">Informaci\u00f3n de Contacto<\/h2>\n<p class=\"esimforms-step-subtitle\">Necesitamos estos datos para enviarte tu eSIM gratuita<\/p>\n<div class=\"esimforms-selection-summary\" id=\"selection-summary\"><\/div>\n<\/div>\n\n<div class=\"esimforms-form-group\">\n<label for=\"user-name\" class=\"esimforms-label\">Nombre Completo<\/label>\n<input type=\"text\" id=\"user-name\" class=\"esimforms-input\" placeholder=\"Ingresa tu nombre completo\">\n<\/div>\n\n<div class=\"esimforms-form-group\">\n<label for=\"user-email\" class=\"esimforms-label\">Correo Electr\u00f3nico<\/label>\n<input type=\"email\" id=\"user-email\" class=\"esimforms-input\" placeholder=\"tu@correo.com\">\n<\/div>\n\n<div class=\"esimforms-navigation\">\n<button type=\"button\" class=\"esimforms-btn esimforms-btn-secondary\" onclick=\"eSIMForms.prevStep()\">\n    <i class=\"fas fa-arrow-left\"><\/i>\n    <span>Anterior<\/span>\n<\/button>\n<button type=\"button\" class=\"esimforms-btn esimforms-btn-primary\" onclick=\"eSIMForms.nextStep()\">\n    <span>Obtener eSIM<\/span>\n    <i class=\"fas fa-sim-card\"><\/i>\n<\/button>\n<\/div>\n<\/div>\n\n<!-- Step 4: Membership -->\n<div class=\"esimforms-step\" data-step=\"4\">\n<div class=\"esimforms-step-content\">\n<h2 class=\"esimforms-step-title\">\u00a1Tu eSIM est\u00e1 lista!<\/h2>\n<p class=\"esimforms-step-subtitle\">Solo un paso m\u00e1s para activar tu prueba gratuita de 30 d\u00edas<\/p>\n<div class=\"esimforms-membership-section\">\n    <div class=\"esimforms-membership-content\">\n        <h3 class=\"esimforms-membership-title\">\n            <i class=\"fas fa-crown\"><\/i> Membres\u00eda Premium\n        <\/h3>\n        <p class=\"esimforms-membership-subtitle\">Accede a eSIMs gratuitos y todas las herramientas de UnlockHere.com con un c\u00f3digo de membres\u00eda de por vida (cuota \u00fanica de $1.25)<\/p>\n        <div class=\"esimforms-benefits-grid\">\n            <div class=\"esimforms-benefit-item\">\n                <div class=\"esimforms-benefit-icon\">\n                    <i class=\"fas fa-bolt\"><\/i>\n                <\/div>\n                <div class=\"esimforms-benefit-text\">\n                    <div class=\"esimforms-benefit-title\">S\u00faper R\u00e1pido<\/div>\n                    <div class=\"esimforms-benefit-desc\">eSIM listo en menos de 5 minutos<\/div>\n                <\/div>\n            <\/div>\n            <div class=\"esimforms-benefit-item\">\n                <div class=\"esimforms-benefit-icon\">\n                    <i class=\"fas fa-shield-alt\"><\/i>\n                <\/div>\n                <div class=\"esimforms-benefit-text\">\n                    <div class=\"esimforms-benefit-title\">100% Seguro<\/div>\n                    <div class=\"esimforms-benefit-desc\">M\u00e9todo oficial, sin riesgos<\/div>\n                <\/div>\n            <\/div>\n            <div class=\"esimforms-benefit-item\">\n                <div class=\"esimforms-benefit-icon\">\n                    <i class=\"fas fa-globe\"><\/i>\n                <\/div>\n                <div class=\"esimforms-benefit-text\">\n                    <div class=\"esimforms-benefit-title\">Funciona Globalmente<\/div>\n                    <div class=\"esimforms-benefit-desc\">Todos los operadores y pa\u00edses<\/div>\n                <\/div>\n            <\/div>\n            <div class=\"esimforms-benefit-item\">\n                <div class=\"esimforms-benefit-icon\">\n                    <i class=\"fas fa-headset\"><\/i>\n                <\/div>\n                <div class=\"esimforms-benefit-text\">\n                    <div class=\"esimforms-benefit-title\">Soporte 24\/7<\/div>\n                    <div class=\"esimforms-benefit-desc\">Ayuda experta cuando la necesites<\/div>\n                <\/div>\n            <\/div>\n        <\/div>\n        <a href=\"https:\/\/nifty.unlockhere.com\/fts\/3JMvDxJjcDzQ-0qIUsZIoKyGS\" target=\"_blank\" class=\"esimforms-membership-button\">\n            <i class=\"fas fa-external-link-alt\"><\/i> Obtener Acceso Instant\u00e1neo\n        <\/a>\n        <div class=\"esimforms-code-section\">\n            <div class=\"esimforms-code-title\">\u00bfYa tienes un c\u00f3digo de membres\u00eda?<\/div>\n            <input type=\"text\" id=\"membership-code\" class=\"esimforms-code-input\" placeholder=\"INGRESA-C\u00d3DIGO-AQU\u00cd\">\n            <br>\n            <button type=\"button\" id=\"submit-code\" class=\"esimforms-code-submit\" onclick=\"eSIMForms.validateMembershipCode()\">\n                <i class=\"fas fa-check\"><\/i> Verificar C\u00f3digo\n            <\/button>\n        <\/div>\n    <\/div>\n<\/div>\n<\/div>\n<div class=\"esimforms-navigation\">\n<button type=\"button\" class=\"esimforms-btn esimforms-btn-secondary\" onclick=\"eSIMForms.prevStep()\">\n    <i class=\"fas fa-arrow-left\"><\/i>\n    <span>Anterior<\/span>\n<\/button>\n<\/div>\n<\/div>\n<\/form>\n<!-- Status Bar Footer -->\n<div id=\"esimforms-last-update\" class=\"esimforms-last-update\"><\/div>\n<\/div>\n<\/div>\n<script>\n\/\/ eSIM Form System\nconst eSIMForms = {\ncurrentStep: 1,\ntotalSteps: 4,\nformData: {},\nvalidCodes: [],\nusedCodes: [],\n\/\/ eSIM Data\nesimData: {\n                            regions: [{\n                                id: 'latam',\n                                name: 'Am\u00e9rica Latina',\n                                icon: 'fa-earth-americas',\n                                description: 'M\u00e9xico, Colombia, Argentina, Chile, Per\u00fa y m\u00e1s'\n                            }, {\n                                id: 'europe',\n                                name: 'Europa',\n                                icon: 'fa-earth-europe',\n                                description: 'Todos los pa\u00edses de la Uni\u00f3n Europea'\n                            }, {\n                                id: 'north_america',\n                                name: 'Am\u00e9rica del Norte',\n                                icon: 'fa-earth-americas',\n                                description: 'Estados Unidos, Canad\u00e1 y M\u00e9xico'\n                            }, {\n                                id: 'asia_pacific',\n                                name: 'Asia Pac\u00edfico',\n                                icon: 'fa-earth-asia',\n                                description: 'China, Jap\u00f3n, Corea, Tailandia y m\u00e1s'\n                            }, {\n                                id: 'africa',\n                                name: '\u00c1frica',\n                                icon: 'fa-earth-africa',\n                                description: 'Sud\u00e1frica, Egipto, Marruecos y m\u00e1s'\n                            }, ],\n                            countries: [\n                            \/\/ Spanish-speaking countries first\n                            {\n                                id: 'spain',\n                                name: 'Espa\u00f1a',\n                                flag: '\ud83c\uddea\ud83c\uddf8',\n                                networks: ['Movistar', 'Orange', 'Vodafone', 'M\u00e1sM\u00f3vil']\n                            }, {\n                                id: 'mexico',\n                                name: 'M\u00e9xico',\n                                flag: '\ud83c\uddf2\ud83c\uddfd',\n                                networks: ['Telcel', 'AT&T M\u00e9xico', 'Movistar']\n                            }, {\n                                id: 'argentina',\n                                name: 'Argentina',\n                                flag: '\ud83c\udde6\ud83c\uddf7',\n                                networks: ['Claro', 'Movistar', 'Personal']\n                            }, {\n                                id: 'colombia',\n                                name: 'Colombia',\n                                flag: '\ud83c\udde8\ud83c\uddf4',\n                                networks: ['Claro', 'Movistar', 'Tigo', 'Avantel']\n                            }, {\n                                id: 'peru',\n                                name: 'Per\u00fa',\n                                flag: '\ud83c\uddf5\ud83c\uddea',\n                                networks: ['Claro', 'Movistar', 'Entel', 'Bitel']\n                            }, {\n                                id: 'chile',\n                                name: 'Chile',\n                                flag: '\ud83c\udde8\ud83c\uddf1',\n                                networks: ['Entel', 'Movistar', 'Claro', 'WOM']\n                            }, {\n                                id: 'ecuador',\n                                name: 'Ecuador',\n                                flag: '\ud83c\uddea\ud83c\udde8',\n                                networks: ['Claro', 'Movistar', 'CNT']\n                            }, {\n                                id: 'venezuela',\n                                name: 'Venezuela',\n                                flag: '\ud83c\uddfb\ud83c\uddea',\n                                networks: ['Movistar', 'Digitel', 'Movilnet']\n                            }, {\n                                id: 'uruguay',\n                                name: 'Uruguay',\n                                flag: '\ud83c\uddfa\ud83c\uddfe',\n                                networks: ['Claro', 'Movistar', 'Antel']\n                            }, {\n                                id: 'paraguay',\n                                name: 'Paraguay',\n                                flag: '\ud83c\uddf5\ud83c\uddfe',\n                                networks: ['Claro', 'Tigo', 'Personal']\n                            }, {\n                                id: 'bolivia',\n                                name: 'Bolivia',\n                                flag: '\ud83c\udde7\ud83c\uddf4',\n                                networks: ['Tigo', 'Entel', 'Viva']\n                            }, {\n                                id: 'costa_rica',\n                                name: 'Costa Rica',\n                                flag: '\ud83c\udde8\ud83c\uddf7',\n                                networks: ['Claro', 'Movistar', 'ICE K\u00f6lbi']\n                            }, {\n                                id: 'panama',\n                                name: 'Panam\u00e1',\n                                flag: '\ud83c\uddf5\ud83c\udde6',\n                                networks: ['Claro', 'Movistar', 'Tigo', '+M\u00f3vil']\n                            }, {\n                                id: 'guatemala',\n                                name: 'Guatemala',\n                                flag: '\ud83c\uddec\ud83c\uddf9',\n                                networks: ['Claro', 'Tigo', 'Movistar']\n                            }, {\n                                id: 'honduras',\n                                name: 'Honduras',\n                                flag: '\ud83c\udded\ud83c\uddf3',\n                                networks: ['Claro', 'Tigo', 'Hondutel']\n                            }, {\n                                id: 'el_salvador',\n                                name: 'El Salvador',\n                                flag: '\ud83c\uddf8\ud83c\uddfb',\n                                networks: ['Claro', 'Tigo', 'Movistar']\n                            }, {\n                                id: 'nicaragua',\n                                name: 'Nicaragua',\n                                flag: '\ud83c\uddf3\ud83c\uddee',\n                                networks: ['Claro', 'Tigo', 'Movistar']\n                            }, {\n                                id: 'dominican_republic',\n                                name: 'Rep\u00fablica Dominicana',\n                                flag: '\ud83c\udde9\ud83c\uddf4',\n                                networks: ['Claro', 'Orange', 'Altice', 'Viva']\n                            }, {\n                                id: 'puerto_rico',\n                                name: 'Puerto Rico',\n                                flag: '\ud83c\uddf5\ud83c\uddf7',\n                                networks: ['Claro', 'T-Mobile', 'AT&T', 'Liberty']\n                            },\n                            \/\/ Other popular destinations\n                            {\n                                id: 'usa',\n                                name: 'Estados Unidos',\n                                flag: '\ud83c\uddfa\ud83c\uddf8',\n                                networks: ['Verizon', 'AT&T', 'T-Mobile', 'Dish']\n                            }, {\n                                id: 'canada',\n                                name: 'Canad\u00e1',\n                                flag: '\ud83c\udde8\ud83c\udde6',\n                                networks: ['Rogers', 'Bell', 'Telus', 'Freedom Mobile']\n                            }, {\n                                id: 'brazil',\n                                name: 'Brasil',\n                                flag: '\ud83c\udde7\ud83c\uddf7',\n                                networks: ['Vivo', 'TIM', 'Claro', 'Oi']\n                            }, {\n                                id: 'uk',\n                                name: 'Reino Unido',\n                                flag: '\ud83c\uddec\ud83c\udde7',\n                                networks: ['EE', 'O2', 'Vodafone', 'Three']\n                            }, {\n                                id: 'france',\n                                name: 'Francia',\n                                flag: '\ud83c\uddeb\ud83c\uddf7',\n                                networks: ['Orange', 'SFR', 'Bouygues Telecom', 'Free Mobile']\n                            }, {\n                                id: 'italy',\n                                name: 'Italia',\n                                flag: '\ud83c\uddee\ud83c\uddf9',\n                                networks: ['TIM', 'Vodafone', 'WindTre', 'Iliad']\n                            }, {\n                                id: 'germany',\n                                name: 'Alemania',\n                                flag: '\ud83c\udde9\ud83c\uddea',\n                                networks: ['Deutsche Telekom', 'Vodafone', 'O2', '1&1']\n                            }, {\n                                id: 'japan',\n                                name: 'Jap\u00f3n',\n                                flag: '\ud83c\uddef\ud83c\uddf5',\n                                networks: ['NTT Docomo', 'SoftBank', 'KDDI (au)', 'Rakuten Mobile']\n                            }, {\n                                id: 'china',\n                                name: 'China',\n                                flag: '\ud83c\udde8\ud83c\uddf3',\n                                networks: ['China Mobile', 'China Unicom', 'China Telecom']\n                            }, {\n                                id: 'australia',\n                                name: 'Australia',\n                                flag: '\ud83c\udde6\ud83c\uddfa',\n                                networks: ['Telstra', 'Optus', 'Vodafone', 'TPG']\n                            }]\n},\ninit: function() {\nthis._0xy7z8a9();\nthis._0xp7q8r9();\nthis.bindEvents();\nthis.loadValidCodes();\nthis.loadUsedCodes();\nthis.updateProgress();\nthis.renderLastUpdate();\ndocument.querySelector('.esimforms-step.active').classList.add('is-visible');\nthis._0xs1t2u3();\n},\n\n\/\/ Lightweight protection (non-intrusive)\n_0xp7q8r9: function() {\n\/\/ Only disable right-click, nothing else\ndocument.addEventListener('contextmenu', (e) => {\ne.preventDefault();\n});\n},\n\n_0xs1t2u3: function() {\n\/\/ Placeholder for future protections - currently disabled\n},\n\n_0xv4w5x6: function() {\n\/\/ Placeholder for security response - currently disabled\n},\n\n\/\/ Console protection (minimal)\n_0xy7z8a9: function() {\n\/\/ Only filter specific sensitive log messages, don't break console entirely\nconst _0x1b2c = console.log;\nconsole.log = function(...args) {\nconst argString = args.toString();\nif (argString.includes('v\u00e1lidos cargados') || argString.includes('usados cargados') || argString.includes('restantes:')) {\nreturn;\n}\n_0x1b2c.apply(console, args);\n};\n},\n\n\/\/ Load valid codes from an embedded array\nloadValidCodes: function() {\n            const embeddedCodes = [\n                \"KHA-3N2-V3A\", \"O1S-MQ2-UI5\", \"GST-T55-EB9\", \"UZH-VX2-8TE\", \"TJ9-AM0-GYK\", \"762-9YK-RP9\", \"ZNQ-MF4-IW7\", \"HWT-IRA-R11\", \"YHM-L37-QCP\", \"IXC-YH2-K2O\",\n                \"8PR-JE0-03K\", \"TNM-DR5-QHO\", \"RKB-7DQ-VNC\", \"G4K-BSU-6OC\", \"YOO-89L-HK1\", \"CY9-O1K-RRJ\", \"M7U-D3D-JB4\", \"YF9-4L2-OC1\", \"LM7-50G-I4C\", \"D5F-RJV-6NC\",\n                \"YZQ-872-5IB\", \"IAM-IT5-WZO\", \"JZX-0Z7-038\", \"B5T-35F-WWF\", \"US9-WNA-7O5\", \"FYH-G7Y-YOT\", \"APT-ZSA-JL6\", \"OA0-WFA-DQM\", \"B4J-PGZ-SYH\", \"EUL-IBW-BLF\",\n                \"4YS-8EP-YOP\", \"Y41-A24-4I0\", \"KOE-TZJ-Q83\", \"S10-VUR-9PA\", \"4SV-0LY-JDU\", \"U8M-OFY-V0U\", \"3ZQ-272-5H7\", \"TKK-A9I-ID2\", \"N05-6I6-MQE\", \"QGD-2BK-MPW\",\n                \"6S2-RMA-JV8\", \"KLO-BNA-FMN\", \"NBY-F1N-T23\", \"04S-GIF-6SS\", \"A95-YEM-DF7\", \"Y6R-FXW-733\", \"COY-SCG-PLC\", \"H8J-083-BDM\", \"1RS-5YE-KLX\", \"KWW-ADO-GP2\",\n                \"215-5AQ-E9M\", \"245-N0G-ARJ\", \"2H1-4PF-E8P\", \"11G-5F0-WHV\", \"OM6-ESJ-LHS\", \"XYG-PJB-QS5\", \"YHX-A8Y-34O\", \"BMM-Z90-BKM\", \"9JG-DK8-6EK\", \"APB-A23-M5P\",\n                \"T2X-S3M-XPG\", \"W0X-P8A-FNS\", \"PSA-HR4-KUV\", \"59Z-ESK-FF2\", \"C26-BX2-B3H\", \"RNL-DJ6-EDO\", \"3EA-XAB-8TQ\", \"44R-KSX-N4R\", \"OBE-5SC-OBR\", \"FBQ-FTO-DIZ\",\n                \"R5T-KA1-F5U\", \"011-LST-DDZ\", \"HY6-RS9-4J0\", \"IWK-DK9-1BL\", \"VO6-TVQ-2G9\", \"23G-SQA-PPE\", \"ZRA-CQ4-XGB\", \"VZR-MM3-X02\", \"DKV-A2W-KPL\", \"J9F-7AS-FCM\",\n                \"IYE-L9O-JZF\", \"3B9-H8F-H02\", \"DK6-OAJ-V8G\", \"H8E-FB3-42Q\", \"LWF-YMK-ZJ8\", \"EAW-VPL-7V9\", \"LVI-23Z-BBN\", \"XPX-RU9-HSQ\", \"25A-SVK-M9L\", \"28G-6LS-HWX\",\n                \"27N-JIX-RU2\", \"SNT-M6G-Y0S\", \"C57-OGU-VOL\", \"XA0-GMG-I1Q\", \"D51-AJG-MFP\", \"0DX-6M9-TGE\", \"Z99-0PC-7F8\", \"796-4RJ-VR6\", \"B67-YZQ-8D4\", \"OGG-PEK-H6N\"\n            ];\nthis.validCodes = embeddedCodes.map(code => code.trim().toUpperCase());\n},\n\n\/\/ Load used codes from localStorage\nloadUsedCodes: function() {\nconst storedUsedCodes = localStorage.getItem('esimforms_used_codes');\nif (storedUsedCodes) {\ntry {\nthis.usedCodes = JSON.parse(storedUsedCodes);\nif (!Array.isArray(this.usedCodes)) {\nthis.usedCodes = [];\n}\n} catch (e) {\nthis.usedCodes = [];\n}\n} else {\nthis.usedCodes = [];\n}\n},\n\n\/\/ Save used codes to localStorage\nsaveUsedCodes: function() {\ntry {\nlocalStorage.setItem('esimforms_used_codes', JSON.stringify(this.usedCodes));\n} catch (e) {\n\/\/ Silent error handling\n}\n},\n\n\/\/ Mark code as used\nmarkCodeAsUsed: function(code) {\nif (!this.usedCodes.includes(code)) {\nthis.usedCodes.push(code);\nthis.saveUsedCodes();\n}\n},\n\n\/\/ Check if code is valid and not used\nisCodeValid: function(code) {\nconst processedCode = code.trim().toUpperCase();\nconsole.log('Checking code:', processedCode);\nconsole.log('Valid codes:', this.validCodes);\nconsole.log('Used codes:', this.usedCodes);\n\nconst isValid = this.validCodes.includes(processedCode);\nconst isUsed = this.usedCodes.includes(processedCode);\n\nconsole.log('Is valid:', isValid);\nconsole.log('Is used:', isUsed);\n\nreturn isValid && !isUsed;\n},\n\n\/\/ Get remaining codes count\ngetRemainingCodesCount: function() {\nreturn this.validCodes.filter(code => !this.usedCodes.includes(code)).length;\n},\n        bindEvents: function() {\n            \/\/ Plan card click handler\n            document.querySelectorAll('.esimforms-plan-card').forEach(card => {\n                card.addEventListener('click', function() {\n                    const planType = this.getAttribute('data-plan');\n                    \/\/ Update visual selection\n                    document.querySelectorAll('.esimforms-plan-card').forEach(c => c.classList.remove('selected'));\n                    this.classList.add('selected');\n                    \/\/ Store selection\n                    eSIMForms.formData.planType = planType;\n                    \n                    \/\/ Enable fallback button immediately\n                    eSIMForms.enableNextButton();\n                    \n                    \/\/ Show loading state\n                    if (!this.innerHTML.includes('fa-spinner')) {\n                        this.innerHTML = this.innerHTML.replace('<\/h4>', ' <i class=\"fas fa-spinner fa-spin\" style=\"margin-left: 0.5rem;\"><\/i><\/h4>');\n                    }\n                    \n                    \/\/ Auto-redirect to next step after short delay\n                    setTimeout(() => {\n                        try {\n                            eSIMForms.nextStep();\n                        } catch (error) {\n                            \/\/ If auto-redirect fails, remove loading spinner\n                            this.innerHTML = this.innerHTML.replace(' <i class=\"fas fa-spinner fa-spin\" style=\"margin-left: 0.5rem;\"><\/i>', '');\n                            console.error('Auto-redirect failed:', error);\n                        }\n                    }, 800);\n                });\n            });\n        },\nrenderLastUpdate: function() {\nconst now = new Date();\nconst hoursAgo = Math.floor(Math.random() * 12) + 1;\nconst updateElement = document.getElementById('esimforms-last-update');\nif (updateElement) {\nupdateElement.textContent = `\u00daltima actualizaci\u00f3n: hace ${hoursAgo} horas`;\n}\n},\nnextStep: function() {\nif (this.validateCurrentStep()) {\nthis.saveStepData();\nif (this.currentStep < this.totalSteps) {\nthis.showStep(this.currentStep + 1);\n}\n}\n},\nprevStep: function() {\nif (this.currentStep > 1) {\nthis.showStep(this.currentStep - 1);\n}\n},\nshowStep: function(stepNumber) {\nconst currentStepEl = document.querySelector(`.esimforms-step[data-step=\"${this.currentStep}\"].active`);\nconst newStepEl = document.querySelector(`.esimforms-step[data-step=\"${stepNumber}\"]`);\nif (!currentStepEl || !newStepEl) return;\n\n\/\/ Reset form data when going back to step 1\nif (stepNumber === 1) {\nthis.formData.planType = '';\nthis.formData.destination = '';\n\/\/ Reset visual selections\nsetTimeout(() => {\ndocument.querySelectorAll('.esimforms-plan-card').forEach(c => c.classList.remove('selected'));\n}, 450);\n}\n\n\/\/ Fade out current step\ncurrentStepEl.classList.remove('is-visible');\nsetTimeout(() => {\ncurrentStepEl.classList.remove('active');\nnewStepEl.classList.add('active');\n\/\/ Populate step 2 content based on selection\nif (stepNumber === 2) {\nthis.populateDestinations();\n} else if (stepNumber === 3) {\nthis.updateSelectionSummary();\n}\n\/\/ Defer the fade-in\nrequestAnimationFrame(() => {\nnewStepEl.classList.add('is-visible');\nconst stepContent = newStepEl.querySelector('.esimforms-step-content');\nif (stepContent) {\nstepContent.classList.add('esimforms-bounce-in');\nsetTimeout(() => stepContent.classList.remove('esimforms-bounce-in'), 600);\n}\n\n                \/\/ Reset button state for steps with auto-progression only\n                if (stepNumber === 1 || stepNumber === 2) {\n                    this.disableNextButton();\n                } else if (stepNumber === 3) {\n                    \/\/ Step 3 button should be enabled for manual \"Obtener eSIM\" click\n                    this.enableNextButton();\n                }\n});\n}, 400);\nthis.currentStep = stepNumber;\nthis.updateProgress();\n},\npopulateDestinations: function() {\nconst container = document.getElementById('destination-options');\nconst title = document.getElementById('step2-title');\nconst subtitle = document.getElementById('step2-subtitle');\ncontainer.innerHTML = '';\n\n\/\/ Reset the next button state\nthis.disableNextButton();\n\nif (this.formData.planType === 'global') {\n\/\/ Skip to step 3 for global plan\nthis.formData.destination = 'Plan Global - Cobertura Mundial';\nthis.showStep(3);\nreturn;\n} else if (this.formData.planType === 'regional') {\ntitle.textContent = 'Selecciona tu regi\u00f3n';\nsubtitle.textContent = 'Elige la regi\u00f3n donde necesitas cobertura';\nthis.esimData.regions.forEach(region => {\nconst card = this.createOptionCard({\ntitle: region.name,\nsubtitle: region.description,\nicon: `<i class=\"fas ${region.icon}\" style=\"font-size: 1.5rem; color: #3b82f6;\"><\/i>`,\nvalue: region.name\n});\ncontainer.appendChild(card);\n});\n            } else { \/\/ local\n                title.textContent = 'Selecciona tu pa\u00eds';\n                subtitle.textContent = 'Elige el pa\u00eds donde necesitas cobertura';\n                this.esimData.countries.forEach(country => {\n                    const card = this.createOptionCard({\n                        title: country.name,\n                        subtitle: 'Cobertura completa',\n                        icon: `<span style=\"font-size: 1.5rem;\">${country.flag}<\/span>`,\n                        value: country.name,\n                        networks: country.networks,\n                        country: country\n                    });\n                    container.appendChild(card);\n                });\n            }\n},\n        createOptionCard: function(config) {\n            const card = document.createElement('div');\n            card.className = 'esimforms-option-card';\n            card.setAttribute('data-value', config.value);\n            card.innerHTML = `\n            <h4 class=\"esimforms-option-title\">${config.icon} ${config.title}<\/h4>\n            <p class=\"esimforms-option-subtitle\">${config.subtitle}<\/p>\n            `;\n            card.addEventListener('click', () => {\n                \/\/ Update visual selection\n                document.querySelectorAll('.esimforms-option-card').forEach(c => c.classList.remove('selected'));\n                card.classList.add('selected');\n                \/\/ Store the selection\n                this.formData.destination = config.value;\n                \n                \/\/ Enable fallback button immediately\n                this.enableNextButton();\n                \n                \/\/ Show loading state\n                const titleElement = card.querySelector('.esimforms-option-title');\n                if (titleElement && !titleElement.innerHTML.includes('fa-spinner')) {\n                    titleElement.innerHTML = titleElement.innerHTML + ' <i class=\"fas fa-spinner fa-spin\" style=\"margin-left: 0.5rem;\"><\/i>';\n                }\n                \n                \/\/ Auto-redirect to next step after short delay\n                setTimeout(() => {\n                    try {\n                        \/\/ For local plans (countries), show network selection first\n                        if (this.formData.planType === 'local' && config.networks && config.networks.length > 0) {\n                            this.showNetworkSelection(config);\n                        } else {\n                            this.nextStep();\n                        }\n                    } catch (error) {\n                        \/\/ If auto-redirect fails, remove loading spinner and let user use manual button\n                        if (titleElement) {\n                            titleElement.innerHTML = titleElement.innerHTML.replace(' <i class=\"fas fa-spinner fa-spin\" style=\"margin-left: 0.5rem;\"><\/i>', '');\n                        }\n                        console.error('Auto-redirect failed:', error);\n                    }\n                }, 800);\n            });\n                        return card;\n        },\n        showNetworkSelection: function(countryConfig) {\n            const container = document.getElementById('destination-options');\n            const title = document.getElementById('step2-title');\n            const subtitle = document.getElementById('step2-subtitle');\n            \n            \/\/ Update title and subtitle for network selection\n            title.textContent = `Selecciona tu operador en ${countryConfig.country.name}`;\n            subtitle.textContent = 'Elige el operador de red que prefieras';\n            \n            \/\/ Clear existing content\n            container.innerHTML = '';\n            \n            \/\/ Create network cards\n            countryConfig.networks.forEach(network => {\n                const networkCard = document.createElement('div');\n                networkCard.className = 'esimforms-option-card';\n                networkCard.innerHTML = `\n                <h4 class=\"esimforms-option-title\">\n                    <i class=\"fas fa-signal\" style=\"font-size: 1.2rem; color: #3b82f6; margin-right: 0.5rem;\"><\/i>\n                    ${network}\n                <\/h4>\n                <p class=\"esimforms-option-subtitle\">Red ${network} en ${countryConfig.country.name}<\/p>\n                `;\n                \n                networkCard.addEventListener('click', () => {\n                    \/\/ Update visual selection\n                    document.querySelectorAll('.esimforms-option-card').forEach(c => c.classList.remove('selected'));\n                    networkCard.classList.add('selected');\n                    \n                    \/\/ Store the network selection\n                    this.formData.network = network;\n                    this.formData.destination = `${countryConfig.country.name} - ${network}`;\n                    \n                    \/\/ Enable fallback button immediately\n                    this.enableNextButton();\n                    \n                    \/\/ Show loading state\n                    const titleElement = networkCard.querySelector('.esimforms-option-title');\n                    if (titleElement && !titleElement.innerHTML.includes('fa-spinner')) {\n                        titleElement.innerHTML = titleElement.innerHTML + ' <i class=\"fas fa-spinner fa-spin\" style=\"margin-left: 0.5rem;\"><\/i>';\n                    }\n                    \n                    \/\/ Auto-redirect to next step after short delay\n                    setTimeout(() => {\n                        try {\n                            this.nextStep();\n                        } catch (error) {\n                            \/\/ If auto-redirect fails, remove loading spinner and let user use manual button\n                            if (titleElement) {\n                                titleElement.innerHTML = titleElement.innerHTML.replace(' <i class=\"fas fa-spinner fa-spin\" style=\"margin-left: 0.5rem;\"><\/i>', '');\n                            }\n                            console.error('Auto-redirect failed:', error);\n                        }\n                    }, 800);\n                });\n                \n                container.appendChild(networkCard);\n            });\n        },\n                updateSelectionSummary: function() {\n            const summary = document.getElementById('selection-summary');\n            let planText = '';\n            if (this.formData.planType === 'global') {\n                planText = '<strong>Plan Global<\/strong> - Cobertura en m\u00e1s de 120 pa\u00edses';\n            } else if (this.formData.planType === 'regional') {\n                planText = `<strong>Plan Regional<\/strong> - ${this.formData.destination}`;\n            } else {\n                if (this.formData.network) {\n                    planText = `<strong>Plan Local<\/strong> - ${this.formData.destination}`;\n                } else {\n                    planText = `<strong>Plan Local<\/strong> - ${this.formData.destination}`;\n                }\n            }\n            summary.innerHTML = `Tu selecci\u00f3n: ${planText}`;\n        },\nenableNextButton: function() {\nconst nextBtn = document.querySelector('.esimforms-step.active .esimforms-btn-primary');\nif (nextBtn) nextBtn.disabled = false;\n},\ndisableNextButton: function() {\nconst nextBtn = document.querySelector('.esimforms-step.active .esimforms-btn-primary');\nif (nextBtn) nextBtn.disabled = true;\n},\nupdateProgress: function() {\nconst progressPercent = (this.currentStep \/ this.totalSteps) * 100;\nconst progressFill = document.querySelector('.esimforms-progress-fill');\n                            if (progressFill) {\nprogressFill.style.width = progressPercent + '%';\n}\n},\nsaveStepData: function() {\nconst step = this.currentStep;\nif (step === 3) {\nthis.formData.name = document.getElementById('user-name').value;\nthis.formData.email = document.getElementById('user-email').value;\n}\n},\nvalidateCurrentStep: function() {\nconst step = this.currentStep;\nlet isValid = true;\nthis.clearErrors();\nif (step === 1) {\nif (!this.formData.planType) {\nisValid = false;\n}\n} else if (step === 2) {\nif (!this.formData.destination) {\nisValid = false;\n}\n} else if (step === 3) {\nconst name = document.getElementById('user-name');\nconst email = document.getElementById('user-email');\nconst nameValidation = this.validateName(name.value);\nif (!nameValidation.valid) {\nthis.showError(name, nameValidation.message);\nisValid = false;\n}\nif (!email.value.trim()) {\nthis.showError(email, 'Por favor ingresa tu correo electr\u00f3nico');\nisValid = false;\n} else {\nconst emailValidation = this.validateEmail(email.value);\nif (!emailValidation.valid) {\nthis.showError(email, emailValidation.message);\nif (emailValidation.suggestion) {\n    \/\/ Add click-to-fix functionality\n    const errorMsg = email.parentNode.querySelector('.esimforms-error-message');\n    errorMsg.style.cursor = 'pointer';\n    errorMsg.title = 'Click para usar el correo sugerido';\n    errorMsg.onclick = () => {\n        email.value = emailValidation.suggestion;\n        this.clearErrors();\n    };\n}\nisValid = false;\n}\n}\n}\nreturn isValid;\n},\nvalidateName: function(name) {\nname = name.trim();\nif (!name) {\n                                return {\n                                    valid: false,\n                                    message: 'Por favor ingresa tu nombre'\n                                };\n}\n\/\/ Check for minimum length\nif (name.length < 2) {\n                                return {\n                                    valid: false,\n                                    message: 'El nombre debe tener al menos 2 caracteres'\n                                };\n}\n\/\/ Check for maximum length\nif (name.length > 50) {\n                                return {\n                                    valid: false,\n                                    message: 'El nombre debe tener menos de 50 caracteres'\n                                };\n}\n\/\/ Regex for valid names\nconst nameRegex = \/^[a-zA-Z\\u00C0-\\u017F\\u0100-\\u024F\\u1E00-\\u1EFF]+(?:[\\s\\-'.][a-zA-Z\\u00C0-\\u017F\\u0100-\\u024F\\u1E00-\\u1EFF]+)*$\/;\nif (!nameRegex.test(name)) {\nreturn { \nvalid: false, \nmessage: 'El nombre solo puede contener letras, espacios, guiones y ap\u00f3strofes. No se permiten n\u00fameros o s\u00edmbolos especiales.' \n};\n}\n\/\/ Check for consecutive spaces or special characters\nif (\/[\\s\\-']{2,}\/.test(name)) {\nreturn { \nvalid: false, \nmessage: 'El nombre no puede tener espacios, guiones o ap\u00f3strofes consecutivos' \n};\n}\n\/\/ Check that it's not all spaces or special characters\nif (!\/[a-zA-Z\\u00C0-\\u017F\\u0100-\\u024F]\/.test(name)) {\nreturn { \nvalid: false, \nmessage: 'El nombre debe contener al menos una letra' \n};\n}\n\/\/ Split by spaces to check word count\nconst words = name.split(\/\\s+\/).filter(word => word.length > 0);\nif (words.length > 4) {\nreturn { \nvalid: false, \nmessage: 'Por favor ingresa solo tu nombre o nombre y apellido (m\u00e1ximo 4 palabras)' \n};\n}\n\/\/ Check that each word is at least 1 character\nfor (const word of words) {\nif (word.length < 1) {\nreturn { \nvalid: false, \nmessage: 'Cada parte de tu nombre debe tener al menos 1 car\u00e1cter' \n};\n}\n}\n                            return {\n                                valid: true\n                            };\n},\nvalidateEmail: function(email) {\n\/\/ Basic email format check\nconst emailRegex = \/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$\/;\nif (!emailRegex.test(email)) {\n                                return {\n                                    valid: false,\n                                    message: 'Por favor ingresa un formato de correo v\u00e1lido'\n                                };\n}\n\/\/ Extract domain and ensure it's lowercased\nconst domain = email.split('@')[1].toLowerCase().trim();\n\/\/ Whitelisted domains\nconst allowedDomains = [\n\/\/ Gmail\n'gmail.com',\n\/\/ Yahoo variations\n                            'yahoo.com', 'yahoo.co.uk', 'yahoo.fr', 'yahoo.de', 'yahoo.es', 'yahoo.it', 'yahoo.ca', 'yahoo.com.br', 'yahoo.com.mx', 'yahoo.com.ar', 'yahoo.co.jp', 'yahoo.co.in', 'yahoo.com.au', 'yahoo.ie', 'yahoo.se', 'ymail.com', 'rocketmail.com',\n\/\/ Apple\n'icloud.com', 'me.com', 'mac.com',\n\/\/ Microsoft - Outlook variations\n                            'outlook.com', 'outlook.fr', 'outlook.de', 'outlook.es', 'outlook.it', 'outlook.com.br', 'outlook.jp', 'outlook.com.au', 'outlook.co.uk',\n\/\/ Microsoft - Hotmail variations\n                            'hotmail.com', 'hotmail.fr', 'hotmail.de', 'hotmail.es', 'hotmail.it', 'hotmail.co.uk', 'hotmail.com.br', 'hotmail.co.jp', 'hotmail.com.ar',\n\/\/ Microsoft - Others\n                            'live.com', 'live.fr', 'live.de', 'live.it', 'live.co.uk', 'msn.com',\n\/\/ AOL\n'aol.com', 'aol.de', 'aol.fr', 'aol.co.uk',\n\/\/ GMX\n'gmx.com', 'gmx.de', 'gmx.at', 'gmx.ch', 'gmx.net', 'gmx.fr',\n\/\/ Other major providers\n'iname.com', 'fastmail.com', 'fastmail.fm',\n\/\/ International providers\n                            'qq.com', '163.com', '126.com', 'sina.com', 'foxmail.com', 'mail.ru', 'yandex.ru', 'yandex.com', 'web.de', 'freenet.de', 't-online.de', 'orange.fr', 'wanadoo.fr', 'laposte.net', 'libero.it', 'virgilio.it', 'alice.it', 'terra.com.br', 'uol.com.br', 'bol.com.br', 'rediffmail.com', 'zoho.com'];\n\/\/ Check if domain is in whitelist\nif (allowedDomains.includes(domain)) {\n                                return {\n                                    valid: true\n                                };\n}\n\/\/ Check for .edu domain\nif (domain.endsWith('.edu')) {\n                                return {\n                                    valid: true\n                                };\n}\n\/\/ Common misspellings\nconst commonMisspellings = {\n\/\/ Gmail typos\n'gmial.com': 'gmail.com',\n'gmai.com': 'gmail.com',\n'gmil.com': 'gmail.com',\n'gmail.co': 'gmail.com',\n'gmail.cm': 'gmail.com',\n'gmaill.com': 'gmail.com',\n'gnail.com': 'gmail.com',\n'gmali.com': 'gmail.com',\n'gmeil.com': 'gmail.com',\n'gmaol.com': 'gmail.com',\n'gmaul.com': 'gmail.com',\n'gmailcom': 'gmail.com',\n'g-mail.com': 'gmail.com',\n'googlemail.com': 'gmail.com',\n'googlmail.com': 'gmail.com',\n\/\/ Yahoo typos\n'yahooo.com': 'yahoo.com',\n'yaho.com': 'yahoo.com',\n'yahoo.co': 'yahoo.com',\n'yahou.com': 'yahoo.com',\n'yajoo.com': 'yahoo.com',\n'yahho.com': 'yahoo.com',\n'yaoo.com': 'yahoo.com',\n'yhoo.com': 'yahoo.com',\n'yhaoo.com': 'yahoo.com',\n'yahoocom': 'yahoo.com',\n'yaho0.com': 'yahoo.com',\n'yah00.com': 'yahoo.com',\n\/\/ iCloud typos\n'iclod.com': 'icloud.com',\n'icloud.co': 'icloud.com',\n'icloude.com': 'icloud.com',\n'icould.com': 'icloud.com',\n'iclould.com': 'icloud.com',\n'iclud.com': 'icloud.com',\n'iclous.com': 'icloud.com',\n'icloyd.com': 'icloud.com',\n'icloudcom': 'icloud.com',\n'i-cloud.com': 'icloud.com',\n\/\/ Outlook typos\n'outlok.com': 'outlook.com',\n'outlook.co': 'outlook.com',\n'outloook.com': 'outlook.com',\n'outlool.com': 'outlook.com',\n'outloo.com': 'outlook.com',\n'outlookcom': 'outlook.com',\n'out-look.com': 'outlook.com',\n'outlok.co': 'outlook.com',\n\/\/ Hotmail typos\n'hotmial.com': 'hotmail.com',\n'hotmai.com': 'hotmail.com',\n'hotmil.com': 'hotmail.com',\n'hotmail.co': 'hotmail.com',\n'hotmale.com': 'hotmail.com',\n'hotmeil.com': 'hotmail.com',\n'hotmal.com': 'hotmail.com',\n'hotmailcom': 'hotmail.com',\n'hot-mail.com': 'hotmail.com',\n'hotmaill.com': 'hotmail.com',\n'hotmait.com': 'hotmail.com',\n\/\/ AOL typos\n'aol.co': 'aol.com',\n'aolcom': 'aol.com',\n'a0l.com': 'aol.com',\n'ao1.com': 'aol.com',\n\/\/ Live typos\n'live.co': 'live.com',\n'liv.com': 'live.com',\n'livecom': 'live.com',\n\/\/ Common domain typos\n'.con': '.com',\n'.cpm': '.com',\n'.com.com': '.com',\n'.co.': '.com',\n'.om': '.com'\n};\n\/\/ Check for government or suspicious corporate domains\nconst blockedPatterns = [\n\/\/ Government and institutional\n'.gov', '.mil', '.int', '.govt',\n\/\/ Generic corporate\n                            'company.com', 'business.com', 'corporate.com', 'enterprise.com', 'corporation.com', 'office.com', 'work.com',\n\/\/ Anonymous\/Privacy focused\n                            'protonmail', 'proton.me', 'pm.me', 'tutanota', 'tuta.io', 'mailfence', 'hushmail', 'runbox', 'countermail', 'startmail', 'posteo', 'kolabnow', 'ctemplar', 'secmail', 'lavabit', 'disroot', 'riseup', 'openmailbox', 'safe-mail', 'torbox', 'scryptmail', 'confidantmail', 'neomailbox', 'thesafemail', 'shazzlemail', 'ghostmail', 'privacymail', 'mailbox.org',\n\/\/ Temporary\/Disposable email services\n                            'temp-mail', 'guerrillamail', '10minutemail', 'throwaway', 'mailinator', 'maildrop', 'trashmail', 'yopmail', 'tempmail', 'throwawaymail', 'fake-mail', 'trash-mail', 'sharklasers', 'spam4.me', 'mailnesia', 'mailcatch', 'tempinbox', 'disposablemail', 'mintemail', 'spamgourmet', 'spambox', 'notmailinator', 'incognitomail', 'anonymbox', 'emailondeck', 'getnada', 'tempinbox', 'burnermail', 'inboxkitten', '33mail', 'maildrop', 'spamcowboy', 'mytemp.email', 'tempr.email', 'tmpmail', 'fake-box', 'nada', 'mohmal', 'tempsky', 'inboxbear', 'harakirimail', 'mailsac', 'emailfake', 'tempemail', 'tempmail.it', 'mailcatch', 'mailnull', 'spamfree24', 'boun.cr', 'safetymail', 'trashmail', 'mt2015', 'inboxclean', 'anonbox', 'trashtalk', 'mailexpire', 'dispostable', 'spamspot', 'mailmoat', 'jetable', 'kasmail', 'spamcannon', '10minutesmail', 'minutemail', 'moakt', 'discard.email', 'tmail', 'tmails', 'tmpnator', 'soodo', 'teml', 'mail-temp', 'temp-mail.org', 'temp-mail.io', '10minutemail.net', '10minutemail.com', 'guerrillamail.com', 'mailinator.com', 'yopmail.com', 'yopmail.fr', 'yopmail.net', 'tempmailo', 'tempmailaddress', 'tempmailer', 'mohmal.com', 'mohmal.in', 'mohmal.tech', 'mailtemp.net', '10minutesmail', 'minuteinbox',\n\/\/ Other suspicious\/generic domains\n                            'example.com', 'test.com', 'temporary.com', 'disposable.com', 'anonymous.com', 'nospam.com', 'nomail.com', 'spamfree.com', 'mail.com', 'email.com', 'mailservice.com', 'emailservice.com', 'privateemail.com', 'securemail.com', 'emailaddress.com', 'myemail.com'];\nfor (const pattern of blockedPatterns) {\nif (domain.includes(pattern)) {\nreturn { \nvalid: false, \nmessage: 'Por favor usa una direcci\u00f3n de correo personal (Gmail, Yahoo, iCloud, etc.)' \n};\n}\n}\n\/\/ Check for common misspellings\nif (commonMisspellings[domain]) {\nreturn { \nvalid: false, \nmessage: `\u00bfQuisiste decir ${email.split('@')[0]}@${commonMisspellings[domain]}?`,\nsuggestion: `${email.split('@')[0]}@${commonMisspellings[domain]}`\n};\n}\n\/\/ Not in whitelist\nreturn { \nvalid: false, \nmessage: 'Por favor usa un proveedor de correo com\u00fan (Gmail, Yahoo, iCloud, etc.)' \n};\n},\nvalidateMembershipCode: function() {\nconst code = document.getElementById('membership-code').value.trim().toUpperCase();\n\nconsole.log('Validating membership code:', code);\n\nthis.clearErrors();\n\nif (!code) {\nthis.showError(document.getElementById('membership-code'), 'Por favor ingresa tu c\u00f3digo de membres\u00eda');\nreturn;\n}\n\nconst submitBtn = document.getElementById('submit-code');\nconst originalContent = submitBtn.innerHTML;\nsubmitBtn.innerHTML = '<i class=\"fas fa-spinner fa-spin\"><\/i> Verificando...';\nsubmitBtn.disabled = true;\n\n\/\/ Simulate processing time\nsetTimeout(() => {\nsubmitBtn.innerHTML = originalContent;\nsubmitBtn.disabled = false;\n\nconsole.log('About to check if code is valid...');\nif (this.isCodeValid(code)) {\nconsole.log('Code is valid, proceeding with success...');\n\/\/ Mark code as used\nthis.markCodeAsUsed(code);\n\n\/\/ Store the verified code in form data\nthis.formData.membershipCode = code;\n\n\/\/ Show success message\nSwal.fire({\ntitle: '\u00a1C\u00f3digo Verificado!',\nhtml: `\n<div style=\"font-size: 1.1rem; margin-bottom: 0.5rem;\">Tu c\u00f3digo ha sido confirmado y la solicitud ha sido enviada al servidor.<\/div>\n<div style=\"font-size: 0.9rem; color: #6b7280;\">Todo lo que queda por hacer es esperar un correo electr\u00f3nico confirmando el \u00e9xito del proceso.<\/div>\n`,\nicon: 'success',\nconfirmButtonText: 'Entendido',\nconfirmButtonColor: '#3b82f6'\n}).then(() => {\nthis.showSuccessMessage();\n});\n\n} else {\nconsole.log('Code is invalid, showing error...');\n\/\/ Check if code exists but is already used\nconst isCodeInOriginalList = this.validCodes.includes(code);\nconst isCodeUsed = this.usedCodes.includes(code);\n\nlet errorMessage = '';\nif (isCodeInOriginalList && isCodeUsed) {\nerrorMessage = 'Este c\u00f3digo ya ha sido utilizado anteriormente.';\n} else {\nerrorMessage = 'El c\u00f3digo que ingresaste es inv\u00e1lido.';\n}\n\nSwal.fire({\ntitle: 'C\u00f3digo Inv\u00e1lido',\nhtml: `<div style=\"font-size: 1.1rem; margin-bottom: 0.5rem;\">${errorMessage}<\/div>` +\n'<div style=\"font-size: 0.9rem; color: #6b7280;\">Por favor, verifica tu c\u00f3digo o completa el proceso de membres\u00eda para obtener un c\u00f3digo v\u00e1lido.<\/div>',\nicon: 'error',\nconfirmButtonText: 'Intentar de Nuevo',\nconfirmButtonColor: '#ef4444',\nshowCancelButton: true,\ncancelButtonText: 'Obtener Membres\u00eda',\ncancelButtonColor: '#3b82f6'\n}).then((result) => {\nif (result.dismiss === Swal.DismissReason.cancel) {\nwindow.open('https:\/\/nifty.unlockhere.com\/fts\/3JMvDxJjcDzQ-0qIUsZIoKyGS', '_blank');\n}\n});\n\ndocument.getElementById('membership-code').value = '';\n}\n}, 500);\n},\n\nshowSuccessMessage: function() {\n\/\/ Hide the membership form\nconst membershipSection = document.querySelector('.esimforms-membership-section');\nconst navigation = document.querySelector('.esimforms-navigation');\n\nif (membershipSection) {\nmembershipSection.style.display = 'none';\n}\nif (navigation) {\nnavigation.style.display = 'none';\n}\n\n\/\/ Create success message\nconst successHTML = `\n<div class=\"esimforms-success-container\" style=\"text-align: center; padding: 2rem; background: linear-gradient(135deg, #10b981 0%, #059669 100%); border-radius: 16px; color: white; margin: 2rem 0;\">\n<div class=\"esimforms-success-icon\" style=\"font-size: 4rem; margin-bottom: 1rem;\">\n<i class=\"fas fa-check-circle\"><\/i>\n<\/div>\n<h2 style=\"font-size: 2rem; font-weight: 700; margin-bottom: 1rem; color: white;\">\u00a1Membres\u00eda Verificada con \u00c9xito!<\/h2>\n<p style=\"font-size: 1.2rem; margin-bottom: 2rem; opacity: 0.9; color: white;\">Tu c\u00f3digo de membres\u00eda ha sido verificado correctamente.<\/p>\n\n<div class=\"esimforms-success-details\" style=\"background: rgba(255, 255, 255, 0.1); border-radius: 12px; padding: 2rem; margin: 2rem 0; backdrop-filter: blur(10px);\">\n<h3 style=\"font-size: 1.5rem; font-weight: 600; margin-bottom: 1.5rem; color: white;\">Solicitud de eSIM Procesada<\/h3>\n<div style=\"display: grid; grid-template-columns: 1fr 1fr; gap: 1rem; margin-bottom: 2rem; text-align: left;\">\n<div style=\"background: rgba(255, 255, 255, 0.1); padding: 1rem; border-radius: 8px;\">\n<strong style=\"color: white;\">Plan:<\/strong><br>\n<span style=\"color: white;\">${this.getPlanDescription()}<\/span>\n<\/div>\n<div style=\"background: rgba(255, 255, 255, 0.1); padding: 1rem; border-radius: 8px;\">\n<strong style=\"color: white;\">Destino:<\/strong><br>\n<span style=\"color: white;\">${this.formData.destination || 'Plan Global'}<\/span>\n<\/div>\n<div style=\"background: rgba(255, 255, 255, 0.1); padding: 1rem; border-radius: 8px;\">\n<strong style=\"color: white;\">Nombre:<\/strong><br>\n<span style=\"color: white;\">${this.formData.name}<\/span>\n<\/div>\n<div style=\"background: rgba(255, 255, 255, 0.1); padding: 1rem; border-radius: 8px;\">\n<strong style=\"color: white;\">Email:<\/strong><br>\n<span style=\"color: white;\">${this.formData.email}<\/span>\n<\/div>\n<\/div>\n\n<div style=\"background: rgba(255, 255, 255, 0.15); border-radius: 12px; padding: 1.5rem; margin-top: 2rem;\">\n<h4 style=\"font-size: 1.2rem; font-weight: 600; margin-bottom: 1rem; color: white; display: flex; align-items: center; justify-content: center; gap: 0.5rem;\">\n<i class=\"fas fa-envelope\"><\/i>\nSiguiente Paso\n<\/h4>\n<p style=\"font-size: 1rem; color: white; line-height: 1.6;\">\nTu solicitud de eSIM ha sido ejecutada exitosamente. \nEn los pr\u00f3ximos minutos recibir\u00e1s un correo electr\u00f3nico en <strong>${this.formData.email}<\/strong> \ncon las credenciales de tu eSIM y el c\u00f3digo QR para activarlo.\n<\/p>\n<\/div>\n<\/div>\n\n<div style=\"display: flex; gap: 1rem; justify-content: center; margin-top: 2rem;\">\n<a href=\"https:\/\/unlockhere.com\/track-my-unlock\/\" target=\"_blank\" style=\"background: white; color: #10b981; padding: 1rem 2rem; border-radius: 12px; text-decoration: none; font-weight: 600; display: inline-flex; align-items: center; gap: 0.5rem; box-shadow: 0 4px 12px rgba(0,0,0,0.1);\">\n<i class=\"fas fa-search\"><\/i>\nRastrear mi eSIM\n<\/a>\n<a href=\"https:\/\/unlockhere.com\/support\/\" target=\"_blank\" style=\"background: rgba(255, 255, 255, 0.2); color: white; padding: 1rem 2rem; border-radius: 12px; text-decoration: none; font-weight: 600; display: inline-flex; align-items: center; gap: 0.5rem; border: 2px solid white;\">\n<i class=\"fas fa-headset\"><\/i>\nSoporte\n<\/a>\n<\/div>\n<\/div>\n`;\n\nconst stepContent = document.querySelector('.esimforms-step.active .esimforms-step-content');\nif (stepContent) {\nstepContent.innerHTML = successHTML;\n}\n\n\/\/ Show celebratory animation\nthis.showCelebrationAnimation();\n},\n\nshowCelebrationAnimation: function() {\n\/\/ Simplified animation - just show a quick CSS animation\nconst successContainer = document.querySelector('.esimforms-success-container');\nif (successContainer) {\nsuccessContainer.style.animation = 'esimforms-success-slide-up 0.8s ease-out';\n}\n},\n\ngetPlanDescription: function() {\nconst planType = this.formData.planType;\nif (planType === 'global') {\nreturn 'Plan Global - Cobertura Mundial';\n} else if (planType === 'regional') {\nreturn 'Plan Regional';\n} else if (planType === 'local') {\nreturn 'Plan Local';\n} else {\nreturn 'Plan eSIM';\n}\n},\nshowError: function(element, message) {\nelement.classList.add('error');\nconst errorDiv = document.createElement('div');\nerrorDiv.className = 'esimforms-error-message';\nerrorDiv.innerHTML = `<i class=\"fas fa-exclamation-circle\"><\/i>${message}`;\nelement.parentNode.insertBefore(errorDiv, element.nextSibling);\n},\nclearErrors: function() {\ndocument.querySelectorAll('.error').forEach(el => {\nel.classList.remove('error');\n});\ndocument.querySelectorAll('.esimforms-error-message').forEach(el => {\nel.remove();\n});\n}\n};\n\/\/ Initialize when DOM is ready\ndocument.addEventListener('DOMContentLoaded', function() {\neSIMForms.init();\n});\n<\/script>\n<\/div>\n            <!-- END: eSIM Form -->\n<\/section>\n\n        <section id=\"intro\">\n            <p style=\"text-align:center; font-size: 1.1rem;\">\u00bfTe gustar\u00eda tener una eSIM gratis, pero no sabes d\u00f3nde buscar? Con UnlockHere puedes obtener una <a href=\"https:\/\/www.xatakamovil.com\/comparativa-de-tarifas\/esim-que-que-ventajas-aporta-cuando-llegara-masivamente-todo-tipo-dispositivos\" target=\"_blank\" rel=\"noopener\">eSIM<\/a> gratis para distintos pa\u00edses y operadores con gran cobertura en Am\u00e9rica Latina, Estados Unidos y Europa. Adem\u00e1s de esto, te ense\u00f1aremos todo lo que debes saber sobre las eSIM para que est\u00e9s al d\u00eda con esta tecnolog\u00eda y aclares todas tus dudas frente a este servicio.<\/p>\n<\/section>\n\n        <section id=\"what-is-esim\">\n            <h2>\u00bfQu\u00e9 es una eSIM?<\/h2>\n            <p style=\"text-align:center; max-width: 800px; margin: 0 auto;\">Una eSIM es b\u00e1sicamente una SIM virtual que permite tener acceso a una red m\u00f3vil como lo har\u00edas con un chip tradicional. Esta tecnolog\u00eda viene implement\u00e1ndose desde hace unos a\u00f1os y, gracias a su popularidad, se ha adaptado a un gran n\u00famero de dispositivos.<\/p>\n<\/section>\n\n        <section id=\"how-it-works\">\n            <div class=\"grid-2-col\">\n                <div>\n                    <img decoding=\"async\" src=\"https:\/\/unlockhere.com\/es-mx\/wp-content\/uploads\/2026\/07\/Como-funcionan-las-eSIM-en-los-telefonos-1024x494.png\" alt=\"Ilustraci\u00f3n del funcionamiento de una eSIM en un tel\u00e9fono\">\n                    <h3 style=\"margin-top: 1.5rem;\">\u00bfC\u00f3mo funciona la tecnolog\u00eda eSIM?<\/h3>\n                    <p>La manera en que esto funciona, de una forma f\u00e1cil de entender, se basa en una pieza de hardware que est\u00e1 dentro de nuestros dispositivos y permite la autenticaci\u00f3n y env\u00edo de informaci\u00f3n a los operadores m\u00f3viles. Esto quiere decir que solo vamos a necesitar un <a href=\"https:\/\/es.wikipedia.org\/wiki\/C%C3%B3digo_QR\" target=\"_blank\" rel=\"noopener\">c\u00f3digo QR<\/a> o los datos de acceso a la red para poder instalarla.<\/p>\n<\/div>\n                <div>\n                    <img decoding=\"async\" src=\"https:\/\/unlockhere.com\/es-mx\/wp-content\/uploads\/2026\/07\/eSIM-gratis-como-funcionan-1024x494.png\" alt=\"Explicaci\u00f3n visual de una eSIM gratuita\">\n                    <h3 style=\"margin-top: 1.5rem;\">Qu\u00e9 significa \"eSIM gratuita\" realmente<\/h3>\n                    <p>Una eSIM gratuita significa cualquier tipo de eSIM que permita tener acceso a la red. Hablar de este t\u00e9rmino es un poco ambiguo, ya que nos vamos a encontrar con distintos formatos. Muchos operadores o aplicaciones ofrecen este tipo de servicios como una manera de incentivar el uso y fidelizar nuevos clientes.<\/p>\n<\/div>\n<\/div>\n<\/section>\n\n        <section id=\"advantages\">\n            <h2>Ventajas frente a la tarjeta SIM f\u00edsica tradicional<\/h2>\n            <p style=\"text-align:center; max-width: 800px; margin: 0 auto;\">En este punto te puedes estar preguntando qu\u00e9 diferencia esto puede tener frente a una <a href=\"https:\/\/es.wikipedia.org\/wiki\/Tarjeta_SIM\" target=\"_blank\" rel=\"noopener\">SIM tradicional<\/a>, ya que en teor\u00eda son pr\u00e1cticamente lo mismo. Sin embargo, existen algunas ventajas claras que puede que conozcas o no.<\/p>\n            <div class=\"grid-3-col\" style=\"margin-top: 2.5rem;\">\n                <div class=\"custom-card benefit-card\">\n                    <div class=\"icon\">\ud83d\udcb0<\/div>\n                    <h3>Ahorra dinero en Roaming<\/h3>\n                    <p>Al tener una eSIM, puedes conectarte a una red local por una fracci\u00f3n del precio de lo que har\u00edas si tuvieras que activar el servicio de roaming de tu operador.<\/p>\n<\/div>\n                <div class=\"custom-card benefit-card\">\n                    <div class=\"icon\">\ud83d\udcf1<\/div>\n                    <h3>Prueba un operador f\u00e1cilmente<\/h3>\n                    <p>Con las eSIM, puedes obtener acceso a una red diferente con tan solo leer el c\u00f3digo QR, sin tener que localizar un punto de venta o esperar una SIM f\u00edsica.<\/p>\n<\/div>\n                <div class=\"custom-card benefit-card\">\n                    <div class=\"icon\">\ud83d\udd04<\/div>\n                    <h3>Plan de datos a tu elecci\u00f3n<\/h3>\n                    <p>Las eSIM son capaces de almacenar diferentes perfiles de red, por lo cual podemos cambiar f\u00e1cilmente de operador sin tener que retirar tu chip o realizar procesos complejos.<\/p>\n<\/div>\n<\/div>\n<\/section>\n\n        <section id=\"compatibility\">\n            <h2>Modelos compatibles con eSIM<\/h2>\n            <p style=\"text-align:center; max-width: 800px; margin: 0 auto;\">Para poder usar esta tecnolog\u00eda, primero debes ver si tu dispositivo es compatible. Por lo general, los modelos nuevos de iPhone y la mayor\u00eda de gama media y alta de Android ya tienen esta tecnolog\u00eda.<\/p>\n\n            <div class=\"grid-2-col\" style=\"margin-top: 2.5rem;\">\n                <div class=\"custom-card compatibility-card\">\n                    <h3><span class=\"icon\">\uf8ff<\/span> Verificar en iPhone<\/h3>\n                    <p>Sigue estos pasos para verificar la compatibilidad en tu iPhone:<\/p>\n                    <ul>\n                        <li>Abre <strong>Ajustes<\/strong>.<\/li>\n                        <li>Toca <strong>Datos m\u00f3viles<\/strong> o <strong>Celular<\/strong>.<\/li>\n                        <li>Si ves la opci\u00f3n <strong>Agregar eSIM<\/strong> o <strong>Agregar plan de datos m\u00f3viles<\/strong>, tu iPhone es compatible.<\/li>\n                    <\/ul>\n<\/div>\n                 <div class=\"custom-card compatibility-card\">\n                    <h3><span class=\"icon\">\ud83e\udd16<\/span> Verificar en Android<\/h3>\n                    <p>En Android el proceso es similar, aunque puede variar ligeramente:<\/p>\n                    <ul>\n                        <li>Ve a <strong>Ajustes<\/strong>.<\/li>\n                        <li>Entra en <strong>Conexiones<\/strong>, <strong>Red m\u00f3vil<\/strong> o <strong>SIM y red<\/strong>.<\/li>\n                        <li>Busca una opci\u00f3n que diga <strong>Agregar eSIM<\/strong> o <strong>Administrador de SIM<\/strong>.<\/li>\n                    <\/ul>\n    <\/div>\n<\/div>\n        <\/section>\n\n        <section id=\"how-to-get\">\n            <h2>D\u00f3nde obtener una eSIM gratis en 2026<\/h2>\n            <p style=\"text-align:center; max-width: 800px; margin: 0 auto;\">Actualmente existen diversos m\u00e9todos para obtener una eSIM gratis. Es bueno tenerlos en mente y contar con la seguridad de que estamos optando por la mejor alternativa.<\/p>\n             <div class=\"grid-2-col\" style=\"margin-top: 2.5rem;\">\n                <div>\n                    <h3>Operadores y servicios de prueba<\/h3>\n                    <p>La primera, y sin duda la m\u00e1s conocida, es activar una eSIM promocional por medio del operador. Muchas compa\u00f1\u00edas de servicios m\u00f3viles ofrecen una eSIM como una manera de obtener nuevos usuarios a su red.<\/p>\n                    <h3>Canje por c\u00f3digo QR o app<\/h3>\n                    <p>Muchas apps, especialmente de revendedores, ofrecen eSIMs de prueba de forma gratuita a cambio de la descarga de sus aplicaciones o llenar formularios. Suelen estar muy limitadas en duraci\u00f3n y datos.<\/p>\n                    <h3>\u00bfPor qu\u00e9 usar UnlockHere?<\/h3>\n                    <p>UnlockHere ha conseguido proveer a sus usuarios una prueba gratuita de 30 d\u00edas en la red o regi\u00f3n de su preferencia de una manera f\u00e1cil y sencilla, sin complicaciones ni t\u00e9rminos y condiciones complejos.<\/p>\n<\/div>\n                <div>\n                    <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/unlockhere.com\/es-mx\/wp-content\/uploads\/2026\/07\/eSIM-gratis-opciones-937x1024.png\" alt=\"Opciones para obtener una eSIM gratis\">\n<\/div>\n    <\/div>\n        <\/section>\n\n        <section id=\"activation-tutorial\">\n            <h2>C\u00f3mo activar y configurar tu eSIM con UnlockHere<\/h2>\n            <p style=\"text-align:center; max-width: 800px; margin: 0 auto;\">Para poder activar tu eSIM con UnlockHere, deber\u00e1s seguir algunos pasos que son bastante sencillos y r\u00e1pidos. Recuerda seguirlos al pie de la letra para prevenir cualquier tipo de error durante el proceso.<\/p>\n            <div style=\"margin-top: 2.5rem; max-width: 800px; margin-left: auto; margin-right: auto;\">\n                <div class=\"tutorial-step\">\n                    <div class=\"step-number\">1<\/div>\n                    <div>\n                        <h3>Elige tu regi\u00f3n u operador<\/h3>\n                        <p>Para comenzar, debes elegir qu\u00e9 tipo de eSIM quieres obtener. Como recomendaci\u00f3n, sugerimos que, si vas de viaje, uses una eSIM regional o global para estar conectado.<\/p>\n<\/div>\n<\/div>\n                <div class=\"tutorial-step\">\n                    <div class=\"step-number\">2<\/div>\n                    <div>\n                        <h3>Activa y recibe tu eSIM<\/h3>\n                        <p>Una vez ya tengas elegida tu eSIM, deber\u00e1s ingresar tu nombre y correo electr\u00f3nico para que te sea enviado el c\u00f3digo QR. Como medida de seguridad, hemos implementado un proceso de verificaci\u00f3n extra que es realizado por un tercero.<\/p>\n<\/div>\n<\/div>\n                <div class=\"tutorial-step\">\n                    <div class=\"step-number\">3<\/div>\n                    <div>\n                        <h3>Disfruta de 30 d\u00edas con datos ilimitados<\/h3>\n                        <p>Una vez tu cuenta est\u00e9 verificada, se te enviar\u00e1n los datos con tu eSIM. Todo lo que debes hacer es escanear el c\u00f3digo QR y seguir los pasos de configuraci\u00f3n para tu dispositivo.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/section>\n\n         <section id=\"reinstall-info\">\n            <h2>\u00bfQu\u00e9 pasa si borras o reinstalas tu eSIM?<\/h2>\n            <p style=\"text-align:center; max-width: 800px; margin: 0 auto;\">En dado caso que elimines el perfil por error, no podr\u00e1s usar el mismo c\u00f3digo QR, ya que es de un solo uso. Sin embargo, existen algunas alternativas para volver a activar tu eSIM.<\/p>\n            <div class=\"grid-3-col\" style=\"margin-top: 2.5rem;\">\n                <div class=\"custom-card\">\n                    <h3>Reinstalaci\u00f3n correcta<\/h3>\n                    <p>Por lo general, al recibir tu eSIM, esta no solo incluye un c\u00f3digo QR, tambi\u00e9n los datos de autenticaci\u00f3n para la activaci\u00f3n manual. Gu\u00e1rdalos para poder reinstalarla si es necesario.<\/p>\n<\/div>\n                <div class=\"custom-card\">\n                    <h3>Solicitar un reemplazo<\/h3>\n                    <p>Si has perdido la informaci\u00f3n de activaci\u00f3n manual, puedes contactar al soporte para pedir un reemplazo de tu eSIM. En muchos casos tu perfil puede restablecerse.<\/p>\n    <\/div>\n                <div class=\"custom-card\">\n                    <h3>Uso de SIM f\u00edsica<\/h3>\n                    <p>No hay restricciones. Usar una eSIM no deshabilita tu SIM f\u00edsica. Si tienes problemas con ella, revisa la ranura o contacta a tu operadora para verificar que tu cuenta est\u00e9 activa.<\/p>\n<\/div>\n<\/div>\n<\/section>\n\n        <section id=\"commercial-differences\">\n            <h2>Diferencias entre eSIM gratuita y planes comerciales<\/h2>\n            <p style=\"text-align:center; max-width: 800px; margin: 0 auto;\">Ahora te puedes estar preguntando por qu\u00e9 no simplemente comprar una eSIM comercial pagando el precio normal. Esta pregunta es totalmente v\u00e1lida y te vamos a mostrar algunos puntos que pueden hacer que cambies de opini\u00f3n.<\/p>\n             <div class=\"grid-3-col\" style=\"margin-top: 2.5rem;\">\n                <div class=\"custom-card\">\n                    <h3>eSIM gratuita vs. Plan tradicional<\/h3>\n                    <p>Una eSIM gratuita es una gran manera de poder probar una nueva red sin el riesgo de estar atado a cualquier tipo de contrato o cl\u00e1usula de permanencia.<\/p>\n<\/div>\n                 <div class=\"custom-card\">\n                    <h3>\u00bfHay riesgos ocultos?<\/h3>\n                    <p>Depende. Servicios como UnlockHere son transparentes. Otras compa\u00f1\u00edas pueden no serlo y atarte a pagos recurrentes. Lee siempre los t\u00e9rminos y condiciones.<\/p>\n    <\/div>\n                 <div class=\"custom-card\">\n                    <h3>Restricciones comunes<\/h3>\n                    <p>No existe diferencia funcional entre una eSIM gratuita y una comercial. Las limitaciones (solo datos, etc.) dependen del plan que elijas, no de la tecnolog\u00eda.<\/p>\n<\/div>\n<\/div>\n<\/section>\n\n        <section id=\"cta\" class=\"cta-section\">\n            <h2>\u00bfPuedo usar una eSIM en un m\u00f3vil bloqueado?<\/h2>\n            <p>\n                No, la tecnolog\u00eda eSIM depende de que tu dispositivo est\u00e9 desbloqueado para usar redes de otros operadores. Si tienes un bloqueo activo por parte de tu compa\u00f1\u00eda, no podr\u00e1s instalar una eSIM de otro proveedor. A pesar de que esto puede ser frustrante, <strong>UnlockHere tambi\u00e9n ofrece el servicio de desbloqueo 100% online.<\/strong>\n            <\/p>\n            <a href=\"https:\/\/unlockhere.com\/es-mx\/desbloqueo-de-operador\/\" class=\"cta-button\">Desbloquear Celular del Operador<\/a>\n<\/section>\n\n        <section id=\"faq\">\n<h2>Preguntas Frecuentes<\/h2>\n            <details>\n                <summary>\u00bfPuedo cambiar de operador con una eSIM?<\/summary>\n                <div class=\"faq-answer\">\n                    <p>S\u00ed, puedes usar cualquier tipo de red de tu elecci\u00f3n. Todo va a depender realmente del tipo de eSIM que elijas. Recuerda revisar el tipo de red con la que tu eSIM es compatible para saber exactamente a qu\u00e9 red te vas a conectar.<\/p>\n<\/div>\n            <\/details>\n            <details>\n                <summary>\u00bfLa eSIM funciona en prepago y pospago?<\/summary>\n                <div class=\"faq-answer\">\n                    <p>S\u00ed, la eSIM es simplemente una tecnolog\u00eda que reemplaza las SIM tradicionales. Puedes tener tu n\u00famero principal con tu operador y usarla como lo har\u00edamos tradicionalmente.<\/p>\n        <\/div>\n            <\/details>\n            <details>\n                <summary>\u00bfQu\u00e9 pasa si no tengo se\u00f1al con la eSIM?<\/summary>\n                <div class=\"faq-answer\">\n                    <p>Esto puede significar que est\u00e1s fuera de la zona de cobertura del operador o que tu eSIM haya caducado. Si este es tu caso, revisa los t\u00e9rminos y condiciones de la eSIM que has obtenido.<\/p>\n    <\/div>\n            <\/details>\n            <details>\n                <summary>\u00bfC\u00f3mo desinstalar una eSIM que ya no uso?<\/summary>\n                <div class=\"faq-answer\">\n                    <p>En caso de que desees desinstalar una eSIM, basta con ir a las configuraciones y eliminar el perfil. Recuerda que al momento de instalarla se asign\u00f3 alg\u00fan tipo de nombre, as\u00ed que ten cuidado de no eliminar el perfil err\u00f3neo.<\/p>\n    <\/div>\n            <\/details>\n             <details>\n                <summary>\u00bfPuedo conseguir una eSIM gratis?<\/summary>\n                <div class=\"faq-answer\">\n                    <p>S\u00ed, existen diversas plataformas que ofrecen este tipo de servicios, por lo general con bastantes limitaciones. Si deseas obtener una eSIM gratuita y sin limitaciones por 30 d\u00edas, UnlockHere es tu mejor opci\u00f3n.<\/p>\n<\/div>\n            <\/details>\n<\/section>\n<\/main>\n<\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Hemos renovado nuestro dise\u00f1o para hacer todo m\u00e1s simple. Las funciones principales que ya conoces no han cambiado. Servicio de eSIM Gratuito Cobertura Mundial Activaci\u00f3n Inmediata 30 D\u00edas de Prueba \u00bfQu\u00e9 tipo de cobertura necesitas? Haz clic en el plan que mejor se adapte a tus necesidades Global Cobertura en m\u00e1s de 120 pa\u00edses M\u00e1s [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-9124","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/unlockhere.com\/es-mx\/wp-json\/wp\/v2\/pages\/9124","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/unlockhere.com\/es-mx\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/unlockhere.com\/es-mx\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/unlockhere.com\/es-mx\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/unlockhere.com\/es-mx\/wp-json\/wp\/v2\/comments?post=9124"}],"version-history":[{"count":52,"href":"https:\/\/unlockhere.com\/es-mx\/wp-json\/wp\/v2\/pages\/9124\/revisions"}],"predecessor-version":[{"id":11665,"href":"https:\/\/unlockhere.com\/es-mx\/wp-json\/wp\/v2\/pages\/9124\/revisions\/11665"}],"wp:attachment":[{"href":"https:\/\/unlockhere.com\/es-mx\/wp-json\/wp\/v2\/media?parent=9124"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}