Quiet light
A calm instrument panel. Warm paper and ink, one deep-teal accent for primary actions, amber for Replying and Running, red only for failures and destructive actions, green kept for Awake, Active, Connected, Healthy and Published. Agent status is outlined; run status is filled, so the two never look alike.
Color tokens
Semantic names; every screen reads these, never raw hex.Type scale
Space, radius, elevation
Elevation has two levels: flat with a hairline (everything on the page) and --shadow-pop for what floats (menus, palette, drawers, dialogs, toasts). No cards inside cards.
Motion
With reduced motion, durations drop to 0 and the Replying pulse becomes a static icon.
Chart palette
Fixed order, never cycled. Single-series charts use slot 1. Status colors are never reused as series colors.
Components
StatusPill
Agent status is outlined. Run status is filled. Every pill has an icon and a word, never color alone.
Buttons and RoleLock
Primary, secondary and danger. With the Read-only role, actions stay visible but locked, with the reason.
SecretField
Shows Set or Not set. The value is never shown again; it can only be replaced.
ReadOnlyPanel
Settings owned by the deployment. Recessed, with a lock and the way to change them.
JSONViewer
Mono on the code surface. Used for settings JSON, snapshots, schemas and results.
{
"preset": "trier-tour-guide",
"preset_version": 2,
"model": "openrouter/free",
"max_rounds": 8,
"mcp_servers": [
{
"id": "github-mcp",
"tools": [
"list_issues"
]
}
],
"skills": [
{
"id": "trier-history",
"hash": "sha256:9f2c1a…"
}
]
}DisabledSection
Only in the preset editor, for sections that are not in v1. Recessed one step below the page surface.
ConfirmDialog
Destructive and irreversible actions ask for the exact name to be typed. The button stays locked until it matches.
TranscriptEntry and EmptyState
Read-only run entries, collapsed tool rows, and the empty state for a new agent.