website_designs

Terminal / CLI Aesthetic - Design Reference

The Terminal / CLI Aesthetic is a web design style rooted in the visual language of command-line interfaces, text-based computing, and early CRT monitor displays. It celebrates the raw, utilitarian beauty of monospaced type rendered on dark screens – green phosphor on black, amber characters glowing against the void, blinking cursors awaiting input. The aesthetic draws from Unix terminals, DOS prompts, mainframe consoles, and the hacker culture immortalized in films like WarGames and The Matrix. In modern web design, it translates to stark monochrome palettes, rigid grid structures dictated by character cells, simulated CRT scan lines, phosphor glow effects, and interfaces that feel like they could process a shell command. It is simultaneously retro and timeless, appealing to developers, security professionals, and anyone who finds elegance in the unadorned logic of the command line.


Visual Characteristics

Core Design Traits

Design Principles


Color Palette

Phosphor Terminal Palette

Color Name Hex Role / Usage
Terminal Black #0C0C0C Primary background, deepest terminal void
Soft Black #1A1A1A Elevated panels, secondary surfaces, card backgrounds
Dark Gray #2D2D2D Borders, dividers, inactive UI elements
Matrix Green #00FF41 Primary accent, command output text, success states
Phosphor Green #33FF33 Headings, highlighted text, active elements with glow
Dim Green #0A6E0A Secondary text, comments, muted information
Amber Phosphor #FFB000 Alternate terminal theme, warnings, emphasis
Bright Amber #FFCC00 Highlighted amber elements, active prompts
CRT White #CCCCCC White phosphor theme text, neutral body copy
Bright White #F0F0F0 High-emphasis text, headings in white-phosphor mode
Error Red #FF3333 Error messages, fatal output, STDERR text
Cyan Accent #00CCCC Links, interactive elements, info-level messages
Pale Blue #5C5CFF Directory listings, special file types, decorative
Magenta #CC00CC Syntax highlighting, prompt decorations
Scanline Tint rgba(0,255,65,0.03) CRT scan line overlay color
Glow Halo rgba(0,255,65,0.4) Text-shadow and box-shadow glow spread

CSS Custom Properties

:root {
  /* Backgrounds */
  --term-bg-primary: #0c0c0c;
  --term-bg-secondary: #1a1a1a;
  --term-bg-elevated: #2d2d2d;

  /* Green phosphor theme */
  --term-green: #00ff41;
  --term-green-bright: #33ff33;
  --term-green-dim: #0a6e0a;

  /* Amber phosphor theme */
  --term-amber: #ffb000;
  --term-amber-bright: #ffcc00;

  /* White phosphor theme */
  --term-white: #cccccc;
  --term-white-bright: #f0f0f0;

  /* ANSI-style accents */
  --term-red: #ff3333;
  --term-cyan: #00cccc;
  --term-blue: #5c5cff;
  --term-magenta: #cc00cc;

  /* Glow effects (text-shadow / box-shadow) */
  --term-glow-green: 0 0 5px rgba(0, 255, 65, 0.4), 0 0 20px rgba(0, 255, 65, 0.1);
  --term-glow-amber: 0 0 5px rgba(255, 176, 0, 0.4), 0 0 20px rgba(255, 176, 0, 0.1);
  --term-glow-white: 0 0 5px rgba(204, 204, 204, 0.3), 0 0 15px rgba(204, 204, 204, 0.08);

  /* Borders */
  --term-border: 1px solid #2d2d2d;
  --term-border-green: 1px solid rgba(0, 255, 65, 0.25);

  /* Scanline */
  --term-scanline-color: rgba(0, 255, 65, 0.03);
  --term-scanline-size: 2px;
}

Typography

Typeface Characteristics

Terminal / CLI typography is defined by absolute uniformity and mechanical precision:

Font Style Best For
Fira Code Monospace with ligatures Code blocks, technical content, developer-facing text
IBM Plex Mono Clean, corporate monospace Body text, readable terminal output, professional tone
Source Code Pro Adobe’s coding font, crisp Body text, all-purpose terminal content
JetBrains Mono Modern developer monospace Code-heavy layouts, IDE-inspired interfaces
Space Mono Retro-futuristic monospace Headlines, editorial terminal layouts
Share Tech Mono Compact, techy Data readouts, dashboards, compact displays
VT323 Pixel/bitmap CRT style Decorative headings, retro authenticity, ASCII art
Press Start 2P 8-bit pixel font Nostalgic accents, game-inspired terminal themes
Courier Prime Refined Courier Classic typewriter-terminal hybrid, literary tone
Ubuntu Mono Humanist monospace Friendly terminal tone, Linux-themed projects
Roboto Mono Geometric, balanced Neutral modern terminal, UI labels

Font Pairing Suggestions

Heading Font Body Font Character
VT323 (400) Fira Code (400) Retro CRT headings with modern readable body
Space Mono (700) IBM Plex Mono (400) Editorial hacker aesthetic, polished
Share Tech Mono (400) Source Code Pro (400) Compact tech dashboard, data-dense
Press Start 2P (400) VT323 (400) Full retro pixel aesthetic, nostalgic
JetBrains Mono (700) JetBrains Mono (400) Pure developer tool, IDE-inspired
Courier Prime (700) IBM Plex Mono (400) Literary-meets-technical, sophisticated

