Ink Wash is a web design aesthetic rooted in the centuries-old East Asian tradition of ink wash painting, known as sumi-e (墨絵) in Japanese, shui-mo hua (水墨画) in Chinese, and sumukhwa (수묵화) in Korean. This art form, which originated during the Tang Dynasty in China and later flourished in Japan under the influence of Zen Buddhism, distills visual expression down to its barest essentials: black ink, water, a brush, and paper. In sumi-e, the artist captures the spirit or essence (called ki-in or 気韻) of a subject rather than its photographic likeness, using fluid brush strokes that range from bold and decisive to gossamer-thin washes of diluted ink. An ancient aphorism states that “sumi is black and yet it is not black,” meaning that the monochromatic ink paradoxically suggests the full spectrum of color through its infinite gradations of tone.
Translated into digital design, the Ink Wash aesthetic embraces radical restraint. Color palettes are overwhelmingly monochromatic, built from graduated shades of ink-black, warm grays, cool grays, and the luminous white of untouched paper. Typography draws from calligraphic traditions, favoring serifs and brush-influenced letterforms that honor the shared heritage of East Asian calligraphy and painting. Layouts are governed by the Japanese concept of ma (間) – the meaningful void between elements – where negative space is not emptiness but a deliberate compositional force that gives weight and significance to every stroke that does appear. Compositions tend toward asymmetry, echoing the traditional ink painting principle that perfect symmetry is lifeless while deliberate imbalance creates visual tension and energy.
The emotional register of Ink Wash design is one of meditative calm, intellectual clarity, and quiet sophistication. It rejects visual noise, gratuitous decoration, and saturated color in favor of atmospheric depth, tonal subtlety, and the beauty of imperfection. Surfaces feel like handmade paper. Transitions evoke the slow diffusion of ink into wet fibers. Interactions are gentle and unhurried. The result is a digital experience that feels closer to a contemplative scroll painting than a commercial billboard – an invitation to slow down, breathe, and perceive the essential nature of content stripped of all excess.
The Ink Wash palette is built on a monochromatic foundation of ink tones, from the deepest concentrated black to the faintest diluted gray, set against the warm luminosity of traditional East Asian paper. Occasional warm or cool undertones in the grays reflect the natural chemistry of sumi ink, which shifts subtly between warm brown-blacks and cool blue-blacks depending on concentration and the grinding of the ink stick. A single restrained accent – traditionally a vermilion red drawn from the artist’s seal stamp (hanko/rakkan) – provides the only chromatic punctuation.
| Swatch | Hex | Role/Usage |
|---|---|---|
#0D0D0D |
Concentrated ink – headings, primary text, strongest visual anchors | |
#1A1A1A |
Rich ink – subheadings, navigation text, active states | |
#333333 |
Dark wash – body text, secondary content, strong borders | |
#4D4D4D |
Medium-dark wash – supporting text, icon fills | |
#6B6B6B |
Medium wash – tertiary text, captions, metadata | |
#8A8A8A |
Light-medium wash – placeholders, disabled states | |
#A8A8A8 |
Pale wash – subtle dividers, ghost text | |
#C4C4C4 |
Faint wash – card borders, hairline rules | |
#DCDCDC |
Mist wash – section dividers, hover backgrounds | |
#EDECE8 |
Warm paper – alternate surface, card backgrounds | |
#F5F4F0 |
Rice paper – primary background, the luminous ground | |
#FAF9F6 |
Pure xuan paper – lightest surface, modal backgrounds | |
#C23B22 |
Vermilion seal (rakkan) – sole chromatic accent, CTAs, links, alerts | |
#8B2500 |
Dark vermilion – hover/active accent, emphasis borders | |
#4A3728 |
Warm ink (sepia undertone) – alternate text color for warm compositions |
:root {
/* Ink tones (dark to light) */
--ink-concentrated: #0D0D0D;
--ink-rich: #1A1A1A;
--ink-dark-wash: #333333;
--ink-medium-dark: #4D4D4D;
--ink-medium: #6B6B6B;
--ink-light-medium: #8A8A8A;
--ink-pale: #A8A8A8;
--ink-faint: #C4C4C4;
--ink-mist: #DCDCDC;
/* Paper tones (warm whites) */
--paper-warm: #EDECE8;
--paper-rice: #F5F4F0;
--paper-xuan: #FAF9F6;
/* Accent */
--vermilion: #C23B22;
--vermilion-dark: #8B2500;
--ink-warm: #4A3728;
/* Semantic aliases */
--color-bg: var(--paper-rice);
--color-surface: var(--paper-warm);
--color-text: var(--ink-dark-wash);
--color-text-heading: var(--ink-concentrated);
--color-text-muted: var(--ink-medium);
--color-border: var(--ink-faint);
--color-accent: var(--vermilion);
--color-accent-hover: var(--vermilion-dark);
}
Ink Wash typography bridges two worlds: the calligraphic tradition of East Asian brush writing, where each character is a gestural painting, and the Western typographic tradition of structured, readable text. The ideal typeface selections echo the qualities of brush-written letterforms – visible stroke modulation, organic contrast between thick and thin, and a sense of the hand behind the form – while remaining fully legible in digital contexts. Weight usage skews toward light and regular; bold weights feel antithetical to the restrained, meditative spirit of the aesthetic. Generous line height and letter spacing honor the principle of ma, allowing each word breathing room.
| Font | Category | Weight Range | Role | Character |
|---|---|---|---|---|
| Noto Serif JP | Serif (CJK) | 200-900 | Headings, bilingual content | Bridges Japanese and Latin with harmonious proportions |
| Zen Old Mincho | Serif (CJK) | 400-900 | Display, editorial headings | Classical Japanese printing aesthetic with brush heritage |
| Cormorant Garamond | Serif | 300-700 | Headings, pull quotes | High stroke contrast, calligraphic origins, elegant at large sizes |
| EB Garamond | Serif | 400-800 | Body text, long-form reading | Renaissance humanist serif with organic, pen-derived forms |
| Crimson Pro | Serif | 200-900 | Body text, editorial | Refined book face with gentle stroke modulation |
| Zen Kaku Gothic New | Sans-serif (CJK) | 300-900 | UI text, bilingual labels | Clean Japanese gothic with subtle brush influence |
| Inter | Sans-serif | 100-900 | UI, meta text, captions | Neutral, highly legible sans for functional elements |
| Cormorant | Serif (display) | 300-700 | Large display, hero text | Dramatic stroke contrast that echoes brush calligraphy |
| Pairing | Heading | Body | Best For |
|---|---|---|---|
| Classical Scroll | Cormorant Garamond (300) | EB Garamond (400) | Editorial, long-form, literary content |
| East Meets West | Zen Old Mincho (400) | Crimson Pro (300) | Bilingual sites, cultural content |
| Contemplative Modern | Cormorant (300) | Inter (300) | Portfolios, galleries, minimal sites |
| Zen Digital | Noto Serif JP (300) | Zen Kaku Gothic New (400) | Japanese-focused sites, apps |
/* Google Fonts import */
@import url('https://fonts.googleapis.com/css2?family=Cormorant+Garamond:ital,wght@0,300;0,400;0,500;1,300;1,400&family=EB+Garamond:ital,wght@0,400;0,500;1,400&family=Inter:wght@300;400;500&family=Zen+Old+Mincho:wght@400;500&display=swap');
/* Base typography */
body {
font-family: 'EB Garamond', 'Crimson Pro', Georgia, serif;
font-size: 1.125rem;
font-weight: 400;
line-height: 1.8;
color: var(--ink-dark-wash);
letter-spacing: 0.01em;
-webkit-font-smoothing: antialiased;
}
h1, h2, h3, h4 {
font-family: 'Cormorant Garamond', 'Cormorant', Georgia, serif;
font-weight: 300;
line-height: 1.2;
color: var(--ink-concentrated);
letter-spacing: 0.02em;
}
h1 {
font-size: clamp(2.5rem, 5vw, 4rem);
font-weight: 300;
letter-spacing: 0.04em;
}
h2 {
font-size: clamp(1.75rem, 3vw, 2.5rem);
letter-spacing: 0.03em;
}
h3 {
font-size: clamp(1.25rem, 2vw, 1.5rem);
font-weight: 400;
}
/* Captions and metadata */
.meta, .caption, figcaption {
font-family: 'Inter', sans-serif;
font-size: 0.8rem;
font-weight: 300;
letter-spacing: 0.08em;
text-transform: uppercase;
color: var(--ink-medium);
}
/* Calligraphic accent text */
.brush-text {
font-family: 'Zen Old Mincho', serif;
font-style: normal;
font-weight: 400;
letter-spacing: 0.06em;
}
/* Pull quotes */
blockquote {
font-family: 'Cormorant Garamond', serif;
font-size: 1.5rem;
font-weight: 300;
font-style: italic;
line-height: 1.6;
color: var(--ink-medium-dark);
border-left: 2px solid var(--ink-faint);
padding-left: 1.5rem;
margin: 2.5rem 0;
}
.card-ink {
background: var(--paper-xuan);
border: 1px solid var(--ink-faint);
border-radius: 2px;
padding: 2.5rem;
position: relative;
transition: all 0.4s ease;
overflow: hidden;
}
/* Ink bleed edge -- subtle top border that mimics brush contact */
.card-ink::before {
content: '';
position: absolute;
top: 0;
left: 10%;
right: 10%;
height: 2px;
background: linear-gradient(
90deg,
transparent 0%,
var(--ink-pale) 20%,
var(--ink-medium) 50%,
var(--ink-pale) 80%,
transparent 100%
);
opacity: 0.5;
}
.card-ink:hover {
border-color: var(--ink-pale);
box-shadow: 0 8px 32px rgba(13, 13, 13, 0.06);
transform: translateY(-2px);
}
.card-ink h3 {
margin-bottom: 0.75rem;
}
.card-ink p {
color: var(--ink-medium-dark);
line-height: 1.75;
}
/* Seal stamp accent on card */
.card-ink .card-seal {
width: 28px;
height: 28px;
background: var(--vermilion);
border-radius: 2px;
opacity: 0.8;
position: absolute;
bottom: 1.5rem;
right: 1.5rem;
}
/* Primary -- ink stroke button */
.btn-ink {
background: var(--ink-concentrated);
color: var(--paper-rice);
border: none;
border-radius: 1px;
padding: 14px 36px;
font-family: 'Inter', sans-serif;
font-size: 0.8rem;
font-weight: 400;
letter-spacing: 0.12em;
text-transform: uppercase;
cursor: pointer;
position: relative;
transition: all 0.3s ease;
}
.btn-ink:hover {
background: var(--ink-rich);
box-shadow: 0 4px 16px rgba(13, 13, 13, 0.15);
}
.btn-ink:active {
transform: scale(0.98);
}
/* Secondary -- ghost button with ink border */
.btn-ink-ghost {
background: transparent;
color: var(--ink-dark-wash);
border: 1px solid var(--ink-medium);
border-radius: 1px;
padding: 13px 35px;
font-family: 'Inter', sans-serif;
font-size: 0.8rem;
font-weight: 400;
letter-spacing: 0.12em;
text-transform: uppercase;
cursor: pointer;
transition: all 0.3s ease;
}
.btn-ink-ghost:hover {
border-color: var(--ink-concentrated);
background: rgba(13, 13, 13, 0.03);
}
/* Vermilion accent button -- for primary CTAs */
.btn-vermilion {
background: var(--vermilion);
color: var(--paper-xuan);
border: none;
border-radius: 1px;
padding: 14px 36px;
font-family: 'Inter', sans-serif;
font-size: 0.8rem;
font-weight: 400;
letter-spacing: 0.12em;
text-transform: uppercase;
cursor: pointer;
transition: all 0.3s ease;
}
.btn-vermilion:hover {
background: var(--vermilion-dark);
box-shadow: 0 4px 16px rgba(194, 59, 34, 0.2);
}
.nav-ink {
display: flex;
align-items: center;
justify-content: space-between;
padding: 2rem 3rem;
background: var(--paper-rice);
border-bottom: 1px solid var(--ink-mist);
position: sticky;
top: 0;
z-index: 100;
}
.nav-ink .wordmark {
font-family: 'Cormorant Garamond', serif;
font-size: 1.4rem;
font-weight: 300;
letter-spacing: 0.08em;
color: var(--ink-concentrated);
text-decoration: none;
}
/* Seal stamp logo element */
.nav-ink .seal-logo {
width: 32px;
height: 32px;
background: var(--vermilion);
border-radius: 2px;
display: flex;
align-items: center;
justify-content: center;
color: var(--paper-xuan);
font-family: 'Zen Old Mincho', serif;
font-size: 0.9rem;
}
.nav-ink ul {
list-style: none;
display: flex;
gap: 2.5rem;
margin: 0;
padding: 0;
}
.nav-ink a {
font-family: 'Inter', sans-serif;
font-size: 0.78rem;
font-weight: 400;
letter-spacing: 0.1em;
text-transform: uppercase;
color: var(--ink-medium-dark);
text-decoration: none;
position: relative;
transition: color 0.3s ease;
}
.nav-ink a:hover {
color: var(--ink-concentrated);
}
/* Brush stroke underline on hover */
.nav-ink a::after {
content: '';
position: absolute;
bottom: -4px;
left: 0;
width: 0;
height: 1.5px;
background: linear-gradient(
90deg,
var(--ink-concentrated) 0%,
var(--ink-medium) 70%,
transparent 100%
);
transition: width 0.4s ease;
}
.nav-ink a:hover::after {
width: 100%;
}
.hero-ink {
min-height: 90vh;
display: flex;
flex-direction: column;
justify-content: center;
align-items: flex-start;
padding: 6rem 3rem;
position: relative;
overflow: hidden;
background: var(--paper-rice);
}
/* Atmospheric ink wash background */
.hero-ink::before {
content: '';
position: absolute;
top: 0;
right: 0;
bottom: 0;
width: 50%;
background: radial-gradient(
ellipse at 70% 40%,
rgba(13, 13, 13, 0.04) 0%,
rgba(13, 13, 13, 0.02) 30%,
transparent 70%
);
pointer-events: none;
}
/* Distant mountain silhouette */
.hero-ink::after {
content: '';
position: absolute;
bottom: 0;
left: 0;
right: 0;
height: 30%;
background: linear-gradient(
180deg,
transparent 0%,
rgba(13, 13, 13, 0.015) 40%,
rgba(13, 13, 13, 0.03) 100%
);
pointer-events: none;
}
.hero-ink h1 {
font-family: 'Cormorant Garamond', serif;
font-size: clamp(3rem, 6vw, 5rem);
font-weight: 300;
line-height: 1.1;
color: var(--ink-concentrated);
margin-bottom: 1.5rem;
max-width: 14ch;
letter-spacing: 0.02em;
}
.hero-ink .subtitle {
font-family: 'EB Garamond', serif;
font-size: 1.25rem;
font-weight: 400;
color: var(--ink-medium);
max-width: 36ch;
line-height: 1.7;
margin-bottom: 3rem;
}
.hero-ink .scroll-hint {
font-family: 'Inter', sans-serif;
font-size: 0.7rem;
letter-spacing: 0.15em;
text-transform: uppercase;
color: var(--ink-light-medium);
position: absolute;
bottom: 3rem;
left: 3rem;
}
/* Horizontal mist -- like fog rolling across a valley */
.wash-horizontal {
background: linear-gradient(
90deg,
var(--paper-rice) 0%,
rgba(13, 13, 13, 0.025) 40%,
rgba(13, 13, 13, 0.04) 60%,
var(--paper-rice) 100%
);
}
/* Vertical atmospheric depth -- distant mountains */
.wash-vertical {
background: linear-gradient(
180deg,
var(--paper-rice) 0%,
rgba(13, 13, 13, 0.02) 30%,
rgba(13, 13, 13, 0.05) 70%,
rgba(13, 13, 13, 0.03) 100%
);
}
/* Radial ink bleed -- centered ink drop diffusion */
.wash-radial {
background: radial-gradient(
circle at 50% 50%,
rgba(13, 13, 13, 0.06) 0%,
rgba(13, 13, 13, 0.03) 30%,
rgba(13, 13, 13, 0.01) 60%,
transparent 80%
);
}
/* Corner ink spill -- asymmetric wash pooling in one corner */
.wash-corner {
background: radial-gradient(
ellipse at 85% 15%,
rgba(13, 13, 13, 0.05) 0%,
rgba(13, 13, 13, 0.02) 30%,
transparent 60%
);
}
/* Tapered horizontal rule -- mimics a single brush stroke */
.brush-divider {
border: none;
height: 2px;
background: linear-gradient(
90deg,
transparent 0%,
var(--ink-pale) 15%,
var(--ink-medium) 45%,
var(--ink-dark-wash) 50%,
var(--ink-medium) 55%,
var(--ink-pale) 85%,
transparent 100%
);
max-width: 200px;
margin: 5rem auto;
opacity: 0.4;
}
/* Asymmetric brush stroke -- thicker start, trailing end */
.brush-divider-asym {
border: none;
height: 2px;
background: linear-gradient(
90deg,
var(--ink-dark-wash) 0%,
var(--ink-medium) 20%,
var(--ink-pale) 50%,
var(--ink-faint) 75%,
transparent 100%
);
max-width: 180px;
margin: 4rem 0 4rem 10%;
opacity: 0.5;
}
/* Enso circle divider */
.enso-divider {
text-align: center;
margin: 5rem auto;
}
.enso-divider::before {
content: '';
display: inline-block;
width: 48px;
height: 48px;
border: 2px solid var(--ink-medium);
border-radius: 50%;
border-top-width: 1px;
border-right-width: 3px;
border-bottom-width: 2px;
border-left-width: 1px;
border-top-color: transparent;
opacity: 0.25;
transform: rotate(-25deg);
}
/* Rice paper grain -- subtle fibrous texture */
.paper-texture {
position: relative;
}
.paper-texture::after {
content: '';
position: absolute;
inset: 0;
opacity: 0.02;
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8'%3E%3Crect width='1' height='1' x='2' y='1' fill='%23333' opacity='0.4'/%3E%3Crect width='1' height='1' x='5' y='4' fill='%23333' opacity='0.3'/%3E%3Crect width='1' height='1' x='1' y='6' fill='%23333' opacity='0.5'/%3E%3Crect width='1' height='1' x='7' y='2' fill='%23333' opacity='0.2'/%3E%3C/svg%3E");
background-size: 8px 8px;
pointer-events: none;
mix-blend-mode: multiply;
}
/* Wet edge bleed effect for containers */
.ink-bleed {
box-shadow:
0 0 20px rgba(13, 13, 13, 0.03),
0 0 60px rgba(13, 13, 13, 0.02);
border: 1px solid rgba(13, 13, 13, 0.06);
}
:root {
--ink-concentrated: #0D0D0D;
--ink-rich: #1A1A1A;
--ink-dark-wash: #333333;
--ink-medium-dark: #4D4D4D;
--ink-medium: #6B6B6B;
--ink-light-medium: #8A8A8A;
--ink-pale: #A8A8A8;
--ink-faint: #C4C4C4;
--ink-mist: #DCDCDC;
--paper-warm: #EDECE8;
--paper-rice: #F5F4F0;
--paper-xuan: #FAF9F6;
--vermilion: #C23B22;
--vermilion-dark: #8B2500;
--ink-warm: #4A3728;
}
*, *::before, *::after {
box-sizing: border-box;
margin: 0;
}
html {
scroll-behavior: smooth;
}
body {
font-family: 'EB Garamond', Georgia, serif;
background-color: var(--paper-rice);
color: var(--ink-dark-wash);
line-height: 1.8;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
h1, h2, h3, h4 {
font-family: 'Cormorant Garamond', Georgia, serif;
font-weight: 300;
color: var(--ink-concentrated);
}
a {
color: var(--ink-dark-wash);
text-decoration: underline;
text-decoration-color: var(--ink-faint);
text-underline-offset: 3px;
transition: color 0.3s ease, text-decoration-color 0.3s ease;
}
a:hover {
color: var(--vermilion);
text-decoration-color: var(--vermilion);
}
.container {
max-width: 780px;
margin: 0 auto;
padding: 0 2rem;
}
section {
padding: 6rem 0;
}
img {
max-width: 100%;
height: auto;
filter: grayscale(100%) contrast(1.05);
}
::selection {
background: rgba(194, 59, 34, 0.15);
color: var(--ink-concentrated);
}
| Aesthetic | Relationship |
|---|---|
| Japandi | Shares Zen minimalism and ma (negative space); Japandi is warmer with Scandinavian material influence |
| Wabi-Sabi | Philosophical foundation – embracing imperfection, transience, and incompleteness |
| Minimalism | Parallel commitment to reduction and essentialism, though Ink Wash is more atmospheric and organic |
| Zen Design | Spiritual sibling; Zen design applies the same Buddhist principles across all media and materials |
| Chinoiserie | Western interpretation of Chinese aesthetic motifs; Ink Wash is the authentic source tradition |
| Monochrome Design | Shares the single-hue constraint, though Ink Wash is specifically rooted in East Asian ink painting tradition |
| Dark Academia | Shares intellectual, literary atmosphere and muted tones, but differs in warmth and cultural reference |
| Brutalism (Web) | Shares the raw, unadorned quality and embrace of stark contrast, though Brutalism is aggressive where Ink Wash is contemplative |
| Earth Tones | Related through natural material palette; Earth Tones uses warm chromatic range, Ink Wash limits to achromatic with warm undertones |
| Flat Design | Shares rejection of 3D effects and gradients-as-decoration, though Flat Design uses bold color where Ink Wash uses tonal gray |
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Ink Wash -- Sumi-e Design</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;1,300;1,400&family=EB+Garamond:ital,wght@0,400;0,500;1,400&family=Inter:wght@300;400;500&family=Zen+Old+Mincho:wght@400;500&display=swap" rel="stylesheet">
<style>
/* ============================================
CSS CUSTOM PROPERTIES
============================================ */
:root {
/* Ink tones */
--ink-concentrated: #0D0D0D;
--ink-rich: #1A1A1A;
--ink-dark-wash: #333333;
--ink-medium-dark: #4D4D4D;
--ink-medium: #6B6B6B;
--ink-light-medium: #8A8A8A;
--ink-pale: #A8A8A8;
--ink-faint: #C4C4C4;
--ink-mist: #DCDCDC;
/* Paper tones */
--paper-warm: #EDECE8;
--paper-rice: #F5F4F0;
--paper-xuan: #FAF9F6;
/* Accent */
--vermilion: #C23B22;
--vermilion-dark: #8B2500;
--ink-warm: #4A3728;
/* Spacing */
--space-xs: 0.5rem;
--space-sm: 1rem;
--space-md: 2rem;
--space-lg: 4rem;
--space-xl: 6rem;
--space-2xl: 8rem;
}
/* ============================================
RESET & BASE
============================================ */
*, *::before, *::after {
box-sizing: border-box;
margin: 0;
padding: 0;
}
html {
scroll-behavior: smooth;
font-size: 16px;
}
body {
font-family: 'EB Garamond', Georgia, serif;
font-size: 1.125rem;
line-height: 1.8;
color: var(--ink-dark-wash);
background-color: var(--paper-rice);
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
/* Paper texture overlay on body */
body::after {
content: '';
position: fixed;
inset: 0;
opacity: 0.018;
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8'%3E%3Crect width='1' height='1' x='2' y='1' fill='%23333' opacity='0.4'/%3E%3Crect width='1' height='1' x='5' y='4' fill='%23333' opacity='0.3'/%3E%3Crect width='1' height='1' x='1' y='6' fill='%23333' opacity='0.5'/%3E%3Crect width='1' height='1' x='7' y='2' fill='%23333' opacity='0.2'/%3E%3C/svg%3E");
background-size: 8px 8px;
pointer-events: none;
z-index: 9999;
mix-blend-mode: multiply;
}
::selection {
background: rgba(194, 59, 34, 0.15);
color: var(--ink-concentrated);
}
img {
max-width: 100%;
height: auto;
display: block;
}
/* ============================================
TYPOGRAPHY
============================================ */
h1, h2, h3, h4 {
font-family: 'Cormorant Garamond', Georgia, serif;
font-weight: 300;
color: var(--ink-concentrated);
line-height: 1.2;
}
h1 {
font-size: clamp(2.75rem, 6vw, 4.5rem);
letter-spacing: 0.03em;
}
h2 {
font-size: clamp(1.75rem, 3.5vw, 2.75rem);
letter-spacing: 0.02em;
}
h3 {
font-size: clamp(1.25rem, 2vw, 1.5rem);
font-weight: 400;
letter-spacing: 0.02em;
}
p {
max-width: 38em;
margin-bottom: 1.5em;
}
a {
color: var(--ink-dark-wash);
text-decoration: underline;
text-decoration-color: var(--ink-faint);
text-underline-offset: 3px;
transition: color 0.3s ease, text-decoration-color 0.3s ease;
}
a:hover {
color: var(--vermilion);
text-decoration-color: var(--vermilion);
}
.meta {
font-family: 'Inter', sans-serif;
font-size: 0.75rem;
font-weight: 400;
letter-spacing: 0.1em;
text-transform: uppercase;
color: var(--ink-light-medium);
}
blockquote {
font-family: 'Cormorant Garamond', serif;
font-size: 1.5rem;
font-weight: 300;
font-style: italic;
line-height: 1.6;
color: var(--ink-medium-dark);
border-left: 2px solid var(--ink-faint);
padding-left: 1.5rem;
margin: var(--space-lg) 0;
}
/* ============================================
LAYOUT
============================================ */
.container {
max-width: 780px;
margin: 0 auto;
padding: 0 var(--space-md);
}
.container--wide {
max-width: 1100px;
}
section {
padding: var(--space-xl) 0;
}
/* ============================================
NAVIGATION
============================================ */
.nav {
display: flex;
align-items: center;
justify-content: space-between;
padding: var(--space-md) var(--space-lg);
background: var(--paper-rice);
border-bottom: 1px solid var(--ink-mist);
position: sticky;
top: 0;
z-index: 100;
}
.nav__brand {
display: flex;
align-items: center;
gap: var(--space-sm);
text-decoration: none;
}
.nav__seal {
width: 30px;
height: 30px;
background: var(--vermilion);
border-radius: 2px;
display: flex;
align-items: center;
justify-content: center;
color: var(--paper-xuan);
font-family: 'Zen Old Mincho', serif;
font-size: 0.85rem;
line-height: 1;
}
.nav__wordmark {
font-family: 'Cormorant Garamond', serif;
font-size: 1.35rem;
font-weight: 300;
letter-spacing: 0.06em;
color: var(--ink-concentrated);
}
.nav__links {
list-style: none;
display: flex;
gap: var(--space-md);
}
.nav__links a {
font-family: 'Inter', sans-serif;
font-size: 0.75rem;
font-weight: 400;
letter-spacing: 0.1em;
text-transform: uppercase;
color: var(--ink-medium-dark);
text-decoration: none;
position: relative;
transition: color 0.3s ease;
}
.nav__links a:hover {
color: var(--ink-concentrated);
}
.nav__links a::after {
content: '';
position: absolute;
bottom: -4px;
left: 0;
width: 0;
height: 1.5px;
background: linear-gradient(
90deg,
var(--ink-concentrated),
var(--ink-medium),
transparent
);
transition: width 0.4s ease;
}
.nav__links a:hover::after {
width: 100%;
}
/* ============================================
HERO
============================================ */
.hero {
min-height: 92vh;
display: flex;
flex-direction: column;
justify-content: center;
padding: var(--space-2xl) var(--space-lg);
position: relative;
overflow: hidden;
}
/* Atmospheric wash */
.hero::before {
content: '';
position: absolute;
top: 0;
right: 0;
bottom: 0;
width: 55%;
background: radial-gradient(
ellipse at 65% 35%,
rgba(13, 13, 13, 0.045) 0%,
rgba(13, 13, 13, 0.02) 35%,
transparent 70%
);
pointer-events: none;
}
/* Ground mist */
.hero::after {
content: '';
position: absolute;
bottom: 0;
left: 0;
right: 0;
height: 25%;
background: linear-gradient(
180deg,
transparent,
rgba(13, 13, 13, 0.02) 50%,
rgba(13, 13, 13, 0.035)
);
pointer-events: none;
}
.hero__content {
position: relative;
z-index: 1;
max-width: 680px;
}
.hero__label {
font-family: 'Inter', sans-serif;
font-size: 0.7rem;
font-weight: 400;
letter-spacing: 0.18em;
text-transform: uppercase;
color: var(--ink-light-medium);
margin-bottom: var(--space-md);
display: block;
}
.hero h1 {
margin-bottom: var(--space-md);
max-width: 14ch;
}
.hero__subtitle {
font-family: 'EB Garamond', serif;
font-size: 1.25rem;
color: var(--ink-medium);
max-width: 36ch;
line-height: 1.7;
margin-bottom: var(--space-lg);
}
.hero__cta {
display: flex;
gap: var(--space-sm);
flex-wrap: wrap;
}
.hero__scroll {
font-family: 'Inter', sans-serif;
font-size: 0.65rem;
letter-spacing: 0.18em;
text-transform: uppercase;
color: var(--ink-pale);
position: absolute;
bottom: var(--space-lg);
left: var(--space-lg);
z-index: 1;
}
.hero__scroll span {
display: block;
width: 1px;
height: 40px;
background: linear-gradient(180deg, var(--ink-pale), transparent);
margin-top: var(--space-xs);
}
/* ============================================
BUTTONS
============================================ */
.btn {
display: inline-block;
font-family: 'Inter', sans-serif;
font-size: 0.78rem;
font-weight: 400;
letter-spacing: 0.12em;
text-transform: uppercase;
text-decoration: none;
padding: 14px 36px;
border-radius: 1px;
cursor: pointer;
transition: all 0.35s ease;
border: none;
}
.btn--primary {
background: var(--ink-concentrated);
color: var(--paper-rice);
}
.btn--primary:hover {
background: var(--ink-rich);
color: var(--paper-rice);
box-shadow: 0 4px 20px rgba(13, 13, 13, 0.15);
}
.btn--ghost {
background: transparent;
color: var(--ink-dark-wash);
border: 1px solid var(--ink-medium);
}
.btn--ghost:hover {
color: var(--ink-concentrated);
border-color: var(--ink-concentrated);
background: rgba(13, 13, 13, 0.025);
}
.btn--vermilion {
background: var(--vermilion);
color: var(--paper-xuan);
}
.btn--vermilion:hover {
background: var(--vermilion-dark);
color: var(--paper-xuan);
box-shadow: 0 4px 20px rgba(194, 59, 34, 0.2);
}
/* ============================================
BRUSH DIVIDER
============================================ */
.divider {
border: none;
height: 2px;
max-width: 180px;
margin: var(--space-xl) auto;
opacity: 0.35;
}
.divider--center {
background: linear-gradient(
90deg,
transparent,
var(--ink-pale) 15%,
var(--ink-medium) 50%,
var(--ink-pale) 85%,
transparent
);
}
.divider--asym {
background: linear-gradient(
90deg,
var(--ink-dark-wash),
var(--ink-medium) 25%,
var(--ink-pale) 55%,
transparent
);
margin-left: 10%;
margin-right: auto;
}
/* ============================================
ABOUT / FEATURE SECTION
============================================ */
.about {
padding: var(--space-2xl) 0;
}
.about__grid {
display: grid;
grid-template-columns: 1fr 2fr;
gap: var(--space-lg);
align-items: start;
}
.about__label {
font-family: 'Inter', sans-serif;
font-size: 0.72rem;
font-weight: 400;
letter-spacing: 0.14em;
text-transform: uppercase;
color: var(--ink-light-medium);
padding-top: 0.4rem;
}
.about__text p {
color: var(--ink-medium-dark);
}
/* ============================================
CARDS
============================================ */
.cards {
padding: var(--space-xl) 0;
}
.cards__header {
text-align: center;
margin-bottom: var(--space-xl);
}
.cards__header .meta {
margin-bottom: var(--space-sm);
display: block;
}
.cards__grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: var(--space-md);
}
.card {
background: var(--paper-xuan);
border: 1px solid var(--ink-mist);
border-radius: 2px;
padding: var(--space-md) var(--space-md) 3.5rem;
position: relative;
transition: all 0.4s ease;
overflow: hidden;
}
.card::before {
content: '';
position: absolute;
top: 0;
left: 12%;
right: 12%;
height: 2px;
background: linear-gradient(
90deg,
transparent,
var(--ink-pale) 25%,
var(--ink-medium) 50%,
var(--ink-pale) 75%,
transparent
);
opacity: 0.4;
}
.card:hover {
border-color: var(--ink-pale);
box-shadow: 0 8px 32px rgba(13, 13, 13, 0.06);
transform: translateY(-2px);
}
.card__number {
font-family: 'Cormorant Garamond', serif;
font-size: 2.5rem;
font-weight: 300;
color: var(--ink-mist);
line-height: 1;
margin-bottom: var(--space-sm);
}
.card h3 {
margin-bottom: 0.6rem;
}
.card p {
font-size: 1rem;
color: var(--ink-medium);
line-height: 1.7;
}
.card__seal {
width: 22px;
height: 22px;
background: var(--vermilion);
border-radius: 2px;
opacity: 0.7;
position: absolute;
bottom: var(--space-sm);
right: var(--space-sm);
}
/* ============================================
QUOTE / BLOCKQUOTE SECTION
============================================ */
.quote-section {
padding: var(--space-2xl) 0;
text-align: center;
position: relative;
}
.quote-section::before {
content: '';
position: absolute;
inset: 0;
background: radial-gradient(
ellipse at 50% 50%,
rgba(13, 13, 13, 0.025),
transparent 70%
);
pointer-events: none;
}
.quote-section blockquote {
border-left: none;
padding-left: 0;
max-width: 32ch;
margin: 0 auto;
font-size: clamp(1.5rem, 3vw, 2rem);
position: relative;
z-index: 1;
}
.quote-section cite {
display: block;
font-family: 'Inter', sans-serif;
font-size: 0.75rem;
font-style: normal;
letter-spacing: 0.1em;
text-transform: uppercase;
color: var(--ink-light-medium);
margin-top: var(--space-md);
}
/* ============================================
GALLERY
============================================ */
.gallery {
padding: var(--space-xl) 0;
}
.gallery__grid {
display: grid;
grid-template-columns: 2fr 1fr;
grid-template-rows: auto auto;
gap: var(--space-sm);
}
.gallery__item {
overflow: hidden;
border-radius: 2px;
position: relative;
}
.gallery__item img {
width: 100%;
height: 100%;
object-fit: cover;
filter: grayscale(100%) contrast(1.05);
transition: filter 0.6s ease, transform 0.6s ease;
}
.gallery__item:hover img {
filter: grayscale(80%) contrast(1.1);
transform: scale(1.02);
}
.gallery__item--tall {
grid-row: span 2;
}
/* ============================================
FOOTER
============================================ */
.footer {
padding: var(--space-xl) var(--space-lg) var(--space-lg);
border-top: 1px solid var(--ink-mist);
}
.footer__inner {
display: flex;
justify-content: space-between;
align-items: flex-end;
max-width: 1100px;
margin: 0 auto;
}
.footer__brand {
display: flex;
align-items: center;
gap: var(--space-xs);
}
.footer__seal {
width: 24px;
height: 24px;
background: var(--vermilion);
border-radius: 2px;
opacity: 0.7;
}
.footer__name {
font-family: 'Cormorant Garamond', serif;
font-size: 1.1rem;
font-weight: 300;
letter-spacing: 0.06em;
color: var(--ink-medium-dark);
}
.footer__copy {
font-family: 'Inter', sans-serif;
font-size: 0.7rem;
letter-spacing: 0.08em;
color: var(--ink-pale);
}
/* ============================================
RESPONSIVE
============================================ */
@media (max-width: 900px) {
.cards__grid {
grid-template-columns: 1fr;
gap: var(--space-md);
}
.about__grid {
grid-template-columns: 1fr;
gap: var(--space-md);
}
.gallery__grid {
grid-template-columns: 1fr;
}
.gallery__item--tall {
grid-row: span 1;
}
}
@media (max-width: 640px) {
.nav {
padding: var(--space-sm) var(--space-md);
}
.nav__links {
gap: var(--space-sm);
}
.nav__links a {
font-size: 0.68rem;
}
.hero {
min-height: 80vh;
padding: var(--space-xl) var(--space-md);
}
.hero h1 {
font-size: clamp(2rem, 8vw, 3rem);
}
.footer__inner {
flex-direction: column;
align-items: flex-start;
gap: var(--space-sm);
}
}
/* ============================================
ANIMATION (subtle, contemplative)
============================================ */
@keyframes fadeInUp {
from {
opacity: 0;
transform: translateY(20px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
.animate-in {
animation: fadeInUp 0.8s ease-out both;
}
.animate-in:nth-child(2) { animation-delay: 0.15s; }
.animate-in:nth-child(3) { animation-delay: 0.3s; }
.animate-in:nth-child(4) { animation-delay: 0.45s; }
</style>
</head>
<body>
<!-- ========== NAVIGATION ========== -->
<nav class="nav">
<a href="#" class="nav__brand">
<div class="nav__seal">墨</div>
<span class="nav__wordmark">Ink & Wash</span>
</a>
<ul class="nav__links">
<li><a href="#about">About</a></li>
<li><a href="#work">Work</a></li>
<li><a href="#gallery">Gallery</a></li>
<li><a href="#contact">Contact</a></li>
</ul>
</nav>
<!-- ========== HERO ========== -->
<section class="hero">
<div class="hero__content">
<span class="hero__label">Sumi-e Inspired Design</span>
<h1>The Essence of the Brush</h1>
<p class="hero__subtitle">
Where ink meets silence, and the space between strokes
holds as much meaning as the marks themselves.
</p>
<div class="hero__cta">
<a href="#work" class="btn btn--primary">Explore Work</a>
<a href="#about" class="btn btn--ghost">Learn More</a>
</div>
</div>
<div class="hero__scroll">
Scroll
<span></span>
</div>
</section>
<!-- ========== DIVIDER ========== -->
<hr class="divider divider--asym">
<!-- ========== ABOUT ========== -->
<section class="about container" id="about">
<div class="about__grid">
<div class="about__label">Philosophy</div>
<div class="about__text">
<h2>Emptiness is Form</h2>
<p>
In the tradition of sumi-e, the artist does not seek to reproduce
what the eye sees but to capture the spirit that animates the subject.
A bamboo stalk painted in six strokes carries more life than a
photographic rendering, because the brush conveys ki -- vital energy --
through its movement.
</p>
<p>
We apply this principle to digital design. Every element earns its
place through purpose, not decoration. The generous emptiness between
components is not absence but presence -- the ma that gives each
element its weight and significance.
</p>
</div>
</div>
</section>
<!-- ========== DIVIDER ========== -->
<hr class="divider divider--center">
<!-- ========== CARDS ========== -->
<section class="cards container container--wide" id="work">
<div class="cards__header">
<span class="meta">Principles</span>
<h2>The Four Treasures</h2>
</div>
<div class="cards__grid">
<div class="card animate-in">
<div class="card__number">01</div>
<h3>Brush (Fude)</h3>
<p>
The tool is an extension of the mind. Every interaction must feel
as intentional and alive as a loaded brush touching paper.
</p>
<div class="card__seal"></div>
</div>
<div class="card animate-in">
<div class="card__number">02</div>
<h3>Ink (Sumi)</h3>
<p>
From a single pigment, infinite expression. Our monochromatic
palette contains all the tonal depth needed to communicate clearly.
</p>
<div class="card__seal"></div>
</div>
<div class="card animate-in">
<div class="card__number">03</div>
<h3>Paper (Kami)</h3>
<p>
The ground receives and transforms. White space is not empty canvas
waiting to be filled but a luminous presence that shapes every mark.
</p>
<div class="card__seal"></div>
</div>
</div>
</section>
<!-- ========== QUOTE ========== -->
<section class="quote-section">
<blockquote>
"In ink painting, the void speaks louder than the brush."
</blockquote>
<cite>Traditional Saying</cite>
</section>
<!-- ========== DIVIDER ========== -->
<hr class="divider divider--asym">
<!-- ========== GALLERY ========== -->
<section class="gallery container container--wide" id="gallery">
<div class="cards__header">
<span class="meta">Selected Works</span>
<h2>Impressions</h2>
</div>
<div class="gallery__grid">
<div class="gallery__item">
<img src="https://images.unsplash.com/photo-1544947950-fa07a98d237f?w=800&h=500&fit=crop&auto=format"
alt="Mountain landscape in ink wash style">
</div>
<div class="gallery__item gallery__item--tall">
<img src="https://images.unsplash.com/photo-1513364776144-60967b0f800f?w=400&h=600&fit=crop&auto=format"
alt="Bamboo grove in morning mist">
</div>
<div class="gallery__item">
<img src="https://images.unsplash.com/photo-1501084817091-a4f3d1d19e07?w=800&h=500&fit=crop&auto=format"
alt="Still water reflecting mountains">
</div>
</div>
</section>
<!-- ========== CONTACT CTA ========== -->
<section class="about container" id="contact" style="padding-bottom: var(--space-2xl);">
<div class="about__grid">
<div class="about__label">Connect</div>
<div class="about__text">
<h2>Begin a Conversation</h2>
<p>
Like the meeting of brush and paper, every collaboration begins
with a single point of contact. We would welcome the opportunity
to bring contemplative clarity to your next project.
</p>
<a href="#" class="btn btn--vermilion">Get in Touch</a>
</div>
</div>
</section>
<!-- ========== FOOTER ========== -->
<footer class="footer">
<div class="footer__inner">
<div class="footer__brand">
<div class="footer__seal"></div>
<span class="footer__name">Ink & Wash Studio</span>
</div>
<span class="footer__copy">© 2026 Ink & Wash. All rights reserved.</span>
</div>
</footer>
</body>
</html>
filter: grayscale(100%) on all imagery – convert photographs to monochrome at the CSS level so you can adjust the effect without re-exporting assets; pair with contrast(1.05) to compensate for the slight flatness that grayscale introducesmix-blend-mode: multiply for textures and overlays – this blending mode naturally mimics how ink interacts with paper, darkening where layers overlap while preserving the luminosity of light areasease or ease-out curves feel more organic than linear, mirroring the deceleration of a brush stroke trailing off--vermilion for the single most important action per screen: the primary CTA, the critical alert, the active navigation state; if vermilion appears in more than two places simultaneously, it loses its power--ink-concentrated as the background and --paper-rice as the text color; the same tonal relationships hold, and the result evokes the dramatic atmosphere of ink painted on dark silk