website_designs

Card-Based Design Reference

Card-Based Design is a modular UI pattern that organizes content into discrete, self-contained rectangular units – cards – each representing a single idea, product, article, or action. Rooted in the physical metaphor of index cards, playing cards, and sticky notes, the pattern gained massive digital traction through Microsoft’s Metro “live tiles” (2010), Google Now’s information cards (2012), and Google’s Material Design system (2014). Pinterest’s masonry-grid layout became the definitive visual expression of card-based browsing at scale. The aesthetic prizes containment, scannability, and modularity: every card is a digestible chunk of content with clear boundaries, consistent internal structure, and the flexibility to be rearranged, filtered, or reflowed across any viewport. In modern web and UI design, Card-Based Design translates to clean surfaces with subtle elevation, generous white space, rounded corners, image-forward compositions, and responsive grid systems that adapt gracefully from multi-column masonry layouts on desktop to single-column stacks on mobile.


Visual Characteristics

Core Design Traits

Design Principles


Color Palette

Clean Surface Palette

Color Name Hex Role / Usage
Canvas Gray #F5F5F7 Page background, the surface cards sit upon
Card White #FFFFFF Primary card surface, clean and bright
Warm Canvas #FAF9F6 Alternative warm page background
Soft Gray #E8E8ED Card borders, dividers, inactive states
Medium Gray #C7C7CC Placeholder text, disabled elements
Text Primary #1D1D1F Headlines, primary card titles
Text Secondary #6E6E73 Descriptions, supporting text, metadata
Text Tertiary #9A9AA0 Captions, timestamps, subtle labels
Action Blue #0071E3 Primary CTAs, links, interactive accents
Action Hover #0062CC Hovered links and buttons, darker active state
Success Green #34C759 Positive indicators, success badges
Warning Amber #FF9500 Alerts, attention-required badges
Error Red #FF3B30 Errors, destructive actions, urgent badges
Card Shadow rgba(0,0,0,0.08) Default card elevation shadow

CSS Custom Properties

:root {
  /* Backgrounds */
  --card-bg-canvas: #f5f5f7;
  --card-bg-canvas-warm: #faf9f6;
  --card-bg-surface: #ffffff;

  /* Borders & Dividers */
  --card-border-light: #e8e8ed;
  --card-border-medium: #c7c7cc;

  /* Text */
  --card-text-primary: #1d1d1f;
  --card-text-secondary: #6e6e73;
  --card-text-tertiary: #9a9aa0;

  /* Actions */
  --card-action-blue: #0071e3;
  --card-action-hover: #0062cc;

  /* Status */
  --card-success: #34c759;
  --card-warning: #ff9500;
  --card-error: #ff3b30;

  /* Elevation Shadows */
  --card-shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.06), 0 1px 2px rgba(0, 0, 0, 0.04);
  --card-shadow-md: 0 4px 12px rgba(0, 0, 0, 0.08), 0 2px 4px rgba(0, 0, 0, 0.04);
  --card-shadow-lg: 0 12px 32px rgba(0, 0, 0, 0.12), 0 4px 8px rgba(0, 0, 0, 0.06);
  --card-shadow-xl: 0 20px 48px rgba(0, 0, 0, 0.16), 0 8px 16px rgba(0, 0, 0, 0.08);

  /* Border Radius */
  --card-radius-sm: 8px;
  --card-radius-md: 12px;
  --card-radius-lg: 16px;
  --card-radius-xl: 20px;

  /* Spacing */
  --card-gap: 24px;
  --card-padding: 24px;
  --card-padding-compact: 16px;

  /* Transitions */
  --card-transition: 0.25s cubic-bezier(0.4, 0, 0.2, 1);
}

Typography

Typeface Characteristics

Card-Based Design typography is:

Font Style Best For
Inter Modern geometric sans Card titles, body text, all-purpose
Roboto Material Design standard Cards in Material-inspired layouts
DM Sans Geometric, friendly Card titles, clean modern layouts
Plus Jakarta Sans Rounded geometric Warm, approachable card designs
Source Sans 3 Humanist sans Body text, descriptions, metadata
Nunito Rounded, soft Friendly card UIs, consumer apps
Manrope Modern, geometric Tech dashboards, SaaS card layouts
Lato Stable, warm Body text, subtle and professional
Work Sans Slightly condensed Navigation, labels, compact cards
Space Grotesk Geometric, contemporary Feature cards, modern portfolios

Font Pairing Suggestions

Heading Font Body Font Character
DM Sans (700) Inter (400) Clean, modern, tech-friendly
Plus Jakarta Sans (700) Source Sans 3 (400) Warm, approachable, editorial
Manrope (800) Inter (400) Bold headers, clean reading
Space Grotesk (600) Lato (400) Geometric contrast, professional
Nunito (700) Work Sans (400) Rounded warmth, efficient body text

Typography CSS Example

/* Import fonts */
@import url('https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500;700&family=Inter:wght@400;500;600&display=swap');

/* Headings */
h1, h2, h3, h4, h5, h6 {
  font-family: 'DM Sans', sans-serif;
  font-weight: 700;
  color: var(--card-text-primary);
  line-height: 1.25;
  letter-spacing: -0.01em;
}

