@font-face { font-family: 'Geist'; font-weight: 100 900; src: url('assets/fonts/geist-cyrillic.woff2') format('woff2'); unicode-range: U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116; }
@font-face { font-family: 'Geist'; font-weight: 100 900; src: url('assets/fonts/geist-latin.woff2') format('woff2'); unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD; }
@font-face { font-family: 'Geist Mono'; font-weight: 100 900; src: url('assets/fonts/geist-mono-cyrillic.woff2') format('woff2'); unicode-range: U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116; }
@font-face { font-family: 'Geist Mono'; font-weight: 100 900; src: url('assets/fonts/geist-mono-latin.woff2') format('woff2'); unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD; }
:root { --ink:#0d0f0e; --paper:#f5f4ef; --muted:#666862; --line:#d8d6cc; --mono:'Geist Mono',ui-monospace,monospace; --display:'Geist',system-ui,sans-serif; }
* { box-sizing: border-box; }
html { scroll-behavior: smooth; }
body { margin:0; background:var(--paper); color:var(--ink); font-family:var(--display); font-size:15px; line-height:1.6; }
a { color:inherit; }
.top { position:sticky; top:0; z-index:2; background:rgba(245,244,239,.94); border-bottom:1px solid var(--line); backdrop-filter:blur(14px); }
.top-inner { width:min(960px,calc(100% - 40px)); margin:auto; min-height:64px; display:flex; align-items:center; justify-content:space-between; gap:20px; }
.back { color:var(--muted); font-family:var(--mono); font-size:10px; letter-spacing:.08em; text-decoration:none; text-transform:uppercase; }
.back:hover { color:var(--ink); }
.mark { display:flex; align-items:center; gap:8px; font-size:11px; font-weight:650; letter-spacing:.1em; }
.mark img { width:24px; height:24px; }
article { width:min(860px,calc(100% - 40px)); margin:auto; padding:64px 0 100px; }
.doc-kicker { margin:0 0 12px; color:var(--muted); font-family:var(--mono); font-size:9px; letter-spacing:.12em; text-transform:uppercase; }
h1 { margin:0 0 28px; font-size:clamp(40px,6vw,68px); line-height:.98; letter-spacing:-.06em; font-weight:600; }
h2 { margin:54px 0 14px; font-size:clamp(26px,3.4vw,38px); line-height:1.05; letter-spacing:-.04em; font-weight:600; }
h3 { margin:34px 0 10px; font-size:20px; letter-spacing:-.025em; }
h4 { margin:25px 0 8px; font-size:16px; }
p, li { color:#3f3e39; overflow-wrap:anywhere; }
p { margin:12px 0; }
ul, ol { padding-left:22px; }
li { margin:5px 0; }
hr { border:0; border-top:1px solid var(--line); margin:42px 0; }
blockquote { margin:24px 0; padding:12px 18px; border-left:2px solid var(--ink); color:var(--muted); }
code { font-family:var(--mono); font-size:.86em; background:#e9e8e1; padding:2px 5px; overflow-wrap:anywhere; }
pre { width:100%; max-width:100%; overflow:auto; padding:18px; background:var(--ink); color:var(--paper); line-height:1.5; box-sizing:border-box; }
pre code { background:none; padding:0; color:inherit; font-size:12px; }
table { display:block; width:100%; max-width:100%; overflow-x:auto; border-collapse:collapse; margin:22px 0; font-size:14px; }
th, td { padding:9px 8px; border-bottom:1px solid var(--line); text-align:left; vertical-align:top; }
th { color:var(--muted); font-family:var(--mono); font-size:9px; letter-spacing:.08em; text-transform:uppercase; font-weight:400; }
a { text-decoration-thickness:1px; text-underline-offset:3px; }
@media (max-width:600px) { article { padding-top:38px; } h1 { font-size:40px; } table { font-size:12px; } th,td { padding:7px 5px; } }

.tech-note { margin:0 0 22px; padding:10px 14px; border:1px solid var(--line); background:#fff; color:var(--muted); font-size:12px; line-height:1.5; }
.tech-note a { color:var(--ink); }

.lang-switch { font-family:var(--mono); font-size:10px; letter-spacing:.08em; }
.lang-switch a { display:inline-block; padding:4px 7px; border:1px solid var(--line); border-radius:4px; color:var(--muted); text-decoration:none; }
.lang-switch a:hover { color:var(--ink); border-color:var(--ink); }
