Skip to design system
StillWell
Brand & product guidelinesv1.1.0Visit website

The StillWell design system

A little more calm.
In everything we make.

One shared language for StillWell. The foundations, patterns and words that bring our website, app and stories together.

One identity. Three expressions.
01 / Website02 / Mobile app03 / Marketing
01

Calm is a design decision.

Every choice should make StillWell feel considered, approachable and easy to understand.

01

Make room for calm

Use deep or softly tinted backgrounds, generous space and restrained accents. Each screen or creative should have one clear focus.

02

Be human and clear

Speak to a person, not a diagnosis. Use everyday language, short sentences and a useful next step.

03

Earn trust

Show the real product. Be specific about what a feature does and honest about the limits of any claim.

04

Keep the family resemblance

Carry the same colour relationships, soft shapes and measured tone across platforms. Keep native controls native.

About this reference

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.

02

A familiar signature.

Our name stays the same everywhere. Use the right existing asset for the surface you are creating.

StillWellWebsite mark + typographic signature
StillWell native app icon: a white ear on a green background
The native app icon

A distinct asset, used for the app.

  • Write StillWell with a capital S and W. Use The StillWell Program for the named program; use sentence case elsewhere.
  • Use the supplied assets. The website favicon, Apple touch icon and native app icon are distinct existing assets; do not silently substitute one for another or redraw their waveforms.
  • For new layouts, leave clear space of at least one quarter of the icon width on each side. Show the website mark at 24 px or larger; use the native icon at appropriate platform resolution.
  • Keep marks proportional, upright and unaltered. Do not recolour, stretch, add shadows to, or place busy imagery behind the mark. The wordmark uses a clean semibold sans-serif alongside the supplied mark.
03

Rooted in green.

Deep, quiet foundations. Fresh accents used with intention. Colour has a role before it has a name.

Canvas

#0a0f0d

Our quiet starting point

Panel

#0d1210

A small step above the canvas

Emerald

#10b981

The original mark’s green

Teal

#2dd4bf

The original mark’s gradient end

Primary text

#ffffff

Clear and confident

Supporting text

oklch(70.8% 0 0)

Quiet, still readable on dark

The website highlight · dark artwork specimen

A softer place to land.

emerald-400 → teal-300 → cyan-400
  • The /design reference supports Light, Dark and System themes. System follows the device preference; an explicit choice is remembered in this browser. The light canvas is #f6f8f5 with #172e22 text and #08734e accents. Other marketing routes currently retain their dark presentation.
  • Use the designThemes light/dark semantic pairs in /design/tokens.json for the guide’s interface. Controls, surfaces and text change together. The native preview has its own theme selector; fixed colour swatches and labelled dark artwork specimens keep their original colours.
  • Website foundations: bg-canvas (#0a0f0d), bg-panel (#0d1210), white primary text and neutral-300/400 supporting text. Use emerald-400 for links and emphasis on dark surfaces.
  • Asset colours: #10b981 and #2dd4bf come from the existing favicon. Tailwind v4 emerald/teal utilities use OKLCH values and are not exact aliases for these legacy hex values.
  • The website highlight gradient runs emerald-400 → teal-300 → cyan-400. Keep gradients to short display text, icon tiles or soft ambient glows. Set body text in a solid colour.
  • Mobile defaults to the mint palette and follows the system light/dark preference. Use semantic roles: background, foreground, surface, surface-foreground, accent, accent-foreground, muted, divider, success, warning and danger.
  • Mint and alpha light/dark variants are defined and registered in Metro. Default light/dark come from HeroUI. Lavender and sky names appear in the context type but are not currently registered palettes; do not treat them as supported themes.
  • Preserve exact native OKLCH source values. Some colours require gamut mapping on sRGB output. Check actual rendered contrast, particularly muted text and light-mode accents; a token is not an accessibility guarantee.
Inspect light & dark reference colours
Interface roleLightDark
canvas#f6f8f5#0a0f0d
foreground#172e22#f4f7f5
muted#52675a#a3aaa6
secondary#354d3e#b4bfb7
heading-muted#567360#95a99e
line#193b2426#ffffff1a
accent#08734evar(--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
Native mint · reference specimen
YOUR DAILY MOMENT

A little space for you.

Ocean Wash

A gentle sound for your routine

Sound
Daily listening12 / 20 min

Illustrative layout and sample data. Uses exact theme colours; not an app screenshot. Muted text still needs contrast review.

Inspect exact mobile theme tokens · mint & alpha

mint-light

mobile-app/src/themes/mint.css

RoleSource value
backgroundvar(--white)
foregroundoklch(0.22 0.05 170)
surfaceoklch(0.98 0.01 170)
surface-foregroundoklch(0.28 0.055 170)
overlayoklch(0.998 0.003 170)
overlay-foregroundoklch(0.28 0.055 170)
mutedoklch(0.52 0.04 170)
defaultoklch(0.94 0.02 170)
default-foregroundoklch(0.38 0.06 170)
accentoklch(0.7 0.16 175)
accent-foregroundoklch(0.98 0.005 175)
field-backgroundoklch(0.98 0.01 170)
field-foregroundoklch(0.22 0.05 170)
field-placeholdervar(--muted)
field-bordertransparent
successoklch(0.75 0.15 155)
success-foregroundoklch(0.22 0.08 155)
warningoklch(0.8 0.13 95)
warning-foregroundoklch(0.28 0.08 95)
dangeroklch(0.66 0.19 25)
danger-foregroundoklch(0.98 0.005 25)
segmentoklch(0.98 0.01 170)
segment-foregroundoklch(0.22 0.05 170)
borderoklch(0 0 0 / 0%)
divideroklch(0.92 0.016 170)
linkoklch(0.62 0.15 175)
surface-shadow0 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-shadow0 4px 16px 0 rgba(24, 24, 27, 0.08), 0 8px 24px 0 rgba(24, 24, 27, 0.09)
field-shadow0 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)

