:root{color-scheme:light dark;--rosewater:#f5e0dc;--rosewater-light:#f5e0dc9f;--text:#cccccc;--subtext0:#a1a1aa;--overlay0:#c3c3c3;--base:#161616;--mantle:#1f1f1f;--crust:#090909;--code:#272822;--icon:#ffffff}@media(prefers-color-scheme:light){:root{--rosewater:#9a4a3c;--rosewater-light:#9a4a3c9f;--text:#2b2827;--subtext0:#56555c;--overlay0:#45403f;--base:#faf8f7;--mantle:#e6e1de;--crust:#f2eeec;--code:#efebe8;--icon:#2b2827}}body{font-family:jetbrains mono,ui-monospace,monospace;font-synthesis:none;font-kerning:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-size:clamp(1rem,.95rem + .25vw,1.125rem);line-height:1.6;background-color:var(--base);color:var(--text);margin:0}h1,h2,h3,h4,.heading{line-height:1.25;text-wrap:balance;margin-block:1.75em .5em}h1,.heading:has(>h1){font-size:1.75em;margin-block:0 .5em}h2,.heading:has(>h2){font-size:1.4em}h3,.heading:has(>h3){font-size:1.2em}h4,.heading:has(>h4){font-size:1em}p,li{text-wrap:pretty}sup,sub{line-height:0}blockquote{border-left:solid var(--overlay0)2px;margin-left:0;padding-left:1em;color:var(--overlay0)}a{color:var(--rosewater);text-underline-offset:.3rem;text-decoration:underline var(--rosewater-light)1px;-webkit-text-decoration-line:underline;-webkit-text-decoration-color:var(--rosewater-light);-webkit-text-decoration-style:solid}a:hover{text-decoration:underline var(--rosewater)2px;text-underline-offset:.3rem}a:focus-visible,button:focus-visible{outline:2px solid var(--rosewater);outline-offset:3px;border-radius:2px}*:focus:not(:focus-visible){outline:none}header .nav a:focus-visible{outline:2px solid var(--rosewater);outline-offset:4px}header .links a:focus-visible{outline:2px solid var(--rosewater);outline-offset:2px;border-radius:4px}.visually-hidden{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}.skip-link{position:absolute;top:-40px;left:16px;background:var(--base);color:var(--rosewater);padding:8px 16px;text-decoration:underline;z-index:100;transition:top .2s ease}.skip-link:focus{top:16px}@media(prefers-reduced-motion:reduce){.skip-link{transition:none}}.wrapper{max-width:min(75ch,100% - 2rem);margin:4rem auto}.muted{color:var(--subtext0)}.posted{color:var(--subtext0);font-size:.85em}code,kbd,samp{font-family:jetbrains mono,ui-monospace,monospace;text-size-adjust:100%;-ms-text-size-adjust:100%;-moz-text-size-adjust:100%;-webkit-text-size-adjust:100%}:not(pre)>code{background-color:var(--code);padding:.1em .35em;font-size:.9em;line-height:1;border-radius:3px;box-decoration-break:clone;-webkit-box-decoration-break:clone}pre{font-family:jetbrains mono,ui-monospace,monospace;padding:.8rem;text-wrap:nowrap;border-radius:.5rem;overflow-x:auto;overflow-wrap:normal;font-size:1rem;tab-size:4;background-color:var(--code)}pre.chroma{background-color:var(--code)}kbd{font-size:.85em;line-height:1;padding:.1em .4em;background-color:var(--code);border:1px solid color-mix(in srgb,var(--subtext0) 45%,transparent);border-bottom-width:2px;border-radius:4px;white-space:nowrap}:not(pre)>samp{color:var(--subtext0);font-size:.9em;line-height:1;padding:.1em .35em;border:1px dashed color-mix(in srgb,var(--subtext0) 45%,transparent);border-radius:3px;box-decoration-break:clone;-webkit-box-decoration-break:clone}.table-wrapper{overflow-x:auto;margin-block:1.5em;font-size:.9em}.table-wrapper:focus-visible{outline:2px solid var(--rosewater);outline-offset:3px;border-radius:2px}.table-wrapper table{min-width:100%;border-collapse:collapse}.table-wrapper :is(th,td){padding:.5em .75em;text-align:start;vertical-align:top;border-bottom:1px solid var(--mantle)}.table-wrapper :is(th,td):first-child{padding-inline-start:0}.table-wrapper :is(th,td):last-child{padding-inline-end:0}.table-wrapper th{white-space:nowrap;vertical-align:bottom;border-bottom:2px solid var(--subtext0)}.table-wrapper tbody tr:last-child>td{border-bottom:0}.table-wrapper .align-center{text-align:center}.table-wrapper .align-right{text-align:end;font-variant-numeric:tabular-nums}.page details:not(.toc details){margin-block:1em}.page details:not(.toc details)>summary{width:fit-content;cursor:pointer}.page details:not(.toc details)>summary:hover{color:var(--rosewater)}.page details:not(.toc details)>summary:focus-visible{outline:2px solid var(--rosewater);outline-offset:3px;border-radius:2px}.page details:not(.toc details)[open]::details-content{margin-block-start:.5em;padding-inline-start:1em;border-inline-start:2px solid var(--mantle)}.page details:not(.toc details)>summary+*{margin-block-start:0}.page details:not(.toc details)>:last-child{margin-block-end:0}.footnotes{margin-block-start:3rem;font-size:.9em;color:var(--subtext0)}.footnotes hr{margin-block:0 1.5em;border:0;border-top:1px solid var(--mantle)}.footnotes ol{padding-inline-start:2em}.footnotes li+li{margin-block-start:.75em}.footnotes li p{margin-block:0 .5em}.footnotes li p:last-child{margin-block-end:0}.footnote-ref,.footnote-backref{text-decoration:none}.footnote-ref{padding-inline:.15em}body>.wrapper>header{line-height:1.3}header .bar{display:flex;margin-bottom:3rem;flex-direction:row;align-items:center;justify-content:space-between}header .bar a{display:flex;align-items:center;justify-content:start;gap:1.25rem;text-decoration:none;margin:.75rem 0}header .bar a p{margin:0}header .bar a .name{font-size:1.65rem;font-weight:700}header .links{display:flex;flex-direction:row;gap:1.25rem;justify-content:center}header .links svg{height:1.3rem;width:auto;color:var(--icon)}header .nav{list-style:none;display:flex;flex-direction:row;gap:16px;margin:0;padding:0;justify-content:space-evenly}.intro-section{display:flex;flex-wrap:wrap;gap:2rem;align-items:center;margin-bottom:2rem}.profile-image{border-radius:50%;width:180px;height:180px;object-fit:cover}.intro-text{flex:1;min-width:250px}.intro-text h1{margin-top:0}.intro-text p{margin-bottom:0}.page{margin-block:3rem;overflow-wrap:break-word}.page>:first-child{margin-top:0}.page img{max-width:100%;height:auto}figure{margin:0 0 1rem}figure img{max-width:100%;height:auto;display:block;margin:0 auto}figcaption{margin-top:1rem}.heading>:is(h1,h2,h3,h4,h5,h6){display:inline;font-size:inherit;margin:0}:is(h1,h2,h3,h4,h5,h6)[id],:target{scroll-margin-top:2rem}.heading-anchor{margin-inline-start:.5ch;white-space:nowrap;color:var(--subtext0);text-decoration:none;opacity:0}.heading:hover .heading-anchor,.heading-anchor:focus-visible{opacity:1}@media(hover:none){.heading-anchor{opacity:.7}}article header h1{margin-bottom:.5rem}article header .article-meta{margin-bottom:1rem}article header .article-meta .posted{margin-right:15px;white-space:nowrap}article header .article-meta .byline a{color:inherit;text-decoration:none}article header .article-meta .byline a:hover{color:var(--rosewater)}article header .article-meta .article-tags{display:inline}article header .article-meta .article-tags .tag{color:var(--subtext0);text-decoration:none;margin-right:10px;font-size:.9em}article header .article-meta .article-tags .tag:hover{color:var(--rosewater)}.toc{font-size:.85em;line-height:1.5;margin-block:0 1.5rem}.toc summary{color:var(--subtext0);cursor:pointer;width:fit-content}.toc summary:hover{color:var(--text)}.toc summary:focus-visible{outline:2px solid var(--rosewater);outline-offset:3px;border-radius:2px}.toc ul{list-style:none;margin:0;padding-inline-start:1.25em}.toc details>ul{scroll-target-group:auto;margin-block-start:.5em;padding-inline-start:1em;border-inline-start:1px solid var(--mantle)}.toc li{margin-block:.25em;overflow-wrap:anywhere}.toc a{color:var(--subtext0);text-decoration:none}.toc a:hover{color:var(--text);text-decoration:underline var(--rosewater-light)1px}.toc a:target-current{color:var(--rosewater);font-weight:700}@media only screen and (min-width:71rem){.wrapper:has(.toc){--column:min(75ch, 100% - 2rem);margin-inline:max(1rem,min((100% - var(--column))/2,100% - var(--column) - 19rem))0}article:has(>.toc){position:relative}.toc{position:absolute;inset-block:0;left:calc(100% + 3rem);width:15rem;margin:0}.toc details{position:sticky;top:2rem;max-height:calc(100vh - 4rem);overflow-y:auto}.toc details::details-content{content-visibility:visible;display:block}.toc summary{list-style:none;pointer-events:none}.toc summary::-webkit-details-marker{display:none}}footer{line-height:1.3;margin-top:4rem;padding-bottom:2rem;text-align:center;color:var(--subtext0);font-size:.9rem}footer p{font-size:.75rem;text-align:center;margin-top:.5rem}footer a{color:inherit}footer a:hover{color:var(--rosewater)}footer .source-link{margin-left:10px}.portfolio-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1rem}.portfolio-item{display:flex;flex-direction:column;justify-content:start;border:2px solid var(--mantle);border-radius:.5rem}.portfolio-item>img{width:100%;min-height:12rem;object-fit:cover}.portfolio-item .card-body{padding:1.25rem;height:100%;background-color:var(--crust)}.portfolio-item .card-body .sublink{display:flex;align-items:center;font-size:.75rem}.portfolio-item .card-body .sublink img{margin-left:2px;margin-top:1.5px;height:1.4rem}.portfolio-item .card-title{margin:0}@media only screen and (max-width:640px){.wrapper{margin-block:1.5rem 2rem}.page{margin-block:2rem}.table-wrapper td{min-width:12ch}header .bar{flex-direction:column;align-items:center;margin-bottom:.5rem}header .bar a{margin:0 0 .25rem;text-align:center}header .bar a .name{font-size:1.3rem}header .links{gap:.75rem}.intro-section{justify-content:center}.portfolio-grid{grid-template-columns:minmax(0,1fr)}header .nav{gap:1.5rem;justify-content:center}header .nav a,header .links a{min-height:44px;min-width:44px;display:inline-flex;align-items:center;justify-content:center}}@media only screen and (min-width:768px) and (max-width:1024px){.portfolio-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media print{@page{margin:2cm}:root{color-scheme:light;--rosewater:#000000;--rosewater-light:#000000;--text:#000000;--subtext0:#444444;--overlay0:#333333;--base:#ffffff;--mantle:#bbbbbb;--crust:#ffffff;--code:#eeeeee;--icon:#000000;font-size:11pt}body{font-size:11pt;line-height:1.5}body>.wrapper>header,footer,.skip-link,.toc,.heading-anchor{display:none}.wrapper{max-width:none;margin:0}.page{margin-block:0}a{color:var(--text);text-decoration:underline 1px}.page a[href^=http]:not(article>header a,.footnote-ref,.footnote-backref,.heading-anchor)::after{content:" (" attr(href)")";font-size:.85em;word-break:break-all}article header figure img{max-height:8cm;width:auto}pre,pre.chroma{font-size:.9em;background:0 0;border:1px solid var(--mantle);white-space:pre-wrap;text-wrap:wrap;overflow:visible;overflow-wrap:anywhere}:not(pre)>code{print-color-adjust:exact;-webkit-print-color-adjust:exact}.table-wrapper{overflow:visible}.table-wrapper th{white-space:normal}.page details:not(.toc details)::details-content{content-visibility:visible;display:block;margin-block-start:.5em;padding-inline-start:1em;border-inline-start:2px solid var(--mantle)}.page details:not(.toc details)>summary{list-style:none;font-weight:700}.page details:not(.toc details)>summary::-webkit-details-marker{display:none}h1,h2,h3,h4,.heading{break-after:avoid}figure,blockquote,img,tr{break-inside:avoid}p{orphans:3;widows:3}}