:root{--canvas:#f7f7f4;--surface:#edeee9;--ink:#1d211f;--ink-muted:#626a65;--hairline:#d8dcd7;--accent:#356c5b;--accent-hover:#285748;--accent-soft:#dce8e2;--code-bg:#eceeeb;--code-ink:#252a27;--code-border:#d7dbd6;--font-sans:ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI",
    sans-serif;--font-mono:"SFMono-Regular", Consolas, "Liberation Mono", Menlo,
    monospace;--shell-width:76rem;--prose-width:68rem;--radius:0.7rem;--transition:160ms ease}body.colorscheme-dark,body[data-theme=dark]{--canvas:#131614;--surface:#1b1f1c;--ink:#e7eae7;--ink-muted:#a1aaa4;--hairline:#303631;--accent:#8ab8a8;--accent-hover:#a7cdbf;--accent-soft:#263c34;--code-bg:#191d1a;--code-ink:#dfe5e0;--code-border:#303631}@media(prefers-color-scheme:dark){body.colorscheme-auto{--canvas:#131614;--surface:#1b1f1c;--ink:#e7eae7;--ink-muted:#a1aaa4;--hairline:#303631;--accent:#8ab8a8;--accent-hover:#a7cdbf;--accent-soft:#263c34;--code-bg:#191d1a;--code-ink:#dfe5e0;--code-border:#303631}}html{overflow-y:scroll;scroll-behavior:smooth}@supports(scrollbar-gutter:stable){html{overflow-y:auto;scrollbar-gutter:stable}}body{color:var(--ink);background:var(--canvas);font-family:var(--font-sans);font-size:1.7em;line-height:1.7;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}::selection{color:var(--canvas);background:var(--accent)}a{color:var(--accent);text-decoration-color:color-mix(in srgb,var(--accent) 55%,transparent);text-decoration-thickness:.08em;text-underline-offset:.18em;transition:color var(--transition),text-decoration-color var(--transition),background-color var(--transition)}a:hover{color:var(--accent-hover);text-decoration-color:initial}a:focus-visible,button:focus-visible{outline:2px solid var(--accent);outline-offset:3px}p{white-space:normal;overflow-wrap:break-word}h1,h2,h3,h4,h5,h6{color:var(--ink);font-family:var(--font-sans);text-wrap:balance}.wrapper{background:var(--canvas)}.container{width:100%;max-width:var(--shell-width);margin:0 auto;padding-right:2rem;padding-left:2rem}.content{margin:0;padding:5.6rem 0 8rem}.navigation{width:100%;height:auto;margin:0;padding:0;background:var(--canvas);border-bottom:1px solid var(--hairline)}.navigation .container{display:flex;min-height:7.2rem;align-items:center}.navigation a,.navigation span{color:var(--ink-muted);font-family:var(--font-sans);font-size:1.45rem;font-weight:560}.navigation-actions{display:flex;align-items:center;gap:1.6rem;margin-left:auto}.navigation .navigation-list{position:static;display:flex;visibility:visible;float:none;width:auto;max-height:none;align-items:center;gap:2.4rem;margin:0;padding:0;overflow:visible;list-style:none;opacity:1;background:0 0;border:0}.navigation .navigation-list .navigation-item{float:none;margin:0}.navigation .navigation-list .navigation-link{position:relative;display:inline-flex;margin:0;padding:.8rem 0;line-height:1;text-decoration:none}.navigation .navigation-link:hover,.navigation .navigation-link:focus-visible,.navigation .navigation-link[aria-current=page]{color:var(--ink);text-decoration:none}.navigation .navigation-link[aria-current=page]::after{position:absolute;right:0;bottom:.2rem;left:0;height:1px;background:var(--accent);content:""}.theme-toggle{display:inline-grid;width:4rem;height:4rem;padding:0;place-items:center;color:var(--ink-muted);background:0 0;border:0;border-radius:50%;cursor:pointer;transition:color var(--transition),background-color var(--transition)}.navigation #dark-mode-toggle{position:static;z-index:auto;inset:auto;margin:0;font-size:inherit;line-height:1}.navigation .theme-toggle i{color:currentColor;font-size:1.5rem;cursor:inherit}.theme-toggle:hover{color:var(--ink);background:var(--surface)}.content .centered{display:block;max-width:none;margin:0;padding:0}.centered .about{display:grid;grid-template-areas:"portrait name" "portrait role" "portrait socials";grid-template-columns:11.2rem minmax(0,1fr);column-gap:2.8rem;max-width:var(--prose-width);margin:0 auto;text-align:left}.centered .about .avatar{grid-area:portrait}.avatar img{display:block;width:11.2rem;height:11.2rem;object-fit:cover;border:1px solid var(--hairline);border-radius:50%}.centered .about h1{grid-area:name;align-self:end;margin:0 0 .2rem;color:var(--ink);font-size:3.2rem;font-weight:650;line-height:1.15;letter-spacing:-.035em}.centered .about h2{grid-area:role;margin:0;color:var(--ink-muted);font-size:1.65rem;font-weight:450;line-height:1.45}.centered .about ul{display:flex;grid-area:socials;align-self:end;gap:.2rem;margin:.5rem 0 -.6rem -1.1rem;padding:0;list-style:none;cursor:default}.centered .about ul li{display:block;margin:0}.centered .about ul li a{display:inline-flex;width:4rem;height:4rem;align-items:center;justify-content:center;margin:0;color:var(--ink-muted);border-radius:50%}.centered .about ul li a:hover,.centered .about ul li a:focus-visible{color:var(--accent);background:var(--accent-soft);text-decoration:none}.centered .about ul li a .fa-2x{font-size:1.65rem}.about-content{max-width:var(--prose-width);margin:5.6rem auto 0;padding:4rem 0 0;color:var(--ink);line-height:1.72;border-top:1px solid var(--hairline);text-wrap:pretty}.about-content p{margin:0 0 1.5em;color:var(--ink)}.about-content p:last-child{margin-bottom:0}.about-content a{color:var(--ink);text-decoration-line:underline;text-decoration-color:color-mix(in srgb,var(--accent) 55%,transparent)}.about-content a:hover{color:var(--accent);text-decoration-color:initial}.post-list{max-width:var(--shell-width)}.section-header{max-width:var(--prose-width);margin:0 auto 4.8rem;color:var(--ink);font-size:clamp(3.4rem,7vw,4.8rem);font-weight:620;line-height:1.06;letter-spacing:-.05em;text-align:left}.post-entry,.no-posts{max-width:var(--prose-width);margin-right:auto;margin-left:auto}.post-entry{display:grid;grid-template-columns:10.5rem minmax(0,1fr);gap:2.4rem;margin-bottom:0;padding:2.2rem 0;border-top:1px solid var(--hairline)}.post-entry:last-of-type{border-bottom:1px solid var(--hairline)}.post-date{padding-top:.35rem;color:var(--ink-muted);font-family:var(--font-sans);font-size:1.3rem;font-variant-numeric:tabular-nums;font-weight:450;line-height:1.5;white-space:nowrap}.post-entry-body{min-width:0}.post-entry .post-title{display:block;margin:0;font-size:2rem;font-weight:590;line-height:1.35;letter-spacing:-.02em}.post-entry .post-title a{color:var(--ink);text-decoration-color:transparent}.post-entry .post-title a:hover{color:var(--accent);text-decoration-color:initial}.post-excerpt{margin:.8rem 0 0;color:var(--ink-muted);font-size:1.55rem;line-height:1.6;text-wrap:pretty}.no-posts{color:var(--ink-muted)}.post{max-width:var(--prose-width);margin:0 auto;padding:0}.post .post-header{display:block;margin:0 0 4.8rem}.post .post-title{display:block;margin:0;color:var(--ink);font-size:clamp(3.6rem,8vw,5.6rem);font-weight:630;line-height:1.06;letter-spacing:-.055em}.post-meta{display:flex;flex-wrap:wrap;gap:.6rem;align-items:baseline;margin:1.8rem 0 0;color:var(--ink-muted);font-family:var(--font-sans);font-size:1.35rem;font-variant-numeric:tabular-nums;font-weight:450;line-height:1.5}.post-meta .meta-separator{color:var(--hairline)}.post-meta a{color:var(--ink-muted);text-decoration:underline;text-decoration-color:var(--hairline)}.post-meta a:hover{color:var(--accent);text-decoration-color:initial}.post-content{margin:0;color:var(--ink);font-size:1.75rem;line-height:1.74;text-wrap:pretty}.content article .post-content p{margin:0 0 1.55em;color:var(--ink);text-align:left;hyphens:none}.post-content h2,.post-content h3,.post-content h4{color:var(--ink);font-weight:620;letter-spacing:-.025em}.post-content h2{margin:2.4em 0 .75em;font-size:2.8rem;line-height:1.2}.post-content h3{margin:2em 0 .7em;font-size:2.2rem;line-height:1.3}.post-content h4{margin:1.8em 0 .6em;font-size:1.8rem;line-height:1.4}.post-content ul,.post-content ol{margin:0 0 1.6em;padding-left:1.4em}.post-content li{margin:.35em 0;padding-left:.25em}.post-content a{color:var(--ink);text-decoration:underline;text-decoration-color:color-mix(in srgb,var(--accent) 55%,transparent)}.post-content a:hover{color:var(--accent);text-decoration-color:initial}.post-content code{padding:.15em .4em;color:var(--code-ink);font-family:var(--font-mono);font-size:.88em;background:var(--surface);border:1px solid var(--code-border);border-radius:.35rem}.content pre,.post-content .highlight{margin:2.4rem 0;overflow:hidden;background:var(--code-bg);border:1px solid var(--code-border);border-radius:var(--radius)}.content pre,.post-content .highlight pre{padding:1.8rem 2rem;overflow-x:auto;color:var(--code-ink);font-family:var(--font-mono);font-size:1.45rem;line-height:1.65;background:var(--code-bg);border:0;border-radius:0}.post-content .highlight pre{margin:0}.content pre code{padding:0;color:inherit;background:0 0;border:0}.chroma,.chroma .bg{color:var(--code-ink);background-color:transparent}.chroma .lnt,.chroma .ln{margin-right:1em;padding-right:1em;color:var(--ink-muted);border-right:1px solid var(--code-border)}.post-content blockquote{margin:2.4rem 0;padding:.2rem 0 .2rem 2rem;color:var(--ink-muted);font-style:normal;background:0 0;border-left:2px solid var(--accent)}.post-content blockquote p:last-child{margin-bottom:0}.post-content hr{margin:4rem 0;border:0;border-top:1px solid var(--hairline)}.post-content img{display:block;max-width:100%;height:auto;margin:2.8rem auto;border-radius:var(--radius)}.post-content figure{margin:2.8rem 0}.post-content figcaption p{margin-top:.8rem;color:var(--ink-muted);font-size:1.35rem;font-style:normal;text-align:center}.post-content table{display:block;width:100%;margin:2.4rem 0;overflow-x:auto;border-collapse:collapse}.post-content th,.post-content td{padding:.8rem 1rem;text-align:left;border:0;border-bottom:1px solid var(--hairline)}.post-content th{font-size:.9em;font-weight:620}.revision-history{margin-top:6.4rem;padding-top:1.8rem;font-family:var(--font-sans);font-size:1.3rem;font-weight:500;text-align:left;border-top:1px solid var(--hairline)}.revision-history a{color:var(--ink-muted);text-decoration:none}.revision-history a:hover{color:var(--accent);text-decoration:underline}.site-footer{color:var(--ink-muted);background:var(--canvas);border-top:1px solid var(--hairline)}.footer-content{display:flex;max-width:calc(var(--prose-width) + 4rem);min-height:7.2rem;align-items:center;justify-content:space-between;gap:2rem;padding-top:1.6rem;padding-bottom:1.6rem;font-family:var(--font-sans);font-size:1.3rem;font-weight:450}.footer-links{display:flex;gap:1.8rem}.footer-content a{color:var(--ink-muted);text-decoration:none}.footer-content a:hover{color:var(--accent);text-decoration:underline}:is(body.colorscheme-dark,body.colorscheme-auto){color:var(--ink);background:var(--canvas)}:is(body.colorscheme-dark,body.colorscheme-auto) a{color:var(--accent)}:is(body.colorscheme-dark,body.colorscheme-auto) h1,:is(body.colorscheme-dark,body.colorscheme-auto) h2,:is(body.colorscheme-dark,body.colorscheme-auto) h3,:is(body.colorscheme-dark,body.colorscheme-auto) h4,:is(body.colorscheme-dark,body.colorscheme-auto) h5,:is(body.colorscheme-dark,body.colorscheme-auto) h6{color:var(--ink)}:is(body.colorscheme-dark,body.colorscheme-auto) .navigation a,:is(body.colorscheme-dark,body.colorscheme-auto) .navigation span{color:var(--ink-muted)}:is(body.colorscheme-dark,body.colorscheme-auto) .navigation .navigation-link:hover,:is(body.colorscheme-dark,body.colorscheme-auto) .navigation .navigation-link:focus-visible,:is(body.colorscheme-dark,body.colorscheme-auto) .navigation .navigation-link[aria-current=page]{color:var(--ink)}:is(body.colorscheme-dark,body.colorscheme-auto) .navigation .navigation-list{background:0 0;border:0}:is(body.colorscheme-dark,body.colorscheme-auto) .navigation .theme-toggle i{color:currentColor}:is(body.colorscheme-dark,body.colorscheme-auto) .content .centered .about ul li a{color:var(--ink-muted)}:is(body.colorscheme-dark,body.colorscheme-auto) .content .centered .about ul li a:hover,:is(body.colorscheme-dark,body.colorscheme-auto) .content .centered .about ul li a:focus-visible{color:var(--accent)}:is(body.colorscheme-dark,body.colorscheme-auto) .about-content a,:is(body.colorscheme-dark,body.colorscheme-auto) .post-content a{color:var(--ink)}:is(body.colorscheme-dark,body.colorscheme-auto) .post-content a:hover,:is(body.colorscheme-dark,body.colorscheme-auto) .about-content a:hover{color:var(--accent)}:is(body.colorscheme-dark,body.colorscheme-auto) .post-content code{color:var(--code-ink);background:var(--surface)}:is(body.colorscheme-dark,body.colorscheme-auto) .content pre code{color:inherit;background:0 0}:is(body.colorscheme-dark,body.colorscheme-auto) .chroma,:is(body.colorscheme-dark,body.colorscheme-auto) .bg{color:var(--code-ink);background-color:transparent}:is(body.colorscheme-dark,body.colorscheme-auto) .post-content blockquote{border-left-color:var(--accent)}:is(body.colorscheme-dark,body.colorscheme-auto) .post-content th,:is(body.colorscheme-dark,body.colorscheme-auto) .post-content td{padding:.8rem 1rem;border:0;border-bottom:1px solid var(--hairline)}:is(body.colorscheme-dark,body.colorscheme-auto) .footer-content a,:is(body.colorscheme-dark,body.colorscheme-auto) .revision-history a,:is(body.colorscheme-dark,body.colorscheme-auto) .post-meta a{color:var(--ink-muted)}:is(body.colorscheme-dark,body.colorscheme-auto) .footer-content a:hover,:is(body.colorscheme-dark,body.colorscheme-auto) .revision-history a:hover,:is(body.colorscheme-dark,body.colorscheme-auto) .post-meta a:hover{color:var(--accent)}@media(max-width:768px){.content{padding:3.6rem 0 5.6rem}.navigation .container{min-height:6.4rem}.navigation-actions{gap:.8rem}.navigation .navigation-list{gap:1.8rem}.centered .about{grid-template-areas:"portrait name" "portrait role" "socials socials";grid-template-columns:8rem minmax(0,1fr);column-gap:1.8rem}.avatar img{width:8rem;height:8rem}.centered .about h1{font-size:2.7rem}.centered .about h2{align-self:start;font-size:1.45rem}.centered .about ul{justify-content:space-between;margin:1.8rem -.6rem 0}.centered .about ul li a{width:4.4rem;height:4.4rem}.about-content{margin-top:4rem;padding-top:3.2rem}.section-header{margin-bottom:3.6rem}.post-entry{grid-template-columns:1fr;gap:.6rem;padding:1.8rem 0}.post-date{padding-top:0}.post .post-header{margin-bottom:3.6rem}.post-content{font-size:1.7rem}.footer-content{min-height:6.4rem}}@media(max-width:420px){.container{padding-right:1.6rem;padding-left:1.6rem}.navigation .navigation-list{gap:1.4rem}.navigation a,.navigation span{font-size:1.35rem}.theme-toggle{width:3.6rem;height:3.6rem}.footer-content{gap:1.2rem}.footer-links{gap:1.2rem}}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*::before,*::after{transition-duration:.01ms;animation-duration:.01ms;animation-iteration-count:1}}