.theme-toggle[data-astro-cid-x3pjskd3]{position:fixed;top:1.1rem;right:1.1rem;z-index:100;display:inline-flex;align-items:center;justify-content:center;width:2.5rem;height:2.5rem;padding:0;border:1px solid var(--rule);border-radius:var(--radius-pill);color:var(--ink-muted);background-color:color-mix(in srgb,var(--paper) 72%,transparent);box-shadow:var(--shadow-s);backdrop-filter:blur(10px) saturate(1.2);-webkit-backdrop-filter:blur(10px) saturate(1.2);cursor:pointer;-webkit-tap-highlight-color:transparent;transition:color var(--dur) var(--ease-out),background-color var(--dur) var(--ease-out),border-color var(--dur) var(--ease-out),box-shadow var(--dur) var(--ease-out)}.theme-toggle[data-astro-cid-x3pjskd3]:hover,.theme-toggle[data-astro-cid-x3pjskd3]:focus-visible{border-color:color-mix(in srgb,var(--accent) 55%,var(--rule));color:var(--accent);box-shadow:var(--shadow-m)}.theme-toggle[data-astro-cid-x3pjskd3]:focus-visible{outline:2px solid var(--accent);outline-offset:3px}.theme-toggle[data-astro-cid-x3pjskd3] .ic-moon[data-astro-cid-x3pjskd3],.theme-toggle[data-astro-cid-x3pjskd3][data-resolved=dark] .ic-sun[data-astro-cid-x3pjskd3]{display:none}.theme-toggle[data-astro-cid-x3pjskd3][data-resolved=dark] .ic-moon[data-astro-cid-x3pjskd3]{display:block}@media (max-width: 768px){.theme-toggle[data-astro-cid-x3pjskd3]{top:.85rem;right:.85rem;width:2.3rem;height:2.3rem}}.site-footer[data-astro-cid-sz7xmlte]{max-width:var(--shell);margin:0 auto;padding:0 3rem 3rem;text-align:center}.site-footer[data-astro-cid-sz7xmlte] hr[data-astro-cid-sz7xmlte]{margin:0 0 var(--space-m)}.site-footer[data-astro-cid-sz7xmlte] small[data-astro-cid-sz7xmlte]{font-family:var(--font-mono);letter-spacing:.04em;color:var(--ink-muted)}@media (max-width: 768px){.site-footer[data-astro-cid-sz7xmlte]{padding:0 1.25rem 2.5rem}}:root{color-scheme:light;--font-serif: "Literata", serif;--font-mono: "Iosevka Charon Mono", Menlo, Consolas, monospace;--step--1: .8125rem;--step-0: clamp(.9375rem, .92rem + .08vw, 1rem);--step-1: clamp(1.0625rem, 1.04rem + .11vw, 1.125rem);--step-2: clamp(1.25rem, 1.19rem + .3vw, 1.375rem);--step-3: clamp(1.5rem, 1.38rem + .6vw, 1.75rem);--step-4: clamp(1.875rem, 1.64rem + 1.17vw, 2.25rem);--space-3xs: .25rem;--space-2xs: .5rem;--space-xs: .75rem;--space-s: 1rem;--space-m: 1.5rem;--space-l: 2rem;--space-xl: 3rem;--space-2xl: 4.5rem;--radius-s: 4px;--radius-m: 8px;--radius-pill: 999px;--ease-out: cubic-bezier(.22, 1, .36, 1);--dur: .18s;--shell: 58rem;--paper: light-dark(#f7f8fa, #0e1218);--paper-2: light-dark(#eef0f4, #161b24);--paper-3: light-dark(#e3e6ec, #1e2530);--rule: light-dark(#d3d8e0, #2a3341);--rule-soft: light-dark(rgba(15, 19, 28, .1), rgba(226, 232, 240, .1));--ink: light-dark(#0f131c, #e6eaf0);--ink-soft: light-dark(#333a47, #c0c7d3);--ink-muted: light-dark(#5c6575, #8b95a5);--accent: light-dark(#2457c5, #7aa2f7);--accent-deep: light-dark(#183f96, #a3bffa);--accent-tint: light-dark(rgba(36, 87, 197, .1), rgba(122, 162, 247, .13));--tag: light-dark(#7a4f0b, #e0b25c);--tag-tint: light-dark(rgba(122, 79, 11, .12), rgba(224, 178, 92, .14));--shadow-s: light-dark( 0 1px 2px rgba(15, 19, 28, .05), 0 1px 2px rgba(0, 0, 0, .4) );--shadow-m: light-dark( 0 6px 18px -8px rgba(15, 19, 28, .22), 0 6px 20px -8px rgba(0, 0, 0, .65) )}:root[data-theme=dark]{color-scheme:dark}@media (prefers-color-scheme: dark){:root:not([data-theme=light]){color-scheme:dark}}@media (prefers-contrast: more){:root,:root[data-theme]{--rule-soft: var(--rule);--ink-muted: var(--ink-soft)}}*,*:before,*:after{box-sizing:border-box}html{scroll-behavior:smooth;scrollbar-gutter:stable;-webkit-text-size-adjust:100%;tab-size:4}body{min-height:100%;margin:0;font-family:var(--font-serif);font-size:var(--step-0);line-height:1.6;font-weight:400;font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;overflow-wrap:break-word;color:var(--ink);background-color:var(--paper)}h1,h2,h3,h4,h5,h6{margin:0 0 var(--space-s);font-family:var(--font-serif);font-weight:600;line-height:1.15;letter-spacing:-.018em;text-wrap:balance;color:var(--ink)}h1{font-size:var(--step-4)}h2{font-size:var(--step-3)}h3{font-size:var(--step-1);letter-spacing:-.008em}h4{font-size:var(--step-0);letter-spacing:0}p{margin:0 0 var(--space-s);text-wrap:pretty}small{font-size:var(--step--1)}strong{font-weight:700}a{padding-bottom:1px;text-decoration:none;color:var(--accent);background-image:linear-gradient(currentColor,currentColor);background-repeat:no-repeat;background-position:0 100%;background-size:100% 1px;transition:color var(--dur) var(--ease-out),background-size var(--dur) var(--ease-out)}a:hover,a:focus-visible{color:var(--accent-deep);background-size:100% 2px}a:has(>h1),a:has(>h2),a:has(>h3),a:has(>h4),a:has(>img),a:has(>svg){padding-bottom:0;background-image:none}hr{height:1px;margin:var(--space-xl) 0;border:0;background:var(--rule)}img,video,svg:not(.icon){max-width:100%;height:auto}::selection{color:var(--paper);background:var(--accent);text-shadow:none}:focus-visible{border-radius:var(--radius-s);outline:2px solid var(--accent);outline-offset:3px}*{scrollbar-width:thin;scrollbar-color:var(--rule) transparent}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{border:3px solid var(--paper);border-radius:var(--radius-pill);background-color:var(--rule)}::-webkit-scrollbar-thumb:hover{background-color:var(--ink-muted)}@media (prefers-contrast: more){:focus-visible{outline-width:3px}}@media (prefers-reduced-motion: reduce){html{scroll-behavior:auto}*,*:before,*:after{transition-duration:.001ms!important}}main{max-width:var(--shell);margin:0 auto;padding:5rem 3rem}main>section+section{margin-top:var(--space-2xl)}main>h1,main>section:first-child>h1{margin-bottom:var(--space-s);font-size:var(--step-4);letter-spacing:-.022em}main>section:first-child>h1+p{font-size:var(--step-1);line-height:1.6;color:var(--ink-soft)}main>section>h2,main>section:not(:first-child)>h1{display:flex;align-items:center;gap:var(--space-m);margin:0 0 var(--space-m);font-family:var(--font-serif);font-size:var(--step-1);font-weight:600;line-height:1.3;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-soft)}main>section>h2:after,main>section:not(:first-child)>h1:after{content:"";flex:1 1 auto;height:1px;background:var(--rule)}@media (max-width: 768px){main{padding:3.5rem 1.25rem}main>section+section{margin-top:var(--space-xl)}}.menu{margin:0;padding:0;list-style:none}.datedlist{display:flex;flex-direction:column}.projects{display:grid;grid-template-columns:1fr 1fr;gap:var(--space-2xs)}.menu>li+li>.menu-item,.datedlist>.menu-item+.menu-item{border-top:1px solid var(--rule-soft)}.menu-item{position:relative;width:100%;padding:var(--space-s);border-radius:var(--radius-s);transition:background-color var(--dur) var(--ease-out)}.datedlist-item{display:grid;grid-template-columns:10.5rem minmax(0,1fr);gap:var(--space-m);align-items:baseline}.menu-item header{font-family:var(--font-mono);font-size:var(--step--1);font-variant:normal;line-height:1.6;letter-spacing:.05em;text-transform:uppercase;white-space:nowrap;color:var(--ink-muted)}.menu-item header small{font-size:inherit;color:inherit}.menu-item h3{margin:0;font-size:var(--step-0);font-weight:600;line-height:1.4;letter-spacing:0;color:var(--ink);transition:color var(--dur) var(--ease-out)}.menu-item h4{margin:0;font-size:var(--step-0);font-weight:400;font-style:italic;line-height:1.4;letter-spacing:0;color:var(--accent)}.menu-item p{margin:var(--space-3xs) 0 0;font-size:var(--step-0);line-height:1.6;color:var(--ink-soft)}.menu-item p:empty{display:none}.menu-item div>small{display:block;margin-top:var(--space-3xs);font-size:var(--step-0);line-height:1.6;color:var(--ink-muted)}.menu-item a:has(>h3){display:inline-block;margin-block:-3px;padding-block:3px;color:inherit}.menu-item a:has(>h3):hover h3,.menu-item a:has(>h3):focus-visible h3{color:var(--accent)}.item-list{margin:var(--space-3xs) 0 0;padding-left:1.1rem;font-size:var(--step-0);line-height:1.6;color:var(--ink-soft)}.item-list li{margin:0 0 var(--space-3xs);padding-left:.15rem}.item-list li:last-child{margin-bottom:0}.item-list li::marker{color:var(--accent)}.project-item{display:block;padding:var(--space-m);border:1px solid var(--rule-soft);border-radius:var(--radius-m);transition:background-color var(--dur) var(--ease-out),border-color var(--dur) var(--ease-out)}.project-tags{display:flex;flex-wrap:wrap;gap:var(--space-3xs);margin-top:var(--space-s)}.pill{display:inline-block;padding:.15em .6em;border-radius:var(--radius-pill);font-family:var(--font-mono);font-size:var(--step--1);line-height:1.6;letter-spacing:.02em;white-space:nowrap;color:var(--tag);background-color:var(--tag-tint)}@media (hover: hover) and (pointer: fine){.menu-item:hover{background-color:var(--paper-2)}.menu-item:hover h3{color:var(--accent)}.project-item:hover{border-color:var(--rule)}}@media (max-width: 768px){.projects{grid-template-columns:1fr}.menu-item{padding:var(--space-s) var(--space-2xs)}.menu-item header{white-space:normal}.datedlist-item{grid-template-columns:minmax(0,1fr);gap:var(--space-3xs);align-items:start}.project-item{padding:var(--space-s)}}.article-header{margin-bottom:var(--space-xl);padding-bottom:var(--space-m);border-bottom:1px solid var(--rule)}.article-title{margin:0 0 var(--space-s);font-size:var(--step-3);line-height:1.15;letter-spacing:-.02em}.article-meta{display:block;margin:0;font-family:var(--font-mono);font-size:var(--step--1);line-height:1.7;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-muted)}.article-meta small{font-size:inherit}.article-meta a{display:inline-block;margin-block:-5px;padding-block:5px;color:var(--ink-muted);background-image:none;transition:color var(--dur) var(--ease-out)}.article-meta a:before{content:"←";display:inline-block;margin-right:.4em;transition:transform var(--dur) var(--ease-out)}.article-meta a:hover,.article-meta a:focus-visible{color:var(--accent)}.article-meta a:hover:before,.article-meta a:focus-visible:before{transform:translate(-.25em)}.prose{font-size:var(--step-0);line-height:1.72;color:var(--ink-soft)}.prose p{margin:0 0 var(--space-m)}.prose strong{font-weight:700;color:var(--ink)}.prose em{font-style:italic}.prose h1,.prose h2,.prose h3,.prose h4{scroll-margin-top:5rem;color:var(--ink)}.prose h1,.prose h2{position:relative;margin:var(--space-xl) 0 var(--space-2xs);padding-top:var(--space-s);font-size:var(--step-2);line-height:1.25}.prose h1:before,.prose h2:before{content:"";position:absolute;top:0;left:0;width:2.5rem;height:2px;border-radius:var(--radius-pill);background:var(--accent)}.prose h3{margin:var(--space-l) 0 var(--space-2xs);font-size:var(--step-1)}.prose h4{margin:var(--space-l) 0 var(--space-2xs);font-size:var(--step-0);font-weight:700;letter-spacing:.02em}.prose ul,.prose ol{margin:0 0 var(--space-m);padding-left:1.35rem}.prose li{margin-bottom:var(--space-2xs);padding-left:.25rem}.prose li::marker{font-family:var(--font-mono);font-size:.85em;color:var(--accent)}.prose li>ul,.prose li>ol{margin-top:var(--space-2xs);margin-bottom:0}.prose blockquote{margin:var(--space-l) 0;padding:var(--space-2xs) 0 var(--space-2xs) var(--space-m);border-left:2px solid var(--accent);font-style:italic;color:var(--ink-muted)}.prose blockquote p:last-child{margin-bottom:0}.prose hr{margin:var(--space-2xl) 0}.prose img{display:block;width:100%;margin:var(--space-l) 0;border:1px solid var(--rule-soft);border-radius:var(--radius-m);background-color:var(--paper-2);box-shadow:var(--shadow-m)}.prose figure{margin:var(--space-l) 0}.prose figure img{margin:0}.prose figcaption{margin-top:var(--space-2xs);font-family:var(--font-mono);font-size:var(--step--1);letter-spacing:.03em;text-align:center;color:var(--ink-muted)}.prose :not(pre)>code{padding:.15em .4em;border-radius:var(--radius-s);font-family:var(--font-mono);font-size:.86em;white-space:nowrap;color:var(--accent-deep);background-color:var(--accent-tint)}.prose pre{margin:var(--space-l) 0;padding:var(--space-m);overflow-x:auto;border:1px solid var(--rule);border-radius:var(--radius-m);font-size:var(--step--1);line-height:1.65;tab-size:4;box-shadow:var(--shadow-s)}.prose pre code{padding:0;font-family:var(--font-mono);white-space:pre;background:none}.prose .astro-code,.prose .astro-code span{font-family:var(--font-mono)}.prose .astro-code{background-color:var(--paper-2)!important}:root[data-theme=dark] .prose .astro-code,:root[data-theme=dark] .prose .astro-code span{font-style:var(--shiki-dark-font-style, inherit)!important;font-weight:var(--shiki-dark-font-weight, inherit)!important;text-decoration:var(--shiki-dark-text-decoration, inherit)!important;color:var(--shiki-dark, inherit)!important}@media (prefers-color-scheme: dark){:root:not([data-theme=light]) .prose .astro-code,:root:not([data-theme=light]) .prose .astro-code span{font-style:var(--shiki-dark-font-style, inherit)!important;font-weight:var(--shiki-dark-font-weight, inherit)!important;text-decoration:var(--shiki-dark-text-decoration, inherit)!important;color:var(--shiki-dark, inherit)!important}}.prose table{width:100%;border-collapse:collapse;font-size:var(--step--1)}.prose th,.prose td{padding:var(--space-2xs) var(--space-xs);border-bottom:1px solid var(--rule-soft);text-align:left}.prose th{border-bottom:1px solid var(--rule);font-family:var(--font-mono);font-size:var(--step--1);letter-spacing:.06em;text-transform:uppercase;color:var(--ink-muted)}.prose tbody tr:last-child td{border-bottom:0}.prose .katex-display,.prose span.katex:has(>math[display=block]){display:block;margin:var(--space-l) 0;padding:var(--space-s) var(--space-m);overflow-x:auto;overflow-y:hidden;border-left:2px solid var(--rule);border-radius:0 var(--radius-m) var(--radius-m) 0;text-align:center;color:var(--ink);background-color:color-mix(in srgb,var(--paper-2) 55%,transparent)}.prose .katex{font-size:1.02em;color:var(--ink)}.prose math{color:var(--ink)}.prose .footnotes{margin-top:var(--space-2xl);padding-top:var(--space-m);border-top:1px solid var(--rule);font-size:var(--step--1);color:var(--ink-muted)}.prose .footnotes h1,.prose .footnotes h2{margin:0 0 var(--space-2xs);padding-top:0;font-size:var(--step-0);letter-spacing:.08em;text-transform:uppercase;color:var(--ink-muted)}.prose .footnotes h1:before,.prose .footnotes h2:before{display:none}.prose sup a{padding:0 .15em;background-image:none}@media (max-width: 640px){.prose pre{padding:var(--space-s);border-radius:var(--radius-s)}.prose .katex-display{padding:var(--space-xs) var(--space-s)}}.csl-bib-body{margin-top:var(--space-2xl);padding-top:var(--space-m);padding-left:1.5rem;border-top:1px solid var(--rule);font-size:var(--step--1);line-height:1.65;color:var(--ink-muted)}.csl-entry{margin-bottom:var(--space-2xs);padding-left:1.5rem;text-indent:-1.5rem}.csl-entry a,.csl-left-margin{font-family:var(--font-mono);font-size:.92em;font-weight:400;text-decoration:none;color:var(--accent);background-image:none}.csl-left-margin{display:inline-block;width:2rem;padding-right:2rem;text-align:right;color:var(--ink-muted)}.csl-right-inline{display:inline-block;width:calc(100% - 4rem);vertical-align:top}.prose a[href^="#ref-"],.prose a[href^="#bib-"]{padding:0 .1em;font-family:var(--font-mono);font-size:.85em;color:var(--accent);background-image:none;transition:color var(--dur) var(--ease-out)}.prose a[href^="#ref-"]:hover,.prose a[href^="#bib-"]:hover{color:var(--accent-deep)}