/* Card title */
.card-title {
  font-family: 'DM Sans', sans-serif;
  font-weight: 700;
  font-size: 1.125rem;
  color: var(--card-text-primary);
  line-height: 1.35;
  margin-bottom: 8px;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
}

/* Card description */
.card-description {
  font-family: 'Inter', sans-serif;
  font-weight: 400;
  font-size: 0.9rem;
  color: var(--card-text-secondary);
  line-height: 1.6;
  display: -webkit-box;
  -webkit-line-clamp: 3;
  -webkit-box-orient: vertical;
  overflow: hidden;
}

/* Body text */
body {
  font-family: 'Inter', sans-serif;
  font-weight: 400;
  font-size: 1rem;
  line-height: 1.65;
  color: var(--card-text-primary);
}

/* Metadata / Labels */
.card-meta {
  font-family: 'Inter', sans-serif;
  font-size: 0.75rem;
  font-weight: 500;
  letter-spacing: 0.02em;
  text-transform: uppercase;
  color: var(--card-text-tertiary);
}

/* Card action link */
.card-action {
  font-family: 'DM Sans', sans-serif;
  font-size: 0.875rem;
  font-weight: 600;
  color: var(--card-action-blue);
  text-decoration: none;
  transition: color var(--card-transition);
}

.card-action:hover {
  color: var(--card-action-hover);
}

Layout Principles

Grid and Structure

Section Organization

Responsive Approach


CSS / Design Techniques

Standard Card Component

.card {
  background: var(--card-bg-surface);
  border-radius: var(--card-radius-md);
  box-shadow: var(--card-shadow-md);
  overflow: hidden;
  display: flex;
  flex-direction: column;
  transition:
    transform var(--card-transition),
    box-shadow var(--card-transition);
  cursor: pointer;
}

.card:hover {
  transform: translateY(-4px);
  box-shadow: var(--card-shadow-lg);
}

.card__image {
  width: 100%;
  aspect-ratio: 16 / 9;
  object-fit: cover;
  display: block;
}

.card__body {
  padding: var(--card-padding);
  flex: 1;
  display: flex;
  flex-direction: column;
}

.card__category {
  font-size: 0.7rem;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.06em;
  color: var(--card-action-blue);
  margin-bottom: 8px;
}

.card__title {
  font-family: 'DM Sans', sans-serif;
  font-weight: 700;
  font-size: 1.125rem;
  color: var(--card-text-primary);
  line-height: 1.35;
  margin-bottom: 8px;
}

.card__text {
  font-family: 'Inter', sans-serif;
  font-size: 0.9rem;
  color: var(--card-text-secondary);
  line-height: 1.6;
  flex: 1;
}

.card__footer {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding-top: 16px;
  margin-top: 16px;
  border-top: 1px solid var(--card-border-light);
}

/* Card Grid */
.card-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
  gap: var(--card-gap);
}

Button Component

.btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  font-family: 'DM Sans', sans-serif;
  font-weight: 600;
  font-size: 0.9rem;
  padding: 12px 24px;
  border-radius: var(--card-radius-sm);
  border: none;
  cursor: pointer;
  text-decoration: none;
  transition:
    background var(--card-transition),
    box-shadow var(--card-transition),
    transform var(--card-transition);
}

/* Primary */
.btn--primary {
  background: var(--card-action-blue);
  color: #ffffff;
}

.btn--primary:hover {
  background: var(--card-action-hover);
  box-shadow: 0 4px 12px rgba(0, 113, 227, 0.3);
  transform: translateY(-1px);
}

/* Secondary / Outlined */
.btn--secondary {
  background: transparent;
  color: var(--card-action-blue);
  border: 1.5px solid var(--card-border-light);
}

.btn--secondary:hover {
  background: var(--card-bg-canvas);
  border-color: var(--card-action-blue);
}

/* Ghost / Text Button */
.btn--ghost {
  background: transparent;
  color: var(--card-action-blue);
  padding: 8px 12px;
}

.btn--ghost:hover {
  background: rgba(0, 113, 227, 0.06);
}
.navbar {
  display: flex;
  align-items: center;
  justify-content: space-between;
  max-width: 1200px;
  margin: 0 auto;
  padding: 16px 32px;
  position: sticky;
  top: 0;
  z-index: 100;
  background: rgba(255, 255, 255, 0.85);
  backdrop-filter: blur(12px);
  -webkit-backdrop-filter: blur(12px);
  border-bottom: 1px solid var(--card-border-light);
}

.navbar__logo {
  font-family: 'DM Sans', sans-serif;
  font-size: 1.25rem;
  font-weight: 700;
  color: var(--card-text-primary);
  text-decoration: none;
  letter-spacing: -0.02em;
}

.navbar__links {
  display: flex;
  gap: 32px;
  list-style: none;
  margin: 0;
  padding: 0;
}

.navbar__links a {
  font-family: 'Inter', sans-serif;
  font-weight: 500;
  font-size: 0.9rem;
  color: var(--card-text-secondary);
  text-decoration: none;
  transition: color var(--card-transition);
  position: relative;
}

.navbar__links a:hover {
  color: var(--card-text-primary);
}

