Vaporwave is a glitched 90s nostalgia aesthetic born from internet culture in the early 2010s. It appropriates and distorts imagery from late-capitalist consumer culture – Greek statuary, early Windows operating systems, Japanese text, shopping mall architecture, and corporate clip art – filtering everything through a pastel pink-and-teal haze. The visual language is deliberately lo-fi, ironic, and surreal, combining VHS tracking errors with marble busts, palm trees, and obsolete technology. In web design, Vaporwave translates to pastel gradient backgrounds, retro UI chrome, grid overlays, glitch distortion, and a tone that hovers between sincere nostalgia and subversive parody.
| Color Name | Hex | Role / Usage |
|---|---|---|
| Pastel Pink | #FF71CE |
Primary accent, headlines, key interactive elements |
| Soft Rose | #FFB3D9 |
Light backgrounds, card surfaces, secondary accent |
| Hot Pink | #E50086 |
Hover states, active elements, emphasis |
| Aqua Teal | #01CDFE |
Secondary accent, links, interactive elements |
| Mint Dream | #05FFA1 |
Success states, tertiary accent |
| Lavender Haze | #B967FF |
Decorative accent, tags, badges |
| Deep Violet | #6B2FA0 |
Dark accent, text on light backgrounds |
| Sunset Orange | #FFA86A |
Warm accent, highlights |
| VHS White | #FFFBFC |
Primary text on dark backgrounds, clean surfaces |
| Faded Cream | #F5E6F0 |
Light page backgrounds, subtle surfaces |
| CRT Dark | #1A0A2E |
Dark backgrounds, footer, contrast sections |
| Grid Purple | #2D1B4E |
Dark panels, overlay backgrounds |
| Marble Gray | #C4B7C9 |
Borders, muted elements, captions |
| Static | #8B7E96 |
Secondary text, disabled states |
:root {
/* Primary palette */
--vapor-pink: #ff71ce;
--vapor-soft-rose: #ffb3d9;
--vapor-hot-pink: #e50086;
--vapor-teal: #01cdfe;
--vapor-mint: #05ffa1;
--vapor-lavender: #b967ff;
--vapor-violet: #6b2fa0;
--vapor-orange: #ffa86a;
/* Backgrounds */
--vapor-bg-light: #f5e6f0;
--vapor-bg-cream: #fffbfc;
--vapor-bg-dark: #1a0a2e;
--vapor-bg-panel: #2d1b4e;
/* Text */
--vapor-text-dark: #2d1b4e;
--vapor-text-light: #fffbfc;
--vapor-text-muted: #8b7e96;
/* Gradients */
--vapor-gradient-sky: linear-gradient(135deg, #ff71ce 0%, #01cdfe 50%, #b967ff 100%);
--vapor-gradient-sunset: linear-gradient(180deg, #ff71ce 0%, #ffa86a 50%, #b967ff 100%);
--vapor-gradient-soft: linear-gradient(135deg, #f5e6f0 0%, #e8d5f5 50%, #d5e8f5 100%);
}
Vaporwave typography is:
| Font | Style | Best For |
|---|---|---|
| VT323 | Pixel/CRT monospace | Retro UI elements, terminal text, system dialogs |
| Press Start 2P | Pixel art, 8-bit | Decorative headlines, game-style elements |
| Libre Barcode 39 | Barcode font | Decorative barcode accents |
| Zen Maru Gothic | Japanese rounded gothic | Japanese text accents, CJK elements |
| Noto Sans JP | Japanese sans-serif | Japanese text body, labels |
| Monoton | Retro outline display | Large display headlines, hero text |
| Bungee | Chromatic display | Bold headlines, sign-style text |
| DM Sans | Clean geometric sans | Body text, readable content sections |
| Space Grotesk | Geometric, wide | Subheadings, navigation, modern contrast |
| Silkscreen | Pixel bitmap | Small labels, pixel-art UI chrome |
| Heading Font | Body Font | Character |
|---|---|---|
| Monoton (400) | DM Sans (400) | Classic vaporwave, retro display + clean body |
| Bungee (400) | Space Grotesk (400) | Bold chromatic headers, geometric body |
| VT323 (400) | DM Sans (400) | CRT terminal heading, clean body contrast |
| Press Start 2P (400) | VT323 (400) | Full retro pixel aesthetic |
| Space Grotesk (700) | Noto Sans JP (400) | Modern + Japanese text integration |
/* Import fonts */
@import url('https://fonts.googleapis.com/css2?family=Monoton&family=DM+Sans:wght@400;500;700&family=VT323&display=swap');
/* Headings */
h1, h2, h3, h4, h5, h6 {
font-family: 'DM Sans', sans-serif;
font-weight: 700;
color: var(--vapor-text-dark);
line-height: 1.2;
}
/* Display / Hero text */
.vapor-display {
font-family: 'Monoton', cursive;
font-size: clamp(2.5rem, 6vw, 5rem);
font-weight: 400;
letter-spacing: 0.06em;
color: var(--vapor-pink);
text-shadow: 3px 3px 0 var(--vapor-teal), -1px -1px 0 var(--vapor-lavender);
}
/* Spaced-out subtitle */
.vapor-subtitle {
font-family: 'DM Sans', sans-serif;
font-weight: 500;
font-size: 1rem;
letter-spacing: 0.35em;
text-transform: uppercase;
color: var(--vapor-text-muted);
}
/* Body text */
body {
font-family: 'DM Sans', sans-serif;
font-weight: 400;
font-size: 1rem;
line-height: 1.7;
color: var(--vapor-text-dark);
}
/* CRT / retro text */
.vapor-crt {
font-family: 'VT323', monospace;
font-size: 1.1rem;
color: var(--vapor-mint);
text-shadow: 0 0 5px rgba(5, 255, 161, 0.5);
}
/* Japanese accent text */
.vapor-jp {
font-family: 'Noto Sans JP', sans-serif;
font-size: 0.85rem;
color: var(--vapor-text-muted);
letter-spacing: 0.2em;
}
.vapor-card {
background: rgba(255, 255, 255, 0.7);
border: 2px solid var(--vapor-pink);
border-radius: 0;
padding: 28px;
position: relative;
backdrop-filter: blur(8px);
}
/* Retro title bar */
.vapor-card__titlebar {
display: flex;
align-items: center;
gap: 6px;
background: linear-gradient(90deg, var(--vapor-pink), var(--vapor-lavender));
margin: -28px -28px 20px -28px;
padding: 6px 10px;
font-family: 'VT323', monospace;
font-size: 0.9rem;
color: white;
}
.vapor-card__titlebar-dot {
width: 10px;
height: 10px;
border-radius: 50%;
border: 1px solid rgba(255, 255, 255, 0.6);
}
/* Card grid */
.vapor-card-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
gap: 24px;
}
.vapor-button {
display: inline-flex;
align-items: center;
justify-content: center;
background: var(--vapor-gradient-sky);
color: #ffffff;
border: none;
border-radius: 0;
padding: 14px 36px;
font-family: 'DM Sans', sans-serif;
font-weight: 700;
font-size: 0.9rem;
letter-spacing: 0.12em;
text-transform: uppercase;
cursor: pointer;
transition: transform 0.2s, box-shadow 0.2s;
box-shadow: 4px 4px 0 var(--vapor-violet);
}
.vapor-button:hover {
transform: translate(-2px, -2px);
box-shadow: 6px 6px 0 var(--vapor-violet);
}
.vapor-button:active {
transform: translate(2px, 2px);
box-shadow: 2px 2px 0 var(--vapor-violet);
}
/* Retro outline variant */
.vapor-button--retro {
background: transparent;
color: var(--vapor-pink);
border: 2px solid var(--vapor-pink);
box-shadow: 3px 3px 0 var(--vapor-teal);
font-family: 'VT323', monospace;
font-size: 1.1rem;
letter-spacing: 0.06em;
}
.vapor-button--retro:hover {
background: var(--vapor-pink);
color: white;
}
.vapor-nav {
display: flex;
align-items: center;
justify-content: space-between;
max-width: 1100px;
margin: 0 auto;
padding: 20px 40px;
}
.vapor-nav__logo {
font-family: 'Monoton', cursive;
font-size: 1.5rem;
color: var(--vapor-pink);
text-decoration: none;
text-shadow: 2px 2px 0 var(--vapor-teal);
}
.vapor-nav__links {
display: flex;
gap: 32px;
list-style: none;
margin: 0;
padding: 0;
}
.vapor-nav__links a {
font-family: 'DM Sans', sans-serif;
font-weight: 500;
font-size: 0.85rem;
letter-spacing: 0.2em;
text-transform: uppercase;
color: var(--vapor-text-muted);
text-decoration: none;
transition: color 0.2s;
}
.vapor-nav__links a:hover {
color: var(--vapor-pink);
}
.vapor-hero {
display: flex;
align-items: center;
justify-content: center;
text-align: center;
min-height: 80vh;
padding: 80px 40px;
background: var(--vapor-gradient-sunset);
position: relative;
overflow: hidden;
}
/* Perspective grid floor */
.vapor-hero::after {
content: '';
position: absolute;
bottom: 0;
left: -20%;
right: -20%;
height: 45%;
background:
repeating-linear-gradient(90deg, transparent, transparent 59px, rgba(255, 113, 206, 0.25) 59px, rgba(255, 113, 206, 0.25) 60px),
repeating-linear-gradient(0deg, transparent, transparent 59px, rgba(255, 113, 206, 0.25) 59px, rgba(255, 113, 206, 0.25) 60px);
transform: perspective(400px) rotateX(55deg);
transform-origin: bottom;
pointer-events: none;
}
.vapor-hero__content {
position: relative;
z-index: 2;
max-width: 700px;
}
.vapor-hero__content h1 {
font-family: 'Monoton', cursive;
font-size: clamp(2.5rem, 6vw, 5rem);
color: #ffffff;
text-shadow: 3px 3px 0 var(--vapor-teal), 6px 6px 0 rgba(107, 47, 160, 0.3);
margin-bottom: 1.5rem;
}
.vapor-hero__content p {
font-family: 'DM Sans', sans-serif;
font-size: 1.1rem;
color: rgba(255, 255, 255, 0.85);
letter-spacing: 0.15em;
margin-bottom: 2.5rem;
}
@media (max-width: 768px) {
.vapor-hero { min-height: auto; padding: 60px 20px; }
}
@keyframes vapor-tracking {
0% { transform: translateX(0); opacity: 0; }
10% { transform: translateX(-5px); opacity: 1; }
12% { transform: translateX(3px); opacity: 1; }
14% { transform: translateX(0); opacity: 0; }
100% { transform: translateX(0); opacity: 0; }
}
.vapor-vhs {
position: relative;
overflow: hidden;
}
.vapor-vhs::before {
content: '';
position: absolute;
inset: 0;
background: repeating-linear-gradient(
0deg,
transparent,
transparent 3px,
rgba(255, 113, 206, 0.03) 3px,
rgba(255, 113, 206, 0.03) 6px
);
pointer-events: none;
}
.vapor-vhs::after {
content: '';
position: absolute;
left: 0;
right: 0;
height: 4px;
background: rgba(255, 113, 206, 0.3);
animation: vapor-tracking 8s infinite;
pointer-events: none;
}
.vapor-window {
border: 2px solid var(--vapor-violet);
background: var(--vapor-bg-cream);
max-width: 500px;
}
.vapor-window__titlebar {
display: flex;
align-items: center;
justify-content: space-between;
background: linear-gradient(90deg, var(--vapor-violet), var(--vapor-pink));
padding: 4px 8px;
font-family: 'VT323', monospace;
font-size: 0.85rem;
color: white;
}
.vapor-window__controls {
display: flex;
gap: 4px;
}
.vapor-window__controls span {
display: inline-block;
width: 12px;
height: 12px;
border: 1px solid rgba(255, 255, 255, 0.5);
font-size: 8px;
text-align: center;
line-height: 10px;
}
.vapor-window__body {
padding: 20px;
}
| Aesthetic | Relationship to Vaporwave |
|---|---|
| Synthwave | Shares 80s nostalgia and neon colors, but Synthwave is more earnest, action-oriented, and music-driven; Vaporwave is ironic and melancholic |
| Cyberpunk | Both reference technology culture, but Cyberpunk is dark and dystopian while Vaporwave is pastel and surreal |
| Y2K Futurism | Overlaps in late-90s digital aesthetics (chrome, translucency), but Y2K is optimistic while Vaporwave is nostalgic |
| 8-Bit | Both use pixel art and retro technology references; 8-Bit is more game-focused and playful |
| Liminal Space | Shares the eerie, empty, nostalgic quality of abandoned digital and physical spaces |
| Poolcore | Shares the still-water, tiled-surface, liminal-space imagery and the pastel-blue palette |
| Frutiger Aero | The sincere, corporate version of the same late-90s/early-2000s digital aesthetic that Vaporwave deconstructs |
| Seapunk | Direct sibling aesthetic; shares the teal/aqua palette and aquatic imagery, more ocean-focused |
| Webcore | Both celebrate early internet aesthetics; Webcore is broader, Vaporwave is more specific in its cultural critique |
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Vaporwave Page</title>
<link href="https://fonts.googleapis.com/css2?family=Monoton&family=DM+Sans:wght@400;500;700&family=VT323&display=swap" rel="stylesheet">
<style>
:root {
--vapor-pink: #ff71ce;
--vapor-soft-rose: #ffb3d9;
--vapor-hot-pink: #e50086;
--vapor-teal: #01cdfe;
--vapor-mint: #05ffa1;
--vapor-lavender: #b967ff;
--vapor-violet: #6b2fa0;
--vapor-orange: #ffa86a;
--vapor-bg-light: #f5e6f0;
--vapor-bg-dark: #1a0a2e;
--vapor-text-dark: #2d1b4e;
--vapor-text-muted: #8b7e96;
}
* { margin: 0; padding: 0; box-sizing: border-box; }
body {
background: var(--vapor-bg-light);
color: var(--vapor-text-dark);
font-family: 'DM Sans', sans-serif;
font-size: 1rem;
line-height: 1.7;
}
h1, h2, h3 {
font-family: 'DM Sans', sans-serif;
font-weight: 700;
line-height: 1.2;
}
/* Navigation */
nav {
display: flex;
align-items: center;
justify-content: space-between;
max-width: 1100px;
margin: 0 auto;
padding: 20px 40px;
}
nav a.logo {
font-family: 'Monoton', cursive;
font-size: 1.4rem;
color: var(--vapor-pink);
text-decoration: none;
text-shadow: 2px 2px 0 var(--vapor-teal);
}
nav ul { display: flex; gap: 28px; list-style: none; }
nav ul a {
font-family: 'DM Sans', sans-serif;
font-weight: 500;
font-size: 0.85rem;
letter-spacing: 0.2em;
text-transform: uppercase;
color: var(--vapor-text-muted);
text-decoration: none;
transition: color 0.2s;
}
nav ul a:hover { color: var(--vapor-pink); }
/* Hero */
.hero {
display: flex;
align-items: center;
justify-content: center;
text-align: center;
min-height: 75vh;
padding: 80px 40px;
background: linear-gradient(180deg, #ff71ce 0%, #ffa86a 40%, #b967ff 100%);
position: relative;
overflow: hidden;
}
/* Grid floor */
.hero::after {
content: '';
position: absolute;
bottom: 0; left: -20%; right: -20%; height: 45%;
background:
repeating-linear-gradient(90deg, transparent, transparent 59px, rgba(255,255,255,0.2) 59px, rgba(255,255,255,0.2) 60px),
repeating-linear-gradient(0deg, transparent, transparent 59px, rgba(255,255,255,0.2) 59px, rgba(255,255,255,0.2) 60px);
transform: perspective(400px) rotateX(55deg);
transform-origin: bottom;
pointer-events: none;
}
.hero-content { position: relative; z-index: 2; max-width: 700px; }
.hero h1 {
font-family: 'Monoton', cursive;
font-size: clamp(2.5rem, 6vw, 5rem);
font-weight: 400;
color: #fff;
text-shadow: 3px 3px 0 var(--vapor-teal), 6px 6px 0 rgba(107, 47, 160, 0.3);
margin-bottom: 1rem;
}
.hero p {
font-size: 1rem;
color: rgba(255, 255, 255, 0.85);
letter-spacing: 0.15em;
margin-bottom: 2.5rem;
}
.btn {
display: inline-block;
background: linear-gradient(135deg, var(--vapor-pink), var(--vapor-teal), var(--vapor-lavender));
color: #fff;
border: none;
padding: 14px 36px;
font-family: 'DM Sans', sans-serif;
font-weight: 700;
font-size: 0.9rem;
letter-spacing: 0.12em;
text-transform: uppercase;
text-decoration: none;
cursor: pointer;
box-shadow: 4px 4px 0 var(--vapor-violet);
transition: transform 0.2s, box-shadow 0.2s;
}
.btn:hover {
transform: translate(-2px, -2px);
box-shadow: 6px 6px 0 var(--vapor-violet);
}
/* Features */
.features {
padding: 80px 0;
background: var(--vapor-bg-light);
}
.features h2 {
text-align: center;
font-size: 1.8rem;
color: var(--vapor-violet);
margin-bottom: 8px;
}
.features .subtitle {
text-align: center;
font-size: 0.85rem;
letter-spacing: 0.3em;
text-transform: uppercase;
color: var(--vapor-text-muted);
margin-bottom: 48px;
}
.features-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
gap: 24px;
max-width: 1100px;
margin: 0 auto;
padding: 0 40px;
}
.feature {
background: rgba(255, 255, 255, 0.7);
border: 2px solid var(--vapor-pink);
padding: 0;
backdrop-filter: blur(6px);
}
.feature-titlebar {
background: linear-gradient(90deg, var(--vapor-pink), var(--vapor-lavender));
padding: 5px 10px;
font-family: 'VT323', monospace;
font-size: 0.85rem;
color: white;
display: flex;
align-items: center;
gap: 6px;
}
.feature-titlebar .dot {
width: 8px; height: 8px;
border-radius: 50%;
border: 1px solid rgba(255,255,255,0.6);
}
.feature-body { padding: 24px; }
.feature h3 { font-size: 1.1rem; margin-bottom: 0.5rem; color: var(--vapor-violet); }
.feature p { color: var(--vapor-text-muted); font-size: 0.95rem; }
/* CTA */
.cta {
background: var(--vapor-bg-dark);
text-align: center;
padding: 80px 40px;
}
.cta h2 {
font-family: 'Monoton', cursive;
font-weight: 400;
font-size: 2.2rem;
color: var(--vapor-pink);
text-shadow: 2px 2px 0 var(--vapor-teal);
margin-bottom: 1rem;
}
.cta p {
color: rgba(255, 255, 255, 0.6);
letter-spacing: 0.15em;
margin-bottom: 2rem;
}
/* Footer */
footer {
background: var(--vapor-bg-dark);
border-top: 1px solid rgba(255, 113, 206, 0.2);
text-align: center;
padding: 30px 40px;
font-family: 'VT323', monospace;
font-size: 0.95rem;
color: var(--vapor-text-muted);
}
@media (max-width: 768px) {
.hero { min-height: auto; padding: 60px 20px; }
nav { padding: 16px 20px; }
nav ul { gap: 16px; }
}
</style>
</head>
<body>
<nav>
<a href="#" class="logo">PLAZA</a>
<ul>
<li><a href="#">Gallery</a></li>
<li><a href="#">Dreams</a></li>
<li><a href="#">Archive</a></li>
<li><a href="#">About</a></li>
</ul>
</nav>
<section class="hero">
<div class="hero-content">
<h1>Digital Plaza</h1>
<p>Welcome to the abandoned shopping mall of the internet. Everything is on sale. Nothing is real.</p>
<a href="#" class="btn">Enter</a>
</div>
</section>
<section class="features">
<h2>Explore the Archive</h2>
<p class="subtitle">A collection of forgotten futures</p>
<div class="features-grid">
<div class="feature">
<div class="feature-titlebar">
<span class="dot"></span>
<span class="dot"></span>
<span class="dot"></span>
marble_dreams.exe
</div>
<div class="feature-body">
<h3>Marble Dreams</h3>
<p>Classical sculpture meets digital decay. Greek busts rendered in pink marble, floating in an infinite void.</p>
</div>
</div>
<div class="feature">
<div class="feature-titlebar">
<span class="dot"></span>
<span class="dot"></span>
<span class="dot"></span>
sunset_protocol.exe
</div>
<div class="feature-body">
<h3>Sunset Protocol</h3>
<p>Eternal sunset gradients cascading over wireframe horizons. The sun never sets in the digital plaza.</p>
</div>
</div>
<div class="feature">
<div class="feature-titlebar">
<span class="dot"></span>
<span class="dot"></span>
<span class="dot"></span>
palm_memory.exe
</div>
<div class="feature-body">
<h3>Palm Memory</h3>
<p>Tropical stock photography refracted through VHS tracking errors. Paradise as remembered by a corrupted hard drive.</p>
</div>
</div>
</div>
</section>
<section class="cta">
<h2>Remember</h2>
<p>The future was supposed to be different. It was supposed to be beautiful.</p>
<a href="#" class="btn">Rewind</a>
</section>
<footer>
<p>[ DIGITAL PLAZA ] // est. 1995 // all rights imagined</p>
</footer>
</body>
</html>