@charset "UTF-8";body{margin:0}blockquote,pre,ol,ul,figure{padding:0;margin:0}img{max-width:100%;display:block;height:auto;border:none}article,aside,figure,footer,header,aside,main,nav{display:block}*,*:before,*:after{box-sizing:border-box}iframe{border:none}button{-webkit-appearance:none;border-radius:0;text-align:inherit;background:0 0;box-shadow:none;padding:0;cursor:pointer;border:none;color:inherit;font:inherit}:root{--white:#fff;--light:#f9fafb;--dark:#2f2831;--darker:#1f1821;--darkest:#161118;--mid:#eaeef2;--mid-low:#73777c;--mid-blue:#607288;--gradient-blue:hsl(222, 100%, 83%);--gradient-green:hsl(191, 50%, 53%);--success:#2c753c;--gradient:linear-gradient(var(--gradient-blue), var(--gradient-green));--site-bg:var(--light);--site-chrome:var(--white);--site-text:var(--dark);--site-link-hover-fallback:var(--mid-blue);--site-text-gradient:-webkit-gradient(
    linear,
    0% 0%,
    100% 100%,
    from(var(--gradient-blue)),
    to(var(--gradient-green))
  );--pre-bg:var(--mid);--button-bg:var(--dark);--button-bg-hover:var(--darker);--button-text:var(--white);--button-bg-success:var(--success);--alert-bg:var(--mid);--blog-bg:var(--mid);--blog-post:var(--light);--blog-visited-text:var(--mid-blue);--blog-card:var(--white);--blog-card-link:var(--gradient-green);--blog-meta:var(--mid-blue);--home-opening-bg:var(--light);--home-opening-gradient-cover-1:rgba(249, 250, 251, 1);--home-opening-gradient-cover-2:rgba(249, 250, 251, 0);--home-opening-gradient:var(--gradient);--home-opening-overlay-blue:hsl(222, 100%, 25%);--home-opening-overlay-green:hsl(161, 100%, 30%);--home-side-projects-bg:var(--white);--home-side-project-bg:var(--mid);--blockquote-quote:var(--mid-blue);--blockquote-border:var(--mid);--code-bg:var(--mid);--dark-mode-toggle:var(--gradient-green)}:root.dark{--site-bg:var(--darker);--site-chrome:var(--darkest);--site-text:var(--white);--code-bg:var(--dark);--pre-bg:var(--dark);--blog-meta:var(--mid-low);--home-opening-bg:var(--darker);--home-opening-gradient-cover-1:rgba(31, 24, 33, 1);--home-opening-gradient-cover-2:rgba(31, 24, 33, 0);--home-opening-gradient:linear-gradient(hsl(222, 47%, 61%), hsl(178, 53%, 52%));--home-opening-overlay-blue:hsl(222, 93%, 16%);--home-opening-overlay-green:hsl(161, 96%, 20%);--home-side-projects-bg:var(--dark);--home-side-project-bg:var(--darker);--blog-bg:var(--darker);--blog-post:var(--dark);--blog-visited-text:var(--mid);--blog-card:var(--darkest);--blog-card-link:var(--gradient-green);--blog-meta:var(--mid-blue);--button-bg-hover:var(--darkest);--alert-bg:var(--dark);--blockquote-quote:var(--mid);--blockquote-border:var(--mid-low)}:root{--step--2:clamp(0.88rem, calc(0.76rem + 0.61vw), 1.04rem);--step--1:clamp(0.97rem, calc(0.75rem + 1.06vw), 1.25rem);--step-0:clamp(1.06rem, calc(0.74rem + 1.63vw), 1.50rem);--step-1:clamp(1.17rem, calc(0.70rem + 2.35vw), 1.80rem);--step-2:clamp(1.29rem, calc(0.63rem + 3.25vw), 2.16rem);--step-3:clamp(1.41rem, calc(0.54rem + 4.38vw), 2.59rem);--step-4:clamp(1.56rem, calc(0.40rem + 5.79vw), 3.11rem);--step-5:clamp(1.71rem, calc(0.21rem + 7.52vw), 3.73rem);--space-3xs:clamp(0.25rem, calc(0.16rem + 0.47vw), 0.38rem);--space-2xs:clamp(0.56rem, calc(0.42rem + 0.70vw), 0.75rem);--space-xs:clamp(0.81rem, calc(0.58rem + 1.16vw), 1.13rem);--space-s:clamp(1.06rem, calc(0.74rem + 1.63vw), 1.50rem);--space-m:clamp(1.63rem, calc(1.16rem + 2.33vw), 2.25rem);--space-l:clamp(2.13rem, calc(1.47rem + 3.26vw), 3.00rem);--space-xl:clamp(3.19rem, calc(2.21rem + 4.88vw), 4.50rem);--space-2xl:clamp(4.25rem, calc(2.95rem + 6.51vw), 6.00rem);--space-3xl:clamp(6.38rem, calc(4.42rem + 9.77vw), 9.00rem);--space-3xs-2xs:clamp(0.25rem, calc(-0.12rem + 1.86vw), 0.75rem);--space-2xs-xs:clamp(0.56rem, calc(0.14rem + 2.09vw), 1.13rem);--space-xs-s:clamp(0.81rem, calc(0.30rem + 2.56vw), 1.50rem);--space-s-m:clamp(1.06rem, calc(0.18rem + 4.42vw), 2.25rem);--space-m-l:clamp(1.63rem, calc(0.60rem + 5.12vw), 3.00rem);--space-l-xl:clamp(2.13rem, calc(0.36rem + 8.84vw), 4.50rem);--space-xl-2xl:clamp(3.19rem, calc(1.09rem + 10.47vw), 6.00rem);--space-2xl-3xl:clamp(4.25rem, calc(0.72rem + 17.67vw), 9.00rem);--space-s-l:clamp(1.06rem, calc(-0.38rem + 7.21vw), 3.00rem);--space-xs-m:clamp(0.81rem, calc(-0.26rem + 5.35vw), 2.25rem)}@font-face{font-family:avenir lt;src:url(/fonts/1475520/AvenirLT-Book.woff2)format("woff2"),url(/fonts/1475520/9bdf0737-f98c-477a-9365-ffc41b9d1285.ttf)format("truetype");font-weight:400;font-display:swap}@font-face{font-family:avenir lt;src:url(/fonts/1475544/ccd17c6b-e7ed-4b73-b0d2-76712a4ef46b-subset.woff2)format("woff2"),url(/fonts/1475544/ccd17c6b-e7ed-4b73-b0d2-76712a4ef46b.ttf)format("truetype");font-weight:700;font-display:swap;unicode-range:U+20-7E}@font-face{font-family:avenir lt;src:url(/fonts/1475520/AvenirLT-BookOblique.woff2)format("woff2");font-weight:400;font-style:italic;font-display:swap;unicode-range:U+20-7E}body{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;color:var(--site-text);font:var(--step-0)/1.79 avenir lt,avenir,-apple-system,BlinkMacSystemFont,segoe ui,Roboto,Oxygen-Sans,Ubuntu,Cantarell,helvetica neue,sans-serif}a:not(.button){color:inherit;transition:300ms color}a:not(.button):hover{color:var(--site-link-hover-fallback)}@supports(-webkit-text-fill-color:transparent){a:not(.button):hover{background-image:-webkit-gradient(linear,0% 0%,100% 100%,from(var(--gradient-blue)),to(var(--gradient-green)));-webkit-background-clip:text;-webkit-text-fill-color:transparent}a:not(.button):hover::selection{-webkit-text-fill-color:var(--site-text)}}a.footnote-ref,.footnote-ref a{text-decoration:none;font-size:var(--step--2);color:var(--blog-card-link);font-weight:700}p,ul,ol{margin:0 0 var(--space-s)}h1{font-size:var(--step-3);margin:0 0 var(--space-2xs);line-height:1.3}@supports(-webkit-text-fill-color:transparent){h1{background-image:var(--site-text-gradient);-webkit-background-clip:text;-webkit-text-fill-color:transparent;display:inline-block}h1::selection{-webkit-text-fill-color:var(--site-text)}}h2{font-size:var(--step-2);line-height:1.3;margin:var(--space-s-m)0}h3{font-size:var(--step-1);line-height:1.5;margin:var(--space-s-m)0 0}h4{line-height:1.3;margin:var(--space-s)0 0;font-size:var(--step-0)}.center{text-align:center}blockquote{font-weight:700;font-size:var(--step-1);position:relative;border-bottom:2px solid var(--blockquote-border);border-top:2px solid var(--blockquote-border);padding:var(--space-s-m)0;margin:var(--space-m-l)0;text-align:center}blockquote :last-child{margin-bottom:0}blockquote.longquote{font-size:var(--step-0);text-align:left;font-weight:400;padding-left:var(--space-m-l);line-height:1.6;font-style:italic;color:var(--blockquote-quote)}blockquote.longquote:before{content:'“';position:absolute;font-size:var(--step-4);font-weight:700;left:-.25rem;top:.6rem}blockquote.longquote cite{font-weight:700;display:block;margin-top:var(--space-2xs);font-style:normal;font-size:var(--step--1)}li{line-height:1.5}li+li{margin-top:var(--space-xs)}code{font-size:var(--step--1)}pre{max-width:100%;overflow:auto;margin:var(--space-m)0;padding:var(--space-s);line-height:1.3}pre,pre code{font-size:var(--step--2)}p code{background-color:var(--code-bg);font-size:var(--step--2);padding:.25em}h2+.highlight pre,h3+.highlight pre{margin-top:1em}.p-name{text-align:center}@media(min-width:750px){.p-name{margin:1em 0 1.5em}}.content img{margin:var(--space-s)auto}.content h2{margin-bottom:.25em}.content figcaption{display:block;margin:-1.25em 0 var(--space-m)}.content h3+ul{margin-top:var(--space-s)}ul ul,ol ol{padding:var(--space-m)1em 0}figcaption{font-size:var(--step--2);padding:var(--space-3xs)0 0;text-align:right;line-height:1.4}.footnotes{font-size:var(--step--1)}body{background:var(--site-bg)}::selection{background:var(--gradient-blue)}.main{min-height:calc(100vh - 7em)}.wrap{max-width:1180px;padding-left:var(--space-s);padding-right:var(--space-s);margin-left:auto;margin-right:auto}@media(min-width:500px){.wrap{width:90%}}.insulate{padding-top:1.666em;padding-bottom:1.666em}.top,.low{letter-spacing:2px;font-weight:700;box-shadow:0 2px 4px rgba(0,0,0,6%);background:var(--site-chrome);font-size:var(--step--2);padding:1.75em 0;position:relative;z-index:10}.top a,.top button,.low a,.low button{text-decoration:none;margin-left:var(--space-xs-m)}.top .wrap,.low .wrap{width:100%;display:flex;justify-content:flex-end;flex-wrap:wrap}.top a:first-child,.top button:first-child,.low a:first-child,.low button:first-child{margin:0 auto 0 0}.top button,.low button{line-height:1}@media(max-width:360px){.top a:nth-child(3){display:none}}hr{margin:var(--space-s-m)0;border:none;border-top:2px solid var(--mid)}.button{margin:var(--space-s)auto;font-weight:700;font-size:var(--step--2);letter-spacing:1px;text-decoration:none;background:var(--button-bg);transition:300ms background;padding:var(--space-2xs-xs)var(--space-s-m);text-align:center;color:var(--button-text);display:inline-block;border:none;min-width:200px;cursor:pointer;width:auto}.button:hover{background:var(--button-bg-hover);color:var(--button-text)}.button.button--success{background:var(--button-bg-success)}.password .password__result{display:block;margin:var(--space-s-m)0 var(--space-s)}.password .button{min-width:auto}.dark-mode-toggle{color:var(--dark-mode-toggle)}:root:not(.dark) .dark-only{display:none}:root.dark .light-only{display:none}.opening{position:relative;text-align:center}.opening .wrap{background:var(--home-opening-bg)}.opening .opening__content{max-width:800px;margin:0 auto;padding:var(--space-s-l)0}.opening figure{margin:0 auto var(--space-s);max-width:461px;padding:var(--space-s)}.opening figure .home-image__cover{position:relative;box-shadow:0 0 var(--space-m)rgba(0,0,0,.15)}.opening figure .home-image__cover img{filter:saturate(0)}.opening figure .home-image__cover:after{background-image:linear-gradient(90deg,var(--home-opening-overlay-blue),var(--home-opening-overlay-green));position:absolute;opacity:.4;content:'';height:100%;width:100%;left:0;top:0}@supports(mix-blend-mode:overlay){.opening figure .home-image__cover:after{mix-blend-mode:screen;opacity:1}}@media(min-width:500px){.opening figure{display:none}}@media(min-width:1000px){.opening .wrap{width:100%;display:flex;padding:0;justify-content:space-between;align-items:stretch;overflow:hidden}.opening .opening__content{--push:calc(var(--space-2xl) + var(--space-s));text-align:left;padding:var(--space-l-xl)var(--space-s);max-width:700px;width:55%;margin:0 auto 0 var(--push);position:relative;z-index:1}.opening .opening__content:before{position:absolute;content:'';height:100%;z-index:0;width:100px;right:calc(100% + var(--push));top:0}.opening figure{background-image:linear-gradient(to left,var(--home-opening-gradient-cover-1),var(--home-opening-gradient-cover-2)),var(--home-opening-gradient);background-size:200px 100%,auto;background-repeat:no-repeat,repeat-x;background-position:100% 0;display:flex;flex-direction:column;justify-content:center;order:-1;width:340px;max-width:none;margin:0;z-index:2}.opening .home-image__cover{transform:translateX(-25px)scale(.875);width:460px;max-width:none}.opening::after{background:var(--home-opening-gradient);position:absolute;content:'';height:100%;z-index:-1;width:50%;left:0;top:0}}.feed{background:var(--blog-bg)}.side-projects{box-shadow:0 -2px 4px rgba(0,0,0,.1);background:var(--home-side-projects-bg);position:relative;z-index:3;padding-bottom:var(--space-m)}.side-projects .projects{display:grid;grid-template-columns:repeat(1,1fr);grid-gap:var(--space-s-l);pointer-events:none;padding-top:var(--space-xs)}@media screen and (min-width:50em){.side-projects .projects{grid-template-columns:repeat(2,1fr);padding-top:0}}.side-projects .projects>*{background:var(--home-side-project-bg);display:block;transition:300ms box-shadow,300ms opacity,300ms transform;box-shadow:0 0 var(--space-m)rgba(0,0,0,.1);pointer-events:auto}.side-projects .projects>*:hover{box-shadow:0 0 var(--space-m)rgba(0,0,0,.2);transform:scale(1.05)}.side-projects .projects:hover>:not(:hover){opacity:.3}.side-projects .projects h3{margin-top:0}.side-projects .projects a{text-decoration:none}.side-projects .projects p{font-size:var(--step--1);margin-bottom:0;opacity:.7}.side-projects .projects .button{margin-bottom:0}.side-projects .projects .project-content{padding:var(--space-s-m)}.blog{background:var(--blog-bg)}.blog-title{margin-bottom:0}.blog-header{margin-bottom:var(--space-s-l)}.post{margin:0 0 var(--space-xl)}.post a{text-decoration:none}.post--article{background:var(--blog-post);position:relative;padding:var(--space-s-m);display:flex;align-items:center}.post--article a{display:block}.post--article h2{margin:0}.post--article h2 a:visited{color:var(--blog-visited-text)}.categories{position:absolute;font-size:var(--step--2);font-weight:700;letter-spacing:.05em;left:0;top:50%;transform-origin:0 50%;transform:translateY(-50%)rotate(-90deg)translateX(-50%);text-align:center;line-height:1.2}.posts{grid-gap:var(--space-s-l);display:grid;max-width:750px;margin:0 auto}@supports(display:grid){.posts{max-width:none;margin:0}}.posts>*{margin:0}@media(min-width:850px){.posts{grid-template-columns:1fr 1fr;grid-auto-flow:dense}.posts .post--video{grid-column:1/-1;display:grid;grid-template-columns:1fr var(--space-s-l)1fr;grid-row:auto auto;align-items:center}.posts .post--video>*{grid-column:3/4;align-self:start}.posts .post--video>div{align-self:center;grid-column:1/2;grid-row:span 2;order:-1}.posts .post--video h2{margin:0;align-self:end}.posts .post--video h2:nth-last-child(2){grid-row:1/3;align-self:center}.posts .post--image{grid-row:span 2;display:flex;justify-content:center;flex-direction:column}.posts .post--image.post--image--large{grid-row:span 3}}.load-more{padding:var(--space-s-l)0}.post--quote{background:rgba(0,0,0,5%);padding:var(--space-s-m);display:flex;flex-direction:column;justify-content:center;align-items:center}.post--quote blockquote{margin:0;border:none;padding:0;line-height:1.2}.post--quote p{margin:0}.post--quote cite{font-style:normal;font-size:var(--step--2)}.large-image{max-width:100vw;width:1140px;transform:translateX(-50%);margin:var(--space-s-l)50%}.grid-of-cards{display:grid;grid-gap:var(--space-s-m);margin:var(--space-s-m)0}@media(min-width:48em){.grid-of-cards{width:90vw;max-width:1100px;margin-left:50%;transform:translateX(-50%);grid-template-columns:1fr 1fr}}.card{background:var(--blog-card);padding:var(--space-s-m);font-size:var(--step--1);box-shadow:0 0 20px rgba(0,0,0,.1)}.card>*{margin-bottom:0;margin-top:0}.card>*+*{margin-top:var(--space-2xs-xs)}.card p a{color:var(--blog-card-link)}.single{max-width:740px;margin:0 auto var(--space-xl-2xl)}.single .twitter-tweet{padding-bottom:1em;margin-left:auto;margin-right:auto}.single .meta{display:block;margin-bottom:var(--space-xs-s);color:var(--blog-meta)}.single h1{margin-bottom:var(--space-3xs)}.alert{font-size:var(--step--1);padding:1rem;background:var(--alert-bg);position:relative;margin-bottom:1.5em}.alert--with-eyebrow{padding-top:2.5rem}.alert__eyebrow{position:absolute;font-size:var(--step--2);font-weight:700;letter-spacing:.1em;background:var(--gradient);color:var(--white);padding:0 1rem;left:0;top:0}.alert>:first-child{margin-top:0}.alert pre{padding:0}.alert>:last-child,.alert>.highlight:last-child>:last-child{margin-bottom:0}.chroma{background-color:var(--pre-bg)}.chroma .err{color:red;background-color:#faa}.chroma .lntd{vertical-align:top;padding:0;margin:0;border:0}.chroma .lntable{border-spacing:0;padding:0;margin:0;border:0;width:100%;overflow:auto;display:block}.chroma .hl{display:block;width:100%;background-color:#ffc}.chroma .lnt{margin-right:.4em;padding:0 .4em;display:block}.chroma .ln{margin-right:.4em;padding:0 .4em}:root{--syntax-dark-blue:#0000aa;--syntax-teal:#00aaaa;--syntax-light-blue:#1e90ff;--syntax-success:#00aa00;--syntax-failure:#aa0000;--syntax-deep-red:#880000;--syntax-grey:#888888;--syntax-light-grey:#aaaaaa;--syntax-brown:#713900;--syntax-black:#000000}:root.dark{--syntax-dark-blue:#b0b0ec;--syntax-teal:#00aaaa;--syntax-light-blue:#1e90ff;--syntax-success:#62d262;--syntax-failure:#dc6262;--syntax-deep-red:#dc6262;--syntax-grey:#888888;--syntax-light-grey:#aaaaaa;--syntax-brown:#d88838;--syntax-black:#000000}.chroma .k{color:var(--syntax-dark-blue)}.chroma .kc{color:var(--syntax-dark-blue)}.chroma .kd{color:var(--syntax-dark-blue)}.chroma .kn{color:var(--syntax-dark-blue)}.chroma .kp{color:var(--syntax-dark-blue)}.chroma .kr{color:var(--syntax-dark-blue)}.chroma .kt{color:var(--syntax-teal)}.chroma .na{color:var(--syntax-light-blue)}.chroma .nb{color:var(--syntax-teal)}.chroma .nc{color:var(--syntax-success)}.chroma .no{color:var(--syntax-failure)}.chroma .nd{color:var(--syntax-grey)}.chroma .ni{color:var(--syntax-deep-red);font-weight:700}.chroma .nf{color:var(--syntax-success)}.chroma .nn{color:var(--syntax-teal)}.chroma .nt{color:var(--syntax-light-blue);font-weight:700}.chroma .nv{color:var(--syntax-failure)}.chroma .s{color:var(--syntax-brown)}.chroma .sa{color:var(--syntax-brown)}.chroma .sb{color:var(--syntax-brown)}.chroma .sc{color:var(--syntax-brown)}.chroma .dl{color:var(--syntax-brown)}.chroma .sd{color:var(--syntax-brown)}.chroma .s2{color:var(--syntax-brown)}.chroma .se{color:var(--syntax-brown)}.chroma .sh{color:var(--syntax-brown)}.chroma .si{color:var(--syntax-brown)}.chroma .sx{color:var(--syntax-brown)}.chroma .sr{color:var(--syntax-teal)}.chroma .s1{color:var(--syntax-brown)}.chroma .ss{color:var(--syntax-dark-blue)}.chroma .m{color:var(--syntax-teal)}.chroma .mb{color:var(--syntax-teal)}.chroma .mf{color:var(--syntax-teal)}.chroma .mh{color:var(--syntax-teal)}.chroma .mi{color:var(--syntax-teal)}.chroma .il{color:var(--syntax-teal)}.chroma .mo{color:var(--syntax-teal)}.chroma .ow{color:var(--syntax-dark-blue)}.chroma .c{color:var(--syntax-light-grey);font-style:italic}.chroma .ch{color:var(--syntax-light-grey);font-style:italic}.chroma .cm{color:var(--syntax-light-grey);font-style:italic}.chroma .c1{color:var(--syntax-light-grey);font-style:italic}.chroma .cs{color:var(--syntax-dark-blue);font-style:italic}.chroma .cp{color:var(--syntax-success)}.chroma .cpf{color:var(--syntax-success)}.chroma .gd{color:var(--syntax-failure)}.chroma .ge{font-style:italic}.chroma .gr{color:var(--syntax-failure)}.chroma .gh{color:var(--syntax-black);font-weight:700}.chroma .gi{color:var(--syntax-success)}.chroma .go{color:var(--syntax-grey)}.chroma .gp{color:#555}.chroma .gs{font-weight:700}.chroma .gu{color:purple;font-weight:700}.chroma .gt{color:var(--syntax-failure)}.chroma .w{color:#bbb}