website_designs

Indie Sleaze - Design Reference

Overview

Indie Sleaze is the visual language of the hedonistic, blog-documented party scene that thrived from roughly 2005 to 2014 in neighborhoods like Williamsburg, Brooklyn and Shoreditch, London. Defined by harsh flash photography, film grain, neon accents, and a deliberate messiness that blurred the line between high fashion and thrift-store abandon, the aesthetic drew its visual DNA from The Cobrasnake’s candid nightlife documentation, American Apparel’s provocative ad campaigns, MySpace profile customization, DIY zine culture, and the electro-clash music scene of bands like The Strokes, Yeah Yeah Yeahs, and LCD Soundsystem. On the web it translates into gritty textures, blown-out photography, chaotic collage layouts, bold hand-drawn type, neon-on-black color palettes, and an intentional rawness that rejects the polished perfection of corporate design in favor of authentic, sweaty, nocturnal energy.


Visual Characteristics

Core Design Traits

Design Principles


Color Palette

The Indie Sleaze palette is built around the contrast between dark nightclub environments and the neon, flash-lit highlights that punctuate them. Blacks and deep grays form the foundation, while hot pinks, electric yellows, and acid greens provide the charged energy of the scene.

Color Name Hex Role / Usage
Blackout #0A0A0A Primary background, deep shadows, base surface
Charcoal Venue #1C1C1C Secondary background, card surfaces, dark UI panels
Smoke Machine #2E2E2E Tertiary background, subtle elevation, borders
Flash White #F5F0EB Overexposed highlights, flash-lit text, hero display type
Hot Neon Pink #FF2D87 Primary accent, CTAs, links, highlighted text, neon glow
Electric Yellow #FFE714 Secondary accent, warning badges, sticker elements, hover states
Acid Green #39FF14 Tertiary accent, online indicators, success states, glow effects
Bruise Purple #8B2FC9 Visited links, secondary highlights, ultraviolet club lighting
Cheap Beer Gold #C9A84C Metallic accents, premium badges, sequin shimmer effects
Red Eye #CC1100 Error states, flash red-eye artifacts, danger, raw urgency
Cigarette Ash #8A8A8A Muted text, metadata, disabled states, secondary body copy
Polaroid Cream #F0E6D3 Alt light background, photo borders, nostalgic warmth
Dive Bar Blue #1A3A5C Dark accent, denim references, moody undertone panels
Silver Lame #C0C0C0 Metallic UI elements, reflective surfaces, disco shimmer

CSS Custom Properties

:root {
  /* Dark foundations */
  --sleaze-black: #0a0a0a;
  --sleaze-charcoal: #1c1c1c;
  --sleaze-smoke: #2e2e2e;

  /* Light / flash tones */
  --sleaze-flash: #f5f0eb;
  --sleaze-cream: #f0e6d3;

  /* Neon accents */
  --sleaze-pink: #ff2d87;
  --sleaze-yellow: #ffe714;
  --sleaze-green: #39ff14;
  --sleaze-purple: #8b2fc9;

  /* Supporting tones */
  --sleaze-gold: #c9a84c;
  --sleaze-red: #cc1100;
  --sleaze-ash: #8a8a8a;
  --sleaze-blue: #1a3a5c;
  --sleaze-silver: #c0c0c0;

  /* Functional tokens */
  --sleaze-bg: var(--sleaze-black);
  --sleaze-surface: var(--sleaze-charcoal);
  --sleaze-text: var(--sleaze-flash);
  --sleaze-text-muted: var(--sleaze-ash);
  --sleaze-accent: var(--sleaze-pink);
  --sleaze-accent-alt: var(--sleaze-yellow);
  --sleaze-link: var(--sleaze-pink);
  --sleaze-link-hover: var(--sleaze-yellow);
  --sleaze-border: var(--sleaze-smoke);

  /* Effects */
  --sleaze-glow-pink: 0 0 20px rgba(255, 45, 135, 0.6);
  --sleaze-glow-yellow: 0 0 20px rgba(255, 231, 20, 0.5);
  --sleaze-glow-green: 0 0 20px rgba(57, 255, 20, 0.5);
  --sleaze-grain: 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.9' 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");
}

Typography

Typeface Characteristics

Indie Sleaze typography oscillates between two poles: the blocky, hand-drawn display lettering found on DIY party flyers and zine covers, and the condensed sans-serifs that dominated MySpace band pages and American Apparel advertisements. Body text tends toward simple, slightly rough sans-serifs that read as casual and un-designed. Display text is loud, irregular, and often set in all-caps with tight or negative letter-spacing. The overall effect should feel like someone designed a flyer with a Sharpie and a photocopier, then scanned it and dropped it onto a Tumblr page.

Font Style Best For
Bebas Neue Condensed all-caps display sans Headlines, hero text, poster-style display
Permanent Marker Hand-drawn marker script Accent text, callouts, zine-style annotations
Oswald Condensed gothic sans-serif Subheadings, navigation, compact UI labels
Barlow Condensed Narrow humanist sans-serif Body text, descriptions, readable compact copy
Special Elite Typewriter slab Blog-style body text, editorial captions, alt body
Rock Salt Rough handwriting Decorative annotations, sticker text, scrawled notes
Anton Ultra-condensed display sans Large-scale titles, event names, splash headings

Font Pairing Suggestions

Heading Body Vibe
Bebas Neue Barlow Condensed Classic party flyer meets readable blog layout
Permanent Marker + Anton Barlow Condensed Hand-scrawled zine energy with clean body readability
Oswald (700) Special Elite Condensed editorial authority paired with raw typewriter intimacy
Anton Barlow Condensed (300) Massive poster impact with lightweight, breathable body text

