Vaporwave
80s nostalgia meets internet surrealism — pastel pink/cyan palettes, retrowave grids, glitch effects, and neon glow.
MCP
Code
/* ============================================================
VAPORWAVE — Style Showcase
Fonts: Orbitron (headings), Space Mono (body)
Palette: #FF71CE | #01CDFE | #05FFA1 | #B967FF | #FFFB96
============================================================ */
@import url("https://fonts.googleapis.com/css2?family=Orbitron:wght@400;700;900&family=Space+Mono:ital,wght@0,400;0,700;1,400&display=swap");
/* --- Root variables --- */
:root {
--pink: #ff71ce;
--cyan: #01cdfe;
--mint: #05ffa1;
--purple: #b967ff;
--yellow: #fffb96;
--bg: #0d0015;
--bg2: #1a0030;
--card-bg: rgba(255, 113, 206, 0.06);
--card-border: rgba(255, 113, 206, 0.35);
--text: #f0d0ff;
--muted: rgba(240, 208, 255, 0.5);
--font-head: "Orbitron", sans-serif;
--font-body: "Space Mono", monospace;
--glow-pink: 0 0 10px #ff71ce, 0 0 20px rgba(255, 113, 206, 0.5);
--glow-cyan: 0 0 10px #01cdfe, 0 0 20px rgba(1, 205, 254, 0.5);
--glow-purple: 0 0 10px #b967ff, 0 0 20px rgba(185, 103, 255, 0.5);
--glow-mint: 0 0 10px #05ffa1, 0 0 20px rgba(5, 255, 161, 0.5);
}
/* --- Reset & base --- */
*,
*::before,
*::after {
box-sizing: border-box;
margin: 0;
padding: 0;
}
html {
font-size: 16px;
}
body {
background: linear-gradient(to bottom, var(--bg) 0%, var(--bg2) 100%);
background-attachment: fixed;
color: var(--text);
font-family: var(--font-body);
font-size: 14px;
line-height: 1.7;
min-height: 100vh;
overflow-x: hidden;
}
/* --- Scrollbar --- */
::-webkit-scrollbar {
width: 6px;
}
::-webkit-scrollbar-track {
background: var(--bg);
}
::-webkit-scrollbar-thumb {
background: linear-gradient(180deg, var(--pink), var(--purple));
border-radius: 3px;
}
/* --- Header --- */
.site-header {
position: sticky;
top: 0;
z-index: 100;
background: rgba(13, 0, 21, 0.85);
backdrop-filter: blur(12px);
border-bottom: 1px solid var(--card-border);
box-shadow: 0 1px 20px rgba(255, 113, 206, 0.15);
}
.header-inner {
max-width: 960px;
margin: 0 auto;
padding: 14px 24px;
display: flex;
align-items: center;
justify-content: space-between;
gap: 16px;
}
.header-logo {
display: flex;
align-items: center;
gap: 10px;
font-family: var(--font-head);
font-size: 16px;
font-weight: 900;
color: var(--pink);
text-shadow: var(--glow-pink);
}
.logo-symbol {
font-size: 18px;
color: var(--purple);
text-shadow: var(--glow-purple);
}
.logo-accent {
color: var(--cyan);
}
.header-nav {
display: flex;
gap: 24px;
}
.nav-link {
font-family: var(--font-head);
font-size: 11px;
font-weight: 700;
color: var(--muted);
text-decoration: none;
letter-spacing: 0.1em;
transition: color 0.2s, text-shadow 0.2s;
}
.nav-link:hover,
.nav-active {
color: var(--cyan);
text-shadow: var(--glow-cyan);
}
.header-time {
display: flex;
align-items: center;
gap: 8px;
font-family: var(--font-head);
}
.time-label {
font-size: 9px;
color: var(--muted);
letter-spacing: 0.15em;
}
.time-val {
font-size: 12px;
font-weight: 700;
color: var(--yellow);
letter-spacing: 0.2em;
text-shadow: 0 0 8px var(--yellow);
}
/* --- Hero --- */
.hero {
position: relative;
min-height: 420px;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
overflow: hidden;
padding: 60px 20px 0;
}
/* Vaporwave sun */
.vaporwave-sun {
position: absolute;
top: 40px;
left: 50%;
transform: translateX(-50%);
width: 220px;
height: 110px;
overflow: hidden;
z-index: 0;
}
.sun-inner {
width: 220px;
height: 220px;
border-radius: 50%;
background: linear-gradient(to bottom, #ff71ce 0%, #ff9cee 30%, #fffb96 60%, #ffd700 100%);
box-shadow: 0 0 40px rgba(255, 113, 206, 0.6), 0 0 80px rgba(255, 113, 206, 0.3);
position: relative;
}
/* Stripe cutouts over the sun */
.sun-stripes {
position: absolute;
bottom: 0;
left: 0;
right: 0;
display: flex;
flex-direction: column;
gap: 0;
}
.stripe {
height: 11px;
background: var(--bg2);
}
.stripe:nth-child(1) {
margin-top: 40px;
}
.stripe:nth-child(2) {
height: 10px;
margin-top: 4px;
}
.stripe:nth-child(3) {
height: 8px;
margin-top: 5px;
}
.stripe:nth-child(4) {
height: 7px;
margin-top: 6px;
}
.stripe:nth-child(5) {
height: 5px;
margin-top: 7px;
}
/* Hero content */
.hero-content {
position: relative;
z-index: 2;
text-align: center;
margin-top: 130px;
padding-bottom: 40px;
}
.hero-eyebrow {
font-family: var(--font-head);
font-size: 10px;
letter-spacing: 0.5em;
color: var(--cyan);
text-shadow: var(--glow-cyan);
margin-bottom: 12px;
}
.hero-title {
font-family: var(--font-head);
font-size: clamp(36px, 8vw, 72px);
font-weight: 900;
color: var(--pink);
text-shadow: 0 0 10px var(--pink), 0 0 30px var(--pink), 0 0 60px rgba(255, 113, 206, 0.5), 4px 0
0 var(--cyan);
letter-spacing: 0.1em;
line-height: 1;
margin-bottom: 16px;
transition: text-shadow 0.15s;
}
.hero-sub {
font-family: var(--font-head);
font-size: 11px;
letter-spacing: 0.3em;
color: var(--yellow);
text-shadow: 0 0 8px var(--yellow);
}
/* Retro perspective grid */
.retro-grid {
position: absolute;
bottom: 0;
left: 0;
right: 0;
height: 140px;
z-index: 1;
background: linear-gradient(to bottom, transparent 0%, rgba(185, 103, 255, 0.08) 100%),
repeating-linear-gradient(
90deg,
rgba(185, 103, 255, 0.18) 0,
rgba(185, 103, 255, 0.18) 1px,
transparent 1px,
transparent 60px
),
repeating-linear-gradient(
0deg,
rgba(185, 103, 255, 0.18) 0,
rgba(185, 103, 255, 0.18) 1px,
transparent 1px,
transparent 40px
);
transform: perspective(300px) rotateX(60deg);
transform-origin: bottom center;
}
/* --- Main content --- */
.main-content {
max-width: 960px;
margin: 0 auto;
padding: 48px 24px 80px;
display: flex;
flex-direction: column;
gap: 32px;
}
/* --- Card --- */
.card {
background: var(--card-bg);
border: 1px solid var(--card-border);
box-shadow: 0 4px 30px rgba(255, 113, 206, 0.08), inset 0 1px 0 rgba(255, 255, 255, 0.05);
backdrop-filter: blur(8px);
padding: 0 0 28px;
position: relative;
overflow: hidden;
}
.card-glow-bar {
height: 3px;
background: linear-gradient(90deg, var(--pink) 0%, var(--purple) 50%, var(--cyan) 100%);
box-shadow: 0 0 12px var(--pink), 0 0 24px rgba(255, 113, 206, 0.4);
}
.card-glow-bar--cyan {
background: linear-gradient(90deg, var(--cyan) 0%, var(--mint) 100%);
box-shadow: 0 0 12px var(--cyan), 0 0 24px rgba(1, 205, 254, 0.4);
}
.card-glow-bar--mint {
background: linear-gradient(90deg, var(--mint) 0%, var(--cyan) 100%);
box-shadow: 0 0 12px var(--mint), 0 0 24px rgba(5, 255, 161, 0.4);
}
.card-section-label {
padding: 16px 24px 12px;
font-family: var(--font-head);
font-size: 10px;
letter-spacing: 0.25em;
color: var(--pink);
text-shadow: var(--glow-pink);
border-bottom: 1px solid rgba(255, 113, 206, 0.15);
margin-bottom: 20px;
}
.card-section-label--cyan {
color: var(--cyan);
text-shadow: var(--glow-cyan);
border-bottom-color: rgba(1, 205, 254, 0.15);
}
.card-section-label--mint {
color: var(--mint);
text-shadow: var(--glow-mint);
border-bottom-color: rgba(5, 255, 161, 0.15);
}
/* --- Profile card --- */
.profile-body {
padding: 28px 28px 0;
display: flex;
gap: 28px;
align-items: flex-start;
flex-wrap: wrap;
}
.avatar-wrap {
flex-shrink: 0;
display: flex;
flex-direction: column;
align-items: center;
gap: 10px;
}
.avatar {
width: 90px;
height: 90px;
border-radius: 50%;
background: linear-gradient(135deg, var(--purple) 0%, var(--pink) 50%, var(--cyan) 100%);
position: relative;
box-shadow: 0 0 0 3px var(--bg2), 0 0 0 5px var(--pink), var(--glow-pink);
overflow: hidden;
display: flex;
align-items: center;
justify-content: center;
}
.avatar-bg {
position: absolute;
inset: 0;
background: radial-gradient(ellipse at 50% 35%, rgba(255, 255, 255, 0.15) 0%, transparent 70%),
linear-gradient(180deg, rgba(185, 103, 255, 0.4) 0%, rgba(255, 113, 206, 0.4) 100%);
}
/* Silhouette using pure CSS */
.avatar::after {
content: "";
position: absolute;
bottom: 0;
left: 50%;
transform: translateX(-50%);
width: 50px;
height: 55px;
background: rgba(13, 0, 21, 0.7);
border-radius: 50% 50% 0 0 / 40% 40% 0 0;
box-shadow: 0 -18px 0 16px rgba(13, 0, 21, 0.5);
}
.avatar-status {
font-family: var(--font-head);
font-size: 9px;
color: var(--mint);
text-shadow: var(--glow-mint);
letter-spacing: 0.1em;
}
.profile-info {
flex: 1;
min-width: 200px;
}
.profile-badge {
display: inline-block;
font-family: var(--font-head);
font-size: 9px;
color: var(--yellow);
background: rgba(255, 251, 150, 0.08);
border: 1px solid rgba(255, 251, 150, 0.3);
padding: 4px 10px;
letter-spacing: 0.12em;
margin-bottom: 12px;
text-shadow: 0 0 8px var(--yellow);
}
.profile-name {
font-family: var(--font-head);
font-size: 22px;
font-weight: 900;
color: var(--pink);
text-shadow: var(--glow-pink);
letter-spacing: 0.25em;
margin-bottom: 6px;
}
.profile-role {
font-size: 13px;
color: var(--cyan);
text-shadow: var(--glow-cyan);
margin-bottom: 10px;
}
.profile-tagline {
font-size: 12px;
font-style: italic;
color: var(--muted);
margin-bottom: 20px;
}
.profile-stats {
display: flex;
align-items: center;
gap: 0;
}
.stat-item {
display: flex;
flex-direction: column;
align-items: center;
padding: 0 20px 0 0;
}
.stat-item:first-child {
padding-left: 0;
}
.stat-num {
font-family: var(--font-head);
font-size: 18px;
font-weight: 700;
color: var(--purple);
text-shadow: var(--glow-purple);
}
.stat-lbl {
font-size: 9px;
color: var(--muted);
letter-spacing: 0.15em;
margin-top: 2px;
}
.stat-divider {
width: 1px;
height: 36px;
background: linear-gradient(to bottom, transparent, var(--card-border), transparent);
margin: 0 20px 0 0;
flex-shrink: 0;
}
/* --- Buttons --- */
.button-row {
padding: 0 28px;
display: flex;
flex-wrap: wrap;
gap: 16px;
}
.btn {
font-family: var(--font-head);
font-size: 11px;
font-weight: 700;
letter-spacing: 0.1em;
cursor: pointer;
border: none;
padding: 13px 28px;
transition: transform 0.15s, box-shadow 0.15s, filter 0.15s;
outline: none;
}
.btn:focus-visible {
outline: 2px solid var(--yellow);
outline-offset: 3px;
}
/* Primary */
.btn-primary {
background: linear-gradient(90deg, var(--pink) 0%, var(--purple) 100%);
color: #fff;
box-shadow: 0 0 16px rgba(255, 113, 206, 0.5), 0 0 32px rgba(185, 103, 255, 0.2);
border-radius: 3px;
}
.btn-primary:hover {
transform: translateY(-2px);
box-shadow: 0 0 24px var(--pink), 0 0 48px rgba(255, 113, 206, 0.35);
filter: brightness(1.1);
}
.btn-primary:active {
transform: translateY(1px);
filter: brightness(0.9);
}
/* Secondary */
.btn-secondary {
background: rgba(1, 205, 254, 0.12);
color: var(--cyan);
border: 1px solid var(--cyan);
box-shadow: 0 0 12px rgba(1, 205, 254, 0.25), inset 0 0 12px rgba(1, 205, 254, 0.05);
text-shadow: var(--glow-cyan);
border-radius: 3px;
}
.btn-secondary:hover {
background: rgba(1, 205, 254, 0.2);
transform: translateY(-2px);
box-shadow: 0 0 20px var(--cyan), 0 0 40px rgba(1, 205, 254, 0.3);
}
.btn-secondary:active {
transform: translateY(1px);
}
/* Ghost */
.btn-ghost {
background: transparent;
color: var(--pink);
border: 1px solid rgba(255, 113, 206, 0.5);
text-shadow: var(--glow-pink);
box-shadow: 0 0 8px rgba(255, 113, 206, 0.15);
border-radius: 3px;
}
.btn-ghost:hover {
background: rgba(255, 113, 206, 0.08);
border-color: var(--pink);
transform: translateY(-2px);
box-shadow: 0 0 16px rgba(255, 113, 206, 0.4);
}
.btn-ghost:active {
transform: translateY(1px);
}
/* --- Input --- */
.input-group {
padding: 0 28px;
}
.input-label {
display: block;
font-family: var(--font-head);
font-size: 10px;
letter-spacing: 0.2em;
color: var(--cyan);
text-shadow: var(--glow-cyan);
margin-bottom: 12px;
}
.vapor-input {
font-family: var(--font-body);
font-size: 14px;
background: rgba(1, 205, 254, 0.04);
color: var(--text);
border: 1px solid rgba(255, 113, 206, 0.35);
padding: 12px 18px;
width: 100%;
max-width: 440px;
outline: none;
border-radius: 3px;
transition: border-color 0.2s, box-shadow 0.2s;
caret-color: var(--pink);
}
.vapor-input::placeholder {
color: var(--muted);
}
.vapor-input:focus {
border-color: var(--cyan);
box-shadow: 0 0 0 2px rgba(1, 205, 254, 0.2), 0 0 16px rgba(1, 205, 254, 0.15), inset 0 0 20px
rgba(1, 205, 254, 0.04);
}
.input-hint {
margin-top: 8px;
font-size: 11px;
color: var(--muted);
font-style: italic;
}
/* --- Badges --- */
.badge-row {
padding: 0 28px;
display: flex;
flex-wrap: wrap;
gap: 10px;
}
.badge {
font-family: var(--font-head);
font-size: 9px;
font-weight: 700;
padding: 6px 14px;
letter-spacing: 0.1em;
border-radius: 2px;
transition: transform 0.15s, box-shadow 0.15s;
cursor: default;
}
.badge:hover {
transform: translateY(-2px);
}
.badge-pink {
background: rgba(255, 113, 206, 0.12);
color: var(--pink);
border: 1px solid rgba(255, 113, 206, 0.4);
text-shadow: var(--glow-pink);
box-shadow: 0 0 8px rgba(255, 113, 206, 0.15);
}
.badge-cyan {
background: rgba(1, 205, 254, 0.1);
color: var(--cyan);
border: 1px solid rgba(1, 205, 254, 0.35);
text-shadow: var(--glow-cyan);
box-shadow: 0 0 8px rgba(1, 205, 254, 0.15);
}
.badge-purple {
background: rgba(185, 103, 255, 0.12);
color: var(--purple);
border: 1px solid rgba(185, 103, 255, 0.35);
text-shadow: var(--glow-purple);
box-shadow: 0 0 8px rgba(185, 103, 255, 0.15);
}
.badge-yellow {
background: rgba(255, 251, 150, 0.08);
color: var(--yellow);
border: 1px solid rgba(255, 251, 150, 0.3);
text-shadow: 0 0 8px var(--yellow);
}
.badge-mint {
background: rgba(5, 255, 161, 0.08);
color: var(--mint);
border: 1px solid rgba(5, 255, 161, 0.3);
text-shadow: var(--glow-mint);
}
/* --- Responsive --- */
@media (max-width: 640px) {
.header-inner {
flex-wrap: wrap;
}
.hero-title {
font-size: 36px;
}
.profile-body {
flex-direction: column;
}
.button-row {
gap: 12px;
}
.btn {
width: 100%;
text-align: center;
justify-content: center;
}
}/* ============================================================
VAPORWAVE — Interactive Script
- Glitch effect on main heading (periodic text-shadow shift)
- Badge hover lift with glow intensify
- Input neon pulse on focus
- Retro grid shimmer animation
- Sun rotation glow cycle
============================================================ */
(function () {
"use strict";
/* ----------------------------------------------------------
1. Glitch effect on hero heading
Periodically randomizes text-shadow offsets to simulate
magnetic tape degradation / signal interference
---------------------------------------------------------- */
const heading = document.getElementById("glitch-heading");
if (heading) {
const glitchColors = [
["#FF71CE", "#01CDFE"],
["#01CDFE", "#FF71CE"],
["#B967FF", "#05FFA1"],
["#FFFB96", "#FF71CE"],
["#05FFA1", "#B967FF"],
];
let glitchActive = false;
let glitchTimeout = null;
function doGlitch() {
if (glitchActive) return;
glitchActive = true;
const pair = glitchColors[Math.floor(Math.random() * glitchColors.length)];
const dx = (Math.random() * 8 - 4).toFixed(1);
const dy = (Math.random() * 4 - 2).toFixed(1);
const dx2 = -(Math.random() * 6 - 3).toFixed(1);
heading.style.textShadow = [
`0 0 10px ${pair[0]}`,
`0 0 30px ${pair[0]}`,
`${dx}px ${dy}px 0 ${pair[1]}`,
`${dx2}px 0 0 #FFFB96`,
].join(", ");
// Multiple rapid flickers
let ticks = 0;
const maxTicks = 3 + Math.floor(Math.random() * 5);
const flicker = setInterval(function () {
ticks++;
heading.style.opacity = ticks % 2 === 0 ? "0.85" : "1";
if (ticks >= maxTicks) {
clearInterval(flicker);
// Restore normal glow
heading.style.textShadow = [
"0 0 10px #FF71CE",
"0 0 30px #FF71CE",
"0 0 60px rgba(255,113,206,0.5)",
"4px 0 0 #01CDFE",
].join(", ");
heading.style.opacity = "1";
glitchActive = false;
// Schedule next glitch
scheduleGlitch();
}
}, 60);
}
function scheduleGlitch() {
const delay = 3000 + Math.random() * 5000;
glitchTimeout = setTimeout(doGlitch, delay);
}
scheduleGlitch();
// Also trigger on click
heading.addEventListener("click", doGlitch);
heading.style.cursor = "pointer";
}
/* ----------------------------------------------------------
2. Badge hover — intensify glow
---------------------------------------------------------- */
const badges = document.querySelectorAll(".badge");
badges.forEach(function (badge) {
const originalShadow = getComputedStyle(badge).boxShadow;
badge.addEventListener("mouseenter", function () {
badge.style.transform = "translateY(-3px) scale(1.05)";
});
badge.addEventListener("mouseleave", function () {
badge.style.transform = "";
badge.style.boxShadow = "";
});
});
/* ----------------------------------------------------------
3. Input neon pulse on focus
---------------------------------------------------------- */
const input = document.querySelector(".vapor-input");
if (input) {
input.addEventListener("focus", function () {
// Pulse animation via style injection
input.style.animation = "inputPulse 1.5s ease-in-out infinite";
});
input.addEventListener("blur", function () {
input.style.animation = "";
});
}
// Inject input pulse keyframe
const styleEl = document.createElement("style");
styleEl.textContent = `
@keyframes inputPulse {
0%, 100% {
box-shadow:
0 0 0 2px rgba(1,205,254,0.2),
0 0 16px rgba(1,205,254,0.15),
inset 0 0 20px rgba(1,205,254,0.04);
}
50% {
box-shadow:
0 0 0 3px rgba(1,205,254,0.35),
0 0 28px rgba(1,205,254,0.3),
inset 0 0 30px rgba(1,205,254,0.08);
}
}
@keyframes sunGlow {
0%, 100% { box-shadow: 0 0 40px rgba(255,113,206,0.6), 0 0 80px rgba(255,113,206,0.3); }
50% { box-shadow: 0 0 60px rgba(255,113,206,0.8), 0 0 120px rgba(255,113,206,0.5), 0 0 160px rgba(185,103,255,0.2); }
}
`;
document.head.appendChild(styleEl);
/* ----------------------------------------------------------
4. Vaporwave sun glow cycle
---------------------------------------------------------- */
const sunInner = document.querySelector(".sun-inner");
if (sunInner) {
sunInner.style.animation = "sunGlow 4s ease-in-out infinite";
}
/* ----------------------------------------------------------
5. Button ripple press effect
---------------------------------------------------------- */
const buttons = document.querySelectorAll(".btn");
buttons.forEach(function (btn) {
btn.addEventListener("click", function (e) {
const rect = btn.getBoundingClientRect();
const ripple = document.createElement("span");
const size = Math.max(rect.width, rect.height);
const x = e.clientX - rect.left - size / 2;
const y = e.clientY - rect.top - size / 2;
ripple.style.cssText = [
"position: absolute",
"border-radius: 50%",
"pointer-events: none",
"width: " + size + "px",
"height: " + size + "px",
"left: " + x + "px",
"top: " + y + "px",
"background: rgba(255,255,255,0.2)",
"animation: rippleOut 0.5s ease-out forwards",
].join(";");
btn.style.position = "relative";
btn.style.overflow = "hidden";
btn.appendChild(ripple);
setTimeout(function () {
ripple.remove();
}, 500);
});
});
const rippleStyle = document.createElement("style");
rippleStyle.textContent = `
@keyframes rippleOut {
0% { transform: scale(0); opacity: 1; }
100% { transform: scale(2.5); opacity: 0; }
}
`;
document.head.appendChild(rippleStyle);
})();<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link href="https://fonts.googleapis.com/css2?family=Orbitron:wght@400;700;900&family=Space+Mono:ital,wght@0,400;0,700;1,400&display=swap" rel="stylesheet" />
<link rel="stylesheet" href="style.css" />
<title>Vaporwave</title>
</head>
<body>
<!-- Header -->
<header class="site-header">
<div class="header-inner">
<div class="header-logo">
<span class="logo-symbol">▲</span>
<span class="logo-text">VAPOR<span class="logo-accent">WARE</span></span>
</div>
<nav class="header-nav">
<a href="#" class="nav-link">DREAM</a>
<a href="#" class="nav-link">WAVE</a>
<a href="#" class="nav-link nav-active">RETRO</a>
</nav>
<div class="header-time">
<span class="time-label">EST.</span>
<span class="time-val">1 9 8 4</span>
</div>
</div>
</header>
<!-- Hero -->
<section class="hero">
<!-- Vaporwave sun -->
<div class="vaporwave-sun" aria-hidden="true">
<div class="sun-inner"></div>
<div class="sun-stripes">
<div class="stripe"></div>
<div class="stripe"></div>
<div class="stripe"></div>
<div class="stripe"></div>
<div class="stripe"></div>
</div>
</div>
<div class="hero-content">
<p class="hero-eyebrow">A E S T H E T I C S</p>
<h1 class="hero-title" id="glitch-heading">VAPORWAVE</h1>
<p class="hero-sub">DREAMS / NOSTALGIA / NEON</p>
</div>
<!-- Retro grid -->
<div class="retro-grid" aria-hidden="true"></div>
</section>
<!-- Main content -->
<main class="main-content">
<!-- Profile card -->
<section class="card profile-card">
<div class="card-glow-bar"></div>
<div class="profile-body">
<div class="avatar-wrap">
<div class="avatar">
<div class="avatar-bg"></div>
<div class="avatar-bust">
<!-- Stylized bust silhouette via CSS -->
</div>
<div class="avatar-ring"></div>
</div>
<div class="avatar-status">● ONLINE</div>
</div>
<div class="profile-info">
<div class="profile-badge">MEMBER SINCE 1984</div>
<div class="profile-name">A E S T H</div>
<div class="profile-role">Digital Dreamweaver</div>
<div class="profile-tagline">"The future was better the first time"</div>
<div class="profile-stats">
<div class="stat-item">
<span class="stat-num">8.4K</span>
<span class="stat-lbl">FOLLOWERS</span>
</div>
<div class="stat-divider"></div>
<div class="stat-item">
<span class="stat-num">420</span>
<span class="stat-lbl">DREAMS</span>
</div>
<div class="stat-divider"></div>
<div class="stat-item">
<span class="stat-num">∞</span>
<span class="stat-lbl">VIBES</span>
</div>
</div>
</div>
</div>
</section>
<!-- Buttons -->
<section class="card">
<div class="card-glow-bar"></div>
<div class="card-section-label">INTERACTIONS</div>
<div class="button-row">
<button class="btn btn-primary">▶ ENTER DREAM</button>
<button class="btn btn-secondary">◈ SYNC WAVE</button>
<button class="btn btn-ghost">◇ TUNE IN</button>
</div>
</section>
<!-- Input -->
<section class="card">
<div class="card-glow-bar card-glow-bar--cyan"></div>
<div class="card-section-label card-section-label--cyan">TRANSMIT</div>
<div class="input-group">
<label class="input-label" for="dream-input">SEND A SIGNAL</label>
<input
id="dream-input"
class="vapor-input"
type="text"
placeholder="Type your dream here..."
autocomplete="off"
/>
<div class="input-hint">Transmitting on frequency 84.0 MHz</div>
</div>
</section>
<!-- Badges -->
<section class="card">
<div class="card-glow-bar card-glow-bar--mint"></div>
<div class="card-section-label card-section-label--mint">VIBES</div>
<div class="badge-row">
<span class="badge badge-pink">◆ AESTHETIC</span>
<span class="badge badge-cyan">◈ RETROWAVE</span>
<span class="badge badge-purple">▲ SYNTHPOP</span>
<span class="badge badge-yellow">◇ NOSTALGIC</span>
<span class="badge badge-mint">● DREAMING</span>
</div>
</section>
</main>
<script src="script.js"></script>
</body>
</html>Vaporwave
Born from Tumblr aesthetics and early internet surrealism, vaporwave translates the uncanny nostalgia of 1980s corporate America into a hallucinogenic neon dreamscape. Deep purple-black backgrounds, hot pink and cyan neon glows, an infinite perspective grid receding to the horizon, and the iconic retrowave sun with its pastel horizontal stripes — this style is maximalism at its most intentional.
The glitch effect — achieved through randomly jittering text-shadow color offsets on the main heading — simulates the magnetic tape degradation that the genre’s music and visuals celebrate. Orbitron or VT323 fonts lean into the synth-era digital aesthetic, while Space Mono keeps body text readable yet appropriately retro.
Key characteristics
- Deep purple-black background
#0D0015with a CSS perspective grid at the bottom - Palette: hot pink
#FF71CE, cyan#01CDFE, mint#05FFA1, purple#B967FF, pale yellow#FFFB96 OrbitronandSpace MonoGoogle Fonts for headings and body- Neon glow via layered
text-shadowandbox-shadowin pink/cyan - Vaporwave sun: concentric half-circles with alternating pink stripe cutouts
- Cards with translucent pink-tinted glass surfaces
- Glitch animation: JavaScript periodically randomizes heading
text-shadowoffsets
When to use it
Use this style for music-related projects, creative portfolios with a retro-futuristic angle, gaming UIs, event landing pages for synthwave or retrowave acts, or any context where the goal is emotional impact over corporate clarity. Best experienced with a dark environment and a synth soundtrack.