mint-dark

mobile-app/src/themes/mint.css

RoleSource value
backgroundoklch(0.078 0 0)
foregroundoklch(0.95 0.01 170)
surfaceoklch(0.19 0.05 170)
surface-foregroundoklch(0.91 0.015 170)
overlayoklch(0.22 0.048 170)
overlay-foregroundoklch(0.91 0.015 170)
mutedoklch(0.48 0.045 170)
defaultoklch(0.24 0.052 170)
default-foregroundoklch(0.89 0.018 170)
accentoklch(0.68 0.18 175)
accent-foregroundoklch(0.12 0.045 175)
field-backgroundvar(--default)
field-foregroundvar(--foreground)
field-placeholdervar(--muted)
field-bordertransparent
successoklch(0.7 0.17 158)
success-foregroundoklch(0.96 0.008 158)
warningoklch(0.76 0.15 98)
warning-foregroundoklch(0.18 0.04 98)
dangeroklch(0.64 0.2 28)
danger-foregroundoklch(0.96 0.008 28)
segmentoklch(0.21 0.049 170)
segment-foregroundoklch(0.91 0.015 170)
borderoklch(0 0 0 / 0%)
divideroklch(0.26 0.048 170)
linkoklch(0.72 0.16 175)
surface-shadow0 0 0 0 transparent inset
overlay-shadow0 0 0 0 transparent inset
field-shadow0 0 0 0 transparent inset

alpha-light

mobile-app/src/themes/alpha.css

RoleSource value
backgroundvar(--white)
foregroundvar(--eclipse)
surfacevar(--white)
surface-foregroundvar(--foreground)
overlayvar(--white)
overlay-foregroundvar(--foreground)
mutedvar(--color-neutral-500)
defaultvar(--color-neutral-50)
default-foregroundvar(--eclipse)
accentvar(--color-neutral-950)
accent-foregroundvar(--snow)
field-backgroundvar(--default)
field-foregroundvar(--foreground)
field-placeholdervar(--muted)
field-bordertransparent
successoklch(0.5503 0.1244 153.56)
success-foregroundvar(--snow)
warningoklch(0.7186 0.1521 64.85)
warning-foregroundvar(--eclipse)
dangeroklch(0.6259 0.1908 29.19)
danger-foregroundvar(--snow)
segmentvar(--white)
segment-foregroundvar(--eclipse)
bordervar(--color-neutral-200)
dividervar(--color-neutral-400)
linkvar(--foreground)
surface-shadow0 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-shadow0 4px 16px 0 rgba(24, 24, 27, 0.08), 0 8px 24px 0 rgba(24, 24, 27, 0.09)
field-shadow0 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)

alpha-dark

mobile-app/src/themes/alpha.css

