website_designs

PC-98 Aesthetic – Design Reference

PC-98 is an aesthetic originating from the NEC PC-9800 series of personal computers, dominant in Japan from the early 1980s to the late 1990s. The visual style is most closely associated with visual novels and eroge of the era, characterized by high-resolution pixel art (640x400), severely limited color palettes (16-256 colors from a 4096-color bank), and meticulous dithering techniques that create the illusion of depth and gradient with minimal colors. Artists placed pixels individually, exploiting dithering patterns to simulate smooth shading, soft skin tones, and atmospheric lighting within extreme technical constraints. The result is a uniquely warm, intimate, and melancholic visual language distinct from both Western pixel art and later anime CG.


Visual Characteristics


Color Palette

The PC-98 palette is defined by careful selection from a limited bank, with dithering used to extend perceived range:

Suggested Implementation Palette

Based on characteristic PC-98 visual novel color selections:

Role Color Hex
Background Dark Deep Navy #1A1028
Background Mid Dusty Indigo #2D2240
Surface Warm Charcoal #3A2E4A
Surface Light Muted Mauve #584870
Primary Text Cream #E8D8C8
Secondary Text Soft Lavender #C0A8D0
Accent Warm Rose Pink #D87890
Accent Soft Peach #E8A888
Accent Cool Slate Teal #689098
Highlight Pale Gold #F0D890
Border Ornate Antique Bronze #987858
Border Light Dusty Rose #B89088
Shadow Deep Purple #180820
Sky Gradient Top Faded Violet #6848A0
Sky Gradient Low Sunset Peach #E8A070
Foliage Muted Olive #608050

Dithered Gradient Simulation Palette

For simulating the PC-98 dithering effect in CSS, these pairs work well when alternated:

Gradient Effect Color A Color B
Skin tone #E8B890 #D09078
Hair highlight #F0D0E0 #B07898
Evening sky #6848A0 #D88868
Shadow on fabric #584870 #3A2E4A
Water/pool #4878A0 #68A8B8

Suggested CSS Custom Properties

:root {
  /* Backgrounds */
  --pc98-bg-dark: #1A1028;
  --pc98-bg-mid: #2D2240;
  --pc98-bg-surface: #3A2E4A;
  --pc98-bg-surface-light: #584870;

  /* Text */
  --pc98-text-primary: #E8D8C8;
  --pc98-text-secondary: #C0A8D0;
  --pc98-text-muted: #887898;

  /* Accents */
  --pc98-accent-rose: #D87890;
  --pc98-accent-peach: #E8A888;
  --pc98-accent-teal: #689098;
  --pc98-accent-gold: #F0D890;
  --pc98-accent-lavender: #A080C0;

  /* Borders and ornamental */
  --pc98-border-bronze: #987858;
  --pc98-border-rose: #B89088;
  --pc98-border-dark: #483858;

  /* Shadows */
  --pc98-shadow: #180820;
  --pc98-shadow-soft: rgba(24, 8, 32, 0.6);

  /* Atmospheric */
  --pc98-sky-violet: #6848A0;
  --pc98-sky-peach: #E8A070;
  --pc98-foliage: #608050;

  /* Functional mappings */
  --pc98-bg-primary: var(--pc98-bg-dark);
  --pc98-bg-secondary: var(--pc98-bg-mid);
  --pc98-bg-card: var(--pc98-bg-surface);
  --pc98-text-heading: var(--pc98-accent-gold);
  --pc98-text-body: var(--pc98-text-primary);
  --pc98-accent-primary: var(--pc98-accent-rose);
  --pc98-accent-secondary: var(--pc98-accent-teal);
  --pc98-border: var(--pc98-border-bronze);
}

Typography

Typeface Characteristics

PC-98 typography reflects the constraints of rendering complex Japanese characters on a 640x400 pixel grid:

Font Style Usage
M PLUS 1 Code Japanese-supporting monospace Primary text, dialog boxes – authentic CJK pixel feel at small sizes
Noto Sans JP Clean Japanese sans-serif Body text, dialog, readable Japanese
DotGothic16 Japanese pixel/dot-matrix style Authentic retro Japanese text feel (Google Fonts)
Press Start 2P Pixel Latin font English headings, UI labels
Silkscreen Clean pixel font Small UI text, status labels
VT323 Monospace terminal pixel font Terminal-style text, data displays
Kosugi Maru Rounded Japanese pixel font Softer UI text, friendly labels

Typography CSS Example

