Money Quiz

Is Your Child Ready to Learn About Money?

Bunnies & Monies

Is Your Child Ready to Learn About Money?

Money lessons don't start with a bank account. They start with everyday moments: waiting for a treat, sharing a toy, counting out loud. This quiz has two fun rounds, and the second one you'll do together with your child (age 3+).

🧑‍🍼 Grown-Up Round 5 quick questions for you
🐰 Kid's Turn 5 playful activities together
This quiz offers a friendly starting point, not a professional assessment. Every child (and parent!) grows into money readiness at their own pace.
`; const blob = new Blob([html], { type: 'text/html' }); const url = URL.createObjectURL(blob); const a = document.createElement('a'); a.href = url; a.download = 'money-chore-chart.html'; document.body.appendChild(a); a.click(); document.body.removeChild(a); setTimeout(() => URL.revokeObjectURL(url), 4000); } /* ============ SHARE WITH ANOTHER PARENT ============ */ async function shareWithParent(){ const shareText = "I just took the Bunnies and Monies Money Readiness Quiz with my child. It is a fun way to check if your little one, age 3 and up, is ready to start learning about money. Give it a try!"; const noteEl = document.getElementById('shareNote'); noteEl.hidden = true; async function tryNativeShare(payload){ if (!navigator.share) return false; try { await navigator.share(payload); return true; } catch (err){ return !!(err && err.name === 'AbortError'); // user cancelled counts as handled } } let handled = false; try { const htmlContent = '\n' + document.documentElement.outerHTML; const file = new File([htmlContent], 'bunnies-and-monies-money-quiz.html', { type: 'text/html' }); if (navigator.canShare && navigator.canShare({ files: [file] })){ handled = await tryNativeShare({ files: [file], title: 'Bunnies and Monies Money Quiz', text: shareText }); } } catch (e) { /* fall through to the next option */ } if (!handled){ handled = await tryNativeShare({ title: 'Bunnies and Monies Money Quiz', text: shareText }); } if (!handled){ try { await navigator.clipboard.writeText(shareText); noteEl.textContent = "Copied a message to share! Paste it into a text, email, or DM to invite another parent."; } catch (e) { noteEl.textContent = shareText; } noteEl.hidden = false; } } /* ============ CONFETTI (self-contained, no external libs) ============ */ function fireConfetti(durationMs, count){ const canvas = document.getElementById('confettiCanvas'); canvas.hidden = false; canvas.width = window.innerWidth; canvas.height = window.innerHeight; const ctx = canvas.getContext('2d'); const colors = ['#6c9bad', '#8baf8c', '#ffb92c', '#ff7e7e', '#6c9bad']; const particles = Array.from({ length: count }).map(() => ({ x: Math.random() * canvas.width, y: -20 - Math.random() * canvas.height * 0.4, r: 4 + Math.random() * 5, color: colors[Math.floor(Math.random() * colors.length)], speedY: 2 + Math.random() * 3, speedX: -2 + Math.random() * 4, rot: Math.random() * 360, rotSpeed: -6 + Math.random() * 12, shape: Math.random() > 0.5 ? 'circle' : 'rect' })); let start = null; function frame(ts){ if (!start) start = ts; const elapsed = ts - start; ctx.clearRect(0, 0, canvas.width, canvas.height); particles.forEach(p => { p.x += p.speedX; p.y += p.speedY; p.rot += p.rotSpeed; ctx.save(); ctx.translate(p.x, p.y); ctx.rotate((p.rot * Math.PI) / 180); ctx.fillStyle = p.color; if (p.shape === 'circle'){ ctx.beginPath(); ctx.arc(0, 0, p.r, 0, Math.PI * 2); ctx.fill(); } else { ctx.fillRect(-p.r, -p.r / 2, p.r * 2, p.r); } ctx.restore(); }); if (elapsed < durationMs){ requestAnimationFrame(frame); } else { ctx.clearRect(0, 0, canvas.width, canvas.height); canvas.hidden = true; } } requestAnimationFrame(frame); } window.addEventListener('resize', () => { const canvas = document.getElementById('confettiCanvas'); canvas.width = window.innerWidth; canvas.height = window.innerHeight; });