Deconstructivism is a radical design philosophy rooted in Jacques Derrida’s literary theory of deconstruction and the formal experiments of Russian Constructivism, challenging the assumption that structures – whether architectural, typographic, or digital – must express harmony, stability, or coherent order. Emerging as a recognizable movement through the landmark 1988 “Deconstructivist Architecture” exhibition at MoMA (curated by Philip Johnson and Mark Wigley), it crystallized around the work of Frank Gehry, Daniel Libeskind, Zaha Hadid, Rem Koolhaas, Peter Eisenman, Coop Himmelb(l)au, and Bernard Tschumi – architects who fragmented, distorted, and collided conventional forms to expose the instability hidden within every “stable” structure. In graphic design, practitioners like David Carson (Ray Gun magazine), the Cranbrook Academy school, and the Emigre foundry translated these ideas into shattered grids, illegible-by-choice typography, overlapping layers, and the deliberate disruption of visual hierarchy. On the web, Deconstructivism manifests as broken grid layouts, extreme angular transforms, overlapping and colliding elements, clashing typographic scales, z-index warfare, clip-path fragmentation, and interfaces that subvert conventional UX patterns – not for chaos alone, but to reveal that the “natural” order of a webpage is itself an arbitrary construct. The aesthetic demands active engagement from the viewer: nothing is passively consumable, every element questions its own placement, and the tension between structure and collapse is the design itself.
Deconstructivism draws from the raw materiality of architectural concrete, steel, and titanium, punctuated by aggressive signal colors that slash across the neutral foundation. Palettes are deliberately dissonant – industrial grays meet high-voltage accents, and harmonious relationships are avoided in favor of jarring juxtaposition.
| Swatch | Hex | Role / Usage |
|---|---|---|
#1A1A1A |
Primary dark ground, deep structural surfaces | |
#2C2C2C |
Secondary dark surface, layered panels | |
#4A4A4A |
Concrete mid-gray, muted structural elements | |
#7B7B7B |
Exposed aggregate gray, secondary text | |
#A8A8A8 |
Light concrete, wireframe lines, ghost elements | |
#E0E0E0 |
Light surface, negative space fills | |
#F5F5F0 |
Off-white ground, paper-like backgrounds | |
#FFFFFF |
Pure white, high-contrast text on dark | |
#FF2D2D |
Primary accent slash, danger, structural fracture lines | |
#FF6B00 |
Warning signal, aggressive highlight | |
#FFD600 |
Caution accent, construction-zone reference | |
#0066FF |
Blueprint blue, technical overlay, interactive elements | |
#00E5A0 |
Digital accent, secondary interactive state | |
#C8B8DB |
Titanium reflection, muted ethereal accent | |
#D4D4D4 |
Steel surface, brushed metal reference, borders |
:root {
/* --- Structural Grays (Concrete & Steel) --- */
--decon-black: #1a1a1a;
--decon-dark: #2c2c2c;
--decon-concrete: #4a4a4a;
--decon-aggregate: #7b7b7b;
--decon-light-concrete: #a8a8a8;
--decon-surface: #e0e0e0;
--decon-ground: #f5f5f0;
--decon-white: #ffffff;
--decon-steel: #d4d4d4;
/* --- Signal Accents --- */
--decon-red: #ff2d2d;
--decon-orange: #ff6b00;
--decon-yellow: #ffd600;
--decon-blue: #0066ff;
--decon-green: #00e5a0;
--decon-titanium: #c8b8db;
/* --- Functional Tokens --- */
--decon-bg: var(--decon-ground);
--decon-text: var(--decon-black);
--decon-text-muted: var(--decon-aggregate);
--decon-border: var(--decon-concrete);
--decon-accent: var(--decon-red);
--decon-interactive: var(--decon-blue);
--decon-highlight: var(--decon-yellow);
--decon-panel-dark: var(--decon-dark);
--decon-panel-light: var(--decon-surface);
}
Deconstructivist typography treats letterforms as architectural material to be fragmented, collided, and distorted. Typefaces are chosen for their ability to sustain extreme manipulation – condensed or extended widths, heavy weights that hold up under rotation and clipping, and monospaced faces that expose the mechanical grid of text. Pairings are deliberately dissonant: a hyper-geometric display face clashes with a raw monospace body, or an ultra-condensed headline collides with a wide, generous serif.
| Font | Weight(s) | Usage | Link |
|---|---|---|---|
| Bebas Neue | 400 | Display headlines, oversized titling, angular compositions | fonts.google.com/specimen/Bebas+Neue |
| Oswald | 300, 400, 700 | Condensed headlines, navigation labels, structural text | fonts.google.com/specimen/Oswald |
| Archivo Black | 400 | Impact headlines, all-caps slab display | fonts.google.com/specimen/Archivo+Black |
| Space Grotesk | 300, 400, 700 | Geometric body text, UI elements, captions | fonts.google.com/specimen/Space+Grotesk |
| Space Mono | 400, 700 | Code, metadata, exposed structural text, monospaced body | fonts.google.com/specimen/Space+Mono |
| Syne | 400, 500, 700, 800 | Expressive display, distorted headlines, art-direction type | fonts.google.com/specimen/Syne |
| Inter | 400, 700, 900 | Clean body text fallback, UI labels, form elements | fonts.google.com/specimen/Inter |
| Chakra Petch | 300, 400, 700 | Technical display, angular aesthetic, futurist accent | fonts.google.com/specimen/Chakra+Petch |
| Heading | Body | Vibe |
|---|---|---|
| Bebas Neue | Space Mono | Towering condensed verticals meet raw mechanical grid – the architect’s blueprint |
| Syne (800) | Space Grotesk | Expressive, slightly warped display headlines against clean geometric body – controlled chaos |
| Archivo Black | Inter | Heavyweight slab impact over neutral Swiss body – the collision of brute force and rationalism |
| Oswald (700) | Space Mono | Narrow condensed headings with monospaced precision – structural compression and exposed scaffolding |
| Chakra Petch | Space Grotesk | Angular futurist display paired with geometric clarity – Hadid’s curves meet Eisenman’s grids |
@import url('https://fonts.googleapis.com/css2?family=Bebas+Neue&family=Syne:wght@400;700;800&family=Space+Mono:wght@400;700&family=Space+Grotesk:wght@300;400;700&display=swap');
/* === Deconstructivist Base Typography === */
body {
font-family: 'Space Grotesk', 'Segoe UI', system-ui, sans-serif;
font-size: 16px;
line-height: 1.6;
color: var(--decon-text);
background-color: var(--decon-bg);
letter-spacing: 0.01em;
}
h1, h2, h3, h4, h5, h6 {
font-family: 'Bebas Neue', 'Impact', 'Arial Narrow', sans-serif;
text-transform: uppercase;
letter-spacing: 0.04em;
line-height: 0.92;
margin: 0 0 0.5em 0;
}
h1 {
font-size: clamp(4rem, 10vw, 10rem);
letter-spacing: -0.02em;
}
h2 {
font-size: clamp(2.5rem, 6vw, 5rem);
}
h3 {
font-family: 'Syne', 'Arial Black', sans-serif;
font-weight: 800;
font-size: clamp(1.5rem, 3vw, 2.5rem);
text-transform: none;
letter-spacing: -0.01em;
}
/* Deconstructed link style -- slash accent on hover */
a {
color: var(--decon-interactive);
text-decoration: none;
border-bottom: 2px solid transparent;
transition: border-color 0.15s ease;
}
a:hover {
border-bottom-color: var(--decon-accent);
color: var(--decon-accent);
}
/* Monospaced metadata / structural text */
.mono {
font-family: 'Space Mono', 'Courier New', monospace;
font-size: 0.8rem;
letter-spacing: 0.08em;
text-transform: uppercase;
color: var(--decon-text-muted);
}
/* Fragmented text -- letters spaced and rotated */
.decon-shatter-text {
font-family: 'Bebas Neue', sans-serif;
font-size: clamp(3rem, 8vw, 8rem);
text-transform: uppercase;
display: flex;
flex-wrap: wrap;
}
.decon-shatter-text span {
display: inline-block;
transform: rotate(calc(var(--r, 0) * 1deg)) translateY(calc(var(--y, 0) * 1px));
transition: transform 0.2s ease;
}
blockquote {
border-left: 4px solid var(--decon-accent);
padding: 1rem 1.5rem;
margin: 2rem 0;
background-color: var(--decon-panel-light);
transform: rotate(-0.5deg);
font-style: italic;
}
code, pre {
font-family: 'Space Mono', 'Courier New', monospace;
background-color: var(--decon-dark);
color: var(--decon-white);
border: 1px solid var(--decon-concrete);
}
code { padding: 0.2em 0.4em; font-size: 0.875em; }
pre { padding: 1.5rem; overflow-x: auto; white-space: pre; }
transform: rotate() on section-level containers to tilt entire layout regionsoverflow: visible or negative positioning, suggesting that the design continues beyond the visible frameA content card that appears sliced and displaced, with angular clip-paths and offset layers that suggest structural failure.
.decon-card {
position: relative;
background-color: var(--decon-white);
border: 2px solid var(--decon-border);
padding: 2rem;
transform: rotate(-1.5deg);
clip-path: polygon(0 0, 100% 2%, 98% 100%, 3% 97%);
transition: transform 0.3s ease, box-shadow 0.3s ease;
}
.decon-card::before {
content: '';
position: absolute;
top: -4px;
left: -4px;
right: -4px;
bottom: -4px;
background-color: var(--decon-accent);
z-index: -1;
clip-path: polygon(2% 1%, 100% 0, 97% 100%, 0 98%);
}
.decon-card:hover {
transform: rotate(0deg) scale(1.02);
box-shadow: -6px 6px 0 var(--decon-black);
}
.decon-card h3 {
font-family: 'Syne', sans-serif;
font-weight: 800;
font-size: 1.5rem;
margin-bottom: 0.75rem;
border-bottom: 2px solid var(--decon-accent);
padding-bottom: 0.5rem;
}
.decon-card p {
font-size: 0.95rem;
line-height: 1.6;
color: var(--decon-concrete);
}
.decon-card .tag {
display: inline-block;
font-family: 'Space Mono', monospace;
font-size: 0.65rem;
text-transform: uppercase;
letter-spacing: 0.12em;
border: 1px solid var(--decon-border);
padding: 0.2rem 0.6rem;
margin-top: 1rem;
margin-right: 0.25rem;
transform: rotate(1deg);
}
Buttons with aggressive clip-paths, slashed corners, and volatile hover states that feel like pressing a structural trigger.
.decon-btn {
display: inline-block;
font-family: 'Bebas Neue', 'Impact', sans-serif;
font-size: 1.1rem;
letter-spacing: 0.12em;
text-transform: uppercase;
padding: 0.9rem 2.2rem;
background-color: var(--decon-black);
color: var(--decon-white);
border: none;
clip-path: polygon(8% 0, 100% 0, 92% 100%, 0 100%);
cursor: pointer;
text-decoration: none;
position: relative;
transition: background-color 0.2s ease, transform 0.2s ease;
}
.decon-btn:hover {
background-color: var(--decon-accent);
transform: skewX(-3deg);
}
.decon-btn:active {
background-color: var(--decon-orange);
transform: skewX(-3deg) scale(0.97);
}
/* Outline variant */
.decon-btn--outline {
background-color: transparent;
color: var(--decon-black);
border: 2px solid var(--decon-black);
clip-path: polygon(6% 0, 100% 0, 94% 100%, 0 100%);
}
.decon-btn--outline:hover {
background-color: var(--decon-black);
color: var(--decon-white);
}
A navigation bar where links are scattered at slight angles, resisting the horizontal alignment convention, with a fractured baseline and exposed structural markers.
.decon-nav {
display: flex;
align-items: center;
justify-content: space-between;
padding: 1rem 2rem;
border-bottom: 3px solid var(--decon-black);
position: relative;
overflow: visible;
}
.decon-nav::after {
content: '';
position: absolute;
bottom: -3px;
left: 0;
width: 100%;
height: 3px;
background: repeating-linear-gradient(
90deg,
var(--decon-accent) 0,
var(--decon-accent) 30px,
transparent 30px,
transparent 60px
);
}
.decon-nav .logo {
font-family: 'Bebas Neue', sans-serif;
font-size: 1.8rem;
letter-spacing: 0.08em;
color: var(--decon-black);
text-decoration: none;
transform: rotate(-2deg);
}
.decon-nav ul {
list-style: none;
display: flex;
gap: 0;
padding: 0;
margin: 0;
}
.decon-nav li {
transform: rotate(calc(var(--tilt, 0) * 1deg));
}
.decon-nav li:nth-child(odd) { --tilt: -1.5; }
.decon-nav li:nth-child(even) { --tilt: 1; }
.decon-nav a {
display: block;
padding: 0.5rem 1.2rem;
font-family: 'Space Grotesk', sans-serif;
font-size: 0.85rem;
font-weight: 700;
text-transform: uppercase;
letter-spacing: 0.1em;
color: var(--decon-black);
text-decoration: none;
border: none;
position: relative;
}
.decon-nav a::after {
content: '/';
position: absolute;
right: -2px;
top: 50%;
transform: translateY(-50%);
color: var(--decon-accent);
font-weight: 400;
}
.decon-nav li:last-child a::after { content: none; }
.decon-nav a:hover {
background-color: var(--decon-black);
color: var(--decon-white);
transform: skewX(-5deg);
}
A hero section where the title appears fractured across the viewport, with fragments at different angles and z-indices, and a diagonal slash dividing the section.
.decon-hero {
position: relative;
min-height: 100vh;
display: flex;
flex-direction: column;
justify-content: center;
padding: 4rem;
background-color: var(--decon-black);
color: var(--decon-white);
overflow: hidden;
}
/* Diagonal slash divider */
.decon-hero::before {
content: '';
position: absolute;
top: -10%;
right: 30%;
width: 3px;
height: 120%;
background-color: var(--decon-accent);
transform: rotate(15deg);
z-index: 1;
}
/* Grid construction line overlay */
.decon-hero::after {
content: '';
position: absolute;
inset: 0;
background:
repeating-linear-gradient(
0deg,
transparent,
transparent 99px,
rgba(255, 255, 255, 0.03) 99px,
rgba(255, 255, 255, 0.03) 100px
),
repeating-linear-gradient(
90deg,
transparent,
transparent 99px,
rgba(255, 255, 255, 0.03) 99px,
rgba(255, 255, 255, 0.03) 100px
);
pointer-events: none;
z-index: 0;
}
.decon-hero > * {
position: relative;
z-index: 2;
}
.decon-hero h1 {
font-size: clamp(4rem, 12vw, 12rem);
line-height: 0.85;
transform: rotate(-2deg);
margin-left: -0.05em;
}
.decon-hero h1 span {
display: block;
}
.decon-hero h1 .fragment-shift {
transform: translateX(8vw) rotate(1deg);
color: var(--decon-accent);
}
.decon-hero .subtitle {
font-family: 'Space Mono', monospace;
font-size: clamp(0.85rem, 1.5vw, 1.1rem);
max-width: 45ch;
margin-top: 2rem;
line-height: 1.7;
transform: rotate(-0.5deg);
color: var(--decon-light-concrete);
}
.decon-hero .hero-meta {
font-family: 'Space Mono', monospace;
font-size: 0.7rem;
text-transform: uppercase;
letter-spacing: 0.15em;
color: var(--decon-aggregate);
margin-top: 3rem;
}
A CSS Grid layout where items are deliberately misaligned, overlapping, and rotated to create a fractured spatial composition.
.decon-shattered-grid {
display: grid;
grid-template-columns: repeat(12, 1fr);
grid-template-rows: auto;
gap: 0;
padding: 4rem 2rem;
position: relative;
}
.decon-shattered-grid .item-a {
grid-column: 1 / 7;
grid-row: 1 / 2;
transform: rotate(-1.5deg);
z-index: 2;
background-color: var(--decon-white);
border: 2px solid var(--decon-border);
padding: 2rem;
margin-right: -3rem; /* Overlap into adjacent space */
}
.decon-shattered-grid .item-b {
grid-column: 5 / 13;
grid-row: 1 / 2;
transform: rotate(1deg) translateY(3rem);
z-index: 1;
background-color: var(--decon-dark);
color: var(--decon-white);
padding: 2rem;
margin-left: -2rem; /* Collision with item-a */
}
.decon-shattered-grid .item-c {
grid-column: 2 / 8;
grid-row: 2 / 3;
transform: rotate(0.5deg) translateY(-2rem);
z-index: 3;
background-color: var(--decon-accent);
color: var(--decon-white);
padding: 2rem;
clip-path: polygon(0 4%, 100% 0, 97% 100%, 3% 96%);
}
.decon-shattered-grid .item-d {
grid-column: 7 / 13;
grid-row: 2 / 3;
transform: rotate(-2deg) translateY(1rem);
z-index: 2;
background-color: var(--decon-surface);
border: 2px solid var(--decon-border);
padding: 2rem;
}
/* Structural annotation lines */
.decon-shattered-grid::before {
content: '';
position: absolute;
top: 2rem;
left: 50%;
width: 2px;
height: calc(100% - 4rem);
background: var(--decon-light-concrete);
transform: rotate(5deg);
opacity: 0.4;
z-index: 0;
}
A section transition that uses aggressive angular clip-paths to create a fractured boundary between content zones.
.decon-divider-section {
position: relative;
padding: 6rem 2rem;
background-color: var(--decon-dark);
color: var(--decon-white);
clip-path: polygon(
0 6%,
100% 0,
100% 94%,
0 100%
);
margin: -3rem 0;
z-index: 2;
}
/* Double-slash accent marks */
.decon-divider-section::before {
content: '//';
position: absolute;
top: 2rem;
right: 3rem;
font-family: 'Bebas Neue', sans-serif;
font-size: 6rem;
color: var(--decon-accent);
opacity: 0.3;
line-height: 1;
}
.decon-divider-section h2 {
transform: rotate(-1deg);
display: inline-block;
}
A content panel that sits at an angle with a deliberately displaced border frame, creating the illusion of structural misalignment.
.decon-tilted-panel {
position: relative;
padding: 3rem;
margin: 4rem 2rem;
background-color: var(--decon-white);
transform: rotate(-1deg);
}
/* Displaced border frame */
.decon-tilted-panel::before {
content: '';
position: absolute;
top: 8px;
left: -8px;
right: 8px;
bottom: -8px;
border: 2px solid var(--decon-black);
transform: rotate(0.5deg);
z-index: -1;
}
/* Accent corner mark */
.decon-tilted-panel::after {
content: '';
position: absolute;
top: -6px;
right: -6px;
width: 24px;
height: 24px;
background-color: var(--decon-accent);
clip-path: polygon(0 0, 100% 0, 100% 100%);
}
.decon-tilted-panel h3 {
font-family: 'Syne', sans-serif;
font-weight: 800;
font-size: 1.8rem;
margin-bottom: 1rem;
}
.decon-tilted-panel p {
font-size: 0.95rem;
line-height: 1.7;
max-width: 60ch;
}
An image wrapper that fragments the photo using clip-paths and overlapping pseudo-elements, as though the frame has been shattered.
.decon-image-frame {
position: relative;
display: inline-block;
transform: rotate(-2deg);
}
.decon-image-frame img {
display: block;
width: 100%;
clip-path: polygon(2% 0, 100% 3%, 97% 100%, 0 96%);
filter: grayscale(40%) contrast(1.1);
}
/* Offset color shard */
.decon-image-frame::before {
content: '';
position: absolute;
top: -10px;
left: -10px;
width: 40%;
height: 40%;
background-color: var(--decon-accent);
clip-path: polygon(0 0, 100% 15%, 80% 100%, 10% 85%);
z-index: -1;
opacity: 0.7;
}
/* Structural line overlay */
.decon-image-frame::after {
content: '';
position: absolute;
top: 50%;
left: -5%;
width: 110%;
height: 2px;
background-color: var(--decon-accent);
transform: rotate(8deg);
z-index: 2;
}
rotate(), skewX(), translateX/Y(), and scale() are your primary layout tools for breaking conventional alignmentclip-path: polygon()aria- attributes and logical heading hierarchy| Aesthetic | Relationship |
|---|---|
| Brutalist Web Design | Shares the anti-polish, structural-honesty ethos, but Brutalism strips to raw defaults while Deconstructivism actively fragments and reconstructs form |
| Constructivism | The direct historical ancestor – Deconstructivism takes Constructivist geometry and dynamism and subjects it to rupture and disassembly |
| Dadaism | Both reject rational order, but Dada works through absurdist collage and anti-art provocation while Deconstructivism operates through architectural rigor turned against itself |
| New Wave | New Wave (Weingart, Emigre era) is the typographic bridge between Swiss modernism and deconstruction; shares the layering and grid-breaking but retains more playfulness |
| Cyberpunk | Both use angular fragmentation and industrial materials, but Cyberpunk is narrative and world-building while Deconstructivism is philosophical and structural |
| Futurism | Futurism’s dynamic diagonals and kinetic typography anticipate Deconstructivism’s angularity, but Futurism celebrates speed and progress while Deconstructivism interrogates stability |
| Raw Industrial | Kindred material vocabulary – exposed steel, concrete, visible structure – but Raw Industrial is honest about material while Deconstructivism is deliberately destabilizing |
| Neubrutalism | A more approachable, UI-friendly cousin; Neubrutalism’s thick borders and hard shadows are a domesticated echo of Deconstructivism’s aggressive fragmentation |
| Maximalism | Both reject minimalist restraint and embrace visual density, but Maximalism accumulates and celebrates while Deconstructivism fractures and interrogates |
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Deconstructivism -- Design 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=Syne:wght@400;700;800&family=Space+Mono:wght@400;700&family=Space+Grotesk:wght@300;400;700&display=swap" rel="stylesheet">
<style>
/* ============================================
DECONSTRUCTIVISM -- CSS CUSTOM PROPERTIES
============================================ */
:root {
--decon-black: #1a1a1a;
--decon-dark: #2c2c2c;
--decon-concrete: #4a4a4a;
--decon-aggregate: #7b7b7b;
--decon-light-concrete: #a8a8a8;
--decon-surface: #e0e0e0;
--decon-ground: #f5f5f0;
--decon-white: #ffffff;
--decon-steel: #d4d4d4;
--decon-red: #ff2d2d;
--decon-orange: #ff6b00;
--decon-yellow: #ffd600;
--decon-blue: #0066ff;
--decon-green: #00e5a0;
--decon-titanium: #c8b8db;
}
/* ============================================
RESET & BASE
============================================ */
*, *::before, *::after {
box-sizing: border-box;
margin: 0;
padding: 0;
}
body {
font-family: 'Space Grotesk', 'Segoe UI', system-ui, sans-serif;
font-size: 16px;
line-height: 1.6;
color: var(--decon-black);
background-color: var(--decon-ground);
overflow-x: hidden;
}
/* ============================================
TYPOGRAPHY
============================================ */
h1, h2, h4 {
font-family: 'Bebas Neue', 'Impact', 'Arial Narrow', sans-serif;
text-transform: uppercase;
letter-spacing: 0.04em;
line-height: 0.92;
}
h3 {
font-family: 'Syne', 'Arial Black', sans-serif;
font-weight: 800;
line-height: 1.1;
}
a {
color: var(--decon-blue);
text-decoration: none;
border-bottom: 2px solid transparent;
transition: border-color 0.15s ease, color 0.15s ease;
}
a:hover {
color: var(--decon-red);
border-bottom-color: var(--decon-red);
}
.mono {
font-family: 'Space Mono', 'Courier New', monospace;
font-size: 0.75rem;
letter-spacing: 0.1em;
text-transform: uppercase;
color: var(--decon-aggregate);
}
/* ============================================
NAVIGATION
============================================ */
.nav {
display: flex;
align-items: center;
justify-content: space-between;
padding: 1rem 2.5rem;
border-bottom: 3px solid var(--decon-black);
position: relative;
z-index: 100;
background-color: var(--decon-ground);
}
.nav::after {
content: '';
position: absolute;
bottom: -3px;
left: 0;
width: 100%;
height: 3px;
background: repeating-linear-gradient(
90deg,
var(--decon-red) 0,
var(--decon-red) 25px,
transparent 25px,
transparent 50px
);
}
.nav .logo {
font-family: 'Bebas Neue', sans-serif;
font-size: 1.6rem;
letter-spacing: 0.1em;
color: var(--decon-black);
text-decoration: none;
border: none;
transform: rotate(-2deg);
display: inline-block;
}
.nav .logo:hover {
color: var(--decon-red);
border: none;
}
.nav ul {
list-style: none;
display: flex;
gap: 0;
}
.nav li:nth-child(odd) { transform: rotate(-1.5deg); }
.nav li:nth-child(even) { transform: rotate(1deg); }
.nav a {
display: block;
padding: 0.4rem 1rem;
font-family: 'Space Grotesk', sans-serif;
font-size: 0.8rem;
font-weight: 700;
text-transform: uppercase;
letter-spacing: 0.1em;
color: var(--decon-black);
border: none;
}
.nav a:hover {
background-color: var(--decon-black);
color: var(--decon-white);
transform: skewX(-5deg);
}
/* ============================================
HERO
============================================ */
.hero {
position: relative;
min-height: 100vh;
display: flex;
flex-direction: column;
justify-content: center;
padding: 4rem;
background-color: var(--decon-black);
color: var(--decon-white);
overflow: hidden;
}
/* Diagonal accent slash */
.hero::before {
content: '';
position: absolute;
top: -10%;
right: 32%;
width: 3px;
height: 120%;
background-color: var(--decon-red);
transform: rotate(15deg);
z-index: 1;
}
/* Grid construction lines overlay */
.hero::after {
content: '';
position: absolute;
inset: 0;
background:
repeating-linear-gradient(
0deg,
transparent,
transparent 79px,
rgba(255, 255, 255, 0.025) 79px,
rgba(255, 255, 255, 0.025) 80px
),
repeating-linear-gradient(
90deg,
transparent,
transparent 79px,
rgba(255, 255, 255, 0.025) 79px,
rgba(255, 255, 255, 0.025) 80px
);
pointer-events: none;
z-index: 0;
}
.hero > * {
position: relative;
z-index: 2;
}
.hero h1 {
font-size: clamp(4rem, 11vw, 11rem);
line-height: 0.85;
transform: rotate(-2deg);
margin-left: -0.05em;
}
.hero h1 .fragment {
display: block;
}
.hero h1 .fragment-shift {
display: block;
transform: translateX(8vw) rotate(1deg);
color: var(--decon-red);
}
.hero .subtitle {
font-family: 'Space Mono', monospace;
font-size: clamp(0.8rem, 1.3vw, 1rem);
max-width: 48ch;
margin-top: 2.5rem;
line-height: 1.8;
transform: rotate(-0.5deg);
color: var(--decon-light-concrete);
}
.hero .hero-meta {
font-family: 'Space Mono', monospace;
font-size: 0.7rem;
text-transform: uppercase;
letter-spacing: 0.15em;
color: var(--decon-aggregate);
margin-top: 3rem;
}
.hero .btn-row {
margin-top: 2.5rem;
display: flex;
flex-wrap: wrap;
gap: 1rem;
}
/* ============================================
BUTTONS
============================================ */
.btn {
display: inline-block;
font-family: 'Bebas Neue', 'Impact', sans-serif;
font-size: 1.1rem;
letter-spacing: 0.12em;
text-transform: uppercase;
padding: 0.85rem 2rem;
background-color: var(--decon-white);
color: var(--decon-black);
border: none;
clip-path: polygon(6% 0, 100% 0, 94% 100%, 0 100%);
cursor: pointer;
text-decoration: none;
transition: background-color 0.2s ease, transform 0.2s ease;
}
.btn:hover {
background-color: var(--decon-red);
color: var(--decon-white);
transform: skewX(-3deg);
border: none;
}
.btn--outline {
background-color: transparent;
color: var(--decon-white);
border: 2px solid var(--decon-white);
clip-path: none;
}
.btn--outline:hover {
background-color: var(--decon-white);
color: var(--decon-black);
}
/* ============================================
SECTION BASE
============================================ */
.section {
padding: 5rem 2.5rem;
position: relative;
}
.section h2 {
font-size: clamp(2.5rem, 6vw, 5rem);
margin-bottom: 1rem;
transform: rotate(-1deg);
display: inline-block;
}
.section .section-subtitle {
font-family: 'Space Mono', monospace;
font-size: 0.8rem;
text-transform: uppercase;
letter-spacing: 0.15em;
color: var(--decon-aggregate);
margin-bottom: 2rem;
display: block;
}
.section p {
max-width: 65ch;
margin-bottom: 1rem;
line-height: 1.7;
}
/* ============================================
ANGULAR DIVIDER SECTION
============================================ */
.divider-section {
padding: 7rem 2.5rem;
background-color: var(--decon-dark);
color: var(--decon-white);
clip-path: polygon(0 6%, 100% 0, 100% 94%, 0 100%);
margin: -3rem 0;
z-index: 2;
position: relative;
}
.divider-section::before {
content: '//';
position: absolute;
top: 3rem;
right: 3rem;
font-family: 'Bebas Neue', sans-serif;
font-size: 5rem;
color: var(--decon-red);
opacity: 0.25;
line-height: 1;
}
.divider-section h2 {
color: var(--decon-white);
}
.divider-section p {
color: var(--decon-light-concrete);
}
/* ============================================
SHATTERED GRID
============================================ */
.shattered-grid {
display: grid;
grid-template-columns: repeat(12, 1fr);
gap: 0;
padding: 4rem 2.5rem;
position: relative;
}
.shattered-grid .grid-item {
padding: 2rem;
position: relative;
}
.shattered-grid .item-a {
grid-column: 1 / 7;
transform: rotate(-1.5deg);
z-index: 3;
background-color: var(--decon-white);
border: 2px solid var(--decon-concrete);
margin-right: -2rem;
}
.shattered-grid .item-b {
grid-column: 5 / 13;
transform: rotate(1deg) translateY(2rem);
z-index: 2;
background-color: var(--decon-dark);
color: var(--decon-white);
margin-left: -1rem;
}
.shattered-grid .item-c {
grid-column: 2 / 8;
transform: rotate(0.5deg) translateY(-1.5rem);
z-index: 4;
background-color: var(--decon-red);
color: var(--decon-white);
clip-path: polygon(0 3%, 100% 0, 97% 100%, 3% 97%);
}
.shattered-grid .item-d {
grid-column: 7 / 13;
transform: rotate(-1deg) translateY(1rem);
z-index: 2;
background-color: var(--decon-surface);
border: 2px solid var(--decon-concrete);
}
.shattered-grid .grid-item h3 {
font-size: 1.4rem;
margin-bottom: 0.75rem;
}
.shattered-grid .grid-item p {
font-size: 0.9rem;
line-height: 1.6;
}
.shattered-grid .grid-item .tag {
display: inline-block;
font-family: 'Space Mono', monospace;
font-size: 0.6rem;
text-transform: uppercase;
letter-spacing: 0.12em;
border: 1px solid currentColor;
padding: 0.15rem 0.5rem;
margin-top: 0.75rem;
margin-right: 0.25rem;
opacity: 0.7;
}
/* Construction line */
.shattered-grid::before {
content: '';
position: absolute;
top: 1rem;
left: 50%;
width: 2px;
height: calc(100% - 2rem);
background: var(--decon-steel);
transform: rotate(4deg);
opacity: 0.3;
z-index: 0;
}
/* ============================================
TILTED PANEL
============================================ */
.tilted-panel {
position: relative;
padding: 3rem;
margin: 3rem auto;
max-width: 700px;
background-color: var(--decon-white);
transform: rotate(-1deg);
}
.tilted-panel::before {
content: '';
position: absolute;
top: 8px;
left: -8px;
right: 8px;
bottom: -8px;
border: 2px solid var(--decon-black);
transform: rotate(0.5deg);
z-index: -1;
}
.tilted-panel::after {
content: '';
position: absolute;
top: -6px;
right: -6px;
width: 24px;
height: 24px;
background-color: var(--decon-red);
clip-path: polygon(0 0, 100% 0, 100% 100%);
}
.tilted-panel h3 {
font-size: 1.6rem;
margin-bottom: 1rem;
}
/* ============================================
FRACTURED CARDS
============================================ */
.card-row {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
gap: 2.5rem;
padding: 2rem 0;
}
.frac-card {
position: relative;
background-color: var(--decon-white);
border: 2px solid var(--decon-concrete);
padding: 2rem;
transform: rotate(calc(var(--rot, 0) * 1deg));
clip-path: polygon(0 0, 100% 2%, 98% 100%, 2% 97%);
transition: transform 0.25s ease, box-shadow 0.25s ease;
}
.frac-card:nth-child(1) { --rot: -1.5; }
.frac-card:nth-child(2) { --rot: 0.8; }
.frac-card:nth-child(3) { --rot: -0.5; }
.frac-card::before {
content: '';
position: absolute;
top: -4px;
left: -4px;
right: -4px;
bottom: -4px;
background-color: var(--decon-red);
z-index: -1;
clip-path: polygon(1% 1%, 100% 0, 98% 100%, 0 99%);
}
.frac-card:hover {
transform: rotate(0deg) scale(1.02);
box-shadow: -6px 6px 0 var(--decon-black);
}
.frac-card h3 {
font-size: 1.3rem;
margin-bottom: 0.75rem;
border-bottom: 2px solid var(--decon-red);
padding-bottom: 0.5rem;
}
.frac-card p {
font-size: 0.9rem;
line-height: 1.6;
color: var(--decon-concrete);
margin-bottom: 0;
}
.frac-card .card-number {
font-family: 'Bebas Neue', sans-serif;
font-size: 4rem;
color: var(--decon-surface);
position: absolute;
top: -0.1em;
right: 0.3em;
line-height: 1;
z-index: -1;
}
/* ============================================
DATA TABLE
============================================ */
.data-table {
width: 100%;
border-collapse: collapse;
font-size: 0.85rem;
margin-top: 2rem;
transform: rotate(-0.3deg);
}
.data-table th,
.data-table td {
border: 2px solid var(--decon-black);
padding: 0.7rem 1rem;
text-align: left;
}
.data-table th {
background-color: var(--decon-black);
color: var(--decon-white);
font-family: 'Space Mono', monospace;
font-size: 0.7rem;
text-transform: uppercase;
letter-spacing: 0.12em;
}
.data-table tr:nth-child(even) td {
background-color: var(--decon-surface);
}
.data-table tr:hover td {
background-color: var(--decon-yellow);
color: var(--decon-black);
}
/* ============================================
FOOTER
============================================ */
.footer {
padding: 3rem 2.5rem;
background-color: var(--decon-black);
color: var(--decon-aggregate);
position: relative;
}
.footer::before {
content: '';
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 4px;
background: linear-gradient(90deg, var(--decon-red) 0%, var(--decon-red) 33%, var(--decon-yellow) 33%, var(--decon-yellow) 66%, var(--decon-blue) 66%);
}
.footer .footer-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
gap: 2rem;
}
.footer h4 {
font-size: 1rem;
letter-spacing: 0.1em;
color: var(--decon-white);
margin-bottom: 0.75rem;
}
.footer p, .footer a {
font-size: 0.8rem;
line-height: 1.7;
color: var(--decon-aggregate);
}
.footer a {
border-bottom: 1px solid var(--decon-concrete);
}
.footer a:hover {
color: var(--decon-red);
border-bottom-color: var(--decon-red);
}
.footer ul {
list-style: none;
}
.footer li {
padding: 0.2rem 0;
}
.footer .footer-bottom {
margin-top: 2rem;
padding-top: 1.5rem;
border-top: 1px solid var(--decon-concrete);
font-family: 'Space Mono', monospace;
font-size: 0.7rem;
letter-spacing: 0.08em;
text-transform: uppercase;
color: var(--decon-concrete);
}
/* ============================================
RESPONSIVE
============================================ */
@media (max-width: 768px) {
.hero {
min-height: 80vh;
padding: 2.5rem;
}
.hero h1 {
font-size: clamp(3rem, 14vw, 6rem);
}
.hero h1 .fragment-shift {
transform: translateX(4vw) rotate(1deg);
}
.nav {
flex-direction: column;
gap: 0.75rem;
padding: 1rem 1.5rem;
}
.nav ul {
flex-wrap: wrap;
justify-content: center;
}
.section {
padding: 3rem 1.5rem;
}
.shattered-grid {
display: flex;
flex-direction: column;
gap: 1rem;
padding: 2rem 1.5rem;
}
.shattered-grid .grid-item {
transform: rotate(calc(var(--rot, 0) * 0.5deg)) !important;
margin: 0 !important;
z-index: auto !important;
}
.shattered-grid .item-a { --rot: -1; }
.shattered-grid .item-b { --rot: 0.8; }
.shattered-grid .item-c { --rot: -0.5; }
.shattered-grid .item-d { --rot: 0.6; }
.divider-section {
clip-path: polygon(0 3%, 100% 0, 100% 97%, 0 100%);
padding: 5rem 1.5rem;
}
.tilted-panel {
margin: 2rem 1rem;
padding: 2rem;
}
}
@media (max-width: 480px) {
.hero h1 {
font-size: clamp(2.5rem, 16vw, 4rem);
}
.nav a {
font-size: 0.7rem;
padding: 0.3rem 0.6rem;
}
.frac-card {
transform: rotate(0deg);
clip-path: none;
}
.frac-card::before {
clip-path: none;
}
}
</style>
</head>
<body>
<!-- ======== NAVIGATION ======== -->
<nav class="nav" role="navigation" aria-label="Main navigation">
<a href="#" class="logo">DECON/STRUCT</a>
<ul>
<li><a href="#manifesto">Manifesto</a></li>
<li><a href="#projects">Projects</a></li>
<li><a href="#method">Method</a></li>
<li><a href="#data">Data</a></li>
<li><a href="#contact">Contact</a></li>
</ul>
</nav>
<!-- ======== HERO ======== -->
<section class="hero" id="manifesto">
<span class="mono" style="margin-bottom: 0.5rem;">Est. 1988 / MoMA New York</span>
<h1>
<span class="fragment">Decon</span>
<span class="fragment-shift">Structivism</span>
</h1>
<p class="subtitle">
Structure exists to be questioned. Every grid is an ideology.
Every alignment is a political act. We do not build to stand --
we build to expose the instability that was always already there.
</p>
<span class="hero-meta">Gehry / Hadid / Libeskind / Eisenman / Koolhaas / Tschumi / Coop Himmelb(l)au</span>
<div class="btn-row">
<a href="#projects" class="btn">Explore Fragments</a>
<a href="#method" class="btn btn--outline">Read Method</a>
</div>
</section>
<!-- ======== SHATTERED GRID SECTION ======== -->
<section class="section" id="projects">
<h2>Projects</h2>
<span class="section-subtitle">// Selected works in fragmented space</span>
<p>
Each project is a collision of intention and disruption. The grid is present
but violated. Elements overlap, rotate, and refuse the comfort of alignment.
</p>
<div class="shattered-grid" style="margin-top: 2rem;">
<div class="grid-item item-a">
<h3>Bilbao Protocol</h3>
<p>A titanium-clad interface system where every surface curves away from expectation. Navigation paths fold and refold, demanding the user construct their own spatial logic.</p>
<span class="tag">Interface</span>
<span class="tag">Non-linear</span>
</div>
<div class="grid-item item-b">
<h3>Void Index</h3>
<p>A data visualization that maps absence rather than presence. Empty cells, missing records, and null values become the primary visual elements, exposing the gaps that structured data conceals.</p>
<span class="tag">Data</span>
<span class="tag">Negative Space</span>
</div>
<div class="grid-item item-c">
<h3>Fracture Line</h3>
<p>A typographic experiment where letterforms are split along structural fault lines, each half displaced and rotated independently. Legibility survives through pattern recognition.</p>
<span class="tag">Typography</span>
<span class="tag">Fragmentation</span>
</div>
<div class="grid-item item-d">
<h3>Angular Void</h3>
<p>An architectural rendering engine that generates structures by subtracting volumes from solid blocks. Every form is defined by what has been removed, not what remains.</p>
<span class="tag">Generative</span>
<span class="tag">Subtraction</span>
</div>
</div>
</section>
<!-- ======== ANGULAR DIVIDER ======== -->
<section class="divider-section" id="method">
<h2>Method</h2>
<span class="section-subtitle" style="color: var(--decon-aggregate);">// On the practice of structural interrogation</span>
<p>
Deconstruction is not destruction. It is the careful disassembly of assumptions --
revealing how structures maintain the appearance of stability while concealing
the contradictions that constitute them. In design, this means making the grid
visible, breaking it deliberately, and letting the viewer see both the rule
and its violation simultaneously.
</p>
</section>
<!-- ======== FRACTURED CARDS ======== -->
<section class="section">
<h2>Principles</h2>
<span class="section-subtitle">// Core axioms of deconstructivist practice</span>
<div class="card-row">
<div class="frac-card">
<span class="card-number">01</span>
<h3>Tension Over Resolution</h3>
<p>Compositions sustain visual conflict rather than resolving into comfortable equilibrium. Opposing forces remain in permanent dialectic -- no element settles.</p>
</div>
<div class="frac-card">
<span class="card-number">02</span>
<h3>Form Follows Fracture</h3>
<p>Rather than expressing unified purpose, the design reveals the contradictions and multiplicity of meaning within every structure it inhabits.</p>
</div>
<div class="frac-card">
<span class="card-number">03</span>
<h3>Collision Is Composition</h3>
<p>Overlapping, intersecting, and conflicting elements are the primary compositional strategy. Meaning emerges from the friction between parts, not their harmony.</p>
</div>
</div>
</section>
<!-- ======== TILTED PANEL ======== -->
<section class="section">
<div class="tilted-panel">
<h3>The Viewer Must Work</h3>
<p>
Deconstructivist design demands active interpretation. Legibility and
navigability are deliberately complicated to transform passive consumption
into engaged reading. Nothing is given freely -- every element of understanding
must be constructed by the viewer from the fragments provided.
</p>
</div>
</section>
<!-- ======== DATA TABLE ======== -->
<section class="section" id="data">
<h2>Reference</h2>
<span class="section-subtitle">// Key works and their architects</span>
<p>The canon of deconstructivist architecture and the structures that defined the movement.</p>
<table class="data-table">
<thead>
<tr>
<th>Structure</th>
<th>Architect</th>
<th>Year</th>
<th>Location</th>
</tr>
</thead>
<tbody>
<tr>
<td>Guggenheim Museum Bilbao</td>
<td>Frank Gehry</td>
<td>1997</td>
<td>Bilbao, Spain</td>
</tr>
<tr>
<td>Jewish Museum Berlin</td>
<td>Daniel Libeskind</td>
<td>2001</td>
<td>Berlin, Germany</td>
</tr>
<tr>
<td>Vitra Fire Station</td>
<td>Zaha Hadid</td>
<td>1993</td>
<td>Weil am Rhein, Germany</td>
</tr>
<tr>
<td>Seattle Central Library</td>
<td>Rem Koolhaas / OMA</td>
<td>2004</td>
<td>Seattle, USA</td>
</tr>
<tr>
<td>Parc de la Villette</td>
<td>Bernard Tschumi</td>
<td>1998</td>
<td>Paris, France</td>
</tr>
<tr>
<td>House VI</td>
<td>Peter Eisenman</td>
<td>1975</td>
<td>Cornwall, USA</td>
</tr>
<tr>
<td>UFA Cinema Center</td>
<td>Coop Himmelb(l)au</td>
<td>1998</td>
<td>Dresden, Germany</td>
</tr>
</tbody>
</table>
</section>
<!-- ======== CONTACT / CTA ======== -->
<section class="section" id="contact" style="background-color: var(--decon-surface);">
<h2>Contact</h2>
<span class="section-subtitle">// Initiate structural dialogue</span>
<p>
Inquiries regarding collaboration, commissions, and structural interrogations.
</p>
<div style="margin-top: 1.5rem; display: flex; flex-wrap: wrap; gap: 1rem;">
<a href="mailto:studio@example.com" class="btn" style="background-color: var(--decon-black); color: var(--decon-white); clip-path: polygon(6% 0, 100% 0, 94% 100%, 0 100%);">Send Inquiry</a>
</div>
</section>
<!-- ======== FOOTER ======== -->
<footer class="footer">
<div class="footer-grid">
<div>
<h4>DECON/STRUCT</h4>
<p>A design system built on the principle that every structure contains the seeds of its own undoing. Nothing is stable. Everything is material.</p>
</div>
<div>
<h4>Navigation</h4>
<ul>
<li><a href="#manifesto">Manifesto</a></li>
<li><a href="#projects">Projects</a></li>
<li><a href="#method">Method</a></li>
<li><a href="#data">Reference</a></li>
<li><a href="#contact">Contact</a></li>
</ul>
</div>
<div>
<h4>Lineage</h4>
<ul>
<li><a href="#">Constructivism</a></li>
<li><a href="#">Derrida / Deconstruction</a></li>
<li><a href="#">MoMA 1988 Exhibition</a></li>
<li><a href="#">David Carson / Ray Gun</a></li>
<li><a href="#">Cranbrook Academy</a></li>
</ul>
</div>
</div>
<div class="footer-bottom">
Structure is a hypothesis, not a conclusion. // Built with HTML + CSS. No frameworks. No stability.
</div>
</footer>
</body>
</html>