website_designs

Concrete Brutalism Design Reference

Overview

Concrete Brutalism is a design aesthetic rooted in the architectural movement that emerged in the 1950s, built upon the French term beton brut – meaning “raw concrete.” Coined by Le Corbusier during the construction of the Unite d’Habitation in Marseille (1952), the philosophy celebrates the honest, unfinished beauty of poured concrete: the grain impressions left by wooden formwork, the subtle imperfections of aggregate, the monolithic weight of massive structural forms. Where traditional design seeks to conceal materials behind paint, polish, and ornament, Concrete Brutalism elevates the material itself as the primary visual language, treating every crack, seam, and surface irregularity as a deliberate expression of authenticity.

Translated into digital design, Concrete Brutalism carries forward these principles of material honesty and monumental form. Interfaces adopt the muted, mineral palette of raw concrete – grays ranging from pale cement dust to dark wet stone, accented sparingly with the rust of exposed rebar, the warm amber of formwork timber, or the oxidized green of weathered copper. Typography is heavy, structural, and unapologetic, echoing the massive geometric slabs of Brutalist architecture. Layouts favor bold asymmetry, visible grid structures, and generous negative space that evokes the stark plazas surrounding Brutalist buildings. Textures play a central role: noise overlays, grain patterns, and subtle surface irregularities replicate the tactile quality of bush-hammered, board-marked, or exposed-aggregate concrete surfaces.

Unlike its web-focused cousin Brutalist Web Design (which strips the browser to its bare defaults) or the colorful playfulness of Neubrutalism, Concrete Brutalism specifically channels the architectural tradition. It is about weight, permanence, and the deliberate beauty of raw materials. Every design element should feel as though it was cast in a mold and left unfinished – massive, textured, honest, and unmistakably made of something real. The aesthetic rejects the frictionless glass-and-gradient smoothness of contemporary UI trends in favor of surfaces that communicate their construction, materials that announce their presence, and forms that assert their structural purpose without apology.


Visual Characteristics

Core Design Traits

Design Principles


Color Palette

The Concrete Brutalism palette is derived directly from the materials of Brutalist architecture: poured concrete in its many shades from pale cement to dark wet stone, the warm browns of timber formwork, the rust of exposed rebar and Corten steel, the dark charcoal of structural steel, and the verdigris of weathered copper. Color is used sparingly and always references a real material rather than an abstract decorative choice.

Swatch Hex Role / Usage
#D5D0CA #D5D0CA Light concrete – primary background, open surfaces, negative space
#B8B2A8 #B8B2A8 Warm concrete – secondary surfaces, card backgrounds, panels
#9C9588 #9C9588 Weathered concrete – muted text, dividers, metadata
#7A746A #7A746A Aged concrete – secondary text, structural borders
#5C5650 #5C5650 Dark concrete – headings on light backgrounds, heavy borders
#3B3733 #3B3733 Charcoal stone – primary text, dark structural elements
#2A2725 #2A2725 Deep shadow – dark backgrounds, footer, heavy masses
#F0ECE6 #F0ECE6 Cement dust – lightest surface, highlight areas
#8B4513 #8B4513 Rust / rebar – warm accent, call-to-action, links
#A0522D #A0522D Corten steel – hover states, secondary accent
#C19A6B #C19A6B Formwork timber – warm highlight, wood-grain accents
#4A6741 #4A6741 Oxidized copper – tertiary accent, success states, patina
#6B8F71 #6B8F71 Verdigris – light green accent, subtle interactive elements
#1A1816 #1A1816 Raw iron – deepest dark, text on light concrete
#E8DFD0 #E8DFD0 Limestone wash – warm light background variant

CSS Custom Properties

:root {
  /* Concrete spectrum */
  --concrete-dust: #f0ece6;
  --concrete-light: #d5d0ca;
  --concrete-warm: #b8b2a8;
  --concrete-weathered: #9c9588;
  --concrete-aged: #7a746a;
  --concrete-dark: #5c5650;
  --concrete-charcoal: #3b3733;
  --concrete-shadow: #2a2725;
  --concrete-limestone: #e8dfd0;

  /* Material accents */
  --concrete-rust: #8b4513;
  --concrete-corten: #a0522d;
  --concrete-timber: #c19a6b;
  --concrete-copper: #4a6741;
  --concrete-verdigris: #6b8f71;
  --concrete-iron: #1a1816;

  /* Functional tokens */
  --concrete-bg: var(--concrete-light);
  --concrete-bg-alt: var(--concrete-warm);
  --concrete-bg-dark: var(--concrete-shadow);
  --concrete-text: var(--concrete-charcoal);
  --concrete-text-muted: var(--concrete-aged);
  --concrete-text-inverse: var(--concrete-dust);
  --concrete-border: var(--concrete-dark);
  --concrete-accent: var(--concrete-rust);
  --concrete-accent-hover: var(--concrete-corten);
  --concrete-highlight: var(--concrete-timber);
}

Typography

Concrete Brutalism demands typography that feels architectural – letterforms with the structural clarity and physical weight of characters carved into a concrete facade or cast from a steel mold. Geometric sans-serifs and heavy slab serifs dominate, chosen for their blocky, monumental quality. Body text uses clean, readable faces that maintain the industrial character without sacrificing legibility. The overall effect should evoke signage on a Brutalist building: bold, uppercase, tightly tracked, and permanently set.

