Nexus Hub Dashboard — Design System & Styling Guide — STY-HUB-01

Hub Dashboard
Design System & Styling

Visual language specification for the Nexus Hub Dashboard. Defines the 6-skin theme engine, glassmorphism panel system, typography scale, colour tokens, spacing rules, animation parameters, and component patterns. All values extracted from NEXUS_APP.html v1 CSS (4068 lines).

Document ID
STY-HUB-01
Version
1.0
Source
NEXUS_APP.html CSS
Tier
4 — Use Case

01 — Theme Engine Architecture

6-skin system with CSS custom properties and localStorage persistence

The Hub Dashboard supports 6 visual themes (skins). Each skin defines a set of CSS custom properties applied to :root. The active skin is stored in localStorage('nexus-hub-skin') and applied on page load. Skins can be switched via hub top bar swatches or FAB cycle action.

Skin Definitions

Skin IDName--hub-primary--hub-surface--hub-glow--hub-border
nexus-darkNexus Indigo#6366F1rgba(15,23,42,0.6)rgba(99,102,241,0.15)rgba(99,102,241,0.2)
codezeroCodeZero Violet#8B5CF6rgba(20,10,40,0.6)rgba(139,92,246,0.15)rgba(139,92,246,0.2)
arcticArctic Blue#38BDF8rgba(10,20,35,0.6)rgba(56,189,248,0.12)rgba(56,189,248,0.18)
graphiteApple Graphite#A1A1AArgba(20,20,22,0.65)rgba(161,161,170,0.08)rgba(161,161,170,0.15)
auroraAurora Glass#34D399rgba(5,25,20,0.6)rgba(52,211,153,0.12)rgba(52,211,153,0.18)
emberEmber Forge#F97316rgba(30,15,5,0.6)rgba(249,115,22,0.15)rgba(249,115,22,0.2)

CSS Custom Properties (per skin)

:root {
  --hub-primary: [accent colour];
  --hub-surface: [panel background with alpha];
  --hub-glow: [glow/shadow accent];
  --hub-border: [panel border colour];
  --hub-text: #FFFFFF;
  --hub-text-dim: rgba(255,255,255,0.7);
  --hub-text-muted: rgba(255,255,255,0.4);
  --hub-bg: #0A0A0F;
  --hub-bg2: #12121A;
}

02 — Glassmorphism Panel System

Frosted glass visual language for elevated surfaces

.glass-panel (Primary)

.glass-panel {
  background: var(--hub-surface);
  backdrop-filter: blur(20px);
  -webkit-backdrop-filter: blur(20px);
  border: 1px solid var(--hub-border);
  border-radius: 16px;
  box-shadow: 0 8px 32px rgba(0,0,0,0.3),
              inset 0 1px 0 rgba(255,255,255,0.05);
}

.glass-panel-sm (Compact)

.glass-panel-sm {
  background: var(--hub-surface);
  backdrop-filter: blur(12px);
  border: 1px solid var(--hub-border);
  border-radius: 12px;
  box-shadow: 0 4px 16px rgba(0,0,0,0.2);
}

Usage: Org cards use .glass-panel. Roadmap items, metric boxes, and badges use .glass-panel-sm.

03 — Typography

Font families, sizes, weights, and hierarchy

ElementFontSizeWeightColour
Hub title (System Dashboard)Inter24px800--hub-text
Card org nameInter16px700--hub-text
Card domainInter11px500--hub-primary
Card descriptionInter12px400--hub-text-dim
Stat valueInter18px700--hub-text
Stat labelInter9px600--hub-text-muted
BadgeInter9px600varies
Roadmap titleInter12px600--hub-text
Roadmap ETAmonospace10px500--hub-primary
Timeline textInter11px400--hub-text-dim
Timeline timemonospace10px400--hub-text-muted
Sidebar nav itemInter13px500--hub-text-dim / --hub-primary (active)
Version badgemonospace10px600--hub-primary

04 — Colour Palette (Default Skin: Nexus Indigo)

Base colours used across all skins

Primary
#6366F1
Accent, active states
Background
#0A0A0F
Page background
Surface
#12121A
Elevated panels base
Text
#FFFFFF
Primary text
Text Dim
rgba(255,255,255,0.7)
Secondary text
Text Muted
rgba(255,255,255,0.4)
Tertiary, labels

Semantic Colours

Success
#10B981
Status: active/success
Warning
#F59E0B
Status: pilot/pending
Error
#EF4444
Errors, failures
Purple
#8B5CF6
Chameleon badge

05 — Spacing & Layout

Grid system, gaps, padding rules

ContextValueCSS
Hub layout gap24pxgrid gap between main and sidebar
Cards grid gap16pxgap between org cards
Card padding20pxinternal padding
Card border-radius16pxrounded corners
Roadmap item gap8pxbetween roadmap entries
Top bar height56pxfixed hub top bar
Sidebar width (workspace)240pxfixed left sidebar
Run panel width300pxslide-out right panel
FAB size48pxtrigger button diameter
FAB positionbottom:24px right:24pxfixed position

Breakpoints

BreakpointCards ColumnsLayout
> 1100px3 columnsMain + sidebar side-by-side
900px - 1100px2 columnsMain + sidebar side-by-side (narrower)
< 900px1 columnStacked (sidebar below main)

06 — Animations & Transitions

Motion design parameters

AnimationPropertyDurationEasingTrigger
Card revealopacity, transform(translateY)500mscubic-bezier(0.4,0,0.2,1)Staggered: 100ms + (index * 80ms) delay
Roadmap revealopacity, transform(translateY)500mscubic-bezier(0.4,0,0.2,1)Staggered with delay classes (d1-d5)
Card hovertransform(translateY), box-shadow200msease:hover pseudo-class
Theme switchCSS custom properties300mseaseSkin button click
FAB open/closeopacity, transform(scale)200mseaseTrigger click
Run panel slidetransform(translateX)250msease.open class toggle
Sidebar item hoverbackground, color150msease:hover pseudo-class

