Write-ins are marks on paper: underlines, gaps, blank rows, and checkboxes. They are not variable names. Never create a Var called line, gap, row, or box.

A solid handwritten rule is {{line:20}}. N is width in characters (1–80). Prefer 12, 20, 30, or 40.
Line
{{line:20}}
{{line:12,value:rate_per_hour}}
{{line:24,text_bottom:"SELLER",value:seller_full_name}}
{{line:24,text_bottom:"BUYER",pt:4}}
| Attribute | Meaning |
|---|---|
value:key or value:"Literal" | Fill from a Var or a literal. No nested {{key}} inside |
text_top / text_bottom | Captions centered on the rule |
pt:N | Padding-top = N × 0.25em (pt:4 → 1em) |
| Need | Token |
|---|---|
| Digital fill from a Var | {{rate_per_hour}}: do not invent a line |
| Form underline + digital fill | {{line:12,value:rate_per_hour}} |
| Wet-ink (signature, Doc. No.) | {{line:N}} |
Inserting a Var while the cursor is inside {{line:12}} becomes {{line:12,value:client_name}}.
Gap, row, box
{{gap:12,gap-m:0}}
{{row}}
{{row:3}}
{{box}}
{{box:checked}}
- gap: horizontal space (0–80).
gap-m:0collapses on mobile. - row: vertical blank rows (1–20).
- box: checkbox.
checked,x,yes, or1draws it ticked.
Two signature lines on one row:

{{line:20}}{{gap:12,gap-m:0}}{{line:20}}
Vertical space (no paddingTop)
Text and Heading blocks have no paddingTop. Match a paper form with:
- Spacer between sections
{{row}}inside a Text blockpt:Non stacked lines / gaps only- Page break when the source starts a new page
Do not spam empty paragraphs to fake a gap.
Optional blanks
Empty write-in lines do not block share (they are for wet-ink). Empty required Vars do. Mark a Var optional if it may stay blank: {{plot_number,require:off}}.