Font Weight(s) Usage Link
Bebas Neue 400 Display headlines, hero text, monumental titles fonts.google.com/specimen/Bebas+Neue
Oswald 400, 500, 700 Section headings, navigation, structural labels fonts.google.com/specimen/Oswald
Roboto Slab 400, 700 Body text, editorial content, architectural slab serif fonts.google.com/specimen/Roboto+Slab
Roboto Condensed 400, 700 Secondary headings, captions, compact structural text fonts.google.com/specimen/Roboto+Condensed
IBM Plex Sans 400, 500, 700 Body text, UI elements, clean industrial sans-serif fonts.google.com/specimen/IBM+Plex+Sans
Archivo Black 400 Heavy impact headlines, all-caps display text fonts.google.com/specimen/Archivo+Black

Font Pairing Suggestions

Heading Body Vibe
Bebas Neue IBM Plex Sans Towering concrete monolith meets clean industrial precision
Archivo Black Roboto Slab Heavyweight impact paired with grounded slab-serif solidity
Oswald (700) Roboto Condensed Condensed structural authority with efficient, compact readability
Bebas Neue Roboto Slab Monumental display type grounded by warm architectural serifs

CSS Example

@import url('https://fonts.googleapis.com/css2?family=Bebas+Neue&family=IBM+Plex+Sans:wght@400;500;700&family=Roboto+Slab:wght@400;700&display=swap');

/* === Base Typography === */
body {
  font-family: 'IBM Plex Sans', 'Helvetica Neue', Arial, sans-serif;
  font-size: 17px;
  line-height: 1.7;
  color: var(--concrete-text);
  background-color: var(--concrete-bg);
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}

h1, h2, h3, h4, h5, h6 {
  font-family: 'Bebas Neue', 'Impact', 'Arial Black', sans-serif;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  line-height: 1.0;
  color: var(--concrete-iron);
  margin: 0 0 0.5em 0;
}

h1 {
  font-size: clamp(3.5rem, 10vw, 9rem);
  letter-spacing: 0.06em;
}

h2 {
  font-size: clamp(2rem, 5vw, 4.5rem);
  letter-spacing: 0.04em;
}

h3 {
  font-size: clamp(1.25rem, 3vw, 2rem);
  font-family: 'Roboto Slab', 'Georgia', serif;
  font-weight: 700;
  text-transform: none;
  letter-spacing: 0;
}

a {
  color: var(--concrete-accent);
  text-decoration: underline;
  text-underline-offset: 3px;
  text-decoration-thickness: 2px;
}

a:hover {
  color: var(--concrete-accent-hover);
  background-color: var(--concrete-highlight);
  text-decoration-thickness: 3px;
}

blockquote {
  border-left: 6px solid var(--concrete-dark);
  margin: 1.5em 0;
  padding: 1em 1.5em;
  background-color: var(--concrete-warm);
  font-family: 'Roboto Slab', serif;
  font-style: normal;
  color: var(--concrete-charcoal);
}

Layout Principles


CSS / Design Techniques

Concrete Texture Card

A content card that evokes a precast concrete panel – textured surface, sharp edges, and visible structural borders.

.concrete-card {
  background-color: var(--concrete-warm);
  border: 3px solid var(--concrete-dark);
  padding: 2rem;
  margin: 1.5rem 0;
  position: relative;
  overflow: hidden;
}

/* Concrete grain noise overlay */
.concrete-card::before {
  content: '';
  position: absolute;
  inset: 0;
  background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noise'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noise)' opacity='0.08'/%3E%3C/svg%3E");
  background-size: 200px 200px;
  pointer-events: none;
  z-index: 1;
}

.concrete-card > * {
  position: relative;
  z-index: 2;
}

.concrete-card h3 {
  margin-top: 0;
  padding-bottom: 0.75rem;
  border-bottom: 2px solid var(--concrete-aged);
}

.concrete-card p {
  color: var(--concrete-charcoal);
  margin-bottom: 0;
}

.concrete-card:hover {
  border-color: var(--concrete-rust);
}

Brutalist Button

Buttons that feel like they were cast from a mold – heavy, rectangular, with blunt state changes and no rounded corners.

.concrete-button {
  display: inline-block;
  font-family: 'Bebas Neue', 'Impact', sans-serif;
  font-size: 1.1rem;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  padding: 0.9rem 2rem;
  border: 3px solid var(--concrete-charcoal);
  background-color: var(--concrete-charcoal);
  color: var(--concrete-dust);
  cursor: pointer;
  text-decoration: none;
  transition: none;
  position: relative;
}

.concrete-button:hover {
  background-color: var(--concrete-rust);
  border-color: var(--concrete-rust);
  color: var(--concrete-dust);
}

.concrete-button:active {
  background-color: var(--concrete-iron);
  border-color: var(--concrete-iron);
}

.concrete-button--outline {
  background-color: transparent;
  color: var(--concrete-charcoal);
}

.concrete-button--outline:hover {
  background-color: var(--concrete-charcoal);
  color: var(--concrete-dust);
}

