website_designs

Analog Warmth Design Reference

Overview

Analog Warmth is a design aesthetic rooted in the visual language of film photography, drawing its identity from the warm tonal characteristics of classic film stocks like Kodak Portra, Fujifilm Superia, and Kodak Ektar. The style celebrates the organic imperfections inherent to analog processes: gentle film grain, soft light leaks that bleed warm oranges and ambers across compositions, slightly faded mid-tones, and the naturally desaturated color profiles that gave 35mm and medium-format photography their unmistakable character. Where digital precision favors clinical sharpness and color accuracy, Analog Warmth deliberately embraces the tactile, imperfect, and deeply human qualities of photochemical image-making.

In web and interface design, Analog Warmth translates into muted but warm color palettes dominated by ambers, soft peaches, faded ochres, and creamy off-whites. Backgrounds feel like aged photographic paper rather than sterile screens. Typography leans toward transitional serifs and humanist typefaces that echo the printed ephemera found in darkrooms and vintage photo albums – think photo captions typed on mechanical typewriters, handwritten developer notes, or the understated elegance of mid-century editorial layouts. Layouts favor generous whitespace and softened edges, allowing content to breathe the way a well-composed photograph gives its subject room within the frame.

The emotional resonance of Analog Warmth lies in its ability to evoke nostalgia without being overtly retro. It does not attempt to recreate the 1970s or simulate a specific decade. Instead, it borrows the timeless sensory qualities of film – the way grain gives an image texture you can almost feel, the way a light leak transforms a mundane scene into something luminous, the way faded tones suggest a memory rather than a document. This makes it particularly effective for brands and experiences that want to communicate authenticity, craftsmanship, intimacy, and emotional warmth. Photography portfolios, lifestyle brands, artisan product pages, personal journals, and editorial storytelling projects all benefit from this aesthetic’s unique ability to make digital spaces feel analog, physical, and alive.


Visual Characteristics

Core Design Traits

Design Principles


Color Palette

The Analog Warmth palette is derived from the tonal characteristics of classic film stocks. Kodak Portra contributes warm, peachy skin tones and soft amber highlights. Fujifilm stocks add subtle olive-greens and muted teals. The overall palette avoids pure hues in favor of colors that feel as though they have been developed, printed, and aged – gently faded, warmly shifted, and unmistakably analog.

Swatch Hex Role / Usage
Portra Cream #F5EDE0 Primary background; warm paper base
Darkroom Ivory #EDE4D3 Card and surface background
Light Leak Amber #E8A54B Primary accent; CTA highlights, light leak overlays
Kodak Peach #E4B08A Secondary accent; warm highlights, badges
Faded Ochre #C4A265 Tertiary accent; borders, subtle emphasis
Sepia Shadow #5C4A3A Primary text color
Exposure Brown #7A6150 Secondary text; captions, metadata
Film Fog Rose #C89B97 Soft accent; tags, hover states
Velvia Olive #8A8B6A Muted green accent; success states, natural elements
Halation Orange #D97A3E Strong accent; active states, glow effects
Dust Mote Gold #D4B876 Decorative accent; dividers, star ratings
Emulsion Blue #7A8B96 Cool neutral; links, secondary info
Shutter Black #3A332C Deep text; headings, high-contrast elements
Negative Strip #2C2520 Darkest tone; footer backgrounds, overlays
Developer Tint #F9F3EA Lightest background; alternate sections

CSS Custom Properties

:root {
  /* Backgrounds */
  --aw-cream: #F5EDE0;
  --aw-ivory: #EDE4D3;
  --aw-developer: #F9F3EA;

  /* Primary Accents */
  --aw-amber: #E8A54B;
  --aw-peach: #E4B08A;
  --aw-ochre: #C4A265;

  /* Text */
  --aw-sepia: #5C4A3A;
  --aw-brown: #7A6150;
  --aw-shutter: #3A332C;

  /* Secondary Accents */
  --aw-rose: #C89B97;
  --aw-olive: #8A8B6A;
  --aw-orange: #D97A3E;
  --aw-gold: #D4B876;
  --aw-blue: #7A8B96;

  /* Dark Tones */
  --aw-negative: #2C2520;
}

Typography

Analog Warmth typography draws from two traditions: the elegant transitional serifs found in mid-century editorial layouts and photo book design, and the raw mechanical character of typewriter faces used for darkroom notes, contact sheet annotations, and personal correspondence. The pairing of refined serifs with monospaced or typewriter-style fonts creates a tension between the polished and the handmade that defines the aesthetic’s character.

