website_designs

Liminal Space - Design Reference

Overview

Liminal Space is a digital aesthetic rooted in the unsettling familiarity of transitional, in-between environments devoid of human presence. Derived from the Latin “limen” (threshold), the style captures the eerie quality of places designed for occupancy but found empty – abandoned malls at 3am, fluorescent-lit office corridors after hours, drained hotel pools, endless airport terminals, and school hallways during summer break. The aesthetic surged in internet culture after the 2019 “Backrooms” phenomenon and draws its visual power from the uncanny valley of architecture: spaces that feel deeply familiar yet profoundly wrong. On the web, Liminal Space design translates this atmosphere through washed-out institutional color palettes, degraded visual quality (noise, blur, compression artifacts), oppressively repetitive layouts, artificial lighting effects, and typography that evokes late-1990s to early-2000s signage systems. The goal is not comfort or usability in the traditional sense, but the cultivation of an ambient unease – a digital environment that feels like somewhere you have been before, in a dream you cannot quite remember.


Visual Characteristics

Core Design Traits

Design Principles


Color Palette

The Liminal Space palette draws from institutional architecture, fluorescent lighting, and the washed-out memory of transitional environments. Colors are desaturated, slightly sickly, and avoid warmth or vibrancy. The dominant impression should be of artificial light on aging surfaces.

Swatch Hex Role
#C8C29D #C8C29D Backrooms yellow – the iconic mono-yellow of fluorescent-lit wallpaper and aged office walls
#E8E4D0 #E8E4D0 Institutional cream – drop ceiling tiles, laminate surfaces, and off-white wall paint
#D4CDB6 #D4CDB6 Carpet beige – commercial-grade loop carpet and waiting room upholstery
#A8B5A2 #A8B5A2 Fluorescent green cast – the subtle green tint that cheap fluorescent tubes throw on white surfaces
#7A8B8F #7A8B8F Corridor gray-blue – institutional hallway paint, hospital blues faded by decades of fluorescent exposure
#4D5A5E #4D5A5E Shadow teal – the dark recesses of empty stairwells and unlit storage rooms
#2C2E33 #2C2E33 Void charcoal – deep darkness beyond the reach of overhead lighting, doorways leading nowhere
#F5F0E1 #F5F0E1 Blown-out white – overexposed fluorescent glare on smooth surfaces
#B8A88A #B8A88A Water stain tan – aged acoustic tile, ceiling leaks, oxidized fixtures
#6B7F5E #6B7F5E Muted institutional green – school hallway tiles, hospital corridors, public bathroom surfaces
#8E7C68 #8E7C68 Worn laminate brown – fake wood grain on cafeteria tables and reception desks
#5C6B8A #5C6B8A Pool tile blue – the unsettling cyan of drained swimming pools and empty water parks lit from below
#9B9880 #9B9880 Concrete neutral – poured concrete floors, parking garage surfaces, loading dock walls
#D1C4A1 #D1C4A1 Linoleum gold – the yellowed, wax-coated institutional floor under buzzing lights

CSS Custom Properties

:root {
  /* Core liminal palette */
  --liminal-backrooms-yellow: #c8c29d;
  --liminal-cream: #e8e4d0;
  --liminal-carpet-beige: #d4cdb6;
  --liminal-fluorescent-green: #a8b5a2;
  --liminal-corridor-blue: #7a8b8f;
  --liminal-shadow-teal: #4d5a5e;
  --liminal-void: #2c2e33;
  --liminal-blown-white: #f5f0e1;
  --liminal-stain-tan: #b8a88a;
  --liminal-institutional-green: #6b7f5e;
  --liminal-worn-laminate: #8e7c68;
  --liminal-pool-blue: #5c6b8a;
  --liminal-concrete: #9b9880;
  --liminal-linoleum-gold: #d1c4a1;

  /* Functional tokens */
  --liminal-bg: var(--liminal-cream);
  --liminal-bg-deep: var(--liminal-void);
  --liminal-text: var(--liminal-void);
  --liminal-text-muted: var(--liminal-corridor-blue);
  --liminal-text-faded: var(--liminal-concrete);
  --liminal-border: var(--liminal-carpet-beige);
  --liminal-border-strong: var(--liminal-stain-tan);
  --liminal-accent: var(--liminal-backrooms-yellow);
  --liminal-accent-cool: var(--liminal-pool-blue);
  --liminal-surface: var(--liminal-blown-white);
  --liminal-surface-dark: var(--liminal-shadow-teal);

  /* Lighting effects */
  --liminal-fluorescent-glow: rgba(200, 194, 157, 0.15);
  --liminal-fluorescent-flicker: rgba(168, 181, 162, 0.08);
  --liminal-shadow-fade: rgba(44, 46, 51, 0.4);
}

Typography

