*,*:before,*:after{box-sizing:border-box}body,h1,h2,h3,h4,p,figure,blockquote,dl,dd{margin:0}ul[role=list],ol[role=list]{list-style:none}html:focus-within{scroll-behavior:smooth}body{min-height:100vh;line-height:1.5;text-rendering:optimizespeed}a:not([class]){text-decoration-skip-ink:auto}img,picture{display:block;max-width:100%}input,button,textarea,select{font:inherit}@media(prefers-reduced-motion:reduce){html:focus-within{scroll-behavior:auto}*,*:before,*:after{transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important;scroll-behavior:auto!important}}pre{background:#ffffff14}p code{color:#f66;font-family:SF Mono,Fira Code,Fira Mono,Roboto Mono,monospace}code[class*=language-],pre[class*=language-]{color:#eee;font-family:SF Mono,Fira Code,Fira Mono,Roboto Mono,monospace;font-size:.9em;line-height:1.3em;text-align:left;word-wrap:normal;word-break:normal;white-space:pre;word-spacing:normal;hyphens:none;tab-size:4}code[class*=language-]::selection,pre[class*=language-]::selection,code[class*=language-] ::selection,pre[class*=language-] ::selection{background:#363636}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.2em;white-space:normal}pre[class*=language-]{position:relative;margin:.5em 0;padding:1.25em 1em;overflow:auto}.language-css>code,.language-sass>code,.language-scss>code{color:#fd9170}[class*=language-] .namespace{opacity:.7}.token.atrule{color:#c792ea}.token.attr-name{color:#ffcb6b}.token.attr-value,.token.attribute{color:#a5e844}.token.boolean{color:#c792ea}.token.builtin{color:#ffcb6b}.token.cdata,.token.char{color:#80cbc4}.token.class{color:#ffcb6b}.token.class-name{color:#f2ff00}.token.comment{color:#616161}.token.constant{color:#c792ea}.token.deleted{color:#f66}.token.doctype{color:#616161}.token.entity{color:#f66}.token.function{color:#c792ea}.token.hexcode{color:#f2ff00}.token.id,.token.important{color:#c792ea;font-weight:700}.token.inserted{color:#80cbc4}.token.keyword{color:#c792ea}.token.number{color:#fd9170}.token.operator{color:#89ddff}.token.prolog{color:#616161}.token.property{color:#80cbc4}.token.pseudo-class,.token.pseudo-element{color:#a5e844}.token.punctuation{color:#89ddff}.token.regex{color:#f2ff00}.token.selector{color:#f66}.token.string{color:#a5e844}.token.symbol{color:#c792ea}.token.tag{color:#f66}.token.unit{color:#fd9170}.token.url,.token.variable{color:#f66}@view-transition{navigation:auto}body{background-color:#050505;color:#bbb;font-family:Inter,-apple-system,system-ui,sans-serif}a{transition:all .3s ease-in-out;border-bottom:1px solid rgba(125,125,125,.3);color:#fff;text-decoration:none;cursor:pointer}a i,a svg{color:#bbb}a:hover{border-bottom:1px solid #fff}a:hover i,a:hover svg{color:#fff}h1,h2,h3,h4,h5,h6{color:#fff}.mono{font-family:SF Mono,Fira Code,Fira Mono,Roboto Mono,monospace}.icon{width:1em;height:1em;color:#bbb}#top-nav{display:grid;grid-template-columns:1fr 2fr;padding:1.5em 2em}#top-nav h1 a{border-bottom:none;color:#bbb}#top-nav h1{font-size:1.5em;text-decoration:none}#top-nav nav{font-size:1.1em;text-align:right}#top-nav nav a{display:inline-block;margin:0 .5em;border-bottom:0;color:#bbb}#top-nav nav a:hover{color:#fff}.content-grid{--padding-inline: 1rem;--content-max-width: 600px;--breakout-max-width: 850px;--breakout-size: calc( (var(--breakout-max-width) - var(--content-max-width)) / 2 );display:grid;grid-template-columns:[full-width-start] minmax(var(--padding-inline),1fr) [breakout-start] minmax(0,var(--breakout-size)) [content-start] min(100% - var(--padding-inline) * 2,var(--content-max-width)) [content-end] minmax(0,var(--breakout-size)) [breakout-end] minmax(var(--padding-inline),1fr) [full-width-end]}.content-grid>:not(.breakout,.full-width),.full-width>:not(.breakout,.full-width){grid-column:content}.content-grid>.breakout{grid-column:breakout}.content-grid>.full-width{display:grid;grid-column:full-width;grid-template-columns:inherit}img.full-width{width:100%;max-height:45vh;object-fit:cover}.triple{display:grid;grid-template-columns:1fr min(100% - var(--padding-inline) * 2,var(--content-max-width)) 1fr}.content-general h1{margin-bottom:1em}.content-general p{margin-bottom:1.2em}.blog-list-item{margin-bottom:4em}.blog-list-head{height:5em;margin-bottom:1em;overflow:hidden}.blog-post .hero-image-container{height:140px}.blog-post .hero-image{width:100%;height:140px;object-fit:cover}.blog-post .readtime{float:right;font-family:SF Mono,Fira Code,Fira Mono,Roboto Mono,monospace}.blog-post .pubdate{font-family:SF Mono,Fira Code,Fira Mono,Roboto Mono,monospace}.blog-post hr{border:0;border-bottom:1px solid #fff}.blog-post h1,.blog-post h2,.blog-post p{margin-bottom:.75rem}.blog-post table{width:100%;margin-bottom:1.5rem;border-spacing:0;border-collapse:collapse}.blog-post table td,.blog-post table th{padding:.5rem;border:1px solid rgba(125,125,125,.3);text-align:left}.resume{margin-bottom:3em}.resume .years h3{color:#bbb;font-size:1.1em}.projects-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:2rem;margin-top:2rem;margin-bottom:2rem}@media(min-width:850px){.projects-grid{grid-template-columns:repeat(2,1fr)}}.project-card{display:block;padding:1.5rem;border:1px solid rgba(125,125,125,.3);border-radius:4px;transition:all .3s ease-in-out;text-decoration:none;color:#bbb}.project-card:hover{border-color:#fff;transform:translateY(-2px);background-color:#ffffff0d}.project-card h3{margin-bottom:1rem;color:#fff}.project-card p{margin-bottom:0;font-size:.95em;line-height:1.5}@keyframes astroFadeInOut{0%{opacity:1}to{opacity:0}}@keyframes astroFadeIn{0%{opacity:0;mix-blend-mode:plus-lighter}to{opacity:1;mix-blend-mode:plus-lighter}}@keyframes astroFadeOut{0%{opacity:1;mix-blend-mode:plus-lighter}to{opacity:0;mix-blend-mode:plus-lighter}}@keyframes astroSlideFromRight{0%{transform:translate(100%)}}@keyframes astroSlideFromLeft{0%{transform:translate(-100%)}}@keyframes astroSlideToRight{to{transform:translate(100%)}}@keyframes astroSlideToLeft{to{transform:translate(-100%)}}@media(prefers-reduced-motion){::view-transition-group(*),::view-transition-old(*),::view-transition-new(*){animation:none!important}[data-astro-transition-scope]{animation:none!important}}