A horizontal structural beam anchoring the page, with navigation links arranged like modular bay divisions.

.concrete-nav {
  background-color: var(--concrete-shadow);
  border-bottom: 4px solid var(--concrete-iron);
  padding: 0;
}

.concrete-nav ul {
  list-style: none;
  padding: 0;
  margin: 0;
  display: flex;
  flex-wrap: wrap;
}

.concrete-nav li {
  border-right: 1px solid var(--concrete-dark);
}

.concrete-nav a {
  display: block;
  padding: 1rem 1.5rem;
  color: var(--concrete-dust);
  text-decoration: none;
  font-family: 'Bebas Neue', sans-serif;
  font-size: 1rem;
  letter-spacing: 0.15em;
  text-transform: uppercase;
}

.concrete-nav a:hover {
  background-color: var(--concrete-rust);
  color: var(--concrete-dust);
}

.concrete-nav a.active {
  background-color: var(--concrete-dark);
  border-bottom: 3px solid var(--concrete-rust);
}

Hero Section

A monumental, full-viewport slab with textured concrete background, massive typography, and the weight of a Brutalist facade.

.concrete-hero {
  min-height: 100vh;
  display: flex;
  flex-direction: column;
  justify-content: flex-end;
  padding: 4rem 3rem;
  background-color: var(--concrete-shadow);
  position: relative;
  overflow: hidden;
}

/* Board-marked concrete texture */
.concrete-hero::before {
  content: '';
  position: absolute;
  inset: 0;
  background:
    repeating-linear-gradient(
      0deg,
      transparent,
      transparent 18px,
      rgba(0,0,0,0.05) 18px,
      rgba(0,0,0,0.05) 20px
    ),
    repeating-linear-gradient(
      90deg,
      transparent,
      transparent 80px,
      rgba(0,0,0,0.03) 80px,
      rgba(0,0,0,0.03) 82px
    );
  pointer-events: none;
  z-index: 1;
}

/* Noise grain overlay */
.concrete-hero::after {
  content: '';
  position: absolute;
  inset: 0;
  background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 512 512' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.7' numOctaves='5' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='0.06'/%3E%3C/svg%3E");
  background-size: 256px 256px;
  pointer-events: none;
  z-index: 2;
}

.concrete-hero > * {
  position: relative;
  z-index: 3;
}

.concrete-hero h1 {
  font-size: clamp(4rem, 12vw, 12rem);
  line-height: 0.9;
  color: var(--concrete-dust);
  margin: 0;
}

.concrete-hero p {
  font-family: 'IBM Plex Sans', sans-serif;
  font-size: clamp(1rem, 2vw, 1.35rem);
  max-width: 55ch;
  margin-top: 2rem;
  color: var(--concrete-weathered);
  line-height: 1.7;
}

Formwork Texture Background

A reusable CSS technique for creating the appearance of board-marked concrete using only CSS – no images required.

.formwork-texture {
  position: relative;
  background-color: var(--concrete-light);
}

.formwork-texture::before {
  content: '';
  position: absolute;
  inset: 0;
  background:
    /* Horizontal board lines */
    repeating-linear-gradient(
      180deg,
      transparent,
      transparent 22px,
      rgba(0,0,0,0.04) 22px,
      rgba(0,0,0,0.04) 24px
    ),
    /* Vertical formwork seams */
    repeating-linear-gradient(
      90deg,
      transparent,
      transparent 120px,
      rgba(0,0,0,0.06) 120px,
      rgba(0,0,0,0.06) 122px
    ),
    /* Subtle wood grain */
    repeating-linear-gradient(
      178deg,
      transparent,
      transparent 3px,
      rgba(0,0,0,0.015) 3px,
      rgba(0,0,0,0.015) 5px
    );
  pointer-events: none;
}

Exposed Aggregate Section

A section treatment that emulates the speckled, rough texture of exposed-aggregate concrete finishes.

.aggregate-section {
  padding: 4rem 3rem;
  background-color: var(--concrete-warm);
  position: relative;
}

.aggregate-section::before {
  content: '';
  position: absolute;
  inset: 0;
  background-image:
    radial-gradient(circle, var(--concrete-aged) 1px, transparent 1px),
    radial-gradient(circle, var(--concrete-weathered) 0.5px, transparent 0.5px);
  background-size: 12px 12px, 7px 7px;
  background-position: 0 0, 4px 4px;
  opacity: 0.4;
  pointer-events: none;
}

.aggregate-section > * {
  position: relative;
  z-index: 1;
}

Structural Divider

Heavy horizontal rules that evoke the expansion joints and floor-plate edges visible on Brutalist building facades.

.concrete-divider {
  border: none;
  height: 6px;
  background: linear-gradient(
    to bottom,
    var(--concrete-dark) 0%,
    var(--concrete-dark) 40%,
    var(--concrete-charcoal) 40%,
    var(--concrete-charcoal) 60%,
    var(--concrete-dark) 60%,
    var(--concrete-dark) 100%
  );
  margin: 0;
}

.concrete-divider--heavy {
  height: 10px;
  background: var(--concrete-iron);
}

