Make room for calm
Use deep or softly tinted backgrounds, generous space and restrained accents. Each screen or creative should have one clear focus.
The StillWell design system
One shared language for StillWell. The foundations, patterns and words that bring our website, app and stories together.
Every choice should make StillWell feel considered, approachable and easy to understand.
Use deep or softly tinted backgrounds, generous space and restrained accents. Each screen or creative should have one clear focus.
Speak to a person, not a diagnosis. Use everyday language, short sentences and a useful next step.
Show the real product. Be specific about what a feature does and honest about the limits of any claim.
Carry the same colour relationships, soft shapes and measured tone across platforms. Keep native controls native.
Documents existing visual foundations and establishes contribution rules. Component previews are reference specimens, not a claim that every existing screen already meets every rule. Older marketing briefs may contain outdated colours, product facts or claims; use current source code and verified product information.
Our name stays the same everywhere. Use the right existing asset for the surface you are creating.
A distinct asset, used for the app.
Deep, quiet foundations. Fresh accents used with intention. Colour has a role before it has a name.
#0a0f0dOur quiet starting point
#0d1210A small step above the canvas
#10b981The original mark’s green
#2dd4bfThe original mark’s gradient end
#ffffffClear and confident
oklch(70.8% 0 0)Quiet, still readable on dark
A softer place to land.
emerald-400 → teal-300 → cyan-400| Interface role | Light | Dark |
|---|---|---|
canvas | #f6f8f5 | #0a0f0d |
foreground | #172e22 | #f4f7f5 |
muted | #52675a | #a3aaa6 |
secondary | #354d3e | #b4bfb7 |
heading-muted | #567360 | #95a99e |
line | #193b2426 | #ffffff1a |
accent | #08734e | var(--color-emerald-400) |
surface | #eaf0e9 | #ffffff05 |
surface-hover | #dfeae1 | #ffffff0d |
control-border | #708978 | #6b8977 |
control-background | #173e29 | #f3f7f4 |
control-foreground | #ffffff | #0a0f0d |
control-hover | #21553a | #d9f5e5 |
selected-background | #d4eedd | #164831 |
selected-foreground | #174d31 | #baf4d1 |
accent-border | #79a48a | #3c5e4b |
accent-muted | #08734e | #68b592 |
warning-text | #944225 | #e3b9a6 |
A gentle sound for your routine
Illustrative layout and sample data. Uses exact theme colours; not an app screenshot. Muted text still needs contrast review.
mobile-app/src/themes/mint.css
| Role | Source value |
|---|---|
background | var(--white) |
foreground | oklch(0.22 0.05 170) |
surface | oklch(0.98 0.01 170) |
surface-foreground | oklch(0.28 0.055 170) |
overlay | oklch(0.998 0.003 170) |
overlay-foreground | oklch(0.28 0.055 170) |
muted | oklch(0.52 0.04 170) |
default | oklch(0.94 0.02 170) |
default-foreground | oklch(0.38 0.06 170) |
accent | oklch(0.7 0.16 175) |
accent-foreground | oklch(0.98 0.005 175) |
field-background | oklch(0.98 0.01 170) |
field-foreground | oklch(0.22 0.05 170) |
field-placeholder | var(--muted) |
field-border | transparent |
success | oklch(0.75 0.15 155) |
success-foreground | oklch(0.22 0.08 155) |
warning | oklch(0.8 0.13 95) |
warning-foreground | oklch(0.28 0.08 95) |
danger | oklch(0.66 0.19 25) |
danger-foreground | oklch(0.98 0.005 25) |
segment | oklch(0.98 0.01 170) |
segment-foreground | oklch(0.22 0.05 170) |
border | oklch(0 0 0 / 0%) |
divider | oklch(0.92 0.016 170) |
link | oklch(0.62 0.15 175) |
surface-shadow | 0 2px 4px 0 rgba(0, 0, 0, 0.04), 0 1px 2px 0 rgba(0, 0, 0, 0.06), 0 0 1px 0 rgba(0, 0, 0, 0.06) |
overlay-shadow | 0 4px 16px 0 rgba(24, 24, 27, 0.08), 0 8px 24px 0 rgba(24, 24, 27, 0.09) |
field-shadow | 0 2px 4px 0 rgba(0, 0, 0, 0.04), 0 1px 2px 0 rgba(0, 0, 0, 0.06), 0 0 1px 0 rgba(0, 0, 0, 0.06) |
mobile-app/src/themes/mint.css
| Role | Source value |
|---|---|
background | oklch(0.078 0 0) |
foreground | oklch(0.95 0.01 170) |
surface | oklch(0.19 0.05 170) |
surface-foreground | oklch(0.91 0.015 170) |
overlay | oklch(0.22 0.048 170) |
overlay-foreground | oklch(0.91 0.015 170) |
muted | oklch(0.48 0.045 170) |
default | oklch(0.24 0.052 170) |
default-foreground | oklch(0.89 0.018 170) |
accent | oklch(0.68 0.18 175) |
accent-foreground | oklch(0.12 0.045 175) |
field-background | var(--default) |
field-foreground | var(--foreground) |
field-placeholder | var(--muted) |
field-border | transparent |
success | oklch(0.7 0.17 158) |
success-foreground | oklch(0.96 0.008 158) |
warning | oklch(0.76 0.15 98) |
warning-foreground | oklch(0.18 0.04 98) |
danger | oklch(0.64 0.2 28) |
danger-foreground | oklch(0.96 0.008 28) |
segment | oklch(0.21 0.049 170) |
segment-foreground | oklch(0.91 0.015 170) |
border | oklch(0 0 0 / 0%) |
divider | oklch(0.26 0.048 170) |
link | oklch(0.72 0.16 175) |
surface-shadow | 0 0 0 0 transparent inset |
overlay-shadow | 0 0 0 0 transparent inset |
field-shadow | 0 0 0 0 transparent inset |
mobile-app/src/themes/alpha.css
| Role | Source value |
|---|---|
background | var(--white) |
foreground | var(--eclipse) |
surface | var(--white) |
surface-foreground | var(--foreground) |
overlay | var(--white) |
overlay-foreground | var(--foreground) |
muted | var(--color-neutral-500) |
default | var(--color-neutral-50) |
default-foreground | var(--eclipse) |
accent | var(--color-neutral-950) |
accent-foreground | var(--snow) |
field-background | var(--default) |
field-foreground | var(--foreground) |
field-placeholder | var(--muted) |
field-border | transparent |
success | oklch(0.5503 0.1244 153.56) |
success-foreground | var(--snow) |
warning | oklch(0.7186 0.1521 64.85) |
warning-foreground | var(--eclipse) |
danger | oklch(0.6259 0.1908 29.19) |
danger-foreground | var(--snow) |
segment | var(--white) |
segment-foreground | var(--eclipse) |
border | var(--color-neutral-200) |
divider | var(--color-neutral-400) |
link | var(--foreground) |
surface-shadow | 0 2px 4px 0 rgba(0, 0, 0, 0.04), 0 1px 2px 0 rgba(0, 0, 0, 0.06), 0 0 1px 0 rgba(0, 0, 0, 0.06) |
overlay-shadow | 0 4px 16px 0 rgba(24, 24, 27, 0.08), 0 8px 24px 0 rgba(24, 24, 27, 0.09) |
field-shadow | 0 2px 4px 0 rgba(0, 0, 0, 0.04), 0 1px 2px 0 rgba(0, 0, 0, 0.06), 0 0 1px 0 rgba(0, 0, 0, 0.06) |
mobile-app/src/themes/alpha.css
| Role | Source value |
|---|---|
background | var(--black) |
foreground | var(--snow) |
surface | var(--eclipse) |
surface-foreground | var(--foreground) |
overlay | var(--color-neutral-800) |
overlay-foreground | var(--foreground) |
muted | var(--color-neutral-400) |
default | var(--color-neutral-900) |
default-foreground | var(--snow) |
accent | var(--color-neutral-50) |
accent-foreground | var(--eclipse) |
field-background | var(--default) |
field-foreground | var(--foreground) |
field-placeholder | var(--muted) |
field-border | transparent |
success | oklch(0.5503 0.1244 153.56) |
success-foreground | var(--snow) |
warning | oklch(85% 0.1414 77.88) |
warning-foreground | var(--eclipse) |
danger | oklch(0.5798 0.1635 30.83) |
danger-foreground | var(--snow) |
segment | var(--color-neutral-900) |
segment-foreground | var(--foreground) |
border | var(--color-neutral-800) |
divider | var(--color-neutral-600) |
link | var(--foreground) |
surface-shadow | 0 0 0 0 transparent inset |
overlay-shadow | 0 0 0 0 transparent inset |
field-shadow | 0 0 0 0 transparent inset |
A confident sans-serif voice on the web. Familiar system typography in the app.
Aa
Find your
own quiet.
ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz
0123456789 & ? ! @
| Role | Website | Mobile | Usage |
|---|---|---|---|
| Display | 48–64 px / 1.1–1.2 · 700 | 30–36 pt · 700 | Short hero headlines. One dominant message. |
| Heading | 24–32 px / 1.25 · 600 | 24–30 pt · 600–700 | Section and screen titles. |
| Title | 18–20 px / 1.4 · 600 | 18–20 pt · 600 | Cards, sheet titles and important labels. |
| Body | 16–18 px / 1.6–1.8 · 400 | 16 pt · 400 | Readable, short paragraphs. Aim for 45–75 characters per line on the web. |
| Caption | 12–14 px / 1.5 · 400–500 | 12–14 pt · 400–500 | Supporting metadata, never the only place for essential instructions. |
A steady rhythm, soft corners and surfaces that separate content without adding noise.
4812162432486496Icon tiles and compact controls
List items and inputs
Standard cards
Large grouped surfaces
Reference patterns grounded in the existing product. Try the controls, then reuse the implementation that fits your platform.
Actions & states
Interactive specimen. Nothing is saved to your account.
One clear heading. A quiet surface. Space to breathe.
One primary action per section. The current marketing download action is white with dark text. Use a descriptive verb; show visible hover, focus, pressed, disabled and loading states.
stillwell-web/src/components/marketing/components.tsx · AppStoreButton
16 px radius, 24 px padding, quiet border, accent icon tile, concise heading and supporting text. Keep the whole card static unless it has a meaningful destination.
stillwell-web/src/components/ui.tsx · FeatureCard
Semantic surface, 16 px radius and padding, 48 px leading control. Show sound name, description and separate favourite action. Make playing and locked states understandable without colour.
mobile-app/src/components/sounds/SoundCard.tsx
Separate playback, volume and timer actions. Label icon buttons. Show current playback state in text. Never start audio without the listener choosing to play.
mobile-app/src/components/sounds/MiniPlayer.tsx · SleepTimerSheet.tsx
Use labelled fields, inline errors and native sheet primitives. Keep entered values on recoverable errors. Restore focus after a dialog closes and keep dismiss actions reachable.
mobile-app/src/components/profile/ · heroui-native
Pair rings with a number and text. Celebrate gently without pressure or implying a health outcome. Use explicit success, warning and error labels alongside semantic colours.
mobile-app/src/components/sessions/GoalProgress.tsx · StreakBadge.tsx
Web specimens demonstrate visual and interaction guidance. They are not native components, live audio controls or captures of the app.
Movement adds context. Accessibility makes the experience work.
Interaction feedback
Existing web entrances
When reduced motion is preferred
Warm, direct and measured. Give people agency, useful information and a little breathing room.
“Find a sound that feels right for you.”
Avoid Your tinnitus is ruining your life.
“Choose a sound. Set a timer. Take a moment.”
Avoid Optimise your neuroacoustic wellness journey.
“Make space for a calmer daily routine.”
Avoid Cure tinnitus in 12 weeks. Guaranteed.
“Start again whenever you’re ready.”
Avoid You lost your streak. Don’t fall behind.
Give any contributor the same starting point. The visual guide and agent exports share one source.
Create for StillWell using https://stillwellapp.com/design/brand.md and https://stillwellapp.com/design/tokens.json. Use the appropriate light or dark semantic palette, restrained emerald/teal accents, generous space, rounded surfaces and clear sans-serif typography. The design reference supports light, dark and system preferences; existing marketing routes use dark green. Website: Mona Sans. Mobile: native type, mint semantic tokens and light/dark support. Use the supplied brand assets without redrawing them. Write warm, concise British English. Never invent product facts, testimonials, clinical claims or guaranteed outcomes. Follow the target surface’s rules, verify accessibility and actual platform crops, and report any unresolved facts. Fetch /design/system.json for the full structured guide.
/design/brand.mdPlain Markdown · full rules + tokensColour tokens ↗/design/tokens.jsonJSON · exact website & native valuesComplete system ↗/design/system.jsonJSON · guidance, assets & tokensBrand content: stillwell-web/src/lib/design-system.ts. Generated colour snapshot: stillwell-web/src/lib/design-tokens.json. Web foundations: src/app/brand-tokens.css and src/app/globals.css. Native themes: mobile-app/src/themes/. Font: stillwell-web/src/fonts/Mona-Sans.var.woff2.
Run npm run design:sync after changing source colours or the native icon, then npm run design:check. Check the rendered result in both native themes and at mobile and desktop web sizes. Guide version: 1.1.0.
Recognisably StillWell. Anywhere.
Keep the same calm presence when the canvas changes. One message, a little space and a familiar signature.
Make room
for a little
calm.
Choose a sound.
Set a timer.
Take a moment.
Dark campaign artwork specimens, shown in their original colours in either page theme. No product outcomes or testimonials are implied.
These are StillWell working templates, not a statement of current platform upload requirements. Check the destination preview and cropping before publishing.
Build a social creative
Imagery & iconography