Typography CSS Example

/* Import fonts */
@import url('https://fonts.googleapis.com/css2?family=Fira+Code:wght@400;700&family=VT323&family=Space+Mono:wght@400;700&display=swap');

/* Base terminal text */
body {
  font-family: 'Fira Code', 'Source Code Pro', 'Courier New', monospace;
  font-size: 15px;
  line-height: 1.7;
  color: var(--term-green);
  -webkit-font-smoothing: none;  /* Disable anti-aliasing for sharper retro feel */
  -moz-osx-font-smoothing: auto;
}

/* Headings -- same font, differentiated by color and prefix */
h1, h2, h3, h4, h5, h6 {
  font-family: 'VT323', 'Fira Code', monospace;
  font-weight: 400;
  color: var(--term-green-bright);
  text-shadow: var(--term-glow-green);
  letter-spacing: 0.05em;
  text-transform: uppercase;
}

h1 { font-size: 2rem; }
h2 { font-size: 1.5rem; }
h3 { font-size: 1.2rem; }

/* Blinking cursor effect */
.cursor::after {
  content: '\2588';  /* Full block character */
  animation: blink 1s step-end infinite;
  color: var(--term-green);
}

@keyframes blink {
  0%, 100% { opacity: 1; }
  50% { opacity: 0; }
}

/* Command prompt styling */
.prompt {
  color: var(--term-green-dim);
}

.prompt::before {
  content: '$ ';
  color: var(--term-cyan);
}

/* Highlighted / bold text (simulated with brightness) */
strong, b {
  font-weight: 700;
  color: var(--term-green-bright);
  text-shadow: var(--term-glow-green);
}

/* Links styled as interactive terminal elements */
a {
  color: var(--term-cyan);
  text-decoration: underline;
  text-underline-offset: 3px;
}

a:hover {
  color: var(--term-green-bright);
  text-shadow: var(--term-glow-green);
}

Layout Principles

Grid and Structure

Section Organization

Responsive Approach


CSS / Design Techniques

Terminal Card / Panel Component

.term-panel {
  background: var(--term-bg-secondary);
  border: 1px solid var(--term-green-dim);
  padding: 20px 24px;
  position: relative;
  font-family: 'Fira Code', monospace;
  color: var(--term-green);
}

/* Title bar */
.term-panel__header {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding-bottom: 12px;
  margin-bottom: 16px;
  border-bottom: 1px solid var(--term-green-dim);
  font-size: 0.85rem;
  color: var(--term-green-dim);
}

.term-panel__header .title {
  color: var(--term-green-bright);
  text-shadow: var(--term-glow-green);
}

.term-panel:hover {
  border-color: var(--term-green);
  box-shadow: 0 0 8px rgba(0, 255, 65, 0.1);
}

/* Panel grid */
.term-panel-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(320px, 1fr));
  gap: 16px;
}

Terminal Button

.term-btn {
  display: inline-block;
  background: transparent;
  color: var(--term-green);
  border: 1px solid var(--term-green);
  padding: 8px 24px;
  font-family: 'Fira Code', monospace;
  font-size: 0.9rem;
  cursor: pointer;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  transition: all 0.15s ease;
  position: relative;
}

/* Bracket-style decoration */
.term-btn::before { content: '[ '; }
.term-btn::after { content: ' ]'; }

.term-btn:hover {
  background: var(--term-green);
  color: var(--term-bg-primary);
  box-shadow: var(--term-glow-green);
}

.term-btn:active {
  background: var(--term-green-bright);
}

/* Danger variant */
.term-btn--danger {
  color: var(--term-red);
  border-color: var(--term-red);
}

.term-btn--danger:hover {
  background: var(--term-red);
  color: var(--term-bg-primary);
  box-shadow: 0 0 5px rgba(255, 51, 51, 0.4);
}
.term-nav {
  display: flex;
  align-items: center;
  justify-content: space-between;
  max-width: 900px;
  margin: 0 auto;
  padding: 12px 24px;
  background: var(--term-bg-primary);
  border-bottom: 1px solid var(--term-green-dim);
  font-family: 'Fira Code', monospace;
  font-size: 0.9rem;
}

.term-nav__host {
  color: var(--term-cyan);
}

.term-nav__host::before {
  content: '';
}

.term-nav__links {
  display: flex;
  gap: 4px;
  list-style: none;
  margin: 0;
  padding: 0;
}

.term-nav__links a {
  color: var(--term-green-dim);
  text-decoration: none;
  padding: 4px 12px;
  transition: color 0.15s, background 0.15s;
}

.term-nav__links a:hover,
.term-nav__links a.active {
  color: var(--term-bg-primary);
  background: var(--term-green);
}

.term-nav__links a::before { content: '['; color: var(--term-green-dim); }
.term-nav__links a::after { content: ']'; color: var(--term-green-dim); }
.term-nav__links a:hover::before,
.term-nav__links a:hover::after { color: var(--term-bg-primary); }

Hero / MOTD Section

