# Visual Style ## Aesthetic **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. ## Component Library **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. ## Background - Near-black base with a subtle aurora gradient layer. - Subtle depth is achieved through both the background aurora and the glass layers. ## Glass Surfaces 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. ## Color Palette | 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 | ## Status Colors 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)` | ## Typography - Font: Inter Variable for UI text, monospace for code/YAML blocks - Custom font loading is enabled for Inter Variable - Headings: `rgba(255,255,255,0.92)`, medium weight (500) - Body: `rgba(255,255,255,0.80)`, regular weight - Line height: 1.5 for body, 1.2 for headings ## Elevation & Depth Three levels, achieved through glass opacity and border strength alone — no shadows or glows: 1. **Base** — sidebar, top bar (`Surface-1`, faintest border) 2. **Raised** — cards, form panels (`Surface-2`, slightly stronger border) 3. **Floating** — modals, popovers, dropdowns (`Surface-3`, strongest border, higher blur) Avoid box shadows. If separation is needed, increase border opacity by one step rather than adding a shadow. ## Interactive States - **Default**: muted text, transparent background - **Hover**: text brightens to primary (`0.92`), surface tint `rgba(255,255,255,0.04)` added - **Active / selected**: accent subtle background (`rgba(99,102,241,0.15)`), accent text color - **Focus**: `2px solid #6366f1` outline with `2px` offset — no soft glow rings - **Disabled**: text at `0.25` opacity, no pointer events ## Icons Lucide 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`. ## Motion Minimal. Transitions only where they carry meaning: - Sidebar collapse/expand: `width 200ms ease` - Dropdown / popover open: `opacity 120ms ease, transform 120ms ease` (subtle upward fade-in) - Toasts / notifications: `transform 200ms ease` slide in from edge No 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.