TITLE: Living Letterforms — a word that refuses to hold still PROMPT: Build a single self-contained HTML5 page that renders the word "BLOOM" as a colony of living cells on a full-viewport petri dish, using one 2D canvas and no fonts for the letterforms. Palette: deep moss #101c17, cytoplasm #7ae582, pale nucleus #c8f7c5, membrane #f4a261, bone #e9f5db. Structure: a .stage (100dvh) with a radial agar background (circle at 50% 44%, #17322b to #0a120f), two soft nutrient blooms as radial-gradients, a CSS petri dish (min(96vw,82vh) circle, 1px bone border at 11% alpha, inset 140px green glow, a dashed inner ring and faint crosshair rules via ::before/::after), the canvas, and four monospace HUD blocks. The letterforms are not a font: define each glyph as polyline skeletons on a 5-wide by 7-tall unit grid (B has three strokes, O is an eight-point loop, M is a zigzag, etc.), sample each polyline every 0.5 units, and drop a circular metaball at every sample. Render with a hand-rolled metaball field: keep a Float32Array at 0.45 of CSS size, zero it each frame, and splat every blob over its bounding box with w = 1 - d^2/r^2 and field += w*w; then walk only the union bounding box and write an ImageData pixel by pixel — alpha = clamp((f-0.28)*3.4), core mix k = clamp((f-0.9)*0.95) blending #7ae582 toward #c8f7c5, and an orange membrane rim of (1 - (f-0.28)*2.1) blending 80% toward #f4a261, plus a drifting nutrient term 0.5+0.5*sin(x*0.014 - t*0.5) that adds 16 to green and 7 to red. putImageData to an offscreen canvas and drawImage it up to CSS size with imageSmoothingEnabled for a soft organic edge. Each blob has a random phase, speed and amplitude: its radius breathes r*(1 + amp*sin(t*sp + ph)), its position wobbles on two different sine frequencies, and springs (k=95, damping=13, four substeps) return any offset to home so letters visibly bloom apart and re-form. Typography: HUD and buttons are ui-monospace letterspaced 0.2em to 0.42em in bone at 58% alpha with values in #7ae582; the caption uses system-ui 800 uppercase at clamp(15px,2.1vw,24px) with 0.62em tracking and a green text-shadow. Layout: specimen readout top-left (GEN / CELLS / TURGOR with a scaleX bar), palette key top-right with round swatches, caption bottom-centre, Split and Re-seed buttons bottom-right, hint bottom-left. Interaction: pointermove feeds cells within 170px so they swell; pointerdown on a cell splits it into two spring-loaded daughters that drift out and merge back; dragging a cell pulls it up to 190px from home while a spring snaps it back on release; R re-seeds the next word; Split and Re-seed buttons do the same; the generation counter ticks on every split. Honour prefers-reduced-motion by zeroing the ambient wobble, the auto-split timer and the nutrient drift while keeping all interaction physics live and rendering one complete static frame. All CSS inline in one