Typography CSS Example

@import url('https://fonts.googleapis.com/css2?family=Anton&family=Barlow+Condensed:wght@300;400;600&family=Bebas+Neue&family=Permanent+Marker&family=Special+Elite&display=swap');

/* === Base Typography === */
body {
  font-family: 'Barlow Condensed', 'Arial Narrow', Helvetica, sans-serif;
  font-weight: 400;
  font-size: 17px;
  line-height: 1.6;
  color: var(--sleaze-text);
  background-color: var(--sleaze-bg);
  letter-spacing: 0.01em;
}

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

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

h2 {
  font-size: clamp(2rem, 6vw, 5rem);
}

h3 {
  font-size: clamp(1.5rem, 3.5vw, 2.5rem);
}

a {
  color: var(--sleaze-link);
  text-decoration: none;
  border-bottom: 1px solid transparent;
  transition: color 0.15s ease, border-color 0.15s ease, text-shadow 0.15s ease;
}

a:hover {
  color: var(--sleaze-link-hover);
  border-bottom-color: var(--sleaze-link-hover);
  text-shadow: var(--sleaze-glow-yellow);
}

.annotation {
  font-family: 'Permanent Marker', cursive;
  color: var(--sleaze-pink);
  transform: rotate(-2deg);
  display: inline-block;
}

.typewriter {
  font-family: 'Special Elite', 'Courier New', monospace;
  letter-spacing: 0.03em;
}

blockquote {
  font-family: 'Permanent Marker', cursive;
  font-size: 1.4rem;
  color: var(--sleaze-yellow);
  border-left: 3px solid var(--sleaze-pink);
  padding-left: 1rem;
  transform: rotate(-1deg);
}

Layout Principles

Grid and Structure

Section Organization

Responsive Approach


CSS / Design Techniques

Flash Photo Card

A content card that evokes the look of a flash-lit Polaroid or point-and-shoot snapshot, with slight rotation, a gritty border treatment, and neon hover glow.

.sleaze-card {
  background-color: var(--sleaze-charcoal);
  border: 1px solid var(--sleaze-smoke);
  padding: 0;
  overflow: hidden;
  transform: rotate(-1.5deg);
  transition: transform 0.2s ease, box-shadow 0.2s ease;
  position: relative;
}

.sleaze-card::after {
  content: '';
  position: absolute;
  inset: 0;
  background: var(--sleaze-grain);
  pointer-events: none;
  opacity: 0.15;
  mix-blend-mode: overlay;
}

.sleaze-card:hover {
  transform: rotate(0deg) scale(1.03);
  box-shadow: var(--sleaze-glow-pink);
}

.sleaze-card img {
  width: 100%;
  display: block;
  filter: contrast(1.15) brightness(1.05) saturate(0.9);
}

.sleaze-card .caption {
  padding: 1rem 1.2rem;
  font-family: 'Barlow Condensed', sans-serif;
  font-size: 0.9rem;
  color: var(--sleaze-ash);
}

.sleaze-card .caption strong {
  display: block;
  font-family: 'Bebas Neue', sans-serif;
  font-size: 1.3rem;
  color: var(--sleaze-flash);
  text-transform: uppercase;
  letter-spacing: 0.05em;
  margin-bottom: 0.25rem;
}

Neon Glow Button

A CTA button that pulses with neon energy, referencing the glowing signage of dive bars and club entrances.

.sleaze-btn {
  display: inline-block;
  font-family: 'Bebas Neue', sans-serif;
  font-size: 1.1rem;
  text-transform: uppercase;
  letter-spacing: 0.12em;
  padding: 0.8rem 2rem;
  color: var(--sleaze-pink);
  background: transparent;
  border: 2px solid var(--sleaze-pink);
  cursor: pointer;
  text-decoration: none;
  position: relative;
  transition: all 0.2s ease;
}

.sleaze-btn:hover {
  color: var(--sleaze-black);
  background-color: var(--sleaze-pink);
  box-shadow: var(--sleaze-glow-pink);
  text-shadow: none;
}

.sleaze-btn--yellow {
  color: var(--sleaze-yellow);
  border-color: var(--sleaze-yellow);
}

.sleaze-btn--yellow:hover {
  color: var(--sleaze-black);
  background-color: var(--sleaze-yellow);
  box-shadow: var(--sleaze-glow-yellow);
}

.sleaze-btn--solid {
  color: var(--sleaze-black);
  background-color: var(--sleaze-pink);
  border-color: var(--sleaze-pink);
}

.sleaze-btn--solid:hover {
  background-color: var(--sleaze-flash);
  border-color: var(--sleaze-flash);
  box-shadow: 0 0 30px rgba(255, 45, 135, 0.4);
}

Dive Bar Navigation

A navigation bar that feels like the neon-lit menu board of a Lower East Side bar, with glowing hover states and condensed all-caps type.

.sleaze-nav {
  background-color: var(--sleaze-black);
  border-bottom: 1px solid var(--sleaze-smoke);
  padding: 0 1.5rem;
  position: sticky;
  top: 0;
  z-index: 100;
}

.sleaze-nav ul {
  list-style: none;
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 0;
  margin: 0;
  padding: 0;
}

.sleaze-nav .logo {
  font-family: 'Permanent Marker', cursive;
  font-size: 1.3rem;
  color: var(--sleaze-pink);
  text-decoration: none;
  margin-right: auto;
  padding: 0.8rem 0;
  text-shadow: var(--sleaze-glow-pink);
}

