) ═══════════════════════════════════════════════════════ -->
Session 00:00

Psychic Belle

Private
Readings

Direct. Confidential. Exact.

You already know something is unresolved. I see what others cannot. Twin flames. Person of interest. No contact. The answers you have been circling — I have them.

4,500+ Twin Flame & POI Readings
1,000+ Verified 5-Star Reviews
What I Read
Twin Flame & Soulmate
Is this person your mirror soul? I will tell you exactly where you stand, what they feel, and what is coming.
Person of Interest
His thoughts. His intentions. What is holding him back — and whether he is coming forward.
No Contact
The silence has meaning. I read what is happening on the other side and what you should do next.

“Belle told me things no one could have known. Three days later, he reached out exactly as she described. I was speechless.”

— Verified Client, 2024

Payment Confirmed
Your Session
minutes remaining
Clicking Start Session opens the live chat
and begins your countdown timer.
Promo Code
Starter
Approx. 4 minutes of guidance
$25
$25
Premium
Approx. 17 minutes of guidance
$100
$100

Rate: $5.99 per minute

Select a package above · Secure checkout

Offline Reading
Priority Offline Reading
$12.50
$12.50
One specific question + expanded insight.
Delivered within 24 hours.

Secure · Encrypted · Response within 24 hrs

Availability

