Design
Architecture.

The canonical brand, token, and component system for Ambient Intelligence — from clinical dashboards to investor materials.

Ella AI Nurse Assistant
www.ellamemory.com
6
Token categories
3
Type families
4
Consumer surfaces
1
Source of truth
IRB
Compliant
NIH
STTR Phase I
01

Brand Identity

What Ambient is, who it speaks to, and where its design appears.

Identity
Visual Identity
Logo, mark, wordmark, palette, and typography. The visible face of Ambient across clinical software, investor materials, and device packaging.
Tokens
Design Tokens
Machine-readable primitives consumed by ambient-ella-web and ambient-device-mobile. Colors, spacing, radius, and type scale as a single source of truth.
Voice
Voice & Tone
Precise, calm, evidence-grounded. Different registers for clinical teams, investors, and research reviewers — same underlying brand.
Components
Component System
Shared UI patterns across nurse dashboard, mobile app, and marketing pages. Built from tokens; consumed as code and spec.
Mission
“Make memory care safer without compromising resident dignity.”
ContactlessPrivacy-PreservingEvidence-Based
Primary Audiences
ClinicalCare teams & administratorsPractical, reliability-focused, time-constrained.
InvestorsVCs & strategic partnersEvidence, market opportunity, clinical outcomes.
ResearchAcademic PIs & IRBsRigorous methodology, regulatory precision.
02

Ella AI Identity

Ella AI Nurse Assistant
www.ellamemory.com
Intelligence in motion.

Ella AI is not a character or avatar. She is a field — six Lissajous oscillators moving in screen blend, producing patterns of light that breathe and never repeat.

01
Lissajous Paths

Six oscillators each trace a parametric Lissajous figure — x = sin(t·fx + φ), y = cos(t·fy + ψ). Because each fx/fy pair is an incommensurate ratio, the curve never exactly closes. The pattern is organic and non-repeating across any practical timescale.

fx: .31, fy: .47
02
Screen Blend

globalCompositeOperation = "screen" — where two gradients overlap, colors add toward white rather than mixing toward gray. Against the near-black fill, the six spectral colors remain vivid. The luminous core breathes as oscillators drift through one another.

globalCompositeOperation = 'screen'
03
Border Color Motion

Four layered conic strokes ring the portrait with six drifting color stops. Each stop interpolates toward a random angular target every ~400ms at its own lerp rate. Colors are perpetually mid-transition — coupled to the fill's animation clock, never still.

v += (target − v) × 0.030
Lissajous oscillators
// parametric: x = sin(t·fx + px), y = cos(t·fy + py)
// incommensurate fx/fy → curve never closes
const oscillators = [
  { fx:.31, fy:.47, px:0,         py:.5},
  { fx:.53, fy:.29, px:π,          py:1.2},
  { fx:.41, fy:.67, px:.7*π,     py:0    },
  { fx:.23, fy:.53, px:1.5*π,    py:.8},
  { fx:.59, fy:.37, px:.3*π,     py:1.7},
  { fx:.43, fy:.61, px:1.1*π,    py:.3},
];

ctx.globalCompositeOperation = 'screen';
oscillators.forEach((osc, i) => {
  const x = cx + 0.4·W · Math.sin(t·osc.fx + osc.px);
  const y = cy + 0.4·H · Math.cos(t·osc.fy + osc.py);
  const g = ctx.createRadialGradient(x,y,0,x,y,blobR);
  g.addColorStop(0, rgba(colors[i], 0.82·intensity));
  g.addColorStop(1, rgba(colors[i], 0));
  ctx.fill();
});
Border color motion
// 4 layered strokes, each with independent stop drift
const LAYERS = [
  { w:7, blur:5, alpha:0.32, tick:500, speed:0.025},
  { w:5, blur:3, alpha:0.40, tick:400, speed:0.030},
  { w:3, blur:1, alpha:0.50, tick:400, speed:0.040},
  { w:2, blur:0, alpha:0.60, tick:400, speed:0.060},
];