@import url('https://fonts.googleapis.com/css2?family=DotGothic16&family=M+PLUS+1+Code:wght@400;700&family=Press+Start+2P&family=VT323&display=swap');

/* Primary body text -- clean, readable, retro feel */
body {
  font-family: 'M PLUS 1 Code', 'DotGothic16', monospace;
  font-size: 16px;
  line-height: 1.8;
  letter-spacing: 0.02em;
  color: var(--pc98-text-primary);
  image-rendering: pixelated;
}

/* Headings -- pixel font, warm gold */
h1, h2, h3 {
  font-family: 'Press Start 2P', 'DotGothic16', monospace;
  color: var(--pc98-accent-gold);
  text-shadow: 2px 2px 0px var(--pc98-shadow);
  letter-spacing: 0.05em;
  line-height: 1.6;
}

h1 {
  font-size: clamp(1.2rem, 3vw, 2rem);
}

h2 {
  font-size: clamp(0.9rem, 2vw, 1.4rem);
  color: var(--pc98-accent-rose);
}

/* Dialog box text -- the core visual novel element */
.pc98-dialog {
  font-family: 'M PLUS 1 Code', 'DotGothic16', monospace;
  font-size: 15px;
  line-height: 2;
  color: var(--pc98-text-primary);
  text-shadow: 1px 1px 0px rgba(0, 0, 0, 0.5);
}

/* Character name label */
.pc98-name {
  font-family: 'Press Start 2P', monospace;
  font-size: 0.7rem;
  color: var(--pc98-accent-gold);
  letter-spacing: 0.1em;
  text-transform: uppercase;
}

/* Small UI labels (date, time, status) */
.pc98-label {
  font-family: 'VT323', 'Press Start 2P', monospace;
  font-size: 0.85rem;
  color: var(--pc98-accent-peach);
  letter-spacing: 0.05em;
}

/* Monospace data display */
.pc98-mono {
  font-family: 'VT323', monospace;
  font-size: 1rem;
  color: var(--pc98-accent-teal);
}

Key Design Elements and Motifs

Ornate Decorative Borders

The defining UI element of PC-98 games – elaborate frames surrounding the main viewport:

Dialog Box

Status Panels

Dithering Patterns

The visual signature of the PC-98 aesthetic – used everywhere to simulate gradients:

Character Art

Background Environments


Layout Principles

Modern Web Adaptation


CSS/Design Techniques

Dithering Pattern (CSS Simulation)

/* Checkerboard dither pattern -- the signature PC-98 texture */
.pc98-dither {
  background-image:
    linear-gradient(45deg,
      var(--pc98-bg-surface) 25%, transparent 25%,
      transparent 75%, var(--pc98-bg-surface) 75%
    ),
    linear-gradient(45deg,
      var(--pc98-bg-surface) 25%, transparent 25%,
      transparent 75%, var(--pc98-bg-surface) 75%
    );
  background-size: 4px 4px;
  background-position: 0 0, 2px 2px;
  background-color: var(--pc98-bg-mid);
}

/* Finer dither for subtle transitions */
.pc98-dither--fine {
  background-size: 2px 2px;
  background-position: 0 0, 1px 1px;
}

/* Horizontal line dither */
.pc98-dither--lines {
  background-image: repeating-linear-gradient(
    to bottom,
    var(--pc98-bg-surface) 0px,
    var(--pc98-bg-surface) 1px,
    var(--pc98-bg-mid) 1px,
    var(--pc98-bg-mid) 2px
  );
}

Ornate Border Frame

/* Main viewport frame mimicking PC-98 decorative borders */
.pc98-frame {
  border: 3px solid var(--pc98-border-bronze);
  box-shadow:
    inset 0 0 0 1px var(--pc98-border-dark),
    inset 0 0 0 4px var(--pc98-bg-surface),
    inset 0 0 0 5px var(--pc98-border-rose),
    0 0 0 1px var(--pc98-border-dark),
    0 0 0 4px var(--pc98-bg-surface-light),
    0 0 0 5px var(--pc98-border-bronze);
  background: var(--pc98-bg-dark);
}

/* Simpler inner frame for content sections */
.pc98-frame--inner {
  border: 2px solid var(--pc98-border-bronze);
  box-shadow:
    inset 0 0 0 1px var(--pc98-border-dark),
    inset 0 0 0 3px var(--pc98-bg-surface);
  padding: 1.5rem;
}

/* Decorative corner accents */
.pc98-frame--corners {
  position: relative;
  border: 2px solid var(--pc98-border-bronze);
  padding: 2rem;
}