.sleaze-nav a {
  display: block;
  padding: 0.9rem 1rem;
  color: var(--sleaze-ash);
  text-decoration: none;
  font-family: 'Bebas Neue', sans-serif;
  font-size: 0.95rem;
  text-transform: uppercase;
  letter-spacing: 0.15em;
  border-bottom: 2px solid transparent;
  transition: color 0.15s ease, border-color 0.15s ease;
}

.sleaze-nav a:hover {
  color: var(--sleaze-pink);
  border-bottom-color: var(--sleaze-pink);
  text-shadow: var(--sleaze-glow-pink);
}

.sleaze-nav a.active {
  color: var(--sleaze-flash);
  border-bottom-color: var(--sleaze-pink);
}

Hero Section with Grain Overlay

A full-viewport hero that layers grainy texture over a dark background with oversized display type and neon accents.

.sleaze-hero {
  min-height: 100vh;
  display: flex;
  flex-direction: column;
  justify-content: center;
  padding: 4rem 2.5rem;
  background-color: var(--sleaze-black);
  position: relative;
  overflow: hidden;
}

.sleaze-hero::before {
  content: '';
  position: absolute;
  inset: 0;
  background: var(--sleaze-grain);
  opacity: 0.12;
  pointer-events: none;
  z-index: 1;
}

.sleaze-hero::after {
  content: '';
  position: absolute;
  top: -50%;
  right: -20%;
  width: 600px;
  height: 600px;
  background: radial-gradient(circle, rgba(255, 45, 135, 0.15) 0%, transparent 70%);
  pointer-events: none;
  z-index: 0;
}

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

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

.sleaze-hero h1 span {
  color: var(--sleaze-pink);
  text-shadow: var(--sleaze-glow-pink);
}

.sleaze-hero p {
  font-family: 'Barlow Condensed', sans-serif;
  font-size: clamp(1.05rem, 2vw, 1.4rem);
  font-weight: 300;
  color: var(--sleaze-ash);
  max-width: 50ch;
  margin-top: 1.5rem;
  line-height: 1.6;
}

.sleaze-hero .btn-row {
  margin-top: 2rem;
  display: flex;
  flex-wrap: wrap;
  gap: 1rem;
}

Zine Pull Quote

A styled blockquote that looks like a scrawled annotation torn from a DIY zine, with rotation and hand-drawn font treatment.

.sleaze-pullquote {
  font-family: 'Permanent Marker', cursive;
  font-size: clamp(1.5rem, 3.5vw, 2.5rem);
  color: var(--sleaze-yellow);
  line-height: 1.3;
  padding: 2rem 2.5rem;
  margin: 3rem 0;
  background-color: var(--sleaze-charcoal);
  border-left: 4px solid var(--sleaze-pink);
  position: relative;
  transform: rotate(-1deg);
}

.sleaze-pullquote::before {
  content: '\201C';
  font-size: 5rem;
  color: var(--sleaze-pink);
  position: absolute;
  top: -0.2em;
  left: 0.3rem;
  opacity: 0.5;
  line-height: 1;
}

.sleaze-pullquote cite {
  display: block;
  font-family: 'Barlow Condensed', sans-serif;
  font-size: 0.85rem;
  font-style: normal;
  color: var(--sleaze-ash);
  margin-top: 1rem;
  text-transform: uppercase;
  letter-spacing: 0.1em;
}

Event Lineup Poster

A section styled like a gig poster or club night lineup, with hierarchical band-name sizing and neon date highlights.

.sleaze-lineup {
  background-color: var(--sleaze-black);
  padding: 3rem 2rem;
  text-align: center;
  border: 1px solid var(--sleaze-smoke);
  position: relative;
}

.sleaze-lineup::after {
  content: '';
  position: absolute;
  inset: 0;
  background: var(--sleaze-grain);
  opacity: 0.1;
  pointer-events: none;
}

.sleaze-lineup .date {
  font-family: 'Bebas Neue', sans-serif;
  font-size: 1rem;
  color: var(--sleaze-yellow);
  text-transform: uppercase;
  letter-spacing: 0.3em;
  margin-bottom: 0.5rem;
  text-shadow: var(--sleaze-glow-yellow);
}

.sleaze-lineup .headliner {
  font-family: 'Anton', sans-serif;
  font-size: clamp(3rem, 8vw, 7rem);
  color: var(--sleaze-flash);
  text-transform: uppercase;
  line-height: 0.95;
  margin-bottom: 0.5rem;
}

.sleaze-lineup .support {
  font-family: 'Bebas Neue', sans-serif;
  font-size: clamp(1.2rem, 3vw, 2rem);
  color: var(--sleaze-pink);
  text-transform: uppercase;
  letter-spacing: 0.08em;
  margin-bottom: 0.3rem;
}

.sleaze-lineup .opener {
  font-family: 'Barlow Condensed', sans-serif;
  font-size: 1rem;
  color: var(--sleaze-ash);
  text-transform: uppercase;
  letter-spacing: 0.15em;
}

.sleaze-lineup .venue {
  font-family: 'Special Elite', monospace;
  font-size: 0.85rem;
  color: var(--sleaze-gold);
  margin-top: 1.5rem;
  letter-spacing: 0.1em;
}

Film Grain Overlay Utility

A reusable CSS technique for applying film grain texture to any element, evoking the analog photography of the era.

.grain-overlay {
  position: relative;
}

.grain-overlay::after {
  content: '';
  position: absolute;
  inset: 0;
  background: var(--sleaze-grain);
  opacity: 0.12;
  pointer-events: none;
  mix-blend-mode: overlay;
  z-index: 10;
}

