:root{color-scheme:light dark;--paper:#f7f7f9;--paper-raised:#ffffff;--ink:#14141a;--ink-soft:#4d4d59;--ink-faint:#686875;--line:rgba(20, 20, 26, .12);--line-strong:rgba(20, 20, 26, .28);--grad-blue:#2563eb;--grad-violet:#6d4ae0;--grad-pink:#c8287a;--sec-about:var(--grad-blue);--sec-work:#4956e6;--sec-projects:var(--grad-violet);--sec-notes:#9a39ad;--sec-facts:var(--grad-pink);--focus:var(--grad-violet);--font-sans:'Golos Text', system-ui, -apple-system, 'Segoe UI', sans-serif;--font-mono:'JetBrains Mono', ui-monospace, 'SF Mono', Menlo, monospace;--space-1:4px;--space-2:8px;--gutter:16px;--space-4:24px;--space-5:40px;--section:64px;--radius-s:4px;--radius-m:10px;--measure:640px;--header-height:56px;--topline:3px;--nav-row:52px;--pad:var(--gutter);--hero-top:var(--space-5)}@media(prefers-color-scheme:dark){:root{--paper:#0c0c10;--paper-raised:#16161c;--ink:#ededf2;--ink-soft:#a8a8b5;--ink-faint:#8b8b98;--line:rgba(237, 237, 242, .12);--line-strong:rgba(237, 237, 242, .30);--grad-blue:#4d8bf8;--grad-violet:#9b7cf8;--grad-pink:#ff6aa8;--sec-work:#7484f8;--sec-notes:#cd73d0}}@media(min-width:768px){:root{--pad:var(--space-5);--hero-top:96px;--section:80px}}[data-section=about]{--sec:var(--sec-about)}[data-section=work]{--sec:var(--sec-work)}[data-section=projects]{--sec:var(--sec-projects)}[data-section=notes]{--sec:var(--sec-notes)}[data-section=facts]{--sec:var(--sec-facts)}@font-face{font-family:golos text;font-style:normal;font-display:swap;font-weight:400 600;src:url(../fonts/golos-text-cyrillic-wght-normal.woff2)format('woff2');unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:golos text;font-style:normal;font-display:swap;font-weight:400 600;src:url(../fonts/golos-text-latin-wght-normal.woff2)format('woff2');unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:jetbrains mono;font-style:normal;font-display:swap;font-weight:400 500;src:url(../fonts/jetbrains-mono-cyrillic-wght-normal.woff2)format('woff2');unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:jetbrains mono;font-style:normal;font-display:swap;font-weight:400 500;src:url(../fonts/jetbrains-mono-latin-wght-normal.woff2)format('woff2');unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}*,*::before,*::after{box-sizing:border-box}html{-webkit-text-size-adjust:100%;text-size-adjust:100%}body{margin:0;background:var(--paper);color:var(--ink);font-family:var(--font-sans);font-size:17px;line-height:1.65;-webkit-font-smoothing:antialiased}.tb-wrap{max-width:calc(var(--measure) + 2 * var(--pad));margin:0 auto;padding:0 var(--pad)}.tb-topline{height:var(--topline);background:linear-gradient(90deg,var(--grad-blue),var(--grad-violet),var(--grad-pink))}.tb-mono{font-family:var(--font-mono)}.name{margin:0;font-size:44px;line-height:1.02;font-weight:600;letter-spacing:-.03em}.lede{margin:var(--gutter)0 0;font-size:19px;line-height:1.55;color:var(--ink-soft)}.label{font-family:var(--font-mono);font-size:13px;line-height:1.4;font-weight:500}.meta{font-family:var(--font-mono);font-size:13px;line-height:1.5;font-weight:400;color:var(--ink-faint)}.small{font-size:15px;line-height:1.5}.note-title{font-size:17px;line-height:1.45;font-weight:500}.link-mono{font-family:var(--font-mono);font-size:17px;line-height:1.45;font-weight:500}.nav{font-family:var(--font-mono);font-size:14px;line-height:1.2;font-weight:500}.page-title{margin:12px 0 0;font-size:32px;line-height:1.15;font-weight:600;letter-spacing:-.02em}@media(min-width:768px){.name{font-size:72px;line-height:1;letter-spacing:-.035em}.lede{margin-top:var(--space-4)}}.tb-link{color:var(--ink);text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:3px;text-decoration-color:var(--line-strong)}.tb-link:hover{text-decoration-color:var(--grad-violet)}.tb-link-mono{color:var(--ink);text-decoration:none;display:inline-flex;align-items:baseline;gap:var(--space-1);width:fit-content}.tb-arrow{color:var(--ink-faint)}.tb-link-mono:hover .tb-arrow,.tb-link-mono:focus-visible .tb-arrow{color:var(--sec,var(--grad-violet))}a:focus-visible,button:focus-visible,summary:focus-visible{outline:2px solid var(--focus);outline-offset:3px;border-radius:var(--radius-s)}.tb-mx{position:relative;display:inline-block}.tb-mx-layer{position:absolute;inset:0;white-space:nowrap;overflow:hidden;pointer-events:none}.tb-mx-layer i{font-style:normal}.tb-mx-layer b{font-weight:inherit}.tb-mx.is-scrambling{color:transparent}.tb-header{border-bottom:1px solid var(--line)}.tb-header .tb-wrap{height:var(--header-height);display:flex;align-items:center;justify-content:space-between;gap:var(--gutter)}.tb-mark{color:var(--ink);text-decoration:none;display:inline-flex;align-items:center;gap:3px;min-height:44px}.tb-cursor,.tb-sq{display:inline-block;flex:none;width:8px;height:15px}.tb-sq{background:var(--sec,var(--ink-faint))}.tb-cursor,.tb-sq--grad{background:linear-gradient(135deg,var(--grad-blue),var(--grad-violet),var(--grad-pink))}.tb-cursor--sec{background:var(--sec)}.tb-crumb{display:flex;align-items:center;gap:var(--space-2);min-width:0}.tb-crumb__sep{color:var(--ink-faint)}.tb-crumb__here{color:var(--ink-soft);text-decoration:none;display:inline-flex;align-items:center;min-height:44px;white-space:nowrap}a.tb-crumb__here:hover{color:var(--ink)}.tb-header__nav{display:none}.tb-lang{min-height:44px;align-items:center;padding-left:var(--gutter)}@media(min-width:768px){.tb-crumb__sep,.tb-crumb__here{display:none}.tb-header__nav{display:flex;align-items:center;gap:20px;margin-left:auto}.tb-header__nav a{color:var(--ink-soft);text-decoration:none;display:inline-flex;align-items:center;min-height:44px;white-space:nowrap}.tb-header__nav a:hover,.tb-header__nav a[aria-current]{color:var(--ink)}.tb-header__nav a[aria-current]{text-decoration:underline;text-decoration-color:var(--sec,var(--line-strong));text-decoration-thickness:2px;text-underline-offset:6px}.tb-lang{padding-left:0}}.tb-hero{padding-top:var(--hero-top)}.tb-role{margin:0 0 12px;color:var(--ink-faint)}.tb-section{margin-top:var(--section)}.tb-label{margin:0 0 var(--space-2);color:var(--ink-faint)}.tb-label-row{display:flex;justify-content:space-between;align-items:baseline;gap:var(--gutter);margin-bottom:var(--space-2)}.tb-label-row .tb-label{margin:0}.tb-now{margin:0}.tb-home-nav{margin-top:var(--space-5)}.tb-nav{display:grid}.tb-nav--ext{margin-top:var(--space-4)}.tb-nav-row{display:flex;align-items:center;gap:12px;min-height:var(--nav-row);border-top:1px solid var(--line);color:var(--ink);text-decoration:none}.tb-nav-row:last-child{border-bottom:1px solid var(--line)}.tb-nav-row__count{margin-left:auto}.tb-nav-row .tb-mx-text+.tb-arrow{margin-left:auto}.tb-nav-row:hover .tb-arrow,.tb-nav-row:focus-visible .tb-arrow{color:var(--sec,var(--grad-violet))}@media(min-width:768px){.tb-home-nav{display:none}}.tb-page-head{padding-top:var(--space-5)}.tb-kicker{margin:0;display:flex;align-items:center;gap:var(--space-2);color:var(--sec,var(--ink-faint))}.tb-next{margin-top:48px}.tb-row{padding:var(--gutter)0;border-top:1px solid var(--line);display:grid;gap:var(--space-1)}.tb-row:first-of-type{border-top:0;padding-top:var(--space-2)}.tb-row__desc{margin:0;color:var(--ink-soft)}.tb-row__meta{margin:0}.tb-row--plain{margin:0;color:var(--ink)}.tb-row--link{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:baseline;column-gap:var(--gutter)}.tb-row--link>:last-child{overflow-wrap:anywhere}.tb-list{margin-top:var(--space-5)}.tb-list>.tb-row:first-child{padding-top:0}.tb-note{color:var(--ink);text-decoration:none;width:fit-content}.tb-note:hover{text-decoration:underline;text-decoration-color:var(--sec-notes);text-underline-offset:3px}.tb-more{margin-top:var(--space-2)}.tb-more .tb-link-mono{min-height:44px;align-items:center}.tb-meta-list{display:flex;flex-wrap:wrap;gap:var(--space-1)var(--gutter);margin:0;color:var(--ink-faint)}.tb-tags{display:flex;flex-wrap:wrap;column-gap:12px;margin:0}.tb-tag{color:var(--ink-soft);text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:4px;text-decoration-color:var(--line-strong)}.tb-tag:hover{color:var(--ink);text-decoration-color:var(--sec-notes)}.tb-tag[aria-current]{color:var(--ink);text-decoration-color:var(--sec-notes);text-decoration-thickness:2px}.tb-topics{margin-top:32px}.tb-topics .tb-tag{display:inline-flex;align-items:center;min-height:44px}.tb-follow{margin-top:48px;display:grid;gap:var(--space-2)}.tb-follow p{margin:0;color:var(--ink-soft)}.tb-follow__links{display:flex;flex-wrap:wrap;column-gap:var(--space-4)}.tb-follow__links .tb-link-mono{min-height:44px;align-items:center}.tb-reviewed{margin:12px 0 0}.tb-dl{margin:var(--space-5)0 0}.tb-dl>div{padding:var(--gutter)0;border-top:1px solid var(--line);display:grid;gap:var(--space-1)}.tb-dl>div:first-child{border-top:0;padding-top:0}.tb-dl>div:last-child{border-bottom:1px solid var(--line)}.tb-dl dt{color:var(--ink-faint)}.tb-dl dd{margin:0}.tb-dl__alt{color:var(--ink-soft)}.tb-profiles{display:grid}.tb-profiles a{color:var(--ink);text-decoration:none;display:flex;justify-content:space-between;align-items:center;gap:var(--gutter);min-height:44px}.tb-profiles a span:last-child{color:var(--ink-faint);overflow-wrap:anywhere;text-align:right}.tb-profiles a:hover span:last-child{color:var(--sec,var(--grad-violet))}.tb-article{padding-top:var(--space-5)}.tb-article__head{display:grid;gap:var(--space-2)}.tb-article h1{margin:var(--gutter)0 0;font-size:32px;line-height:1.15;font-weight:600;letter-spacing:-.02em}.tb-toc{margin-top:var(--space-4);padding-bottom:12px;border-top:1px solid var(--line);border-bottom:1px solid var(--line)}.tb-toc summary{display:flex;align-items:center;min-height:44px;color:var(--ink-faint);cursor:pointer}.tb-toc ol{margin:0;padding-left:20px;display:grid;gap:6px;font-size:15px;line-height:1.5}.tb-toc a{color:var(--ink-soft);text-decoration:none}.tb-toc a:hover{color:var(--ink);text-decoration:underline;text-decoration-color:var(--sec-notes);text-underline-offset:3px}.tb-signoff{margin-top:var(--space-5);padding:var(--gutter)0;border-top:1px solid var(--line);border-bottom:1px solid var(--line);display:grid;gap:var(--space-2)}.tb-signoff p{margin:0}.tb-signoff .tb-link-mono{min-height:44px;align-items:center}.tb-signoff .tb-meta-list a,.tb-copy{display:inline-flex;align-items:center;min-height:44px}.tb-copy{font:inherit;color:var(--ink-soft);background:0 0;border:0;padding:0;cursor:pointer;text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:3px;text-decoration-color:var(--line-strong)}.tb-copy:hover{text-decoration-color:var(--grad-violet)}.tb-copy[hidden]{display:none}.tb-related{margin-top:48px}.tb-prose>:first-child{margin-top:var(--space-4)}.tb-prose p,.tb-prose ul,.tb-prose ol,.tb-prose blockquote{margin:var(--gutter)0 0}.tb-prose ul,.tb-prose ol{padding-left:1.4em}.tb-prose li+li{margin-top:var(--space-1)}.tb-prose h2,.tb-prose h3{margin:32px 0 0;font-size:22px;line-height:1.3;font-weight:600;letter-spacing:-.01em}.tb-prose h3{font-size:19px}.tb-prose h2+*,.tb-prose h3+*{margin-top:var(--gutter)}.tb-prose blockquote{padding-left:var(--gutter);border-left:2px solid var(--line-strong);color:var(--ink-soft)}.tb-prose a{color:var(--ink);text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:3px;text-decoration-color:var(--line-strong)}.tb-prose a:hover{text-decoration-color:var(--grad-violet)}.tb-prose code{font-family:var(--font-mono);font-size:.875em}.tb-prose pre{margin:var(--space-4)0 0;padding:var(--gutter);background:var(--paper-raised);border:1px solid var(--line);border-radius:var(--radius-s);font-family:var(--font-mono);font-size:14px;line-height:1.6;overflow-x:auto}.tb-prose pre code{font-size:inherit}.tb-prose img{display:block;max-width:100%;height:auto;border-radius:var(--radius-m);background:var(--paper-raised)}.tb-prose figure,.tb-prose p:has(>img:only-child){margin:var(--space-4)0 0}.tb-prose hr{margin:var(--space-5)0 0;border:0;border-top:1px solid var(--line)}.tb-pager{margin-top:48px;padding-top:var(--gutter);border-top:1px solid var(--line);display:flex;flex-wrap:wrap;justify-content:space-between;gap:0 var(--gutter)}.tb-pager__side{display:flex;flex-direction:column;align-items:flex-end}.tb-pager .tb-link-mono{min-height:44px;align-items:center}.tb-404{padding-top:var(--hero-top)}.tb-404 h1{margin:0;font-size:32px;line-height:1.15;font-weight:600;letter-spacing:-.02em}.tb-404 p{margin:var(--gutter)0 0;color:var(--ink-soft)}.tb-404 .tb-link-mono{margin-top:var(--space-2);min-height:44px;align-items:center}.tb-404__other{margin-top:var(--space-5)}.tb-footer{margin-top:var(--section)}.tb-footer__inner{padding:var(--gutter)0 var(--space-5);border-top:1px solid var(--line);display:grid;gap:var(--space-1)}.tb-footer__row{display:flex;flex-wrap:wrap;align-items:center;column-gap:var(--gutter)}.tb-footer a{color:var(--ink-soft);text-decoration:none;display:inline-flex;align-items:center;min-height:44px}.tb-footer a:hover,.tb-footer a[aria-current]{color:var(--ink)}.tb-footer .tb-footer__service a{text-decoration:underline;text-decoration-color:var(--line-strong);text-underline-offset:3px}.tb-footer .tb-footer__service a:hover{text-decoration-color:var(--grad-violet)}