(() => { 'use strict'; let overlay = null; let lastScore = 0; let lastNewBest = false; async function getBest(label) { const key = 'best-score:' + label; const legacyHighScore = Number(localStorage.getItem('highScore')) || 0; const stored = Number(await window.ParleySave?.load?.(key)) || Number(localStorage.getItem(key)) || legacyHighScore || 0; return { key, best: stored }; } async function show({ score = 0, wave = 1, label = 'nova-tap' } = {}) { if (!overlay) return; lastScore = score; const { key, best: previousBest } = await getBest(label); const best = Math.max(previousBest, score); lastNewBest = best > previousBest; if (lastNewBest) { await window.ParleySave?.save?.(key, best); try { localStorage.setItem(key, String(best)); localStorage.setItem('highScore', String(best)); } catch (_) {} } else { try { const legacyHighScore = Number(localStorage.getItem('highScore')) || 0; if (best > legacyHighScore) localStorage.setItem('highScore', String(best)); } catch (_) {} } overlay.querySelector('[data-slot="score"]').textContent = Math.floor(score).toLocaleString(); overlay.querySelector('[data-slot="best"]').textContent = Math.floor(best).toLocaleString(); overlay.querySelector('[data-slot="wave"]').textContent = String(wave); overlay.querySelector('[data-slot="newbest"]').textContent = lastNewBest ? 'NEW HIGH SCORE!' : 'Chase your best run.'; overlay.classList.add('visible'); } function hide() { overlay?.classList.remove('visible'); } function mount() { overlay = document.createElement('div'); overlay.id = 'parley-gameover-overlay'; overlay.innerHTML = `

Run Over

Chase your best run.

Final score0
Best score0
Reached wave1
`; document.body.appendChild(overlay); overlay.addEventListener('click', async (event) => { const action = event.target.closest('[data-action]')?.dataset.action; if (action === 'restart') { hide(); window.dispatchEvent(new CustomEvent('parley:restart')); } if (action === 'share') { const text = `I scored ${Math.floor(lastScore).toLocaleString()} in Nova Tap!`; const url = `https://twitter.com/intent/tweet?text=${encodeURIComponent(text + ' ' + location.href)}`; window.open(url, '_blank', 'noopener,noreferrer'); } }); } window.addEventListener('DOMContentLoaded', mount); window.ParleyGameOver = { show, hide, get lastNewBest() { return lastNewBest; } }; })();