@font-face{font-family:'Fraunces';font-style:normal;font-weight:500;font-display:swap;src:url("/static/fonts/fraunces-500-latin-ext-1.9cab501e1829.woff2?f3e5a2072933") format('woff2');unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,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:'Fraunces';font-style:normal;font-weight:500;font-display:swap;src:url("/static/fonts/fraunces-500-latin-2.eb2486760f75.woff2?f3e5a2072933") 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:'Fraunces';font-style:normal;font-weight:600;font-display:swap;src:url("/static/fonts/fraunces-600-latin-ext-3.9cab501e1829.woff2?f3e5a2072933") format('woff2');unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,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:'Fraunces';font-style:normal;font-weight:600;font-display:swap;src:url("/static/fonts/fraunces-600-latin-4.eb2486760f75.woff2?f3e5a2072933") 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:'IBM Plex Sans';font-style:normal;font-weight:400;font-stretch:100%;font-display:swap;src:url("/static/fonts/ibm-plex-sans-400-cyrillic-ext-5.141776be1c70.woff2?f3e5a2072933") format('woff2');unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:'IBM Plex Sans';font-style:normal;font-weight:400;font-stretch:100%;font-display:swap;src:url("/static/fonts/ibm-plex-sans-400-cyrillic-6.70800b98b5e7.woff2?f3e5a2072933") format('woff2');unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:'IBM Plex Sans';font-style:normal;font-weight:400;font-stretch:100%;font-display:swap;src:url("/static/fonts/ibm-plex-sans-400-latin-ext-7.f0e2925b3fa6.woff2?f3e5a2072933") format('woff2');unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,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:'IBM Plex Sans';font-style:normal;font-weight:400;font-stretch:100%;font-display:swap;src:url("/static/fonts/ibm-plex-sans-400-latin-8.b2c9031d9fd6.woff2?f3e5a2072933") 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:'IBM Plex Sans';font-style:normal;font-weight:500;font-stretch:100%;font-display:swap;src:url("/static/fonts/ibm-plex-sans-500-cyrillic-ext-9.141776be1c70.woff2?f3e5a2072933") format('woff2');unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:'IBM Plex Sans';font-style:normal;font-weight:500;font-stretch:100%;font-display:swap;src:url("/static/fonts/ibm-plex-sans-500-cyrillic-10.70800b98b5e7.woff2?f3e5a2072933") format('woff2');unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:'IBM Plex Sans';font-style:normal;font-weight:500;font-stretch:100%;font-display:swap;src:url("/static/fonts/ibm-plex-sans-500-latin-ext-11.f0e2925b3fa6.woff2?f3e5a2072933") format('woff2');unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,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:'IBM Plex Sans';font-style:normal;font-weight:500;font-stretch:100%;font-display:swap;src:url("/static/fonts/ibm-plex-sans-500-latin-12.b2c9031d9fd6.woff2?f3e5a2072933") 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:'IBM Plex Sans';font-style:normal;font-weight:600;font-stretch:100%;font-display:swap;src:url("/static/fonts/ibm-plex-sans-600-cyrillic-ext-13.141776be1c70.woff2?f3e5a2072933") format('woff2');unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:'IBM Plex Sans';font-style:normal;font-weight:600;font-stretch:100%;font-display:swap;src:url("/static/fonts/ibm-plex-sans-600-cyrillic-14.70800b98b5e7.woff2?f3e5a2072933") format('woff2');unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:'IBM Plex Sans';font-style:normal;font-weight:600;font-stretch:100%;font-display:swap;src:url("/static/fonts/ibm-plex-sans-600-latin-ext-15.f0e2925b3fa6.woff2?f3e5a2072933") format('woff2');unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,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:'IBM Plex Sans';font-style:normal;font-weight:600;font-stretch:100%;font-display:swap;src:url("/static/fonts/ibm-plex-sans-600-latin-16.b2c9031d9fd6.woff2?f3e5a2072933") 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:'JetBrains Mono';font-style:normal;font-weight:400;font-display:swap;src:url("/static/fonts/jetbrains-mono-400-cyrillic-ext-17.3ae0dad237c5.woff2?f3e5a2072933") format('woff2');unicode-range:U+0460-052F,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;font-display:swap;src:url("/static/fonts/jetbrains-mono-400-cyrillic-18.3576e677eb07.woff2?f3e5a2072933") format('woff2');unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:'JetBrains Mono';font-style:normal;font-weight:400;font-display:swap;src:url("/static/fonts/jetbrains-mono-400-latin-ext-19.bd4781a31b42.woff2?f3e5a2072933") format('woff2');unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,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;font-display:swap;src:url("/static/fonts/jetbrains-mono-400-latin-20.b636a65da4f0.woff2?f3e5a2072933") 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:'JetBrains Mono';font-style:normal;font-weight:500;font-display:swap;src:url("/static/fonts/jetbrains-mono-500-cyrillic-ext-21.3ae0dad237c5.woff2?f3e5a2072933") format('woff2');unicode-range:U+0460-052F,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:500;font-display:swap;src:url("/static/fonts/jetbrains-mono-500-cyrillic-22.3576e677eb07.woff2?f3e5a2072933") format('woff2');unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:'JetBrains Mono';font-style:normal;font-weight:500;font-display:swap;src:url("/static/fonts/jetbrains-mono-500-latin-ext-23.bd4781a31b42.woff2?f3e5a2072933") format('woff2');unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,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:500;font-display:swap;src:url("/static/fonts/jetbrains-mono-500-latin-24.b636a65da4f0.woff2?f3e5a2072933") 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}:root{--bg:#10141c;--bg-elevated:#161b26;--surface:#1e2430;--border:#2a3344;--text:#e8eaef;--text-muted:#b8c0ce;--accent:#7eb6e0;--accent-strong:#3572a8;--accent-soft:rgba(126,182,224,0.15);--danger:#e07070;--font-display:"Fraunces","Times New Roman",serif;--font-body:"IBM Plex Sans",system-ui,sans-serif;--font-mono:"JetBrains Mono",ui-monospace,monospace;--space:1rem;--radius:4px;--max:72rem;--reading:42rem;--aside:16rem;--ease:0.2s ease}*,*::before,*::after{box-sizing:border-box}html{font-size:17px;scroll-behavior:smooth;scrollbar-gutter:stable}@media (min-width:48em){html{font-size:18px}}body{margin:0;min-height:100vh;font-family:var(--font-body);color:var(--text);line-height:1.65;background-color:var(--bg);background-image:radial-gradient(ellipse 120% 80% at 10% -20%,rgba(53,114,168,0.18),transparent 55%),radial-gradient(ellipse 90% 60% at 100% 0%,rgba(126,182,224,0.08),transparent 50%),linear-gradient(180deg,var(--bg) 0%,var(--bg-elevated) 100%);background-attachment:fixed}img{max-width:100%;height:auto}img.full-width{width:100%}img:not(.full-width):not(.site-brand__avatar){display:block;margin-left:auto;margin-right:auto;margin-bottom:1.5rem}a{color:var(--accent);text-decoration-thickness:1px;text-underline-offset:0.2em;transition:color var(--ease),text-decoration-color var(--ease)}a:hover,a:focus-visible{color:#9ecff0}h1,h2,h3,h4,h5,h6{font-family:var(--font-display);font-weight:550;line-height:1.25;color:var(--text);letter-spacing:-0.02em}h1{font-size:clamp(2rem,4vw,2.75rem)}h2{font-size:clamp(1.45rem,2.5vw,1.85rem)}h3{font-size:1.25rem}h4{font-size:1.1rem}hr{border:0;border-top:1px solid var(--border);margin:2rem 0}table{margin:0 auto 1rem;border-collapse:collapse}td,th{padding:0.4rem 0.6rem;text-align:center;border:1px solid var(--border)}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.skip-link{position:absolute;left:var(--space);top:-3rem;z-index:100;padding:0.5rem 0.75rem;background:var(--accent-strong);color:#fff;border-radius:var(--radius)}.skip-link:focus{top:var(--space)}.site-wrap{width:min(100% - 2rem,var(--max));margin-inline:auto}.site-header{border-bottom:1px solid var(--border);background:rgba(16,20,28,0.85);backdrop-filter:blur(8px)}.site-nav{display:flex;align-items:center;justify-content:space-between;gap:1rem;padding:0.65rem 0}.site-nav__links{display:flex;flex-wrap:wrap;gap:0.25rem 1.25rem;list-style:none;margin:0;padding:0}.site-nav__links a{color:var(--text-muted);text-decoration:none;font-size:0.95rem;font-weight:500;padding:0.25rem 0;border-bottom:2px solid transparent;transition:color var(--ease),border-color var(--ease)}.site-nav__links a:hover,.site-nav__links a:focus-visible,.site-nav__links a.is-active{color:var(--text);border-bottom-color:var(--accent)}.site-nav__toggle{display:none;background:transparent;border:1px solid var(--border);color:var(--text);border-radius:var(--radius);padding:0.4rem 0.65rem;cursor:pointer;font-family:var(--font-body);font-size:0.9rem}.site-brand{padding:1.75rem 0 1.5rem}.site-brand__inner{display:flex;align-items:center;gap:1.25rem}.site-brand__avatar{width:clamp(3.5rem,10vw,5rem);height:auto;aspect-ratio:auto;object-fit:contain;border-radius:0;border:none;flex-shrink:0;margin:0;background:transparent}.site-brand__name{margin:0;font-family:var(--font-display);font-size:clamp(2.2rem,6vw,3.4rem);font-weight:600;letter-spacing:-0.03em;line-height:1}.site-brand__name a{color:var(--text);text-decoration:none}.site-brand__name a:hover{color:var(--accent)}.site-brand__tagline{margin:0.45rem 0 0;color:var(--text-muted);font-size:0.95rem;max-width:36rem}.site-main{padding:2rem 0 3rem}.layout{display:grid;gap:2.5rem}@media (min-width:64em){.layout{grid-template-columns:minmax(0,1fr) var(--aside);gap:3rem}.layout--no-aside,.layout:not(:has(.site-aside:not(:empty))){grid-template-columns:minmax(0,1fr)}}.blog-main{min-width:0}.site-aside:empty{display:none}@media (min-width:64em){.layout--no-aside .site-aside{display:none}}.post{display:flex;flex-direction:column;gap:0.5rem;padding:1.5rem 0;border-bottom:1px solid var(--border)}.post:first-child{padding-top:0}.post h2{margin:0}.post h2 a{color:var(--text);text-decoration:none;background-image:linear-gradient(var(--accent),var(--accent));background-position:0 100%;background-repeat:no-repeat;background-size:0 1px;transition:background-size 0.25s ease,color var(--ease)}.post h2 a:hover,.post h2 a:focus-visible{color:var(--accent);background-size:100% 1px}.post_link_next{margin-left:auto;margin-top:0.35rem;font-size:0.95rem;text-decoration:none;border-bottom:1px solid var(--accent-soft)}.post_link_next:hover{border-bottom-color:var(--accent)}.meta{color:var(--text-muted);font-size:0.9rem;margin:0 0 1.25rem}.aside-block{margin-bottom:1.75rem}.aside-block__title{margin:0 0 0.75rem;font-size:0.8rem;text-transform:uppercase;letter-spacing:0.08em;color:var(--text-muted);font-family:var(--font-body);font-weight:600}.tag-cloud{display:flex;flex-wrap:wrap;gap:0.4rem}.tag{display:inline-block;padding:0.2rem 0.55rem;border:1px solid var(--border);border-radius:999px;color:var(--text-muted);text-decoration:none;font-size:0.85rem;background:var(--surface);transition:border-color var(--ease),color var(--ease),background var(--ease)}.tag:hover,.tag:focus-visible,.tag.is-active{color:var(--text);border-color:var(--accent);background:var(--accent-soft)}.search-form{display:flex;flex-direction:column;gap:0.5rem}.form-control,input[type="text"],input[type="email"],input[type="url"],input[type="search"],textarea{width:100%;padding:0.6rem 0.75rem;font:inherit;color:var(--text);background:var(--surface);border:1px solid var(--border);border-radius:var(--radius)}.form-control:focus,input:focus,textarea:focus{outline:2px solid var(--accent);outline-offset:1px;border-color:var(--accent)}.form-group,.form-field{margin-bottom:1rem}.comment-form-actions{display:flex;flex-wrap:wrap;gap:0.5rem;margin-top:1.25rem}.form-label,label{display:block;margin-bottom:0.35rem;font-size:0.9rem;color:var(--text-muted)}.form-check{display:flex;align-items:center;gap:0.5rem;margin-bottom:1rem}.form-check-input,input[type="checkbox"]{width:auto;accent-color:var(--accent)}.form-check-label{margin:0;color:var(--text)}.form-text,.text-muted{color:var(--text-muted);font-size:0.85rem}.text-danger{color:var(--danger)}.btn,button[type="submit"],input[type="submit"]{display:inline-block;padding:0.55rem 1.1rem;font:inherit;font-weight:500;color:#fff;background:var(--accent-strong);border:1px solid transparent;border-radius:var(--radius);cursor:pointer;text-decoration:none;transition:background var(--ease),transform var(--ease)}.btn:hover,button[type="submit"]:hover,input[type="submit"]:hover{background:var(--accent);color:#fff}.btn-secondary,input[type="submit"][name="preview"]{background:transparent;color:var(--text);border-color:var(--border)}.btn-secondary:hover,input[type="submit"][name="preview"]:hover{border-color:var(--accent);color:var(--accent);background:transparent}.btn-primary{background:var(--accent-strong)}.comment-form fieldset{border:0;margin:0;padding:0;min-inline-size:0}.captcha-widget{--captcha-h:50px;display:flex;flex-wrap:wrap;align-items:stretch;gap:0.65rem}.captcha-widget__image{display:block;flex:0 0 auto;height:var(--captcha-h);line-height:0}.captcha-widget img.captcha{display:block;height:100%;width:auto;max-height:100%;border:1px solid var(--border);border-radius:var(--radius);background:#fff;vertical-align:top}.captcha-widget__fields{display:flex;flex:1 1 9rem;align-items:stretch;min-width:7.5rem;max-width:12rem;height:var(--captcha-h)}.captcha-widget__fields input[type="hidden"]{display:none}.captcha-widget__fields input[type="text"]{width:100%;max-width:none;height:100%!important;margin:0;padding-top:0;padding-bottom:0;line-height:1.2}.captcha-widget .captcha-refresh{display:inline-flex;align-items:center;justify-content:center;gap:0.4rem;flex:0 0 auto;height:var(--captcha-h);min-height:var(--captcha-h);padding:0 0.9rem;font-size:0.9rem;line-height:1;white-space:nowrap}.captcha-refresh__icon{display:inline-block;font-size:1.05rem;line-height:1;transition:transform 0.35s var(--ease,ease)}.captcha-refresh.is-loading .captcha-refresh__icon{animation:captcha-spin 0.7s linear infinite}@keyframes captcha-spin{to{transform:rotate(360deg)}}.panel{margin:2rem 0;padding:1.5rem;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius)}.panel__title{margin:0 0 1rem;text-align:center;font-size:1.15rem}.tags{margin-top:1.5rem}.tags h3{margin-bottom:0.75rem}.pagination{display:flex;flex-wrap:wrap;justify-content:center;gap:0.35rem;list-style:none;margin:2rem 0 0;padding:0}.page-item .page-link,.pagination a{display:inline-flex;align-items:center;justify-content:center;min-width:2.25rem;padding:0.35rem 0.6rem;color:var(--text-muted);text-decoration:none;border:1px solid var(--border);border-radius:var(--radius);background:var(--surface)}.page-item.active .page-link,.page-item .page-link:hover{color:var(--text);border-color:var(--accent);background:var(--accent-soft)}.site-footer{margin-top:auto;padding:2rem 0;border-top:1px solid var(--border);color:var(--text-muted);font-size:0.9rem}.site-footer__inner{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:1rem}.site-footer a{color:var(--text-muted);text-decoration:none}.site-footer a:hover{color:var(--accent)}.site-footer__top{color:var(--accent);text-decoration:none;font-size:1.1rem}.code{padding:1em;margin-bottom:1rem;position:relative;border:1px solid var(--border);border-radius:var(--radius);overflow-x:auto}.code_add{background:rgba(112,224,115,0.22)!important}.code_del{background:rgba(239,79,90,0.28)!important}.codehilite{background-color:#272822;padding:1em;margin-bottom:1rem;border:1px solid var(--border);border-radius:var(--radius);overflow-x:auto}pre{margin-bottom:0!important;color:#f8f8f2!important;font-family:var(--font-mono);font-size:0.88rem}.linenos{margin-right:1rem;padding-right:0.4rem;border-right:solid #8a939c 0.5px;color:#8a939c}.code_switcher{position:absolute;top:0.4rem;right:0.5rem;cursor:pointer;color:var(--text-muted)}.code_switcher:hover{color:var(--accent)}code{font-family:var(--font-mono);font-size:0.9em;color:#ebebeb!important;background-color:#272822!important;padding:0.1em 0.35em;border-radius:3px}.codehilite code{padding:0}.responsive-object{text-align:center;padding-bottom:0!important}@media (max-width:48em){iframe{width:100%}}@media (max-width:40em){.site-nav__toggle{display:inline-flex}.site-nav__links{display:none;width:100%;flex-direction:column;gap:0.5rem;padding:0.5rem 0 0.75rem}.site-nav__links.is-open{display:flex}.site-nav{flex-wrap:wrap}}