← Pick My Costume

Who’s hiding
in costume?

Pick a way to play.

📖 StorytimeCostumes as bedtime stories

Who’s peeking?

Who’s peeking?

Match the pieces

Tap a piece, then its costume.

Mystery basket!

You get these 4 things. Which costume can you build?

Costume star!

You found 3 out of 3

Those costumes couldn’t fool you.

Find your costume: take the 2-minute quiz

/* 2026-09-28 Play tab: minimal game analytics. Guarded so ad-blockers never break play. */ (function(){ function cap(name, props){ try { if (window.posthog && posthog.capture) posthog.capture(name, props || {}); } catch(e){} } var curMode = ''; document.addEventListener('DOMContentLoaded', function(){ /* 2026-09-28: distribution attribution. A shared game link carries ?s=; record the recipient landing so the play -> share -> play loop is measurable. */ try{ var sm=/[?&]s=([a-z0-9]{8})/.exec(location.search||''); if(sm){ var om=/[?&]o=([a-z0-9_-]+)/.exec(location.search||''); cap('play_shared_opened',{share_id:sm[1],origin:om?om[1]:'unknown'}); } }catch(e){} var s1 = document.getElementById('start'), s2 = document.getElementById('startMaterials'), s3 = document.getElementById('startChopped'); if (s1) s1.addEventListener('click', function(){ curMode='peek'; cap('play_started', {mode:'peek'}); }); if (s2) s2.addEventListener('click', function(){ curMode='match'; cap('play_started', {mode:'match'}); }); if (s3) s3.addEventListener('click', function(){ curMode='chopped'; cap('play_started', {mode:'chopped'}); }); var fin = document.getElementById('finish'); if (fin && window.MutationObserver) { var fired = false; new MutationObserver(function(){ if (!fired && fin.classList.contains('active')) { fired = true; var sc = document.getElementById('score'); cap('play_completed', {mode: curMode, stars: sc ? sc.textContent : ''}); } }).observe(fin, {attributes:true, attributeFilter:['class']}); } var again = document.getElementById('again'); if (again) again.addEventListener('click', function(){ fired = false; }); }); })();