website_designs

Zen Garden Design Reference

Overview

Zen Garden is a web design aesthetic rooted in the philosophy and visual language of Japanese karesansui – the “dry landscape” rock gardens cultivated by Zen Buddhist monks since the Muromachi period (14th-16th century). Where most design systems seek to fill space, Zen Garden reverses the impulse: emptiness is the primary medium, and every element placed within it must justify its presence through purpose, proportion, or symbolic meaning. The result is an interface that feels less like a product and more like a contemplative space – quiet, unhurried, and deeply intentional.

The aesthetic draws on seven classical Zen principles that map directly to digital design decisions. Kanso (simplicity) strips interfaces to their essential elements. Fukinsei (asymmetry) creates visual tension through deliberate imbalance rather than rigid centering. Koko (austerity) favors restraint over abundance, choosing one perfectly placed element over ten adequate ones. Shizen (naturalness) ensures that nothing feels forced or artificial – layouts should appear effortless even when meticulously constructed. Yugen (subtlety) introduces depth through suggestion rather than explicitness, letting shadow, texture, and negative space imply what is not directly shown. Datsuzoku (freedom from habit) encourages moments of unexpected beauty – an asymmetric break in an otherwise orderly grid, a single accent of moss green against stone gray. Seijaku (tranquility) is the cumulative effect: a stillness that allows the user to focus, breathe, and engage with content without cognitive friction.

Visually, Zen Garden translates the physical materials of a karesansui into digital form. Raked gravel becomes fine-line SVG patterns that suggest flowing water. Moss becomes muted green accents placed sparingly against neutral ground. Stones become anchoring visual elements – images, cards, or typographic blocks – positioned with asymmetric precision against vast fields of whitespace. The palette is drawn entirely from nature: warm stone grays, sand, aged wood, bamboo green, and the deep near-black of wet river rock. Typography is thin, upright, and spacious, embodying the Japanese concept of “ma” – the meaningful pause between elements that gives each one room to resonate.

This is not minimalism for the sake of trend. It is minimalism as philosophy – the belief that reduction reveals essence, and that the space between things is as important as the things themselves.


Visual Characteristics

Core Design Traits

Design Principles


Color Palette

The Zen Garden palette is drawn exclusively from the materials found in a traditional karesansui garden: raked white gravel, weathered granite, river stones, aged wood, moss, bamboo, and the occasional splash of plum blossom. Colors are desaturated, earthy, and tonal – they coexist without competing. The overall impression should be a quiet room with natural light filtering through shoji screens.

Swatch Hex Role / Usage
#F7F5F0 #F7F5F0 Raked Sand – primary background; warm off-white evoking dry garden gravel
#EDEBE5 #EDEBE5 Washed Stone – secondary background; card surfaces and alternating sections
#E0DDD5 #E0DDD5 Pale Clay – tertiary surface; subtle depth layering and inset panels
#C8C3B8 #C8C3B8 Dry Gravel – borders, dividers, and muted UI elements
#A39E93 #A39E93 Weathered Stone – secondary text, captions, and metadata
#8A8578 #8A8578 Aged Granite – icons, subtle labels, and placeholder text
#5C564B #5C564B Dark Earth – primary text on light backgrounds; headings
#3A3630 #3A3630 Wet Rock – strong emphasis text and high-contrast elements
#2A2722 #2A2722 Charred Wood – deepest accent; footer backgrounds, overlays
#6B7F5E #6B7F5E Temple Moss – primary accent; links, active states, and focal highlights
#8B9E7A #8B9E7A Bamboo Leaf – secondary green accent; hover states and success indicators
#B8A088 #B8A088 Hinoki Wood – warm accent; callout backgrounds and decorative elements
#C4A882 #C4A882 Golden Sand – tertiary warm accent; highlights and selected states
#7A6E5D #7A6E5D River Pebble – muted brown for secondary UI elements and tags
#4A5A42 #4A5A42 Deep Moss – dark green for emphasis; footer accents and dark-mode elements

CSS Custom Properties

:root {
  /* Backgrounds */
  --zen-bg-primary: #F7F5F0;
  --zen-bg-secondary: #EDEBE5;
  --zen-bg-tertiary: #E0DDD5;

  /* Surfaces */
  --zen-surface: #EDEBE5;
  --zen-surface-raised: #F7F5F0;
  --zen-surface-sunken: #E0DDD5;

  /* Text */
  --zen-text-primary: #3A3630;
  --zen-text-secondary: #5C564B;
  --zen-text-muted: #A39E93;
  --zen-text-faint: #C8C3B8;

  /* Borders */
  --zen-border: #E0DDD5;
  --zen-border-subtle: #EDEBE5;
  --zen-border-strong: #C8C3B8;

  /* Accents */
  --zen-accent-moss: #6B7F5E;
  --zen-accent-moss-light: #8B9E7A;
  --zen-accent-wood: #B8A088;
  --zen-accent-sand: #C4A882;
  --zen-accent-pebble: #7A6E5D;
  --zen-accent-deep-moss: #4A5A42;

  /* Darks */
  --zen-dark: #2A2722;
  --zen-dark-soft: #3A3630;

  /* Shadows */
  --zen-shadow-sm: 0 1px 3px rgba(42, 39, 34, 0.04);
  --zen-shadow-md: 0 2px 8px rgba(42, 39, 34, 0.06);
  --zen-shadow-lg: 0 4px 16px rgba(42, 39, 34, 0.08);

  /* Transitions */
  --zen-transition-slow: 800ms cubic-bezier(0.25, 0.1, 0.25, 1);
  --zen-transition-medium: 500ms cubic-bezier(0.25, 0.1, 0.25, 1);
  --zen-transition-fast: 300ms cubic-bezier(0.25, 0.1, 0.25, 1);

  /* Spacing */
  --zen-space-xs: 0.5rem;
  --zen-space-sm: 1rem;
  --zen-space-md: 2rem;
  --zen-space-lg: 4rem;
  --zen-space-xl: 6rem;
  --zen-space-2xl: 10rem;
}