Font Weight(s) Usage Link
Libre Baskerville 400, 700 Headings; warm, readable transitional serif Libre Baskerville
Source Serif 4 300, 400, 600, 700 Body text; versatile optical-size serif Source Serif 4
Special Elite 400 Accent text; typewriter aesthetic for captions and labels Special Elite
Courier Prime 400, 700 Code, metadata, timestamps; clean monospace Courier Prime
Lora 400, 500, 600, 700 Alternative headings; calligraphic serif with warmth Lora
DM Sans 300, 400, 500 UI labels, navigation; clean humanist sans-serif DM Sans

Font Pairing Suggestions

Heading Body Vibe
Libre Baskerville 700 Source Serif 4 400 Classic editorial warmth; photo book feel
Lora 600 DM Sans 400 Warm serif headings with clean modern body
Special Elite 400 Source Serif 4 400 Darkroom notes meet polished prose
Libre Baskerville 700 Courier Prime 400 Vintage editorial with raw typewriter body

CSS Example

@import url('https://fonts.googleapis.com/css2?family=Libre+Baskerville:wght@400;700&family=Source+Serif+4:opsz,wght@8..60,300;8..60,400;8..60,600&family=Special+Elite&family=DM+Sans:wght@300;400;500&display=swap');

body {
  font-family: 'Source Serif 4', 'Georgia', serif;
  font-size: 1.05rem;
  line-height: 1.85;
  color: #5C4A3A;
  -webkit-font-smoothing: antialiased;
}

h1, h2, h3 {
  font-family: 'Libre Baskerville', 'Times New Roman', serif;
  font-weight: 700;
  letter-spacing: -0.01em;
  color: #3A332C;
}

.typewriter {
  font-family: 'Special Elite', 'Courier New', monospace;
  font-size: 0.95rem;
  letter-spacing: 0.03em;
  color: #7A6150;
}

.meta, .caption {
  font-family: 'Courier Prime', 'Courier New', monospace;
  font-size: 0.85rem;
  text-transform: uppercase;
  letter-spacing: 0.08em;
  color: #7A6150;
}

.ui-label {
  font-family: 'DM Sans', 'Helvetica Neue', sans-serif;
  font-size: 0.9rem;
  font-weight: 500;
  color: #5C4A3A;
}

Layout Principles


CSS / Design Techniques

Film Grain Overlay

.grain-overlay {
  position: relative;
}

.grain-overlay::after {
  content: '';
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  pointer-events: none;
  opacity: 0.06;
  background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='grain'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23grain)'/%3E%3C/svg%3E");
  background-repeat: repeat;
  background-size: 256px 256px;
  z-index: 1;
  mix-blend-mode: multiply;
}

Light Leak Gradient

.light-leak {
  position: relative;
  overflow: hidden;
}

.light-leak::before {
  content: '';
  position: absolute;
  top: -20%;
  right: -10%;
  width: 60%;
  height: 80%;
  background: radial-gradient(
    ellipse at center,
    rgba(232, 165, 75, 0.25) 0%,
    rgba(217, 122, 62, 0.12) 40%,
    transparent 70%
  );
  pointer-events: none;
  z-index: 1;
  filter: blur(40px);
}

.light-leak::after {
  content: '';
  position: absolute;
  bottom: -15%;
  left: -5%;
  width: 45%;
  height: 60%;
  background: radial-gradient(
    ellipse at center,
    rgba(200, 155, 151, 0.2) 0%,
    rgba(228, 176, 138, 0.1) 45%,
    transparent 70%
  );
  pointer-events: none;
  z-index: 1;
  filter: blur(35px);
}

Analog Card

.analog-card {
  background: #EDE4D3;
  border: 1px solid rgba(196, 162, 101, 0.3);
  border-radius: 10px;
  padding: 32px;
  box-shadow:
    0 2px 8px rgba(92, 74, 58, 0.08),
    0 0 0 1px rgba(196, 162, 101, 0.1);
  position: relative;
  overflow: hidden;
  transition: box-shadow 0.3s ease, transform 0.3s ease;
}

.analog-card::before {
  content: '';
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  height: 3px;
  background: linear-gradient(
    90deg,
    rgba(232, 165, 75, 0.6),
    rgba(228, 176, 138, 0.4),
    rgba(200, 155, 151, 0.3)
  );
}

.analog-card:hover {
  box-shadow:
    0 6px 20px rgba(92, 74, 58, 0.12),
    0 0 0 1px rgba(196, 162, 101, 0.15);
  transform: translateY(-2px);
}

.analog-card h3 {
  font-family: 'Libre Baskerville', serif;
  font-size: 1.3rem;
  color: #3A332C;
  margin-bottom: 12px;
}

