Extracted from a single .html file

Design System — The unreasonable effectiveness of HTML

A functional-minimalist, content-forward design language with editorial warmth. Extracted from thariqs.github.io/html-effectiveness. Warm neutrals, serif headings, mono metadata, and subtle delight — all in a single self-contained file.

Back to Home
01

Design Philosophy

Do

Use serif for headings, sans for body, mono for metadata — three fonts, clear roles.

Warm neutrals only — ivory, paper, oat. Never pure white or pure black.

Single accent color (clay) used sparingly. Olive is a cool counterpoint for diagrams.

Generous whitespace. Content breathes. Borders are thin (1.5px) and warm.

Subtle delight: gentle rotations, hover lifts, fast transitions. Never gaudy.

Don't

No bold weights above 600 — use weight 500 for emphasis.

No box shadows on static elements — only on hover or depth-establishing moments.

No background blur, glassmorphism, or gradient backgrounds.

No opacity-based hover states — shift color or position instead.

No external fonts, icon libraries, or CSS frameworks. Fully self-contained.

02

Color Palette

ivory #FAF9F5
paper #FFFFFF
slate #141413
clay #D97757
oat #E3DACC
olive #788C5D
g100 #F0EEE6
g200 #E6E3DA
g300 #D1CFC5
g500 #87867F
g700 #3D3D3A
clay-d #B85C3E
TokenHexRole
--ivory#FAF9F5Page background
--paper#FFFFFFCard / surface background
--slate#141413Primary text (near-black)
--clay#D97757Primary accent, links, highlights
--clay-d#B85C3EDarker accent (hover variant)
--oat#E3DACCSecondary surface, decorative
--olive#788C5DSecondary accent (diagrams only)
--g100#F0EEE6Light surface, thumbnail bg
--g200#E6E3DALight border
--g300#D1CFC5Default border
--g500#87867FSecondary / muted text
--g700#3D3D3ABody text
03

Typography

The unreasonable effectiveness of HTML
h1 · serif · clamp(38px, 5.4vw, 62px) · weight 500 · line-height 1.06 · letter-spacing -0.018em
Exploration & Planning
h2 · serif · 27px · weight 500 · letter-spacing -0.012em

This is .intro body copy — 16.5px sans on g700. Twenty self-contained files an agent produced instead of a wall of markdown.

This is .sec-intro — 14.5px sans, used for section descriptions. Slightly smaller, still highly readable.

This is .desc — 13.5px sans, used for card body text at 1.5 line-height.

TokenFont Stack
--serifui-serif, Georgia, "Times New Roman", Times, serif
--sanssystem-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif
--monoui-monospace, "SF Mono", Menlo, Monaco, Consolas, monospace
ElementFontSizeWeightLine-heightLetter-spacing
h1serifclamp(38px, 5.4vw, 62px)5001.06-0.018em
h1 emserifinherititalic
h2serif27px500-0.012em
.introsans16.5px4001.55
.sec-introsans14.5px4001.55
.title (card)serif19px5001.22-0.008em
.desc (card)sans13.5px4001.5
.eyebrowmono12px4000.12em
.filemono11px400
.idxmono13px600
nav.toc asans12.5px400
.tagmono9.5px4000.08em
04

Spacing

Page max-width1120px
Page h-padding32px
Page b-padding140px
Section top72px
Card gap20px
Masthead top80px
Masthead bot56px
Card body pad18px 20px 16px
TokenValueUsage
max-width1120px.wrap container
h-padding32px.wrap left/right
b-padding140px.wrap bottom
section gap72pxmargin-top between sections
card gap20pxgrid gap between cards
card body18px 20px 16pxinternal card padding
nav pill7px 14pxtoc link internal padding
sec-head gap16pxflex gap in section header
sec indent50pxleft margin on .spec-block / .grid / .sec-intro
05

Borders & Radius

ElementBorderBorder-radius
Cards1.5px solid g30014px
Hero panes1.5px solid g30010px
Tags / badges1.5px solid g3006px
Nav pills1.5px solid g300999px (fully rounded)
Count badgesnone999px (fully rounded)
Code blocks / pre1.5px solid g30010px
SVG rectsvaries3–5px
Section dividers1.5px solid g300 (border-bottom)

Rule: Every border in the system is 1.5px. Never thicker, never thinner. This consistency is a defining characteristic. Border colors shift contextually (g300 default, g200 light, slate for emphasis/hover).

06

Shadows

ContextValue
Card hover0 10px 30px rgba(20, 20, 19, 0.10)
Hero HTML pane0 12px 32px rgba(20, 20, 19, 0.10)

Shadows are used only on hover or to establish depth hierarchy. Static cards have no shadow — the border alone defines them. Shadows are always warm-tinted (slate-based) with subtle 0.10 opacity.

07

Layout Patterns

PatternCSSNotes
Page wrapper max-width: 1120px; margin: 0 auto; padding: 0 32px 140px Generous bottom padding
Card grid grid-template-columns: repeat(auto-fill, minmax(316px, 1fr)); gap: 20px Fluid, no breakpoints needed
Hero grid grid-template-columns: 1fr 340px; gap: 48px Stacks at 880px
Section layout sec-head (flex row) → sec-intro → grid (50px left indent) Indent drops at 640px
Nav (TOC) display: flex; flex-wrap: wrap; gap: 8px Pills wrap naturally
Footer display: flex; justify-content: space-between; flex-wrap: wrap Two sections, stacks on narrow
BreakpointBehavior
880pxHero grid stacks to single column
640pxSection intro + card grid lose 50px left indent
08

Component Patterns

Card (static)

Card title
Description text that explains what this card links to. Two lines is typical.
filename.html

Navigation Pills

Exploration & Planning Code Review Design (hover)

Section Header

01 Section Title 3 demos

Eyebrow

Companion to the blog post
09

Motion & Transitions

ElementPropertiesDurationEasing
Nav pillsborder-color, color, background120msease (default)
Cardstransform, box-shadow, border-color150msease
Card thumb bgbackground150msease
Card arrowtransform (translateX 3px)150msease
Page scrollscroll-behaviorsmooth

Rule: Transitions are fast (120–150ms) and snappy. No opacity fades — changes are positional or color-shift based. The card hover lift (3px translateY) combined with shadow and border-color change creates a subtle-but-clear interactive signal.

10

Anti-Patterns

This system is right for

Content-heavy documentation, portfolios, blogs, companion pages, technical writing

Projects that value self-contained single-file HTML with zero dependencies

Interfaces where readability and scanability are the primary goals

This system is wrong for

Data-dense dashboards, complex forms, real-time apps

Projects requiring dark mode (no dark palette defined)

Brand work that needs loud, high-energy visual language

AvoidUse Instead
Pure black (#000) or pure grayWarm-tinted neutrals (slate, g700, g500)
Bold weights above 600Weight 500 for emphasis
Box shadows on static elementsBorders only; shadows reserved for hover/depth
Background blur / glassmorphismSolid paper or g100 backgrounds
Gradient backgroundsSolid colors (one exception: hero SVG decorative)
Border-radius above 14px (except pills)14px max for cards; 999px only for pill-shaped elements
Animations over 150ms120-150ms snappy transitions
External font loads (Google Fonts, etc.)System font stacks (ui-serif, system-ui, ui-monospace)
Icon libraries (Font Awesome, Lucide, etc.)Inline SVG using design tokens
CSS frameworks (Tailwind, Bootstrap, etc.)Hand-rolled CSS with custom properties
Opacity-based hover statesColor shifts or positional changes