.pc98-frame--corners::before,
.pc98-frame--corners::after {
  content: '';
  position: absolute;
  width: 12px;
  height: 12px;
  border-color: var(--pc98-accent-gold);
  border-style: solid;
}

.pc98-frame--corners::before {
  top: 4px;
  left: 4px;
  border-width: 2px 0 0 2px;
}

.pc98-frame--corners::after {
  bottom: 4px;
  right: 4px;
  border-width: 0 2px 2px 0;
}

Dialog Box

/* Classic PC-98 visual novel dialog box */
.pc98-dialog-box {
  background: rgba(0, 0, 0, 0.92);
  border: 2px solid var(--pc98-border-bronze);
  padding: 1.2rem 1.5rem;
  position: relative;
  box-shadow:
    inset 0 0 0 1px var(--pc98-border-dark),
    0 -2px 8px var(--pc98-shadow-soft);
}

/* Character name plate */
.pc98-dialog-box .name-plate {
  position: absolute;
  top: -14px;
  left: 16px;
  background: var(--pc98-bg-dark);
  border: 1px solid var(--pc98-border-bronze);
  padding: 2px 12px;
  font-family: 'Press Start 2P', monospace;
  font-size: 0.65rem;
  color: var(--pc98-accent-gold);
  letter-spacing: 0.08em;
}

/* Typewriter text reveal animation */
@keyframes pc98-typewriter {
  from { width: 0; }
  to { width: 100%; }
}

.pc98-dialog-box .text-reveal {
  overflow: hidden;
  white-space: nowrap;
  animation: pc98-typewriter 2s steps(40) forwards;
}

CRT / PC-98 Monitor Effect

/* Simulate the CRT softening that made dithering look like smooth gradients */
.pc98-crt {
  position: relative;
}

/* Subtle scanline overlay */
.pc98-crt::after {
  content: '';
  position: absolute;
  inset: 0;
  background: repeating-linear-gradient(
    to bottom,
    transparent 0px,
    transparent 2px,
    rgba(0, 0, 0, 0.08) 2px,
    rgba(0, 0, 0, 0.08) 4px
  );
  pointer-events: none;
  z-index: 100;
}

/* CRT screen curvature and vignette */
.pc98-monitor {
  border-radius: 8px;
  box-shadow:
    inset 0 0 80px rgba(24, 8, 32, 0.4),
    inset 0 0 20px rgba(24, 8, 32, 0.2),
    0 0 30px rgba(104, 72, 160, 0.08);
}

/* Slight warm color cast (PC-98 monitors had warm tint) */
.pc98-warm-cast {
  filter: sepia(0.05) saturate(1.1) brightness(0.98);
}

Pixel-Perfect Rendering

/* Prevent browser smoothing on scaled pixel art */
img, canvas {
  image-rendering: pixelated;
  image-rendering: crisp-edges;
}

/* Snap to pixel grid */
.pc98-pixel-snap {
  transform: translateZ(0);
  will-change: transform;
}

Gradient Sky (Dithered Simulation)

/* Simulated PC-98 sunset sky with stepped dither-like gradient */
.pc98-sky {
  background: linear-gradient(
    to bottom,
    var(--pc98-sky-violet) 0%,
    var(--pc98-sky-violet) 15%,
    #8860B0 25%,
    #B07898 40%,
    #D08878 55%,
    var(--pc98-sky-peach) 70%,
    #E8C080 85%,
    var(--pc98-accent-gold) 100%
  );
}

/* Stepped gradient (discrete color bands instead of smooth) */
.pc98-sky--stepped {
  background: linear-gradient(
    to bottom,
    var(--pc98-sky-violet) 0%, var(--pc98-sky-violet) 16.6%,
    #8860B0 16.6%, #8860B0 33.3%,
    #B07898 33.3%, #B07898 50%,
    #D08878 50%, #D08878 66.6%,
    var(--pc98-sky-peach) 66.6%, var(--pc98-sky-peach) 83.3%,
    var(--pc98-accent-gold) 83.3%, var(--pc98-accent-gold) 100%
  );
}

Status Panel UI Elements

/* Date/time display panel */
.pc98-status-panel {
  display: inline-flex;
  align-items: center;
  gap: 0.5rem;
  background: var(--pc98-bg-dark);
  border: 1px solid var(--pc98-border-bronze);
  padding: 4px 10px;
  font-family: 'VT323', monospace;
  font-size: 1rem;
  color: var(--pc98-accent-peach);
}