.concrete-divider--rust {
  height: 4px;
  background: linear-gradient(
    to right,
    var(--concrete-rust),
    var(--concrete-corten),
    var(--concrete-rust)
  );
}

Pillar Sidebar Layout

A two-column layout where the sidebar acts as a structural pillar – a dark, narrow, load-bearing column anchoring the content.

.pillar-layout {
  display: grid;
  grid-template-columns: 280px 1fr;
  min-height: 100vh;
}

.pillar-sidebar {
  background-color: var(--concrete-shadow);
  padding: 2rem 1.5rem;
  border-right: 4px solid var(--concrete-iron);
  position: sticky;
  top: 0;
  height: 100vh;
  overflow-y: auto;
}

.pillar-sidebar a {
  display: block;
  padding: 0.6rem 0;
  color: var(--concrete-weathered);
  text-decoration: none;
  font-family: 'Bebas Neue', sans-serif;
  font-size: 0.95rem;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  border-bottom: 1px solid var(--concrete-dark);
}

.pillar-sidebar a:hover {
  color: var(--concrete-dust);
  background-color: var(--concrete-dark);
  padding-left: 0.5rem;
}

.pillar-content {
  padding: 3rem;
}

@media (max-width: 768px) {
  .pillar-layout {
    grid-template-columns: 1fr;
  }

  .pillar-sidebar {
    position: static;
    height: auto;
    border-right: none;
    border-bottom: 4px solid var(--concrete-iron);
  }
}

Design Do’s and Don’ts

Do’s

Don’ts