.term-hero {
  position: relative;
  padding: 60px 24px;
  max-width: 900px;
  margin: 0 auto;
  text-align: left;
  overflow: hidden;
}

/* CRT scan line overlay */
.term-hero::before {
  content: '';
  position: absolute;
  inset: 0;
  background: repeating-linear-gradient(
    0deg,
    transparent,
    transparent var(--term-scanline-size),
    var(--term-scanline-color) var(--term-scanline-size),
    var(--term-scanline-color) calc(var(--term-scanline-size) * 2)
  );
  pointer-events: none;
  z-index: 2;
}

.term-hero__ascii {
  color: var(--term-green-bright);
  text-shadow: var(--term-glow-green);
  font-size: clamp(0.5rem, 1.5vw, 0.9rem);
  line-height: 1.2;
  margin-bottom: 24px;
  white-space: pre;
  overflow-x: auto;
}

.term-hero__prompt {
  color: var(--term-green);
  font-size: 1rem;
  margin-bottom: 8px;
}

.term-hero__prompt .user { color: var(--term-cyan); }
.term-hero__prompt .path { color: var(--term-magenta); }
.term-hero__prompt .cmd { color: var(--term-green-bright); }

.term-hero__output {
  color: var(--term-green);
  font-size: 0.95rem;
  line-height: 1.7;
  padding-left: 2ch;
  border-left: 2px solid var(--term-green-dim);
  margin-top: 16px;
}

CRT Scan Line and Flicker Effects

/* Full-page scan line overlay */
.crt-overlay {
  position: fixed;
  inset: 0;
  background: repeating-linear-gradient(
    0deg,
    transparent,
    transparent 2px,
    rgba(0, 0, 0, 0.12) 2px,
    rgba(0, 0, 0, 0.12) 4px
  );
  pointer-events: none;
  z-index: 9999;
}

/* Screen flicker animation */
@keyframes flicker {
  0%   { opacity: 0.97; }
  5%   { opacity: 0.95; }
  10%  { opacity: 0.98; }
  15%  { opacity: 0.96; }
  20%  { opacity: 0.99; }
  100% { opacity: 0.98; }
}

.crt-flicker {
  animation: flicker 0.15s infinite;
}

/* Vignette darkening at screen edges */
.crt-vignette::after {
  content: '';
  position: fixed;
  inset: 0;
  background: radial-gradient(
    ellipse at center,
    transparent 60%,
    rgba(0, 0, 0, 0.5) 100%
  );
  pointer-events: none;
  z-index: 9998;
}

/* Disable effects for users who prefer reduced motion */
@media (prefers-reduced-motion: reduce) {
  .crt-flicker { animation: none; }
}

Terminal Input / Command Prompt

.term-input {
  display: flex;
  align-items: center;
  background: var(--term-bg-primary);
  border: 1px solid var(--term-green-dim);
  padding: 12px 16px;
  font-family: 'Fira Code', monospace;
  font-size: 0.95rem;
}

.term-input__prompt {
  color: var(--term-cyan);
  white-space: nowrap;
  margin-right: 8px;
}

.term-input__field {
  flex: 1;
  background: transparent;
  border: none;
  outline: none;
  color: var(--term-green);
  font-family: inherit;
  font-size: inherit;
  caret-color: var(--term-green);
}

.term-input__field::placeholder {
  color: var(--term-green-dim);
}

ASCII Box / Info Panel

.ascii-box {
  font-family: 'Fira Code', monospace;
  color: var(--term-green);
  padding: 16px 20px;
  white-space: pre;
  line-height: 1.4;
  position: relative;
}

/* Top border using box-drawing characters */
.ascii-box::before {
  content: attr(data-title);
  display: block;
  color: var(--term-green-bright);
  text-shadow: var(--term-glow-green);
  margin-bottom: 8px;
  padding-bottom: 8px;
  border-bottom: 1px dashed var(--term-green-dim);
}

/* Log-style entries with timestamps */
.log-entry {
  display: flex;
  gap: 2ch;
  padding: 2px 0;
  font-family: 'Fira Code', monospace;
  font-size: 0.85rem;
}

.log-entry__time {
  color: var(--term-green-dim);
  white-space: nowrap;
}

.log-entry__level--info { color: var(--term-cyan); }
.log-entry__level--warn { color: var(--term-amber); }
.log-entry__level--error { color: var(--term-red); }
.log-entry__message { color: var(--term-green); }

Progress Bar (Text-Based)

.term-progress {
  font-family: 'Fira Code', monospace;
  font-size: 0.9rem;
  color: var(--term-green);
}

.term-progress__bar {
  display: inline-block;
  width: 30ch;
  background: var(--term-bg-secondary);
  border: 1px solid var(--term-green-dim);
  height: 1.2em;
  position: relative;
  overflow: hidden;
  vertical-align: middle;
}

.term-progress__fill {
  height: 100%;
  background: var(--term-green);
  box-shadow: var(--term-glow-green);
  transition: width 0.3s ease;
}

/* Alternative: ASCII progress bar rendered in text */
.term-progress-ascii::before {
  content: '[';
  color: var(--term-green-dim);
}
.term-progress-ascii::after {
  content: ']';
  color: var(--term-green-dim);
}

