Brand wordmark
The name, set as a mark rather than as a label. It is the one string that is the same on all 57 grey pages and all 57 coloured ones, and until 2026-08-12 it was drawn by the app bar, which is an organism and had no business painting it.
Anatomy
One text slot and one drawing inside it, which is the whole component. Everything below is drawn by design/system/components/brand-wordmark.css through the same entry point a product screen loads.
The live specimen stands where the component has ground. The word takes its ink by inheritance and its place from the app bar, so a specimen floating on a blank canvas would be measuring neither. This is the bar on all 57 coloured pages.
.wordmarkweight 800, the heaviest Inter the product ships, at--type-subwith -0.02em of tracking. Sixteen pixels is the step the bar has always set, and it did not move.dd-0.09em on top of that, until the bowls almost meet. This is the one thing in the wordmark that is a drawing rather than a setting, and it is why the markup carries a span the app bar never neededcolornot declared on the word, declared on one letter. The word inherits the ink of whatever holds it, which inside the bar is--text-primary. Only.hinames a colour.hithe last d, and the only coloured letter in the brand. It reads--text-action, the semantic role, so the dark theme gives it the lightened petrol for nothing. It sits inside.dd, so it inherits the pair's tracking rather than declaring its own: the drawing and the colour are two facts about the same pairfont-size--type-subin a bar, and--type-headunder.large. The bar's step is the oneapp-bar.cssread on this component's behalf until the split, and it has not moved; the second size arrived on 2026-08-16 for the foot of the public page
Variants and sizes
Two sizes, and the axis under them is where the word stands rather than how loud it should be. The concept locked four rules for the coloured letter and the product carries the first of them today; the rest are listed with the host each is waiting for, because a variant with no host is an invention.
| Where it stands There is no condition on it any more. The last letter is petrol wherever the word appears, at any size, with or without the mark beside it. The concept had three conditions and the product satisfied none of them, so the rule would have been unbuilt and untested until stage 12 |
Tokens | Where it stands |
|---|---|---|
In the lockup .wordmark |
--type-sub 800 / -0.02em ink, inherited .hi --text-action |
The app bar on all 57 coloured pages, the landing's own bar among them. The last d is petrol here as it is everywhere |
The signature .wordmark.large |
--type-head 800 / -0.02em ink, inherited .hi --text-action |
Added 2026-08-16, on the founder's "сделаем поинтереснее подвал?". One host: the foot of the public page, where the word is the subject of its block rather than a label on a bar. At 16px it closed the page at the size of the sentence beside it. Only the size changes: weight and tracking stay on the base rule. The tracking is not re-derived either, and it would be easy to - the concept gives -0.02em for a bar and -0.035em for a hero, 24px is neither, and inventing a third between them would be a value with no source |
Tendd | ||
| Three conditions the concept wrote | - | Overruled 2026-08-12, by the founder, in the product. The concept made the coloured letter conditional: petrol when the word stands alone, above 20px, and all ink beside the mark, because the mark already carries the petrol. Looked at on a real screen, what is there is a 22px mark and one 16px glyph 46px to its right, and the pair reads as one lockup rather than as two claims. The conditions are gone and the letter is petrol everywhere. The sentence they came from is left standing on the concept page: that page records how the mark was found, and it is not a live spec |
| On a photograph or a partner page | - | Ink or white, and never petrol. The one condition that survives, because it is about a ground this system does not own. No host in the product, and the rule is written down so the first person to need it does not have to decide it |
-0.02em here and -0.035em on the concept page, and the difference is not a compromise. Tracking is an optical correction, and the tighter a setting is the more of it a large size can carry. The concept sets the hero at -0.035em and its own bar plate at -0.02em; at 16px the hero's value starts closing the counters. Both numbers are read from that page and neither is chosen here.
The trailing pull is measured and it is kept. Letter-spacing lands after EVERY character in a span, the last one included, so the pair's -0.09em also pulls the word's right edge in by 1.44px at 16px. It costs nothing: the lockup is followed by margin-right: auto on all 32 screens, so nothing sits against that edge. The second d does now carry a span of its own, for the colour, so a positive correction could be hung on it. It is not: the pull is invisible against an auto margin, and a correction that fixes nothing a person can see is a value the next reader has to explain.
When to use it
Once per screen, in the app bar, inside the lockup, and once more at the foot of the public page, where it wears .large and stands alone. If the name appears anywhere else, in a sentence, a heading or a legal line, that is type and it belongs to whatever component owns the text around it. A wordmark inside a paragraph is a logo somebody pasted into prose.
It is a mark, and the test is whether it is being read or recognised. A person reads "Your subscriptions" and recognises "Tendd". That is the whole reason the tracking reversed direction: a word set for reading needs air between the letters, and a word set for recognition needs the opposite, because what it has to be is one shape.
Its copy comes from nowhere and is not in voice/docs/microcopy.md: the product's name is not a string that anybody writes. It is the only text in this system with no owner in the copy inventory, which is correct and worth saying once.
The rule, and the anti-rule
The two d's track further in than the rest of the word, until the bowls almost meet. It is the same move the mark makes: the identity is a letter that has been crowded on purpose, and the word repeats it. Two d's at the word's own spacing look like a typing mistake somebody kept.
The same class with the span left out, drawn here for real rather than mocked. Everything is right except the drawing: 800, -0.02em, and the coloured letter is still there because .hi does not depend on .dd. What is missing is 1.44px, and it is the difference between a name set boldly and a name that has been designed.
In the bar, beside the mark, once. This is the only place the component belongs, and the count is one per screen on all 28.
Tendd
is keeping an eye on 14 subscriptions
When the product's name is part of something a person reads, it takes the type of whatever it is inside, here a label. Setting it as the wordmark would put a second identity inside the content of a screen, and the whole point of the bar is that the identity lives in one place and stays out of the way of the numbers.
Limits
U14, context. The brand moves once, on one surface, and the modifier is the fence. The mark’s window opens to the whole letter and closes into crop A over --dur-signature on --ease-settle, and the wordmark’s last letter takes petrol as it lands. It runs on the public page’s bar only, once per load. the 54 app pages that carry a lockup do not carry .signature and must not: a mark that moves every time you open the product is not a signature, it is a fidget. The hover is the other half of U14 and it is not fenced: on every lockup in the product, hovering it PLAYS the crop - out to --crop-whole and back into crop A over --dur-signature - and holds no pose at either end, because the only good resting crop this drawing has is A. The mark’s own animation fills backwards and never both, or it outranks that hover and kills it, and the two animations sit in two slots of the animation list through --sig-name, because sharing one slot replayed the arrival every time a pointer left the public page’s lockup; the word’s half fills the same way for a narrower reason - its forwards half held a colour the base rule already paints, so it shadowed the property for nothing. Full table with sources: Usage rules; the language it sits beside is on Motion.
States
None, and it is a finding. It is a span on all 57 coloured pages and all 57 grey ones, never an anchor, so there is no hover to declare and no ring to draw. Drawing four cells here would document something the product cannot do.
If it becomes the way home at stage 12, the anchor takes the ring and this atom keeps its type. That split is the same one the merchant tile already lives with: the row is the link, the mark inside it is not.
The technical half
| Reads | Which token | Growing from |
|---|---|---|
| the size | --type-sub | 16px, primitive, straight. The step the bar always set, and the one value in this component that did not move |
| the word's ink | none | inherited. --text-primary inside the bar, 17.4:1 light and 15.0:1 dark. Four of the five letters carry no colour of their own, so nothing here can be broken by editing this file |
| the last letter | --text-action | --petrol, and --petrol-dark in the dark theme. 6.2:1 light and 6.8:1 dark on the bar, measured against the 4.5:1 ink threshold with the large-text allowance unused. WCAG 1.4.3 would exempt a logotype outright; this system does not take the exemption, because this glyph is half the name |
| the weight and both trackings | literals | 800, -0.02em, -0.09em. Em tracking follows the type step it sits on, so it has nothing to override and no theme can want it different |
| states | none | not interactive, see above |
Was to became, and it is the fifth named source of a visual change in this stage. The setting was 700 at +0.02em and is now 800 at -0.02em with the pair at -0.09em. app-bar.css said out loud why the old value was right, and DESIGN.md said the same: at 16px in a bar the letters need air, and a wordmark set solid reads as a word rather than as a mark. Both were describing a product with no mark in it, where the word was the identity and had to hold the bar alone. It is not a drift and it is not a correction of a mistake: the premise changed, the sentence in DESIGN.md was rewritten the same day, and the row is in docs/tokens-audit.md.
Measured, both in the same document by the same engine. The word was 50.703px wide and is now 45.938px, narrower by 4.765px. The slot it sits in went the other way, from 50.703px to 75.938px, because the mark adds 22px and the gap 8: 25.235px wider. That figure is the whole of what the brand did to the layout of 28 screens, and it lands entirely in the auto margins that were already absorbing free space in that bar.
Lives in design/system/components/brand-wordmark.css. Stands on all 57 coloured pages, 59 places because the landing carries it twice, and on 56 grey ones, which is every page in wireframes/ except the landing and the stage hub. The grey carries the word alone at the old setting, because wireframes/ is frozen and Voice was the last stage allowed to edit text there.
<span class="wordmark">Ten<span class="dd">dd</span></span>