A newer version of the Gradio SDK is available: 6.20.0
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.cssas CSS variables - Lucide via CDN +
static/app.jshydration - Skin Gradio with
elem_id/elem_classesand aggressive chrome overrides - Dark
color-schemeforced for the app shell