@import 'https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500&display=swap';:root{--tech-bg:#f9f9f7;--tech-shell-width:min(92rem, 100%);--tech-code-bg:#282c34;--tech-code-text:#abb2bf;--font-family-mono:"JetBrains Mono", ui-monospace, "Cascadia Code", monospace}:root[data-theme=dark]{--tech-bg:var(--color-bg-primary)}@media(prefers-color-scheme:dark){:root:not([data-theme]){--tech-bg:var(--color-bg-primary)}}body.is-page.section-articles.no-parallax{grid-template-columns:minmax(0,1fr);padding:var(--layout-gutter);gap:clamp(2rem,5vw,3rem);background:var(--tech-bg);overflow-x:clip}body.is-page.section-articles.no-parallax>header,body.is-page.section-articles.no-parallax>footer{width:min(100%,var(--tech-shell-width));justify-self:center}body.is-page.section-articles.no-parallax>main{width:min(100%,var(--tech-shell-width));justify-self:center}body.is-page.section-articles .site-header .path-nav{display:block}.tech-page{width:100%}.tech-header{max-width:70ch;margin-bottom:clamp(2rem,4vw,3rem);padding-bottom:1.5rem;border-bottom:1px solid var(--color-border)}.tech-kicker{margin:0 0 .75rem;color:var(--color-text-muted);font-family:var(--font-family-mono);font-size:.75rem;font-weight:500;letter-spacing:.14em;text-transform:uppercase}.tech-title{margin:0;font-family:var(--font-family-display);font-size:clamp(2rem,4vw,3rem);line-height:1.08;letter-spacing:-.03em;text-wrap:balance}.tech-meta{display:flex;flex-wrap:wrap;gap:.55rem;margin-top:.85rem;color:var(--color-text-muted);font-size:.92rem}.tech-layout{display:grid;grid-template-columns:minmax(0,1fr)minmax(13rem,18rem);gap:clamp(2rem,4vw,4rem);align-items:start}.tech-content{min-width:0;max-width:70ch;color:var(--color-text-primary);font-family:var(--font-family-reading);font-size:1.05rem;line-height:1.75}.tech-content>:first-child{margin-top:0}.tech-content p,.tech-content ul,.tech-content ol,.tech-content blockquote,.tech-content table{margin:1.25rem 0}.tech-content table{display:block;width:100%;border-collapse:collapse;overflow-x:auto;font-size:.95rem;line-height:1.55}.tech-content th,.tech-content td{padding:.65rem .75rem;border:1px solid var(--color-border);text-align:left;vertical-align:top}.tech-content th{background:var(--color-bg-secondary);font-weight:600}.tech-content td code{white-space:nowrap}.tech-content h1,.tech-content h2,.tech-content h3,.tech-content h4,.tech-content h5{margin:2.5rem 0 .85rem;font-family:var(--font-family-display);font-weight:600;letter-spacing:-.02em;line-height:1.15;scroll-margin-top:calc(var(--layout-gutter) + 1rem)}.tech-content h2{font-size:clamp(1.5rem,1.2rem + 1vw,2rem)}.tech-content h3{font-size:clamp(1.2rem,1.05rem + .5vw,1.45rem)}.tech-content h2::before,.tech-content h3::before,.tech-content h4::before,.tech-content h5::before{content:none}.tech-content a{margin-left:0;border-bottom:1px solid}.tech-content blockquote{padding-left:1rem;border-left:3px solid var(--color-border);color:var(--color-text-muted)}.tech-content img{max-width:100%;height:auto;display:block}.tech-content li+li{margin-top:.35rem}.tech-content .highlight,.tech-content pre{position:relative;margin:1.75rem 0;border:none;border-radius:.625rem;background:var(--tech-code-bg);color:var(--tech-code-text);box-shadow:0 12px 32px rgba(24,24,27,.12);width:min(calc(100% + clamp(1rem,4vw,3rem)),calc(100vw - (var(--layout-gutter) * 2)));max-width:min(85rem,calc(100vw - (var(--layout-gutter) * 2)));margin-left:calc(-1 * clamp(0rem,2vw,1rem));font-family:var(--font-family-mono);font-size:.9rem;line-height:1.65;white-space:pre;word-wrap:normal}.tech-content pre{padding:2.75rem 1.25rem 1.25rem;overflow-x:auto}.tech-content .highlight{padding:0}.tech-content .highlight pre{width:100%;max-width:100%;margin:0;margin-left:0;padding:2.75rem 1.25rem 1.25rem;border-radius:inherit;background:0 0!important;box-shadow:none;overflow-x:auto;color:inherit}.tech-content pre code,.tech-content .highlight code{display:block;min-width:max-content;background:0 0;border:none;padding:0;color:inherit;font-size:inherit;font-family:inherit;line-height:inherit}.tech-content p>code,.tech-content li>code,.tech-content td>code{padding:.12em .35em;border-radius:.3rem;background:var(--color-bg-secondary);color:var(--color-text-code);font-family:var(--font-family-mono);font-size:.88em}.code-copy-btn{position:absolute;top:.65rem;right:.65rem;z-index:2;padding:.35rem .65rem;border:1px solid rgba(255,255,255,.14);border-radius:.375rem;background:rgba(255,255,255,6%);color:#e5e7eb;font-family:var(--font-family-mono);font-size:.72rem;letter-spacing:.04em;text-transform:uppercase;cursor:pointer}.code-copy-btn:hover{background:rgba(255,255,255,.12)}.code-copy-btn--success{color:#98c379;border-color:rgba(152,195,121,.35)}.tech-toc{position:sticky;top:calc(var(--layout-gutter) + .5rem);max-height:calc(100svh - (var(--layout-gutter) * 2) - 1rem);padding:1rem 1.1rem;border:1px solid var(--color-border);border-radius:.625rem;background:var(--color-bg-primary);overflow-y:auto;overscroll-behavior:contain;scrollbar-gutter:stable}.tech-toc__label{margin:0 0 .75rem;color:var(--color-text-muted);font-family:var(--font-family-mono);font-size:.72rem;font-weight:500;letter-spacing:.12em;text-transform:uppercase}.tech-toc__nav nav,.tech-toc__nav>ul,.tech-toc__nav>ol{margin:0;padding:0}.tech-toc__nav ul,.tech-toc__nav ol{list-style:none;margin:0;padding:0}.tech-toc__nav li+li{margin-top:.45rem}.tech-toc__nav a{display:block;margin-left:0;padding:.18rem .4rem;border-radius:.35rem;color:var(--color-text-muted);font-size:.88rem;line-height:1.45;border-bottom:none;text-decoration:none}.tech-toc__nav a:hover,.tech-toc__nav a.is-active,.tech-toc__nav a[aria-current=true]{background:var(--color-bg-secondary);color:var(--color-text-primary)}.tech-toc__nav ul ul{margin-top:.35rem;padding-left:.85rem;border-left:1px solid var(--color-border)}.tech-footer-nav{margin-top:3rem;padding-top:1.5rem;border-top:1px solid var(--color-border)}.tech-footer-nav a{margin-left:0;color:var(--color-text-muted);border-bottom-color:transparent}.tech-footer-nav a:hover{color:var(--color-text-primary);border-bottom-color:initial}body.is-page.section-articles .time-list li{align-items:baseline}@media(max-width:900px){.tech-layout{grid-template-columns:minmax(0,1fr)}.tech-toc{position:static;order:-1}.tech-content .highlight,.tech-content pre{width:100%;max-width:100%;margin-left:0}}@media(max-width:600px){body.is-page.section-articles.no-parallax{padding-top:1.5rem}.tech-header{margin-bottom:1.5rem}}