| # Design System: Nyra Chat |
|
|
| **Product:** Nyra Chat |
| **Theme name:** Void Observatory |
| **Platform:** Hugging Face Spaces (Gradio + ZeroGPU) |
|
|
| ## 1. Visual Theme & Atmosphere |
|
|
| Cinematic void with an intelligent glow. The interface feels dense but breathable: deep black canvas, graphite panels, and a single solar-amber spark that marks brand and primary actions. Premium chat product energy — never default Gradio chrome, never generic purple AI gradients. |
|
|
| Mood words: *nocturnal, sharp, warm-witty, observatory, glass-over-void*. |
|
|
| Signature memory: a floating glass input bar over a slowly drifting amber mesh, with Lucide sparkles as the monogram. |
|
|
| ## 2. Color Palette & Roles |
|
|
| | Role | Descriptive name | Hex / value | Functional role | |
| |---|---|---|---| |
| | Canvas | Void Black | `#07070A` | Full-app background | |
| | Surface | Graphite Night | `#121218` | Sidebar, elevated chrome | |
| | Surface raised | Smoke Glass | `#1A1A22` / `rgba(255,255,255,0.04)` | Assistant bubbles, cards | |
| | User bubble | Ember Glass | `rgba(245, 166, 35, 0.12)` | User message fill | |
| | Primary accent | Solar Amber | `#F5A623` | Send, active states, brand | |
| | Accent glow | Amber Bloom | `#FFB84D` | Focus rings, soft outer glows | |
| | Text primary | Starlight | `#F4F4F5` | Message body and titles | |
| | Text muted | Quiet Silver | `#8B8B96` | Hints, timestamps, secondary labels | |
| | Border | Hairline Mist | `rgba(255,255,255,0.08)` | Dividers, input stroke | |
| | Danger | Soft Crimson | `#F07178` | Stop / errors | |
| | Success | Mint Pulse | `#7FD99A` | Online / ready indicator | |
|
|
| ## 3. Typography Rules |
|
|
| | Role | Family | Character | |
| |---|---|---| |
| | Display / brand | **Syne** | Slightly geometric display; used sparingly for “Nyra” and empty-state headline | |
| | Body / chat | **IBM Plex Sans** | Technical warmth, excellent readability at 15–16px | |
| | Code / mono | **IBM Plex Mono** | Fenced code and inline ticks | |
|
|
| Scale: |
| - Chrome / labels: 12–13px, medium weight, Quiet Silver |
| - Message body: 15–16px, regular, line-height ~1.55 |
| - Empty-state headline: 24–28px Syne, Starlight |
| - Tagline: 14px, Quiet Silver |
|
|
| Letter-spacing: slightly open on brand wordmark (+0.02em); normal on body. |
|
|
| ## 4. Component Stylings |
|
|
| ### Buttons |
| - **Primary:** solid Solar Amber, text near-black (`#0A0A0B`), generously rounded (~12–999px pill for send), soft amber outer glow on hover, press scale ~0.96 |
| - **Ghost / secondary:** transparent fill, Hairline Mist border, Starlight text |
| - **Danger:** Soft Crimson outline or fill for stop |
|
|
| ### Cards / containers |
| - Graphite Night surfaces with 1px Hairline Mist edge |
| - Whisper-soft multi-layer shadow: `0 8px 32px rgba(0,0,0,0.45)` |
| - Corner roundness: ~16–20px (bubbles), ~14px (panels), ~20px (input shell) |
|
|
| ### Inputs / forms |
| - Glass shell: `rgba(18,18,24,0.72)` + backdrop blur ~16px |
| - Stroke: Hairline Mist → Amber Bloom on focus |
| - Placeholder: Quiet Silver |
|
|
| ### Chat bubbles |
| - Assistant: left-aligned Smoke Glass, optional avatar ring with amber hairline |
| - User: right-aligned Ember Glass |
| - Enter animation: 8–12px rise + fade, ~200ms ease-out |
|
|
| ### Sidebar |
| - Width 260px, Graphite Night |
| - Collapses to drawer on mobile |
| - “New chat” as ghost button with Lucide `message-square-plus` |
|
|
| ## 5. Layout Principles |
|
|
| - Full-viewport shell; chat column max-width ~820px centered in main pane |
| - Top bar ~56px: brand left, utilities right |
| - Message stream fills remaining height; input sticky at bottom with safe padding |
| - Vertical rhythm 16–24px between messages |
| - Suggestion chips in a responsive wrap under empty state |
| - Whitespace is intentional: avoid cramming chrome; let the void breathe |
|
|
| ### Wireframe |
|
|
| ``` |
| ┌──────────────────────────────────────────────────────────┐ |
| │ [≡] ✨ Nyra · Chat [lang][gear] │ |
| ├────────────┬─────────────────────────────────────────────┤ |
| │ New chat │ │ |
| │ History… │ empty hero + chips OR message stream │ |
| │ │ │ |
| │ │ ┌─────────────────────────────────────┐ │ |
| │ │ │ input · arrow-up send │ │ |
| │ │ └─────────────────────────────────────┘ │ |
| └────────────┴─────────────────────────────────────────────┘ |
| ``` |
|
|
| ## 6. Motion Language |
|
|
| | Moment | Behavior | |
| |---|---| |
| | Page load | Fade-up brand + main column, 400ms ease-out | |
| | Message enter | TranslateY(10px) → 0 + opacity, 200ms | |
| | Send press | Scale 0.96 + amber bloom expand | |
| | Typing | Three soft pulses (staggered dots) | |
| | Ambient mesh | 60s slow gradient drift on canvas | |
| | Sidebar | Width/opacity 250ms | |
|
|
| **Reduced motion:** disable ambient drift and non-essential transitions when `prefers-reduced-motion: reduce`. |
|
|
| ## 7. Iconography (Lucide) |
|
|
| | Action | Icon | |
| |---|---| |
| | Brand | `sparkles` | |
| | New chat | `message-square-plus` | |
| | Send | `arrow-up` | |
| | Stop | `square` | |
| | Copy | `copy` | |
| | Settings | `settings-2` | |
| | Menu | `panel-left` | |
| | Clear | `trash-2` | |
| | Language | `languages` | |
| | Chips | `zap`, `code-2`, `globe`, `lightbulb` | |
|
|
| Stroke: 1.75–2px, currentColor, size 18–20px chrome / 16px inline. |
|
|
| ## 8. Brand voice in UI copy |
|
|
| - Product name **Nyra** only — never Grok / xAI |
| - Bilingual PT + EN labels |
| - Empty state is a greeting, not a sales pitch |
| - Errors explain what happened and what to try next |
|
|
| ## 9. Implementation notes (Gradio) |
|
|
| - Tokens live in `static/app.css` as CSS variables |
| - Lucide via CDN + `static/app.js` hydration |
| - Skin Gradio with `elem_id` / `elem_classes` and aggressive chrome overrides |
| - Dark `color-scheme` forced for the app shell |
|
|