pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}/*!
  Theme: GitHub
  Description: Light theme as seen on github.com
  Author: github.com
  Maintainer: @Hirse
  Updated: 2021-05-15

  Outdated base version: https://github.com/primer/github-syntax-light
  Current colors taken from GitHub's CSS
*/.hljs{color:#24292e;background:#fff}.hljs-doctag,.hljs-keyword,.hljs-meta .hljs-keyword,.hljs-template-tag,.hljs-template-variable,.hljs-type,.hljs-variable.language_{color:#d73a49}.hljs-title,.hljs-title.class_,.hljs-title.class_.inherited__,.hljs-title.function_{color:#6f42c1}.hljs-attr,.hljs-attribute,.hljs-literal,.hljs-meta,.hljs-number,.hljs-operator,.hljs-variable,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id{color:#005cc5}.hljs-regexp,.hljs-string,.hljs-meta .hljs-string{color:#032f62}.hljs-built_in,.hljs-symbol{color:#e36209}.hljs-comment,.hljs-code,.hljs-formula{color:#6a737d}.hljs-name,.hljs-quote,.hljs-selector-tag,.hljs-selector-pseudo{color:#22863a}.hljs-subst{color:#24292e}.hljs-section{color:#005cc5;font-weight:700}.hljs-bullet{color:#735c0f}.hljs-emphasis{color:#24292e;font-style:italic}.hljs-strong{color:#24292e;font-weight:700}.hljs-addition{color:#22863a;background-color:#f0fff4}.hljs-deletion{color:#b31d28;background-color:#ffeef0}[data-theme=dark] .hljs{background:#161b22;color:#c9d1d9}[data-theme=dark] .hljs-doctag,[data-theme=dark] .hljs-keyword,[data-theme=dark] .hljs-template-tag,[data-theme=dark] .hljs-template-variable,[data-theme=dark] .hljs-type,[data-theme=dark] .hljs-variable.language_{color:#ff7b72}[data-theme=dark] .hljs-title,[data-theme=dark] .hljs-title.class_,[data-theme=dark] .hljs-title.class_.inherited__,[data-theme=dark] .hljs-title.function_{color:#d2a8ff}[data-theme=dark] .hljs-attr,[data-theme=dark] .hljs-attribute,[data-theme=dark] .hljs-literal,[data-theme=dark] .hljs-meta,[data-theme=dark] .hljs-number,[data-theme=dark] .hljs-operator,[data-theme=dark] .hljs-selector-attr,[data-theme=dark] .hljs-selector-class,[data-theme=dark] .hljs-selector-id,[data-theme=dark] .hljs-variable{color:#79c0ff}[data-theme=dark] .hljs-meta .hljs-string,[data-theme=dark] .hljs-regexp,[data-theme=dark] .hljs-string{color:#a5d6ff}[data-theme=dark] .hljs-built_in,[data-theme=dark] .hljs-symbol{color:#ffa657}[data-theme=dark] .hljs-code,[data-theme=dark] .hljs-comment,[data-theme=dark] .hljs-formula{color:#8b949e}[data-theme=dark] .hljs-name,[data-theme=dark] .hljs-quote,[data-theme=dark] .hljs-selector-pseudo,[data-theme=dark] .hljs-selector-tag{color:#7ee787}[data-theme=dark] .hljs-subst{color:#c9d1d9}[data-theme=dark] .hljs-section{color:#1f6feb;font-weight:700}[data-theme=dark] .hljs-bullet{color:#f2cc60}[data-theme=dark] .hljs-emphasis{color:#c9d1d9;font-style:italic}[data-theme=dark] .hljs-strong{color:#c9d1d9;font-weight:700}[data-theme=dark] .hljs-addition{color:#aff5b4;background:#033a16}[data-theme=dark] .hljs-deletion{color:#ffdcd7;background:#67060c}body{font-family:var(--font-body, "DM Sans", Helvetica, sans-serif)}.blog-container{max-width:1200px;margin:0 auto;padding:calc(var(--nav-h, 64px) + 2rem) 1.5rem 2rem}.post-meta{font-family:var(--font-mono);font-size:.82rem;color:var(--ink-3);margin-bottom:.4rem}.back-link{display:inline-flex;align-items:center;gap:.4rem;margin-bottom:2rem;font-size:.9rem;text-decoration:none;color:var(--ink-3);transition:color .15s}.back-link:hover{color:var(--accent)}.tag{background:var(--accent-dim);border:1px solid var(--accent);border-radius:4px;padding:.2rem .6rem;font-size:.75rem;color:var(--accent);font-family:var(--font-mono);letter-spacing:.04em}.post-content{font-family:Georgia,Iowan Old Style,Times New Roman,serif;line-height:1.75;font-size:1.0625rem;font-weight:500;color:#242421}[data-theme=dark] .post-content{color:#ddddd6}.post-content h1,.post-content h2,.post-content h3,.post-content h4,.post-content h5,.post-content h6{font-family:var(--font-display);font-weight:700;line-height:1.3;color:var(--ink)}.post-content h1{font-size:2rem;margin:2.5rem 0 1rem}.post-content h2{font-size:1.55rem;margin:2.5rem 0 .75rem}.post-content h3{font-size:1.25rem;margin:2rem 0 .5rem}.post-content h4{font-size:1.05rem;margin:1.5rem 0 .4rem}.post-content p{margin:0 0 1.25rem}.post-content ul,.post-content ol{margin:.25rem 0 1.25rem;padding-left:1.75rem}.post-content ul{list-style-type:disc}.post-content ol{list-style-type:decimal}.post-content li{margin-bottom:.35rem;line-height:1.75}.post-content li>ul,.post-content li>ol{margin-top:.25rem;margin-bottom:.25rem}.post-content strong{font-weight:700;color:var(--accent)}.post-content em{font-style:italic}.post-content a{color:var(--accent);text-decoration:underline;text-underline-offset:2px}.post-content a:hover{opacity:.8}.post-content hr{border:none;border-top:1px solid var(--rule);margin:2.5rem 0}.post-content table{width:100%;border-collapse:collapse;margin:1.75rem 0;font-size:.9rem}.post-content th,.post-content td{border:1px solid var(--rule);padding:.6rem 1rem;text-align:left;vertical-align:top;color:var(--ink-2)}.post-content thead tr{background:var(--bg-alt)}.post-content thead th{font-weight:600;color:var(--ink)}.post-content tbody tr:nth-child(2n){background:var(--bg-alt)}.post-content pre{position:relative;border-radius:10px;overflow:hidden;font-size:.9rem;line-height:1.6;margin:1.5rem 0;box-shadow:0 4px 16px #00000040;border:1px solid transparent}[data-theme=dark] .post-content pre{border-color:#ffffff14;box-shadow:0 4px 24px #0009}.post-content pre code.hljs{border-radius:10px;padding:1.4rem 1.5rem;display:block;overflow-x:auto;font-family:var(--font-mono);font-size:.855rem}.post-content code:not(.hljs){background:var(--accent-dim);color:var(--accent);padding:.15rem .5rem;border-radius:4px;font-size:.875em;font-family:var(--font-mono);border:1px solid var(--accent-light)}.post-content img{display:block;max-width:100%;height:auto;box-sizing:border-box;border-radius:8px;margin:1.5rem auto}[data-theme=dark] .post-content img:not(.img-keep-dark):not(.img-dark-bg){padding:.75rem;background:#f0f0ec;box-shadow:0 0 0 1px var(--rule)}:root:not([data-theme=dark]) .post-content img.img-dark-bg{padding:.75rem;background:#161614;box-shadow:0 0 0 1px #2a2a26}.post-content blockquote{border-left:4px solid var(--accent);background:var(--accent-dim);margin:1.75rem 0;padding:.85rem 1.25rem;border-radius:0 8px 8px 0;color:var(--ink-2);font-style:italic}.post-content details{margin:2rem 0 0;border-radius:8px}.post-content details>summary{list-style:none;cursor:pointer;display:flex;align-items:center;gap:.5rem;-webkit-user-select:none;-moz-user-select:none;user-select:none}.post-content details>summary::-webkit-details-marker{display:none}.post-content details>summary h2:before{content:"▶";display:inline-block;font-size:.7em;margin-right:.5rem;transition:transform .2s ease;color:var(--accent);vertical-align:middle}.post-content details[open]>summary h2:before{transform:rotate(90deg)}.post-content details>summary h2{margin:0}.post-content .details-content{padding-left:.25rem}.copy-btn{position:absolute;top:.6rem;right:.6rem;background:#0000000f;color:#3a3a36;border:1px solid rgba(0,0,0,.15);border-radius:5px;padding:.2rem .6rem;font-size:.72rem;font-family:inherit;cursor:pointer;transition:background .15s;z-index:2}.copy-btn:hover{background:#0000001f}[data-theme=dark] .copy-btn{background:#ffffff1f;color:#e2e8f0;border-color:#fff3}[data-theme=dark] .copy-btn:hover{background:#ffffff38}.reading-progress-bar{position:fixed;top:0;left:0;height:3px;background:linear-gradient(90deg,var(--accent),#7c3aed);z-index:1000;transition:width .1s linear;border-radius:0 2px 2px 0}.blog-post-layout{display:flex;gap:2.5rem;align-items:flex-start}.blog-post-main{flex:1;min-width:0}.blog-toc-sidebar{width:220px;flex-shrink:0;position:sticky;top:calc(var(--nav-h, 64px) + 1.5rem);max-height:calc(100vh - var(--nav-h, 64px) - 3rem);overflow-y:auto}.blog-toc-inner{border-left:2px solid var(--rule);padding-left:1rem}.blog-toc-title{font-family:var(--font-mono);font-size:.7rem;font-weight:700;text-transform:uppercase;letter-spacing:.08em;color:var(--ink-3);margin:0 0 .75rem}.blog-toc-link{display:block;font-size:.8rem;line-height:1.5;color:var(--ink-3);text-decoration:none;transition:color .15s;border-left:2px solid transparent;margin-left:-1.125rem;padding:.2rem 0 .2rem 1rem}.blog-toc-link:hover{color:var(--accent)}.blog-toc-link.toc-active{color:var(--accent);border-left-color:var(--accent);font-weight:600}.blog-toc-link.toc-h3{padding-left:1.75rem;font-size:.75rem}@media(max-width:1100px){.blog-toc-sidebar{display:none}}.pagination{display:flex;align-items:center;justify-content:center;gap:.35rem;flex-wrap:wrap;padding:2rem 0 1rem}.pagination--top{padding:.5rem 0 1.5rem;border-bottom:1px solid var(--rule);margin-bottom:1.5rem}.page-btn{min-width:2.2rem;height:2.2rem;padding:0 .6rem;border:1px solid var(--rule);border-radius:6px;background:var(--bg);color:var(--ink-2);font-size:.875rem;font-weight:500;cursor:pointer;transition:background .15s,border-color .15s,color .15s;line-height:1}.page-btn:hover:not([disabled]){background:var(--accent-dim);border-color:var(--accent);color:var(--accent)}.page-btn.page-active{background:var(--accent);border-color:var(--accent);color:#fff;cursor:default}.page-btn[disabled]{opacity:.4;cursor:not-allowed}.page-btn.page-nav{padding:0 .75rem;font-size:.8rem}.page-ellipsis{min-width:2.2rem;height:2.2rem;display:inline-flex;align-items:center;justify-content:center;color:var(--ink-3);font-size:.9rem}.blog-index-list{list-style:none;padding:0;margin:0 0 2rem}.blog-index-item{padding:32px 0;border-bottom:1px solid var(--rule)}.blog-index-item:first-child{padding-top:0}.blog-index-item__meta{display:flex;align-items:center;gap:10px;margin-bottom:8px}.blog-index-item__date{font-family:var(--font-mono);font-size:11px;letter-spacing:.08em;color:var(--ink-3);text-transform:uppercase}.blog-index-item__title{display:block;font-family:var(--font-display);font-size:1.25rem;font-weight:700;color:var(--ink);text-decoration:none;line-height:1.3;margin-bottom:8px;transition:color .15s}.blog-index-item__title:hover{color:var(--accent)}.blog-index-item__desc{font-family:Georgia,Iowan Old Style,Times New Roman,serif;font-size:1.0625rem;font-weight:500;color:var(--ink-2);line-height:1.6;margin:0}.blog-controls{margin-bottom:2rem;display:flex;flex-direction:column;gap:.85rem}.blog-search{width:100%;padding:.6rem 1rem;border:1px solid var(--rule);border-radius:8px;font-size:.95rem;font-family:inherit;background:var(--bg);color:var(--ink);outline:none;transition:border-color .15s,box-shadow .15s;box-sizing:border-box}.blog-search:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-dim)}.blog-search::-moz-placeholder{color:var(--ink-3)}.blog-search::placeholder{color:var(--ink-3)}.tag-filter-bar{display:flex;flex-wrap:wrap;gap:.45rem}.tag-pill{padding:.25rem .75rem;border-radius:999px;border:1px solid var(--rule);background:transparent;font-size:.78rem;font-family:var(--font-mono);color:var(--ink-2);cursor:pointer;transition:background .15s,color .15s,border-color .15s;line-height:1.6}.tag-pill:hover{background:var(--accent-dim);border-color:var(--accent);color:var(--accent)}.tag-pill.active{background:var(--accent);border-color:var(--accent);color:#fff}.subtag-dropdown{position:absolute;top:calc(100% + 6px);left:0;z-index:100;min-width:160px;background:var(--bg);border:1px solid var(--rule);border-radius:10px;box-shadow:0 4px 16px #0000001a;padding:.3rem;display:flex;flex-direction:column;gap:1px;max-height:10.6rem;overflow-y:auto}.subtag-option{width:100%;text-align:left;padding:.35rem .75rem;border:none;border-radius:7px;background:transparent;color:var(--ink-2);font-size:.78rem;font-family:var(--font-mono);cursor:pointer;transition:background .12s,color .12s;line-height:1.6}.subtag-option:hover{background:var(--accent-dim);color:var(--accent)}.subtag-option.selected{background:var(--accent-dim);color:var(--accent);font-weight:600}.no-results{padding:2rem 0;color:var(--ink-3);font-size:.95rem}.section-heading{position:relative;padding-bottom:.6rem}.section-heading:after{content:"";position:absolute;left:0;bottom:0;width:36px;height:3px;background:var(--accent);border-radius:2px}@media(max-width:768px){.blog-container{padding:1.5rem .75rem;overflow-x:hidden}.post-content h1{font-size:1.55rem}.post-content h2{font-size:1.3rem}.post-content h3{font-size:1.1rem}.post-content div{max-width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;box-sizing:border-box}.post-content table{display:block;overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width:480px){.blog-container{padding:1rem .5rem;overflow-x:hidden}.post-content div[style*=grid-template-columns]{grid-template-columns:1fr!important}}