.analog-card p {
  color: #5C4A3A;
  line-height: 1.8;
}

Analog Button

.analog-btn {
  display: inline-block;
  background: #5C4A3A;
  color: #F5EDE0;
  border: none;
  border-radius: 6px;
  padding: 12px 28px;
  font-family: 'DM Sans', sans-serif;
  font-size: 0.9rem;
  font-weight: 500;
  letter-spacing: 0.04em;
  cursor: pointer;
  text-decoration: none;
  transition: all 0.3s ease;
  box-shadow: 0 2px 6px rgba(58, 51, 44, 0.2);
  position: relative;
  overflow: hidden;
}

.analog-btn::after {
  content: '';
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  background: linear-gradient(
    135deg,
    rgba(232, 165, 75, 0) 0%,
    rgba(232, 165, 75, 0.15) 100%
  );
  opacity: 0;
  transition: opacity 0.3s ease;
}

.analog-btn:hover {
  background: #3A332C;
  box-shadow: 0 4px 14px rgba(58, 51, 44, 0.3);
  transform: translateY(-1px);
}

.analog-btn:hover::after {
  opacity: 1;
}

.analog-btn--warm {
  background: #E8A54B;
  color: #3A332C;
  box-shadow: 0 2px 6px rgba(232, 165, 75, 0.3);
}

.analog-btn--warm:hover {
  background: #D97A3E;
  color: #F5EDE0;
}
.analog-nav {
  background: #F5EDE0;
  border-bottom: 1px solid rgba(196, 162, 101, 0.25);
  padding: 0 32px;
  display: flex;
  align-items: center;
  justify-content: space-between;
  height: 64px;
  position: sticky;
  top: 0;
  z-index: 100;
  backdrop-filter: blur(8px);
  background: rgba(245, 237, 224, 0.92);
}

.analog-nav__brand {
  font-family: 'Libre Baskerville', serif;
  font-size: 1.15rem;
  font-weight: 700;
  color: #3A332C;
  text-decoration: none;
  letter-spacing: -0.01em;
}

.analog-nav__links {
  display: flex;
  gap: 4px;
  list-style: none;
  margin: 0;
  padding: 0;
}

.analog-nav__links a {
  font-family: 'DM Sans', sans-serif;
  font-size: 0.88rem;
  font-weight: 400;
  color: #5C4A3A;
  text-decoration: none;
  padding: 8px 14px;
  border-radius: 6px;
  transition: background 0.2s ease, color 0.2s ease;
  letter-spacing: 0.02em;
}

.analog-nav__links a:hover,
.analog-nav__links a.active {
  background: rgba(232, 165, 75, 0.12);
  color: #3A332C;
}

Hero Section

.analog-hero {
  background: linear-gradient(
    175deg,
    #F9F3EA 0%,
    #F5EDE0 40%,
    #EDE4D3 100%
  );
  padding: 100px 40px 80px;
  text-align: center;
  position: relative;
  overflow: hidden;
}

/* Vignette effect */
.analog-hero::before {
  content: '';
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  background: radial-gradient(
    ellipse at center,
    transparent 50%,
    rgba(44, 37, 32, 0.06) 100%
  );
  pointer-events: none;
}

/* Light leak wash */
.analog-hero::after {
  content: '';
  position: absolute;
  top: -30%;
  right: -15%;
  width: 50%;
  height: 100%;
  background: radial-gradient(
    ellipse at center,
    rgba(232, 165, 75, 0.15) 0%,
    transparent 65%
  );
  pointer-events: none;
  filter: blur(50px);
}

.analog-hero h1 {
  font-family: 'Libre Baskerville', serif;
  font-size: clamp(2.2rem, 5vw, 3.6rem);
  font-weight: 700;
  color: #3A332C;
  margin-bottom: 16px;
  position: relative;
  z-index: 2;
}

.analog-hero .subtitle {
  font-family: 'Special Elite', monospace;
  font-size: 1.1rem;
  color: #7A6150;
  letter-spacing: 0.05em;
  margin-bottom: 32px;
  position: relative;
  z-index: 2;
}

.analog-hero p {
  font-family: 'Source Serif 4', serif;
  font-size: 1.15rem;
  color: #5C4A3A;
  max-width: 600px;
  margin: 0 auto;
  line-height: 1.85;
  position: relative;
  z-index: 2;
}

Vignette Image Frame

.analog-frame {
  position: relative;
  display: inline-block;
  border-radius: 8px;
  overflow: hidden;
}

.analog-frame img {
  display: block;
  width: 100%;
  height: auto;
  filter: saturate(0.85) contrast(0.95) brightness(1.02) sepia(0.08);
  transition: filter 0.4s ease;
}