// every tick → new random target for each stop
// every frame → lerp toward target at layer.speed
cur = cur.map((v, j) => v + (target[j] - v) · speed);

// conic rotates with clock; palette cycles:
// #BC82F3  #F5B9EA  #8D9FFF  #FF6778  #FFBA71  #C686FF
const grad = ctx.createConicGradient(angle, cx, cy);
stops.forEach(({ pos,col}) => grad.addColorStop(pos,col));
03

Design Principles

01
Clarity over decoration
Every element earns its place. Clinical interfaces demand instant comprehension — no visual noise between the nurse and the information she needs.
02
Evidence in structure
Grid systems, data typography, and measured spacing signal rigor. The layout itself communicates that Ambient is an evidence-based company.
03
Dignity by default
Privacy-first radar technology is reflected in design: no surveillance aesthetics, no aggressive alert patterns. Calm, considered interfaces.
04
Audience-aware scale
One system, multiple registers. Clinical staff need dense, actionable UI. Investors need editorial narrative. Regulators need transparent methodology.
04

Color System

One accent family. Six semantic roles. Click any swatch to copy its hex.

Brand colors
Navy#0A2540Primary brand--color-navy
Blue#0071E3Interactive--color-blue
Teal#1B7A6ESuccess, confirmation--color-teal
Violet#5B21B6AI · Investors--color-violet
Amber#B45309Attention, callout--color-amber
Rose#BE123CAlert, critical--color-rose
Surface & background
White#FFFFFFPage background--color-bg
Surface#F5F5F7Card base--color-surf-1
Border#E8E8EDElevated element--color-surf-3
Near-black#1D1D1FPrimary text--color-text
05

Type System

Three families, each with a precise role. Never mixed without intent.

Editorial
Tiempos Fine · Headlines · Narrative · Quotes
Intelligent care at scale.
Interface
Die Grotesk · UI labels · Navigation · Body copy
Fall Risk Monitoring System
Data
JetBrains Mono · Metrics · Code · Identifiers
MOCAREV-2847 × 97.4% × 3.2s
Scale
Disp
80pxDesign Architecture
H1
52pxAmbient Intelligence
H2
34pxBrand Identity System
H3
22pxColor Tokens
Body
16pxThe canonical brand, token, and component system for Ambient Intelligence.
Label
11pxDESIGN SYSTEM · CLINICAL · IRB COMPLIANT
Brand Sandbox
Font Lab →
Interface · UI labels · Navigation
44px
Intelligent care at scale.
300Intelligent care at scale.
400Intelligent care at scale.
500Intelligent care at scale.
700Intelligent care at scale.
Used in the nurse dashboard, status cards, alert labels, and room identifiers.
06

Accessibility & Compliance

ADA · Section 508 · WCAG 2.1 AA · IEC 62366-1. In healthcare, accessible design is not a feature — it is the specification.

Regulatory context
Every screen a nurse sees, every alert a caregiver reads — must be perceivable, operable, and understandable. For everyone.

Accessible design is not retrofit work. It flows from the token level up: contrast ratios, touch targets, focus indicators, and semantic structure are system decisions, not page-level afterthoughts.

Why this applies to Ambient
Section 508NIH STTR Phase I recipient — federal technology procurement rules require 508 compliance
ADA Title IIIClinical SaaS deployed in care facilities constitutes a commercial service under DOJ interpretation
IEC 62366-1SaMD regulatory pathway — FDA-recognized usability engineering standard mandates accessibility in human factors analysis
MN HRAMinnesota Human Rights Act extends digital accessibility protections beyond the federal ADA floor
WCAG 2.1 AA
Web Content Accessibility Guidelines

The core technical specification. 50+ success criteria across four principles. Level AA is the enforceable minimum for both Section 508 and ADA compliance. WCAG 2.2 (Oct 2023) adds 9 criteria including enhanced focus appearance.

