A form is the one set piece the visitor writes on. This study builds a native one whose fields are blocks on the grid: the label speaks in Schibsted and the value measures in Plex Mono, the plan's pairing rule; focus is the one signal, which gives the one-signal law a native implementation; a range input is a seek bar whose thumb snaps to the union; a choice is three glyph blocks; validity is read from the control and written on the block; and submitting posts nowhere — it composes a receipt. Separately, and declared: a third-party booking embed set as a window at plane −1 in the sky between two manifests, loaded only on a gesture and only on this page, to learn whether an embed can live there without breaking the law of the page.
Eight fields on an open stage, scored per edition like the header on the home page: three text fields on the first two rows, the service as three glyph blocks and the budget as a seek bar on the next three, the message and the consent and the submit after. Each block's corner label is its state, read from the control's own validity after you have touched it — required and empty, not an email, valid — and a wrong field turns butter. Tab through: the focused field is the one lit block, and the submit is navy until it has the focus. Nothing here is sent anywhere: press compose and the values become the stage below.
The form has no action. On submit the fields are read back and become blocks: each value one column by two rows, placed by its index; the service as its glyph; the budget as the metrics study's meter on the union; the consent as a butter block. What you said is what the page shows, and the page shows it as the system would — a composition, not a confirmation message. Reload, and it is gone.
Declared: this page, and only this page, can load third-party code — TidyCal's booking embed, the one the live site uses on its booking page — as the charter's one licensed exception, asked for by Dan for this study. It does not load until you press the button, and nothing from TidyCal is fetched before that. The question is whether an embed can live in the sky between two manifests without breaking the law of the page. The answer tried here is the plan's plane −1: the embed is another site seen through a window cut in the sheet; its height, which the embed's own script sets by resizing its iframe, is rounded up to whole rows and the remainder is paper; and the page ledgers what the embed cost — the hosts contacted, the requests made, the height it asked for and the rows it was given.
This is the sky: the long-form register between manifests, where the sky study set its essay and the shore study wrapped its coast. A form belongs on a stage, because its fields are blocks; an embed belongs here, because it is not ours. It is the one kind of block that brings its own grid, its own type and its own behaviour, and the only honest thing the page can do with it is frame it — cut a window, set it behind the sheet, give it the rows it needs, and say what it cost.
Below the window the sky continues, and the next manifest stands where the score put it. If the window took a fraction of a row, the manifest would be off the beat; the ledger says whether it is.
The plan's pairing rule — Schibsted speaks, Plex Mono measures — turns out to be the whole typography of a form: the label speaks, the value measures, and a field is the one block where both voices are in the same box. The rest followed from laws the studio already had. Focus is the one-signal law with a native implementation: the browser allows exactly one focused element, so the focused field is the lit block and the submit is navy until it has the focus, and no stylesheet rule had to ration anything. The block reports and never rewrites, which was the writing study's first law, and here it means the corner label is the control's own validity, read after the visitor has touched the field. The seek bar is the metrics study's meter turned into an input: its step is a microcolumn of its block, so the thumb snaps to the union and the value is honest to a twentieth across four columns at 7×5. And submitting composes, because a form's output can be a set piece: the values become blocks, the service becomes its glyph, the budget becomes a meter, and nothing leaves the page.
The embed is the harder case and the reason the charter had to be bent for one page. An embed brings its own grid, its own type and its own script; it cannot be a block in the system's sense. What it can be is what the plan always had for things behind the sheet: plane −1, a window. Set in the sky between two manifests, loaded only on a gesture, its height rounded up to rows so the manifest below stays on the beat, and its cost written in a ledger the browser itself supplies — that is as far as the system can go, and it is far enough to be honest. Whether the client site wants a third-party calendar behind a window, or a native form that composes a receipt beside a real send, is a decision the study leaves with the numbers.
Fifth study of the night; the draw taken with the date suffixed. Five sentences:
The content architecture is two layers of plain text files: blocks (what things say) and scores (how a page arranges them).answered as law 1, for the fourth time this autumn: a field is a block (what it says: label, control, value) and the form is a score (where it sits per edition)
Mood board · pin these Broadway Boogie Woogie · PCB traces · Massimo Vignelli / Beck-style transit diagrams · Braun control panels (Rams) · aircraft instrument clusters · the seek bar of a tape deck · departure boards mid-flip.answered as law 3: the controls are instruments — the range input is the seek bar of a tape deck, snapped to the union; the choice is a row of three keys with glyphs on them, the Braun panel
Set pieces build as they enter the viewport: blocks translate in and settle with a slight overshoot, staggered ~45ms, base plane first, breakouts after.kept: the form assembles like any stage; the receipt lights without a journey, because it is a reply
The pairing rule: Schibsted speaks, Plex Mono measures.answered as the typography of a field: the label speaks, the value measures, in one box
Each edition gets its own coprime pair, and every block declares its own placement per edition:answered by the score: eight fields placed three ways, one row of two at 3×2, and the seek bar's resolution changing with the pair (20, 6, 6 microcolumns)
draw.js| Constant | Value | Why |
|---|---|---|
| field | .snx-b.fm-field · label Schibsted 13.5 · value Plex Mono 15 · corner label = data-state | law 1: a field is a block; the pairing rule in one box |
| signal | .is-focus on the field containing document.activeElement · submit navy until focused | law 2: exactly one focused element — the one-signal law, natively |
| seek bar | min 0 · max = span × overlay · step 1 · value = lo + (hi − lo) × q / m · thumb one microcolumn wide | law 3: the thumb snaps to the union; honest to 1/20 across four columns at 7×5 |
| choice | three radio labels as glyph keys · :has(:checked) fills | law 3: the Braun panel |
| validity | read after focusout · required · empty, not a type, too short, valid | law 4: the block reports, never rewrites |
| receipt | one column × two rows per value, --c from mod(i, base) · glyph for the service · meter for the budget | law 5: submitting composes; no action, no service |
| embed | loaded on click · plane −1 window · rows = ceil(iframe height / row) · ledger: hosts, requests, height, rows, remainder | law 6: another site behind the sheet, framed and costed; this page only |
| feed/score | script: data-state, data-valid, data-filled, data-focus, data-signals, --q, --m, data-rows, data-hosts, data-requests · stylesheet: lit, ticks, fills, keys, window | law 7 |