Design Do’s and Don’ts

Do

Don’t


Aesthetic Relationship to Terminal / CLI
Cyberpunk Shares the monospaced type and dark backgrounds, but Cyberpunk adds neon maximalism, glitch effects, and dystopian narrative; Terminal / CLI is austere and utilitarian
8-Bit Both reference early computing, but 8-Bit focuses on pixel art and game culture while Terminal / CLI centers on text-based interfaces
Brutalist Web Design Shares the raw, undecorated philosophy and rejection of conventional polish; Brutalist is broader in scope while Terminal / CLI is specifically computer-themed
Dark Mode Neon Both use dark backgrounds with luminous accents; Dark Mode Neon is a modern UI pattern while Terminal / CLI is a specific retro-computing aesthetic
Cyberminimalism Shares the reductive approach and dark palette; Cyberminimalism is a contemporary design trend while Terminal / CLI has roots in actual computing history
Early Cyber Both draw from 1990s internet and hacker culture; Early Cyber is broader, encompassing early web design and digital art
Synthwave Shares the retro-tech nostalgia and neon-on-dark colors; Synthwave is rooted in 1980s music culture while Terminal / CLI is rooted in computing
Material Design The philosophical opposite – Material Design uses depth, color, motion, and richness; Terminal / CLI rejects all of these in favor of text purity

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>~/terminal</title>
  <link href="https://fonts.googleapis.com/css2?family=Fira+Code:wght@400;700&family=VT323&display=swap" rel="stylesheet">
  <style>
    :root {
      --term-bg: #0c0c0c;
      --term-bg-alt: #1a1a1a;
      --term-border: #2d2d2d;
      --term-green: #00ff41;
      --term-green-bright: #33ff33;
      --term-green-dim: #0a6e0a;
      --term-amber: #ffb000;
      --term-red: #ff3333;
      --term-cyan: #00cccc;
      --term-magenta: #cc00cc;
      --term-white: #cccccc;
      --term-glow: 0 0 5px rgba(0,255,65,0.4), 0 0 20px rgba(0,255,65,0.1);
    }

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

    body {
      background: var(--term-bg);
      color: var(--term-green);
      font-family: 'Fira Code', 'Courier New', monospace;
      font-size: 15px;
      line-height: 1.7;
      min-height: 100vh;
      position: relative;
    }

    /* CRT Scan Lines */
    body::before {
      content: '';
      position: fixed;
      inset: 0;
      background: repeating-linear-gradient(
        0deg,
        transparent,
        transparent 2px,
        rgba(0,0,0,0.1) 2px,
        rgba(0,0,0,0.1) 4px
      );
      pointer-events: none;
      z-index: 9999;
    }

    /* CRT Vignette */
    body::after {
      content: '';
      position: fixed;
      inset: 0;
      background: radial-gradient(ellipse at center, transparent 65%, rgba(0,0,0,0.4) 100%);
      pointer-events: none;
      z-index: 9998;
    }

    .container {
      max-width: 80ch;
      margin: 0 auto;
      padding: 0 24px;
    }

    /* Navigation */
    nav {
      border-bottom: 1px solid var(--term-border);
      padding: 12px 0;
    }

    nav .container {
      display: flex;
      align-items: center;
      justify-content: space-between;
    }

    .nav-host {
      color: var(--term-cyan);
      font-size: 0.9rem;
    }

    .nav-host .at { color: var(--term-green-dim); }
    .nav-host .host { color: var(--term-green); }

    .nav-links {
      display: flex;
      gap: 4px;
      list-style: none;
    }

    .nav-links a {
      color: var(--term-green-dim);
      text-decoration: none;
      padding: 2px 10px;
      font-size: 0.9rem;
      transition: color 0.15s, background 0.15s;
    }

    .nav-links a::before { content: '['; }
    .nav-links a::after { content: ']'; }

    .nav-links a:hover,
    .nav-links a.active {
      color: var(--term-bg);
      background: var(--term-green);
    }

    .nav-links a:hover::before,
    .nav-links a:hover::after,
    .nav-links a.active::before,
    .nav-links a.active::after {
      color: var(--term-bg);
    }

    /* Hero / MOTD */
    .hero {
      padding: 48px 0 40px;
      border-bottom: 1px dashed var(--term-border);
    }

    .ascii-art {
      color: var(--term-green-bright);
      text-shadow: var(--term-glow);
      font-size: clamp(0.45rem, 1.4vw, 0.8rem);
      line-height: 1.15;
      white-space: pre;
      overflow-x: auto;
      margin-bottom: 24px;
      font-family: 'Fira Code', monospace;
    }

    .motd {
      background: var(--term-bg-alt);
      border: 1px solid var(--term-border);
      padding: 16px 20px;
      margin-bottom: 20px;
      color: var(--term-white);
      font-size: 0.9rem;
    }

    .motd-label {
      color: var(--term-amber);
      margin-bottom: 8px;
      font-size: 0.8rem;
    }

    .prompt-line {
      margin-top: 16px;
      font-size: 0.95rem;
    }

    .prompt-line .user { color: var(--term-cyan); }
    .prompt-line .at { color: var(--term-green-dim); }
    .prompt-line .host { color: var(--term-magenta); }
    .prompt-line .path { color: var(--term-cyan); }
    .prompt-line .dollar { color: var(--term-white); }
    .prompt-line .cmd { color: var(--term-green-bright); }

    .cursor {
      display: inline-block;
      width: 0.6em;
      height: 1.1em;
      background: var(--term-green);
      vertical-align: text-bottom;
      animation: blink 1s step-end infinite;
    }

    @keyframes blink {
      0%, 100% { opacity: 1; }
      50% { opacity: 0; }
    }

    /* Section headings */
    .section-heading {
      font-family: 'VT323', monospace;
      font-size: 1.4rem;
      color: var(--term-green-bright);
      text-shadow: var(--term-glow);
      text-transform: uppercase;
      margin-bottom: 20px;
      padding-bottom: 8px;
      border-bottom: 1px solid var(--term-green-dim);
    }

    .section-heading::before {
      content: '## ';
      color: var(--term-green-dim);
    }

    /* Content sections */
    section {
      padding: 40px 0;
      border-bottom: 1px dashed var(--term-border);
    }

    /* Panels / Cards */
    .panels {
      display: grid;
      grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
      gap: 16px;
      margin-top: 16px;
    }

    .panel {
      background: var(--term-bg-alt);
      border: 1px solid var(--term-border);
      padding: 16px 20px;
      transition: border-color 0.2s;
    }

    .panel:hover {
      border-color: var(--term-green);
    }

    .panel-header {
      display: flex;
      justify-content: space-between;
      align-items: center;
      color: var(--term-green-dim);
      font-size: 0.8rem;
      margin-bottom: 12px;
      padding-bottom: 8px;
      border-bottom: 1px dashed var(--term-border);
    }

    .panel-header .title {
      color: var(--term-green-bright);
      text-shadow: var(--term-glow);
    }

    .panel-content {
      color: var(--term-white);
      font-size: 0.9rem;
      line-height: 1.6;
    }

    .panel-content .label {
      color: var(--term-cyan);
    }

    /* System stats table */
    .stats-table {
      width: 100%;
      border-collapse: collapse;
      font-size: 0.9rem;
      margin-top: 12px;
    }

    .stats-table th {
      text-align: left;
      color: var(--term-cyan);
      padding: 6px 12px;
      border-bottom: 1px solid var(--term-green-dim);
      font-weight: 400;
      font-size: 0.8rem;
      text-transform: uppercase;
    }

    .stats-table td {
      padding: 6px 12px;
      color: var(--term-green);
      border-bottom: 1px solid var(--term-border);
    }

    .stats-table tr:hover td {
      background: rgba(0, 255, 65, 0.03);
    }

    .status-ok { color: var(--term-green-bright); }
    .status-warn { color: var(--term-amber); }
    .status-err { color: var(--term-red); }

    /* Log entries */
    .log-section {
      background: var(--term-bg-alt);
      border: 1px solid var(--term-border);
      padding: 16px 20px;
      margin-top: 16px;
      max-height: 300px;
      overflow-y: auto;
    }

    .log-entry {
      display: flex;
      gap: 2ch;
      font-size: 0.85rem;
      padding: 3px 0;
    }

    .log-time { color: var(--term-green-dim); white-space: nowrap; }
    .log-info { color: var(--term-cyan); }
    .log-warn { color: var(--term-amber); }
    .log-error { color: var(--term-red); }
    .log-msg { color: var(--term-green); }

    /* Progress bars (ASCII style) */
    .progress-row {
      display: flex;
      align-items: center;
      gap: 1ch;
      font-size: 0.85rem;
      margin-bottom: 6px;
    }

    .progress-label {
      color: var(--term-white);
      width: 12ch;
    }

    .progress-bar-ascii {
      color: var(--term-green);
      white-space: nowrap;
    }

    .progress-pct {
      color: var(--term-green-bright);
      width: 5ch;
      text-align: right;
    }

    /* Command output */
    .cmd-block {
      background: var(--term-bg-alt);
      border-left: 2px solid var(--term-green-dim);
      padding: 12px 16px;
      margin: 12px 0;
      font-size: 0.9rem;
    }

    .cmd-block .comment { color: var(--term-green-dim); }
    .cmd-block .output { color: var(--term-white); }
    .cmd-block .highlight { color: var(--term-green-bright); text-shadow: var(--term-glow); }

    /* Buttons */
    .term-btn {
      display: inline-block;
      background: transparent;
      color: var(--term-green);
      border: 1px solid var(--term-green);
      padding: 8px 20px;
      font-family: 'Fira Code', monospace;
      font-size: 0.9rem;
      cursor: pointer;
      transition: all 0.15s;
      text-decoration: none;
      margin-right: 8px;
      margin-top: 12px;
    }

    .term-btn:hover {
      background: var(--term-green);
      color: var(--term-bg);
      box-shadow: var(--term-glow);
    }

    .term-btn--amber {
      color: var(--term-amber);
      border-color: var(--term-amber);
    }

    .term-btn--amber:hover {
      background: var(--term-amber);
      color: var(--term-bg);
      box-shadow: 0 0 5px rgba(255,176,0,0.4);
    }

    /* Directory listing */
    .dir-listing {
      list-style: none;
      font-size: 0.9rem;
    }

    .dir-listing li {
      padding: 2px 0;
    }

    .dir-listing li::before {
      content: '';
      display: inline-block;
      width: 2ch;
    }

    .dir-listing .dir { color: var(--term-cyan); font-weight: 700; }
    .dir-listing .exec { color: var(--term-green-bright); }
    .dir-listing .file { color: var(--term-white); }
    .dir-listing .link { color: var(--term-magenta); }
    .dir-listing .perms { color: var(--term-green-dim); display: inline-block; width: 12ch; }
    .dir-listing .size { color: var(--term-green-dim); display: inline-block; width: 8ch; text-align: right; margin-right: 2ch; }

    /* Contact / Form section */
    .term-form {
      margin-top: 16px;
    }

    .term-form .field {
      margin-bottom: 12px;
    }

    .term-form label {
      color: var(--term-cyan);
      display: block;
      margin-bottom: 4px;
      font-size: 0.85rem;
    }

    .term-form label::after {
      content: ':';
    }

    .term-form input,
    .term-form textarea {
      width: 100%;
      max-width: 50ch;
      background: var(--term-bg-alt);
      border: 1px solid var(--term-border);
      color: var(--term-green);
      font-family: 'Fira Code', monospace;
      font-size: 0.9rem;
      padding: 8px 12px;
      outline: none;
      caret-color: var(--term-green);
    }

    .term-form input:focus,
    .term-form textarea:focus {
      border-color: var(--term-green);
      box-shadow: 0 0 4px rgba(0,255,65,0.15);
    }

    .term-form textarea {
      height: 100px;
      resize: vertical;
    }

    /* Footer */
    footer {
      padding: 24px 0;
      text-align: center;
      color: var(--term-green-dim);
      font-size: 0.8rem;
    }

    footer .separator {
      color: var(--term-border);
      margin-bottom: 12px;
    }

    /* Responsive */
    @media (max-width: 600px) {
      .container { padding: 0 16px; }
      nav .container { flex-direction: column; gap: 8px; }
      .nav-links { flex-wrap: wrap; justify-content: center; }
      .ascii-art { font-size: 0.4rem; }
      .panels { grid-template-columns: 1fr; }
      .dir-listing .perms { display: none; }
      .dir-listing .size { display: none; }
    }

    @media (prefers-reduced-motion: reduce) {
      .cursor { animation: none; opacity: 1; }
      body::before { background: none; }
    }
  </style>
