DESIGN.md · Analysis

The Crossroads

thecrosseroads.net · 12 May 2026 · 47 colors · Inter

The Crossroads

A technical blog with a clean, minimalist aesthetic that prioritizes readability and content clarity. The design uses a dual-mode color system (light and dark) with precise typographic hierarchy and subtle interactive states.

Colors

surface#ffffff
surface-dim#f7f7f7
surface-bright#ffffff
surface-container-lowest#efefef
surface-container-low#f7f7f7
surface-container#efefef
surface-container-high#dbdbdb
surface-container-highest#d5d5d5
on-surface#363636
on-surface-variant#70777f
inverse-surface#161f27
inverse-on-surface#dbdbdb
outline#dbdbdb
outline-variant#949494
surface-tint#0076d1
primary#0076d1
on-primary#ffffff
primary-container#41adff
on-primary-container#000000
inverse-primary#41adff
secondary#0096bf
on-secondary#ffffff
secondary-container#b3e5fc
on-secondary-container#003d5c
tertiary#39a33c
on-tertiary#ffffff
tertiary-container#c8e6c9
on-tertiary-container#1b5e20
error#f92672
on-error#ffffff
error-container#ffcdd2
on-error-container#b71c1c
primary-fixed#41adff
primary-fixed-dim#0076d1
on-primary-fixed#000000
on-primary-fixed-variant#003d5c
secondary-fixed#b3e5fc
secondary-fixed-dim#0096bf
on-secondary-fixed#001f2e
on-secondary-fixed-variant#003d5c
tertiary-fixed#c8e6c9
tertiary-fixed-dim#39a33c
on-tertiary-fixed#001f2e
on-tertiary-fixed-variant#1b5e20
background#ffffff
on-background#363636
surface-variant#f7f7f7

Typography

display
fontFamily: Inter · fontSize: 60px · fontWeight: 700 · lineHeight: 68px · letterSpacing: -0.04em
headline-lg
fontFamily: Inter · fontSize: 40px · fontWeight: 600 · lineHeight: 48px · letterSpacing: -0.02em
headline-md
fontFamily: Inter · fontSize: 28px · fontWeight: 600 · lineHeight: 36px · letterSpacing: -0.01em
title-lg
fontFamily: Inter · fontSize: 20px · fontWeight: 600 · lineHeight: 28px · letterSpacing: 0em
body-lg
fontFamily: Inter · fontSize: 18px · fontWeight: 400 · lineHeight: 28px · letterSpacing: 0em
body-md
fontFamily: Inter · fontSize: 16px · fontWeight: 400 · lineHeight: 24px · letterSpacing: 0em
label-md
fontFamily: Inter · fontSize: 14px · fontWeight: 600 · lineHeight: 20px · letterSpacing: 0.01em
label-sm
fontFamily: Inter · fontSize: 12px · fontWeight: 500 · lineHeight: 16px · letterSpacing: 0.05em

Design guidance

Overview