.analog-frame::after {
  content: '';
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  background: radial-gradient(
    ellipse at center,
    transparent 55%,
    rgba(44, 37, 32, 0.2) 100%
  );
  pointer-events: none;
}

.analog-frame:hover img {
  filter: saturate(0.9) contrast(0.97) brightness(1.04) sepia(0.05);
}

Film Strip Divider

.film-strip-divider {
  display: flex;
  align-items: center;
  gap: 12px;
  margin: 48px auto;
  max-width: 300px;
  opacity: 0.4;
}

.film-strip-divider::before,
.film-strip-divider::after {
  content: '';
  flex: 1;
  height: 1px;
  background: linear-gradient(
    90deg,
    transparent,
    #C4A265,
    transparent
  );
}

.film-strip-divider span {
  display: flex;
  gap: 6px;
}

.film-strip-divider span i {
  display: block;
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: #C4A265;
  opacity: 0.6;
}

Warm Photo Filter

.warm-photo {
  filter: saturate(0.82) sepia(0.1) brightness(1.03) contrast(0.93);
  border-radius: 6px;
}

.warm-photo--strong {
  filter: saturate(0.7) sepia(0.18) brightness(1.05) contrast(0.88);
}

.warm-photo--subtle {
  filter: saturate(0.9) sepia(0.05) brightness(1.01) contrast(0.97);
}

Design Do’s and Don’ts

Do’s

Don’ts


Aesthetic Relationship
Earth Tones Shares the warm, muted palette and natural material references, but Earth Tones is grounded in landscape and geology rather than photographic process
Cottagecore Both evoke nostalgia and tactile warmth, but Cottagecore leans pastoral and botanical while Analog Warmth is rooted in photographic and darkroom culture
Dark Academia Shares the appreciation for aged materials, sepia tones, and editorial typography, but Dark Academia skews cooler and more intellectual
Hygge Both prioritize warmth and comfort, but Hygge is Scandinavian-influenced with cooler neutrals; Analog Warmth runs amber and sepia throughout
Wabi-Sabi Shares the embrace of imperfection and natural aging, but Wabi-Sabi is rooted in Japanese minimalism and prefers cooler, more austere tones
Light Skeuomorphism Both reference physical materials and tactile qualities, but Light Skeuomorphism emulates precise UI objects while Analog Warmth emulates photographic media
Faded Denim / Vintage Overlaps in the celebration of wear and aging, but Analog Warmth is specifically photographic in its visual vocabulary rather than broadly retro
Grandmillennial Shares nostalgia and warmth but Grandmillennial is rooted in interior design patterns (chintz, toile) rather than analog photography

