Foundations
The primitive tokens, scales, and shared language that every Halcyon component is built from.
Colors
Cool teal-biased neutral ramp, blue brand ramp, and a dedicated teal accent. Dark mode is the default; light mode is derived.
| Token | Primitive | Hex (dark) | Role |
|---|---|---|---|
| --background | {neutral.900} | #0A1019 | Page background |
| --surface1 | {neutral.800} | #121A23 | Cards, elevated containers |
| --surface2 | {neutral.700} | #1B242E | Grouped backgrounds |
| --surface3 | {neutral.600} | #29333D | Inset areas |
| --text1 | {neutral.50} | #F2F5F8 | Primary text |
| --text2 | {neutral.200} | #C3CCD8 | Secondary text |
| --text3 | {neutral.300} | #8E9AA9 | Tertiary text, placeholders |
| --accent | {brand.400} | #4680F5 | Primary accent |
| --accent-subtle | {brand.900} | #07162F | Tinted background |
| --teal | {teal.500} | #2FA7A3 | Secondary accent |
| --success | {green.500} | #5CB13E | Positive states |
| --warning | {amber.500} | #E5A73B | Caution states |
| --error | {red.500} | #E5484D | Destructive states |
Typography
Display and headings in Manrope (geometric sans-serif). Body in Inter. Code and data in JetBrains Mono.
| Token | Font | Size | Line height | Weight |
|---|---|---|---|---|
| display | Manrope | 64px | 1.05 | 500 |
| h1 | Manrope | 40px | 1.1 | 600 |
| h2 | Manrope | 28px | 1.2 | 600 |
| h3 | Manrope | 20px | 1.3 | 600 |
| body | Inter | 15px | 1.5 | 400 |
| body-sm | Inter | 13px | 1.45 | 400 |
| caption | Inter | 11px | 1.4 | 500 |
| label | Inter | 12px | 1.3 | 600 |
| mono | JetBrains Mono | 13px | 1.5 | 400 |
Radii
Structured radii scale. Buttons use 8px (control), cards use 12px (component), modals use 20px (container). Only tags and badges get the full pill (999px).
| Token | Value | Use |
|---|---|---|
| --r-element | 4px | Small controls, checkboxes, list items |
| --r-control | 8px | Buttons, inputs, dropdown triggers |
| --r-component | 12px | Cards, panels, canvases |
| --r-container | 20px | Modals, sheets, popovers |
| --r-pill | 999px | Tags, badges, nav pills |
Elevation
Deep shadows for dark-mode depth. In light mode, shadows lighten automatically. Three levels from subtle card lift to full modal overlay, plus an accent glow.
| Level | Dark mode | Use |
|---|---|---|
| 0 | none | Default card state (flat) |
| 1 | 0 2px 8px rgba(0,0,0,0.3) | Card hover, sticky nav |
| 2 | 0 4px 16px rgba(0,0,0,0.4) | Menus, popovers |
| 3 | 0 8px 32px rgba(0,0,0,0.5) | Modals, sheets |
| accent | 0 4px 16px rgba(70,128,245,0.25) | Primary CTA hover |
Spacing
8px base scale with increments for fine control. Used consistently across padding, gap, and margin throughout the system.
| Token | Value | Use |
|---|---|---|
| --space-2xs | 2px | Hairline gaps, icon nudges |
| --space-xs | 4px | Tight padding, inline spacing |
| --space-sm | 8px | Base unit, small gaps |
| --space-md | 12px | Control padding, form gaps |
| --space-lg | 16px | Component padding, list gaps |
| --space-xl | 24px | Section padding, card padding |
| --space-2xl | 32px | Group spacing |
| --space-3xl | 48px | Section margins |
| --space-4xl | 96px | Page-level spacing |
Iconography
Phosphor regular as the primary icon kit. Clean, geometric outlines that match Halcyon's structured aesthetic.
| Property | Value |
|---|---|
| kit | Phosphor |
| weight | regular (1.5px stroke) |
| CDN | unpkg.com/@phosphor-icons/web@2/.../regular/style.css |
| class prefix | ph ph- |
| default color | inherits from var(--text1) |
| sizes | 16px inline, 20px button, 24px nav |
Actions
Interactive controls that trigger commands or navigate. Buttons, toggles, segmented controls, and dropdown menus.
Button
Primary actions, secondary options, ghost text buttons, and destructive actions in three sizes.
| Property | Value |
|---|---|
| background | var(--accent) #4680F5 |
| border-radius | var(--r-control) 8px |
| font-size | 15px |
| padding | 11px 20px |
| font-weight | 600 |
Icon Button
Compact square buttons for toolbar actions and icon-only controls in three variants and sizes.
| Size | Dimensions | Icon size |
|---|---|---|
| sm | 32 x 32px | 16px |
| md | 40 x 40px | 20px |
| lg | 48 x 48px | 24px |
Toggle Button
Two-state buttons for switching between views or modes, with on/off visual feedback.
| State | Background | Border | Color |
|---|---|---|---|
| off | transparent | var(--border-visible) | var(--text2) |
| off / hover | transparent | var(--text3) | var(--text1) |
| on | var(--accent-subtle) | var(--accent) | var(--accent) |
| on / hover | rgba(70,128,245,0.15) | var(--accent) | var(--accent) |
| disabled | transparent | var(--border-visible) | var(--text2) 40% |
Segmented Control
Mutually exclusive option group for switching between views or time ranges.
| Property | Value |
|---|---|
| background | var(--surface1) |
| border | 1px solid var(--border) |
| border-radius | var(--r-control) 8px |
| padding | 4px |
| item font-size | 13px |
| item padding | 6px 16px |
| selected background | var(--accent) #4680F5 |
Inputs
Form controls for collecting user data. Text fields, selects, checkboxes, radios, switches, sliders, and date pickers.
Text Input
Single-line text fields with label, placeholder, validation, and icon variants.
| Property | Value |
|---|---|
| background | var(--surface2) |
| border | 1.5px solid var(--border) |
| border-radius | var(--r-control) 8px |
| height | 40px |
| padding | 0 16px |
| font-size | 14px |
| focus border | var(--accent) #4680F5 |
| focus ring | 0 0 0 3px var(--accent-subtle) |
Textarea
Multi-line text input for longer content like descriptions, comments, and notes.
| Property | Value |
|---|---|
| background | var(--surface2) |
| border | 1.5px solid var(--border) |
| border-radius | var(--r-control) 8px |
| padding | 12px 16px |
| min-height | 96px |
| font-size | 14px |
Select
Dropdown selection control for choosing one option from a list, with open and closed states.
| Property | Value |
|---|---|
| background | var(--surface2) |
| border | 1.5px solid var(--border) |
| border-radius | var(--r-control) 8px |
| height | 40px |
| chevron | ph-caret-down, 16px, var(--text3) |
| open rotation | rotate(180deg) |
Checkbox
Binary selection controls for forms and settings, with checked, indeterminate, and group layouts.
| Property | Value |
|---|---|
| size | 18 x 18px |
| border | 1.5px solid var(--border-visible) |
| border-radius | var(--r-element) 4px |
| checked background | var(--accent) #4680F5 |
| check icon | 12px #FFFFFF |
| label font-size | 14px |
Radio Group
Mutually exclusive option selection with dot indicator for single-choice form fields.
| Property | Value |
|---|---|
| size | 18 x 18px |
| border | 1.5px solid var(--border-visible) |
| border-radius | 50% |
| selected border | var(--accent) #4680F5 |
| dot size | 8 x 8px |
| label font-size | 14px |
Switch
Toggle switches for binary settings with on/off states and sliding thumb animation.
| Property | Value |
|---|---|
| track size | 44 x 24px |
| thumb size | 20 x 20px |
| off background | var(--surface3) |
| on background | var(--accent) #4680F5 |
| thumb color | #FFFFFF |
| border-radius | var(--r-pill) 999px |
Slider
Continuous value selection with track fill, thumb, and optional range mode with two handles.
| Property | Value |
|---|---|
| track height | 4px |
| track background | var(--surface2) |
| fill color | var(--accent) #4680F5 |
| thumb size | 16 x 16px |
| thumb border | 2px solid var(--accent) |
| thumb background | #FFFFFF |
Date Picker
Inline calendar for date selection with today highlight, selected state, range highlight, and navigation.
| Property | Value |
|---|---|
| background | var(--surface1) |
| border-radius | var(--r-component) 12px |
| padding | 16px |
| width | 280px |
| day font-size | 13px |
| today color | var(--accent) #4680F5 |
| selected bg | var(--accent) #4680F5 |
| range bg | var(--accent-subtle) |
Combobox
Searchable dropdown that filters options as you type, with empty state for no results.
| Property | Value |
|---|---|
| width | 280px |
| input | standard cl-input (40px height) |
| dropdown offset | 4px below input |
| max-height | 200px (scrollable) |
| empty state | 13px var(--text3) centered |
Data Display
Components for presenting information. Cards, avatars, badges, tags, data tables, and loading skeletons.
Card
Content containers for grouping related information with optional image, hover lift, and selection states.
| Property | Value |
|---|---|
| background | var(--surface1) |
| border-radius | var(--r-component) 12px |
| padding | 20px |
| shadow (hover) | var(--shadow-l2) |
Avatar
User representation in three sizes with image, initials, or icon variants, plus grouped stacking.
| Size | Dimensions | Font size |
|---|---|---|
| SM | 24px | 11px |
| MD | 32px | 13px |
| LG | 48px | 18px |
Badge
Status indicators and labels in semantic color variants for inline metadata.
| Variant | Background | Color |
|---|---|---|
| Neutral | var(--surface2) | var(--text2) |
| Info | var(--accent-subtle) | var(--accent) |
| Success | var(--success-bg) | var(--success) |
| Warning | var(--warning-bg) | var(--warning) |
| Error | var(--error-bg) | var(--error) |
Tag
Categorization labels with optional remove action, accent and teal variants, and disabled state.
| Property | Value |
|---|---|
| background | var(--surface2) |
| border-radius | var(--r-pill) 999px |
| padding | 4px 12px |
| font-size | 13px |
Data Table
Structured tabular data with sortable columns, row selection, hover highlighting, and inline badges.
| Name | Status | Role | Last active | |
|---|---|---|---|---|
| Sarah Chen | Active | Engineer | 2h ago | |
| Marcus Johnson | Active | Designer | 5h ago | |
| Aiko Tanaka | Away | PM | 1d ago | |
| David Park | Offline | Engineer | 3d ago | |
| Elena Morales | Suspended | Admin | 1w ago |
| Property | Value |
|---|---|
| header background | var(--surface1) |
| row height | 48px |
| border-bottom | 1px solid var(--border) |
| hover background | var(--surface1) |
| selected background | var(--accent-subtle) |
Skeleton
Loading placeholders that mimic content layout before data arrives with shimmer animation.
| Type | Dimensions |
|---|---|
| Text line | 100% x 12px |
| Circle | 48px x 48px |
| Card | 280px x 160px |
| Table row | 100% x 40px |
Feedback
System responses and status indicators. Alerts, toasts, progress bars, spinners, and empty states.
Alert
Contextual banners for info, success, warning, and error messages with optional dismiss action.
A new version of the platform is ready. Update now to get the latest features.
You have used 85% of your monthly quota.
Unable to reach the server. Check your network and try again.
| Property | Value |
|---|---|
| border-radius | var(--r-component) 12px |
| padding | 16px |
| icon size | 20px |
| gap | 12px |
Toast
Transient notification messages for background events with optional action links.
| Property | Value |
|---|---|
| background | var(--surface2) |
| border-radius | var(--r-component) 12px |
| padding | 12px 16px |
| shadow | var(--shadow-l2) |
Progress
Horizontal progress bars, indeterminate loading animation, and circular SVG ring indicator.
| Property | Value |
|---|---|
| track height | 6px |
| track background | var(--surface2) |
| fill color | var(--accent) |
| border-radius | var(--r-pill) |
| ring size | 64px, stroke-width 4 |
Spinner
Animated loading spinners in three sizes for inline and overlay loading states.
| Size | Dimensions | Border width |
|---|---|---|
| SM | 16px | 2px |
| MD | 24px | 2.5px |
| LG | 36px | 3px |
Empty State
Placeholder content for screens with no data, guiding users toward their first action.
| Property | Value |
|---|---|
| icon size | 48px |
| title font-size | 18px / 600 |
| desc font-size | 14px |
| text-align | center |
| gap | 12px |
Overlays
Layered UI that appears above the page. Modals, popovers, tooltips, and accordions.
Modal
Centered dialog panels for confirmations and alerts with backdrop overlay simulation.
| Property | Value |
|---|---|
| panel background | var(--surface1) |
| border-radius | var(--r-container) 20px |
| padding | 24px |
| shadow | var(--shadow-l3) |
| max-width | 420px |
Popover
Floating panels anchored to trigger elements with arrow pointer and dropdown-style content.
| Property | Value |
|---|---|
| background | var(--surface2) |
| border-radius | var(--r-component) 12px |
| padding | 4px |
| shadow | var(--shadow-l2) |
| arrow size | 8px |
Tooltip
Small informational labels that appear on hover in four directional placements.
| Property | Value |
|---|---|
| background | var(--surface3) |
| border-radius | var(--r-element) 4px |
| padding | 6px 10px |
| font-size | 12px |
| arrow size | 4px |
Accordion
Collapsible content sections with expand/collapse chevron, hover, and disabled header states.
| Property | Value |
|---|---|
| header padding | 16px 0 |
| content padding | 0 0 16px 0 |
| border-bottom | 1px solid var(--border) |
| chevron size | 16px |
| font-size | 15px / 600 |