4.5:1 contrast for normal text
3:1 contrast for large text & UI
Keyboard-navigable interface
Section 508
Rehabilitation Act, §508

Federal law requiring accessible electronic technology for agencies and federal contractors. The 2018 Refresh formally adopted WCAG 2.0 AA as the technical standard. Applies to Ambient via NIH STTR funding.

References WCAG 2.0 AA baseline
Applies to all federally-funded tech
Enforced by access boards & DOJ
ADA Title III
Americans with Disabilities Act

DOJ interpretation has expanded Title III to digital interfaces in commercial services. Care facilities deploying Ambient software are responsible for ensuring staff and resident-facing tools remain accessible.

Digital interfaces = public accommodation
Workplace tools must be accessible
Extends to mobile & software products
IEC 62366-1
Medical Device Usability Engineering

FDA-recognized standard for human factors in SaMD. Section 5.1 explicitly requires consideration of users with physical, sensory, or cognitive impairments. Accessibility barriers in clinical UI are classified as use-related hazards.

Sensory impairments in scope
Barriers = use-related hazards
Usability testing must include edge users
P
Perceivable
Text ≥ 4.5:1 contrast on background; large text ≥ 3:1
Non-text UI (borders, icons, focus rings) ≥ 3:1
Content reflows at 320px viewport (400% zoom) with no horizontal scroll
O
Operable
All functionality reachable and operable by keyboard alone
Focus indicator visible; ≥ 3:1 contrast against adjacent colors
Touch targets ≥ 44×44px on all clinical mobile surfaces
U
Understandable
Error states identify the field and suggest a correction
Labels and instructions provided for all form inputs
No unexpected context changes on focus or hover
R
Robust
Semantic HTML; ARIA only where native semantics are insufficient
role, name, value for every custom interactive component
Status messages programmatically determinable without focus (aria-live)
Color contrast compliance · WCAG 1.4.3
Token
Hex
Ratio
Normal
Large
Usage guidance
text
#1D1D1F
15.7:1
PASS
PASS
Primary body, headings
text2
#3A3A3C
11.4:1
PASS
PASS
Secondary body copy
text3
#6E6E73
5.1:1
PASS
PASS
Captions, secondary labels
text4
#AEAEB2
2.2:1
FAIL
FAIL
Decorative only — never informational
navy
#0A2540
14.0:1
PASS
PASS
Brand accent, interactive on white
blue
#0071E3
4.7:1
PASS
PASS
Links, interactive states
teal
#1B7A6E
5.2:1
PASS
PASS
Success, confirmation states
violet
#5B21B6
9.0:1
PASS
PASS
AI context, investor materials
amber
#B45309
5.0:1
PASS
PASS
Attention callouts
rose
#BE123C
6.3:1
PASS
PASS
Alert, critical state — pair with label

Contrast measured against #FFFFFF (page background). Large text = ≥ 18pt (24px) regular or ≥ 14pt (18.67px) bold. WCAG 1.4.11 requires ≥ 3:1 for non-text UI components.

Design system requirements
01WCAG 1.4.3
Text contrast ≥ 4.5:1

