Every parameter, and why it is set where it is
Each of the 22 parameters below is a real control in the panel. The reasoning is
first-hand: where a bound comes from a measured property of the work, that measurement is named.
Content
Text text
default THE STRAIGHT LINE AND THE CIRCLE
ARE ALWAYS BEAUTIFUL BY NATURE
The length of the text defines the grid itself, so changing it has to rebuild — the number of cells is different. This was missed at the first extraction: in the original lab it was a constant, and treating a constant as "not a parameter" meant custom text disappeared entirely once the work was mounted in a shell. The default is an excerpt from Plato, Philebus 51c, two lines of 32 and 30 cells.
Ink ink
colour, default #e9eefb (dark) / #2d3d65 (light)
Two values, not one. The theme has to be declared and the criterion has to be computable: the light set was derived backwards from "contrast after blending is at least 3:1", the large-text threshold — not picked by eye.
Timing
Cells per second cps
6–120 cells/s, default 34
The rate of the discrete clock. Measured frame by frame against the original at roughly 1620 px/s over a 44px size, which is about 37 cells per second; 34 rounds that down a notch. This is the frequency of the discrete clock itself, not an animation frame rate — trying to make it "smoother" is aiming at the wrong thing.
Row stagger stagger
0–30 beats, default 4
Per-row delay. At 0 every row starts together and reads as a progress bar; offsetting them is what makes it a cascade.
Start jitter jitter
0–1, default 0.34
A random offset on top of the stagger. Stagger alone lines the starting points up into a regular diagonal; the jitter breaks that up.
Hold hold
0–8 s, default 2.2
There are two clocks in this group, and that is not an inconsistency. Stagger, band and decay describe the machine's clock — how many cells apart rows start, how far ahead of the edge the blocks run, how many ticks the afterglow takes — and all of them have to scale when the speed doubles, or the trail changes length on screen. Hold describes a human clock: how long a sentence takes to read, which has nothing to do with how fast the machine runs. Folding it into ticks breaks outright: the punch preset runs at 112 cells per second, where a tick-based hold would flash past unread, while the telegraph preset at 11 would hold absurdly long. Different unit families is the right answer; what was missing was saying so in the interface.
Order order
ltr · rtl · mid · rand, default ltr
The order of advance, and this work's second axis: the leading edge can be an edge, or it can scatter. ltr is the original form, one hard edge pushed left to right. Under rand the cells light at random, form nothing spatially, and read as dissolving rather than advancing — three of the presets stand on that. These are two ends of one mechanism, not a main mode and a variant, and the description was revised to say so (it used to recognise only the hard edge).
Front
Block band band
0–24 cells, default 7
How many cells ahead of the edge are blocks. 0 is a pure hard cut and closest to the original; above 0 there is a run, which is one of this work's main additions.
Churn churn
0–1, default 0.62
Not yet derived — tuned by eye. See the list below.
Grain grain
0–1, default 1
The depth of the █ ▓ ▒ ░ ladder. The shape never changes; the solid simply breaks into a screen of dots. A first attempt mixed in L shapes, diagonal checkers and a dot — that is not a rectangle granulating, it is a parade of different shapes, and it was rejected on sight. The static checks now reject those glyph classes.
Block fit blk
0.5–1.2, default 1
How closely the blocks sit against the letterforms, multiplied onto ink heights measured at runtime rather than a guessed ratio. Latin and CJK are measured separately (Latin runs baseline to cap height, CJK nearly fills the body box).
Afterglow decay
0–40 beats, default 7
The cell that just settled is brightest and falls back to the resting level over this many ticks. Half the beauty is here — pull it to 0 and the leading edge becomes a cold line instead of something trailing warmth.
Settled opacity dim
0.3–1, default 1
The resting opacity of settled text. The default is 1.0: fully opaque text, leaving the mood for the reader to dial in. It used to default to 0.72 — lighter does make the afterglow pop — but that trades legibility for atmosphere, and a default should be the most honest setting rather than the best-looking one. In the light theme there is a hard floor of 0.55: below it, no ink is dark enough to reach 4.5:1 once blended onto white. Contrast has to be computed after blending, never from the ink colour on its own.
Glyph set glyph
ramp · grain · block · ascii · self, default ramp
Not yet derived — tuned by eye. See the list below.
Front front
colour, default #7aa2ff (dark) / #0a51f5 (light)
The colour of the arriving front — the leading edge of the settle — as distinct from ink, which is the colour the text ends up. The two defaults are not a light/dark recolouring of the same hue; they are picked against their own ground. On dark the front is a pale blue (#7aa2ff) that reads as light arriving; on light the same pale blue would be close to invisible, so the light default is a much darker, more saturated blue (#0a51f5). A colour has no range to derive — what has to hold is the contrast against the ground it sits on, and that is why the two defaults differ in lightness rather than only in hue.
Type
Font size size
18–96 px, default 44
At 24px and above, the WCAG threshold drops from 4.5:1 to 3:1. 44 sits safely on the large- text side, which is what gives dim room to go down to 0.72 without crossing the line.
Leading lead
1–2.4, default 1.62
The unitless line-height of the text block, written into --lead. The floor of 1 is structural: at 1 the rows sit exactly one font-size apart, and below it they overlap — and this work is a grid of cells, so overlapping rows would put two characters in one place. Leading is the vertical counterpart of the character advance: it sets the row pitch the way track sets the column pitch. The ceiling of 2.4 is not forced; it is roughly where the block stops reading as a paragraph and starts reading as separate lines.
Tracking track
-0.05–0.3 em, default 0.02
This has to go through margin-inline-end. An inline-block with a fixed width swallows letter-spacing entirely — the symptom was a slider that appeared to do nothing at all, and it took a long time to find.
Cursor
Blink blink
0–6 Hz, default 0
A hard on/off, not a fade — a discrete effect gets a discrete blink. Defaults to 0: the scanning presets want no cursor, only the ones going for a typing feel turn it on.
Glow glow
0–1, default 0
Not yet derived — tuned by eye. See the list below.
Cursor width cw
0.15–1 ch, default 0.5
It has to be an absolute width based on 1ch. Following the cell width instead gives 1ch in a Latin cell and 1.667ch in a CJK one, so the two scripts can never match — and it shows immediately.
Cursor cursor
none · block · under · bar, default none
The cursor is an inline block on vertical-align: baseline, so its lower edge lands on the baseline by itself and none of the line-height, half-leading or box-bottom-to-baseline arithmetic is needed. That leaves two pure ink numbers, band height and descent, measured once per script. An earlier version assembled it from glyphs and scaling instead; the glyphs came from one font and the CJK from a system fallback, and two font stacks laid over each other never line up.