Professor Oops

Water in paper

Water in paper

Water creeps through the paper and takes the colour with it

Put a drop of water on a black marker dot and it opens into rings of blue, pink and yellow. Let tea dry and its edge turns darker. Wash over a pencil drawing and the line stays put. In Professor Oops these all come from water moving between neighbouring specks of paper, with everything dissolved in it riding along at its own pace.

Painted illustration of paper strips and a coffee filter in glasses of water, where black marker dots have spread into blue, pink and yellow bands, watched by the painter.

Water soaks in, creeps into drier paper and dries, with a ragged edge like real paper

The sheet in Professor Oops is a grid of tiny squares, each about half a millimetre across. Every square remembers two kinds of water: a puddle standing on top, and water that has soaked into the fibres.

Drop water on the page and the puddle sinks in over two or three seconds. From then on, soaked-in water creeps to drier squares next door, a little every thirtieth of a second. It doesn't spread in a perfect circle. Each square has its own grain, fixed when the sheet is made, and where the grain is stronger water passes on more readily. That is why the edge of a wet patch comes out ragged, as on real paper.

All the while the paper dries. At room temperature a soaked patch is dry in a little over two minutes. Warm paper dries many times faster. Because the spreading slows as the water thins out, a soaked patch stops growing a few millimetres past its edge, where the drying and the creeping balance out (about 3 mm in a stand-alone copy of the rule).

Keeping water on the sheet apart from water in the fibres, and carrying colour to the edges, is inspired by the watercolour work of Curtis 1997. The game gets there with a much simpler local rule.

Water creeps through the paper and takes the colour with it

For engineers

Water creeps through the paper and takes the colour with it

Up to 512 × 384 cells of about half a millimetre each. A 30 Hz pass moves soaked-in water between neighbours by a grain-weighted diffusion rule; each exchange is worked out once, and every dissolved element, dye and pigment rides it at its own share. Salt crusts wick through an alternating-direction implicit solve, more than ten times past the explicit stability limit, with water conserved to one part in a million over 600 solves (pinned by a test).

Under the hood
Water soaks in, creeps into drier paper and dries, with a ragged edge like real paper

Under the hood

Water soaks in, creeps into drier paper and dries, with a ragged edge like real paper

Each cell holds its state as a few floats: standing water, soaked-in wetness, its grain, and colour per channel as absorbance (shown as e−abs), with how much of that colour is dissolved dye and how much is held in the fibres. Salt has a crystal form and a dissolved form.

The paper pass runs at 30 Hz, on alternate ticks of the 60 Hz engine: soaking in, then the capillary exchange for each neighbour pair, then drying. Soaking slows as a cell fills. The exchange is plain linear diffusion, its rate set by the two cells' grain and capped for stability. Drying is a steady loss that rises with the shared temperature field.

The grain is fine noise blended with noise stretched along one direction, fixed when the sheet is made. Noise in the fibres gating the flow is an idea from Chu 2005. A nearly dry cell sends nothing but can still receive.

Standing water evens out its surface toward lower neighbours, with a limit per exchange, and lies still once it is thin. In the next update it gets momentum, through virtual pipes with thin-film drag next update.

Try it: drop water on paper

The game's own rule Two drops have just landed. Tap the paper to add more, or press Add a drop. What to look for: the puddle (bright blue) sinks in within seconds, the soaked patch creeps outward with a ragged edge, then stops and dries. Turn the grain off and the edge goes smooth. Warm the paper and watch it dry far faster. The grid is 100 × 75 cells, a 5 × 3.75 cm corner of the page.

A corner of paper seen from above: blue drops of water soaking in, spreading with a ragged edge and drying
20 °C
Clock
since the last drop
—
soaked area
—
puddle on top
—
drying rate
—
A soaked patch dries in a little over two minutesLines: the game's drying rule on its own, with nothing else moving the water. The measured middle falls faster later on, likely because its water also spreads outward.

The measured middle falls from 0.97 at 5 s to under 0.05 at 135 s; the drying rule alone reaches zero at 166.7 s at room temperature and at 14.3 s at 60 °C.