All body copy and informational labels must meet 4.5:1 on their background. text4 (#AEAEB2) at 2.2:1 must never carry information — use it only for decorative or placeholder content.

02WCAG 1.4.3
Large text contrast ≥ 3:1

Text at ≥ 24px regular or ≥ 18.67px bold qualifies as large text and requires only 3:1. All Tiempos Fine display sizes automatically qualify.

03WCAG 1.4.11
Non-text contrast ≥ 3:1

Input borders, icon strokes, focus rings, and toggle tracks must be ≥ 3:1 against adjacent background. Use navy or text2 for interactive borders — never line (#0A2540 at 14:1 is safe).

04WCAG 2.4.7 / 2.4.11
Focus indicator always visible

Every interactive element must show a visible keyboard focus ring. System default: outline: 2px solid #0A2540; outline-offset: 2px. Never suppress focus with outline: none without a replacement.

05WCAG 2.5.5 / IEC 62366
Touch targets ≥ 44×44px

All tappable elements in clinical mobile interfaces must provide a minimum 44×44px touch area. Icon-only buttons in dashboards require padding or a wrapper to meet this threshold.

06WCAG 1.4.1
Color alone must not convey state

Alert and status states must combine color with a text label or icon. Never use rose alone to indicate "critical" — a screen reader cannot perceive hue. Pair every semantic color with copy.

07IEC 62366-1 §5.1
Minimum 16px body in clinical UI

Clinical dashboards must use ≥ 16px for all informational body text. Do not fall below 14px for any informational content. 11px mono labels are acceptable only for identifiers and codes, not instructions.

08WCAG 4.1.2
ARIA for all custom components

Custom dropdowns, modals, date pickers, and tabs require explicit role, aria-label, and aria-expanded/selected attributes. Validate with axe DevTools or WAVE before merging any new component pattern.

Live site audit · ellamemory.com
Compliance recommendations

Findings from a review of the login page, primary dashboard, and alert feed against WCAG 2.1 AA. Organized by remediation priority. All critical items are required for ADA and Section 508 compliance.

4 Critical5 Moderate3 Minor
Critical4 findings
C13.3.2 · 1.3.1Login
Form inputs have no associated labels

Add <label htmlFor="email"> and <label htmlFor="password"> linked to each input. Placeholder text disappears on focus and is never a label substitute under WCAG.

C21.4.1Alerts
Alert severity communicated by color only

Pair every severity color badge with an explicit text level — "High", "Medium", "Low" — or an icon with aria-label. Screen readers cannot perceive hue.

C34.1.2Alerts table
Action buttons are icon-only with no accessible name

Add aria-label="Acknowledge alert — Room {id}" to every action button in the Actions column. Icon-only interactive elements must have a programmatic name.

C44.1.3Dashboard
Real-time data has no aria-live region

Wrap the live alert count and feed container in <div aria-live="polite" aria-atomic="false">. Set aria-busy="true" on the table while data is loading, remove on resolve.

Moderate5 findings
M12.4.1All pages
No skip-to-main-content link

Add a visually hidden skip link as the very first focusable element on every page: <a href="#main" className="sr-only-focusable">Skip to main content</a>. Essential for keyboard users navigating the dense dashboard nav.

M21.3.1All pages
No ARIA landmark regions defined

Add <main id="main">, <nav aria-label="Primary navigation">, and <section aria-labelledby> throughout. Landmarks let screen reader users jump between page regions without tabbing through every element.

M34.1.2Dashboard
Sound / Push toggles missing state

Add role="switch" and aria-checked={isEnabled} to the Sound OFF / Push OFF buttons. Without it, a screen reader user cannot determine current state and the control's purpose is ambiguous.

M41.3.1Dashboard
Alert table headers lack scope attributes

Change each <th> to <th scope="col"> for Room, Subject, Event, Time, Priority, and Actions. Required for screen readers to associate data cells with their headers during row navigation.

M51.1.1Navigation
Logo / home link has no descriptive alt text

Set alt="Ella Memory — return to home" on the logo image. If the logo is a CSS background, add aria-label="Ella Memory home" to the anchor wrapper element.

Minor3 findings
L13.3.4Login
No password recovery path visible on login form

Add a "Forgot password?" link adjacent to the password field. Users who cannot authenticate should never reach a dead end — WCAG 3.3.4 requires error recovery mechanisms.

L21.3.1Dashboard
Empty metric dashes "—" have no accessible label

Replace bare dashes with <span aria-label="No data available">—</span>. Screen readers announce "—" as "dash" or skip it entirely, leaving metric context unresolved.

L32.4.7All pages
Keyboard focus indicator not verified

Audit every interactive element for a visible focus ring at ≥ 3:1 contrast. If outline: none is present, a custom 2px solid focus outline in #0A2540 must replace it across dashboard, forms, and modals.

07

Compliance Applied

Six accessibility fixes deployed to the Room Dashboard — the primary clinical interface nurses use during rounds.

Target surface
ellamemory.com/dashboard/room/MOCAREV-0001

Primary clinical interface. Nurses use this page during rounds to review ambient activity, fall alerts, sleep data, and posture state for each resident.

Standard
WCAG 2.1 AA
Fixed
6 of 12
Remaining
6 in nav/auth
Filed
2026-05-19
01M1
WCAG 2.4.1Bypass Blocks
Skip-to-main link
BEFORE

No skip link — keyboard users must tab through the full topbar and navigation on every page load before reaching any content.

AFTER

A visually hidden <a href="#main"> appears on focus as the first DOM element, letting assistive technology users bypass navigation immediately.

<a
  href="#main"
  onFocus={() => setSkipFocused(true)}
  onBlur={() => setSkipFocused(false)}
  style={{
    position: 'fixed',
    top: skipFocused ? 8 : '-100%',
    left: 8, zIndex: 9999,
    background: '#0A2540', color: '#fff',
    borderRadius: 6, padding: '10px 18px',
  }}
>
  Skip to main content
</a>
Before
Ella AI Nurse
OverviewAlertsReports
Tab 1 of 12 — must traverse full nav
SRfocused: "Ella AI Nurse, link" — no skip available
After
Skip to main content
Ella AI Nurse
Tab 1 — jumps focus directly to #main
SRfocused: "Skip to main content, link"
02M2
WCAG 1.3.1Info and Relationships
Main landmark region
BEFORE

All page content — stat cards, charts, alert table — was wrapped in a plain <div>. Screen readers had no way to identify or jump to the primary content region.

AFTER

<main id="main"> wraps all content after the topbar <header>. Assistive technology users can jump directly via landmark navigation (e.g. VoiceOver M key).

<header className="topbar">
  {/* branding, nav, alert badge */}
</header>

<main id="main">
  {/* stat strip, Ella narrative,   */}
  {/* charts, alert table, coverage */}
  <div className="agent-note">…</div>
</main>
Before
<div><header class="topbar">…</header><div> ← no landmarkstat cards · charts · alerts…</div></div>
SRlandmark nav skips all content — no "main" region
After
<div><header class="topbar">…</header><main id="main"> ← landmarkstat cards · charts · alerts…</main></div>
SRVoiceOver M key: "main, web content" — jump available
03C4
WCAG 4.1.3Status Messages
Live region for real-time alert data
BEFORE

The active alert count refreshes every 30s and the table reloads on data changes — but no aria-live region existed. Screen reader users received no announcement when alert state changed.

AFTER

The alert count badge uses role="status" aria-live="polite" aria-atomic="true". The table outer container carries aria-live="polite" aria-busy={loading} to signal loading state.

{/* Alert count badge */}
<span
  role="status"
  aria-live="polite"
  aria-atomic="true"
>
  {activeAlerts.length} active alert…
</span>

{/* Alert table container */}
<div role="table"
  aria-live="polite"
  aria-busy={loading}>
Before
3 active alerts
← updates every 30s · no aria-live
SR(silence — count change 2→3 not announced)
After
3 active alerts
role="status" aria-live="polite" aria-atomic="true"
SR"3 active alerts" — announced when count changes
04C3
WCAG 4.1.2Name, Role, Value
Descriptive aria-label on action buttons
BEFORE

"Ack" and "Flag" buttons had only a title attribute. Screen readers announced the truncated button text without event context — unusable without visual reference to the row.

AFTER

Each button receives a full aria-label combining action, zone, date, and time. Non-visual users get complete context before activating a potentially irreversible action.

<button
  aria-label={`Acknowledge alert — ${
    a.zone?.replace('_',' ')
    ?? 'unknown zone'
  }, ${formatDate(a.detectedAt)
  } ${formatTime(a.detectedAt)}`}
  onClick={() => acknowledge(a.eventId)}
>
  Ack
</button>
Before
SR"Ack, button" — no zone, time, or event context
After
SR"Acknowledge alert — bathroom, May 19 10:24 am, button"
05M4
WCAG 1.3.1Info and Relationships
ARIA table roles on the Alert History table
BEFORE

The 6-column alert table was built entirely from CSS-grid divs. Screen readers traversed it as a flat list — column headers were not associated with their data cells.

AFTER

role="table" on the container, role="rowgroup" on header and body, role="columnheader" on each header span, role="row" and role="cell" on every data row and cell.

<div role="table"
  aria-label="Alert history — last 7 days">
  <div role="rowgroup">
    <div role="row">
      {cols.map(h => (
        <span role="columnheader">{h}</span>
      ))}
    </div>
  </div>
  <div role="rowgroup" aria-live="polite">
    {alerts.map(a => (
      <div role="row">
        <span role="cell">{time}</span>
Before
TimeDateEventPri.StatusActions
10:24 amMay 19Fall detectedHighActiveAck Flag
SR"Time Date Event Priority Status Actions" — flat list, no table context
After
TimeDateEventPri.StatusActions
10:24 amMay 19Fall detectedHighActiveAck Flag
SR'Alert history table, column 1 "Time" of 6, row 1 of 4'
06L2
WCAG 1.3.1Info and Relationships
Accessible labels on empty-state dashes
BEFORE

All 8 metric cards displayed a bare "—" while data loads. VoiceOver announced "dash" in isolation — the metric label was not associated with the placeholder value.

AFTER

<span aria-label="No data">—</span> wraps every loading dash. Screen readers now announce "No data" in context with the metric label, preserving the full meaning.

{/* Before */}
<div style={statValue(color)}>
  {loading ? '—' : value}
</div>

{/* After — applied to all 8 cards */}
<div style={statValue(color)}>
  {loading
    ? <span aria-label="No data">—</span>
    : value}
</div>
Before
Active Alerts
Zone Coverage
Posture
Fall Risk
SR"Active Alerts, dash" — "Zone Coverage, dash" — meaning lost
After
Active Alerts
Zone Coverage
Posture
Fall Risk
SR"Active Alerts, No data" — "Zone Coverage, No data"
6 findings remain in the auth and navigation layer

C1 (login form labels), C2 (color-only severity in auth flow), M3 (push toggle state), M5 (logo alt text), L1 (password recovery), and L3 (focus ring audit) live in the shared dashboard layout and login page — addressed in a separate pass.

6
08

Design Repository

A specification and asset archive — not a runtime package. Claude Design and Claude Code both read from it.

ambientintel / ambient-brand
Specification and asset archive

Reads by Claude Design and Claude Code to keep ambient-ella-web and ambient-device-mobile visually consistent with every marketing output.

SpecificationAsset archiveClaude Design
Open repository
Repository structure
brand/identity · logo · voice
·identity.mdmission, audiences, regulatory status
logo/
·voice-and-tone.md
tokens/design primitives
·README.mdcolor, type, spacing — refs ambient-ella-web
components/UI component specs
·README.md
exports/generated assets
·README.md
marketing/pitch, decks, one-pagers
·README.md
mobile/Expo · iOS + Android
·README.md
web/Next.js · ambient-ella-web spec
·README.md
·CLAUDE-DESIGN.mdagent onboarding
·README.md
Design system consumers
ambient-ella-webNurse DashboardNext.js · ellamemory.com
TokensComponentsVoice
ambient-device-mobileMobile AppExpo · iOS + Android
TokensComponents
ambient-ops-webOps PlatformNext.js · ops.ambienthealthgroup.com
IdentityVoice
ambient-brandClaude DesignFigma · Marketing outputs
IdentityTokensVoiceComponents