Brand
What this system looks like when it is not a component: the marks, the name, the color and the type, and where to take them from.
Everything on this page is derived from files in the repository rather than described from memory. The marks are the ones the site itself renders, the palette is read out of the token stylesheets, and the download at the bottom is generated from the same declarations the components consume - so a token added on Monday is on this page on Monday.
The marks
currentColor and its blue is
--root-c--default-400, whose two ends are the brand's own light and dark cuts.
currentColor.
| File | Used by | Size |
|---|---|---|
| apple-touch-icon.png | the page head and the web manifest | 5.9 kB |
| favicon-16.png | the page head and the web manifest | 0.6 kB |
| favicon-32.png | the page head and the web manifest | 1.3 kB |
| favicon.ico | the page head and the web manifest | 1.9 kB |
| favicon.svg | the page head and the web manifest | 3.0 kB |
| icon-192.png | the page head and the web manifest | 6.3 kB |
| icon-512.png | the page head and the web manifest | 18.0 kB |
| icon-maskable-512.png | the page head and the web manifest | 13.6 kB |
| logo-root-lockup.svg | the shell, inlined | 5.9 kB |
| logo-root.svg | the shell, inlined | 2.8 kB |
| logo-webidoo-engineering.svg | the shell, inlined | 14.1 kB |
| og-accessibility.png | not referenced by the site | 39.4 kB |
| og-brand.png | not referenced by the site | 31.4 kB |
| og-components.png | not referenced by the site | 39.4 kB |
| og-foundations.png | not referenced by the site | 44.0 kB |
| og-getting-started.png | not referenced by the site | 32.3 kB |
| og-image.png | the page head and the web manifest | 26.8 kB |
| og-quality.png | not referenced by the site | 33.4 kB |
| og-roadmap.png | not referenced by the site | 35.4 kB |
| og-showcase.png | not referenced by the site | 39.2 kB |
Three rules, and each one follows from how the files are made rather than from taste:
-
Do not redraw them.
packages/assets/holds the vendor originals andscripts/_brand-assets.mjsderives everything above from them. A new logo from the brand is a re-run of that script, not an edit to an SVG insrc/. -
Do not recolor the monochrome ink.
It is
currentColor, deliberately: the mark inherits the color of the text around it, so it turns with the color scheme without a second file and without asking the operating system what the reader prefers. Setting a fill breaks that. The brand gradient is a gradient and stays as drawn. - Use the SVG unless a platform demands otherwise. The rasters exist because a browser asks for them by name - the tab icon, the touch icon, the manifest icons, the social card - and each one is generated at the size that slot wants.
The name
The name is root, lowercase, in the wordmark and in running text. The mark is set lowercase and the site's own title is lowercase, so an uppercase root in a sentence is a second brand nobody agreed to.
Everything this site publishes now follows it: the component READMEs it renders, this page's neighbors, and the repository's own README. What still writes root is the record - the architecture decision records, the handoffs, the plan - and the comments in the source, and both are left alone on purpose. A decision record edited after the fact is not a record, and a comment is written for whoever opens the file rather than for a reader.
Colour
The two ramps above are what carries the brand: default is the accent - links, focus, the
selected state - and alternate is the second voice beside it. Both mirror across light and
dark on their own through light-dark(), which is why there is one token per step and not two.
Every other ramp - success, warning, danger, info, neutral - is a role rather than a brand color, and all of them are documented step by step on the Palette page.
Type
| File | Style | Weight axis | Size |
|---|---|---|---|
Inter-Italic.woff2 |
italic | 100 900 | 113 kB |
Inter.woff2 |
roman | 100 900 | 103 kB |
The face is Inter, self-hosted: one variable file for the roman and one for the italic,
each carrying the whole 100-900 weight axis (packages/css/foundations/lib/typography/fonts/inter/). Self-hosted rather than fetched from a font CDN - a file on somebody else's origin is a request this
site cannot make any promise about - and variable rather than four static cuts of the same face.
Two things are worth knowing before copying the setup, and both are costs:
-
Both files are subset to Latin.
Upstream they are 344 kB and 380 kB covering every script Inter supports; what ships is the range a
Western European page sets, which is where the sizes in the table above come from. The full files are in
the repository (
packages/assets/fonts/inter/) for whoever needs to widen that - a page setting Greek, Cyrillic or Vietnamese falls back to the reader's system font for those characters, and nothing warns it. -
font-display: blockholds the text invisible until the file arrives. That is the right call for a face whose metrics differ from the fallback - it trades a flash of the wrong face for a pause - and the wrong one on a slow connection. It has not been revisited since it was written.
The monospace stack is the platform's own: ui-monospace first, then the named faces a system
is likely to have. Code sets in something the reader already has and costs nothing to load.
Take the tokens
451
Every declaration in the foundation stylesheets, values as authored
11
bp, c, e, f, flex, gs,
m, r, s, t, z
13
The files they are declared in, named in the export beside each token
Download tokens.json
- generated by this build, from the same declarations the components consume. A
light-dark() pair is one token in it and not two, because that is what it is in the CSS.
The design file
The token stylesheets are the source of truth, and Figma is kept in step with them by hand. The plan for
making that a sync rather than a habit is written (docs/figma-token-sync-plan.md) and not
built: the color axis has been surveyed against the real Figma variables, and every other axis is still a
census waiting to happen. The design file itself is internal to Webidoo, so there is no link on this page to
follow.