DesignMD Maker logo ← Home Report · Code analysis
N
Design System

Neon Oiran — Cyber Geisha Action RPG

Design system extracted from https://neon-oiran.aura.build/ on 2026-07-20 (code-based analysis).

Source · https://neon-oiran.aura.build/ Engine · Code analysis Created · Jul 20, 2026 23:20 Cost · $0.0000
Palette

Colors

primary
#EF4444
3.76 on white · 5.58 on black · 0° 84% 60%
secondary
#000000
21 on white · 1 on black · 0° 0% 0%
accent
#FF3333
3.64 on white · 5.77 on black · 0° 100% 60%
Token Roles 7 tokens
background
#0A0608 · 20.14:1 vs white
surface
#FFFFFF · 21:1 vs black
text-primary
#000000 · 21:1 vs white
text-secondary
#0A0608 · 20.14:1 vs white
on-primary
#FFFFFF · 21:1 vs black
on-secondary
#FFFFFF · 21:1 vs black
on-accent
#FFFFFF · 21:1 vs black
Detected Palette 6 colors by frequency in source CSS
#FFFFFF
used 37× · 0° 0% 100%
#000000
used 9× · 0° 0% 0%
#0A0608
used 2× · 330° 25% 3%
#3B1A0A
used 2× · 20° 71% 14%
#EF4444
used 1× · 0° 84% 60%
#FF3333
used 1× · 0° 100% 60%
Type System

Typography

display
inherit
128px · 100 · LH 1.25 · LS -0.025em
Neon Oiran — Cyber Geisha Action RPG
headline-lg
inherit
36px · 100 · LH 1.25 · LS -0.025em
Neon Oiran — Cyber Geisha Action RPG
headline-md
inherit
30px · 100 · LH 1.25 · LS -0.025em
Neon Oiran — Cyber Geisha Action RPG
title-lg
inherit
20px · 100 · LH 1.4
Typography is the discipline of rendering language visible. Spacing, weight, and rhythm carry meaning long before words are read.
body-lg
inherit
18px · 100 · LH 1.625
Typography is the discipline of rendering language visible. Spacing, weight, and rhythm carry meaning long before words are read.
body-md
inherit
16px · 100 · LH 1.625
Typography is the discipline of rendering language visible. Spacing, weight, and rhythm carry meaning long before words are read.
label-md
inherit
14px · 100 · LH 1.4 · LS 0.025em
Typography is the discipline of rendering language visible. Spacing, weight, and rhythm carry meaning long before words are read.
label-sm
inherit
12px · 100 · LH 1.4 · LS 0.025em
Typography is the discipline of rendering language visible. Spacing, weight, and rhythm carry meaning long before words are read.
Detected Font Stacks
'Inter''Oswald''Viaoda Libre''Bebas Neue', sans-serif !important'Imprima''Bebas Neue'ui-sans-serif, system-ui, sans-serif
Structure

Layout

Container
Section padding: · card padding:
Grid
12-column reference grid · gap
Spacing Scale
unit
8px
xs
2px
sm
8px
md
16px
lg
32px
xl
64px
detected
2px
detected
4px
detected
6px
detected
8px
detected
10px
detected
12px
detected
16px
detected
20px
detected
24px
detected
32px
Breakpoints
640px768px1024px
Depth

Elevation & Depth

level 1
0 25px 50px -12px rgba(0,0,0,0.25)
level 2
0 1px 2px 0 rgba(0,0,0,0.05)
level 3
0 0 6px #fff
level 4
0 0 8px #ef4444
level 5
0 0 8px rgba(255,255,255,0.8)
Geometry

Shapes

sm
6px
md
8px
lg
16px
pill
9999px
r5
12px
Tokens in Context

Components

