Design system · static.universum.run

The design system of universum

universum's tokens and Vue component library — no build step, served straight from this domain and consumed by the platform's applications (today, source-apps). A single <link> and one import register the 55 components below.

55 components 5 categories Vue 3 · no build

/v1/ is the contract. A breaking API change becomes /v2/, and /v1/ stays served — no application breaks because of a deploy here. A compatible fix ships in /v1/ itself.

Foundations

The scales, not described — copyable

Each sample below is the real token, rendered with its own value. The name in mono is what you copy into your CSS.

Color

White page, blue-gray surface and three identity colors. The brand gradient is never a background — only gradient type, a rail or a border.

Identity

{{ c.name }} {{ c.hex }} /v1/ compat: {{ c.alias }}

Brand gradient — blue to red

{{ c.name }} {{ c.hex }}
--grad-rainbow
--grad-wordmark
--grad-duo
--grad-duo-soft

Neutrals — every gray leans blue

{{ c.name }} {{ c.hex }}

Status

{{ c.name }} {{ c.hex }}

Surfaces and borders

{{ c.name }} {{ c.hex }}

Typography

Inter (SF Pro on Apple devices). One family covers everything — no serif, no separate display face.

Size scale

{{ t.sample }} {{ t.token }} · {{ t.px }}

Weights

Invite person {{ w.token }} · {{ w.value }}

Tracking

{{ tr.sample }} {{ tr.token }} · {{ tr.value }}

Space

A deliberately crooked scale — 2 to 80px, not snapping to a 4px grid.

{{ s.token }} {{ s.px }}

Radii

Nothing is fully square; nothing is a squircle blob.

{{ r.token }}{{ r.px }}

Shadows

Always with marine ink — rgba(43,48,134,…), never neutral black.

{{ s.token }}{{ s.value }}
Components

The 55, with real data from the universum domain

Organizations, roles, invitations, tickets, sessions and plans — the same kind of data that runs in the real applications.

Core · 14 components

Form controls

The data-entry building blocks — button, field, select.

Button

<u-button>

Five variants, three sizes. accent is the only CTA per screen.

Invite person Save changes Cancel View details Remove organization

IconButton

<u-icon-button>

Icon-only square, always with an accessible label.

Input

<u-input>

Label, icon, suffix, hint and error — all optional.

Textarea

<u-textarea>

Multiline, same hairline and focus ring as Input.

Select

<u-select>

Native, with the Input's metrics.

Checkbox

<u-checkbox>

17px, blue fill when checked.

Radio

<u-radio>

v-model on the group; each radio carries its own value.

Switch

<u-switch>

Immediate effect — the only control where the duo appears switched on.

Field

<u-field>

Label + control + hint/error. Wraps any form control.

SearchField

<u-search-field>

Glyph + shortcut hint + clear.

SegmentedControl

<u-segmented-control>

Two to four mutually exclusive views of the same thing.

Slider

<u-slider>

Rail filled by the duo gradient up to the value.

Session link expires in

OtpInput

<u-otp-input>

Six-digit code — Pulsar's gate before opening a session.

FileDropzone

<u-file-dropzone>

The drag-over is the whole feedback: accent border + wash.

{{ dropzoneCount }} file(s) selected.
Display · 13 components

Show data

People, status, metadata and tables — the vocabulary of any universum panel.

Avatar

<u-avatar>

Initials only — no photos in this system. The gradient is reserved for the agent.

Badge

<u-badge>

Ticket, invitation or sync state.

Open SLA at risk Resolved Overdue

Card

<u-card>

The container surface — including the one drawing this very card.

Up to 25 people · agent included

CodeBlock

<u-code-block>

Flat mono, no highlighting. The copy button confirms in place.

DataTable

<u-data-table>

Gray band on the header, no outer frame. Scrolls sideways without pushing the page.

Kbd

<u-kbd>

A single key — universum documents shortcuts everywhere.

Open the palette with K

KeyValue

<u-key-value>

Label on the left, value on the right — the standard detail panel.

Stat

<u-stat>

Big number in gradient — the highlight moment, never in a table cell.

StatusDot

<u-status-dot>

Status dot, optionally pulsing.

Tag

<u-tag>

Static label — micro for a category, chip for a feature row.

Pro plan Starter plan Invitation

Timeline

