:root { --color-bg: #050705; --color-bg-raised: #0d100d; --color-fg: oklch(84% 0.01 240); --color-fg-dim: oklch(76% 0.01 240); --color-accent: oklch(80% 0.19 142); --color-accent-bright: oklch(88% 0.17 142); --color-accent-mid: oklch(55% 0.13 142); --color-accent-dim: oklch(50% 0.13 142); --color-silver: oklch(58% 0.01 240); --color-silver-dim: oklch(48% 0.01 240); --color-num: oklch(40% 0.02 240); --font-mono: 'JetBrains Mono', ui-monospace, monospace; --border: 1px solid oklch(32% 0.06 142 / 0.45); } * { 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; } /* лёгкий градиент глубины поверх дождя, под контентом */ body::after { content: ''; position: fixed; inset: 0; z-index: -1; pointer-events: none; background: linear-gradient(180deg, rgba(4, 6, 4, 0.35), rgba(4, 6, 4, 0.55) 220px, rgba(4, 6, 4, 0.6)); } ::selection { background: oklch(42% 0.14 142); color: #eafff0; } 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: 2rem 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( 180deg, rgba(0, 0, 0, 0) 0px, rgba(0, 0, 0, 0) 2px, rgba(80, 255, 140, 0.025) 3px ); } /* --- шапка: прилипает к верху, слегка размыта поверх дождя --- */ .site-header { position: sticky; top: 0; z-index: 10; border-bottom: var(--border); background: rgba(4, 6, 4, 0.55); backdrop-filter: blur(8px); -webkit-backdrop-filter: blur(8px); } .site-header__inner { display: flex; align-items: center; justify-content: space-between; gap: 1rem; flex-wrap: wrap; max-width: 860px; margin: 0 auto; padding: 1.1rem 1.5rem; } .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)); } @keyframes blink { 0%, 49% { opacity: 1; } 50%, 100% { opacity: 0; } } .logo .cursor { animation: blink 1s step-end infinite; } .nav-links { display: flex; align-items: center; 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); } .lang-btn { background: transparent; border: 1px solid var(--color-accent-dim); color: var(--color-fg); font-family: var(--font-mono); font-size: 0.75rem; letter-spacing: 0.06em; padding: 0.3rem 0.7rem; cursor: pointer; } .lang-btn:hover { border-color: var(--color-accent); color: var(--color-accent); box-shadow: 0 0 6px var(--color-accent-dim); } /* --- терминальный префикс перед заголовками --- */ .prompt::before { content: 'cacto@matrix:~$ '; color: var(--color-accent-dim); } /* --- 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; } /* --- нумерованный заголовок секции (01 / whoami, 02 / experience...) --- */ .section-heading { display: flex; align-items: baseline; gap: 0.75rem; font-size: 0.9rem; font-weight: 500; letter-spacing: 0.03em; text-transform: uppercase; border-bottom: var(--border); padding-bottom: 0.6rem; margin-bottom: 1.5rem; color: var(--color-accent-mid); } .section-heading__num { color: var(--color-num); font-size: 0.85rem; }