button-secondary
rounded9999px
padding8px 12px
border1px solid currentColor
transitioncolor, background-color, border-color 150ms cubic-bezier(0.4, 0, 0.2, 1)
button-primary
rounded9999px
padding6px 6px
border1px solid currentColor
transitioncolor, background-color, border-color 150ms cubic-bezier(0.4, 0, 0.2, 1)
navigation-link
transitioncolor, background-color, border-color 300ms cubic-bezier(0.4, 0, 0.2, 1)
badge
rounded9999px
fontWeight300
textTransformuppercase
padding4px 10px
border1px solid currentColor
card
background{colors.surface}
radius16px
boxShadow{elevation.md}
Animation

Motion

Keyframes 4 found
@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}
Applied Animations
pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite
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)
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)
Proof

Live Preview

Complete Reference

Full design.md Specification

Design Specification — Neon Oiran — Cyber Geisha Action RPG

FieldValue
Site / Projecthttps://neon-oiran.aura.build/
Analyzed on2026-07-20
Analysis modeAutomated 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)

HexRGBHSLCount
#FFFFFF255, 255, 2550° 0% 100%37
#0000000, 0, 00° 0% 0%9
#0A060810, 6, 8330° 25% 3%2
#3B1A0A59, 26, 1020° 71% 14%2
#EF4444239, 68, 680° 84% 60%1
#FF3333255, 51, 510° 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.

TokenHexRGBHSL
--color-background#0A060810, 6, 8330° 25% 3%
--color-primary#EF4444239, 68, 680° 84% 60%
--color-accent#FF3333255, 51, 510° 100% 60%
--color-surface#FFFFFF255, 255, 2550° 0% 100%
--color-text-primary#0000000, 0, 00° 0% 0%
--color-secondary#0000000, 0, 00° 0% 0%
--color-text-secondary#0A060810, 6, 8330° 25% 3%
--color-on-primary#FFFFFF255, 255, 2550° 0% 100%
--color-on-secondary#FFFFFF255, 255, 2550° 0% 100%
--color-on-accent#FFFFFF255, 255, 2550° 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

TokenSize
display128px
headline-lg36px
headline-md30px
title-lg20px
body-lg18px
body-md16px
label-md14px
label-sm12px

Font sizes (by frequency)

SizeCount
16px3
14px2
12px2
48px2
72px2
96px2
20px2
24px2
0.65rem2
36px2
60px2
30px2
128px1
0.62rem1
0.6rem1
0.55rem1
0.45rem1
18px1

Weights in use: 100, 200, 300, 400, 500, 600

Line heights (by frequency)

ValueCount
1.6251
1.251
0.861
11
0.91

Letter spacing (by frequency)

ValueCount
-0.025em1
0.025em1
0.3em1
0.24rem1
0.22rem1
0.2rem1
0.18rem1
0.1rem1

Spacing

Derived spacing scale

TokenValue
unit8px
xs2px
sm8px
md16px
lg32px
xl64px

Raw values (by frequency)

ValueCount
32px14
16px8
24px7
8px6
12px6
20px6
4px5
96px5
48px4
64px4
40px3
10px3
6px3
128px1
0px1
2px1

Borders & Radius

Derived radius tokens

TokenValue
sm6px
md8px
lg16px
pill9999px

Raw values (resolved, by frequency)

RadiusCount
16px3
9999px1
01
12px1
8px1
6px1

Shadows

Derived elevation

TokenValue
sm0 25px 50px -12px rgba(0,0,0,0.25)
md0 0 6px #fff
lg0 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

  • 640px
  • 768px
  • 1024px

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”

PropertyValue
rounded9999px
padding8px 12px
border1px solid currentColor
transitioncolor, background-color, border-color 150ms cubic-bezier(0.4, 0, 0.2, 1)

button-primary — sample text: “Data Node”

PropertyValue
rounded9999px
padding6px 6px
border1px solid currentColor
transitioncolor, background-color, border-color 150ms cubic-bezier(0.4, 0, 0.2, 1)

navigation-link

PropertyValue
transitioncolor, background-color, border-color 300ms cubic-bezier(0.4, 0, 0.2, 1)

badge

PropertyValue
rounded9999px
fontWeight300
textTransformuppercase
padding4px 10px
border1px 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;
}