A soaked patch dries in a little over two minutes0.00.20.40.60.81.0020406080100120140160secondswetness in the middleA soaked patch dries in a little over two minutes0.00.20.40.60.81.0050100150secondswetness in the middle
  • measured in the released game
  • drying rule alone, room temperature
  • drying rule alone, 60 °C
Data table
A soaked patch dries in a little over two minutes
secondsmeasured in the released gamedrying rule alone, room temperaturedrying rule alone, 60 °C
011
50.97
14.30
650.59
1250.12
1350.05
166.70

Source: Measured: the middle of a soaked patch on the released engine (the last point is "under 0.05").

Everything dissolved rides the same water, each at its own pace

Salt, vinegar, soap, tea, food colouring, ink and watercolour all travel through the paper by the same means: the water moving from one speck to the next. The game works out each of those little exchanges of water once. Then every dissolved thing in the cell rides it, at its own share.

Salt and acid ride each exchange in full. Free dye, such as food colouring, goes nearly as fast. The grains of a watercolour paint go too, but only while the paper is really wet: as it dries, the fibres catch them. Pencil hardly moves, because almost all of it is held in the fibres.

This is how the game connects so many things without a rule for each pair. Nothing in that loop says "tea" or "vinegar". A new dissolved substance is described by its properties, and from then on it rides the water. The released game has 12 kinds of dissolved element; the next update has 21 next update.

Under the hood
Everything dissolved rides the same water, each at its own pace

Under the hood

Everything dissolved rides the same water, each at its own pace

Each pair's water exchange is worked out once and kept, so everything dissolved can ride it without working the water out again. What moves between two cells has two parts:

  • an evening-out between the two, which needs both cells wet;

  • an upwind carry with the water: the share of water that actually moved, plus a tuned pull down the wetness gradient. On soaked paper that pull is the bigger part, so salt runs ahead of the water that moved.

Each kind of rider then takes its own share of that:

  • Salt, acid, sugar, soap: all of it.

  • Free dye: a little less, and less still as the paper dries.

  • Watercolour grains: a share that shrinks fast as the paper dries, plus the pull.

  • Pencil, coloured pencil, crayon: nearly all held in the fibres; the small rest moves as grains.

Elements, stains still setting, pigment and dye all ride these same per-pair numbers.

Try it: one flow of water, six riders

The game's own rule Each strip is the same 28 cells (14 mm) of paper, with water poured on the left end and a band of something at cells 3 to 6. From the top: water in the paper, salt, food colouring, the marker's pink, the marker's yellow, watercolour grains and pencil; the small mark under each strip sits at the middle of what it carries. The water moves the same way in every strip; only the rider's share differs. What to look for: salt runs furthest, free dye nearly as far, the marker's pink lags and its yellow stays home, and pencil doesn't budge. Pour less water and the watercolour grains stay behind. The clock runs 4× fast.

Seven strips of paper: water poured at the left end, and salt, food colouring, marker pink, marker yellow, watercolour grains and pencil each carried a different distance by it
1.20
Clock
salt
—
dye
—
pink
—
yellow
—
grains
—
pencil
—

A black marker dot splits into blue, pink and yellow

This is the classic kitchen-table experiment, and it happens in the game by itself. A black marker in the game is made of three dyes that cling to the fibres by different amounts. Drop water on the dot and the water spreads outward, carrying the blue dye almost as fast as itself, the pink well behind, and the yellow hardly at all. The blue ends up as a ring at the edge, the pink as a band inside it, the yellow in the middle. Blue food colouring clings to nothing, so it stays one colour as it spreads.

An automated test puts a real marker dot and a real drop on a page and checks that the dot dries into clear bands, with the blue ring outside and the yellow at the centre. Another checks that blue food colouring keeps its hue to within 2 %. In the released game every marker splits the same way; in the next update each ink has its own next update.

Try it: marker chromatography

The game's own rule A black dot has just had a drop of water put on it. Pick a tool and tap the paper to add more, or use the buttons. What to look for: the blue rides out to the edge, pink stops halfway, yellow stays. Squeeze the dye speeds together with the slider and the rings smear into one, which is why the game spreads them far apart. Food colouring never splits.