RoleSource value
backgroundvar(--black)
foregroundvar(--snow)
surfacevar(--eclipse)
surface-foregroundvar(--foreground)
overlayvar(--color-neutral-800)
overlay-foregroundvar(--foreground)
mutedvar(--color-neutral-400)
defaultvar(--color-neutral-900)
default-foregroundvar(--snow)
accentvar(--color-neutral-50)
accent-foregroundvar(--eclipse)
field-backgroundvar(--default)
field-foregroundvar(--foreground)
field-placeholdervar(--muted)
field-bordertransparent
successoklch(0.5503 0.1244 153.56)
success-foregroundvar(--snow)
warningoklch(85% 0.1414 77.88)
warning-foregroundvar(--eclipse)
dangeroklch(0.5798 0.1635 30.83)
danger-foregroundvar(--snow)
segmentvar(--color-neutral-900)
segment-foregroundvar(--foreground)
bordervar(--color-neutral-800)
dividervar(--color-neutral-600)
linkvar(--foreground)
surface-shadow0 0 0 0 transparent inset
overlay-shadow0 0 0 0 transparent inset
field-shadow0 0 0 0 transparent inset
Download all colour tokens as JSON ↗
04

Clear words. Room to breathe.

A confident sans-serif voice on the web. Familiar system typography in the app.

Mona Sans / variable

Aa

Find your
own quiet.

ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz
0123456789 & ? ! @

RoleWebsiteMobileUsage
Display48–64 px / 1.1–1.2 · 70030–36 pt · 700Short hero headlines. One dominant message.
Heading24–32 px / 1.25 · 60024–30 pt · 600–700Section and screen titles.
Title18–20 px / 1.4 · 60018–20 pt · 600Cards, sheet titles and important labels.
Body16–18 px / 1.6–1.8 · 40016 pt · 400Readable, short paragraphs. Aim for 45–75 characters per line on the web.
Caption12–14 px / 1.5 · 400–50012–14 pt · 400–500Supporting metadata, never the only place for essential instructions.
  • Website: use the bundled Mona Sans variable font (200–900). The font-display utility sets the width axis to 125 for editorial headings. Do not stretch ordinary body text.
  • Mobile: use React Native system typography, including San Francisco on iOS. No custom UI font is loaded by the app. Allow font scaling and flexible text height.
  • Marketing: use Mona Sans for designed artwork; use the platform system sans-serif if Mona Sans is unavailable. Use one type family per creative.
  • The scale above is contribution guidance based on existing usage. Tailwind v4 text-* utilities use its --text-* scale; the legacy --font-size-* variables in globals.css are used explicitly by rich-text styles and do not redefine those utilities.
05

Space is part of the system.

A steady rhythm, soft corners and surfaces that separate content without adding noise.

4
8
12
16
24
32
48
64
96
8

Small

Icon tiles and compact controls

12

Medium

List items and inputs

16

Large

Standard cards

24

Feature

Large grouped surfaces

  • Use a 4-unit spacing base. Web units are CSS pixels; native dimensions are logical points. Prefer Tailwind spacing utilities over arbitrary values.
  • Website content uses a centred max-w-7xl container (1280 px), 24 px side padding and 64–96 px section spacing. Collapse grids as space decreases.
  • Mobile cards typically use 16 px padding and a 16 px radius. Respect safe areas, keyboard insets and large text settings.
  • Use a fully rounded shape for badges and play controls. Hairline white borders at 5–10% opacity separate dark web surfaces; essential control boundaries need stronger contrast.
  • Web cards commonly use white at 2–5% over the canvas, with a subtle emerald hover border. Native cards use bg-surface, not copied web hex colours. Native dark shadows are transparent; light-mode shadows come from the theme.
06

Small parts. A consistent whole.

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.

Make a little room.

One clear heading. A quiet surface. Space to breathe.

Primary action

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

Feature card

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

Sound card

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

Player & timer

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

Forms & sheets

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

Progress & feedback

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.

07

Gentle by default. Usable by everyone.

Movement adds context. Accessibility makes the experience work.

150–300ms

Interaction feedback

600ms

Existing web entrances

0decorative motion

When reduced motion is preferred

Motion

  • Use a calm pace: 150–300 ms for interaction feedback. Existing web entrance animations use a 600 ms ease-out fade with up to 30 px upward travel; stagger steps by 100 ms when appropriate.
  • Respect prefers-reduced-motion on the web and the native reduced-motion preference. Remove decorative movement and repeating waves; all content must remain visible without animation or JavaScript.
  • Waveforms communicate sound, not measured clinical change. Never flash, pulse urgently, simulate tinnitus with piercing tones, or autoplay audio in marketing.

Accessibility acceptance criteria

  • Target WCAG 2.2 AA: at least 4.5:1 for ordinary text, 3:1 for large text and meaningful interface graphics. Test actual foreground/background pairs in every theme and state.
  • Use at least 44 × 44 CSS px or native points for touch controls. Keep visible keyboard focus, logical heading order and a skip link. Icon-only actions need accessible names.
  • Never use colour or sound alone to communicate state. Add text labels, captions for spoken content and useful alt text for meaningful imagery. Hide purely decorative artwork from assistive technology.
  • Check a 320 px viewport, 200% zoom, long labels, native font scaling, keyboard operation and reduced motion. Essential content must reflow without being clipped.
