{"id":1259,"date":"2025-07-15T13:52:55","date_gmt":"2025-07-15T13:52:55","guid":{"rendered":"https:\/\/enricando.com.br\/?p=1259"},"modified":"2025-07-16T13:11:32","modified_gmt":"2025-07-16T13:11:32","slug":"roleta-de-premios","status":"publish","type":"post","link":"https:\/\/enricando.com.br\/en\/roleta-de-premios\/","title":{"rendered":"Roleta de Premios"},"content":{"rendered":"\n<p>S\u00f3 pode girar 1 vez.<\/p>\n\n\n\n<!DOCTYPE html>\n<html lang=\"pt-BR\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Roleta Segura<\/title>\n    <style>\n        .wheel-main-container {\n            background: white;\n            border-radius: 20px;\n            padding: 20px;\n            box-shadow: 0 20px 40px rgba(0,0,0,0.1);\n            max-width: 600px;\n            width: 100%;\n            margin: 10px auto;\n        }\n\n        .wheel-section {\n            width: 100%;\n            text-align: center;\n            position: relative;\n        }\n\n        .wheel-container {\n            width: 100%;\n            max-width: 450px;\n            margin: 0 auto;\n            position: relative;\n            aspect-ratio: 1;\n        }\n\n        #wheel {\n            width: 100%;\n            height: 100%;\n            border-radius: 50%;\n            box-shadow: 0 15px 35px rgba(0,0,0,0.2);\n            transition: filter 0.3s ease;\n        }\n\n        .wheel-pointer {\n            position: absolute;\n            top: -10px;\n            left: 50%;\n            transform: translateX(-50%);\n            z-index: 2;\n            filter: drop-shadow(0 5px 10px rgba(0,0,0,0.3));\n        }\n\n        .controls-section {\n            margin-top: 20px;\n            padding: 0 10px;\n        }\n\n        .power-control {\n            margin-bottom: 20px;\n        }\n\n        .power-control label {\n            display: block;\n            margin-bottom: 10px;\n            font-weight: bold;\n            color: #333;\n            font-size: clamp(14px, 2.5vw, 16px);\n        }\n\n        #powerSlider {\n            width: 100%;\n            max-width: 350px;\n            height: 8px;\n            border-radius: 4px;\n            background: #ddd;\n            outline: none;\n            -webkit-appearance: none;\n            margin-bottom: 5px;\n        }\n\n        #powerSlider::-webkit-slider-thumb {\n            -webkit-appearance: none;\n            appearance: none;\n            width: 24px;\n            height: 24px;\n            border-radius: 50%;\n            background: #667eea;\n            cursor: pointer;\n            box-shadow: 0 2px 6px rgba(0,0,0,0.2);\n        }\n\n        #powerSlider::-moz-range-thumb {\n            width: 24px;\n            height: 24px;\n            border-radius: 50%;\n            background: #667eea;\n            cursor: pointer;\n            border: none;\n            box-shadow: 0 2px 6px rgba(0,0,0,0.2);\n        }\n\n        .power-labels {\n            display: flex;\n            justify-content: space-between;\n            margin-bottom: 20px;\n            color: #666;\n            font-size: clamp(10px, 2vw, 12px);\n            max-width: 350px;\n            margin-left: auto;\n            margin-right: auto;\n        }\n\n        #spinBtn {\n            padding: 14px 30px;\n            font-size: clamp(16px, 3vw, 20px);\n            background: linear-gradient(135deg, #28a745 0%, #20c997 100%);\n            color: white;\n            border: none;\n            border-radius: 50px;\n            cursor: pointer;\n            font-weight: bold;\n            transition: all 0.3s ease;\n            box-shadow: 0 8px 20px rgba(40, 167, 69, 0.3);\n            margin-top: 10px;\n            width: 100%;\n            max-width: 280px;\n        }\n\n        #spinBtn:hover:not(:disabled) {\n            transform: translateY(-2px);\n            box-shadow: 0 12px 25px rgba(40, 167, 69, 0.4);\n        }\n\n        #spinBtn:disabled {\n            opacity: 0.6;\n            cursor: not-allowed;\n            transform: none;\n        }\n\n        #resultBox {\n            height: 120px;\n            margin-top: 20px;\n            position: relative;\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            padding: 0 10px;\n        }\n\n        #result {\n            font-size: clamp(18px, 4vw, 26px);\n            font-weight: bold;\n            color: #2b2b2b;\n            background: linear-gradient(135deg, #fdf5d4 0%, #f8e71c 100%);\n            padding: 15px 20px;\n            border-radius: 15px;\n            display: inline-block;\n            margin: 0;\n            box-shadow: 0 8px 20px rgba(0,0,0,0.1);\n            border: 3px solid #f39c12;\n            opacity: 0;\n            transform: translateY(30px) scale(0.8);\n            transition: all 0.6s cubic-bezier(0.68, -0.55, 0.265, 1.55);\n            max-width: 100%;\n            word-wrap: break-word;\n            text-align: center;\n        }\n\n        #result.show {\n            opacity: 1;\n            transform: translateY(0) scale(1);\n        }\n\n        #ctaBox {\n            display: none;\n            margin-top: 25px;\n            background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\n            color: white;\n            padding: 20px;\n            border-radius: 15px;\n            box-shadow: 0 10px 25px rgba(0,0,0,0.2);\n            opacity: 0;\n            transform: translateY(20px);\n            transition: all 0.5s ease;\n        }\n\n        #ctaBox.show {\n            opacity: 1;\n            transform: translateY(0);\n        }\n\n        #ctaBox p {\n            font-size: clamp(14px, 3vw, 18px);\n            font-weight: 500;\n            margin-bottom: 20px;\n            line-height: 1.6;\n        }\n\n        #ctaBox a {\n            background-color: #25D366;\n            color: white;\n            padding: 12px 25px;\n            text-decoration: none;\n            font-size: clamp(14px, 3vw, 18px);\n            border-radius: 50px;\n            display: inline-block;\n            margin-top: 10px;\n            font-weight: bold;\n            transition: all 0.3s ease;\n            box-shadow: 0 5px 15px rgba(37, 211, 102, 0.3);\n            width: 100%;\n            max-width: 350px;\n            text-align: center;\n        }\n\n        #ctaBox a:hover {\n            transform: translateY(-2px);\n            box-shadow: 0 8px 20px rgba(37, 211, 102, 0.4);\n        }\n\n        .sparkles {\n            position: absolute;\n            width: 100%;\n            height: 100%;\n            pointer-events: none;\n            z-index: 1;\n            border-radius: 50%;\n            overflow: hidden;\n        }\n\n        .sparkle {\n            position: absolute;\n            width: 6px;\n            height: 6px;\n            background: #ffd700;\n            border-radius: 50%;\n            animation: sparkle 2s infinite;\n        }\n\n        @keyframes sparkle {\n            0%, 100% { opacity: 0; transform: scale(0) rotate(0deg); }\n            50% { opacity: 1; transform: scale(1) rotate(180deg); }\n        }\n\n        @keyframes confetti-fall {\n            0% {\n                transform: translateY(-100vh) rotate(0deg);\n                opacity: 1;\n            }\n            100% {\n                transform: translateY(100vh) rotate(360deg);\n                opacity: 0;\n            }\n        }\n\n        .confetti {\n            position: fixed;\n            width: 10px;\n            height: 10px;\n            z-index: 1000;\n            pointer-events: none;\n            animation: confetti-fall 3s linear forwards;\n        }\n\n        @media (max-width: 768px) {\n            .wheel-main-container {\n                padding: 15px;\n                margin: 5px auto;\n            }\n            \n            .wheel-container {\n                max-width: 320px;\n            }\n            \n            #resultBox {\n                height: 100px;\n                margin-top: 15px;\n            }\n            \n            #ctaBox {\n                padding: 15px;\n                margin-top: 20px;\n            }\n            \n            .controls-section {\n                padding: 0 5px;\n            }\n        }\n\n        @media (max-width: 480px) {\n            .wheel-main-container {\n                padding: 10px;\n            }\n            \n            .wheel-container {\n                max-width: 280px;\n            }\n            \n            #resultBox {\n                height: 90px;\n            }\n            \n            #result {\n                padding: 12px 15px;\n            }\n            \n            #ctaBox {\n                padding: 12px;\n            }\n        }\n\n        @media (max-width: 360px) {\n            .wheel-container {\n                max-width: 250px;\n            }\n            \n            #resultBox {\n                height: 80px;\n            }\n        }\n    <\/style>\n<\/head>\n<body>\n    <div class=\"wheel-main-container\">\n        <div class=\"wheel-section\">\n            <div class=\"wheel-container\">\n                <canvas id=\"wheel\"><\/canvas>\n                <div class=\"wheel-pointer\">\n                    <svg width=\"30\" height=\"30\" viewBox=\"0 0 30 30\">\n                        <polygon points=\"15,3 27,27 3,27\" style=\"fill:#2d3436; stroke:#fff; stroke-width:2;\" \/>\n                    <\/svg>\n                <\/div>\n                <div class=\"sparkles\" id=\"sparkles\"><\/div>\n            <\/div>\n\n            <div class=\"controls-section\">\n                <div class=\"power-control\">\n                    <label for=\"powerSlider\">\ud83c\udf9a\ufe0f Escolha a for\u00e7a do giro (1\u201310):<\/label>\n                    <input type=\"range\" min=\"1\" max=\"10\" value=\"5\" id=\"powerSlider\">\n                    <div class=\"power-labels\">\n                        <span>Suave<\/span>\n                        <span>Intenso<\/span>\n                    <\/div>\n                <\/div>\n\n                <button id=\"spinBtn\">\ud83c\udfaf TENTE A SORTE<\/button>\n            <\/div>\n\n            <div id=\"resultBox\">\n                <p id=\"result\"><\/p>\n            <\/div>\n\n            <div id=\"ctaBox\">\n                <p>\n                    \ud83d\ude22 <strong>N\u00e3o foi desta vez&#8230;<\/strong><br>\n                    Mas nossos <strong>anunciantes<\/strong> oferecem <strong>brindes incr\u00edveis<\/strong> e <strong>pr\u00eamios em dinheiro<\/strong> de at\u00e9 <span style=\"color:#ffd700; font-weight:bold;\">R$1.000,00<\/span> \ud83d\udcb0 que sorteamos para nossa comunidade no WhatsApp e Facebook!\n                <\/p>\n                <a href=\"https:\/\/seulinkdowa.me\" target=\"_blank\" rel=\"noopener\">\n                    \ud83d\udc49 Participar da Comunidade no WhatsApp\n                <\/a>\n            <\/div>\n        <\/div>\n    <\/div>\n\n    <script>\n        document.addEventListener('DOMContentLoaded', function() {\n            const roletaID = \"54\";\n            const canvas = document.getElementById(\"wheel\");\n            const ctx = canvas.getContext(\"2d\");\n            const powerSlider = document.getElementById(\"powerSlider\");\n            const spinBtn = document.getElementById(\"spinBtn\");\n            const resultBox = document.getElementById(\"resultBox\");\n            const result = document.getElementById(\"result\");\n            const ctaBox = document.getElementById(\"ctaBox\");\n            const sparkles = document.getElementById(\"sparkles\");\n            \n            let userIP = null;\n            let hasSpun = false;\n            let finalResult = null;\n            let originalButtonText = \"\ud83c\udfaf TENTE A SORTE\";\n            let spinning = false;\n            let wheelLocked = false;\n            \n            \/\/ ========== SISTEMA ULTRA-SEGURO - CONTROLE DE POSI\u00c7\u00d5ES ==========\n            \n            const wheelPrizes = [\n                \"\ud83d\ude22 Tente novamente\",    \/\/ 0 - SEGURO\n                \"\ud83c\udf81 Mixer\",              \/\/ 1 - PERIGOSO\n                \"\ud83d\ude43 Outra vez n\u00e3o foi\",  \/\/ 2 - SEGURO\n                \"\ud83c\udf77 Jogo de Copos\",      \/\/ 3 - PERIGOSO\n                \"\ud83d\ude1e N\u00e3o ganhou\",         \/\/ 4 - SEGURO\n                \"\ud83e\uddc1 Batedeira\",          \/\/ 5 - PERIGOSO\n                \"\ud83d\ude22 Mais sorte depois\",  \/\/ 6 - SEGURO\n                \"\ud83c\udf74 Talheres\",           \/\/ 7 - PERIGOSO\n                \"\ud83d\ude43 N\u00e3o foi agora\",      \/\/ 8 - SEGURO\n                \"\ud83e\uded7 Copos\",              \/\/ 9 - PERIGOSO\n                \"\ud83d\ude1e Que pena\",           \/\/ 10 - SEGURO\n                \"\ud83d\udd01 Tente mais tarde\",   \/\/ 11 - SEGURO\n                \"\ud83d\ude45\u2642\ufe0f Nada ainda\",        \/\/ 12 - SEGURO\n                \"\ud83d\udcb8 PIX R$1000\",         \/\/ 13 - PERIGOSO\n                \"\ud83d\ude22 Pr\u00f3xima vez\",        \/\/ 14 - SEGURO\n                \"\ud83d\ude43 Sem sorte ainda\",    \/\/ 15 - SEGURO\n                \"\ud83d\udd01 Tente depois\",       \/\/ 16 - SEGURO\n                \"\ud83e\uddc1 Batedeira\",          \/\/ 17 - PERIGOSO\n                \"\ud83d\ude22 Quase l\u00e1\",           \/\/ 18 - SEGURO\n                \"\ud83c\udf81 Mixer\"               \/\/ 19 - PERIGOSO\n            ];\n\n            \/\/ MAPEAMENTO DE POSI\u00c7\u00d5ES SEGURAS (\u00cdNDICES DAS FATIAS SEGURAS)\n            const SAFE_SLICE_INDICES = [0, 2, 4, 6, 8, 10, 11, 12, 14, 15, 16, 18];\n            \n            \/\/ SISTEMA DE CONTROLE DE POSI\u00c7\u00d5ES (ALTERN\u00c2NCIA INTELIGENTE)\n            const slices = wheelPrizes.length;\n            const sliceAngle = 360 \/ slices; \/\/ 18 graus por fatia\n            \n            \/\/ Fun\u00e7\u00e3o para obter TODAS as posi\u00e7\u00f5es seguras poss\u00edveis\n            function getAllSafePositions() {\n                return SAFE_SLICE_INDICES.map(index => {\n                    \/\/ Centro da fatia = \u00edndice * \u00e2ngulo por fatia + metade do \u00e2ngulo\n                    return (index * sliceAngle) + (sliceAngle \/ 2);\n                });\n            }\n            \n            \/\/ Fun\u00e7\u00e3o para obter pr\u00f3xima posi\u00e7\u00e3o segura alternada\n            function getNextSafePosition() {\n                const allSafePositions = getAllSafePositions();\n                const key = `lastSafePosition_${roletaID}`;\n                const lastPosition = parseInt(localStorage.getItem(key) || \"-1\");\n                \n                \/\/ Encontrar pr\u00f3xima posi\u00e7\u00e3o diferente da \u00faltima\n                let nextPosition;\n                do {\n                    nextPosition = allSafePositions[Math.floor(Math.random() * allSafePositions.length)];\n                } while (nextPosition === lastPosition && allSafePositions.length > 1);\n                \n                \/\/ Salvar para pr\u00f3xima altern\u00e2ncia\n                localStorage.setItem(key, nextPosition.toString());\n                \n                console.log(\"\ud83d\udd04 POSI\u00c7\u00c3O ANTERIOR:\", lastPosition);\n                console.log(\"\ud83c\udfaf NOVA POSI\u00c7\u00c3O SEGURA:\", nextPosition);\n                \n                return nextPosition;\n            }\n            \n            \/\/ Fun\u00e7\u00e3o para obter posi\u00e7\u00e3o inicial SEMPRE segura\n            function getInitialSafePosition() {\n                const allSafePositions = getAllSafePositions();\n                \/\/ Sempre come\u00e7ar com a primeira posi\u00e7\u00e3o segura (\u00edndice 0)\n                const safePosition = allSafePositions[0]; \/\/ Posi\u00e7\u00e3o do \u00edndice 0 (primeira fatia segura)\n                \n                console.log(\"\ud83c\udfaf POSI\u00c7\u00c3O INICIAL SEGURA GARANTIDA:\", safePosition);\n                console.log(\"\ud83c\udfaf FATIA CORRESPONDENTE:\", wheelPrizes[0]);\n                \n                return safePosition;\n            }\n            \n            \/\/ Resultados que sempre aparecer\u00e3o (SEMPRE NEGATIVOS)\n            const GUARANTEED_LOSING_RESULTS = [\n                \"\ud83d\ude22 N\u00e3o foi desta vez...\",\n                \"\ud83d\ude43 Tente outra vez!\",\n                \"\ud83d\ude1e Que pena, n\u00e3o foi agora\",\n                \"\ud83d\udd01 Mais sorte da pr\u00f3xima vez\",\n                \"\ud83d\ude22 Quase l\u00e1! Tente novamente\",\n                \"\ud83d\ude45\u2642\ufe0f Nada ainda, mas n\u00e3o desista\",\n                \"\ud83d\udd04 Pr\u00f3xima tentativa ser\u00e1 melhor\",\n                \"\ud83d\ude14 N\u00e3o foi agora, continue tentando\",\n                \"\ud83c\udfaf Mire melhor na pr\u00f3xima vez\",\n                \"\ud83e\udd1e Tor\u00e7a para ter mais sorte\"\n            ];\n\n            const colors = wheelPrizes.map((p, i) => {\n                const lowerText = p.toLowerCase();\n                if (lowerText.includes(\"pix\")) {\n                    return \"#FFD700\";\n                } else if (lowerText.includes(\"\ud83d\ude22\") || lowerText.includes(\"\ud83d\ude1e\") || lowerText.includes(\"\ud83d\ude43\") || lowerText.includes(\"\ud83d\udd01\") || lowerText.includes(\"\ud83d\ude45\u2642\ufe0f\")) {\n                    return \"#FF6B6B\";\n                } else {\n                    return i % 2 === 0 ? \"#4ECDC4\" : \"#45B7D1\";\n                }\n            });\n\n            \/\/ Controle de rota\u00e7\u00e3o\n            let currentRotation = 0;\n            \n            function setupCanvas() {\n                const container = canvas.parentElement;\n                const containerWidth = container.offsetWidth || 300;\n                const containerHeight = container.offsetHeight || 300;\n                const size = Math.min(containerWidth, containerHeight);\n                const dpr = window.devicePixelRatio || 1;\n                \n                const finalSize = Math.max(size, 200);\n                \n                canvas.width = finalSize * dpr;\n                canvas.height = finalSize * dpr;\n                canvas.style.width = finalSize + \"px\";\n                canvas.style.height = finalSize + \"px\";\n                \n                ctx.scale(dpr, dpr);\n                \n                return finalSize;\n            }\n\n            function drawWheel(rotationDegrees = 0) {\n                const size = setupCanvas();\n                const centerX = size \/ 2;\n                const centerY = size \/ 2;\n                const radius = Math.max(size \/ 2 - 10, 50);\n                \n                ctx.clearRect(0, 0, canvas.width, canvas.height);\n                ctx.save();\n                ctx.translate(centerX, centerY);\n                ctx.rotate((rotationDegrees * Math.PI) \/ 180);\n                \n                for (let i = 0; i < slices; i++) {\n                    const startAngle = (i * sliceAngle * Math.PI) \/ 180;\n                    const endAngle = ((i + 1) * sliceAngle * Math.PI) \/ 180;\n                    \n                    ctx.beginPath();\n                    ctx.moveTo(0, 0);\n                    ctx.arc(0, 0, radius, startAngle, endAngle);\n                    ctx.fillStyle = colors[i];\n                    ctx.fill();\n                    \n                    ctx.strokeStyle = \"#ffffff\";\n                    ctx.lineWidth = 2;\n                    ctx.stroke();\n                    \n                    ctx.save();\n                    ctx.rotate(startAngle + (sliceAngle * Math.PI) \/ 360);\n                    ctx.fillStyle = \"#000\";\n                    ctx.font = `bold ${Math.max(10, size * 0.028)}px sans-serif`;\n                    ctx.textAlign = \"right\";\n                    ctx.textBaseline = \"middle\";\n                    ctx.fillText(wheelPrizes[i], radius - 10, 0);\n                    ctx.restore();\n                }\n                \n                ctx.beginPath();\n                ctx.arc(0, 0, Math.max(15, size * 0.04), 0, 2 * Math.PI);\n                ctx.fillStyle = \"#2d3436\";\n                ctx.fill();\n                ctx.strokeStyle = \"#ffffff\";\n                ctx.lineWidth = 3;\n                ctx.stroke();\n                \n                ctx.restore();\n            }\n\n            function createSparkles() {\n                if (wheelLocked) return;\n                \n                sparkles.innerHTML = '';\n                for (let i = 0; i < 12; i++) {\n                    const sparkle = document.createElement(\"div\");\n                    sparkle.className = \"sparkle\";\n                    sparkle.style.left = Math.random() * 100 + \"%\";\n                    sparkle.style.top = Math.random() * 100 + \"%\";\n                    sparkle.style.animationDelay = Math.random() * 2 + \"s\";\n                    sparkles.appendChild(sparkle);\n                }\n            }\n\n            function removeSparkles() {\n                sparkles.innerHTML = '';\n            }\n\n            function createConfetti() {\n                const colors = [\"#ff6b6b\", \"#4ecdc4\", \"#45b7d1\", \"#96ceb4\", \"#ffeaa7\", \"#fd79a8\"];\n                \n                for (let i = 0; i < 50; i++) {\n                    const confetti = document.createElement(\"div\");\n                    confetti.className = \"confetti\";\n                    confetti.style.left = Math.random() * 100 + \"%\";\n                    confetti.style.backgroundColor = colors[Math.floor(Math.random() * colors.length)];\n                    confetti.style.animationDelay = Math.random() * 0.5 + \"s\";\n                    confetti.style.animationDuration = (Math.random() * 2 + 2) + \"s\";\n                    \n                    document.body.appendChild(confetti);\n                    \n                    setTimeout(() => {\n                        confetti.remove();\n                    }, 4000);\n                }\n            }\n\n            function easeOut(t) {\n                return 1 - Math.pow(1 - t, 3);\n            }\n\n            function lockWheel() {\n                wheelLocked = true;\n                removeSparkles();\n            }\n\n            async function getUserIP() {\n                if (userIP) return userIP;\n                \n                try {\n                    const response = await fetch('https:\/\/api.ipify.org?format=json');\n                    const data = await response.json();\n                    userIP = data.ip;\n                    return userIP;\n                } catch (error) {\n                    userIP = 'fallback_' + Date.now();\n                    return userIP;\n                }\n            }\n\n            function hasUserSpunToday() {\n                const ip = userIP || 'unknown';\n                const today = new Date().toDateString();\n                const spinKey = `spin_${roletaID}_${ip}_${today}`;\n                const storedData = localStorage.getItem(spinKey);\n                \n                if (storedData) {\n                    const parsed = JSON.parse(storedData);\n                    hasSpun = true;\n                    finalResult = parsed.result;\n                    return true;\n                }\n                return false;\n            }\n\n            function saveUserSpinToday(resultText) {\n                const ip = userIP || 'unknown';\n                const today = new Date().toDateString();\n                const spinKey = `spin_${roletaID}_${ip}_${today}`;\n                const data = {\n                    result: resultText,\n                    timestamp: Date.now()\n                };\n                localStorage.setItem(spinKey, JSON.stringify(data));\n            }\n\n            function showExistingResult() {\n                if (finalResult && hasSpun) {\n                    lockWheel();\n                    \n                    result.innerHTML = `\ud83c\udf89 <strong>${finalResult}<\/strong>`;\n                    result.classList.add(\"show\");\n                    \n                    ctaBox.style.display = \"block\";\n                    ctaBox.classList.add(\"show\");\n                    \n                    return true;\n                }\n                return false;\n            }\n\n            function showAlreadySpunMessage() {\n                spinBtn.innerHTML = \"\u23f0 Voc\u00ea j\u00e1 girou esta roleta hoje!\";\n                spinBtn.disabled = true;\n                spinBtn.style.background = \"linear-gradient(135deg, #6c757d 0%, #495057 100%)\";\n                \n                setTimeout(() => {\n                    spinBtn.innerHTML = originalButtonText;\n                    spinBtn.disabled = false;\n                    spinBtn.style.background = \"linear-gradient(135deg, #28a745 0%, #20c997 100%)\";\n                }, 3000);\n            }\n\n            \/\/ ========== SISTEMA BLINDADO - POSI\u00c7\u00d5ES ALTERNADAS ==========\n            function rotateWheel() {\n                if (hasSpun) {\n                    showAlreadySpunMessage();\n                    return;\n                }\n                \n                if (spinning || wheelLocked) return;\n\n                console.log(\"\ud83d\udd12 SISTEMA BLINDADO - POSI\u00c7\u00d5ES ALTERNADAS\");\n                \n                spinning = true;\n                lockWheel();\n                \n                result.classList.remove(\"show\");\n                ctaBox.style.display = \"none\";\n                ctaBox.classList.remove(\"show\");\n                \n                spinBtn.disabled = true;\n                spinBtn.innerHTML = \"\ud83c\udfaf GIRANDO...\";\n                canvas.style.filter = \"brightness(1.2)\";\n\n                \/\/ ETAPA 1: ESCOLHER PR\u00d3XIMA POSI\u00c7\u00c3O SEGURA ALTERNADA\n                const safePosition = getNextSafePosition();\n                const chosenResult = GUARANTEED_LOSING_RESULTS[Math.floor(Math.random() * GUARANTEED_LOSING_RESULTS.length)];\n                \n                console.log(\"\u2705 POSI\u00c7\u00c3O SEGURA ALTERNADA:\", safePosition);\n                console.log(\"\u2705 RESULTADO PERDEDOR:\", chosenResult);\n\n                const power = parseInt(powerSlider.value);\n                const duration = 2500 + (power * 300);\n                \n                \/\/ ETAPA 2: CALCULAR ANIMA\u00c7\u00c3O PARA POSI\u00c7\u00c3O ALTERNADA\n                let animationStart = null;\n                const startRotation = currentRotation;\n                \n                \/\/ Adicionar voltas extras baseadas na for\u00e7a\n                const extraRotations = 3 + (power * 0.6);\n                \n                \/\/ Calcular rota\u00e7\u00e3o final que pare no centro da fatia segura\n                let finalRotation = safePosition;\n                \n                \/\/ Adicionar rota\u00e7\u00f5es extras mantendo a posi\u00e7\u00e3o final\n                while (finalRotation < startRotation + (extraRotations * 360)) {\n                    finalRotation += 360;\n                }\n                \n                console.log(\"\ud83c\udfaf ROTA\u00c7\u00c3O INICIAL:\", startRotation);\n                console.log(\"\ud83c\udfaf ROTA\u00c7\u00c3O FINAL:\", finalRotation);\n                console.log(\"\ud83c\udfaf POSI\u00c7\u00c3O FINAL NORMALIZADA:\", finalRotation % 360);\n                \n                function animate(timestamp) {\n                    if (!animationStart) animationStart = timestamp;\n                    const progress = timestamp - animationStart;\n                    const t = Math.min(progress \/ duration, 1);\n                    \n                    const easedProgress = easeOut(t);\n                    currentRotation = startRotation + (finalRotation - startRotation) * easedProgress;\n                    \n                    drawWheel(currentRotation);\n                    \n                    if (t < 1) {\n                        requestAnimationFrame(animate);\n                    } else {\n                        \/\/ ETAPA 3: GARANTIR POSI\u00c7\u00c3O FINAL EXATA\n                        currentRotation = finalRotation;\n                        drawWheel(currentRotation);\n                        \n                        console.log(\"\ud83c\udfaf POSI\u00c7\u00c3O FINAL GARANTIDA:\", currentRotation % 360);\n                        \n                        \/\/ ETAPA 4: FINALIZAR\n                        canvas.style.filter = \"brightness(1)\";\n                        createConfetti();\n                        \n                        setTimeout(() => {\n                            result.innerHTML = `\ud83c\udf89 <strong>${chosenResult}<\/strong>`;\n                            result.classList.add(\"show\");\n                            \n                            setTimeout(() => {\n                                ctaBox.style.display = \"block\";\n                                ctaBox.classList.add(\"show\");\n                            }, 300);\n                            \n                        }, 800);\n                        \n                        hasSpun = true;\n                        finalResult = chosenResult;\n                        saveUserSpinToday(chosenResult);\n                        \n                        spinning = false;\n                        spinBtn.disabled = false;\n                        spinBtn.innerHTML = originalButtonText;\n                    }\n                }\n                \n                requestAnimationFrame(animate);\n            }\n\n            spinBtn.addEventListener(\"click\", rotateWheel);\n\n            window.addEventListener(\"resize\", () => {\n                if (!spinning && !wheelLocked) {\n                    setTimeout(() => {\n                        drawWheel(currentRotation);\n                    }, 100);\n                }\n            });\n\n            async function initializeWheel() {\n                await getUserIP();\n                \n                if (hasUserSpunToday()) {\n                    showExistingResult();\n                } else {\n                    \/\/ Inicializar SEMPRE em posi\u00e7\u00e3o segura fixa\n                    const initialPosition = getInitialSafePosition();\n                    currentRotation = initialPosition;\n                    console.log(\"\ud83c\udfaf POSI\u00c7\u00c3O INICIAL SEGURA:\", initialPosition);\n                    drawWheel(currentRotation);\n                    createSparkles();\n                }\n            }\n            \n            initializeWheel();\n        });\n    <\/script>\n<\/body>\n<\/html>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>S\u00f3 pode girar 1 vez. Roleta Segura \ud83c\udf9a\ufe0f Escolha a for\u00e7a do giro (1\u201310): Suave Intenso \ud83c\udfaf TENTE A SORTE \ud83d\ude22 N\u00e3o foi desta vez&#8230; Mas nossos anunciantes oferecem brindes incr\u00edveis e pr\u00eamios em dinheiro de at\u00e9 R$1.000,00 \ud83d\udcb0 que sorteamos para nossa comunidade no WhatsApp e Facebook! \ud83d\udc49 Participar da Comunidade no WhatsApp<\/p>","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_breakdance_hide_in_design_set":false,"_breakdance_tags":"","footnotes":""},"categories":[1],"tags":[],"class_list":["post-1259","post","type-post","status-publish","format-standard","hentry","category-autoajuda"],"meta_box":[],"_links":{"self":[{"href":"https:\/\/enricando.com.br\/en\/wp-json\/wp\/v2\/posts\/1259","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/enricando.com.br\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/enricando.com.br\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/enricando.com.br\/en\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/enricando.com.br\/en\/wp-json\/wp\/v2\/comments?post=1259"}],"version-history":[{"count":15,"href":"https:\/\/enricando.com.br\/en\/wp-json\/wp\/v2\/posts\/1259\/revisions"}],"predecessor-version":[{"id":1279,"href":"https:\/\/enricando.com.br\/en\/wp-json\/wp\/v2\/posts\/1259\/revisions\/1279"}],"wp:attachment":[{"href":"https:\/\/enricando.com.br\/en\/wp-json\/wp\/v2\/media?parent=1259"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/enricando.com.br\/en\/wp-json\/wp\/v2\/categories?post=1259"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/enricando.com.br\/en\/wp-json\/wp\/v2\/tags?post=1259"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}