Liminal Space typography evokes institutional wayfinding systems, emergency exit signage, outdated building directories, and the generic sans-serif faces found on 1990s-2000s office suite default installations. Fonts should feel familiar but slightly off – clean enough to read, generic enough to be placeless, dated enough to feel like a memory.

Typeface Characteristics

Font Style Best For
Inter 300, 400, 600 Primary body text – clean, generic, slightly institutional; its optical sizing creates the anonymous feel of a building directory
Roboto Condensed 300, 400, 700 Headlines and signage-style text – the condensed width evokes wayfinding systems and directory boards
IBM Plex Mono 300, 400 System readouts, timestamps, metadata – references building management systems and security infrastructure
DM Sans 400, 500, 700 Secondary body text and navigation – slightly geometric, slightly generic, slightly forgettable
Space Grotesk 400, 500, 700 Display text and section headers – a geometric grotesk that feels like it belongs on a 2003 office building lobby sign
Overpass 300, 400, 600 Wayfinding and directional text – originally designed for highway signage, it carries the feeling of transitional infrastructure
Share Tech Mono 400 Terminal displays, status indicators – evokes the monochrome screens of building access systems

Font Pairing Suggestions

Heading Body Vibe
Roboto Condensed (700) Inter (300) Institutional wayfinding sign above a building directory listing – authoritative yet anonymous
Space Grotesk (700) DM Sans (400) Modern office lobby signage with a generic corporate body – clean but soulless
Overpass (600) IBM Plex Mono (300) Highway exit sign meets building management terminal – infrastructure speaking to infrastructure
DM Sans (700) Inter (300) Generic corporate heading over equally generic body text – the typographic equivalent of a beige cubicle
Space Grotesk (500) Share Tech Mono (400) Slightly futuristic directory paired with system readout text – an empty building that still has power

Typography CSS Example

@import url('https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@300;400&family=Inter:wght@300;400;600&family=Roboto+Condensed:wght@300;400;700&display=swap');

/* === Base Typography === */
body {
  font-family: 'Inter', 'Segoe UI', 'Helvetica Neue', Arial, sans-serif;
  font-size: 16px;
  font-weight: 300;
  line-height: 1.7;
  color: var(--liminal-text);
  letter-spacing: 0.01em;
  -webkit-font-smoothing: antialiased;
}

h1, h2, h3, h4, h5, h6 {
  font-family: 'Roboto Condensed', 'Arial Narrow', sans-serif;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.08em;
  line-height: 1.1;
  color: var(--liminal-text);
}

h1 {
  font-size: clamp(2.5rem, 6vw, 5rem);
  letter-spacing: 0.12em;
}

h2 {
  font-size: clamp(1.5rem, 3.5vw, 2.5rem);
  letter-spacing: 0.1em;
}

h3 {
  font-size: clamp(1.1rem, 2vw, 1.5rem);
}

/* Monospaced system text */
.system-text, .timestamp, .meta {
  font-family: 'IBM Plex Mono', 'Courier New', monospace;
  font-size: 0.75rem;
  font-weight: 300;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--liminal-text-muted);
}

a {
  color: var(--liminal-accent-cool);
  text-decoration: none;
  border-bottom: 1px solid transparent;
  transition: border-color 0.6s ease, color 0.6s ease;
}

a:hover {
  color: var(--liminal-text);
  border-bottom-color: var(--liminal-text-muted);
}

blockquote {
  border-left: 2px solid var(--liminal-border-strong);
  padding: 1rem 1.5rem;
  color: var(--liminal-text-muted);
  font-style: italic;
  background: var(--liminal-fluorescent-glow);
}

Layout Principles

Grid and Structure

Section Organization

Responsive Approach


CSS / Design Techniques

Fluorescent Lighting Overlay

A full-page overlay that simulates the flat, slightly green-tinted wash of institutional fluorescent lighting, with a subtle animated flicker.

.fluorescent-overlay {
  position: fixed;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  pointer-events: none;
  z-index: 1000;
  background: linear-gradient(
    180deg,
    rgba(168, 181, 162, 0.04) 0%,
    rgba(200, 194, 157, 0.06) 50%,
    rgba(168, 181, 162, 0.03) 100%
  );
  animation: fluorescent-flicker 8s ease-in-out infinite;
}

@keyframes fluorescent-flicker {
  0%, 100% { opacity: 1; }
  47% { opacity: 1; }
  48% { opacity: 0.92; }
  49% { opacity: 1; }
  72% { opacity: 1; }
  72.5% { opacity: 0.95; }
  73% { opacity: 1; }
}

Liminal Card

A content card that resembles a notice pinned to a corridor bulletin board or a directory listing in a building lobby – institutional, flat, and slightly faded.

.liminal-card {
  background-color: var(--liminal-surface);
  border: 1px solid var(--liminal-border);
  padding: 2rem;
  position: relative;
  transition: box-shadow 0.6s ease, border-color 0.6s ease;
}

