@charset "UTF-8";@font-face{font-display:swap;font-family:ibm plex sans;font-style:normal;font-weight:400;src:url(../fonts/ibm-plex-sans-v19-latin-regular.woff2)format("woff2")}@font-face{font-display:swap;font-family:ibm plex sans;font-style:italic;font-weight:400;src:url(../fonts/ibm-plex-sans-v19-latin-italic.woff2)format("woff2")}@font-face{font-display:swap;font-family:ibm plex sans;font-style:normal;font-weight:700;src:url(../fonts/ibm-plex-sans-v19-latin-600.woff2)format("woff2")}@font-face{font-display:swap;font-family:ibm plex sans;font-style:italic;font-weight:700;src:url(../fonts/ibm-plex-sans-v19-latin-600italic.woff2)format("woff2")}@font-face{font-display:swap;font-family:'source serif 4';font-style:normal;font-weight:400;src:url(../fonts/source-serif-4-v8-latin-regular.woff2)format("woff2")}@font-face{font-display:swap;font-family:'source serif 4';font-style:italic;font-weight:400;src:url(../fonts/source-serif-4-v8-latin-italic.woff2)format("woff2")}@font-face{font-display:swap;font-family:'source serif 4';font-style:normal;font-weight:700;src:url(../fonts/source-serif-4-v8-latin-700.woff2)format("woff2")}@font-face{font-display:swap;font-family:'source serif 4';font-style:italic;font-weight:700;src:url(../fonts/source-serif-4-v8-latin-700italic.woff2)format("woff2")}:root{--accent-color:#2b8151;--accent-color-light:#6ba785;--accent-color-lightest:#aacdb9;--accent-color-dark:#1b5d3e;--text-muted:#535353;--font-family-sans:"IBM Plex Sans", system-ui, sans-serif;--font-family-serif:"Source Serif 4", Georgia, serif;--gutter:2.4rem;--text-body-width:640px;--max-width:1440px;--vertical-gutter:16px;--spacer:var(--gutter);--desktop-breakpoint:$desktop-breakpoint}html{font-size:18px}@media(min-width:1400px){html{font-size:20px}}body{box-sizing:border-box;position:relative;background-color:#fcfaf6;background-position:fixed;font-family:var(--font-family-sans);line-height:1.5;margin:0;box-shadow:0 0 0 8px var(--accent-color-lightest),0 0 0 16px var(--accent-color-light),0 0 0 24px var(--accent-color);margin-top:24px;padding-top:1px;padding-bottom:1px;min-height:calc(100vh - 24px)}h1,h2,h3,h4,h5,h6{line-height:1.3}p,li,figcaption,blockquote{line-height:1.5}.post-content p,.post-content li,.post-content blockquote{font-family:var(--font-family-sans)}.post-content figcaption,.post-content figcaption *,.post-content cite{font-family:var(--font-family-sans)}p,li,figcaption,blockquote,h1,h2,h3,h4,h5,h6{max-width:var(--text-body-width)}p,ul{margin:0}p.big{font-size:1.25rem;font-weight:700;line-height:140%}p+p,li+li{margin-top:1rem}a{--animation-duration:300ms;color:var(--accent-color)}a:hover,a:focus{color:var(--accent-color-dark);text-decoration-color:initial}a:hover{text-decoration:underline;text-decoration-thickness:.1em}a:focus{outline:2px solid var(--accent-color-dark);border-radius:2px;text-decoration:none}a.a-subtle,.site-title a{color:inherit;text-decoration-color:transparent}a.a-subtle:hover,a.a-subtle:focus,.site-title a:hover,.site-title a:focus{color:var(--accent-color)}a.a-subtle:hover,.site-title a:hover{text-decoration:underline;text-decoration-thickness:2px}a.a-subtle:focus,.site-title a:focus{text-decoration:none}.text-muted{color:var(--text-muted)}.text-muted a{color:inherit}img{max-width:100%}img[src*=".jpg"]{background-color:var(--accent-color-lightest)}sub,sup{line-height:.5rem}:is(hr,main hr){--hr-width:8px;--hr-margin:6px;margin-left:calc(var(--hr-width) * 2 + var(--hr-margin) * 2);margin-top:2rem;margin-bottom:2rem;display:flex;width:var(--hr-width);height:6px;border:none;border-radius:3px;overflow:visible}:is(hr,main hr),:is(hr,main hr)::before,:is(hr,main hr)::after{content:'';width:var(--hr-width);height:var(--hr-width);border-radius:var(--hr-width);background-color:var(--color-1)}:is(hr,main hr):hover,:is(hr,main hr):hover::after,:is(hr,main hr):hover::before{animation:color-me-in 2s infinite}:is(hr,main hr){--color-1:var(--accent-color-lightest);--color-2:var(--accent-color);--color-3:var(--accent-color-light)}:is(hr,main hr):before{margin-left:calc( ( var(--hr-width) * 2 + var(--hr-margin) * 2 ) * -1);--color-1:var(--accent-color-light);--color-2:var(--accent-color-lightest);--color-3:var(--accent-color)}:is(hr,main hr):after{margin-left:var(--hr-margin);--color-1:var(--accent-color);--color-2:var(--accent-color-light);--color-3:var(--accent-color-lightest)}@keyframes color-me-in{0%{background-color:var(--color-1)}25%{background-color:var(--color-3)}50%{background-color:var(--color-1)}75%{background-color:var(--color-2)}100%{background-color:var(--color-1)}}main .sr-only+*{margin-top:0}main *+.section-header{margin-top:calc(var(--gutter) * 2)}main *+.section-header~.section-header{margin-top:calc(var(--gutter) * 1.5)}main h2{margin-top:3rem;margin-bottom:1.5rem}.post-content h3{margin-top:1.5rem;margin-bottom:1.5rem}main *:first-child{margin-top:0}figure{display:table;margin:2rem 0}figcaption{margin:1rem auto 0;font-size:.9em;color:var(--text-muted)}figure:not(.thumbnail-credits) figcaption{display:table-caption}figure:not(.thumbnail-credits) *+figcaption{caption-side:bottom}figure img{margin-left:auto;margin-right:auto}iframe{display:block;max-width:100%;margin:2rem auto}img{max-width:100%;height:auto}.is-dark{color:#f5f5f5}.is-dark a{color:inherit}.is-dark a:hover,.is-dark a:focus{color:var(--accent-color-lightest);text-decoration-color:initial;outline-color:currentColor}.site-title,.section-header,.section-header h2,.toc-label{font-size:1rem;text-transform:uppercase;line-height:normal;letter-spacing:.05rem;font-weight:700}.site-title{margin-top:0;margin-bottom:0;line-height:1.5}.site-title .weight-normal{display:inline;margin:0;font-size:inherit;font-weight:400;line-height:inherit}.section-header{display:flex;gap:.8rem;margin-bottom:1.5rem}.section-header>*{margin-top:0;margin-bottom:0}.section-header .link-rss .label{display:none}.section-header .link-rss:hover .icon,.section-header .link-rss:focus .icon{fill:var(--accent-color-dark)}.section-header .link-rss:hover .label,.section-header .link-rss:focus .label{margin-left:.5rem;display:inline}.site-nav{display:flex;flex-wrap:wrap}.site-nav>*{margin-top:0;margin-bottom:0}.site-nav ul{list-style-type:none;display:flex;padding-left:0;gap:.5rem 1rem;margin-top:0}.site-nav-inline{margin-top:1rem;margin-bottom:var(--gutter)}.site-footer{color:var(--text-muted)}.site-footer a{color:inherit}.single .post-title{font-size:1.8rem;margin-bottom:0}.single .post-description{font-weight:700;margin-top:-1rem;margin-bottom:2rem}.single article header{margin-bottom:2rem}.single article header>*+*{margin-top:1rem}.single .site-footer{margin-top:var(--gutter)}.post-meta{color:var(--text-muted);display:flex;flex-wrap:wrap}.post-meta>:not(:last-child)::after{content:"·";display:inline-block;margin-left:.5rem;margin-right:.5rem;opacity:.5}.site-header{display:flex;flex-wrap:wrap;gap:1rem calc(var(--gutter) * 2);align-items:center;margin-top:calc(var(--gutter) * 1.5);margin-bottom:calc(var(--gutter) * 1.5);grid-template-columns:max-content max-content;justify-content:space-between}.site-header nav ul{column-gap:1.5rem}.site-footer{margin-top:calc(var(--gutter) * 1.5);margin-bottom:calc(var(--gutter) * 2)}.default-layout{min-height:100%;grid-template-rows:auto 1fr auto}.default-layout,.default-layout>.grid,.default-layout .grid>.grid{display:grid;column-gap:var(--vertical-gutter);grid-template-columns:auto 1fr auto}@media(min-width:640px){.default-layout,.default-layout>.grid,.default-layout .grid>.grid{grid-template-columns:1fr var(--text-body-width)1fr}}.default-layout>*,.default-layout>.grid>*,.default-layout .grid>.grid>*{grid-column:2/3}.default-layout>.grid,.default-layout>.grid>.grid,.default-layout .grid>.grid>.grid{grid-column:1/4}.nav-separator:before{content:"•";margin-left:0;color:var(--accent-color-light)}img{display:block}.no-list{list-style-type:none;display:flex;flex-wrap:wrap;gap:.5rem 1rem;padding:0}.no-list li{margin:0}.post-content :is(ol,ul){margin-top:1.5rem;margin-bottom:1.5rem}.post-content :is(ol,ul) :is(ol,ul){margin-top:1rem;margin-bottom:1rem}.post-content figure{margin:2.5rem auto}@media(min-width:900px){.post-content figure.size-wider,.single.portfolio .post-content figure{--image-width:800px;width:var(--image-width);margin-left:calc((var(--image-width) - var(--text-body-width))/-2)}.post-content figure.size-full{left:50%;margin-left:-50vw;margin-right:-50vw;max-width:100vw;position:relative;right:50%;width:100vw}}.post-content figure img{max-width:100%}.post-content>:first-child{margin-top:0}.post-content>:last-child{margin-bottom:0}.toc{color:var(--text-muted)}.toc details{margin-bottom:2rem}.toc .toc-label{font-size:1rem;display:inline}.toc ol{list-style-type:none;margin-left:0}.toc summary+ol{padding-left:0}.toc li+li,.toc ol{margin-top:.5rem}.toc a{color:currentColor;text-decoration:none}.post-list{display:flex;flex-direction:column;gap:2rem;margin-top:1.5rem;margin-bottom:1.5rem}.section-header+.post-list{margin-top:0}.post-list article{margin:0;display:grid;grid-template-columns:1fr auto;width:100%;row-gap:1.2rem;column-gap:1.5rem;align-items:flex-end;align-items:center;justify-content:space-between;min-height:72px}.post-list article>*{grid-column:1/3}.post-list article div,.post-list article img,.post-list article .post-title,.post-list article .post-meta{margin:0}.post-list article .post-title{font-size:1.1rem}.post-list article .post-meta{font-size:.8rem;margin-top:.5rem}.post-list article .post-description{font-size:.9rem;margin-top:.5em}.post-list article .thumbnail{grid-column:2/3;max-width:20vw;width:180px;max-width:25vw;height:auto;border-radius:4px;transition:all .1s ease-in-out;aspect-ratio:3/2;align-self:start;object-fit:cover;box-shadow:0 1px 4px rgba(0,0,0,.15)}.post-list article .thumbnail+div{grid-row-start:1;grid-column:1/2}@media(prefers-reduced-motion:no-preference){.post-list article:hover .thumbnail{transform:scale(1.25)rotate(3deg);box-shadow:1.25px 1.25px 5px rgba(0,0,0,.15)}}.post-list article .thumbnail.emoji{background-color:var(--accent-color);font-size:2rem;display:flex;justify-content:center;align-items:center;background:linear-gradient(180deg,var(--accent-color-dark) 0%,var(--accent-color) 100%)}picture *+*{margin-top:0!important}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.icon-rss{height:1em;width:auto;margin-bottom:-.15em}blockquote{margin-top:2rem;margin-bottom:2rem}blockquote::before{content:"“";color:var(--accent-color);font-size:4rem;margin-left:-2.4rem;margin-top:-1.4rem;float:left}cite{display:block;font-style:unset;margin-top:1rem;text-align:right;color:var(--text-muted)}cite::before{content:"— "}.btn{--btn-padding-vertical:.3rem;--btn-padding-horizontal:calc( var(--btn-padding-vertical) * 2 );--btn-border-width:2px;background-color:var(--accent-color);border:var(--btn-border-width)solid transparent;color:#fff;padding:var(--btn-padding-vertical)var(--btn-padding-horizontal);display:inline-block;text-decoration:none;border-radius:.2em;transition:ease-out .15s background-color}.btn,.btn:hover,.btn:focus{color:#fff;text-decoration:none}.btn:hover{background-color:var(--accent-color-dark);transition-timing-function:ease-in}.btn:focus{outline:none;box-shadow:0 0 0 2px white,0 0 0 4px var(--accent-color-light),0 0 0 6px var(--accent-color-lightest)}.btn.btn-sm{font-size:.9rem;--btn-padding-vertical:.2rem;--btn-border-width:1px}.btn.btn-rounded{border-radius:100rem}.btn.btn-rounded.btn-sm{--btn-padding-horizontal:calc(var(--btn-padding-vertical) * 4)}.btn-outline{background-color:transparent;box-sizing:border-box;color:var(--accent-color);border-color:var(--accent-color)}.btn-outline:hover,.btn-outline:focus{background-color:var(--accent-color-dark);border-color:var(--accent-color-dark);color:#fff}.term-list ul{column-gap:.8rem}.post-content+.term-list{margin-top:var(--gutter)}.btn-group{display:flex;flex-wrap:wrap;align-items:center;gap:.5rem}.btn-group>*{margin-top:0}.avatar{margin-top:0;margin-bottom:1.5rem;grid-row-start:1}.avatar img{border-radius:50%}@media(min-width:960px){.default-layout .grid .avatar-header{column-gap:calc(var(--gutter) * .75)}.default-layout .grid .avatar-header .avatar{grid-column:1/2;justify-self:right;margin-bottom:0}}.disclaimer{background-color:var(--accent-color);color:#fff;padding:1rem;border-radius:4px;margin-bottom:2rem}.disclaimer a{color:inherit}.thumbnail-credits{color:var(--text-muted);font-size:.9rem;margin:0}.thumbnail-credits figcaption{margin-top:1.5rem;margin-bottom:2rem}.thumbnail-credits img{display:none}code,pre{font-size:.9em;color:var(--text-muted);white-space:normal}ul:not([class]){padding-left:.6rem}ul:not([class]) li{padding-inline-start:1ch}ul:not([class]) li::marker{content:'–';font-weight:700;color:var(--accent-color);padding:1rem;margin:1rem;margin-left:-1rem}ul:not([class]) li li::marker{color:var(--accent-color-light)}ul:not([class]) li li li::marker{color:var(--accent-color-lightest)}@media(max-width:959px){.desktop-visible{display:none}}.mt-0{margin-top:calc( var(--spacer) * 0)!important}.mb-0{margin-bottom:calc( var(--spacer) * 0)!important}.mt-1{margin-top:calc( var(--spacer) * .25)!important}.mb-1{margin-bottom:calc( var(--spacer) * .25)!important}.mt-2{margin-top:calc( var(--spacer) * .5)!important}.mb-2{margin-bottom:calc( var(--spacer) * .5)!important}.mt-3{margin-top:calc( var(--spacer) * 1)!important}.mb-3{margin-bottom:calc( var(--spacer) * 1)!important}.mt-4{margin-top:calc( var(--spacer) * 1.5)!important}.mb-4{margin-bottom:calc( var(--spacer) * 1.5)!important}.mt-5{margin-top:calc( var(--spacer) * 3)!important}.mb-5{margin-bottom:calc( var(--spacer) * 3)!important}.portfolio-layout .site-header{margin-bottom:calc(var(--gutter) * 2)}.portfolio-layout .site-footer{margin-top:calc(var(--gutter) * 2);margin-bottom:calc(var(--gutter) * 2)}.portfolio-layout .container{max-width:var(--max-width);margin-left:auto;margin-right:auto;padding:0 1rem}@media(min-width:960px){.portfolio-layout .container{padding:0 var(--gutter)}}.portfolio-layout article .logo img{height:auto;width:100px}.portfolio-layout main article+article{margin:0}.portfolio-layout article.banner{overflow:hidden}.portfolio-layout article.banner .container{display:grid;gap:var(--gutter);column-gap:calc(var(--gutter) * 2)}.portfolio-layout article.banner .container figure{margin:0}@media(min-width:960px){.portfolio-layout article.banner.has-image .container{grid-template-columns:1fr 2fr}}.portfolio-layout article.banner.project-canonical{padding-top:calc(var(--gutter) * 1.8);padding-bottom:0}.portfolio-layout article.banner.project-canonical.is-dark{background-color:#262626}.portfolio-layout article.banner.project-canonical .logo img{width:120px}.portfolio-layout article.banner.project-ecfr{padding-top:calc(var(--gutter) * 2);padding-bottom:0}.portfolio-layout article.banner.project-eom{background-color:#497d0b;padding-bottom:0;margin-top:0;padding-top:calc(var(--gutter) * 2)}.portfolio-layout article.banner.project-elcano{margin-top:0;padding-top:calc(var(--gutter) * 2);background-color:#f5f5f5;padding-bottom:0}.portfolio-layout article.banner.project-elcano .screenshots{margin-top:0;max-height:640px;display:grid;grid-gap:10px 15px;grid-template-columns:repeat(5,minmax(400px,80vw));grid-auto-flow:row}.portfolio-layout article.banner.project-elcano .screenshots>*{overflow:visible}.portfolio-layout article.banner.project-elcano .screenshots>*+*{margin-top:0!important}@media(max-width:959px){.portfolio-layout article.banner.project-elcano .screenshots{grid-template-columns:repeat(5,200px);overflow-x:auto}.portfolio-layout article.banner.project-elcano .screenshots>*{max-height:260px}}@media(max-width:599px){.portfolio-layout article.banner.project-elcano .screenshots{grid-template-columns:repeat(5,80vw);padding-left:1rem;padding-right:1rem;margin-left:-1rem;width:100%}}@media(min-width:960px){.portfolio-layout article.banner.project-elcano .screenshots{display:grid;grid-gap:10px 15px;grid-template-columns:repeat(5,1fr);grid-template-rows:100px 50px 200px}.portfolio-layout article.banner.project-elcano .screenshots>:nth-child(1){grid-row:1/4}.portfolio-layout article.banner.project-elcano .screenshots>:nth-child(2){grid-row:2/4}.portfolio-layout article.banner.project-elcano .screenshots>:nth-child(3){grid-row:3/4}.portfolio-layout article.banner.project-elcano .screenshots>:nth-child(4){grid-row:2/4}.portfolio-layout article.banner.project-elcano .screenshots>:nth-child(5){grid-row:1/4}}@media(min-width:960px) and (prefers-reduced-motion:no-preference){.portfolio-layout article.banner.project-elcano .screenshots figure{transform:rotate(2deg);transition:all .3s ease-out;box-shadow:3px 3px 3px rgba(0,0,0,.1)}.portfolio-layout article.banner.project-elcano .screenshots figure:hover{position:relative;z-index:10;transform:rotate(0)scale(1.3);box-shadow:0 3px 6px rgba(0,0,0,.2)}}.portfolio-layout article.banner.project-taxud{background-color:#f5f5f5;padding-top:calc(var(--gutter) * 2);padding-bottom:calc(var(--gutter) * 2);margin-bottom:calc(var(--gutter) * 2)}.portfolio-layout .other-projects{margin-top:calc(var(--gutter) * 2)}.portfolio-layout .other-projects h2{font-size:1rem;text-transform:uppercase;letter-spacing:.05rem}.portfolio-layout .other-projects .other-projects-items{display:grid;gap:var(--gutter)}@media(min-width:960px){.portfolio-layout .other-projects .other-projects-items{grid-template-columns:repeat(3,1fr)}}.portfolio-layout .other-projects .other-projects-items h3{font-size:1rem;margin-bottom:.5rem}.portfolio-layout .letter{margin-bottom:calc(var(--gutter) * 2)}