Typography

Zen Garden typography is quiet, precise, and spacious. The goal is readability without visual noise – type should feel like calligraphy viewed from a distance: elegant, deliberate, and never rushed. Heading fonts lean toward thin, refined serifs or clean humanist sans-serifs that echo the restrained elegance of Japanese woodblock printing. Body text prioritizes generous line-height and moderate letter-spacing to create breathing room within paragraphs, embodying the principle of “ma” at the typographic level. Japanese-influenced fonts like the Zen family on Google Fonts and Noto Serif offer excellent bridges between Western and Japanese design sensibilities.

Google Fonts

Font Style Weight Range Usage
Cormorant Garamond Refined, high-contrast serif 300-600 Display headings, hero text, pull quotes
Noto Serif Display Elegant transitional serif 300-500 Headings, section titles
Zen Old Mincho Japanese-influenced traditional serif 400-700 Decorative headings, Japanese-flavored accents
Zen Kaku Gothic New Clean Japanese gothic sans 300-700 Body text in Japanese-inspired contexts
Work Sans Humanist sans-serif 300-500 Primary body text, UI elements
Inter Neutral screen-optimized sans 300-500 Secondary body, labels, navigation
DM Sans Clean geometric sans 300-500 Captions, metadata, small text
Zen Maru Gothic Rounded Japanese gothic 400-500 Friendly accent text, tags

Font Pairings

Heading Font Body Font Mood
Cormorant Garamond Light Work Sans Light Serene editorial – the canonical Zen Garden pairing
Noto Serif Display Light Inter Regular Refined simplicity – modern with classical undertones
Zen Old Mincho Regular DM Sans Regular Japanese-Western fusion – culturally rooted yet accessible
Cormorant Garamond Regular Inter Light Contemplative minimalism – elegant contrast with neutral body

CSS Example

/* Import fonts */
@import url('https://fonts.googleapis.com/css2?family=Cormorant+Garamond:ital,wght@0,300;0,400;0,500;1,300;1,400&family=Work+Sans:wght@300;400;500&family=Inter:wght@300;400;500&family=Noto+Serif+Display:wght@300;400;500&display=swap');

/* Display / Hero headings -- thin, spacious, commanding through restraint */
h1 {
  font-family: 'Cormorant Garamond', 'Noto Serif Display', serif;
  font-weight: 300;
  font-size: clamp(2.5rem, 6vw, 5rem);
  line-height: 1.15;
  letter-spacing: 0.02em;
  color: var(--zen-text-primary);
}

/* Section headings */
h2 {
  font-family: 'Cormorant Garamond', serif;
  font-weight: 400;
  font-size: clamp(1.75rem, 3.5vw, 2.75rem);
  line-height: 1.2;
  letter-spacing: 0.015em;
  color: var(--zen-text-primary);
}

/* Subsection headings */
h3 {
  font-family: 'Work Sans', sans-serif;
  font-weight: 500;
  font-size: clamp(1.125rem, 2vw, 1.5rem);
  line-height: 1.3;
  letter-spacing: 0.01em;
  color: var(--zen-text-secondary);
}

/* Body text -- generous line-height for breathing room */
body {
  font-family: 'Work Sans', 'Inter', sans-serif;
  font-weight: 300;
  font-size: 1rem;
  line-height: 1.85;
  color: var(--zen-text-secondary);
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}

/* Overline labels -- wide-tracked uppercase, very small */
.zen-label {
  font-family: 'Inter', sans-serif;
  font-weight: 400;
  font-size: 0.7rem;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--zen-text-muted);
}

/* Pull quotes -- italic serif, contemplative */
.zen-quote {
  font-family: 'Cormorant Garamond', serif;
  font-weight: 300;
  font-style: italic;
  font-size: clamp(1.5rem, 3vw, 2.25rem);
  line-height: 1.5;
  color: var(--zen-accent-moss);
}

Layout Principles


CSS / Design Techniques

Raked Sand Pattern Background

/* Fine parallel lines evoking raked gravel patterns */
.zen-raked-sand {
  position: relative;
  background: var(--zen-bg-primary);
}