Reveal Animation Pattern

/* Base state (hidden) */
.hub-reveal {
  opacity: 0;
  transform: translateY(20px);
  transition: opacity 500ms cubic-bezier(0.4,0,0.2,1),
              transform 500ms cubic-bezier(0.4,0,0.2,1);
}

/* Visible state */
.hub-reveal.visible {
  opacity: 1;
  transform: translateY(0);
}

/* Stagger delays */
.hub-reveal-d1 { transition-delay: 100ms; }
.hub-reveal-d2 { transition-delay: 200ms; }
.hub-reveal-d3 { transition-delay: 300ms; }
.hub-reveal-d4 { transition-delay: 400ms; }
.hub-reveal-d5 { transition-delay: 500ms; }

07 — Component Patterns

Reusable UI component specifications

Org Card

Glass panel card displaying organisation information and stats.

.hub-card {
  /* Inherits .glass-panel */
  cursor: pointer;
  transition: transform 200ms ease, box-shadow 200ms ease;
}
.hub-card:hover {
  transform: translateY(-4px);
  box-shadow: 0 12px 40px rgba(0,0,0,0.4),
              0 0 20px var(--hub-glow);
}

Structure

  • Header: org name (left) + icon initials circle (right)
  • Domain: small accent-coloured text
  • Description: 2-line max, dim text
  • Meta: role badge + status badge + optional Chameleon badge
  • Stats: 3-column grid (pipelines, runs/24h, last run)
Badge
.hub-badge {
  font-size: 9px;
  font-weight: 600;
  padding: 3px 9px;
  border-radius: 9999px;
  border: 1px solid;
  text-transform: uppercase;
  letter-spacing: 0.05em;
}

Variants

VariantBackgroundBorderTextUsage
Rolergba(primary, 0.1)rgba(primary, 0.2)--hub-primaryUser role (admin, user)
Activergba(16,185,129,0.1)rgba(16,185,129,0.2)#10B981Status: active
Pilotrgba(245,158,11,0.1)rgba(245,158,11,0.2)#F59E0BStatus: pilot
Plannedrgba(255,255,255,0.05)rgba(255,255,255,0.1)--hub-text-mutedStatus: planned
Chameleonrgba(139,92,246,0.08)rgba(139,92,246,0.2)#8B5CF6Has Chameleon forms
Progress Bar (Roadmap)
.hub-roadmap-progress {
  height: 4px;
  background: rgba(255,255,255,0.1);
  border-radius: 2px;
  overflow: hidden;
  margin: 6px 0;
}
.hub-roadmap-progress-fill {
  height: 100%;
  background: var(--hub-primary);
  border-radius: 2px;
  transition: width 600ms ease;
}
Sidebar Nav Item (Workspace)
.nav-item {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 8px 14px;
  border-radius: 8px;
  font-size: 13px;
  font-weight: 500;
  color: var(--hub-text-dim);
  cursor: pointer;
  transition: background 150ms ease, color 150ms ease;
}
.nav-item:hover {
  background: rgba(var(--hub-primary-rgb), 0.08);
  color: var(--hub-text);
}
.nav-item.active {
  background: rgba(var(--hub-primary-rgb), 0.12);
  color: var(--hub-primary);
  font-weight: 600;
}
FAB (Floating Action Button)
.nexus-fab {
  position: fixed;
  bottom: 24px;
  right: 24px;
  z-index: 1000;
}
.nexus-fab-trigger {
  width: 48px;
  height: 48px;
  border-radius: 50%;
  background: var(--hub-primary);
  color: white;
  font-weight: 800;
  font-size: 18px;
  display: flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  box-shadow: 0 4px 16px rgba(0,0,0,0.3);
}
.nexus-fab-menu {
  position: absolute;
  bottom: 60px;
  right: 0;
  min-width: 220px;
  background: var(--hub-surface);
  backdrop-filter: blur(20px);
  border: 1px solid var(--hub-border);
  border-radius: 12px;
  padding: 8px;
  opacity: 0;
  transform: scale(0.9);
  pointer-events: none;
  transition: opacity 200ms ease, transform 200ms ease;
}
.nexus-fab.open .nexus-fab-menu {
  opacity: 1;
  transform: scale(1);
  pointer-events: all;
}

08 — Org Theme Overrides (Workspace Mode)

Per-organisation CSS injection from nav-menu pipeline

When entering a workspace, the nav-menu pipeline can return a theme object with CSS custom property overrides. These are injected into a <style id="theme-override"> element as :root variables.

Override Mechanism

/* nav_config.theme example */
{
  "--na-primary": "#D4607F",
  "--na-bg": "#FFFAF5",
  "--na-text": "#1F2937",
  "--na-brand-gradient": "linear-gradient(135deg, #F2A0B5, #F4A261)",
  "--na-body-class": "arc-theme"
}

/* Applied as: */
:root {
  --na-primary: #D4607F;
  --na-bg: #FFFAF5;
  --na-text: #1F2937;
  --na-brand-gradient: linear-gradient(135deg, #F2A0B5, #F4A261);
}

/* Extra scoped CSS for brand gradient (non-variable): */
.sidebar-org {
  background: linear-gradient(135deg, #F2A0B5, #F4A261);
  -webkit-background-clip: text;
  background-clip: text;
  -webkit-text-fill-color: transparent;
}

When returning to hub, the theme-override style is cleared and document.body.className is reset, restoring the hub skin.