/* Bundled fonts (SIL Open Font License): Unbounded for headings, Onest for text; Latin and Cyrillic subsets. */ @font-face { font-family: 'Unbounded'; font-weight: 200 900; font-display: swap; src: url('./fonts/unbounded-latin.woff2') format('woff2'); unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; } @font-face { font-family: 'Unbounded'; font-weight: 200 900; font-display: swap; src: url('./fonts/unbounded-cyrillic.woff2') format('woff2'); unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; } @font-face { font-family: 'Onest'; font-weight: 100 900; font-display: swap; src: url('./fonts/onest-latin.woff2') format('woff2'); unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; } @font-face { font-family: 'Onest'; font-weight: 100 900; font-display: swap; src: url('./fonts/onest-cyrillic.woff2') format('woff2'); unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; } /* Design tokens: a studio-lit 3D viewport. Axis colours (X red, Y green, Z blue) are marks and lines, not text. */ :root { color-scheme: light; /* Palette. The page is a 3D viewport: a studio backdrop and the three axis colours (X red, Y green, Z blue), which are marks and lines rather than text. Dark is the default theme; see :root[data-theme='dark']. */ --paper: #f4f6f8; --ink: #15181d; --muted: #5b6571; --x: #e0384b; --y: #5aa300; --z: #2c63e0; --z-text: #2455c9; /* Surfaces */ --hero-top: #f5f7fa; --hero-bottom: #e6e9ee; --stage-top: #d8dde4; --stage-bottom: #cdd3db; --plate-a: #f3f5f8; --plate-b: #e6e9ed; --plate-c: #d3d9e0; --pill-bg: rgba(255, 255, 255, 0.72); --disc-bg: rgba(244, 246, 248, 0.62); --topbar-bg: rgba(244, 246, 248, 0.86); --grid: rgba(21, 24, 29, 0.2); --img-shadow: rgba(21, 24, 29, 0.28); --dot-glow: rgba(90, 163, 0, 0.2); /* Voxel covers of projects without a demo image */ --cube-top: #f9fafb; --cube-left: #d6dbe2; --cube-right: #b8c0cb; --cube-edge: rgba(21, 24, 29, 0.16); --cover-grid: rgba(21, 24, 29, 0.09); /* The closing contact band is the inverse of the page */ --band-bg: #15181d; --band-ink: #f4f6f8; /* Derived from the palette above, so they follow the theme */ --line: color-mix(in srgb, var(--ink) 14%, transparent); --ring: color-mix(in srgb, var(--ink) 9%, transparent); --horizon: color-mix(in srgb, var(--ink) 22%, transparent); --chip: color-mix(in srgb, var(--ink) 7%, transparent); --ink-2: color-mix(in srgb, var(--ink) 86%, transparent); --ink-3: color-mix(in srgb, var(--ink) 76%, transparent); --ink-line: color-mix(in srgb, var(--ink) 32%, transparent); --band-2: color-mix(in srgb, var(--band-ink) 70%, transparent); --band-3: color-mix(in srgb, var(--band-ink) 58%, transparent); --band-line: color-mix(in srgb, var(--band-ink) 22%, transparent); --band-underline: color-mix(in srgb, var(--band-ink) 38%, transparent); --radius-plate: 18px; --radius-control: 10px; --shell: min(1240px, calc(100% - 48px)); --gutter: clamp(20px, 3vw, 32px); --section: clamp(84px, 11vw, 148px); --font-body: 'Onest', 'Segoe UI', system-ui, sans-serif; --font-head: 'Unbounded', 'Segoe UI', system-ui, sans-serif; } :root[data-theme='dark'] { color-scheme: dark; --paper: #1c2026; --ink: #e9edf2; --muted: #9aa5b1; --x: #ff5a6e; --y: #86d62c; --z: #5b8dff; --z-text: #8db0ff; --hero-top: #282d35; --hero-bottom: #1c2026; --stage-top: #14171b; --stage-bottom: #0f1114; --plate-a: #363c46; --plate-b: #2a2f37; --plate-c: #1f2329; --pill-bg: rgba(255, 255, 255, 0.07); --disc-bg: rgba(40, 45, 53, 0.72); --topbar-bg: rgba(28, 32, 38, 0.86); --grid: rgba(255, 255, 255, 0.15); --img-shadow: rgba(0, 0, 0, 0.55); --dot-glow: rgba(134, 214, 44, 0.24); --cube-top: #e9edf2; --cube-left: #9aa5b3; --cube-right: #69737f; --cube-edge: rgba(0, 0, 0, 0.4); --cover-grid: rgba(255, 255, 255, 0.09); --band-bg: #e8ebef; --band-ink: #15181d; } * { box-sizing: border-box; } html { background: var(--paper); scroll-behavior: smooth; scroll-padding-top: 124px; } body { margin: 0; color: var(--ink); font: 400 17px/1.6 var(--font-body); -webkit-font-smoothing: antialiased; text-rendering: optimizeLegibility; } a { color: inherit; } h1, h2, h3, p, ul, dl, dd, figure { margin: 0; } ul { padding: 0; list-style: none; } ::selection { background: var(--z); color: #fff; } :focus-visible { outline: 3px solid var(--z); outline-offset: 3px; border-radius: 4px; } @media (prefers-reduced-motion: reduce) { html { scroll-behavior: auto; } *, *::before, *::after { animation-duration: 0.01ms !important; animation-delay: 0ms !important; transition-duration: 0.01ms !important; } } /* Bilingual text: both languages are in the markup, the html[data-lang] attribute picks one. */ html[data-lang='ru'] [data-en], html[data-lang='en'] [data-ru] { display: none !important; }