:root { --color-bg: #0a0e0c; --color-bg-raised: #0f1512; --color-fg: #c7c7c7; --color-accent: #00ff41; --color-accent-dim: #0a8f2c; --color-silver: #9fa3a0; --font-mono: 'JetBrains Mono', 'Share Tech Mono', ui-monospace, monospace; --border: 1px solid #163020; } * { box-sizing: border-box; } html, body { margin: 0; min-height: 100%; } body { background: var(--color-bg); color: var(--color-fg); font-family: var(--font-mono); line-height: 1.5; } ::selection { background: var(--color-accent-dim); color: var(--color-bg); } a { color: var(--color-accent); text-decoration: none; } a:hover { text-decoration: underline; } a:focus-visible, button:focus-visible { outline: 1px solid var(--color-accent); outline-offset: 2px; } .container { max-width: 860px; margin: 0 auto; padding: 2.5rem 1.5rem 4rem; } /* --- фон: canvas цифрового дождя --- */ #matrix-rain { position: fixed; inset: 0; z-index: -2; pointer-events: none; } /* лёгкие сканлайны поверх дождя, под контентом */ body::before { content: ''; position: fixed; inset: 0; z-index: -1; pointer-events: none; background: repeating-linear-gradient( to bottom, rgba(0, 0, 0, 0.15) 0px, rgba(0, 0, 0, 0.15) 1px, transparent 1px, transparent 3px ); } /* --- шапка --- */ .site-header { display: flex; align-items: center; justify-content: space-between; gap: 1rem; padding-bottom: 1.5rem; border-bottom: var(--border); flex-wrap: wrap; } .logo { display: flex; align-items: center; gap: 0.6rem; color: var(--color-accent); font-weight: 600; letter-spacing: 0.02em; } .logo svg { width: 20px; height: 20px; filter: drop-shadow(0 0 4px var(--color-accent-dim)); } .nav-links { display: flex; gap: 1.5rem; list-style: none; margin: 0; padding: 0; } .nav-links a { color: var(--color-fg); } .nav-links a:hover, .nav-links a[aria-current='page'] { color: var(--color-accent); } /* --- терминальный префикс перед заголовками --- */ .prompt::before { content: 'cacto@matrix:~$ '; color: var(--color-accent-dim); } /* --- терминальное окно-обёртка для блоков контента --- */ .term-window { border: var(--border); background: var(--color-bg-raised); margin: 1.75rem 0; } .term-window__bar { display: flex; gap: 0.4rem; padding: 0.5rem 0.75rem; border-bottom: var(--border); } .term-window__bar span { width: 9px; height: 9px; border-radius: 50%; background: var(--color-accent-dim); opacity: 0.6; } .term-window__body { padding: 1.25rem 1.5rem; } /* --- ASCII-арт --- */ .ascii-cactus { color: var(--color-accent); font-size: 0.85rem; line-height: 1.15; margin: 0; text-shadow: 0 0 6px var(--color-accent-dim); } /* --- glitch-эффект для акцентного текста --- */ .glitch { position: relative; display: inline-block; } .glitch::before, .glitch::after { content: attr(data-text); position: absolute; inset: 0; overflow: hidden; opacity: 0.7; } .glitch::before { color: var(--color-silver); clip-path: inset(0 0 55% 0); animation: glitch-shift 3.4s infinite steps(2); } .glitch::after { color: var(--color-accent-dim); clip-path: inset(55% 0 0 0); animation: glitch-shift 2.6s infinite steps(2) reverse; } @keyframes glitch-shift { 0%, 92%, 100% { transform: translate(0, 0); } 94% { transform: translate(-2px, 1px); } 96% { transform: translate(2px, -1px); } } /* --- теги (скиллы, стек проекта) --- */ .tag-list { display: flex; flex-wrap: wrap; gap: 0.5rem; list-style: none; margin: 0; padding: 0; } .tag { border: 1px solid var(--color-accent-dim); color: var(--color-accent); padding: 0.15rem 0.6rem; font-size: 0.8rem; }