/* Segmented display numbers (money, stats) */
.pc98-segment-display {
  font-family: 'Press Start 2P', monospace;
  font-size: 0.75rem;
  color: var(--pc98-accent-teal);
  background: #0A0818;
  border: 1px solid var(--pc98-border-dark);
  padding: 4px 8px;
  letter-spacing: 0.15em;
  text-shadow: 0 0 4px rgba(104, 144, 152, 0.4);
}

Decorative Floral Border (CSS-Only Approximation)

/* Ornamental sidebar column -- simplified version of PC-98 decorative borders */
.pc98-sidebar-ornament {
  width: 60px;
  background:
    repeating-linear-gradient(
      to bottom,
      var(--pc98-border-bronze) 0px,
      var(--pc98-border-bronze) 2px,
      var(--pc98-bg-surface) 2px,
      var(--pc98-bg-surface) 18px,
      var(--pc98-border-bronze) 18px,
      var(--pc98-border-bronze) 20px,
      var(--pc98-bg-surface-light) 20px,
      var(--pc98-bg-surface-light) 40px
    );
  border-left: 3px solid var(--pc98-border-bronze);
  border-right: 3px solid var(--pc98-border-bronze);
  box-shadow:
    inset 2px 0 0 var(--pc98-border-dark),
    inset -2px 0 0 var(--pc98-border-dark);
}

/* Diamond/rosette repeating motif for border decoration */
.pc98-border-pattern {
  background-image:
    radial-gradient(circle at 50% 50%,
      var(--pc98-accent-rose) 2px,
      transparent 2px
    ),
    radial-gradient(circle at 0% 50%,
      var(--pc98-border-bronze) 1px,
      transparent 1px
    ),
    radial-gradient(circle at 100% 50%,
      var(--pc98-border-bronze) 1px,
      transparent 1px
    );
  background-size: 20px 20px;
  background-color: var(--pc98-bg-surface);
}

Card / Content Panel

/* PC-98 styled content card */
.pc98-card {
  background: var(--pc98-bg-surface);
  border: 2px solid var(--pc98-border-bronze);
  padding: 2rem;
  position: relative;
  box-shadow:
    inset 0 0 0 1px var(--pc98-border-dark),
    inset 0 0 20px rgba(24, 8, 32, 0.3),
    4px 4px 0px var(--pc98-shadow);
}

/* Hover: warm glow */
.pc98-card:hover {
  border-color: var(--pc98-accent-rose);
  box-shadow:
    inset 0 0 0 1px var(--pc98-border-dark),
    inset 0 0 20px rgba(24, 8, 32, 0.3),
    0 0 12px rgba(216, 120, 144, 0.15),
    4px 4px 0px var(--pc98-shadow);
  transition: all 0.3s ease;
}

Button

/* PC-98 styled button */
.pc98-button {
  display: inline-block;
  padding: 0.5rem 1.8rem;
  background: var(--pc98-bg-surface);
  border: 2px solid var(--pc98-border-bronze);
  color: var(--pc98-accent-gold);
  font-family: 'Press Start 2P', 'DotGothic16', monospace;
  font-size: 0.7rem;
  letter-spacing: 0.08em;
  text-decoration: none;
  cursor: pointer;
  box-shadow:
    2px 2px 0px var(--pc98-shadow),
    inset 0 0 0 1px var(--pc98-border-dark);
  transition: all 0.15s steps(2);
}

.pc98-button:hover {
  background: var(--pc98-bg-surface-light);
  border-color: var(--pc98-accent-gold);
  color: var(--pc98-text-primary);
  box-shadow:
    1px 1px 0px var(--pc98-shadow),
    inset 0 0 0 1px var(--pc98-border-dark);
  transform: translate(1px, 1px);
}

.pc98-button:active {
  box-shadow:
    0 0 0 var(--pc98-shadow),
    inset 0 0 0 1px var(--pc98-border-dark);
  transform: translate(2px, 2px);
}

Materials and Textures (Visual Metaphors for Web)