.navbar__links a::after {
  content: '';
  position: absolute;
  bottom: -4px;
  left: 0;
  width: 0;
  height: 2px;
  background: var(--card-action-blue);
  transition: width var(--card-transition);
}

.navbar__links a:hover::after {
  width: 100%;
}
.hero {
  padding: 80px 32px;
  max-width: 1200px;
  margin: 0 auto;
}

.hero__featured {
  display: grid;
  grid-template-columns: 1.2fr 1fr;
  gap: 32px;
  align-items: center;
  background: var(--card-bg-surface);
  border-radius: var(--card-radius-lg);
  box-shadow: var(--card-shadow-lg);
  overflow: hidden;
}

.hero__image {
  width: 100%;
  height: 100%;
  min-height: 400px;
  object-fit: cover;
  display: block;
}

.hero__content {
  padding: 48px 48px 48px 16px;
}

.hero__label {
  font-family: 'Inter', sans-serif;
  font-size: 0.7rem;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.08em;
  color: var(--card-action-blue);
  margin-bottom: 16px;
}

.hero__title {
  font-family: 'DM Sans', sans-serif;
  font-weight: 700;
  font-size: clamp(1.75rem, 3vw, 2.5rem);
  color: var(--card-text-primary);
  line-height: 1.2;
  letter-spacing: -0.02em;
  margin-bottom: 16px;
}

.hero__description {
  font-family: 'Inter', sans-serif;
  font-size: 1.05rem;
  color: var(--card-text-secondary);
  line-height: 1.65;
  margin-bottom: 32px;
}

@media (max-width: 768px) {
  .hero__featured {
    grid-template-columns: 1fr;
  }
  .hero__image { min-height: 240px; }
  .hero__content { padding: 32px; }
}

Masonry Grid Layout

/* CSS Columns Masonry (widely supported) */
.masonry {
  column-count: 3;
  column-gap: var(--card-gap);
  max-width: 1200px;
  margin: 0 auto;
  padding: 0 32px;
}

.masonry .card {
  break-inside: avoid;
  margin-bottom: var(--card-gap);
  display: inline-block;
  width: 100%;
}

@media (max-width: 1024px) {
  .masonry { column-count: 2; }
}

@media (max-width: 640px) {
  .masonry { column-count: 1; }
}

/* CSS Grid Masonry (experimental, progressive enhancement) */
@supports (grid-template-rows: masonry) {
  .masonry-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
    grid-template-rows: masonry;
    gap: var(--card-gap);
    max-width: 1200px;
    margin: 0 auto;
    padding: 0 32px;
  }

  .masonry-grid .card {
    break-inside: auto;
    margin-bottom: 0;
    display: flex;
  }
}

Card Hover Effects

/* Lift and deepen shadow */
.card--lift {
  transition:
    transform var(--card-transition),
    box-shadow var(--card-transition);
}

.card--lift:hover {
  transform: translateY(-6px);
  box-shadow: var(--card-shadow-xl);
}

/* Image zoom on hover */
.card--zoom .card__image-wrap {
  overflow: hidden;
  border-radius: var(--card-radius-md) var(--card-radius-md) 0 0;
}

.card--zoom .card__image {
  transition: transform 0.4s cubic-bezier(0.4, 0, 0.2, 1);
}

.card--zoom:hover .card__image {
  transform: scale(1.06);
}

/* Border highlight on hover */
.card--border {
  border: 2px solid transparent;
  transition:
    border-color var(--card-transition),
    box-shadow var(--card-transition);
}

.card--border:hover {
  border-color: var(--card-action-blue);
  box-shadow: 0 0 0 4px rgba(0, 113, 227, 0.08);
}

/* Overlay reveal on hover */
.card--overlay {
  position: relative;
}

.card--overlay .card__overlay {
  position: absolute;
  inset: 0;
  background: rgba(0, 0, 0, 0.5);
  display: flex;
  align-items: center;
  justify-content: center;
  opacity: 0;
  transition: opacity var(--card-transition);
  border-radius: var(--card-radius-md);
}

.card--overlay:hover .card__overlay {
  opacity: 1;
}

/* Focus visible state for accessibility */
.card:focus-visible {
  outline: 3px solid var(--card-action-blue);
  outline-offset: 2px;
  box-shadow: var(--card-shadow-lg);
}
.carousel {
  max-width: 1200px;
  margin: 0 auto;
  padding: 0 32px;
}

.carousel__header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: 24px;
}

.carousel__title {
  font-family: 'DM Sans', sans-serif;
  font-weight: 700;
  font-size: 1.5rem;
  color: var(--card-text-primary);
}

.carousel__controls {
  display: flex;
  gap: 8px;
}

.carousel__btn {
  width: 40px;
  height: 40px;
  border-radius: 50%;
  border: 1.5px solid var(--card-border-light);
  background: var(--card-bg-surface);
  cursor: pointer;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 1.1rem;
  color: var(--card-text-secondary);
  transition:
    background var(--card-transition),
    border-color var(--card-transition);
}

.carousel__btn:hover {
  background: var(--card-bg-canvas);
  border-color: var(--card-action-blue);
  color: var(--card-action-blue);
}