.zen-raked-sand::after {
  content: '';
  position: absolute;
  inset: 0;
  opacity: 0.035;
  background-image: repeating-linear-gradient(
    0deg,
    transparent,
    transparent 11px,
    #8A8578 11px,
    #8A8578 12px
  );
  pointer-events: none;
}

/* Concentric circle variant -- water ripple around a stone */
.zen-ripple-pattern {
  position: relative;
  background: var(--zen-bg-primary);
}

.zen-ripple-pattern::after {
  content: '';
  position: absolute;
  inset: 0;
  opacity: 0.03;
  background-image: repeating-radial-gradient(
    circle at 50% 50%,
    transparent 0px,
    transparent 30px,
    #8A8578 30px,
    #8A8578 31px
  );
  pointer-events: none;
}

Card (Stone Card)

/* Cards inspired by smooth river stones: minimal, grounded, barely elevated */
.zen-card {
  background: var(--zen-surface);
  border: 1px solid var(--zen-border-subtle);
  border-radius: 4px;
  padding: 2.5rem;
  transition: var(--zen-transition-medium);
  transition-property: box-shadow, border-color;
}

.zen-card:hover {
  border-color: var(--zen-border-strong);
  box-shadow: var(--zen-shadow-md);
}

/* Accent card with moss-green left border */
.zen-card--accent {
  border-left: 2px solid var(--zen-accent-moss);
  border-radius: 0 4px 4px 0;
}

/* Minimal card -- no visible border, differentiated by background only */
.zen-card--minimal {
  background: var(--zen-bg-secondary);
  border: none;
  border-radius: 2px;
  padding: 2rem 2.5rem;
  box-shadow: none;
}

.zen-card--minimal:hover {
  background: var(--zen-surface-sunken);
}

Button (Pebble Button)

/* Buttons: quiet, understated, action through restraint */
.zen-button {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 0.5rem;
  background: var(--zen-text-primary);
  color: var(--zen-bg-primary);
  border: none;
  border-radius: 2px;
  padding: 14px 32px;
  font-family: 'Work Sans', sans-serif;
  font-weight: 400;
  font-size: 0.85rem;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  cursor: pointer;
  transition: var(--zen-transition-medium);
  transition-property: opacity, transform;
}

.zen-button:hover {
  opacity: 0.8;
  transform: translateY(-1px);
}

/* Ghost button -- outline only */
.zen-button--ghost {
  background: transparent;
  color: var(--zen-text-primary);
  border: 1px solid var(--zen-border-strong);
}

.zen-button--ghost:hover {
  border-color: var(--zen-text-primary);
  background: rgba(58, 54, 48, 0.03);
}

/* Moss accent button */
.zen-button--moss {
  background: var(--zen-accent-moss);
  color: #F7F5F0;
}

.zen-button--moss:hover {
  background: var(--zen-accent-deep-moss);
  opacity: 1;
}
/* Navigation: spare, floating, transparent until scrolled */
.zen-nav {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  z-index: 100;
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 1.5rem 3rem;
  background: transparent;
  transition: var(--zen-transition-medium);
  transition-property: background, backdrop-filter, border-color;
  border-bottom: 1px solid transparent;
}

.zen-nav--scrolled {
  background: rgba(247, 245, 240, 0.85);
  backdrop-filter: blur(12px);
  -webkit-backdrop-filter: blur(12px);
  border-bottom-color: var(--zen-border-subtle);
}

.zen-nav-brand {
  font-family: 'Cormorant Garamond', serif;
  font-weight: 400;
  font-size: 1.25rem;
  letter-spacing: 0.06em;
  color: var(--zen-text-primary);
  text-decoration: none;
}

.zen-nav-links {
  display: flex;
  gap: 2.5rem;
  list-style: none;
}

.zen-nav-links a {
  color: var(--zen-text-muted);
  text-decoration: none;
  font-family: 'Inter', sans-serif;
  font-size: 0.8rem;
  font-weight: 400;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  transition: color var(--zen-transition-fast);
}

.zen-nav-links a:hover {
  color: var(--zen-accent-moss);
}

.zen-nav-links a.active {
  color: var(--zen-text-primary);
}

Hero Section (Karesansui Hero)

/* Hero: vast whitespace with a single, centered statement */
.zen-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;
}

.zen-hero h1 {
  font-family: 'Cormorant Garamond', serif;
  font-weight: 300;
  font-size: clamp(2.5rem, 7vw, 5.5rem);
  line-height: 1.1;
  letter-spacing: 0.02em;
  color: var(--zen-text-primary);
  max-width: 800px;
}

.zen-hero p {
  font-family: 'Work Sans', sans-serif;
  font-weight: 300;
  font-size: 1.125rem;
  line-height: 1.8;
  color: var(--zen-text-muted);
  max-width: 480px;
  margin-top: 2rem;
}

/* Decorative enso circle behind hero text */
.zen-hero::before {
  content: '';
  position: absolute;
  width: 400px;
  height: 400px;
  border: 1px solid var(--zen-border);
  border-radius: 50%;
  border-top-color: transparent;
  transform: rotate(-25deg);
  opacity: 0.25;
  pointer-events: none;
}