A black marker dot on paper under a drop of water, opening into a blue ring, a pink band and a yellow centre
Tap to add
Ink
1.00
Clock
mean distance from the dot: blue
—
pink
—
yellow
—
dye speeds: blue
—
pink
—
yellow
—
One minute after the drop, each dye sits at its own distanceCells are about 0.5 mm. An automated test checks the same scene in the game ("dries into clear bands").

At 60 s yellow is strongest at the centre (0.82), pink around cell 6 (0.37) and blue around cells 8 and 9 (0.43).

One minute after the drop, each dye sits at its own distance0.00.20.40.60.80246810distance from the centre, cellsabsorbanceOne minute after the drop, each dye sits at its own distance0.00.20.40.60.80246810distance from the centre, cellsabsorbance
  • blue (cyan) dye, fastest
  • pink (magenta) dye, slower
  • yellow dye, slowest
Data table
One minute after the drop, each dye sits at its own distance
distance from the centre, cellsblue (cyan) dye, fastestpink (magenta) dye, sloweryellow dye, slowest
00.050.280.82
10.050.280.82
20.060.290.8
30.070.310.76
40.090.330.64
50.110.350.41
60.160.370.15
70.250.330.02
80.420.180
90.430.040
100.0700
11000

Source: The game's rule in a stand-alone copy (the same rule as the demo above), a black-marker dot under one drop, averaged in rings at 60 s. Arithmetic, not a measurement of the game.

A black marker dot under a drop of water in the game, opened into a blue ring, a pink band and a yellow centre.
In the game. A black marker dot one minute after a drop of water, on a blank sheet.

Drying edges turn darker because the colour really travels there

Paint a watercolour wash, leave it, and its edge slowly darkens. Nobody draws that rim. As the wash dries, the thin edge loses its water first, water from the middle creeps out to even it up, and the colour goes with it. Measured in the released game, a watercolour dab's rim is 1.15 times as dark as its middle after a minute and 2.54 times after three. An ink drop gets there faster.

Real coffee rings form for a related reason: at a pinned edge, water evaporates fastest and is replaced from inside, and that outward flow carries the grains Deegan 1997. The game's paper dries at the same rate everywhere, so the mechanism differs, though the result points the same way. The game also adds a tuned pull toward the drier side; in a copy of the rule, that about doubles the rim.

A tear dries the same way, into a faint ring of salt. Tears carry a little salt; it rides the water to the edge and crystallises there as the paper dries. An automated test checks that the edge holds at least 1.3 times the middle's salt, and that 95 % of it is still on the page.

Under the hood
Drying edges turn darker because the colour really travels there

Under the hood

Drying edges turn darker because the colour really travels there

Measured on the released engine, rim against centre: for a watercolour dab 1.02, 1.15 and 2.54 at 20, 60 and 180 s; for an ink drop 1.44 and 4.15 at 20 and 60 s. A test holds a wash's rim to 1.3 to 2.5 times the inside, soft, a few cells wide, and its hue to within 3° of the wash.

In a stand-alone copy of the rule, switching the edge pull off still dries a rim from the water's own carry alone, only fainter. The chromatography hardly depends on it.

One seam: where wet paper meets dry, the rule also adds a faint yellow-brown tint for dirt and sizing. It makes colour from nothing. In the copy of the rule it stays far too faint to see for a plain drop, so the visible rim is colour that moved.

Salt crystallises when a cell is nearly dry with nothing standing on it, whatever the amount, and dissolves again once the paper is wet enough.

The rim of a drying wash grows darker than its middle

A watercolour dab goes from 1.02 at 20 s to 2.54 at 180 s; an ink drop from 1.44 at 20 s to 4.15 at 60 s.

The rim of a drying wash grows darker than its middle01234050100150seconds after paintingrim ÷ middleThe rim of a drying wash grows darker than its middle01234050100150seconds after paintingrim ÷ middle
  • watercolour dab
  • ink drop
Data table
The rim of a drying wash grows darker than its middle
seconds after paintingwatercolour dabink drop
201.021.44
601.154.15
1802.54

Source: Measured on the released engine.

A blue watercolour dab in the game, dried with a darker rim.
In the game. A watercolour dab three minutes on, darker at its edge. Nothing draws the rim; the colour moved there.

Tea holds on to paper; fresh cabbage juice still runs

