Reference
Design system
Every ratio was computed with tools/a11y/contrast.py against all three grounds.
This page is noindex: it documents the template for whoever builds with it.
The disclaimer is a token, not a paragraph
One constant in config.ts supplies the notice in the hero, the notice on the
Pro page, and the disclaimer property in the structured data. schema.org has
that property on Service and it is the single most important field on this
page: a machine-readable service description about trademarks that reads as legal advice
is precisely the failure the page is written against. The reader and the parser get the
same sentence because it is the same string.
No offer catalogue for somebody else’s fees
The cost table quotes USPTO filing fees, approximate and per class. They are not this
business’s prices, so they are not emitted as offers — a rich result showing
“$350” against this studio would be false in a way nobody would ever notice.
The Nice classes are emitted as a plain ItemList instead, which asserts only
that they were considered.
Strength is a word, not a bar
The distinctiveness spectrum runs generic to fanciful and the obvious design is a five-step bar. It is not drawn as one, because a bar implies a measurable scale and trademark distinctiveness is a set of categories a court argues about. Printing “Nearly unownable” is both more honest and more useful than a bar at 20%.
Three outcome colours, three kinds of thing
Filed, Not yet, No. Day 123 carried its verdicts on two signals because colour was
reserved for the client; here the three outcomes are genuinely different in kind rather
than three points on one scale, so they get three hues — after the word and the
glyph, as always. --v-later is deliberately the plain muted text colour: not
filing yet is not a result, it is the absence of one.
Type
Martel — display
Asap Condensed — 34 → 1 · class 35 · ~$350
Body is the system stack. A sturdy serif and a condensed sans, which is roughly what a register entry looks like and is not an accident. Neither face appears in days 1–123.
Tokens
| Swatch | Token | Value | Measured |
|---|---|---|---|
--color-bg | #E6EBEF | Cool blue-grey paper | |
--color-bg-alt | #D6DFE6 | Banding | |
--color-surface | #F4F7F9 | Cards and the notice | |
--color-text | #14202A | 13.78 / 12.25 / 15.37:1 · AAA | |
--color-text-muted | #4E5A66 | 5.87 / 5.22 / 6.55:1 · AA | |
--color-border | #6F7B87 | 3.60 / 3.20 / 4.02 — non-text only | |
--color-accent | #5B2D8E | Register violet — 7.91 / 7.04 / 8.83:1 · AAA | |
--v-clear | #0F6B45 | Filed — 5.45 / 4.85 / 6.08:1 · AA | |
--v-blocked | #A32020 | Blocked — 6.28 / 5.59 / 7.01:1 · AAA | |
--v-later | #4E5A66 | Not yet — the muted text colour, deliberately | |
--color-band | #14202A | The band inverts: ink on cool paper | |
--color-on-band | #E6EBEF | 13.78:1 on band · AAA | |
--color-on-band-muted | #98A4B0 | 6.51:1 on band · AA | |
--color-accent-on-band | #C4A6F0 | 7.92:1 on band · AAA |
The border token clears 3:1 against all three grounds, which is what WCAG 1.4.11 asks of a non-text boundary. It is never used for text.