Quick-Start HTML Template

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Analog Warmth - Film &amp; Light</title>
  <link href="https://fonts.googleapis.com/css2?family=Libre+Baskerville:wght@400;700&family=Source+Serif+4:opsz,wght@8..60,300;8..60,400;8..60,600&family=Special+Elite&family=DM+Sans:wght@300;400;500&family=Courier+Prime:wght@400;700&display=swap" rel="stylesheet">
  <style>
    /* ========================================
       ANALOG WARMTH - DESIGN SYSTEM
       Film photography inspired aesthetic
       ======================================== */

    /* --- Reset & Base --- */
    *, *::before, *::after {
      margin: 0;
      padding: 0;
      box-sizing: border-box;
    }

    :root {
      --aw-cream: #F5EDE0;
      --aw-ivory: #EDE4D3;
      --aw-developer: #F9F3EA;
      --aw-amber: #E8A54B;
      --aw-peach: #E4B08A;
      --aw-ochre: #C4A265;
      --aw-sepia: #5C4A3A;
      --aw-brown: #7A6150;
      --aw-shutter: #3A332C;
      --aw-rose: #C89B97;
      --aw-olive: #8A8B6A;
      --aw-orange: #D97A3E;
      --aw-gold: #D4B876;
      --aw-blue: #7A8B96;
      --aw-negative: #2C2520;
    }

    body {
      font-family: 'Source Serif 4', Georgia, serif;
      font-size: 1.05rem;
      line-height: 1.85;
      color: var(--aw-sepia);
      background-color: var(--aw-cream);
      -webkit-font-smoothing: antialiased;
      -moz-osx-font-smoothing: grayscale;
    }

    /* --- Grain Overlay (applied to body) --- */
    body::after {
      content: '';
      position: fixed;
      top: 0;
      left: 0;
      width: 100vw;
      height: 100vh;
      pointer-events: none;
      opacity: 0.04;
      background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='g'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23g)'/%3E%3C/svg%3E");
      background-size: 256px 256px;
      z-index: 9999;
      mix-blend-mode: multiply;
    }

    a {
      color: var(--aw-orange);
      text-decoration: none;
      border-bottom: 1px solid rgba(217, 122, 62, 0.3);
      transition: color 0.2s ease, border-color 0.2s ease;
    }

    a:hover {
      color: var(--aw-shutter);
      border-bottom-color: var(--aw-shutter);
    }

    img {
      max-width: 100%;
      height: auto;
    }

    /* --- Navigation --- */
    .nav {
      background: rgba(245, 237, 224, 0.92);
      backdrop-filter: blur(8px);
      border-bottom: 1px solid rgba(196, 162, 101, 0.25);
      padding: 0 32px;
      display: flex;
      align-items: center;
      justify-content: space-between;
      height: 64px;
      position: sticky;
      top: 0;
      z-index: 100;
    }

    .nav__brand {
      font-family: 'Libre Baskerville', serif;
      font-size: 1.15rem;
      font-weight: 700;
      color: var(--aw-shutter);
      text-decoration: none;
      border-bottom: none;
      letter-spacing: -0.01em;
    }

    .nav__brand:hover {
      color: var(--aw-shutter);
      border-bottom: none;
    }

    .nav__links {
      display: flex;
      gap: 4px;
      list-style: none;
    }

    .nav__links a {
      font-family: 'DM Sans', sans-serif;
      font-size: 0.88rem;
      font-weight: 400;
      color: var(--aw-sepia);
      padding: 8px 14px;
      border-radius: 6px;
      border-bottom: none;
      letter-spacing: 0.02em;
      transition: background 0.2s ease, color 0.2s ease;
    }

    .nav__links a:hover,
    .nav__links a.active {
      background: rgba(232, 165, 75, 0.12);
      color: var(--aw-shutter);
      border-bottom: none;
    }

    /* --- Hero Section --- */
    .hero {
      background: linear-gradient(175deg, var(--aw-developer) 0%, var(--aw-cream) 40%, var(--aw-ivory) 100%);
      padding: 100px 40px 80px;
      text-align: center;
      position: relative;
      overflow: hidden;
    }

    .hero::before {
      content: '';
      position: absolute;
      top: 0;
      left: 0;
      right: 0;
      bottom: 0;
      background: radial-gradient(ellipse at center, transparent 50%, rgba(44, 37, 32, 0.06) 100%);
      pointer-events: none;
    }

    .hero::after {
      content: '';
      position: absolute;
      top: -30%;
      right: -15%;
      width: 50%;
      height: 100%;
      background: radial-gradient(ellipse at center, rgba(232, 165, 75, 0.15) 0%, transparent 65%);
      pointer-events: none;
      filter: blur(50px);
    }

    .hero h1 {
      font-family: 'Libre Baskerville', serif;
      font-size: clamp(2.2rem, 5vw, 3.4rem);
      font-weight: 700;
      color: var(--aw-shutter);
      margin-bottom: 12px;
      position: relative;
      z-index: 2;
    }

    .hero__tagline {
      font-family: 'Special Elite', monospace;
      font-size: 1rem;
      color: var(--aw-brown);
      letter-spacing: 0.06em;
      margin-bottom: 24px;
      position: relative;
      z-index: 2;
    }

    .hero__description {
      font-family: 'Source Serif 4', serif;
      font-size: 1.1rem;
      color: var(--aw-sepia);
      max-width: 580px;
      margin: 0 auto 32px;
      line-height: 1.85;
      position: relative;
      z-index: 2;
    }

    /* --- Buttons --- */
    .btn {
      display: inline-block;
      border: none;
      border-radius: 6px;
      padding: 12px 28px;
      font-family: 'DM Sans', sans-serif;
      font-size: 0.9rem;
      font-weight: 500;
      letter-spacing: 0.04em;
      cursor: pointer;
      text-decoration: none;
      border-bottom: none;
      transition: all 0.3s ease;
      position: relative;
    }

    .btn:hover {
      border-bottom: none;
    }

    .btn--primary {
      background: var(--aw-sepia);
      color: var(--aw-cream);
      box-shadow: 0 2px 6px rgba(58, 51, 44, 0.2);
    }

    .btn--primary:hover {
      background: var(--aw-shutter);
      color: var(--aw-cream);
      box-shadow: 0 4px 14px rgba(58, 51, 44, 0.3);
      transform: translateY(-1px);
    }

    .btn--warm {
      background: var(--aw-amber);
      color: var(--aw-shutter);
      box-shadow: 0 2px 6px rgba(232, 165, 75, 0.3);
    }

    .btn--warm:hover {
      background: var(--aw-orange);
      color: var(--aw-cream);
      box-shadow: 0 4px 14px rgba(217, 122, 62, 0.35);
      transform: translateY(-1px);
    }

    /* --- Main Content --- */
    .container {
      max-width: 860px;
      margin: 0 auto;
      padding: 48px 24px;
    }

    /* --- Section Heading --- */
    .section-heading {
      text-align: center;
      margin-bottom: 40px;
    }

    .section-heading h2 {
      font-family: 'Libre Baskerville', serif;
      font-size: 1.8rem;
      font-weight: 700;
      color: var(--aw-shutter);
      margin-bottom: 8px;
    }

    .section-heading .meta {
      font-family: 'Courier Prime', monospace;
      font-size: 0.78rem;
      text-transform: uppercase;
      letter-spacing: 0.1em;
      color: var(--aw-brown);
    }

    /* --- Divider --- */
    .divider {
      display: flex;
      align-items: center;
      gap: 12px;
      margin: 48px auto;
      max-width: 280px;
      opacity: 0.35;
    }

    .divider::before,
    .divider::after {
      content: '';
      flex: 1;
      height: 1px;
      background: linear-gradient(90deg, transparent, var(--aw-ochre), transparent);
    }

    .divider__dots {
      display: flex;
      gap: 6px;
    }

    .divider__dot {
      width: 6px;
      height: 6px;
      border-radius: 50%;
      background: var(--aw-ochre);
    }

    /* --- Cards --- */
    .card-grid {
      display: grid;
      grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
      gap: 24px;
      margin-bottom: 48px;
    }

    .card {
      background: var(--aw-ivory);
      border: 1px solid rgba(196, 162, 101, 0.3);
      border-radius: 10px;
      padding: 28px;
      box-shadow: 0 2px 8px rgba(92, 74, 58, 0.08);
      position: relative;
      overflow: hidden;
      transition: box-shadow 0.3s ease, transform 0.3s ease;
    }

    .card::before {
      content: '';
      position: absolute;
      top: 0;
      left: 0;
      right: 0;
      height: 3px;
      background: linear-gradient(
        90deg,
        rgba(232, 165, 75, 0.6),
        rgba(228, 176, 138, 0.4),
        rgba(200, 155, 151, 0.3)
      );
    }

    .card:hover {
      box-shadow: 0 6px 20px rgba(92, 74, 58, 0.12);
      transform: translateY(-2px);
    }

    .card__label {
      font-family: 'Courier Prime', monospace;
      font-size: 0.72rem;
      text-transform: uppercase;
      letter-spacing: 0.1em;
      color: var(--aw-brown);
      margin-bottom: 8px;
      display: block;
    }

    .card h3 {
      font-family: 'Libre Baskerville', serif;
      font-size: 1.2rem;
      font-weight: 700;
      color: var(--aw-shutter);
      margin-bottom: 10px;
    }

    .card p {
      color: var(--aw-sepia);
      font-size: 0.98rem;
      line-height: 1.8;
    }

    /* --- Photo Grid (Contact Sheet) --- */
    .contact-sheet {
      display: grid;
      grid-template-columns: repeat(3, 1fr);
      gap: 6px;
      margin: 40px 0;
      background: var(--aw-negative);
      padding: 6px;
      border-radius: 4px;
    }

    .contact-sheet__frame {
      position: relative;
      aspect-ratio: 3 / 2;
      overflow: hidden;
      border-radius: 2px;
      background: var(--aw-ivory);
    }

    .contact-sheet__frame img {
      width: 100%;
      height: 100%;
      object-fit: cover;
      filter: saturate(0.82) sepia(0.08) contrast(0.93) brightness(1.02);
      transition: filter 0.4s ease;
    }

    .contact-sheet__frame::after {
      content: '';
      position: absolute;
      top: 0;
      left: 0;
      right: 0;
      bottom: 0;
      background: radial-gradient(ellipse at center, transparent 55%, rgba(44, 37, 32, 0.15) 100%);
      pointer-events: none;
    }

    .contact-sheet__frame:hover img {
      filter: saturate(0.9) sepia(0.04) contrast(0.97) brightness(1.04);
    }

    /* --- Feature Section --- */
    .feature {
      display: grid;
      grid-template-columns: 1fr 1fr;
      gap: 40px;
      align-items: center;
      margin: 56px 0;
    }

    .feature--reverse {
      direction: rtl;
    }

    .feature--reverse > * {
      direction: ltr;
    }

    .feature__image {
      position: relative;
      border-radius: 8px;
      overflow: hidden;
    }

    .feature__image img {
      display: block;
      width: 100%;
      border-radius: 8px;
      filter: saturate(0.85) sepia(0.08) brightness(1.02) contrast(0.95);
    }

    .feature__image::after {
      content: '';
      position: absolute;
      top: 0;
      left: 0;
      right: 0;
      bottom: 0;
      background: radial-gradient(ellipse at center, transparent 55%, rgba(44, 37, 32, 0.15) 100%);
      pointer-events: none;
    }

    .feature__text h3 {
      font-family: 'Libre Baskerville', serif;
      font-size: 1.4rem;
      font-weight: 700;
      color: var(--aw-shutter);
      margin-bottom: 12px;
    }

    .feature__text p {
      margin-bottom: 16px;
      line-height: 1.85;
    }

    /* --- Testimonial / Quote --- */
    .quote-block {
      background: var(--aw-developer);
      border-left: 3px solid var(--aw-amber);
      border-radius: 0 8px 8px 0;
      padding: 32px 36px;
      margin: 40px 0;
      position: relative;
    }

    .quote-block::before {
      content: '\201C';
      font-family: 'Libre Baskerville', serif;
      font-size: 4rem;
      color: var(--aw-ochre);
      opacity: 0.3;
      position: absolute;
      top: 8px;
      left: 12px;
      line-height: 1;
    }

    .quote-block p {
      font-family: 'Source Serif 4', serif;
      font-style: italic;
      font-size: 1.1rem;
      line-height: 1.8;
      color: var(--aw-sepia);
      padding-left: 20px;
    }

    .quote-block cite {
      display: block;
      margin-top: 12px;
      padding-left: 20px;
      font-family: 'Courier Prime', monospace;
      font-size: 0.8rem;
      font-style: normal;
      color: var(--aw-brown);
      letter-spacing: 0.05em;
    }

    /* --- Footer --- */
    .footer {
      background: var(--aw-negative);
      color: rgba(245, 237, 224, 0.7);
      padding: 48px 32px;
      text-align: center;
      margin-top: 64px;
    }

    .footer__brand {
      font-family: 'Libre Baskerville', serif;
      font-size: 1.1rem;
      font-weight: 700;
      color: var(--aw-cream);
      margin-bottom: 8px;
    }

    .footer p {
      font-family: 'Courier Prime', monospace;
      font-size: 0.78rem;
      letter-spacing: 0.05em;
      color: rgba(245, 237, 224, 0.5);
    }

    .footer a {
      color: var(--aw-amber);
      border-bottom-color: rgba(232, 165, 75, 0.3);
    }

    .footer a:hover {
      color: var(--aw-peach);
    }

    /* --- Responsive --- */
    @media (max-width: 768px) {
      .nav {
        padding: 0 16px;
      }

      .nav__links {
        gap: 0;
      }

      .nav__links a {
        padding: 8px 10px;
        font-size: 0.82rem;
      }

      .hero {
        padding: 64px 20px 56px;
      }

      .container {
        padding: 32px 16px;
      }

      .feature {
        grid-template-columns: 1fr;
        gap: 24px;
      }

      .feature--reverse {
        direction: ltr;
      }

      .contact-sheet {
        grid-template-columns: repeat(2, 1fr);
      }

      .card-grid {
        grid-template-columns: 1fr;
      }

      body::after {
        opacity: 0.025;
      }
    }

    @media (max-width: 480px) {
      .hero h1 {
        font-size: 1.8rem;
      }

      .contact-sheet {
        grid-template-columns: 1fr;
      }
    }
  </style>
