• The seven-slot tray IS the game — with unlimited room a child can tap anything and eventually win, which teaches nothing
  • Every piece is a real Kidsquare painting from the 149 vocabulary cut-outs already on disk — not one new image was commissioned
  • Because the pieces are real things it is a naming game as well as a matching one, instead of a test of colour
  • It can genuinely be lost — seven different things ends the round, said plainly, board offered again, and the child is never called anything
  • The last two slots are ringed in rose from the start, so the limit is visible before it bites rather than announced when it does
  • Every heap verified before any UI (npm run verify:match3): every kind must come in threes, or some piece can never be cleared however well it is played
  • The verifier PLAYS each board kind-by-kind to prove it clears, and checks every painting is actually on disk — a match-three whose pieces 404 is a heap of broken images
  • Play-tested at 390px: the first heap clears, no vocab 404s, no console errors, no overflow
  • The board's own background is gone: the pieces lie on the painted wood itself, instead of inside a blue box cut through the middle of the kitchen
  • Pieces come from the TRANSPARENT cut-outs, not the cream-card tiles — a card on painted wood reads as a sticker rather than a thing lying on a table
  • One screen, no scrolling: the table is an absolutely-positioned layer over the whole stage and the words float clear of its back edge, so a longer line grows UP into the wall instead of pushing the table off the bottom
  • Where the tabletop is lives in ONE place (TABLE in lib/matchthree.ts), measured off the plate — and it is the same fraction of every screen, because the plate is wider than any stage that shows it
  • A second rule on the same table — หยิบตามคำสั่ง: the card names one thing and you take every one of it, with a listen button. A naming-and-listening game out of pieces that were already painted
  • Two players on either rule: turns, a pile each, one shared table, most taken wins
  • Two players take TURNS rather than racing — one screen cannot tell two fingers apart, and the child who loses that ambiguity is the one least able to work out why
  • With two players the tray limit is off and the table running out is the clock — nobody is knocked out of a game their friend is still playing
  • A tap the card did not ask for is answered by SAYING WHAT IT IS, out loud — a child reaching for the banana when the card says apple has told you exactly which word they need
  • Two misses in a row and the right pieces start to glow; four and a calm line appears — and the glow is never taken back as a punishment
  • The verifier also plays the CARDS to the end, not just the three-of-a-kind route — a card asking for something no longer on the table is a table nobody may legally touch
  • The heap is TIPPED OUT rather than laid out — one piece after another, ninety milliseconds apart, dropping from just above the table and bouncing once
  • Twice the heap — 18 / 24 / 30 pieces at three, four and five rows of six — with every piece measured in the browser at 390px to prove it still clears the 46px tap floor
  • The front row is held back to x ≤ 72: the host stands in the bottom-right corner of a phone, and a piece there is a piece a child taps and gets a teddy bear
  • Paint a kitchen table FOR this game — today's plate is the 16:9 kitchen re-cropped, so the top shelf and both far edges fall outside the frameplanned
  • A fruit-and-vegetable-only heap, tied straight to the food vocabulary setplanned

✓ = done · ☐ = planned. Every game is built one step at a time like this.