- Keep the tilt. The mark is always drawn at its rotation; never straighten it.
- Leave clear space around it equal to the dial's diameter.
- Use the simple mark under 32 px: no tiles, no dial teeth, thicker outline.
- Use the dark files (cream rim) on any dark background.
One sticker sheet for everything.
The tokens and components behind the site, kept in step with the phone app and the logo. Flip the theme in the nav to see both modes.
Logo
R2 "Arcade original". One drawing, four files: full and simple, light and dark. The single source is src/brand/mark.ts.
Do
Don't
- Recolor the mark's shell. Mustard is the identity; the keys and tiles can carry other palettes.
- Put the black-shadow version on a dark background. The shadow vanishes and the sticker falls flat.
- Stretch, add gradients, or drop the outline.
- Rebuild it by hand. Change
mark.tsand runnpm run logos.
Color
Brand
#E0A93A--brand-mustard#4C7BD9--brand-cobalt#3EA7A2--brand-teal#D9573F--brand-tomato#F3E9D2--brand-cream#141413--brand-ink#3B3A36--brand-cap#8A8578--brand-tile-greyStatus (shared with the app)
#4CC38A--status-waiting#5B9CF6--status-working#8A9099--status-idleThemed surfaces and text
| Token | Light | Dark |
|---|---|---|
Ground--color-ground | #F3E9D2 | #0F1113 |
Surface--color-surface | #FBF6EA | #141719 |
Raised--color-raised | #FFFFFF | #181B1F |
Border--color-border | #D9CFB6 | #1E2227 |
Border strong--color-border-strong | #B9AD8E | #2A2E34 |
Text--color-text | #141413 | #E8E6E1 |
Text secondary--color-text-secondary | #3F3B34 | #A9AEB5 |
Text muted--color-text-muted | #5A564E | #9AA0A8 |
Ink (outlines, shadows)--color-ink | #141413 | #F3E9D2 |
Link--color-link | #2F5BB8 | #8DB9FF |
Muted text is 6.1:1 on cream and 7.2:1 on ground, so captions pass AA in both themes.
Type
Space Grotesk for anything that shouts, IBM Plex Sans for reading, JetBrains Mono for the terminal. Loaded from Google Fonts.
Space, radius, shadow
4812162024324048648096--radius-sm8px--radius-md12px--radius-lg16px--radius-xl24px--radius-pill999px--shadow-sticker4px 4px 0 ink--shadow-sticker-lg8px 8px 0 ink--shadow-sticker-pressed1px 1px 0 inkMax content width 1120 px, 16 px side gutter on phones, never a horizontal scroll.
Components
Button
StatusDot
SessionRow
Needs approval to run the rooms migration.
Splitting the group list into one row per member.
SessionGroup and MemberCard
Regenerating the logo PNGs from mark.ts.
Wants to know which branch to diff against.
AgentGlyph
Card
With a title
With an eyebrow
CodeBlock
grenade daemon
grenade pair
{ "ok": true, "version": "0.1.0" }
PhoneMock
Asking whether to keep tmux for screen capture.
Splitting the group list into one row per member.
Needs approval to run the rooms migration.
Regenerating the logo PNGs from mark.ts.
Logo
Logo with mode="auto" (the default) ships both drawings and shows the right one per theme with no script.
Downloads
Everything in public/brand/, generated by npm run logos.
- grenade-mark.svg
- grenade-mark-dark.svg
- grenade-mark-simple.svg
- grenade-mark-simple-dark.svg
- grenade-wordmark.svg
- grenade-wordmark-dark.svg
- favicon.svg
- grenade-mark-16.png
- grenade-mark-32.png
- grenade-mark-48.png
- grenade-mark-64.png
- grenade-mark-128.png
- grenade-mark-256.png
- grenade-mark-512.png
- grenade-mark-1024.png
- grenade-mark-dark-16.png
- grenade-mark-dark-32.png
- grenade-mark-dark-48.png
- grenade-mark-dark-64.png
- grenade-mark-dark-128.png
- grenade-mark-dark-256.png
- grenade-mark-dark-512.png
- grenade-mark-dark-1024.png
- apple-touch-icon.png
- icon-192.png
- icon-512.png
- og-image.png
- README.md