Design Specification — Neon Oiran — Cyber Geisha Action RPG
| Field | Value |
| Site / Project | https://neon-oiran.aura.build/ |
| Analyzed on | 2026-07-20 |
| Analysis mode | Automated code extraction (no AI) |
Overview
This design system was extracted programmatically from the source page. It is built on a dark canvas (#0A0608), ink text (#000000), a vivid accent (#FF3333). All type is set in 'Inter'. Detected font weights: 100, 200, 300, 400, 500, 600.
Color System
Detected palette (by frequency)
| Hex | RGB | HSL | Count |
#FFFFFF | 255, 255, 255 | 0° 0% 100% | 37 |
#000000 | 0, 0, 0 | 0° 0% 0% | 9 |
#0A0608 | 10, 6, 8 | 330° 25% 3% | 2 |
#3B1A0A | 59, 26, 10 | 20° 71% 14% | 2 |
#EF4444 | 239, 68, 68 | 0° 84% 60% | 1 |
#FF3333 | 255, 51, 51 | 0° 100% 60% | 1 |
Assigned roles
Roles are taken from the page's own semantic CSS custom properties when present, otherwise inferred from usage frequency + luminance/saturation.
| Token | Hex | RGB | HSL |
--color-background | #0A0608 | 10, 6, 8 | 330° 25% 3% |
--color-primary | #EF4444 | 239, 68, 68 | 0° 84% 60% |
--color-accent | #FF3333 | 255, 51, 51 | 0° 100% 60% |
--color-surface | #FFFFFF | 255, 255, 255 | 0° 0% 100% |
--color-text-primary | #000000 | 0, 0, 0 | 0° 0% 0% |
--color-secondary | #000000 | 0, 0, 0 | 0° 0% 0% |
--color-text-secondary | #0A0608 | 10, 6, 8 | 330° 25% 3% |
--color-on-primary | #FFFFFF | 255, 255, 255 | 0° 0% 100% |
--color-on-secondary | #FFFFFF | 255, 255, 255 | 0° 0% 100% |
--color-on-accent | #FFFFFF | 255, 255, 255 | 0° 0% 100% |
Typography
Primary typeface: Inter — stack: 'Inter'
Font stacks (most used first)
'Inter'
'Oswald'
'Viaoda Libre'
'Bebas Neue', sans-serif !important
'Imprima'
'Bebas Neue'
ui-sans-serif, system-ui, sans-serif
Web font sources
- fonts.googleapis.com/css2?family=Viaoda+Libre&family=Imprima&display=swap
- fonts.googleapis.com/css2?family=Bebas+Neue&display=swap
- fonts.googleapis.com/css2?family=Inter:wght@400;500;600&family=Oswald:wght@500;600&display=swap
- fonts.googleapis.com/css2?family=Montserrat:wght@200;300;400&family=Viaoda+Libre&display=swap
Derived type scale
| Token | Size |
| display | 128px |
| headline-lg | 36px |
| headline-md | 30px |
| title-lg | 20px |
| body-lg | 18px |
| body-md | 16px |
| label-md | 14px |
| label-sm | 12px |
Font sizes (by frequency)
| Size | Count |
| 16px | 3 |
| 14px | 2 |
| 12px | 2 |
| 48px | 2 |
| 72px | 2 |
| 96px | 2 |
| 20px | 2 |
| 24px | 2 |
| 0.65rem | 2 |
| 36px | 2 |
| 60px | 2 |
| 30px | 2 |
| 128px | 1 |
| 0.62rem | 1 |
| 0.6rem | 1 |
| 0.55rem | 1 |
| 0.45rem | 1 |
| 18px | 1 |
Weights in use: 100, 200, 300, 400, 500, 600
Line heights (by frequency)
| Value | Count |
| 1.625 | 1 |
| 1.25 | 1 |
| 0.86 | 1 |
| 1 | 1 |
| 0.9 | 1 |
Letter spacing (by frequency)
| Value | Count |
| -0.025em | 1 |
| 0.025em | 1 |
| 0.3em | 1 |
| 0.24rem | 1 |
| 0.22rem | 1 |
| 0.2rem | 1 |
| 0.18rem | 1 |
| 0.1rem | 1 |
Spacing
Derived spacing scale
| Token | Value |
| unit | 8px |
| xs | 2px |
| sm | 8px |
| md | 16px |
| lg | 32px |
| xl | 64px |
Raw values (by frequency)
| Value | Count |
| 32px | 14 |
| 16px | 8 |
| 24px | 7 |
| 8px | 6 |
| 12px | 6 |
| 20px | 6 |
| 4px | 5 |
| 96px | 5 |
| 48px | 4 |
| 64px | 4 |
| 40px | 3 |
| 10px | 3 |
| 6px | 3 |
| 128px | 1 |
| 0px | 1 |
| 2px | 1 |
Borders & Radius
Derived radius tokens
| Token | Value |
| sm | 6px |
| md | 8px |
| lg | 16px |
| pill | 9999px |
Raw values (resolved, by frequency)
| Radius | Count |
16px | 3 |
9999px | 1 |
0 | 1 |
12px | 1 |
8px | 1 |
6px | 1 |
Shadows
Derived elevation
| Token | Value |
| sm | 0 25px 50px -12px rgba(0,0,0,0.25) |
| md | 0 0 6px #fff |
| lg | 0 0 8px rgba(255,255,255,0.8) |
All detected shadows
0 25px 50px -12px rgba(0,0,0,0.25)
0 1px 2px 0 rgba(0,0,0,0.05)
0 0 6px #fff
0 0 8px #ef4444
0 0 8px rgba(255,255,255,0.8)
Layout
Container max-width: 1280px
Grid columns (largest detected grid): 5
Breakpoints
Animation & Motion
Transitions
transform 150ms cubic-bezier(0.4, 0, 0.2, 1)
color, background-color, border-color 150ms cubic-bezier(0.4, 0, 0.2, 1)
all 150ms cubic-bezier(0.4, 0, 0.2, 1)
opacity 150ms cubic-bezier(0.4, 0, 0.2, 1)
Easing curves
cubic-bezier(0.4, 0, 0.2, 1)
cubic-bezier(0, 0, 0.2, 1)
cubic-bezier(0.4, 0, 0.6, 1)
Keyframes
@keyframes bobUp { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-6px); } }
@keyframes animationIn { 0% { opacity: 0; transform: translateY(30px); filter: blur(8px); } 100% { opacity: 1; transform: translateY(0); filter: blur(0px); } }
@keyframes scan { 0% { top: -5%; opacity: 0; } 10% { opacity: 1; } 90% { opacity: 1; } 100% { top: 105%; opacity: 0; } }
@keyframes pulse { 0%,100%{opacity:1}50%{opacity:.5} }
Animations
pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite
Components
Extracted from the page's own interactive elements (classes → resolved CSS values).
button-secondary — sample text: “Telemetry Array”
| Property | Value |
| rounded | 9999px |
| padding | 8px 12px |
| border | 1px solid currentColor |
| transition | color, background-color, border-color 150ms cubic-bezier(0.4, 0, 0.2, 1) |
button-primary — sample text: “Data Node”
| Property | Value |
| rounded | 9999px |
| padding | 6px 6px |
| border | 1px solid currentColor |
| transition | color, background-color, border-color 150ms cubic-bezier(0.4, 0, 0.2, 1) |
navigation-link
| Property | Value |
| transition | color, background-color, border-color 300ms cubic-bezier(0.4, 0, 0.2, 1) |
badge
| Property | Value |
| rounded | 9999px |
| fontWeight | 300 |
| textTransform | uppercase |
| padding | 4px 10px |
| border | 1px solid currentColor |
> Page contains canvas/WebGL elements — consider ambient effects layers.
Source Design Tokens (CSS custom properties)
:root {
--body-bg: #0a0608;
}
Do's and Don'ts
Do
- Do reserve the accent
#FF3333 for interactive highlights and key moments — it is used sparingly on the source page.
- Do keep the canvas at
#0A0608; surfaces should stay within the detected neutral ramp.
- Do stick to the detected font weight(s): 100, 200, 300, 400, 500, 600.
- Do align spacing to the 8px base unit derived from the page.
Don't
- Don't introduce colors outside the detected palette — every hue above was found in the source.
- Don't add gradients — the source page uses flat fills exclusively.
Design Tokens (copy-paste)
:root {
--color-background: #0A0608;
--color-primary: #EF4444;
--color-accent: #FF3333;
--color-surface: #FFFFFF;
--color-text-primary: #000000;
--color-secondary: #000000;
--color-text-secondary: #0A0608;
--color-on-primary: #FFFFFF;
--color-on-secondary: #FFFFFF;
--color-on-accent: #FFFFFF;
--font-sans: 'Inter';
--font-size-display: 128px;
--font-size-headline-lg: 36px;
--font-size-headline-md: 30px;
--font-size-title-lg: 20px;
--font-size-body-lg: 18px;
--font-size-body-md: 16px;
--font-size-label-md: 14px;
--font-size-label-sm: 12px;
--radius-sm: 6px;
--radius-md: 8px;
--radius-lg: 16px;
--radius-pill: 9999px;
--shadow-sm: 0 25px 50px -12px rgba(0,0,0,0.25);
--shadow-md: 0 0 6px #fff;
--shadow-lg: 0 0 8px rgba(255,255,255,0.8);
--space-xs: 2px;
--space-sm: 8px;
--space-md: 16px;
--space-lg: 32px;
--space-xl: 64px;
--tracking-display: -0.025em;
--tracking-label: 0.025em;
--container-max: 1280px;
}