Typography System

Comprehensive Brand Guidelines for Portfolio Excellence

version 1.0 - December 2025

Typography Foundations

Our typography system balances editorial sophistication with digital clarity. Playfair Display brings warmth and personality to headlines, while Inter ensures readability and professionalism in body text.

Display Font: Playfair Display Serif • Weights: 400, 500, 600, 700

The quick brown fox jumps over the lazy dog

/* CSS Variable */ --font-display: 'Playfair Display', serif; /* Usage */ font-family: var(--font-display);
Body Font: Inter Sans-serif • Weights: 300, 400, 500, 600

The quick brown fox jumps over the lazy dog. This sentence demonstrates the clarity and readability of Inter at body text sizes. Notice the balanced letter spacing and comfortable line height.

/* CSS Variable */ --font-body: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif; /* Usage */ font-family: var(--font-body);

When to Use Each Font

  • Playfair Display: Hero titles, section headers, lens titles, card titles, timeline dates, pull quotes
  • Inter: Body text, navigation, buttons, labels, metadata, captions, form fields
  • Never mix in the same line: Keep font families separate within text blocks

Type Hierarchy

A clear hierarchy guides the reader's eye and establishes information priority. Our system uses size, weight, color, and spacing to create rhythm and scanability.

Level Element Font Family Size (Desktop) Weight Line Height
H1 Hero Title Playfair Display clamp(3rem, 8vw, 7rem) 600 1.1
H2 Section Title Playfair Display clamp(2rem, 5vw, 4rem) 600 1.1
H3 Lens Title Playfair Display clamp(2rem, 4vw, 3rem) 500 1.1
H4 Card Title Playfair Display 1.5rem 600 1.3
H5 Timeline Title Inter 1.3rem 600 1.4
Body Large Lens Body Text Inter 1.1rem 400 1.8
Body Standard Paragraph Inter 1rem 400 1.6
Small Metadata / Caption Inter 0.9rem 400 1.5

✓ Do

  • • Use clamp() for fluid typography
  • • Maintain consistent line heights
  • • Apply proper spacing between sections
  • • Use Playfair for all major headings
  • • Keep body text at comfortable sizes

✗ Don't

  • • Use fixed pixel sizes for headings
  • • Mix fonts within the same element
  • • Use all caps for long passages
  • • Set body text below 16px base
  • • Ignore mobile readability

Type Scale & Spacing

Vertical rhythm and consistent spacing create visual harmony. Our system uses proportional spacing based on element hierarchy.

Line Height Variables CSS Custom Properties
/* Line Height System */ --lh-tight: 1.1; /* Headlines, display text */ --lh-base: 1.6; /* Standard body text */ --lh-loose: 1.8; /* Long-form content */

Spacing Guidelines

  • Section Spacing: 120px between major sections (60px mobile)
  • Element Spacing: 40-60px between related elements
  • Paragraph Spacing: 1.5rem margin-bottom for body paragraphs
  • Heading Margins: 2-3rem top margin, 1-1.5rem bottom margin

Typography Colors

Color hierarchy reinforces information hierarchy. Our palette ensures WCAG AA compliance while maintaining brand personality.

Primary Text
--text-primary
#2a2a2a
Secondary Text
--text-secondary
#666666
Coral Accent
--coral
#FF6B6B
Deep Navy
--deep-navy
#1a1a2e

Color Application Rules

  • Primary Text: Headlines, body text, navigation – highest contrast
  • Secondary Text: Supporting text, descriptions, metadata – reduced emphasis
  • Coral Accent: Interactive elements, highlights, CTAs – sparingly for impact
  • Deep Navy: Card titles, important labels – strong hierarchy marker

Component Typography

Reusable components with consistent typography ensure brand cohesion across all portfolio pages.

Hero Section Primary Landing Component

Origins & Operations

Where syntax meets stories, and systems become human

/* Hero Typography */ .hero h1 { font-family: 'Playfair Display', serif; font-size: clamp(3rem, 8vw, 7rem); font-weight: 600; line-height: 1.1; margin-bottom: 2rem; } .hero-subtitle { font-size: clamp(1.2rem, 2vw, 1.5rem); color: var(--text-secondary); font-weight: 300; letter-spacing: 0.05em; } .accent { color: var(--coral); }
Section Titles Content Dividers

Three Ways of Seeing

/* Section Title */ .section-title { font-family: 'Playfair Display', serif; font-size: clamp(2rem, 5vw, 4rem); text-align: center; margin-bottom: 100px; }
Body Text Primary Content

I didn't set out to be a strategist. I set out to make sense of things. Syntax, stories, systems: all languages waiting to be decoded. Born in Venezuela, I landed in the U.S. with a scholarship and a stubborn belief: building from scratch is a feature, not a flaw.

/* Body Text */ .lens-text { font-size: 1.1rem; line-height: 1.8; color: var(--text-secondary); } .lens-text p { margin-bottom: 1.5rem; }