then your key is: abcdef123 ---------------------------------------------------------------- */ var TIDIO_PUBLIC_KEY = "ymud1rzkyzk90r85ach0scowv0rblxnr"; /* ---------------------------------------------------------------- STEP 4 — PROMO CODE ---------------------------------------------------------------- */ var PROMO_CODE = "BELLE10"; /* ================================================================ ✦ STOP HERE — NOTHING BELOW NEEDS TO CHANGE ✦ ================================================================ */ /* Package definitions — minutes per package */ var PACKAGES = { starter: { label: "Starter", minutes: 4, price: 25, disc: 22.50 }, standard: { label: "Standard", minutes: 8, price: 50, disc: 45.00 }, premium: { label: "Premium", minutes: 17, price: 100, disc: 90.00 }, offline: { label: "Offline", minutes: 0, price: 12.50,disc: 11.25 } }; var LINKS = { starter: { full: STRIPE_STARTER, disc: STRIPE_STARTER_DISC }, standard: { full: STRIPE_STANDARD, disc: STRIPE_STANDARD_DISC }, premium: { full: STRIPE_PREMIUM, disc: STRIPE_PREMIUM_DISC }, offline: { full: STRIPE_OFFLINE, disc: STRIPE_OFFLINE } }; var LS_KEY_SECS = 'belle_session_secs'; var LS_KEY_PKG = 'belle_session_pkg'; var LS_KEY_STARTED = 'belle_session_started'; function fmt(n) { return '$' + (n % 1 === 0 ? String(n) : n.toFixed(2)); } function pad2(n) { return n < 10 ? '0' + n : String(n); } /* ── Parse URL params ── */ var urlParams = new URLSearchParams(window.location.search); var isSuccess = urlParams.get('success') === 'true'; var pkgFromUrl = urlParams.get('pkg') || ''; /* ── Tidio gate — runs before DOM loads ── */ (function tidioGate() { if (!isSuccess) { document.body.classList.add('tidio-hidden'); window.tidioChatApi = window.tidioChatApi || {}; document.addEventListener('tidioChat-ready', function () { if (document.body.classList.contains('tidio-hidden')) { window.tidioChatApi.hide && window.tidioChatApi.hide(); } }); } else { document.body.classList.remove('tidio-hidden'); /* Chat stays closed until Start Session is clicked */ } })(); /* ═══════════════════════════════════════════════════════ SESSION TIMER ENGINE ═══════════════════════════════════════════════════════ */ var timerInterval = null; var totalSeconds = 0; var remainingSeconds = 0; function formatTime(secs) { var m = Math.floor(secs / 60); var s = secs % 60; return pad2(m) + ':' + pad2(s); } function updateTimerUI() { var bar = document.getElementById('sessionBar'); var sbTime = document.getElementById('sbTime'); var sbFill = document.getElementById('sbFill'); var spMin = document.getElementById('spMinutes'); sbTime.textContent = formatTime(remainingSeconds); if (spMin) spMin.textContent = formatTime(remainingSeconds); /* Progress bar fill */ var pct = totalSeconds > 0 ? remainingSeconds / totalSeconds : 0; sbFill.style.transform = 'scaleX(' + pct + ')'; /* Colour states */ var isWarn = remainingSeconds <= 120 && remainingSeconds > 60; var isCrit = remainingSeconds <= 60; sbTime.className = 'sb-time' + (isCrit ? ' critical' : isWarn ? ' warning' : ''); sbFill.className = 'sb-fill' + (isCrit ? ' critical' : isWarn ? ' warning' : ''); } function startTimer() { if (timerInterval) return; var bar = document.getElementById('sessionBar'); bar.classList.add('active'); document.body.classList.add('session-active'); updateTimerUI(); timerInterval = setInterval(function () { remainingSeconds--; localStorage.setItem(LS_KEY_SECS, remainingSeconds); updateTimerUI(); if (remainingSeconds <= 0) { clearInterval(timerInterval); timerInterval = null; remainingSeconds = 0; updateTimerUI(); localStorage.removeItem(LS_KEY_SECS); localStorage.removeItem(LS_KEY_PKG); localStorage.removeItem(LS_KEY_STARTED); /* Send Tidio top-up message */ sendTidioMessage('Your credits have been used. Please top up to continue.'); } }, 1000); } function sendTidioMessage(msg) { try { if (window.tidioChatApi && window.tidioChatApi.messageFromOperator) { window.tidioChatApi.messageFromOperator(msg); } else { /* Retry once Tidio is ready */ document.addEventListener('tidioChat-ready', function () { window.tidioChatApi && window.tidioChatApi.messageFromOperator && window.tidioChatApi.messageFromOperator(msg); }); } } catch(e) {} } function initSession(pkg) { var pkgData = PACKAGES[pkg]; if (!pkgData || pkgData.minutes === 0) return; var saved = parseInt(localStorage.getItem(LS_KEY_SECS), 10); var alreadyStarted = localStorage.getItem(LS_KEY_STARTED) === '1'; var savedPkg = localStorage.getItem(LS_KEY_PKG); /* If we have saved time for the same package, restore it */ if (!isNaN(saved) && saved > 0 && savedPkg === pkg) { totalSeconds = pkgData.minutes * 60; remainingSeconds = saved; } else { totalSeconds = pkgData.minutes * 60; remainingSeconds = totalSeconds; localStorage.setItem(LS_KEY_SECS, remainingSeconds); localStorage.setItem(LS_KEY_PKG, pkg); localStorage.removeItem(LS_KEY_STARTED); alreadyStarted = false; } /* Show session panel */ var panel = document.getElementById('sessionPanel'); var spPkg = document.getElementById('spPkg'); var spMin = document.getElementById('spMinutes'); var startBtn = document.getElementById('startSessionBtn'); if (panel) panel.classList.add('visible'); if (spPkg) spPkg.textContent = pkgData.label + ' Package'; if (spMin) spMin.textContent = formatTime(remainingSeconds); /* If already started (e.g. page refresh mid-session), resume */ if (alreadyStarted && remainingSeconds > 0) { if (startBtn) { startBtn.disabled = true; startBtn.textContent = 'Session Active'; } startTimer(); } /* Start Session click */ if (startBtn) { startBtn.addEventListener('click', function () { if (timerInterval) return; startBtn.disabled = true; startBtn.textContent = 'Session Active'; localStorage.setItem(LS_KEY_STARTED, '1'); /* Open Tidio */ if (window.tidioChatApi && window.tidioChatApi.open) { window.tidioChatApi.open(); } else { document.addEventListener('tidioChat-ready', function () { window.tidioChatApi && window.tidioChatApi.open && window.tidioChatApi.open(); }); } startTimer(); }); } } /* Top-up button scrolls back to packages */ document.addEventListener('DOMContentLoaded', function () { var topup = document.getElementById('sbTopup'); if (topup) { topup.addEventListener('click', function () { /* Clear session state so they can buy a new package */ localStorage.removeItem(LS_KEY_SECS); localStorage.removeItem(LS_KEY_PKG); localStorage.removeItem(LS_KEY_STARTED); /* Strip ?success from URL and reload to show purchase UI */ window.location.href = window.location.pathname; }); } }); /* ═══════════════════════════════════════════════════════ DOM INIT ═══════════════════════════════════════════════════════ */ document.addEventListener('DOMContentLoaded', function () { var dot = document.getElementById('statusDot'); var txt = document.getElementById('statusText'); var preamble = document.getElementById('ctaPreamble'); var avail = document.getElementById('availText'); var packSec = document.getElementById('packagesSection'); var offlineSec = document.getElementById('offlineSection'); var liveBtn = document.getElementById('liveBtn'); var offlineBtn = document.getElementById('offlineBtn'); var promoInput = document.getElementById('promoInput'); var promoApplyBtn= document.getElementById('promoApply'); var promoWrap = document.getElementById('promoFieldWrap'); var promoStatus = document.getElementById('promoStatus'); var promoActive = false; var selectedPkg = null; /* ── Handle ?success=true return ── */ if (isSuccess && pkgFromUrl && PACKAGES[pkgFromUrl] && PACKAGES[pkgFromUrl].minutes > 0) { /* Show the session panel, hide purchase UI */ initSession(pkgFromUrl); /* Hide the store UI so it's clean */ if (packSec) packSec.style.display = 'none'; if (offlineSec) offlineSec.style.display = 'none'; dot.classList.add('live'); txt.classList.add('live'); txt.textContent = 'Payment confirmed'; preamble.innerHTML = 'Your session is ready.
Press Start Session when Belle is ready for you.'; avail.innerHTML = 'Your live session will begin the moment you click Start Session.'; return; /* Skip rest of init */ } /* ── Also check localStorage for an in-progress session ── */ var savedPkg = localStorage.getItem(LS_KEY_PKG); var savedSecs = parseInt(localStorage.getItem(LS_KEY_SECS), 10); if (savedPkg && !isNaN(savedSecs) && savedSecs > 0 && PACKAGES[savedPkg]) { initSession(savedPkg); if (packSec) packSec.style.display = 'none'; if (offlineSec) offlineSec.style.display = 'none'; dot.classList.add('live'); txt.classList.add('live'); txt.textContent = 'Session in progress'; preamble.innerHTML = 'Your session is active.
Press Start Session to resume the timer.'; avail.innerHTML = 'Your live session is ready to continue.'; return; } /* ── Normal page load ── */ if (BELLE_IS_LIVE) { dot.classList.add('live'); txt.classList.add('live'); txt.textContent = 'Belle is live now'; packSec.classList.add('visible'); preamble.innerHTML = 'Choose your credit package below.
Live chat opens immediately after payment.'; avail.innerHTML = 'Sessions begin the moment payment clears.
I am here and ready for you now.'; } else { dot.classList.add('offline'); txt.classList.add('offline'); txt.textContent = 'Currently offline'; offlineSec.classList.add('visible'); preamble.innerHTML = 'I am offline right now but still reading today.
Submit your question below — delivered within 24 hours.'; avail.innerHTML = 'Questions received after payment.
Full reading delivered within 24 hours by email.'; } /* ── Package card selection ── */ var cards = document.querySelectorAll('.pkg-card'); for (var i = 0; i < cards.length; i++) { (function (card) { card.addEventListener('click', function () { for (var j = 0; j < cards.length; j++) cards[j].classList.remove('selected'); card.classList.add('selected'); selectedPkg = card.getAttribute('data-pkg'); liveBtn.disabled = false; }); })(cards[i]); } /* ── Live CTA ── */ liveBtn.addEventListener('click', function () { if (!selectedPkg) return; var link = promoActive ? LINKS[selectedPkg].disc : LINKS[selectedPkg].full; if (link.indexOf('REPLACE') !== -1) { alert('Paste your Stripe link for ' + selectedPkg + ' into the CONFIG block.'); return; } window.location.href = link; }); /* ── Offline CTA ── */ offlineBtn.addEventListener('click', function () { var link = promoActive ? LINKS.offline.disc : LINKS.offline.full; if (link.indexOf('REPLACE') !== -1) { alert('Paste your Stripe Offline link into the CONFIG block.'); return; } window.location.href = link; }); /* ── Promo ── */ function applyPromo() { var val = promoInput.value.trim().toUpperCase(); if (val === PROMO_CODE) { promoActive = true; promoInput.disabled = true; promoApplyBtn.disabled = true; promoApplyBtn.textContent = '\u2713'; promoWrap.classList.remove('invalid'); promoWrap.classList.add('applied'); promoStatus.textContent = '\u2736 BELLE10 applied — 10% off all packages'; promoStatus.className = 'promo-status ok'; var pkgs = ['starter', 'standard', 'premium']; for (var p = 0; p < pkgs.length; p++) { var pkg = pkgs[p]; var cap = pkg.charAt(0).toUpperCase() + pkg.slice(1); document.getElementById('was' + cap).textContent = fmt(PACKAGES[pkg].price); document.getElementById('was' + cap).classList.add('visible'); document.getElementById('price' + cap).textContent = fmt(PACKAGES[pkg].disc); document.getElementById('price' + cap).classList.add('discounted'); } var offWas = document.getElementById('offlineWas'); var offPrice = document.getElementById('offlinePrice'); offWas.textContent = fmt(PACKAGES.offline.price); offWas.classList.add('visible'); offPrice.textContent = fmt(PACKAGES.offline.disc); offPrice.classList.add('discounted'); } else { promoActive = false; promoWrap.classList.remove('applied'); promoWrap.classList.add('invalid'); promoStatus.textContent = 'That code is not recognised.'; promoStatus.className = 'promo-status err'; setTimeout(function () { promoWrap.classList.remove('invalid'); }, 400); } } promoApplyBtn.addEventListener('click', applyPromo); promoInput.addEventListener('keydown', function (e) { if (e.key === 'Enter') applyPromo(); }); });