{"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-23T15:15:42","modified_gmt":"2026-07-23T15:15:42","slug":"dashboard-buzio","status":"publish","type":"page","link":"https:\/\/app.digitalfreelancer.org\/index.php\/dashboard-buzio\/","title":{"rendered":"Dashboard Buzio"},"content":{"rendered":"\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            <style>\n\n            .tbd-wrapper {\n\n                --bg:#100a18;\n\n                --bg-radial: radial-gradient(circle at 20% 15%, rgba(155,110,220,0.18), transparent 45%),\n\n                             radial-gradient(circle at 85% 85%, rgba(214,168,92,0.12), transparent 40%);\n\n                --panel:#1c1428;\n\n                --panel-2:#221933;\n\n                --gold:#d6a85c;\n\n                --gold-soft:#e9dcc3;\n\n                --violet:#8b5fc9;\n\n                --text:#f3eef7;\n\n                --muted:#b3a6cf;\n\n                --danger:#c96a6a;\n\n                font-family: 'Segoe UI', system-ui, -apple-system, sans-serif;\n\n                background: var(--bg-radial), var(--bg);\n\n                color: var(--text);\n\n                padding: 26px;\n\n                border-radius: 16px;\n\n                position: relative;\n\n                box-shadow: 0 20px 60px rgba(0,0,0,0.45);\n\n                overflow: hidden;\n\n            }\n\n\n            .tbd-wrapper::before {\n\n                content:\"\";\n\n                position:absolute;\n\n                inset:0;\n\n                background-image:\n\n                    radial-gradient(1px 1px at 10% 20%, rgba(255,255,255,0.5) 50%, transparent 100%),\n\n                    radial-gradient(1px 1px at 80% 10%, rgba(255,255,255,0.4) 50%, transparent 100%),\n\n                    radial-gradient(1px 1px at 60% 70%, rgba(255,255,255,0.3) 50%, transparent 100%),\n\n                    radial-gradient(1px 1px at 30% 85%, rgba(255,255,255,0.35) 50%, transparent 100%);\n\n                pointer-events:none;\n\n                opacity:0.6;\n\n            }\n\n\n            .tbd-wrapper * { box-sizing: border-box; }\n\n\n            .tbd-header { position:relative; z-index:1; }\n\n\n            .tbd-header h1 {\n\n                margin:0;\n\n                font-size:28px;\n\n                color: var(--gold);\n\n                letter-spacing:1px;\n\n                font-family: Georgia, 'Times New Roman', serif;\n\n            }\n\n\n            .tbd-sub {\n\n                color: var(--muted);\n\n                margin-top:6px;\n\n                font-size:14.5px;\n\n            }\n\n\n            .tbd-daily {\n\n                margin-top:16px;\n\n                padding:12px 16px;\n\n                background: linear-gradient(90deg, rgba(214,168,92,0.12), rgba(139,95,201,0.10));\n\n                border:1px solid rgba(214,168,92,0.3);\n\n                border-radius:10px;\n\n                font-size:13.5px;\n\n                color: var(--gold-soft);\n\n                position:relative;\n\n                z-index:1;\n\n            }\n\n\n            .tbd-grid {\n\n                display:grid;\n\n                grid-template-columns: 1fr 320px;\n\n                gap:20px;\n\n                margin-top:22px;\n\n                position:relative;\n\n                z-index:1;\n\n            }\n\n\n            .tbd-card {\n\n                background: var(--panel);\n\n                border:1px solid rgba(214,168,92,0.25);\n\n                border-radius:14px;\n\n                padding:20px;\n\n                text-align:center;\n\n                position:relative;\n\n                overflow:hidden;\n\n                transition: border-color 0.25s ease, transform 0.25s ease;\n\n            }\n\n\n            .tbd-card:hover {\n\n                border-color: rgba(214,168,92,0.5);\n\n                transform: translateY(-2px);\n\n            }\n\n\n            .tbd-card h3 {\n\n                margin:0 0 4px;\n\n                font-size:17px;\n\n                color: var(--text);\n\n            }\n\n\n            .tbd-card p {\n\n                margin:0;\n\n                color: var(--muted);\n\n                font-size:13.5px;\n\n            }\n\n\n            .tbd-shells {\n\n                display:flex;\n\n                flex-wrap:wrap;\n\n                justify-content:center;\n\n                gap:8px;\n\n                margin:18px 0;\n\n                min-height:44px;\n\n            }\n\n\n            .tbd-shell {\n\n                width:26px;\n\n                height:40px;\n\n                border-radius:50% 50% 60% 60%;\n\n                background: linear-gradient(160deg,#e9dcc3,#c9b389);\n\n                border:1px solid #8a6a3a;\n\n                box-shadow:0 4px 10px rgba(0,0,0,0.4);\n\n                transition: transform 0.4s ease, background 0.4s ease, border-color 0.4s ease;\n\n                transform: rotate(20deg);\n\n            }\n\n\n            .tbd-shell.tbd-closed {\n\n                background: linear-gradient(160deg,#2a1f47,#150e24);\n\n                border:1px solid var(--gold);\n\n                transform: rotate(-10deg);\n\n            }\n\n\n            .tbd-shell.tbd-casting {\n\n                animation: tbd-shake 0.09s linear infinite;\n\n            }\n\n\n            @keyframes tbd-shake {\n\n                0%   { transform: rotate(20deg) translateY(0); }\n\n                25%  { transform: rotate(-15deg) translateY(-3px); }\n\n                50%  { transform: rotate(10deg) translateY(2px); }\n\n                75%  { transform: rotate(-8deg) translateY(-2px); }\n\n                100% { transform: rotate(20deg) translateY(0); }\n\n            }\n\n\n            .tbd-btn {\n\n                background: linear-gradient(135deg,#6b3fa0,#4a2a78);\n\n                border:none;\n\n                color:#fff;\n\n                padding:11px 18px;\n\n                border-radius:10px;\n\n                cursor:pointer;\n\n                font-weight:600;\n\n                font-size:14px;\n\n                transition: transform 0.15s ease, box-shadow 0.15s ease, opacity 0.15s ease;\n\n                box-shadow: 0 6px 16px rgba(107,63,160,0.35);\n\n            }\n\n\n            .tbd-btn:hover:not(:disabled) { transform: translateY(-1px); box-shadow: 0 8px 20px rgba(107,63,160,0.5); }\n\n            .tbd-btn:disabled { opacity:0.55; cursor:not-allowed; transform:none; }\n\n\n            .tbd-btn.tbd-ghost {\n\n                background: transparent;\n\n                border:1px solid rgba(214,168,92,0.4);\n\n                color: var(--gold-soft);\n\n                box-shadow:none;\n\n            }\n\n\n            .tbd-btn.tbd-danger {\n\n                background: transparent;\n\n                border:1px solid rgba(201,106,106,0.5);\n\n                color: var(--danger);\n\n                box-shadow:none;\n\n            }\n\n\n            .tbd-sidebar {\n\n                background: var(--panel);\n\n                border:1px solid rgba(214,168,92,0.25);\n\n                border-radius:14px;\n\n                padding:18px;\n\n                display:flex;\n\n                flex-direction:column;\n\n            }\n\n\n            .tbd-sidebar h3 {\n\n                margin:0 0 4px;\n\n                font-size:16px;\n\n                color: var(--gold-soft);\n\n            }\n\n\n            .tbd-sidebar-note {\n\n                color: var(--muted);\n\n                font-size:12px;\n\n                margin-bottom:10px;\n\n            }\n\n\n            .tbd-history-list {\n\n                flex:1;\n\n                max-height:340px;\n\n                overflow-y:auto;\n\n                margin-bottom:10px;\n\n            }\n\n\n            .tbd-history-item {\n\n                padding:10px 0;\n\n                border-bottom:1px solid rgba(255,255,255,0.08);\n\n            }\n\n\n            .tbd-history-item:last-child { border-bottom:none; }\n\n\n            .tbd-history-item strong { display:block; font-size:14px; }\n\n            .tbd-history-item small { color: var(--muted); font-size:11.5px; }\n\n\n            .tbd-empty {\n\n                color: var(--muted);\n\n                font-size:13px;\n\n                text-align:center;\n\n                padding:20px 6px;\n\n            }\n\n\n            .tbd-modal {\n\n                position:fixed;\n\n                inset:0;\n\n                background:rgba(6,3,12,0.8);\n\n                display:flex;\n\n                align-items:center;\n\n                justify-content:center;\n\n                z-index:99999;\n\n                padding:16px;\n\n                animation: tbd-fade-in 0.2s ease;\n\n            }\n\n\n            @keyframes tbd-fade-in { from { opacity:0; } to { opacity:1; } }\n\n\n            .tbd-box {\n\n                background: linear-gradient(160deg, var(--panel-2), var(--panel));\n\n                border:1px solid rgba(214,168,92,0.35);\n\n                padding:26px;\n\n                border-radius:16px;\n\n                max-width:460px;\n\n                width:100%;\n\n                text-align:center;\n\n                animation: tbd-pop 0.25s ease;\n\n                max-height: 88vh;\n\n                overflow-y:auto;\n\n            }\n\n\n            @keyframes tbd-pop {\n\n                from { transform: scale(0.92); opacity:0; }\n\n                to   { transform: scale(1); opacity:1; }\n\n            }\n\n\n            .tbd-glow {\n\n                font-size:13px;\n\n                letter-spacing:1.5px;\n\n                text-transform:uppercase;\n\n                color: var(--muted);\n\n                margin-bottom:6px;\n\n            }\n\n\n            .tbd-tier-label {\n\n                font-size:22px;\n\n                font-family: Georgia, serif;\n\n                margin:4px 0 2px;\n\n            }\n\n\n            .tbd-tier-desc {\n\n                color: #ffffff !important;\n\n                font-size:13.5px;\n\n                margin-bottom:14px;\n\n            }\n\n\n            .tbd-count {\n\n                font-size:12px;\n\n                color: #ffffff !important;\n\n                margin-bottom:16px;\n\n            }\n\n\n            .tbd-sign-box {\n\n                background: rgba(255,255,255,0.04);\n\n                border:1px solid rgba(214,168,92,0.2);\n\n                border-radius:10px;\n\n                padding:12px 14px;\n\n                margin-bottom:18px;\n\n                text-align:left;\n\n            }\n\n\n            .tbd-sign-box strong {\n\n                color: #d6a85c !important;\n\n                display:block;\n\n                margin-bottom:3px;\n\n                font-size:14px;\n\n            }\n\n\n            .tbd-sign-box span {\n\n                color: #ffffff !important;\n\n                font-size:13px;\n\n            }\n\n\n            .tbd-actions {\n\n                display:flex;\n\n                flex-wrap:wrap;\n\n                gap:8px;\n\n                justify-content:center;\n\n            }\n\n\n            .tbd-toast {\n\n                position:fixed;\n\n                bottom:22px;\n\n                left:50%;\n\n                transform:translateX(-50%);\n\n                background: var(--violet);\n\n                color:#fff;\n\n                padding:9px 16px;\n\n                border-radius:8px;\n\n                font-size:13px;\n\n                z-index:100000;\n\n                opacity:0;\n\n                transition: opacity 0.25s ease;\n\n                pointer-events:none;\n\n            }\n\n\n            .tbd-toast.tbd-show { opacity:1; }\n\n\n            @media (max-width: 780px) {\n\n                .tbd-grid { grid-template-columns: 1fr; }\n\n            }\n            <\/style>\n\n            \n\n        <div class=\"tbd-wrapper\" id=\"tbd-0af2d2fe-6068-4fe4-aa03-33bc0c700f0e\" data-logged-in=\"0\">\n\n\n            <div class=\"tbd-header\">\n\n                <h1>\ud83d\udd2e Jogo de B\u00fazios<\/h1>\n\n                <div class=\"tbd-sub\">Bem-vindo, Buscador \u2014 17 de September de 2026. Interpreta os sinais do destino.<\/div>\n\n                <div class=\"tbd-daily\" data-tbd-daily>A carregar a mensagem do dia\u2026<\/div>\n\n            <\/div>\n\n\n            <div class=\"tbd-grid\">\n\n\n                <div>\n\n                    <div class=\"tbd-card\">\n\n                        <h3>Consulta Simples<\/h3>\n\n                        <p>Uma leitura direta e r\u00e1pida dos b\u00fazios.<\/p>\n\n                        <div class=\"tbd-shells\" data-shell-container><\/div>\n\n                        <button class=\"tbd-btn\" type=\"button\" data-buzio=\"4\">Abrir B\u00fazios<\/button>\n\n                    <\/div>\n\n\n                    <div class=\"tbd-card\" style=\"margin-top:16px;\">\n\n                        <h3>Leitura Profunda<\/h3>\n\n                        <p>Fluxos espirituais e caminhos de destino.<\/p>\n\n                        <div class=\"tbd-shells\" data-shell-container><\/div>\n\n                        <button class=\"tbd-btn\" type=\"button\" data-buzio=\"8\">Consultar Destino<\/button>\n\n                    <\/div>\n\n\n                    <div class=\"tbd-card\" style=\"margin-top:16px;\">\n\n                        <h3>Jogo Completo (Merindilogun)<\/h3>\n\n                        <p>A tiragem tradicional de 16 b\u00fazios \u2014 mensagem ancestral completa.<\/p>\n\n                        <div class=\"tbd-shells\" data-shell-container><\/div>\n\n                        <button class=\"tbd-btn\" type=\"button\" data-buzio=\"16\">Revelar Caminho<\/button>\n\n                    <\/div>\n\n                <\/div>\n\n\n                <aside class=\"tbd-sidebar\">\n\n                    <h3>Hist\u00f3rico Espiritual<\/h3>\n\n                    <div class=\"tbd-sidebar-note\">\n\n                        Guardado apenas neste dispositivo.\n                    <\/div>\n\n                    <div class=\"tbd-history-list\" data-history-list aria-live=\"polite\"><\/div>\n\n                    <button class=\"tbd-btn tbd-danger\" type=\"button\" data-reset-history>Limpar Hist\u00f3rico<\/button>\n\n                <\/aside>\n\n\n            <\/div>\n\n        <\/div>\n\n\n        <div class=\"tbd-toast\" data-tbd-toast role=\"status\"><\/div>\n\n\n        <script>\n\n        (function(){\n\n\n            const wrapper   = document.getElementById(\"tbd-0af2d2fe-6068-4fe4-aa03-33bc0c700f0e\");\n\n            if (!wrapper) return;\n\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\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\n            const isLoggedIn = wrapper.getAttribute('data-logged-in') === '1';\n\n            const ajaxUrl    = \"https:\\\/\\\/app.digitalfreelancer.org\\\/wp-admin\\\/admin-ajax.php\";\n\n            const nonce      = \"9abbb2c6dc\";\n\n            const serverHistory = [];\n\n            const LOCAL_KEY  = 'tbd_buzio_history_local';\n\n\n            const toastEl    = document.querySelector('[data-tbd-toast]');\n\n            const dailyEl    = wrapper.querySelector('[data-tbd-daily]');\n\n            const historyEl  = wrapper.querySelector('[data-history-list]');\n\n\n            const tierKeys = Object.keys(tiers);\n\n            const signKeys = Object.keys(signs);\n\n\n            \/* ---------- Mensagem do dia (determin\u00edstica por data) ---------- *\/\n\n            function seededIndex(seedStr, max){\n\n                let hash = 0;\n\n                for (let i = 0; i < seedStr.length; i++){\n\n                    hash = (hash * 31 + seedStr.charCodeAt(i)) >>> 0;\n\n                }\n\n                return hash % max;\n\n            }\n\n            (function renderDaily(){\n\n                const today = new Date();\n\n                const seed = today.toISOString().slice(0,10);\n\n                const key = signKeys[seededIndex(seed, signKeys.length)];\n\n                dailyEl.innerHTML = '<strong style=\"color:var(--gold)\">Sinal do dia \u2014 ' + key + ':<\/strong> ' + signs[key];\n\n            })();\n\n\n            \/* ---------- Toast ---------- *\/\n\n            let toastTimer = null;\n\n            function showToast(msg){\n\n                toastEl.textContent = msg;\n\n                toastEl.classList.add('tbd-show');\n\n                clearTimeout(toastTimer);\n\n                toastTimer = setTimeout(()=> toastEl.classList.remove('tbd-show'), 2200);\n\n            }\n\n\n            \/* ---------- Hist\u00f3rico ---------- *\/\n\n            function loadLocalHistory(){\n\n                try {\n\n                    const raw = localStorage.getItem(LOCAL_KEY);\n\n                    return raw ? JSON.parse(raw) : [];\n\n                } catch(e){ return []; }\n\n            }\n\n            function saveLocalHistory(list){\n\n                try { localStorage.setItem(LOCAL_KEY, JSON.stringify(list)); } catch(e){}\n\n            }\n\n\n            let currentHistory = isLoggedIn ? (serverHistory || []) : loadLocalHistory();\n\n\n            function renderHistory(){\n\n                if (!currentHistory || currentHistory.length === 0){\n\n                    historyEl.innerHTML = '<div class=\"tbd-empty\">Ainda n\u00e3o h\u00e1 consultas registadas. Faz a tua primeira tiragem.<\/div>';\n\n                    return;\n\n                }\n\n                historyEl.innerHTML = currentHistory.map(function(item){\n\n                    const tierColor = (tiers[item.tier_key] && tiers[item.tier_key].color) || '#d6a85c';\n\n                    return '<div class=\"tbd-history-item\">' +\n\n                        '<strong style=\"color:' + tierColor + '\">' + item.tier + '<\/strong>' +\n\n                        '<small>' + item.sign + ' &middot; ' + item.opens + '\/' + item.total + ' abertos &middot; ' + item.date + '<\/small>' +\n\n                        '<\/div>';\n\n                }).join('');\n\n            }\n\n            renderHistory();\n\n\n            function pushHistory(entry){\n\n                currentHistory.unshift(entry);\n\n                currentHistory = currentHistory.slice(0, 20);\n\n                renderHistory();\n\n\n                if (isLoggedIn){\n\n                    const body = new URLSearchParams();\n\n                    body.set('action', 'tbd_save_reading');\n\n                    body.set('nonce', nonce);\n\n                    body.set('tier', entry.tier_key);\n\n                    body.set('sign', entry.sign);\n\n                    body.set('total', entry.total);\n\n                    body.set('opens', entry.opens);\n\n\n                    fetch(ajaxUrl, { method:'POST', credentials:'same-origin', body: body })\n\n                        .then(r => r.json())\n\n                        .then(res => {\n\n                            if (res && res.success && res.data && res.data.history){\n\n                                currentHistory = res.data.history;\n\n                                renderHistory();\n\n                            }\n\n                        })\n\n                        .catch(()=>{ \/* silencioso: j\u00e1 guardado localmente na sess\u00e3o *\/ });\n\n                } else {\n\n                    saveLocalHistory(currentHistory);\n\n                }\n\n            }\n\n\n            wrapper.querySelector('[data-reset-history]').addEventListener('click', function(){\n\n                if (!confirm('Tens a certeza que queres limpar o teu hist\u00f3rico espiritual?')) return;\n\n\n                currentHistory = [];\n\n                renderHistory();\n\n\n                if (isLoggedIn){\n\n                    const body = new URLSearchParams();\n\n                    body.set('action', 'tbd_reset_history');\n\n                    body.set('nonce', nonce);\n\n                    fetch(ajaxUrl, { method:'POST', credentials:'same-origin', body: body }).catch(()=>{});\n\n                } else {\n\n                    saveLocalHistory([]);\n\n                }\n\n                showToast('Hist\u00f3rico limpo.');\n\n            });\n\n\n            \/* ---------- Lan\u00e7amento dos b\u00fazios ---------- *\/\n\n\n            function pickTierKey(ratio){\n\n                for (const key of tierKeys){\n\n                    if (ratio >= tiers[key].min_ratio) return key;\n\n                }\n\n                return tierKeys[tierKeys.length - 1];\n\n            }\n\n\n            function buildShellNodes(container, count){\n\n                container.innerHTML = '';\n\n                const nodes = [];\n\n                for (let i = 0; i < count; i++){\n\n                    const el = document.createElement('div');\n\n                    el.className = 'tbd-shell tbd-closed';\n\n                    container.appendChild(el);\n\n                    nodes.push(el);\n\n                }\n\n                return nodes;\n\n            }\n\n\n            function castShells(count){\n\n                let opens = 0;\n\n                const states = [];\n\n                for (let i = 0; i < count; i++){\n\n                    const isOpen = Math.random() < 0.5;\n\n                    if (isOpen) opens++;\n\n                    states.push(isOpen);\n\n                }\n\n                const ratio = opens \/ count;\n\n                const tierKey = pickTierKey(ratio);\n\n                const sign = signKeys[Math.floor(Math.random() * signKeys.length)];\n\n                return { states, opens, total: count, ratio, tierKey, sign };\n\n            }\n\n\n            function openModal(result){\n\n                const tier = tiers[result.tierKey];\n\n\n                const modal = document.createElement('div');\n\n                modal.className = 'tbd-modal';\n\n                modal.setAttribute('role', 'dialog');\n\n                modal.setAttribute('aria-modal', 'true');\n\n\n                const shareText = 'Jogo de B\u00fazios \u2014 ' + tier.label + ' (' + result.opens + '\/' + result.total + ' abertos). ' +\n\n                    tier.desc + ' Sinal: ' + result.sign + ' \u2014 ' + signs[result.sign];\n\n\n                modal.innerHTML =\n\n                    '<div class=\"tbd-box\" tabindex=\"-1\">' +\n\n                        '<div class=\"tbd-glow\">Revela\u00e7\u00e3o dos B\u00fazios<\/div>' +\n\n                        '<div class=\"tbd-tier-label\" style=\"color:' + tier.color + '\">' + tier.label + '<\/div>' +\n\n                        '<div class=\"tbd-tier-desc\">' + tier.desc + '<\/div>' +\n\n                        '<div class=\"tbd-count\">' + result.opens + ' de ' + result.total + ' b\u00fazios abertos<\/div>' +\n\n                        '<div class=\"tbd-sign-box\">' +\n\n                            '<strong>' + result.sign + '<\/strong>' +\n\n                            '<span>' + signs[result.sign] + '<\/span>' +\n\n                        '<\/div>' +\n\n                        '<div class=\"tbd-actions\">' +\n\n                            '<button class=\"tbd-btn tbd-ghost\" type=\"button\" data-copy>Copiar Leitura<\/button>' +\n\n                            '<a class=\"tbd-btn tbd-ghost\" data-share target=\"_blank\" rel=\"noopener\">Partilhar no WhatsApp<\/a>' +\n\n                            '<button class=\"tbd-btn\" type=\"button\" data-close>Fechar<\/button>' +\n\n                        '<\/div>' +\n\n                    '<\/div>';\n\n\n                document.body.appendChild(modal);\n\n\n                const shareLink = modal.querySelector('[data-share]');\n\n                shareLink.href = 'https:\/\/wa.me\/?text=' + encodeURIComponent(shareText);\n\n\n                modal.querySelector('[data-copy]').addEventListener('click', function(){\n\n                    if (navigator.clipboard && navigator.clipboard.writeText){\n\n                        navigator.clipboard.writeText(shareText).then(function(){\n\n                            showToast('Leitura copiada!');\n\n                        }).catch(function(){\n\n                            showToast('N\u00e3o foi poss\u00edvel copiar.');\n\n                        });\n\n                    } else {\n\n                        showToast('N\u00e3o foi poss\u00edvel copiar.');\n\n                    }\n\n                });\n\n\n                function closeModal(){\n\n                    modal.remove();\n\n                    document.removeEventListener('keydown', onKeydown);\n\n                }\n\n                function onKeydown(e){\n\n                    if (e.key === 'Escape') closeModal();\n\n                }\n\n                document.addEventListener('keydown', onKeydown);\n\n\n                modal.addEventListener('click', function(ev){\n\n                    if (ev.target === modal || ev.target.hasAttribute('data-close')){\n\n                        closeModal();\n\n                    }\n\n                });\n\n\n                modal.querySelector('.tbd-box').focus();\n\n            }\n\n\n            wrapper.addEventListener('click', function(e){\n\n                const btn = e.target.closest('[data-buzio]');\n\n                if (!btn || btn.disabled) return;\n\n\n                const count = parseInt(btn.getAttribute('data-buzio'), 10);\n\n                const card = btn.closest('.tbd-card');\n\n                const container = card.querySelector('[data-shell-container]');\n\n                const nodes = buildShellNodes(container, count);\n\n\n                btn.disabled = true;\n\n                const originalLabel = btn.textContent;\n\n                btn.textContent = 'A consultar os b\u00fazios\u2026';\n\n\n                nodes.forEach(n => n.classList.add('tbd-casting'));\n\n\n                setTimeout(function(){\n\n                    const result = castShells(count);\n\n\n                    nodes.forEach(function(node, i){\n\n                        node.classList.remove('tbd-casting');\n\n                        if (result.states[i]){\n\n                            node.classList.remove('tbd-closed');\n\n                        } else {\n\n                            node.classList.add('tbd-closed');\n\n                        }\n\n                    });\n\n\n                    openModal(result);\n\n\n                    pushHistory({\n\n                        tier_key: result.tierKey,\n\n                        tier: tiers[result.tierKey].label,\n\n                        sign: result.sign,\n\n                        total: result.total,\n\n                        opens: result.opens,\n\n                        date: new Date().toLocaleString('pt-PT', { day:'2-digit', month:'2-digit', year:'numeric', hour:'2-digit', minute:'2-digit' })\n\n                    });\n\n\n                    btn.disabled = false;\n\n                    btn.textContent = originalLabel;\n\n                }, 900);\n\n            });\n\n\n        })();\n\n        <\/script>\n\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":22,"href":"https:\/\/app.digitalfreelancer.org\/index.php\/wp-json\/wp\/v2\/pages\/2657\/revisions"}],"predecessor-version":[{"id":3270,"href":"https:\/\/app.digitalfreelancer.org\/index.php\/wp-json\/wp\/v2\/pages\/2657\/revisions\/3270"}],"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}]}}