Some things in water stick to the paper fibres. Tea's tannin does, and so do red cabbage's dye, turmeric and rust. While the paper is soaked, only a small part of them floats free in the water; the rest clings. As the paper dries, all of it sets. Wet a dried tea stain again and it stays where it is: an automated test keeps over 90 % of the stain's colour under a fresh drop. The test's notes record that before this rule, the same drop washed the colour down to 75 %.

Fresh cabbage juice is different. Liquid that has just arrived stays free until it dries, so new juice still bleeds and runs. Drop vinegar on cabbage-dyed paper and you get a pink spot with a soft rim, because only a small part of the dye is free to move.

A tea bag dabbed on the page also dries with a darker edge, at least 1.6 times the middle in the same test.

A dried tea-bag stain in the game, brown with a darker edge.
In the game. A tea bag dabbed down a few times on one spot of a blank sheet, two minutes later, darker at its edge.
Under the hood: clinging, as one equilibrium
Clinging, as one equilibrium

Under the hood

Clinging, as one equilibrium

Of a clinging element, the share free in the water settles toward a linear partition between water and fibre, the simplest honest isotherm, and the more an element clings the more slowly it lets go.

free share = w / (w + K)

w: how wet the paper is (1 = soaked). K: how hard the element clings. The chart below draws this curve for the four clinging elements.

Each element has one number for how hard it clings, typed in and ordered by chemical reasoning, not measured: cabbage's anthocyanin clings least of the four, then tea's tannin, turmeric's curcumin, and rust's iron most. Everything else doesn't cling at all. As the paper dries, the free part sets. How much of a stain's visible colour is held follows from the same number, so the grip is typed once and everything else follows from it.

Why a tea stain doesn’t rinse out: only a sliver is ever freeTurmeric also dissolves only a little.

On soaked paper (wetness 1) about 12.5 % of red cabbage is free, 6.3 % of tea, 2.4 % of turmeric and 1 % of rust.

Why a tea stain doesn’t rinse out: only a sliver is ever free0510150.00.20.40.60.81.01.2wetness of the paper (1 = soaked)share free in the water, %Why a tea stain doesn’t rinse out: only a sliver is ever free0510150.00.51.0wetness of the paper (1 = soaked)share free in the water, %
  • red cabbage
  • tea
  • turmeric
  • rust
Data table
Why a tea stain doesn’t rinse out: only a sliver is ever free
wetness of the paper (1 = soaked)red cabbageteaturmericrust
00000
0.050.7090.3320.1250.05
0.11.4080.6620.2490.1
0.152.0980.990.3740.15
0.22.7781.3160.4980.2
0.253.4481.6390.6210.249
0.34.111.9610.7440.299
0.354.7622.280.8670.349
0.45.4052.5970.990.398
0.456.042.9131.1120.448
0.56.6673.2261.2350.498
0.557.2853.5371.3560.547
0.67.8953.8461.4780.596
0.658.4974.1531.5990.646
0.79.0914.4591.720.695
0.759.6774.7621.840.744
0.810.2565.0631.9610.794
0.8510.8285.3632.0810.843
0.911.3925.662.20.892
0.9511.955.9562.320.941
112.56.252.4390.99
1.0513.0436.5422.5581.039
1.113.586.8322.6761.088
1.1514.117.1212.7951.137
1.214.6347.4072.9131.186
1.2515.1527.6923.031.235
1.315.6637.9753.1481.283

Source: A linear partition between water and fibre, with each substance's grip typed in by chemical reasoning, not measured.

Pencil survives a wash; marker runs

Draw with a grey pencil and a marker, then pour water over both. The marker line bleeds and blurs; the pencil line stays crisp, and the water goes right across it. That matches what happens on a real desk, and it's why artists sketch in pencil under a watercolour.

The game knows this because every drawing tool says how much of its colour is held in the fibres against water. Pencil, coloured pencil and crayon hold nearly all of it. Marker ink and watercolour are dissolved or loose, so water moves them. In an automated test, pencil and crayon keep over 95 % of their line under poured water, and watercolour and marker keep under 60 %.

Crayon does a second job. Its wax keeps colour out, so a white crayon drawing appears through a watercolour wash, the old wax-resist trick (Pencil, crayon and paper).

