﻿:root,:root.light{--text-0: #252927;--text-1: #3f4843;--text-2: #535d57;--bg-0: #f3f4f3;--bg-1: #e9ebea;--bg-2: #d5d9d7;--border-color: var(--bg-2);--primary-color: #859b55;--link-hover-bg: var(--primary-color);--link-hover-text: #fff}@media screen{:root.dark{--text-0: #eceeed;--text-1: #c1c7c4;--text-2: #959e99;--bg-0: #1a1c1c;--bg-1: #242727;--bg-2: #363b3a;--border-color: var(--bg-2);--primary-color: #859b55;--link-hover-bg: var(--primary-color);--link-hover-text: #fff}:root.dark .social>img,:root.dark .search-button>img{filter:invert(1)}}:root{--bg-primary: var(--bg-1);--text-color: var(--text-0);--label-color: #f0f0f0;--highlight-color: #f0f0f0}:root.dark{--highlight-color: #204e8a}.code-label{background:#333;color:var(--label-color);border-radius:0 0 .25rem .25rem;font-size:12px;letter-spacing:.025rem;padding:.1rem .5rem;text-align:right;text-transform:uppercase;position:absolute;right:0;top:0;margin-top:.1rem}.label-js{background:#f7df1e;color:var(--label-color);border-radius:0 0 .25rem .25rem;font-size:12px;letter-spacing:.025rem;padding:.1rem .5rem;text-align:right;text-transform:uppercase;position:absolute;right:0;top:0;margin-top:.1rem}.label-yaml{background:#f71e6a;color:var(--label-color);border-radius:0 0 .25rem .25rem;font-size:12px;letter-spacing:.025rem;padding:.1rem .5rem;text-align:right;text-transform:uppercase;position:absolute;right:0;top:0;margin-top:.1rem}.label-shell{background:#4eaa25;color:var(--label-color);border-radius:0 0 .25rem .25rem;font-size:12px;letter-spacing:.025rem;padding:.1rem .5rem;text-align:right;text-transform:uppercase;position:absolute;right:0;top:0;margin-top:.1rem}.label-json{background:#1e90ff;color:var(--label-color);border-radius:0 0 .25rem .25rem;font-size:12px;letter-spacing:.025rem;padding:.1rem .5rem;text-align:right;text-transform:uppercase;position:absolute;right:0;top:0;margin-top:.1rem}.label-python{background:#3572a5;color:var(--label-color);border-radius:0 0 .25rem .25rem;font-size:12px;letter-spacing:.025rem;padding:.1rem .5rem;text-align:right;text-transform:uppercase;position:absolute;right:0;top:0;margin-top:.1rem}.label-css{background:#264de4;color:var(--label-color);border-radius:0 0 .25rem .25rem;font-size:12px;letter-spacing:.025rem;padding:.1rem .5rem;text-align:right;text-transform:uppercase;position:absolute;right:0;top:0;margin-top:.1rem}.label-go{background:#00add8;color:var(--label-color);border-radius:0 0 .25rem .25rem;font-size:12px;letter-spacing:.025rem;padding:.1rem .5rem;text-align:right;text-transform:uppercase;position:absolute;right:0;top:0;margin-top:.1rem}.label-markdown{background:blue;color:var(--label-color);border-radius:0 0 .25rem .25rem;font-size:12px;letter-spacing:.025rem;padding:.1rem .5rem;text-align:right;text-transform:uppercase;position:absolute;right:0;top:0;margin-top:.1rem}.label-rust{background:#ff4647;color:var(--label-color);border-radius:0 0 .25rem .25rem;font-size:12px;letter-spacing:.025rem;padding:.1rem .5rem;text-align:right;text-transform:uppercase;position:absolute;right:0;top:0;margin-top:.1rem}.label-java{background:#f89820;color:var(--label-color);border-radius:0 0 .25rem .25rem;font-size:12px;letter-spacing:.025rem;padding:.1rem .5rem;text-align:right;text-transform:uppercase;position:absolute;right:0;top:0;margin-top:.1rem}.label-csharp{background:#178600;color:var(--label-color);border-radius:0 0 .25rem .25rem;font-size:12px;letter-spacing:.025rem;padding:.1rem .5rem;text-align:right;text-transform:uppercase;position:absolute;right:0;top:0;margin-top:.1rem}.label-ruby{background:#701516;color:var(--label-color);border-radius:0 0 .25rem .25rem;font-size:12px;letter-spacing:.025rem;padding:.1rem .5rem;text-align:right;text-transform:uppercase;position:absolute;right:0;top:0;margin-top:.1rem}.label-swift{background:#f05138;color:var(--label-color);border-radius:0 0 .25rem .25rem;font-size:12px;letter-spacing:.025rem;padding:.1rem .5rem;text-align:right;text-transform:uppercase;position:absolute;right:0;top:0;margin-top:.1rem}.label-php{background:#777bb4;color:var(--label-color);border-radius:0 0 .25rem .25rem;font-size:12px;letter-spacing:.025rem;padding:.1rem .5rem;text-align:right;text-transform:uppercase;position:absolute;right:0;top:0;margin-top:.1rem}.label-typescript{background:#3178c6;color:var(--label-color);border-radius:0 0 .25rem .25rem;font-size:12px;letter-spacing:.025rem;padding:.1rem .5rem;text-align:right;text-transform:uppercase;position:absolute;right:0;top:0;margin-top:.1rem}.label-scala{background:#c22d40;color:var(--label-color);border-radius:0 0 .25rem .25rem;font-size:12px;letter-spacing:.025rem;padding:.1rem .5rem;text-align:right;text-transform:uppercase;position:absolute;right:0;top:0;margin-top:.1rem}.label-kotlin{background:#f18e33;color:var(--label-color);border-radius:0 0 .25rem .25rem;font-size:12px;letter-spacing:.025rem;padding:.1rem .5rem;text-align:right;text-transform:uppercase;position:absolute;right:0;top:0;margin-top:.1rem}.label-lua{background:navy;color:var(--label-color);border-radius:0 0 .25rem .25rem;font-size:12px;letter-spacing:.025rem;padding:.1rem .5rem;text-align:right;text-transform:uppercase;position:absolute;right:0;top:0;margin-top:.1rem}.label-perl{background:#0298c3;color:var(--label-color);border-radius:0 0 .25rem .25rem;font-size:12px;letter-spacing:.025rem;padding:.1rem .5rem;text-align:right;text-transform:uppercase;position:absolute;right:0;top:0;margin-top:.1rem}.label-haskell{background:#5e5086;color:var(--label-color);border-radius:0 0 .25rem .25rem;font-size:12px;letter-spacing:.025rem;padding:.1rem .5rem;text-align:right;text-transform:uppercase;position:absolute;right:0;top:0;margin-top:.1rem}.label-r{background:#198ce7;color:var(--label-color);border-radius:0 0 .25rem .25rem;font-size:12px;letter-spacing:.025rem;padding:.1rem .5rem;text-align:right;text-transform:uppercase;position:absolute;right:0;top:0;margin-top:.1rem}.label-dart{background:#00d2b8;color:var(--label-color);border-radius:0 0 .25rem .25rem;font-size:12px;letter-spacing:.025rem;padding:.1rem .5rem;text-align:right;text-transform:uppercase;position:absolute;right:0;top:0;margin-top:.1rem}.label-elixir{background:#6e4a7e;color:var(--label-color);border-radius:0 0 .25rem .25rem;font-size:12px;letter-spacing:.025rem;padding:.1rem .5rem;text-align:right;text-transform:uppercase;position:absolute;right:0;top:0;margin-top:.1rem}.label-clojure{background:#5881d8;color:var(--label-color);border-radius:0 0 .25rem .25rem;font-size:12px;letter-spacing:.025rem;padding:.1rem .5rem;text-align:right;text-transform:uppercase;position:absolute;right:0;top:0;margin-top:.1rem}.label-bash{background:#4eaa25;color:var(--label-color);border-radius:0 0 .25rem .25rem;font-size:12px;letter-spacing:.025rem;padding:.1rem .5rem;text-align:right;text-transform:uppercase;position:absolute;right:0;top:0;margin-top:.1rem}.label-default{background:#333;color:var(--label-color);border-radius:0 0 .25rem .25rem;font-size:12px;letter-spacing:.025rem;padding:.1rem .5rem;text-align:right;text-transform:uppercase;position:absolute;right:0;top:0;margin-top:.1rem}code{background-color:var(--bg-primary);padding:.1em .2em;border-radius:5px;border:1px solid var(--border-color);font-family:var(--code-font)}pre{background-color:var(--bg-primary) !important;border-radius:5px;border:1px solid var(--border-color);line-height:1.4;overflow-x:auto;padding:1em;position:relative}pre mark{background-color:var(--highlight-color) !important;padding:0;border-radius:0px}pre code{background-color:rgba(0,0,0,0) !important;color:var(--text-color);font-size:100%;padding:0;border:none;font-family:var(--code-font)}pre code table{margin:0;border-collapse:collapse;font-family:var(--code-font)}pre code table mark{display:block;color:unset;padding:0;background-color:var(--highlight-color) !important;filter:brightness(1.2)}pre code td,pre code th,pre code tr{padding:0;border-bottom:none;border:none}pre code tbody td:first-child{text-align:center;user-select:none;min-width:60px;border-right:none}pre code tbody tr:nth-child(even),pre code thead tr{background-color:unset}.clipboard-button,.clipboard-button svg{all:unset;cursor:pointer;position:absolute;bottom:5px;right:5px;z-index:10;background-color:rgba(0,0,0,0);border:none;fill:var(--text-color)}.page-header{font-size:2.5em;line-height:100%;font-family:var(--header-font);margin:4rem 0px 1rem 0px}.not-found-header{font-family:var(--header-font);position:absolute;top:40%;left:50%;transform:translate(-50%, -50%);text-align:center;font-size:3em}nav{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:.25rem 1rem;padding:0;}@media (max-width: 600px){nav{flex-direction:column;align-items:flex-start;gap:.15rem}}nav .left-nav{display:flex;flex-direction:row;align-items:baseline;gap:10px;font-size:1.42rem;line-height:1}nav .left-nav .wordmark{width:max-content;min-height:34px;display:inline-flex;align-items:center;justify-content:flex-start;font-family:var(--font-body);font-size:1.08em;border-bottom:0;background-image:none;letter-spacing:0}nav .left-nav .wordmark:hover,nav .left-nav .wordmark:focus-visible{background-color:rgba(0,0,0,0);color:inherit}nav .left-nav .wordmark:focus-visible{outline:2px solid var(--primary-color);outline-offset:2px}nav .left-nav .wordmark:hover .wordmark-text,nav .left-nav .wordmark:focus-visible .wordmark-text{background-color:var(--link-hover-bg);color:var(--link-hover-text)}nav .left-nav .wordmark-text{position:relative;display:inline-block;height:1.45em;padding:0 .18em 0 .34em;overflow:hidden;text-align:right;white-space:nowrap;transition:background-color 100ms ease-out,color 100ms ease-out}nav .left-nav .wordmark-text::before{content:"";position:absolute;left:0;top:.18em;bottom:.18em;width:2px;background:color-mix(in srgb, var(--primary-color) 82%, rgba(0,0,0,0))}nav .left-nav .wordmark-text[data-animation-disabled=true]{padding-left:.18em;height:auto;overflow:visible;line-height:1.25}nav .left-nav .wordmark-text[data-animation-disabled=true]::before{content:none}nav .left-nav .wordmark-reel{display:flex;flex-direction:column;align-items:flex-end;transform:translateY(0);will-change:transform}nav .left-nav .wordmark-reel.is-spinning{transition:transform 220ms cubic-bezier(.22, 1, .36, 1)}nav .left-nav .wordmark-reel__item{overflow:hidden;flex-shrink:0;height:1.45em;line-height:1.45}nav .left-nav .wordmark-reel__item{visibility:hidden}nav .left-nav .wordmark-reel__item:first-child,nav .left-nav .wordmark-reel__item.is-visible{visibility:visible}nav .left-nav .wordmark-reel.is-cycling .wordmark-reel__item:first-child:not(.is-visible){visibility:hidden}nav .left-nav .wordmark-reel__item--indic{position:relative;min-width:2.8em}nav .left-nav .wordmark-reel__item[lang=ml]{min-width:3.4em}nav .left-nav .wordmark-reel__sizer{visibility:hidden}nav .left-nav .wordmark-reel__label{position:absolute;inset:0;display:flex;align-items:center;justify-content:flex-end;line-height:1;text-align:right}nav .left-nav .wordmark-fonts-ready [lang=hi] .wordmark-reel__label{font-family:"Wordmark Devanagari",serif}nav .left-nav .wordmark-fonts-ready [lang=ml] .wordmark-reel__label{font-family:"Wordmark Malayalam",serif}@media (hover: none),(pointer: coarse){nav .left-nav .wordmark-text{height:auto;padding:0 .18em 0 .34em;overflow:visible;text-align:left}nav .left-nav .wordmark-reel{display:inline;transform:none !important;transition:none;will-change:auto}nav .left-nav .wordmark-reel__item{display:none;height:auto;line-height:1}nav .left-nav .wordmark-reel__item:first-child{display:inline}}nav .left-nav .socials{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:flex-start;align-items:baseline;gap:12px;}nav .left-nav .socials .social img{width:14px;height:14px}nav .left-nav .socials .social--google-scholar img{width:13px;height:13px}nav .left-nav .socials .social{min-width:16px;min-height:34px;box-sizing:border-box;padding:9px 0;display:inline-flex;align-items:baseline;justify-content:center}nav .left-nav .socials a:hover,nav .left-nav .socials a:focus-visible{background-color:rgba(0,0,0,0);color:inherit}nav .left-nav .socials a:focus-visible{outline:2px solid var(--primary-color);outline-offset:2px}nav .right-nav{display:flex;flex-direction:row;flex-wrap:wrap;align-items:center}nav .right-nav .nav-link{min-height:34px;display:inline-flex;align-items:center;margin-right:.65em}nav .right-nav #dark-mode-toggle{margin-left:.5rem;min-width:34px;min-height:34px;display:inline-flex;align-items:center;justify-content:center;padding:0;}nav .right-nav #dark-mode-toggle>img{width:16px;height:16px}nav .right-nav #dark-mode-toggle:hover,nav .right-nav #dark-mode-toggle:focus-visible{background-color:rgba(0,0,0,0);color:inherit}nav .right-nav #dark-mode-toggle:focus-visible{outline:2px solid var(--primary-color);outline-offset:2px}@media (max-width: 991px){.site-nav-frame{padding-top:28px}}.meta{color:#999;display:flex;align-items:center;flex-wrap:wrap}h1,h2,h3,h4,h5,h6{font-family:var(--header-font),monospace;font-size:1.2rem;margin-top:2em}h1::before{color:var(--primary-color);content:"# "}h2::before{color:var(--primary-color);content:"## "}h3::before{color:var(--primary-color);content:"### "}h4::before{color:var(--primary-color);content:"#### "}h5::before{color:var(--primary-color);content:"##### "}h6::before{color:var(--primary-color);content:"###### "}img{max-width:100%;border-radius:.5rem;height:auto}figure{box-sizing:border-box;display:inline-block;margin:0;max-width:100%}figure img{max-height:500px;width:100%;height:auto}@media screen and (min-width: 600px){figure{padding:0 40px}}figure h4{font-size:1rem;margin:0;margin-bottom:1em}figure h4::before{content:"↳ "}.draft-label{color:var(--link-hover-text);text-decoration:none;padding:2px 4px;border-radius:4px;margin-left:6px;background-color:var(--primary-color)}::-moz-selection{background:var(--primary-color);color:var(--link-hover-text);text-shadow:none}::selection{background:var(--primary-color);color:var(--link-hover-text)}hr{color:var(--border-color);background:none;margin:1.2rem auto}blockquote{border-left:3px solid var(--primary-color);color:#737373;margin:0;padding-left:1em}a{color:inherit;text-decoration:none;}a:hover,a:focus-visible{background-color:var(--link-hover-bg);color:var(--link-hover-text)}a:hover>code,a:focus-visible>code{background-color:var(--link-hover-bg);color:var(--link-hover-text);border:none;padding:0 .2em}main a,.home-lede a{border-bottom:2px solid var(--primary-color);position:relative;z-index:1}main .meta a,.home-lede .meta a{border-bottom:none}main .zola-anchor,.home-lede .zola-anchor{border-bottom:none}main .zola-anchor:hover,main .zola-anchor:focus-visible,.home-lede .zola-anchor:hover,.home-lede .zola-anchor:focus-visible{background-color:rgba(0,0,0,0);color:var(--primary-color)}time{color:gray}.post-list>ul,.tag-list>ul{margin:0;padding:1rem 0 0 0}.post-list .list-item,.tag-list .list-item{margin-bottom:.5rem;list-style-type:none}.post-list .post-header,.tag-list .post-header{display:grid;align-items:center}@media all and (max-width: 640px){.post-list .post-header,.tag-list .post-header{grid-template-rows:auto 1fr}}@media all and (min-width: 640px){.post-list .post-header,.tag-list .post-header{grid-template-columns:auto 1fr;gap:1rem}}@media only screen and (max-width: 640px){.post-list .post-header,.tag-list .post-header{margin:1.6rem 0px}}.post-list .post-header h1,.tag-list .post-header h1{margin:0;font-weight:normal;font-family:var(--header-font)}.post-list .post-header h1 a,.tag-list .post-header h1 a{border-bottom:none}.post-list .post-header time,.tag-list .post-header time{font-family:var(--mono-text-font);text-align:left;margin:0}del{text-decoration-color:var(--primary-color);text-decoration-thickness:3px}summary{padding-left:.5em}summary:hover{background-color:var(--primary-color);color:var(--link-hover-text);cursor:pointer}table{border-spacing:0;border-collapse:collapse;display:block;width:100%;overflow-x:auto}table th{padding:6px 13px;border:1px solid #dfe2e5;font-size:large}table td{padding:6px 13px;border:1px solid #dfe2e5}.search-button{background:none;border:none;padding:0;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;min-width:34px;min-height:34px;margin-left:.25em}.search-button img{border:none}.search-button .search-icon{width:16px;height:16px}.search-button:hover{background-color:rgba(0,0,0,0)}.search-modal{display:none;position:fixed;top:0;left:0;width:100%;height:100%;z-index:1000;background:rgba(0,0,0,.2);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px)}.search-modal #searchBar{display:flex;align-items:center;padding:1rem;gap:.5rem}.search-modal #searchBar #searchInput{flex:1;padding:.75rem 2.5rem;font-size:1rem;color:var(--text-0);background:var(--bg-1);border:1px solid var(--bg-1);border-radius:20px;width:100%}.search-modal #searchBar #searchInput:focus{outline:none;border-color:var(--primary-color)}.search-modal #searchBar #searchInput::placeholder{color:var(--text-1)}.search-modal #results-container{display:none;border-top:1px solid var(--bg-1)}.search-modal #results-container #results-info{padding:.5rem;color:var(--text-1);font-size:.8rem;text-align:center}.search-modal #results-container #results{max-height:50vh;overflow-y:auto}.search-modal #results-container #results>div{padding:.75rem 1rem;cursor:pointer}.search-modal #results-container #results>div[aria-selected=true]{background:var(--primary-color)}.search-modal #results-container #results>div[aria-selected=true] *{color:var(--link-hover-text) !important}.search-modal #results-container #results>div span:first-child{display:block;color:var(--text-0);font-weight:500;margin-bottom:.25rem}.search-modal #results-container #results>div span:nth-child(2){display:block;color:var(--text-1);font-size:.9rem}.search-modal #results-container #results>div:hover:not([aria-selected=true]){background:var(--bg-1)}.search-modal #modal-content{position:relative;margin:8% auto;width:80%;max-width:28rem;background-color:var(--bg-0);border:1px solid var(--bg-1);border-radius:8px;box-shadow:0 4px 12px rgba(0,0,0,.1);padding:1rem;}.search-modal #modal-content h1{margin-top:0;margin-bottom:1rem;font-size:1.2rem}.search-modal #modal-content h1::before{color:var(--primary-color);content:"# "}.search-modal #modal-content :focus-visible{outline:2px solid var(--primary-color);outline-offset:2px}#searchBar{position:relative;display:flex;align-items:center;padding:1rem}#searchBar .clear-button{position:absolute;right:1.5rem;background:none;border:none;padding:4px;cursor:pointer;display:none;width:24px;height:24px}#searchBar .clear-button svg{width:100%;height:100%;fill:var(--text-1)}#searchBar .clear-button:hover svg{fill:var(--primary-color)}#searchBar #searchInput{padding-right:2.5rem}@media only screen and (max-width: 600px){.search-modal #modal-content{margin:4% auto;width:92%}.search-modal #results{max-height:70vh}}@media print{nav,.site-nav-frame,.search-modal,.clipboard-button{display:none !important}body{max-width:100%;padding:0}.content{padding:0 !important}}:root{--font-size-base: 13.5px;--mono-text-font: var(--font-mono);--text-font: var(--font-ui);--header-font: var(--font-ui);--code-font: var(--font-mono);--line-height: 1.5}html{background-color:var(--bg-0);color:var(--text-0);font-family:var(--text-font);line-height:var(--line-height);}html :focus-visible{outline:2px solid var(--primary-color);outline-offset:2px}@media (max-width: 992px){html{font-size:calc(var(--font-size-base)*.97)}}@media (max-width: 768px){html{font-size:calc(var(--font-size-base)*.95)}}@media (max-width: 576px){html{font-size:calc(var(--font-size-base)*.92)}}body{display:flex;flex-direction:column;flex-grow:1;padding:0;margin:0;min-height:100vh;max-width:1200px;margin:0 auto}@media (min-width: 992px){body{padding:42px 30px 50px 30px}}.site-nav-frame{width:min(100% - 40px,var(--site-frame-width));margin-inline:auto;letter-spacing:.075em}.site-page-frame{display:flex;flex-direction:column;width:100%;margin-inline:auto}@media (min-width: 992px){.site-page-frame{flex-direction:row;justify-content:center;align-items:flex-start;gap:80px}}.content{box-sizing:border-box;width:100%;max-width:650px;flex-shrink:0;padding:20px;word-wrap:break-word;overflow-wrap:anywhere}@media (min-width: 992px){.content{padding:0}}@font-face{font-family:"TeX Gyre Pagella";src:url("/fonts/pagella/texgyrepagella-regular.woff2") format("woff2");font-style:normal;font-weight:400;font-display:swap}@font-face{font-family:"TeX Gyre Pagella";src:url("/fonts/pagella/texgyrepagella-italic.woff2") format("woff2");font-style:italic;font-weight:400;font-display:swap}@font-face{font-family:"TeX Gyre Pagella";src:url("/fonts/pagella/texgyrepagella-bold.woff2") format("woff2");font-style:normal;font-weight:700;font-display:swap}@font-face{font-family:"TeX Gyre Pagella";src:url("/fonts/pagella/texgyrepagella-bolditalic.woff2") format("woff2");font-style:italic;font-weight:700;font-display:swap}:root{--font-body: "TeX Gyre Pagella", Palatino, Georgia, serif;--font-ui: "Jost", Arial, sans-serif;--font-mono: "Jetbrains Mono", "SFMono-Regular", Consolas, monospace;--article-toc-width: 180px;--article-main-width: 680px;--article-margin-width: 220px;--article-wide-width: 880px;--article-gap: 2rem;--site-frame-width: calc(var(--article-toc-width) + var(--article-main-width) + var(--article-margin-width) + (2 * var(--article-gap)));--article-radius: 6px;--surface-soft: color-mix(in srgb, var(--bg-1) 68%, var(--bg-0));--surface-quiet: color-mix(in srgb, var(--bg-1) 42%, transparent);--border-subtle: color-mix(in srgb, var(--border-color) 72%, transparent);--accent-muted: color-mix(in srgb, var(--primary-color) 22%, var(--text-1));--accent-wash: color-mix(in srgb, var(--primary-color) 10%, transparent)}:root.light{--primary-color: #859b55}:root.dark{--primary-color: #859b55}:root.light #sun-icon,:root.dark #moon-icon{display:none}:root.light #moon-icon,:root.dark #sun-icon{display:block}body,nav,.tag-list,.article-meta,.article-inline-toc,.article-header,.article-footer{font-family:var(--font-ui)}.article-main{font-family:var(--font-body);font-size:1.04rem;line-height:1.68}.post-list-empty{font-family:var(--font-body);line-height:1.68}.article-main code,.article-main pre,.article-main kbd{font-family:var(--font-mono)}@media (max-width: 700px){.article-main{font-size:1.05rem;line-height:1.68}}.article-page{max-width:none}.article-page .content{max-width:none;width:100%;flex-shrink:1;padding-left:0;padding-right:0}.article-page .site-page-frame{display:block;width:100%}.article--distill{width:min(100vw - 2rem,var(--site-frame-width));margin:0 auto;padding-top:2.6rem;overflow-x:clip;text-align:left}.article-header,.article-inline-toc,.article-footer{width:100%;margin-left:auto;margin-right:auto}.article-header{display:grid;grid-template-columns:minmax(0, var(--article-toc-width)) minmax(0, var(--article-main-width)) minmax(0, var(--article-margin-width));gap:0 var(--article-gap);margin-bottom:1.6rem}.article-header h1,.article-description{grid-column:2/4;max-width:calc(var(--article-main-width) + var(--article-gap) + var(--article-margin-width))}.article-meta,.article-abstract{grid-column:2;max-width:var(--article-main-width)}.article-header h1{margin:0 0 .7rem;font-family:var(--font-ui);font-size:clamp(1.95rem,3.2vw,2.85rem);font-weight:760;line-height:1.06;letter-spacing:0}.article-description{margin:0 0 1rem;color:var(--text-1);font-family:var(--font-ui);font-size:1rem;line-height:1.45}.article-meta{display:flex;flex-wrap:wrap;gap:.35rem .75rem;color:var(--text-1);font-size:.9rem}.article-tags{display:inline-flex;flex-wrap:wrap;gap:.45rem}.article-tags a{color:var(--primary-color);text-decoration:none}.article-tags a:hover{color:var(--link-hover-text)}.article-abstract{margin-top:1.4rem;padding-left:1.05rem;border-left:3px solid var(--primary-color);color:var(--text-0);font-family:var(--font-body);font-size:1rem;line-height:1.55}.article-inline-toc{display:none;max-width:var(--article-main-width);margin-left:calc(var(--article-toc-width) + var(--article-gap));margin-right:0;margin-bottom:1.75rem;padding:.7rem 0;border:1px solid var(--border-subtle);border-left:0;border-right:0;border-radius:0;background:rgba(0,0,0,0);color:var(--text-1);font-size:.86rem}.article-inline-toc h2{margin:0 0 .6rem;color:var(--text-0);font-size:.78rem;font-weight:700;letter-spacing:0}.article-inline-toc ol{display:block;list-style:none;margin:0;padding:0}.article-inline-toc li{margin:0 0 .45rem}.article-inline-toc li:last-child{margin-bottom:0}.article-inline-toc ol ol{margin-top:.45rem;padding-left:.85rem}.article-inline-toc a{color:color-mix(in srgb, var(--text-1) 72%, var(--bg-0));text-decoration:none;transition:color 150ms ease}.article-inline-toc a:hover,.article-inline-toc a.is-current{color:var(--text-0)}.article-inline-toc a.is-passed{color:var(--text-0)}.article-shell{display:grid;grid-template-columns:minmax(0, var(--article-toc-width)) minmax(0, var(--article-main-width)) minmax(0, var(--article-margin-width));gap:0 var(--article-gap);overflow-x:clip}.article-left-rail{grid-column:1;min-width:0}.article-rail-toc{position:sticky;top:2rem;max-height:calc(100vh - 4rem);overflow:auto;padding-right:1rem;border-right:1px solid var(--border-subtle);color:var(--text-1);font-family:var(--font-ui);font-size:.82rem;line-height:1.35}.article-rail-toc h2{margin:0 0 1rem;color:var(--text-0);font-size:1.25rem;font-weight:700;letter-spacing:0}.article-rail-toc ol{display:block;list-style:none;margin:0;padding:0}.article-rail-toc li{margin:0 0 .55rem}.article-rail-toc ol ol{margin-top:.45rem;padding-left:.75rem}.article-rail-toc a{color:color-mix(in srgb, var(--text-1) 72%, var(--bg-0));text-decoration:none;transition:color 150ms ease}.article-rail-toc a:hover,.article-rail-toc a.is-current{color:var(--text-0)}.article-rail-toc a.is-passed{color:var(--text-0)}.article-main{grid-column:2;min-width:0;counter-reset:sidenote-counter footnote-counter figure-counter}.article-main h1,.article-main h2,.article-main h3,.article-main h4,.article-main h5,.article-main h6{font-family:var(--font-ui);font-weight:700;letter-spacing:0;line-height:1.2}.article-page h1::before,.article-page h2::before,.article-page h3::before,.article-page h4::before,.article-page h5::before,.article-page h6::before{content:none}.article-main h1{margin-top:2.2rem;font-size:1.55rem}.article-main h2{margin-top:2rem;font-size:1.2rem}.article-main .zola-anchor{opacity:1;margin-left:0;margin-right:.35rem;padding-right:0;color:var(--primary-color);font-family:var(--font-ui);font-size:inherit;line-height:inherit;font-weight:740;text-decoration:none}.article-main .zola-anchor::before{content:"#"}.article-main .zola-anchor:hover,.article-main .zola-anchor:focus-visible{background-color:rgba(0,0,0,0);color:var(--primary-color)}.article-main>:first-child{margin-top:0}.article-footer{margin-top:3rem;color:var(--text-1);font-family:var(--font-ui);font-size:.9rem}@media (max-width: 1220px) and (min-width: 981px){.article--distill{--article-toc-width: 150px;--article-main-width: 640px;--article-margin-width: 190px;--article-gap: 1.4rem}}@media (max-width: 980px){.article-page .content{box-sizing:border-box;padding-left:clamp(18px,5vw,28px);padding-right:clamp(18px,5vw,28px)}.article--distill{width:min(100%,var(--article-main-width));padding-top:1.9rem}.article-header{display:block}.article-header h1,.article-description,.article-meta,.article-abstract{margin-left:0}.article-inline-toc{display:block;margin-left:0;margin-bottom:2rem}.article-shell{display:block}.article-left-rail{display:none}.article-header h1{font-size:clamp(2rem,8vw,2.55rem);line-height:1.08}}.article-figure{margin:2.15rem 0;counter-increment:figure-counter}.article-figure img{display:block;width:100%;max-width:100%;height:auto;border-radius:var(--article-radius)}.article-figure figcaption{margin-top:.65rem;color:var(--text-1);font-family:var(--font-ui);font-size:.9rem;line-height:1.4}.article-figure figcaption::before{content:"Figure " counter(figure-counter) ". ";color:var(--text-0);font-weight:700}.article-figure--normal img{max-width:min(100%,560px);margin-left:auto;margin-right:auto}.article-figure--wide,.article-wide{width:min(var(--article-wide-width),100vw - 2rem);margin-left:50%;transform:translateX(-50%)}.article-figure--fullbleed,.article-fullbleed{width:100%;margin-left:0;transform:none}.article-wide,.article-fullbleed{box-sizing:border-box;margin-top:2rem;margin-bottom:2rem;padding:1rem;border-radius:var(--article-radius);border:1px solid var(--border-subtle);background:var(--surface-soft);font-family:var(--font-ui)}.article-rich-panel,.interactive-island{font-family:var(--font-ui)}.margin-note{float:right;clear:right;width:var(--article-margin-width);margin:.25rem calc(-1*(var(--article-margin-width) + var(--article-gap))) 1rem 1.5rem;color:var(--text-1);font-family:var(--font-body);font-size:.86rem;line-height:1.5}.theorem-container{margin:1.8rem 0;overflow:hidden;border-left:2px solid var(--primary-color);border-radius:var(--article-radius);background:var(--surface-quiet);font-family:var(--font-body);line-height:1.55}.theorem-header{padding:.65rem 1rem 0;color:var(--text-0)}.theorem-header p{margin:0}.theorem-title{font-weight:700}.theorem-content{padding:.65rem 1rem .9rem}.article-callout,.math-block{margin:1.8rem 0;padding:1rem 1.05rem;border-left:2px solid var(--primary-color);border-radius:var(--article-radius);background:var(--surface-quiet);font-family:var(--font-body);font-size:.98rem;line-height:1.55}.article-callout h3,.math-block__title{margin:0 0 .55rem;color:var(--text-0);font-family:var(--font-body);font-size:.95rem;font-weight:700}.article-callout--warning{border-left-color:#b77464}.article-callout--idea{border-left-color:#6aa5b8}.article-callout--example,.article-callout--definition{border-left-color:#8db658}.interactive-island{box-sizing:border-box;width:min(var(--article-wide-width),100vw - 2rem);margin:2rem 0 2rem 50%;transform:translateX(-50%);padding:1.05rem;border:1px solid var(--border-subtle);border-radius:var(--article-radius);background:linear-gradient(180deg, var(--surface-soft), var(--surface-quiet))}.article-hero-interactive{grid-column:1/4;width:100%;max-width:100%;margin:1.75rem 0 1.55rem;transform:none}.interactive-island__header{display:flex;flex-wrap:wrap;align-items:baseline;justify-content:space-between;gap:.5rem;margin-bottom:.75rem}.interactive-island__title{margin:0;color:var(--text-0);font-size:1rem}.interactive-island__label{color:var(--text-2);font-size:.78rem;letter-spacing:0}.interactive-fallback{color:var(--text-1);font-family:var(--font-ui);font-size:.95rem}.article-footnotes{margin-top:3rem;padding-top:1rem;border-top:1px solid var(--border-color);font-family:var(--font-body);font-size:.92rem}.article-footnotes h2{margin:0 0 .75rem;font-size:1rem}.article-footnotes ol{margin:0;padding-left:1.4rem}.article-footnotes li{margin-bottom:.65rem;color:var(--text-1)}.footnote-ref{counter-increment:footnote-counter;color:var(--primary-color);font-family:var(--font-ui);font-size:.72em;vertical-align:super}.footnote-ref a{color:inherit;text-decoration:none}.footnote-ref a::after{content:counter(footnote-counter)}@media (max-width: 980px){.interactive-island,.article-figure--wide,.article-wide{width:100%;margin-left:0;transform:none}.article-hero-interactive{width:100%;margin-left:0}.margin-note{float:none;width:auto;margin:1rem 0;padding-left:1rem;border-left:2px solid var(--border-subtle)}}@media (max-width: 520px){.interactive-island{padding:.9rem}}.sidenote-ref{counter-increment:sidenote-counter;color:var(--primary-color);cursor:pointer;font-family:var(--font-ui);font-size:.72em;vertical-align:super}.sidenote-ref::after{content:"s" counter(sidenote-counter)}.sidenote-number::before{content:"s" counter(sidenote-counter) " "}.sidenote-toggle{position:absolute;inline-size:1px;block-size:1px;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}.sidenote{float:right;clear:right;width:var(--article-margin-width);margin:.25rem calc(-1*(var(--article-margin-width) + var(--article-gap))) 1rem 1.5rem;color:var(--text-1);font-family:var(--font-body);font-size:.8rem;line-height:1.5}.sidenote-number{color:var(--primary-color);font-weight:700}@media (max-width: 980px){.sidenote{display:none;float:none;width:auto;margin:.75rem 0 1rem;padding:.75rem .9rem;border-left:2px solid var(--primary-color);background:var(--bg-1)}.sidenote-toggle:checked+.sidenote{display:block}}@media print{.sidenote{display:block}}.project-list ul{counter-reset:project-counter;list-style:none;margin:.8rem 0 0;padding:0}.project-list-item{counter-increment:project-counter;display:grid;grid-template-columns:2.6rem minmax(0, 1fr);gap:1.1rem;padding:1.45rem 0;border-bottom:1px solid var(--border-subtle)}.project-list-item::before{content:counter(project-counter, decimal-leading-zero);padding-top:.08rem;color:var(--accent-muted);font-family:var(--font-ui);font-size:.78rem;font-weight:720;line-height:1.4}.project-list-title{margin:0 0 .42rem;font-size:clamp(1.16rem,2vw,1.36rem);line-height:1.18;letter-spacing:0}.project-list-title a{color:var(--text-0);text-decoration-color:color-mix(in srgb, var(--primary-color) 52%, rgba(0,0,0,0));text-decoration-thickness:1px;text-underline-offset:.16em}.project-list-title a:hover{color:var(--link-hover-text)}.project-list-description{max-width:43rem;margin:0 0 .75rem;color:var(--text-1);line-height:1.5}.project-list-meta{display:flex;flex-wrap:wrap;gap:.45rem .75rem;color:var(--text-1);font-size:.86rem}.project-list-meta a{color:var(--accent-muted);text-decoration:none}.project-list-meta a:hover{color:var(--link-hover-text)}.project-page{width:100%}.project-hero-image{margin:1.25rem 0 1.5rem}.project-hero-image img{display:block;width:100%;height:auto;max-height:460px;object-fit:contain;border-radius:var(--article-radius);background:var(--surface-soft)}.project-links{display:flex;flex-wrap:wrap;gap:.5rem;margin:0 0 1.5rem;font-size:.92rem}.project-links a{color:var(--accent-muted);text-decoration:none}.project-links a:hover{color:var(--link-hover-text)}@media (max-width: 640px){.project-list ul{margin-top:.55rem}.project-list-item{grid-template-columns:1fr;gap:.45rem;padding:1.25rem 0}.project-list-item::before{padding-top:0}}.home-main,.home-intro,.home-recent{font-family:var(--font-ui)}.content:has(.home-intro){max-width:720px}.home-main{margin-top:0}.home-content{color:var(--text-0)}.home-body{font-size:1rem;line-height:1.6}.home-intro{margin:1.75rem 0 2rem;padding:0}.home-lede{max-width:41rem;margin:0;color:var(--text-1);font-family:var(--font-body);font-size:1.12rem;font-weight:400;line-height:1.5}.home-lede p{margin:0 0 .85em;text-wrap:pretty}.home-lede p:last-child{margin-bottom:0}.home-body>h1,.home-recent>h1{margin:1.85rem 0 .7rem;font-family:var(--font-ui);font-size:1.2rem;font-weight:600;line-height:1.2;letter-spacing:.01em}.home-body>h1:first-child{margin-top:0}.home-body p{margin:0 0 .45rem;color:var(--text-1)}.home-body .program-title{margin-bottom:.35rem}.home-body .program-title,.home-body .resume-note{font-family:var(--font-body);font-size:1.08rem;line-height:1.55}.home-body strong{color:var(--text-0)}.home-lede .nowrap,.home-body .nowrap{white-space:nowrap}.edu,.exp{list-style:none;margin:0;padding:0}.edu>li,.exp>li{margin:0;padding:.9rem 0;border-bottom:1px solid var(--border-color);color:var(--text-1)}.edu>li:first-child,.exp>li:first-child{padding-top:.2rem}.edu>li:last-child,.exp>li:last-child{padding-bottom:0;border-bottom:0}.edu-row,.exp-row{display:grid;grid-template-columns:minmax(0, 1fr) minmax(0, 12rem);gap:0 .75rem;align-items:baseline;margin-bottom:.3rem}.edu-row strong,.exp-row strong{grid-column:1;grid-row:1;color:var(--text-0);font-size:1.13rem;font-weight:600;letter-spacing:.01em;line-height:1.48}.edu-row .program-title,.exp-row .program-title{grid-column:1;grid-row:2;margin:0;font-style:italic}.edu-row .badge,.exp-row .badge{grid-column:2;grid-row:1;justify-self:end}.home-body .resume-note{margin:0;text-wrap:pretty}.exp--compact>li{padding:.5rem 0;border-bottom:0}.exp--compact .exp-row{margin-bottom:0}.exp-row .entry-title{grid-column:1;grid-row:1;margin:0;color:var(--text-0);font-family:var(--font-body);font-size:1.08rem;line-height:1.55;text-wrap:balance}.exp--compact .program-title{grid-column:1/-1;color:var(--text-2);font-size:.98rem;font-style:normal}.exp--compact .program-title b{color:var(--text-1)}.badge{margin-left:0;padding:0;border:0;border-radius:0;background:rgba(0,0,0,0);color:var(--text-2);font-family:var(--font-ui);font-size:.84rem;font-variant-numeric:tabular-nums;letter-spacing:.01em;line-height:1.2;text-align:right}.home-recent{margin-top:2.2rem}.home-post-list ul{padding-top:0}.home-post-list .list-item{margin:0;padding:1rem 0;border-bottom:1px solid var(--border-color)}.home-post-list .list-item:last-child{padding-bottom:0;border-bottom:0}.home-post-list .post-header{display:grid;grid-template-columns:7.25rem minmax(0, 1fr);gap:1rem;align-items:baseline}.home-post-list time{color:var(--text-2);font-family:var(--font-ui);font-size:.9rem}.home-post-list h1.title{margin:0 0 .25rem;font-family:var(--font-ui);font-size:1.08rem;font-weight:600;line-height:1.3}.home-post-list .meta{gap:.3rem .75rem;color:var(--text-1);font-size:.92rem;line-height:1.45}.zola-anchor{display:inline-block;margin-right:.35rem;color:var(--primary-color);font-family:var(--font-ui);font-size:inherit;line-height:inherit;font-weight:600;border-bottom:0;text-decoration:none}.zola-anchor::before{content:"#"}.zola-anchor:hover,.zola-anchor:focus-visible{background-color:rgba(0,0,0,0);color:var(--primary-color)}.content h1::before,.content h2::before,.content h3::before,.content h4::before,.content h5::before,.content h6::before{content:none}@media (min-width: 993px){.content:has(.home-intro){max-width:670px}.home-lede{font-size:1.04rem}.home-body>h1,.home-recent>h1{font-size:1.12rem}.home-body .program-title,.home-body .resume-note,.exp-row .entry-title{font-size:1rem}.edu-row strong,.exp-row strong{font-size:1.05rem}.exp--compact .program-title{font-size:.91rem}.badge{font-size:.8rem}}@media (max-width: 640px){.content:has(.home-intro){max-width:650px}.home-intro{margin:1.55rem 0 1.9rem}.home-lede{font-size:1.08rem}.edu-row,.exp-row,.home-post-list .post-header{grid-template-columns:1fr;gap:0}.edu-row,.exp-row{margin-bottom:.65rem}.edu-row .badge,.exp-row .badge{grid-column:1;grid-row:3;justify-self:start;margin-top:.15rem}.badge{text-align:left}.exp--compact .exp-row{display:block}.exp--compact .program-title,.exp--compact .badge{display:inline;line-height:1.55}.exp--compact .badge::before{content:" · "}}