DIY Punk is the raw, anti-establishment visual language that emerged from the late-1970s British punk scene and its global offshoots. It is defined by Xerox-degraded imagery, ransom-note lettering, slapdash collage composition, and an aggressive rejection of professional polish. Every design choice signals that the creator made it themselves – with scissors, glue sticks, a photocopier, and sheer defiance. The aesthetic values authenticity over craft, urgency over refinement, and confrontation over comfort. Where corporate design smooths every edge, DIY Punk tears them apart on purpose. Think zine covers, wheat-pasted flyers, hand-stapled pamphlets, and album sleeves that look like they were assembled in a squat at 3 a.m. – because they were.
| Role | Colors |
|---|---|
| Base / Background | Stark white (copy paper), solid black, raw newsprint gray |
| Primary text | Pure black on white, or reversed white on black |
| Accent (hot) | Violent magenta-pink, safety-pin red, electric pink |
| Accent (warning) | Anarchist red, emergency yellow, hazard orange |
| Accent (cold) | Bruise purple, marker blue, teal-green |
| Neutral tones | Newsprint off-white, photocopy gray, cardboard tan |
| Color | Hex | Usage |
|---|---|---|
| Xerox Black | #0A0A0A |
Primary text, dominant fill, maximum contrast |
| Copy Paper White | #F5F0E8 |
Page background, simulating cheap copy paper |
| Pure White | #FFFFFF |
Reversed text on black, stark highlights |
| Newsprint Gray | #C8C3B8 |
Secondary backgrounds, photocopy mid-tones |
| Toner Gray | #4A4A4A |
Photocopy shadows, degraded black areas |
| Smudge Gray | #8A8680 |
Xerox artifacts, fingerprint smudges, worn areas |
| Punk Pink | #FF1493 |
Primary hot accent, flyer highlights, marker strokes |
| Safety Pin Red | #CC0000 |
Anarchist A, warning elements, aggressive highlights |
| Hazard Yellow | #FFD700 |
Caution tape references, bold callouts, stencil fills |
| Emergency Orange | #FF4500 |
Secondary warm accent, urgent callouts |
| Bruise Purple | #6B0099 |
Marker accents, stamp ink, secondary cold accent |
| Marker Blue | #0044CC |
Ballpoint pen marks, circled elements, annotation color |
| Slime Green | #39FF14 |
Neon accent for later punk variants (optional) |
| Masking Tape | #D4C9A8 |
Tape strips, adhesive artifacts, aged paper elements |
| Cardboard Brown | #A0845C |
Packaging references, zine cover material |
| Dried Glue | #E8DFC8 |
Translucent adhesive marks, layering artifacts |
:root {
/* Base tones */
--punk-black: #0a0a0a;
--punk-white: #f5f0e8;
--punk-pure-white: #ffffff;
--punk-newsprint: #c8c3b8;
--punk-toner: #4a4a4a;
--punk-smudge: #8a8680;
/* Hot accents */
--punk-pink: #ff1493;
--punk-red: #cc0000;
--punk-yellow: #ffd700;
--punk-orange: #ff4500;
/* Cold accents */
--punk-purple: #6b0099;
--punk-blue: #0044cc;
--punk-green: #39ff14;
/* Material tones */
--punk-tape: #d4c9a8;
--punk-cardboard: #a0845c;
--punk-glue: #e8dfc8;
/* Functional mappings */
--punk-bg-primary: var(--punk-white);
--punk-bg-inverse: var(--punk-black);
--punk-text-primary: var(--punk-black);
--punk-text-inverse: var(--punk-pure-white);
--punk-text-muted: var(--punk-toner);
--punk-accent: var(--punk-pink);
--punk-accent-danger: var(--punk-red);
--punk-accent-warning: var(--punk-yellow);
--punk-border: var(--punk-black);
}
DIY Punk typography is defined by its deliberate rejection of typographic consistency and professionalism:
These typefaces are historically associated with DIY Punk visual culture (commercial/specialty fonts):
| Font | Style | Usage |
|---|---|---|
| Permanent Marker | Bold hand-drawn marker | Headlines, confrontational statements, zine titles |
| Rock Salt | Rough handwritten scrawl | Handwritten annotations, personal asides, margin notes |
| Bungee | Bold, blocky display | Stencil-style headlines, protest sign lettering |
| Bungee Shade | Bold layered display | Oversized hero text, poster titles |
| Special Elite | Distressed typewriter | Body text, manifesto content, typewritten passages |
| Courier Prime | Clean typewriter monospace | Secondary body text, structured content |
| VT323 | Pixel / CRT screen | Digital-punk elements, counter-culture tech references |
| Rubik Mono One | Heavy geometric monospace | Bold statements, section headers, weight contrast |
| Faster One | Speed-styled display | Aggressive callouts, urgency-driven text |
| Creepster | Horror-punk display | Dark punk variant headings, shock elements |
| Londrina Solid | Hand-drawn bold | Friendly punk variant, zine headings, casual emphasis |
| Staatliches | Condensed block display | Stencil-like headings, poster-style text |
| Archivo Black | Heavy grotesque | Strong headlines when paired with lighter handwritten body |
/* Import punk-appropriate Google Fonts */
@import url('https://fonts.googleapis.com/css2?family=Permanent+Marker&family=Rock+Salt&family=Bungee&family=Special+Elite&family=Courier+Prime:wght@400;700&family=VT323&family=Staatliches&family=Londrina+Solid&display=swap');
/* Hero / Display -- aggressive marker scrawl */
h1 {
font-family: 'Permanent Marker', 'Rock Salt', cursive;
font-size: clamp(2.5rem, 8vw, 6rem);
letter-spacing: -0.02em;
line-height: 0.95;
color: var(--punk-black);
text-transform: uppercase;
/* Simulated uneven baseline */
word-spacing: 0.15em;
transform: rotate(-2deg);
}
/* Section headings -- stencil/block style */
h2 {
font-family: 'Bungee', 'Staatliches', Impact, sans-serif;
font-size: clamp(1.5rem, 4vw, 3rem);
letter-spacing: 0.05em;
text-transform: uppercase;
color: var(--punk-black);
border-bottom: 4px solid var(--punk-black);
display: inline-block;
padding-bottom: 0.1em;
transform: rotate(0.5deg);
}
/* Subheadings -- handwritten scrawl */
h3 {
font-family: 'Rock Salt', 'Permanent Marker', cursive;
font-size: clamp(1rem, 2.5vw, 1.6rem);
color: var(--punk-accent);
transform: rotate(-1deg);
margin-left: -0.5rem;
}
/* Body text -- typewriter */
body {
font-family: 'Special Elite', 'Courier Prime', 'Courier New', monospace;
font-weight: 400;
font-size: 1rem;
line-height: 1.75;
color: var(--punk-text-primary);
}
/* Ransom note text -- mixed fonts per letter (apply via JS or spans) */
.punk-ransom {
font-size: 1.4rem;
line-height: 1.6;
word-spacing: 0.1em;
}
.punk-ransom span {
display: inline-block;
padding: 0.05em 0.15em;
margin: 0 0.05em;
background: var(--punk-black);
color: var(--punk-pure-white);
font-family: serif;
transform: rotate(calc(var(--r, 0) * 1deg));
font-size: calc(0.8em + var(--s, 0) * 0.1em);
}
.punk-ransom span:nth-child(odd) {
background: transparent;
color: var(--punk-black);
font-family: sans-serif;
border: 2px solid var(--punk-black);
}
/* Annotations -- ballpoint pen style */
.punk-annotation {
font-family: 'Rock Salt', cursive;
font-size: 0.75rem;
color: var(--punk-blue);
transform: rotate(-3deg);
display: inline-block;
}
/* Stencil text */
.punk-stencil {
font-family: 'Staatliches', 'Bungee', sans-serif;
text-transform: uppercase;
letter-spacing: 0.15em;
color: var(--punk-black);
}
/* Simulated photocopy paper background with toner artifacts */
.punk-xerox-bg {
background-color: var(--punk-white);
background-image:
/* Toner speckle */
radial-gradient(circle at 15% 25%, rgba(10, 10, 10, 0.03) 0%, transparent 3%),
radial-gradient(circle at 45% 75%, rgba(10, 10, 10, 0.02) 0%, transparent 2%),
radial-gradient(circle at 80% 40%, rgba(10, 10, 10, 0.04) 0%, transparent 4%),
radial-gradient(circle at 60% 10%, rgba(10, 10, 10, 0.02) 0%, transparent 2%),
radial-gradient(circle at 30% 90%, rgba(10, 10, 10, 0.03) 0%, transparent 3%);
position: relative;
}
/* Heavy photocopy grain overlay */
.punk-xerox-bg::before {
content: '';
position: absolute;
inset: 0;
opacity: 0.04;
background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 512 512' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noise'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='6' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noise)'/%3E%3C/svg%3E");
background-size: 512px 512px;
pointer-events: none;
mix-blend-mode: multiply;
}
/* Individual letter styling for ransom-note text */
.punk-letter {
display: inline-block;
padding: 0.05em 0.12em;
margin: 0.05em;
line-height: 1.2;
/* Each letter gets custom properties via inline style or JS */
transform: rotate(calc(var(--rot, 0) * 1deg))
translateY(calc(var(--lift, 0) * 1px));
font-size: calc(1em * var(--scale, 1));
}
/* Alternating letter styles */
.punk-letter--dark {
background: var(--punk-black);
color: var(--punk-pure-white);
font-family: 'Times New Roman', serif;
font-weight: 700;
}
.punk-letter--light {
background: transparent;
color: var(--punk-black);
font-family: Arial, Helvetica, sans-serif;
border: 2px solid var(--punk-black);
font-weight: 400;
}
.punk-letter--accent {
background: var(--punk-pink);
color: var(--punk-pure-white);
font-family: 'Impact', sans-serif;
font-style: italic;
}
.punk-letter--serif {
background: var(--punk-newsprint);
color: var(--punk-black);
font-family: 'Georgia', serif;
font-size: calc(1.2em * var(--scale, 1));
}
/* JavaScript helper to randomize ransom-note letters:
document.querySelectorAll('.punk-letter').forEach(el => {
el.style.setProperty('--rot', (Math.random() * 10 - 5).toFixed(1));
el.style.setProperty('--lift', (Math.random() * 6 - 3).toFixed(1));
el.style.setProperty('--scale', (0.85 + Math.random() * 0.35).toFixed(2));
});
*/
/* Torn top and bottom edges on a section */
.punk-torn {
position: relative;
padding: 3rem 2rem;
background: var(--punk-white);
}
.punk-torn::before {
content: '';
position: absolute;
top: -12px;
left: 0;
right: 0;
height: 14px;
background: var(--punk-white);
clip-path: polygon(
0% 100%, 2% 40%, 4% 80%, 7% 20%, 10% 60%, 13% 10%,
16% 70%, 19% 30%, 22% 90%, 25% 15%, 28% 55%, 31% 5%,
34% 65%, 37% 25%, 40% 85%, 43% 35%, 46% 75%, 49% 10%,
52% 60%, 55% 20%, 58% 80%, 61% 40%, 64% 90%, 67% 30%,
70% 70%, 73% 15%, 76% 55%, 79% 5%, 82% 60%, 85% 25%,
88% 80%, 91% 45%, 94% 75%, 97% 20%, 100% 60%,
100% 100%
);
}
.punk-torn::after {
content: '';
position: absolute;
bottom: -12px;
left: 0;
right: 0;
height: 14px;
background: var(--punk-white);
clip-path: polygon(
0% 0%, 3% 70%, 6% 30%, 9% 80%, 12% 20%, 15% 65%,
18% 5%, 21% 50%, 24% 85%, 27% 35%, 30% 75%, 33% 10%,
36% 60%, 39% 25%, 42% 70%, 45% 40%, 48% 90%, 51% 15%,
54% 55%, 57% 5%, 60% 45%, 63% 80%, 66% 30%, 69% 65%,
72% 10%, 75% 50%, 78% 85%, 81% 35%, 84% 70%, 87% 20%,
90% 60%, 93% 40%, 96% 80%, 100% 25%,
100% 0%
);
}
/* A "pasted flyer" element that looks physically attached */
.punk-flyer {
background: var(--punk-pure-white);
border: none;
padding: 1.5rem;
position: relative;
transform: rotate(calc(var(--tilt, -2) * 1deg));
box-shadow:
2px 2px 0 rgba(0, 0, 0, 0.15),
0 0 0 1px rgba(0, 0, 0, 0.05);
/* Simulate paper wrinkle with subtle internal shadows */
background-image:
linear-gradient(135deg, transparent 40%, rgba(0,0,0,0.02) 45%, transparent 50%),
linear-gradient(225deg, transparent 40%, rgba(0,0,0,0.015) 45%, transparent 50%);
}
/* Tape strip holding the flyer */
.punk-flyer::before {
content: '';
position: absolute;
top: -8px;
left: 50%;
transform: translateX(-50%) rotate(var(--tape-tilt, 3deg));
width: 70px;
height: 22px;
background: rgba(212, 201, 168, 0.6);
border: 1px solid rgba(212, 201, 168, 0.3);
/* Tape has slightly rough edges */
clip-path: polygon(2% 0%, 98% 2%, 100% 98%, 0% 100%);
}
/* Wheat-paste drip marks */
.punk-flyer::after {
content: '';
position: absolute;
bottom: -6px;
left: 15%;
width: 30%;
height: 8px;
background: rgba(232, 223, 200, 0.4);
border-radius: 0 0 50% 50%;
filter: blur(1px);
}
/* Punk safety-pin horizontal divider */
.punk-pin-divider {
border: none;
height: 30px;
position: relative;
margin: 2rem 0;
}
/* Dashed line through the middle */
.punk-pin-divider::before {
content: '';
position: absolute;
top: 50%;
left: 0;
right: 0;
height: 2px;
background: repeating-linear-gradient(
90deg,
var(--punk-black) 0px,
var(--punk-black) 8px,
transparent 8px,
transparent 14px
);
opacity: 0.4;
}
/* Safety pin symbol in the center */
.punk-pin-divider::after {
content: '\1F9F7'; /* safety pin emoji fallback, replace with SVG for production */
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%) rotate(-30deg);
font-size: 1.5rem;
background: var(--punk-bg-primary);
padding: 0 0.5rem;
}
/* Crossed-out text with aggressive scribble */
.punk-crossed-out {
position: relative;
display: inline;
color: var(--punk-toner);
}
.punk-crossed-out::before {
content: '';
position: absolute;
top: 50%;
left: -4px;
right: -4px;
height: 3px;
background: var(--punk-red);
transform: rotate(-2deg);
}
.punk-crossed-out::after {
content: '';
position: absolute;
top: 45%;
left: -2px;
right: -2px;
height: 3px;
background: var(--punk-red);
transform: rotate(1.5deg);
opacity: 0.7;
}
/* Big X mark overlay */
.punk-x-mark {
position: relative;
}
.punk-x-mark::before,
.punk-x-mark::after {
content: '';
position: absolute;
inset: 10%;
border-top: 4px solid var(--punk-red);
transform-origin: center;
}
.punk-x-mark::before {
transform: rotate(45deg);
}
.punk-x-mark::after {
transform: rotate(-45deg);
}
/* Spray-painted stencil text with overspray halo */
.punk-spray {
font-family: 'Bungee', 'Staatliches', Impact, sans-serif;
text-transform: uppercase;
letter-spacing: 0.12em;
color: var(--punk-black);
text-shadow:
0 0 6px rgba(10, 10, 10, 0.3),
0 0 15px rgba(10, 10, 10, 0.1),
2px 2px 0 rgba(10, 10, 10, 0.05);
/* SVG displacement for rough edges */
filter: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='spray'%3E%3CfeTurbulence baseFrequency='0.05' numOctaves='3' type='fractalNoise' seed='2'/%3E%3CfeDisplacementMap in='SourceGraphic' scale='2'/%3E%3C/filter%3E%3C/svg%3E#spray");
}
/* Dripping paint effect on text */
.punk-drip {
position: relative;
}
.punk-drip::after {
content: '';
position: absolute;
bottom: -12px;
left: 20%;
width: 4px;
height: 14px;
background: var(--punk-black);
border-radius: 0 0 50% 50%;
opacity: 0.7;
box-shadow:
30px 4px 0 2px var(--punk-black),
80px -2px 0 1px var(--punk-black);
}
/* High-contrast Xerox-degraded image effect */
.punk-xerox-img {
filter: contrast(2.2) grayscale(1) brightness(1.2);
mix-blend-mode: multiply;
}
/* Coarse halftone dot overlay for images */
.punk-halftone {
position: relative;
overflow: hidden;
}
.punk-halftone img {
filter: contrast(1.8) grayscale(1);
}
.punk-halftone::after {
content: '';
position: absolute;
inset: 0;
background-image: radial-gradient(circle, #000 1.5px, transparent 1.5px);
background-size: 5px 5px;
opacity: 0.1;
mix-blend-mode: multiply;
pointer-events: none;
}
/* Photocopied-multiple-times degradation */
.punk-degraded {
filter: contrast(3) grayscale(1) brightness(1.4);
opacity: 0.85;
image-rendering: pixelated;
}
.punk-button {
display: inline-block;
padding: 0.6rem 1.8rem;
font-family: 'Permanent Marker', 'Special Elite', cursive;
font-size: 1.1rem;
text-transform: uppercase;
letter-spacing: 0.08em;
color: var(--punk-pure-white);
background: var(--punk-black);
border: 3px solid var(--punk-black);
cursor: pointer;
position: relative;
transform: rotate(-1deg);
transition: transform 0.1s ease;
text-decoration: none;
}
.punk-button:hover {
background: var(--punk-accent);
border-color: var(--punk-accent);
transform: rotate(1deg) scale(1.05);
}
.punk-button:active {
transform: rotate(-0.5deg) scale(0.98);
}
/* "Sticker" variant -- looks like a peeling sticker */
.punk-button--sticker {
background: var(--punk-yellow);
color: var(--punk-black);
border: 2px solid var(--punk-black);
border-radius: 0;
transform: rotate(2deg);
box-shadow: 2px 2px 0 rgba(0, 0, 0, 0.3);
}
.punk-button--sticker:hover {
transform: rotate(-1deg) scale(1.08);
box-shadow: 3px 3px 0 rgba(0, 0, 0, 0.4);
}
/* Simulated zine page with staple marks and fold line */
.punk-zine-page {
background: var(--punk-white);
border: 2px solid var(--punk-black);
padding: 2rem;
position: relative;
max-width: 700px;
margin: 2rem auto;
transform: rotate(calc(var(--page-tilt, 0.5) * 1deg));
}
/* Center fold line */
.punk-zine-page::before {
content: '';
position: absolute;
top: 0;
bottom: 0;
left: 50%;
width: 1px;
background: repeating-linear-gradient(
180deg,
var(--punk-newsprint) 0px,
var(--punk-newsprint) 3px,
transparent 3px,
transparent 8px
);
opacity: 0.4;
}
/* Staple marks in top-left corner */
.punk-zine-page::after {
content: '';
position: absolute;
top: 12px;
left: 12px;
width: 8px;
height: 3px;
background: var(--punk-smudge);
border-radius: 1px;
box-shadow:
1px 20px 0 0 var(--punk-smudge); /* second staple */
}
/* The classic circled-A anarchist symbol as a decorative element */
.punk-anarchy::before {
content: '\24B6'; /* circled A unicode, or use custom SVG */
font-size: 4rem;
color: var(--punk-red);
opacity: 0.15;
position: absolute;
transform: rotate(-15deg);
font-weight: 900;
pointer-events: none;
}
/* Container for overlapping, rotated collage elements */
.punk-collage {
position: relative;
min-height: 600px;
overflow: hidden;
}
.punk-collage-item {
position: absolute;
background: var(--punk-pure-white);
padding: 1rem;
border: 2px solid var(--punk-black);
box-shadow: 3px 3px 0 rgba(0, 0, 0, 0.2);
/* Each item gets unique positioning via inline styles */
transform: rotate(calc(var(--r, 0) * 1deg));
z-index: var(--z, 1);
max-width: 300px;
}
/* Overlapping items create depth through stacking */
.punk-collage-item:nth-child(even) {
background: var(--punk-newsprint);
}
.punk-collage-item:nth-child(3n) {
border-color: var(--punk-accent);
}
/* Tape strip on collage items */
.punk-collage-item::before {
content: '';
position: absolute;
top: -6px;
right: 20%;
width: 50px;
height: 18px;
background: rgba(212, 201, 168, 0.5);
transform: rotate(calc(var(--tape-r, 5) * 1deg));
}
Physical DIY Punk materials and their web equivalents:
| Physical Material | Web Equivalent |
|---|---|
| Xeroxed / photocopied paper | filter: contrast(2.2) grayscale(1) brightness(1.2) with SVG noise overlay |
| Cut newspaper clippings | Inline <span> elements with varied fonts, sizes, backgrounds, and slight rotation transforms |
| Masking tape / Scotch tape | Semi-transparent cream rectangles with clip-path for irregular edges and subtle rotate |
| Wheat paste on brick | Textured dark background with overlapping, slightly wrinkled white paper elements |
| Spray paint on wall | text-shadow blur halos with SVG feDisplacementMap for rough stencil edges |
| Safety pins | SVG icons or unicode symbols used as decorative list markers or divider elements |
| Stapled zine pages | Border + positioned small gray rectangles simulating staple marks |
| Ballpoint pen annotations | font-family: 'Rock Salt' in blue color with slight rotation, positioned as overlays |
| Marker highlighter | background: linear-gradient(transparent 50%, var(--punk-yellow) 50%) on inline text |
| Ripped / torn paper | clip-path: polygon(...) with irregular, jagged point distributions |
| Sticker residue | Semi-transparent rounded rectangles with slight blur |
| Crumpled paper | Subtle CSS noise texture with multiple soft box-shadow creases |
The following define the DIY Punk visual language and serve as design references:
| Aesthetic | Relationship to DIY Punk |
|---|---|
| Post-Punk | Evolution of punk’s visual language into more artful, experimental territory; retains the DIY ethos but adds cold-wave sophistication |
| Hardcore Punk | Intensifies DIY Punk’s aggression; bolder, heavier typography, more confrontational imagery, faster visual rhythm |
| Brutalism (web) | Modern web design descendant; shares the raw, unpolished, anti-design philosophy but is typically more minimal and digital |
| Dada | Historical ancestor; the original anti-art movement’s collage techniques, typographic chaos, and subversive attitude directly influenced punk |
| Cubism | Shared interest in fragmentation, multiple perspectives, and breaking conventional composition (a more distant, formal influence) |
| Industrial | Shares dark, aggressive textures and anti-mainstream stance; Industrial adds mechanical, metallic, and electronic elements |
| Minimal Wave | Stripped-down, lo-fi aesthetic cousin; shares the DIY production ethos but is colder, more minimal, and more introspective |
| Riot Grrrl | Feminist punk sub-movement; intensely personal zine culture with handwritten text, collage, and photocopied imagery |
| Anti-Design | Broader movement that encompasses DIY Punk; deliberate rejection of design conventions and professional polish |
| Grunge | 1990s music/fashion descendant; takes punk’s distressed textures and makes them more commercially palatable |
| Zine Culture | The production method IS the aesthetic; photocopied, hand-assembled, small-run publications are punk’s native medium |
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>DIY Punk Page</title>
<link href="https://fonts.googleapis.com/css2?family=Permanent+Marker&family=Rock+Salt&family=Bungee&family=Special+Elite&family=Courier+Prime:wght@400;700&family=Staatliches&display=swap" rel="stylesheet">
<style>
:root {
--punk-black: #0a0a0a;
--punk-white: #f5f0e8;
--punk-pure-white: #ffffff;
--punk-newsprint: #c8c3b8;
--punk-toner: #4a4a4a;
--punk-smudge: #8a8680;
--punk-pink: #ff1493;
--punk-red: #cc0000;
--punk-yellow: #ffd700;
--punk-blue: #0044cc;
--punk-tape: #d4c9a8;
}
* { margin: 0; padding: 0; box-sizing: border-box; }
body {
background: var(--punk-white);
color: var(--punk-black);
font-family: 'Special Elite', 'Courier New', monospace;
font-size: 1rem;
line-height: 1.75;
position: relative;
overflow-x: hidden;
}
/* Photocopy grain overlay */
body::before {
content: '';
position: fixed;
inset: 0;
opacity: 0.035;
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.85' numOctaves='6' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
background-size: 512px 512px;
pointer-events: none;
mix-blend-mode: multiply;
z-index: 9999;
}
.hero {
padding: 4rem 2rem;
text-align: left;
border-bottom: 4px solid var(--punk-black);
position: relative;
overflow: hidden;
}
.hero h1 {
font-family: 'Permanent Marker', cursive;
font-size: clamp(3rem, 10vw, 7rem);
line-height: 0.9;
text-transform: uppercase;
transform: rotate(-2deg);
margin-bottom: 1rem;
}
.hero .subtitle {
font-family: 'Rock Salt', cursive;
font-size: 0.9rem;
color: var(--punk-red);
transform: rotate(1deg);
display: inline-block;
}
/* Ransom-note word */
.ransom span {
display: inline-block;
padding: 0.05em 0.15em;
margin: 0.05em;
}
.ransom .dark {
background: var(--punk-black);
color: var(--punk-pure-white);
font-family: 'Times New Roman', serif;
transform: rotate(-3deg);
}
.ransom .light {
background: transparent;
border: 2px solid var(--punk-black);
font-family: Arial, sans-serif;
transform: rotate(2deg);
font-size: 1.1em;
}
.ransom .accent {
background: var(--punk-pink);
color: var(--punk-pure-white);
font-family: Impact, sans-serif;
transform: rotate(-1deg);
}
section {
padding: 3rem 2rem;
max-width: 800px;
margin: 0 auto;
}
h2 {
font-family: 'Bungee', Impact, sans-serif;
text-transform: uppercase;
letter-spacing: 0.05em;
font-size: clamp(1.5rem, 4vw, 2.5rem);
border-bottom: 3px solid var(--punk-black);
display: inline-block;
margin-bottom: 1.5rem;
transform: rotate(0.5deg);
}
h3 {
font-family: 'Rock Salt', cursive;
color: var(--punk-red);
font-size: 1.1rem;
transform: rotate(-1deg);
margin: 1.5rem 0 0.75rem -0.5rem;
}
/* Torn paper divider */
.torn-divider {
border: none;
height: 14px;
background: var(--punk-black);
clip-path: polygon(
0% 100%, 2% 30%, 5% 70%, 8% 10%, 11% 60%, 14% 25%,
17% 80%, 20% 15%, 23% 55%, 26% 5%, 29% 70%, 32% 35%,
35% 90%, 38% 20%, 41% 65%, 44% 10%, 47% 50%, 50% 85%,
53% 30%, 56% 70%, 59% 15%, 62% 55%, 65% 5%, 68% 45%,
71% 80%, 74% 25%, 77% 65%, 80% 10%, 83% 50%, 86% 75%,
89% 20%, 92% 60%, 95% 35%, 98% 80%, 100% 40%,
100% 100%
);
margin: 0;
}
/* Flyer card */
.punk-card {
background: var(--punk-pure-white);
border: 2px solid var(--punk-black);
padding: 1.5rem;
margin: 1.5rem 0;
transform: rotate(calc(var(--tilt, -1) * 1deg));
position: relative;
box-shadow: 3px 3px 0 rgba(0, 0, 0, 0.2);
}
/* Tape on card */
.punk-card::before {
content: '';
position: absolute;
top: -7px;
left: 50%;
transform: translateX(-50%) rotate(3deg);
width: 60px;
height: 20px;
background: rgba(212, 201, 168, 0.55);
border: 1px solid rgba(212, 201, 168, 0.3);
}
/* Highlight marker effect */
.highlight {
background: linear-gradient(transparent 55%, var(--punk-yellow) 55%);
padding: 0 0.15em;
}
/* Annotation */
.annotation {
font-family: 'Rock Salt', cursive;
font-size: 0.7rem;
color: var(--punk-blue);
transform: rotate(-4deg);
display: inline-block;
margin-left: 0.5rem;
}
a {
color: var(--punk-red);
text-decoration: none;
border-bottom: 2px solid var(--punk-red);
font-weight: 700;
transition: background 0.1s;
}
a:hover {
background: var(--punk-red);
color: var(--punk-pure-white);
}
.punk-button {
display: inline-block;
padding: 0.6rem 1.8rem;
font-family: 'Permanent Marker', cursive;
font-size: 1.1rem;
text-transform: uppercase;
color: var(--punk-pure-white);
background: var(--punk-black);
border: 3px solid var(--punk-black);
cursor: pointer;
transform: rotate(-1deg);
text-decoration: none;
transition: transform 0.1s;
}
.punk-button:hover {
background: var(--punk-pink);
border-color: var(--punk-pink);
color: var(--punk-pure-white);
transform: rotate(1deg) scale(1.05);
}
</style>
</head>
<body>
<div class="hero">
<h1>Title Here</h1>
<span class="subtitle">a handmade declaration</span>
</div>
<hr class="torn-divider">
<section>
<h2>Section One</h2>
<div class="punk-card" style="--tilt: -1.5">
<p>Content styled with DIY Punk aesthetic. <span class="highlight">Highlighted text</span> stands out like marker on a flyer. <span class="annotation">^ important!</span></p>
</div>
<div class="punk-card" style="--tilt: 1">
<p class="ransom">
<span class="dark">THIS</span>
<span class="light">is</span>
<span class="accent">RANSOM</span>
<span class="dark">note</span>
<span class="light">TEXT</span>
</p>
</div>
<br>
<a href="#" class="punk-button">Do Something</a>
</section>
</body>
</html>