/* Animated grain variant for hero sections */
@keyframes grain-shift {
  0%, 100% { transform: translate(0, 0); }
  10% { transform: translate(-2%, -3%); }
  30% { transform: translate(3%, 2%); }
  50% { transform: translate(-1%, 3%); }
  70% { transform: translate(2%, -2%); }
  90% { transform: translate(-3%, 1%); }
}

.grain-animated::after {
  content: '';
  position: absolute;
  inset: -50%;
  background: var(--sleaze-grain);
  opacity: 0.1;
  pointer-events: none;
  mix-blend-mode: overlay;
  z-index: 10;
  animation: grain-shift 0.5s steps(4) infinite;
}

/* Flash / overexposure effect on images */
.flash-effect {
  filter: contrast(1.2) brightness(1.1) saturate(0.85);
  position: relative;
}

.flash-effect::after {
  content: '';
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background: linear-gradient(
    135deg,
    rgba(255, 255, 255, 0.15) 0%,
    transparent 50%,
    rgba(0, 0, 0, 0.1) 100%
  );
  pointer-events: none;
}

Sticker Badge

Small decorative badges that mimic peeling stickers, club entry stamps, and laptop decals scattered across layouts.

.sleaze-sticker {
  display: inline-block;
  font-family: 'Permanent Marker', cursive;
  font-size: 0.8rem;
  padding: 0.4rem 0.8rem;
  background-color: var(--sleaze-yellow);
  color: var(--sleaze-black);
  transform: rotate(3deg);
  border-radius: 2px;
  box-shadow: 2px 2px 0 rgba(0, 0, 0, 0.3);
  position: relative;
  white-space: nowrap;
}

.sleaze-sticker--pink {
  background-color: var(--sleaze-pink);
  color: var(--sleaze-flash);
  transform: rotate(-2deg);
}

.sleaze-sticker--stamp {
  font-family: 'Bebas Neue', sans-serif;
  text-transform: uppercase;
  letter-spacing: 0.15em;
  border: 2px solid var(--sleaze-pink);
  border-radius: 50%;
  width: 60px;
  height: 60px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  background: transparent;
  color: var(--sleaze-pink);
  transform: rotate(-15deg);
  padding: 0;
  font-size: 0.7rem;
}

Design Do’s and Don’ts

Do

Don’t


