Luxury Minimalism is a refined digital design aesthetic that distills high-end branding into its purest visual expression. Rather than communicating premium value through ornamentation or excess, it achieves prestige through editorial restraint, impeccable typography, and the strategic deployment of whitespace. Every element that appears on the page has earned its place through a rigorous curation process – if something does not serve the message, it does not exist. The result is a design language that feels simultaneously effortless and deeply intentional, mirroring the “quiet luxury” philosophy that has come to define modern premium branding.
The aesthetic draws from the visual traditions of high-fashion editorial design, fine-art gallery spaces, and luxury print advertising. Brands such as Celine, Bottega Veneta, The Row, and Aesop have championed this approach – stripping away logos, reducing palettes to carefully calibrated neutrals, and allowing generous negative space to communicate confidence. In web design, this translates to layouts that breathe, typographic hierarchies that guide without shouting, and color palettes built on warm ivories, soft taupes, deep charcoals, and carefully placed metallic accents. The philosophy is clear: brands that do not over-explain feel more expensive, and luxury audiences trust brands that visually curate their world.
Typography is the structural backbone of Luxury Minimalism. Headlines favor refined serif typefaces with classical proportions – fonts that carry the weight of tradition without feeling heavy. Body text employs clean, light-weight sans-serifs with generous line-height and letter-spacing, creating a reading experience that feels open and unhurried. The contrast between serif and sans-serif is not decorative; it is architectural, establishing a clear hierarchy that allows content to speak with quiet authority.
The defining characteristic of Luxury Minimalism is its discipline. Where maximalist aesthetics fill every surface with stimulation, Luxury Minimalism understands that restraint is the ultimate expression of confidence. A single perfectly set headline on a field of warm white conveys more authority than a page crowded with competing elements. Texture is introduced through typography, through the quality of photography, and through subtle material cues – not through pattern or decoration. The overall effect is one of serene, unhurried sophistication: a design that invites the viewer to slow down, to notice the details, and to appreciate the craft behind the apparent simplicity.
Luxury Minimalism palettes are built on a foundation of warm neutrals – not stark, cold whites but carefully calibrated creams, ivories, and taupes that feel organic and inviting. The dark end of the spectrum uses charcoals and near-blacks with warm undertones rather than pure black. Accent colors are used with extreme restraint: a single muted gold, a deep olive, or a soft blush introduced at key moments to create focal points without disrupting the tonal harmony. The overall impression is one of natural, understated richness – colors you might find in raw linen, unbleached paper, aged marble, or brushed stone.
| Swatch | Hex | Role / Usage |
|---|---|---|
| Parchment | #FAF7F2 |
Primary background, page base, content areas |
| Warm White | #F5F1EB |
Section backgrounds, card surfaces, modal overlays |
| Ivory | #EFEBE4 |
Alternate section backgrounds, subtle contrast panels |
| Linen | #E8E2D9 |
Dividers, border fills, muted background accents |
| Sandstone | #D4CBC0 |
Disabled states, placeholder text, subtle separators |
| Warm Taupe | #B0A89E |
Secondary text, captions, metadata, timestamps |
| Stone | #8A837B |
Tertiary text, muted labels, inactive navigation |
| Charcoal | #3D3A37 |
Primary text, headings, high-emphasis body copy |
| Deep Charcoal | #2A2826 |
Display headlines, hero text, maximum contrast |
| Near Black | #1A1918 |
Footer backgrounds, dark section inversions |
| Champagne | #C9B98F |
Primary accent, decorative borders, highlight details |
| Muted Gold | #B89D62 |
Hover accents, active states, premium indicators |
| Sage | #88856A |
Secondary accent, tags, subtle emphasis |
| Blush | #C9ADA7 |
Tertiary accent, feminine warmth, soft callouts |
| Deep Olive | #5C5A47 |
Dark accent, footer text highlights, badge tones |
:root {
/* Warm neutral foundations */
--lm-parchment: #faf7f2;
--lm-warm-white: #f5f1eb;
--lm-ivory: #efebe4;
--lm-linen: #e8e2d9;
--lm-sandstone: #d4cbc0;
/* Text tones */
--lm-taupe: #b0a89e;
--lm-stone: #8a837b;
--lm-charcoal: #3d3a37;
--lm-deep-charcoal: #2a2826;
--lm-near-black: #1a1918;
/* Accents */
--lm-champagne: #c9b98f;
--lm-gold: #b89d62;
--lm-sage: #88856a;
--lm-blush: #c9ada7;
--lm-olive: #5c5a47;
/* Functional mappings */
--lm-bg-primary: var(--lm-parchment);
--lm-bg-surface: var(--lm-warm-white);
--lm-bg-elevated: var(--lm-ivory);
--lm-bg-invert: var(--lm-near-black);
--lm-text-primary: var(--lm-charcoal);
--lm-text-secondary: var(--lm-taupe);
--lm-text-heading: var(--lm-deep-charcoal);
--lm-accent: var(--lm-champagne);
--lm-accent-hover: var(--lm-gold);
--lm-border: var(--lm-linen);
--lm-border-subtle: var(--lm-ivory);
/* Shadows -- warm undertone */
--lm-shadow-sm: 0 1px 3px rgba(58, 54, 50, 0.06);
--lm-shadow-md: 0 4px 16px rgba(58, 54, 50, 0.08);
--lm-shadow-lg: 0 8px 40px rgba(58, 54, 50, 0.10);
--lm-shadow-xl: 0 16px 64px rgba(58, 54, 50, 0.12);
}
Luxury Minimalism typography draws from the editorial traditions of high-end fashion magazines, museum catalogues, and premium brand identity systems. Headlines use refined serif typefaces with classical proportions – fonts that carry the gravitas of centuries of typographic craft without appearing ornate. Body text relies on clean, humanist or geometric sans-serifs set at lighter weights with generous line-height and tracking, creating a reading experience that feels airy, considered, and unhurried. The interplay between serif and sans-serif is the primary source of visual contrast and hierarchy – a controlled tension between tradition and modernity that defines the aesthetic.
| Font | Style | Best For |
|---|---|---|
| Cormorant Garamond | Elegant, refined display serif | Headlines, hero text, pull quotes |
| Playfair Display | High-contrast transitional serif | Feature headings, editorial titles |
| Libre Baskerville | Classical serif, excellent screen rendering | Subheadings, blockquotes, secondary headings |
| Spectral | Modern serif designed for screens | Long-form body text, editorial articles |
| DM Serif Display | Warm, approachable display serif | Hero headlines, brand statements |
| Inter | Clean, modern sans-serif | Body text, navigation, UI elements |
| Jost | Geometric sans with humanist warmth | Subheadings, buttons, form labels |
| Outfit | Contemporary geometric sans | Navigation, captions, metadata |
| Lato | Humanist sans-serif, warm neutrality | Body copy, descriptions, long-form text |
| Raleway | Elegant thin geometric sans | Uppercase labels, tracking-heavy elements |
| Heading Font | Body Font | Character |
|---|---|---|
| Cormorant Garamond (500/600) | Inter (300/400) | Refined editorial elegance, modern readability |
| Playfair Display (400/700) | Lato (300/400) | Classic luxury publishing, warm and approachable |
| DM Serif Display (400) | Jost (300/400) | Contemporary premium, clean and inviting |
| Libre Baskerville (400/700) | Outfit (300/400) | Understated heritage luxury, crisp interface |
| Cormorant Garamond (600) | Raleway (300) | High-fashion editorial, maximum typographic contrast |
@import url('https://fonts.googleapis.com/css2?family=Cormorant+Garamond:ital,wght@0,400;0,500;0,600;0,700;1,400;1,500&family=Inter:wght@300;400;500&family=Raleway:wght@300;400;500&display=swap');
h1, h2, h3, h4, h5, h6 {
font-family: 'Cormorant Garamond', 'Georgia', serif;
font-weight: 500;
color: var(--lm-text-heading);
line-height: 1.15;
letter-spacing: -0.01em;
}
h1 {
font-size: clamp(2.75rem, 6vw, 5rem);
font-weight: 400;
line-height: 1.05;
letter-spacing: -0.02em;
}
h2 {
font-size: clamp(2rem, 4vw, 3.25rem);
font-weight: 500;
}
h3 {
font-size: clamp(1.5rem, 2.5vw, 2rem);
font-weight: 600;
}
body {
font-family: 'Inter', 'Helvetica Neue', sans-serif;
font-weight: 300;
font-size: 1rem;
line-height: 1.85;
color: var(--lm-text-primary);
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
/* Uppercase label style -- navigation, categories, metadata */
.lm-label {
font-family: 'Inter', sans-serif;
font-weight: 400;
font-size: 0.7rem;
letter-spacing: 0.18em;
text-transform: uppercase;
color: var(--lm-taupe);
}
/* Pull quote style */
.lm-quote {
font-family: 'Cormorant Garamond', serif;
font-style: italic;
font-weight: 400;
font-size: 1.75rem;
color: var(--lm-stone);
line-height: 1.5;
letter-spacing: 0.01em;
}
/* Display headline -- oversized hero text */
.lm-display {
font-family: 'Cormorant Garamond', serif;
font-size: clamp(3.5rem, 8vw, 7rem);
font-weight: 300;
line-height: 1.0;
letter-spacing: -0.03em;
color: var(--lm-deep-charcoal);
}
/* Accent tracking for brand details */
.lm-tracked {
font-family: 'Raleway', sans-serif;
font-weight: 400;
font-size: 0.65rem;
letter-spacing: 0.25em;
text-transform: uppercase;
color: var(--lm-champagne);
}
.lm-card {
background: var(--lm-bg-surface);
border: 1px solid var(--lm-border-subtle);
padding: 48px 40px;
position: relative;
transition: box-shadow 0.5s ease, border-color 0.5s ease;
}
.lm-card:hover {
border-color: var(--lm-sandstone);
box-shadow: var(--lm-shadow-lg);
}
.lm-card__label {
font-family: 'Inter', sans-serif;
font-weight: 400;
font-size: 0.65rem;
letter-spacing: 0.2em;
text-transform: uppercase;
color: var(--lm-taupe);
margin-bottom: 20px;
}
.lm-card__title {
font-family: 'Cormorant Garamond', serif;
font-size: 1.75rem;
font-weight: 500;
color: var(--lm-text-heading);
margin-bottom: 16px;
line-height: 1.25;
}
.lm-card__text {
font-family: 'Inter', sans-serif;
font-weight: 300;
font-size: 0.95rem;
line-height: 1.75;
color: var(--lm-stone);
}
.lm-card__link {
display: inline-block;
margin-top: 24px;
font-family: 'Inter', sans-serif;
font-weight: 400;
font-size: 0.7rem;
letter-spacing: 0.18em;
text-transform: uppercase;
color: var(--lm-charcoal);
text-decoration: none;
border-bottom: 1px solid var(--lm-champagne);
padding-bottom: 2px;
transition: color 0.3s ease, border-color 0.3s ease;
}
.lm-card__link:hover {
color: var(--lm-gold);
border-color: var(--lm-gold);
}
/* Primary button -- outlined, minimal */
.lm-btn {
display: inline-flex;
align-items: center;
justify-content: center;
background: transparent;
color: var(--lm-charcoal);
border: 1px solid var(--lm-charcoal);
padding: 14px 40px;
font-family: 'Inter', sans-serif;
font-weight: 400;
font-size: 0.7rem;
letter-spacing: 0.2em;
text-transform: uppercase;
text-decoration: none;
cursor: pointer;
transition: background 0.4s ease, color 0.4s ease, border-color 0.4s ease;
}
.lm-btn:hover {
background: var(--lm-charcoal);
color: var(--lm-parchment);
}
/* Secondary button -- champagne accent border */
.lm-btn--secondary {
border-color: var(--lm-champagne);
color: var(--lm-stone);
}
.lm-btn--secondary:hover {
background: var(--lm-champagne);
color: var(--lm-near-black);
border-color: var(--lm-champagne);
}
/* Inverted button for dark backgrounds */
.lm-btn--invert {
border-color: var(--lm-parchment);
color: var(--lm-parchment);
}
.lm-btn--invert:hover {
background: var(--lm-parchment);
color: var(--lm-near-black);
}
/* Text-only button with underline */
.lm-btn--text {
border: none;
padding: 0;
font-family: 'Inter', sans-serif;
font-weight: 400;
font-size: 0.7rem;
letter-spacing: 0.18em;
text-transform: uppercase;
color: var(--lm-charcoal);
background: transparent;
cursor: pointer;
position: relative;
}
.lm-btn--text::after {
content: '';
position: absolute;
bottom: -2px;
left: 0;
width: 100%;
height: 1px;
background: var(--lm-champagne);
transform: scaleX(0);
transform-origin: right;
transition: transform 0.4s ease;
}
.lm-btn--text:hover::after {
transform: scaleX(1);
transform-origin: left;
}
.lm-nav {
position: fixed;
top: 0;
left: 0;
right: 0;
z-index: 100;
display: flex;
align-items: center;
justify-content: space-between;
padding: 24px 5vw;
background: rgba(250, 247, 242, 0.92);
backdrop-filter: blur(12px);
-webkit-backdrop-filter: blur(12px);
border-bottom: 1px solid var(--lm-border-subtle);
transition: padding 0.4s ease, background 0.4s ease;
}
.lm-nav--scrolled {
padding: 16px 5vw;
background: rgba(250, 247, 242, 0.97);
box-shadow: var(--lm-shadow-sm);
}
.lm-nav__logo {
font-family: 'Cormorant Garamond', serif;
font-size: 1.25rem;
font-weight: 600;
color: var(--lm-text-heading);
text-decoration: none;
letter-spacing: 0.05em;
}
.lm-nav__links {
display: flex;
align-items: center;
gap: 36px;
list-style: none;
margin: 0;
padding: 0;
}
.lm-nav__link {
font-family: 'Inter', sans-serif;
font-weight: 400;
font-size: 0.65rem;
letter-spacing: 0.2em;
text-transform: uppercase;
color: var(--lm-stone);
text-decoration: none;
position: relative;
transition: color 0.3s ease;
}
.lm-nav__link:hover {
color: var(--lm-charcoal);
}
.lm-nav__link::after {
content: '';
position: absolute;
bottom: -4px;
left: 0;
width: 100%;
height: 1px;
background: var(--lm-champagne);
transform: scaleX(0);
transform-origin: right;
transition: transform 0.4s ease;
}
.lm-nav__link:hover::after {
transform: scaleX(1);
transform-origin: left;
}
.lm-hero {
display: flex;
align-items: center;
justify-content: center;
min-height: 100vh;
padding: 120px 5vw;
text-align: center;
background: var(--lm-bg-primary);
position: relative;
}
.lm-hero__content {
max-width: 800px;
}
.lm-hero__label {
font-family: 'Inter', sans-serif;
font-weight: 400;
font-size: 0.65rem;
letter-spacing: 0.3em;
text-transform: uppercase;
color: var(--lm-champagne);
margin-bottom: 32px;
}
.lm-hero__title {
font-family: 'Cormorant Garamond', serif;
font-size: clamp(3rem, 8vw, 6.5rem);
font-weight: 300;
line-height: 1.05;
letter-spacing: -0.02em;
color: var(--lm-deep-charcoal);
margin-bottom: 32px;
}
.lm-hero__subtitle {
font-family: 'Inter', sans-serif;
font-weight: 300;
font-size: 1.05rem;
line-height: 1.8;
color: var(--lm-stone);
max-width: 540px;
margin: 0 auto 48px;
}
/* Hairline accent below hero */
.lm-hero::after {
content: '';
position: absolute;
bottom: 0;
left: 50%;
transform: translateX(-50%);
width: 60px;
height: 1px;
background: var(--lm-champagne);
}
.lm-editorial {
display: grid;
grid-template-columns: 1.2fr 1fr;
gap: 0;
min-height: 80vh;
align-items: center;
}
.lm-editorial--reverse {
grid-template-columns: 1fr 1.2fr;
}
.lm-editorial__image {
width: 100%;
height: 100%;
object-fit: cover;
display: block;
filter: saturate(0.85) contrast(1.02);
}
.lm-editorial__content {
padding: 80px 72px;
max-width: 520px;
}
.lm-editorial--reverse .lm-editorial__content {
margin-left: auto;
}
.lm-editorial__label {
font-family: 'Inter', sans-serif;
font-weight: 400;
font-size: 0.65rem;
letter-spacing: 0.2em;
text-transform: uppercase;
color: var(--lm-champagne);
margin-bottom: 24px;
}
.lm-editorial__title {
font-family: 'Cormorant Garamond', serif;
font-size: clamp(2rem, 3vw, 2.75rem);
font-weight: 500;
line-height: 1.2;
color: var(--lm-text-heading);
margin-bottom: 24px;
}
.lm-editorial__text {
font-family: 'Inter', sans-serif;
font-weight: 300;
font-size: 0.95rem;
line-height: 1.85;
color: var(--lm-stone);
margin-bottom: 32px;
}
@media (max-width: 768px) {
.lm-editorial,
.lm-editorial--reverse {
grid-template-columns: 1fr;
}
.lm-editorial__content {
padding: 48px 24px;
}
}
.lm-divider {
width: 60px;
height: 1px;
background: var(--lm-champagne);
margin: 0 auto;
border: none;
}
.lm-divider--wide {
width: 120px;
}
.lm-divider--full {
width: 100%;
background: var(--lm-border);
}
.lm-divider--left {
margin: 0;
}
.lm-reveal {
opacity: 0;
transform: translateY(24px);
transition: opacity 0.8s cubic-bezier(0.25, 0.46, 0.45, 0.94),
transform 0.8s cubic-bezier(0.25, 0.46, 0.45, 0.94);
}
.lm-reveal--visible {
opacity: 1;
transform: translateY(0);
}
.lm-reveal--delay-1 { transition-delay: 0.1s; }
.lm-reveal--delay-2 { transition-delay: 0.2s; }
.lm-reveal--delay-3 { transition-delay: 0.3s; }
.lm-reveal--delay-4 { transition-delay: 0.4s; }
/* Stagger children within a grid */
.lm-reveal-stagger > * {
opacity: 0;
transform: translateY(20px);
transition: opacity 0.6s ease, transform 0.6s ease;
}
.lm-reveal-stagger--visible > *:nth-child(1) { transition-delay: 0.05s; }
.lm-reveal-stagger--visible > *:nth-child(2) { transition-delay: 0.15s; }
.lm-reveal-stagger--visible > *:nth-child(3) { transition-delay: 0.25s; }
.lm-reveal-stagger--visible > *:nth-child(4) { transition-delay: 0.35s; }
.lm-reveal-stagger--visible > * {
opacity: 1;
transform: translateY(0);
}
.lm-section--dark {
background: var(--lm-bg-invert);
color: var(--lm-parchment);
padding: 120px 5vw;
}
.lm-section--dark h2,
.lm-section--dark h3 {
color: var(--lm-warm-white);
}
.lm-section--dark p {
color: var(--lm-sandstone);
}
.lm-section--dark .lm-label {
color: var(--lm-champagne);
}
.lm-section--dark .lm-divider {
background: var(--lm-champagne);
opacity: 0.5;
}
.lm-section--dark .lm-card {
background: rgba(255, 255, 255, 0.04);
border-color: rgba(255, 255, 255, 0.08);
}
.lm-section--dark .lm-card:hover {
border-color: rgba(201, 185, 143, 0.3);
}
| Aesthetic | Relationship |
|---|---|
| Dark Luxe | Shares premium positioning and refined typography; inverts the palette to dark foundations with metallic accents |
| Editorial Magazine Layout | Shares asymmetric compositions, typographic hierarchy, and image-text pairings; more content-dense |
| Swiss / International Typographic | Shares emphasis on typographic structure and grid systems; more rigid and systematic, less warm |
| Japandi | Shares appreciation for simplicity, natural materials, and restrained palettes; adds Japanese wabi-sabi warmth |
| Scandinavian Minimal | Shares light palettes and clean layouts; more functional and democratic, less explicitly luxurious |
| Art Deco | Shares luxury positioning; differs dramatically in use of geometric ornamentation and metallic excess |
| Quiet Luxury / Old Money | The fashion-world equivalent; translates directly to web as Luxury Minimalism with its emphasis on understatement |
| Clean Corporate | Shares minimal layouts but prioritizes conversion and utility over editorial beauty and atmosphere |
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Luxury Minimalism -- Template</title>
<!-- Google Fonts -->
<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=Cormorant+Garamond:ital,wght@0,300;0,400;0,500;0,600;0,700;1,400;1,500&family=Inter:wght@300;400;500&family=Raleway:wght@300;400;500&display=swap" rel="stylesheet">
<style>
/* ============================================
CSS Custom Properties
============================================ */
:root {
/* Warm neutral foundations */
--lm-parchment: #faf7f2;
--lm-warm-white: #f5f1eb;
--lm-ivory: #efebe4;
--lm-linen: #e8e2d9;
--lm-sandstone: #d4cbc0;
/* Text tones */
--lm-taupe: #b0a89e;
--lm-stone: #8a837b;
--lm-charcoal: #3d3a37;
--lm-deep-charcoal: #2a2826;
--lm-near-black: #1a1918;
/* Accents */
--lm-champagne: #c9b98f;
--lm-gold: #b89d62;
--lm-sage: #88856a;
--lm-blush: #c9ada7;
--lm-olive: #5c5a47;
/* Functional */
--lm-bg-primary: var(--lm-parchment);
--lm-bg-surface: var(--lm-warm-white);
--lm-bg-elevated: var(--lm-ivory);
--lm-bg-invert: var(--lm-near-black);
--lm-text-primary: var(--lm-charcoal);
--lm-text-secondary: var(--lm-taupe);
--lm-text-heading: var(--lm-deep-charcoal);
--lm-accent: var(--lm-champagne);
--lm-accent-hover: var(--lm-gold);
--lm-border: var(--lm-linen);
--lm-border-subtle: var(--lm-ivory);
/* Shadows */
--lm-shadow-sm: 0 1px 3px rgba(58, 54, 50, 0.06);
--lm-shadow-md: 0 4px 16px rgba(58, 54, 50, 0.08);
--lm-shadow-lg: 0 8px 40px rgba(58, 54, 50, 0.10);
}
/* ============================================
Reset & Base
============================================ */
*, *::before, *::after {
margin: 0;
padding: 0;
box-sizing: border-box;
}
html {
scroll-behavior: smooth;
font-size: 16px;
}
body {
font-family: 'Inter', 'Helvetica Neue', sans-serif;
font-weight: 300;
font-size: 1rem;
line-height: 1.85;
color: var(--lm-text-primary);
background: var(--lm-bg-primary);
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
img {
max-width: 100%;
height: auto;
display: block;
}
a {
color: inherit;
text-decoration: none;
}
/* ============================================
Typography
============================================ */
h1, h2, h3, h4, h5, h6 {
font-family: 'Cormorant Garamond', 'Georgia', serif;
font-weight: 500;
color: var(--lm-text-heading);
line-height: 1.15;
}
h1 {
font-size: clamp(3rem, 8vw, 6.5rem);
font-weight: 300;
line-height: 1.05;
letter-spacing: -0.02em;
}
h2 {
font-size: clamp(2rem, 4vw, 3.25rem);
}
h3 {
font-size: clamp(1.5rem, 2.5vw, 2rem);
font-weight: 600;
}
p {
margin-bottom: 1.5em;
}
.label {
font-family: 'Inter', sans-serif;
font-weight: 400;
font-size: 0.65rem;
letter-spacing: 0.25em;
text-transform: uppercase;
color: var(--lm-taupe);
}
.label--accent {
color: var(--lm-champagne);
}
.tracked {
font-family: 'Raleway', sans-serif;
font-weight: 400;
font-size: 0.65rem;
letter-spacing: 0.25em;
text-transform: uppercase;
color: var(--lm-champagne);
}
blockquote {
font-family: 'Cormorant Garamond', serif;
font-style: italic;
font-weight: 400;
font-size: 1.75rem;
color: var(--lm-stone);
line-height: 1.5;
border-left: 1px solid var(--lm-champagne);
padding-left: 32px;
margin: 48px 0;
}
/* ============================================
Layout Utilities
============================================ */
.container {
max-width: 1040px;
margin: 0 auto;
padding: 0 5vw;
}
.container--narrow {
max-width: 720px;
}
.container--wide {
max-width: 1280px;
}
.section {
padding: 120px 0;
}
.section--sm {
padding: 80px 0;
}
.text-center {
text-align: center;
}
.divider {
width: 60px;
height: 1px;
background: var(--lm-champagne);
border: none;
margin: 0 auto;
}
/* ============================================
Navigation
============================================ */
.nav {
position: fixed;
top: 0;
left: 0;
right: 0;
z-index: 100;
display: flex;
align-items: center;
justify-content: space-between;
padding: 28px 5vw;
background: rgba(250, 247, 242, 0.9);
backdrop-filter: blur(12px);
-webkit-backdrop-filter: blur(12px);
transition: padding 0.4s ease;
}
.nav--scrolled {
padding: 16px 5vw;
border-bottom: 1px solid var(--lm-border-subtle);
}
.nav__logo {
font-family: 'Cormorant Garamond', serif;
font-size: 1.3rem;
font-weight: 600;
color: var(--lm-text-heading);
letter-spacing: 0.05em;
}
.nav__links {
display: flex;
align-items: center;
gap: 40px;
list-style: none;
}
.nav__link {
font-family: 'Inter', sans-serif;
font-weight: 400;
font-size: 0.65rem;
letter-spacing: 0.2em;
text-transform: uppercase;
color: var(--lm-stone);
position: relative;
transition: color 0.3s ease;
}
.nav__link:hover {
color: var(--lm-charcoal);
}
.nav__link::after {
content: '';
position: absolute;
bottom: -4px;
left: 0;
width: 100%;
height: 1px;
background: var(--lm-champagne);
transform: scaleX(0);
transform-origin: right;
transition: transform 0.4s ease;
}
.nav__link:hover::after {
transform: scaleX(1);
transform-origin: left;
}
/* ============================================
Hero
============================================ */
.hero {
display: flex;
align-items: center;
justify-content: center;
min-height: 100vh;
padding: 120px 5vw;
text-align: center;
position: relative;
}
.hero__content {
max-width: 780px;
}
.hero__label {
margin-bottom: 32px;
}
.hero__title {
margin-bottom: 32px;
}
.hero__subtitle {
font-weight: 300;
font-size: 1.05rem;
line-height: 1.85;
color: var(--lm-stone);
max-width: 520px;
margin: 0 auto 48px;
}
.hero::after {
content: '';
position: absolute;
bottom: 0;
left: 50%;
transform: translateX(-50%);
width: 60px;
height: 1px;
background: var(--lm-champagne);
}
/* ============================================
Buttons
============================================ */
.btn {
display: inline-flex;
align-items: center;
justify-content: center;
background: transparent;
color: var(--lm-charcoal);
border: 1px solid var(--lm-charcoal);
padding: 14px 44px;
font-family: 'Inter', sans-serif;
font-weight: 400;
font-size: 0.7rem;
letter-spacing: 0.2em;
text-transform: uppercase;
cursor: pointer;
transition: background 0.4s ease, color 0.4s ease;
}
.btn:hover {
background: var(--lm-charcoal);
color: var(--lm-parchment);
}
.btn--secondary {
border-color: var(--lm-champagne);
color: var(--lm-stone);
}
.btn--secondary:hover {
background: var(--lm-champagne);
color: var(--lm-near-black);
border-color: var(--lm-champagne);
}
.btn--invert {
border-color: var(--lm-parchment);
color: var(--lm-parchment);
}
.btn--invert:hover {
background: var(--lm-parchment);
color: var(--lm-near-black);
}
/* ============================================
Editorial Section
============================================ */
.editorial {
display: grid;
grid-template-columns: 1.2fr 1fr;
gap: 0;
min-height: 75vh;
align-items: center;
}
.editorial--reverse {
grid-template-columns: 1fr 1.2fr;
}
.editorial__image {
width: 100%;
height: 100%;
min-height: 500px;
object-fit: cover;
filter: saturate(0.85) contrast(1.02);
}
.editorial__content {
padding: 80px 72px;
max-width: 500px;
}
.editorial--reverse .editorial__content {
margin-left: auto;
}
.editorial__label {
margin-bottom: 24px;
}
.editorial__title {
font-size: clamp(1.75rem, 3vw, 2.5rem);
margin-bottom: 24px;
}
.editorial__text {
font-size: 0.95rem;
line-height: 1.85;
color: var(--lm-stone);
margin-bottom: 32px;
}
/* ============================================
Cards
============================================ */
.card-grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 48px;
}
.card {
background: var(--lm-bg-surface);
border: 1px solid var(--lm-border-subtle);
padding: 48px 36px;
transition: box-shadow 0.5s ease, border-color 0.5s ease;
}
.card:hover {
border-color: var(--lm-sandstone);
box-shadow: var(--lm-shadow-lg);
}
.card__label {
font-family: 'Inter', sans-serif;
font-weight: 400;
font-size: 0.6rem;
letter-spacing: 0.2em;
text-transform: uppercase;
color: var(--lm-taupe);
margin-bottom: 20px;
}
.card__title {
font-family: 'Cormorant Garamond', serif;
font-size: 1.6rem;
font-weight: 500;
color: var(--lm-text-heading);
margin-bottom: 16px;
line-height: 1.25;
}
.card__text {
font-size: 0.9rem;
line-height: 1.75;
color: var(--lm-stone);
margin-bottom: 24px;
}
.card__link {
font-family: 'Inter', sans-serif;
font-weight: 400;
font-size: 0.65rem;
letter-spacing: 0.18em;
text-transform: uppercase;
color: var(--lm-charcoal);
border-bottom: 1px solid var(--lm-champagne);
padding-bottom: 2px;
transition: color 0.3s ease, border-color 0.3s ease;
}
.card__link:hover {
color: var(--lm-gold);
border-color: var(--lm-gold);
}
/* ============================================
Dark Inverted Section
============================================ */
.section--dark {
background: var(--lm-bg-invert);
color: var(--lm-parchment);
}
.section--dark h2,
.section--dark h3 {
color: var(--lm-warm-white);
}
.section--dark p {
color: var(--lm-sandstone);
}
.section--dark .label {
color: var(--lm-champagne);
}
.section--dark .btn--invert {
border-color: rgba(250, 247, 242, 0.4);
color: var(--lm-parchment);
}
.section--dark .btn--invert:hover {
border-color: var(--lm-parchment);
background: var(--lm-parchment);
color: var(--lm-near-black);
}
/* ============================================
Blockquote / Pull Quote
============================================ */
.pull-quote {
text-align: center;
padding: 100px 5vw;
}
.pull-quote__text {
font-family: 'Cormorant Garamond', serif;
font-style: italic;
font-weight: 400;
font-size: clamp(1.5rem, 3vw, 2.25rem);
color: var(--lm-stone);
line-height: 1.55;
max-width: 700px;
margin: 0 auto 24px;
}
.pull-quote__attribution {
font-family: 'Inter', sans-serif;
font-weight: 400;
font-size: 0.65rem;
letter-spacing: 0.2em;
text-transform: uppercase;
color: var(--lm-taupe);
}
/* ============================================
Footer
============================================ */
.footer {
padding: 80px 5vw;
text-align: center;
border-top: 1px solid var(--lm-border);
}
.footer__logo {
font-family: 'Cormorant Garamond', serif;
font-size: 1.5rem;
font-weight: 500;
color: var(--lm-text-heading);
margin-bottom: 24px;
}
.footer__links {
display: flex;
justify-content: center;
gap: 32px;
list-style: none;
margin-bottom: 40px;
}
.footer__link {
font-family: 'Inter', sans-serif;
font-weight: 400;
font-size: 0.65rem;
letter-spacing: 0.15em;
text-transform: uppercase;
color: var(--lm-taupe);
transition: color 0.3s ease;
}
.footer__link:hover {
color: var(--lm-charcoal);
}
.footer__copy {
font-size: 0.75rem;
color: var(--lm-taupe);
}
/* ============================================
Scroll Reveal
============================================ */
.reveal {
opacity: 0;
transform: translateY(24px);
transition: opacity 0.8s cubic-bezier(0.25, 0.46, 0.45, 0.94),
transform 0.8s cubic-bezier(0.25, 0.46, 0.45, 0.94);
}
.reveal--visible {
opacity: 1;
transform: translateY(0);
}
/* ============================================
Responsive
============================================ */
@media (max-width: 900px) {
.card-grid {
grid-template-columns: 1fr;
gap: 32px;
}
.editorial,
.editorial--reverse {
grid-template-columns: 1fr;
}
.editorial__content {
padding: 48px 24px;
}
.nav__links {
gap: 24px;
}
}
@media (max-width: 600px) {
.hero {
padding: 100px 6vw;
min-height: 90vh;
}
.section {
padding: 80px 0;
}
.nav {
padding: 20px 5vw;
}
.nav__links {
display: none;
}
}
</style>
</head>
<body>
<!-- ========================================
Navigation
========================================== -->
<nav class="nav" id="nav">
<a href="#" class="nav__logo">Maison</a>
<ul class="nav__links">
<li><a href="#about" class="nav__link">About</a></li>
<li><a href="#collection" class="nav__link">Collection</a></li>
<li><a href="#philosophy" class="nav__link">Philosophy</a></li>
<li><a href="#contact" class="nav__link">Contact</a></li>
</ul>
</nav>
<!-- ========================================
Hero
========================================== -->
<section class="hero">
<div class="hero__content">
<p class="label label--accent hero__label">Established 2024</p>
<h1 class="hero__title">The Art of<br>Refined Living</h1>
<p class="hero__subtitle">
Curated objects and considered spaces for those who
understand that true luxury lies in simplicity.
</p>
<a href="#collection" class="btn">Explore Collection</a>
</div>
</section>
<!-- ========================================
About / Editorial
========================================== -->
<section id="about">
<div class="editorial reveal">
<img
src="https://images.unsplash.com/photo-1600585154340-be6161a56a0c?w=900&q=80"
alt="Minimalist interior with natural light"
class="editorial__image"
>
<div class="editorial__content">
<p class="label label--accent editorial__label">Our Philosophy</p>
<h2 class="editorial__title">Less, But Better</h2>
<p class="editorial__text">
We believe that every object in a space should earn its presence.
Our curation process is one of subtraction -- removing the unnecessary
until only the essential remains. What stays is crafted with
intention, built from honest materials, and designed to age
with grace.
</p>
<a href="#" class="btn--secondary btn">Learn More</a>
</div>
</div>
</section>
<!-- ========================================
Pull Quote
========================================== -->
<section class="pull-quote reveal">
<hr class="divider" style="margin-bottom: 48px;">
<p class="pull-quote__text">
"Perfection is achieved not when there is nothing more to add,
but when there is nothing left to take away."
</p>
<p class="pull-quote__attribution">Antoine de Saint-Exupery</p>
<hr class="divider" style="margin-top: 48px;">
</section>
<!-- ========================================
Collection Cards
========================================== -->
<section id="collection" class="section">
<div class="container">
<div class="text-center reveal" style="margin-bottom: 72px;">
<p class="label label--accent" style="margin-bottom: 16px;">The Collection</p>
<h2>Considered Objects</h2>
</div>
<div class="card-grid">
<div class="card reveal">
<p class="card__label">Ceramics</p>
<h3 class="card__title">Stoneware Vessels</h3>
<p class="card__text">
Hand-thrown in small batches from locally sourced clay.
Each piece carries the quiet imperfections that mark
authentic craftsmanship.
</p>
<a href="#" class="card__link">View Pieces</a>
</div>
<div class="card reveal">
<p class="card__label">Textiles</p>
<h3 class="card__title">Linen Collection</h3>
<p class="card__text">
Woven from European flax and finished without chemical
softeners. The texture improves with every wash, growing
softer and more characterful over time.
</p>
<a href="#" class="card__link">View Pieces</a>
</div>
<div class="card reveal">
<p class="card__label">Lighting</p>
<h3 class="card__title">Sculptural Lamps</h3>
<p class="card__text">
Minimal forms in brushed brass and hand-blown glass.
Designed to cast warm, ambient light that transforms
the atmosphere of a room.
</p>
<a href="#" class="card__link">View Pieces</a>
</div>
</div>
</div>
</section>
<!-- ========================================
Dark Inverted Section
========================================== -->
<section id="philosophy" class="section section--dark">
<div class="container container--narrow text-center">
<div class="reveal">
<p class="label" style="margin-bottom: 16px;">Philosophy</p>
<h2 style="margin-bottom: 32px;">Crafted With Intention</h2>
<p style="max-width: 560px; margin: 0 auto 48px;">
Every material is chosen for its honesty. Every form is refined
until nothing remains but purpose. We work with artisans who
share our belief that the most beautiful objects are those
that reveal their making.
</p>
<a href="#" class="btn btn--invert">Our Process</a>
</div>
</div>
</section>
<!-- ========================================
Editorial (Reversed)
========================================== -->
<section>
<div class="editorial editorial--reverse reveal">
<div class="editorial__content">
<p class="label label--accent editorial__label">Materials</p>
<h2 class="editorial__title">Honest Materials,<br>Timeless Forms</h2>
<p class="editorial__text">
Natural stone, unfinished wood, hand-forged metal, organic
linen. We source materials that age beautifully -- developing
patina, softening with use, and becoming more personal
with time. Nothing synthetic. Nothing disposable.
</p>
<a href="#" class="btn">Discover Materials</a>
</div>
<img
src="https://images.unsplash.com/photo-1616486338812-3dadae4b4ace?w=900&q=80"
alt="Natural materials and textures"
class="editorial__image"
>
</div>
</section>
<!-- ========================================
Footer
========================================== -->
<footer id="contact" class="footer">
<p class="footer__logo">Maison</p>
<ul class="footer__links">
<li><a href="#" class="footer__link">About</a></li>
<li><a href="#" class="footer__link">Collection</a></li>
<li><a href="#" class="footer__link">Journal</a></li>
<li><a href="#" class="footer__link">Contact</a></li>
<li><a href="#" class="footer__link">Instagram</a></li>
</ul>
<p class="footer__copy">© 2026 Maison. All rights reserved.</p>
</footer>
<!-- ========================================
Scroll Reveal Script
========================================== -->
<script>
// Scroll reveal
const revealElements = document.querySelectorAll('.reveal');
const revealObserver = new IntersectionObserver((entries) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
entry.target.classList.add('reveal--visible');
revealObserver.unobserve(entry.target);
}
});
}, {
threshold: 0.15,
rootMargin: '0px 0px -40px 0px'
});
revealElements.forEach(el => revealObserver.observe(el));
// Nav scroll behavior
const nav = document.getElementById('nav');
let lastScroll = 0;
window.addEventListener('scroll', () => {
const currentScroll = window.scrollY;
if (currentScroll > 60) {
nav.classList.add('nav--scrolled');
} else {
nav.classList.remove('nav--scrolled');
}
lastScroll = currentScroll;
});
</script>
</body>
</html>
font-weight: 300 for body text – light-weight sans-serif text on warm backgrounds creates the airy, editorial reading experience that defines the aesthetic; 400 can feel too heavy in this contextfilter: saturate(0.85) – slightly desaturating photography ensures images integrate with the neutral palette rather than competing with it; adjust per-image as needed