.liminal-card::before {
  content: '';
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  height: 3px;
  background: linear-gradient(
    90deg,
    var(--liminal-carpet-beige) 0%,
    var(--liminal-backrooms-yellow) 50%,
    var(--liminal-carpet-beige) 100%
  );
  opacity: 0.6;
}

.liminal-card:hover {
  border-color: var(--liminal-border-strong);
  box-shadow: 0 0 30px var(--liminal-fluorescent-glow);
}

.liminal-card .card-label {
  font-family: 'IBM Plex Mono', monospace;
  font-size: 0.65rem;
  text-transform: uppercase;
  letter-spacing: 0.15em;
  color: var(--liminal-text-faded);
  margin-bottom: 1rem;
}

.liminal-card h3 {
  font-size: 1.1rem;
  margin-bottom: 0.75rem;
}

.liminal-card p {
  color: var(--liminal-text-muted);
  font-size: 0.9rem;
}

Liminal Button

A button inspired by institutional signage and elevator call buttons – flat, bordered, and unadorned, with a slow, eerie hover transition.

.liminal-button {
  display: inline-block;
  font-family: 'Roboto Condensed', sans-serif;
  font-size: 0.8rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.12em;
  padding: 0.75rem 2rem;
  border: 1px solid var(--liminal-text-muted);
  background-color: transparent;
  color: var(--liminal-text);
  cursor: pointer;
  text-decoration: none;
  position: relative;
  overflow: hidden;
  transition: all 0.8s ease;
}

.liminal-button::before {
  content: '';
  position: absolute;
  top: 0;
  left: -100%;
  width: 100%;
  height: 100%;
  background: var(--liminal-fluorescent-glow);
  transition: left 0.8s ease;
}

.liminal-button:hover {
  border-color: var(--liminal-text);
  color: var(--liminal-text);
}

.liminal-button:hover::before {
  left: 0;
}

.liminal-button--filled {
  background-color: var(--liminal-shadow-teal);
  color: var(--liminal-blown-white);
  border-color: var(--liminal-shadow-teal);
}

.liminal-button--filled:hover {
  background-color: var(--liminal-void);
  border-color: var(--liminal-void);
  color: var(--liminal-backrooms-yellow);
}

A navigation bar that resembles the wayfinding strip along the top of an institutional corridor wall – minimal, uppercase, evenly spaced.

.liminal-nav {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 1.25rem 3rem;
  border-bottom: 1px solid var(--liminal-border);
  background-color: var(--liminal-surface);
  position: relative;
}

.liminal-nav::after {
  content: '';
  position: absolute;
  bottom: 0;
  left: 0;
  right: 0;
  height: 1px;
  background: linear-gradient(
    90deg,
    transparent 0%,
    var(--liminal-backrooms-yellow) 50%,
    transparent 100%
  );
  opacity: 0.3;
}

.liminal-nav .brand {
  font-family: 'Roboto Condensed', sans-serif;
  font-weight: 700;
  font-size: 0.85rem;
  text-transform: uppercase;
  letter-spacing: 0.15em;
  color: var(--liminal-text);
}

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

.liminal-nav a {
  display: block;
  padding: 0.5rem 1.25rem;
  font-family: 'Inter', sans-serif;
  font-size: 0.7rem;
  font-weight: 400;
  text-transform: uppercase;
  letter-spacing: 0.1em;
  color: var(--liminal-text-muted);
  text-decoration: none;
  border: none;
  transition: color 0.5s ease, background-color 0.5s ease;
}

.liminal-nav a:hover {
  color: var(--liminal-text);
  background-color: var(--liminal-fluorescent-glow);
}

Hero Section

A vast, empty hero that establishes atmosphere through scale and emptiness, like standing at the end of a long corridor and seeing only space ahead.

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

.liminal-hero::before {
  content: '';
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  background:
    repeating-linear-gradient(
      0deg,
      transparent,
      transparent 98px,
      rgba(180, 170, 140, 0.08) 98px,
      rgba(180, 170, 140, 0.08) 100px
    ),
    repeating-linear-gradient(
      90deg,
      transparent,
      transparent 98px,
      rgba(180, 170, 140, 0.08) 98px,
      rgba(180, 170, 140, 0.08) 100px
    );
  pointer-events: none;
}

.liminal-hero::after {
  content: '';
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  background: radial-gradient(
    ellipse at 50% 40%,
    rgba(200, 194, 157, 0.1) 0%,
    transparent 70%
  );
  pointer-events: none;
}

.liminal-hero h1 {
  font-size: clamp(3rem, 8vw, 7rem);
  letter-spacing: 0.15em;
  position: relative;
  z-index: 1;
}

.liminal-hero .subtitle {
  font-family: 'IBM Plex Mono', monospace;
  font-size: 0.8rem;
  font-weight: 300;
  letter-spacing: 0.08em;
  color: var(--liminal-text-muted);
  margin-top: 2rem;
  max-width: 50ch;
  line-height: 1.8;
  position: relative;
  z-index: 1;
}

