Logo
A brand mark or wordmark, in its own colors or in an ink that follows the surface.
import { Logo } from "@oration/canon/components/logos";<Logo name="microsoft" /><Logo name="google" variant="wordmark" /><Logo name="github" decorative />// Graphite on a light well, white on a dark one<Logo name="github" tone="light" /><Logo name="github" tone="dark" />Usage#
Logo draws a brand mark or its wordmark from the original SVG, at a fixed optical size. Multicolor marks such as Microsoft and Google keep their own inks in both themes. A one-ink mark such as GitHub is painted with currentColor, so it turns with the text. Recolor a mark only when the surface cannot hold the brand colors.
When to use
- Beside a provider action, such as Continue with Google, at 16px.
- In a row of products a customer already uses, marks at 16px or wordmarks at 16px tall.
- For Oration's own mark and wordmark once those files are added the same way.
When not to use
- For a company that has no logo file yet. A letter tile is the stand-in, and it is never a fake brand mark. Use Monogram tile
- For a person, where a photo or initials belong. Use Avatar
- For an agent. Agents use the Bayer mark in a rounded tile, not a company logo. Use Agent avatar
Original ink, unless the surface refuses it
Anatomy#
- Mark. The symbol, square, 16px by default. Microsoft's four squares, Google's G, GitHub's octocat.
- Wordmark. The name as a drawing, 16px tall and as wide as the file. Google and GitHub have one. Microsoft, on SVGL, does not.
- Tone. Brand keeps the file's fills. Mono, light, and dark repaint every shape: currentColor, graphite
#1b1f24, or white.
Examples#
Tones
Brand keeps Microsoft and Google in their own colors on both surfaces, and lets GitHub follow the text. Mono repaints every shape with the text color. Light is graphite, for a light surface. Dark is white, for a dark one.
Light surface
Dark surface
export function Tones() { return ( <div className="grid w-full max-w-3xl gap-6 sm:grid-cols-2"> <div className="flex flex-col gap-3"> <p className="text-13 font-medium">Light surface</p> <ToneRow label="Brand" tone="brand" surface="light" /> <ToneRow label="Mono" tone="mono" surface="light" /> <ToneRow label="Light" tone="light" surface="light" /> </div> <div className="flex flex-col gap-3"> <p className="text-13 font-medium">Dark surface</p> <ToneRow label="Brand" tone="brand" surface="dark" /> <ToneRow label="Mono" tone="mono" surface="dark" /> <ToneRow label="Dark" tone="dark" surface="dark" /> </div> </div> );}Wordmarks
Google's wordmark stays in the four brand colors. GitHub's wordmark is one ink, so on a dark well it turns white with the text. Both are 20px tall here.
import { Logo } from "@oration/canon/components/logos";export function Wordmarks() { return ( <div className="flex w-full max-w-sm flex-col gap-4"> <div className="flex h-12 items-center rounded-lg bg-card px-4 shadow-border"> <Logo name="google" variant="wordmark" className="h-5" /> </div> <div className="flex h-12 items-center rounded-lg bg-card px-4 shadow-border"> <Logo name="github" variant="wordmark" className="h-5" /> </div> <div className="dark flex h-12 items-center rounded-lg bg-neutral-950 px-4 text-white"> <Logo name="github" variant="wordmark" className="h-5" /> </div> </div> );}States#
| State | Treatment |
|---|---|
| Brand | The default. Multicolor fills stay. A one-ink file uses currentColor and follows the surrounding text, including inside .dark. |
| Mono | Every shape takes currentColor. Use it when a multicolor mark has to sit in one ink, matching a label. |
| Light | Graphite ink, for a light background, including when the page around it is dark. |
| Dark | White ink, for a dark background that does not change the text color. |
Behavior#
- The drawing is the SVG you saved. Paths are not redrawn.
bun run add-logoinpackages/canoncopies a file, or downloads a title from SVGL, intosrc/components/logos/svg/and regeneratesassets.ts. - A light file and a dark file of the same one-ink mark collapse into one drawing in currentColor. The dark original stays next to it as
*.dark.svg. - Two multicolor drawings that actually differ are both kept, and the dark one shows under
.dark. - Pass
decorativewhen the name is already in the adjacent text, so the mark is hidden from assistive tech. Otherwise the SVG isrole="img"with the brand name. - A wordmark's class list includes
size-so a button's[&_svg:not([class*='size-'])]:size-4does not squash it. Override the height withclassName="h-5"orh-6.
Do and don't#
Content#
- Don't set a title that restates a visible label.
Continue with Googlenext to the mark is enough: passdecorative. - When the mark is the only name, leave the default title, which is the brand.
Accessibility#
- With the default, the SVG has
role="img"andaria-labelset to the brand, or totitlewhen you pass one. decorativesetsaria-hiddenand removes the label. Use it when adjacent text names the brand.- The mark is not a control. The button or link around it takes the click.
- Tone light and tone dark are forced inks, so they stay readable when they sit on the opposite surface.
API reference#
Logo
Renders one entry from the logo catalog. variant="wordmark" falls back to the mark when that brand has no wordmark.
Other props spread onto <svg>.
| Prop | Type | Default | Description |
|---|---|---|---|
nameRequired | LogoName | No default | Catalog key: microsoft, google, or github. LOGO_NAMES lists them. |
variant | "mark" | "wordmark" | "mark" | The symbol, or the name drawn as a wordmark. |
tone | "brand" | "mono" | "light" | "dark" | "brand" | Brand keeps original fills. Mono uses currentColor. Light is graphite. Dark is white. |
title | string | No default | Accessible name. Defaults to the brand title in the catalog. |
decorative | boolean | false | Hides the mark from assistive tech. |
className | string | No default | Size override. Marks default to size-4 (16px). Wordmarks default to h-4. Example: className="size-6". |
Known gaps#
Where the implementation and the system disagree today. Follow the system, not the gap.
Microsoft has a mark only. SVGL does not ship a Microsoft wordmark.
The Google symbol in the catalog is the standard four-color G. SVGL's Google symbol is a filtered reconstruction that blurs at 16px, so it is not the file we render. The Google wordmark is the SVGL original.