Astryx — Shifted
Web design catalog · governed by DESIGN.md
Design system · Web

Astryx, shifted
onto our brand.

Astryx's warm skeleton — cream canvas, white cards, warm shadows, deep-on-pale status — rebuilt on our own tokens. The blue accent is gone; Nyx violet leads, Ryuki sky informs, nosmile99 amber highlights. One reference rules every page: DESIGN.md.

01

Warm canvas, always

Pages sit on amber-50 cream. Content floats on white cards with warm hairlines. Cold gray is the Material tell — it's banned.

02

Two-tier radius

Elements are 8px, containers are 12px, dialogs 16px, page panels 24px. Mixing tiers inside one component is how UIs end up looking like framework defaults.

03

Deep on pale status

Status is dark saturated text on a pale tint of the same hue — green-700 on green-100. Never white text on a loud fill, except destructive actions.

Primitives: design-tokens/tokens.json · Visual law: web/DESIGN.md · Typeface: Outfit + JetBrains Mono

Foundations

Color

Primitive ramps come straight from tokens.json. Click any swatch to copy its hex. Semantic roles — what the ramps are for — are defined in DESIGN.md.

Violet color.violet · Nyx brand ramp
50
#FAF5FF
100
#F3E8FF
200
#E9D5FF
300
#D8B4FE
400
#C084FC
500 · brand
#A855F7
600 · primary
#9333EA
700
#7E22CE
800
#6B21A8
900
#581C87
Sky color.sky · Ryuki brand ramp
50
#F0F9FF
100
#E0F2FE
200
#BAE6FD
300
#7DD3FC
400 · brand
#38BDF8
500
#0EA5E9
600 · secondary
#0284C7
700
#0369A1
800
#075985
900
#0C4A6E
Amber color.amber · nosmile99 brand ramp + canvas pigment
50 · canvas
#FFFBEB
100
#FEF3C7
200
#FDE68A
300
#FCD34D
400
#FBBF24
500 · brand
#F59E0B
600
#D97706
700 · highlight
#B45309
800
#92400E
900 · shadow tint
#78350F
Neutral color.neutral · always warmed before use (see DESIGN.md derivations)
0 · surface
#FFFFFF
50
#FAFAFA
100
#F5F5F5
200
#E5E5E5
300
#D4D4D4
400
#A3A3A3
500
#737373
600
#525252
700
#404040
800
#262626
900
#171717
950
#0A0A0A
Red color.red · status
100 · soft
#FEE2E2
300
#FCA5A5
500
#EF4444
600
#DC2626
700 · error
#B91C1C
800
#7F1D1D
Green color.green · status
100 · soft
#DCFCE7
300
#86EFAC
500
#22C55E
600
#16A34A
700 · success
#15803D
800
#166534

Semantic roles — light

canvas
#FFFBEB
amber-50
surface
#FFFFFF
neutral-0
ink
#211D14
neutral-900, warmed
primary
#9333EA
violet-600
secondary
#0284C7
sky-600
highlight-fill
#F59E0B
amber-500
success
#15803D
green-700
error
#B91C1C
red-700

Dark roles ("Ember") swap in via the theme toggle: warm brown-black canvas #161310, brand hexes stay exact — violet-500, sky-400, amber-500.

Foundations

Typography

Outfit for everything human, JetBrains Mono for specimens and code. Sizes map 1:1 to the type scale in tokens.json; display and headlines track negative, body never does.

display
57 / 64 · 600 · −1.5px
Ship faster.
headline-lg
32 / 40 · 600 · −0.8px
Foundations you can trust
headline
28 / 36 · 600 · −0.6px
Components, not containers
title-lg
22 / 28 · 600 · −0.3px
Card titles speak first
title
16 / 24 · 600
Section headers stay calm
body-lg
16 / 24 · 400
Lead paragraphs introduce a section in one or two sentences, no more.
body
14 / 20 · 400
Default text for product UI. Warm ink on a cream canvas, comfortable density, nothing decorative.
label
14 / 20 · 500
Buttons, form labels, nav items
caption
12 / 16 · 500
Metadata, timestamps, helper text — always secondary ink.
mono
13 / 20 · 400
color.violet.500 = #A855F7
Foundations