.liminal-hero .timestamp {
  font-family: 'IBM Plex Mono', monospace;
  font-size: 0.65rem;
  color: var(--liminal-text-faded);
  letter-spacing: 0.12em;
  text-transform: uppercase;
  margin-top: 3rem;
  position: relative;
  z-index: 1;
}

Noise Texture Overlay

A subtle film grain / noise texture applied via CSS to simulate the degraded visual quality of old photographs, security camera footage, or compressed digital images.

.noise-overlay {
  position: fixed;
  top: -50%;
  left: -50%;
  width: 200%;
  height: 200%;
  pointer-events: none;
  z-index: 999;
  opacity: 0.035;
  background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noise'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noise)'/%3E%3C/svg%3E");
  background-repeat: repeat;
  animation: noise-shift 0.5s steps(10) infinite;
}

@keyframes noise-shift {
  0% { transform: translate(0, 0); }
  10% { transform: translate(-5%, -5%); }
  20% { transform: translate(3%, -8%); }
  30% { transform: translate(-8%, 2%); }
  40% { transform: translate(5%, 5%); }
  50% { transform: translate(-3%, 8%); }
  60% { transform: translate(8%, -2%); }
  70% { transform: translate(-5%, 5%); }
  80% { transform: translate(2%, -5%); }
  90% { transform: translate(-2%, 3%); }
  100% { transform: translate(0, 0); }
}

Corridor Section Divider

A horizontal divider between content sections that suggests a doorway or threshold between rooms – a line of light beneath a closed door.

.corridor-divider {
  width: 100%;
  height: 40px;
  position: relative;
  margin: 0;
  background-color: var(--liminal-carpet-beige);
  overflow: hidden;
}

.corridor-divider::before {
  content: '';
  position: absolute;
  top: 50%;
  left: 10%;
  right: 10%;
  height: 1px;
  background: linear-gradient(
    90deg,
    transparent,
    var(--liminal-backrooms-yellow),
    var(--liminal-blown-white),
    var(--liminal-backrooms-yellow),
    transparent
  );
  opacity: 0.5;
}

.corridor-divider::after {
  content: '';
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  width: 4px;
  height: 4px;
  background: var(--liminal-stain-tan);
  border-radius: 50%;
  box-shadow: 0 0 8px var(--liminal-backrooms-yellow);
  opacity: 0.4;
}

Repeating Room Grid

A grid of identical content modules that creates the unsettling sense of infinite repetition – every room looks the same.

.room-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
  gap: 1px;
  background-color: var(--liminal-border);
  border: 1px solid var(--liminal-border);
}

.room-grid .room {
  background-color: var(--liminal-surface);
  padding: 2.5rem 2rem;
  position: relative;
  transition: background-color 1.2s ease;
}

.room-grid .room::after {
  content: '';
  position: absolute;
  bottom: 0;
  left: 50%;
  transform: translateX(-50%);
  width: 60%;
  height: 1px;
  background: var(--liminal-fluorescent-glow);
}

.room-grid .room:hover {
  background-color: var(--liminal-bg);
}

.room-grid .room-number {
  font-family: 'IBM Plex Mono', monospace;
  font-size: 0.6rem;
  color: var(--liminal-text-faded);
  letter-spacing: 0.2em;
  text-transform: uppercase;
  margin-bottom: 1.5rem;
}

.room-grid .room h3 {
  font-size: 0.95rem;
  letter-spacing: 0.08em;
  margin-bottom: 0.75rem;
}

.room-grid .room p {
  font-size: 0.85rem;
  color: var(--liminal-text-muted);
  line-height: 1.7;
}

Design Do’s and Don’ts

Do

Don’t