/* Scroll indicator -- gentle downward arrow */
.zen-scroll-hint {
  position: absolute;
  bottom: 3rem;
  width: 1px;
  height: 40px;
  background: linear-gradient(
    180deg,
    var(--zen-border-strong) 0%,
    transparent 100%
  );
  animation: zen-drift 3s ease-in-out infinite;
}

@keyframes zen-drift {
  0%, 100% { opacity: 0.3; transform: translateY(0); }
  50% { opacity: 0.7; transform: translateY(8px); }
}

Section Dividers (Garden Path)

/* Subtle centered dividers -- like stepping stones between content */
.zen-divider {
  border: none;
  height: 1px;
  max-width: 80px;
  margin: var(--zen-space-xl) auto;
  background: var(--zen-border-strong);
  opacity: 0.5;
}

/* Three-dot divider -- like three stones in a garden */
.zen-divider--stones {
  border: none;
  height: auto;
  text-align: center;
  margin: var(--zen-space-xl) auto;
  background: none;
}

.zen-divider--stones::before {
  content: '';
  display: inline-block;
  width: 4px;
  height: 4px;
  border-radius: 50%;
  background: var(--zen-border-strong);
  box-shadow:
    -20px 0 0 var(--zen-border-strong),
    20px 0 0 var(--zen-border-strong);
  opacity: 0.4;
}

/* Enso circle divider */
.zen-divider--enso {
  border: none;
  text-align: center;
  margin: var(--zen-space-xl) auto;
}

.zen-divider--enso::before {
  content: '';
  display: inline-block;
  width: 32px;
  height: 32px;
  border: 1.5px solid var(--zen-accent-moss);
  border-radius: 50%;
  border-top-color: transparent;
  transform: rotate(-30deg);
  opacity: 0.35;
}

Asymmetric Split Layout

/* Two-column layout with deliberate asymmetry */
.zen-split {
  display: grid;
  grid-template-columns: 5fr 7fr;
  gap: var(--zen-space-lg);
  align-items: center;
  max-width: 1000px;
  margin: 0 auto;
  padding: var(--zen-space-xl) var(--zen-space-md);
}

/* Reversed split -- image left, text right */
.zen-split--reverse {
  grid-template-columns: 7fr 5fr;
}

.zen-split-text {
  padding: var(--zen-space-md) 0;
}

.zen-split-image {
  overflow: hidden;
  border-radius: 2px;
}

.zen-split-image img {
  width: 100%;
  height: auto;
  display: block;
  filter: saturate(0.6) contrast(0.95);
  transition: filter var(--zen-transition-slow);
}

.zen-split-image:hover img {
  filter: saturate(0.8) contrast(1);
}

@media (max-width: 768px) {
  .zen-split,
  .zen-split--reverse {
    grid-template-columns: 1fr;
    gap: var(--zen-space-md);
  }
}

Fade-In Scroll Animation

/* Elements fade in gently as they enter the viewport */
.zen-reveal {
  opacity: 0;
  transform: translateY(24px);
  transition:
    opacity 1s cubic-bezier(0.25, 0.1, 0.25, 1),
    transform 1s cubic-bezier(0.25, 0.1, 0.25, 1);
}

.zen-reveal.visible {
  opacity: 1;
  transform: translateY(0);
}

/* Staggered delay for child elements */
.zen-reveal-group > *:nth-child(1) { transition-delay: 0ms; }
.zen-reveal-group > *:nth-child(2) { transition-delay: 150ms; }
.zen-reveal-group > *:nth-child(3) { transition-delay: 300ms; }
.zen-reveal-group > *:nth-child(4) { transition-delay: 450ms; }

Design Do’s and Don’ts

Do’s

Don’ts


Aesthetic Relationship to Zen Garden
Japandi Closest relative; Japandi blends Japanese and Scandinavian design but is warmer and more furniture-focused; Zen Garden is more austere and whitespace-driven
Cyberminimalism Shares the extreme whitespace and single-focus sections, but uses dark mode, gradients, and tech-forward typography; Zen Garden is natural and warm where Cyberminimalism is digital and cool
Flat Design Both reject ornamentation and skeuomorphism; Flat Design is more geometric and UI-focused, while Zen Garden draws from nature and philosophy
Wabi-Sabi The philosophical foundation of Zen Garden; Wabi-Sabi as a standalone aesthetic embraces imperfection and decay more explicitly, with rougher textures and visible aging
Earth Tones Shares the natural, desaturated palette; Earth Tones is broader and more pattern-rich, while Zen Garden is more minimal and whitespace-dominant
Hygge Both create calm, contemplative atmospheres; Hygge is warmer, cozier, and more textile-focused (wool, candles, warmth), while Zen Garden is cooler and more austere (stone, sand, stillness)
International Typographic Style Shares the grid discipline and belief in whitespace as structure; Swiss Style is more geometric and systematic, while Zen Garden allows asymmetric organic compositions
Minimalism The parent category; Zen Garden is a specific cultural expression of minimalism filtered through Japanese philosophy and karesansui garden design