08

Sound like someone who understands.

Warm, direct and measured. Give people agency, useful information and a little breathing room.

Warm

“Find a sound that feels right for you.”

Avoid Your tinnitus is ruining your life.

Clear

“Choose a sound. Set a timer. Take a moment.”

Avoid Optimise your neuroacoustic wellness journey.

Measured

“Make space for a calmer daily routine.”

Avoid Cure tinnitus in 12 weeks. Guaranteed.

Encouraging

“Start again whenever you’re ready.”

Avoid You lost your streak. Don’t fall behind.

  • Use British English (personalised, colour, favourite) for brand copy, except official feature names and platform labels. Use sentence case, everyday words and direct, gentle calls to action.
  • Describe features and possibilities without promising a cure, guaranteed relief, a fixed recovery time or universal results. Do not turn general research findings into StillWell user success rates.
  • Verify statistics, research quotations, testimonials, ratings, prices, sound counts and availability before publishing. Do not invent endorsements or recycle unverified claims from old marketing files.
  • Keep evidence and its context together. Cite the underlying source for any medical or numerical claim and have health-related copy reviewed. This design system supplies brand rules, not clinical advice.
09

Recognisably StillWell. Anywhere.

Keep the same calm presence when the canvas changes. One message, a little space and a familiar signature.

01 / Portrait · brand message
02 / Square · product routine

Dark campaign artwork specimens, shown in their original colours in either page theme. No product outcomes or testimonials are implied.

Working canvasDimensionsContent insetUse
Portrait post4:51080 × 135080 pxOne idea, short headline, small brand signature.
Square post1:11080 × 108080 pxSimple educational cards and reusable carousel slides.
Vertical story9:161080 × 192090 px sides; 250 px top/bottomKeep essential text away from interface overlays; check platform preview.

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

  • Start with the deep green canvas. Add one subtle emerald/teal glow or a calm licensed image. Keep a large area of negative space.
  • Set a short headline in Mona Sans semibold/bold (64–88 px on a 1080 px canvas); supporting copy at 32–40 px. Use white text and at most one short accent phrase.
  • Keep the supplied logo and StillWell name together with clear space. Place the signature consistently. Use one gentle CTA and avoid crowding the footer.
  • For carousels, put one idea on each slide and retain the same margins and title position. Put citations on the relevant slide or in its accompanying caption, not in unreadable fine print.
  • Export raster artwork in sRGB. Review at phone size, add alt text and captions, verify factual claims and check the actual platform crop. Sample layouts here are illustrative, not testimonials or product screenshots.

Imagery & iconography

  • Use real, current app captures for product imagery. Prefer dark mint for campaign artwork while still showing light mode when relevant. Label illustrative UI and sample data so they cannot be mistaken for the shipped app or a real outcome.
  • Choose spacious nature photography, soft light, still water or restrained abstract sound forms. Preserve a quiet area for text. Avoid distressed faces, clinical imagery used as an endorsement, busy collages and neon effects.
  • Web icons use simple SVG line work with rounded caps, typically 20–24 px and 1.5–2 px strokes. Mobile uses Ionicons. Existing category emoji may stay in product context; do not mix multiple decorative icon styles in one creative.
  • Use licensed or owned media. Add final copy and the supplied mark as separate layout layers after generating imagery; do not ask an image model to invent the logo or reproduce the app UI.
10

A shared reference. Ready to build on.

Give any contributor the same starting point. The visual guide and agent exports share one source.

Your starting brief

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.

Contribution workflow

  • Read /design/brand.md before starting. Fetch /design/tokens.json for exact colour values and /design/system.json for all structured guidance. Choose the website, native or marketing rules for the target surface.
  • Reuse existing components and supplied assets. Native additions use HeroUI Native and Uniwind semantic tokens; website additions use the shared canvas tokens, Tailwind and the existing marketing components.
  • Keep copy concise and verify every product or health claim against a current source. State any unresolved fact instead of inventing it.
  • Review responsive layouts, light/dark native themes, keyboard and screen-reader labels, contrast, loading/error/disabled states, reduced motion and image rights before handing off.
  • When changing foundations, update their source CSS and run npm run design:sync in stillwell-web. Run npm run design:check to detect drift. Update design-system.ts and its version when changing guidance; the page, Markdown and JSON all read that same record.
Source files & maintenance

Brand 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.