@font-face{font-family:jetbrains mono;font-style:normal;font-weight:400;font-display:swap;src:url(/fonts/jetbrains-mono-latin-400-normal.woff2)format("woff2")}@font-face{font-family:jetbrains mono;font-style:normal;font-weight:700;font-display:swap;src:url(/fonts/jetbrains-mono-latin-700-normal.woff2)format("woff2")}:root{color-scheme:light dark;--bg-color:light-dark(#f5f5f5, #1a1a1a);--text-color:light-dark(#333, #e8e8e8);--heading-color:light-dark(#111, #fff);--link-color:light-dark(#0066cc, #7cc0fa);--link-hover-color:light-dark(#003366, #a0d2ff);--link-visited-color:light-dark(#551a8b, #d8a6e6);--card-bg-color:light-dark(#fff, #252525);--border-color:light-dark(#eee, #3a3a3a);--code-bg-color:light-dark(#f8f8f8, #252525);--inline-code-bg-color:light-dark(
        rgba(0, 0, 0, 0.05),
        rgba(255, 255, 255, 0.12)
    );--tag-bg-color:light-dark(#f0f0f0, #333);--tag-hover-bg-color:light-dark(#e0e0e0, #444);--category-bg-color:light-dark(#e6f2ff, #234175);--category-hover-bg-color:light-dark(#cce6ff, #345286);--shadow-color:light-dark(rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0.25));--footer-color:light-dark(#666, #b0b0b0);--date-color:light-dark(#666, #b8b8b8);--line-number-color:light-dark(#6e6e6e, #9e9e9e);--success-color:light-dark(#1a7f37, #3fb950);--shadow-sm:0 1px 2px light-dark(rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0.4)),
        0 2px 6px light-dark(rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0.35));--shadow-md:0 4px 12px light-dark(rgba(0, 0, 0, 0.14), rgba(0, 0, 0, 0.5)),
        0 2px 4px light-dark(rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0.35));--measure:44rem;--gap:clamp(1rem, 4vw, 2rem);--tracks:[full-start] minmax(var(--gap), 1fr) [popout-start]
        minmax(0, 6rem) [content-start]
        min(var(--measure), 100% - var(--gap) * 2) [content-end] minmax(0, 6rem)
        [popout-end] minmax(var(--gap), 1fr) [full-end];--theme-transition:0.4s ease-out;--font-body:system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial,
        sans-serif;--font-heading:var(--font-body);--font-mono:"JetBrains Mono", ui-monospace, SFMono-Regular, "SF Mono",
        "Cascadia Code", "Fira Code", Menlo, Consolas, "Liberation Mono",
        monospace}:root[data-theme=light]{color-scheme:light}:root[data-theme=dark]{color-scheme:dark}@media(prefers-reduced-motion:no-preference){body,a,header,.site-footer,code,pre,blockquote,table,th,td,tr,.tag,.category,.theme-toggle,.post-title,.post-date{transition:background-color var(--theme-transition),color var(--theme-transition),border-color var(--theme-transition),box-shadow var(--theme-transition)}}html{min-height:100%;display:flex;flex-direction:column;font-family:var(--font-body)}@media screen and (max-width:48rem){html{font-size:93.75%}}@media screen and (max-width:40rem){html{font-size:87.5%}}body{flex:1;max-width:64rem;width:100%;box-sizing:border-box;padding-block:1.25rem;line-height:1.6;margin:0 auto;font-size:1rem;background-color:var(--bg-color);color:var(--text-color)}@media screen and (min-width:64rem){:root{--measure:48rem}}@media screen and (min-width:80rem){:root{--measure:52rem}body{max-width:72rem}}@media screen and (min-width:96rem){:root{--measure:56rem}body{max-width:80rem}}header,main{display:grid;grid-template-columns:var(--tracks)}header>*,main>*{grid-column:content}main{row-gap:1.25rem}main>*{margin-block:0}main>figure.img-popout{grid-column:popout}main>figure.img-full{grid-column:full}figure[style*=--img-width]{max-width:var(--img-width);margin-inline:auto}main>h2{margin-block-start:1.25rem}main>h3,main>h4{margin-block-start:.75rem}hr{width:100%;border:none;border-top:1px solid var(--border-color)}main>ul:not([class]),main>ol:not([class]){padding-left:1.5em}.post-dates time{color:var(--date-color);font-size:.95rem}.post-updated{margin-top:.15rem}.post-updated time{color:var(--footer-color)}.reading-time{color:var(--date-color)}.post-nav{display:flex;justify-content:space-between;gap:1rem;flex-wrap:wrap;margin-block-start:1.5rem;padding-top:1.5rem;border-top:1px solid var(--border-color)}.post-nav a{display:flex;flex-direction:column;gap:.2rem;max-width:48%;color:var(--link-color);text-decoration:none}.post-nav-next{margin-left:auto;text-align:right}.post-nav-label{font-size:.8rem;color:var(--date-color)}.post-nav a:hover .post-nav-title{text-decoration:underline}@media screen and (max-width:40rem){.post-nav a{max-width:100%}}nav{margin-bottom:20px;width:100%}nav ul{list-style-type:none;padding:0;margin:0;display:flex;justify-content:flex-start;flex-wrap:wrap;gap:12px}nav ul li{margin-bottom:8px}nav ul li a{text-decoration:none;color:var(--text-color);display:inline-block;padding:5px 0;position:relative;transition:color .2s ease}nav ul li a:hover{color:var(--link-color)}nav ul li a::after{content:"";position:absolute;width:0;height:2px;bottom:0;left:0;background-color:var(--link-color);transition:width .3s ease}nav ul li a:hover::after{width:100%}nav ul li a[target=_blank]{cursor:alias}nav ul li a.active{font-weight:700}nav ul li a.active::after{width:100%}nav ul ul{display:block;margin-left:20px}nav ul ul li{margin-top:5px}@media screen and (max-width:40rem){nav ul{flex-direction:column;gap:8px}nav ul li{margin-bottom:0}.social-links{flex-direction:row!important;gap:20px!important;margin-top:5px}.social-links li{margin-right:0}}.site-footer{text-align:center;padding:1rem var(--gap);font-size:.9rem;color:var(--footer-color);border-top:1px solid var(--border-color);margin-top:2rem;background-color:var(--bg-color);width:100%;box-sizing:border-box}.site-footer a{color:var(--text-color);text-decoration:none}.site-footer a:hover{text-decoration:underline}.site-title{font-family:var(--font-heading);font-size:1.25rem;font-weight:700;line-height:1.2;margin:.4rem 0 .2rem}.site-title a{color:var(--heading-color);text-decoration:none}.site-title a:hover{text-decoration:underline}.skip-link{position:absolute;left:-9999px;top:0;z-index:1000;padding:.5rem .9rem;background:var(--card-bg-color);color:var(--link-color);border-radius:0 0 5px 0;box-shadow:0 2px 8px var(--shadow-color)}.skip-link:focus{left:0}h1,h2,h3,h4,h5,h6{font-family:var(--font-heading);color:var(--heading-color);line-height:1.2}@media screen and (max-width:40rem){main>h1{font-size:1.6rem}}h2 a{color:var(--heading-color);text-decoration:none}h2 a:hover{text-decoration:none}.posts-list{list-style-type:none;padding:0;font-size:1.1rem}.posts-list li{margin-bottom:.8rem;display:flex;align-items:baseline;transition:transform .2s ease}.posts-list li:hover{transform:translateX(3px)}.posts-list a{text-decoration:none;color:var(--text-color);display:flex;align-items:baseline;width:100%}@media screen and (max-width:40rem){.posts-list a{flex-direction:column;align-items:flex-start}}.posts-list a:hover{text-decoration:none}.posts-list .post-date{color:var(--date-color);font-size:.9rem;margin-right:.8rem;flex-shrink:0;transition:color .2s ease}.posts-list a:hover .post-date{color:var(--link-hover-color)}@media screen and (max-width:40rem){.posts-list .post-date{margin-bottom:.2rem;font-size:.8rem}}.posts-list .post-title{color:var(--text-color);position:relative;padding-bottom:2px}.posts-list a .post-title{color:var(--link-color);transition:color .2s ease}.posts-list a:visited .post-title{color:var(--link-visited-color)}.posts-list a:hover .post-title{color:var(--link-hover-color);text-decoration:underline}.taxonomy-type-tag h1{font-family:var(--font-heading);font-size:1.2em}pre,code{font-family:var(--font-mono);font-size:.9em;background-color:var(--code-bg-color);border-radius:5px;margin:0;border:none}pre{padding:1em;white-space:pre-wrap;overflow-wrap:anywhere;overflow-x:auto;box-shadow:var(--shadow-sm);counter-reset:line}pre code{display:block;font-size:1em;background-color:transparent;padding:0;border-radius:0}.shiki .line{counter-increment:line}.shiki code{white-space:normal}.shiki .line{display:block;position:relative;padding-left:calc(var(--line-digits,2) * 1ch + .75em);white-space:pre-wrap}.shiki .line::before{content:counter(line);position:absolute;left:0;width:calc(var(--line-digits,2) * 1ch);text-align:right;color:var(--line-number-color);user-select:none}.shiki,.shiki span{color:light-dark(var(--shiki-light),var(--shiki-dark))}.shiki{background-color:light-dark(var(--shiki-light-bg),var(--shiki-dark-bg))}@media screen and (max-width:40rem){pre{padding:.8em;font-size:.85em}.shiki .line{padding-left:calc(var(--line-digits,2) * 1ch + .5em)}}code{padding:.2em .4em;background-color:var(--inline-code-bg-color);border-radius:3px}.code-block{position:relative}.code-block .copy-button{position:absolute;top:.5rem;right:.5rem;display:inline-flex;align-items:center;justify-content:center;padding:.35rem;color:var(--footer-color);background-color:var(--card-bg-color);border:1px solid var(--border-color);border-radius:5px;cursor:pointer;opacity:0;transition:opacity .15s ease,background-color .15s ease,color .15s ease,border-color .15s ease}.code-block .copy-button svg{display:block;width:15px;height:15px}.code-block:hover .copy-button,.code-block .copy-button:focus-visible{opacity:1}.code-block .copy-button:hover{color:var(--text-color);background-color:var(--tag-hover-bg-color)}.code-block .copy-button.copied{color:var(--success-color);border-color:var(--success-color)}@media(hover:none){.code-block .copy-button{opacity:1}}main p a,main blockquote a,main td a,main dd a,main ul:not([class]) a,main ol:not([class]) a{color:var(--link-color);text-decoration:underline;text-underline-offset:.15em;text-decoration-thickness:.06em}main p a:visited,main blockquote a:visited,main ul:not([class]) a:visited,main ol:not([class]) a:visited{color:var(--link-visited-color)}main p a:hover,main blockquote a:hover,main td a:hover,main dd a:hover,main ul:not([class]) a:hover,main ol:not([class]) a:hover{color:var(--link-hover-color)}.tags-list,.categories-list{list-style:none;padding:0;display:flex;flex-wrap:wrap;gap:.5rem}.tags-list li,.categories-list li{margin:0}.tag,.category{display:inline-block;background-color:var(--tag-bg-color);color:var(--text-color);padding:.3rem .7rem;border-radius:3px;font-size:.9rem;text-decoration:none;transition:background-color .2s ease}.tag:hover{background-color:var(--tag-hover-bg-color);text-decoration:none}.category{background-color:var(--category-bg-color)}.category:hover{background-color:var(--category-hover-bg-color);text-decoration:none}.taxonomy-type-tag .tags-list,.taxonomy-type-category .categories-list{justify-content:flex-start}.back-link{display:inline-block;margin-bottom:1rem;color:var(--link-color);text-decoration:none;font-size:.9rem}.back-link:hover{text-decoration:underline}.image-container{position:relative;cursor:pointer}.lightbox-toggle{display:none}.image-container label{cursor:zoom-in;display:block}img{max-width:100%;max-height:80vh;height:auto;display:block;margin-inline:auto;border-radius:5px;box-shadow:0 3px 10px var(--shadow-color);transition:transform .3s ease,box-shadow .3s ease}.image-container:hover img{transform:scale(1.01);box-shadow:0 5px 15px var(--shadow-color)}.lightbox{display:none;position:fixed;z-index:999;top:0;left:0;right:0;bottom:0;padding:0;background:rgba(0,0,0,.9)}.lightbox label{cursor:zoom-out;display:flex;align-items:center;justify-content:center;width:100%;height:100%}.lightbox img{max-height:90vh;max-width:90vw;object-fit:contain;margin:0;padding:0}.lightbox-toggle:checked~.lightbox{display:flex;animation:fadeIn .3s}@keyframes fadeIn{from{opacity:0}to{opacity:1}}body:has(.lightbox-toggle:checked){overflow:hidden}figcaption{text-align:center;font-size:.9rem;color:var(--footer-color);margin-top:.5rem}@media screen and (max-width:48rem){.lightbox{padding:.5em}.lightbox img{max-height:95vh;max-width:95vw}}.mermaid,pre.mermaid{background-color:transparent!important;text-align:center;border:none!important;box-shadow:none!important;padding:0!important}.theme-toggle{position:fixed;bottom:20px;right:20px;z-index:999;width:40px;height:40px;padding:0;border:none;border-radius:50%;background-color:var(--card-bg-color);color:var(--text-color);box-shadow:var(--shadow-md);cursor:pointer;display:flex;align-items:center;justify-content:center;transition:transform .3s ease,background-color var(--theme-transition),color var(--theme-transition),box-shadow var(--theme-transition)}.theme-toggle:focus-within{outline:2px solid var(--link-color);outline-offset:2px}.theme-toggle:hover{transform:scale(1.1)}.theme-toggle .icon{font-size:1.5rem;line-height:1}.theme-toggle-input{position:absolute;opacity:0;width:0;height:0}.icon-dark{display:inline-block}.icon-light{display:none}:root[data-theme=dark] .icon-dark{display:none}:root[data-theme=dark] .icon-light{display:inline-block}blockquote{padding:1rem 1.5rem;border-left:4px solid var(--link-color);background-color:var(--card-bg-color);border-radius:4px;box-shadow:var(--shadow-sm);font-style:italic}blockquote p{margin:0}blockquote ul,blockquote ol{margin-block:.5rem 0;padding-left:1.25em}table{border-collapse:collapse;width:100%;background-color:var(--card-bg-color);border-radius:8px;overflow:hidden;box-shadow:var(--shadow-sm)}th,td{padding:12px 16px;text-align:left;border-bottom:1px solid var(--border-color)}th{background-color:var(--code-bg-color);font-weight:600;color:var(--heading-color)}tr:hover{background-color:var(--code-bg-color)}@media screen and (max-width:48rem){th,td{padding:10px 12px;font-size:.9rem}}@media screen and (max-width:40rem){th,td{padding:8px 10px;font-size:.85rem}}