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
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.
Edit, then copy or download.