{"id":2657,"date":"2026-06-22T18:30:07","date_gmt":"2026-06-22T18:30:07","guid":{"rendered":"https:\/\/app.digitalfreelancer.org\/?page_id=2657"},"modified":"2026-07-15T19:08:33","modified_gmt":"2026-07-15T19:08:33","slug":"dashboard-buzio","status":"publish","type":"page","link":"https:\/\/app.digitalfreelancer.org\/index.php\/dashboard-buzio\/","title":{"rendered":"Dashboard Buzio"},"content":{"rendered":"<p class=\"attachment\"><a href='https:\/\/app.digitalfreelancer.org\/wp-content\/uploads\/2026\/07\/buxio-full.png'><img decoding=\"async\" width=\"300\" height=\"160\" src=\"https:\/\/app.digitalfreelancer.org\/wp-content\/uploads\/2026\/07\/buxio-full-300x160.png\" class=\"attachment-medium size-medium\" alt=\"\" srcset=\"https:\/\/app.digitalfreelancer.org\/wp-content\/uploads\/2026\/07\/buxio-full-300x160.png 300w, https:\/\/app.digitalfreelancer.org\/wp-content\/uploads\/2026\/07\/buxio-full-1024x547.png 1024w, https:\/\/app.digitalfreelancer.org\/wp-content\/uploads\/2026\/07\/buxio-full-768x410.png 768w, https:\/\/app.digitalfreelancer.org\/wp-content\/uploads\/2026\/07\/buxio-full.png 1195w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"2657\" class=\"elementor elementor-2657\">\n\t\t\t\t<div class=\"elementor-element elementor-element-d240d8c e-flex e-con-boxed wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no e-con e-parent\" data-id=\"d240d8c\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-17e45bc e-con-full e-flex wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no e-con e-child\" data-id=\"17e45bc\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-cc655c5 elementor-widget elementor-widget-shortcode\" data-id=\"cc655c5\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\">\n    <div class=\"buzios-container\">\n\n        <div class=\"buzios-effects\"><\/div>\n        <div class=\"buzios-effects-top\"><\/div>\n\n        <img decoding=\"async\" src=\"https:\/\/app.digitalfreelancer.org\/wp-content\/uploads\/2026\/07\/buxio-full.png\" class=\"buzios-img\" \/>\n\n        <div class=\"buzios-overlay\">\n            <button class=\"buzios-close\">\u2715<\/button>\n\n            <div class=\"buzios-content\">\n                            <style>\n            .tbd-wrapper {\n                --bg:#100a18;\n                --bg-radial: radial-gradient(circle at 20% 15%, rgba(155,110,220,0.18), transparent 45%),\n                             radial-gradient(circle at 85% 85%, rgba(214,168,92,0.12), transparent 40%);\n                --panel:#1c1428;\n                --panel-2:#221933;\n                --gold:#d6a85c;\n                --gold-soft:#e9dcc3;\n                --violet:#8b5fc9;\n                --text:#f3eef7;\n                --muted:#b3a6cf;\n                --danger:#c96a6a;\n                font-family: 'Segoe UI', system-ui, -apple-system, sans-serif;\n                background: var(--bg-radial), var(--bg);\n                color: var(--text);\n                padding: 26px;\n                border-radius: 16px;\n                position: relative;\n                box-shadow: 0 20px 60px rgba(0,0,0,0.45);\n                overflow: hidden;\n            }\n\n            .tbd-wrapper::before {\n                content:\"\";\n                position:absolute;\n                inset:0;\n                background-image:\n                    radial-gradient(1px 1px at 10% 20%, rgba(255,255,255,0.5) 50%, transparent 100%),\n                    radial-gradient(1px 1px at 80% 10%, rgba(255,255,255,0.4) 50%, transparent 100%),\n                    radial-gradient(1px 1px at 60% 70%, rgba(255,255,255,0.3) 50%, transparent 100%),\n                    radial-gradient(1px 1px at 30% 85%, rgba(255,255,255,0.35) 50%, transparent 100%);\n                pointer-events:none;\n                opacity:0.6;\n            }\n\n            .tbd-wrapper * { box-sizing: border-box; }\n\n            .tbd-header { position:relative; z-index:1; }\n\n            .tbd-header h1 {\n                margin:0;\n                font-size:28px;\n                color: var(--gold);\n                letter-spacing:1px;\n                font-family: Georgia, 'Times New Roman', serif;\n            }\n\n            .tbd-sub {\n                color: var(--muted);\n                margin-top:6px;\n                font-size:14.5px;\n            }\n\n            .tbd-daily {\n                margin-top:16px;\n                padding:12px 16px;\n                background: linear-gradient(90deg, rgba(214,168,92,0.12), rgba(139,95,201,0.10));\n                border:1px solid rgba(214,168,92,0.3);\n                border-radius:10px;\n                font-size:13.5px;\n                color: var(--gold-soft);\n                position:relative;\n                z-index:1;\n            }\n\n            .tbd-grid {\n                display:grid;\n                grid-template-columns: 1fr 320px;\n                gap:20px;\n                margin-top:22px;\n                position:relative;\n                z-index:1;\n            }\n\n            .tbd-card {\n                background: var(--panel);\n                border:1px solid rgba(214,168,92,0.25);\n                border-radius:14px;\n                padding:20px;\n                text-align:center;\n                position:relative;\n                overflow:hidden;\n                transition: border-color 0.25s ease, transform 0.25s ease;\n            }\n\n            .tbd-card:hover {\n                border-color: rgba(214,168,92,0.5);\n                transform: translateY(-2px);\n            }\n\n            .tbd-card h3 {\n                margin:0 0 4px;\n                font-size:17px;\n                color: var(--text);\n            }\n\n            .tbd-card p {\n                margin:0;\n                color: var(--muted);\n                font-size:13.5px;\n            }\n\n            .tbd-shells {\n                display:flex;\n                flex-wrap:wrap;\n                justify-content:center;\n                gap:8px;\n                margin:18px 0;\n                min-height:44px;\n            }\n\n            .tbd-shell {\n                width:26px;\n                height:40px;\n                border-radius:50% 50% 60% 60%;\n                background: linear-gradient(160deg,#e9dcc3,#c9b389);\n                border:1px solid #8a6a3a;\n                box-shadow:0 4px 10px rgba(0,0,0,0.4);\n                transition: transform 0.4s ease, background 0.4s ease, border-color 0.4s ease;\n                transform: rotate(20deg);\n            }\n\n            .tbd-shell.tbd-closed {\n                background: linear-gradient(160deg,#2a1f47,#150e24);\n                border:1px solid var(--gold);\n                transform: rotate(-10deg);\n            }\n\n            .tbd-shell.tbd-casting {\n                animation: tbd-shake 0.09s linear infinite;\n            }\n\n            @keyframes tbd-shake {\n                0%   { transform: rotate(20deg) translateY(0); }\n                25%  { transform: rotate(-15deg) translateY(-3px); }\n                50%  { transform: rotate(10deg) translateY(2px); }\n                75%  { transform: rotate(-8deg) translateY(-2px); }\n                100% { transform: rotate(20deg) translateY(0); }\n            }\n\n            .tbd-btn {\n                background: linear-gradient(135deg,#6b3fa0,#4a2a78);\n                border:none;\n                color:#fff;\n                padding:11px 18px;\n                border-radius:10px;\n                cursor:pointer;\n                font-weight:600;\n                font-size:14px;\n                transition: transform 0.15s ease, box-shadow 0.15s ease, opacity 0.15s ease;\n                box-shadow: 0 6px 16px rgba(107,63,160,0.35);\n            }\n\n            .tbd-btn:hover:not(:disabled) { transform: translateY(-1px); box-shadow: 0 8px 20px rgba(107,63,160,0.5); }\n            .tbd-btn:disabled { opacity:0.55; cursor:not-allowed; transform:none; }\n\n            .tbd-btn.tbd-ghost {\n                background: transparent;\n                border:1px solid rgba(214,168,92,0.4);\n                color: var(--gold-soft);\n                box-shadow:none;\n            }\n\n            .tbd-btn.tbd-danger {\n                background: transparent;\n                border:1px solid rgba(201,106,106,0.5);\n                color: var(--danger);\n                box-shadow:none;\n            }\n\n            .tbd-sidebar {\n                background: var(--panel);\n                border:1px solid rgba(214,168,92,0.25);\n                border-radius:14px;\n                padding:18px;\n                display:flex;\n                flex-direction:column;\n            }\n\n            .tbd-sidebar h3 {\n                margin:0 0 4px;\n                font-size:16px;\n                color: var(--gold-soft);\n            }\n\n            .tbd-sidebar-note {\n                color: var(--muted);\n                font-size:12px;\n                margin-bottom:10px;\n            }\n\n            .tbd-history-list {\n                flex:1;\n                max-height:340px;\n                overflow-y:auto;\n                margin-bottom:10px;\n            }\n\n            .tbd-history-item {\n                padding:10px 0;\n                border-bottom:1px solid rgba(255,255,255,0.08);\n            }\n\n            .tbd-history-item:last-child { border-bottom:none; }\n\n            .tbd-history-item strong { display:block; font-size:14px; }\n            .tbd-history-item small { color: var(--muted); font-size:11.5px; }\n\n            .tbd-empty {\n                color: var(--muted);\n                font-size:13px;\n                text-align:center;\n                padding:20px 6px;\n            }\n\n            .tbd-modal {\n                position:fixed;\n                inset:0;\n                background:rgba(6,3,12,0.8);\n                display:flex;\n                align-items:center;\n                justify-content:center;\n                z-index:99999;\n                padding:16px;\n                animation: tbd-fade-in 0.2s ease;\n            }\n\n            @keyframes tbd-fade-in { from { opacity:0; } to { opacity:1; } }\n\n            .tbd-box {\n                background: linear-gradient(160deg, var(--panel-2), var(--panel));\n                border:1px solid rgba(214,168,92,0.35);\n                padding:26px;\n                border-radius:16px;\n                max-width:460px;\n                width:100%;\n                text-align:center;\n                animation: tbd-pop 0.25s ease;\n                max-height: 88vh;\n                overflow-y:auto;\n            }\n\n            @keyframes tbd-pop {\n                from { transform: scale(0.92); opacity:0; }\n                to   { transform: scale(1); opacity:1; }\n            }\n\n            .tbd-glow {\n                font-size:13px;\n                letter-spacing:1.5px;\n                text-transform:uppercase;\n                color: var(--muted);\n                margin-bottom:6px;\n            }\n\n            .tbd-tier-label {\n                font-size:22px;\n                font-family: Georgia, serif;\n                margin:4px 0 2px;\n            }\n\n            .tbd-tier-desc {\n                color: var(--muted);\n                font-size:13.5px;\n                margin-bottom:14px;\n            }\n\n            .tbd-count {\n                font-size:12px;\n                color: var(--muted);\n                margin-bottom:16px;\n            }\n\n            .tbd-sign-box {\n                background: rgba(255,255,255,0.04);\n                border:1px solid rgba(214,168,92,0.2);\n                border-radius:10px;\n                padding:12px 14px;\n                margin-bottom:18px;\n                text-align:left;\n            }\n\n            .tbd-sign-box strong {\n                color: var(--gold);\n                display:block;\n                margin-bottom:3px;\n                font-size:14px;\n            }\n\n            .tbd-sign-box span {\n                color: var(--muted);\n                font-size:13px;\n            }\n\n            .tbd-actions {\n                display:flex;\n                flex-wrap:wrap;\n                gap:8px;\n                justify-content:center;\n            }\n\n            .tbd-toast {\n                position:fixed;\n                bottom:22px;\n                left:50%;\n                transform:translateX(-50%);\n                background: var(--violet);\n                color:#fff;\n                padding:9px 16px;\n                border-radius:8px;\n                font-size:13px;\n                z-index:100000;\n                opacity:0;\n                transition: opacity 0.25s ease;\n                pointer-events:none;\n            }\n\n            .tbd-toast.tbd-show { opacity:1; }\n\n            @media (max-width: 780px) {\n                .tbd-grid { grid-template-columns: 1fr; }\n            }\n            <\/style>\n            \n        <div class=\"tbd-wrapper\" id=\"tbd-810c8740-5ccb-45c3-84db-a6d71f9c05b2\" data-logged-in=\"0\">\n\n            <div class=\"tbd-header\">\n                <h1>\ud83d\udd2e Jogo de B\u00fazios<\/h1>\n                <div class=\"tbd-sub\">Bem-vindo, Buscador \u2014 18 de July de 2026. Interpreta os sinais do destino.<\/div>\n                <div class=\"tbd-daily\" data-tbd-daily>A carregar a mensagem do dia\u2026<\/div>\n            <\/div>\n\n            <div class=\"tbd-grid\">\n\n                <div>\n                    <div class=\"tbd-card\">\n                        <h3>Consulta Simples<\/h3>\n                        <p>Uma leitura direta e r\u00e1pida dos b\u00fazios.<\/p>\n                        <div class=\"tbd-shells\" data-shell-container><\/div>\n                        <button class=\"tbd-btn\" type=\"button\" data-buzio=\"4\">Abrir B\u00fazios<\/button>\n                    <\/div>\n\n                    <div class=\"tbd-card\" style=\"margin-top:16px;\">\n                        <h3>Leitura Profunda<\/h3>\n                        <p>Fluxos espirituais e caminhos de destino.<\/p>\n                        <div class=\"tbd-shells\" data-shell-container><\/div>\n                        <button class=\"tbd-btn\" type=\"button\" data-buzio=\"8\">Consultar Destino<\/button>\n                    <\/div>\n\n                    <div class=\"tbd-card\" style=\"margin-top:16px;\">\n                        <h3>Jogo Completo (Merindilogun)<\/h3>\n                        <p>A tiragem tradicional de 16 b\u00fazios \u2014 mensagem ancestral completa.<\/p>\n                        <div class=\"tbd-shells\" data-shell-container><\/div>\n                        <button class=\"tbd-btn\" type=\"button\" data-buzio=\"16\">Revelar Caminho<\/button>\n                    <\/div>\n                <\/div>\n\n                <aside class=\"tbd-sidebar\">\n                    <h3>Hist\u00f3rico Espiritual<\/h3>\n                    <div class=\"tbd-sidebar-note\">\n                        Guardado apenas neste dispositivo.                    <\/div>\n                    <div class=\"tbd-history-list\" data-history-list aria-live=\"polite\"><\/div>\n                    <button class=\"tbd-btn tbd-danger\" type=\"button\" data-reset-history>Limpar Hist\u00f3rico<\/button>\n                <\/aside>\n\n            <\/div>\n        <\/div>\n\n        <div class=\"tbd-toast\" data-tbd-toast role=\"status\"><\/div>\n\n        <script>\n        (function(){\n\n            const wrapper   = document.getElementById(\"tbd-810c8740-5ccb-45c3-84db-a6d71f9c05b2\");\n            if (!wrapper) return;\n\n            const tiers      = {\"aberto_total\":{\"label\":\"Aberto Total\",\"desc\":\"Caminhos livres, energia fluida e respostas positivas.\",\"min_ratio\":0.8,\"color\":\"#e7c66b\"},\"quase_aberto\":{\"label\":\"Quase Aberto\",\"desc\":\"Movimento em curso, mas ainda inst\\u00e1vel.\",\"min_ratio\":0.6,\"color\":\"#cbb0e8\"},\"equilibrado\":{\"label\":\"Equilibrado\",\"desc\":\"Neutralidade espiritual. A decis\\u00e3o depende da tua a\\u00e7\\u00e3o pessoal.\",\"min_ratio\":0.4,\"color\":\"#9fd6c9\"},\"fechado_leve\":{\"label\":\"Fechado Leve\",\"desc\":\"Bloqueios pequenos, mas revers\\u00edveis.\",\"min_ratio\":0.2,\"color\":\"#e2a37a\"},\"fechado_total\":{\"label\":\"Fechado Total\",\"desc\":\"Energia travada, h\\u00e1 necessidade de limpeza espiritual.\",\"min_ratio\":0,\"color\":\"#c96a6a\"}};\n            const signs      = {\"Sinal de Ori\":\"Alinhamento com o teu destino e prote\\u00e7\\u00e3o superior.\",\"Caminho Cruzado\":\"Escolhas importantes e uma bifurca\\u00e7\\u00e3o de destino \\u00e0 frente.\",\"Energia dos Ancestrais\":\"Presen\\u00e7a espiritual a guiar as tuas decis\\u00f5es.\",\"Aviso Espiritual\":\"Necessidade de cautela e introspe\\u00e7\\u00e3o nos pr\\u00f3ximos dias.\",\"Fluxo de Prosperidade\":\"Expans\\u00e3o financeira e material em movimento.\",\"Amor em Movimento\":\"Energia afetiva ativa ou um reencontro pr\\u00f3ximo.\",\"Transforma\\u00e7\\u00e3o Profunda\":\"Fim de um ciclo e renascimento energ\\u00e9tico.\"};\n            const isLoggedIn = wrapper.getAttribute('data-logged-in') === '1';\n            const ajaxUrl    = \"https:\\\/\\\/app.digitalfreelancer.org\\\/wp-admin\\\/admin-ajax.php\";\n            const nonce      = \"2c65e306a1\";\n            const serverHistory = [];\n            const LOCAL_KEY  = 'tbd_buzio_history_local';\n\n            const toastEl    = document.querySelector('[data-tbd-toast]');\n            const dailyEl    = wrapper.querySelector('[data-tbd-daily]');\n            const historyEl  = wrapper.querySelector('[data-history-list]');\n\n            const tierKeys = Object.keys(tiers);\n            const signKeys = Object.keys(signs);\n\n            \/* ---------- Mensagem do dia (determin\u00edstica por data) ---------- *\/\n            function seededIndex(seedStr, max){\n                let hash = 0;\n                for (let i = 0; i < seedStr.length; i++){\n                    hash = (hash * 31 + seedStr.charCodeAt(i)) >>> 0;\n                }\n                return hash % max;\n            }\n            (function renderDaily(){\n                const today = new Date();\n                const seed = today.toISOString().slice(0,10);\n                const key = signKeys[seededIndex(seed, signKeys.length)];\n                dailyEl.innerHTML = '<strong style=\"color:var(--gold)\">Sinal do dia \u2014 ' + key + ':<\/strong> ' + signs[key];\n            })();\n\n            \/* ---------- Toast ---------- *\/\n            let toastTimer = null;\n            function showToast(msg){\n                toastEl.textContent = msg;\n                toastEl.classList.add('tbd-show');\n                clearTimeout(toastTimer);\n                toastTimer = setTimeout(()=> toastEl.classList.remove('tbd-show'), 2200);\n            }\n\n            \/* ---------- Hist\u00f3rico ---------- *\/\n            function loadLocalHistory(){\n                try {\n                    const raw = localStorage.getItem(LOCAL_KEY);\n                    return raw ? JSON.parse(raw) : [];\n                } catch(e){ return []; }\n            }\n            function saveLocalHistory(list){\n                try { localStorage.setItem(LOCAL_KEY, JSON.stringify(list)); } catch(e){}\n            }\n\n            let currentHistory = isLoggedIn ? (serverHistory || []) : loadLocalHistory();\n\n            function renderHistory(){\n                if (!currentHistory || currentHistory.length === 0){\n                    historyEl.innerHTML = '<div class=\"tbd-empty\">Ainda n\u00e3o h\u00e1 consultas registadas. Faz a tua primeira tiragem.<\/div>';\n                    return;\n                }\n                historyEl.innerHTML = currentHistory.map(function(item){\n                    const tierColor = (tiers[item.tier_key] && tiers[item.tier_key].color) || '#d6a85c';\n                    return '<div class=\"tbd-history-item\">' +\n                        '<strong style=\"color:' + tierColor + '\">' + item.tier + '<\/strong>' +\n                        '<small>' + item.sign + ' &middot; ' + item.opens + '\/' + item.total + ' abertos &middot; ' + item.date + '<\/small>' +\n                        '<\/div>';\n                }).join('');\n            }\n            renderHistory();\n\n            function pushHistory(entry){\n                currentHistory.unshift(entry);\n                currentHistory = currentHistory.slice(0, 20);\n                renderHistory();\n\n                if (isLoggedIn){\n                    const body = new URLSearchParams();\n                    body.set('action', 'tbd_save_reading');\n                    body.set('nonce', nonce);\n                    body.set('tier', entry.tier_key);\n                    body.set('sign', entry.sign);\n                    body.set('total', entry.total);\n                    body.set('opens', entry.opens);\n\n                    fetch(ajaxUrl, { method:'POST', credentials:'same-origin', body: body })\n                        .then(r => r.json())\n                        .then(res => {\n                            if (res && res.success && res.data && res.data.history){\n                                currentHistory = res.data.history;\n                                renderHistory();\n                            }\n                        })\n                        .catch(()=>{ \/* silencioso: j\u00e1 guardado localmente na sess\u00e3o *\/ });\n                } else {\n                    saveLocalHistory(currentHistory);\n                }\n            }\n\n            wrapper.querySelector('[data-reset-history]').addEventListener('click', function(){\n                if (!confirm('Tens a certeza que queres limpar o teu hist\u00f3rico espiritual?')) return;\n\n                currentHistory = [];\n                renderHistory();\n\n                if (isLoggedIn){\n                    const body = new URLSearchParams();\n                    body.set('action', 'tbd_reset_history');\n                    body.set('nonce', nonce);\n                    fetch(ajaxUrl, { method:'POST', credentials:'same-origin', body: body }).catch(()=>{});\n                } else {\n                    saveLocalHistory([]);\n                }\n                showToast('Hist\u00f3rico limpo.');\n            });\n\n            \/* ---------- Lan\u00e7amento dos b\u00fazios ---------- *\/\n\n            function pickTierKey(ratio){\n                for (const key of tierKeys){\n                    if (ratio >= tiers[key].min_ratio) return key;\n                }\n                return tierKeys[tierKeys.length - 1];\n            }\n\n            function buildShellNodes(container, count){\n                container.innerHTML = '';\n                const nodes = [];\n                for (let i = 0; i < count; i++){\n                    const el = document.createElement('div');\n                    el.className = 'tbd-shell tbd-closed';\n                    container.appendChild(el);\n                    nodes.push(el);\n                }\n                return nodes;\n            }\n\n            function castShells(count){\n                let opens = 0;\n                const states = [];\n                for (let i = 0; i < count; i++){\n                    const isOpen = Math.random() < 0.5;\n                    if (isOpen) opens++;\n                    states.push(isOpen);\n                }\n                const ratio = opens \/ count;\n                const tierKey = pickTierKey(ratio);\n                const sign = signKeys[Math.floor(Math.random() * signKeys.length)];\n                return { states, opens, total: count, ratio, tierKey, sign };\n            }\n\n            function openModal(result){\n                const tier = tiers[result.tierKey];\n\n                const modal = document.createElement('div');\n                modal.className = 'tbd-modal';\n                modal.setAttribute('role', 'dialog');\n                modal.setAttribute('aria-modal', 'true');\n\n                const shareText = 'Jogo de B\u00fazios \u2014 ' + tier.label + ' (' + result.opens + '\/' + result.total + ' abertos). ' +\n                    tier.desc + ' Sinal: ' + result.sign + ' \u2014 ' + signs[result.sign];\n\n                modal.innerHTML =\n                    '<div class=\"tbd-box\" tabindex=\"-1\">' +\n                        '<div class=\"tbd-glow\">Revela\u00e7\u00e3o dos B\u00fazios<\/div>' +\n                        '<div class=\"tbd-tier-label\" style=\"color:' + tier.color + '\">' + tier.label + '<\/div>' +\n                        '<div class=\"tbd-tier-desc\">' + tier.desc + '<\/div>' +\n                        '<div class=\"tbd-count\">' + result.opens + ' de ' + result.total + ' b\u00fazios abertos<\/div>' +\n                        '<div class=\"tbd-sign-box\">' +\n                            '<strong>' + result.sign + '<\/strong>' +\n                            '<span>' + signs[result.sign] + '<\/span>' +\n                        '<\/div>' +\n                        '<div class=\"tbd-actions\">' +\n                            '<button class=\"tbd-btn tbd-ghost\" type=\"button\" data-copy>Copiar Leitura<\/button>' +\n                            '<a class=\"tbd-btn tbd-ghost\" data-share target=\"_blank\" rel=\"noopener\">Partilhar no WhatsApp<\/a>' +\n                            '<button class=\"tbd-btn\" type=\"button\" data-close>Fechar<\/button>' +\n                        '<\/div>' +\n                    '<\/div>';\n\n                document.body.appendChild(modal);\n\n                const shareLink = modal.querySelector('[data-share]');\n                shareLink.href = 'https:\/\/wa.me\/?text=' + encodeURIComponent(shareText);\n\n                modal.querySelector('[data-copy]').addEventListener('click', function(){\n                    if (navigator.clipboard && navigator.clipboard.writeText){\n                        navigator.clipboard.writeText(shareText).then(function(){\n                            showToast('Leitura copiada!');\n                        }).catch(function(){\n                            showToast('N\u00e3o foi poss\u00edvel copiar.');\n                        });\n                    } else {\n                        showToast('N\u00e3o foi poss\u00edvel copiar.');\n                    }\n                });\n\n                function closeModal(){\n                    modal.remove();\n                    document.removeEventListener('keydown', onKeydown);\n                }\n                function onKeydown(e){\n                    if (e.key === 'Escape') closeModal();\n                }\n                document.addEventListener('keydown', onKeydown);\n\n                modal.addEventListener('click', function(ev){\n                    if (ev.target === modal || ev.target.hasAttribute('data-close')){\n                        closeModal();\n                    }\n                });\n\n                modal.querySelector('.tbd-box').focus();\n            }\n\n            wrapper.addEventListener('click', function(e){\n                const btn = e.target.closest('[data-buzio]');\n                if (!btn || btn.disabled) return;\n\n                const count = parseInt(btn.getAttribute('data-buzio'), 10);\n                const card = btn.closest('.tbd-card');\n                const container = card.querySelector('[data-shell-container]');\n                const nodes = buildShellNodes(container, count);\n\n                btn.disabled = true;\n                const originalLabel = btn.textContent;\n                btn.textContent = 'A consultar os b\u00fazios\u2026';\n\n                nodes.forEach(n => n.classList.add('tbd-casting'));\n\n                setTimeout(function(){\n                    const result = castShells(count);\n\n                    nodes.forEach(function(node, i){\n                        node.classList.remove('tbd-casting');\n                        if (result.states[i]){\n                            node.classList.remove('tbd-closed');\n                        } else {\n                            node.classList.add('tbd-closed');\n                        }\n                    });\n\n                    openModal(result);\n\n                    pushHistory({\n                        tier_key: result.tierKey,\n                        tier: tiers[result.tierKey].label,\n                        sign: result.sign,\n                        total: result.total,\n                        opens: result.opens,\n                        date: new Date().toLocaleString('pt-PT', { day:'2-digit', month:'2-digit', year:'numeric', hour:'2-digit', minute:'2-digit' })\n                    });\n\n                    btn.disabled = false;\n                    btn.textContent = originalLabel;\n                }, 900);\n            });\n\n        })();\n        <\/script>\n\n                    <\/div>\n        <\/div>\n\n    <\/div>\n\n    <style>\n\n    .buzios-container {\n        position: relative;\n        width: 100%;\n        height: 100vh;\n        overflow: hidden;\n    }\n\n    .buzios-img {\n        position: absolute;\n        inset: 0;\n        width: 100%;\n        height: 100%;\n        object-fit: cover;\n        cursor: pointer;\n        z-index: 2;\n        transition: all 1s ease;\n    }\n\n    .buzios-container.open .buzios-img {\n        opacity: 0;\n        transform: scale(1.3);\n        filter: blur(10px);\n    }\n\n    \/* \u2705 OVERLAY CORRIGIDO *\/\n    .buzios-overlay {\n        position: fixed;\n        top: 0;\n        left: 0;\n        width: 100%;\n        height: 100vh;\n        overflow-y: auto;\n        z-index: 999;\n        opacity: 0;\n        transition: all 0.8s ease;\n        pointer-events: none;\n        background: transparent;\n    }\n\n    .buzios-container.open .buzios-overlay {\n        opacity: 1;\n        pointer-events: auto;\n    }\n\n    .buzios-content {\n        width: 100%;\n        min-height: 100vh;\n    }\n\n    .buzios-close {\n        position: fixed;\n        top: 20px;\n        right: 20px;\n        z-index: 1000;\n        background: rgba(0,0,0,0.6);\n        color: #fff;\n        border: none;\n        padding: 10px 15px;\n        cursor: pointer;\n    }\n\n    .buzios-effects,\n    .buzios-effects-top {\n        position: absolute;\n        inset: 0;\n        pointer-events: none;\n    }\n\n    .buzios-effects { z-index: 3; }\n    .buzios-effects-top { z-index: 5; }\n\n    .buzios-effects::before {\n        content: \"\";\n        position: absolute;\n        inset: -30%;\n        background: radial-gradient(circle,\n            rgba(140,0,255,0.6),\n            rgba(0,150,255,0.4),\n            transparent 70%);\n        filter: blur(60px);\n        animation: glowPulse 4s ease-in-out infinite;\n    }\n\n    .buzios-effects::after {\n        content: \"\";\n        position: absolute;\n        inset: -40%;\n        background: conic-gradient(\n            from 0deg,\n            rgba(140,0,255,0.4),\n            rgba(0,255,200,0.3),\n            rgba(255,0,200,0.4),\n            rgba(140,0,255,0.4)\n        );\n        filter: blur(80px);\n        animation: rotateAura 20s linear infinite;\n    }\n\n    @keyframes glowPulse {\n        0%,100% { opacity: 0.5; transform: scale(1); }\n        50% { opacity: 1; transform: scale(1.2); }\n    }\n\n    @keyframes rotateAura {\n        from { transform: rotate(0deg); }\n        to { transform: rotate(360deg); }\n    }\n\n    .buzios-particle,\n    .buzios-particle-top {\n        position: absolute;\n        border-radius: 50%;\n    }\n\n    .buzios-particle {\n        width: 4px;\n        height: 4px;\n        background: #b478ff;\n        box-shadow: 0 0 12px #b478ff;\n        animation: floatParticle linear infinite;\n    }\n\n    .buzios-particle-top {\n        width: 6px;\n        height: 6px;\n        background: #fff;\n        box-shadow: 0 0 20px #fff;\n        animation: floatParticleFast linear infinite;\n    }\n\n    @keyframes floatParticle {\n        0% { transform: translateY(100%); opacity: 0; }\n        20% { opacity: 1; }\n        100% { transform: translateY(-20%); opacity: 0; }\n    }\n\n    @keyframes floatParticleFast {\n        0% { transform: translateY(100%); opacity: 0; }\n        30% { opacity: 1; }\n        100% { transform: translateY(-30%); opacity: 0; }\n    }\n\n    <\/style>\n\n    <script>\n    window.addEventListener(\"load\", function(){\n\n        document.querySelectorAll(\".buzios-container\").forEach(function(container){\n\n            let img = container.querySelector(\".buzios-img\");\n            let close = container.querySelector(\".buzios-close\");\n            let effects = container.querySelector(\".buzios-effects\");\n            let effectsTop = container.querySelector(\".buzios-effects-top\");\n\n            img.onclick = () => {\n                container.classList.add(\"open\");\n            };\n\n            close.onclick = () => {\n                container.classList.remove(\"open\");\n            };\n\n            for(let i=0;i<40;i++){\n                let p = document.createElement(\"div\");\n                p.className = \"buzios-particle\";\n                p.style.left = Math.random()*100+\"%\";\n                p.style.animationDuration = (4+Math.random()*6)+\"s\";\n                effects.appendChild(p);\n            }\n\n            for(let i=0;i<25;i++){\n                let p = document.createElement(\"div\");\n                p.className = \"buzios-particle-top\";\n                p.style.left = Math.random()*100+\"%\";\n                p.style.animationDuration = (2+Math.random()*4)+\"s\";\n                effectsTop.appendChild(p);\n            }\n\n        });\n\n    });\n    <\/script>\n\n    <\/div>\n\t\t\t\t\t\t<\/div>\n\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":"","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_canvas","meta":{"footnotes":""},"class_list":["post-2657","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/app.digitalfreelancer.org\/index.php\/wp-json\/wp\/v2\/pages\/2657","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/app.digitalfreelancer.org\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/app.digitalfreelancer.org\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/app.digitalfreelancer.org\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/app.digitalfreelancer.org\/index.php\/wp-json\/wp\/v2\/comments?post=2657"}],"version-history":[{"count":19,"href":"https:\/\/app.digitalfreelancer.org\/index.php\/wp-json\/wp\/v2\/pages\/2657\/revisions"}],"predecessor-version":[{"id":2893,"href":"https:\/\/app.digitalfreelancer.org\/index.php\/wp-json\/wp\/v2\/pages\/2657\/revisions\/2893"}],"wp:attachment":[{"href":"https:\/\/app.digitalfreelancer.org\/index.php\/wp-json\/wp\/v2\/media?parent=2657"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}