.carousel__track {
  display: flex;
  gap: var(--card-gap);
  overflow-x: auto;
  scroll-snap-type: x mandatory;
  scroll-behavior: smooth;
  -ms-overflow-style: none;
  scrollbar-width: none;
  padding-bottom: 8px;
}

.carousel__track::-webkit-scrollbar {
  display: none;
}

.carousel__track .card {
  flex: 0 0 300px;
  scroll-snap-align: start;
}

@media (max-width: 640px) {
  .carousel__track .card {
    flex: 0 0 85vw;
  }
}

Filter / Chip Bar

.filter-bar {
  display: flex;
  gap: 10px;
  flex-wrap: wrap;
  margin-bottom: 32px;
  max-width: 1200px;
  margin-left: auto;
  margin-right: auto;
  padding: 0 32px 32px;
}

.chip {
  font-family: 'Inter', sans-serif;
  font-size: 0.825rem;
  font-weight: 500;
  padding: 8px 18px;
  border-radius: 100px;
  border: 1.5px solid var(--card-border-light);
  background: var(--card-bg-surface);
  color: var(--card-text-secondary);
  cursor: pointer;
  transition:
    background var(--card-transition),
    border-color var(--card-transition),
    color var(--card-transition);
  white-space: nowrap;
}

.chip:hover {
  border-color: var(--card-action-blue);
  color: var(--card-action-blue);
}

.chip--active {
  background: var(--card-action-blue);
  border-color: var(--card-action-blue);
  color: #ffffff;
}

.chip--active:hover {
  background: var(--card-action-hover);
  border-color: var(--card-action-hover);
  color: #ffffff;
}

Design Do’s and Don’ts

Do

Don’t


Aesthetic Relationship to Card-Based Design
Material Design Google’s design system formalized the card as a primary UI component; Material Design is card-based design codified with specific elevation, motion, and color rules
Metro Design Microsoft’s “live tiles” were an early card-like pattern; Metro uses flat, borderless tiles while card-based design adds elevation and rounded corners
Flat Design Cards evolved from flat design by reintroducing subtle depth (shadows, layering) while retaining clean, minimal surfaces
Minimalism Shares the emphasis on white space, typography hierarchy, and content focus; card-based design adds the modular container structure
Brutalist Web Design The anti-card aesthetic: rejects containment, shadows, and polished surfaces in favor of raw, undecorated layouts
Neumorphism Takes the card elevation concept further with soft inner/outer shadows that make cards appear extruded from the background
Glassmorphism Applies frosted-glass transparency to card surfaces; a stylistic variant of card-based design with blur and translucency
Dashboard UI Heavily relies on card-based layouts for data widgets, metric panels, and chart containers
Pinterest / Masonry The visual archetype of card-based design at scale; variable-height cards in a waterfall grid