Physical / Game Reference Web Equivalent
Dithered pixel gradients CSS checkerboard background-image patterns with two alternating colors at 2-4px scale
Ornate Art Nouveau border columns Multi-layered box-shadow frames, repeating background-image patterns, CSS border-image
Stained-glass border panels radial-gradient and linear-gradient patterns in border sidebars with warm jewel tones
CRT monitor softening Subtle scanline overlay via repeating-linear-gradient, slight filter: blur(0.3px)
Pixel art character portraits Scaled pixel art images with image-rendering: pixelated, or SVG pixel art
Dark dialog box overlay Semi-transparent black (rgba(0,0,0,0.92)) panels with thin colored borders
Segmented number displays Monospace pixel fonts with subtle text-shadow glow
Bronze/gold metallic UI trim Warm brown/gold border colors with subtle box-shadow for depth
Atmospheric sunset skies Multi-stop linear-gradient with stepped (non-smooth) color bands

Imagery and Visual Content Guidelines

When creating or sourcing imagery for a PC-98 styled site:


Aesthetic Relationship to PC-98
8-Bit Earlier generation; PC-98 is far more detailed with higher resolution and more colors, but shares pixel art foundation
Animecore Overlapping visual language; PC-98 is the pixel-art-era predecessor of digital anime aesthetics
Cassette Futurism Shares retro-tech nostalgia and 1980s-90s Japanese computing culture
Cyberpunk Some PC-98 games (Policenauts, Night Slave) share cyberpunk themes and neon-accented visuals
Future Funk Borrows PC-98 and city pop era imagery for nostalgic Japanese retro-futurism
Heisei Retro PC-98 is a core artifact of Heisei-era (1989-2019) Japanese media culture
Lo-fi Shares melancholic, low-fidelity, nostalgic mood; PC-98 screenshots are common lo-fi visual elements
Pixel UI Western parallel development of pixel-based interface design during the same era
Retrofuturism PC-98 represents a Japanese branch of retro computing culture
Vaporwave Heavily draws from PC-98 limited palettes and nostalgic Japanese computing imagery

Implementation Notes