</head>
<body>

  <!-- Navigation -->
  <nav>
    <div class="container">
      <span class="nav-host"><span class="user">visitor</span><span class="at">@</span><span class="host">sierra</span>:~</span>
      <ul class="nav-links">
        <li><a href="#home" class="active">home</a></li>
        <li><a href="#services">services</a></li>
        <li><a href="#status">status</a></li>
        <li><a href="#logs">logs</a></li>
        <li><a href="#contact">contact</a></li>
      </ul>
    </div>
  </nav>

  <!-- Hero / MOTD -->
  <section class="hero" id="home">
    <div class="container">
      <div class="ascii-art">
 ____  _                         ____                  _
/ ___|(_) ___ _ __ _ __ __ _   / ___|  ___ _ ____   _(_) ___ ___  ___
\___ \| |/ _ \ '__| '__/ _` |  \___ \ / _ \ '__\ \ / / |/ __/ _ \/ __|
 ___) | |  __/ |  | | | (_| |   ___) |  __/ |   \ V /| | (_|  __/\__ \
|____/|_|\___|_|  |_|  \__,_|  |____/ \___|_|    \_/ |_|\___\___||___/
      </div>

      <div class="motd">
        <div class="motd-label">-- Message of the Day --</div>
        Welcome to Sierra Services, a systems administration and infrastructure
        consulting firm. We specialize in Linux server management, network
        security auditing, and high-availability architecture design. All
        sessions are monitored and logged for security purposes.
      </div>

      <div class="prompt-line">
        <span class="user">visitor</span><span class="at">@</span><span class="host">sierra</span>:<span class="path">~</span><span class="dollar">$</span> <span class="cmd">cat /etc/motd</span>
      </div>
      <div class="prompt-line" style="margin-top: 12px;">
        Last login: Tue Feb 17 09:42:31 2026 from 192.168.1.42
      </div>
      <div class="prompt-line" style="margin-top: 4px; color: var(--term-green-dim);">
        System uptime: 142 days, 7:23:15 &nbsp;|&nbsp; Load avg: 0.12, 0.08, 0.05
      </div>
      <div class="prompt-line" style="margin-top: 16px;">
        <span class="user">visitor</span><span class="at">@</span><span class="host">sierra</span>:<span class="path">~</span><span class="dollar">$</span> <span class="cursor"></span>
      </div>
    </div>
  </section>

  <!-- Services Section -->
  <section id="services">
    <div class="container">
      <h2 class="section-heading">Services</h2>

      <div class="prompt-line" style="margin-bottom: 16px;">
        <span class="user">visitor</span><span class="at">@</span><span class="host">sierra</span>:<span class="path">~</span><span class="dollar">$</span> <span class="cmd">ls -la /srv/offerings/</span>
      </div>

      <div class="panels">
        <div class="panel">
          <div class="panel-header">
            <span class="title">infrastructure.conf</span>
            <span>-rwxr--r--</span>
          </div>
          <div class="panel-content">
            <span class="label"># Infrastructure Management</span><br><br>
            Bare-metal and cloud server provisioning,
            configuration management with Ansible and
            Terraform, container orchestration via
            Kubernetes. 24/7 monitoring and alerting
            with automated incident response.
          </div>
        </div>

        <div class="panel">
          <div class="panel-header">
            <span class="title">security.conf</span>
            <span>-rwxr--r--</span>
          </div>
          <div class="panel-content">
            <span class="label"># Security Auditing</span><br><br>
            Penetration testing, vulnerability
            assessment, compliance auditing (SOC 2,
            ISO 27001). Network segmentation review,
            firewall rule optimization, and intrusion
            detection system deployment.
          </div>
        </div>

        <div class="panel">
          <div class="panel-header">
            <span class="title">reliability.conf</span>
            <span>-rwxr--r--</span>
          </div>
          <div class="panel-content">
            <span class="label"># High Availability</span><br><br>
            Multi-region failover architecture,
            database replication, load balancing,
            and disaster recovery planning. Targeting
            99.99% uptime SLAs with automated
            health checks and self-healing systems.
          </div>
        </div>

        <div class="panel">
          <div class="panel-header">
            <span class="title">devops.conf</span>
            <span>-rwxr--r--</span>
          </div>
          <div class="panel-content">
            <span class="label"># DevOps Consulting</span><br><br>
            CI/CD pipeline design, GitOps workflows,
            artifact management, and deployment
            automation. We help teams ship faster
            with fewer incidents through robust
            tooling and process optimization.
          </div>
        </div>
      </div>
    </div>
  </section>

  <!-- System Status Section -->
  <section id="status">
    <div class="container">
      <h2 class="section-heading">System Status</h2>

      <div class="prompt-line" style="margin-bottom: 16px;">
        <span class="user">visitor</span><span class="at">@</span><span class="host">sierra</span>:<span class="path">~</span><span class="dollar">$</span> <span class="cmd">systemctl status --all</span>
      </div>

      <table class="stats-table">
        <thead>
          <tr>
            <th>Service</th>
            <th>Status</th>
            <th>Uptime</th>
            <th>Port</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td>nginx</td>
            <td class="status-ok">[ RUNNING ]</td>
            <td>142d 07:23</td>
            <td>443/tcp</td>
          </tr>
          <tr>
            <td>postgresql</td>
            <td class="status-ok">[ RUNNING ]</td>
            <td>142d 07:22</td>
            <td>5432/tcp</td>
          </tr>
          <tr>
            <td>redis</td>
            <td class="status-ok">[ RUNNING ]</td>
            <td>138d 14:07</td>
            <td>6379/tcp</td>
          </tr>
          <tr>
            <td>prometheus</td>
            <td class="status-ok">[ RUNNING ]</td>
            <td>142d 07:20</td>
            <td>9090/tcp</td>
          </tr>
          <tr>
            <td>backup-agent</td>
            <td class="status-warn">[ DEGRADED ]</td>
            <td>2d 11:45</td>
            <td>--</td>
          </tr>
          <tr>
            <td>legacy-api</td>
            <td class="status-err">[ STOPPED ]</td>
            <td>--</td>
            <td>8080/tcp</td>
          </tr>
        </tbody>
      </table>

      <div style="margin-top: 24px;">
        <p style="color: var(--term-white); margin-bottom: 12px; font-size: 0.9rem;">Resource utilization:</p>
        <div class="progress-row">
          <span class="progress-label">CPU</span>
          <span class="progress-bar-ascii">[##########.............................]</span>
          <span class="progress-pct">23%</span>
        </div>
        <div class="progress-row">
          <span class="progress-label">Memory</span>
          <span class="progress-bar-ascii">[######################.................]</span>
          <span class="progress-pct">57%</span>
        </div>
        <div class="progress-row">
          <span class="progress-label">Disk /</span>
          <span class="progress-bar-ascii">[###############........................]</span>
          <span class="progress-pct">38%</span>
        </div>
        <div class="progress-row">
          <span class="progress-label">Disk /data</span>
          <span class="progress-bar-ascii">[############################...........]</span>
          <span class="progress-pct">71%</span>
        </div>
        <div class="progress-row">
          <span class="progress-label">Network I/O</span>
          <span class="progress-bar-ascii">[####...................................]</span>
          <span class="progress-pct">12%</span>
        </div>
      </div>
    </div>
  </section>

  <!-- Logs Section -->
  <section id="logs">
    <div class="container">
      <h2 class="section-heading">Recent Logs</h2>

      <div class="prompt-line" style="margin-bottom: 16px;">
        <span class="user">visitor</span><span class="at">@</span><span class="host">sierra</span>:<span class="path">~</span><span class="dollar">$</span> <span class="cmd">journalctl -n 12 --no-pager</span>
      </div>

      <div class="log-section">
        <div class="log-entry">
          <span class="log-time">2026-02-18 08:01:12</span>
          <span class="log-info">[INFO]</span>
          <span class="log-msg">nginx: upstream connection established to 10.0.1.4:8080</span>
        </div>
        <div class="log-entry">
          <span class="log-time">2026-02-18 08:01:09</span>
          <span class="log-info">[INFO]</span>
          <span class="log-msg">certbot: certificate renewal check passed (expires 2026-04-14)</span>
        </div>
        <div class="log-entry">
          <span class="log-time">2026-02-18 07:58:44</span>
          <span class="log-warn">[WARN]</span>
          <span class="log-msg">backup-agent: retry attempt 3/5 for snapshot upload to s3://vault</span>
        </div>
        <div class="log-entry">
          <span class="log-time">2026-02-18 07:55:01</span>
          <span class="log-info">[INFO]</span>
          <span class="log-msg">cron: executing scheduled job /etc/cron.d/log-rotate</span>
        </div>
        <div class="log-entry">
          <span class="log-time">2026-02-18 07:45:22</span>
          <span class="log-warn">[WARN]</span>
          <span class="log-msg">backup-agent: connection timeout to storage endpoint (attempt 2/5)</span>
        </div>
        <div class="log-entry">
          <span class="log-time">2026-02-18 07:30:00</span>
          <span class="log-info">[INFO]</span>
          <span class="log-msg">prometheus: scrape cycle completed, 847 metrics collected</span>
        </div>
        <div class="log-entry">
          <span class="log-time">2026-02-18 07:15:33</span>
          <span class="log-info">[INFO]</span>
          <span class="log-msg">sshd: accepted publickey for admin from 10.0.0.1 port 52341</span>
        </div>
        <div class="log-entry">
          <span class="log-time">2026-02-18 06:42:18</span>
          <span class="log-error">[ERR ]</span>
          <span class="log-msg">legacy-api: process exited with code 137 (OOM killed)</span>
        </div>
        <div class="log-entry">
          <span class="log-time">2026-02-18 06:42:17</span>
          <span class="log-warn">[WARN]</span>
          <span class="log-msg">kernel: memory cgroup out of memory: legacy-api (pid 28441)</span>
        </div>
        <div class="log-entry">
          <span class="log-time">2026-02-18 06:30:00</span>
          <span class="log-info">[INFO]</span>
          <span class="log-msg">redis: RDB snapshot saved to disk (2.4MB, 0.003s)</span>
        </div>
        <div class="log-entry">
          <span class="log-time">2026-02-18 06:00:01</span>
          <span class="log-info">[INFO]</span>
          <span class="log-msg">postgresql: automatic vacuum completed on table 'events' (4201 rows)</span>
        </div>
        <div class="log-entry">
          <span class="log-time">2026-02-18 05:45:09</span>
          <span class="log-info">[INFO]</span>
          <span class="log-msg">ufw: [BLOCK] IN=eth0 SRC=45.33.12.88 DST=10.0.1.2 PROTO=TCP DPT=22</span>
        </div>
      </div>
    </div>
  </section>

  <!-- Contact Section -->
  <section id="contact">
    <div class="container">
      <h2 class="section-heading">Contact</h2>

      <div class="prompt-line" style="margin-bottom: 16px;">
        <span class="user">visitor</span><span class="at">@</span><span class="host">sierra</span>:<span class="path">~</span><span class="dollar">$</span> <span class="cmd">cat /srv/contact.txt</span>
      </div>

      <div class="cmd-block">
        <span class="comment"># Reach us through any of the following channels:</span><br>
        <span class="output">Email .......... ops@sierra-services.io</span><br>
        <span class="output">IRC ............ irc.libera.chat #sierra</span><br>
        <span class="output">PGP Key ........ 0xAB12 CD34 EF56 7890</span><br>
        <span class="output">Response SLA ... &lt; 4 hours (business days)</span>
      </div>

      <p style="margin-top: 20px; color: var(--term-white); font-size: 0.9rem;">Or submit a request directly:</p>

      <form class="term-form" onsubmit="return false;">
        <div class="field">
          <label for="name">name</label>
          <input type="text" id="name" placeholder="your_name">
        </div>
        <div class="field">
          <label for="email">email</label>
          <input type="email" id="email" placeholder="user@domain.tld">
        </div>
        <div class="field">
          <label for="message">message</label>
          <textarea id="message" placeholder="Describe your infrastructure needs..."></textarea>
        </div>
        <button type="submit" class="term-btn">submit</button>
        <button type="reset" class="term-btn--amber term-btn">clear</button>
      </form>
    </div>
  </section>

  <!-- Footer -->
  <footer>
    <div class="container">
      <div class="separator">- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -</div>
      <p>Sierra Services | EST 2019 | All sessions logged</p>
      <p style="margin-top: 4px;">PID 1 | TTY pts/0 | ENV production | SHELL /bin/zsh</p>
      <p style="margin-top: 8px; color: var(--term-green-dim);">Connection closed by remote host.</p>
    </div>
  </footer>

</body>
</html>