Everything you need to speak, write, and build like Cortex — the complete system in one place. Part I is the brand foundation: essence, wordmark, typography, color, the wave motif, voice, and messaging, derived from the production landing page at remembercortex.com. Part II is the app implementation layer: dark palette, semantic color roles, components, menu bar icon, motion, and the reskin map the developer codifies in DesignTokens.swift. Alternatives considered but not selected are archived in decision-history.html.
The brand DNA — what Cortex sounds like, looks like, and stands for. Every app decision in Part II serves these.
The one-line fingerprints. Every other decision in this guide serves these.
Cortex doesn't use a pictorial logo. The wordmark — the word "Cortex" set in Hedvig Letters Serif 400 — is the identity. The favicon translates the wave stack into a tiny graphic signal.
The favicon stacks five wave bands inside a linen tile — a micro expression of the memory system. The app icon uses the same language at larger sizes.
Two families do the work. Hedvig Letters Serif is a single-weight (400) serif with a warm, editorial character — every headline on the site is set in it. DM Sans is the reader's font, humanist and kind to the eye.
Cortex runs quietly on your Mac. It captures your corrections, your preferences, and your project rules — and surfaces them to Claude the moment they're relevant.
Hierarchy lives in the sizes below. All heading sizes use Hedvig at weight 400 — no bolder variant exists. Differentiation comes from size, tracking, and color. Values exactly mirror the production landing page.
Every level stacked. Pick one based on its role in the layout.
How Hedvig and DM Sans work together — eyebrow, display, italic tagline, and body in one lockup.
Cortex runs quietly on your Mac. It captures your corrections, your preferences, and your project rules — and hands them back to Claude the moment they're relevant. Free to download. No account needed. Your data stays on your Mac.
Six wave colors map to six layers of memory — ephemeral to permanent. Each ships with a 62% alpha tint for backgrounds. Charcoal and gray are the "human element" neutrals.
Linen is the default page surface. Linen-dark signals a secondary block. White is reserved for elevated cards. Ink is reserved for inverted moments and tags.
The hero's stacked waves are the closest thing Cortex has to a pictorial mark. Six bands, top to bottom: the ephemeral surface (cyan) layered down to permanent long-term memory (peach). When in doubt, waves carry the brand — use them full-bleed, unframed, at the foot of a section.
band-order: cyan → teal → periwinkle → mauve → rose → peachstroke: linen (#FAF8F5), 4px, between every banddirection: always layered top-ephemeral to bottom-permanentamplitude: 2-hump bands taller, 3-hump bands shorter — avoid flat horizonsmicro use: the favicon is the wave stack reduced to 5 pill-barsCortex sounds like a calm, well-read colleague explaining something important without raising its voice. Not cute. Not clever for the sake of clever. Just true.
State the fact and move on. No superlatives, no hype. "Cortex runs quietly on your Mac." — not "the most powerful memory system ever built for AI."
Ground every abstract idea in something physical. Teams reading notes. Groundhog day. Muscle memory. Files on a desk. The metaphor does the heavy lifting.
Short. Then a longer one that earns the short one. Then short again. Our copy often breaks into three beats — problem, turn, promise.
Say "sensory memory," "episodic memory," "long-term memory." Never hide behind them. Always follow with a plain-English sentence anyone can picture.
State what we don't do as flatly as what we do. "Your data stays on your Mac." Don't dramatize privacy — trust comes from understatement.
We use em-dashes where most brands use colons. They invite the turn inside a sentence — exactly the move our copy loves.
Ready-to-use lines pulled from the site. Reach for these before writing new copy — they've already been tuned.
Cortex lives on linen. Cards float on white. Ink is reserved. Rhythm is generous — the site uses 96px section padding on desktop so every message has room to land.
space-1space-2space-3space-4space-5space-6space-7container: max-width 1120–1160px, 24–32px side paddingnarrow: max-width 680px, centered — for prose-heavy sectionscard-radius: 14–20pxhairline-rule: 1px solid rgba(44,40,37,0.10)dashed-rule: 1px dashed rgba(44,40,37,0.10) — reserved for in-card separatorsShorthand for staying on-brand when nothing else in this guide has answered the question.
The implementation layer — where the brand foundation becomes a working macOS app. Dark palette, semantic color roles, density, components, motion, and the menu bar icon. The single source of truth for DesignTokens.swift, font bundling, and the reskin map.
#1A1816 / #242120 / #2E2C2A (dark.base / dark.elevated / dark.secondary). See §1.#958D88 at AA-Large only (3.15:1). Accepted; color is always redundant with position/icon in every usage. See §2 and §9.#358267 light / #57B58F dark. Mossier than standard Material green; stays within the warm brand spectrum. See §2.menuTitle) and 28pt onboarding hero. SF System is not part of the app typeface system. See §4 and §4b.brand/Logos and Icons/. See §7.The marketing palette was calibrated for linen — those saturation levels vibrate against dark surfaces. Each memory color is desaturated ~20% and value-lifted ~10% so it reads as the same hue without visual tension. Dark surfaces use warm-tinted near-blacks (#1A1816 / #242120 / #2E2C2A) that stay in the linen-to-ink family rather than neutral gray, grounding dark mode in the same warmth as the brand. Depth follows macOS elevation logic: deepest background at the back, lighter surfaces forward.
In dark mode, depth is expressed by lightening surfaces forward — the inverse of light-mode shadows. The popover sits on dark.base; rows hover to dark.elevated.
This is the contract between the brand and the SwiftUI layer. Every Color.accentColor and hardcoded hex in the app maps to one of these roles. Start here when writing the color extension.
Extends Spacing.xs/sm/md/lg/xl (4/8/12/16/20pt) already in CortexPopoverView.swift. The existing five tokens cover component internals. The new tokens cover layout-level spacing. The "tight" column applies to the 360pt popover; "window" to the 900pt main view.
The popover is intentionally dense — 360pt wide, content-heavy, glance-use. The main window affords more breathing room. Never use .3xl or larger inside the popover.
Eight named styles cover every text moment in the app. Hedvig is approved in the app, but restricted to display moments only — the 15pt panel title and 28pt onboarding hero. At 11–13pt in rows, its serifs render soft on macOS text layout; at 15pt+ it’s the hero of the brand. Everywhere else is DM Sans — SF System is no longer part of the app’s typeface system.
Tags label; they don't act. No hover state, no pointer cursor, no click target. If it triggers something, it's a chip, not a tag.
Why not Hedvig throughout? — Hedvig is a display serif optimized for 24pt+. At 10–13pt, its thin strokes disappear on non-retina displays and its x-height creates uneven optical alignment in tight list rows. The DM Sans vs. SF comparison and the decision rationale are documented in §4b.
DM Sans everywhere. SF System is not part of the app typeface system. DM Sans carries brand identity from web into app; held up at 11pt on Retina after A/B review. Alternatives archived in decision-history.html.
360pt wide — the exact popover width in production. The popover has two view states toggled by the segmented pill in the header. Both states are rendered in full below (light + dark) so every element is specced in context. All elements use semantic role tokens from §2.
The default view. Shows what Cortex is handing to Claude right now — relevance-first detail lines, "Surfaced" segment active.
Audit trail view. Shows what Cortex has recently written from corrections — timestamp-first detail lines, "Captured" segment active.
Surfaced shows what Cortex is currently handing to Claude — read/retrieval. The detail line leads with match context (memory type + trigger). Captured shows what Cortex has written lately — audit/history. The detail line leads with scope and timestamp. Same popover shell, toggle at top-right switches between them. The filter chips and footer are identical in both states.
The header is 58pt (up from 52pt) to accommodate the stacked identity stack — wordmark above, Connected status below. The segmented pill uses full-radius corners (100px) to read as a distinct control class from the filter chips, which are also full pills (999px) but lighter-weight — smaller, lower-contrast, text-secondary color — so the two control families remain visually distinct despite sharing pill geometry. Footer follows the option-a treatment: single teal text link, success dot + timestamp, no paired Open/Settings split.
Every component shown in its states. Background is linen for light examples; notes call out dark-mode deltas where non-obvious.
box-shadow at 2.5px, 20% alpha) appears on active/attention/error only — it's the visual weight that communicates "something is happening." Idle has no ring. Never use color alone — always pair with an adjacent label when space allows.Four named durations translate the existing .easeInOut(duration:) calls into reusable tokens. All use easeInOut or spring — never linear in UI transitions.
The existing ActiveBrainIcon opacity pulse is the app's one piece of brand-native motion. Keep it. It maps to motion.gentle (0.25s) with easeInOut on a 1.8s autoreverses: true loop, opacity 0.7→1.0. The pulse reads as "alive and watching" without demanding attention — exactly the right emotional signal for a passive background tool.
In SwiftUI, check @Environment(\.accessibilityReduceMotion). Rules:
Every text-on-surface pair audited. WCAG AA requires 4.5:1 for normal text, 3:1 for large text (>18pt or bold >14pt). Target AAA (7:1) where density allows. All ratios calculated against the base surface.
.body text style. Scales with user preference. One-line truncation with .lineLimit(1).truncationMode(.tail)..caption. At accessibility sizes, consider removing the ALL CAPS treatment — it compounds letter-spacing difficulty.accessibilityLabel — "Working memory type" — color alone is non-conformant.~75–80% of the app surface is unskinned. This table sequences the work by brand lift per engineering hour. P1 items are the ones a user sees on every interaction; P4 items are infrequent or already serviceable.
Recommended sequence: (0) All design decisions locked — DM Sans everywhere (§4b), menu bar icon 6-band stepped-opacity wave with all three states (§7). All P0/P1 design specs resolved. (1) Font registration (DM Sans 400/500/600/700/italic 400 + Hedvig Letters Serif 400) + color extension (Color+AppTokens.swift) in the same PR — this unblocks everything. (2) P1 popover row component skin. (3) Panel header + FilterChip in the same PR. (4) Menu bar icon: import the 2 asset sets into Xcode (idle/active SVG+PNG, alert SVG+PNG), wire to NSStatusItem state logic, apply SwiftUI opacity animation for active. (5) P2 in parallel: onboarding, main window, empty states.