SynthesisUI
Gallery/halogen

Halogen

v17 · published

Engineered calm - cold light on graphite, precise to the pixel.

precisegraphiteluminousrestrained

Halogen is a re-reading of the modern product-tool aesthetic: a near-black graphite canvas where almost nothing glows, so the few things that do feel deliberate. Color is rationed to a whisper - surfaces and borders are barely-there white films, text is a cool off-white at high contrast, and a single electric indigo carries every primary action. A humanist sans does the talking while a mono face stamps the technical details, echoing the engineering culture the source was built for. Motion is fast and restrained, riding one signature easing curve.

re-imagined from https://linear.app

Use in your project

Pull this design system into any project - it follows the system's tokens, recipes and rules. Run the commands yourself, or let your coding agent set it up and build.

1 · Authenticate
npx synthesisui@latest login
2 · Add this design system
npx synthesisui add halogen --version 17
3 · Import the tokens in your global CSS
@import "_synthesisui/ds/halogen/tokens.css"; @import "_synthesisui/ds/halogen/theme.css";
Ask your agent
Use the "Halogen" design system (slug: halogen) to: build the UI I describe next

First make sure it's installed: run `npx synthesisui add halogen` if `_synthesisui/ds/halogen/` isn't in the project yet.

Read these files first (highest authority first):
- _synthesisui/ds/halogen/rules.md - project rules for this system (if present); obey them above everything else
- _synthesisui/ds/halogen/philosophy.md - the mission, voice and principles (if present); let it shape every screen
- _synthesisui/ds/halogen/v17/GUIDE.md - how to apply the system, the recipes and the token vocabulary

