Legal Agency Suite
Live preview
proposal-letter
mou-engagement-letter
body-clauses
alloc-fee-table
signature-block
schedule-cover
drafting-notes
A print-first (WeasyPrint) MOU / Engagement Letter / Schedules A–E document template family — the most readable-register of the three legal-document families (11.5pt / 1.5 line-height, Tinos webfont), with uniform 1in margins. One of six templates in the Paper document-family register.
components/legal-agency-suite/recipe.jsonWhat this template is
Legal Agency Suite is a print document register, not a screen widget. It
describes the page geometry, rule-weight usage, typography, and structural
elements of a real MOU / engagement-letter document suite — proposal letter,
memorandum of understanding, body clauses, allocation/fee table, signature
block, and Schedules A–E — as it prints through WeasyPrint to a portrait PDF.
Its CSS class is paper-legal-agency.
It is one of three legal-document families in the Paper register, and it is deliberately the most readable of the three:
| Axis | Legal Agency Suite | Subscription Agreement | Prospectus |
|---|---|---|---|
| Body type | Tinos, 11.5pt / 1.5 | Times New Roman / Liberation Serif, 9.5pt | Times New Roman / Liberation Serif, 10pt |
| Page margin | Uniform 1in, no binding asymmetry | 0.75in standard, 0.7–0.9in bind | 0.75in standard, 0.625in inline |
(Sibling values from the Paper pillar's document-families table.)
Reach for this template when the deliverable is a memorandum of understanding, an engagement letter, or a proposal letter with lettered schedules — a correspondence-adjacent legal register meant to be read comfortably, not a dense fill-in booklet or a filing document. For those, use the subscription- agreement or prospectus sibling instead.
Variants
The register defines seven variants. Each is a real structural element of the delivered document suite — never invent an eighth.
| Variant | Role |
|---|---|
proposal-letter | Logo letterhead (inline SVG), sender address block, non-binding notice. |
mou-engagement-letter | Text letterhead, addressee block, RE line, salutation. |
body-clauses | Parties/recitals section, decimal <ol> clause numbering, indented sub-clauses. |
alloc-fee-table | Allocation/fee table — 0.75pt cells, surface-tint header fill, subtotal/total rows. |
signature-block | Table-based signature block (Word-export-safe layout), approved-connector notation. |
schedule-cover | Page-break schedule cover pages, per-schedule named counters (apage…epage). |
drafting-notes | Internal change-log page — intended as a removable final page before distribution, not part of the executed document. |
Two of these carry governance weight worth restating:
drafting-notesnever ships. It is an internal change-log page whose whole purpose is to be removed before the document is distributed. Any pipeline consuming this register must treat it as a pre-distribution artifact, not executed-document content.schedule-coverowns pagination. Each schedule restarts its own named page counter —apagethroughepage, one per Schedule A–E — behind a page break. This per-schedule named-counter pattern is shared with the subscription-agreement family (see its token-map research).
Page geometry
The family prints with a uniform 1in margin on all four sides, driven by a single token:
{paper.semantic.agency-suite.page-margin}→{paper.primitive.page.margin-wide}(1in).
There is no binding asymmetry — unlike the subscription-agreement family's 0.9in / 0.7in left/right split. This is the "wide" margin geometry in the Paper pillar's document-families table, and it is part of what makes this the most readable of the three legal registers.
Rule-weight ladder usage
Legal Agency Suite draws from the Paper pillar's four-step rule-weight ladder — hairline 0.5pt · light 0.75pt · standard 1pt · emphasis 1.5pt — and extends it once:
alloc-fee-tablecells sit at 0.75pt — the ladder's light step.- Signature lines use
{paper.semantic.agency-suite.rule-signature}→{paper.primitive.rule.standard}(1pt) — the ladder's standard step, the same weight the Paper pillar assigns to signature lines across families. - The form-note accent bar uses
{paper.semantic.agency-suite.form-note-accent}→{paper.primitive.rule.accent}(3pt) — a ladder extension unique to this family. It was deliberately kept as its own primitive rather than forced to reuse the prospectus's 2pt accounting-total rule: an accent bar and an accounting double-rule are visually and semantically different things, even at adjacent weights.
Typography per section
The family is single-face by design — one serif stack for both body and headings, differentiated by size and weight rather than by face:
| Section | Token | Face and metrics |
|---|---|---|
| Body text | {paper.semantic.agency-suite.body-type} | Tinos (webfont-first, falling back through Times New Roman / Liberation Serif / Times / serif), 11.5pt / 1.5 line-height, weight 400. |
| Headings | {paper.semantic.agency-suite.heading-type} | Same Tinos stack, 18pt / 1.2 line-height, weight 700. |
The 11.5pt / 1.5 body register is the most generous of the three legal families — a genuinely distinct reading register from the subscription agreement's dense fill-in-booklet setting (9.5pt) and the prospectus's filing-document setting (10pt).
Clause numbering
The body-clauses variant numbers clauses with real decimal <ol>
elements, not visual-only numerals, with indented sub-clauses beneath. This
is a semantic decision, not a styling one — see
Accessibility below.
Accessibility
Because this is a print artifact, accessibility here means document
semantics that survive into the tagged PDF, not keyboard or focus
behaviour. The recipe carries two real aria positions:
- Clause numbering is semantic. Clauses use real
<ol>markup (not visual-only numerals) so assistive technology can announce clause position within the agreement. - The signature table is presentational. The signature block uses
<table>only for print / Word-export layout fidelity; where the table conveys no relational data, it carriesrole="presentation"so it is not announced as a data table.
The recipe records a WCAG 2.2 AA target.
Print output and motion
This is a print-first static document — no interaction states. It renders to PDF via WeasyPrint.
Open questions
Two items from the recipe must travel with anyone consuming this register:
oq-1— em-dash convention is unreconciled. This family uses the\2014CSS escape; the subscription-agreement family mandates a literal UTF-8 em-dash character (its source warns that\2014swallows the trailing space in WeasyPrint). This is a real, recorded inconsistency — not drift to silently fix. It must be reconciled before any shared draft-stamp component is built, and resolving it requires re-testing both families' actual WeasyPrint output.oq-2— pdf-home-button geometry is out of scope here. Thepdf-home-buttonmarker geometry referenced in the source draft is a tool-contract withtool-pdf-interactive.py— see the Interactive PDF Binder component — not a token or recipe concern of this component.
Related
- Paper pillar — overview — rule-weight ladder, geometry, and document-families table this register inherits.
- Legal Subscription Agreement — the dense fill-in-booklet legal sibling whose token structure this family mirrors.
- Legal Prospectus — the filing-document legal sibling.
- Financial Report Layout · Financial Statement (year-end) — the financial-document families in the Paper register.
- Interactive PDF Binder — the navigation-overlay register (and the home of the
oq-2tool-contract). - Tokens — Paper tier — all five semantic tokens backing this template.
Important Information
Design System disclosure
This site provides open-source design tokens, documentation, and self-hostable software published by Woodfine Capital Projects Inc. Information here is for general reference only and does not constitute an offer, warranty, or a guarantee of fitness for any particular purpose. Statements regarding planned, intended, or targeted future features are forward-looking and subject to change without notice; they are not undertaken to be updated except as required by law.