/* kennethreitz.org MONOSPACE MANIFESTO™: The Ultimate Developer Experience Principles: Brutalism, Terminal Aesthetics, Code as Design, Maximum Legibility Aesthetic: Heavily-styled Developer Prose in Full Monospace Glory */ /* RADICAL MONOSPACE FOUNDATION */ :root { /* Heroku-inspired color system - subtler purples, more green and amber */ --heroku-purple: 65, 45, 105; --heroku-light-purple: 110, 80, 175; --heroku-dark-purple: 40, 28, 65; --heroku-fuchsia: 200, 50, 130; --heroku-blue: 45, 156, 219; --heroku-green: 90, 220, 120; --heroku-amber: 255, 180, 60; /* Original neon terminal colors as backups */ --neon-green: 0, 255, 70; --electric-blue: 80, 255, 255; --toxic-yellow: 255, 234, 0; --terminal-white: 240, 240, 240; --burnt-orange: 255, 128, 0; --digital-purple: 170, 0, 255; --cyber-pink: 255, 0, 128; /* Background and surfaces */ --terminal-black: 13, 13, 13; --deep-void: 16, 16, 24; --dark-console: 28, 28, 36; --error-red: 255, 65, 54; --warning-amber: 255, 164, 0; --success-green: 50, 255, 126; /* Monospace type scale */ --font-xs: 0.75rem; --font-sm: 0.875rem; --font-md: 1rem; --font-lg: 1.125rem; --font-xl: 1.25rem; --font-2xl: 1.5rem; --font-3xl: 1.75rem; --font-4xl: 2rem; /* Font stacks - ALL MONOSPACE EVERYTHING */ --primary-font: 'Operator Mono', 'Fira Code', 'JetBrains Mono', 'IBM Plex Mono', 'SF Mono', monospace; --base-monospace: 'JetBrains Mono', 'Fira Code', 'SF Mono', 'Roboto Mono', 'Courier Prime', monospace; --fallback-monospace: 'Consolas', 'Courier New', monospace; /* Line heights for monospace precision */ --line-tight: 1.2; --line-code: 1.4; --line-base: 1.6; --line-loose: 1.8; /* Extreme spacing system */ --space-3xs: 0.125rem; --space-2xs: 0.25rem; --space-xs: 0.5rem; --space-sm: 0.75rem; --space-md: 1rem; --space-lg: 1.5rem; --space-xl: 2rem; --space-2xl: 3rem; --space-3xl: 4rem; /* Terminal effects */ --glow-spread: 0.3rem; --glow-blur: 1rem; --scanline-size: 2px; --pixel-size: 1px; --flicker-speed: 0.1s; /* Typography treatments */ --letter-tight: -0.03em; --letter-normal: 0; --letter-wide: 0.05em; --letter-mono: 0; /* Borders and effects */ --border-thin: 1px; --border-thick: 2px; --border-thicker: 4px; --border-radius-sm: 3px; --border-radius-md: 5px; --blink-speed: 1s; } /* RESET AND BASE STYLES */ * { margin: 0; padding: 0; box-sizing: border-box; } html { scroll-behavior: smooth; font-size: 16px; -webkit-font-smoothing: none; /* Pixelated text for authenticity */ -moz-osx-font-smoothing: grayscale; text-rendering: geometricPrecision; } body { font-family: var(--primary-font), var(--base-monospace), var(--fallback-monospace); background-color: rgb(var(--terminal-black)); color: rgb(var(--terminal-white)); line-height: var(--line-base); font-size: var(--font-md); margin: 0; padding: 0 var(--space-md); position: relative; overflow-x: hidden; min-height: 100vh; } /* RADICAL BACKGROUND EFFECTS */ body::before { content: ""; position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: linear-gradient( to bottom, rgba(var(--terminal-black), 1) 0%, rgba(var(--deep-void), 1) 100% ); z-index: -2; } /* Scanlines for terminal effect */ body::after { content: ""; position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: repeating-linear-gradient( 0deg, rgba(var(--terminal-white), 0.03), rgba(var(--terminal-white), 0.03) var(--scanline-size), transparent var(--scanline-size), transparent calc(var(--scanline-size) * 2) ); z-index: 9999; pointer-events: none; opacity: 0.7; } /* MONOSPACED TYPOGRAPHY SYSTEM */ h1, h2, h3, h4, h5, h6, p, a, li, blockquote, code, pre, span, div { font-family: var(--primary-font), var(--base-monospace), var(--fallback-monospace); } h1 { font-size: var(--font-4xl); line-height: var(--line-tight); letter-spacing: var(--letter-tight); margin: var(--space-2xl) 0 var(--space-lg); color: rgb(var(--heroku-green)); text-transform: uppercase; border-bottom: var(--border-thick) solid rgb(var(--heroku-green)); padding-bottom: var(--space-xs); text-shadow: 0 0 var(--glow-spread) rgba(var(--heroku-green), 0.8); animation: textPulse 4s infinite alternate; } @keyframes textPulse { 0% { text-shadow: 0 0 var(--glow-spread) rgba(var(--heroku-green), 0.5); } 100% { text-shadow: 0 0 var(--glow-blur) rgba(var(--heroku-green), 0.8); } } h2 { font-size: var(--font-3xl); line-height: var(--line-tight); margin: var(--space-xl) 0 var(--space-md); color: rgb(var(--heroku-fuchsia)); letter-spacing: var(--letter-tight); text-transform: uppercase; border-left: var(--border-thick) solid rgb(var(--heroku-fuchsia)); padding-left: var(--space-sm); } h3 { font-size: var(--font-2xl); line-height: var(--line-tight); margin: var(--space-lg) 0 var(--space-md); color: rgb(var(--heroku-blue)); letter-spacing: var(--letter-tight); text-transform: uppercase; } h4 { font-size: var(--font-xl); line-height: var(--line-tight); margin: var(--space-lg) 0 var(--space-sm); color: rgb(var(--heroku-light-purple)); letter-spacing: var(--letter-normal); } h5, h6 { font-size: var(--font-lg); line-height: var(--line-tight); margin: var(--space-md) 0 var(--space-xs); color: rgb(var(--heroku-green)); letter-spacing: var(--letter-normal); } /* PARAGRAPH STYLING */ p { margin-bottom: var(--space-lg); line-height: var(--line-base); max-width: 80ch; font-size: var(--font-md); position: relative; padding-left: var(--space-lg); border-left: var(--border-thin) solid rgba(var(--terminal-white), 0.2); } p::before { content: ">"; position: absolute; left: 0; color: rgb(var(--heroku-green)); font-weight: bold; } /* Blinking cursor effect at the end of last paragraph */ p:last-of-type::after { content: "█"; display: inline-block; color: rgb(var(--heroku-fuchsia)); animation: blink var(--blink-speed) step-end infinite; } @keyframes blink { 0%, 100% { opacity: 1; } 50% { opacity: 0; } } /* LINKS */ a { color: rgb(var(--heroku-blue)); text-decoration: none; position: relative; padding: 0 var(--space-2xs); font-weight: bold; transition: all 0.2s ease; border-bottom: var(--border-thin) dashed rgb(var(--heroku-blue)); } a:hover, a:focus { color: rgb(var(--terminal-black)); background-color: rgb(var(--heroku-blue)); border-bottom: var(--border-thin) solid rgb(var(--heroku-blue)); text-shadow: none; outline: none; } a:hover::before, a:focus::before { content: "["; position: absolute; left: -0.7em; color: rgb(var(--heroku-blue)); } a:hover::after, a:focus::after { content: "]"; position: absolute; right: -0.7em; color: rgb(var(--heroku-blue)); } /* CODE ELEMENTS */ code, pre { font-family: var(--base-monospace), var(--fallback-monospace); font-size: var(--font-sm); line-height: var(--line-code); background-color: rgba(var(--deep-void), 0.8); border-radius: var(--border-radius-sm); } code { padding: var(--space-2xs) var(--space-xs); color: rgb(var(--heroku-amber)); border: var(--border-thin) solid rgba(var(--heroku-amber), 0.3); } pre { padding: var(--space-md); margin: var(--space-lg) 0; overflow-x: auto; border-left: var(--border-thick) solid rgb(var(--heroku-amber)); position: relative; } pre::before { content: "$ CODE"; position: absolute; top: -12px; left: var(--space-md); background-color: rgb(var(--terminal-black)); padding: 0 var(--space-xs); color: rgb(var(--heroku-amber)); font-size: var(--font-xs); font-weight: bold; letter-spacing: var(--letter-wide); } pre code { border: none; padding: 0; background-color: transparent; color: rgb(var(--terminal-white)); } /* BLOCKQUOTE */ blockquote { margin: var(--space-xl) 0; padding: var(--space-md) var(--space-lg); border-left: var(--border-thicker) solid rgb(var(--heroku-light-purple)); background-color: rgba(var(--heroku-light-purple), 0.1); position: relative; } blockquote::before { content: "// QUOTE"; position: absolute; top: -12px; left: var(--space-md); background-color: rgb(var(--terminal-black)); padding: 0 var(--space-xs); color: rgb(var(--heroku-light-purple)); font-size: var(--font-xs); font-weight: bold; letter-spacing: var(--letter-wide); } blockquote p { font-style: italic; border-left: none; padding-left: 0; } blockquote p::before { content: none; } blockquote cite { display: block; margin-top: var(--space-sm); color: rgb(var(--terminal-white)); opacity: 0.7; font-style: normal; } blockquote cite::before { content: "— "; color: rgb(var(--heroku-light-purple)); } /* LISTS */ ul, ol { margin: var(--space-lg) 0; padding-left: var(--space-xl); } li { margin-bottom: var(--space-sm); position: relative; } ul li::marker { content: "// "; color: rgb(var(--heroku-green)); font-weight: bold; } ol { counter-reset: item; list-style-type: none; } ol li { counter-increment: item; } ol li::before { content: counter(item) "."; color: rgb(var(--heroku-blue)); font-weight: bold; display: inline-block; width: 2em; margin-left: -2em; } /* CONTAINERS AND SECTIONS */ .main-content { max-width: 1200px; margin: var(--space-xl) auto; padding: var(--space-lg); background-color: rgba(var(--deep-void), 0.7); border: var(--border-thin) solid rgba(var(--terminal-white), 0.1); border-radius: var(--border-radius-md); box-shadow: 0 0 var(--space-lg) rgba(0, 0, 0, 0.5); position: relative; } .main-content::before { content: "MAIN::OUTPUT"; position: absolute; top: -12px; left: var(--space-md); background-color: rgb(var(--terminal-black)); padding: 0 var(--space-xs); color: rgb(var(--heroku-amber)); font-size: var(--font-xs); font-weight: bold; letter-spacing: var(--letter-wide); } .container { width: 100%; position: relative; } /* HORIZONTAL RULE */ hr { border: none; height: var(--border-thin); background: linear-gradient( to right, transparent, rgb(var(--heroku-green)), transparent ); margin: var(--space-xl) 0; position: relative; } hr::before { content: "// // //"; position: absolute; top: -10px; left: 50%; transform: translateX(-50%); background-color: rgb(var(--terminal-black)); padding: 0 var(--space-sm); color: rgb(var(--heroku-green)); font-size: var(--font-xs); letter-spacing: var(--letter-wide); } /* TERMINAL-STYLE STATUS BAR */ .status-bar { position: fixed; bottom: 0; left: 0; width: 100%; background-color: rgb(var(--heroku-dark-purple)); color: rgb(var(--terminal-white)); display: flex; justify-content: space-between; font-size: var(--font-xs); border-top: var(--border-thin) solid rgba(var(--heroku-green), 0.5); z-index: 100; height: 28px; line-height: 28px; padding: 0 var(--space-md); } .status-bar-left, .status-bar-right { display: flex; align-items: center; } .status-bar-item { padding: 0 var(--space-sm); border-right: var(--border-thin) solid rgba(var(--terminal-white), 0.2); display: flex; align-items: center; height: 100%; } .status-bar-item:last-child { border-right: none; } /* HEADER ELEMENTS */ .site-header { padding: var(--space-md) 0; margin-bottom: var(--space-xl); border-bottom: var(--border-thin) solid rgba(var(--heroku-green), 0.5); display: flex; justify-content: space-between; align-items: center; background-color: rgba(var(--terminal-black), 0.95); position: sticky; top: 0; z-index: 100; } .site-title { font-size: var(--font-xl); color: rgb(var(--heroku-green)); font-weight: bold; letter-spacing: var(--letter-tight); text-transform: uppercase; } /* Enhanced Floating Terminal Interface */ .terminal-panel { position: fixed; top: 5%; right: 2%; width: 600px; height: 400px; z-index: 9999; display: none; transform: scale(0.95); transform-origin: top right; transition: transform 0.2s ease, opacity 0.2s ease; opacity: 0; } .terminal-panel.active { display: block; opacity: 1; transform: scale(1); } .terminal-panel.minimized { height: 36px; overflow: hidden; } .terminal-window { background-color: rgb(var(--heroku-dark-purple)); border-radius: var(--border-radius-md); box-shadow: 0 8px 24px rgba(0, 0, 0, 0.7); width: 100%; height: 100%; overflow: hidden; font-family: var(--base-monospace); border: var(--border-thin) solid rgba(var(--heroku-green), 0.5); display: flex; flex-direction: column; position: relative; } .terminal-header { background-color: rgb(var(--heroku-dark-purple)); padding: var(--space-xs) var(--space-md); color: rgb(var(--terminal-white)); display: flex; align-items: center; justify-content: center; position: relative; height: 36px; } .terminal-controls { position: absolute; left: var(--space-md); top: 50%; transform: translateY(-50%); display: flex; gap: 8px; } .control { width: 12px; height: 12px; border-radius: 50%; display: inline-block; cursor: pointer; position: relative; transition: transform 0.1s ease; } .control:hover { transform: scale(1.1); } .control.close { background-color: #ff5f56; } .control.minimize { background-color: #ffbd2e; } .control.maximize { background-color: #27c93f; } .terminal-resize-handle { position: absolute; bottom: 0; right: 0; width: 16px; height: 16px; cursor: nwse-resize; background: linear-gradient( 135deg, transparent 0%, transparent 50%, rgba(var(--heroku-green), 0.5) 50%, rgba(var(--heroku-green), 0.5) 60%, transparent 60%, transparent 100% ); z-index: 100; } .terminal-title { color: rgba(var(--terminal-white), 0.9); font-size: var(--font-sm); font-weight: 500; } .terminal-body { background-color: rgb(var(--terminal-black)); padding: var(--space-md); flex: 1; overflow-y: auto; color: rgb(var(--terminal-white)); font-size: var(--font-md); line-height: var(--line-base); background-image: radial-gradient( rgba(var(--heroku-green), 0.03) 2px, transparent 2px ); background-size: 30px 30px; background-position: -15px -15px; position: relative; -webkit-font-smoothing: none; font-variant-ligatures: none; } .terminal-output p { margin: 0 0 var(--space-xs); padding: 0; border-left: none; } .terminal-output p::before { content: none; } /* Directory listing styling */ .dir-item { color: rgb(var(--heroku-blue)); position: relative; margin-left: var(--space-md); } .dir-item::before { content: "📁"; position: absolute; left: -20px; top: 0; } /* Error messages */ .error { color: rgb(var(--error-red)); font-weight: bold; } /* Terminal selection styling */ .terminal-body ::selection { background-color: rgba(var(--heroku-green), 0.4); color: rgb(var(--terminal-white)); } /* Transition styles for terminal panel */ .terminal-panel.dragging { transition: none; opacity: 0.9; user-select: none; } .terminal-panel.resizing { transition: none; opacity: 0.9; } .terminal-panel.maximized { top: 10vh !important; left: 5vw !important; width: 90vw !important; height: 80vh !important; } /* Typing animation styles */ .typing-output { margin: 0 0 var(--space-xs); color: rgb(var(--heroku-amber)); } /* Terminal nav link styles */ .nav-item[data-category="terminal"] a { color: rgb(var(--heroku-amber)); position: relative; } .nav-item[data-category="terminal"] a:hover { color: rgb(var(--heroku-amber)); background-color: rgba(var(--heroku-amber), 0.2); } .nav-item[data-category="terminal"] .cmd-prompt { color: rgb(var(--heroku-amber)); font-weight: bold; } /* Xeyes implementation */ .xeyes-container { display: flex; align-items: center; height: 100%; gap: 3px; margin-left: 5px; } .xeye { width: 12px; height: 12px; background-color: rgb(var(--terminal-white)); border-radius: 50%; position: relative; display: flex; align-items: center; justify-content: center; box-shadow: inset 0 0 2px rgba(0, 0, 0, 0.5); overflow: hidden; } .pupil { width: 5px; height: 5px; background-color: rgb(var(--heroku-dark-purple)); border-radius: 50%; position: absolute; transition: transform 0.05s ease; } /* Media queries for responsive terminal */ @media (max-width: 768px) { .terminal-panel { width: 90vw; height: 50vh; top: 25vh; right: 5vw; } .terminal-panel.maximized { top: 10vh !important; left: 5vw !important; width: 90vw !important; height: 80vh !important; } } /* Animation for the cursor */ @keyframes terminal-blink { 0%, 100% { opacity: 1; } 50% { opacity: 0; } } /* Terminal typing effect */ .typing-effect { white-space: nowrap; overflow: hidden; border-right: 3px solid rgb(var(--heroku-fuchsia)); animation: typing 3.5s steps(30, end), blink-caret 0.5s step-end infinite; } @keyframes typing { from { width: 0 } to { width: 100% } } @keyframes blink-caret { from, to { border-color: transparent } 50% { border-color: rgb(var(--heroku-fuchsia)); } } /* Matrix message styling */ .matrix-message { color: rgb(var(--heroku-green)); font-size: 1.2em; font-weight: bold; text-shadow: 0 0 10px rgba(var(--heroku-green), 0.8); animation: pulse 2s infinite alternate; } @keyframes pulse { 0% { opacity: 0.6; } 100% { opacity: 1; } } .welcome-text { color: rgb(var(--heroku-green)); font-weight: bold; } .cmd-highlight { color: rgb(var(--heroku-fuchsia)); font-weight: bold; background-color: rgba(var(--heroku-fuchsia), 0.1); padding: 2px 4px; border-radius: 3px; } .terminal-input-line { display: flex; margin-top: var(--space-sm); border-top: var(--border-thin) dashed rgba(var(--heroku-green), 0.3); padding-top: var(--space-sm); } .cmd-prompt { color: rgb(var(--heroku-green)); font-weight: bold; margin-right: var(--space-xs); white-space: nowrap; } .input-wrapper { flex: 1; } .terminal-input { background: transparent; border: none; color: rgb(var(--terminal-white)); font-family: inherit; font-size: inherit; padding: 0; width: 100%; outline: none; caret-color: transparent; /* Hide default cursor */ } .command { color: rgb(var(--terminal-white)); } /* Old-school loading animation for the header */ .loading-animation { display: inline-block; overflow: hidden; height: 1.2em; margin-left: var(--space-xs); vertical-align: bottom; } .loading-animation::after { content: "\\A.\\A..\\A..."; white-space: pre; display: inline-block; animation: loading 2s infinite steps(4); } @keyframes loading { 0%, 100% { transform: translateY(0); } 25% { transform: translateY(-1.2em); } 50% { transform: translateY(-2.4em); } 75% { transform: translateY(-3.6em); } } /* NAVIGATION */ .main-nav { background-color: rgba(var(--deep-void), 0.9); border: var(--border-thin) solid rgba(var(--electric-blue), 0.3); border-radius: var(--border-radius-sm); } .nav-links { display: flex; list-style: none; padding: 0; margin: 0; } .nav-item { margin: 0; padding: 0; } .nav-item a { display: block; padding: var(--space-xs) var(--space-sm); color: rgb(var(--electric-blue)); border-bottom: none; text-transform: uppercase; font-size: var(--font-sm); letter-spacing: var(--letter-wide); } .nav-item a:hover, .nav-item a:focus, .nav-item a.active { background-color: rgba(var(--electric-blue), 0.2); color: rgb(var(--electric-blue)); } .nav-item a:hover::before, .nav-item a:focus::before, .nav-item a.active::before, .nav-item a:hover::after, .nav-item a:focus::after, .nav-item a.active::after { content: none; } /* TABLES */ table { width: 100%; border-collapse: collapse; margin: var(--space-lg) 0; font-size: var(--font-sm); } th, td { padding: var(--space-sm); text-align: left; border: var(--border-thin) solid rgba(var(--terminal-white), 0.2); } th { background-color: rgba(var(--dark-console), 0.7); color: rgb(var(--electric-blue)); font-weight: bold; text-transform: uppercase; letter-spacing: var(--letter-wide); } tbody tr:nth-child(odd) { background-color: rgba(var(--deep-void), 0.4); } tbody tr:hover { background-color: rgba(var(--electric-blue), 0.1); } /* RESPONSIVE ADJUSTMENTS */ @media (max-width: 768px) { html { font-size: 14px; } .main-content { padding: var(--space-md); } .nav-links { flex-direction: column; } h1 { font-size: var(--font-3xl); } h2 { font-size: var(--font-2xl); } } /* TERMINAL BLINKING CURSOR */ .cursor { display: inline-block; width: 10px; height: 20px; background-color: rgb(var(--heroku-amber)); animation: blink var(--blink-speed) step-end infinite; vertical-align: middle; margin-left: var(--space-2xs); box-shadow: 0 0 8px rgba(var(--heroku-amber), 0.8); } /* SPECIAL HIGHLIGHTS */ .cmd-prompt { color: rgb(var(--heroku-purple)); font-weight: bold; } .argument { color: rgb(var(--heroku-blue)); } .string { color: rgb(var(--heroku-fuchsia)); } .comment { color: rgba(var(--terminal-white), 0.5); font-style: italic; } .error { color: rgb(var(--error-red)); font-weight: bold; } .success { color: rgb(var(--success-green)); font-weight: bold; } .warning { color: rgb(var(--warning-amber)); font-weight: bold; } /* CODE HIGHLIGHTING */ .keyword { color: rgb(var(--digital-purple)); font-weight: bold; } .function { color: rgb(var(--electric-blue)); } .variable { color: rgb(var(--terminal-white)); } .number { color: rgb(var(--burnt-orange)); } .operator { color: rgb(var(--toxic-yellow)); } /* LAYOUT UTILITIES */ .full-width { width: 100%; max-width: none; } .center-text { text-align: center; } .mono-flow { display: flex; flex-direction: column; gap: var(--space-md); } /* NEON MATRIX RAIN EFFECT - For heavy styling */ @keyframes matrixRain { 0% { transform: translateY(-100%); opacity: 1; } 100% { transform: translateY(1000%); opacity: 0; } } .matrix-container { position: fixed; top: 0; left: 0; width: 100%; height: 100%; z-index: -1; overflow: hidden; opacity: 0.5; } /* EXTREME SELECTION STYLING */ ::selection { background-color: rgb(var(--neon-green)); color: rgb(var(--terminal-black)); text-shadow: none; }