Aesthetic Relationship
Dreamcore Shares the surreal, nostalgic unease but amplifies it with more overt visual distortion, saturated color bleed, and explicitly dreamlike imagery; Dreamcore is the dream, Liminal Space is the room you wake up in
Weirdcore A more aggressively distorted cousin that uses heavy image manipulation, text overlays, and glitch effects; where Liminal Space is subtly wrong, Weirdcore is overtly broken
Mallsoft Focuses specifically on the abandoned commercial spaces (malls, food courts, retail) that are a subset of liminal imagery; Mallsoft adds muzak-era nostalgia and consumerist melancholy
Frutiger Aero Represents the optimistic, glossy digital aesthetic of the same 2004-2013 era that Liminal Space renders as eerie and abandoned; they are the same spaces viewed with different emotional filters
Poolcore Isolates the specific liminal quality of empty swimming pools, water parks, and aquatic facilities; a focused branch of the broader Liminal Space family
Vaporwave Shares the nostalgic recontextualization of late-capitalist commercial spaces but aestheticizes them through color saturation and gloss rather than desaturation and decay
Dark Aero A moody, desaturated relative that shares the sense of technological environments without human presence but leans more toward sleek digital interfaces than physical architecture
Brutalist Web Design Both embrace discomfort and reject polished usability, but Brutalism is confrontational and structural while Liminal Space is atmospheric and psychological

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>Liminal Space 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=IBM+Plex+Mono:wght@300;400&family=Inter:wght@300;400;600&family=Roboto+Condensed:wght@300;400;700&display=swap" rel="stylesheet">
  <style>
    /* --- Custom Properties --- */
    :root {
      --liminal-backrooms-yellow: #c8c29d;
      --liminal-cream: #e8e4d0;
      --liminal-carpet-beige: #d4cdb6;
      --liminal-fluorescent-green: #a8b5a2;
      --liminal-corridor-blue: #7a8b8f;
      --liminal-shadow-teal: #4d5a5e;
      --liminal-void: #2c2e33;
      --liminal-blown-white: #f5f0e1;
      --liminal-stain-tan: #b8a88a;
      --liminal-institutional-green: #6b7f5e;
      --liminal-worn-laminate: #8e7c68;
      --liminal-pool-blue: #5c6b8a;
      --liminal-concrete: #9b9880;
      --liminal-linoleum-gold: #d1c4a1;

      --liminal-bg: var(--liminal-cream);
      --liminal-text: var(--liminal-void);
      --liminal-text-muted: var(--liminal-corridor-blue);
      --liminal-text-faded: var(--liminal-concrete);
      --liminal-border: var(--liminal-carpet-beige);
      --liminal-border-strong: var(--liminal-stain-tan);
      --liminal-surface: var(--liminal-blown-white);
      --liminal-fluorescent-glow: rgba(200, 194, 157, 0.15);
      --liminal-shadow-fade: rgba(44, 46, 51, 0.4);
    }

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

    /* --- Base --- */
    body {
      font-family: 'Inter', 'Segoe UI', 'Helvetica Neue', Arial, sans-serif;
      font-size: 16px;
      font-weight: 300;
      line-height: 1.7;
      color: var(--liminal-text);
      background-color: var(--liminal-bg);
      -webkit-font-smoothing: antialiased;
    }

    /* --- Fluorescent Overlay --- */
    .fluorescent-overlay {
      position: fixed;
      top: 0;
      left: 0;
      width: 100%;
      height: 100%;
      pointer-events: none;
      z-index: 1000;
      background: linear-gradient(
        180deg,
        rgba(168, 181, 162, 0.04) 0%,
        rgba(200, 194, 157, 0.06) 50%,
        rgba(168, 181, 162, 0.03) 100%
      );
      animation: fluorescent-flicker 8s ease-in-out infinite;
    }

    @keyframes fluorescent-flicker {
      0%, 100% { opacity: 1; }
      47% { opacity: 1; }
      48% { opacity: 0.92; }
      49% { opacity: 1; }
      72% { opacity: 1; }
      72.5% { opacity: 0.95; }
      73% { opacity: 1; }
    }

    /* --- Noise Overlay --- */
    .noise-overlay {
      position: fixed;
      top: -50%;
      left: -50%;
      width: 200%;
      height: 200%;
      pointer-events: none;
      z-index: 999;
      opacity: 0.03;
      background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noise'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noise)'/%3E%3C/svg%3E");
      animation: noise-shift 0.5s steps(10) infinite;
    }

    @keyframes noise-shift {
      0% { transform: translate(0, 0); }
      20% { transform: translate(-5%, -5%); }
      40% { transform: translate(5%, 5%); }
      60% { transform: translate(-3%, 3%); }
      80% { transform: translate(3%, -3%); }
      100% { transform: translate(0, 0); }
    }

    /* --- Typography --- */
    h1, h2, h3, h4, h5, h6 {
      font-family: 'Roboto Condensed', 'Arial Narrow', sans-serif;
      font-weight: 700;
      text-transform: uppercase;
      letter-spacing: 0.08em;
      line-height: 1.1;
    }

    a {
      color: var(--liminal-pool-blue);
      text-decoration: none;
      border-bottom: 1px solid transparent;
      transition: border-color 0.6s ease, color 0.6s ease;
    }

    a:hover {
      color: var(--liminal-text);
      border-bottom-color: var(--liminal-text-muted);
    }

    /* --- Navigation --- */
    .nav {
      display: flex;
      align-items: center;
      justify-content: space-between;
      padding: 1.25rem 3rem;
      border-bottom: 1px solid var(--liminal-border);
      background-color: var(--liminal-surface);
      position: relative;
    }

    .nav::after {
      content: '';
      position: absolute;
      bottom: 0;
      left: 0;
      right: 0;
      height: 1px;
      background: linear-gradient(90deg, transparent 0%, var(--liminal-backrooms-yellow) 50%, transparent 100%);
      opacity: 0.3;
    }

    .nav .brand {
      font-family: 'Roboto Condensed', sans-serif;
      font-weight: 700;
      font-size: 0.85rem;
      text-transform: uppercase;
      letter-spacing: 0.15em;
      color: var(--liminal-text);
    }

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

    .nav a {
      display: block;
      padding: 0.5rem 1.25rem;
      font-size: 0.7rem;
      font-weight: 400;
      text-transform: uppercase;
      letter-spacing: 0.1em;
      color: var(--liminal-text-muted);
      border-bottom: none;
      transition: color 0.5s ease, background-color 0.5s ease;
    }

    .nav a:hover {
      color: var(--liminal-text);
      background-color: var(--liminal-fluorescent-glow);
    }

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

    .hero::before {
      content: '';
      position: absolute;
      top: 0; left: 0; right: 0; bottom: 0;
      background:
        repeating-linear-gradient(0deg, transparent, transparent 98px, rgba(180,170,140,0.07) 98px, rgba(180,170,140,0.07) 100px),
        repeating-linear-gradient(90deg, transparent, transparent 98px, rgba(180,170,140,0.07) 98px, rgba(180,170,140,0.07) 100px);
      pointer-events: none;
    }

    .hero::after {
      content: '';
      position: absolute;
      top: 0; left: 0; right: 0; bottom: 0;
      background: radial-gradient(ellipse at 50% 40%, rgba(200,194,157,0.1) 0%, transparent 70%);
      pointer-events: none;
    }

    .hero h1 {
      font-size: clamp(3rem, 8vw, 7rem);
      letter-spacing: 0.15em;
      position: relative;
      z-index: 1;
    }

    .hero .subtitle {
      font-family: 'IBM Plex Mono', monospace;
      font-size: 0.8rem;
      font-weight: 300;
      letter-spacing: 0.08em;
      color: var(--liminal-text-muted);
      margin-top: 2rem;
      max-width: 55ch;
      line-height: 1.9;
      position: relative;
      z-index: 1;
    }

    .hero .timestamp {
      font-family: 'IBM Plex Mono', monospace;
      font-size: 0.65rem;
      color: var(--liminal-text-faded);
      letter-spacing: 0.12em;
      text-transform: uppercase;
      margin-top: 3rem;
      position: relative;
      z-index: 1;
    }

    .hero .btn-row {
      margin-top: 2.5rem;
      display: flex;
      flex-wrap: wrap;
      gap: 1rem;
      position: relative;
      z-index: 1;
    }

    /* --- Buttons --- */
    .btn {
      display: inline-block;
      font-family: 'Roboto Condensed', sans-serif;
      font-size: 0.75rem;
      font-weight: 700;
      text-transform: uppercase;
      letter-spacing: 0.12em;
      padding: 0.75rem 2rem;
      border: 1px solid var(--liminal-text-muted);
      background-color: transparent;
      color: var(--liminal-text);
      cursor: pointer;
      text-decoration: none;
      position: relative;
      overflow: hidden;
      transition: all 0.8s ease;
    }

    .btn::before {
      content: '';
      position: absolute;
      top: 0;
      left: -100%;
      width: 100%;
      height: 100%;
      background: var(--liminal-fluorescent-glow);
      transition: left 0.8s ease;
    }

    .btn:hover {
      border-color: var(--liminal-text);
      border-bottom: 1px solid var(--liminal-text);
    }

    .btn:hover::before {
      left: 0;
    }

    .btn--filled {
      background-color: var(--liminal-shadow-teal);
      color: var(--liminal-blown-white);
      border-color: var(--liminal-shadow-teal);
    }

    .btn--filled:hover {
      background-color: var(--liminal-void);
      border-color: var(--liminal-void);
      color: var(--liminal-backrooms-yellow);
    }

    /* --- Corridor Divider --- */
    .corridor-divider {
      width: 100%;
      height: 40px;
      position: relative;
      background-color: var(--liminal-carpet-beige);
      overflow: hidden;
    }

    .corridor-divider::before {
      content: '';
      position: absolute;
      top: 50%;
      left: 10%;
      right: 10%;
      height: 1px;
      background: linear-gradient(90deg, transparent, var(--liminal-backrooms-yellow), var(--liminal-blown-white), var(--liminal-backrooms-yellow), transparent);
      opacity: 0.5;
    }

    /* --- Content Section --- */
    .content-section {
      padding: 5rem 3rem;
      max-width: 900px;
      margin: 0 auto;
    }

    .content-section h2 {
      font-size: clamp(1.5rem, 3.5vw, 2.5rem);
      letter-spacing: 0.1em;
      margin-bottom: 1rem;
    }

    .content-section .section-meta {
      font-family: 'IBM Plex Mono', monospace;
      font-size: 0.65rem;
      color: var(--liminal-text-faded);
      letter-spacing: 0.15em;
      text-transform: uppercase;
      margin-bottom: 2.5rem;
    }

    .content-section p {
      margin-bottom: 1.5rem;
      color: var(--liminal-text-muted);
      max-width: 65ch;
    }

    /* --- Room Grid --- */
    .room-grid {
      display: grid;
      grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
      gap: 1px;
      background-color: var(--liminal-border);
      border: 1px solid var(--liminal-border);
      margin: 3rem 0;
    }

    .room {
      background-color: var(--liminal-surface);
      padding: 2.5rem 2rem;
      position: relative;
      transition: background-color 1.2s ease;
    }

    .room::after {
      content: '';
      position: absolute;
      bottom: 0;
      left: 50%;
      transform: translateX(-50%);
      width: 60%;
      height: 1px;
      background: var(--liminal-fluorescent-glow);
    }

    .room:hover {
      background-color: var(--liminal-bg);
    }

    .room .room-number {
      font-family: 'IBM Plex Mono', monospace;
      font-size: 0.6rem;
      color: var(--liminal-text-faded);
      letter-spacing: 0.2em;
      text-transform: uppercase;
      margin-bottom: 1.5rem;
    }

    .room h3 {
      font-size: 0.95rem;
      letter-spacing: 0.08em;
      margin-bottom: 0.75rem;
    }

    .room p {
      font-size: 0.85rem;
      color: var(--liminal-text-muted);
      line-height: 1.7;
    }

    /* --- Liminal Card --- */
    .card {
      background-color: var(--liminal-surface);
      border: 1px solid var(--liminal-border);
      padding: 2rem;
      margin-bottom: 1.5rem;
      position: relative;
      transition: box-shadow 0.6s ease, border-color 0.6s ease;
    }

    .card::before {
      content: '';
      position: absolute;
      top: 0; left: 0; right: 0;
      height: 3px;
      background: linear-gradient(90deg, var(--liminal-carpet-beige) 0%, var(--liminal-backrooms-yellow) 50%, var(--liminal-carpet-beige) 100%);
      opacity: 0.6;
    }

    .card:hover {
      border-color: var(--liminal-border-strong);
      box-shadow: 0 0 30px var(--liminal-fluorescent-glow);
    }

    .card .card-label {
      font-family: 'IBM Plex Mono', monospace;
      font-size: 0.65rem;
      text-transform: uppercase;
      letter-spacing: 0.15em;
      color: var(--liminal-text-faded);
      margin-bottom: 1rem;
    }

    .card h3 {
      font-size: 1.1rem;
      margin-bottom: 0.75rem;
    }

    .card p {
      color: var(--liminal-text-muted);
      font-size: 0.9rem;
    }

    /* --- System Notice --- */
    .system-notice {
      font-family: 'IBM Plex Mono', monospace;
      font-size: 0.7rem;
      color: var(--liminal-text-faded);
      letter-spacing: 0.06em;
      padding: 1.5rem 3rem;
      border-top: 1px solid var(--liminal-border);
      border-bottom: 1px solid var(--liminal-border);
      background: repeating-linear-gradient(
        90deg,
        transparent 0px,
        transparent 4px,
        rgba(200, 194, 157, 0.03) 4px,
        rgba(200, 194, 157, 0.03) 5px
      );
      text-align: center;
      text-transform: uppercase;
    }

    /* --- Blockquote --- */
    blockquote {
      border-left: 2px solid var(--liminal-border-strong);
      padding: 1rem 1.5rem;
      color: var(--liminal-text-muted);
      font-style: italic;
      background: var(--liminal-fluorescent-glow);
      margin: 2rem 0;
    }

    /* --- Footer --- */
    .footer {
      padding: 3rem;
      text-align: center;
      font-family: 'IBM Plex Mono', monospace;
      font-size: 0.6rem;
      color: var(--liminal-text-faded);
      letter-spacing: 0.15em;
      text-transform: uppercase;
      border-top: 1px solid var(--liminal-border);
      opacity: 0.6;
    }

    /* --- Responsive --- */
    @media (max-width: 768px) {
      .nav {
        flex-direction: column;
        gap: 1rem;
        padding: 1rem 1.5rem;
      }

      .nav ul {
        flex-wrap: wrap;
        justify-content: center;
      }

      .hero {
        padding: 3rem 1.5rem;
        min-height: 90vh;
      }

      .hero h1 {
        letter-spacing: 0.08em;
      }

      .content-section {
        padding: 3rem 1.5rem;
      }

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

      .system-notice {
        padding: 1rem 1.5rem;
        font-size: 0.6rem;
      }
    }
  </style>