</head>
<body>

  <!-- Navigation -->
  <nav class="nav">
    <a href="#" class="nav__brand">Film &amp; Light</a>
    <ul class="nav__links">
      <li><a href="#" class="active">Gallery</a></li>
      <li><a href="#">Journal</a></li>
      <li><a href="#">About</a></li>
      <li><a href="#">Contact</a></li>
    </ul>
  </nav>

  <!-- Hero Section -->
  <header class="hero">
    <h1>Analog Warmth</h1>
    <p class="hero__tagline">Kodak Portra 400 &mdash; 35mm &mdash; f/2.8</p>
    <p class="hero__description">
      Every photograph carries the warmth of the light that made it.
      We celebrate the gentle grain, the amber glow, and the quiet
      imperfections that make analog images feel alive.
    </p>
    <a href="#" class="btn btn--primary">View the Collection</a>
  </header>

  <!-- Main Content -->
  <main class="container">

    <!-- Section: Featured Work -->
    <div class="section-heading">
      <h2>Recent Work</h2>
      <span class="meta">Shot on film &bull; Developed by hand</span>
    </div>

    <!-- Contact Sheet Grid -->
    <div class="contact-sheet">
      <div class="contact-sheet__frame">
        <img src="https://images.unsplash.com/photo-1501785888041-af3ef285b470?w=400&h=267&fit=crop" alt="Golden hour landscape">
      </div>
      <div class="contact-sheet__frame">
        <img src="https://images.unsplash.com/photo-1506744038136-46273834b3fb?w=400&h=267&fit=crop" alt="Mountain sunrise">
      </div>
      <div class="contact-sheet__frame">
        <img src="https://images.unsplash.com/photo-1470071459604-3b5ec3a7fe05?w=400&h=267&fit=crop" alt="Forest path">
      </div>
      <div class="contact-sheet__frame">
        <img src="https://images.unsplash.com/photo-1441974231531-c6227db76b6e?w=400&h=267&fit=crop" alt="Woodland light">
      </div>
      <div class="contact-sheet__frame">
        <img src="https://images.unsplash.com/photo-1469474968028-56623f02e42e?w=400&h=267&fit=crop" alt="Valley vista">
      </div>
      <div class="contact-sheet__frame">
        <img src="https://images.unsplash.com/photo-1465146344425-f00d5f5c8f07?w=400&h=267&fit=crop" alt="Wildflower field">
      </div>
    </div>

    <!-- Divider -->
    <div class="divider">
      <div class="divider__dots">
        <span class="divider__dot"></span>
        <span class="divider__dot"></span>
        <span class="divider__dot"></span>
      </div>
    </div>

    <!-- Feature Section -->
    <div class="feature">
      <div class="feature__image">
        <img src="https://images.unsplash.com/photo-1495616811223-4d98c6e9c869?w=500&h=350&fit=crop" alt="Warm portrait">
      </div>
      <div class="feature__text">
        <h3>The Portra Look</h3>
        <p>
          Kodak Portra's signature warmth renders skin tones as creamy
          and natural, with gentle amber highlights and softly faded
          shadows. Every frame carries the unmistakable character of
          silver halide chemistry.
        </p>
        <a href="#" class="btn btn--warm">Explore Series</a>
      </div>
    </div>

    <div class="feature feature--reverse">
      <div class="feature__image">
        <img src="https://images.unsplash.com/photo-1504198453319-5ce911bafcde?w=500&h=350&fit=crop" alt="Light and shadow">
      </div>
      <div class="feature__text">
        <h3>Light Leaks &amp; Happy Accidents</h3>
        <p>
          Where digital cameras see errors, film photographers find
          beauty. Light leaks pour warm amber and rose across the
          frame, turning technical flaws into signature moments that
          no algorithm can replicate.
        </p>
        <a href="#" class="btn btn--primary">Read the Story</a>
      </div>
    </div>

    <!-- Divider -->
    <div class="divider">
      <div class="divider__dots">
        <span class="divider__dot"></span>
        <span class="divider__dot"></span>
        <span class="divider__dot"></span>
      </div>
    </div>

    <!-- Card Grid -->
    <div class="section-heading">
      <h2>From the Darkroom</h2>
      <span class="meta">Notes on process &bull; Volume XII</span>
    </div>

    <div class="card-grid">
      <div class="card">
        <span class="card__label">Technique</span>
        <h3>Push Processing</h3>
        <p>
          Deliberately underexposing film and overdeveloping to increase
          grain and contrast, creating images with dramatic tonal range
          and raw, visceral energy.
        </p>
      </div>
      <div class="card">
        <span class="card__label">Film Stock</span>
        <h3>Portra 400</h3>
        <p>
          The gold standard for warm natural tones. Fine grain,
          extraordinary latitude, and those unmistakable peachy
          skin tones that digital color science still chases.
        </p>
      </div>
      <div class="card">
        <span class="card__label">Equipment</span>
        <h3>Vintage Lenses</h3>
        <p>
          Older lens coatings produce softer contrast and gentle
          flare, contributing to the dreamy, low-contrast rendering
          that defines the analog warmth character.
        </p>
      </div>
    </div>

    <!-- Quote Block -->
    <div class="quote-block">
      <p>
        There is something about film that digital will never capture --
        the way light passes through silver and chemistry to become
        something you can hold. Every grain is evidence that the
        photograph was real.
      </p>
      <cite>&mdash; A Darkroom Journal, Frame 24</cite>
    </div>

  </main>

  <!-- Footer -->
  <footer class="footer">
    <div class="footer__brand">Film &amp; Light</div>
    <p>Shot on Kodak Portra 400 &bull; Developed in C-41 &bull; Printed with warmth</p>
  </footer>

</body>
</html>

Implementation Tips