Skip to content

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

The root lockup - the mark with the wordmark beside it. Used wherever the logo is the name: the sidebar and this site's title. Its ink is currentColor and its blue is --root-c--default-400, whose two ends are the brand's own light and dark cuts.
The mark alone, for where the name is already written: the favicon, the touch icons, the social cards.
Webidoo Engineering
Webidoo Engineering, who make this. The gradient is the vendor's; the wordmark's ink is currentColor.
Every file in src/assets/, what asks for it, and what it weighs. Read from the directory at build time.
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 and scripts/_brand-assets.mjs derives everything above from them. A new logo from the brand is a re-run of that script, not an edit to an SVG in src/.
  • 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

default

alternate

ink and ground

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

The face this system ships, measured off the files it ships as. font-display: block.
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: block holds 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

Tokens

451

Every declaration in the foundation stylesheets, values as authored

Families

11

bp, c, e, f, flex, gs, m, r, s, t, z

Stylesheets

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.