Follow this contract (target framework: next):
- First check whether this refers to UI that already exists in the project. If it does, modify only what's needed and keep the rest intact and on-system. If it doesn't, build it new.
- Scope the markup with `data-ds="halogen"` (or rely on it at the app root).
- Style with the design system only: reuse the `.ds-*` recipe classes and the DS-backed Tailwind utilities (`bg-primary`, `text-foreground`, `p-md`, `rounded-lg`, `font-display`…). Never use raw hex/px outside the system's scale.
- Make sure `tokens.css` + `theme.css` are imported in the global CSS (see the GUIDE's "How to apply").
- Wire the behavior yourself (open/close, focus, routing) - the system ships the looks, not the JS.

Composition (make it look composed, not just correct):
- Cap page content with a max-width container and center it - this DS ships `max-w-app` for dashboards/wide UI and `max-w-prose` for text columns. Don't stretch content edge-to-edge.
- Give the page a complete, intentional layout: clear vertical rhythm, sensible density and grouped sections. Never leave a single thin row floating on an empty screen.

Deliver senior-level, production-quality code: clean structure, accessible (ARIA + keyboard), and responsive.

Paste into Claude Code, Cursor or any coding agent. From your project you can also run npx synthesisui use halogen "…".

Dependencies

What to install or load so the system renders at full fidelity - it ships token names and recipes, not the assets.

  • Web fonts - Inter Variable, Berkeley Mono

    The system ships token names, not the fonts. Load them (Google Fonts, next/font or Fontsource) or type falls back to a generic family and loses the system's identity.

  • Icons - Lucidenpm i lucide-react

    Components reference Lucide icon names. Install it (or swap in your own icon set) to render them.

  • Chartsnpm i recharts

    Charts are themed through your series tokens, but you bring the rendering library (the gallery uses Recharts).

Color

Primitives and roles.

Named scales forged by the synthesis; semantic roles only ever point at them.

color.moss

400#4f9d76

500#3f8a66

color.rose

400#e0576a

500#cf3f54

color.veil

500#05070ab3

color.amber

400#c9973f

500#b3842f

color.blush

300#f9bfe9

400#f79ce0

500#ec6fd0

color.slate

50#ffffff

100#f7f8f8

200#e2e4e7

300#d0d6e0

400#8a8f98

500#62666d

600#383b3f

700#23252a

800#18191c

900#0f1011

950#08090a

color.indigo

300#a5b4ff

400#7c8cff

500#5b6cff

600#4453e6

700#3540b4

color.semantic - resolved live via CSS variables

info

{color.indigo.400}

faint

{color.slate.500}

muted

{color.slate.400}

scrim

{color.veil.500}

accent

{color.blush.400}

border

{color.slate.700}

canvas

{color.slate.950}

danger

{color.rose.400}

raised

{color.slate.800}

overlay

{color.slate.700}

primary

{color.indigo.500}

success

{color.moss.400}

surface

{color.slate.900}

warning

{color.amber.400}

foreground

{color.slate.100}

color.series - categorical data-viz palette (bg-series-*)

series-1

series-2

series-3

series-4

series-5

series-6

series-7

series-8

Foundations

Shape & depth.

Corner radius, spacing rhythm and elevation - the physical feel of the system.

radius

xs
sm
md
lg
full

spacing

3xs0.25rem
2xs0.5rem
xs0.75rem
sm1rem
md1.5rem
lg2rem
xl3rem
2xl4rem
3xl6rem

shadow

md
sm
glow
ring

Typography

The voice of the system.

Display: Inter Variable · Body: Inter Variable · Mono: Berkeley Mono

xsDesign, set free0.75rem / 1rem
smDesign, set free0.875rem / 1.5
baseDesign, set free1rem / 1.6
lgDesign, set free1.25rem / 1.4
xlDesign, set free1.5rem / 1.3
2xlDesign, set free2rem / 1.2
displayDesign, set free4rem / 1.05

Motion

How it breathes.

Every keyframe runs live below, dressed in the system's own colors - durations, easing curves and the interactions they power.

keyframes - 7 live

rise
blink
float
pulse
sheen
expand
slide-in

easings

standardease
outease-out
swiftcubic-bezier(0.25, 0.46, 0.45, 0.94)

durations

base · 200msfast · 120msslow · 320msambient · 3.5s

interaction patterns

enterentrance

Content rises a short distance as it fades in.

hoverhover-raise

Interactive surfaces brighten their ring on hover.

loopcursor-blink

The command-bar caret blinks with mechanical precision.

enterlist-stagger

Rows slide in from the left in quick succession.

loopambient-pulse

Status dots breathe at a calm, steady cadence.

pressunderline-grow

Active tab underline expands from the center.

Components · 44

Recipes, rendered live.

Every value below is a token reference resolved by the renderer - hover, toggle and switch tabs to feel the states. Bespoke components are rendered from their anatomy hint.

ds-badge

Mono-stamped label for technical metadata; accent variant uses the blush highlight.

intent

infoaccentdangerneutralsuccesswarning

ds-button

Compact, low-radius action. Primary carries the lone indigo; the rest stay in graphite films.

intent

ds-command-bar

bespoke · field

⌘K launcher - the product's front door.

ds-card

Graphite surface defined by a hairline ring rather than a border; raises on hover.

padding

Default

A card wearing this system.

None

A card wearing this system.

emphasis

Default

A card wearing this system.

Elevated

A card wearing this system.

ds-select

Field trigger that reveals a focus ring on interaction.

Choose an option

ds-input

Quiet field that reveals an indigo focus ring on interaction.

ds-avatar

Identity token - sized circle with initials or image.

size

MAMAMA

ds-link

bespoke · surface

Inline text link, for words inside sentences - the underline is the affordance, so it reads as a link without relying on colour alone. For standalone actions use button; for navigation chrome use navbar/sidebar items.

ds-kicker

bespoke · text

Mono uppercase eyebrow with wide tracking - the HUD microtype that labels a section ("01 · ECOSYSTEM"). Use above headings; data-tone="accent" for the highlighted variant.

tone

defaultaccent

ds-readout

bespoke · text

HUD data readout - a mono tabular value over a micro uppercase label ("42s · AVG RENDER"). The corner instrument of cinematic scenes; pair with the count-up hook for live-feeling numbers.

ValueLabel

ds-heading

bespoke · text

Display heading on the system's type scale - the display family at a semibold weight. Pick a `size` step (defaults to 2xl) so headings stay on-scale without hand-set styles.

size

lgxl2xldisplay

ds-text

bespoke · text

Body copy on the system's type scale. Pick a `size` step and a `tone`; defaults to base body text on the foreground color - so text stays on-system without hand-set styles.

size

xssmbaselg

tone

defaultmuted

ds-stack

bespoke · surface

Vertical layout primitive - a flex column with a token `gap` (defaults to md). Stack sections/cards without hand-set flex styles.

gap

A surface wearing this system.
A surface wearing this system.
A surface wearing this system.
A surface wearing this system.
A surface wearing this system.
A surface wearing this system.

align

A surface wearing this system.
A surface wearing this system.
A surface wearing this system.
A surface wearing this system.

ds-row

bespoke · surface

Horizontal layout primitive - a centered flex row with a token `gap` (defaults to sm). Compose toolbars/inline groups without hand-set flex styles.

gap

A surface wearing this system.
A surface wearing this system.
A surface wearing this system.
A surface wearing this system.
A surface wearing this system.
A surface wearing this system.

justify

A surface wearing this system.
A surface wearing this system.
A surface wearing this system.
A surface wearing this system.

align

A surface wearing this system.
A surface wearing this system.
A surface wearing this system.
A surface wearing this system.

ds-alert

Inline message. Tone maps onto the system's own semantic accents.

tone

Neutral

A message wearing this system.

Accent

A message wearing this system.

Primary

A message wearing this system.

Success

A message wearing this system.

Warning

A message wearing this system.

Danger

A message wearing this system.

Info

A message wearing this system.

ds-switch

Binary toggle - the track wears the system, on flips primary. Set data-state="on" on the track and the thumb.

state

ds-checkbox

Native checkbox/radio tinted to the system via accent-color. Put ds-checkbox on an <input type="checkbox"> (or radio).

ds-slider

Native range slider tinted to the system via accent-color. Put ds-slider on an <input type="range">.

ds-radio

Native radio tinted to the system via accent-color. Put ds-radio on an <input type="radio"> and give grouped radios a shared name.

ds-stepper

Numeric stepper - a value flanked by minus/plus controls. Compose ds-stepper with two ds-stepper-button (each a <button>; add the disabled attribute at a bound) and a ds-stepper-value between them.

3

ds-steps

Step indicator for a multi-step flow (wizard/checkout/onboarding). Compose ds-steps with ds-steps-step and ds-steps-connector between them; nest a ds-steps-marker (the numbered circle) and ds-steps-label inside each step. Mirror data-state="done|active|upcoming" on BOTH the step and its marker (like switch on/off).

ds-divider

Hairline separator. Horizontal by default; data-orientation="vertical" makes a vertical rule (stretches to the flex row height).

orientation

ds-tabs

Segmented control. The trigger marked data-active="true" lifts onto a surface; panels carry the body.

ds-avatar-group

Cluster of overlapping avatars. Wrap ds-avatar elements in ds-avatar-group and add ds-avatar-group-item to each so they overlap and ring against the surface. Drop the item class (or reset margin-left) on the first avatar.

MAJSKPRL

ds-chip

Compact entity/filter token - a pill holding an avatar/icon, a label and an optional ds-chip-remove. Set data-active="true" for a selected filter (tints the primary); use a <button> or add ds-chip-remove for a dismissible chip.

active

MAMaya AndersenMAMaya Andersen

ds-progress

Determinate track - the fill carries the primary.

ds-count

Notification indicator to overlay on an icon/button. ds-count shows a number on a high-contrast inverted bubble (portable in any DS); data-dot="true" drops the label for a small alert dot tinted danger. Position it absolutely over the trigger.

dot

3

ds-stat

KPI / metric - a label over a prominent value, with an optional delta. Compose ds-stat with ds-stat-label, ds-stat-value and ds-stat-delta (tone=up/down colors the change against neutral). Line several ds-stat in a flex row with a divider/border for a KPI strip.

Monthly revenue$128,430▲ 4.2%

ds-table

Data table. Compose <table class="ds-table"> with ds-table-head, ds-table-row, ds-table-cell-head and ds-table-cell.

ProjectStatusUpdated
HalogenActive2h ago
CinnabarPaused1d ago
EmberActive3d ago

ds-modal

Centered dialog over a scrim. Compose ds-modal (the centering layer) with ds-modal-overlay, ds-modal-panel, and ds-modal-header/body/footer.

Delete project?
This permanently removes the project and its data.

ds-sheet

Off-canvas panel (drawer) for mobile nav and side detail. Compose ds-sheet (the fixed layer) with ds-sheet-overlay (the scrim) and ds-sheet-panel; the panel docks to the right by default - data-side="left" docks it left.

Filters

ds-menu

Dropdown/popover surface. Compose ds-menu with ds-menu-item (tone=danger for destructive) and ds-menu-separator.

Edit
Duplicate
Delete

ds-field

Form field group. Compose ds-field with ds-field-label, the control, ds-field-hint and (when invalid) ds-field-error.

EmailEnter a valid email.

ds-sidebar

App navigation rail. Compose ds-sidebar with ds-sidebar-item (active=true marks the current route).

ds-topbar

App top bar - brand/search on the left, actions on the right.

AcmeMA

ds-navbar

Horizontal navigation bar. Compose ds-navbar with ds-navbar-item (active=true marks the current route; data-locked="true" dims a disabled/"soon" item).

ds-textarea

Multi-line text field - the input's taller sibling.

ds-breadcrumb

Trail of ancestors. Compose ds-breadcrumb with ds-breadcrumb-item (current=true for the leaf) and ds-breadcrumb-separator.

ds-pagination

Page navigation. Compose ds-pagination with ds-pagination-item (active=true for the current page).

ds-empty-state

Zero-data placeholder. Compose ds-empty-state with ds-empty-state-icon, ds-empty-state-title and ds-empty-state-description.

No projects yet

Create your first project to get started.

ds-toast

Transient notification. Tone tints the border; compose ds-toast with ds-toast-title and ds-toast-description.

tone

NotificationYour changes were saved.
successYour changes were saved.
warningYour changes were saved.
dangerYour changes were saved.
infoYour changes were saved.

ds-tooltip

Small label bubble - inverted surface for contrast against the canvas.

Copy link

ds-icon-button

Square, label-less action for toolbars and row controls - a quieter sibling of button.

ds-skeleton

Loading placeholder block. Ships the muted shape; animate it with Tailwind's `animate-pulse` (or a DS shimmer keyframe).

Engagement blocks · 5

Engagement, wearing the system.

Optional gamification blocks the AI advisor can propose - token-only, so they re-skin to any base. A library to compose from, not a parallel product.

ds-streak

Consecutive-day streak counter - rewards consistent return without nagging.

12day streak

ds-xp-bar

Experience / level progress bar - visualizes advancement toward a goal.

Level 4620 / 1000 XP

ds-progress-ring

Circular progress ring - goal completion at a glance. Set --ds-ring (e.g. 72%).

72%

ds-badge-level

Level / rank badge - recognizes earned status.

tier

bronzesilvergold

ds-leaderboard

Leaderboard - ranks peers to motivate progress (use sparingly in B2B).

1Ana2,480
2Bruno2,210
3Caio1,990

Icons · lucide

A consistent icon set.

Icons inherit the system: color via currentColor, a standardized stroke, sizing on the scale. Lucide by default; more libraries can be enabled per system.

Pages · 3

Whole pages, themed live.

Full-page layouts assembled only from recipes and tokens - every region re-themes to the system automatically. Icons and media render as placeholders until their adapters land.

dashboard-sidebarapp-shell
Workspace
Overview
Analytics
Projects
Docs
Settings
Revenue
+12%
$48.2k
Active users
+4%
12,480
Signups
+9%
1,204
Churn
-0.3%
1.8%
Revenue$48,240 this month
7D30D90D
Conversion
Traffic
Recent activity
  • Adashipped checkout
    now
  • Linmerged #482
    2m
  • Maxdeployed v10
    14m
  • Rioopened a proposal
    1h
onboardingblank
Step 1 of 3

Welcome - let's set you up

We'll tailor the workspace to your answers.

Step 2 of 3

Tell us about you

Your name
Work email
Step 3 of 3

Pick a plan to finish

Team size
landinglanding
Acme
ProductPricingDocsChangelog
New · v2.0

Ship a coherent product, faster

A complete design system, themed end to end - every token in its place, every screen already wearing your brand.

Free to start · no credit card required
Trusted by product teams everywhere
Why Acme

Everything ships on-system

Built to scale

Tokens compose into any surface you need.

Measured by design

Charts and dashboards inherit the theme for free.

Whole pages, themed

App shells and landings assume your shape instantly.

Workflow

From token to shipped page

Design once at the foundation and every component, chart and template re-dresses itself - no per-screen rework.

Foundations cascade to every surface
Components stay on-system by construction
Templates arrive already assembled
Quality

Excellent by default

Every piece ships measured: contrast, hierarchy and consistency are scored before anything reaches production.

Accessibility checked at the source
Design reviews built into the pipeline
One source of truth for every team
12k+
teams building on-system
99.9%
uptime across releases
4.9/5
average team rating

“We rebuilt our whole app on this system in a week - every screen came out consistent by default.”

Maya ChenHead of Design, Numera

Start building today

Spin up your system and ship the first page before lunch.

Acme
Design once, ship everywhere.
ProductFeaturesPricingChangelog
CompanyAboutBlogCareers
ResourcesDocsCommunitySupport
© 2026 Acme Inc.

Charts · 5

Data, painted by the system.

Chart recipes themed entirely from token refs - series, grid, axes and fills re-paint to the system automatically. Sample data; the theming is the point.

revenuearea
usagebar
conversiondonut
trend-upsparkline
trend-downsparkline