Aesthetic Relationship
Y2K Futurism Chronological predecessor; shares the neon palette and nightlife energy but Y2K leans cleaner, more chrome and cyber, while Indie Sleaze is grittier and more analog
DIY Punk Spiritual ancestor; shares the anti-corporate, handmade, zine-culture ethos but Punk is more political and monochrome where Indie Sleaze is hedonistic and neon-soaked
Vaporwave Fellow nostalgia-driven aesthetic; both mine recent cultural history for visual material, but Vaporwave is ironic and pastel while Indie Sleaze is earnest and harsh
Grunge Revival Shares the gritty texture and anti-polish philosophy; Grunge leans toward flannel earth tones and 90s melancholy while Indie Sleaze is neon-lit and hedonistic
McBling Direct cultural opponent from the same era; McBling is polished, logo-driven maximalism while Indie Sleaze is raw, thrift-store maximalism – the two defined the mid-2000s tension
Tumblr Aesthetic Platform overlap; Indie Sleaze content lived on Tumblr but the broader Tumblr aesthetic tends softer and more curated while Indie Sleaze is deliberately messy
Lo-Fi / Analog Shares the celebration of analog imperfection, film grain, and cassette-tape warmth; Lo-Fi is quieter and more contemplative where Indie Sleaze is loud and nocturnal
Wabi-Sabi Both find beauty in imperfection, but Wabi-Sabi is serene, natural, and meditative while Indie Sleaze is urban, nocturnal, and chaotic

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>NITE CRAWL - Indie Sleaze 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=Anton&family=Barlow+Condensed:wght@300;400;600&family=Bebas+Neue&family=Permanent+Marker&family=Special+Elite&display=swap" rel="stylesheet">
  <style>
    /* --- Custom Properties --- */
    :root {
      --sleaze-black: #0a0a0a;
      --sleaze-charcoal: #1c1c1c;
      --sleaze-smoke: #2e2e2e;
      --sleaze-flash: #f5f0eb;
      --sleaze-cream: #f0e6d3;
      --sleaze-pink: #ff2d87;
      --sleaze-yellow: #ffe714;
      --sleaze-green: #39ff14;
      --sleaze-purple: #8b2fc9;
      --sleaze-gold: #c9a84c;
      --sleaze-red: #cc1100;
      --sleaze-ash: #8a8a8a;
      --sleaze-blue: #1a3a5c;
      --sleaze-silver: #c0c0c0;
      --glow-pink: 0 0 20px rgba(255, 45, 135, 0.6);
      --glow-yellow: 0 0 20px rgba(255, 231, 20, 0.5);
      --glow-green: 0 0 20px rgba(57, 255, 20, 0.5);
    }

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

    /* --- Base --- */
    body {
      font-family: 'Barlow Condensed', 'Arial Narrow', Helvetica, sans-serif;
      font-weight: 400;
      font-size: 17px;
      line-height: 1.6;
      color: var(--sleaze-flash);
      background-color: var(--sleaze-black);
    }

    /* --- Film Grain Overlay --- */
    body::after {
      content: '';
      position: fixed;
      inset: 0;
      background: 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.85' 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");
      pointer-events: none;
      z-index: 9999;
      mix-blend-mode: overlay;
      opacity: 0.5;
    }

    /* --- Typography --- */
    h1, h2, h3, h4 {
      font-family: 'Bebas Neue', 'Anton', 'Impact', sans-serif;
      text-transform: uppercase;
      letter-spacing: 0.04em;
      line-height: 0.95;
    }

    a { color: var(--sleaze-pink); text-decoration: none; transition: all 0.15s ease; }
    a:hover { color: var(--sleaze-yellow); text-shadow: var(--glow-yellow); }

    /* --- Navigation --- */
    .nav {
      background-color: var(--sleaze-black);
      border-bottom: 1px solid var(--sleaze-smoke);
      padding: 0 2rem;
      position: sticky;
      top: 0;
      z-index: 1000;
      display: flex;
      align-items: center;
    }

    .nav-logo {
      font-family: 'Permanent Marker', cursive;
      font-size: 1.4rem;
      color: var(--sleaze-pink);
      text-shadow: var(--glow-pink);
      margin-right: auto;
      padding: 0.7rem 0;
    }

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

    .nav a {
      display: block;
      padding: 0.9rem 1rem;
      color: var(--sleaze-ash);
      font-family: 'Bebas Neue', sans-serif;
      font-size: 0.95rem;
      text-transform: uppercase;
      letter-spacing: 0.15em;
      border-bottom: 2px solid transparent;
    }

    .nav a:hover {
      color: var(--sleaze-pink);
      border-bottom-color: var(--sleaze-pink);
      text-shadow: var(--glow-pink);
    }

    /* --- Hero --- */
    .hero {
      min-height: 100vh;
      display: flex;
      flex-direction: column;
      justify-content: center;
      padding: 4rem 2.5rem;
      position: relative;
      overflow: hidden;
    }

    .hero::before {
      content: '';
      position: absolute;
      top: -30%;
      right: -15%;
      width: 700px;
      height: 700px;
      background: radial-gradient(circle, rgba(255, 45, 135, 0.12) 0%, transparent 65%);
      pointer-events: none;
    }

    .hero::after {
      content: '';
      position: absolute;
      bottom: -20%;
      left: -10%;
      width: 500px;
      height: 500px;
      background: radial-gradient(circle, rgba(255, 231, 20, 0.06) 0%, transparent 65%);
      pointer-events: none;
    }

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

    .hero h1 {
      font-family: 'Anton', sans-serif;
      font-size: clamp(4rem, 13vw, 14rem);
      line-height: 0.88;
      color: var(--sleaze-flash);
      margin: 0;
    }

    .hero h1 .neon { color: var(--sleaze-pink); text-shadow: var(--glow-pink); }
    .hero h1 .neon-y { color: var(--sleaze-yellow); text-shadow: var(--glow-yellow); }

    .hero .subtitle {
      font-family: 'Permanent Marker', cursive;
      font-size: clamp(1rem, 2.5vw, 1.6rem);
      color: var(--sleaze-yellow);
      margin-top: 1rem;
      transform: rotate(-2deg);
      display: inline-block;
    }

    .hero .desc {
      font-size: clamp(1rem, 1.8vw, 1.25rem);
      font-weight: 300;
      color: var(--sleaze-ash);
      max-width: 50ch;
      margin-top: 1.5rem;
    }

    .btn-row { display: flex; flex-wrap: wrap; gap: 1rem; margin-top: 2rem; }

    /* --- Buttons --- */
    .btn {
      display: inline-block;
      font-family: 'Bebas Neue', sans-serif;
      font-size: 1.05rem;
      text-transform: uppercase;
      letter-spacing: 0.12em;
      padding: 0.75rem 2rem;
      border: 2px solid var(--sleaze-pink);
      color: var(--sleaze-pink);
      background: transparent;
      cursor: pointer;
      text-decoration: none;
      transition: all 0.2s ease;
    }

    .btn:hover {
      background: var(--sleaze-pink);
      color: var(--sleaze-black);
      box-shadow: var(--glow-pink);
      text-shadow: none;
    }

    .btn--solid {
      background: var(--sleaze-pink);
      color: var(--sleaze-black);
    }

    .btn--solid:hover {
      background: var(--sleaze-flash);
      border-color: var(--sleaze-flash);
      box-shadow: 0 0 30px rgba(255, 45, 135, 0.3);
    }

    .btn--yellow { border-color: var(--sleaze-yellow); color: var(--sleaze-yellow); }
    .btn--yellow:hover { background: var(--sleaze-yellow); color: var(--sleaze-black); box-shadow: var(--glow-yellow); }

    /* --- Section --- */
    .section {
      padding: 5rem 2.5rem;
      position: relative;
    }

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

    .section h2 .accent { color: var(--sleaze-pink); }
    .section .lead { color: var(--sleaze-ash); max-width: 60ch; margin-bottom: 2.5rem; font-weight: 300; }

    /* --- Photo Grid --- */
    .photo-grid {
      display: grid;
      grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
      gap: 1.5rem;
      margin-top: 2rem;
    }

    .photo-card {
      background: var(--sleaze-charcoal);
      border: 1px solid var(--sleaze-smoke);
      overflow: hidden;
      position: relative;
      transition: transform 0.2s ease, box-shadow 0.2s ease;
    }

    .photo-card:nth-child(odd) { transform: rotate(-1.5deg); }
    .photo-card:nth-child(even) { transform: rotate(1deg); }
    .photo-card:hover { transform: rotate(0deg) scale(1.02); box-shadow: var(--glow-pink); z-index: 2; }

    .photo-card .img-placeholder {
      width: 100%;
      aspect-ratio: 4 / 3;
      background: linear-gradient(135deg, var(--sleaze-smoke) 0%, var(--sleaze-charcoal) 50%, var(--sleaze-smoke) 100%);
      display: flex;
      align-items: center;
      justify-content: center;
      font-family: 'Permanent Marker', cursive;
      font-size: 2rem;
      color: var(--sleaze-smoke);
      overflow: hidden;
      position: relative;
    }

    .photo-card .img-placeholder::after {
      content: '';
      position: absolute;
      inset: 0;
      background: linear-gradient(135deg, rgba(255, 255, 255, 0.08) 0%, transparent 50%, rgba(0, 0, 0, 0.1) 100%);
    }

    .photo-card .card-body {
      padding: 1rem 1.2rem;
    }

    .photo-card .card-title {
      font-family: 'Bebas Neue', sans-serif;
      font-size: 1.2rem;
      text-transform: uppercase;
      letter-spacing: 0.06em;
      color: var(--sleaze-flash);
    }

    .photo-card .card-meta {
      font-size: 0.8rem;
      color: var(--sleaze-ash);
      margin-top: 0.25rem;
    }

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

    /* --- Pull Quote --- */
    .pullquote {
      font-family: 'Permanent Marker', cursive;
      font-size: clamp(1.5rem, 3.5vw, 2.5rem);
      color: var(--sleaze-yellow);
      line-height: 1.35;
      padding: 3rem;
      margin: 0;
      border-left: 4px solid var(--sleaze-pink);
      background: var(--sleaze-charcoal);
      transform: rotate(-1deg);
      position: relative;
    }

    .pullquote::before {
      content: '\201C';
      font-size: 5rem;
      color: var(--sleaze-pink);
      position: absolute;
      top: 0;
      left: 0.5rem;
      line-height: 1;
      opacity: 0.4;
    }

    .pullquote cite {
      display: block;
      font-family: 'Barlow Condensed', sans-serif;
      font-style: normal;
      font-size: 0.85rem;
      color: var(--sleaze-ash);
      margin-top: 1rem;
      letter-spacing: 0.1em;
      text-transform: uppercase;
    }

    /* --- Lineup / Events --- */
    .lineup {
      text-align: center;
      padding: 4rem 2rem;
      background: var(--sleaze-charcoal);
      border: 1px solid var(--sleaze-smoke);
      margin-top: 2.5rem;
      position: relative;
    }

    .lineup .date {
      font-family: 'Bebas Neue', sans-serif;
      font-size: 1rem;
      color: var(--sleaze-yellow);
      letter-spacing: 0.3em;
      text-transform: uppercase;
      text-shadow: var(--glow-yellow);
    }

    .lineup .headliner {
      font-family: 'Anton', sans-serif;
      font-size: clamp(3rem, 9vw, 7rem);
      color: var(--sleaze-flash);
      text-transform: uppercase;
      line-height: 0.95;
      margin: 0.5rem 0;
    }

    .lineup .support {
      font-family: 'Bebas Neue', sans-serif;
      font-size: clamp(1.3rem, 3.5vw, 2.2rem);
      color: var(--sleaze-pink);
      text-transform: uppercase;
      letter-spacing: 0.06em;
    }

    .lineup .openers {
      font-size: 0.95rem;
      color: var(--sleaze-ash);
      text-transform: uppercase;
      letter-spacing: 0.12em;
      margin-top: 0.5rem;
    }

    .lineup .venue {
      font-family: 'Special Elite', monospace;
      font-size: 0.85rem;
      color: var(--sleaze-gold);
      margin-top: 1.5rem;
      letter-spacing: 0.08em;
    }

    .lineup-divider {
      width: 60px;
      height: 2px;
      background: var(--sleaze-pink);
      margin: 2.5rem auto;
      box-shadow: var(--glow-pink);
    }

    /* --- Stickers --- */
    .sticker {
      display: inline-block;
      font-family: 'Permanent Marker', cursive;
      font-size: 0.8rem;
      padding: 0.35rem 0.7rem;
      background: var(--sleaze-yellow);
      color: var(--sleaze-black);
      transform: rotate(3deg);
      box-shadow: 2px 2px 0 rgba(0, 0, 0, 0.3);
      white-space: nowrap;
    }

    .sticker--pink { background: var(--sleaze-pink); color: var(--sleaze-flash); transform: rotate(-2deg); }
    .sticker--green { background: var(--sleaze-green); color: var(--sleaze-black); transform: rotate(4deg); }

    /* --- Newsletter --- */
    .newsletter {
      padding: 4rem 2.5rem;
      text-align: center;
      border-top: 1px solid var(--sleaze-smoke);
    }

    .newsletter h2 {
      font-family: 'Permanent Marker', cursive;
      font-size: clamp(1.8rem, 4vw, 3rem);
      color: var(--sleaze-pink);
      text-shadow: var(--glow-pink);
      transform: rotate(-1.5deg);
      margin-bottom: 0.5rem;
    }

    .newsletter p {
      color: var(--sleaze-ash);
      margin-bottom: 1.5rem;
      font-weight: 300;
    }

    .newsletter-form {
      display: flex;
      gap: 0;
      max-width: 450px;
      margin: 0 auto;
    }

    .newsletter-form input {
      flex: 1;
      font-family: 'Barlow Condensed', sans-serif;
      font-size: 1rem;
      padding: 0.75rem 1rem;
      background: var(--sleaze-charcoal);
      border: 2px solid var(--sleaze-smoke);
      border-right: none;
      color: var(--sleaze-flash);
      outline: none;
    }

    .newsletter-form input::placeholder { color: var(--sleaze-ash); }
    .newsletter-form input:focus { border-color: var(--sleaze-pink); }

    .newsletter-form button {
      font-family: 'Bebas Neue', sans-serif;
      font-size: 1rem;
      letter-spacing: 0.12em;
      text-transform: uppercase;
      padding: 0.75rem 1.5rem;
      background: var(--sleaze-pink);
      color: var(--sleaze-black);
      border: 2px solid var(--sleaze-pink);
      cursor: pointer;
      transition: all 0.2s ease;
    }

    .newsletter-form button:hover {
      background: var(--sleaze-flash);
      border-color: var(--sleaze-flash);
    }

    /* --- Footer --- */
    .footer {
      padding: 3rem 2.5rem;
      border-top: 1px solid var(--sleaze-smoke);
      display: grid;
      grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
      gap: 2rem;
    }

    .footer h4 {
      font-family: 'Bebas Neue', sans-serif;
      font-size: 0.9rem;
      letter-spacing: 0.15em;
      text-transform: uppercase;
      color: var(--sleaze-flash);
      margin-bottom: 0.75rem;
    }

    .footer ul { list-style: none; }
    .footer li { padding: 0.2rem 0; }
    .footer a { color: var(--sleaze-ash); font-size: 0.9rem; }
    .footer a:hover { color: var(--sleaze-pink); }

    .footer-bottom {
      padding: 1.5rem 2.5rem;
      border-top: 1px solid var(--sleaze-smoke);
      display: flex;
      justify-content: space-between;
      align-items: center;
      flex-wrap: wrap;
      gap: 1rem;
    }

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

    .footer-bottom .logo-text {
      font-family: 'Permanent Marker', cursive;
      color: var(--sleaze-pink);
      text-shadow: var(--glow-pink);
      font-size: 1.1rem;
    }

    /* --- Responsive --- */
    @media (max-width: 768px) {
      .nav { padding: 0 1.2rem; }
      .nav-logo { font-size: 1.2rem; }
      .nav a { padding: 0.7rem 0.6rem; font-size: 0.8rem; letter-spacing: 0.08em; }
      .hero { padding: 3rem 1.5rem; min-height: 85vh; }
      .section { padding: 3.5rem 1.5rem; }
      .pullquote { padding: 2rem 1.5rem; font-size: 1.3rem; }
      .lineup { padding: 3rem 1.5rem; }
      .photo-card:nth-child(odd),
      .photo-card:nth-child(even) { transform: none; }
      .photo-card:hover { transform: scale(1.01); }
      .newsletter { padding: 3rem 1.5rem; }
      .newsletter-form { flex-direction: column; gap: 0; }
      .newsletter-form input { border-right: 2px solid var(--sleaze-smoke); border-bottom: none; }
      .footer { padding: 2rem 1.5rem; }
      .footer-bottom { padding: 1.5rem; }
    }
  </style>