Under the hood
Pencil survives a wash; marker runs

Under the hood

Pencil survives a wash; marker runs

One shared rule decides what water may move, per colour channel: whatever colour isn't held in the fibres.

Every water mover reads it: bleeding, riding to a drying edge, running down an upright sheet, soap's flow on wet paper, a wet paw lifting colour, a wet smear, and their WebAssembly twins.

It's per channel because one number didn't work. Absorbance adds, so what's held of one colour never takes from what's free of another. The test's notes give before and after: with one number for all three colours, a pencil line kept 27 to 33 % of its graphite under a wash; per channel, 90 to 97 %.

In the game, a grey pencil line still crisp next to a black marker line that bled after water went over both.
In the game. The same water over a grey pencil line and a marker line. The pencil's colour is held; the marker's is free.
Painted illustration of the painter brushing blue watercolour over paper, revealing a white crayon fish and bubbles.
Wax resist. Crayon's wax keeps the colour of a wash out, so a white crayon drawing shows through.

Touch a wet brush to a line of salt and the colour races along it

Salt painting is a favourite at home and in class: draw with glue, sprinkle salt on it, touch a wet brush to the line and watch the colour race along it. The game does this too. Salt crystals in a crust are porous, so the game lets water pass through them far faster than through paper. Touch a wet brush to one end and the colour runs along the line.

Fast is a problem for a simulation. The simple way to compute spreading takes small steps, and if one step tries to even out more than half the difference between two neighbours, the numbers start to swing wildly and blow up. Through salt each step would go more than ten times past that limit. So for salt the game uses a different kind of solver, one that works out where the water ends up rather than only where it's heading. It stays calm however fast the water goes.

It also never makes or loses a drop. Computers round every number a little, and an earlier version slowly made water out of rounding. Now each exchange is worked out once and taken from one cell and given to the next, so the total stays put. A test pins it to within one part in a million over 600 solves.

Under the hood
Touch a wet brush to a line of salt and the colour races along it

Under the hood

Touch a wet brush to a line of salt and the colour races along it

Each cell has a porosity: salt crust and bread's airy crumb are porous, plain paper is not. Over wet porous areas, at 15 Hz, the game solves the implicit (backward Euler) diffusion step exactly: a tridiagonal system along every row, then every column, with the order swapped each pass so neither direction comes out ahead. Through full salt water evens out more than a hundred times faster than through paper.

(1 + 2c) w′i − c w′i−1 − c w′i+1 = wi

One backward Euler step along a row: w is the wetness before the step, w′ after, c the exchange rate per step. The explicit step, w′i = wi + c (wi−1 − 2wi + wi+1), swings once c passes 0.5; this one does not.

Water only goes on from a cell that was already wet as the pass began, so a front moves at most one cell a solve, about 8 mm a second. Each cell's new value is built from the solved fluxes, so what leaves one cell is exactly what enters the next, in JavaScript and in single-precision SIMD alike. The old form made 1.2e-4 of total wetness out of rounding over a long wash.

In WebAssembly the column sweep runs four columns at a time.

Try it: the same salt line, solved two ways

The game's own rule A wet dab sits at the left end of a salt line of 80 cells (4 cm). The top line uses the game's implicit solve; the bottom one the simple explicit step, with the same exchange rate. Blue bars are water, red ones below zero. It starts over every 4 seconds. What to look for: at full salt the explicit line swings and blows up within a few steps, while the implicit front marches one cell a step. Lower the salt until the rate falls under 0.5, where the explicit step is stable, and the explicit one behaves too, but crawls.

Two salt lines with a wet dab at the left: the top one solved implicitly marches steadily, the bottom one solved explicitly swings and blows up
7.00
seconds
—
rate per step
—
implicit front
—
implicit total water
—
explicit largest value
—
explicit blew up after
—
Through salt the wet front races; through paper it creepsCells are about 0.5 mm. Salt: a wet dab at one end of a line of full salt; the one-cell-a-solve limit makes 15 cells a second a ceiling (an automated test asks for 35 cells within 4 s in the game). Paper: how far past the edge of a soaked disc the water creeps; it gets about 5.6 cells and stops.

