{"id":8,"date":"2026-05-15T11:50:52","date_gmt":"2026-05-15T11:50:52","guid":{"rendered":"https:\/\/audypremios.proyectoscreatos.com\/?page_id=8"},"modified":"2026-05-15T11:52:34","modified_gmt":"2026-05-15T11:52:34","slug":"registro-al-sorteo","status":"publish","type":"page","link":"https:\/\/audypremios.proyectoscreatos.com\/","title":{"rendered":"Registro al sorteo"},"content":{"rendered":"    <div class=\"sorteo-app\">\n        <div class=\"app-inner\">\n            \n                            <div class=\"top-date-banner\">Sorteo en vivo - 31 de marzo 2026 | 4:00 p.m.<\/div>\n            \n            <div class=\"app-logo-box\">\n                <img decoding=\"async\" src=\"https:\/\/audypremios.proyectoscreatos.com\/wp-content\/uploads\/2026\/05\/logo_audy.png\" alt=\"Logo\" class=\"app-logo\">\n            <\/div>\n\n           \n            \n                            <p class=\"sub-title-text\">Completa tu registro para recibir tus n\u00fameros de tickets.<\/p>\n                        \n            <div class=\"app-card\">\n\t\t\t\t <div class=\"app-header\">\n                <h2>Registro<\/h2>\n                <div class=\"app-divider\"><\/div>\n            <\/div>\n<form method=\"post\" enctype=\"multipart\/form-data\" id=\"formRegistroFinal\" novalidate>\n    <input type=\"hidden\" name=\"action_type\" value=\"registrar\">\n    \n    <input type=\"hidden\" id=\"sorteo_registro_nonce\" name=\"sorteo_registro_nonce\" value=\"9bece26175\" \/><input type=\"hidden\" name=\"_wp_http_referer\" value=\"\/index.php?rest_route=%2Fwp%2Fv2%2Fpages%2F8\" \/>    \n    <input type=\"hidden\" name=\"voucher_id\" id=\"voucherIdInput\" value=\"\">\n                    \n                                            <span class=\"fast-reg-text\">Registro r\u00e1pido (Menos de 1 Minuto).<\/span>\n                    \n                    <div class=\"form-group\">\n                        <label>DNI <span class=\"req\">*<\/span><\/label>\n                        <input type=\"text\" name=\"dni\" id=\"dniInput\" class=\"form-ctrl\" maxlength=\"8\" required\n                               oninput=\"this.value = this.value.replace(\/[^0-9]\/g, '')\"\n                               title=\"Solo se permiten n\u00fameros\">\n                        <small id=\"dniStatusMsg\" style=\"display:block; margin-top:8px; color:#9CA3AF;\">\n                            Ingresa tu DNI (8 d\u00edgitos) para autocompletar tus datos.\n                        <\/small>\n                    <\/div>\n                    \n                    <div class=\"form-row\">\n                        <div class=\"form-group\">\n                            <label>Nombres <span class=\"req\">*<\/span><\/label>\n                            <input type=\"text\" name=\"nom\" id=\"nomInput\" class=\"form-ctrl\" required disabled>\n                        <\/div>\n                        <div class=\"form-group\">\n                            <label>Apellidos <span class=\"req\">*<\/span><\/label>\n                            <input type=\"text\" name=\"ape\" id=\"apeInput\" class=\"form-ctrl\" required disabled>\n                        <\/div>\n                    <\/div>\n\n                    <div class=\"form-row\">\n                        <div class=\"form-group\">\n                            <label>WhatsApp <span class=\"req\">*<\/span><\/label>\n                            <input type=\"text\" name=\"wsp\" id=\"wspInput\" class=\"form-ctrl\" required disabled\n                                   oninput=\"this.value = this.value.replace(\/[^0-9]\/g, '')\"\n                                   title=\"Solo se permiten n\u00fameros\">\n                        <\/div>\n                        <div class=\"form-group\">\n                            <label>Departamento <span class=\"req\">*<\/span><\/label>\n                            <select name=\"departamento\" id=\"deptoInput\" class=\"form-ctrl\" required disabled>\n                                <option value=\"\" disabled selected>Elige tu departamento<\/option>\n                                <option value=\"Amazonas\">Amazonas<\/option>\n                                <option value=\"\u00c1ncash\">\u00c1ncash<\/option>\n                                <option value=\"Apur\u00edmac\">Apur\u00edmac<\/option>\n                                <option value=\"Arequipa\">Arequipa<\/option>\n                                <option value=\"Ayacucho\">Ayacucho<\/option>\n                                <option value=\"Cajamarca\">Cajamarca<\/option>\n                                <option value=\"Callao\">Callao<\/option>\n                                <option value=\"Cusco\">Cusco<\/option>\n                                <option value=\"Huancavelica\">Huancavelica<\/option>\n                                <option value=\"Hu\u00e1nuco\">Hu\u00e1nuco<\/option>\n                                <option value=\"Ica\">Ica<\/option>\n                                <option value=\"Jun\u00edn\">Jun\u00edn<\/option>\n                                <option value=\"La Libertad\">La Libertad<\/option>\n                                <option value=\"Lambayeque\">Lambayeque<\/option>\n                                <option value=\"Lima\">Lima<\/option>\n                                <option value=\"Loreto\">Loreto<\/option>\n                                <option value=\"Madre de Dios\">Madre de Dios<\/option>\n                                <option value=\"Moquegua\">Moquegua<\/option>\n                                <option value=\"Pasco\">Pasco<\/option>\n                                <option value=\"Piura\">Piura<\/option>\n                                <option value=\"Puno\">Puno<\/option>\n                                <option value=\"San Mart\u00edn\">San Mart\u00edn<\/option>\n                                <option value=\"Tacna\">Tacna<\/option>\n                                <option value=\"Tumbes\">Tumbes<\/option>\n                                <option value=\"Ucayali\">Ucayali<\/option>\n                            <\/select>\n                        <\/div>\n                    <\/div>\n                    \n                    <div class=\"form-row\">\n                        <div class=\"form-group\">\n                            <label>Cantidad Tickets (S\/ 10.00 c\/u) <span class=\"req\">*<\/span><\/label>\n                            <select id=\"cantTickets\" name=\"cant\" class=\"form-ctrl\" required onchange=\"calcularTotal()\" disabled>\n                                                                    <option value=\"1\">1 Ticket<\/option>\n                                                                    <option value=\"2\">2 Tickets<\/option>\n                                                                    <option value=\"3\">3 Tickets<\/option>\n                                                                    <option value=\"4\">4 Tickets<\/option>\n                                                                    <option value=\"5\">5 Tickets<\/option>\n                                                                    <option value=\"6\">6 Tickets<\/option>\n                                                                    <option value=\"7\">7 Tickets<\/option>\n                                                                    <option value=\"8\">8 Tickets<\/option>\n                                                                    <option value=\"9\">9 Tickets<\/option>\n                                                                    <option value=\"10\">10 Tickets<\/option>\n                                                            <\/select>\n                        <\/div>\n                        <div class=\"form-group\">\n                            <label>Total a Pagar<\/label>\n                            <div class=\"price-display\" id=\"totalPriceBox\">S\/ 10.00<\/div>\n                        <\/div>\n                    <\/div>\n                    \n                    <div class=\"form-group\">\n                        <label>Comprobante de Pago <span class=\"req\">*<\/span><\/label>\n                        <label class=\"upload-area\" id=\"uploadArea\" style=\"opacity:.65; pointer-events:none;\">\n                            <input type=\"file\" name=\"foto\" id=\"fotoInput\" hidden accept=\"image\/jpeg,image\/png,image\/webp\" required disabled>\n                            \n                            <img decoding=\"async\" id=\"imagePreview\" src=\"\" alt=\"Vista previa del comprobante\">\n\n                            <div style=\"display: none;\" class=\"upload-icon\"><\/div>\n                            \n                            <div class=\"btn-gold-container\" style=\"width: max-content; margin: 10px auto 0 auto; margin-bottom: 0;\">\n                                <div class=\"btn-gold-blur\" style=\"width: 100%; height: 100%; border-radius: 8px;\"><\/div>\n                                <div class=\"btn-gold\" style=\"font-size: 0.8rem; padding: 10px 20px; height: auto; border-radius: 28px; width: max-content;\">\n                                    <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"3\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\"><\/path><polyline points=\"17 8 12 3 7 8\"><\/polyline><line x1=\"12\" y1=\"3\" x2=\"12\" y2=\"15\"><\/line><\/svg>\n                                    SUBIR COMPROBANTE\n                                <\/div>\n                            <\/div>\n                            \n                            <p class=\"upload-text\" id=\"fname\" style=\"color:var(--text-gray); margin-top: 10px;\">Adjunta tu voucher de pago<\/p>\n                        <\/label>\n                        <div id=\"voucherStatusMsg\" style=\"display:block; margin-top:8px; color:#9CA3AF; font-size:0.9rem;\">Sube tu comprobante de pago para validar tu registro.<\/div>\n                    <\/div>\n\n                    <label class=\"tnc-label\" id=\"tncLabel\" style=\"opacity:.65; pointer-events:none;\">\n                        <input type=\"checkbox\" id=\"tncInput\" required disabled> \n                        <div>\n                            Declaro ser mayor de 18 a\u00f1os y acepto los <a href=\"https:\/\/premioslidiavirginia.com\/terminos-y-condiciones\/\" target=\"_blank\" style=\"color:var(--accent); text-decoration:underline; font-weight:600;\">t\u00e9rminos y condiciones.<\/a>\n                        <\/div>  \n                    <\/label>\n\n                    <div class=\"submit-wrapper\">\n                        <div class=\"btn-gold-container\" style=\"max-width: 300px; margin: 0 auto; margin-bottom: 0;\">\n                            <div class=\"btn-gold-blur\"><\/div>\n                            <button type=\"submit\" id=\"submitBtn\" class=\"btn-gold\" style=\"width: 100%; justify-content: center; cursor: pointer;\">\n                                <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"3\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M16 21v-2a4 4 0 0 0-4-4H5c-1.1 0-2 .9-2 2v4c1.1 0 2 .9 2 2h11c1.1 0 2-.9 2-2z\"><\/path><circle cx=\"8.5\" cy=\"7\" r=\"4\"><\/circle><line x1=\"20\" y1=\"8\" x2=\"20\" y2=\"14\"><\/line><line x1=\"23\" y1=\"11\" x2=\"17\" y2=\"11\"><\/line><\/svg>\n                                REGISTRARSE\n                            <\/button>\n                        <\/div>\n                    <\/div>\n                <\/form>\n            <\/div>\n\n            <div class=\"app-card\" style=\"text-align: center; margin-top: 30px;\">\n                <img decoding=\"async\" src=\"https:\/\/lidiavirginiaenoc.com\/wp-content\/uploads\/2026\/02\/QR_Enoc.jpg\" alt=\"QR Yape\/Plin\" class=\"pay-qr-img\">\n                <div class=\"pay-title\">Medios de Pago: <span class=\"pay-yape\">YAPE<\/span> o <span class=\"pay-plin\">PLIN<\/span><\/div>\n                <div class=\"pay-number-wrapper\">\n                    <div class=\"pay-number\" id=\"yapePlinNum\">940 581 727<\/div>\n                    <button type=\"button\" class=\"btn-copy\" onclick=\"let n = document.getElementById('yapePlinNum').innerText.replace(\/\\D\/g, ''); navigator.clipboard.writeText(n); this.innerText='\u00a1COPIADO!'; this.style.background='#10b981'; this.style.borderColor='#10b981'; setTimeout(()=> {this.innerText='COPIAR'; this.style.background='rgba(255,255,255,0.1)'; this.style.borderColor='rgba(255,255,255,0.2)';}, 2000);\">COPIAR<\/button>\n                <\/div>\n                <p class=\"pay-name\">A nombre de: <strong>Enoc Espiritu<\/strong><\/p>\n            <\/div>\n\n        <\/div>\n    <\/div>\n    \n    <script>\n        const precioUnitario = 10;\n        const RENIEC_ENDPOINT = \"https:\\\/\\\/audypremios.proyectoscreatos.com\\\/index.php?rest_route=\\\/miapi\\\/v1\\\/reniec\\\/dni\";\n        const VOUCHER_VALIDATE_ENDPOINT = \"https:\\\/\\\/audypremios.proyectoscreatos.com\\\/index.php?rest_route=\\\/miapi\\\/v1\\\/validar-voucher\";\n\n        function calcularTotal() {\n            let cantidad = document.getElementById('cantTickets').value;\n            if (cantidad < 1 || isNaN(cantidad)) cantidad = 1;\n            let total = cantidad * precioUnitario;\n            document.getElementById('totalPriceBox').innerText = 'S\/ ' + total.toFixed(2);\n            return total.toFixed(2);\n        }\n\n        window.calcularTotal = calcularTotal;\n\n        (function(){\n            const formRegistroFinal = document.getElementById('formRegistroFinal');\n            const dniInput   = document.getElementById('dniInput');\n            const nomInput   = document.getElementById('nomInput');\n            const apeInput   = document.getElementById('apeInput');\n            const wspInput   = document.getElementById('wspInput');\n            const deptoInput = document.getElementById('deptoInput');\n            const cantInput  = document.getElementById('cantTickets');\n            const fotoInput  = document.getElementById('fotoInput');\n            const tncInput   = document.getElementById('tncInput');\n            const submitBtn  = document.getElementById('submitBtn');\n            const uploadArea = document.getElementById('uploadArea');\n            const tncLabel   = document.getElementById('tncLabel');\n            const statusMsg  = document.getElementById('dniStatusMsg');\n            const fname      = document.getElementById('fname');\n            const voucherIdInput = document.getElementById('voucherIdInput');\n            const imagePreview = document.getElementById('imagePreview');\n            const uploadIcon = document.querySelector('.upload-icon');\n            const voucherMsgDiv = document.getElementById('voucherStatusMsg');\n\n            let debounceTimer = null;\n            let lastQueriedDni = '';\n            let currentController = null;\n\n            let voucherValidado = false;\n            let voucherValidando = false;\n            let voucherId = '';\n\n            function setFieldsEnabled(enabled){\n                [nomInput, apeInput, wspInput, deptoInput, cantInput, fotoInput, tncInput].forEach(el => {\n                    el.disabled = !enabled;\n                });\n\n                uploadArea.style.opacity = enabled ? '1' : '.65';\n                uploadArea.style.pointerEvents = enabled ? 'auto' : 'none';\n\n                tncLabel.style.opacity = enabled ? '1' : '.65';\n                tncLabel.style.pointerEvents = enabled ? 'auto' : 'none';\n\n                if (!enabled) {\n                    resetVoucherState(true);\n                } else {\n                    actualizarEstadoSubmit();\n                }\n            }\n\n            function clearPersonData(){\n                nomInput.value = '';\n                apeInput.value = '';\n            }\n\n            function setStatus(message, color){\n                statusMsg.textContent = message;\n                statusMsg.style.color = color || '#9CA3AF';\n            }\n\n            function setVoucherStatusHTML(html) {\n                voucherMsgDiv.innerHTML = html;\n            }\n\n            function resetVoucherState(resetInput = false) {\n                voucherValidado = false;\n                voucherValidando = false;\n                voucherId = '';\n                voucherIdInput.value = '';\n\n                if (resetInput) {\n                    fotoInput.value = '';\n                    imagePreview.style.display = 'none';\n                    imagePreview.src = '';\n                    uploadIcon.style.display = 'block';\n                }\n\n                fname.innerText = 'Adjunta tu voucher de pago';\n                setVoucherStatusHTML('<span style=\"color:#9CA3AF;\">Sube tu comprobante de pago para validar tu registro.<\/span>');\n                actualizarEstadoSubmit();\n            }\n\n            \/\/ Ya no deshabilitamos el bot\u00f3n para que funcionen las validaciones\n            function actualizarEstadoSubmit() {\n                \/\/ Solo se usa para l\u00f3gica interna, el bot\u00f3n siempre es clickeable\n            }\n\n            async function consultarDNI(dni){\n                if (dni === lastQueriedDni) return;\n\n                if (currentController) currentController.abort();\n                currentController = new AbortController();\n\n                setFieldsEnabled(false);\n                clearPersonData();\n                setStatus('Consultando DNI...', '#FBBF24');\n\n                try {\n                    const res = await fetch(RENIEC_ENDPOINT + '?numero=' + encodeURIComponent(dni) + '&_t=' + new Date().getTime(), {\n                        method: 'GET',\n                        headers: { \n                            'Accept': 'application\/json',\n                            'Cache-Control': 'no-cache, no-store, must-revalidate'\n                        },\n                        cache: 'no-store',\n                        signal: currentController.signal\n                    });\n\n                    const json = await res.json();\n\n                    if (!res.ok || !json.success || !json.data) {\n                        throw new Error((json && json.message) ? json.message : 'No se pudo consultar el DNI');\n                    }\n\n                    const data = json.data;\n                    nomInput.value = (data.first_name || '').trim();\n\n                    const apellidos = [data.first_last_name || '', data.second_last_name || '']\n                        .map(v => v.trim())\n                        .filter(Boolean)\n                        .join(' ');\n                    apeInput.value = apellidos;\n\n                    lastQueriedDni = dni;\n                    setFieldsEnabled(true);\n                    setStatus('DNI validado. Completa los dem\u00e1s campos.', '#10B981');\n\n                    wspInput.focus();\n\n                } catch (err) {\n                    if (err.name === 'AbortError' || (err.message && err.message.includes('abort'))) return;\n\n                    setFieldsEnabled(true);\n                    setStatus('No pudimos autocompletar tus datos. Por favor, ingr\u00e9salos manualmente.', '#FBBF24');\n                    lastQueriedDni = dni; \n                    nomInput.focus();\n                }\n            }\n\n            async function validarVoucherArchivo(file) {\n                voucherValidado = false;\n                voucherValidando = true;\n                actualizarEstadoSubmit();\n\n                fname.innerText = 'Validando comprobante...';\n                setVoucherStatusHTML('<span style=\"color:#FBBF24;\">Validando comprobante de pago con IA...<\/span>');\n\n                const cantidad = parseInt(cantInput.value || '1', 10);\n                const montoEsperado = calcularTotal();\n\n                const fd = new FormData();\n                fd.append('foto', file);\n                fd.append('cant', String(cantidad));\n                fd.append('monto_esperado', String(montoEsperado));\n\n                try {\n                    const res = await fetch(VOUCHER_VALIDATE_ENDPOINT + '?_t=' + new Date().getTime(), {\n                        method: 'POST',\n                        body: fd,\n                        cache: 'no-store'\n                    });\n\n                    const json = await res.json();\n\n                    if (!res.ok || !json.success) {\n                        throw new Error(json.message || 'No se pudo validar el comprobante.');\n                    }\n\n                    if (json.valid) {\n                        voucherValidado = true;\n                        voucherId = json.voucher_id || '';\n                        voucherIdInput.value = voucherId;\n                        fname.innerText = '\u2705 Comprobante v\u00e1lido: ' + file.name;\n                        setVoucherStatusHTML('<span style=\"color:#10B981;\">\u2705 Comprobante validado correctamente. Ya puedes continuar.<\/span>');\n                    } else {\n                        voucherValidado = false;\n                        voucherId = '';\n                        voucherIdInput.value = '';\n                        \/\/ No borramos la foto para que la IA\/Soporte sepa de qu\u00e9 hablamos si se env\u00eda manual\n                        fname.innerText = '\u274c ' + file.name;\n\n                        let motivoRechazo = 'El comprobante no es v\u00e1lido.';\n                        if (json.dudoso) {\n                            motivoRechazo = 'El comprobante parece real pero la IA no puede confirmar los datos. Solicita revisi\u00f3n manual.';\n                        } else if (json.analysis && json.analysis.motivo_rechazo) {\n                            motivoRechazo = json.analysis.motivo_rechazo;\n                        } else if (json.message) {\n                            motivoRechazo = json.message;\n                        }\n\n                        setVoucherStatusHTML('<span style=\"color:#EF4444;\">\u274c ' + motivoRechazo + '<\/span>');\n                    }\n\n                } catch (err) {\n                    voucherValidado = false;\n                    voucherId = '';\n                    voucherIdInput.value = '';\n                    fname.innerText = '\u274c Error de conexi\u00f3n';\n\n                    setVoucherStatusHTML('<span style=\"color:#EF4444;\">\u274c ' + (err.message || 'No se pudo validar el comprobante. Int\u00e9ntalo nuevamente.') + '<\/span>');\n                } finally {\n                    voucherValidando = false;\n                    actualizarEstadoSubmit();\n                }\n            }\n\n            dniInput.addEventListener('input', function(){\n                this.value = this.value.replace(\/[^0-9]\/g, '').slice(0,8);\n                const dni = this.value.trim();\n\n                if (dni !== lastQueriedDni) {\n                    setFieldsEnabled(false);\n                    clearPersonData();\n                }\n\n                if (debounceTimer) clearTimeout(debounceTimer);\n\n                if (dni.length < 8) {\n                    setStatus('Ingresa tu DNI (8 d\u00edgitos) para autocompletar tus datos.', '#9CA3AF');\n                    return;\n                }\n\n                debounceTimer = setTimeout(() => {\n                    consultarDNI(dni);\n                }, 500); \n            });\n\n            cantInput.addEventListener('change', function() {\n                calcularTotal();\n                if (fotoInput.files && fotoInput.files[0]) {\n                    resetVoucherState(true);\n                    setVoucherStatusHTML('<span style=\"color:#FBBF24;\">\u26a0\ufe0f La cantidad cambi\u00f3. Debes volver a validar el comprobante.<\/span>');\n                }\n            });\n\n            \/\/ GESTI\u00d3N DE PREVISUALIZACI\u00d3N DE IMAGEN Y VALIDACI\u00d3N\n            fotoInput.addEventListener('change', function() {\n                const file = this.files && this.files[0] ? this.files[0] : null;\n\n                if (!file) {\n                    resetVoucherState(true);\n                    return;\n                }\n\n                \/\/ Generar previsualizaci\u00f3n\n                const reader = new FileReader();\n                reader.onload = function(e) {\n                    imagePreview.src = e.target.result;\n                    imagePreview.style.display = 'block';\n                    uploadIcon.style.display = 'none';\n                }\n                reader.readAsDataURL(file);\n\n                fname.innerText = file.name;\n                validarVoucherArchivo(file);\n            });\n\n            tncInput.addEventListener('change', actualizarEstadoSubmit);\n\n            \/\/ LOGICA AJAX PARA ENVIAR SIN RECARGAR CON LOADER Y VALIDACIONES CLARAS\n            formRegistroFinal.addEventListener('submit', function(e) {\n                e.preventDefault();\n                \n                \/\/ VALIDACIONES MANUALES Y ALERTAS\n                if (!dniInput.value || dniInput.value.length < 8) {\n                    alert('Por favor, ingresa un DNI v\u00e1lido de 8 d\u00edgitos primero.');\n                    dniInput.focus();\n                    return;\n                }\n                if (!nomInput.value.trim()) {\n                    alert('Por favor, ingresa tus nombres.');\n                    nomInput.focus();\n                    return;\n                }\n                if (!apeInput.value.trim()) {\n                    alert('Por favor, ingresa tus apellidos.');\n                    apeInput.focus();\n                    return;\n                }\n                if (!wspInput.value.trim()) {\n                    alert('Por favor, ingresa tu n\u00famero de celular\/WhatsApp.');\n                    wspInput.focus();\n                    return;\n                }\n                if (!deptoInput.value) {\n                    alert('Por favor, selecciona tu departamento en la lista.');\n                    deptoInput.focus();\n                    return;\n                }\n                if (!fotoInput.files || fotoInput.files.length === 0) {\n                    alert('Por favor, sube la imagen de tu comprobante de pago.');\n                    return;\n                }\n                if (!voucherValidado) {\n                    alert('Tu comprobante de pago a\u00fan no ha sido validado correctamente. Por favor espera a que la validaci\u00f3n termine o sube una imagen clara.');\n                    return;\n                }\n                if (!tncInput.checked) {\n                    alert('Debes marcar la casilla para aceptar los t\u00e9rminos y condiciones antes de registrarte.');\n                    tncInput.focus();\n                    return;\n                }\n                \n                \/\/ Mostrar Loader Overlay Redise\u00f1ado y Animado\n                let loaderHTML = `\n                <div id=\"registroLoaderOverlay\" style=\"position:fixed; inset:0; background:radial-gradient(circle at center, rgba(20,8,36,0.95) 0%, rgba(5,1,14,1) 100%); backdrop-filter:blur(15px); z-index:999999; display:flex; flex-direction:column; justify-content:center; align-items:center; font-family:'Poppins', sans-serif; opacity:0; animation: fadeInOverlay 0.3s forwards;\">\n                    <div style=\"position:relative; width: 100px; height: 100px; margin-bottom: 30px; display:flex; justify-content:center; align-items:center;\">\n                        <div style=\"position:absolute; inset:0; border-radius:50%; border: 4px dashed rgba(212,175,55,0.3); animation: spinLoaderSlow 8s linear infinite;\"><\/div>\n                        <div style=\"position:absolute; inset:10px; border-radius:50%; border: 4px solid transparent; border-top-color: #D4AF37; border-bottom-color: #D4AF37; animation: spinLoader 1.5s cubic-bezier(0.68, -0.55, 0.265, 1.55) infinite;\"><\/div>\n                        <svg width=\"40\" height=\"40\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#D4AF37\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" style=\"animation: pulseIcon 2s infinite;\"><path d=\"M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2\"><\/path><circle cx=\"12\" cy=\"7\" r=\"4\"><\/circle><\/svg>\n                    <\/div>\n                    <h2 style=\"color:#fce08a; font-weight:800; font-size:1.8rem; text-transform:uppercase; letter-spacing:2px; margin:0; text-shadow: 0 4px 20px rgba(212,175,55,0.5); animation: slideUpText 0.5s ease-out forwards;\">Procesando...<\/h2>\n                    <p style=\"color:#E5E7EB; font-size:1rem; margin-top:10px; font-weight:400; opacity:0; animation: slideUpText 0.5s ease-out 0.2s forwards;\">Generando tus tickets seguros<\/p>\n                    <style>\n                        @keyframes spinLoader { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } }\n                        @keyframes spinLoaderSlow { 0% { transform: rotate(360deg); } 100% { transform: rotate(0deg); } }\n                        @keyframes pulseIcon { 0%, 100% { transform: scale(1); opacity:0.8; } 50% { transform: scale(1.1); opacity:1; filter:drop-shadow(0 0 10px #D4AF37); } }\n                        @keyframes fadeInOverlay { to { opacity: 1; } }\n                        @keyframes slideUpText { from { transform: translateY(15px); opacity:0; } to { transform: translateY(0); opacity:1; } }\n                    <\/style>\n                <\/div>`;\n                document.body.style.overflow = 'hidden'; \/\/ Bloquear el scroll de fondo\n                document.body.insertAdjacentHTML('beforeend', loaderHTML);\n\n                let fd = new FormData(this);\n                \n                fetch(window.location.href, {\n                    method: 'POST',\n                    body: fd\n                })\n                .then(r => r.text())\n                .then(html => {\n                    let parser = new DOMParser();\n                    let doc = parser.parseFromString(html, 'text\/html');\n                    let newApp = doc.querySelector('.sorteo-app');\n                    \n                    if(newApp) {\n                        document.querySelector('.sorteo-app').replaceWith(newApp);\n                        \n                        \/\/ Ejecutar script de Tailwind si viene en la respuesta para asegurar estilos\n                        let scripts = newApp.querySelectorAll('script');\n                        scripts.forEach(s => {\n                            let newScript = document.createElement('script');\n                            if(s.src) newScript.src = s.src;\n                            else newScript.textContent = s.textContent;\n                            document.body.appendChild(newScript);\n                        });\n                        \n                        document.body.style.overflow = ''; \/\/ Restaurar scroll\n                        document.getElementById('registroLoaderOverlay').remove();\n                        window.scrollTo({ top: 0, behavior: 'smooth' });\n                    } else {\n                        window.location.reload(); \/\/ Fallback de seguridad\n                    }\n                }).catch(err => {\n                    alert('Error en el servidor. Int\u00e9ntalo nuevamente.');\n                    document.body.style.overflow = '';\n                    document.getElementById('registroLoaderOverlay').remove();\n                });\n            });\n\n            \/\/ Estado inicial\n            setFieldsEnabled(false);\n            calcularTotal();\n        })();\n    <\/script>\n    \n    \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":{"footnotes":""},"class_list":["post-8","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/audypremios.proyectoscreatos.com\/index.php?rest_route=\/wp\/v2\/pages\/8","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/audypremios.proyectoscreatos.com\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/audypremios.proyectoscreatos.com\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/audypremios.proyectoscreatos.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/audypremios.proyectoscreatos.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=8"}],"version-history":[{"count":2,"href":"https:\/\/audypremios.proyectoscreatos.com\/index.php?rest_route=\/wp\/v2\/pages\/8\/revisions"}],"predecessor-version":[{"id":20,"href":"https:\/\/audypremios.proyectoscreatos.com\/index.php?rest_route=\/wp\/v2\/pages\/8\/revisions\/20"}],"wp:attachment":[{"href":"https:\/\/audypremios.proyectoscreatos.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=8"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}