{"id":1193,"date":"2026-03-16T11:08:00","date_gmt":"2026-03-16T11:08:00","guid":{"rendered":"https:\/\/satfonollosa.com\/?page_id=1193"},"modified":"2026-03-16T11:13:00","modified_gmt":"2026-03-16T11:13:00","slug":"crear-aviso","status":"publish","type":"page","link":"https:\/\/satfonollosa.com\/index.php\/crear-aviso\/","title":{"rendered":"Crear Aviso"},"content":{"rendered":"        <style>\n        \/* Reset within our container *\/\n        #rd-repair-form.rdf,\n        #rd-repair-form.rdf * {\n            box-sizing: border-box !important;\n            font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif !important;\n        }\n        #rd-repair-form.rdf {\n            max-width: 720px !important;\n            margin: 0 auto !important;\n            padding: 0 10px !important;\n            color: #333 !important;\n            font-size: 15px !important;\n            line-height: 1.5 !important;\n        }\n\n        \/* Cards *\/\n        .rdf .rdf-card {\n            background: #fff !important;\n            border: 1px solid #e2e2e2 !important;\n            border-radius: 12px !important;\n            margin-bottom: 20px !important;\n            overflow: hidden !important;\n            box-shadow: 0 2px 8px rgba(0,0,0,0.04) !important;\n        }\n        .rdf .rdf-card-head {\n            display: flex !important;\n            align-items: center !important;\n            gap: 10px !important;\n            padding: 16px 24px !important;\n            background: #f8f8f8 !important;\n            border-bottom: 1px solid #e8e8e8 !important;\n        }\n        .rdf .rdf-card-head h2 {\n            margin: 0 !important;\n            padding: 0 !important;\n            font-size: 18px !important;\n            font-weight: 700 !important;\n            color: #222 !important;\n            border: none !important;\n        }\n        .rdf .rdf-card-ico {\n            font-size: 22px !important;\n            line-height: 1 !important;\n        }\n        .rdf .rdf-card-body {\n            padding: 24px !important;\n        }\n\n        \/* Fields *\/\n        .rdf .rdf-f {\n            margin-bottom: 16px !important;\n        }\n        .rdf .rdf-f label {\n            display: block !important;\n            font-size: 13px !important;\n            font-weight: 600 !important;\n            color: #444 !important;\n            margin-bottom: 5px !important;\n            padding: 0 !important;\n        }\n        .rdf .rdf-f label small {\n            font-weight: 400 !important;\n            color: #999 !important;\n        }\n        .rdf .rdf-req {\n            color: #d32f2f !important;\n            font-weight: 700 !important;\n        }\n\n        \/* Inputs *\/\n        .rdf input[type=\"text\"],\n        .rdf input[type=\"email\"],\n        .rdf input[type=\"tel\"],\n        .rdf input[type=\"number\"],\n        .rdf input[type=\"date\"],\n        .rdf select,\n        .rdf textarea {\n            display: block !important;\n            width: 100% !important;\n            padding: 10px 14px !important;\n            font-size: 15px !important;\n            color: #333 !important;\n            background: #fff !important;\n            border: 1.5px solid #d0d0d0 !important;\n            border-radius: 8px !important;\n            outline: none !important;\n            transition: border-color 0.2s, box-shadow 0.2s !important;\n            -webkit-appearance: none !important;\n            appearance: none !important;\n            margin: 0 !important;\n            height: auto !important;\n            line-height: 1.5 !important;\n        }\n        .rdf select {\n            background-image: url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='10' height='6'%3E%3Cpath d='M0 0l5 6 5-6z' fill='%23666'\/%3E%3C\/svg%3E\") !important;\n            background-repeat: no-repeat !important;\n            background-position: right 14px center !important;\n            padding-right: 34px !important;\n        }\n        .rdf textarea {\n            resize: vertical !important;\n            min-height: 100px !important;\n        }\n        .rdf input:focus,\n        .rdf select:focus,\n        .rdf textarea:focus {\n            border-color: #4a90d9 !important;\n            box-shadow: 0 0 0 3px rgba(74,144,217,0.12) !important;\n        }\n\n        \/* Force uppercase on all fields except email *\/\n        .rdf input[type=\"text\"],\n        .rdf input[type=\"tel\"],\n        .rdf input[type=\"number\"],\n        .rdf select,\n        .rdf textarea {\n            text-transform: uppercase !important;\n        }\n        .rdf input[type=\"email\"] {\n            text-transform: none !important;\n        }\n\n        \/* Grid rows *\/\n        .rdf .rdf-g2 {\n            display: grid !important;\n            grid-template-columns: 1fr 1fr !important;\n            gap: 16px !important;\n        }\n        .rdf .rdf-g3 {\n            display: grid !important;\n            grid-template-columns: 1fr 1fr 1fr !important;\n            gap: 16px !important;\n        }\n        @media (max-width: 600px) {\n            .rdf .rdf-g2,\n            .rdf .rdf-g3 {\n                grid-template-columns: 1fr !important;\n            }\n        }\n\n        \/* Phone *\/\n        .rdf .rdf-tel {\n            display: flex !important;\n            align-items: stretch !important;\n            border: 1.5px solid #d0d0d0 !important;\n            border-radius: 8px !important;\n            overflow: hidden !important;\n            background: #fff !important;\n            transition: border-color 0.2s !important;\n        }\n        .rdf .rdf-tel:focus-within {\n            border-color: #4a90d9 !important;\n            box-shadow: 0 0 0 3px rgba(74,144,217,0.12) !important;\n        }\n        .rdf .rdf-tel-pre {\n            display: flex !important;\n            align-items: center !important;\n            gap: 6px !important;\n            padding: 0 12px !important;\n            background: #f5f5f5 !important;\n            border-right: 1px solid #d0d0d0 !important;\n            font-size: 13px !important;\n            color: #555 !important;\n            white-space: nowrap !important;\n            flex-shrink: 0 !important;\n        }\n        .rdf .rdf-tel-pre img {\n            border-radius: 2px !important;\n            display: inline-block !important;\n            vertical-align: middle !important;\n        }\n        .rdf .rdf-tel input {\n            border: none !important;\n            border-radius: 0 !important;\n            box-shadow: none !important;\n            flex: 1 !important;\n            min-width: 0 !important;\n        }\n        .rdf .rdf-tel input:focus {\n            box-shadow: none !important;\n            border: none !important;\n        }\n\n        \/* Radios *\/\n        .rdf .rdf-radios {\n            display: flex !important;\n            gap: 20px !important;\n            padding: 8px 0 !important;\n        }\n        .rdf .rdf-rl {\n            display: flex !important;\n            align-items: center !important;\n            gap: 6px !important;\n            font-size: 15px !important;\n            font-weight: 400 !important;\n            color: #444 !important;\n            cursor: pointer !important;\n        }\n        .rdf .rdf-rl input[type=\"radio\"] {\n            width: 17px !important;\n            height: 17px !important;\n            margin: 0 !important;\n            accent-color: #4a90d9 !important;\n            display: inline-block !important;\n            padding: 0 !important;\n        }\n\n        \/* Dropzone *\/\n        .rdf .rdf-drop {\n            position: relative !important;\n            border: 2px dashed #ccc !important;\n            border-radius: 10px !important;\n            padding: 20px 16px !important;\n            text-align: center !important;\n            cursor: pointer !important;\n            background: #fafafa !important;\n            transition: border-color 0.2s, background 0.2s !important;\n            min-height: 70px !important;\n        }\n        .rdf .rdf-drop:hover,\n        .rdf .rdf-drop.rdf-drop-hl {\n            border-color: #4a90d9 !important;\n            background: #f0f6ff !important;\n        }\n        .rdf .rdf-drop-content {\n            display: flex !important;\n            align-items: center !important;\n            justify-content: center !important;\n            gap: 8px !important;\n            pointer-events: none !important;\n        }\n        .rdf .rdf-drop-ico {\n            font-size: 20px !important;\n            opacity: 0.5 !important;\n        }\n        .rdf .rdf-drop-txt {\n            font-size: 13px !important;\n            color: #888 !important;\n        }\n        .rdf .rdf-drop-inp {\n            position: absolute !important;\n            inset: 0 !important;\n            width: 100% !important;\n            height: 100% !important;\n            opacity: 0 !important;\n            cursor: pointer !important;\n            padding: 0 !important;\n            margin: 0 !important;\n            border: none !important;\n        }\n        .rdf .rdf-drop-chosen {\n            font-size: 13px !important;\n            font-weight: 600 !important;\n            color: #2e7d32 !important;\n            pointer-events: none !important;\n        }\n\n        \/* Submit *\/\n        .rdf .rdf-submit {\n            display: inline-block !important;\n            padding: 14px 40px !important;\n            font-size: 16px !important;\n            font-weight: 700 !important;\n            color: #fff !important;\n            background: #2e7d32 !important;\n            border: none !important;\n            border-radius: 10px !important;\n            cursor: pointer !important;\n            transition: background 0.2s, transform 0.1s !important;\n            margin-top: 4px !important;\n            letter-spacing: 0.3px !important;\n            width: auto !important;\n        }\n        .rdf .rdf-submit:hover {\n            background: #256b29 !important;\n            transform: translateY(-1px) !important;\n        }\n        .rdf .rdf-submit:active {\n            transform: translateY(0) !important;\n        }\n        .rdf .rdf-submit:disabled {\n            background: #999 !important;\n            cursor: not-allowed !important;\n            transform: none !important;\n        }\n\n        \/* Success *\/\n        .rdf .rdf-success {\n            text-align: center !important;\n            padding: 50px 30px !important;\n            background: #f0faf0 !important;\n            border: 1px solid #c8e6c9 !important;\n            border-radius: 12px !important;\n        }\n        .rdf .rdf-success-ico { font-size: 48px !important; margin-bottom: 10px !important; }\n        .rdf .rdf-success h2 { font-size: 22px !important; color: #2e7d32 !important; margin: 0 0 10px !important; border: none !important; }\n        .rdf .rdf-success p { color: #555 !important; font-size: 15px !important; margin: 4px 0 !important; }\n        .rdf .rdf-success-num {\n            font-size: 38px !important; font-weight: 800 !important; color: #2e7d32 !important;\n            font-family: 'Courier New', monospace !important; margin: 10px 0 16px !important;\n        }\n        .rdf .rdf-btn-again {\n            display: inline-block !important; margin-top: 16px !important; padding: 10px 24px !important;\n            background: #2e7d32 !important; color: #fff !important; text-decoration: none !important;\n            border-radius: 8px !important; font-weight: 600 !important; font-size: 14px !important;\n        }\n        .rdf .rdf-btn-again:hover { background: #256b29 !important; color: #fff !important; text-decoration: none !important; }\n\n        \/* Errors *\/\n        .rdf .rdf-errors {\n            padding: 14px 18px !important; background: #fef2f2 !important; border: 1px solid #fca5a5 !important;\n            border-radius: 10px !important; margin-bottom: 20px !important; color: #991b1b !important; font-size: 14px !important;\n        }\n        .rdf .rdf-errors ul { margin: 6px 0 0 18px !important; padding: 0 !important; }\n        .rdf .rdf-errors li { margin-bottom: 3px !important; }\n\n        \/* \u2500\u2500 Smart OCR dropzone \u2500\u2500 *\/\n        .rdf .rdf-drop-smart {\n            border-color: #4a90d9 !important;\n            background: #f0f6ff !important;\n        }\n        .rdf .rdf-drop-smart .rdf-drop-ico { font-size: 24px !important; }\n        .rdf .rdf-drop-smart .rdf-drop-txt {\n            color: #4a6fa5 !important;\n            font-weight: 500 !important;\n        }\n        .rdf .rdf-drop-smart.rdf-analyzing {\n            border-color: #ff9800 !important;\n            background: #fff8e1 !important;\n            pointer-events: none !important;\n        }\n\n        \/* Loading spinner *\/\n        .rdf .rdf-drop-loading {\n            display: flex !important;\n            align-items: center !important;\n            justify-content: center !important;\n            gap: 10px !important;\n            font-size: 14px !important;\n            font-weight: 600 !important;\n            color: #e65100 !important;\n            pointer-events: none !important;\n        }\n        .rdf .rdf-spinner {\n            width: 20px !important;\n            height: 20px !important;\n            border: 3px solid #ffd54f !important;\n            border-top-color: #e65100 !important;\n            border-radius: 50% !important;\n            animation: rdf-spin 0.8s linear infinite !important;\n        }\n        @keyframes rdf-spin {\n            to { transform: rotate(360deg); }\n        }\n\n        \/* OCR result box *\/\n        .rdf .rdf-ocr-result {\n            margin-top: 8px !important;\n            padding: 10px 14px !important;\n            border-radius: 8px !important;\n            font-size: 13px !important;\n            line-height: 1.6 !important;\n        }\n        .rdf .rdf-ocr-ok {\n            background: #e8f5e9 !important;\n            border: 1px solid #a5d6a7 !important;\n            color: #2e7d32 !important;\n        }\n        .rdf .rdf-ocr-warn {\n            background: #fff3e0 !important;\n            border: 1px solid #ffe0b2 !important;\n            color: #e65100 !important;\n        }\n\n\n        \/* \u2500\u2500 Scanner overlay \u2014 styles are inline in dynamic JS \u2500\u2500 *\/\n        @keyframes rdf-scan-line {\n            0%, 100% { top: 35%; }\n            50% { top: 65%; }\n        }\n        <\/style>\n        \n        <div id=\"rd-repair-form\" class=\"rdf\">\n\n        \n            \n            <form method=\"post\" enctype=\"multipart\/form-data\" id=\"rdf-form\" novalidate>\n                <input type=\"hidden\" id=\"_rd_nonce\" name=\"_rd_nonce\" value=\"6704c89bf9\" \/><input type=\"hidden\" name=\"_wp_http_referer\" value=\"\/index.php\/wp-json\/wp\/v2\/pages\/1193\" \/>                <input type=\"hidden\" name=\"rd_frontend_submit\" value=\"1\">\n\n                <!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 DATOS DEL CLIENTE \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\n                <div class=\"rdf-card\">\n                    <div class=\"rdf-card-head\">\n                        <span class=\"rdf-card-ico\">\ud83d\udc64<\/span>\n                        <h2>Datos del Cliente<\/h2>\n                    <\/div>\n                    <div class=\"rdf-card-body\">\n\n                        <div class=\"rdf-g2\">\n                            <div class=\"rdf-f\">\n                                <label>Nombre <span class=\"rdf-req\">*<\/span><\/label>\n                                <input type=\"text\" name=\"client_name\" required value=\"\">\n                            <\/div>\n                            <div class=\"rdf-f\">\n                                <label>Apellidos <span class=\"rdf-req\">*<\/span><\/label>\n                                <input type=\"text\" name=\"client_apellidos\" required value=\"\">\n                            <\/div>\n                        <\/div>\n\n                        <div class=\"rdf-g2\">\n                            <div class=\"rdf-f\">\n                                <label>DNI \/ NIF<\/label>\n                                <input type=\"text\" name=\"client_nif\" value=\"\">\n                            <\/div>\n                            <div class=\"rdf-f\">\n                                <label>Correo electr\u00f3nico <span class=\"rdf-req\">*<\/span><\/label>\n                                <input type=\"email\" name=\"client_email\" required value=\"\">\n                            <\/div>\n                        <\/div>\n\n                        <div class=\"rdf-g2\">\n                            <div class=\"rdf-f\">\n                                <label>Tel\u00e9fono 1 <span class=\"rdf-req\">*<\/span><\/label>\n                                <div class=\"rdf-tel\">\n                                    <span class=\"rdf-tel-pre\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/flagcdn.com\/w20\/es.png\" width=\"20\" height=\"14\" alt=\"\"> +34<\/span>\n                                    <input type=\"tel\" name=\"client_phone\" required placeholder=\"612 34 56 78\" value=\"\">\n                                <\/div>\n                            <\/div>\n                            <div class=\"rdf-f\">\n                                <label>Tel\u00e9fono 2<\/label>\n                                <div class=\"rdf-tel\">\n                                    <span class=\"rdf-tel-pre\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/flagcdn.com\/w20\/es.png\" width=\"20\" height=\"14\" alt=\"\"> +34<\/span>\n                                    <input type=\"tel\" name=\"client_phone2\" placeholder=\"612 34 56 78\" value=\"\">\n                                <\/div>\n                            <\/div>\n                        <\/div>\n\n                        <div class=\"rdf-f\">\n                            <label>Direcci\u00f3n <span class=\"rdf-req\">*<\/span><\/label>\n                            <input type=\"text\" name=\"client_address\" required placeholder=\"Calle, n\u00famero, piso, puerta\" value=\"\">\n                        <\/div>\n\n                        <div class=\"rdf-g3\">\n                            <div class=\"rdf-f\">\n                                <label>C.P.<\/label>\n                                <input type=\"text\" name=\"client_postal_code\" id=\"rdf-cp\" maxlength=\"5\" inputmode=\"numeric\" pattern=\"[0-9]{5}\" placeholder=\"08700\" value=\"\">\n                            <\/div>\n                            <div class=\"rdf-f\">\n                                <label>Poblaci\u00f3n<\/label>\n                                <input type=\"text\" name=\"client_city\" id=\"rdf-city\" value=\"\">\n                            <\/div>\n                            <div class=\"rdf-f\">\n                                <label>Provincia<\/label>\n                                <input type=\"text\" name=\"client_provincia\" id=\"rdf-provincia\" value=\"\">\n                            <\/div>\n                        <\/div>\n                    <\/div>\n                <\/div>\n\n                <!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 DATOS DEL ELECTRODOM\u00c9STICO \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\n                <div class=\"rdf-card\">\n                    <div class=\"rdf-card-head\">\n                        <span class=\"rdf-card-ico\">\ud83d\udd27<\/span>\n                        <h2>Datos del Electrodom\u00e9stico<\/h2>\n                    <\/div>\n                    <div class=\"rdf-card-body\">\n\n                        <div class=\"rdf-g2\">\n                            <div class=\"rdf-f\">\n                                <label>Electrodom\u00e9stico <span class=\"rdf-req\">*<\/span><\/label>\n                                <select name=\"appliance_type\" id=\"rdf-tipo\" required>\n                                    <option value=\"\">\u2014 Seleccionar \u2014<\/option>\n                                                                            <option value=\"Lavadora\" >Lavadora<\/option>\n                                                                            <option value=\"Secadora\" >Secadora<\/option>\n                                                                            <option value=\"Lavavajillas\" >Lavavajillas<\/option>\n                                                                            <option value=\"Frigor\u00edfico\" >Frigor\u00edfico<\/option>\n                                                                            <option value=\"Congelador\" >Congelador<\/option>\n                                                                            <option value=\"Horno\" >Horno<\/option>\n                                                                            <option value=\"Microondas\" >Microondas<\/option>\n                                                                            <option value=\"Vitrocer\u00e1mica\" >Vitrocer\u00e1mica<\/option>\n                                                                            <option value=\"Placa de inducci\u00f3n\" >Placa de inducci\u00f3n<\/option>\n                                                                            <option value=\"Campana extractora\" >Campana extractora<\/option>\n                                                                            <option value=\"Aire acondicionado\" >Aire acondicionado<\/option>\n                                                                            <option value=\"Calentador\" >Calentador<\/option>\n                                                                            <option value=\"Caldera\" >Caldera<\/option>\n                                                                            <option value=\"Termo el\u00e9ctrico\" >Termo el\u00e9ctrico<\/option>\n                                                                            <option value=\"Televisor\" >Televisor<\/option>\n                                                                            <option value=\"Otro\" >Otro<\/option>\n                                                                    <\/select>\n                            <\/div>\n                            <div class=\"rdf-f\">\n                                <label>Marca <span class=\"rdf-req\">*<\/span><\/label>\n                                <select name=\"appliance_brand\" id=\"rdf-marca\" required>\n                                    <option value=\"\">\u2014 Primero seleccione tipo \u2014<\/option>\n                                <\/select>\n                            <\/div>\n                        <\/div>\n\n                        <div class=\"rdf-g2\">\n                            <div class=\"rdf-f\">\n                                <label>Modelo<\/label>\n                                <input type=\"text\" name=\"appliance_model\" placeholder=\"Ej: WAT28469ES\" value=\"\">\n                            <\/div>\n                            <div class=\"rdf-f\">\n                                <label>Matr\u00edcula \/ N\u00ba serie<\/label>\n                                <input type=\"text\" name=\"appliance_serial\" id=\"rdf-serial\" placeholder=\"Pegatina del aparato\" value=\"\">\n                                <button type=\"button\" id=\"rdf-scan-btn\" style=\"display:inline-flex !important;align-items:center !important;gap:6px !important;margin-top:8px !important;padding:7px 14px !important;background:#2e7d32 !important;color:#fff !important;border:none !important;border-radius:6px !important;font-size:13px !important;font-weight:600 !important;cursor:pointer !important;font-family:inherit !important\">\n                                    <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" style=\"pointer-events:none\"><rect x=\"3\" y=\"3\" width=\"5\" height=\"5\"\/><rect x=\"16\" y=\"3\" width=\"5\" height=\"5\"\/><rect x=\"3\" y=\"16\" width=\"5\" height=\"5\"\/><rect x=\"16\" y=\"16\" width=\"5\" height=\"5\"\/><line x1=\"12\" y1=\"3\" x2=\"12\" y2=\"8\"\/><line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"21\"\/><line x1=\"3\" y1=\"12\" x2=\"8\" y2=\"12\"\/><line x1=\"16\" y1=\"12\" x2=\"21\" y2=\"12\"\/><\/svg>\n                                    Escanear c\u00f3digo de barras\n                                <\/button>\n                            <\/div>\n                        <\/div>\n\n                        <div class=\"rdf-g3\">\n                            <div class=\"rdf-f\">\n                                <label>C\u00f3digo Comercial<\/label>\n                                <input type=\"text\" name=\"appliance_commercial_code\" id=\"rdf-comcode\" value=\"\">\n                                <button type=\"button\" id=\"rdf-scan-comcode-btn\" style=\"display:inline-flex !important;align-items:center !important;gap:6px !important;margin-top:8px !important;padding:7px 14px !important;background:#2e7d32 !important;color:#fff !important;border:none !important;border-radius:6px !important;font-size:13px !important;font-weight:600 !important;cursor:pointer !important;font-family:inherit !important\">\n                                    <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" style=\"pointer-events:none\"><rect x=\"3\" y=\"3\" width=\"5\" height=\"5\"\/><rect x=\"16\" y=\"3\" width=\"5\" height=\"5\"\/><rect x=\"3\" y=\"16\" width=\"5\" height=\"5\"\/><rect x=\"16\" y=\"16\" width=\"5\" height=\"5\"\/><line x1=\"12\" y1=\"3\" x2=\"12\" y2=\"8\"\/><line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"21\"\/><line x1=\"3\" y1=\"12\" x2=\"8\" y2=\"12\"\/><line x1=\"16\" y1=\"12\" x2=\"21\" y2=\"12\"\/><\/svg>\n                                    Escanear c\u00f3digo\n                                <\/button>\n                            <\/div>\n                            <div class=\"rdf-f\">\n                                <label>Fecha de compra<\/label>\n                                <input type=\"date\" name=\"appliance_purchase_date\" value=\"\">\n                            <\/div>\n                            <div class=\"rdf-f\">\n                                <label>\u00bfEn garant\u00eda?<\/label>\n                                <div class=\"rdf-radios\">\n                                    <label class=\"rdf-rl\"><input type=\"radio\" name=\"appliance_warranty\" value=\"si\" > S\u00ed<\/label>\n                                    <label class=\"rdf-rl\"><input type=\"radio\" name=\"appliance_warranty\" value=\"no\"  checked='checked'> No<\/label>\n                                <\/div>\n                            <\/div>\n                        <\/div>\n\n                        <div class=\"rdf-f\">\n                            <label>Aver\u00eda que presenta el electrodom\u00e9stico <span class=\"rdf-req\">*<\/span><\/label>\n                            <textarea name=\"description\" rows=\"4\" required placeholder=\"Describa el problema: s\u00edntomas, desde cu\u00e1ndo ocurre, c\u00f3digos de error\u2026\"><\/textarea>\n                        <\/div>\n\n                        <div class=\"rdf-g2\">\n                            <div class=\"rdf-f\">\n                                <label>\ud83d\udcf8 Foto de la etiqueta <small>(se leen los datos autom\u00e1ticamente)<\/small><\/label>\n                                <div class=\"rdf-drop rdf-drop-smart\" id=\"rdf-smart-drop\">\n                                    <div class=\"rdf-drop-content\" id=\"rdf-smart-content\">\n                                        <span class=\"rdf-drop-ico\">\ud83d\udcf7<\/span>\n                                        <span class=\"rdf-drop-txt\">Sube una foto de la etiqueta y rellenaremos los datos del aparato<\/span>\n                                    <\/div>\n                                    <input type=\"file\" name=\"rd_file_1\" id=\"rdf-smart-input\" class=\"rdf-drop-inp\" accept=\"image\/*\">\n                                    <div class=\"rdf-drop-chosen\" id=\"rdf-smart-chosen\" style=\"display:none\"><\/div>\n                                    <div class=\"rdf-drop-loading\" id=\"rdf-smart-loading\" style=\"display:none\">\n                                        <div class=\"rdf-spinner\"><\/div>\n                                        <span>Analizando imagen\u2026<\/span>\n                                    <\/div>\n                                <\/div>\n                                <div class=\"rdf-ocr-result\" id=\"rdf-ocr-result\" style=\"display:none\"><\/div>\n                            <\/div>\n                            <div class=\"rdf-f\">\n                                <label>Archivo 2 <small>(foto o documento adicional)<\/small><\/label>\n                                <div class=\"rdf-drop\" data-idx=\"2\">\n                                    <div class=\"rdf-drop-content\">\n                                        <span class=\"rdf-drop-ico\">\ud83d\udcce<\/span>\n                                        <span class=\"rdf-drop-txt\">Seleccionar archivo o arrastrar aqu\u00ed<\/span>\n                                    <\/div>\n                                    <input type=\"file\" name=\"rd_file_2\" class=\"rdf-drop-inp\" accept=\"image\/*,.pdf,.doc,.docx\">\n                                    <div class=\"rdf-drop-chosen\" style=\"display:none\"><\/div>\n                                <\/div>\n                            <\/div>\n                        <\/div>\n\n                    <\/div>\n                <\/div>\n\n                <!-- Submit -->\n                <button type=\"submit\" class=\"rdf-submit\" id=\"rdf-submit-btn\">\n                    Enviar solicitud\n                <\/button>\n            <\/form>\n\n            <script>\n            (function(){\n                var B = {\"Lavadora\":[\"Bosch\",\"Siemens\",\"Samsung\",\"LG\",\"Balay\",\"AEG\",\"Whirlpool\",\"Electrolux\",\"Miele\",\"Beko\",\"Candy\",\"Teka\",\"Haier\",\"Indesit\",\"Hoover\"],\"Secadora\":[\"Bosch\",\"Siemens\",\"Samsung\",\"LG\",\"AEG\",\"Electrolux\",\"Miele\",\"Beko\",\"Candy\",\"Whirlpool\",\"Balay\",\"Haier\",\"Hoover\",\"Indesit\"],\"Lavavajillas\":[\"Bosch\",\"Siemens\",\"Balay\",\"Teka\",\"Samsung\",\"LG\",\"AEG\",\"Electrolux\",\"Miele\",\"Whirlpool\",\"Beko\",\"Candy\",\"Hisense\"],\"Frigor\\u00edfico\":[\"Bosch\",\"Siemens\",\"Samsung\",\"LG\",\"Balay\",\"AEG\",\"Electrolux\",\"Miele\",\"Beko\",\"Teka\",\"Haier\",\"Hisense\",\"Whirlpool\",\"Candy\",\"Liebherr\"],\"Congelador\":[\"Bosch\",\"Siemens\",\"Samsung\",\"LG\",\"Balay\",\"AEG\",\"Electrolux\",\"Miele\",\"Beko\",\"Liebherr\",\"Haier\",\"Whirlpool\",\"Candy\"],\"Horno\":[\"Bosch\",\"Siemens\",\"Balay\",\"Teka\",\"AEG\",\"Electrolux\",\"Miele\",\"Samsung\",\"Whirlpool\",\"Candy\",\"Beko\",\"Smeg\",\"Neff\"],\"Microondas\":[\"Samsung\",\"LG\",\"Bosch\",\"Siemens\",\"Balay\",\"Teka\",\"Whirlpool\",\"Candy\",\"Beko\",\"Cecotec\",\"Sharp\"],\"Vitrocer\\u00e1mica\":[\"Bosch\",\"Siemens\",\"Balay\",\"Teka\",\"AEG\",\"Electrolux\",\"Miele\",\"Samsung\",\"Beko\",\"Candy\",\"Neff\",\"Cata\"],\"Placa de inducci\\u00f3n\":[\"Bosch\",\"Siemens\",\"Balay\",\"Teka\",\"AEG\",\"Electrolux\",\"Miele\",\"Samsung\",\"Beko\",\"Neff\",\"Cata\",\"Smeg\"],\"Campana extractora\":[\"Bosch\",\"Siemens\",\"Balay\",\"Teka\",\"Cata\",\"Miele\",\"Electrolux\",\"AEG\",\"Nodor\",\"Elica\",\"Candy\"],\"Aire acondicionado\":[\"Daikin\",\"Mitsubishi\",\"Samsung\",\"LG\",\"Fujitsu\",\"Panasonic\",\"Hisense\",\"Haier\",\"Baxi\",\"Johnson\",\"Mundoclima\"],\"Calentador\":[\"Junkers\",\"Vaillant\",\"Cointra\",\"Fagor\",\"Saunier Duval\",\"Ariston\",\"Baxi\",\"Thermex\",\"Teka\",\"Bosch\"],\"Caldera\":[\"Junkers\",\"Vaillant\",\"Saunier Duval\",\"Baxi\",\"Ferroli\",\"Ariston\",\"Cointra\",\"Bosch\",\"Viessmann\",\"Wolf\"],\"Termo el\\u00e9ctrico\":[\"Ariston\",\"Cointra\",\"Junkers\",\"Fleck\",\"Thermex\",\"Teka\",\"Bosch\",\"Fagor\",\"Aparici\",\"Vaillant\"],\"Televisor\":[\"Samsung\",\"LG\",\"Sony\",\"Philips\",\"Hisense\",\"TCL\",\"Panasonic\",\"Xiaomi\",\"Sharp\",\"Grundig\"],\"Otro\":[\"Bosch\",\"Siemens\",\"Samsung\",\"LG\",\"Balay\",\"AEG\",\"Whirlpool\",\"Electrolux\",\"Miele\",\"Beko\",\"Teka\",\"Candy\"]};\n                var tipo = document.getElementById('rdf-tipo');\n                var marca = document.getElementById('rdf-marca');\n                var prevB = '';\n                var ajaxUrl = 'https:\/\/satfonollosa.com\/wp-admin\/admin-ajax.php';\n                var ocrNonce = 'b7f6b64a13';\n\n                function updB(selectVal){\n                    var t = tipo.value, list = B[t] || [], h = '';\n                    if(!t){ marca.innerHTML='<option value=\"\">\u2014 Primero seleccione tipo \u2014<\/option>'; return; }\n                    h='<option value=\"\">\u2014 Seleccionar marca \u2014<\/option>';\n                    for(var i=0;i<list.length;i++){\n                        h+='<option value=\"'+list[i]+'\"'+(list[i]===selectVal?' selected':'')+'>'+list[i]+'<\/option>';\n                    }\n                    h+='<option value=\"Otra\"'+(selectVal==='Otra'?' selected':'')+'>Otra<\/option>';\n                    marca.innerHTML=h;\n                    if(selectVal) marca.value=selectVal;\n                }\n                tipo.addEventListener('change',function(){ updB(''); });\n                if(tipo.value) updB(prevB);\n\n                \/* \u2500\u2500 Regular dropzones (non-smart) \u2500\u2500 *\/\n                document.querySelectorAll('.rdf-drop:not(.rdf-drop-smart)').forEach(function(z){\n                    var inp=z.querySelector('.rdf-drop-inp'), cont=z.querySelector('.rdf-drop-content'), chosen=z.querySelector('.rdf-drop-chosen');\n                    z.addEventListener('click',function(e){if(e.target!==inp)inp.click();});\n                    inp.addEventListener('change',function(){\n                        if(this.files&&this.files[0]){\n                            if(this.files[0].size>10485760){alert('M\u00e1ximo 10 MB');this.value='';return;}\n                            cont.style.display='none'; chosen.style.display='block';\n                            chosen.textContent='\u2705 '+this.files[0].name;\n                        }else{cont.style.display='';chosen.style.display='none';}\n                    });\n                    z.addEventListener('dragover',function(e){e.preventDefault();z.classList.add('rdf-drop-hl');});\n                    z.addEventListener('dragleave',function(){z.classList.remove('rdf-drop-hl');});\n                    z.addEventListener('drop',function(e){e.preventDefault();z.classList.remove('rdf-drop-hl');if(e.dataTransfer.files.length){inp.files=e.dataTransfer.files;inp.dispatchEvent(new Event('change',{bubbles:true}));}});\n                });\n\n                \/* \u2500\u2500 Smart dropzone with OCR \u2500\u2500 *\/\n                var smartDrop = document.getElementById('rdf-smart-drop');\n                var smartInp = document.getElementById('rdf-smart-input');\n                var smartContent = document.getElementById('rdf-smart-content');\n                var smartChosen = document.getElementById('rdf-smart-chosen');\n                var smartLoading = document.getElementById('rdf-smart-loading');\n                var ocrResult = document.getElementById('rdf-ocr-result');\n\n                smartDrop.addEventListener('click',function(e){if(e.target!==smartInp)smartInp.click();});\n                smartDrop.addEventListener('dragover',function(e){e.preventDefault();smartDrop.classList.add('rdf-drop-hl');});\n                smartDrop.addEventListener('dragleave',function(){smartDrop.classList.remove('rdf-drop-hl');});\n                smartDrop.addEventListener('drop',function(e){e.preventDefault();smartDrop.classList.remove('rdf-drop-hl');if(e.dataTransfer.files.length){smartInp.files=e.dataTransfer.files;smartInp.dispatchEvent(new Event('change',{bubbles:true}));}});\n\n                smartInp.addEventListener('change', function(){\n                    if(!this.files||!this.files[0]) return;\n                    var file = this.files[0];\n\n                    if(file.size>10485760){alert('M\u00e1ximo 10 MB');this.value='';return;}\n\n                    \/* Show file name *\/\n                    smartContent.style.display='none';\n                    smartChosen.style.display='block';\n                    smartChosen.textContent='\ud83d\udcf7 '+file.name;\n\n                    \/* Only analyze images *\/\n                    if(!file.type.startsWith('image\/')){\n                        ocrResult.style.display='none';\n                        return;\n                    }\n\n                    \/* Show loading *\/\n                    smartLoading.style.display='flex';\n                    ocrResult.style.display='none';\n                    smartDrop.classList.add('rdf-analyzing');\n\n                    \/* Send to server for AI analysis *\/\n                    var fd = new FormData();\n                    fd.append('action', 'rd_analyze_image');\n                    fd.append('nonce', ocrNonce);\n                    fd.append('image', file);\n\n                    fetch(ajaxUrl, {method:'POST', body:fd})\n                    .then(function(r){return r.json();})\n                    .then(function(resp){\n                        smartLoading.style.display='none';\n                        smartDrop.classList.remove('rdf-analyzing');\n\n                        if(resp.success && resp.data){\n                            var d = resp.data;\n                            var filled = [];\n\n                            \/* 1. Fill TYPE \u2014 case-insensitive match *\/\n                            if(d.type && d.type.trim()){\n                                var typeVal = d.type.trim();\n                                var typeSet = false;\n                                for(var i=0;i<tipo.options.length;i++){\n                                    if(tipo.options[i].value.toLowerCase() === typeVal.toLowerCase()){\n                                        tipo.value = tipo.options[i].value;\n                                        typeSet = true;\n                                        filled.push('Tipo: '+tipo.options[i].value);\n                                        break;\n                                    }\n                                }\n                                if(!typeSet){\n                                    \/* Try partial match *\/\n                                    for(var i=0;i<tipo.options.length;i++){\n                                        if(tipo.options[i].value.toLowerCase().indexOf(typeVal.toLowerCase())!==-1 ||\n                                           typeVal.toLowerCase().indexOf(tipo.options[i].value.toLowerCase())!==-1){\n                                            tipo.value = tipo.options[i].value;\n                                            filled.push('Tipo: '+tipo.options[i].value);\n                                            break;\n                                        }\n                                    }\n                                }\n                            }\n\n                            \/* 2. Populate brand dropdown for the selected type *\/\n                            if(tipo.value){\n                                var brandList = B[tipo.value] || [];\n                                var bh = '<option value=\"\">\u2014 Seleccionar marca \u2014<\/option>';\n                                for(var i=0;i<brandList.length;i++){\n                                    bh += '<option value=\"'+brandList[i]+'\">'+brandList[i]+'<\/option>';\n                                }\n                                bh += '<option value=\"Otra\">Otra<\/option>';\n                                marca.innerHTML = bh;\n                            }\n\n                            \/* 3. Fill BRAND \u2014 case-insensitive match against available options *\/\n                            if(d.brand && d.brand.trim()){\n                                var brandVal = d.brand.trim();\n                                var brandSet = false;\n\n                                \/* Exact match (case-insensitive) *\/\n                                for(var i=0;i<marca.options.length;i++){\n                                    if(marca.options[i].value.toLowerCase() === brandVal.toLowerCase()){\n                                        marca.value = marca.options[i].value;\n                                        brandSet = true;\n                                        filled.push('Marca: '+marca.options[i].value);\n                                        break;\n                                    }\n                                }\n\n                                \/* Partial match if no exact *\/\n                                if(!brandSet){\n                                    for(var i=0;i<marca.options.length;i++){\n                                        if(marca.options[i].value && (\n                                            marca.options[i].value.toLowerCase().indexOf(brandVal.toLowerCase())!==-1 ||\n                                            brandVal.toLowerCase().indexOf(marca.options[i].value.toLowerCase())!==-1\n                                        )){\n                                            marca.value = marca.options[i].value;\n                                            brandSet = true;\n                                            filled.push('Marca: '+marca.options[i].value+' (detectado: '+brandVal+')');\n                                            break;\n                                        }\n                                    }\n                                }\n\n                                \/* If still not found, ADD the brand to the dropdown *\/\n                                if(!brandSet){\n                                    var newOpt = document.createElement('option');\n                                    newOpt.value = brandVal;\n                                    newOpt.textContent = brandVal;\n                                    newOpt.selected = true;\n                                    \/* Insert before \"Otra\" (last option) *\/\n                                    var otraOpt = marca.querySelector('option[value=\"Otra\"]');\n                                    if(otraOpt){\n                                        marca.insertBefore(newOpt, otraOpt);\n                                    } else {\n                                        marca.appendChild(newOpt);\n                                    }\n                                    marca.value = brandVal;\n                                    filled.push('Marca: '+brandVal+' (a\u00f1adida)');\n                                }\n                            }\n\n                            \/* 4. Fill MODEL *\/\n                            if(d.model && d.model.trim()){\n                                document.querySelector('[name=\"appliance_model\"]').value = d.model.trim();\n                                filled.push('Modelo: '+d.model.trim());\n                            }\n\n                            \/* 5. Fill SERIAL \/ MATR\u00cdCULA \/ S\/N *\/\n                            if(d.serial && d.serial.trim()){\n                                document.querySelector('[name=\"appliance_serial\"]').value = d.serial.trim();\n                                filled.push('S\/N: '+d.serial.trim());\n                            }\n\n                            \/* 6. Fill COMMERCIAL CODE *\/\n                            if(d.commercial_code && d.commercial_code.trim()){\n                                document.querySelector('[name=\"appliance_commercial_code\"]').value = d.commercial_code.trim();\n                                filled.push('C\u00f3d. comercial: '+d.commercial_code.trim());\n                            }\n\n                            \/* 7. Fill PURCHASE DATE *\/\n                            if(d.purchase_date && d.purchase_date.trim()){\n                                document.querySelector('[name=\"appliance_purchase_date\"]').value = d.purchase_date.trim();\n                                filled.push('Fecha: '+d.purchase_date.trim());\n                            }\n\n                            \/* Show result summary *\/\n                            if(filled.length > 0){\n                                ocrResult.style.display='block';\n                                ocrResult.innerHTML='<strong>\u2705 Datos le\u00eddos de la imagen (' + filled.length + ' campos):<\/strong><br>' + filled.join('<br>');\n                                ocrResult.className='rdf-ocr-result rdf-ocr-ok';\n\n                                \/* Highlight filled fields briefly *\/\n                                ['appliance_model','appliance_serial','appliance_commercial_code','appliance_purchase_date'].forEach(function(name){\n                                    var el = document.querySelector('[name=\"'+name+'\"]');\n                                    if(el && el.value){\n                                        el.style.transition='background 0.3s';\n                                        el.style.background='#e8f5e9';\n                                        setTimeout(function(){el.style.background='';},3000);\n                                    }\n                                });\n                                \/* Highlight selects too *\/\n                                [tipo,marca].forEach(function(el){\n                                    if(el.value){\n                                        el.style.transition='background 0.3s';\n                                        el.style.background='#e8f5e9';\n                                        setTimeout(function(){el.style.background='';},3000);\n                                    }\n                                });\n                            } else {\n                                ocrResult.style.display='block';\n                                ocrResult.innerHTML='\u26a0\ufe0f No se pudieron extraer datos de esta imagen. Rellene los campos manualmente.';\n                                ocrResult.className='rdf-ocr-result rdf-ocr-warn';\n                            }\n                        } else {\n                            var msg = (resp.data&&resp.data.message) ? resp.data.message : 'No se pudieron leer datos de la imagen.';\n                            ocrResult.style.display='block';\n                            ocrResult.innerHTML='\u26a0\ufe0f '+msg;\n                            ocrResult.className='rdf-ocr-result rdf-ocr-warn';\n                        }\n                    })\n                    .catch(function(){\n                        smartLoading.style.display='none';\n                        smartDrop.classList.remove('rdf-analyzing');\n                        ocrResult.style.display='block';\n                        ocrResult.innerHTML='\u26a0\ufe0f Error de conexi\u00f3n. Rellene los datos manualmente.';\n                        ocrResult.className='rdf-ocr-result rdf-ocr-warn';\n                    });\n                });\n\n                \/* \u2500\u2500 Validation \u2500\u2500 *\/\n                var rdfSubmitting = false;\n                document.getElementById('rdf-form').addEventListener('submit',function(e){\n                    if(rdfSubmitting){e.preventDefault();return;}\n                    var ok=true,first=null;\n                    this.querySelectorAll('[required]').forEach(function(el){\n                        el.style.borderColor='';\n                        if(!el.value||!el.value.trim()){el.style.borderColor='#d32f2f';ok=false;if(!first)first=el;}\n                    });\n                    if(!ok){e.preventDefault();if(first){first.scrollIntoView({behavior:'smooth',block:'center'});first.focus();}return;}\n                    \/* Convert all fields to uppercase except email *\/\n                    this.querySelectorAll('input:not([type=\"email\"]):not([type=\"file\"]):not([type=\"hidden\"]):not([type=\"radio\"]), textarea, select').forEach(function(el){\n                        if(el.value && el.tagName!=='SELECT') el.value = el.value.toUpperCase();\n                    });\n                    rdfSubmitting=true;\n                    var btn=document.getElementById('rdf-submit-btn');\n                    btn.textContent='Enviando\u2026';\n                    btn.style.opacity='0.6';\n                    btn.style.cursor='not-allowed';\n                });\n\n                \/* Clear errors *\/\n                document.querySelectorAll('#rdf-form input, #rdf-form select, #rdf-form textarea').forEach(function(el){\n                    el.addEventListener('input',function(){this.style.borderColor='';});\n                    el.addEventListener('change',function(){this.style.borderColor='';});\n                });\n\n                \/* \u2500\u2500 Autocompletado C.P. Espa\u00f1a \u2500\u2500 *\/\n                (function(){\n                    var provincias = {\n                        '01':'\u00c1LAVA','02':'ALBACETE','03':'ALICANTE','04':'ALMER\u00cdA','05':'\u00c1VILA',\n                        '06':'BADAJOZ','07':'ILLES BALEARS','08':'BARCELONA','09':'BURGOS',\n                        '10':'C\u00c1CERES','11':'C\u00c1DIZ','12':'CASTELL\u00d3N','13':'CIUDAD REAL','14':'C\u00d3RDOBA',\n                        '15':'A CORU\u00d1A','16':'CUENCA','17':'GIRONA','18':'GRANADA','19':'GUADALAJARA',\n                        '20':'GIPUZKOA','21':'HUELVA','22':'HUESCA','23':'JA\u00c9N','24':'LE\u00d3N',\n                        '25':'LLEIDA','26':'LA RIOJA','27':'LUGO','28':'MADRID','29':'M\u00c1LAGA',\n                        '30':'MURCIA','31':'NAVARRA','32':'OURENSE','33':'ASTURIAS','34':'PALENCIA',\n                        '35':'LAS PALMAS','36':'PONTEVEDRA','37':'SALAMANCA','38':'SANTA CRUZ DE TENERIFE',\n                        '39':'CANTABRIA','40':'SEGOVIA','41':'SEVILLA','42':'SORIA','43':'TARRAGONA',\n                        '44':'TERUEL','45':'TOLEDO','46':'VALENCIA','47':'VALLADOLID','48':'BIZKAIA',\n                        '49':'ZAMORA','50':'ZARAGOZA','51':'CEUTA','52':'MELILLA'\n                    };\n                    var cpInput = document.getElementById('rdf-cp');\n                    var cityInput = document.getElementById('rdf-city');\n                    var provInput = document.getElementById('rdf-provincia');\n                    if(!cpInput || !cityInput || !provInput) return;\n\n                    var lastFetched = '';\n                    cpInput.addEventListener('input', function(){\n                        var v = this.value.replace(\/\\D\/g,'');\n                        this.value = v;\n                        if(v.length >= 2){\n                            var prov = provincias[v.substring(0,2)];\n                            if(prov){\n                                provInput.value = prov;\n                                provInput.style.borderColor = '#4caf50';\n                                setTimeout(function(){ provInput.style.borderColor=''; }, 2000);\n                            }\n                        }\n                        if(v.length === 5 && v !== lastFetched){\n                            lastFetched = v;\n                            cityInput.value = 'Buscando\u2026';\n                            cityInput.style.color = '#999';\n                            fetch('https:\/\/api.zippopotam.us\/es\/' + v)\n                                .then(function(r){ \n                                    if(!r.ok) throw new Error('No encontrado');\n                                    return r.json(); \n                                })\n                                .then(function(data){\n                                    if(data.places && data.places.length > 0){\n                                        cityInput.value = data.places[0]['place name'].toUpperCase();\n                                        cityInput.style.color = '';\n                                        cityInput.style.borderColor = '#4caf50';\n                                        setTimeout(function(){ cityInput.style.borderColor=''; }, 2000);\n                                    } else {\n                                        cityInput.value = '';\n                                        cityInput.style.color = '';\n                                    }\n                                })\n                                .catch(function(){\n                                    cityInput.value = '';\n                                    cityInput.style.color = '';\n                                });\n                        }\n                    });\n                })();\n\n                \/* \u2500\u2500 Barcode Scanner (reusable, appended to body) \u2500\u2500 *\/\n                function openBarcodeScanner(targetInput){\n                    if(!navigator.mediaDevices || !navigator.mediaDevices.getUserMedia){\n                        alert('Su navegador no soporta acceso a la c\u00e1mara.');\n                        return;\n                    }\n\n                    var overlay = document.createElement('div');\n                    overlay.id = 'rdf-scan-modal';\n                    overlay.innerHTML =\n                        '<div style=\"position:fixed;inset:0;z-index:999999;background:rgba(0,0,0,0.75);display:flex;align-items:center;justify-content:center;padding:20px\" id=\"rdf-scan-bg\">' +\n                            '<div style=\"background:#fff;border-radius:14px;overflow:hidden;max-width:420px;width:100%;box-shadow:0 20px 60px rgba(0,0,0,0.4)\">' +\n                                '<div style=\"display:flex;justify-content:space-between;align-items:center;padding:14px 18px;background:#f5f5f5;border-bottom:1px solid #e0e0e0\">' +\n                                    '<span style=\"font-size:15px;font-weight:600\">\ud83d\udcf7 Escanear c\u00f3digo de barras<\/span>' +\n                                    '<button type=\"button\" id=\"rdf-scan-x\" style=\"background:none;border:none;font-size:22px;cursor:pointer;color:#666;padding:0 4px;line-height:1\">\u2715<\/button>' +\n                                '<\/div>' +\n                                '<div style=\"position:relative;width:100%;background:#000;min-height:250px\">' +\n                                    '<video id=\"rdf-scan-vid\" autoplay playsinline muted style=\"width:100%;display:block\"><\/video>' +\n                                    '<div style=\"position:absolute;left:10%;right:10%;top:50%;height:2px;background:#f44336;box-shadow:0 0 8px rgba(244,67,54,0.6);animation:rdf-scan-line 2s ease-in-out infinite\"><\/div>' +\n                                '<\/div>' +\n                                '<div style=\"padding:12px 18px;text-align:center;font-size:13px;color:#666;background:#f5f5f5;border-top:1px solid #e0e0e0\">' +\n                                    'Apunte la c\u00e1mara al c\u00f3digo de barras' +\n                                '<\/div>' +\n                            '<\/div>' +\n                        '<\/div>';\n                    document.body.appendChild(overlay);\n\n                    var video = document.getElementById('rdf-scan-vid');\n                    var stream = null;\n                    var intv = null;\n\n                    function closeScanner(){\n                        if(intv){ clearInterval(intv); intv=null; }\n                        if(stream){ stream.getTracks().forEach(function(t){t.stop();}); stream=null; }\n                        if(video) video.srcObject = null;\n                        var el = document.getElementById('rdf-scan-modal');\n                        if(el) el.parentNode.removeChild(el);\n                    }\n\n                    function onCodeFound(code){\n                        targetInput.value = code;\n                        targetInput.style.transition='background 0.3s';\n                        targetInput.style.background='#e8f5e9';\n                        setTimeout(function(){targetInput.style.background='';},3000);\n                        closeScanner();\n                    }\n\n                    document.getElementById('rdf-scan-x').onclick = function(e){ e.preventDefault(); e.stopPropagation(); closeScanner(); };\n                    document.getElementById('rdf-scan-bg').onclick = function(e){ if(e.target.id === 'rdf-scan-bg') closeScanner(); };\n                    document.addEventListener('keydown', function escH(e){ if(e.key==='Escape'){closeScanner();document.removeEventListener('keydown',escH);} });\n\n                    navigator.mediaDevices.getUserMedia({\n                        video: { facingMode:{ideal:'environment'}, width:{ideal:1280}, height:{ideal:720} }\n                    }).then(function(s){\n                        stream = s;\n                        video.srcObject = s;\n                        video.onloadedmetadata = function(){\n                            video.play().catch(function(){});\n\n                            if('BarcodeDetector' in window){\n                                try {\n                                    var det = new BarcodeDetector({formats:['code_128','code_39','ean_13','ean_8','itf','codabar','code_93','upc_a','upc_e']});\n                                    intv = setInterval(function(){\n                                        if(video.readyState < 2) return;\n                                        det.detect(video).then(function(codes){\n                                            if(codes && codes.length > 0) onCodeFound(codes[0].rawValue);\n                                        }).catch(function(){});\n                                    }, 250);\n                                } catch(e){ doFallback(); }\n                            } else { doFallback(); }\n                        };\n\n                        function doFallback(){\n                            var cv = document.createElement('canvas');\n                            var cx = cv.getContext('2d');\n                            intv = setInterval(function(){\n                                if(video.readyState < 2) return;\n                                cv.width = video.videoWidth;\n                                cv.height = video.videoHeight;\n                                cx.drawImage(video, 0, 0);\n                                cv.toBlob(function(blob){\n                                    if(!blob || !intv) return;\n                                    var fd = new FormData();\n                                    fd.append('action','rd_analyze_image');\n                                    fd.append('nonce', ocrNonce);\n                                    fd.append('image', blob, 'scan.jpg');\n                                    fd.append('barcode_only','1');\n                                    fetch(ajaxUrl,{method:'POST',body:fd})\n                                    .then(function(r){return r.json();})\n                                    .then(function(resp){\n                                        if(resp.success && resp.data && resp.data.serial) onCodeFound(resp.data.serial);\n                                    }).catch(function(){});\n                                },'image\/jpeg',0.8);\n                            }, 2500);\n                        }\n\n                    }).catch(function(err){\n                        closeScanner();\n                        if(err.name === 'NotAllowedError') alert('Permiso de c\u00e1mara denegado.');\n                        else alert('No se pudo acceder a la c\u00e1mara: ' + err.message);\n                    });\n                }\n\n                \/* Bind scanner buttons *\/\n                document.getElementById('rdf-scan-btn').addEventListener('click', function(e){\n                    e.preventDefault(); e.stopPropagation();\n                    openBarcodeScanner(document.getElementById('rdf-serial'));\n                });\n                document.getElementById('rdf-scan-comcode-btn').addEventListener('click', function(e){\n                    e.preventDefault(); e.stopPropagation();\n                    openBarcodeScanner(document.getElementById('rdf-comcode'));\n                });\n            })();\n            <\/script>\n\n                <\/div>\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":{"footnotes":""},"class_list":["post-1193","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/satfonollosa.com\/index.php\/wp-json\/wp\/v2\/pages\/1193","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/satfonollosa.com\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/satfonollosa.com\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/satfonollosa.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/satfonollosa.com\/index.php\/wp-json\/wp\/v2\/comments?post=1193"}],"version-history":[{"count":3,"href":"https:\/\/satfonollosa.com\/index.php\/wp-json\/wp\/v2\/pages\/1193\/revisions"}],"predecessor-version":[{"id":1202,"href":"https:\/\/satfonollosa.com\/index.php\/wp-json\/wp\/v2\/pages\/1193\/revisions\/1202"}],"wp:attachment":[{"href":"https:\/\/satfonollosa.com\/index.php\/wp-json\/wp\/v2\/media?parent=1193"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}