A morphogenesis lab whose one job is to prove that pattern needs no plan. This page is the bench notes: the palette, the type, the shader, and the three passes that took it from working to finished.
MORPHÊ is a fictional morphogenesis lab running a live Gray–Scott reaction–diffusion culture in real GLSL. The single job of the page is to let a visitor inoculate a petri plate with the cursor and watch a Turing pattern grow and lock in — spots, stripes, coral, mitosis — driven by nothing but two diffusing reactants. It is aimed at the design-and-science-curious: people who will believe an effect is real once they can nudge it and watch physics answer back.
A warm nutrient cream, one activator colour, one reaction-front colour, and a near-black ink with a green cast. Coral is bright (~3:1 on agar) so it is reserved for marks, pattern edges and the display letter — never body text. Text is carried by ink and deep teal, both clearing 4.5:1.
FLOAT target, drops to HALF_FLOAT, and if neither is available reveals a CSS petri-dish fallback — no blank plate, ever.document.fonts.ready, then quiet scroll reveals. The dish, rim and glass specular are pure CSS.The signature elementThe plate is a genuine numerical simulation, not a texture or a loop. Concentrations of activator U and inhibitor V live in the red and green channels of a float texture. Each step, a fragment shader samples the eight neighbours of every cell to approximate the Laplacian, applies U − U·V² + f(1−U) and V + U·V² − (f+k)V, and writes the new concentrations to the second texture; the two then trade roles for the next step. Your cursor runs a third shader that raises V in a small disc — a seed — and diffusion carries the rest. Change f and k by a few thousandths and the same code grows a leopard, a fingerprint, a reef, or a colony that divides forever.
U/V mentions in the prose a real style (deep-teal, medium weight) so they read as the same variables that appear in the equation block — the reference was previously undefined and rendering as plain ink.ch width so the ever-growing iteration counter can no longer nudge the feed/kill values sideways as it gains digits.