@font-face{font-family:noto sans;font-style:normal;font-weight:400;font-display:swap;src:url(/fonts/noto-sans-latin-400-normal.woff2)format("woff2")}@font-face{font-family:noto sans;font-style:normal;font-weight:600;font-display:swap;src:url(/fonts/noto-sans-latin-600-normal.woff2)format("woff2")}@font-face{font-family:noto sans;font-style:normal;font-weight:700;font-display:swap;src:url(/fonts/noto-sans-latin-700-normal.woff2)format("woff2")}@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:500;font-display:swap;src:url(/fonts/jetbrains-mono-latin-500-normal.woff2)format("woff2")}:root{color-scheme:light dark;--color-bg:#fafaf8;--color-text:#2a2c2b;--color-text-strong:#111312;--color-text-soft:#55595a;--color-muted:#6b6f70;--color-label:#6b6f70;--color-value:#1d1f1e;--color-chip-text:#232524;--color-code-text:#2a2c2b;--color-line:rgba(0, 0, 0, 0.1);--color-chip-border:rgba(0, 0, 0, 0.18);--color-code-bg:rgba(0, 0, 0, 0.055);--color-divider:rgba(0, 0, 0, 0.2);--color-underline:rgba(0, 0, 0, 0.3);--color-accent:#1f7a52;--font-sans:"Noto Sans", system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;--font-mono:"JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, Consolas, "Liberation Mono", monospace;--content-width:640px;--gutter:32px;--page-bottom:96px;--space-1:0.25rem;--space-2:0.5rem;--space-3:1rem;--space-4:1.5rem;--space-5:2rem;--space-6:3rem;--space-7:3.75rem;--space-8:6rem;--space-chip:0.75rem;--space-label:1.25rem}@media(max-width:560px){:root{--gutter:20px}}@media(prefers-color-scheme:dark){:root{--color-bg:#0e0f10;--color-text:#d3d4d0;--color-text-strong:#f4f4f0;--color-text-soft:#a9acab;--color-muted:#9a9d9f;--color-label:#8a8d8f;--color-value:#e4e5e1;--color-chip-text:#dcddd9;--color-code-text:#d9dad6;--color-line:rgba(255, 255, 255, 0.1);--color-chip-border:rgba(255, 255, 255, 0.18);--color-code-bg:rgba(255, 255, 255, 0.07);--color-divider:rgba(255, 255, 255, 0.2);--color-underline:rgba(255, 255, 255, 0.3);--color-accent:#7dd3a8}}*,*::before,*::after{box-sizing:border-box}html{-webkit-text-size-adjust:100%;background:var(--color-bg)}body{margin:0;min-height:100vh;min-height:100dvh;font-family:var(--font-sans);font-size:1rem;line-height:1.7;color:var(--color-text);background:var(--color-bg)}h1,h2,h3{font-weight:600;line-height:1.25;text-transform:none;color:var(--color-text-strong)}h1{font-size:36px;font-weight:700;line-height:1.05;letter-spacing:-.03em;text-wrap:balance}h2{font-size:1.35rem}h3{font-size:1.1rem}p{margin:0 0 24px;font-size:16px;line-height:1.7;color:var(--color-text)}@media(max-width:560px){h1{font-size:28px}}img{display:block;max-width:100%;height:auto;margin:32px 0;border:1px solid var(--color-line);border-radius:6px}figure{margin:32px 0}figure img{margin:0}figcaption{margin-top:8px;font-size:13.5px;color:var(--color-muted)}.reading-column{max-width:var(--content-width);margin-inline:auto}.meta{font-family:var(--font-mono);font-size:.85rem;color:var(--color-muted)}a{color:var(--color-accent);text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:3px;transition:color 150ms ease}a:focus-visible{outline:2px solid var(--color-accent);outline-offset:2px}.project-item h3 a,.article-item h2 a,.article-item h4 a,.article-featured h3 a{color:var(--color-text-strong);text-decoration:none}.project-item h3 a:hover,.project-item h3 a:focus-visible,.article-item h2 a:hover,.article-item h2 a:focus-visible,.article-item h4 a:hover,.article-item h4 a:focus-visible,.article-featured h3 a:hover,.article-featured h3 a:focus-visible{color:var(--color-accent);text-decoration:underline}.site-nav a{text-decoration:none}.site-nav a:hover,.site-nav a:focus-visible{color:var(--color-accent);text-decoration:underline}@media(prefers-reduced-motion:reduce){a,.skip-link{transition:none}}.site-header,.site-footer{padding:0 var(--gutter);box-sizing:content-box;max-width:var(--content-width);margin-inline:auto}.site-footer{padding:1rem var(--gutter)calc(1rem + var(--page-bottom))}.site-nav{display:flex;gap:28px;padding:20px 0 18px;font-size:14px;border-bottom:1px solid var(--color-line)}.site-nav a{color:var(--color-muted)}.site-nav a:hover,.site-nav a:focus-visible{color:var(--color-accent)}main{padding:0 var(--gutter);box-sizing:content-box;max-width:var(--content-width);margin-inline:auto}body.home main,body.home .site-header,body.home .site-footer{max-width:1e3px}.skip-link{position:absolute;top:-40px;left:0;padding:var(--space-2)var(--space-3);background:var(--color-bg);color:var(--color-text);z-index:10;transition:top 150ms ease}.skip-link:focus{top:0}.site-nav a[aria-current=page]{font-weight:600}.site-footer p{margin:0;font-family:var(--font-mono);font-size:13px;color:var(--color-muted);text-align:left}.site-footer a{color:var(--color-accent);text-decoration:underline;text-decoration-thickness:1px}.site-footer--bordered{border-top:1px solid var(--color-line)}.home-bio{margin:2rem 0 1rem}.home-bio h1{margin:0 0 .5rem}.home-bio p{color:var(--color-text-soft)}.home-columns{display:flex;flex-direction:column;gap:var(--space-5);min-height:0}@media(min-width:768px){.home-columns{flex-direction:row;gap:2rem}.home-columns>*{flex:1;min-width:0}}.home-catalog{min-height:0}.project-list{list-style:none;margin:0;padding:0}.project-item{margin-bottom:1.25rem}.project-item h3{margin:0 0 .25rem;font-size:1.1rem}.project-item p{margin:0;color:var(--color-text-soft)}.article-list{list-style:none;margin:0;padding:0}.article-item,.article-featured{margin-bottom:.75rem}.article-item h4,.article-featured h3{display:inline;margin:0;font-size:1rem;font-weight:400}.article-item h2{margin:0 0 .25rem;font-size:1.1rem;font-weight:600;line-height:1.3}.blog-list h1{margin:2rem 0 1.5rem}.blog-list .article-item{margin-bottom:1.75rem}.blog-list .article-item .article-meta{display:block;margin:0}.article-item .article-meta,.article-featured .article-meta{font-family:var(--font-mono);font-size:.85rem;color:var(--color-muted);display:inline;margin:0 .5em 0 0}.article-item p:not(.article-meta),.article-featured p:not(.article-meta){margin:.25rem 0 0;color:var(--color-text-soft)}.blog-list,.blog-single,.methodology{max-width:var(--content-width);margin-inline:auto}.not-found{max-width:var(--content-width);margin:3rem auto}.not-found h1{margin:0 0 var(--space-4)}.not-found p,.not-found a{color:var(--color-accent)}.blog-single h1,.methodology h1{margin:var(--space-5)0 var(--space-3)}.blog-single>.article-meta{margin:0 0 var(--space-3);font-family:var(--font-mono);font-size:.85rem;color:var(--color-muted)}.blog-single .article-content,.methodology{color:var(--color-text)}.tag-list{list-style:none;margin:.5rem 0 0;padding:0;display:flex;flex-wrap:wrap;gap:.75em}.tag-list li{display:inline}.tag-list a{font-family:var(--font-mono);font-size:.85rem;color:var(--color-muted);text-decoration:none}.tag-list a:hover,.tag-list a:focus-visible{color:var(--color-accent);text-decoration:underline}.tag-list a::before{content:"#"}code{font-family:var(--font-mono);font-size:13px;color:var(--color-code-text);background:var(--color-code-bg);border-radius:4px;padding:1px 6px}pre{background:var(--color-code-bg);font-family:var(--font-mono);font-size:13px;padding:16px;border-radius:6px;overflow-x:auto}pre code{background:0 0;border-radius:0;padding:0;font-size:inherit;color:inherit}.project-detail{max-width:var(--content-width);margin-inline:auto}.project-detail h1{margin:var(--space-7)0 var(--space-5);font-size:52px}@media(max-width:560px){.project-detail h1{font-size:40px}}.project-meta{display:grid;grid-template-columns:96px 1fr;margin:0;border-top:1px solid var(--color-line)}.project-meta dt,.project-meta dd{margin:0;padding:15px 0;border-bottom:1px solid var(--color-line)}.project-meta dt{font-family:var(--font-mono);font-size:11.5px;line-height:1.7;text-transform:uppercase;letter-spacing:.14em;color:var(--color-label)}.project-meta dd{font-family:var(--font-mono);font-size:14px;color:var(--color-value)}.project-meta dd a{text-decoration-color:var(--color-underline);text-underline-offset:4px}@media(max-width:560px){.project-meta{grid-template-columns:80px 1fr}}.chips{display:flex;flex-wrap:wrap;gap:8px;margin:0;padding:0;list-style:none}.chips li{padding:2px 10px;border:1px solid var(--color-chip-border);border-radius:6px;font-family:var(--font-mono);font-size:12.5px;color:var(--color-chip-text)}.project-highlights{margin:40px 0 0;padding:0;list-style:none}.project-highlights li{display:flex;gap:14px;margin-bottom:16px;font-size:15.5px;line-height:1.6;color:var(--color-text-soft)}.project-highlights .marker{flex:0 0 14px;color:var(--color-accent)}.project-highlights strong{font-weight:600;color:var(--color-text-strong)}.project-status{display:flex;align-items:center;gap:10px;margin:22px 0 0;font-size:13.5px;color:var(--color-text-soft)}.status-dot{flex:0 0 7px;width:7px;height:7px;border-radius:50%;background:var(--color-accent)}.project-description{margin-top:var(--space-7)}.project-description>p:last-child{margin-bottom:0;font-size:14.5px;color:var(--color-muted)}.project-attribution,.project-articles{margin-top:var(--space-4)}.project-articles ul{padding-left:1.25rem}