Quick-Start: Minimal PC-98 Page Template

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>PC-98 Page</title>
  <link href="https://fonts.googleapis.com/css2?family=DotGothic16&family=M+PLUS+1+Code:wght@400;700&family=Press+Start+2P&family=VT323&display=swap" rel="stylesheet">
  <style>
    :root {
      --pc98-bg-dark: #1A1028;
      --pc98-bg-mid: #2D2240;
      --pc98-bg-surface: #3A2E4A;
      --pc98-bg-surface-light: #584870;
      --pc98-text-primary: #E8D8C8;
      --pc98-text-secondary: #C0A8D0;
      --pc98-accent-rose: #D87890;
      --pc98-accent-peach: #E8A888;
      --pc98-accent-teal: #689098;
      --pc98-accent-gold: #F0D890;
      --pc98-border-bronze: #987858;
      --pc98-border-dark: #483858;
      --pc98-shadow: #180820;
    }

    * { margin: 0; padding: 0; box-sizing: border-box; }

    body {
      background: var(--pc98-bg-dark);
      color: var(--pc98-text-primary);
      font-family: 'M PLUS 1 Code', 'DotGothic16', monospace;
      font-size: 16px;
      line-height: 1.8;
      min-height: 100vh;
      overflow-x: hidden;
      image-rendering: pixelated;
    }

    /* Page frame with ornate borders */
    .pc98-page {
      max-width: 960px;
      margin: 2rem auto;
      display: grid;
      grid-template-columns: 50px 1fr 50px;
      grid-template-rows: auto 1fr auto;
      min-height: 90vh;
    }

    /* Decorative side borders */
    .pc98-border-left,
    .pc98-border-right {
      background:
        repeating-linear-gradient(
          to bottom,
          var(--pc98-border-bronze) 0px, var(--pc98-border-bronze) 2px,
          var(--pc98-bg-surface) 2px, var(--pc98-bg-surface) 18px,
          var(--pc98-border-bronze) 18px, var(--pc98-border-bronze) 20px,
          var(--pc98-bg-surface-light) 20px, var(--pc98-bg-surface-light) 40px
        );
      border: 2px solid var(--pc98-border-bronze);
    }

    .pc98-border-left {
      grid-column: 1;
      grid-row: 1 / -1;
      border-right: 3px solid var(--pc98-border-bronze);
    }

    .pc98-border-right {
      grid-column: 3;
      grid-row: 1 / -1;
      border-left: 3px solid var(--pc98-border-bronze);
    }

    /* Main content viewport */
    .pc98-viewport {
      grid-column: 2;
      grid-row: 1 / 3;
      background: var(--pc98-bg-mid);
      padding: 3rem 2.5rem;
      position: relative;
      border-top: 2px solid var(--pc98-border-bronze);
    }

    /* Dithered background texture */
    .pc98-viewport::before {
      content: '';
      position: absolute;
      inset: 0;
      background-image:
        linear-gradient(45deg,
          var(--pc98-bg-surface) 25%, transparent 25%,
          transparent 75%, var(--pc98-bg-surface) 75%
        ),
        linear-gradient(45deg,
          var(--pc98-bg-surface) 25%, transparent 25%,
          transparent 75%, var(--pc98-bg-surface) 75%
        );
      background-size: 4px 4px;
      background-position: 0 0, 2px 2px;
      opacity: 0.15;
      pointer-events: none;
    }

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

    /* Hero heading */
    .pc98-viewport h1 {
      font-family: 'Press Start 2P', monospace;
      font-size: clamp(1rem, 2.5vw, 1.6rem);
      color: var(--pc98-accent-gold);
      text-shadow: 2px 2px 0px var(--pc98-shadow);
      margin-bottom: 1.5rem;
      letter-spacing: 0.05em;
      line-height: 1.8;
    }

    .pc98-viewport h2 {
      font-family: 'Press Start 2P', monospace;
      font-size: clamp(0.7rem, 1.8vw, 1rem);
      color: var(--pc98-accent-rose);
      text-shadow: 1px 1px 0px var(--pc98-shadow);
      margin: 2rem 0 1rem;
      letter-spacing: 0.04em;
      line-height: 1.8;
    }

    p {
      margin-bottom: 1rem;
      color: var(--pc98-text-secondary);
    }

    /* Dialog box at bottom */
    .pc98-dialog-box {
      grid-column: 2;
      grid-row: 3;
      background: rgba(0, 0, 0, 0.92);
      border: 2px solid var(--pc98-border-bronze);
      padding: 1.2rem 1.5rem;
      position: relative;
    }

    .pc98-dialog-box .name-plate {
      position: absolute;
      top: -12px;
      left: 16px;
      background: var(--pc98-bg-dark);
      border: 1px solid var(--pc98-border-bronze);
      padding: 2px 12px;
      font-family: 'Press Start 2P', monospace;
      font-size: 0.6rem;
      color: var(--pc98-accent-gold);
      letter-spacing: 0.08em;
    }

    .pc98-dialog-box p {
      color: var(--pc98-text-primary);
      font-size: 14px;
      line-height: 2;
      margin: 0;
    }

    /* Status bar */
    .pc98-status {
      display: flex;
      justify-content: space-between;
      margin-top: 0.8rem;
    }

    .pc98-status span {
      font-family: 'VT323', monospace;
      font-size: 0.9rem;
      color: var(--pc98-accent-teal);
    }

    /* Scanline overlay */
    .pc98-scanlines {
      position: fixed;
      inset: 0;
      background: repeating-linear-gradient(
        to bottom,
        transparent 0px,
        transparent 2px,
        rgba(0, 0, 0, 0.06) 2px,
        rgba(0, 0, 0, 0.06) 4px
      );
      pointer-events: none;
      z-index: 9999;
    }

    /* Card styling */
    .pc98-card {
      background: var(--pc98-bg-surface);
      border: 2px solid var(--pc98-border-bronze);
      padding: 1.5rem;
      margin: 1.5rem 0;
      box-shadow:
        inset 0 0 0 1px var(--pc98-border-dark),
        3px 3px 0px var(--pc98-shadow);
    }

    .mono {
      font-family: 'VT323', monospace;
      color: var(--pc98-accent-teal);
      font-size: 0.95rem;
    }
  </style>
</head>
<body>
  <div class="pc98-scanlines"></div>
  <div class="pc98-page">
    <div class="pc98-border-left"></div>
    <div class="pc98-viewport">
      <h1>Title Here</h1>
      <div class="pc98-card">
        <h2>Section Heading</h2>
        <p>Content styled with the PC-98 aesthetic -- warm pastels, dithered textures, ornate borders, and the intimate atmosphere of 1990s Japanese visual novels.</p>
        <p class="mono">STATUS: OPERATIONAL // COLORS: 16</p>
      </div>
    </div>
    <div class="pc98-border-right"></div>
    <div class="pc98-dialog-box">
      <span class="name-plate">NARRATOR</span>
      <p>The screen glows softly in the dim room. Each pixel placed with care, each color chosen from a palette of just sixteen...</p>
      <div class="pc98-status">
        <span>AUG.12 Tue</span>
        <span>PM 3:15</span>
      </div>
    </div>
  </div>
</body>
</html>