{"id":205,"date":"2026-03-30T16:27:47","date_gmt":"2026-03-30T16:27:47","guid":{"rendered":"https:\/\/royalluck.com.co\/?page_id=205"},"modified":"2026-03-30T21:55:01","modified_gmt":"2026-03-30T21:55:01","slug":"revisa-tus-numeros-2","status":"publish","type":"page","link":"https:\/\/royalluck.com.co\/?page_id=205","title":{"rendered":"Revisa tus numeros"},"content":{"rendered":"\n<div class=\"rc-mt-wrap\">\n\n    <!-- PASO 1: Email -->\n    <div id=\"rc-step-email\" class=\"rc-mt-step\">\n        <div class=\"rc-mt-hero\">\n            <div class=\"rc-mt-hero-icon\">\ud83c\udf9f\ufe0f<\/div>\n            <h2 class=\"rc-mt-title\">Mis Boletos<\/h2>\n            <p class=\"rc-mt-subtitle\">Ingresa tu correo para consultar tus n\u00fameros.<\/p>\n        <\/div>\n        <form id=\"rc-email-form\" class=\"rc-mt-form-row\">\n            <input type=\"email\" id=\"rc-lookup-email\" required\n                   class=\"rc-mt-input\"\n                   placeholder=\"tu@correo.com\">\n            <button type=\"submit\" id=\"rc-btn-send-otp\" class=\"rc-mt-btn\">\n                Enviar c\u00f3digo            <\/button>\n        <\/form>\n        <div id=\"rc-email-error\" class=\"rc-mt-error\" style=\"display:none;\"><\/div>\n    <\/div>\n\n    <!-- PASO 2: OTP -->\n    <div id=\"rc-step-otp\" class=\"rc-mt-step\" style=\"display:none;\">\n        <div class=\"rc-mt-hero\">\n            <div class=\"rc-mt-hero-icon\">\ud83d\udd10<\/div>\n            <h2 class=\"rc-mt-title\">C\u00f3digo de Verificaci\u00f3n<\/h2>\n            <p class=\"rc-mt-subtitle\" id=\"rc-otp-hint\"><\/p>\n        <\/div>\n        <form id=\"rc-otp-form\" class=\"rc-mt-form-center\">\n            <input type=\"text\" id=\"rc-otp-input\" maxlength=\"6\" pattern=\"[0-9]{6}\" required\n                   class=\"rc-mt-otp-input\" placeholder=\"000000\" autocomplete=\"one-time-code\">\n            <button type=\"submit\" id=\"rc-btn-verify-otp\" class=\"rc-mt-btn rc-mt-btn--block\">\n                Verificar            <\/button>\n        <\/form>\n        <div id=\"rc-otp-error\" class=\"rc-mt-error\" style=\"display:none;\"><\/div>\n        <p class=\"rc-mt-center\" style=\"margin-top:14px;\">\n            <a href=\"#\" id=\"rc-resend-otp\" class=\"rc-mt-link\">Reenviar c\u00f3digo<\/a>\n        <\/p>\n    <\/div>\n\n    <!-- PASO 3: Resultados -->\n    <div id=\"rc-step-results\" class=\"rc-mt-step\" style=\"display:none;\">\n        <div class=\"rc-mt-hero\">\n            <div class=\"rc-mt-hero-icon\">\u2705<\/div>\n            <h2 class=\"rc-mt-title\">Tus Boletos<\/h2>\n        <\/div>\n        <div id=\"rc-tickets-results\"><\/div>\n        <div id=\"rc-tickets-empty\" class=\"rc-mt-empty\" style=\"display:none;\">\n            <p style=\"font-size:40px;\">\ud83d\ude14<\/p>\n            <p>No se encontraron boletos con este correo.<\/p>\n        <\/div>\n        <div class=\"rc-mt-center\" style=\"margin-top:24px;\">\n            <a href=\"#\" id=\"rc-back-start\" class=\"rc-mt-link\">\u2190 Buscar con otro correo<\/a>\n        <\/div>\n    <\/div>\n\n    <!-- Spinner -->\n    <div id=\"rc-tickets-loading\" style=\"display:none;\" class=\"rc-mt-loading\">\n        <div class=\"rc-mt-spinner\"><\/div>\n        <p class=\"rc-mt-subtitle\" id=\"rc-loading-text\">Procesando...<\/p>\n    <\/div>\n\n<\/div><!-- \/.rc-mt-wrap -->\n\n<style>\n\/* \u2500\u2500 Wrapper \u2500\u2500 *\/\n.rc-mt-wrap {\n    max-width: 680px;\n    margin: 48px auto;\n    padding: 0 16px;\n    font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n}\n\n\/* \u2500\u2500 Hero header \u2500\u2500 *\/\n.rc-mt-hero { text-align: center; margin-bottom: 28px; }\n.rc-mt-hero-icon { font-size: 52px; line-height: 1; margin-bottom: 10px; }\n.rc-mt-title { margin: 0 0 6px; font-size: 26px; font-weight: 800; color: #1A1A1A; }\n.rc-mt-subtitle { margin: 0; color: #666; font-size: 14px; }\n\n\/* \u2500\u2500 Forms \u2500\u2500 *\/\n.rc-mt-form-row { display: flex; gap: 10px; }\n.rc-mt-form-center { display: flex; flex-direction: column; align-items: center; gap: 14px; }\n.rc-mt-input {\n    flex: 1;\n    padding: 13px 16px;\n    border: 2px solid #e0e0e0;\n    border-radius: 10px;\n    font-size: 16px;\n    outline: none;\n    transition: border-color .2s;\n    color: #1A1A1A;\n}\n.rc-mt-input:focus { border-color: #1E4A7D; }\n.rc-mt-otp-input {\n    width: 200px;\n    padding: 16px;\n    border: 2px solid #e0e0e0;\n    border-radius: 12px;\n    font-size: 30px;\n    text-align: center;\n    letter-spacing: 10px;\n    font-weight: 800;\n    outline: none;\n    color: #1E4A7D;\n    transition: border-color .2s;\n}\n.rc-mt-otp-input:focus { border-color: #1E4A7D; }\n.rc-mt-btn {\n    padding: 13px 22px;\n    background: #1E4A7D;\n    color: #fff;\n    border: none;\n    border-radius: 10px;\n    font-weight: 700;\n    font-size: 15px;\n    cursor: pointer;\n    white-space: nowrap;\n    transition: background .2s, transform .15s;\n}\n.rc-mt-btn:hover { background: #112B4A; transform: translateY(-1px); }\n.rc-mt-btn--block { width: 200px; }\n\n\/* \u2500\u2500 Misc \u2500\u2500 *\/\n.rc-mt-error  { color: #dc3545; text-align: center; margin-top: 10px; font-size: 14px; }\n.rc-mt-center { text-align: center; }\n.rc-mt-link   { color: #1E4A7D; font-weight: 600; text-decoration: none; font-size: 14px; }\n.rc-mt-link:hover { text-decoration: underline; }\n.rc-mt-empty  { text-align: center; padding: 40px; color: #666; }\n.rc-mt-loading { text-align: center; padding: 48px; }\n.rc-mt-spinner {\n    display: inline-block;\n    width: 38px; height: 38px;\n    border: 3px solid #e0e0e0;\n    border-top-color: #1E4A7D;\n    border-radius: 50%;\n    animation: rc-mt-spin .7s linear infinite;\n    margin-bottom: 12px;\n}\n@keyframes rc-mt-spin { to { transform: rotate(360deg); } }\n\n\/* \u2500\u2500 Raffle group \u2500\u2500 *\/\n.rc-mt-raffle-group {\n    margin-bottom: 32px;\n}\n.rc-mt-raffle-header {\n    display: flex;\n    align-items: center;\n    gap: 12px;\n    margin-bottom: 18px;\n    padding-bottom: 12px;\n    border-bottom: 2px solid #E8EDF2;\n}\n.rc-mt-raffle-name {\n    font-size: 18px;\n    font-weight: 800;\n    color: #1A1A1A;\n    flex: 1;\n    margin: 0;\n}\n.rc-mt-raffle-count {\n    background: #1E4A7D;\n    color: #fff;\n    font-size: 12px;\n    font-weight: 700;\n    padding: 4px 10px;\n    border-radius: 20px;\n    white-space: nowrap;\n}\n\n\/* \u2500\u2500 Ticket grid \u2500\u2500 *\/\n.rc-mt-tickets-grid {\n    display: grid;\n    grid-template-columns: repeat(auto-fill, minmax(155px, 1fr));\n    gap: 14px;\n}\n\n\/* \u2500\u2500 Ticket card (forma de boleto) \u2500\u2500 *\/\n.rc-ticket-outer {\n    \/* Provee el fondo blanco para los notch circulares *\/\n    position: relative;\n    padding: 0 10px; \/* espacio lateral para los notch *\/\n}\n.rc-ticket-outer::before,\n.rc-ticket-outer::after {\n    content: '';\n    position: absolute;\n    width: 20px;\n    height: 20px;\n    background: #ffffff; \/* color del fondo de la p\u00e1gina *\/\n    border-radius: 50%;\n    top: 50%;\n    transform: translateY(-50%);\n    z-index: 2;\n    box-shadow: inset 0 1px 3px rgba(0,0,0,0.12);\n}\n.rc-ticket-outer::before { left: 0; }\n.rc-ticket-outer::after  { right: 0; }\n\n.rc-ticket-card {\n    background: #1E4A7D;\n    border-radius: 8px;\n    display: flex;\n    align-items: stretch;\n    overflow: hidden;\n    box-shadow: 0 4px 14px rgba(30,74,125,0.28);\n    transition: transform .2s, box-shadow .2s;\n    position: relative;\n}\n.rc-ticket-card:hover {\n    transform: translateY(-3px);\n    box-shadow: 0 8px 22px rgba(30,74,125,0.4);\n}\n\n\/* Cuerpo principal del boleto *\/\n.rc-ticket-body {\n    flex: 1;\n    padding: 14px 12px 12px;\n    text-align: center;\n}\n.rc-ticket-label {\n    font-size: 9px;\n    font-weight: 700;\n    letter-spacing: 2px;\n    color: rgba(255,255,255,0.55);\n    text-transform: uppercase;\n    display: block;\n    margin-bottom: 4px;\n}\n.rc-ticket-number {\n    font-size: 22px;\n    font-weight: 900;\n    color: #C59B4B;\n    display: block;\n    letter-spacing: 1px;\n    line-height: 1.1;\n}\n\n\/* Separador punteado vertical *\/\n.rc-ticket-divider {\n    width: 1px;\n    background: repeating-linear-gradient(\n        to bottom,\n        transparent 0,\n        transparent 4px,\n        rgba(255,255,255,0.25) 4px,\n        rgba(255,255,255,0.25) 8px\n    );\n    flex-shrink: 0;\n}\n\n\/* Stub (colilla derecha) *\/\n.rc-ticket-stub {\n    width: 46px;\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n    justify-content: center;\n    padding: 8px 4px;\n    background: rgba(0,0,0,0.15);\n    gap: 4px;\n}\n.rc-ticket-stub-text {\n    font-size: 7px;\n    font-weight: 800;\n    letter-spacing: 1.5px;\n    color: #C59B4B;\n    text-transform: uppercase;\n    writing-mode: vertical-rl;\n    text-orientation: mixed;\n    transform: rotate(180deg);\n}\n.rc-ticket-stub-icon {\n    font-size: 14px;\n    opacity: 0.8;\n}\n\n\/* \u2500\u2500 Responsive \u2500\u2500 *\/\n@media (max-width: 480px) {\n    .rc-mt-form-row { flex-direction: column; }\n    .rc-mt-btn { width: 100%; }\n    .rc-mt-tickets-grid { grid-template-columns: repeat(auto-fill, minmax(130px, 1fr)); gap: 10px; }\n    .rc-ticket-number { font-size: 18px; }\n}\n<\/style>\n\n<script>\n(function($) {\n    var restBase = 'https:\/\/royalluck.com.co\/index.php?rest_route=\/rafflecore\/v1';\n    var nonce    = '031a039a4e';\n    var email    = '';\n    var otpToken = '';\n\n    function showStep(step) {\n        $('#rc-step-email, #rc-step-otp, #rc-step-results, #rc-tickets-loading').hide();\n        $('#rc-email-error, #rc-otp-error').hide();\n        $(step).show();\n    }\n\n    function showLoading(text) {\n        $('#rc-loading-text').text(text || 'Procesando...');\n        showStep('#rc-tickets-loading');\n    }\n\n    function apiPost(endpoint, data) {\n        return $.ajax({\n            url: restBase + '\/' + endpoint,\n            type: 'POST',\n            data: JSON.stringify(data),\n            contentType: 'application\/json',\n            beforeSend: function(xhr) { xhr.setRequestHeader('X-WP-Nonce', nonce); }\n        });\n    }\n\n    function escHtml(str) {\n        return $('<span>').text(String(str)).html();\n    }\n\n    function pad(n) {\n        return String(n).padStart(3, '0');\n    }\n\n    \/* Construye el HTML de un boleto con forma de ticket *\/\n    function buildTicket(number) {\n        return '<div class=\"rc-ticket-outer\">' +\n            '<div class=\"rc-ticket-card\">' +\n                '<div class=\"rc-ticket-body\">' +\n                    '<span class=\"rc-ticket-label\">Boleto<\/span>' +\n                    '<span class=\"rc-ticket-number\">#' + pad(escHtml(number)) + '<\/span>' +\n                '<\/div>' +\n                '<div class=\"rc-ticket-divider\"><\/div>' +\n                '<div class=\"rc-ticket-stub\">' +\n                    '<span class=\"rc-ticket-stub-icon\">\ud83c\udf9f\ufe0f<\/span>' +\n                    '<span class=\"rc-ticket-stub-text\">V\u00c1LIDO<\/span>' +\n                '<\/div>' +\n            '<\/div>' +\n        '<\/div>';\n    }\n\n    \/\/ PASO 1: Enviar OTP\n    $('#rc-email-form').on('submit', function(e) {\n        e.preventDefault();\n        email = $('#rc-lookup-email').val().trim();\n        if (!email) return;\n        showLoading('Enviando c\u00f3digo...');\n        apiPost('send-otp', { email: email })\n            .done(function() {\n                $('#rc-otp-hint').text('Enviamos un c\u00f3digo de 6 d\u00edgitos a ' + email);\n                showStep('#rc-step-otp');\n                $('#rc-otp-input').val('').focus();\n            })\n            .fail(function(xhr) {\n                showStep('#rc-step-email');\n                var msg = (xhr.responseJSON && xhr.responseJSON.message) || 'Error al enviar el c\u00f3digo.';\n                $('#rc-email-error').text(msg).show();\n            });\n    });\n\n    \/\/ PASO 2: Verificar OTP\n    $('#rc-otp-form').on('submit', function(e) {\n        e.preventDefault();\n        var code = $('#rc-otp-input').val().trim();\n        if (code.length !== 6) return;\n        showLoading('Verificando...');\n        apiPost('verify-otp', { email: email, otp_code: code })\n            .done(function(res) {\n                otpToken = res.otp_token;\n                showLoading('Cargando boletos...');\n                loadTickets();\n            })\n            .fail(function(xhr) {\n                showStep('#rc-step-otp');\n                var msg = (xhr.responseJSON && xhr.responseJSON.message) || 'C\u00f3digo incorrecto.';\n                $('#rc-otp-error').text(msg).show();\n            });\n    });\n\n    \/\/ Reenviar OTP\n    $('#rc-resend-otp').on('click', function(e) {\n        e.preventDefault();\n        showLoading('Reenviando c\u00f3digo...');\n        apiPost('send-otp', { email: email })\n            .done(function() {\n                showStep('#rc-step-otp');\n                $('#rc-otp-input').val('').focus();\n            })\n            .fail(function() {\n                showStep('#rc-step-otp');\n                $('#rc-otp-error').text('No se pudo reenviar. Espera un momento.').show();\n            });\n    });\n\n    \/\/ PASO 3: Cargar boletos\n    function loadTickets() {\n        apiPost('lookup-tickets', { email: email, otp_token: otpToken })\n            .done(function(res) {\n                if (!res || !res.length) {\n                    showStep('#rc-step-results');\n                    $('#rc-tickets-empty').show();\n                    return;\n                }\n                var html = '';\n                res.forEach(function(group) {\n                    var count = group.tickets.length;\n                    html += '<div class=\"rc-mt-raffle-group\">';\n                    html += '<div class=\"rc-mt-raffle-header\">';\n                    html += '<h3 class=\"rc-mt-raffle-name\">' + escHtml(group.raffle) + '<\/h3>';\n                    html += '<span class=\"rc-mt-raffle-count\">' + count + ' boleto' + (count !== 1 ? 's' : '') + '<\/span>';\n                    html += '<\/div>';\n                    html += '<div class=\"rc-mt-tickets-grid\">';\n                    group.tickets.forEach(function(t) {\n                        html += buildTicket(t.number);\n                    });\n                    html += '<\/div><\/div>';\n                });\n                $('#rc-tickets-results').html(html);\n                showStep('#rc-step-results');\n            })\n            .fail(function() {\n                showStep('#rc-step-results');\n                $('#rc-tickets-empty').show();\n            });\n    }\n\n    \/\/ Volver al inicio\n    $('#rc-back-start').on('click', function(e) {\n        e.preventDefault();\n        showStep('#rc-step-email');\n        $('#rc-lookup-email').val('').focus();\n    });\n\n})(jQuery);\n<\/script>\n\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_kad_post_classname":"","_joinchat":[],"footnotes":""},"class_list":["post-205","page","type-page","status-publish","hentry"],"_hostinger_reach_plugin_has_subscription_block":false,"_hostinger_reach_plugin_is_elementor":false,"_links":{"self":[{"href":"https:\/\/royalluck.com.co\/index.php?rest_route=\/wp\/v2\/pages\/205","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/royalluck.com.co\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/royalluck.com.co\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/royalluck.com.co\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/royalluck.com.co\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=205"}],"version-history":[{"count":2,"href":"https:\/\/royalluck.com.co\/index.php?rest_route=\/wp\/v2\/pages\/205\/revisions"}],"predecessor-version":[{"id":280,"href":"https:\/\/royalluck.com.co\/index.php?rest_route=\/wp\/v2\/pages\/205\/revisions\/280"}],"wp:attachment":[{"href":"https:\/\/royalluck.com.co\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=205"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}