Iridescent design is a contemporary digital aesthetic rooted in the optical phenomenon of iridescence – the property of surfaces that appear to shift in color as the angle of observation changes. Drawn from the shimmering qualities of soap bubbles, oil slicks, abalone shells, butterfly wings, and holographic foil, this aesthetic translates prismatic light behavior into web and graphic design. The result is interfaces that feel alive, luminous, and perpetually in motion even when static, as layered gradients and metallic sheens create the illusion of rainbow refractions dancing across every surface.
At its core, Iridescent design leverages multi-hue gradients that traverse the full visible spectrum – pinks bleeding into violets, teals shifting to golds, greens dissolving into magentas. Unlike simple two-color gradients, iridescent palettes demand three to seven color stops that flow in sequence, producing the characteristic prismatic band effect. These are frequently layered with semi-transparent overlays, blend modes such as color-dodge and difference, and subtle animations that shift background positions or rotate conic gradients. The effect simulates how real holographic materials catch light differently depending on the viewer’s perspective.
The aesthetic gained particular momentum in the mid-to-late 2010s alongside the broader holographic and vaporwave trends, but it has matured into its own distinct visual language. Where vaporwave leans retro-nostalgic and glitchy, iridescent design tends toward polish, luxury, and futuristic elegance. It finds natural homes in beauty and cosmetics branding, music and entertainment platforms, fashion e-commerce, tech product launches, and portfolio sites seeking a premium, forward-thinking feel. The style also pairs well with glassmorphism – frosted translucent layers that let iridescent backgrounds glow through.
Technically, modern CSS has made iridescent effects increasingly accessible. Conic gradients, OKLCH color spaces, backdrop-filter, mix-blend-mode, and @property-based animations allow designers to create convincing holographic surfaces without images or JavaScript. The perceptually uniform OKLCH color model is particularly valuable here, producing smoother and more natural-looking transitions between hues than traditional RGB or HSL. When deployed thoughtfully – as accent elements, hero sections, or interactive hover states rather than blanket surface treatments – iridescent effects add a captivating sense of dimension and wonder to digital interfaces.
color-dodge, overlay, difference) to create depth and prismatic complexityThe iridescent palette spans the full visible spectrum, anchored by cool-toned bases and punctuated by prismatic accent colors. Each swatch represents a key stop in the holographic gradient sequence, from cool violets through warm pinks and back to aquatic teals. The deep base tones provide the dark canvas against which spectral colors appear most luminous.
| Color Name | Hex | Role / Usage |
|---|---|---|
| Void Black | #0A0A0F |
Deepest background, page base for maximum spectral contrast |
| Obsidian | #141420 |
Primary surface, card base before glass or foil overlay |
| Deep Indigo | #1A1A3E |
Elevated surfaces, section backgrounds, nav bars |
| Prism Violet | #7B2FBE |
Primary purple gradient stop, anchor hue for prismatic sweeps |
| Holographic Pink | #E84FAD |
Warm gradient stop, CTA highlights, accent badges |
| Laser Magenta | #FF3CAC |
High-energy accent, hover states, active indicators |
| Refraction Rose | #F2A1C2 |
Soft pink, pearlescent overlays, secondary accents |
| Spectral Blue | #3A86FF |
Cool gradient stop, links, informational elements |
| Opal Cyan | #00D4FF |
Teal-cyan gradient stop, interactive elements, highlights |
| Prism Green | #08D9A0 |
Green gradient stop, success states, positive indicators |
| Foil Gold | #FFD700 |
Warm metallic accent, premium indicators, warm gradient stop |
| Pearl White | #F0EFF4 |
Primary text on dark backgrounds, high-contrast labels |
| Mist Lavender | #C4B5FD |
Secondary text, descriptions, muted headings |
| Haze Silver | #9CA3AF |
Tertiary text, captions, disabled states |
| Iridescent Peach | #FFCBA4 |
Warm secondary, pearlescent highlights, soft CTA variant |
:root {
/* Dark bases */
--iri-void: #0a0a0f;
--iri-obsidian: #141420;
--iri-deep-indigo: #1a1a3e;
/* Prismatic spectrum */
--iri-violet: #7b2fbe;
--iri-pink: #e84fad;
--iri-magenta: #ff3cac;
--iri-rose: #f2a1c2;
--iri-blue: #3a86ff;
--iri-cyan: #00d4ff;
--iri-green: #08d9a0;
--iri-gold: #ffd700;
--iri-peach: #ffcba4;
/* Text */
--iri-text-primary: #f0eff4;
--iri-text-secondary: #c4b5fd;
--iri-text-muted: #9ca3af;
/* Signature gradients */
--iri-gradient-full: linear-gradient(
135deg,
#7b2fbe, #e84fad, #ff3cac, #3a86ff, #00d4ff, #08d9a0, #ffd700
);
--iri-gradient-cool: linear-gradient(135deg, #7b2fbe, #3a86ff, #00d4ff, #08d9a0);
--iri-gradient-warm: linear-gradient(135deg, #ff3cac, #e84fad, #ffcba4, #ffd700);
--iri-gradient-foil: conic-gradient(
from 0deg,
#7b2fbe, #3a86ff, #00d4ff, #08d9a0, #ffd700, #ff3cac, #e84fad, #7b2fbe
);
/* Glass / overlay */
--iri-glass-bg: rgba(255, 255, 255, 0.04);
--iri-glass-border: rgba(255, 255, 255, 0.08);
--iri-glass-blur: 18px;
/* Metallic sheen overlay */
--iri-sheen: linear-gradient(
105deg,
transparent 40%,
rgba(255, 255, 255, 0.15) 45%,
rgba(255, 255, 255, 0.05) 55%,
transparent 60%
);
}
Iridescent typography serves as a calm, legible counterpoint to the visual richness of prismatic backgrounds. Fonts should be:
| Font | Style | Best For |
|---|---|---|
| Space Grotesk | Geometric, slightly quirky | Headlines, hero text – futuristic yet approachable |
| Inter | Screen-optimized, versatile | Body text, UI labels, all-purpose readability |
| Outfit | Geometric, contemporary | Headlines, navigation, clean modern display |
| Sora | Geometric, modern, variable | Display headings, metrics, gradient-clipped text |
| DM Sans | Clean geometric, open | Body text, cards, descriptions |
| Urbanist | Tall, geometric, elegant | Headlines, premium-feel headers |
| Figtree | Geometric, friendly, open | Body text, approachable interfaces |
| Manrope | Semi-condensed, geometric | Headlines, UI elements, compact layouts |
| Heading Font | Body Font | Character |
|---|---|---|
| Space Grotesk (600) | Inter (400) | Futuristic display meets universal readability |
| Outfit (600) | DM Sans (400) | Contemporary elegance, clean throughout |
| Sora (700) | Figtree (400) | Bold gradient-ready headlines, warm body text |
| Urbanist (600) | Inter (400) | Tall, premium headers with crisp paragraphs |
| Manrope (700) | DM Sans (400) | Compact, modern, technically polished |
@import url('https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@400;500;600;700&family=Inter:wght@400;500;600&display=swap');
h1, h2, h3, h4, h5, h6 {
font-family: 'Space Grotesk', sans-serif;
font-weight: 600;
color: var(--iri-text-primary);
line-height: 1.15;
letter-spacing: -0.02em;
}
/* Iridescent gradient-clipped display heading */
.iri-display {
font-family: 'Space Grotesk', sans-serif;
font-size: clamp(2.5rem, 5vw, 5rem);
font-weight: 700;
letter-spacing: -0.03em;
line-height: 1.05;
background: var(--iri-gradient-full);
background-size: 200% auto;
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
animation: iriTextShift 6s ease-in-out infinite alternate;
}
@keyframes iriTextShift {
0% { background-position: 0% center; }
100% { background-position: 200% center; }
}
body {
font-family: 'Inter', sans-serif;
font-weight: 400;
font-size: 1rem;
line-height: 1.7;
color: var(--iri-text-secondary);
}
.iri-label {
font-family: 'Space Grotesk', sans-serif;
font-weight: 500;
font-size: 0.8rem;
letter-spacing: 0.08em;
text-transform: uppercase;
color: var(--iri-text-muted);
}
.iri-caption {
font-family: 'Inter', sans-serif;
font-weight: 400;
font-size: 0.85rem;
color: var(--iri-text-secondary);
}
.iri-bg {
background: var(--iri-void);
position: relative;
overflow: hidden;
}
.iri-bg::before,
.iri-bg::after {
content: '';
position: absolute;
border-radius: 50%;
filter: blur(80px);
pointer-events: none;
animation: iriFloat 15s ease-in-out infinite alternate;
}
.iri-bg::before {
width: 60vw;
height: 60vw;
top: -20%;
left: -10%;
background: conic-gradient(
from 0deg,
rgba(123,47,190,0.4),
rgba(58,134,255,0.3),
rgba(0,212,255,0.35),
rgba(8,217,160,0.3),
rgba(255,215,0,0.25),
rgba(255,60,172,0.35),
rgba(123,47,190,0.4)
);
}
.iri-bg::after {
width: 50vw;
height: 50vw;
bottom: -15%;
right: -10%;
background: conic-gradient(
from 180deg,
rgba(255,60,172,0.35),
rgba(232,79,173,0.3),
rgba(255,203,164,0.25),
rgba(255,215,0,0.3),
rgba(8,217,160,0.3),
rgba(0,212,255,0.35),
rgba(255,60,172,0.35)
);
animation-delay: -7s;
animation-direction: alternate-reverse;
}
@keyframes iriFloat {
0% { transform: translate(0, 0) rotate(0deg) scale(1); }
33% { transform: translate(3%, -2%) rotate(60deg) scale(1.05); }
66% { transform: translate(-2%, 3%) rotate(120deg) scale(0.95); }
100% { transform: translate(1%, -1%) rotate(180deg) scale(1); }
}
.iri-card {
position: relative;
background: var(--iri-glass-bg);
backdrop-filter: blur(var(--iri-glass-blur));
-webkit-backdrop-filter: blur(var(--iri-glass-blur));
border: 1px solid var(--iri-glass-border);
border-radius: 16px;
padding: 32px;
overflow: hidden;
transition: border-color 0.3s ease, transform 0.3s ease;
}
/* Holographic foil sheen overlay */
.iri-card::before {
content: '';
position: absolute;
inset: 0;
background: conic-gradient(
from var(--iri-foil-angle, 0deg),
transparent,
rgba(255,60,172,0.08),
rgba(0,212,255,0.08),
rgba(8,217,160,0.06),
rgba(255,215,0,0.06),
transparent
);
opacity: 0;
transition: opacity 0.4s ease;
pointer-events: none;
border-radius: inherit;
}
/* Metallic sheen sweep */
.iri-card::after {
content: '';
position: absolute;
inset: 0;
background: var(--iri-sheen);
background-size: 250% 100%;
background-position: 200% 0;
transition: background-position 0.6s ease;
pointer-events: none;
border-radius: inherit;
}
.iri-card:hover {
border-color: rgba(200, 180, 255, 0.2);
transform: translateY(-4px);
}
.iri-card:hover::before {
opacity: 1;
}
.iri-card:hover::after {
background-position: -50% 0;
}
.iri-button {
display: inline-flex;
align-items: center;
justify-content: center;
gap: 8px;
position: relative;
background: var(--iri-gradient-full);
background-size: 300% 100%;
color: #ffffff;
border: none;
border-radius: 12px;
padding: 14px 36px;
font-family: 'Space Grotesk', sans-serif;
font-weight: 600;
font-size: 0.95rem;
cursor: pointer;
text-decoration: none;
overflow: hidden;
transition: transform 0.2s ease, box-shadow 0.3s ease;
animation: iriButtonShift 6s ease infinite;
}
@keyframes iriButtonShift {
0% { background-position: 0% 50%; }
50% { background-position: 100% 50%; }
100% { background-position: 0% 50%; }
}
/* Metallic highlight sweep on hover */
.iri-button::after {
content: '';
position: absolute;
inset: 0;
background: linear-gradient(
105deg,
transparent 35%,
rgba(255,255,255,0.3) 45%,
rgba(255,255,255,0.1) 55%,
transparent 65%
);
background-size: 250% 100%;
background-position: 200% 0;
transition: background-position 0.5s ease;
border-radius: inherit;
}
.iri-button:hover {
transform: translateY(-2px);
box-shadow:
0 8px 32px rgba(123, 47, 190, 0.25),
0 4px 16px rgba(0, 212, 255, 0.15);
}
.iri-button:hover::after {
background-position: -50% 0;
}
/* Glass variant */
.iri-button--glass {
background: var(--iri-glass-bg);
backdrop-filter: blur(12px);
-webkit-backdrop-filter: blur(12px);
border: 1px solid var(--iri-glass-border);
color: var(--iri-text-primary);
animation: none;
}
.iri-button--glass:hover {
background: rgba(255, 255, 255, 0.08);
border-color: rgba(200, 180, 255, 0.2);
box-shadow: 0 8px 30px rgba(0, 0, 0, 0.3);
}
.iri-nav {
display: flex;
align-items: center;
justify-content: space-between;
max-width: 1200px;
margin: 0 auto;
padding: 20px 40px;
position: relative;
z-index: 10;
}
.iri-nav__logo {
font-family: 'Space Grotesk', sans-serif;
font-weight: 700;
font-size: 1.3rem;
background: var(--iri-gradient-full);
background-size: 200% auto;
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
text-decoration: none;
animation: iriTextShift 5s ease-in-out infinite alternate;
}
.iri-nav__links {
display: flex;
gap: 32px;
list-style: none;
margin: 0;
padding: 0;
}
.iri-nav__links a {
font-family: 'Inter', sans-serif;
font-weight: 500;
font-size: 0.9rem;
color: var(--iri-text-secondary);
text-decoration: none;
position: relative;
transition: color 0.2s ease;
}
.iri-nav__links a::after {
content: '';
position: absolute;
left: 0;
bottom: -4px;
width: 0;
height: 2px;
background: var(--iri-gradient-full);
background-size: 200% auto;
transition: width 0.3s ease;
}
.iri-nav__links a:hover {
color: var(--iri-text-primary);
}
.iri-nav__links a:hover::after {
width: 100%;
}
.iri-hero {
min-height: 85vh;
display: flex;
align-items: center;
justify-content: center;
text-align: center;
padding: 80px 40px;
position: relative;
z-index: 1;
}
.iri-hero__content {
max-width: 720px;
}
.iri-hero h1 {
font-size: clamp(2.5rem, 6vw, 5rem);
font-weight: 700;
margin-bottom: 1.5rem;
letter-spacing: -0.03em;
background: var(--iri-gradient-full);
background-size: 300% auto;
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
animation: iriTextShift 8s ease-in-out infinite alternate;
}
.iri-hero p {
font-size: 1.2rem;
color: var(--iri-text-secondary);
margin-bottom: 2.5rem;
line-height: 1.8;
}
.iri-hero__actions {
display: flex;
gap: 16px;
justify-content: center;
flex-wrap: wrap;
}
.iri-divider {
height: 2px;
max-width: 1200px;
margin: 0 auto;
background: var(--iri-gradient-full);
background-size: 300% 100%;
animation: iriDividerShift 8s ease infinite;
border-radius: 1px;
opacity: 0.4;
}
@keyframes iriDividerShift {
0% { background-position: 0% 50%; }
50% { background-position: 100% 50%; }
100% { background-position: 0% 50%; }
}
.iri-badge {
display: inline-flex;
align-items: center;
gap: 6px;
padding: 6px 14px;
border-radius: 100px;
font-family: 'Space Grotesk', sans-serif;
font-size: 0.75rem;
font-weight: 600;
letter-spacing: 0.04em;
text-transform: uppercase;
position: relative;
color: var(--iri-text-primary);
background: var(--iri-glass-bg);
border: 1px solid var(--iri-glass-border);
overflow: hidden;
}
.iri-badge::before {
content: '';
position: absolute;
inset: 0;
background: var(--iri-gradient-full);
opacity: 0.12;
border-radius: inherit;
}
.iri-image-wrap {
position: relative;
border-radius: 16px;
overflow: hidden;
}
.iri-image-wrap img {
display: block;
width: 100%;
height: auto;
transition: transform 0.4s ease;
}
.iri-image-wrap::after {
content: '';
position: absolute;
inset: 0;
background: conic-gradient(
from 0deg,
transparent 30%,
rgba(123,47,190,0.15),
rgba(0,212,255,0.12),
rgba(255,215,0,0.1),
rgba(255,60,172,0.12),
transparent 70%
);
mix-blend-mode: color-dodge;
opacity: 0;
transition: opacity 0.5s ease;
pointer-events: none;
}
.iri-image-wrap:hover img {
transform: scale(1.03);
}
.iri-image-wrap:hover::after {
opacity: 1;
}
prefers-reduced-motion support| Aesthetic | Relationship to Iridescent |
|---|---|
| Chromecore | Shares the metallic, reflective surface obsession but stays monochromatic silver/chrome rather than full-spectrum prismatic |
| Glassmorphism | Natural complement; frosted glass panels layered over iridescent backgrounds create the signature holographic-under-glass look |
| Aurora Gradient | Sibling aesthetic; both use multi-stop flowing gradients on dark bases, but aurora favors natural-light tones while iridescent pushes toward full-spectrum foil |
| Y2K Glam | Precursor; early-2000s holographic and metallic trends that iridescent design refines with modern CSS and smoother execution |
| Vaporwave | Shares the rainbow/holographic palette but diverges in mood – vaporwave is ironic and retro; iridescent is polished and forward-looking |
| Cyberpunk | Both favor neon-on-dark compositions but cyberpunk emphasizes grit, dystopia, and hard edges vs. iridescent’s clean luxury |
| Acid Design | Overlaps in vivid color intensity, but acid design pushes toward distortion, chaos, and counter-culture while iridescent maintains elegance |
| Dark Mode Neon | Shares the dark-base-with-vivid-color formula but neon stays within 2-3 saturated hues rather than full spectral sweeps |
| Dopamine Design | Both evoke joy through color, but dopamine design uses flat, solid-color blocks rather than gradient-based prismatic effects |
| Frutiger Aero | Predecessor in glossy, luminous UI; iridescent extends Frutiger Aero’s sheen with full holographic spectral treatment |
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Iridescent Page</title>
<link href="https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@400;500;600;700&family=Inter:wght@400;500;600&display=swap" rel="stylesheet">
<style>
/* ========================================
CSS CUSTOM PROPERTIES
======================================== */
:root {
/* Dark bases */
--iri-void: #0a0a0f;
--iri-obsidian: #141420;
--iri-deep-indigo: #1a1a3e;
/* Prismatic spectrum */
--iri-violet: #7b2fbe;
--iri-pink: #e84fad;
--iri-magenta: #ff3cac;
--iri-rose: #f2a1c2;
--iri-blue: #3a86ff;
--iri-cyan: #00d4ff;
--iri-green: #08d9a0;
--iri-gold: #ffd700;
--iri-peach: #ffcba4;
/* Text */
--iri-text-primary: #f0eff4;
--iri-text-secondary: #c4b5fd;
--iri-text-muted: #9ca3af;
/* Gradients */
--iri-gradient-full: linear-gradient(
135deg, #7b2fbe, #e84fad, #ff3cac, #3a86ff, #00d4ff, #08d9a0, #ffd700
);
--iri-gradient-cool: linear-gradient(135deg, #7b2fbe, #3a86ff, #00d4ff, #08d9a0);
--iri-gradient-warm: linear-gradient(135deg, #ff3cac, #e84fad, #ffcba4, #ffd700);
/* Glass */
--iri-glass-bg: rgba(255, 255, 255, 0.04);
--iri-glass-border: rgba(255, 255, 255, 0.08);
--iri-glass-blur: 18px;
/* Sheen */
--iri-sheen: linear-gradient(
105deg,
transparent 40%,
rgba(255,255,255,0.15) 45%,
rgba(255,255,255,0.05) 55%,
transparent 60%
);
}
/* ========================================
RESET & BASE
======================================== */
*, *::before, *::after {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
background: var(--iri-void);
color: var(--iri-text-secondary);
font-family: 'Inter', sans-serif;
font-weight: 400;
line-height: 1.7;
overflow-x: hidden;
-webkit-font-smoothing: antialiased;
}
h1, h2, h3, h4 {
font-family: 'Space Grotesk', sans-serif;
font-weight: 600;
color: var(--iri-text-primary);
line-height: 1.15;
letter-spacing: -0.02em;
}
a { color: inherit; text-decoration: none; }
img { display: block; max-width: 100%; }
/* ========================================
IRIDESCENT BACKGROUND EFFECT
======================================== */
.iri-bg {
position: fixed;
inset: 0;
z-index: 0;
pointer-events: none;
overflow: hidden;
}
.iri-bg__orb {
position: absolute;
border-radius: 50%;
filter: blur(90px);
opacity: 0.6;
}
.iri-bg__orb--1 {
width: 60vw;
height: 60vw;
top: -20%;
left: -15%;
background: conic-gradient(
from 0deg,
rgba(123,47,190,0.4),
rgba(58,134,255,0.3),
rgba(0,212,255,0.35),
rgba(8,217,160,0.3),
rgba(255,215,0,0.2),
rgba(255,60,172,0.35),
rgba(123,47,190,0.4)
);
animation: iriOrb1 18s ease-in-out infinite alternate;
}
.iri-bg__orb--2 {
width: 50vw;
height: 50vw;
bottom: -15%;
right: -10%;
background: conic-gradient(
from 180deg,
rgba(255,60,172,0.35),
rgba(232,79,173,0.3),
rgba(255,203,164,0.2),
rgba(255,215,0,0.25),
rgba(8,217,160,0.3),
rgba(0,212,255,0.35),
rgba(255,60,172,0.35)
);
animation: iriOrb2 22s ease-in-out infinite alternate;
}
.iri-bg__orb--3 {
width: 35vw;
height: 35vw;
top: 40%;
left: 30%;
background: conic-gradient(
from 90deg,
rgba(0,212,255,0.2),
rgba(123,47,190,0.15),
rgba(255,215,0,0.15),
rgba(0,212,255,0.2)
);
animation: iriOrb3 25s ease-in-out infinite alternate;
}
@keyframes iriOrb1 {
0% { transform: translate(0, 0) rotate(0deg); }
100% { transform: translate(5%, 3%) rotate(180deg); }
}
@keyframes iriOrb2 {
0% { transform: translate(0, 0) rotate(0deg); }
100% { transform: translate(-4%, -3%) rotate(-180deg); }
}
@keyframes iriOrb3 {
0% { transform: translate(0, 0) rotate(0deg) scale(1); }
100% { transform: translate(3%, -5%) rotate(120deg) scale(1.1); }
}
/* Reduced motion */
@media (prefers-reduced-motion: reduce) {
.iri-bg__orb,
.iri-display,
.iri-btn,
.iri-divider-line {
animation: none !important;
}
}
/* ========================================
CONTENT WRAPPER
======================================== */
.content {
position: relative;
z-index: 1;
}
/* ========================================
NAVIGATION
======================================== */
.nav {
display: flex;
align-items: center;
justify-content: space-between;
max-width: 1200px;
margin: 0 auto;
padding: 24px 40px;
}
.nav__logo {
font-family: 'Space Grotesk', sans-serif;
font-weight: 700;
font-size: 1.4rem;
background: var(--iri-gradient-full);
background-size: 200% auto;
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
animation: iriTextShift 5s ease-in-out infinite alternate;
}
@keyframes iriTextShift {
0% { background-position: 0% center; }
100% { background-position: 200% center; }
}
.nav__links {
display: flex;
gap: 32px;
list-style: none;
}
.nav__links a {
font-weight: 500;
font-size: 0.9rem;
color: var(--iri-text-secondary);
position: relative;
transition: color 0.2s ease;
}
.nav__links a::after {
content: '';
position: absolute;
left: 0;
bottom: -4px;
width: 0;
height: 2px;
background: var(--iri-gradient-full);
transition: width 0.3s ease;
}
.nav__links a:hover { color: var(--iri-text-primary); }
.nav__links a:hover::after { width: 100%; }
/* ========================================
HERO SECTION
======================================== */
.hero {
min-height: 85vh;
display: flex;
align-items: center;
justify-content: center;
text-align: center;
padding: 80px 40px;
}
.hero__inner {
max-width: 720px;
}
.hero__badge {
display: inline-flex;
align-items: center;
gap: 6px;
padding: 6px 16px;
border-radius: 100px;
font-family: 'Space Grotesk', sans-serif;
font-size: 0.75rem;
font-weight: 600;
letter-spacing: 0.06em;
text-transform: uppercase;
color: var(--iri-text-primary);
background: var(--iri-glass-bg);
border: 1px solid var(--iri-glass-border);
margin-bottom: 24px;
position: relative;
overflow: hidden;
}
.hero__badge::before {
content: '';
position: absolute;
inset: 0;
background: var(--iri-gradient-full);
opacity: 0.1;
border-radius: inherit;
}
.hero h1 {
font-size: clamp(2.5rem, 6vw, 4.8rem);
font-weight: 700;
margin-bottom: 1.5rem;
letter-spacing: -0.03em;
line-height: 1.05;
background: var(--iri-gradient-full);
background-size: 300% auto;
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
animation: iriTextShift 8s ease-in-out infinite alternate;
}
.hero p {
font-size: 1.15rem;
color: var(--iri-text-secondary);
margin-bottom: 2.5rem;
line-height: 1.8;
}
.hero__actions {
display: flex;
gap: 16px;
justify-content: center;
flex-wrap: wrap;
}
/* ========================================
BUTTONS
======================================== */
.btn {
display: inline-flex;
align-items: center;
justify-content: center;
gap: 8px;
position: relative;
background: var(--iri-gradient-full);
background-size: 300% 100%;
color: #ffffff;
border: none;
border-radius: 12px;
padding: 14px 36px;
font-family: 'Space Grotesk', sans-serif;
font-weight: 600;
font-size: 0.95rem;
cursor: pointer;
overflow: hidden;
transition: transform 0.2s ease, box-shadow 0.3s ease;
animation: iriButtonShift 6s ease infinite;
}
@keyframes iriButtonShift {
0% { background-position: 0% 50%; }
50% { background-position: 100% 50%; }
100% { background-position: 0% 50%; }
}
.btn::after {
content: '';
position: absolute;
inset: 0;
background: var(--iri-sheen);
background-size: 250% 100%;
background-position: 200% 0;
transition: background-position 0.5s ease;
border-radius: inherit;
}
.btn:hover {
transform: translateY(-2px);
box-shadow:
0 8px 32px rgba(123,47,190,0.25),
0 4px 16px rgba(0,212,255,0.15);
}
.btn:hover::after {
background-position: -50% 0;
}
.btn--glass {
background: var(--iri-glass-bg);
backdrop-filter: blur(12px);
-webkit-backdrop-filter: blur(12px);
border: 1px solid var(--iri-glass-border);
color: var(--iri-text-primary);
animation: none;
}
.btn--glass:hover {
background: rgba(255,255,255,0.08);
border-color: rgba(200,180,255,0.2);
box-shadow: 0 8px 30px rgba(0,0,0,0.3);
}
/* ========================================
DIVIDER
======================================== */
.iri-divider-line {
height: 2px;
max-width: 1200px;
margin: 0 auto;
background: var(--iri-gradient-full);
background-size: 300% 100%;
animation: iriDividerShift 8s ease infinite;
border-radius: 1px;
opacity: 0.35;
}
@keyframes iriDividerShift {
0% { background-position: 0% 50%; }
50% { background-position: 100% 50%; }
100% { background-position: 0% 50%; }
}
/* ========================================
FEATURES SECTION
======================================== */
.features {
padding: 100px 40px;
max-width: 1200px;
margin: 0 auto;
}
.features__header {
text-align: center;
margin-bottom: 56px;
}
.features__header h2 {
font-size: 2.2rem;
margin-bottom: 12px;
}
.features__header p {
font-size: 1.05rem;
color: var(--iri-text-muted);
max-width: 520px;
margin: 0 auto;
}
.features__grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: 24px;
}
/* ========================================
GLASS CARD (with holographic foil)
======================================== */
.card {
position: relative;
background: var(--iri-glass-bg);
backdrop-filter: blur(var(--iri-glass-blur));
-webkit-backdrop-filter: blur(var(--iri-glass-blur));
border: 1px solid var(--iri-glass-border);
border-radius: 16px;
padding: 32px;
overflow: hidden;
transition: border-color 0.3s ease, transform 0.3s ease;
}
.card::before {
content: '';
position: absolute;
inset: 0;
background: conic-gradient(
from 0deg,
transparent,
rgba(255,60,172,0.06),
rgba(0,212,255,0.06),
rgba(8,217,160,0.05),
rgba(255,215,0,0.05),
transparent
);
opacity: 0;
transition: opacity 0.4s ease;
pointer-events: none;
border-radius: inherit;
}
.card::after {
content: '';
position: absolute;
inset: 0;
background: var(--iri-sheen);
background-size: 250% 100%;
background-position: 200% 0;
transition: background-position 0.6s ease;
pointer-events: none;
border-radius: inherit;
}
.card:hover {
border-color: rgba(200,180,255,0.2);
transform: translateY(-4px);
}
.card:hover::before { opacity: 1; }
.card:hover::after { background-position: -50% 0; }
.card__icon {
width: 48px;
height: 48px;
border-radius: 12px;
display: flex;
align-items: center;
justify-content: center;
margin-bottom: 20px;
position: relative;
z-index: 1;
}
.card h3 {
font-size: 1.15rem;
margin-bottom: 0.75rem;
position: relative;
z-index: 1;
}
.card p {
font-size: 0.95rem;
line-height: 1.65;
position: relative;
z-index: 1;
}
/* ========================================
SHOWCASE / STATS SECTION
======================================== */
.showcase {
padding: 100px 40px;
max-width: 1200px;
margin: 0 auto;
text-align: center;
}
.showcase h2 {
font-size: 2.2rem;
margin-bottom: 48px;
}
.stats-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
gap: 24px;
}
.stat {
background: var(--iri-glass-bg);
backdrop-filter: blur(12px);
-webkit-backdrop-filter: blur(12px);
border: 1px solid var(--iri-glass-border);
border-radius: 16px;
padding: 32px 20px;
}
.stat__number {
font-family: 'Space Grotesk', sans-serif;
font-size: 2.5rem;
font-weight: 700;
background: var(--iri-gradient-full);
background-size: 200% auto;
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
animation: iriTextShift 6s ease-in-out infinite alternate;
margin-bottom: 8px;
}
.stat__label {
font-family: 'Space Grotesk', sans-serif;
font-size: 0.8rem;
font-weight: 500;
letter-spacing: 0.06em;
text-transform: uppercase;
color: var(--iri-text-muted);
}
/* ========================================
CTA SECTION
======================================== */
.cta {
padding: 100px 40px;
text-align: center;
}
.cta__inner {
background: var(--iri-glass-bg);
backdrop-filter: blur(20px);
-webkit-backdrop-filter: blur(20px);
border: 1px solid var(--iri-glass-border);
border-radius: 24px;
padding: 64px 40px;
max-width: 800px;
margin: 0 auto;
position: relative;
overflow: hidden;
}
.cta__inner::before {
content: '';
position: absolute;
inset: 0;
background: conic-gradient(
from 0deg at 50% 100%,
transparent 30%,
rgba(123,47,190,0.08),
rgba(0,212,255,0.06),
rgba(255,215,0,0.05),
rgba(255,60,172,0.08),
transparent 70%
);
pointer-events: none;
}
.cta h2 {
font-size: 2rem;
margin-bottom: 1rem;
position: relative;
z-index: 1;
}
.cta p {
margin-bottom: 2rem;
font-size: 1.05rem;
position: relative;
z-index: 1;
}
.cta .btn {
position: relative;
z-index: 1;
}
/* ========================================
FOOTER
======================================== */
footer {
text-align: center;
padding: 40px;
font-size: 0.85rem;
color: var(--iri-text-muted);
}
footer a {
color: var(--iri-text-secondary);
transition: color 0.2s;
}
footer a:hover {
color: var(--iri-text-primary);
}
/* ========================================
RESPONSIVE
======================================== */
@media (max-width: 768px) {
.nav { padding: 16px 20px; }
.nav__links { gap: 20px; }
.hero {
min-height: 70vh;
padding: 60px 20px;
}
.features { padding: 60px 20px; }
.showcase { padding: 60px 20px; }
.cta { padding: 60px 20px; }
.cta__inner { padding: 40px 24px; }
.stats-grid {
grid-template-columns: repeat(2, 1fr);
}
}
@media (max-width: 480px) {
.nav__links { gap: 16px; font-size: 0.8rem; }
.hero__actions { flex-direction: column; align-items: center; }
.stats-grid { grid-template-columns: 1fr; }
}
</style>
</head>
<body>
<!-- Iridescent background orbs -->
<div class="iri-bg">
<div class="iri-bg__orb iri-bg__orb--1"></div>
<div class="iri-bg__orb iri-bg__orb--2"></div>
<div class="iri-bg__orb iri-bg__orb--3"></div>
</div>
<div class="content">
<!-- Navigation -->
<nav class="nav">
<a href="#" class="nav__logo">Prism</a>
<ul class="nav__links">
<li><a href="#">Product</a></li>
<li><a href="#">Features</a></li>
<li><a href="#">Pricing</a></li>
<li><a href="#">About</a></li>
</ul>
</nav>
<!-- Hero -->
<section class="hero">
<div class="hero__inner">
<span class="hero__badge">New -- Holographic UI Kit</span>
<h1>Surfaces that shift with light</h1>
<p>
Experience interfaces inspired by prismatic refraction. Holographic gradients,
metallic sheens, and foil effects create designs that feel alive and luminous.
</p>
<div class="hero__actions">
<a href="#" class="btn">Explore the Spectrum</a>
<a href="#" class="btn btn--glass">View Gallery</a>
</div>
</div>
</section>
<!-- Divider -->
<div class="iri-divider-line"></div>
<!-- Features -->
<section class="features">
<div class="features__header">
<h2>Prismatic by design</h2>
<p>Every surface catches light differently, creating depth and dimension across your interface.</p>
</div>
<div class="features__grid">
<div class="card">
<div class="card__icon" style="background: rgba(123,47,190,0.15);">
<svg width="24" height="24" viewBox="0 0 24 24" fill="none">
<path d="M12 2L2 7l10 5 10-5-10-5zM2 17l10 5 10-5M2 12l10 5 10-5" stroke="#7b2fbe" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>
</div>
<h3>Layered Refraction</h3>
<p>Stacked translucent surfaces reveal prismatic backgrounds beneath, creating natural visual hierarchy through light and color.</p>
</div>
<div class="card">
<div class="card__icon" style="background: rgba(0,212,255,0.15);">
<svg width="24" height="24" viewBox="0 0 24 24" fill="none">
<circle cx="12" cy="12" r="5" stroke="#00d4ff" stroke-width="2"/>
<path d="M12 1v2M12 21v2M4.22 4.22l1.42 1.42M18.36 18.36l1.42 1.42M1 12h2M21 12h2M4.22 19.78l1.42-1.42M18.36 5.64l1.42-1.42" stroke="#00d4ff" stroke-width="2" stroke-linecap="round"/>
</svg>
</div>
<h3>Spectral Motion</h3>
<p>Gradients shift smoothly through the full color spectrum, simulating how holographic foil catches and disperses ambient light.</p>
</div>
<div class="card">
<div class="card__icon" style="background: rgba(255,60,172,0.15);">
<svg width="24" height="24" viewBox="0 0 24 24" fill="none">
<path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z" stroke="#ff3cac" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>
</div>
<h3>Foil Interactivity</h3>
<p>Metallic sheen effects respond to hover and interaction, creating tactile, premium-feeling surfaces that reward engagement.</p>
</div>
</div>
</section>
<!-- Divider -->
<div class="iri-divider-line"></div>
<!-- Showcase / Stats -->
<section class="showcase">
<h2>Numbers that shimmer</h2>
<div class="stats-grid">
<div class="stat">
<div class="stat__number">7+</div>
<div class="stat__label">Spectral Hues</div>
</div>
<div class="stat">
<div class="stat__number">360°</div>
<div class="stat__label">Color Rotation</div>
</div>
<div class="stat">
<div class="stat__number">18px</div>
<div class="stat__label">Glass Blur</div>
</div>
<div class="stat">
<div class="stat__number">∞</div>
<div class="stat__label">Refraction Angles</div>
</div>
</div>
</section>
<!-- CTA -->
<section class="cta">
<div class="cta__inner">
<h2>Ready to refract?</h2>
<p>Join designers creating holographic interfaces that captivate and convert.</p>
<a href="#" class="btn">Get Started Free</a>
</div>
</section>
<!-- Footer -->
<footer>
<p>Built with the Iridescent aesthetic. Prismatic, luminous, alive.</p>
</footer>
</div>
</body>
</html>
will-change: transform sparingly – apply it only to the animated gradient orbs, not to every element; excessive will-change declarations consume GPU memory and can degrade performanceoklch() instead of hex for perceptually uniform transitions that avoid muddy midpoints between distant huesprefers-reduced-motion fallbacks – wrap all animations in a media query check and provide static gradient versions for users with vestibular sensitivities; this is both an accessibility requirement and a UX best practicemix-blend-mode and background-blend-mode are GPU-intensive operations; on lower-powered devices, consider replacing blended layers with pre-baked gradient images or simplified single-layer gradientsbackdrop-filter with a fallback – not all browsers fully support backdrop-filter; provide a solid semi-transparent background-color fallback so glass panels remain visually distinct even without blur