The Crossroads is a technical blog that embodies 'Austere Clarity'—a design philosophy that strips away ornament to reveal pure content. The site serves software engineers and system administrators seeking precise, well-documented technical guidance. The aesthetic is deliberately minimal: a single-column layout with generous whitespace, a restrained color palette anchored by a vivid cyan-blue accent (#0076d1), and typography that prioritizes legibility over decoration. The emotional response is one of trust and focus—the interface recedes, and the reader's attention flows directly to the text. The brand personality is technical yet approachable: precise without being pedantic, helpful without being condescending. Voice example: 'By the end of this article, we'll have a fully-functioning two-tier CA where the private keys for the CAs are stored on Yubikeys.'

Colors

The color system operates on a principle of 'functional minimalism,' where color serves a specific communicative purpose rather than decoration. Primary (#0076d1) is the signature accent used exclusively for hyperlinks, the site title, and post headings—it commands attention without overwhelming the page. Secondary (#0096bf) provides a subtle alternative for focus states and interactive elements. The surface stack progresses from pure white (#ffffff) for the body background through carefully calibrated grays (#efefef, #dbdbdb, #d5d5d5) for containers and hover states, creating a shallow but perceptible depth hierarchy. On-surface text (#363636) is a warm near-black that reduces eye strain compared to pure black (#000000). The muted text color (#70777f) is reserved for metadata and secondar

Typography

The type system uses Inter as the primary typeface for body and UI, paired with Tenor Sans for headers—a serif-sans combination that signals 'technical yet human.' The hierarchy spans eight levels: display (60px, 700 weight) for hero moments, headline-lg (40px, 600) for major sections, headline-md (28px, 600) for post titles, title-lg (20px, 600) for subsections, body-lg (18px, 400) for primary content, body-md (16px, 400) for secondary content, label-md (14px, 600) for UI labels and metadata, and label-sm (12px, 500) for captions and timestamps. Letter-spacing is conservative: -0.04em on display to tighten large text, -0.02em on headlines for sophistication, and 0em on body text to preserve readability. Line-height is generous: 68px on display (1.13x), 48px on headlines (1.2x), and 28px o

Layout

The layout follows a single-column, fixed-width model optimized for reading: the container max-width is 800px, centered on the viewport with 10px horizontal padding on mobile and 20px auto margins on desktop. This constraint ensures line lengths stay between 50–75 characters, the optimal range for reading comprehension. The page rhythm is governed by a spacing scale: 8px is the unit, with semantic multiples (12px for tight grouping, 24px for section separation, 40px for major breaks, 64px for hero spacing). Post articles use 24px margin-bottom between paragraphs and 40px margin-top on h2 headings to create visual breathing room. The header is fixed at the top with zero background opacity, allowing content to scroll beneath it. Navigation uses a pipe separator (|) between links, a typograph

Elevation & Depth

Depth is conveyed through subtle shadow and color shifts rather than dramatic layering. The shadow system uses three levels: sm (0 1px 2px rgba(0, 0, 0, 0.06)) for minimal elevation like focus rings, md (0 3px 8px rgba(0, 0, 0, 0.15)) for cards and dropdowns, and lg (0 8px 24px rgba(0, 0, 0, 0.12)) for modals and overlays. The primary depth mechanism is the surface-container stack: the base body is #ffffff, containers rise to #efefef, and interactive hover states reach #dbdbdb—a 15% darkening at each step. Focus states use a 2px outline at rgba(0, 150, 191, 0.67) with no shadow, keeping the in

Shapes

The shape language is 'Technical Pragmatism'—rounded corners are used sparingly and consistently at 6px (the DEFAULT radius), applied to inputs, buttons, and cards. This radius is large enough to feel modern and approachable (not sharp like 0px or 2px) but small enough to maintain a technical aesthetic (not soft like 12px or 16px). Blockquotes use a 4px left border instead of rounded corners, emphasizing their role as quoted material. Buttons and inputs share the 6px radius, creating visual cohesion. The full radius (9999px) is reserved for badges and pill-shaped elements. Inline code uses a 2

Components

Action Elements Links are the primary interactive element and use the primary color (#0076d1) with no underline by default. On hover, they transition to the primary-container color (#41adff) and gain an underline (transition: color 100ms linear, text-decoration 100ms linear). Focus states add a 2px outline at rgba(0, 150, 191, 0.67). Buttons come in two variants: primary (solid background #0076d1, white text, 10px 30px padding, 6px radius) and secondary (transparent background, primary text, 1px border at #dbdbdb). Both use label-md typography (14px, 600 weight). On hover, primary buttons transition to #41adff background with black text; secondary buttons gain a #dbdbdb background. Active state applies transform: translateY(2px) for tactile feedback. Disabled buttons reduce opacity to

Do's and Don'ts

**Do**

  • Do use the primary color (#0076d1) exclusively for links, headings, and CTAs—never for body text or backgrounds.
  • Do maintain the 800px container max-width to keep line lengths between 50–75 characters for optimal readability.
  • Do apply the 6px border-radius consistently to all buttons, inputs, and cards to reinforce the technical-yet-approachable aesthetic.
  • Do use the 100ms linear transition timing for all interactive state changes (hover, focus, active) to create a responsive but not frenetic feel.
  • Do respect the dual-mode color system by testing all components in both light (#ffffff background) and dark (#202b38 background) modes.
  • Do use the surface-container stack (#efefef, #dbdbdb, #d5d5d5) for hover and active states rather than introducing new colors.

**Don't**

  • Don't use pure black (#000000) for body text—use #363636 (on-surface) to reduce eye strain and maintain the warm, approachable tone.
  • Don't apply shadows to more than one layer at a time; use the surface-container color shifts for depth instead.
  • Don't exceed 6px border-radius on buttons and inputs; larger radii (12px+) conflict with the technical aesthetic.
  • Don't use color alone to convey meaning; always pair color with text, icons, or borders (e.g., error states should include both #f92672 color and a border or icon).
  • Don't animate transitions faster than 100ms or slower than 300ms; the 100ms default (--animation-duration) is optimal for this interface.
  • Don't introduce new accent colors; the primary (#0076d1), secondary (#0096bf), and tertiary (#39a33c) palette is complete and intentional.