Doro Mind
Foundations · v0.8

The pieces that make every Doro surface feel like the same product.

Tokens, type, color, motion, iconography and the primitive components shared across the member app and the clinician workbench. Built on the existing @doro/design-tokens contract, extended with a unified alert system, dense table primitives and clinical-trend chart marks.

Surfaces
Mobile member, desktop clinician
Themes
Light + dark, both first-class
Densities
Comfortable (default), compact
Tokens
OKLCH scales, semantic mapping
01 — Color

One palette, two roles.

Sand carries the surfaces. Forest anchors trust and action. Ochre is the warmth dial — bright in the member app, muted to status-only in the clinician tool. Rose and the supporting hues (sky, amber, red) round out semantic meaning.

Semantic tokens

Every component reads from these — never raw scale values. Pairs flip automatically in dark mode.

Status surfaces

Low-chroma tinted fills for badges, banners, and callouts. Each base ships a trio — --*-subtle, --*-subtle-foreground, --*-subtle-border — shown together in each chip.

Overlay

A theme-invariant scrim — the same near-black in light and dark — dropped behind modals and sheets at an alpha, e.g. bg-scrim/50.

Chat bubbles

Contrasting fills so outgoing, care-team, and system messages read distinctly. Each role has a matching --bubble-*-border.

02 — Typography

Fraunces leads. Inter Tight does the work.

Serif headings give the product its calm, book-like authority. Body and UI sit on a single sans face. Mono carries eyebrows, metadata, timestamps — anywhere the writing should feel like a measurement instead of a sentence. Code references: --font-serif · --font-sans · --font-mono.

03 — Spacing & radii

4 px grid. 12 px default radius. Nothing square, nothing extreme.

Code references: --space-1--space-24 · --radius-xs--radius-full.

04 — Motion

Decelerative. Calm. Never bouncy.

Three durations, three easings. Reduced-motion users get instant transitions automatically. Code references: --duration-fast/base/slow · --ease-out · --ease-in-out · --ease-spring.

05 — Iconography

Lucide-family strokes. Custom brand marks where it matters.

1.5 px stroke, round caps and joins, 24 px viewBox. Icons inherit currentColor. Filled variants are reserved for selected and active states. Source: @doro/design-icons.

home
chat
plan
profile
search
alerts
done
close
chevron
more
star
clock
check-c
alert
message
inbox
schedule
dashboard
chart
care
privacy
vitals
med
send
06 — Avatars

Warm placeholders for people. Doro mark for the assistant.

A flat warm tint stands in for a member photo — drop in an <img> or initials to populate it. The Doro brand mark stands alone as the assistant avatar; it never gets the warm tint. Code: <Avatar appearance="halo" | "doro" size="sm|md|lg|xl" />.

sm 28
md 36
lg 48
xl 64
Doro · assistant
+3
stack · care circle
EL initials fallback
07 — Buttons

Forest in light, ochre in dark.

The default (primary) button follows the --primary token: forest-800 in light and ochre in dark, so the CTA stays legible on each surface instead of sinking into the dark forest UI. The ochre variant stays available for warm member moments. Code: <Button variant="default | secondary | ghost | ochre | destructive | link" size="sm | default | lg | icon" />.

08 — Inputs & controls

Calm fields, decisive focus.

1.5 px borders that pick up a teal focus ring on tab-in. All controls share a 42 px comfortable height and drop to 36 px in compact density. Code: <Input /> · <Textarea /> · <Checkbox /> · <Switch /> · <Chip /> · <SegmentedControl />.

09 — Badges, chips & progress

Tiny carriers of state.

Color is meaningful. Forest = on track, ochre = needs attention soon, rose / red = needs attention now, sky = informational, neutral = routine. Code: <Badge variant="ochre | forest | rose | sky | red | solid-forest | solid-ochre | mono" />.

Routine On track Watch Escalate Crisis Synced Active In 2 days PHQ-9 · 12 GAD-7 · 18
Week 4 of 12 · on track 33%
Adherence · last 7 days 5 of 7
10 — Healthcare alert system

Seven meanings, one consistent shape.

Every alert in the product reads from this palette. Color is meaningful — never decorative — and pairs with an icon and a verb-led title so the meaning survives in monochrome printouts and screen readers. Code: <Alert variant="crisis | crisis-solid | medication | clinical | appointment | care | system" form="default | compact | inline" />.

Safety flag · Maya Lin 3 min ago

Self-harm risk indicators detected in this morning's reflection. Care team has been paged.

Missed dose · Sertraline 50 mg Last night

Maya didn't log her evening dose. Reach out via chat or wait for tonight's check-in?

PHQ-9 increased to 14 · moderate Today, 8:12 am

Up 5 points from last week (was 9, mild). Consider adjusting cadence or scheduling a touchpoint.

Upcoming · Dr. Elena Liu Thursday · 2:30 pm

30-minute review session. Maya has flagged sleep as a topic to discuss.

From your care circle · Tom Yesterday

"Picking up your refill on the way home. Want me to grab dinner too?"

No internet connection Reconnecting…

Your reflections will sync once you're back online.

Maya's plan was reviewed by Dr. Liu — 2 items updated
When to escalate

Solid-fill crisis only when a human must look immediately. All other types stay tinted to keep the page legible at a glance.

Never color-only

Every alert pairs a tint with an icon and a verb-led title. Mono printouts and screen readers still convey the meaning.

Member vs clinician

Same component, calmer copy on the member side. The member never sees a crisis flag about themselves — they see a "checking in" message.

11 — Surfaces

Cards, empty states, skeletons, popovers.

Code: <Card variant="default | lg | flat | elevated" /> · <EmptyState /> · <Skeleton shape="line | header | block" /> · <Popover /> · <Tooltip />.

12 — Clinical trend marks

Sparklines and one-screen trends.

Tiny, dense, legible. Used inline in tables for scores at a glance, and a slightly larger version on the patient overview for the last 12 weeks. Code: <Sparkline tone="default | warn | danger" values={[…]} /> · <KPI>…</KPI>.

13 — Tables

Dense by default on clinician surfaces.

Numbers run tabular, header row stays sticky, hover tints the whole row. Toggle the density control in the topbar to see the compact variant. Code: <Table> with <TableCell numeric right /> for clinical columns.

Member Risk PHQ-9 GAD-7 Adherence Last touch Next
Maya Lin
MRN 04812
Watch 12 ↑3 11 ↑2 5 / 7 3 hr ago Thu 2:30 pm
Jordan Ahmadi
MRN 05210
On track 7 ↓2 5 ↓1 7 / 7 Yesterday Fri 10:00 am
Priya Devarajan
MRN 05744
Crisis 19 ↑6 16 ↑4 2 / 7 12 min ago Today 4:15 pm
Sam Whittaker
MRN 06119
Routine 4 ±0 3 ±0 6 / 7 2 days ago Next Tue
15 — Token reference

Every token, one honest list.

The complete inventory of @doro/design-tokens — every custom property and pattern rule, parsed from the shipped CSS at build time. Nothing here is curated by hand, so this section cannot drift from the source of truth. The sections above tell the story; this is the index.