Colour
A neutral grey and one flat magenta, in semantic tokens with a light and a dark value each.
Ramps
Two ramps. Magenta 500 is the brand on every ground and 600 carries white text; the neutral ramp holds everything else.
Semantic tokens
What a colour is for, with its light and dark value. Components read these, never a ramp step.
| Token | Value | Where it lands |
|---|---|---|
| --cm-bg-canvas | #f6f6f7 / #0e0e10 | The page behind everything |
| --cm-bg-surface | #ffffff / #16161a | Cards and panels |
| --cm-bg-raised | #ffffff / #1f1f24 | Menus and sheets above a surface |
| --cm-bg-sunken | #ececee / #1f1f24 | Chips, keycaps, tracks |
| --cm-border-subtle | #d9d9dd / #2a2a30 | Dividers and resting edges |
| --cm-border-strong | #77777f | Input and control edges, 3:1 or better |
| --cm-text-primary | #0e0e10 / #f6f6f7 | Body and headings |
| --cm-text-secondary | #5a5a62 / #9a9aa2 | Supporting text, 6.9:1 on its ground |
| --cm-text-on-accent | #ffffff / #0e0e10 | Text on an accent fill |
| --cm-accent-fill | #ca0e6f / #ff2d95 | Primary buttons, selected controls |
| --cm-accent-fill-hover | #a6085b / #ff56aa | Hover on an accent fill |
| --cm-accent-text | #ca0e6f / #ff56aa | Links and accent words |
| --cm-accent-subtle | #fff0f7 / #42062a | Selected backgrounds |
| --cm-focus-ring | #ca0e6f / #ff56aa | The 2px focus ring |
| --cm-brand-dot | #ff2d95 | The ping and the logo's o, on every ground |
| --cm-status-urgent | #ca0e6f / #ff2d95 | Urgent messages |
| --cm-elevation-flat | 0 1px 2px rgba(14, 14, 16, 0.04) / 0 0 0 1px rgba(255, 255, 255, 0.06) | Rows and small surfaces resting on a card |
| --cm-elevation-card | 0 1px 2px rgba(14, 14, 16, 0.03), 0 6px 20px -6px rgba(14, 14, 16, 0.07) / 0 0 0 1px rgba(255, 255, 255, 0.06) | Major containers: cards, panels, the tab bar. Replaces the grey stroke |
| --cm-elevation-raised | 0 2px 4px rgba(14, 14, 16, 0.04), 0 16px 40px -12px rgba(14, 14, 16, 0.14) / 0 0 0 1px rgba(255, 255, 255, 0.08), 0 24px 60px -20px rgba(0, 0, 0, 0.6) | Menus, popovers, the floating tab bar |
| --cm-elevation-overlay | 0 4px 8px rgba(14, 14, 16, 0.05), 0 32px 72px -20px rgba(14, 14, 16, 0.28) / 0 0 0 1px rgba(255, 255, 255, 0.08), 0 24px 60px -20px rgba(0, 0, 0, 0.6) | Dialogs and sheets over a scrim |
Overlay
The overlay sits over a game, not over the app’s theme, so it carries its own colours. Dark glass is the default; he can switch the card to light in Overlay settings.
| Token | Value | Where it lands |
|---|---|---|
| --cm-overlay-glass | rgba(20, 20, 23, 0.82) | The notification's ground |
| --cm-overlay-edge | rgba(255, 255, 255, 0.08) | Its hairline |
| --cm-overlay-text | #f6f6f7 | Name and message |
| --cm-overlay-text-2 | #9a9aa2 | Time and context |
| --cm-overlay-chip | rgba(255, 255, 255, 0.07) | The mood chip on glass |
Mood colours
Each mood has one fill. They appear only inside a mood glyph, always beside the mood’s word.
| Token | Value | Where it lands |
|---|---|---|
| --cm-p-mood-lonely | #a78bfa | Lonely |
| --cm-p-mood-hungry | #ff8a3d | Hungry |
| --cm-p-mood-bored | #b7b7bf | Bored |
| --cm-p-mood-proud | #ffd23f | Proud of you |
| --cm-p-mood-comehere | #ff2d95 | Come here |
| --cm-p-mood-missyou | #ff8ac4 | Missing you |
Contrast
| Pair | Where it’s used | Contrast |
|---|---|---|
| Magenta 500 on Neutral 950 | The ping and the fuse on the overlay | 5.6 : 1 |
| White on Magenta 600 | Primary buttons and her bubbles, light | 5.4 : 1 |
| Neutral 600 on white | Secondary text, light | 6.9 : 1 |
| Neutral 400 on Neutral 950 | Secondary text on the overlay | 6.9 : 1 |
| Neutral 500 on white | Control edges: switch, input | 4.4 : 1 |
- Put magenta where someone at home is present: the ping, the fuse, her messages, Send.
- Use Magenta 600 under white text; 500 under ink.
- A glow, gradient or second accent. Pink is flat and alone.
- Neutral 500 for small text. At 4.4:1 it’s for control edges only.