Quiet Sky, inside the product.
Every product screen, component, CTA and text style — specified in light and dark, built from semantic tokens, and proved on this page. Flip the theme in the sidebar and the whole document re-renders.
The application design system for ai.com — every product screen, component, CTA, and text style, standardized on Quiet Sky and specified in light and dark. Foundations (tokens, type, spacing, motion) are canonical from design-system.html v1.0 and consumed here unchanged; everything else is the product layer built on top of them.
This page is its own proof. Flip the theme toggle in the sidebar — every demo, mock, and table re-renders because every component consumes semantic tokens only. Components marked Canonical come from v1.0; Extended are new product components derived under the system's rules; Remap flags a correction of the current UI.
The five rules, product edition
- One color carries the brand. Cyan, three readings. No gradients, no violet, no second hue — the purple "AI" family is deleted.
- The accent means something. Live dots, agent presence, active states, links. Never decoration, never a button fill.
- Flat night surfaces. Product dark mode has no aurora, no glow — those belong to marketing.
- The dot is the agent. Agents are accent-dot circles with a pulsing halo — never letter squares, never sparkles.
- Trust is visible. Checkpoints, verified-done, Stop — components, not badges.
Deleted from the product
- Purple/violet accents, sparkle icons, gradient text, gradient thumbnails.
- Colored usernames, letter-square avatars, the "ai" badge.
- Green / orange / gold / blue ad-hoc state colors — every state maps to accent, danger, mint, or neutrals.
- Monospace in UI chrome (paths, secrets, metric chips). Italic placeholders.
- Black rectangles, white rectangles, and green fills as buttons — pills only.
The remap.
Every visual violation found in the July 2026 product screenshots, with its binding Quiet Sky replacement. This table is the migration checklist — when all rows are cleared, the product is on Quiet Sky.
| # | Where seen | Current | Quiet Sky replacement |
|---|---|---|---|
| R1 | Priorities, Today's Brief, sparkles, selected day, "Discuss" links | Purple/violet as the "AI" color | Delete the violet family. Agent presence = the dot system: --accent pips, --accent-tint fills, --accent-text labels. Sparkle glyphs retired. |
| R2 | Skills & Apps hero | Pink→purple gradient headline | Title 1 in --text-1. Gradient text does not exist anywhere. |
| R3 | Calendar event | Green "Join call" fill | Primary pill. Live-ness = glowing pip + "Live" ds-label--ok, never a green button. |
| R4 | DM / Room timelines | Slack-style colored usernames | Names in --text-1 600. Identity = avatar + name, never name color. |
| R5 | Discover tab | Orange "Update available" chip | ds-label--accent. Orange is not a system color. |
| R6 | Priority advisory line | Orange warning text | --text-2 + neutral pip. Danger only for destructive/stop. Urgency is copy + placement, not paint. |
| R7 | Sidebar logo, user avatar | Crimson square mark | ai·com wordmark — ink text + accent dot. Human avatars become circles. |
| R8 | Communication Health | Gold/brown meter | ds-meter: accent fill, danger past warn threshold only. |
| R9 | Wiki, dashboards, meeting links | Default blue hyperlinks | --accent-text, 500–600, underline on hover. |
| R10 | Wiki paths, Vault secrets, metric chips | Monospace + red inline-code in chrome | Onest. Source refs = neutral chips. Monospace only inside authored code blocks in content. |
| R11 | "Today 9 PM" chip | Red/pink date chip | Neutral chip; accent + live pip only when happening now. Danger is never a time color. |
| R12 | Knowledge graph | Rainbow node palette | Concept = accent · Synthesis = ink · Source = hollow neutral · Service = mint. No new hues. |
| R13 | Agent avatars | Letter squares + "ai" badge | ds-ava--agent: accent dot circle, pulsing halo. Attribution "mika · Maya's agent" is structural. |
| R14 | App cards | Dark thumbnails, purple gradients | --surface-2 wells, --r-inner, glyph or live preview. No gradients. |
| R15 | All CTAs | Four button systems (black rect, white rect, green fill, black pill) | One system: ds-btn pills — primary / ghost / quiet / deny, sizes lg·md·sm. |
| R16 | All tab rows | Three competing tab patterns | Two by rule: segmented ds-tabs for views of the same data; underline ds-tabs-line for sections. Never mixed in one row. |
| R17 | Priority card actions | Icon-only actions in accent purple | Quiet icon buttons, --text-3 at rest, tooltip + aria-label required. |
| R18 | Notifications, modals | Flat sheets, mixed padding | --surface-1 + --r-frame + --shadow-card, hairline headers, ds-input search. |
| R19 | Danger zone | Orange "Delete account" | --danger row + checkpoint-pattern confirm (the one sanctioned danger fill). |
| R20 | Whole product | Light mode only | Both themes via semantic tokens, data-theme + prefers-color-scheme bootstrap. |
| R21 | "No recap yet" | Italic gray placeholder | Designed empty state: one sentence + one action. Italics don't exist in the system. |
| R22 | Sidebar active item | Floating white card | --accent-tint fill + --accent-text. Hover = --fill. No shadows in the rail. |
One chrome for every screen.
Rail → main → optional right panel, all on --bg, separated by hairlines. The product is one continuous surface — never a dark sidebar beside a light canvas.
Sidebar rail Extended Remap R7 · R13 · R22
260px on --bg with a right hairline. Active = accent tint + accent text; hover = quiet fill. Agents are dot avatars; people carry presence pips; the only card is the feedback card. Collapses to an icon rail at 1024, a five-slot tab bar at 640.
| Element | Spec |
|---|---|
| Geometry | Fixed 260 · --bg · right 1px --border · padding 16/12 · logo row 56px · user row 56px pinned with top hairline |
| Nav rows | 34px · 13.5/500 --text-2 · icon 18 in --text-3 · radius --r-tight · hover --fill + text-1 · active --accent-tint + --accent-text 600 |
| Section headers | Micro label 11/700 +0.08em uppercase --text-3 · 24px top margin · trailing quiet + button · People/Rooms collapsible |
| Agents | 20px dot avatar (halo animates while working) + handle 13.5/600 · chat sublist 30px rows indented 30 · active chat accent-tint |
| People / Rooms | 20px circular avatar + presence pip (6px --ok filled = online, hollow = away) · unread room = name 600 text-1 + accent pip · counts = ds-count |
| Responsive | 1024: icon rail 64px, labels in tooltips · 640: bottom tab bar — Brief · Rooms · Agent · Approvals · More (56px + safe-area) |
Page headers & the two tab patterns Extended Remap R15 · R16
One header pattern: [title or view-tabs] ——— [meta] [one primary action]. 60px, bottom hairline. And exactly two tab patterns: segmented pills switch views of the same data; underline tabs switch sections or documents. Never both in one row.
Calendar
Calendar
| Pattern | Anatomy | Use for | Never |
|---|---|---|---|
| ds-tabs (segmented) | --fill pill container, 3px pad · items 13/600, 6×14, active = --surface-1 + hairline inset + text-1 | Priority/People · Yours/Discover · All/DMs/Mentions · type filters | Section navigation; more than 5 items |
| ds-tabs-line (underline) | Items 13.5/600 --text-2, 20px gap · active = text-1 + 2px --accent underline | Browse/Sources/Search/Ask agent · Files/Apps/Skills/Activity/Pins | Filtering the same list; pairing with segmented in one row |
| Header | 60px · title Title-1 22–26/700 or view tabs, not both · right: caption meta + max one primary pill | Every main surface | Two primaries; stacked toolbars |
Popovers, modals & sheets Extended Remap R18
Popover: --surface-1 (or --glass + blur 14 when floating over content), radius --r-frame, --shadow-card, hairline header, max-height 60vh. Modal: centered, 960 two-pane (nav 240 on --surface-3) or 520 single; scrim rgba(10,13,18,0.4) both themes; Esc closes, focus is trapped and returned. Mobile sheet: radius 20 20 0 0, grabber 36×4, verbs stack full-width, Deny never collapses into a menu. Full demos: Settings and Notifications.
The product library.
Every product component in both themes, built strictly from semantic tokens. Buttons, chips, labels, checkpoints, bubbles, panels, inputs, meters and toasts are canonical from v1.0 and appear here only where a product surface composes them.
Priority card & reply rows Extended Remap R1 · R6 · R11 · R17
The Command Center stack. Collapsed cards are one 15/600 line with quiet icon actions (tooltips required, --text-3 at rest — never accent). Expanded body nests on --surface-3 with a neutral time chip, provenance line, neutral advisory, and one primary verb. The date lockup replaces the purple date badge.
Your priorities today
Lock in tonight's 1:1 with Aaron
Your 1:1 with Aaron Kurzak is at 9 PM with no agenda. Aaron hasn't confirmed attendance.
Unblock Sid on Slack auth today
| Part | Spec |
|---|---|
| Card | --surface-1 · --border · --r-card · --shadow-soft · 10–12px stack gap · head 13×16 padding |
| Headline | Title 3 15/600, one line · chevron quiet button leads · three quiet icon actions trail (thumbs, discuss) with tooltips |
| Expanded body | Nested --surface-3 + --r-inner, inset left 42 to align under headline · item 14/600 + checkbox 18 (--r-tight, accent when checked) + neutral time chip |
| Advisory | 13.5 --text-2 with neutral pip — never orange, never danger unless destructive |
| Footer | "Sources ▾" quiet sm · one primary md verb · "Discuss" quiet sm. One primary per card, always. |
| Reply row | Checkbox · statement 14/600 · age chip sm · snooze + hide quiet icons · done = check on + text-3 strikethrough |
| Digest | Intro paragraph above the stack: 15/1.6 --text-2, names and times 600 --text-1, max-width 720 |
Today's Brief Extended Remap R1
The brief joins the checkpoint family — tinted because it carries meaning. Accent tint + accent border, dot-led eyebrow (no sparkle), body 13.5 with 600 emphasis, then neutral chips on translucent surface so they read on the tint.
One 30-minute commitment anchors the day: the Command Centre daily sync at 10:30–11:00. Use the clear morning to prepare your priorities, then keep the long afternoon block protected for focused product work.
One 30-minute commitment anchors the day: the Command Centre daily sync at 10:30–11:00. Use the clear morning to prepare your priorities, then keep the long afternoon block protected.
Calendar — day strip & event card Extended Remap R1 · R3
Selected day = accent tint (was purple). Join call is a primary pill — live-ness is announced by the glowing pip and the "Live" mint label, never by a green button. Attendee presence uses --ok pips (filled = yes/joined, hollow = awaiting). "Agent prepped" leads with the dot, not a sparkle.
Call history rows Extended Remap R15 · R21
Two-column rows inside one hairline-divided panel. "Untitled call" renders as a placeholder (500, --text-3, upright — italics don't exist). The empty recap is a designed state with its action. The chip-button row uses ghost sm buttons in sentence case.
People & communication health Extended Remap R8
Attention is an accent ring on the avatar — never gold. Relationship states come from the closed label vocabulary: Cooling (neutral) · Needs attention (accent) · Strengthening (ok). The health meter is the system meter: accent, danger past threshold.
Engineering
Product
Andre hasn't messaged in 6 days — you drive 88% of the chat. Principal product designer; last contact 6 days ago.
| Person | You / them | Reply | Last active |
|---|---|---|---|
| rayna | 75/25 | 19m | Today |
| andre | 88/12 | — | 6d ago |
Meter flips to danger past the 85% one-sidedness threshold — the only non-accent meter state.
Timeline — rooms, DMs & the agent thread Extended Remap R4 · R9 · R13
One message language, two densities. Room timeline: flat rows, 26px circular avatars, names in --text-1 600 (never colored), grouped messages indent 36px. Agents are dot avatars with structural attribution. Agent thread: the canonical v1.0 bubble conversation — shown here composed with steps, working line and checkpoint.
| Part | Spec |
|---|---|
| Room row | 26px circular avatar · name 13.5/600 --text-1 + timestamp 11.5 --text-3 · body 14/400, line-height 1.55 · grouped: 4px gap, 36px inset, no avatar |
| Agent attribution | Dot avatar + "mika · Maya's agent" caption. The "ai" badge and letter squares are retired (R13). |
| Dividers | Day: centered caption between hairlines · system lines ("left · 15:16"): centered caption, no bubble |
| Thread summary | 22px avatar + "1 reply" 12.5/600 --accent-text + last-reply caption · hover --fill, radius --r-tight |
| Reactions | Chip sm (emoji + count) · own = accent tint + accent border · "+" ghost chip on hover |
| Follow-ups | "↳" + suggestion 13.5 --text-2 in a ghost pill row · trailing quiet edit icon · Enter sends, edit opens in composer |
| Links / code | Links --accent-text 500, hover underline · literal code only: --surface-2 well, mono 12 — every other "chip" is Onest on --fill (R10) |
| Message chrome | Working line + Stop, steps, checkpoint, verified-done: canonical v1.0, unchanged |
Composer Extended
One composer everywhere — Rooms, DMs, agent chat, the create hero. Surface-1 well, strong border, accent focus ring; quiet-icon toolbar; circular primary send. Placeholder names the destination.
Send activates (full opacity) only when content exists. Toolbar: 28px hit areas, active format = --accent-text.
Skills, apps & the create hero Extended Remap R2 · R5 · R14 · R15
The hero headline is Title 1 in --text-1 — the gradient is gone. Skill rows set names in Onest 600 (even kebab handles), type tags from the label vocabulary, and one primary sm pill for Add/Update. App thumbnails are surface-2 wells — no dark islands, no gradient art.
Create apps & skills for your team
Tell us about your idea and goals, or start from an example.
Hover lifts −4px, shadow-soft → shadow-card. Thumbnails: --surface-2, 16:9, glyph or live preview.
Knowledge — tree, document & graph Extended Remap R9 · R10 · R12
Wiki links are accent-text; source refs are neutral Onest chips (never monospace paths); the graph obeys the four-role node law — Concept accent · Synthesis ink · Source hollow · Service mint — with edges on --border-strong. Flip the theme: the graph re-renders because the roles are tokens.
Wiki index
Synthesis wiki/index
Concepts
- Rewards Vault rewards-vault — where users check the distribution status of redeemed experiences.
- Diamonds diamonds — the in-app rewards currency spent in Mission Rewards.
- Travel Rule travel-rule — jurisdiction-dependent compliance requirements for crypto deposits.
Settings Extended Remap R10 · R16 · R19 · R22
Two-pane modal: nav on --surface-3 with accent-tint active states; grouped field rows; connector rows with mint "Connected" checks; Vault names in Onest 600 with masked dots; a danger zone whose destructive row is the only danger text on the page — confirmed via the checkpoint pattern.
Destructive confirm follows the checkpoint anatomy: statement + consequences + verbs [Delete — the one sanctioned danger-filled pill] [Cancel ghost]. Appearance pane hosts the Light/Dark/Auto segmented control.
Notifications Extended Remap R13 · R18
Popover anchored to the rail bell: frame radius, card shadow, hairline header with a quiet "Mark all read", segmented filter, rows with unread accent pips on --surface-3. Agent actors get dot avatars; previews strip markdown artifacts.
testing in dev
The button timed out — you can add your Braze credentials via the Vault tab directly. You'll need two values…
Done. The exchange-volume morning briefing cron job has been cancelled and removed.
Usage limit reached. Please subscribe.
Sent a message
Icons Extended
One family: 1.5px stroke, round caps (Lucide-compatible). Sizes 14 inline · 16 buttons/meta · 18 nav · 20 headers. Color --text-3 at rest in chrome, --text-2 in content, hover/active --text-1; accent only when the icon is the state signal. The sparkle glyph is retired platform-wide — the agent's mark is the dot.
The nine surfaces.
Every product screen assembled from the shell and library above. The mocks below follow the global theme — flip the toggle to review each page in dark. Each spec ends with the corrections applied against the July 2026 screenshots.
E1–E2 · Command Center Remap R1 · R6 · R11 · R15 · R17 · R22
Your 9 PM with Aaron has no agenda and he hasn't confirmed — ping him now. Sid also needs your auth guidance. Two replies are waiting: Hristo on workflows and Rayna on AIC.
Your priorities today
Lock in tonight's 1:1 with Aaron
Your 1:1 with Aaron Kurzak is at 9 PM with no agenda. Aaron hasn't confirmed attendance.
Unblock Sid on Slack auth today
| Zone | Spec | Corrections applied |
|---|---|---|
| Header | Segmented tabs left, "Updated 5h ago" + refresh right (C2) | Pill/plain hybrid → one segmented control (R16) |
| Content | Column max 720–760 centered · digest → priorities panel → privacy footer → awaiting-reply → add row | Purple accents → dot system (R1) · orange risk → neutral advisory (R6) · red date chip → neutral (R11) |
| People tab | Digest → team grid (accent attention rings) → focus person card → health table (D6) | Gold meter → accent/danger meter (R8) · "Reach out" rect → primary pill (R15) |
E3 · Calendar Remap R1 · R3 · R15 · R21
Calendar
One 30-minute commitment anchors the day: the daily sync at 10:30. Keep the afternoon block protected.
Corrections: purple brief/selected-day → accent tint (R1) · green Join call → primary pill + Live label (R3) · italic "No recap yet" → designed empty state (R21) · black "New call" pill absorbed into the one primary system (R15).
E4 · Skills & Apps Remap R2 · R5 · R14 · R15 · R16
Layout: create hero (D10) centered at top → panel with segmented [Yours | Discover] → toolbar (search ds-input + Import skill ghost; Discover adds Sort select + grid/list toggle) → filter tabs (All / Skills / Apps / Dashboards) + "77 items" caption → skill rows or card grid. All CTAs are pills; type tags come from the label vocabulary; names in Onest 600. Corrections: gradient headline → Title 1 ink (R2) · orange update chips → accent labels (R5) · black rects → primary sm pills (R15) · dark-pill filter → segmented tabs (R16) · gradient thumbnails → surface-2 wells (R14). Components rendered in the library above.
E6–E7 · Chat surfaces — agent DM, human DM, Rooms Remap R4 · R9 · R10 · R13
Corrections: green/orange usernames → text-1 600 with structural attribution (R4) · "ai" badge and letter squares → dot avatars (R13) · blue links and link boxes → accent-text links (R9) · monospace metric chips in agent output → neutral Onest chips; literal code only in surface-2 wells (R10). Rooms use the identical timeline with thread summaries, reactions, and system lines (library demo).
E5 · Knowledge — E8 · Settings — E9 · Notifications Remap R9 · R10 · R12 · R16 · R18 · R19 · R22
Knowledge: page header (Title 1 + subtitle) → underline tabs (Browse / Sources / Search / Ask agent) → recent-changes bar → the three-pane layout in D11: tree 280 · document ≤760 · graph 380. Settings: the two-pane modal in D12 — Account fields, Appearance (theme control), Connectors, Vault, Admin. Notifications: the popover in D13 anchored to the rail bell. All three are fully specified and rendered in the component library; their corrections are listed there.
One voice, verb-first.
Copy is part of the system. These rules bind every button, label, timestamp, and empty state in the product.
| Rule | Standard | Examples |
|---|---|---|
| Case | Sentence case everywhere — buttons, labels, tabs, titles. Micro labels uppercase via CSS only. Proper nouns keep their case. | "Mark all read" · "New call" · "Import skill" · "Ask agent" |
| CTAs | Verb-first and concrete; one primary verb per view; Deny/destructive text-only and last. Never OK / Submit / Yes. | "Approve & send" · "Ping Aaron + add agenda" · "Reach out" · "Generate recap" |
| Agent voice | First person, plain, evidence first. No exclamation-mark enthusiasm in system copy. | "Six drafts ready. I read 132 issues." |
| Timestamps | Today 7:45 · this week Tue 8:42 · older Jul 15 · relative only in meta ("Updated 5h ago", "38d"). Never absolute + relative in one line. | "Fri, Jul 24, 2:09 PM · 5 mins" |
| Empty states | One designed sentence + one action; dashed border container; never italic, never bare. | "No recap yet." + Generate recap |
| Errors | Plain sentence in danger: what happened + next step. No codes in UI copy. | "That doesn't look like a complete address." |
| Names | Handles lowercase as authored; agent attribution "mika · Maya's agent"; rooms #lowercase-kebab. | jeetzandawala · #shipping-week |
The label vocabulary Extended
A closed list — new labels require design review. Rank: solid > accent > ok > neutral > danger.
Flat night, visible focus.
Dark mode is a token swap, not a redesign — if a component needed dark-specific fixes, it was consuming primitives and must be corrected.
Dark mode law
- Flat night surfaces only:
#0A0D12 / #0D1117 / #12161F. No aurora, glow, or grain inside the app shell — those are marketing. data-themeon<html>; default honorsprefers-color-scheme; user choice persists. Both themes declarecolor-scheme.- What flips by rule: primary pill ink→white · accent lifts to
#5FD4F2(raw cyan is too thin on night) · danger lifts to#FF7A87· shadows become ring + black recipes. - Photos and avatars never invert; app thumbnails sit on
--surface-2in both themes.
Accessibility non-negotiables
- Focus is always visible: 2px
--focus-ring, offset 2, both themes. Modals trap focus; Esc closes; popovers return focus. - text-3 fails AA — metadata only, never the sole carrier of meaning. Accent-text only at 600–700 weight.
- Pips, meters, and working bars always pair with text; color and motion never carry state alone.
- Checkpoint verbs keyboard-operable in DOM order; pending checkpoints announced to AT. Icon-only buttons carry
aria-label+ tooltip. - Touch ≥44×44; row taps full-bleed;
prefers-reduced-motioncollapses every animation.
| Pair | ≈ Ratio | Verdict |
|---|---|---|
| Ink on canvas / Night ink on night | 18:1 / 17:1 | AAA — headings, names, values |
| Muted on canvas / night | 6.5:1 / 7:1 | AA all sizes — the body pair |
| Faint (text-3) | 3.3:1 | Fails AA small — decorative metadata only |
| Accent deep on white | 4.2:1 | 600–700 weight labels and links only |
| Accent night on night | 11:1 | AA — why the accent lifts on dark |
Migration order
1 · Ship tokens.css + Onest + theme bootstrap. 2 · Replace the four button systems with ds-btn (R15). 3 · Delete the violet family, gradients, and sparkles; land the dot agent avatar (R1, R2, R13). 4 · Normalize tabs, sidebar states, links, monospace (R16, R22, R9, R10). 5 · Components per Part D; pages signed off per Part E. 6 · Turn on dark mode — if 1–5 used semantic tokens honestly, it's a switch, not a project.
Waiting is a designed state.
Every surface can be waiting on a model, a tool call, or a person. What the user sees is chosen by how long the wait is expected to be — not by what is convenient to build.
The loading ladder Extended
| Expected wait | Show | Never |
|---|---|---|
| < 120ms | Nothing — render the result. | A flash of skeleton; it reads as a bug |
| 120ms – 1s | The destination's skeleton. | A spinner |
| 1s – 10s | Skeleton + a working line naming the task ("Reading 132 issues…"). | An indeterminate bar with no words |
| > 10s | Working line + Stop pill + ds-steps. | Blocking the whole surface |
| Streaming | Stream into place; the cursor is a ds-pip--live. | A percentage you cannot honour |
A spinner never appears alone. If you cannot describe the work, you cannot ask someone to wait for it. And a skeleton never breathes for more than ten seconds — past that it has become a lie, and the surface escalates to a working line with a Stop.
Skeletons Extended
Skeletons mirror the real layout — same line count, same widths, same avatar sizes — because the jump on load is the defect, not the skeleton. One opacity breath at 1.6s, rows staggered 60ms. No sweeping shimmer: the system has no gradients, and a diagonal sweep on near-black reads as a rendering artifact.
Optimistic — and the one thing that never is
| Action | Optimistic | On failure |
|---|---|---|
| Send a message | Bubble at 60% opacity, no timestamp | Gains a --danger hairline + "Retry" |
| Check an item | Checkbox fills, title strikes through | Reverts with a toast naming the reason |
| React | Chip appears in accent-tint | Chip removes itself; no toast |
| Approve a checkpoint | Never. | — |
Approvals, denials and Stop are never optimistic. A checkpoint that looks approved before the server agrees is a trust failure — and trust is the thing this product sells.
One scale, no raw numbers.
Ad-hoc z-index values are how a popover ends up under a sticky header. The scale is closed; components consume the token.
| Token | Value | What sits here |
|---|---|---|
| --z-base | 0 | Page content |
| --z-raised | 100 | Sticky page and table headers, the composer bar |
| --z-rail | 200 | Sidebar rail, right panel |
| --z-popover | 300 | Dropdowns, menus, pickers, notifications |
| --z-drawer | 400 | Mobile sheets, side drawers |
| --z-scrim | 500 | The modal backdrop |
| --z-modal | 600 | Modals, the command palette |
| --z-toast | 700 | Toasts — above modals, so a confirmation stays visible |
| --z-tooltip | 800 | Tooltips — last, because they attach to whatever has focus |
The innermost open layer owns the scroll lock and restores position on close; nested overlays never double-lock. Focus enters on open, is trapped for modal-class layers, and returns to the trigger. Esc closes the topmost layer and nothing else.
It is called Command Center. It behaves like one.
Every shortcut below is discoverable from ⌘/ and from the palette — a shortcut that exists only in the docs does not exist.
The command palette Extended
Top-anchored at 14vh, not centred — the list grows downward and centring makes it jump. Selection moves with ↑ ↓; hover sets selection too, so pointer and keyboard always agree. No results offers "Ask your agent instead" — the palette is a front door to the agent, not a dead end.
The keyboard map
| Key | Does | Where |
|---|---|---|
| ⌘K | Open the command palette | Everywhere |
| ⌘/ | Shortcuts sheet | Everywhere |
| ⌘. | Stop the agent | Anywhere an agent is working |
| G then C W A K L | Go to Command Center · Workflows · Skills & Apps · Knowledge · Calendar | Everywhere |
| J K | Move through the focused list | Lists, timelines, notifications |
| E / S | Hide / snooze the focused row | Priorities, awaiting reply |
| A R D | Approve · Review · Deny | The focused checkpoint |
| ⌘⏎ / ⇧⏎ | Send / newline | Composer |
A shortcut never fires while a text field has focus except ⌘-combinations. Single-letter shortcuts require the list to hold focus, not the page.
Density Extended
Two densities, one set of components. Density changes space only — never type size, never radius, never stroke. Set with data-density="compact" on the app root. Compact is for tables, rooms and long lists on large screens; never the default on touch, where 44px is the floor.
| Comfortable (default) | Compact | |
|---|---|---|
| Row height | 44px | 36px |
| Section gap | 24px | 16px |
| Card padding | 16–18px | 12–14px |
| Table cell | 11px 18px | 7px 14px |
Drag & reorder
Only two things reorder: priority items and workflow steps. Everything else sorts. The row lifts to --shadow-card at 0.98 scale; a 2px accent line marks the drop position. The keyboard equivalent is mandatory — Space picks up, ↑ ↓ move, Space drops, Esc cancels, announced through a live region.
What one colour does to a chart.
Quiet Sky has one accent and no gradients. That is not a limitation to work around — it decides the chart system.
The law
- Magnitude is one hue. The cyan ramp, light → dark. The default for every chart in the product.
- Identity is position and direct labels — not colour. Two or three series get ramp steps plus an end-label each.
- Beyond three series: small multiples, or fold the tail into "Other". Never a generated hue.
- Status colours are reserved. Mint and danger are state, never series 2, and always ship with an icon and a word.
Which means
- There is no diverging ramp — there is no second hue to build one from. Polarity is two stacked fills with a 2px gap, both labelled.
- There is no amber. Orange was deleted, so "warning" is copy and placement, not paint.
- There is no pie chart. Three or more parts are bars.
- Never a dual-axis chart. Two scales become two charts, or index to a common base.
The ramps — validated, not chosen Extended
Both ramps pass the ordinal checks — monotone lightness, adjacent ΔL ≥ 0.06, light-end contrast ≥ 2:1 against that mode's own surface, single hue. The dark steps are selected, not inverted — they were derived against #0D1117 and validated there, rather than computed from the light hexes. What does flip is the anchor: --chart-5 is always the largest value and always carries the most contrast against its surface — darkest on canvas, brightest on night. Get that backwards and "most" becomes the least visible mark on the chart. For two series use --chart-4 and --chart-2, not the ends, where one of the pair goes dim in one theme.
Charts
Bars capped at 24px thick with a 4px rounded data-end square at the baseline · lines 2px with an end-marker ringed 2px in the surface colour · hairline solid grid, never dashed · values at the tip and the line-end only, never on every point · text wears text tokens, never the data colour.
Every chart ships a hover layer and a table view behind a quiet toggle — that is the accessibility contract, and it is also what people copy into a document.
Stat tiles, meters, stacks
A delta chip always carries an arrow and a number — never colour alone. Avatar stacks cap at four faces with a 2px surface ring each; the overflow is a +N chip, and an agent is never folded into the overflow — you must always be able to see that an agent is in the room.
The same rule as the accent.
The sound identity is part of this system, not a side project — and like cyan, it only fires where it carries meaning. QuietSkySound.play(name).
| Sound | Fires when | Tier |
|---|---|---|
| signature | First launch of a session, and nowhere else | attention |
| send | You send a message | ambient |
| tap | A human message arrives in the room you are looking at | ambient |
| ping | A DM arrives | ambient |
| mention | You are mentioned | attention |
| checkpoint | The agent needs you | attention |
| done | A verified-done strip lands | attention |
| live | A call starts, or a workflow begins a run | ambient |
| callEnd | A call ends | ambient |
| stopped | You pressed Stop | attention |
| error | An action failed | attention |
Silent
- Never on hover, scroll, typing, focus change or navigation.
- Never for something you are already looking at — an arriving message in the focused room plays
tap; the same message while you are typing in it plays nothing. - Never two sounds inside 400ms. The later wins.
- Muted entirely during a call except
stoppedanderror.
Always
- Attention-tier is off until the user opts in; ambient respects the OS setting.
- A sound never carries information alone. Every sound accompanies a visible change — it is a second channel, never the only one.
- Print (Part M): force light, drop the rail and all hover chrome, and print each chart's table view beneath it.
ai.com · Quiet Sky application design system v2.0 · August 2026 · Internal · Foundations: design-system.html v1.0 (canonical) · Audit source: product screenshots, July 2026 · Terminology per the ratified glossary: Workflows (formerly Routines). Parts H–M added August 2026 — time & loading, layering, input, data & charts, sound, print; chart ramps validated against each mode’s own surface. Companion doc: app-design-system.md.