{"id":22,"date":"2025-08-17T15:10:31","date_gmt":"2025-08-17T15:10:31","guid":{"rendered":"https:\/\/verify.raphaeloliver.com\/index.php\/home-2\/"},"modified":"2025-11-08T18:46:12","modified_gmt":"2025-11-08T18:46:12","slug":"home-2","status":"publish","type":"page","link":"https:\/\/verify.raphaeloliver.com\/","title":{"rendered":"Verify Certificate | Raphael Oliver"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"22\" class=\"elementor elementor-22\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-0c0020d e-con-full e-flex e-con e-parent\" data-id=\"0c0020d\" data-element_type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t<div class=\"elementor-element elementor-element-ee5e71b e-flex e-con-boxed e-con e-child\" data-id=\"ee5e71b\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-fb97447 elementor-widget elementor-widget-heading\" data-id=\"fb97447\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Verify Certificate<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e1f179b elementor-widget elementor-widget-text-editor\" data-id=\"e1f179b\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>Confirm the authenticity of your certificate by Raphael Oliver.<\/p><div id=\"gtx-trans\" style=\"position: absolute; left: 495px; top: -9.33333px;\"><div class=\"gtx-trans-icon\">\u00a0<\/div><\/div>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-589283f e-con-full e-flex e-con e-parent\" data-id=\"589283f\" data-element_type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-cf2d11c e-flex e-con-boxed e-con e-parent\" data-id=\"cf2d11c\" data-element_type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-1b2ff3d elementor-widget elementor-widget-html\" data-id=\"1b2ff3d\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!DOCTYPE html>\r\n<html lang=\"en\">\r\n<head>\r\n    <meta charset=\"UTF-8\">\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\r\n    <title>Verify Certificate<\/title>\r\n    <style>\r\n        \/* CSS OTIMIZADO E REVISADO *\/\r\n        .rov-wrap {\r\n            max-width: 980px;\r\n            margin: 0 auto;\r\n            padding: 32px 20px;\r\n            font-family: system-ui, -apple-system, Segoe UI, Roboto, Arial;\r\n            text-align: left;\r\n            user-select: none;\r\n            -webkit-user-select: none;\r\n            -moz-user-select: none;\r\n            -ms-user-select: none;\r\n        }\r\n        .rov-wrap .rov-h2 { font-size: 34px; line-height: 1.2; margin: 0 0 6px 0; font-weight: 800; letter-spacing: -.02em; }\r\n        .rov-wrap .rov-sub { color: #555; margin: 0 0 24px 0; }\r\n        .rov-wrap .rov-label { display: block; font-weight: 700; margin: 14px 0 6px; }\r\n        .rov-wrap .rov-input { width: 100%; padding: 12px 14px; border: 1px solid #f2f2f2; border-radius: 10px; font-size: 16px; box-sizing: border-box; }\r\n        .rov-wrap .rov-btn { margin-top: 14px; display: inline-flex; align-items: center; gap: 8px; padding: 12px 18px; border-radius: 12px; border: 0; background: #111; color: #fff; font-weight: 700; cursor: pointer; transition: .15s; }\r\n        .rov-wrap .rov-btn:hover { transform: translateY(-1px); box-shadow: 0 6px 18px rgba(0, 0, 0, .12); }\r\n        .rov-wrap .rov-btn:disabled { opacity: 0.7; cursor: not-allowed; transform: none; box-shadow: none; }\r\n        .rov-wrap .rov-results { margin-top: 22px; }\r\n        .rov-wrap .rov-note { font-size: 14px; color: #666; margin-top: 10px; }\r\n\r\n        \/* ESTILO DO CARD CLIC\u00c1VEL (LISTA) *\/\r\n        .rov-wrap .rov-card {\r\n            border: 1px solid #e9e9e9;\r\n            border-radius: 14px;\r\n            padding: 16px;\r\n            box-shadow: 0 6px 20px rgba(0, 0, 0, .06);\r\n            margin-bottom: 12px;\r\n            background: #fff;\r\n            display: flex;\r\n            gap: 14px;\r\n            align-items: flex-start;\r\n            cursor: pointer;\r\n            transition: all 0.2s ease;\r\n        }\r\n        .rov-wrap .rov-card:hover {\r\n            border-color: #c4e0ff;\r\n            box-shadow: 0 8px 25px rgba(17, 68, 136, 0.1);\r\n            transform: translateY(-2px);\r\n        }\r\n        .rov-wrap .rov-card:has(.rov-share:hover),\r\n        .rov-wrap .rov-card:has(.rov-code:hover) {\r\n            border-color: #e9e9e9;\r\n            box-shadow: 0 6px 20px rgba(0, 0, 0, .06);\r\n            transform: none;\r\n        }\r\n\r\n        \/* Bot\u00e3o de Compartilhamento (Share) *\/\r\n        .rov-wrap .rov-share {\r\n            font-size: 12px;\r\n            font-weight: 800;\r\n            letter-spacing: .06em;\r\n            border-radius: 999px;\r\n            padding: 6px 10px;\r\n            border: 1px solid #66d482;\r\n            background: #e6f5ea;\r\n            color: #185c37;\r\n            white-space: nowrap;\r\n            cursor: pointer;\r\n            transition: .15s;\r\n        }\r\n        .rov-wrap .rov-share:hover { opacity: 0.9; box-shadow: 0 0 5px rgba(24, 92, 55, 0.2); }\r\n        .rov-wrap .rov-share:active { transform: translateY(0.5px); }\r\n\r\n        .rov-wrap .rov-main { flex: 1; }\r\n        .rov-wrap .rov-title { margin: 0 0 6px 0; font-weight: 800; font-size: 21px; }\r\n        .rov-wrap .rov-meta { margin: 0; color: #555; font-size: 13px; }\r\n\r\n        \/* Cores do C\u00f3digo do Certificado (Azul) *\/\r\n        .rov-wrap .rov-code {\r\n            font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, \"Liberation Mono\", monospace;\r\n            font-weight: 600;\r\n            background: #e3f2ff;\r\n            border: 1px solid #c8e0ff;\r\n            border-radius: 8px;\r\n            padding: 4px 8px;\r\n            font-size: 13px;\r\n            color: #114488;\r\n            cursor: pointer;\r\n            transition: background 0.1s;\r\n        }\r\n        .rov-wrap .rov-code:hover { background: #d8ecff; }\r\n\r\n        .rov-wrap .rov-foot { display: flex; gap: 10px; align-items: center; margin-top: 10px; flex-wrap: wrap; }\r\n        .rov-wrap .rov-empty { padding: 16px; border: 1px dashed #ddd; border-radius: 14px; background: #fafafa; }\r\n        .rov-wrap .rov-load { display: inline-block; width: 18px; height: 18px; border: 3px solid #ddd; border-top-color: #111; border-radius: 50%; animation: ro-spin .8s linear infinite; }\r\n        @keyframes ro-spin { to { transform: rotate(360deg); } }\r\n\r\n        \/* Selos e Legendas *\/\r\n        .rov-wrap .protected-seal { pointer-events: none; -webkit-user-drag: none; user-select: none; }\r\n        .rov-wrap .seal-legend {\r\n            display: flex; justify-content: space-between; align-items: center;\r\n            background: #fff; border: 1px solid #f2f2f2; border-radius: 10px;\r\n            padding: 8px 14px; margin-top: 20px; flex-wrap: wrap; gap: 10px;\r\n        }\r\n        .rov-wrap .seal-legend p { margin: 0; font-size: 13px; color: #555; display: flex; align-items: center; gap: 6px; }\r\n        .rov-wrap .seal-legend img { width: 20px; height: 20px; }\r\n\r\n        \/* TELA DE VERIFICA\u00c7\u00c3O \u00daNICA (SUCCESS SCREEN) *\/\r\n        .rov-wrap .rov-single-result { margin-top: 22px; padding: 0; }\r\n        .rov-wrap .rov-success-bg { background-color: #e8f5e9; padding: 30px 20px; border-radius: 14px; text-align: center; margin-bottom: 20px; }\r\n        .rov-wrap .rov-success-icon-container { display: block; margin-bottom: 15px; }\r\n        .rov-wrap .rov-success-seal { width: 60px; height: 60px; pointer-events: none; -webkit-user-drag: none; }\r\n        .rov-wrap .rov-success-title { font-size: 24px; font-weight: 800; color: #1b5e20; margin: 0; }\r\n        .rov-wrap .rov-success-sub { color: #4CAF50; font-size: 14px; margin: 5px 0 20px 0; }\r\n        .rov-wrap .rov-card-single { max-width: 450px; margin: 0 auto; border: 1px solid #ddd; border-radius: 14px; padding: 20px; box-shadow: 0 10px 30px rgba(0, 0, 0, .1); background: #fff; text-align: left; display: block; }\r\n        .rov-wrap .rov-card-single .rov-title { font-size: 22px; margin-bottom: 10px; }\r\n        .rov-wrap .rov-card-single .rov-meta { font-size: 13px; }\r\n\r\n        \/* --- CARD PREMIUM DA ACADEMY --- *\/\r\n        .rov-academy-card {\r\n            max-width: 450px;\r\n            margin: 20px auto 0 auto;\r\n            border: 1px solid #D4AF37; \/* Borda Dourada Met\u00e1lica Fina *\/\r\n            border-radius: 14px;\r\n            background: #ffffff; \/* Fundo Branco *\/\r\n            padding: 20px;\r\n            box-shadow: 0 4px 15px rgba(0, 0, 0, 0.05);\r\n            text-align: center;\r\n        }\r\n        .rov-academy-card img {\r\n            max-width: 180px;\r\n            height: auto;\r\n            margin-bottom: 15px;\r\n            pointer-events: none;\r\n            -webkit-user-drag: none;\r\n        }\r\n        .rov-academy-card .rov-course-title-premium,\r\n        .rov-academy-card .rov-student-name-premium {\r\n            display: none;\r\n        }\r\n        .rov-academy-card .rov-description {\r\n            font-size: 14px;\r\n            color: #333;\r\n            margin: 0;\r\n            line-height: 1.5;\r\n            text-align: left;\r\n        }\r\n        .rov-academy-card strong {\r\n            color: #000;\r\n        }\r\n        \r\n        \/* DESCRI\u00c7\u00c3O DUBAI (MANTIDA) *\/\r\n        .rov-course-description {\r\n            max-width: 500px; margin: 20px auto 0 auto; border: 1px solid #f2f2f2;\r\n            border-radius: 14px; background: #fff8e1; padding: 20px;\r\n            box-shadow: 0 4px 15px rgba(0, 0, 0, .05); display: flex;\r\n            flex-direction: column; gap: 15px; text-align: left;\r\n        }\r\n        .rov-course-description .rov-desc-content { display: flex; align-items: flex-start; gap: 15px; }\r\n        .rov-course-description img { width: 50px; height: 50px; object-fit: contain; pointer-events: none; -webkit-user-drag: none; flex-shrink: 0; }\r\n        .rov-course-description .rov-desc-title { font-size: 16px; font-weight: 800; margin: 0 0 8px 0; color: #a07a00; }\r\n        .rov-course-description p { font-size: 13px; color: #333; margin: 0; line-height: 1.4; }\r\n\r\n        \/* Responsividade *\/\r\n        @media (max-width: 560px) {\r\n            .rov-wrap .rov-h2 { font-size: 28px; }\r\n            .rov-wrap .rov-card { padding: 14px; }\r\n            .rov-wrap { padding: 32px 16px; }\r\n            .rov-wrap .rov-success-title { font-size: 22px; }\r\n            .rov-wrap .rov-success-sub { font-size: 13px; }\r\n            .rov-wrap .rov-card-single .rov-title { font-size: 20px; }\r\n            .rov-wrap .rov-card-single .rov-meta { font-size: 12px; }\r\n            .rov-wrap .rov-course-description .rov-desc-content { flex-direction: column; text-align: center; align-items: center; }\r\n            .rov-wrap .rov-course-description img { width: 40px; height: 40px; }\r\n            .rov-wrap .seal-legend { justify-content: flex-start; text-align: left; }\r\n            .rov-academy-card img { max-width: 150px; }\r\n            .rov-academy-card .rov-description { font-size: 13px; }\r\n        }\r\n    <\/style>\r\n<\/head>\r\n<body>\r\n    <div class=\"rov-wrap\">\r\n        <h2 class=\"rov-h2\">Certificate Status<\/h2>\r\n        <p class=\"rov-sub\">Enter your <b>full name<\/b> or unique <b>certificate code<\/b> to confirm course completion.<\/p>\r\n\r\n        <form id=\"verifyForm\">\r\n            <label class=\"rov-label\" for=\"name\">Full name:<\/label>\r\n            <input class=\"rov-input\" type=\"text\" id=\"name\" placeholder=\"Ex: Raphael Oliver\">\r\n            <label class=\"rov-label\" for=\"code\">Certificate code:<\/label>\r\n            <input class=\"rov-input\" type=\"text\" id=\"code\" placeholder=\"Ex: RO-2025-DXB-001\">\r\n            <button class=\"rov-btn\" type=\"submit\" id=\"verifyBtn\">\r\n                <span>Verify<\/span>\r\n                <span id=\"btnSpin\" style=\"display:none\" class=\"rov-load\"><\/span>\r\n            <\/button>\r\n        <\/form>\r\n\r\n        <div class=\"seal-legend\">\r\n            <p><img decoding=\"async\" src=\"https:\/\/verify.raphaeloliver.com\/wp-content\/uploads\/2025\/10\/verifygold.png\" alt=\"Gold Seal\"> <strong>GOLD:<\/strong> 3 Days Practice Class In Dubai.<\/p>\r\n            <p><img decoding=\"async\" src=\"https:\/\/verify.raphaeloliver.com\/wp-content\/uploads\/2025\/10\/verifyblue.png\" alt=\"Blue Seal\"> <strong>BLUE:<\/strong> Look and Learn Class.<\/p>\r\n            <p><img decoding=\"async\" src=\"https:\/\/verify.raphaeloliver.com\/wp-content\/uploads\/2025\/10\/verifyPurple.png\" alt=\"Purple Seal\"> <strong>PURPLE:<\/strong> Online Courses.<\/p>\r\n        <\/div>\r\n\r\n        <div class=\"rov-results\" id=\"results\"><\/div>\r\n        <p class=\"rov-note\" id=\"rov-note\">Tip: searching by the full code returns only your record. Searching by partial code like <b>RO-2025-DXB<\/b> will show all results for that event.<\/p>\r\n    <\/div>\r\n    <script>\r\n        \/\/ URLs das Planilhas (Constantes Checadas)\r\n        const CERTS_URL = 'https:\/\/docs.google.com\/spreadsheets\/d\/e\/2PACX-1vTF5UgjoAA13yEIqaV9l-XpfyuZfYAqmYWkQr_cWVwcovpk4lBTsdpBP3YBTF4vldlWujX980u4z63O\/pub?gid=0&single=true&output=csv';\r\n        const PRESENTIAL_URL = 'https:\/\/docs.google.com\/spreadsheets\/d\/e\/2PACX-1vTF5UgjoAA13yEIqaV9l-XpfyuZfYAqmYWkQr_cWVwcovpk4lBTsdpBP3YBTF4vldlWujX980u4z63O\/pub?gid=20553074&single=true&output=csv';\r\n        \r\n        \/\/ URLs dos Selos e Logos\r\n        const VERIFY_GOLD_URL = 'https:\/\/verify.raphaeloliver.com\/wp-content\/uploads\/2025\/10\/verifygold.png';\r\n        const VERIFY_BLUE_URL = 'https:\/\/verify.raphaeloliver.com\/wp-content\/uploads\/2025\/10\/verifyblue.png';\r\n        const VERIFY_PURPLE_URL = 'https:\/\/verify.raphaeloliver.com\/wp-content\/uploads\/2025\/10\/verifyPurple.png';\r\n        const DUBAI_ICON_URL = 'https:\/\/verify.raphaeloliver.com\/wp-content\/uploads\/2025\/11\/icone-descricao-dubai-4-3.webp';\r\n        const ACADEMY_LOGO_URL = 'https:\/\/verify.raphaeloliver.com\/wp-content\/uploads\/2025\/11\/raphael_oliver_academy_black_desktop-1.png';\r\n\r\n        \/\/ --- CONSTANTE: DESCRI\u00c7\u00d5ES DOS CURSOS ---\r\n        const COURSE_DESCRIPTIONS = {\r\n            'MASTER OF MAKEUP': \"successfully completed the [COURSE_TITLE] course at Raphael Oliver Academy, an online international training focused on advanced makeup techniques, photography, and marketing for makeup artists, designed to refine professional skills in the beauty industry.\",\r\n            'BRIDAL MAKEUP MASTERCLASS': \"successfully completed the [COURSE_TITLE] at Raphael Oliver Academy, an international online course focused on mastering the LockedBeauty\u2122 technique \u2014 a waterproof makeup method resistant to water, sweat, and tears, designed especially for brides seeking long-lasting perfection.\",\r\n            'WATERPROOF MAKEUP | SPECIALIZATION': \"successfully completed the [COURSE_TITLE] at Raphael Oliver Academy, learning water-resistant techniques for professional and long-lasting makeup looks.\",\r\n            'COLORFUL MAKEUP + ARABIC BRIDE': \"successfully completed the [COURSE_TITLE] course at Raphael Oliver Academy, an online class focused on vibrant and colorful makeup looks, combined with Arabic-inspired bridal techniques that emphasize intensity, precision, and artistic detail.\",\r\n            'CAREER MENTORSHIP | THE JOURNEY OF LEARNING': \"successfully completed the [COURSE_TITLE] at Raphael Oliver Academy, an online international mentorship focused on career strategy, client management, branding, and business growth for makeup artists.\"\r\n        };\r\n\r\n        const form = document.getElementById('verifyForm');\r\n        const resultsDiv = document.getElementById('results');\r\n        const btn = document.getElementById('verifyBtn');\r\n        const spin = document.getElementById('btnSpin');\r\n        const noteElement = document.getElementById('rov-note');\r\n        const sealLegendElement = document.querySelector('.seal-legend'); \r\n\r\n        const norm = s => (s || '').toLowerCase().normalize('NFD').replace(\/[\\u0300-\\u036f]\/g, '').trim();\r\n        function csvToRows(text) { return text.trim().split(\/\\r?\\n\/).map(l => l.split(',')); }\r\n        function toTitleCase(str) {\r\n            if (!str) return '';\r\n            return str.toLowerCase().split(' ').map(word => (word.length > 0) ? word.charAt(0).toUpperCase() + word.slice(1) : '').join(' ');\r\n        }\r\n        function formatDateToEnglish(dateString) {\r\n            const datePart = dateString.trim().split(' ')[0];\r\n            const [year, month, day] = datePart.split('-');\r\n            const dateObj = new Date(Date.UTC(year, month - 1, day));\r\n            const monthNames = [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"];\r\n            const monthName = monthNames[dateObj.getUTCMonth()];\r\n            const dayOfMonth = dateObj.getUTCDate();\r\n            let suffix;\r\n            if ([1, 21, 31].includes(dayOfMonth)) { suffix = 'st'; }\r\n            else if ([2, 22].includes(dayOfMonth)) { suffix = 'nd'; }\r\n            else if ([3, 23].includes(dayOfMonth)) { suffix = 'rd'; }\r\n            else { suffix = 'th'; }\r\n            return `${dayOfMonth}${suffix} ${monthName} ${dateObj.getUTCFullYear()}`;\r\n        }\r\n        \r\n        async function shareCertificate(course, name, code) {\r\n            const verificationLink = window.location.href.split('#')[0];\r\n            const shareText = `I completed the *${course}* with *Raphael Oliver*. You can verify the authenticity of my certificate using my name: *${name}* or the code *${code}*. Verify here: ${verificationLink}`;\r\n            \r\n            if (navigator.share) {\r\n                try {\r\n                    await navigator.share({\r\n                        title: `Certificate: ${name} - ${course}`,\r\n                        text: shareText\r\n                    });\r\n                } catch (error) {\r\n                    if (error.name !== 'AbortError') { fallbackShare(course, name, code); }\r\n                }\r\n            } else {\r\n                fallbackShare(course, name, code);\r\n            }\r\n        }\r\n        \r\n        function fallbackShare(course, name, code) {\r\n            const verificationLink = window.location.href.split('#')[0];\r\n            const choice = prompt(\"Sharing options (Native Share not available or failed):\\n\\n1. WhatsApp\\n2. Email\\n\\nEnter 1 or 2:\");\r\n            if (choice === '1') {\r\n                const waMessage = `I have completed the *${course}* with *Raphael Oliver*. You can check the authenticity of my certificate using my name: *${name}* or the code *${code}*.\\n\\nVerify here: ${verificationLink}`;\r\n                window.open(`https:\/\/api.whatsapp.com\/send?text=${encodeURIComponent(waMessage)}`, '_blank');\r\n            } else if (choice === '2') {\r\n                const emailSubject = encodeURIComponent(`Certificate Verification for ${name}`);\r\n                const emailBody = encodeURIComponent(`Dear recipient,\\n\\nI have completed the ${course} with Raphael Oliver.\\n\\nYou can verify the authenticity of my certificate using my name: ${name} or the code: ${code}.\\n\\nVerify here: ${verificationLink}\\n\\nThank you,\\n${name}`);\r\n                window.location.href = `mailto:?subject=${emailSubject}&body=${emailBody}`;\r\n            } else if (choice) {\r\n                alert(\"Invalid choice. Please enter 1 for WhatsApp or 2 for Email.\");\r\n            }\r\n        }\r\n\r\n        let cachedData = { certs: null, presential: null };\r\n        async function fetchCSVData() {\r\n            if (cachedData.certs && cachedData.presential) { return cachedData; }\r\n            try {\r\n                const [certsRes, presentialRes] = await Promise.all([ fetch(CERTS_URL), fetch(PRESENTIAL_URL) ]);\r\n                const certsRows = csvToRows(await certsRes.text());\r\n                const presentialRows = csvToRows(await presentialRes.text());\r\n                certsRows.shift();\r\n                presentialRows.shift();\r\n                cachedData.certs = certsRows;\r\n                cachedData.presential = presentialRows;\r\n                return cachedData;\r\n            } catch (err) {\r\n                console.error(\"Erro ao buscar dados do CSV:\", err);\r\n                return null;\r\n            }\r\n        }\r\n\r\n        \/**\r\n         * FUN\u00c7\u00c3O: Obt\u00e9m a descri\u00e7\u00e3o do curso formatada para o novo card premium (PAR\u00c1GRAFO \u00daNICO).\r\n         *\/\r\n        function getCourseDescription(courseTitle, studentNameFormatted) {\r\n            const normalizedCourse = courseTitle.toUpperCase();\r\n            \r\n            let descriptionTemplate = COURSE_DESCRIPTIONS[normalizedCourse];\r\n\r\n            if (descriptionTemplate) {\r\n                \/\/ 1. Envolve o nome do aluno em negrito\r\n                const boldStudent = `<strong>${studentNameFormatted}<\/strong>`;\r\n                \/\/ 2. Envolve o nome do curso em negrito\r\n                const boldCourse = `<strong>${courseTitle}<\/strong>`;\r\n                \r\n                \/\/ 3. Monta o texto no padr\u00e3o: **Student Name** successfully completed the **Course Name** course...\r\n                let finalDescription = descriptionTemplate.replace('[COURSE_TITLE]', boldCourse);\r\n\r\n                return `${boldStudent} ${finalDescription}`;\r\n            }\r\n            return '';\r\n        }\r\n\r\n        \/\/ Fun\u00e7\u00e3o principal de renderiza\u00e7\u00e3o do cart\u00e3o de lista\r\n        function rowToCard(row, sheetType, isSingleView = false) {\r\n            let studentName, code, courseTitle, date, status, city;\r\n\r\n            if (sheetType === 'certs') {\r\n                [date, code,, courseTitle, studentName] = [row[0], row[1], row[3], row[4], row[5]].map(s => (s || '').trim());\r\n                code = code.toUpperCase();\r\n                studentName = studentName.toUpperCase();\r\n                date = formatDateToEnglish(date);\r\n                status = 'valid';\r\n                city = '';\r\n            } else if (sheetType === 'presential') {\r\n                [studentName, city, courseTitle, date, code, status] = [row[0], row[1], row[2], row[3], row[4], row[5] || 'valid'].map(s => (s || '').trim());\r\n                studentName = studentName.toUpperCase();\r\n                code = code.toUpperCase();\r\n                status = status.toLowerCase();\r\n            } else {\r\n                return '';\r\n            }\r\n\r\n            \/\/ Tradu\u00e7\u00e3o de t\u00edtulos (logica mantida)\r\n            let translatedCourseTitle = courseTitle.replace(\/&#8217;\/g, \"'\");\r\n            if (translatedCourseTitle === 'Mentoria | Maquiagem A Jornada do Aprendizado') { translatedCourseTitle = 'Career Mentorship | The Journey of Learning'; }\r\n            else if (translatedCourseTitle === 'Mestre da Maquiagem') { translatedCourseTitle = 'Master Of Makeup'; }\r\n            else if (translatedCourseTitle === 'Masterclass: Maquiagem Colorida + Noiva \u00c1rabe') { translatedCourseTitle = 'Colorful Makeup + Arabic Bride'; }\r\n            else if (translatedCourseTitle === \"Maquiagem \u00e0 Prova d' \u00e1gua | Especializa\u00e7\u00e3o\") { translatedCourseTitle = 'Waterproof Makeup | Specialization'; }\r\n\r\n            const displayCourseTitle = translatedCourseTitle.toUpperCase();\r\n\r\n            \/\/ L\u00f3gica do Selo\r\n            const ok = status === 'valid';\r\n            const isDubai = norm(city).includes('dubai');\r\n            const isOnline = code.startsWith('RO-') && code.length === 8;\r\n\r\n            let sealUrl;\r\n            if (isDubai) { sealUrl = VERIFY_GOLD_URL; }\r\n            else if (isOnline) { sealUrl = VERIFY_PURPLE_URL; }\r\n            else { sealUrl = VERIFY_BLUE_URL; }\r\n\r\n            const seal = ok ? `<img decoding=\"async\" src=\"${sealUrl}\" alt=\"verified\" class=\"protected-seal\" style=\"width:20px;height:20px;vertical-align:middle;margin-right:8px;\">` : '';\r\n            const esc = s => (s || '').replace(\/&\/g, '&amp;').replace(\/<\/g, '&lt;').replace(\/>\/g, '&gt;');\r\n            const cardClass = isSingleView ? 'rov-card-single' : 'rov-card';\r\n\r\n            return {\r\n                html: `\r\n                    <div class=\"${cardClass}\" data-full-code=\"${esc(code)}\">\r\n                        <div class=\"rov-main\">\r\n                            <h3 class=\"rov-title\">${seal}${esc(studentName)}<\/h3>\r\n                            <p class=\"rov-meta\"><b>${esc(displayCourseTitle)}<\/b>${city ? ` in <b>${esc(city)}<\/b>` : ''}, completed on ${esc(date)}.<\/p>\r\n                            <div class=\"rov-foot\">\r\n                                <code class=\"rov-code\" data-code-value=\"${esc(code)}\" title=\"Click to copy code\">${esc(code)}<\/code>\r\n                                <button class=\"rov-share\" type=\"button\"\r\n                                    data-course=\"${esc(translatedCourseTitle)}\"\r\n                                    data-name=\"${esc(studentName)}\"\r\n                                    data-code=\"${esc(code)}\">\r\n                                    Share\r\n                                <\/button>\r\n                            <\/div>\r\n                        <\/div>\r\n                    <\/div>\r\n                `,\r\n                sealUrl: sealUrl,\r\n                code: code,\r\n                match: { row, sheetType },\r\n                isDubai: isDubai,\r\n                studentName: studentName,\r\n                courseTitle: translatedCourseTitle \/\/ T\u00edtulo do curso para a descri\u00e7\u00e3o\r\n            };\r\n        }\r\n\r\n        \/\/ Fun\u00e7\u00e3o para exibir a tela de sucesso de verifica\u00e7\u00e3o \u00fanica\r\n        function showSingleVerificationScreen(match) {\r\n            const cardData = rowToCard(match.row, match.sheetType, true);\r\n            const finalSealUrl = cardData.sealUrl;\r\n            const isDubaiCourse = cardData.isDubai;\r\n            const studentNameUpper = cardData.studentName;\r\n            const studentNameFormatted = toTitleCase(studentNameUpper);\r\n            const courseTitle = cardData.courseTitle;\r\n            \r\n            \/\/ --- AQUI \u00c9 ONDE AS DUAS COISAS DEVEM SUMIR ---\r\n            if (noteElement) { noteElement.style.display = 'none'; }\r\n            if (sealLegendElement) { sealLegendElement.style.display = 'none'; }\r\n            \r\n            const successSeal = `<div class=\"rov-success-icon-container\"><img decoding=\"async\" src=\"${finalSealUrl}\" alt=\"Verified Successful\" class=\"protected-seal rov-success-seal\"><\/div>`;\r\n            \r\n            \/\/ --- CARD PREMIUM DA ACADEMY ---\r\n            let academyCardHtml = '';\r\n            const description = getCourseDescription(courseTitle, studentNameFormatted);\r\n\r\n            if (description && !isDubaiCourse) {\r\n                academyCardHtml = `\r\n                    <div class=\"rov-academy-card\">\r\n                        <img decoding=\"async\" src=\"${ACADEMY_LOGO_URL}\" alt=\"Raphael Oliver Academy Logo\">\r\n                        <p class=\"rov-description\">${description}<\/p>\r\n                    <\/div>\r\n                `;\r\n            }\r\n\r\n            \/\/ --- Card Secund\u00e1rio DUBAI (MANTIDO) ---\r\n            let dubaiDescriptionHtml = '';\r\n            if (isDubaiCourse) {\r\n                const descriptionText = `<b>${studentNameFormatted}<\/b> successfully completed the <b>3 Days Practice Class<\/b> in Dubai, a premium hands-on program limited to 30 international artists under the direct guidance of Mr. <b>Raphael Oliver<\/b>.`;\r\n                dubaiDescriptionHtml = `\r\n                    <div class=\"rov-course-description\">\r\n                        <div class=\"rov-desc-content\">\r\n                            <img decoding=\"async\" src=\"${DUBAI_ICON_URL}\" alt=\"Dubai Experience Icon\">\r\n                            <div>\r\n                                <p class=\"rov-desc-title\">A Global Experience in Dubai<\/p>\r\n                                <p>${descriptionText}<\/p>\r\n                            <\/div>\r\n                        <\/div>\r\n                    <\/div>\r\n                `;\r\n            }\r\n\r\n            resultsDiv.innerHTML = `\r\n                <div class=\"rov-single-result\">\r\n                    <div class=\"rov-success-bg\">\r\n                        ${successSeal}\r\n                        <h3 class=\"rov-success-title\">Verification Successful<\/h3>\r\n                        <p class=\"rov-success-sub\">This certificate has verified as authentic.<\/p>\r\n                        ${cardData.html}\r\n                    <\/div>\r\n                    ${academyCardHtml}\r\n                    ${dubaiDescriptionHtml}\r\n                <\/div>\r\n            `;\r\n        }\r\n\r\n        \/\/ *************************************************************************\r\n        \/\/ FUN\u00c7\u00c3O PRINCIPAL DE BUSCA\r\n        \/\/ *************************************************************************\r\n        async function performSearch(inputName, inputCode) {\r\n            \r\n            const normalizedName = norm(inputName);\r\n            const normalizedCode = inputCode.trim().toUpperCase();\r\n\r\n            const nameProvided = normalizedName.length >= 3;\r\n            const codeProvided = normalizedCode.length >= 8;\r\n\r\n            if (!nameProvided && !codeProvided) {\r\n                let message = 'Please enter your full name or certificate code.';\r\n                if (normalizedName.length > 0 && normalizedName.length < 3) { message = 'Search by name requires at least 3 characters.'; }\r\n                else if (normalizedCode.length > 0 && normalizedCode.length < 8) { message = 'Search by code requires at least 8 characters (e.g., RO-2025-DXB).'; }\r\n                resultsDiv.innerHTML = `<div class=\"rov-empty\">${message}<\/div>`;\r\n                \/\/ Busca inv\u00e1lida, mant\u00e9m Tip e Legenda vis\u00edveis.\r\n                if (noteElement) { noteElement.style.display = 'block'; }\r\n                if (sealLegendElement) { sealLegendElement.style.display = 'flex'; }\r\n                return;\r\n            }\r\n\r\n            btn.disabled = true;\r\n            spin.style.display = 'inline-block';\r\n            resultsDiv.innerHTML = '';\r\n            \r\n            \/\/ Oculta Tip e Legenda assim que uma busca v\u00e1lida come\u00e7a, para evitar que fiquem sobre o loading ou a lista antes da renderiza\u00e7\u00e3o.\r\n            if (noteElement) { noteElement.style.display = 'none'; }\r\n            if (sealLegendElement) { sealLegendElement.style.display = 'none'; }\r\n\r\n            try {\r\n                const data = await fetchCSVData();\r\n                if (!data) {\r\n                    resultsDiv.innerHTML = '<div class=\"rov-empty\">Error loading verification data. Please check your internet connection or try again later.<\/div>';\r\n                    \/\/ Em caso de erro, reexibe a Tip e Legenda\r\n                    if (noteElement) { noteElement.style.display = 'block'; }\r\n                    if (sealLegendElement) { sealLegendElement.style.display = 'flex'; }\r\n                    return;\r\n                }\r\n\r\n                let matches = [];\r\n                [...data.certs.map(r => ({ row: r, sheetType: 'certs' })), ...data.presential.map(r => ({ row: r, sheetType: 'presential' }))]\r\n                .forEach(item => {\r\n                    const { row, sheetType } = item;\r\n                    let certCode, studentName;\r\n\r\n                    if (sheetType === 'certs') {\r\n                        certCode = (row[1] || '').trim().toUpperCase();\r\n                        studentName = (row[5] || '').toLowerCase();\r\n                    } else { \/\/ presential\r\n                        studentName = (row[0] || '').toLowerCase();\r\n                        certCode = (row[4] || '').trim().toUpperCase();\r\n                    }\r\n\r\n                    const byName = nameProvided && norm(studentName).startsWith(normalizedName);\r\n                    const byCode = codeProvided && certCode.startsWith(normalizedCode);\r\n\r\n                    if (byName || byCode) {\r\n                        matches.push({ ...item, key: JSON.stringify(row), exactCode: certCode === normalizedCode });\r\n                    }\r\n                });\r\n\r\n                if (matches.length) {\r\n                    const uniqueKeys = new Set();\r\n                    const uniqueMatches = matches.filter(match => {\r\n                        const isDuplicate = uniqueKeys.has(match.key);\r\n                        uniqueKeys.add(match.key);\r\n                        return !isDuplicate;\r\n                    });\r\n\r\n                    \/\/ Verifica se \u00e9 uma busca exata (c\u00f3digo exato, ou \u00fanico resultado)\r\n                    const exactMatchByCode = uniqueMatches.filter(m => m.exactCode).length === 1 && codeProvided;\r\n                    \r\n                    \/\/ Condi\u00e7\u00e3o para tela \u00fanica (quando a legenda deve SUMIR): \r\n                    \/\/ 1. Exatamente UM match encontrado E\r\n                    \/\/ 2. A busca foi feita usando o c\u00f3digo exato (ex: RO-2025-DXB-001)\r\n                    if (uniqueMatches.length === 1 && exactMatchByCode) {\r\n                        showSingleVerificationScreen(uniqueMatches[0]);\r\n                        \/\/ Tip e Legenda s\u00e3o escondidas dentro de showSingleVerificationScreen\r\n                    }\r\n                    else {\r\n                        \/\/ Lista de cards (m\u00faltiplos resultados ou um \u00fanico resultado de busca parcial por nome\/c\u00f3digo)\r\n                        const resultsHtml = uniqueMatches.map(match => rowToCard(match.row, match.sheetType, false).html).join('');\r\n                        resultsDiv.innerHTML = resultsHtml;\r\n                        \r\n                        \/\/ *** CORRE\u00c7\u00c3O: REEXIBE A LEGENDA DOS SELOS E A DICA APENAS NA LISTA DE RESULTADOS ***\r\n                        if (noteElement) { noteElement.style.display = 'block'; }\r\n                        if (sealLegendElement) { sealLegendElement.style.display = 'flex'; }\r\n                    }\r\n                } else {\r\n                    resultsDiv.innerHTML = '<div class=\"rov-empty\">No match found. Please check your details or try the certificate code.<\/div>';\r\n                    \/\/ No Match: Reexibe a Tip e Legenda\r\n                    if (noteElement) { noteElement.style.display = 'block'; }\r\n                    if (sealLegendElement) { sealLegendElement.style.display = 'flex'; }\r\n                }\r\n            } catch (err) {\r\n                console.error(\"Erro na busca:\", err);\r\n                resultsDiv.innerHTML = '<div class=\"rov-empty\">An error occurred during verification. Please try again later.<\/div>';\r\n                \/\/ Em caso de erro, reexibe a Tip e Legenda\r\n                if (noteElement) { noteElement.style.display = 'block'; }\r\n                if (sealLegendElement) { sealLegendElement.style.display = 'flex'; }\r\n            } finally {\r\n                btn.disabled = false;\r\n                spin.style.display = 'none';\r\n            }\r\n        }\r\n\r\n        \/\/ --- EVENT LISTENERS (MANTIDOS) ---\r\n        form.addEventListener('submit', (e) => {\r\n            e.preventDefault();\r\n            const name = document.getElementById('name').value;\r\n            const code = document.getElementById('code').value;\r\n            performSearch(name, code);\r\n        });\r\n\r\n        document.addEventListener('click', async (e) => {\r\n            const card = e.target.closest('.rov-card');\r\n            const isInteractive = e.target.closest('.rov-share') || e.target.closest('.rov-code');\r\n\r\n            if (card && !isInteractive) {\r\n                const fullCode = card.querySelector('.rov-code')?.getAttribute('data-code-value');\r\n                if (fullCode) {\r\n                    document.getElementById('name').value = '';\r\n                    document.getElementById('code').value = fullCode;\r\n                    \/\/ Ao clicar no card, for\u00e7a uma busca exata pelo c\u00f3digo (que leva \u00e0 tela \u00fanica, onde a legenda SUMIR\u00c1)\r\n                    await performSearch('', fullCode);\r\n                }\r\n            }\r\n\r\n            const shareButton = e.target.closest('.rov-share');\r\n            if (shareButton) {\r\n                shareCertificate(\r\n                    shareButton.getAttribute('data-course'),\r\n                    shareButton.getAttribute('data-name'),\r\n                    shareButton.getAttribute('data-code')\r\n                );\r\n            }\r\n\r\n            const codeElement = e.target.closest('.rov-code');\r\n            if (codeElement) {\r\n                const codeToCopy = codeElement.getAttribute('data-code-value');\r\n                if (navigator.clipboard && codeToCopy) {\r\n                    navigator.clipboard.writeText(codeToCopy).then(() => {\r\n                        const originalText = codeElement.textContent;\r\n                        codeElement.textContent = 'Copied!';\r\n                        setTimeout(() => { codeElement.textContent = originalText; }, 800);\r\n                    }).catch(err => {\r\n                        console.error('Failed to copy code: ', err);\r\n                        alert(`Copy failed. Please copy manually: ${codeToCopy}`);\r\n                    });\r\n                } else if (codeToCopy) {\r\n                    alert(`Copy the code manually: ${codeToCopy}`);\r\n                }\r\n            }\r\n        });\r\n\r\n        \/\/ =========================================================================\r\n        \/\/ --- C\u00d3DIGO DE BLOQUEIO DE C\u00d3PIA (MANTIDO) ---\r\n        \/\/ =========================================================================\r\n        document.addEventListener('contextmenu', function (e) { e.preventDefault(); });\r\n        document.addEventListener('keydown', function (e) {\r\n            if (e.keyCode === 123) { e.preventDefault(); } \/\/ F12\r\n            if (e.ctrlKey && e.shiftKey && (e.keyCode === 73 || e.keyCode === 74)) { e.preventDefault(); } \/\/ Ctrl+Shift+I\/J\r\n            if (e.ctrlKey && e.keyCode === 85) { e.preventDefault(); } \/\/ Ctrl+U\r\n        });\r\n        \/\/ =========================================================================\r\n    <\/script>\r\n<\/body>\r\n<\/html>\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Verify the authenticity of your Raphael Oliver certificate online. Confirm your name or certificate code and validate your training in professional makeup, both in-person and online.<\/p>\n","protected":false},"author":1,"featured_media":553,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_header_footer","meta":{"footnotes":""},"class_list":["post-22","page","type-page","status-publish","has-post-thumbnail","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.4 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Verify Certificate | Raphael Oliver - Raphael Oliver | Verify<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/verify.raphaeloliver.com\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Verify Certificate | Raphael Oliver - Raphael Oliver | Verify\" \/>\n<meta property=\"og:description\" content=\"Verify the authenticity of your Raphael Oliver certificate online. Confirm your name or certificate code and validate your training in professional makeup, both in-person and online.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/verify.raphaeloliver.com\/\" \/>\n<meta property=\"og:site_name\" content=\"Raphael Oliver | Verify\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/facebook.com\/raphaeloliverofficial\/\" \/>\n<meta property=\"article:modified_time\" content=\"2025-11-08T18:46:12+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/verify.raphaeloliver.com\/wp-content\/uploads\/2025\/09\/Verify-Certificates-site.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1127\" \/>\n\t<meta property=\"og:image:height\" content=\"590\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"14 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/verify.raphaeloliver.com\/\",\"url\":\"https:\/\/verify.raphaeloliver.com\/\",\"name\":\"Verify Certificate | Raphael Oliver - Raphael Oliver | Verify\",\"isPartOf\":{\"@id\":\"https:\/\/verify.raphaeloliver.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/verify.raphaeloliver.com\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/verify.raphaeloliver.com\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/verify.raphaeloliver.com\/wp-content\/uploads\/2025\/09\/Verify-Certificates-site.jpg\",\"datePublished\":\"2025-08-17T15:10:31+00:00\",\"dateModified\":\"2025-11-08T18:46:12+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/verify.raphaeloliver.com\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/verify.raphaeloliver.com\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/verify.raphaeloliver.com\/#primaryimage\",\"url\":\"https:\/\/verify.raphaeloliver.com\/wp-content\/uploads\/2025\/09\/Verify-Certificates-site.jpg\",\"contentUrl\":\"https:\/\/verify.raphaeloliver.com\/wp-content\/uploads\/2025\/09\/Verify-Certificates-site.jpg\",\"width\":1127,\"height\":590},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/verify.raphaeloliver.com\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/verify.raphaeloliver.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Verify Certificate | Raphael Oliver\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/verify.raphaeloliver.com\/#website\",\"url\":\"https:\/\/verify.raphaeloliver.com\/\",\"name\":\"Raphael Oliver - Verify\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/verify.raphaeloliver.com\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/verify.raphaeloliver.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/verify.raphaeloliver.com\/#organization\",\"name\":\"Raphael Oliver - Verify\",\"url\":\"https:\/\/verify.raphaeloliver.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/verify.raphaeloliver.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/verify.raphaeloliver.com\/wp-content\/uploads\/2025\/08\/logo_site_dourada.png\",\"contentUrl\":\"https:\/\/verify.raphaeloliver.com\/wp-content\/uploads\/2025\/08\/logo_site_dourada.png\",\"width\":600,\"height\":74,\"caption\":\"Raphael Oliver - Verify\"},\"image\":{\"@id\":\"https:\/\/verify.raphaeloliver.com\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/facebook.com\/raphaeloliverofficial\/\",\"https:\/\/instagram.com\/raphaeloliverofficial\/\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Verify Certificate | Raphael Oliver - Raphael Oliver | Verify","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/verify.raphaeloliver.com\/","og_locale":"en_US","og_type":"article","og_title":"Verify Certificate | Raphael Oliver - Raphael Oliver | Verify","og_description":"Verify the authenticity of your Raphael Oliver certificate online. Confirm your name or certificate code and validate your training in professional makeup, both in-person and online.","og_url":"https:\/\/verify.raphaeloliver.com\/","og_site_name":"Raphael Oliver | Verify","article_publisher":"https:\/\/facebook.com\/raphaeloliverofficial\/","article_modified_time":"2025-11-08T18:46:12+00:00","og_image":[{"width":1127,"height":590,"url":"https:\/\/verify.raphaeloliver.com\/wp-content\/uploads\/2025\/09\/Verify-Certificates-site.jpg","type":"image\/jpeg"}],"twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"14 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/verify.raphaeloliver.com\/","url":"https:\/\/verify.raphaeloliver.com\/","name":"Verify Certificate | Raphael Oliver - Raphael Oliver | Verify","isPartOf":{"@id":"https:\/\/verify.raphaeloliver.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/verify.raphaeloliver.com\/#primaryimage"},"image":{"@id":"https:\/\/verify.raphaeloliver.com\/#primaryimage"},"thumbnailUrl":"https:\/\/verify.raphaeloliver.com\/wp-content\/uploads\/2025\/09\/Verify-Certificates-site.jpg","datePublished":"2025-08-17T15:10:31+00:00","dateModified":"2025-11-08T18:46:12+00:00","breadcrumb":{"@id":"https:\/\/verify.raphaeloliver.com\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/verify.raphaeloliver.com\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/verify.raphaeloliver.com\/#primaryimage","url":"https:\/\/verify.raphaeloliver.com\/wp-content\/uploads\/2025\/09\/Verify-Certificates-site.jpg","contentUrl":"https:\/\/verify.raphaeloliver.com\/wp-content\/uploads\/2025\/09\/Verify-Certificates-site.jpg","width":1127,"height":590},{"@type":"BreadcrumbList","@id":"https:\/\/verify.raphaeloliver.com\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/verify.raphaeloliver.com\/"},{"@type":"ListItem","position":2,"name":"Verify Certificate | Raphael Oliver"}]},{"@type":"WebSite","@id":"https:\/\/verify.raphaeloliver.com\/#website","url":"https:\/\/verify.raphaeloliver.com\/","name":"Raphael Oliver - Verify","description":"","publisher":{"@id":"https:\/\/verify.raphaeloliver.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/verify.raphaeloliver.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/verify.raphaeloliver.com\/#organization","name":"Raphael Oliver - Verify","url":"https:\/\/verify.raphaeloliver.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/verify.raphaeloliver.com\/#\/schema\/logo\/image\/","url":"https:\/\/verify.raphaeloliver.com\/wp-content\/uploads\/2025\/08\/logo_site_dourada.png","contentUrl":"https:\/\/verify.raphaeloliver.com\/wp-content\/uploads\/2025\/08\/logo_site_dourada.png","width":600,"height":74,"caption":"Raphael Oliver - Verify"},"image":{"@id":"https:\/\/verify.raphaeloliver.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/facebook.com\/raphaeloliverofficial\/","https:\/\/instagram.com\/raphaeloliverofficial\/"]}]}},"_links":{"self":[{"href":"https:\/\/verify.raphaeloliver.com\/index.php\/wp-json\/wp\/v2\/pages\/22","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/verify.raphaeloliver.com\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/verify.raphaeloliver.com\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/verify.raphaeloliver.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/verify.raphaeloliver.com\/index.php\/wp-json\/wp\/v2\/comments?post=22"}],"version-history":[{"count":424,"href":"https:\/\/verify.raphaeloliver.com\/index.php\/wp-json\/wp\/v2\/pages\/22\/revisions"}],"predecessor-version":[{"id":949,"href":"https:\/\/verify.raphaeloliver.com\/index.php\/wp-json\/wp\/v2\/pages\/22\/revisions\/949"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/verify.raphaeloliver.com\/index.php\/wp-json\/wp\/v2\/media\/553"}],"wp:attachment":[{"href":"https:\/\/verify.raphaeloliver.com\/index.php\/wp-json\/wp\/v2\/media?parent=22"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}