Design Philosophy: Editorial Minimal. Clean, grayscale, typography-led. No decorative chrome — structure and whitespace do the work.
- Typography over decoration — hierarchy is communicated through size, weight, and spacing, not color or icons.
- Grayscale only — no accent colors in the UI. Color exists only inside article syntax highlighting.
- Consistent editorial grammar — every page follows the same layout pattern: labeled section header → content rows.
- Readable at rest — no hover-triggered reveals for essential information. Hover states are subtle.
- No visual noise — no hero banners, gradient backgrounds, Card wrappers, flip cards, or emoji in navigation.
All values are CSS HSL variables defined in src/app/globals.css.
| Token | HSL | Hex equivalent |
|---|---|---|
--background |
0 0% 100% |
#ffffff |
--foreground |
0 0% 15% |
#262626 |
--card |
0 0% 100% |
#ffffff |
--muted |
0 0% 96% |
#f5f5f5 |
--muted-foreground |
0 0% 40% |
#666666 |
--border |
0 0% 90% |
#e6e6e6 |
--primary |
0 0% 15% |
#262626 |
--secondary |
0 0% 96% |
#f5f5f5 |
| Token | HSL | Hex equivalent |
|---|---|---|
--background |
0 0% 6% |
#0f0f0f |
--foreground |
0 0% 98% |
#fafafa |
--card |
0 0% 10% |
#1a1a1a |
--muted |
0 0% 15% |
#262626 |
--muted-foreground |
0 0% 65% |
#a6a6a6 |
--border |
0 0% 20% |
#333333 |
- Never use accent colors in page UI (buttons, links, labels).
- All interactive states use opacity shifts (
opacity: 0.8) or muted background (bg-muted/30), not color changes. - Theme transitions use
0.2s easeonbackground-color,border-color, andcolor.
- Family:
Noto Sans TC(Google Fonts CDN) - Weights used: 300 (light), 400 (regular), 500 (medium), 700 (bold)
- Fallback stack:
-apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif - Default body weight: 400
| Usage | Class / CSS | Notes |
|---|---|---|
| Page section label | text-xs tracking-[0.2em] uppercase |
muted color, above every section |
| Page h1 | text-3xl sm:text-4xl font-bold |
immediately below section label |
| Article h1 | font-size: 2.5rem; font-weight: 700 |
inside .article-content |
| Article h2 | font-size: 1.75rem + bottom border |
|
| Article h3 | font-size: 1.5rem |
|
| Article h4 | font-size: 1.25rem |
|
| Body / article | font-size: 1rem; line-height: 1.8–1.85 |
|
| Muted / meta | text-xs or text-sm text-muted-foreground |
dates, categories, labels |
| Code (inline) | Monaco, Menlo, Ubuntu Mono, monospace; font-size: 0.875rem |
Monaco→Menlo→Ubuntu Mono→monospace
max-w-3xl mx-auto px-6 sm:px-8 lg:px-12
Used on every page for text content. Photos gallery uses a wider container (px-4 sm:px-6 lg:px-8) after the editorial header.
Every page starts with this two-line header:
[text-xs tracking-[0.2em] uppercase muted-foreground] ← section label
[text-3xl+ font-bold] ← page title
Numbered sections (00, 01, 02…) with:
<div class="border-b border-border pb-3 mb-8">
<span class="text-xs tracking-[0.18em] uppercase text-muted-foreground">00 · Section Name</span>
</div>Blog listing rows follow the format: MM/DD · title · category
py-4 border-b border-border/50 hover:bg-muted/30
- Left:
MM/DDdate intext-xs text-muted-foreground - Center: title (medium weight) + optional excerpt in muted
- Right: category label in
text-xs text-muted-foreground
- Height:
h-14, sticky,border-b border-border/50 - Container:
max-w-3xl - Logo:
favicon.ico(20×20,rounded-sm) +"Waynspace"(text-sm font-medium) - Nav links: plain text, no borders, no backgrounds
- Active:
border-b border-foreground font-medium - Inactive:
text-muted-foreground hover:text-foreground
- Active:
- Single flex row inside
max-w-3xl - Left:
"Waynspace"+"© {year} Wei-Ting Liu" - Right: nav links + social text links (GitHub, LinkedIn, Instagram, Medium, Email)
- Desktop: inline text links
- Mobile: portal overlay menu
- Items: About (
/about), All Articles (/blog), Photos (/photos), Camera Float (/camera-float-ntu) - No emoji, no icons, no rounded buttons
- Light / Dark / System modes via
src/components/ThemeProvider.tsx - Toggle appears in header
[photo 72px circular right] + Name (bold) + bio paragraph
CV↗ link + 5 social icons (small, muted)
─────────────────────────────
00 · LATEST ARTICLES
[5 article rows — editorial format]
─────────────────────────────
Newsletter section (EmailSubscribe)
[Page header: "BLOG" label + "文章"]
─────────────────────────────
Category filter tabs (text, no pill backgrounds)
─────────────────────────────
Articles grouped by year
YYYY
MM/DD · title · category
...
[Breadcrumb] → Back to Blog
[Title]
[Date · Read time · Category]
─────────────────────────────
[Cover image — full width within container]
─────────────────────────────
.article-content prose body
[Page header: "ABOUT" label + Name]
─────────────────────────────
00 · SUMMARY
01 · EXPERIENCE (left-border bullet list)
02 · PROJECTS (inline sub-card)
03 · EDUCATION
04 · SKILLS
05 · AWARDS & LEADERSHIP
[Editorial header: max-w-3xl]
─────────────────────────────
[Full-bleed masonry gallery — wider container]
Lightbox: pure black bg, bare icon controls, "n / total" caption
Defined in src/app/globals.css:
| Element | Style |
|---|---|
p |
line-height: 1.85; margin-bottom: 2rem |
h2 |
1.75rem + border-bottom: 2px solid border |
h3 |
1.5rem |
blockquote |
Left border 4px solid primary, bg-secondary, italic |
code (inline) |
bg-secondary, border, border-radius: 0.25rem |
pre |
bg-card, border, border-radius: 0.5rem, copy button on hover |
img |
mx-auto, border-radius: 0.5rem, subtle box-shadow |
table |
Full width, bg-card, border-collapse, th has bg-secondary |
hr |
border-top: 2px solid border, centered, width: 80% |
- Theme: GitHub (light) / GitHub Dark (dark mode)
- Implemented via
highlight.jsclasses inglobals.css - Copy-to-clipboard button appears on
pre:hover
| Pattern | Value |
|---|---|
| Theme color transitions | background-color 0.2s ease, border-color 0.2s ease, color 0.2s ease |
| Hover on article rows | hover:bg-muted/30 |
| Hover on photos | bg-black/8 overlay (no scale) |
| Copy button reveal | opacity: 0 → opacity: 1 on pre:hover, 0.15s ease |
| Image lazy load | opacity: 0 → opacity: 1 on .loaded, 0.3s ease |
| Lightbox | Instant open, pure bg-black |
No entrance animations, scroll effects, or parallax.
- CDN:
https://img.waynspace.com/(Cloudflare R2) - Path format:
YYYY/MM/slug/filename.webp - Format:
.webpalways - No local
/publicimage paths in published content - In articles: centered,
border-radius: 0.5rem, subtle shadow - In gallery: no border-radius, no shadow, bare presentation
- Use
border-b border-borderto divide sections - Use
text-xs tracking-[0.2em] uppercase text-muted-foregroundfor labels - Use
text-muted-foregroundfor all secondary text (dates, categories, captions) - Keep all containers at
max-w-3xlunless the content is explicitly full-bleed (photos) - Number all major sections (00, 01, 02…)
- Use accent colors (blue, purple, green) in page UI
- Add gradient backgrounds
- Wrap content in Card components with rounded borders + shadows
- Use emoji in navigation or headings
- Add hero sections or full-viewport banners
- Use rounded button borders
- Add animations beyond the approved
0.2s easetransitions