The salt line reaches 60 cells in 4 s; plain paper reaches about 4.

Through salt the wet front races; through paper it creeps01020304050600.00.51.01.52.02.53.03.54.0secondsfront's distance, cellsThrough salt the wet front races; through paper it creeps020406001234secondsfront's distance, cells
  • salt line, implicit wick solve
  • plain paper, capillary rule
Data table
Through salt the wet front races; through paper it creeps
secondssalt line, implicit wick solveplain paper, capillary rule
000
0.251.48
1152.51
230
345
4604.15

Source: The game's rules in a stand-alone copy, not measured in the game.

In the game, blue watercolour running along a line of salt on glue, far past where the brush touched.
In the game. A wet brush touched to one end of a salted glue line; three seconds later the colour has run along it.
Painted illustration of the painter dripping blue, pink and yellow paint onto a salt-covered glue star and flower on dark card, the colour spreading along the salt.
Salt painting at home. Glue, salt and a wet brush. In the game the salt crust is porous, and the colour runs along it the same way.
100×+
How much faster water evens out through a salt crust than through paper, from the game's own rules.
10×+
Past the step at which a plain explicit solver would blow up. The implicit solve stays steady.
1e-6
At most this share of the water made or lost over 600 solves of a salt crust, in JavaScript and in WebAssembly, pinned by a test.
2.54×
A watercolour dab's rim against its middle after 180 s, measured on the released game.
95%
More than this much of a pencil line is left after water is poured over it. Marker keeps under 60 %. Both checked by a test.

Dry paper costs nothing; the work goes only where the water is

Most of a drawing is dry most of the time, so the game doesn't work on it. The sheet is cut into small squares, and only the squares with water in them run. A few seconds after the last wet thing has dried, the water simulation goes to sleep.

Squares that are barely changing, such as a wash that is slowly drying, are worked less often and catch up in one go. On a slow tablet the game shares out each frame's time by how much visible change each square is owed, so far-off paper updates less often but catches up, and paint should dry about when it does on a fast device.

The heaviest loops also run as WebAssembly that handles four cells at once. In the benchmark the paper pass came out 1.8 to 2.9 times cheaper than the plain JavaScript, and a salt wash 1.6 to 1.9 times.

Under the hood
Dry paper costs nothing; the work goes only where the water is

Under the hood

Dry paper costs nothing; the work goes only where the water is

  • Hundreds of tiles cover a 512 × 384 page. Calm tiles, where the wetness is hardly changing, run less often; a tile that skipped passes catches up in one larger step, with a limit so a slow-drying wash stays within about a percent of the full-rate result.

  • Tests show the sleep: a dry salt crust leaves the paper simulation asleep, and an idle page wakes no tile.

  • The kernel's data lives in one WebAssembly heap sized exactly from what the kernel declares, held to the byte by a test.

  • The paper kernel is not bit-exact with its JavaScript twin: a parity test holds it within 1e-5 relative, with one pinned page that differs a little more in one dye on a tilted sheet.

WebAssembly makes the paper pass about two to three times cheaperA soak, a watercolour wash and a flood on 512 × 384 cells, and the soak again on the phone-sized grid of 288 × 216 ("small grid"), run on the same machine, not on a phone. The machine was shared, so read the ratios rather than the milliseconds. Measured before standing water got its pipes.

JavaScript takes 1.87 to 3.76 ms a tick, WebAssembly SIMD 0.67 to 1.42 ms.

WebAssembly makes the paper pass about two to three times cheaper0.001.002.003.004.00soakwatercolourfloodsmall gridmilliseconds a tickWebAssembly makes the paper pass about two to three times cheaper0.001.002.003.004.00soakwatercolourfloodsmall gridmilliseconds a tick
  • JavaScript
  • WebAssembly SIMD
Data table
WebAssembly makes the paper pass about two to three times cheaper
JavaScriptWebAssembly SIMD
soak3.391.41
watercolour3.761.42
flood1.870.67
small grid2.931.20

Source: Measured in our benchmark (2026-10-19): two builds stepped in turn in one process.

Wet paper holds back a flame, and salty wet paper carries a battery's current