</head>
<body>

  <!-- Atmospheric overlays -->
  <div class="fluorescent-overlay"></div>
  <div class="noise-overlay"></div>

  <!-- Navigation -->
  <nav class="nav">
    <div class="brand">Level 0</div>
    <ul>
      <li><a href="#threshold">Threshold</a></li>
      <li><a href="#rooms">Rooms</a></li>
      <li><a href="#corridors">Corridors</a></li>
      <li><a href="#notices">Notices</a></li>
    </ul>
  </nav>

  <!-- Hero -->
  <section class="hero" id="threshold">
    <h1>You have been<br>here before</h1>
    <p class="subtitle">
      A place between places. Not a destination but a passage --
      the hallway you walk through without noticing, the room
      you remember but cannot find on any floor plan.
      Somewhere the lights are still on.
    </p>
    <p class="timestamp">Facility status: nominal &mdash; Sector 7-G &mdash; Last inspection: unknown</p>
    <div class="btn-row">
      <a href="#rooms" class="btn">Enter</a>
      <a href="#corridors" class="btn btn--filled">Continue</a>
    </div>
  </section>

  <!-- Corridor Divider -->
  <div class="corridor-divider"></div>

  <!-- Content Section -->
  <section class="content-section" id="corridors">
    <p class="section-meta">Section 02 // Corridor B-14 // Status: Unoccupied</p>
    <h2>The Space Between</h2>
    <p>
      These are the rooms that exist in the margins of architecture. Designed for
      passage, not permanence. You were never meant to stay here, yet the fluorescent
      lights remain on. The carpet is the same in every direction.
    </p>
    <p>
      The hum of the building systems is the only confirmation that time continues to
      pass. Every door leads to another corridor. Every corridor leads to another room
      identical to the last.
    </p>

    <blockquote>
      You are in a place that was built for thousands and occupied by no one.
      The architecture remembers a purpose you have forgotten.
    </blockquote>

    <!-- Cards -->
    <div class="card">
      <div class="card-label">Notice 2019-04-27 // Classification: Ambient</div>
      <h3>Temporal Displacement Protocol</h3>
      <p>
        If you find yourself in a space you recognize but cannot place, do not
        attempt to retrace your steps. Proceed forward. The exit is always ahead,
        never behind.
      </p>
    </div>

    <div class="card">
      <div class="card-label">Notice 2003-11-15 // Classification: Environmental</div>
      <h3>Fluorescent Maintenance Schedule</h3>
      <p>
        All overhead lighting units in Sectors 4 through 9 are scheduled for
        replacement. Current estimated completion date has been deferred indefinitely.
        Report any flickering to facilities management.
      </p>
    </div>
  </section>

  <!-- System Notice -->
  <div class="system-notice">
    Automated system &mdash; No personnel required &mdash; Monitoring active &mdash; Do not adjust environmental controls
  </div>

  <!-- Room Grid -->
  <section style="padding: 3rem;" id="rooms">
    <div class="room-grid">
      <div class="room">
        <div class="room-number">Room 001</div>
        <h3>Reception Area</h3>
        <p>A desk with no chair. A sign-in sheet with no names. The pen is attached to a chain that leads nowhere.</p>
      </div>
      <div class="room">
        <div class="room-number">Room 002</div>
        <h3>Waiting Room</h3>
        <p>Magazines from a year that may not have happened. The clock on the wall has no hands. Your appointment was scheduled for always.</p>
      </div>
      <div class="room">
        <div class="room-number">Room 003</div>
        <h3>Pool Level</h3>
        <p>The water is still. The diving board casts a shadow with no source. The lifeguard chair faces the wrong direction.</p>
      </div>
      <div class="room">
        <div class="room-number">Room 004</div>
        <h3>Food Court</h3>
        <p>Every restaurant is open. Every menu is the same. The trays on the conveyor belt circle endlessly, carrying nothing.</p>
      </div>
      <div class="room">
        <div class="room-number">Room 005</div>
        <h3>Stairwell B</h3>
        <p>The stairs go up. The stairs also go up. The floor numbers increment by values that are not quite one.</p>
      </div>
      <div class="room">
        <div class="room-number">Room 006</div>
        <h3>Corridor East</h3>
        <p>This hallway is three hundred meters long and contains forty-two identical doors. None of them are locked. All of them open to this hallway.</p>
      </div>
    </div>
  </section>

  <!-- Another divider -->
  <div class="corridor-divider"></div>

  <!-- Final section -->
  <section class="content-section" id="notices">
    <p class="section-meta">Section 04 // Terminal Output // Last Modified: --/--/----</p>
    <h2>Notices</h2>
    <p>
      This facility operates on a maintenance cycle of indeterminate length. All
      systems are functioning within expected parameters. If you are reading this,
      environmental conditions in your sector are stable.
    </p>
    <p>
      There is no cause for concern. Proceed to the nearest exit. The exit is
      located at the end of the corridor. The corridor continues.
    </p>
    <div style="margin-top: 2rem;">
      <a href="#threshold" class="btn">Return to threshold</a>
    </div>
  </section>

  <!-- Footer (deliberately minimal) -->
  <footer class="footer">
    Sector 7-G &mdash; Sublevel -- &mdash; Facility management system v0.0.1 &mdash; Status: operational
  </footer>

</body>
</html>