Responsive Typography

Our typography scales fluidly across devices using clamp() and strategic breakpoints. Mobile-first readability is paramount.

Element Desktop (1024px+) Tablet (768-1023px) Mobile (320-767px)
Hero Title 7rem (112px) 4rem (64px) 3.2rem (51px)
Section Title 4rem (64px) 3rem (48px) 2.6rem (42px)
Lens Title 3rem (48px) 2.4rem (38px) 2rem (32px)
Body Text 1.1rem (17.6px) 1rem (16px) 1rem (16px)

Live Examples

See the typography system in action with real content examples.

Card Component Interactive Element

Systematic Intelligence

I don't rely on intuition alone. Every campaign, every brand story, every launch is built on frameworks that turn complexity into clarity.

Timeline Element Chronological Content
Venezuela
Origins

Born with a big heart and a hunger for perspective. A curious kid who learned early that building from scratch isn't a limitation—it's a superpower.

Before & After

See the dramatic transformation when the typography system is applied to inconsistent content.

❌ Before: Inconsistent Typography

My Portfolio Project

This is a sample portfolio project showcasing my work. The typography here is inconsistent, using different fonts without a clear system.

Project Overview

The line heights are inconsistent, creating uneven rhythm. Spacing feels arbitrary rather than intentional.

✓ After: Brand System Applied

My Portfolio Project

This is the same content, now elevated with the brand typography system. Playfair Display brings sophistication to headlines, while Inter ensures clarity in body text.

Project Overview

Line heights create natural rhythm. Spacing is intentional and proportional. The type scale ensures clear hierarchy at every level.

Quick Start Guide

Get up and running with the typography system in minutes.

Step 1: Add Fonts In your HTML <head>
<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=Playfair+Display:wght@400;500;600;700&family=Inter:wght@300;400;500;600&display=swap" rel="stylesheet">
Step 2: Add CSS Variables In your stylesheet
:root { --font-display: 'Playfair Display', serif; --font-body: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif; --lh-tight: 1.1; --lh-base: 1.6; --lh-loose: 1.8; --coral: #FF6B6B; --teal: #4ECDC4; --deep-navy: #1a1a2e; --text-primary: #2a2a2a; --text-secondary: #666666; }
Step 3: Use Semantic HTML Structure your content
<h1>Your Project <span class="accent">Title</span></h1> <p class="hero-subtitle">Compelling subtitle</p> <h2 class="section-title">Section Heading</h2> <p class="body-large">Important narrative content...</p>

Complete CSS Reference

Copy this complete stylesheet to ensure consistent typography across all portfolio pages.

Full Typography System CSS Complete Implementation
/* === TYPOGRAPHY SYSTEM === */ :root { --font-display: 'Playfair Display', serif; --font-body: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif; --lh-tight: 1.1; --lh-base: 1.6; --lh-loose: 1.8; --coral: #FF6B6B; --teal: #4ECDC4; --deep-navy: #1a1a2e; --bg-body: #fefefe; --bg-card: #ffffff; --bg-section: #f5f5f0; --text-primary: #2a2a2a; --text-secondary: #666666; --border-color: rgba(0,0,0,0.1); } [data-theme="dark"] { --bg-body: #0E0E0F; --bg-card: #1A1A1A; --bg-section: #141414; --text-primary: #f5f5f5; --text-secondary: #a0a0a0; --border-color: rgba(255,255,255,0.1); --deep-navy: #f5f5f5; } body { font-family: var(--font-body); background: var(--bg-body); color: var(--text-primary); line-height: var(--lh-base); font-size: 16px; } h1 { font-family: var(--font-display); font-size: clamp(3rem, 8vw, 7rem); font-weight: 600; line-height: var(--lh-tight); margin-bottom: 2rem; } h2 { font-family: var(--font-display); font-size: clamp(2rem, 5vw, 4rem); font-weight: 600; line-height: var(--lh-tight); margin-bottom: 1.5rem; } h3 { font-family: var(--font-display); font-size: clamp(2rem, 4vw, 3rem); font-weight: 500; line-height: var(--lh-tight); margin-bottom: 1.25rem; } h4 { font-family: var(--font-display); font-size: 1.5rem; font-weight: 600; line-height: 1.3; margin-bottom: 1rem; color: var(--deep-navy); } p { margin-bottom: 1.5rem; line-height: var(--lh-loose); } .accent { color: var(--coral); } .hero-subtitle { font-size: clamp(1.2rem, 2vw, 1.5rem); color: var(--text-secondary); font-weight: 300; letter-spacing: 0.05em; } .body-large { font-size: 1.1rem; line-height: var(--lh-loose); color: var(--text-secondary); } /* Responsive adjustments */ @media (max-width: 767px) { h1 { font-size: clamp(2rem, 7vw, 3.2rem); } h2 { font-size: clamp(1.8rem, 6vw, 2.6rem); } h3 { font-size: clamp(1.6rem, 5vw, 2.2rem); } }