Fire, electricity, chemistry and mould never ask where the water came from. They read the same wetness fields, most of them through one shared reading of how wet a spot is, and the dissolved elements the water brought. That is how a drop of water changes what a flame or a battery does without a line of code joining the two.

Shared: shared wetness

Pour water in the path of a burning edge

Damp paper won't light, and soaked paper won't light at all (checked by a test). A wet strip 1.5 cm wide held a front up for about 12 s, then it burnt through (measured).

Heat and fire

Shared: dissolved salt, damp paper

Wet a strip of salty paper between a battery's clips

The dissolved salt carries the current and fizzes at the clips (checked by a test, with the salt water laid in directly). Plain water has no ions in the game, so it doesn't conduct. Ions conduct only while the paper is damp, and drying turns the brine back into crystal.

Electricity

Shared: acid, and the dye's grip on the fibres

Drop vinegar on paper dyed with red cabbage

A pink spot with a soft rim. The middle keeps at least about 70 % of its dye (checked by a test).

Chemistry and pH

Shared: porosity, the same wick solve

Put a drop beside a slice of bread

The crumb drinks the colour more than 4 cells further than the paper does within 8 s (checked by a test).

Dough, mould and time

Shared: soap's surface flow on wet paper

Touch soap to wet watercolour

The paint is pushed out into a ring (checked by a test).

Runny, sticky and oily

Shared: wax

Draw in crayon, then wash watercolour over it

The crayon lines take much less of the wash's colour than the paper between them (checked by a test).

Pencil, crayon and paper

Where we simplify, and why

Real paper is a tangle of fibres a fraction of a millimetre thick. A child on a tablet needs the things they can see to behave right: water spreading unevenly, colour running to the edge, pencil staying put. These are the shortcuts that buy that, and what each one costs.

In real life. Water climbs through pores by capillary pressure, its front advancing roughly as √t Washburn 1921, with a sharp edge because wetter paper conducts better Richards 1931.

In the game. Linear diffusion of one number per cell, made ragged by the grain. Nobody has measured the game's front against √t; in a copy of the rule it grows about as t0.38 and then stops about 3 mm out as drying balances it.

Why that's enough. Cheap, stable at 30 Hz and it looks right. Lost: the crisp wet front, and a drop that keeps creeping.

In real life. Fibres are long and point in directions.

In the game. One scalar of grain per cell. The exchange uses the sum of two cells' grain, so it can't prefer a direction; only a faint streak in the noise.

Why that's enough. The grain's job is raggedness, and one float gives it.

In real life. A coffee ring forms because evaporation is fastest at a pinned edge Deegan 1997.

In the game. Drying is the same everywhere. Colour rides the wetness gradient plus a tuned pull to the drier side; a fixed tint marks the wet edge.

Why that's enough. The rim darkens as the wash dries (1.02 to 2.54 over 180 s, measured). The mechanism differs, and the tint is colour from nothing, though too faint to see.

In real life. Each dye in an ink splits off by its chemistry, partitioning between water and fibre.

In the game. Each dye has a typed-in speed, in effect an Rf value, set far apart for a black marker's three dyes. Three colour channels, so at most three dyes in a cell.

Why that's enough. Spread far apart, the rings read clearly. Closer, they smear.

In real life. Dissolved things have a concentration; salt crystallises when the water is saturated.

In the game. An amount per cell, so added water carries but doesn't dilute. Salt crystallises when the paper is dry, whatever the amount.

Why that's enough. One float, no division, and the crust appears where and when a child expects it.

In real life. A soaked sheet takes many minutes to dry.

In the game. About 135 s for a soaked patch at room temperature. Time skips use an exponential decay instead.

Why that's enough. Children don't wait ten minutes. The clock is kept short on purpose.

In real life. Water beads on wax and stays off it.

In the game. Wax cuts the sideways exchange to a trickle and keeps colour out, but soaking in ignores it: wetness on crayon measured the same as on bare paper.

Why that's enough. What a child sees is the colour kept off the crayon, which is right. Beading is lost.

In real life. In salt painting, colour travels with the water that carries it.

In the game. A crust's colour mixes toward the colour coming in, and the sender isn't charged.

Why that's enough. It runs right along a line and stays stable. It isn't conserved: a dab can tint more line than it could pay for.