Quick-Start: Minimal Card-Based Page Template

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Card-Based Design</title>
  <link href="https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500;700&family=Inter:wght@400;500;600&display=swap" rel="stylesheet">
  <style>
    :root {
      --card-bg-canvas: #f5f5f7;
      --card-bg-surface: #ffffff;
      --card-border-light: #e8e8ed;
      --card-text-primary: #1d1d1f;
      --card-text-secondary: #6e6e73;
      --card-text-tertiary: #9a9aa0;
      --card-action-blue: #0071e3;
      --card-action-hover: #0062cc;
      --card-shadow-sm: 0 1px 3px rgba(0,0,0,0.06), 0 1px 2px rgba(0,0,0,0.04);
      --card-shadow-md: 0 4px 12px rgba(0,0,0,0.08), 0 2px 4px rgba(0,0,0,0.04);
      --card-shadow-lg: 0 12px 32px rgba(0,0,0,0.12), 0 4px 8px rgba(0,0,0,0.06);
      --card-radius-sm: 8px;
      --card-radius-md: 12px;
      --card-radius-lg: 16px;
      --card-gap: 24px;
      --card-padding: 24px;
      --card-transition: 0.25s cubic-bezier(0.4, 0, 0.2, 1);
    }

    * { margin: 0; padding: 0; box-sizing: border-box; }

    body {
      background: var(--card-bg-canvas);
      color: var(--card-text-primary);
      font-family: 'Inter', sans-serif;
      font-size: 1rem;
      line-height: 1.65;
    }

    h1, h2, h3 {
      font-family: 'DM Sans', sans-serif;
      font-weight: 700;
      line-height: 1.25;
      letter-spacing: -0.01em;
    }

    /* Navigation */
    nav {
      display: flex;
      align-items: center;
      justify-content: space-between;
      max-width: 1200px;
      margin: 0 auto;
      padding: 16px 32px;
      position: sticky;
      top: 0;
      z-index: 100;
      background: rgba(245, 245, 247, 0.85);
      backdrop-filter: blur(12px);
      -webkit-backdrop-filter: blur(12px);
    }

    nav a.logo {
      font-family: 'DM Sans', sans-serif;
      font-size: 1.25rem;
      font-weight: 700;
      color: var(--card-text-primary);
      text-decoration: none;
      letter-spacing: -0.02em;
    }

    nav ul {
      display: flex;
      gap: 32px;
      list-style: none;
    }

    nav ul a {
      font-family: 'Inter', sans-serif;
      font-weight: 500;
      font-size: 0.9rem;
      color: var(--card-text-secondary);
      text-decoration: none;
      transition: color var(--card-transition);
    }

    nav ul a:hover {
      color: var(--card-text-primary);
    }

    /* Hero */
    .hero {
      max-width: 1200px;
      margin: 0 auto;
      padding: 60px 32px 48px;
    }

    .hero-card {
      display: grid;
      grid-template-columns: 1.2fr 1fr;
      background: var(--card-bg-surface);
      border-radius: var(--card-radius-lg);
      box-shadow: var(--card-shadow-lg);
      overflow: hidden;
    }

    .hero-image {
      min-height: 380px;
      background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
      display: flex;
      align-items: center;
      justify-content: center;
      color: rgba(255,255,255,0.3);
      font-size: 4rem;
    }

    .hero-body {
      padding: 48px;
      display: flex;
      flex-direction: column;
      justify-content: center;
    }

    .hero-label {
      font-size: 0.7rem;
      font-weight: 600;
      text-transform: uppercase;
      letter-spacing: 0.08em;
      color: var(--card-action-blue);
      margin-bottom: 16px;
    }

    .hero-body h1 {
      font-size: clamp(1.75rem, 3vw, 2.5rem);
      color: var(--card-text-primary);
      margin-bottom: 16px;
      letter-spacing: -0.02em;
    }

    .hero-body p {
      font-size: 1rem;
      color: var(--card-text-secondary);
      margin-bottom: 32px;
      line-height: 1.65;
    }

    .btn {
      display: inline-flex;
      align-items: center;
      justify-content: center;
      font-family: 'DM Sans', sans-serif;
      font-weight: 600;
      font-size: 0.9rem;
      padding: 12px 28px;
      border-radius: var(--card-radius-sm);
      border: none;
      cursor: pointer;
      text-decoration: none;
      transition: background var(--card-transition), box-shadow var(--card-transition), transform var(--card-transition);
    }

    .btn--primary {
      background: var(--card-action-blue);
      color: #ffffff;
    }

    .btn--primary:hover {
      background: var(--card-action-hover);
      box-shadow: 0 4px 12px rgba(0,113,227,0.3);
      transform: translateY(-1px);
    }

    .btn--secondary {
      background: transparent;
      color: var(--card-action-blue);
      border: 1.5px solid var(--card-border-light);
      margin-left: 12px;
    }

    .btn--secondary:hover {
      border-color: var(--card-action-blue);
      background: rgba(0,113,227,0.04);
    }

    /* Filter Chips */
    .filters {
      display: flex;
      gap: 10px;
      flex-wrap: wrap;
      max-width: 1200px;
      margin: 0 auto;
      padding: 0 32px 32px;
    }

    .chip {
      font-family: 'Inter', sans-serif;
      font-size: 0.825rem;
      font-weight: 500;
      padding: 8px 18px;
      border-radius: 100px;
      border: 1.5px solid var(--card-border-light);
      background: var(--card-bg-surface);
      color: var(--card-text-secondary);
      cursor: pointer;
      transition: background var(--card-transition), border-color var(--card-transition), color var(--card-transition);
    }

    .chip:hover {
      border-color: var(--card-action-blue);
      color: var(--card-action-blue);
    }

    .chip--active {
      background: var(--card-action-blue);
      border-color: var(--card-action-blue);
      color: #ffffff;
    }

    /* Section headings */
    .section-header {
      max-width: 1200px;
      margin: 0 auto;
      padding: 48px 32px 24px;
    }

    .section-header h2 {
      font-size: 1.5rem;
      color: var(--card-text-primary);
    }

    .section-header p {
      font-size: 0.95rem;
      color: var(--card-text-secondary);
      margin-top: 6px;
    }

    /* Card Grid */
    .card-grid {
      display: grid;
      grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
      gap: var(--card-gap);
      max-width: 1200px;
      margin: 0 auto;
      padding: 0 32px 48px;
    }

    .card {
      background: var(--card-bg-surface);
      border-radius: var(--card-radius-md);
      box-shadow: var(--card-shadow-md);
      overflow: hidden;
      display: flex;
      flex-direction: column;
      transition: transform var(--card-transition), box-shadow var(--card-transition);
      cursor: pointer;
    }

    .card:hover {
      transform: translateY(-4px);
      box-shadow: var(--card-shadow-lg);
    }

    .card-img {
      width: 100%;
      aspect-ratio: 16 / 9;
      display: flex;
      align-items: center;
      justify-content: center;
      font-size: 2rem;
      color: rgba(255,255,255,0.4);
    }

    .card-body {
      padding: var(--card-padding);
      flex: 1;
      display: flex;
      flex-direction: column;
    }

    .card-cat {
      font-size: 0.7rem;
      font-weight: 600;
      text-transform: uppercase;
      letter-spacing: 0.06em;
      color: var(--card-action-blue);
      margin-bottom: 8px;
    }

    .card-body h3 {
      font-size: 1.1rem;
      margin-bottom: 8px;
      line-height: 1.35;
    }

    .card-body p {
      font-size: 0.9rem;
      color: var(--card-text-secondary);
      line-height: 1.6;
      flex: 1;
      display: -webkit-box;
      -webkit-line-clamp: 3;
      -webkit-box-orient: vertical;
      overflow: hidden;
    }

    .card-footer {
      display: flex;
      align-items: center;
      justify-content: space-between;
      padding-top: 16px;
      margin-top: 16px;
      border-top: 1px solid var(--card-border-light);
      font-size: 0.8rem;
      color: var(--card-text-tertiary);
    }

    .card-footer a {
      font-family: 'DM Sans', sans-serif;
      font-weight: 600;
      font-size: 0.825rem;
      color: var(--card-action-blue);
      text-decoration: none;
    }

    .card-footer a:hover {
      color: var(--card-action-hover);
    }

    /* Masonry Section */
    .masonry {
      column-count: 3;
      column-gap: var(--card-gap);
      max-width: 1200px;
      margin: 0 auto;
      padding: 0 32px 48px;
    }

    .masonry .card {
      break-inside: avoid;
      margin-bottom: var(--card-gap);
      display: inline-block;
      width: 100%;
    }

    .masonry .card-img {
      aspect-ratio: auto;
      min-height: 120px;
    }

    /* Carousel */
    .carousel-header {
      display: flex;
      align-items: center;
      justify-content: space-between;
      max-width: 1200px;
      margin: 0 auto;
      padding: 48px 32px 24px;
    }

    .carousel-header h2 {
      font-size: 1.5rem;
      color: var(--card-text-primary);
    }

    .carousel-controls {
      display: flex;
      gap: 8px;
    }

    .carousel-btn {
      width: 38px;
      height: 38px;
      border-radius: 50%;
      border: 1.5px solid var(--card-border-light);
      background: var(--card-bg-surface);
      cursor: pointer;
      font-size: 1rem;
      color: var(--card-text-secondary);
      display: flex;
      align-items: center;
      justify-content: center;
      transition: border-color var(--card-transition), color var(--card-transition);
    }

    .carousel-btn:hover {
      border-color: var(--card-action-blue);
      color: var(--card-action-blue);
    }

    .carousel-track {
      display: flex;
      gap: var(--card-gap);
      overflow-x: auto;
      scroll-snap-type: x mandatory;
      scroll-behavior: smooth;
      max-width: 1200px;
      margin: 0 auto;
      padding: 0 32px 48px;
      -ms-overflow-style: none;
      scrollbar-width: none;
    }

    .carousel-track::-webkit-scrollbar { display: none; }

    .carousel-track .card {
      flex: 0 0 280px;
      scroll-snap-align: start;
    }

    /* CTA Banner */
    .cta-banner {
      max-width: 1200px;
      margin: 0 auto;
      padding: 0 32px 48px;
    }

    .cta-card {
      background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
      border-radius: var(--card-radius-lg);
      padding: 64px;
      text-align: center;
      color: #ffffff;
    }

    .cta-card h2 {
      font-size: clamp(1.5rem, 3vw, 2.25rem);
      color: #ffffff;
      margin-bottom: 12px;
    }

    .cta-card p {
      font-size: 1.05rem;
      color: rgba(255,255,255,0.8);
      margin-bottom: 32px;
      max-width: 520px;
      margin-left: auto;
      margin-right: auto;
    }

    .btn--white {
      background: #ffffff;
      color: #764ba2;
      font-family: 'DM Sans', sans-serif;
      font-weight: 600;
      font-size: 0.9rem;
      padding: 14px 32px;
      border-radius: var(--card-radius-sm);
      border: none;
      cursor: pointer;
      text-decoration: none;
      transition: box-shadow var(--card-transition), transform var(--card-transition);
    }

    .btn--white:hover {
      box-shadow: 0 6px 20px rgba(0,0,0,0.2);
      transform: translateY(-2px);
    }

    /* Footer */
    footer {
      background: var(--card-bg-surface);
      border-top: 1px solid var(--card-border-light);
    }

    .footer-inner {
      max-width: 1200px;
      margin: 0 auto;
      padding: 40px 32px;
      display: flex;
      align-items: center;
      justify-content: space-between;
    }

    .footer-brand {
      font-family: 'DM Sans', sans-serif;
      font-weight: 700;
      font-size: 1.1rem;
      color: var(--card-text-primary);
    }

    .footer-links {
      display: flex;
      gap: 24px;
      list-style: none;
    }

    .footer-links a {
      font-size: 0.85rem;
      color: var(--card-text-secondary);
      text-decoration: none;
    }

    .footer-links a:hover {
      color: var(--card-text-primary);
    }

    .footer-copy {
      font-size: 0.8rem;
      color: var(--card-text-tertiary);
      text-align: center;
      padding: 0 32px 24px;
      max-width: 1200px;
      margin: 0 auto;
    }

    /* Responsive */
    @media (max-width: 768px) {
      nav { padding: 14px 20px; }
      nav ul { gap: 20px; }
      .hero { padding: 40px 20px 32px; }
      .hero-card { grid-template-columns: 1fr; }
      .hero-image { min-height: 200px; }
      .hero-body { padding: 32px; }
      .card-grid { padding: 0 20px 32px; }
      .masonry { column-count: 1; padding: 0 20px 32px; }
      .carousel-track .card { flex: 0 0 85vw; }
      .cta-card { padding: 40px 24px; }
      .filters { padding: 0 20px 24px; }
      .section-header { padding: 32px 20px 16px; }
      .carousel-header { padding: 32px 20px 16px; }
      .carousel-track { padding: 0 20px 32px; }
      .cta-banner { padding: 0 20px 32px; }
      .footer-inner { flex-direction: column; gap: 16px; text-align: center; padding: 32px 20px; }
    }
  </style>
