Slick, professional, and dark. The overall tone is a premium developer tool — confident and minimal, not playful. Near-black background with light glassmorphism foreground elements. Glass surfaces are restrained: medium blur, medium opacity. The background includes an aurora-like shape with sharp gradient stops to make the glass effect stand out.
Reference feel: closer to a high-end terminal or a fintech dashboard than a consumer SaaS product. Every surface should feel intentional and precise.
shadcn-svelte is the component library. Components are installed into $lib/components/controls/ via the shadcn-svelte CLI and customized in place. Do not wrap shadcn components in extra abstraction layers — edit them directly when customization is needed.
shadcn-svelte uses bits-ui for headless primitives and is fully compatible with Svelte 5 Runes.
Glass is used for foreground elements only (sidebar, top bar, cards, modals). It should feel like matte frosted glass over black — not colorful, not warm.
| Surface | Background | Blur | Border |
|---|---|---|---|
| Sidebar / top bar | rgba(255,255,255,0.04) |
blur(12px) |
1px solid rgba(255,255,255,0.08) |
| Cards / panels | rgba(255,255,255,0.05) |
blur(8px) |
1px solid rgba(255,255,255,0.09) |
| Modals / popovers | rgba(255,255,255,0.07) |
blur(16px) |
1px solid rgba(255,255,255,0.12) |
| Input fields | rgba(255,255,255,0.05) |
none | 1px solid rgba(255,255,255,0.10) |
Keep colored tints subtle on glass surfaces. Accent color should remain focused on interactive elements.
| Role | Value | Usage |
|---|---|---|
| Background | oklch(0.145 0.008 326) |
Page background |
| Surface-1 | rgba(255,255,255,0.04) |
Sidebar, top bar |
| Surface-2 | rgba(255,255,255,0.05) |
Cards, panels |
| Surface-3 | rgba(255,255,255,0.07) |
Modals, dropdowns |
| Border | rgba(255,255,255,0.08–0.12) |
All surface edges |
| Text primary | rgba(255,255,255,0.92) |
Body text, headings |
| Text secondary | rgba(255,255,255,0.45) |
Labels, captions, placeholders |
| Text muted | rgba(255,255,255,0.25) |
Disabled states, timestamps |
| Accent | oklch(0.586 0.256 295.614) |
Primary actions, active nav, focus rings |
| Accent hover | oklch(0.496 0.265 301.924) |
Button hover, active states |
| Accent subtle | rgba(99,102,241,0.15) |
Selected row backgrounds, badge fills |
| Destructive | #ef4444 (red-500) |
Delete actions, error states |
Desaturated by default, full opacity only on active/hover. Never use raw saturated colors as backgrounds.
| State | Color | Badge fill |
|---|---|---|
| Running / merged | #22c55e (green-500) |
rgba(34,197,94,0.12) |
| Pending / open | #3b82f6 (blue-500) |
rgba(59,130,246,0.12) |
| Degraded / draft | #eab308 (yellow-500) |
rgba(234,179,8,0.12) |
| Stopped / error | #ef4444 (red-500) |
rgba(239,68,68,0.12) |
rgba(255,255,255,0.92), medium weight (500)rgba(255,255,255,0.80), regular weightThree levels, achieved through glass opacity and border strength alone — no shadows or glows:
Surface-1, faintest border)Surface-2, slightly stronger border)Surface-3, strongest border, higher blur)Avoid box shadows. If separation is needed, increase border opacity by one step rather than adding a shadow.
0.92), surface tint rgba(255,255,255,0.04) addedrgba(99,102,241,0.15)), accent text color2px solid #6366f1 outline with 2px offset — no soft glow rings0.25 opacity, no pointer eventsLucide via lucide-svelte. Size 16px inline, 20px for standalone actions. Color rgba(255,255,255,0.45) at rest, rgba(255,255,255,0.92) on hover/active. Stroke width 1.5px.
Minimal. Transitions only where they carry meaning:
width 200ms easeopacity 120ms ease, transform 120ms ease (subtle upward fade-in)transform 200ms ease slide in from edgeNo looping animations, no decorative transitions on hover. Loading states use a simple opacity pulse, not a spinner, for inline elements; a spinner only for full-panel blocking loads.