/* 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 */ /* PROFESSIONAL DEVELOPER COLOR SYSTEM */ :root { /* Heroku-inspired color system - refined for professional appeal */ --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; /* VSCode-inspired syntax highlighting colors */ --vscode-blue: 86, 156, 214; --vscode-green: 78, 201, 176; --vscode-yellow: 220, 220, 170; --vscode-orange: 209, 105, 105; --vscode-purple: 197, 134, 192; --vscode-text: 212, 212, 212; --vscode-comment: 106, 153, 85; --vscode-keyword: 86, 156, 214; /* Light theme alternatives */ --light-bg: 250, 250, 250; --light-text: 40, 40, 40; --light-code-bg: 245, 245, 245; /* Terminal colors - refined */ --neon-green: 40, 220, 140; --electric-blue: 80, 180, 255; --toxic-yellow: 255, 204, 0; --terminal-white: 230, 230, 230; --burnt-orange: 235, 128, 60; --digital-purple: 140, 80, 200; --cyber-pink: 220, 70, 170; /* Background and surfaces */ --terminal-black: 18, 18, 22; --deep-void: 22, 22, 30; --dark-console: 32, 32, 42; --error-red: 235, 85, 85; --warning-amber: 235, 164, 40; --success-green: 70, 210, 130; /* 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 - Refined typographic hierarchy */ --primary-font: 'JetBrains Mono', 'Fira Code', 'IBM Plex Mono', 'SF Mono', monospace; --heading-font: 'IBM Plex Mono', 'JetBrains Mono', 'SF Mono', monospace; --code-font: 'Fira Code', 'JetBrains Mono', 'SF Mono', 'Roboto Mono', monospace; --fallback-monospace: 'Consolas', 'Courier New', monospace; /* Line heights for perfect readability */ --line-tight: 1.25; --line-code: 1.45; --line-base: 1.65; --line-loose: 1.85; /* Font weights */ --font-light: 300; --font-regular: 400; --font-medium: 500; --font-semibold: 600; --font-bold: 700; /* 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: antialiased; -moz-osx-font-smoothing: grayscale; text-rendering: optimizeLegibility; font-feature-settings: "liga", "kern"; } body { font-family: var(--primary-font), 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; position: relative; overflow-x: hidden; min-height: 100vh; font-weight: var(--font-regular); letter-spacing: -0.015em; } /* PROFESSIONAL BACKGROUND EFFECTS */ body::before { content: ""; position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: linear-gradient( 135deg, rgba(var(--terminal-black), 1) 0%, rgba(var(--deep-void), 1) 100% ); z-index: -2; } /* Subtle texture overlay */ body::after { content: ""; position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-image: radial-gradient( rgba(var(--heroku-green), 0.01) 1px, transparent 2px ), linear-gradient( rgba(var(--heroku-purple), 0.005) 1px, transparent 1px ); background-size: 30px 30px, 60px 60px; background-position: 0 0, 15px 15px; z-index: -1; pointer-events: none; opacity: 0.8; } /* PROFESSIONAL TYPOGRAPHY SYSTEM */ h1, h2, h3, h4, h5, h6 { font-family: var(--heading-font), var(--fallback-monospace); font-weight: var(--font-semibold); letter-spacing: -0.025em; color: rgb(var(--terminal-white)); } p, a, li, blockquote, span, div { font-family: var(--primary-font), var(--fallback-monospace); } code, pre, .code, .cmd-prompt, .terminal-input { font-family: var(--code-font), var(--fallback-monospace); font-feature-settings: "liga" 0; /* Disable ligatures in code */ } h1 { font-size: var(--font-4xl); line-height: 1.2; margin: var(--space-2xl) 0 var(--space-lg); color: rgb(var(--vscode-blue)); position: relative; padding-bottom: var(--space-xs); border-bottom: 2px solid rgba(var(--vscode-blue), 0.3); } h1::after { content: ""; position: absolute; bottom: -2px; left: 0; width: 100px; height: 2px; background-color: rgb(var(--vscode-blue)); } h2 { font-size: var(--font-3xl); line-height: 1.25; margin: var(--space-xl) 0 var(--space-md); color: rgb(var(--neon-green)); position: relative; padding-left: var(--space-sm); } h2::before { content: "#"; position: absolute; left: -8px; color: rgba(var(--neon-green), 0.5); font-weight: var(--font-bold); } h3 { font-size: var(--font-2xl); line-height: 1.3; margin: var(--space-lg) 0 var(--space-md); color: rgb(var(--heroku-blue)); border-bottom: 1px solid rgba(var(--heroku-blue), 0.2); padding-bottom: var(--space-2xs); display: inline-block; } h4 { font-size: var(--font-xl); line-height: 1.35; margin: var(--space-lg) 0 var(--space-sm); color: rgb(var(--heroku-amber)); font-weight: var(--font-medium); } h4::before { content: "##"; margin-right: var(--space-xs); opacity: 0.5; font-size: 0.8em; color: rgb(var(--heroku-amber)); } h5, h6 { font-size: var(--font-lg); line-height: 1.4; margin: var(--space-md) 0 var(--space-xs); color: rgb(var(--heroku-fuchsia)); font-weight: var(--font-medium); } /* PARAGRAPH STYLING */ p { margin-bottom: var(--space-lg); line-height: var(--line-base); max-width: 75ch; font-size: var(--font-md); color: rgba(var(--terminal-white), 0.9); position: relative; } .main-content > p, article p { margin-left: var(--space-md); } /* Only style paragraphs in the main content area with the line marker */ .main-content > p::before, article p::before { content: ""; position: absolute; left: -1rem; top: 0.5rem; width: 3px; height: 1rem; background-color: rgba(var(--heroku-green), 0.5); border-radius: 1px; } /* Remove line marker from certain contexts */ .terminal-output p::before, blockquote p::before, .post-header p::before, .code-block p::before { display: none; } /* Subtle cursor at end of last paragraph in articles */ article p:last-of-type::after { content: ""; display: inline-block; width: 2px; height: 1em; vertical-align: text-bottom; background-color: rgb(var(--heroku-green)); margin-left: 0.2em; opacity: 0.8; animation: blink-cursor 1s step-end infinite; } @keyframes blink-cursor { 0%, 100% { opacity: 0.8; } 50% { opacity: 0; } } /* LINKS - PROFESSIONAL STYLE */ a { color: rgb(var(--electric-blue)); text-decoration: none; position: relative; font-weight: var(--font-medium); transition: all 0.2s ease; display: inline-block; border-bottom: 1px solid rgba(var(--electric-blue), 0.3); padding-bottom: 1px; } a:hover, a:focus { color: rgb(var(--heroku-blue)); border-bottom: 1px solid rgb(var(--heroku-blue)); outline: none; } /* Professional underline animation */ a:not(.nav-item a):not(.site-title a)::after { content: ""; position: absolute; bottom: -1px; left: 0; width: 0; height: 1px; background-color: rgb(var(--heroku-blue)); transition: width 0.3s ease; } a:not(.nav-item a):not(.site-title a):hover::after, a:not(.nav-item a):not(.site-title a):focus::after { width: 100%; } /* Special styling for external links */ a[href^="http"]::after { content: "↗"; display: inline-block; margin-left: 3px; font-size: 0.8em; vertical-align: super; opacity: 0.8; } /* CODE ELEMENTS - IDE-INSPIRED */ code, pre { font-family: var(--code-font), var(--fallback-monospace); font-size: var(--font-sm); line-height: var(--line-code); border-radius: 4px; } code { padding: 0.15em 0.4em; background-color: rgba(var(--deep-void), 0.6); color: rgb(var(--vscode-yellow)); border: 1px solid rgba(var(--vscode-yellow), 0.15); font-weight: var(--font-regular); white-space: nowrap; } pre { padding: var(--space-lg); margin: var(--space-xl) 0; background-color: rgba(var(--terminal-black), 0.7); border-radius: 6px; border-left: 3px solid rgb(var(--vscode-blue)); position: relative; overflow-x: auto; box-shadow: 0 4px 16px rgba(0, 0, 0, 0.15); } /* File indicator for code blocks */ pre::before { content: attr(data-language); position: absolute; top: 0; right: 12px; background-color: rgba(var(--vscode-blue), 0.2); color: rgb(var(--vscode-blue)); padding: 1px 8px; font-size: 0.7rem; border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; text-transform: uppercase; letter-spacing: 0.05em; font-weight: 500; } /* Line numbers for code blocks */ pre { counter-reset: line; padding-left: 3.5rem; } pre code { border: none; padding: 0; background-color: transparent; color: rgb(var(--terminal-white)); display: block; position: relative; white-space: pre; } pre code .line { display: inline-block; position: relative; } pre code .line::before { counter-increment: line; content: counter(line); position: absolute; left: -3rem; width: 2rem; text-align: right; color: rgba(var(--terminal-white), 0.4); font-size: 0.8em; } /* Syntax highlighting - VS Code inspired */ .hljs-keyword { color: rgb(var(--vscode-blue)); font-weight: var(--font-medium); } .hljs-string { color: rgb(var(--vscode-orange)); } .hljs-comment { color: rgb(var(--vscode-comment)); font-style: italic; } .hljs-function { color: rgb(var(--vscode-yellow)); } .hljs-number { color: rgb(var(--vscode-green)); } .hljs-operator, .hljs-punctuation { color: rgb(var(--vscode-text)); } .hljs-variable { color: rgb(var(--vscode-purple)); } /* BLOCKQUOTE - ELEGANT STYLING */ blockquote { margin: var(--space-xl) 0; padding: var(--space-lg) var(--space-xl); border-left: 3px solid rgb(var(--electric-blue)); background-color: rgba(var(--deep-void), 0.5); position: relative; border-radius: 0 6px 6px 0; box-shadow: 0 2px 15px rgba(0, 0, 0, 0.1); } blockquote::before { content: """; position: absolute; top: -20px; left: var(--space-md); font-size: 4rem; font-family: Georgia, serif; color: rgba(var(--electric-blue), 0.3); line-height: 1; } blockquote p { font-style: italic; color: rgba(var(--terminal-white), 0.9); margin-left: 0; padding-left: 0; border-left: none; line-height: 1.7; max-width: none; } blockquote p:first-of-type::before { display: none; } blockquote p:last-of-type { margin-bottom: 0; } blockquote cite { display: block; margin-top: var(--space-md); font-style: normal; font-weight: var(--font-medium); opacity: 0.8; text-align: right; font-size: 0.9em; color: rgb(var(--electric-blue)); } blockquote cite::before { content: "— "; color: rgba(var(--electric-blue), 0.7); } /* Special styling for note/info blockquotes */ blockquote.note { border-left-color: rgb(var(--vscode-blue)); background-color: rgba(var(--vscode-blue), 0.07); } blockquote.note::before { content: "ℹ️"; font-size: 1.5rem; top: -10px; color: rgb(var(--vscode-blue)); } /* LISTS - MODERN DEVELOPER STYLE */ ul, ol { margin: var(--space-lg) 0; padding-left: var(--space-xl); } li { margin-bottom: var(--space-md); position: relative; padding-left: var(--space-xs); line-height: 1.6; } /* Custom bullet points */ ul { list-style: none; } ul li::before { content: "→"; color: rgb(var(--electric-blue)); position: absolute; left: -1.2em; font-weight: var(--font-bold); font-size: 0.85em; line-height: 1.85; } /* Nested list styling */ ul ul li::before { content: "⟶"; color: rgba(var(--electric-blue), 0.8); } /* Ordered list with modern numbering */ ol { counter-reset: custom-counter; list-style-type: none; } ol li { counter-increment: custom-counter; } ol li::before { content: counter(custom-counter); color: rgb(var(--vscode-blue)); font-weight: var(--font-medium); background: rgba(var(--vscode-blue), 0.1); border-radius: 50%; width: 1.5em; height: 1.5em; display: flex; align-items: center; justify-content: center; position: absolute; left: -2.5em; top: -0.15em; font-size: 0.85em; } /* Nested ordered lists */ ol ol { margin-top: var(--space-sm); margin-bottom: 0; } ol ol li::before { content: counter(custom-counter, lower-alpha); background: rgba(var(--vscode-blue), 0.07); } /* CONTAINERS AND SECTIONS - PROFESSIONAL IDE STYLE */ .main-content { max-width: 1100px; margin: var(--space-xl) auto var(--space-2xl); padding: var(--space-xl) var(--space-2xl); background-color: rgba(var(--deep-void), 0.5); border: 1px solid rgba(var(--vscode-blue), 0.1); border-radius: 8px; box-shadow: 0 10px 30px -10px rgba(0, 0, 0, 0.3), 0 1px 4px rgba(0, 0, 0, 0.1), 0 0 80px rgba(var(--heroku-dark-purple), 0.05) inset; position: relative; backdrop-filter: blur(10px); } /* VS Code-inspired tab header */ .main-content::before { content: "kennethreitz.org"; position: absolute; top: -30px; left: 10px; background-color: rgba(var(--terminal-black), 0.8); color: rgb(var(--terminal-white)); padding: 6px 16px; font-size: var(--font-sm); font-weight: var(--font-medium); border-top-left-radius: 6px; border-top-right-radius: 6px; border: 1px solid rgba(var(--vscode-blue), 0.2); border-bottom: 2px solid rgb(var(--vscode-blue)); letter-spacing: 0.03em; } /* Section dividers */ .content-section { margin-bottom: var(--space-2xl); padding-bottom: var(--space-lg); border-bottom: 1px dashed rgba(var(--vscode-blue), 0.2); } .content-section:last-child { border-bottom: none; margin-bottom: 0; } .container { width: 100%; max-width: 1400px; margin: 0 auto; padding: 0 var(--space-lg); position: relative; } /* Content wrapper with max width for better readability */ .content-wrapper { max-width: 820px; margin: 0 auto; } /* HORIZONTAL RULE - REFINED DEVELOPER STYLE */ hr { border: none; height: 1px; background: linear-gradient( to right, transparent, rgba(var(--vscode-blue), 0.5), transparent ); margin: var(--space-2xl) 0; position: relative; opacity: 0.7; } hr::after { content: ""; position: absolute; top: -3px; left: 50%; transform: translateX(-50%); width: 6px; height: 6px; border-radius: 50%; background-color: rgb(var(--vscode-blue)); box-shadow: 0 0 5px rgba(var(--vscode-blue), 0.5); } /* Code section separator */ hr.code-sep { margin: var(--space-xl) 0; height: 2px; background: linear-gradient( to right, rgba(var(--neon-green), 0.2), rgba(var(--neon-green), 0.5), rgba(var(--neon-green), 0.2) ); } hr.code-sep::after { content: "{ ... }"; position: absolute; top: -10px; background-color: rgb(var(--terminal-black)); padding: 0 var(--space-sm); font-family: var(--code-font); color: rgb(var(--neon-green)); font-size: var(--font-xs); } /* VS CODE-INSPIRED STATUS BAR */ .status-bar { position: fixed; bottom: 0; left: 0; width: 100%; background-color: rgb(var(--terminal-black)); color: rgb(var(--terminal-white)); display: flex; justify-content: space-between; font-size: var(--font-xs); border-top: 1px solid rgba(var(--vscode-blue), 0.3); z-index: 100; height: 24px; line-height: 24px; font-family: var(--code-font); box-shadow: 0 -1px 3px rgba(0, 0, 0, 0.1); } .status-bar-left, .status-bar-right { display: flex; align-items: center; } .status-bar-item { padding: 0 var(--space-md); border-right: 1px solid rgba(var(--terminal-white), 0.1); display: flex; align-items: center; height: 100%; white-space: nowrap; font-size: 0.75rem; } .status-bar-item:hover { background-color: rgba(var(--vscode-blue), 0.1); } .status-bar-item:last-child { border-right: none; } /* Special status indicators */ .status-item-important { background-color: rgba(var(--vscode-blue), 0.2); font-weight: var(--font-medium); color: rgb(var(--vscode-blue)); } .status-bar-item .function { color: rgb(var(--vscode-yellow)); margin-right: var(--space-2xs); } .status-bar-item .success { color: rgb(var(--success-green)); } .status-bar-item .warning { color: rgb(var(--warning-amber)); } .status-bar-item .error { color: rgb(var(--error-red)); } /* HEADER ELEMENTS - PROFESSIONAL IDE STYLE */ .site-header { padding: var(--space-sm) 0; margin-bottom: var(--space-xl); border-bottom: 1px solid rgba(var(--vscode-blue), 0.2); display: flex; justify-content: space-between; align-items: center; background-color: rgba(var(--terminal-black), 0.95); position: sticky; top: 0; z-index: 100; backdrop-filter: blur(10px); box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); } .header-container { display: flex; justify-content: space-between; align-items: center; width: 100%; padding: 0 var(--space-lg); } .site-title { display: flex; align-items: center; font-family: var(--code-font); font-size: var(--font-lg); font-weight: var(--font-medium); color: rgb(var(--terminal-white)); } .main-logo { display: flex; align-items: center; color: rgb(var(--terminal-white)); text-decoration: none; border-bottom: none; padding: var(--space-xs) 0; } .main-logo:hover, .main-logo:focus { color: rgb(var(--vscode-blue)); } .main-logo .logo-text { margin: 0 var(--space-2xs); color: rgb(var(--electric-blue)); font-weight: var(--font-bold); } /* Window controls in header */ .window-controls-container { display: flex; gap: 6px; margin-right: var(--space-md); } .window-control { width: 12px; height: 12px; border-radius: 50%; opacity: 0.8; } .window-control.close { background-color: #ff5f57; } .window-control.minimize { background-color: #febc2e; } .window-control.maximize { background-color: #28c840; } /* 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.3s cubic-bezier(0.17, 0.67, 0.83, 0.67), opacity 0.3s cubic-bezier(0.17, 0.67, 0.83, 0.67); opacity: 0; filter: drop-shadow(0 10px 20px rgba(0, 0, 0, 0.5)); } .terminal-panel.active { display: block; opacity: 1; transform: scale(1); animation: terminal-glow 2s ease-in-out infinite alternate; } @keyframes terminal-glow { 0% { filter: drop-shadow(0 10px 20px rgba(0, 0, 0, 0.5)); } 100% { filter: drop-shadow(0 10px 30px rgba(var(--heroku-green), 0.2)); } } .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: linear-gradient( rgba(var(--heroku-green), 0.03) 1px, transparent 1px ), linear-gradient( 90deg, rgba(var(--heroku-green), 0.03) 1px, transparent 1px ), radial-gradient( rgba(var(--heroku-green), 0.03) 2px, transparent 2px ); background-size: 30px 30px, 30px 30px, 30px 30px; background-position: -15px -15px, -15px -15px, -15px -15px; position: relative; -webkit-font-smoothing: none; font-variant-ligatures: none; scrollbar-width: thin; scrollbar-color: rgba(var(--heroku-green), 0.5) rgba(var(--terminal-black), 0.8); border-bottom: var(--border-thin) solid rgba(var(--heroku-green), 0.3); } .terminal-body::-webkit-scrollbar { width: 8px; height: 8px; } .terminal-body::-webkit-scrollbar-track { background: rgba(var(--terminal-black), 0.8); } .terminal-body::-webkit-scrollbar-thumb { background-color: rgba(var(--heroku-green), 0.5); border-radius: 4px; } .terminal-body::-webkit-scrollbar-thumb:hover { background-color: rgba(var(--heroku-green), 0.7); } .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; font-size: var(--font-lg); } .terminal-ascii-art { margin: var(--space-xs) 0; opacity: 0.8; } .terminal-ascii-art pre { margin: 0; padding: 0; background-color: transparent; border: none; color: rgb(var(--heroku-amber)); font-size: 0.7rem; line-height: 1.2; text-shadow: 0 0 5px rgba(var(--heroku-amber), 0.7); user-select: none; } .terminal-ascii-art pre::before { content: none; } .terminal-key-tip { font-size: var(--font-xs); color: rgba(var(--terminal-white), 0.6); margin: var(--space-sm) 0 var(--space-lg) 0; padding-bottom: var(--space-xs); border-bottom: var(--border-thin) dashed rgba(var(--heroku-green), 0.3); } .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-container { margin-top: var(--space-sm); border-top: var(--border-thin) dashed rgba(var(--heroku-green), 0.3); padding-top: var(--space-sm); } .terminal-input-line { display: flex; position: relative; } .cmd-prompt { color: rgb(var(--heroku-green)); font-weight: bold; margin-right: var(--space-xs); white-space: nowrap; position: relative; } .cmd-prompt::before { content: ""; position: absolute; left: -10px; top: 50%; transform: translateY(-50%); width: 6px; height: 6px; border-radius: 50%; background-color: rgb(var(--heroku-green)); opacity: 0.7; box-shadow: 0 0 4px rgba(var(--heroku-green), 0.7); animation: promptPulse 2s infinite; } @keyframes promptPulse { 0%, 100% { opacity: 0.5; transform: translateY(-50%) scale(0.8); } 50% { opacity: 0.9; transform: translateY(-50%) scale(1.2); } } .input-wrapper { flex: 1; position: relative; } .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 */ position: relative; } /* Terminal command autocomplete */ .terminal-autocomplete { display: none; background-color: rgba(var(--heroku-dark-purple), 0.95); border: var(--border-thin) solid rgba(var(--heroku-green), 0.4); border-radius: var(--border-radius-sm); padding: var(--space-xs); margin-top: var(--space-xs); max-width: 80%; box-shadow: 0 4px 16px rgba(0, 0, 0, 0.3); } .terminal-autocomplete.active { display: block; } .autocomplete-item { padding: var(--space-2xs) var(--space-xs); cursor: pointer; border-radius: var(--border-radius-sm); display: flex; align-items: center; } .autocomplete-item:hover, .autocomplete-item.selected { background-color: rgba(var(--heroku-green), 0.2); } .autocomplete-icon { margin-right: var(--space-xs); color: rgb(var(--heroku-amber)); } .autocomplete-command { color: rgb(var(--heroku-green)); font-weight: bold; margin-right: var(--space-xs); } .autocomplete-description { color: rgba(var(--terminal-white), 0.7); font-size: var(--font-sm); } /* Terminal stats at bottom */ .terminal-stats { margin-top: var(--space-xs); display: flex; gap: var(--space-md); font-size: var(--font-xs); color: rgba(var(--terminal-white), 0.6); padding-bottom: var(--space-xs); } .terminal-stat-item { display: flex; align-items: center; gap: var(--space-2xs); } .keyboard-shortcut { margin-left: auto; font-size: var(--font-xs); color: rgba(var(--terminal-white), 0.7); } .key { display: inline-block; padding: 0 var(--space-2xs); background-color: rgba(var(--heroku-amber), 0.2); border: var(--border-thin) solid rgba(var(--heroku-amber), 0.5); border-radius: var(--border-radius-sm); font-family: var(--base-monospace); color: rgb(var(--heroku-amber)); line-height: 1.4; font-size: 0.8em; box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2); } .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 - VS CODE SIDEBAR STYLE */ .main-nav { background-color: rgba(var(--terminal-black), 0.8); border-radius: 4px; transition: all 0.3s ease; } .nav-wrapper { display: flex; flex-direction: column; } .nav-links { display: flex; flex-wrap: wrap; list-style: none; padding: 0; margin: 0; font-family: var(--code-font); gap: 4px; } .nav-item { margin: 0; padding: 0; position: relative; } .nav-item a { display: flex; align-items: center; padding: var(--space-xs) var(--space-md); color: rgba(var(--terminal-white), 0.8); border-bottom: none; font-size: var(--font-sm); letter-spacing: 0.01em; position: relative; transition: all 0.2s ease; font-weight: var(--font-regular); border-radius: 3px; margin: 0; background-color: rgba(var(--terminal-black), 0.7); box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2); } .nav-item a:hover, .nav-item a:focus { background-color: rgba(var(--vscode-blue), 0.2); color: rgb(var(--terminal-white)); transform: translateY(-1px); box-shadow: 0 2px 5px rgba(0, 0, 0, 0.3); } .nav-item a.active { background-color: rgba(var(--vscode-blue), 0.3); color: rgb(var(--vscode-blue)); font-weight: var(--font-medium); box-shadow: 0 1px 3px rgba(var(--vscode-blue), 0.3); border-left: 2px solid rgb(var(--vscode-blue)); } .nav-item a::after { display: none; } /* Navigation icon indicator */ .nav-item a .cmd-prompt { font-size: 1.1em; margin-right: var(--space-sm); color: rgba(var(--vscode-blue), 0.8); opacity: 0.7; font-weight: normal; } .nav-item a:hover .cmd-prompt, .nav-item a.active .cmd-prompt { opacity: 1; } /* Developer-focused navigation */ .nav-item a .nav-text { text-transform: lowercase; font-family: var(--code-font); letter-spacing: -0.03em; } /* TABLES - PROFESSIONAL DATA DISPLAY */ table { width: 100%; border-collapse: separate; border-spacing: 0; margin: var(--space-xl) 0; font-size: var(--font-sm); font-family: var(--primary-font); border-radius: 6px; overflow: hidden; box-shadow: 0 2px 15px rgba(0, 0, 0, 0.1); background: rgba(var(--terminal-black), 0.5); } th, td { padding: var(--space-md); text-align: left; border-bottom: 1px solid rgba(var(--terminal-white), 0.1); } th { background-color: rgba(var(--vscode-blue), 0.12); color: rgb(var(--vscode-blue)); font-weight: var(--font-semibold); text-transform: uppercase; font-size: 0.75rem; letter-spacing: 0.05em; border-top: none; position: relative; } /* Column separators */ th:not(:last-child)::after, td:not(:last-child)::after { content: ""; position: absolute; right: 0; top: 25%; height: 50%; width: 1px; background-color: rgba(var(--terminal-white), 0.05); } /* First column styling */ tr td:first-child { font-weight: var(--font-medium); color: rgb(var(--vscode-yellow)); } /* Row hover effect */ tbody tr { transition: background-color 0.2s ease; } tbody tr:nth-child(odd) { background-color: rgba(var(--terminal-black), 0.3); } tbody tr:hover { background-color: rgba(var(--vscode-blue), 0.07); } /* Responsive tables */ @media (max-width: 768px) { table { display: block; overflow-x: auto; white-space: nowrap; } th, td { padding: var(--space-sm) var(--space-md); } } /* 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; }