Quick-Start HTML Template

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Zen Garden -- Template</title>
  <link href="https://fonts.googleapis.com/css2?family=Cormorant+Garamond:ital,wght@0,300;0,400;0,500;1,300;1,400&family=Work+Sans:wght@300;400;500&family=Inter:wght@300;400;500&display=swap" rel="stylesheet">
  <style>
    /* =====================================================
       ZEN GARDEN -- CSS CUSTOM PROPERTIES
       ===================================================== */
    :root {
      /* Backgrounds */
      --zen-bg-primary: #F7F5F0;
      --zen-bg-secondary: #EDEBE5;
      --zen-bg-tertiary: #E0DDD5;

      /* Surfaces */
      --zen-surface: #EDEBE5;
      --zen-surface-sunken: #E0DDD5;

      /* Text */
      --zen-text-primary: #3A3630;
      --zen-text-secondary: #5C564B;
      --zen-text-muted: #A39E93;
      --zen-text-faint: #C8C3B8;

      /* Borders */
      --zen-border: #E0DDD5;
      --zen-border-subtle: #EDEBE5;
      --zen-border-strong: #C8C3B8;

      /* Accents */
      --zen-accent-moss: #6B7F5E;
      --zen-accent-moss-light: #8B9E7A;
      --zen-accent-wood: #B8A088;
      --zen-accent-sand: #C4A882;
      --zen-accent-pebble: #7A6E5D;
      --zen-accent-deep-moss: #4A5A42;

      /* Darks */
      --zen-dark: #2A2722;
      --zen-dark-soft: #3A3630;

      /* Shadows */
      --zen-shadow-sm: 0 1px 3px rgba(42, 39, 34, 0.04);
      --zen-shadow-md: 0 2px 8px rgba(42, 39, 34, 0.06);

      /* Transitions */
      --zen-transition-slow: 800ms cubic-bezier(0.25, 0.1, 0.25, 1);
      --zen-transition-medium: 500ms cubic-bezier(0.25, 0.1, 0.25, 1);
      --zen-transition-fast: 300ms cubic-bezier(0.25, 0.1, 0.25, 1);
    }

    /* =====================================================
       RESET & BASE
       ===================================================== */
    *, *::before, *::after {
      margin: 0;
      padding: 0;
      box-sizing: border-box;
    }

    html {
      scroll-behavior: smooth;
    }

    body {
      background: var(--zen-bg-primary);
      color: var(--zen-text-secondary);
      font-family: 'Work Sans', 'Inter', sans-serif;
      font-weight: 300;
      font-size: 1rem;
      line-height: 1.85;
      -webkit-font-smoothing: antialiased;
      -moz-osx-font-smoothing: grayscale;
    }

    img {
      max-width: 100%;
      height: auto;
      display: block;
    }

    a {
      color: var(--zen-accent-moss);
      text-decoration: none;
      transition: color var(--zen-transition-fast);
    }

    a:hover {
      color: var(--zen-accent-deep-moss);
    }

    /* =====================================================
       TYPOGRAPHY
       ===================================================== */
    h1 {
      font-family: 'Cormorant Garamond', serif;
      font-weight: 300;
      font-size: clamp(2.5rem, 6vw, 5rem);
      line-height: 1.1;
      letter-spacing: 0.02em;
      color: var(--zen-text-primary);
    }

    h2 {
      font-family: 'Cormorant Garamond', serif;
      font-weight: 400;
      font-size: clamp(1.75rem, 3.5vw, 2.75rem);
      line-height: 1.2;
      letter-spacing: 0.015em;
      color: var(--zen-text-primary);
    }

    h3 {
      font-family: 'Work Sans', sans-serif;
      font-weight: 500;
      font-size: 1.25rem;
      line-height: 1.3;
      color: var(--zen-text-secondary);
    }

    p {
      max-width: 640px;
    }

    .label {
      font-family: 'Inter', sans-serif;
      font-weight: 400;
      font-size: 0.7rem;
      letter-spacing: 0.18em;
      text-transform: uppercase;
      color: var(--zen-text-muted);
    }

    .quote {
      font-family: 'Cormorant Garamond', serif;
      font-weight: 300;
      font-style: italic;
      font-size: clamp(1.375rem, 3vw, 2rem);
      line-height: 1.5;
      color: var(--zen-accent-pebble);
      max-width: 600px;
    }

    /* =====================================================
       NAVIGATION
       ===================================================== */
    nav {
      position: fixed;
      top: 0;
      left: 0;
      right: 0;
      z-index: 100;
      display: flex;
      align-items: center;
      justify-content: space-between;
      padding: 1.5rem 3rem;
      background: transparent;
      transition: var(--zen-transition-medium);
      transition-property: background, backdrop-filter, border-color;
      border-bottom: 1px solid transparent;
    }

    nav.scrolled {
      background: rgba(247, 245, 240, 0.88);
      backdrop-filter: blur(12px);
      -webkit-backdrop-filter: blur(12px);
      border-bottom-color: var(--zen-border-subtle);
    }

    .nav-brand {
      font-family: 'Cormorant Garamond', serif;
      font-weight: 400;
      font-size: 1.25rem;
      letter-spacing: 0.06em;
      color: var(--zen-text-primary);
      text-decoration: none;
    }

    .nav-links {
      display: flex;
      gap: 2.5rem;
      list-style: none;
    }

    .nav-links a {
      color: var(--zen-text-muted);
      font-family: 'Inter', sans-serif;
      font-size: 0.75rem;
      font-weight: 400;
      letter-spacing: 0.12em;
      text-transform: uppercase;
    }

    .nav-links a:hover {
      color: var(--zen-accent-moss);
    }

    /* =====================================================
       HERO
       ===================================================== */
    .hero {
      min-height: 100vh;
      display: flex;
      flex-direction: column;
      align-items: center;
      justify-content: center;
      text-align: center;
      padding: 8rem 2rem 6rem;
      position: relative;
      overflow: hidden;
    }

    /* Enso circle decoration */
    .hero::before {
      content: '';
      position: absolute;
      width: 380px;
      height: 380px;
      border: 1px solid var(--zen-border-strong);
      border-radius: 50%;
      border-top-color: transparent;
      transform: rotate(-25deg);
      opacity: 0.18;
      pointer-events: none;
    }

    .hero h1 {
      position: relative;
      z-index: 1;
    }

    .hero p {
      margin-top: 2rem;
      font-size: 1.1rem;
      color: var(--zen-text-muted);
      max-width: 460px;
      position: relative;
      z-index: 1;
    }

    .hero-cta {
      display: inline-flex;
      align-items: center;
      gap: 0.5rem;
      margin-top: 3rem;
      padding: 14px 36px;
      background: var(--zen-text-primary);
      color: var(--zen-bg-primary);
      border: none;
      border-radius: 2px;
      font-family: 'Work Sans', sans-serif;
      font-weight: 400;
      font-size: 0.8rem;
      letter-spacing: 0.1em;
      text-transform: uppercase;
      text-decoration: none;
      cursor: pointer;
      transition: var(--zen-transition-medium);
      transition-property: opacity, transform;
      position: relative;
      z-index: 1;
    }

    .hero-cta:hover {
      opacity: 0.8;
      transform: translateY(-1px);
      color: var(--zen-bg-primary);
    }

    .scroll-hint {
      position: absolute;
      bottom: 3rem;
      width: 1px;
      height: 40px;
      background: linear-gradient(
        180deg,
        var(--zen-border-strong) 0%,
        transparent 100%
      );
      animation: drift 3s ease-in-out infinite;
    }

    @keyframes drift {
      0%, 100% { opacity: 0.3; transform: translateY(0); }
      50% { opacity: 0.6; transform: translateY(8px); }
    }

    /* =====================================================
       SECTION CONTAINERS
       ===================================================== */
    .section {
      max-width: 1000px;
      margin: 0 auto;
      padding: 6rem 2rem;
    }

    .section--narrow {
      max-width: 720px;
    }

    .section--wide {
      max-width: 1100px;
    }

    .section-header {
      text-align: center;
      margin-bottom: 4rem;
    }

    .section-header .label {
      display: block;
      margin-bottom: 1rem;
    }

    .section-header p {
      margin: 1.5rem auto 0;
      text-align: center;
    }

    /* =====================================================
       DIVIDERS
       ===================================================== */
    .divider {
      border: none;
      height: 1px;
      max-width: 80px;
      margin: 6rem auto;
      background: var(--zen-border-strong);
      opacity: 0.4;
    }

    .divider--stones {
      border: none;
      height: auto;
      text-align: center;
      margin: 6rem auto;
      background: none;
      max-width: none;
    }

    .divider--stones::before {
      content: '';
      display: inline-block;
      width: 4px;
      height: 4px;
      border-radius: 50%;
      background: var(--zen-border-strong);
      box-shadow:
        -20px 0 0 var(--zen-border-strong),
        20px 0 0 var(--zen-border-strong);
      opacity: 0.4;
    }

    /* =====================================================
       SPLIT LAYOUT
       ===================================================== */
    .split {
      display: grid;
      grid-template-columns: 5fr 7fr;
      gap: 4rem;
      align-items: center;
      max-width: 1000px;
      margin: 0 auto;
      padding: 6rem 2rem;
    }

    .split--reverse {
      grid-template-columns: 7fr 5fr;
    }

    .split-image {
      overflow: hidden;
      border-radius: 2px;
      background: var(--zen-bg-secondary);
      aspect-ratio: 4 / 3;
      display: flex;
      align-items: center;
      justify-content: center;
      color: var(--zen-text-faint);
      font-size: 0.8rem;
      letter-spacing: 0.1em;
      text-transform: uppercase;
    }

    /* =====================================================
       CARDS
       ===================================================== */
    .cards {
      display: grid;
      grid-template-columns: repeat(3, 1fr);
      gap: 1.5rem;
      max-width: 1000px;
      margin: 0 auto;
    }

    .card {
      background: var(--zen-surface);
      border: 1px solid var(--zen-border-subtle);
      border-radius: 4px;
      padding: 2.5rem 2rem;
      transition: var(--zen-transition-medium);
      transition-property: border-color, box-shadow;
    }

    .card:hover {
      border-color: var(--zen-border-strong);
      box-shadow: var(--zen-shadow-md);
    }

    .card .label {
      display: block;
      margin-bottom: 0.75rem;
    }

    .card h3 {
      margin-bottom: 1rem;
    }

    .card p {
      font-size: 0.9rem;
      line-height: 1.7;
      color: var(--zen-text-muted);
    }

    /* =====================================================
       QUOTE SECTION
       ===================================================== */
    .quote-section {
      text-align: center;
      padding: 8rem 2rem;
      background: var(--zen-bg-secondary);
    }

    .quote-section .quote {
      margin: 0 auto;
    }

    .quote-section .attribution {
      margin-top: 2rem;
      font-family: 'Inter', sans-serif;
      font-size: 0.75rem;
      letter-spacing: 0.12em;
      text-transform: uppercase;
      color: var(--zen-text-faint);
    }

    /* =====================================================
       RAKED SAND BACKGROUND
       ===================================================== */
    .raked-sand {
      position: relative;
    }

    .raked-sand::after {
      content: '';
      position: absolute;
      inset: 0;
      opacity: 0.03;
      background-image: repeating-linear-gradient(
        0deg,
        transparent,
        transparent 11px,
        #8A8578 11px,
        #8A8578 12px
      );
      pointer-events: none;
    }

    /* =====================================================
       FOOTER
       ===================================================== */
    footer {
      background: var(--zen-dark);
      color: var(--zen-text-faint);
      padding: 4rem 2rem;
      text-align: center;
    }

    footer .nav-brand {
      color: var(--zen-bg-secondary);
      display: block;
      margin-bottom: 1.5rem;
    }

    footer p {
      font-size: 0.85rem;
      line-height: 1.7;
      max-width: 400px;
      margin: 0 auto;
    }

    footer .footer-links {
      display: flex;
      justify-content: center;
      gap: 2rem;
      list-style: none;
      margin-top: 2rem;
    }

    footer .footer-links a {
      color: var(--zen-text-muted);
      font-size: 0.75rem;
      letter-spacing: 0.1em;
      text-transform: uppercase;
    }

    footer .footer-links a:hover {
      color: var(--zen-accent-moss-light);
    }

    footer .copyright {
      margin-top: 3rem;
      font-size: 0.7rem;
      color: var(--zen-accent-pebble);
      letter-spacing: 0.05em;
    }

    /* =====================================================
       SCROLL REVEAL
       ===================================================== */
    .reveal {
      opacity: 0;
      transform: translateY(20px);
      transition:
        opacity 1s cubic-bezier(0.25, 0.1, 0.25, 1),
        transform 1s cubic-bezier(0.25, 0.1, 0.25, 1);
    }

    .reveal.visible {
      opacity: 1;
      transform: translateY(0);
    }

    /* =====================================================
       RESPONSIVE
       ===================================================== */
    @media (max-width: 768px) {
      nav {
        padding: 1.25rem 1.5rem;
      }

      .nav-links {
        gap: 1.5rem;
      }

      .hero {
        padding: 6rem 1.5rem 4rem;
      }

      .hero::before {
        width: 260px;
        height: 260px;
      }

      .split,
      .split--reverse {
        grid-template-columns: 1fr;
        gap: 2rem;
        padding: 4rem 1.5rem;
      }

      .cards {
        grid-template-columns: 1fr;
      }

      .section {
        padding: 4rem 1.5rem;
      }

      .divider,
      .divider--stones {
        margin: 4rem auto;
      }
    }
  </style>
