Lush Velvet is a digital design aesthetic rooted in the sensory richness of crushed and plush velvet fabric. It translates the tactile depth, sumptuous weight, and light-absorbing warmth of velvet into screen-based experiences through deep jewel-tone color palettes, layered gradients that mimic pile direction, soft noise textures, and generous shadow work. The result is an interface that feels physically present – surfaces appear to have genuine material depth, colors shift subtly as if responding to touch, and every element conveys an unmistakable sense of curated luxury.
The aesthetic draws from interior design traditions where velvet has long signaled opulence: Victorian parlors draped in burgundy, Art Deco lounges upholstered in emerald, mid-century modern apartments accented with sapphire cushions, and contemporary luxury branding that leverages the fabric’s association with exclusivity and comfort. On the web, Lush Velvet occupies a space between dark-mode elegance and maximalist warmth. Unlike stark minimalism, it embraces richness without clutter. Unlike Baroque or Rococo excess, it maintains restraint through a carefully limited palette and deliberate negative space.
Key to the Lush Velvet identity is the interplay between matte and sheen. Velvet fabric’s defining characteristic is its pile – short, dense fibers that absorb light at certain angles and reflect it at others, producing that signature depth-shifting appearance. In CSS and UI terms, this translates to subtle radial gradients that simulate directional lighting, fine-grain noise overlays that prevent flat digital sameness, and carefully crafted box-shadows that suggest soft, pillowed depth rather than hard geometric edges. Colors are never flat; they breathe.
The emotional register of Lush Velvet is intimate, confident, and sensuous. It suits brands and projects that want to communicate quality, exclusivity, warmth, and sophistication – luxury fashion, fine dining, premium subscriptions, boutique hotels, curated collections, high-end portfolios, and artisanal product showcases. It rewards slow browsing, inviting the user to linger rather than skim, making it ideal for experiences where atmosphere and mood matter as much as information.
The Lush Velvet palette centers on deeply saturated jewel tones drawn from precious stones and rich dye traditions. Every color should feel as though it has been steeped and concentrated – never washed out, never neon. Metallic accents in gold and champagne provide luminous contrast against the absorptive velvet grounds. Backgrounds favor warm near-blacks that read as very deep burgundy or plum rather than true neutral black.
| Swatch | Hex | Role / Usage |
|---|---|---|
![]() |
#1A0A12 |
Primary background – deep velvet noir with plum undertone |
![]() |
#2D1225 |
Secondary background – elevated surface panels and cards |
![]() |
#4A1942 |
Tertiary surface – modal overlays, active states |
![]() |
#6B1D4A |
Plum accent – borders, dividers, subtle highlights |
![]() |
#8B1A3A |
Ruby – primary call-to-action, key interactive elements |
![]() |
#6E2C6B |
Amethyst – secondary accent, tags, badges |
![]() |
#1B4D3E |
Deep emerald – success states, contrast accent |
![]() |
#0F3460 |
Sapphire – informational accent, link color alternative |
![]() |
#D4AF37 |
Gold – primary metallic accent, headings, ornamental borders |
![]() |
#C9A96E |
Champagne – secondary metallic, muted gold for body accents |
![]() |
#B76E79 |
Rose gold – warm metallic highlights, decorative detail |
![]() |
#F5E6D3 |
Warm cream – primary text on dark backgrounds |
![]() |
#E8D5C4 |
Muted ivory – secondary text, descriptions, captions |
![]() |
#A89080 |
Dusty taupe – tertiary text, metadata, timestamps |
![]() |
#3D2B1F |
Bistre – dark warm neutral for subtle backgrounds and borders |
:root {
/* Velvet backgrounds */
--velvet-noir: #1A0A12;
--velvet-deep: #2D1225;
--velvet-plum: #4A1942;
--velvet-mauve: #6B1D4A;
/* Jewel tones */
--velvet-ruby: #8B1A3A;
--velvet-amethyst: #6E2C6B;
--velvet-emerald: #1B4D3E;
--velvet-sapphire: #0F3460;
/* Metallics */
--velvet-gold: #D4AF37;
--velvet-champagne: #C9A96E;
--velvet-rose-gold: #B76E79;
/* Text tones */
--velvet-cream: #F5E6D3;
--velvet-ivory: #E8D5C4;
--velvet-taupe: #A89080;
--velvet-bistre: #3D2B1F;
/* Functional aliases */
--bg-primary: var(--velvet-noir);
--bg-surface: var(--velvet-deep);
--bg-elevated: var(--velvet-plum);
--text-primary: var(--velvet-cream);
--text-secondary: var(--velvet-ivory);
--text-muted: var(--velvet-taupe);
--accent-primary: var(--velvet-gold);
--accent-action: var(--velvet-ruby);
--border-subtle: rgba(212, 175, 55, 0.15);
--border-accent: rgba(212, 175, 55, 0.4);
/* Shadows */
--shadow-soft: 0 8px 32px rgba(26, 10, 18, 0.6);
--shadow-pillowed: 0 4px 20px rgba(26, 10, 18, 0.4), 0 1px 4px rgba(26, 10, 18, 0.3);
--shadow-glow: 0 0 30px rgba(139, 26, 58, 0.2);
}
Lush Velvet typography should feel refined, confident, and warm. Display headings use elegant high-contrast serifs with sweeping curves and generous proportions – typefaces that suggest calligraphic heritage and old-world craftsmanship. Body text uses clean, readable serifs or refined sans-serifs with light weight and generous letter-spacing to maintain an airy, luxurious reading experience. Avoid condensed, geometric, or overly modern typefaces; the goal is timeless sophistication with a touch of sensuality.
| Font | Category | Weight Range | Character |
|---|---|---|---|
| Playfair Display | Serif, Display | 400–900 | High-contrast transitional serif with elegant thick-thin stroke variation |
| Cormorant Garamond | Serif, Display | 300–700 | Refined Garamond revival with graceful curves and classical proportions |
| Bodoni Moda | Serif, Display | 400–900 | Dramatic modern serif with extreme stroke contrast and sharp serifs |
| Literata | Serif, Text | 200–900 | Contemporary serif optimized for screen reading with warm character |
| Lora | Serif, Text | 400–700 | Calligraphy-rooted serif with moderate contrast, excellent for body text |
| Raleway | Sans-serif | 100–900 | Elegant thin-weight sans-serif for secondary text and UI labels |
| Jost | Sans-serif | 100–900 | Refined geometric sans with optical balance and luxury feel |
| Heading Font | Body Font | Mood |
|---|---|---|
| Playfair Display | Raleway (300) | Classic luxury, high contrast between display and text |
| Cormorant Garamond | Jost (300) | Old-world elegance meets modern clarity |
| Bodoni Moda | Literata (300) | High drama headings with comfortable extended reading |
| Playfair Display | Lora (400) | All-serif warmth, literary and intimate |
| Cormorant Garamond | Raleway (300) | Graceful traditional headings with clean modern body |
/* Import fonts */
@import url('https://fonts.googleapis.com/css2?family=Playfair+Display:ital,wght@0,400;0,600;0,700;1,400&family=Raleway:wght@300;400;500&display=swap');
/* Headings */
h1, h2, h3 {
font-family: 'Playfair Display', Georgia, 'Times New Roman', serif;
color: var(--velvet-gold);
font-weight: 400;
letter-spacing: 0.02em;
line-height: 1.2;
}
h1 {
font-size: clamp(2.5rem, 6vw, 5rem);
font-weight: 700;
letter-spacing: -0.01em;
}
h2 {
font-size: clamp(1.8rem, 4vw, 3rem);
font-weight: 600;
}
h3 {
font-size: clamp(1.2rem, 2.5vw, 1.8rem);
font-weight: 400;
font-style: italic;
color: var(--velvet-champagne);
}
/* Display / Hero text */
.velvet-display {
font-family: 'Playfair Display', serif;
font-size: clamp(3rem, 8vw, 7rem);
font-weight: 700;
letter-spacing: -0.02em;
line-height: 1.05;
background: linear-gradient(135deg, var(--velvet-gold), var(--velvet-champagne), var(--velvet-gold));
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
}
/* Body text */
body {
font-family: 'Raleway', 'Helvetica Neue', Arial, sans-serif;
font-weight: 300;
font-size: 1.05rem;
letter-spacing: 0.03em;
line-height: 1.8;
color: var(--velvet-cream);
}
/* Accent / label text */
.velvet-label {
font-family: 'Raleway', sans-serif;
font-weight: 500;
font-size: 0.75rem;
letter-spacing: 0.2em;
text-transform: uppercase;
color: var(--velvet-champagne);
}
/* Base velvet texture using noise overlay and radial gradient */
.velvet-bg {
background-color: var(--velvet-noir);
background-image:
radial-gradient(
ellipse at 30% 20%,
rgba(75, 25, 66, 0.3) 0%,
transparent 60%
),
radial-gradient(
ellipse at 70% 80%,
rgba(45, 18, 37, 0.4) 0%,
transparent 50%
);
position: relative;
}
/* Noise overlay for fabric grain effect */
.velvet-bg::before {
content: '';
position: absolute;
inset: 0;
background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noise'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noise)' opacity='0.03'/%3E%3C/svg%3E");
background-repeat: repeat;
background-size: 256px 256px;
pointer-events: none;
z-index: 1;
}
.velvet-bg > * {
position: relative;
z-index: 2;
}
.velvet-card {
background: linear-gradient(
145deg,
rgba(45, 18, 37, 0.9) 0%,
rgba(45, 18, 37, 0.7) 100%
);
border: 1px solid var(--border-subtle);
border-radius: 12px;
padding: 2.5rem;
box-shadow: var(--shadow-pillowed);
backdrop-filter: blur(10px);
transition: all 0.4s cubic-bezier(0.25, 0.46, 0.45, 0.94);
position: relative;
overflow: hidden;
}
/* Subtle directional light sheen */
.velvet-card::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
height: 1px;
background: linear-gradient(
90deg,
transparent 0%,
var(--velvet-champagne) 20%,
var(--velvet-gold) 50%,
var(--velvet-champagne) 80%,
transparent 100%
);
opacity: 0.4;
}
.velvet-card:hover {
transform: translateY(-4px);
box-shadow:
var(--shadow-pillowed),
var(--shadow-glow);
border-color: var(--border-accent);
}
.velvet-card h3 {
color: var(--velvet-gold);
margin-bottom: 1rem;
}
.velvet-card p {
color: var(--velvet-ivory);
line-height: 1.8;
}
/* Primary button -- ruby velvet */
.velvet-btn {
font-family: 'Raleway', sans-serif;
font-weight: 500;
font-size: 0.85rem;
letter-spacing: 0.15em;
text-transform: uppercase;
color: var(--velvet-cream);
background: linear-gradient(
135deg,
var(--velvet-ruby) 0%,
#A02050 50%,
var(--velvet-ruby) 100%
);
border: 1px solid rgba(212, 175, 55, 0.3);
border-radius: 6px;
padding: 1rem 2.5rem;
cursor: pointer;
transition: all 0.35s ease;
position: relative;
overflow: hidden;
}
.velvet-btn::after {
content: '';
position: absolute;
top: 0;
left: -100%;
width: 100%;
height: 100%;
background: linear-gradient(
90deg,
transparent,
rgba(212, 175, 55, 0.1),
transparent
);
transition: left 0.5s ease;
}
.velvet-btn:hover {
background: linear-gradient(
135deg,
#A02050 0%,
#B82860 50%,
#A02050 100%
);
border-color: var(--velvet-gold);
box-shadow: 0 4px 20px rgba(139, 26, 58, 0.4);
transform: translateY(-2px);
}
.velvet-btn:hover::after {
left: 100%;
}
/* Secondary button -- outlined gold */
.velvet-btn-secondary {
font-family: 'Raleway', sans-serif;
font-weight: 500;
font-size: 0.85rem;
letter-spacing: 0.15em;
text-transform: uppercase;
color: var(--velvet-gold);
background: transparent;
border: 1px solid var(--velvet-gold);
border-radius: 6px;
padding: 1rem 2.5rem;
cursor: pointer;
transition: all 0.35s ease;
}
.velvet-btn-secondary:hover {
background: rgba(212, 175, 55, 0.1);
box-shadow: 0 0 20px rgba(212, 175, 55, 0.15);
}
.velvet-nav {
display: flex;
align-items: center;
justify-content: space-between;
padding: 1.5rem 3rem;
background: linear-gradient(
180deg,
rgba(26, 10, 18, 0.95) 0%,
rgba(26, 10, 18, 0.85) 100%
);
backdrop-filter: blur(20px);
border-bottom: 1px solid var(--border-subtle);
position: sticky;
top: 0;
z-index: 100;
}
.velvet-nav-brand {
font-family: 'Playfair Display', serif;
font-size: 1.5rem;
font-weight: 700;
color: var(--velvet-gold);
text-decoration: none;
letter-spacing: 0.05em;
}
.velvet-nav-links {
display: flex;
gap: 2.5rem;
list-style: none;
margin: 0;
padding: 0;
}
.velvet-nav-links a {
font-family: 'Raleway', sans-serif;
font-weight: 400;
font-size: 0.85rem;
letter-spacing: 0.12em;
text-transform: uppercase;
color: var(--velvet-ivory);
text-decoration: none;
padding: 0.5rem 0;
position: relative;
transition: color 0.3s ease;
}
.velvet-nav-links a::after {
content: '';
position: absolute;
bottom: 0;
left: 50%;
width: 0;
height: 1px;
background: var(--velvet-gold);
transition: all 0.3s ease;
transform: translateX(-50%);
}
.velvet-nav-links a:hover {
color: var(--velvet-gold);
}
.velvet-nav-links a:hover::after {
width: 100%;
}
.velvet-hero {
min-height: 100vh;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
text-align: center;
padding: 4rem 2rem;
position: relative;
overflow: hidden;
background:
radial-gradient(
ellipse at 50% 30%,
rgba(139, 26, 58, 0.2) 0%,
transparent 50%
),
radial-gradient(
ellipse at 20% 80%,
rgba(110, 44, 107, 0.15) 0%,
transparent 40%
),
radial-gradient(
ellipse at 80% 70%,
rgba(27, 77, 62, 0.1) 0%,
transparent 35%
),
var(--velvet-noir);
}
/* Animated ambient glow */
.velvet-hero::before {
content: '';
position: absolute;
width: 600px;
height: 600px;
border-radius: 50%;
background: radial-gradient(
circle,
rgba(139, 26, 58, 0.15) 0%,
transparent 70%
);
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
animation: velvet-breathe 8s ease-in-out infinite;
pointer-events: none;
}
@keyframes velvet-breathe {
0%, 100% { opacity: 0.5; transform: translate(-50%, -50%) scale(1); }
50% { opacity: 1; transform: translate(-50%, -50%) scale(1.15); }
}
.velvet-hero-title {
font-family: 'Playfair Display', serif;
font-size: clamp(3rem, 8vw, 7rem);
font-weight: 700;
line-height: 1.05;
margin-bottom: 1.5rem;
background: linear-gradient(
135deg,
var(--velvet-gold) 0%,
var(--velvet-champagne) 40%,
var(--velvet-gold) 60%,
var(--velvet-rose-gold) 100%
);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
}
.velvet-hero-subtitle {
font-family: 'Raleway', sans-serif;
font-weight: 300;
font-size: clamp(1rem, 2vw, 1.3rem);
letter-spacing: 0.15em;
text-transform: uppercase;
color: var(--velvet-champagne);
margin-bottom: 3rem;
}
.velvet-divider {
display: flex;
align-items: center;
justify-content: center;
gap: 1rem;
margin: 4rem auto;
max-width: 400px;
}
.velvet-divider::before,
.velvet-divider::after {
content: '';
flex: 1;
height: 1px;
background: linear-gradient(
90deg,
transparent,
var(--velvet-gold),
transparent
);
}
.velvet-divider-diamond {
width: 8px;
height: 8px;
background: var(--velvet-gold);
transform: rotate(45deg);
flex-shrink: 0;
}
/* Gold shimmer text for headings */
.velvet-gold-text {
background: linear-gradient(
135deg,
#D4AF37 0%,
#F5E6D3 25%,
#D4AF37 50%,
#C9A96E 75%,
#D4AF37 100%
);
background-size: 200% auto;
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
animation: velvet-shimmer 6s linear infinite;
}
@keyframes velvet-shimmer {
0% { background-position: 0% center; }
100% { background-position: 200% center; }
}
/* Ruby-to-amethyst gradient for accent text */
.velvet-jewel-text {
background: linear-gradient(
135deg,
var(--velvet-ruby),
var(--velvet-amethyst),
var(--velvet-ruby)
);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
}
/* Velvet-framed image with warm overlay */
.velvet-image {
border-radius: 12px;
border: 1px solid var(--border-subtle);
box-shadow: var(--shadow-pillowed);
overflow: hidden;
position: relative;
}
.velvet-image img {
display: block;
width: 100%;
height: auto;
filter: saturate(0.85) contrast(1.05) brightness(0.95);
transition: all 0.5s ease;
}
.velvet-image::after {
content: '';
position: absolute;
inset: 0;
background: linear-gradient(
180deg,
transparent 60%,
rgba(26, 10, 18, 0.7) 100%
);
pointer-events: none;
}
.velvet-image:hover img {
filter: saturate(1) contrast(1.1) brightness(1);
transform: scale(1.03);
}
| Aesthetic | Relationship to Lush Velvet |
|---|---|
| Art Deco | Shares jewel-tone palette and gold metallic accents; Art Deco is more geometric and angular where Velvet is soft and organic |
| Dark Academia | Both use warm dark palettes and serif typography; Dark Academia leans scholarly while Velvet leans sensuous |
| Baroque | Shares opulence and richness; Baroque is maximally ornamental while Velvet exercises modern restraint |
| Hollywood Regency | Both invoke mid-century glamour and plush materials; Regency is brighter and more theatrical |
| Glassmorphism | Both use layered translucency and blur; Velvet substitutes warmth and texture for glass coldness |
| Dark Mode Neon | Both operate on dark backgrounds; Neon is electric and edgy where Velvet is warm and intimate |
| Maximalism | Velvet borrows from maximalism’s love of richness but applies it with greater discipline and restraint |
| Grandmillennial | Shares traditional craft and fabric appreciation; Grandmillennial is lighter, more nostalgic, and more patterned |
| Earth Tones | Both value warm, grounded color palettes; Earth Tones are lighter, more muted, and nature-focused |
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Lush Velvet</title>
<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=Playfair+Display:ital,wght@0,400;0,600;0,700;1,400&family=Raleway:wght@300;400;500&display=swap" rel="stylesheet">
<style>
/* ===================================================
LUSH VELVET -- Design System Stylesheet
=================================================== */
:root {
/* Velvet backgrounds */
--velvet-noir: #1A0A12;
--velvet-deep: #2D1225;
--velvet-plum: #4A1942;
--velvet-mauve: #6B1D4A;
/* Jewel tones */
--velvet-ruby: #8B1A3A;
--velvet-amethyst: #6E2C6B;
--velvet-emerald: #1B4D3E;
--velvet-sapphire: #0F3460;
/* Metallics */
--velvet-gold: #D4AF37;
--velvet-champagne: #C9A96E;
--velvet-rose-gold: #B76E79;
/* Text tones */
--velvet-cream: #F5E6D3;
--velvet-ivory: #E8D5C4;
--velvet-taupe: #A89080;
--velvet-bistre: #3D2B1F;
/* Functional aliases */
--bg-primary: var(--velvet-noir);
--bg-surface: var(--velvet-deep);
--bg-elevated: var(--velvet-plum);
--text-primary: var(--velvet-cream);
--text-secondary: var(--velvet-ivory);
--text-muted: var(--velvet-taupe);
--accent-primary: var(--velvet-gold);
--accent-action: var(--velvet-ruby);
--border-subtle: rgba(212, 175, 55, 0.15);
--border-accent: rgba(212, 175, 55, 0.4);
/* Shadows */
--shadow-soft: 0 8px 32px rgba(26, 10, 18, 0.6);
--shadow-pillowed: 0 4px 20px rgba(26, 10, 18, 0.4), 0 1px 4px rgba(26, 10, 18, 0.3);
--shadow-glow: 0 0 30px rgba(139, 26, 58, 0.2);
}
/* ---- Reset ---- */
*, *::before, *::after {
margin: 0;
padding: 0;
box-sizing: border-box;
}
html {
scroll-behavior: smooth;
}
/* ---- Base ---- */
body {
font-family: 'Raleway', 'Helvetica Neue', Arial, sans-serif;
font-weight: 300;
font-size: 1.05rem;
line-height: 1.8;
letter-spacing: 0.03em;
color: var(--text-primary);
background-color: var(--bg-primary);
overflow-x: hidden;
}
/* Velvet texture on body */
body::before {
content: '';
position: fixed;
inset: 0;
background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='0.03'/%3E%3C/svg%3E");
background-repeat: repeat;
background-size: 256px 256px;
pointer-events: none;
z-index: 9999;
}
h1, h2, h3, h4 {
font-family: 'Playfair Display', Georgia, 'Times New Roman', serif;
color: var(--velvet-gold);
font-weight: 400;
letter-spacing: 0.02em;
line-height: 1.2;
}
a {
color: var(--velvet-champagne);
text-decoration: none;
transition: color 0.3s ease;
}
a:hover {
color: var(--velvet-gold);
}
img {
max-width: 100%;
height: auto;
display: block;
}
/* ---- Navigation ---- */
.nav {
display: flex;
align-items: center;
justify-content: space-between;
padding: 1.5rem 3rem;
background: linear-gradient(
180deg,
rgba(26, 10, 18, 0.95) 0%,
rgba(26, 10, 18, 0.85) 100%
);
backdrop-filter: blur(20px);
-webkit-backdrop-filter: blur(20px);
border-bottom: 1px solid var(--border-subtle);
position: sticky;
top: 0;
z-index: 100;
}
.nav-brand {
font-family: 'Playfair Display', serif;
font-size: 1.5rem;
font-weight: 700;
color: var(--velvet-gold);
text-decoration: none;
letter-spacing: 0.05em;
}
.nav-links {
display: flex;
gap: 2.5rem;
list-style: none;
}
.nav-links a {
font-family: 'Raleway', sans-serif;
font-weight: 400;
font-size: 0.82rem;
letter-spacing: 0.14em;
text-transform: uppercase;
color: var(--velvet-ivory);
text-decoration: none;
padding: 0.5rem 0;
position: relative;
}
.nav-links a::after {
content: '';
position: absolute;
bottom: 0;
left: 50%;
width: 0;
height: 1px;
background: var(--velvet-gold);
transition: all 0.3s ease;
transform: translateX(-50%);
}
.nav-links a:hover {
color: var(--velvet-gold);
}
.nav-links a:hover::after {
width: 100%;
}
/* ---- Hero ---- */
.hero {
min-height: 100vh;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
text-align: center;
padding: 6rem 2rem;
position: relative;
overflow: hidden;
background:
radial-gradient(ellipse at 50% 30%, rgba(139, 26, 58, 0.2) 0%, transparent 50%),
radial-gradient(ellipse at 20% 80%, rgba(110, 44, 107, 0.15) 0%, transparent 40%),
radial-gradient(ellipse at 80% 70%, rgba(27, 77, 62, 0.1) 0%, transparent 35%),
var(--bg-primary);
}
.hero::before {
content: '';
position: absolute;
width: 600px;
height: 600px;
border-radius: 50%;
background: radial-gradient(circle, rgba(139, 26, 58, 0.15) 0%, transparent 70%);
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
animation: breathe 8s ease-in-out infinite;
pointer-events: none;
}
@keyframes breathe {
0%, 100% { opacity: 0.5; transform: translate(-50%, -50%) scale(1); }
50% { opacity: 1; transform: translate(-50%, -50%) scale(1.15); }
}
.hero-label {
font-family: 'Raleway', sans-serif;
font-weight: 500;
font-size: 0.75rem;
letter-spacing: 0.25em;
text-transform: uppercase;
color: var(--velvet-champagne);
margin-bottom: 2rem;
position: relative;
z-index: 2;
}
.hero-title {
font-family: 'Playfair Display', serif;
font-size: clamp(3rem, 8vw, 7rem);
font-weight: 700;
line-height: 1.05;
margin-bottom: 1.5rem;
background: linear-gradient(
135deg,
var(--velvet-gold) 0%,
var(--velvet-champagne) 40%,
var(--velvet-gold) 60%,
var(--velvet-rose-gold) 100%
);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
position: relative;
z-index: 2;
}
.hero-subtitle {
font-family: 'Raleway', sans-serif;
font-weight: 300;
font-size: clamp(1rem, 2vw, 1.25rem);
color: var(--velvet-ivory);
max-width: 600px;
margin: 0 auto 3rem;
line-height: 1.8;
position: relative;
z-index: 2;
}
.hero-actions {
display: flex;
gap: 1.5rem;
flex-wrap: wrap;
justify-content: center;
position: relative;
z-index: 2;
}
/* ---- Buttons ---- */
.btn {
font-family: 'Raleway', sans-serif;
font-weight: 500;
font-size: 0.82rem;
letter-spacing: 0.15em;
text-transform: uppercase;
border-radius: 6px;
padding: 1rem 2.5rem;
cursor: pointer;
transition: all 0.35s ease;
text-decoration: none;
display: inline-block;
position: relative;
overflow: hidden;
}
.btn-primary {
color: var(--velvet-cream);
background: linear-gradient(135deg, var(--velvet-ruby) 0%, #A02050 50%, var(--velvet-ruby) 100%);
border: 1px solid rgba(212, 175, 55, 0.3);
}
.btn-primary::after {
content: '';
position: absolute;
top: 0;
left: -100%;
width: 100%;
height: 100%;
background: linear-gradient(90deg, transparent, rgba(212, 175, 55, 0.1), transparent);
transition: left 0.5s ease;
}
.btn-primary:hover {
background: linear-gradient(135deg, #A02050 0%, #B82860 50%, #A02050 100%);
border-color: var(--velvet-gold);
box-shadow: 0 4px 20px rgba(139, 26, 58, 0.4);
transform: translateY(-2px);
color: var(--velvet-cream);
}
.btn-primary:hover::after {
left: 100%;
}
.btn-secondary {
color: var(--velvet-gold);
background: transparent;
border: 1px solid var(--velvet-gold);
}
.btn-secondary:hover {
background: rgba(212, 175, 55, 0.1);
box-shadow: 0 0 20px rgba(212, 175, 55, 0.15);
color: var(--velvet-gold);
}
/* ---- Divider ---- */
.divider {
display: flex;
align-items: center;
justify-content: center;
gap: 1rem;
margin: 0 auto;
max-width: 400px;
padding: 1rem 0;
}
.divider::before,
.divider::after {
content: '';
flex: 1;
height: 1px;
background: linear-gradient(90deg, transparent, var(--velvet-gold), transparent);
}
.divider-diamond {
width: 8px;
height: 8px;
background: var(--velvet-gold);
transform: rotate(45deg);
flex-shrink: 0;
}
/* ---- Sections ---- */
.section {
padding: 6rem 2rem;
position: relative;
}
.section-alt {
background: linear-gradient(
180deg,
var(--bg-primary) 0%,
var(--bg-surface) 20%,
var(--bg-surface) 80%,
var(--bg-primary) 100%
);
}
.container {
max-width: 1100px;
margin: 0 auto;
}
.section-header {
text-align: center;
margin-bottom: 4rem;
}
.section-header h2 {
font-size: clamp(2rem, 4vw, 3rem);
font-weight: 600;
margin-bottom: 1rem;
}
.section-header p {
color: var(--text-secondary);
max-width: 600px;
margin: 0 auto;
font-size: 1.05rem;
}
/* ---- Cards Grid ---- */
.cards-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: 2rem;
}
.card {
background: linear-gradient(145deg, rgba(45, 18, 37, 0.9) 0%, rgba(45, 18, 37, 0.7) 100%);
border: 1px solid var(--border-subtle);
border-radius: 12px;
padding: 2.5rem;
box-shadow: var(--shadow-pillowed);
transition: all 0.4s cubic-bezier(0.25, 0.46, 0.45, 0.94);
position: relative;
overflow: hidden;
}
.card::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
height: 1px;
background: linear-gradient(90deg, transparent 0%, var(--velvet-champagne) 20%, var(--velvet-gold) 50%, var(--velvet-champagne) 80%, transparent 100%);
opacity: 0.4;
}
.card:hover {
transform: translateY(-4px);
box-shadow: var(--shadow-pillowed), var(--shadow-glow);
border-color: var(--border-accent);
}
.card-icon {
font-size: 2rem;
margin-bottom: 1.25rem;
display: block;
}
.card h3 {
font-size: 1.4rem;
font-weight: 600;
margin-bottom: 0.75rem;
color: var(--velvet-gold);
}
.card p {
color: var(--velvet-ivory);
font-size: 0.95rem;
line-height: 1.75;
}
/* ---- Feature Section ---- */
.feature {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 4rem;
align-items: center;
}
.feature-reverse {
direction: rtl;
}
.feature-reverse > * {
direction: ltr;
}
.feature-image {
border-radius: 12px;
border: 1px solid var(--border-subtle);
box-shadow: var(--shadow-pillowed);
overflow: hidden;
aspect-ratio: 4 / 3;
background: linear-gradient(
135deg,
var(--velvet-deep) 0%,
var(--velvet-plum) 50%,
var(--velvet-deep) 100%
);
display: flex;
align-items: center;
justify-content: center;
}
.feature-image-placeholder {
font-family: 'Playfair Display', serif;
font-size: 3rem;
font-style: italic;
color: var(--velvet-mauve);
opacity: 0.6;
}
.feature-content h2 {
font-size: clamp(1.8rem, 3vw, 2.5rem);
font-weight: 600;
margin-bottom: 1.25rem;
text-align: left;
}
.feature-content p {
color: var(--velvet-ivory);
margin-bottom: 1.5rem;
line-height: 1.8;
}
.feature-content .label {
font-family: 'Raleway', sans-serif;
font-weight: 500;
font-size: 0.72rem;
letter-spacing: 0.2em;
text-transform: uppercase;
color: var(--velvet-rose-gold);
margin-bottom: 0.75rem;
display: block;
}
/* ---- Testimonial / Quote ---- */
.quote-section {
text-align: center;
padding: 6rem 2rem;
background:
radial-gradient(ellipse at 50% 50%, rgba(110, 44, 107, 0.1) 0%, transparent 50%),
var(--bg-primary);
}
blockquote {
font-family: 'Playfair Display', serif;
font-size: clamp(1.5rem, 3vw, 2.2rem);
font-weight: 400;
font-style: italic;
color: var(--velvet-cream);
max-width: 800px;
margin: 0 auto 2rem;
line-height: 1.5;
position: relative;
}
blockquote::before {
content: '\201C';
font-family: 'Playfair Display', serif;
font-size: 5rem;
color: var(--velvet-gold);
opacity: 0.3;
position: absolute;
top: -2rem;
left: -1.5rem;
line-height: 1;
}
.quote-author {
font-family: 'Raleway', sans-serif;
font-weight: 400;
font-size: 0.85rem;
letter-spacing: 0.12em;
text-transform: uppercase;
color: var(--velvet-champagne);
}
/* ---- Color Swatches Demo ---- */
.swatches {
display: flex;
flex-wrap: wrap;
gap: 1rem;
justify-content: center;
margin-top: 2rem;
}
.swatch {
width: 80px;
height: 80px;
border-radius: 50%;
border: 2px solid var(--border-subtle);
box-shadow: var(--shadow-pillowed);
transition: transform 0.3s ease, box-shadow 0.3s ease;
position: relative;
}
.swatch:hover {
transform: scale(1.15);
box-shadow: var(--shadow-pillowed), var(--shadow-glow);
}
.swatch-label {
text-align: center;
margin-top: 0.5rem;
font-size: 0.7rem;
letter-spacing: 0.1em;
text-transform: uppercase;
color: var(--text-muted);
}
.swatch-item {
display: flex;
flex-direction: column;
align-items: center;
}
/* ---- Footer ---- */
.footer {
padding: 4rem 2rem 2rem;
border-top: 1px solid var(--border-subtle);
text-align: center;
background: var(--bg-primary);
}
.footer-brand {
font-family: 'Playfair Display', serif;
font-size: 1.8rem;
font-weight: 700;
color: var(--velvet-gold);
margin-bottom: 1rem;
}
.footer p {
color: var(--text-muted);
font-size: 0.9rem;
margin-bottom: 2rem;
}
.footer-links {
display: flex;
justify-content: center;
gap: 2rem;
list-style: none;
margin-bottom: 3rem;
}
.footer-links a {
font-size: 0.8rem;
letter-spacing: 0.1em;
text-transform: uppercase;
color: var(--velvet-ivory);
}
.footer-links a:hover {
color: var(--velvet-gold);
}
.footer-bottom {
padding-top: 2rem;
border-top: 1px solid var(--border-subtle);
font-size: 0.8rem;
color: var(--text-muted);
}
/* ---- Responsive ---- */
@media (max-width: 768px) {
.nav {
padding: 1rem 1.5rem;
}
.nav-links {
gap: 1.25rem;
}
.nav-links a {
font-size: 0.72rem;
}
.hero {
padding: 4rem 1.5rem;
}
.section {
padding: 4rem 1.5rem;
}
.feature {
grid-template-columns: 1fr;
gap: 2rem;
}
.feature-reverse {
direction: ltr;
}
.cards-grid {
grid-template-columns: 1fr;
}
.hero-actions {
flex-direction: column;
align-items: center;
}
}
</style>
</head>
<body>
<!-- Navigation -->
<nav class="nav">
<a href="#" class="nav-brand">Velour</a>
<ul class="nav-links">
<li><a href="#collection">Collection</a></li>
<li><a href="#about">About</a></li>
<li><a href="#palette">Palette</a></li>
<li><a href="#contact">Contact</a></li>
</ul>
</nav>
<!-- Hero Section -->
<section class="hero">
<span class="hero-label">Curated Luxury Experiences</span>
<h1 class="hero-title">Lush Velvet</h1>
<p class="hero-subtitle">
Rich textured surfaces, deep jewel tones, and tactile depth
woven into every detail. An aesthetic that invites you to linger.
</p>
<div class="hero-actions">
<a href="#collection" class="btn btn-primary">Explore Collection</a>
<a href="#about" class="btn btn-secondary">Our Story</a>
</div>
</section>
<!-- Divider -->
<div class="divider">
<span class="divider-diamond"></span>
</div>
<!-- Cards Section -->
<section id="collection" class="section">
<div class="container">
<div class="section-header">
<h2>The Collection</h2>
<p>Each piece is crafted with intention, layered with meaning, and finished with the reverence that fine materials deserve.</p>
</div>
<div class="cards-grid">
<div class="card">
<span class="card-icon">♦</span>
<h3>Ruby Parlour</h3>
<p>Deep crimson surfaces that absorb light and release warmth. A space designed for intimate conversations and quiet confidence.</p>
</div>
<div class="card">
<span class="card-icon">♣</span>
<h3>Emerald Chamber</h3>
<p>Forest depths translated into fabric and form. Cool jewel tones balanced with gold accents create grounding sophistication.</p>
</div>
<div class="card">
<span class="card-icon">♥</span>
<h3>Amethyst Suite</h3>
<p>Purple twilight captured in plush surfaces. Where the boundary between comfort and artistry dissolves entirely.</p>
</div>
</div>
</div>
</section>
<!-- Feature Section 1 -->
<section id="about" class="section section-alt">
<div class="container">
<div class="feature">
<div class="feature-image">
<span class="feature-image-placeholder">I</span>
</div>
<div class="feature-content">
<span class="label">Our Philosophy</span>
<h2>Texture as Language</h2>
<p>
We believe that surfaces speak. The way light falls across
crushed velvet, the depth that emerges when jewel tones meet
shadow -- these are not mere decoration but a vocabulary of
sensation and meaning.
</p>
<p>
Every element in our design system carries tactile weight.
Backgrounds breathe with subtle grain. Cards lift with
pillowed shadows. Colors shift like fabric under changing light.
</p>
<a href="#" class="btn btn-primary">Learn More</a>
</div>
</div>
</div>
</section>
<!-- Divider -->
<div class="divider">
<span class="divider-diamond"></span>
</div>
<!-- Feature Section 2 -->
<section class="section">
<div class="container">
<div class="feature feature-reverse">
<div class="feature-image">
<span class="feature-image-placeholder">II</span>
</div>
<div class="feature-content">
<span class="label">The Details</span>
<h2>Gold as Punctuation</h2>
<p>
Metallic accents are never wallpaper -- they are jewelry.
A thin gold rule here, a champagne highlight there. Each
gleaming detail earns its place through restraint, making
the moments of shimmer all the more precious.
</p>
<p>
This is luxury through discipline. Richness through
depth of material, not quantity of ornament.
</p>
<a href="#" class="btn btn-secondary">View Details</a>
</div>
</div>
</div>
</section>
<!-- Quote Section -->
<section class="quote-section">
<div class="container">
<blockquote>
Luxury is not about the price tag. It is about the feeling
of surfaces that have been considered, of colors steeped
until they reach their truest depth.
</blockquote>
<span class="quote-author">The Velour Atelier</span>
</div>
</section>
<!-- Color Palette Section -->
<section id="palette" class="section section-alt">
<div class="container">
<div class="section-header">
<h2>The Palette</h2>
<p>Jewel tones drawn from precious stones, warmed by candlelight, and deepened by shadow.</p>
</div>
<div class="swatches">
<div class="swatch-item">
<div class="swatch" style="background: #1A0A12;"></div>
<span class="swatch-label">Noir</span>
</div>
<div class="swatch-item">
<div class="swatch" style="background: #2D1225;"></div>
<span class="swatch-label">Deep</span>
</div>
<div class="swatch-item">
<div class="swatch" style="background: #4A1942;"></div>
<span class="swatch-label">Plum</span>
</div>
<div class="swatch-item">
<div class="swatch" style="background: #8B1A3A;"></div>
<span class="swatch-label">Ruby</span>
</div>
<div class="swatch-item">
<div class="swatch" style="background: #6E2C6B;"></div>
<span class="swatch-label">Amethyst</span>
</div>
<div class="swatch-item">
<div class="swatch" style="background: #1B4D3E;"></div>
<span class="swatch-label">Emerald</span>
</div>
<div class="swatch-item">
<div class="swatch" style="background: #0F3460;"></div>
<span class="swatch-label">Sapphire</span>
</div>
<div class="swatch-item">
<div class="swatch" style="background: #D4AF37;"></div>
<span class="swatch-label">Gold</span>
</div>
<div class="swatch-item">
<div class="swatch" style="background: #C9A96E;"></div>
<span class="swatch-label">Champagne</span>
</div>
<div class="swatch-item">
<div class="swatch" style="background: #B76E79;"></div>
<span class="swatch-label">Rose Gold</span>
</div>
</div>
</div>
</section>
<!-- Footer -->
<footer id="contact" class="footer">
<div class="container">
<div class="footer-brand">Velour</div>
<p>Rich textured velvet luxury. Deep jewel tones, tactile depth, sensuous surfaces.</p>
<ul class="footer-links">
<li><a href="#">Collection</a></li>
<li><a href="#">About</a></li>
<li><a href="#">Contact</a></li>
<li><a href="#">Press</a></li>
</ul>
<div class="footer-bottom">
Lush Velvet Design System — A study in tactile digital luxury
</div>
</div>
</footer>
</body>
</html>
feTurbulence with fractalNoise type, baseFrequency around 0.8–1.0, and very low opacity (0.02–0.04) to simulate fabric grain without muddying the designbackground-clip: text technique can appear differently across displays; ensure sufficient contrast by keeping the gradient range narrow (gold to champagne) and providing a solid color fallback for browsers that do not support gradient textcubic-bezier(0.25, 0.46, 0.45, 0.94) for hover transitions over simple ease or linear – this curve produces a weighted, physical-feeling motion that suggests mass and resistance, reinforcing the tactile quality of the aestheticbackdrop-filter: blur() on elevated surfaces (navigation, modals, overlay cards) to create frosted velvet depth; pair with a semi-transparent background that inherits the warm plum/burgundy tone so the blur reads as fabric rather than glassclamp() for all typographic sizing to maintain elegant proportions across breakpoints without abrupt media-query jumps – the luxury feel depends on smooth, continuous scaling that never appears cramped or oversized#F5E6D3) against the noir background (#1A0A12) achieves approximately 12:1 contrast, but always verify interactive elements and muted text colors meet at least 4.5:1 for normal text