:root{color-scheme:light;--bg:#f1f2f4;--card:#fff;--fill:#eef0f4;--line:#e3e5ea;--line-strong:#c9cdd6;--muted:#5e6472;--faint:#8b919e;--ink:#15171c;--accent:#2b4cff;--accent-hover:#1b36c9;--accent-soft:#eef3ff;--ok:#1db954;--danger:#d93025;--dark:#15171c;--dark-text:#b4b9c4;--dark-label:#9aa0ae;--dark-accent:#7da2ff;--dark-line:#2a2e38;--dark-key:#7c8494;--dark-value:#d7dae0;--font-sans:"Golos Text", "Segoe UI", system-ui, -apple-system, sans-serif;--font-mono:"JetBrains Mono", Consolas, "Courier New", monospace;--r-card:20px;--r-field:12px;--r-pill:999px;--shadow:0 1px 2px #14171c0f, 0 8px 24px #14171c0d;--shadow-hover:0 2px 4px #14171c14, 0 14px 32px #14171c1a;--gap:16px;--page-x:clamp(16px, 3.3vw, 48px);--section-gap:clamp(48px, 5vw, 64px);--card-pad:clamp(20px, 2.5vw, 40px);--card-pad-sm:clamp(20px, 2vw, 28px);--container:1440px;--fs-display:clamp(38px, 4vw, 58px);--fs-h2:clamp(26px, 2.5vw, 36px);--fs-h2-sm:clamp(24px, 2.2vw, 32px);--fs-h3:22px;--fs-lead:clamp(16px, 1.3vw, 19px);--fs-body:16px;--fs-small:14px;--fs-mono:12px;--ease:cubic-bezier(.2, .6, .2, 1);--ease-out:cubic-bezier(.16, .84, .44, 1);--t-fast:.15s;--t-med:.26s;--t-slow:.52s}@font-face{font-family:Golos Text;font-style:normal;font-weight:400 800;font-display:swap;src:url(/fonts/GolosText-cyrillic-ext.woff2)format("woff2");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Golos Text;font-style:normal;font-weight:400 800;font-display:swap;src:url(/fonts/GolosText-cyrillic.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-weight:400 800;font-display:swap;src:url(/fonts/GolosText-latin-ext.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Golos Text;font-style:normal;font-weight:400 800;font-display:swap;src:url(/fonts/GolosText-latin.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-weight:400 700;font-display:swap;src:url(/fonts/JetBrainsMono-cyrillic-ext.woff2)format("woff2");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:400 700;font-display:swap;src:url(/fonts/JetBrainsMono-cyrillic.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-weight:400 700;font-display:swap;src:url(/fonts/JetBrainsMono-latin-ext.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:400 700;font-display:swap;src:url(/fonts/JetBrainsMono-latin.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}@view-transition{navigation:auto}*,:before,:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%;scroll-behavior:smooth;scroll-padding-top:96px}body{background:var(--bg);color:var(--ink);font:400 var(--fs-body) / 1.5 var(--font-sans);-webkit-font-smoothing:antialiased;text-wrap:pretty;margin:0}h1,h2,h3,p{margin:0}h1,h2,h3{text-wrap:balance;letter-spacing:-.02em;line-height:1.1}a{color:inherit;transition:color var(--t-fast) var(--ease);text-decoration:none}a:hover{color:var(--accent)}[hidden]{display:none!important}img,svg{max-width:100%;display:block}button,input,select,textarea{font:inherit;color:inherit}:focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:6px}.wrap{max-width:var(--container);padding-inline:var(--page-x);margin-inline:auto}.section{padding-top:var(--section-gap)}.section__head{flex-direction:column;gap:8px;padding:0 8px 20px;display:flex}.bento{gap:var(--gap);grid-template-columns:repeat(4,minmax(0,1fr));display:grid}@media (width<=1023px){.bento{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (width<=639px){.bento{grid-template-columns:minmax(0,1fr)}}.card{background:var(--card);border-radius:var(--r-card);box-shadow:var(--shadow)}.card--dark{background:var(--dark);color:#fff}.card--dark .label{color:var(--dark-label)}.card--link{transition:transform var(--t-med) var(--ease), box-shadow var(--t-med) var(--ease)}.card--link:hover{color:inherit;box-shadow:var(--shadow-hover);transform:translateY(-2px)}.label{font-family:var(--font-mono);font-size:var(--fs-mono);letter-spacing:.02em;color:var(--muted)}.label--accent{color:var(--accent)}.mono{font-family:var(--font-mono);font-size:var(--fs-mono);letter-spacing:.02em}.muted{color:var(--muted)}.faint{color:var(--faint)}.acc{color:var(--accent)}.h1{font-size:var(--fs-display);letter-spacing:-.03em;font-weight:800;line-height:1.02}.h2{font-size:var(--fs-h2);font-weight:800;line-height:1.08}.h3{font-size:var(--fs-h3);font-weight:700;line-height:1.15}.lead{font-size:var(--fs-lead);color:var(--muted);line-height:1.45}.btn{border-radius:var(--r-pill);background:var(--accent);color:#fff;white-space:nowrap;cursor:pointer;min-height:48px;transition:background var(--t-fast) var(--ease), color var(--t-fast) var(--ease), transform var(--t-fast) var(--ease);border:0;justify-content:center;align-items:center;gap:8px;padding:0 22px;font-size:16px;font-weight:600;display:inline-flex}.btn:hover{background:var(--accent-hover);color:#fff}.btn:active{transform:translateY(1px)}.btn:disabled{opacity:.4;cursor:not-allowed}.btn--sm{min-height:40px;padding:0 18px;font-size:15px}.btn--ghost{color:var(--ink);border:1.5px solid var(--ink);background:0 0}.btn--ghost:hover{background:var(--ink);color:#fff}.chip{border-radius:var(--r-pill);background:var(--fill);align-items:center;min-height:32px;padding:0 12px;font-size:13px;font-weight:500;display:inline-flex}.arrow{color:var(--accent);transition:transform var(--t-fast) var(--ease);display:inline-block}a:hover .arrow,.btn:hover .arrow,.card--link:hover .arrow{transform:translate(4px)}.visually-hidden{clip:rect(0 0 0 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;position:absolute!important}@media (prefers-reduced-motion:no-preference){.rise{animation:rise var(--t-slow) var(--ease-out) both;animation-delay:calc(var(--d,0) * 70ms)}}@keyframes rise{0%{opacity:0;transform:translateY(14px)}}@supports (animation-timeline:view()){@media (prefers-reduced-motion:no-preference){.reveal{animation:linear both reveal view();animation-range:entry calc(var(--stagger,0) * 6%) entry calc(36% + var(--stagger,0) * 6%)}}}@keyframes reveal{0%{opacity:0;transform:translateY(16px)}to{opacity:1;transform:none}}@supports (animation-timeline:view()){@media (prefers-reduced-motion:no-preference){.draw{stroke-dasharray:1;animation:linear both draw view();animation-range:entry 10% entry 75%}.draw--late{animation-range:entry 30% entry 95%}.draw-in{animation:linear both fade-in view();animation-range:entry 45% entry 92%}}}@keyframes draw{0%{stroke-dashoffset:1px}to{stroke-dashoffset:0}}@keyframes fade-in{0%{opacity:0}}@media (prefers-reduced-motion:no-preference){.ico:not(.arrow)>*{stroke-dasharray:1}:is(a,.btn,.item,.step):is(:hover,:focus-visible) .ico:not(.arrow)>*{animation:ico-draw .62s var(--ease-out) both;animation-delay:calc(var(--i,0) * 70ms)}.ico>:nth-child(2){--i:1}.ico>:nth-child(3){--i:2}.ico>:nth-child(4){--i:3}}@keyframes ico-draw{0%{stroke-dashoffset:1px}to{stroke-dashoffset:0}}.progress{z-index:40;background:var(--accent);transform-origin:0;height:2px;position:fixed;inset:0 0 auto;transform:scaleX(0)}@supports (animation-timeline:scroll()){@media (prefers-reduced-motion:no-preference){.progress{animation:linear both progress scroll(root)}}}@keyframes progress{to{transform:scaleX(1)}}::view-transition-old(root),::view-transition-new(root){animation-duration:.22s}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}::view-transition-old(*),::view-transition-new(*){animation:none}*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}.prose{max-width:74ch;font-size:17px;line-height:1.6}.prose>*+*{margin-top:20px}.prose h2{font-size:var(--fs-h2-sm);margin-top:44px;font-weight:800}.prose h3{font-size:var(--fs-h3);margin-top:32px;font-weight:700}.prose p{color:var(--muted)}.prose strong{color:var(--ink);font-weight:600}.prose a{color:var(--accent);text-underline-offset:3px;text-decoration:underline}.prose ul,.prose ol{color:var(--muted);padding-left:22px}.prose li+li{margin-top:8px}.prose code{background:var(--fill);color:var(--ink);font-family:var(--font-mono);border-radius:6px;padding:2px 6px;font-size:.85em}.prose pre{border-radius:var(--r-field);background:var(--dark);color:var(--dark-value);padding:20px;font-size:13px;overflow-x:auto}.prose pre code{color:inherit;background:0 0;padding:0}.prose blockquote{padding:24px var(--card-pad-sm);border-left:2px solid var(--accent);border-radius:0 var(--r-field) var(--r-field) 0;background:var(--accent-soft);margin:28px 0}.prose blockquote p{color:var(--ink)}.prose blockquote>*+*{margin-top:14px}.prose hr{border:0;border-top:1px solid var(--line);margin:40px 0}.prose table{border-collapse:collapse;width:100%;font-size:15px}.prose th,.prose td{border-bottom:1px solid var(--line);text-align:left;padding:10px 12px}.cursor{--x:-100px;--y:-100px;z-index:200;pointer-events:none;mix-blend-mode:difference;display:none;position:fixed;inset:0}.has-cursor .cursor{display:block}.cursor__dot,.cursor__ring{translate:var(--x) var(--y);will-change:translate;border-radius:50%;position:absolute;top:0;left:0}.cursor__dot{width:8px;height:8px;transition:scale var(--t-fast) var(--ease), opacity var(--t-fast) var(--ease);background:#fff;margin:-4px 0 0 -4px}.cursor__ring{opacity:.5;width:36px;height:36px;transition:translate .12s var(--ease-out), scale var(--t-med) var(--ease-out), opacity var(--t-fast) var(--ease);border:1.5px solid #fff;margin:-18px 0 0 -18px}.cursor.is-link .cursor__ring{opacity:.9;scale:1.4}.cursor.is-link .cursor__dot{scale:.5}.cursor.is-down .cursor__ring{scale:.8}.cursor.is-text,.cursor.is-out{opacity:0;transition:opacity var(--t-fast) var(--ease)}.has-cursor,.has-cursor *{cursor:none!important}.has-cursor :is(input,textarea,select,[contenteditable]){cursor:auto!important}.skip[data-astro-cid-hkbrpulz]{z-index:100;border-radius:var(--r-pill);background:var(--ink);color:#fff;padding:10px 16px;font-weight:600;position:absolute;top:-100px;left:16px}.skip[data-astro-cid-hkbrpulz]:focus{color:#fff;top:16px}
