/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{-webkit-text-size-adjust:100%;line-height:1.15}main{display:block}h1{font-size:2em;margin:.67em 0}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}[hidden],template{display:none}@font-face{font-display:swap;font-family:Newsreader Variable;font-style:normal;font-weight:200 800;src:url(../fonts/newsreader-latin-opsz-normal.woff2) format("woff2-variations"),url(../fonts/newsreader-latin-opsz-normal.woff2) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-display:swap;font-family:Newsreader Variable;font-style:normal;font-weight:200 800;src:url(../fonts/newsreader-latin-ext-opsz-normal.woff2) format("woff2-variations"),url(../fonts/newsreader-latin-ext-opsz-normal.woff2) format("woff2");unicode-range:u+0100-02ba,u+02bd-02c5,u+02c7-02cc,u+02ce-02d7,u+02dd-02ff,u+0304,u+0308,u+0329,u+1d00-1dbf,u+1e00-1e9f,u+1ef2-1eff,u+2020,u+20a0-20ab,u+20ad-20c0,u+2113,u+2c60-2c7f,u+a720-a7ff}@font-face{font-display:swap;font-family:Newsreader Variable;font-style:italic;font-weight:200 800;src:url(../fonts/newsreader-latin-opsz-italic.woff2) format("woff2-variations"),url(../fonts/newsreader-latin-opsz-italic.woff2) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-display:swap;font-family:Newsreader Variable;font-style:italic;font-weight:200 800;src:url(../fonts/newsreader-latin-ext-opsz-italic.woff2) format("woff2-variations"),url(../fonts/newsreader-latin-ext-opsz-italic.woff2) format("woff2");unicode-range:u+0100-02ba,u+02bd-02c5,u+02c7-02cc,u+02ce-02d7,u+02dd-02ff,u+0304,u+0308,u+0329,u+1d00-1dbf,u+1e00-1e9f,u+1ef2-1eff,u+2020,u+20a0-20ab,u+20ad-20c0,u+2113,u+2c60-2c7f,u+a720-a7ff}@font-face{font-display:swap;font-family:JetBrains Mono Variable;font-style:normal;font-weight:100 800;src:url(../fonts/jetbrains-mono-latin-wght-normal.woff2) format("woff2-variations"),url(../fonts/jetbrains-mono-latin-wght-normal.woff2) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-display:swap;font-family:JetBrains Mono Variable;font-style:normal;font-weight:100 800;src:url(../fonts/jetbrains-mono-latin-ext-wght-normal.woff2) format("woff2-variations"),url(../fonts/jetbrains-mono-latin-ext-wght-normal.woff2) format("woff2");unicode-range:u+0100-02ba,u+02bd-02c5,u+02c7-02cc,u+02ce-02d7,u+02dd-02ff,u+0304,u+0308,u+0329,u+1d00-1dbf,u+1e00-1e9f,u+1ef2-1eff,u+2020,u+20a0-20ab,u+20ad-20c0,u+2113,u+2c60-2c7f,u+a720-a7ff}@font-face{font-display:swap;font-family:"Instrument Serif";font-style:normal;font-weight:400;src:url(../fonts/instrument-serif-latin-400-normal.woff2) format("woff2-variations"),url(../fonts/instrument-serif-latin-400-normal.woff2) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-display:swap;font-family:"Instrument Serif";font-style:normal;font-weight:400;src:url(../fonts/instrument-serif-latin-ext-400-normal.woff2) format("woff2-variations"),url(../fonts/instrument-serif-latin-ext-400-normal.woff2) format("woff2");unicode-range:u+0100-02ba,u+02bd-02c5,u+02c7-02cc,u+02ce-02d7,u+02dd-02ff,u+0304,u+0308,u+0329,u+1d00-1dbf,u+1e00-1e9f,u+1ef2-1eff,u+2020,u+20a0-20ab,u+20ad-20c0,u+2113,u+2c60-2c7f,u+a720-a7ff}:root{--text:#1b1b1b;--text-muted:#6f6f6f;--text-faint:#8d8d8d;--bg:#fff;--rule:#e6e6e6;--rule-strong:#1b1b1b;--accent:#5948a4;--accent-tint:#efedf8;--accent-wash:#f6f5fa;--quote-rule:#c9c1ea;--chip-border:#d9d9d9;--serif:"Newsreader Variable",Georgia,"Times New Roman",serif;--mono:"JetBrains Mono Variable",ui-monospace,SFMono-Regular,Menlo,monospace;--quote-face:"Instrument Serif","Newsreader Variable",Georgia,serif;--page-width:64rem;--text-width:42rem;--bg-color:var(--bg);--main-text-color:var(--text);--secondary-text-color:var(--text-muted);--note-text-color:var(--text-muted);--link-text-hover-color:var(--accent);--accent-color-purple:var(--accent);--note-background-color:var(--accent-wash);--hr-color:var(--rule);--table-border-color:var(--rule)}@media (prefers-color-scheme:dark){:root:not([data-theme=light]){--text:#ededed;--text-muted:#a9a9a9;--text-faint:#8a8a8a;--bg:#161616;--rule:#333;--rule-strong:#ededed;--accent:#b4abda;--accent-tint:#2c2840;--accent-wash:#1f1d29;--quote-rule:#5b5185;--chip-border:#444}}:root[data-theme=dark]{--text:#ededed;--text-muted:#a9a9a9;--text-faint:#8a8a8a;--bg:#161616;--rule:#333;--rule-strong:#ededed;--accent:#b4abda;--accent-tint:#2c2840;--accent-wash:#1f1d29;--quote-rule:#5b5185;--chip-border:#444}*,:after,:before{box-sizing:border-box}body{background:var(--bg);color:var(--text);font-family:var(--serif);font-optical-sizing:auto;font-size:1.125rem;line-height:1.55;margin:0}a{color:inherit;text-decoration-thickness:1px;text-underline-offset:.15em}a:hover{color:var(--accent)}a:not([href]){text-decoration:none}a:not([href]):hover{color:inherit}:focus-visible{outline:2px solid var(--accent);outline-offset:2px}iframe,img{max-width:100%}iframe[src*=youtube]{aspect-ratio:16/9;height:auto;width:100%}hr{border:0;border-bottom:1px solid var(--rule)}.skip-link{background:var(--bg);font-family:var(--mono);font-size:.75rem;left:-999px;padding:.25rem .5rem;position:absolute;top:.5rem}.skip-link:focus{left:.5rem;z-index:10}.site-page{margin:0 auto;max-width:var(--page-width);padding:1.25rem 1.5rem 4rem}.site-header{align-items:center;border-bottom:2px solid var(--rule-strong);display:flex;flex-wrap:wrap;gap:1rem;justify-content:space-between;padding-bottom:.9rem;position:relative}.site-wordmark-small{font-size:1.6rem;font-weight:600;letter-spacing:-.02em;text-decoration:none}.site-nav>ul{align-items:center;display:flex;flex-wrap:wrap;gap:.35rem 1.1rem;list-style:none;margin:0;padding:0}.site-nav>ul a{font-size:1rem;text-decoration:none}.site-nav>ul a[aria-current=page]{color:var(--accent);text-decoration:underline;text-decoration-thickness:1.5px;text-underline-offset:.3em}.site-menu-button{align-items:center;background:var(--accent-tint);border:0;border-radius:2px;color:var(--accent);cursor:pointer;display:inline-flex;font-family:var(--mono);font-size:.7rem;gap:.35rem;padding:.2rem .5rem}.site-menu{background:var(--bg);border:1px solid var(--rule);box-shadow:0 8px 24px rgba(0,0,0,.08);display:grid;gap:1rem 2rem;grid-template-columns:repeat(3,minmax(10rem,1fr));margin-top:.5rem;padding:1.25rem 1.5rem;position:absolute;right:0;top:100%;width:min(40rem,100%);z-index:5}.site-menu[hidden]{display:none}.site-menu ul{list-style:none;margin:0;padding:0}.site-menu li{font-size:.95rem;line-height:1.6}.site-menu .nav-header{color:var(--text-faint);font-family:var(--mono);font-size:.7rem;letter-spacing:.06em;margin-bottom:.25rem;text-transform:uppercase}.site-menu a{text-decoration:none}.site-menu a:hover{text-decoration:underline}.site-main{max-width:var(--text-width);padding-top:1.75rem}.site-main>:first-child,.site-main>:first-child>:first-child,.speaking .index>:first-child{margin-top:0}.site-main.blogroll,.site-main.projects{max-width:none}h1,h2,h3,h4,h5,h6{font-weight:600;line-height:1.2;margin:1.4em 0 .5em}.h1,h1,h1.title{color:var(--text);font-size:1.9rem;letter-spacing:-.015em;line-height:1.15;margin-top:0}.h2,h2{font-size:1.4rem}.h3,h3{font-size:1.15rem}.h4,.h5,h4,h5{font-size:1rem}ol,p,ul{margin:0 0 .9em}ol,ul{padding-left:1.4em}.site-main li+li{margin-top:.2em}blockquote{border-left:2px solid var(--quote-rule);font-size:.92em;margin:1em 0;padding-left:1em}code,kbd,pre,samp{font-family:var(--mono);font-size:.85em}pre{overflow-x:auto}table{border-collapse:collapse;font-size:.95rem;width:100%}td,th{border-bottom:1px solid var(--rule);padding:.45em .5em;text-align:left;vertical-align:top}th{border-bottom:1.5px solid var(--text);color:var(--text-muted);font-family:var(--mono);font-size:.66rem;font-weight:400;letter-spacing:.06em;text-transform:uppercase}.bold{font-weight:700}.no-ligatures{font-variant-ligatures:none}.no-wrap{white-space:nowrap}.bottom-margin{margin-bottom:1rem}.sr-only{clip:rect(1px,1px,1px,1px)!important;border:0!important;clip-path:inset(50%)!important;height:1px!important;overflow:hidden!important;padding:0!important;position:absolute!important;white-space:nowrap!important;width:1px!important}.llm{color:var(--bg-color);font-size:.01em}.resume .resume-block{font-size:1rem;margin-bottom:2rem}.resume .resume-block ul{margin-block-end:.5rem;margin-block-start:.5rem}.resume .resume-sub-block{margin-left:2rem}.resume h2{color:var(--accent-color-purple);margin-bottom:.5rem}.resume .line-with-year{display:flex;justify-content:space-between}.resume .line-with-year h3{display:inline}.resume .line-with-year .title{font-weight:700}.resume .line-with-year .year{font-style:italic}.resume .resume-description{margin-left:2rem}.resume .section{margin-bottom:2rem}.speaking .index{background-color:var(--note-background-color);border:1px solid var(--main-text-color);margin-bottom:3rem;padding:1.5rem}.speaking section{border-bottom:1px solid var(--hr-color);margin-bottom:2rem;padding-bottom:2rem}.speaking .timestamp{font-size:1rem}.speaking .links{font-style:italic}.projects .contents-block{display:flex;margin-top:4rem}.projects .image img{margin-left:1rem;max-width:25rem}.faq .faq-link{margin-right:.5rem}.faq .faq-accordions{margin:.625rem}.faq .accordion{margin:.625rem 0}.faq .accordion:hover{cursor:pointer;text-decoration:underline}.faq .accordion-panel{max-height:0;overflow:hidden;transition:max-height .3s ease-out}.faq .accordion-panel .faq-answer{border-left:1px solid var(--table-border-color);padding-left:.625rem}.blogroll ul.blog-list{list-style:none;max-width:35em;padding:0;width:100%}.blogroll ul.blog-list li{display:flex;justify-content:space-between;width:100%}.blogroll ul.blog-list li.hidden{display:none}.blogroll .blog-tags{text-align:right}.blogroll .blog-tags .blog-tag{color:var(--note-text-color);font-size:80%;font-style:italic}.blogroll .blog-tags .blog-tag:before{content:"#"}.blogroll .hide-toggle{font-size:80%}.rss .feed-group{margin:1rem 0}.rss .description{padding-left:1rem}.linktree{align-items:center;display:flex;height:100%;justify-content:center;width:100%}.linktree *{box-sizing:border-box}.linktree .linktree-content{margin:0 auto;max-width:42rem;padding:1.5rem .75rem;width:100%}.linktree .linktree-content .wrapper{display:flex;flex-direction:column;justify-content:space-between}.linktree .linktree-content .wrapper h1{margin-bottom:2rem;text-align:center}.linktree .linktree-content .wrapper a.linktree-link{border:2px solid var(--main-text-color);box-sizing:border-box;color:var(--main-text-color);display:block;line-height:2.5rem;margin-bottom:1rem;padding:.25rem;text-align:center;text-decoration:none;width:100%}.linktree .linktree-content .wrapper a.linktree-link:hover{box-shadow:4px 4px 0 0 var(--main-text-color);color:var(--main-text-color)}.linktree .linktree-content .wrapper .social-links{align-items:center;display:flex;justify-content:center;width:100%}.linktree .linktree-content .wrapper .social-links a{background:none;font-size:120%;padding:0 .625rem}.attribution h1,.attribution h2{margin-bottom:1rem}@media screen and (max-width:1024px){.projects .contents-block{flex-direction:column}.projects .image img{margin-left:0;max-width:100%}}.speaking .index{background:var(--accent-wash);border:0;border-left:3px solid var(--accent)}.blogroll .blog-tags .blog-tag,.speaking .timestamp{font-family:var(--mono);font-size:.7rem;font-style:normal}.resume h2{color:var(--text)}@media (max-width:720px){.site-page{padding:1rem 1rem 3rem}.site-menu{grid-template-columns:repeat(2,minmax(0,1fr))}}