</head>
<body>

  <!-- NAVIGATION -->
  <nav class="nav">
    <span class="nav-logo">NITE CRAWL</span>
    <ul>
      <li><a href="#photos">Photos</a></li>
      <li><a href="#events">Events</a></li>
      <li><a href="#about">About</a></li>
      <li><a href="#subscribe">Subscribe</a></li>
    </ul>
  </nav>

  <!-- HERO -->
  <section class="hero" id="top">
    <h1>
      LAST<br>
      <span class="neon">NITE</span><br>
      <span class="neon-y">WAS</span><br>
      WILD
    </h1>
    <span class="subtitle">Brooklyn, NY &mdash; Since 2007</span>
    <p class="desc">
      Documenting the flash-lit chaos of the underground.
      Basement shows, rooftop parties, dive bar dance floors,
      and everything in between. No filters. No apologies.
    </p>
    <div class="btn-row">
      <a href="#photos" class="btn btn--solid">View Gallery</a>
      <a href="#events" class="btn btn--yellow">Upcoming Shows</a>
    </div>
  </section>

  <!-- PHOTO GALLERY -->
  <section class="section" id="photos">
    <h2>THE <span class="accent">ROLL</span></h2>
    <p class="lead">
      36 exposures. One disposable camera. No second takes.
      Every frame from last weekend's crawl through Bushwick.
    </p>
    <div class="photo-grid">
      <div class="photo-card">
        <div class="img-placeholder">01</div>
        <div class="card-body">
          <div class="card-title">Glasslands Gallery</div>
          <div class="card-meta">Kent Ave, Williamsburg &mdash; 11:47 PM</div>
          <span class="tag">Flash</span>
          <span class="tag">Crowd</span>
        </div>
      </div>
      <div class="photo-card">
        <div class="img-placeholder">02</div>
        <div class="card-body">
          <div class="card-title">Bathroom Line Confessional</div>
          <div class="card-meta">Death By Audio &mdash; 12:30 AM</div>
          <span class="tag">Candid</span>
          <span class="tag">Portrait</span>
        </div>
      </div>
      <div class="photo-card">
        <div class="img-placeholder">03</div>
        <div class="card-body">
          <div class="card-title">DJ Booth Smoke Machine</div>
          <div class="card-meta">285 Kent &mdash; 1:15 AM</div>
          <span class="tag">Electro</span>
          <span class="tag">Haze</span>
        </div>
      </div>
      <div class="photo-card">
        <div class="img-placeholder">04</div>
        <div class="card-body">
          <div class="card-title">Sidewalk Cigarette Break</div>
          <div class="card-meta">Grand St, Williamsburg &mdash; 2:03 AM</div>
          <span class="tag">Street</span>
        </div>
      </div>
      <div class="photo-card">
        <div class="img-placeholder">05</div>
        <div class="card-body">
          <div class="card-title">Sequin Jacket Mosh Pit</div>
          <div class="card-meta">Market Hotel, Bushwick &mdash; 1:45 AM</div>
          <span class="tag">Messy</span>
          <span class="tag">Live</span>
        </div>
      </div>
      <div class="photo-card">
        <div class="img-placeholder">06</div>
        <div class="card-body">
          <div class="card-title">Rooftop Dawn Survivors</div>
          <div class="card-meta">Somewhere in Bushwick &mdash; 5:20 AM</div>
          <span class="tag">Golden Hour</span>
        </div>
      </div>
    </div>
  </section>

  <!-- PULL QUOTE -->
  <section class="section" style="padding-top: 2rem; padding-bottom: 2rem;">
    <blockquote class="pullquote">
      The best photos happen when nobody is posing and the flash is the only light source.
      <cite>Shot on a Canon PowerShot, 2009</cite>
    </blockquote>
  </section>

  <!-- EVENTS / LINEUP -->
  <section class="section" id="events">
    <h2>COMING <span class="accent">UP</span></h2>
    <p class="lead">
      Our picks for the shows worth losing sleep over this month.
      Get there early. Leave when they kick you out.
    </p>

    <div class="lineup">
      <div class="date">Friday &mdash; Feb 21, 2026</div>
      <div class="headliner">Crystal Castles</div>
      <div class="support">Health &bull; Salem</div>
      <div class="openers">DJ sets by Frankie Chan + Mishka</div>
      <div class="venue">Market Hotel &mdash; 1140 Myrtle Ave, Brooklyn &mdash; Doors 9PM &mdash; $12</div>
    </div>

    <div class="lineup-divider"></div>

    <div class="lineup">
      <div class="date">Saturday &mdash; Feb 22, 2026</div>
      <div class="headliner">CSS</div>
      <div class="support">Matt & Kim &bull; Sleigh Bells</div>
      <div class="openers">Hosted by Misshapes</div>
      <div class="venue">Glasslands Gallery &mdash; 289 Kent Ave, Brooklyn &mdash; Doors 10PM &mdash; $15</div>
    </div>

    <div class="lineup-divider"></div>

    <div class="lineup">
      <div class="date">Thursday &mdash; Feb 27, 2026</div>
      <div class="headliner">MGMT</div>
      <div class="support">Yeasayer &bull; Neon Indian</div>
      <div class="openers">Afterparty TBA</div>
      <div class="venue">Music Hall of Williamsburg &mdash; 66 N 6th St, Brooklyn &mdash; Doors 8PM &mdash; $18</div>
    </div>
  </section>

  <!-- ABOUT -->
  <section class="section" id="about" style="border-top: 1px solid var(--sleaze-smoke);">
    <h2>ABOUT <span class="accent">US</span></h2>
    <p class="lead">
      NITE CRAWL started in 2007 as a Blogspot page run out of a Williamsburg
      apartment. One camera, one flash, and an open invitation to document
      whatever happened between midnight and sunrise.
    </p>
    <p style="color: var(--sleaze-ash); max-width: 60ch; margin-bottom: 1.5rem; font-weight: 300;">
      What started as a personal photo diary became the go-to nightlife
      chronicle for a scene that existed between MySpace and Instagram,
      between The Strokes and Vampire Weekend, between cheap PBR and
      overpriced cocktails. We archived the basement shows, the warehouse
      parties, the sidewalk aftermaths, and the cab rides home at dawn.
    </p>
    <div style="display: flex; gap: 0.75rem; flex-wrap: wrap;">
      <span class="sticker">EST. 2007</span>
      <span class="sticker--pink sticker">NO FLASH NO ENTRY</span>
      <span class="sticker--green sticker">ALWAYS OPEN</span>
    </div>
  </section>

  <!-- NEWSLETTER -->
  <section class="newsletter" id="subscribe">
    <h2>Get on the List</h2>
    <p>Weekly dispatches from the underground. Delivered Thursdays at midnight.</p>
    <form class="newsletter-form" onsubmit="return false;">
      <input type="email" placeholder="your@email.com" aria-label="Email address">
      <button type="submit">Subscribe</button>
    </form>
  </section>

  <!-- FOOTER -->
  <footer class="footer">
    <div>
      <h4>Navigate</h4>
      <ul>
        <li><a href="#photos">Photo Roll</a></li>
        <li><a href="#events">Upcoming Shows</a></li>
        <li><a href="#about">About</a></li>
        <li><a href="#subscribe">Newsletter</a></li>
      </ul>
    </div>
    <div>
      <h4>Archive</h4>
      <ul>
        <li><a href="#">2009 &mdash; The Early Days</a></li>
        <li><a href="#">2010 &mdash; Peak Sleaze</a></li>
        <li><a href="#">2011 &mdash; Last Call</a></li>
        <li><a href="#">2012 &mdash; The Hangover</a></li>
      </ul>
    </div>
    <div>
      <h4>Connect</h4>
      <ul>
        <li><a href="#">Tumblr</a></li>
        <li><a href="#">Flickr</a></li>
        <li><a href="#">Last.fm</a></li>
        <li><a href="#">RSS Feed</a></li>
      </ul>
    </div>
    <div>
      <h4>Legal</h4>
      <ul>
        <li><a href="#">Privacy Policy</a></li>
        <li><a href="#">Photo Credits</a></li>
        <li><a href="#">Contact</a></li>
      </ul>
    </div>
  </footer>

  <div class="footer-bottom">
    <span class="logo-text">NITE CRAWL</span>
    <p>No rights reserved. Steal this website. &copy; 2007&ndash;forever.</p>
  </div>

</body>
</html>