Tobias Renner

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

Colour tokens with measured contrast ratios
SwatchTokenValueMeasured
--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.