<u-timeline>

What happened on a ticket — and who did it, person or agent.

TreeList

<u-tree-list>

Expandable hierarchy — knowledge base folders.

UserCell

<u-user-cell>

Avatar + name + secondary line — the person unit in tables and lists.

Feedback · 10 components

Talk to whoever is using it

Persistent state, transient confirmation, loading and the focused decision of a dialog.

Alert

<u-alert>

Banner pinned to a region — state the person needs to keep seeing.

Same subject and same organization in the last 7 days. Show the alert again

Dialog

<u-dialog>

Focused decision — trapped focus, Esc closes, focus returns to whoever opened it.

Revoke access

This does not remove the history of tickets they already answered.

EmptyState

<u-empty-state>

Zero state — icon, title, message and one action to leave it.

Popover

<u-popover>

Between Tooltip and Dialog — a quick filter, without leaving the queue.

ProgressBar

<u-progress-bar>

Determinate rail — the 3px rail is one of the three shapes of the brand gradient.

Skeleton

<u-skeleton>

Placeholder shaped like the content, while the ticket loads.

Spinner

<u-spinner>

Indeterminate arc — only for waits above ~400ms.

Orb

<u-orb>

Rich loading — 9 thinking states on canvas, in the brand blue. It's the loading vocabulary; the Spinner is the inline minimum.

{{ s }}

Toast

<u-toast>

Transient confirmation — anchored to the screen corner in the real application.

Tooltip

<u-tooltip>

Instant bubble — explains an icon, never hides essential content.

Diego Rocha
Navigation · 9 components

Get from one place to another

Trail, tabs, action menu and the command palette — the product's fastest path.

Accordion

<u-accordion>

Body appears instantly, with no height animation.

Breadcrumb

<u-breadcrumb>

Ancestor path, above the title — never inside a card.

CommandPalette

<u-command-palette>

⌘K over the showcase itself — open it with the button, or for real with the shortcut.

Open palette or /Ctrl K anywhere on the page

Menu

<u-menu>

Dropdown anchored to a trigger — row actions.

Printer won't turn on — Acme Componentes

Pagination

<u-pagination>

Compact paginator for long queues and tables.

SideNav

<u-side-nav>

Side rail — the same component that builds this page's real navigation.

Stepper

<u-stepper>

Linear progress through a flow — inviting people to an organization.

Tabs

<u-tabs>

Switches the view without navigating.

TopBar

<u-top-bar>

52px, wordmark, product, primary navigation and the user cluster.

Brand · 4 components

The brand

Icon, wordmark, gradient type and the eyebrow — the identity devices.

Icon

<u-icon>

Lucide via CSS mask (inherits currentColor), or your own glyph via src.

{{ ic.caption }}

Logo

<u-logo>

Symbol + wordmark in curves — "versum" and the core stay red even over navy.

GradientText

<u-gradient-text>

Type filled with the brand gradient — a single moment per screen.

Identity in a single broker

Kicker

<u-kicker>

Uppercase, wide tracking — a typographic device, never emphasis.

universum platform · v1
Brand rules

What the library enforces

These aren't layout preferences — they live in reference/DESIGN-SYSTEM.md and each component's CSS applies them on its own. Here they appear as rules, not as decoration.

One gradient moment per screen

The brand gradient appears in type, on a 3px rail or on a border — never a flat fill, and never twice in the same view.

Starter
Up to 3 people
Pro
Chosen here
Enterprise
On request

Only the contracted plan gets a gradient border.

Sentence case everywhere

Title, button, table header, navigation. Uppercase is the kicker's typographic device — never emphasis on ordinary text.

Invite person Right
Invite Person Wrong — title case
No emoji in the interface

Lucide icons only. An icon inherits currentColor and has a consistent size and stroke; an emoji doesn't.

Agent suggestion

A Lucide icon in place of a pictogram.

At most two background tones

White + gray-50. This showcase itself only alternates between the two, section by section.

--surface-page
--surface-soft
Shadows always with marine ink

Never neutral black. All four elevation scales carry rgba(43,48,134,…).

Right — --shadow
Wrong — neutral black
Emphasis by opacity

Loss of emphasis is opacity:.55, not gray text — the token keeps the same ink on any background.

Invitation expired Right — opacity .55
Invitation expired Wrong — neutral gray