Spacing & shape

A 4px grid from tokens.json. Radius follows Astryx's two-tier logic: elements small, containers larger, pages largest.

Spacing scale

xs · 4px
sm · 8px
md · 12px
lg · 16px
xl · 24px
2xl · 32px
3xl · 48px
4xl · 64px

Radius tiers

inner · 4px · nested chips
element · 8px · buttons, inputs, cards in kanban
container · 12px · cards, alerts, columns
large · 16px · dialogs
page · 24px · page panels, hero media
Foundations

Elevation

Shadows are tinted with amber-900 — warm light blocked, not gray paint. Selection is an inset ring, Astryx's signature, never a background swap alone.

low
resting cards
med
popovers, toasts
high
dialogs
inset-selected
selected tab / option
inset-selected · primary
chosen card / plan
Foundations

Brand — the agents

Brand colors are identities first, decoration second. Each agent owns one hue across badges, avatars, charts, and highlights.

N
Nyx
PRIMARY · VIOLET 500
Nyx#A855F7

Leads: primary actions, focus, the system's voice.

R
Ryuki
SECONDARY · SKY 400
Ryuki#38BDF8

Informs: info states, links, secondary emphasis.

9
nosmile99
HIGHLIGHT · AMBER 500
nosmile99#F59E0B

Highlights: warnings, calls to notice, the canvas pigment itself.

Components

Buttons

8px radius, label type, sentence case. Violet means primary action — nothing else gets the fill.

Spec: components.button-* in DESIGN.md · padding 10px 18px · radius element

Components

Badges

Pills with pale tints and deep text. Agent badges always wear the agent's hue; status badges follow the same rule.

Todo Doing Blocked Done Needs review v1.2.0
Nyx Ryuki nosmile99
Components

Cards

White, 12px, hairline plus a low warm shadow, 24px padding. The workhorse surface.

TASKS DONE
128

▲ 12% this week

IN PROGRESS
7

3 agents active

BLOCKED
2

Needs Ryuki

Weekly digest

The board moved 14 tasks to done. Two are blocked on decisions only a human can make; everything else is flowing. Cards carry one idea each — title, body, then metadata in caption.

Components

Forms

White inputs, strong hairline, violet focus with a soft halo. Custom checkbox, radio, and switch — no framework defaults.

Keep it under a sentence.
Manual assign bypasses the claim race.
That date doesn't exist — pick a real one.
Components

Tabs

A muted track; the selected tab is a white pill carrying the neutral inset ring.

The project's front page: status, owners, and the latest movement on the board.
Components

Table

Borderless except row hairlines; the header is a muted fill in caption type. Rows warm on hover.

TaskStatusAssigneeUpdated
Web catalog — DESIGN.md
astryx-kitchen-sink / web
Donenosmile99Today, 14:20
Kanban backend — claim race test
agent-bus / DO
DoingNyxToday, 13:02
Panel — native auth prompt
admin-panel
BlockedRyukiYesterday
Android merge dev → main
astryx-kitchen-sink
TodoRyukiParked
Components

Alerts

Status tints at container radius, deep text, a single dot. No left-border accent bars.

Build green. GitHub Actions passed on dev — assembleDebug in 5m 34s.
Merge held. dev → main waits for a human decision. Nothing is blocked, it's parked.
Claim conflict. Another agent holds this task. First win stands — pick a different one.
New pattern. The kanban board below is built entirely from catalog components.
Components

Feedback

Progress, dialogs, and toasts. Try them — they're live.

Design tokens100%
Web components72%
Android (parked)40%
Park the Android merge?

The build is green on dev. Merging to main waits until the web catalog lands — that's the current call.

Patterns

Kanban board

The first real consumer of this system, assembled only from catalog pieces: muted column wells, element-radius cards, status badges, agent avatars.

Todo2
Merge dev → main (Android)
parkedR
search-bridge token audit
backlog9
Doing2
Web catalog — components pass
nosmile999
Kanban backend — claim tests
NyxN
Blocked1
Panel native-auth prompt
needs humanR
Done2
DESIGN.md — Astryx shifted
shipped9
Android build green on CI
verified9