</head>
<body>
  <nav>
    <a href="#" class="logo">Cardfolio</a>
    <ul>
      <li><a href="#">Explore</a></li>
      <li><a href="#">Collections</a></li>
      <li><a href="#">Trending</a></li>
      <li><a href="#">About</a></li>
    </ul>
  </nav>

  <!-- Hero -->
  <section class="hero">
    <div class="hero-card">
      <div class="hero-image">&#9670;</div>
      <div class="hero-body">
        <span class="hero-label">Featured Collection</span>
        <h1>Discover Curated Content</h1>
        <p>Browse through beautifully organized cards. Every piece of content has its own space, making discovery effortless and delightful.</p>
        <div>
          <a href="#" class="btn btn--primary">Get Started</a>
          <a href="#" class="btn btn--secondary">Learn More</a>
        </div>
      </div>
    </div>
  </section>

  <!-- Filters -->
  <div class="filters">
    <button class="chip chip--active">All</button>
    <button class="chip">Design</button>
    <button class="chip">Development</button>
    <button class="chip">Photography</button>
    <button class="chip">Illustration</button>
    <button class="chip">Typography</button>
  </div>

  <!-- Uniform Card Grid -->
  <section class="card-grid">
    <div class="card">
      <div class="card-img" style="background: linear-gradient(135deg, #f093fb 0%, #f5576c 100%);">&#9733;</div>
      <div class="card-body">
        <span class="card-cat">Design</span>
        <h3>Principles of Visual Hierarchy</h3>
        <p>Learn how size, color, and spacing guide the viewer's eye through a composition to create clear communication.</p>
        <div class="card-footer">
          <span>5 min read</span>
          <a href="#">Read More &rarr;</a>
        </div>
      </div>
    </div>

    <div class="card">
      <div class="card-img" style="background: linear-gradient(135deg, #4facfe 0%, #00f2fe 100%);">&#9830;</div>
      <div class="card-body">
        <span class="card-cat">Development</span>
        <h3>Building Responsive Grid Systems</h3>
        <p>A practical guide to CSS Grid and Flexbox patterns that adapt beautifully across every device and screen size.</p>
        <div class="card-footer">
          <span>8 min read</span>
          <a href="#">Read More &rarr;</a>
        </div>
      </div>
    </div>

    <div class="card">
      <div class="card-img" style="background: linear-gradient(135deg, #43e97b 0%, #38f9d7 100%);">&#9827;</div>
      <div class="card-body">
        <span class="card-cat">Photography</span>
        <h3>Composition and the Rule of Thirds</h3>
        <p>Discover how professional photographers use compositional grids to create balanced and compelling images.</p>
        <div class="card-footer">
          <span>4 min read</span>
          <a href="#">Read More &rarr;</a>
        </div>
      </div>
    </div>

    <div class="card">
      <div class="card-img" style="background: linear-gradient(135deg, #fa709a 0%, #fee140 100%);">&#9824;</div>
      <div class="card-body">
        <span class="card-cat">Illustration</span>
        <h3>Color Theory for Digital Artists</h3>
        <p>Understanding warm and cool color relationships, contrast ratios, and accessible palettes for screen-based work.</p>
        <div class="card-footer">
          <span>6 min read</span>
          <a href="#">Read More &rarr;</a>
        </div>
      </div>
    </div>

    <div class="card">
      <div class="card-img" style="background: linear-gradient(135deg, #a18cd1 0%, #fbc2eb 100%);">&#10022;</div>
      <div class="card-body">
        <span class="card-cat">Typography</span>
        <h3>The Art of Font Pairing</h3>
        <p>How to combine typefaces for contrast and harmony, from classic serif-sans pairings to modern geometric combinations.</p>
        <div class="card-footer">
          <span>7 min read</span>
          <a href="#">Read More &rarr;</a>
        </div>
      </div>
    </div>

    <div class="card">
      <div class="card-img" style="background: linear-gradient(135deg, #ffecd2 0%, #fcb69f 100%);">&#9672;</div>
      <div class="card-body">
        <span class="card-cat">Design</span>
        <h3>White Space as a Design Element</h3>
        <p>Why the empty areas of your layout are just as important as the content they surround and how to use them with purpose.</p>
        <div class="card-footer">
          <span>3 min read</span>
          <a href="#">Read More &rarr;</a>
        </div>
      </div>
    </div>
  </section>

  <!-- Masonry Section -->
  <div class="section-header">
    <h2>Masonry Collection</h2>
    <p>Variable-height cards in a Pinterest-style waterfall layout.</p>
  </div>

  <section class="masonry">
    <div class="card">
      <div class="card-img" style="background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); min-height: 200px;">&#9670;</div>
      <div class="card-body">
        <span class="card-cat">Design</span>
        <h3>Layout Fundamentals</h3>
        <p>Exploring the building blocks of page structure.</p>
      </div>
    </div>

    <div class="card">
      <div class="card-img" style="background: linear-gradient(135deg, #f093fb 0%, #f5576c 100%); min-height: 280px;">&#9733;</div>
      <div class="card-body">
        <span class="card-cat">Photography</span>
        <h3>Golden Hour Techniques</h3>
        <p>Capture the warm, soft light that makes outdoor photographs feel magical. Tips on timing, exposure, and composition during the golden hour window.</p>
      </div>
    </div>

    <div class="card">
      <div class="card-img" style="background: linear-gradient(135deg, #4facfe 0%, #00f2fe 100%); min-height: 160px;">&#9830;</div>
      <div class="card-body">
        <span class="card-cat">Development</span>
        <h3>CSS Grid Tricks</h3>
      </div>
    </div>

    <div class="card">
      <div class="card-img" style="background: linear-gradient(135deg, #43e97b 0%, #38f9d7 100%); min-height: 240px;">&#9827;</div>
      <div class="card-body">
        <span class="card-cat">Illustration</span>
        <h3>Geometric Abstraction</h3>
        <p>Using simple shapes to create complex visual narratives that communicate ideas without words.</p>
      </div>
    </div>

    <div class="card">
      <div class="card-img" style="background: linear-gradient(135deg, #fa709a 0%, #fee140 100%); min-height: 180px;">&#9824;</div>
      <div class="card-body">
        <span class="card-cat">Typography</span>
        <h3>Variable Fonts in Action</h3>
        <p>How a single font file can replace dozens of weights and styles.</p>
      </div>
    </div>

    <div class="card">
      <div class="card-img" style="background: linear-gradient(135deg, #a18cd1 0%, #fbc2eb 100%); min-height: 300px;">&#10022;</div>
      <div class="card-body">
        <span class="card-cat">Design</span>
        <h3>Designing for Accessibility</h3>
        <p>Inclusive design practices that ensure your interfaces are usable by everyone, regardless of ability or assistive technology. Color contrast, keyboard navigation, and semantic markup all play critical roles.</p>
      </div>
    </div>
  </section>

  <!-- Carousel -->
  <div class="carousel-header">
    <h2>Trending Now</h2>
    <div class="carousel-controls">
      <button class="carousel-btn">&larr;</button>
      <button class="carousel-btn">&rarr;</button>
    </div>
  </div>

  <div class="carousel-track">
    <div class="card">
      <div class="card-img" style="background: linear-gradient(135deg, #ffecd2 0%, #fcb69f 100%); aspect-ratio: 4/3;">&#9672;</div>
      <div class="card-body">
        <span class="card-cat">Trending</span>
        <h3>Micro-interactions Guide</h3>
        <p>Small animations that make big differences in user experience.</p>
      </div>
    </div>
    <div class="card">
      <div class="card-img" style="background: linear-gradient(135deg, #d4fc79 0%, #96e6a1 100%); aspect-ratio: 4/3;">&#9670;</div>
      <div class="card-body">
        <span class="card-cat">Trending</span>
        <h3>Design Tokens Explained</h3>
        <p>The building blocks of scalable design systems.</p>
      </div>
    </div>
    <div class="card">
      <div class="card-img" style="background: linear-gradient(135deg, #84fab0 0%, #8fd3f4 100%); aspect-ratio: 4/3;">&#9733;</div>
      <div class="card-body">
        <span class="card-cat">Trending</span>
        <h3>AI in UI Design</h3>
        <p>How artificial intelligence is transforming interface design workflows.</p>
      </div>
    </div>
    <div class="card">
      <div class="card-img" style="background: linear-gradient(135deg, #cfd9df 0%, #e2ebf0 100%); aspect-ratio: 4/3;">&#9830;</div>
      <div class="card-body">
        <span class="card-cat">Trending</span>
        <h3>Minimalism in 2026</h3>
        <p>The evolution of less-is-more in modern web design.</p>
      </div>
    </div>
    <div class="card">
      <div class="card-img" style="background: linear-gradient(135deg, #fccb90 0%, #d57eeb 100%); aspect-ratio: 4/3;">&#9827;</div>
      <div class="card-body">
        <span class="card-cat">Trending</span>
        <h3>Container Queries Deep Dive</h3>
        <p>Responsive components that adapt to their parent, not the viewport.</p>
      </div>
    </div>
  </div>

  <!-- CTA -->
  <div class="cta-banner">
    <div class="cta-card">
      <h2>Start Building with Cards</h2>
      <p>Modular, responsive, and endlessly adaptable. Card-based design is the foundation of modern interfaces.</p>
      <a href="#" class="btn--white">Create Your Collection</a>
    </div>
  </div>

  <!-- Footer -->
  <footer>
    <div class="footer-inner">
      <span class="footer-brand">Cardfolio</span>
      <ul class="footer-links">
        <li><a href="#">Terms</a></li>
        <li><a href="#">Privacy</a></li>
        <li><a href="#">Contact</a></li>
        <li><a href="#">GitHub</a></li>
      </ul>
    </div>
    <p class="footer-copy">Designed with modular thinking. Every card tells a story.</p>
  </footer>
</body>
</html>