<!DOCTYPE html><htmllang="en"><head><metacharset="utf-8"><metaname="viewport"content="width=device-width, initial-scale=1"><linkrel="icon"href="/images/xigoi-thicc.svg"><linkrel="stylesheet"href="/styles/main.css"><scriptasyncsrc="/scripts/counter.js"></script><scriptasyncsrc="/scripts/hover-prefetch.js"></script><linkrel="stylesheet"href="bingo.css"><scripttype="module"src="bingo.js"></script><title>Bingo | xigoi</title></head><body><ahref="/"aria-label="Go to main page"><header><svgid="xigoi-logo"width="2cm"height="2cm"viewBox="-7 -2 24 24"xmlns="http://www.w3.org/2000/svg"><title>xigoi logo</title><pathd="M 0 20 L 9 8 A 5 5 0 1 0 1 8 L 4 12 A 5 5 0 0 0 8 14 A 2 2 0 0 1 10 16 A 4 4 0 0 1 2 16 A 5 5 0 0 1 3 13 A 10 10 0 0 0 5 7"stroke="#0ff"stroke-width="1"></path><circlecx="5"cy="5"r="1"fill="#f80"></circle></svg><divclass="xigoi">xigoi</div></header></a><h1>Bingo</h1><noscript><divclass="error">This page requires JavaScript to function properly. Please enable scripts in your browser.</div></noscript><templatev-if="bingoGenerated"><divclass="bingo-grid-wrapper"><tableclass="bingo-grid"><trv-for="row in grid"><tdv-for="cell in row"v-bind:class="{crossed: cell.crossed}"v-on:click="cell.crossed = !cell.crossed"class="bingo-cell">{{cell.text}}</td></tr></table></div><p><buttonv-on:click="bingoGenerated = false">Change</button></p></template><templatev-else><p><labelfor="bingo-input">Phrases (one per line):</label></p><p><textareaid="bingo-input"v-model="input"class="bingo-input"></textarea></p><p><labelfor="bingo-size-input">Size: </label><inputid="bingo-size-input"type="number"v-model.number="gridSize"min="2"></p><p><buttonv-if="enoughPhrases"type="button"v-on:click="generate">Generate</button><divv-if="!enoughPhrases"class="error">You need at least {{gridSize * gridSize}} phrases to generate a bingo of size {{gridSize}}, but you have only {{phrases.length}} phrase{{phrases.length === 1 ? '' : 's'}}.</div></p></template></body></html>