Aesthetic Relationship
Brutalist Web Design Shares the honesty-first philosophy but strips the browser to its raw defaults; Concrete Brutalism adds architectural texture and material specificity where Brutalist Web Design embraces pure HTML
Neubrutalism A colorful, playful descendant that retains thick borders and bold typography but adds saturated accent colors and hard-offset shadows; less material-honest, more stylistically expressive
Raw Industrial Kindred spirit in celebrating exposed materials and construction processes; Raw Industrial favors metal, rivets, and machinery where Concrete Brutalism centers on cast concrete and formwork
Minimalism Both reduce visual noise, but Minimalism pursues serene elegance while Concrete Brutalism embraces the rough, textured weight of honest materials
Constructivism Historical parallel in using bold geometry and structural expression as ideological design tools; both movements reject decorative superficiality in favor of honest, functional composition
Wabi-Sabi Shares the appreciation for imperfection, natural aging, and material honesty; Wabi-Sabi finds beauty in gentle decay while Concrete Brutalism finds it in deliberate, imposing roughness
Dark Academia Both use muted, warm palettes and evoke institutional architecture, but Dark Academia romanticizes while Concrete Brutalism confronts

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>Concrete Brutalism Template</title>
  <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=Bebas+Neue&family=IBM+Plex+Sans:wght@400;500;700&family=Roboto+Slab:wght@400;700&display=swap" rel="stylesheet">
  <style>
    /* --- Custom Properties --- */
    :root {
      /* Concrete spectrum */
      --concrete-dust: #f0ece6;
      --concrete-light: #d5d0ca;
      --concrete-warm: #b8b2a8;
      --concrete-weathered: #9c9588;
      --concrete-aged: #7a746a;
      --concrete-dark: #5c5650;
      --concrete-charcoal: #3b3733;
      --concrete-shadow: #2a2725;
      --concrete-limestone: #e8dfd0;

      /* Material accents */
      --concrete-rust: #8b4513;
      --concrete-corten: #a0522d;
      --concrete-timber: #c19a6b;
      --concrete-copper: #4a6741;
      --concrete-verdigris: #6b8f71;
      --concrete-iron: #1a1816;

      /* Functional tokens */
      --concrete-bg: var(--concrete-light);
      --concrete-bg-alt: var(--concrete-warm);
      --concrete-bg-dark: var(--concrete-shadow);
      --concrete-text: var(--concrete-charcoal);
      --concrete-text-muted: var(--concrete-aged);
      --concrete-text-inverse: var(--concrete-dust);
      --concrete-border: var(--concrete-dark);
      --concrete-accent: var(--concrete-rust);
      --concrete-accent-hover: var(--concrete-corten);
      --concrete-highlight: var(--concrete-timber);
    }

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

    body {
      font-family: 'IBM Plex Sans', 'Helvetica Neue', Arial, sans-serif;
      font-size: 17px;
      line-height: 1.7;
      color: var(--concrete-text);
      background-color: var(--concrete-bg);
      -webkit-font-smoothing: antialiased;
      -moz-osx-font-smoothing: grayscale;
    }

    /* --- Typography --- */
    h1, h2, h3, h4 {
      font-family: 'Bebas Neue', 'Impact', 'Arial Black', sans-serif;
      text-transform: uppercase;
      letter-spacing: 0.04em;
      line-height: 1.0;
      color: var(--concrete-iron);
    }

    h3 {
      font-family: 'Roboto Slab', Georgia, serif;
      text-transform: none;
      letter-spacing: 0;
      font-weight: 700;
    }

    a {
      color: var(--concrete-accent);
      text-decoration: underline;
      text-underline-offset: 3px;
      text-decoration-thickness: 2px;
      transition: none;
    }

    a:hover {
      color: var(--concrete-accent-hover);
      background-color: var(--concrete-highlight);
    }

    /* --- Concrete Noise Utility --- */
    .concrete-texture {
      position: relative;
    }

    .concrete-texture::after {
      content: '';
      position: absolute;
      inset: 0;
      background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.8' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='0.07'/%3E%3C/svg%3E");
      background-size: 200px 200px;
      pointer-events: none;
      z-index: 1;
    }

    .concrete-texture > * {
      position: relative;
      z-index: 2;
    }

    /* --- Navigation --- */
    .nav {
      background-color: var(--concrete-shadow);
      border-bottom: 4px solid var(--concrete-iron);
      padding: 0;
    }

    .nav-inner {
      display: flex;
      align-items: center;
      justify-content: space-between;
      flex-wrap: wrap;
    }

    .nav-brand {
      font-family: 'Bebas Neue', sans-serif;
      font-size: 1.3rem;
      letter-spacing: 0.2em;
      color: var(--concrete-dust);
      text-decoration: none;
      padding: 1rem 1.5rem;
      border-right: 1px solid var(--concrete-dark);
    }

    .nav-brand:hover {
      background-color: var(--concrete-dark);
      color: var(--concrete-dust);
    }

    .nav ul {
      list-style: none;
      display: flex;
      flex-wrap: wrap;
    }

    .nav li {
      border-left: 1px solid var(--concrete-dark);
    }

    .nav a {
      display: block;
      padding: 1rem 1.5rem;
      color: var(--concrete-weathered);
      text-decoration: none;
      font-family: 'Bebas Neue', sans-serif;
      font-size: 0.95rem;
      letter-spacing: 0.15em;
      text-transform: uppercase;
    }

    .nav a:hover {
      background-color: var(--concrete-rust);
      color: var(--concrete-dust);
    }

    /* --- Hero --- */
    .hero {
      min-height: 100vh;
      display: flex;
      flex-direction: column;
      justify-content: flex-end;
      padding: 5rem 3rem;
      background-color: var(--concrete-shadow);
      position: relative;
      overflow: hidden;
    }

    /* Board-marked formwork texture */
    .hero::before {
      content: '';
      position: absolute;
      inset: 0;
      background:
        repeating-linear-gradient(
          0deg,
          transparent,
          transparent 20px,
          rgba(255,255,255,0.03) 20px,
          rgba(255,255,255,0.03) 22px
        ),
        repeating-linear-gradient(
          90deg,
          transparent,
          transparent 100px,
          rgba(255,255,255,0.02) 100px,
          rgba(255,255,255,0.02) 102px
        );
      pointer-events: none;
      z-index: 1;
    }

    .hero::after {
      content: '';
      position: absolute;
      inset: 0;
      background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 512 512' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.65' numOctaves='5' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='0.05'/%3E%3C/svg%3E");
      background-size: 256px 256px;
      pointer-events: none;
      z-index: 2;
    }

    .hero > * {
      position: relative;
      z-index: 3;
    }

    .hero h1 {
      font-size: clamp(4rem, 13vw, 13rem);
      line-height: 0.88;
      color: var(--concrete-dust);
      margin: 0;
    }

    .hero h1 span {
      display: block;
      color: var(--concrete-rust);
    }

    .hero-subtitle {
      font-family: 'IBM Plex Sans', sans-serif;
      font-size: clamp(1rem, 1.8vw, 1.3rem);
      max-width: 52ch;
      margin-top: 2rem;
      color: var(--concrete-weathered);
      line-height: 1.8;
    }

    .hero .btn-row {
      margin-top: 2.5rem;
      display: flex;
      flex-wrap: wrap;
      gap: 0;
    }

    /* --- Buttons --- */
    .btn {
      display: inline-block;
      font-family: 'Bebas Neue', sans-serif;
      font-size: 1.1rem;
      letter-spacing: 0.12em;
      text-transform: uppercase;
      padding: 0.9rem 2.2rem;
      border: 3px solid var(--concrete-dust);
      background-color: transparent;
      color: var(--concrete-dust);
      cursor: pointer;
      text-decoration: none;
      transition: none;
    }

    .btn:hover {
      background-color: var(--concrete-rust);
      border-color: var(--concrete-rust);
      color: var(--concrete-dust);
    }

    .btn:active {
      background-color: var(--concrete-iron);
      border-color: var(--concrete-iron);
    }

    .btn--solid {
      background-color: var(--concrete-rust);
      border-color: var(--concrete-rust);
      color: var(--concrete-dust);
    }

    .btn--solid:hover {
      background-color: var(--concrete-corten);
      border-color: var(--concrete-corten);
    }

    .btn--dark {
      background-color: var(--concrete-charcoal);
      border-color: var(--concrete-charcoal);
      color: var(--concrete-dust);
    }

    .btn--dark:hover {
      background-color: var(--concrete-rust);
      border-color: var(--concrete-rust);
    }

    /* --- Structural Divider --- */
    .divider {
      border: none;
      height: 6px;
      background: var(--concrete-iron);
      margin: 0;
    }

    .divider--rust {
      height: 4px;
      background: linear-gradient(
        to right,
        var(--concrete-rust),
        var(--concrete-corten),
        var(--concrete-rust)
      );
    }

    /* --- Section Container --- */
    .section {
      padding: 5rem 3rem;
      border-bottom: 3px solid var(--concrete-dark);
      position: relative;
    }

    .section h2 {
      font-size: clamp(2.5rem, 6vw, 5rem);
      margin-bottom: 1.5rem;
    }

    .section-intro {
      max-width: 65ch;
      margin-bottom: 2.5rem;
      color: var(--concrete-aged);
      font-size: 1.05rem;
    }

    /* --- Card Grid --- */
    .card-grid {
      display: grid;
      grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
      gap: 0;
      border-top: 3px solid var(--concrete-dark);
      border-left: 3px solid var(--concrete-dark);
    }

    .card {
      border-right: 3px solid var(--concrete-dark);
      border-bottom: 3px solid var(--concrete-dark);
      padding: 2rem;
      background-color: var(--concrete-bg);
      position: relative;
      overflow: hidden;
    }

    .card::before {
      content: '';
      position: absolute;
      inset: 0;
      background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='0.05'/%3E%3C/svg%3E");
      background-size: 200px 200px;
      pointer-events: none;
    }

    .card > * {
      position: relative;
      z-index: 1;
    }

    .card:hover {
      background-color: var(--concrete-warm);
    }

    .card h3 {
      font-size: 1.15rem;
      margin-bottom: 0.75rem;
      padding-bottom: 0.75rem;
      border-bottom: 2px solid var(--concrete-aged);
    }

    .card p {
      font-size: 0.95rem;
      line-height: 1.7;
      margin-bottom: 1rem;
      color: var(--concrete-dark);
    }

    .card-tag {
      display: inline-block;
      font-family: 'Bebas Neue', sans-serif;
      font-size: 0.75rem;
      letter-spacing: 0.1em;
      text-transform: uppercase;
      border: 2px solid var(--concrete-aged);
      padding: 0.15rem 0.5rem;
      margin-right: 0.3rem;
      color: var(--concrete-aged);
    }

    /* --- Feature Blocks --- */
    .features {
      display: grid;
      grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
      gap: 3rem;
      margin-top: 3rem;
    }

    .feature {
      padding: 2rem 0;
      border-top: 4px solid var(--concrete-rust);
    }

    .feature-number {
      font-family: 'Bebas Neue', sans-serif;
      font-size: 3rem;
      color: var(--concrete-weathered);
      line-height: 1;
      margin-bottom: 0.5rem;
    }

    .feature h3 {
      font-size: 1.2rem;
      margin-bottom: 0.75rem;
    }

    .feature p {
      font-size: 0.95rem;
      color: var(--concrete-dark);
      line-height: 1.7;
    }

    /* --- Data Table --- */
    .data-table {
      width: 100%;
      border-collapse: collapse;
      font-size: 0.9rem;
      margin-top: 2rem;
    }

    .data-table th,
    .data-table td {
      border: 3px solid var(--concrete-dark);
      padding: 0.8rem 1rem;
      text-align: left;
      vertical-align: top;
    }

    .data-table th {
      background-color: var(--concrete-charcoal);
      color: var(--concrete-dust);
      font-family: 'Bebas Neue', sans-serif;
      font-size: 0.95rem;
      letter-spacing: 0.1em;
      text-transform: uppercase;
    }

    .data-table tr:hover td {
      background-color: var(--concrete-warm);
    }

    /* --- Testimonial / Quote Block --- */
    .quote-block {
      padding: 3rem;
      background-color: var(--concrete-shadow);
      border-left: 8px solid var(--concrete-rust);
      margin: 3rem 0;
      position: relative;
    }

    .quote-block blockquote {
      font-family: 'Roboto Slab', Georgia, serif;
      font-size: clamp(1.1rem, 2vw, 1.4rem);
      line-height: 1.7;
      color: var(--concrete-limestone);
      border: none;
      padding: 0;
      margin: 0;
      background: none;
    }

    .quote-block cite {
      display: block;
      margin-top: 1.5rem;
      font-family: 'Bebas Neue', sans-serif;
      font-size: 0.9rem;
      letter-spacing: 0.1em;
      text-transform: uppercase;
      color: var(--concrete-weathered);
      font-style: normal;
    }

    /* --- Footer --- */
    .footer {
      padding: 3rem;
      background-color: var(--concrete-iron);
      border-top: 6px solid var(--concrete-charcoal);
    }

    .footer-grid {
      display: grid;
      grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
      gap: 2rem;
      margin-bottom: 2rem;
    }

    .footer h4 {
      font-size: 1rem;
      letter-spacing: 0.15em;
      color: var(--concrete-weathered);
      margin-bottom: 1rem;
      padding-bottom: 0.5rem;
      border-bottom: 2px solid var(--concrete-dark);
    }

    .footer ul {
      list-style: none;
    }

    .footer li {
      padding: 0.3rem 0;
    }

    .footer a {
      color: var(--concrete-aged);
      text-decoration: none;
      font-size: 0.9rem;
    }

    .footer a:hover {
      color: var(--concrete-dust);
      background: none;
      text-decoration: underline;
    }

    .footer-bottom {
      border-top: 1px solid var(--concrete-dark);
      padding-top: 1.5rem;
    }

    .footer-bottom p {
      font-size: 0.8rem;
      color: var(--concrete-dark);
    }

    /* --- Utilities --- */
    .mt-1 { margin-top: 1rem; }
    .mt-2 { margin-top: 2rem; }
    .mt-3 { margin-top: 3rem; }

    /* --- Responsive --- */
    @media (max-width: 768px) {
      .hero {
        min-height: 80vh;
        padding: 3rem 1.5rem;
      }

      .section {
        padding: 3rem 1.5rem;
      }

      .nav-brand {
        padding: 0.75rem 1rem;
      }

      .nav a {
        padding: 0.75rem 1rem;
        font-size: 0.85rem;
      }

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

      .features {
        grid-template-columns: 1fr;
        gap: 2rem;
      }

      .footer {
        padding: 2rem 1.5rem;
      }

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

  <!-- NAVIGATION -->
  <nav class="nav">
    <div class="nav-inner">
      <a href="#" class="nav-brand">Beton Brut</a>
      <ul>
        <li><a href="#about">About</a></li>
        <li><a href="#projects">Projects</a></li>
        <li><a href="#materials">Materials</a></li>
        <li><a href="#data">Data</a></li>
        <li><a href="#contact">Contact</a></li>
      </ul>
    </div>
  </nav>

  <!-- HERO -->
  <section class="hero" id="top">
    <h1>Concrete<br><span>Brutalism</span></h1>
    <p class="hero-subtitle">
      Raw concrete. Honest materials. Massive forms. We build with the
      truth of beton brut -- celebrating the grain of formwork, the weight
      of aggregate, and the unfinished beauty of architecture that refuses
      to hide what it is made of.
    </p>
    <div class="btn-row">
      <a href="#projects" class="btn btn--solid">View Projects</a>
      <a href="#about" class="btn">Learn More</a>
    </div>
  </section>

  <hr class="divider--rust">

  <!-- ABOUT SECTION -->
  <section class="section concrete-texture" id="about">
    <h2>About the Practice</h2>
    <p class="section-intro">
      Born from Le Corbusier's declaration that raw concrete is beautiful in its
      imperfection, our work embraces the material honesty of Brutalist architecture.
      Every surface tells the story of its making -- the grain of the timber formwork,
      the marks of the casting process, the slow patina of weather and time.
    </p>
    <div class="features">
      <div class="feature">
        <div class="feature-number">01</div>
        <h3>Material Honesty</h3>
        <p>
          We never conceal what a building is made of. Concrete is left
          exposed. Steel is left unclad. The structure is the finish.
        </p>
      </div>
      <div class="feature">
        <div class="feature-number">02</div>
        <h3>Monumental Form</h3>
        <p>
          Our buildings assert their presence through scale and geometry.
          Massive cantilevers, deep reveals, and bold silhouettes define
          the relationship between structure and sky.
        </p>
      </div>
      <div class="feature">
        <div class="feature-number">03</div>
        <h3>Textured Surfaces</h3>
        <p>
          Board-marked, bush-hammered, or exposed-aggregate -- every
          concrete surface carries the deliberate texture of its making,
          humanizing the architecture through tactile imperfection.
        </p>
      </div>
    </div>
  </section>

  <hr class="divider">

  <!-- PROJECTS (CARD GRID) -->
  <section class="section" id="projects">
    <h2>Projects</h2>
    <p class="section-intro">
      Each project is a concrete panel in a larger structure. The grid reveals
      the modular system; the borders are expansion joints. Hover to see the
      material beneath.
    </p>
    <div class="card-grid">
      <div class="card">
        <h3>Unité Résidentielle</h3>
        <p>
          A 337-unit housing block cast entirely in board-marked concrete.
          The facade records every plank of the formwork that shaped it.
          Twelve stories of honest material rising from an open piloti ground floor.
        </p>
        <span class="card-tag">Housing</span>
        <span class="card-tag">Béton Brut</span>
      </div>
      <div class="card">
        <h3>Aggregate Pavilion</h3>
        <p>
          An exhibition space with exposed-aggregate walls revealing the
          river stone embedded within. Bush-hammered columns support a
          cantilevered roof slab spanning 18 meters without intermediate support.
        </p>
        <span class="card-tag">Cultural</span>
        <span class="card-tag">Cantilever</span>
      </div>
      <div class="card">
        <h3>Formwork Library</h3>
        <p>
          A public library where every interior wall bears the imprint of
          the timber boards used to cast it. Reading alcoves are carved
          directly into the concrete mass, lit by deep slit windows.
        </p>
        <span class="card-tag">Public</span>
        <span class="card-tag">Board-Marked</span>
      </div>
      <div class="card">
        <h3>Piloti Tower</h3>
        <p>
          A 24-story residential tower raised on massive concrete piloti,
          freeing the ground plane for public passage. The raw concrete
          core is expressed as a visible spine running the full height of the building.
        </p>
        <span class="card-tag">Tower</span>
        <span class="card-tag">Piloti</span>
      </div>
    </div>
  </section>

  <hr class="divider--rust">

  <!-- QUOTE -->
  <div class="quote-block">
    <blockquote>
      "The raw concrete surface, with all the imprints of the formwork,
      adds a certain richness to the architecture. It humanises it."
    </blockquote>
    <cite>Le Corbusier, on the Unite d'Habitation, 1952</cite>
  </div>

  <!-- MATERIALS TABLE -->
  <section class="section concrete-texture" id="materials">
    <h2>Materials</h2>
    <p class="section-intro">
      A reference table of the primary materials and surface treatments
      used in Concrete Brutalism. Each material is left honest and unfinished.
    </p>
    <table class="data-table">
      <thead>
        <tr>
          <th>Material</th>
          <th>Finish</th>
          <th>Application</th>
          <th>Character</th>
        </tr>
      </thead>
      <tbody>
        <tr>
          <td>Poured Concrete</td>
          <td>Board-marked</td>
          <td>Walls, ceilings, structural cores</td>
          <td>Horizontal grain lines from timber formwork</td>
        </tr>
        <tr>
          <td>Precast Concrete</td>
          <td>Smooth / sandblasted</td>
          <td>Facade panels, cladding</td>
          <td>Uniform surface with visible panel joints</td>
        </tr>
        <tr>
          <td>Exposed Aggregate</td>
          <td>Bush-hammered</td>
          <td>Feature walls, columns, paving</td>
          <td>Rough, speckled texture revealing stone within</td>
        </tr>
        <tr>
          <td>Corten Steel</td>
          <td>Weathered patina</td>
          <td>Cladding, screens, structural accents</td>
          <td>Deep rust-orange that stabilizes over time</td>
        </tr>
        <tr>
          <td>Raw Timber</td>
          <td>Untreated / oiled</td>
          <td>Formwork references, interior warmth</td>
          <td>Warm grain that contrasts with cool concrete</td>
        </tr>
      </tbody>
    </table>
  </section>

  <hr class="divider">

  <!-- DATA SECTION -->
  <section class="section" id="data">
    <h2>By the Numbers</h2>
    <p class="section-intro">
      Quantified characteristics of the Concrete Brutalism approach.
    </p>
    <table class="data-table">
      <thead>
        <tr>
          <th>Metric</th>
          <th>Value</th>
          <th>Context</th>
        </tr>
      </thead>
      <tbody>
        <tr>
          <td>Primary palette colors</td>
          <td>8 grays</td>
          <td>Derived from concrete at different moisture levels</td>
        </tr>
        <tr>
          <td>Accent materials</td>
          <td>3</td>
          <td>Rust, timber, copper -- each referencing real substances</td>
        </tr>
        <tr>
          <td>Minimum border weight</td>
          <td>3px</td>
          <td>Thinner borders feel insubstantial against concrete textures</td>
        </tr>
        <tr>
          <td>Border-radius permitted</td>
          <td>0px</td>
          <td>No rounded corners -- concrete is cast in angular forms</td>
        </tr>
        <tr>
          <td>Transition duration</td>
          <td>0ms</td>
          <td>State changes are instantaneous -- like light on stone</td>
        </tr>
      </tbody>
    </table>
  </section>

  <!-- CONTACT -->
  <section class="section" id="contact">
    <h2>Contact</h2>
    <p class="section-intro">
      Structural inquiries and material consultations.
    </p>
    <p>
      Email: <a href="mailto:studio@betonbrut.example">studio@betonbrut.example</a>
      &nbsp;&bull;&nbsp;
      Location: Marseille, France
      &nbsp;&bull;&nbsp;
      <a href="#">View on map</a>
    </p>
    <div class="mt-2">
      <a href="#" class="btn btn--dark">Send Inquiry</a>
    </div>
  </section>

  <!-- FOOTER -->
  <footer class="footer">
    <div class="footer-grid">
      <div>
        <h4>Studio</h4>
        <ul>
          <li><a href="#">About</a></li>
          <li><a href="#">Team</a></li>
          <li><a href="#">Process</a></li>
          <li><a href="#">Careers</a></li>
        </ul>
      </div>
      <div>
        <h4>Work</h4>
        <ul>
          <li><a href="#">Residential</a></li>
          <li><a href="#">Cultural</a></li>
          <li><a href="#">Public</a></li>
          <li><a href="#">Infrastructure</a></li>
        </ul>
      </div>
      <div>
        <h4>Resources</h4>
        <ul>
          <li><a href="#">Material Library</a></li>
          <li><a href="#">Concrete Finishes</a></li>
          <li><a href="#">Formwork Guide</a></li>
          <li><a href="#">Brutalism Archive</a></li>
        </ul>
      </div>
      <div>
        <h4>References</h4>
        <ul>
          <li><a href="#">Le Corbusier</a></li>
          <li><a href="#">Reyner Banham</a></li>
          <li><a href="#">Barbican Estate</a></li>
          <li><a href="#">Trellick Tower</a></li>
        </ul>
      </div>
    </div>
    <div class="footer-bottom">
      <p>
        Built with raw HTML and CSS. No frameworks. No build steps.
        View source to verify. &copy; 2025 Beton Brut Studio.
      </p>
    </div>
  </footer>

</body>
</html>

Implementation Tips