</head>
<body>

  <!-- ========== NAVIGATION ========== -->
  <nav id="navbar">
    <a href="#" class="nav-brand">Zen Garden</a>
    <ul class="nav-links">
      <li><a href="#philosophy">Philosophy</a></li>
      <li><a href="#principles">Principles</a></li>
      <li><a href="#gallery">Gallery</a></li>
      <li><a href="#contact">Contact</a></li>
    </ul>
  </nav>

  <!-- ========== HERO ========== -->
  <section class="hero raked-sand">
    <h1>In stillness,<br>clarity arises</h1>
    <p>A design philosophy rooted in Japanese Zen gardens -- where emptiness is meaningful, restraint is strength, and every element exists with intention.</p>
    <a href="#philosophy" class="hero-cta">Begin the path</a>
    <div class="scroll-hint"></div>
  </section>

  <!-- ========== PHILOSOPHY SECTION ========== -->
  <hr class="divider">

  <section id="philosophy" class="section section--narrow">
    <div class="section-header reveal">
      <span class="label">Philosophy</span>
      <h2>The beauty of less</h2>
      <p>In the tradition of karesansui, the dry landscape garden, we find that the most profound statements are made not by what is present, but by what is deliberately absent. Sand raked into flowing patterns becomes water. A single stone becomes a mountain. Space becomes meaning.</p>
    </div>
  </section>

  <!-- ========== QUOTE ========== -->
  <section class="quote-section">
    <p class="quote reveal">"In the beginner's mind there are many possibilities, but in the expert's mind there are few."</p>
    <p class="attribution reveal">Shunryu Suzuki</p>
  </section>

  <!-- ========== PRINCIPLES CARDS ========== -->
  <hr class="divider--stones">

  <section id="principles" class="section section--wide">
    <div class="section-header reveal">
      <span class="label">Seven Principles</span>
      <h2>Foundations of Zen design</h2>
      <p>Each principle from the karesansui tradition maps directly to a decision in digital design.</p>
    </div>

    <div class="cards">
      <div class="card reveal">
        <span class="label">01</span>
        <h3>Kanso</h3>
        <p>Simplicity. Eliminate clutter and strip every element to its essential purpose. What remains is what matters.</p>
      </div>
      <div class="card reveal">
        <span class="label">02</span>
        <h3>Fukinsei</h3>
        <p>Asymmetry. Reject rigid mirror-balance in favor of organic, weighted compositions that feel alive.</p>
      </div>
      <div class="card reveal">
        <span class="label">03</span>
        <h3>Koko</h3>
        <p>Austerity. Prefer one perfectly chosen element over many adequate ones. Scarcity creates value.</p>
      </div>
      <div class="card reveal">
        <span class="label">04</span>
        <h3>Shizen</h3>
        <p>Naturalness. Nothing should feel forced. The best design appears effortless, as if it arranged itself.</p>
      </div>
      <div class="card reveal">
        <span class="label">05</span>
        <h3>Yugen</h3>
        <p>Subtle profundity. Suggest rather than declare. Let shadow, space, and restraint communicate depth.</p>
      </div>
      <div class="card reveal">
        <span class="label">06</span>
        <h3>Seijaku</h3>
        <p>Tranquility. The cumulative result of all principles -- a stillness that invites focus and contemplation.</p>
      </div>
    </div>
  </section>

  <!-- ========== SPLIT SECTION ========== -->
  <hr class="divider">

  <section id="gallery" class="split reveal">
    <div class="split-text">
      <span class="label">Practice</span>
      <h2>Stone and space</h2>
      <p>In a Zen garden, stones are placed first -- they anchor the composition. Everything else is defined by the relationship between solid and void. In digital design, your content is the stone. The whitespace around it determines its weight.</p>
    </div>
    <div class="split-image">
      Stone Arrangement
    </div>
  </section>

  <section class="split split--reverse reveal">
    <div class="split-image">
      Raked Gravel Patterns
    </div>
    <div class="split-text">
      <span class="label">Texture</span>
      <h2>Patterns in stillness</h2>
      <p>Raked gravel represents flowing water without a single drop being present. In the same way, subtle CSS patterns and textures can evoke depth and movement without adding visual weight or distraction.</p>
    </div>
  </section>

  <!-- ========== QUOTE ========== -->
  <section class="quote-section raked-sand">
    <p class="quote reveal">"The space between the notes is as important as the notes themselves."</p>
    <p class="attribution reveal">Claude Debussy</p>
  </section>

  <!-- ========== CONTACT / CTA ========== -->
  <hr class="divider--stones">

  <section id="contact" class="section section--narrow" style="text-align: center;">
    <div class="reveal">
      <span class="label">Begin</span>
      <h2>Walk the garden path</h2>
      <p style="margin: 1.5rem auto 0;">Every journey toward simplicity begins with a single step. Let emptiness guide your next design.</p>
      <a href="#" class="hero-cta" style="margin-top: 2.5rem;">Start your journey</a>
    </div>
  </section>

  <!-- ========== FOOTER ========== -->
  <footer>
    <a href="#" class="nav-brand">Zen Garden</a>
    <p>A contemplative approach to digital design, inspired by the karesansui gardens of Japan.</p>
    <ul class="footer-links">
      <li><a href="#philosophy">Philosophy</a></li>
      <li><a href="#principles">Principles</a></li>
      <li><a href="#gallery">Gallery</a></li>
      <li><a href="#contact">Contact</a></li>
    </ul>
    <p class="copyright">Designed with intention and restraint</p>
  </footer>

  <!-- ========== SCRIPTS ========== -->
  <script>
    /* Scroll-triggered nav background */
    const navbar = document.getElementById('navbar');
    window.addEventListener('scroll', () => {
      navbar.classList.toggle('scrolled', window.scrollY > 60);
    });

    /* Scroll-triggered reveal */
    const revealElements = document.querySelectorAll('.reveal');
    const observer = new IntersectionObserver((entries) => {
      entries.forEach(entry => {
        if (entry.isIntersecting) {
          entry.target.classList.add('visible');
        }
      });
    }, {
      threshold: 0.15,
      rootMargin: '0px 0px -40px 0px'
    });

    revealElements.forEach(el => observer.observe(el));
  </script>

</body>
</html>

Implementation Tips