:root{--sans:Ubuntu,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;--mono:SFMono-Regular,Menlo,Monaco,Consolas,Fira Mono,Liberation Mono,Courier New,monospace;--gap:30px;--gap2x:60px;--gap3x:90px;--nudge:15px;--t-bg:background .5s ease;--t-fg:color .5s ease;--t-border:border .5s ease;--t-opacity:opacity .5s ease;--f-h1:2.625rem;--f-h2:2rem;--f-xl:1.525rem;--f-lg:1.375rem;--f-md:1.125rem;--f-sm:.875rem;--f-xs:.75rem}*,:after,:before{vertical-align:baseline;box-sizing:border-box;font:inherit;color:inherit;border:0;border-radius:0;outline:none;margin:0;padding:0}html{scroll-behavior:smooth;-ms-overflow-style:scrollbar;-webkit-tap-highlight-color:transparent;overscroll-behavior:none;min-height:100dvh}body{min-width:400px;min-height:100dvh;font-family:var(--sans);font-size:var(--f-md);font-variant:normal;letter-spacing:0;text-transform:none;color:#333;background-color:#fff;font-style:normal;font-weight:400;line-height:1;overflow-x:hidden}a{cursor:pointer;-webkit-text-decoration-skip:objects;touch-action:manipulation;transition:var(--t-fg);text-decoration:none}a>*,a:before,a:after{pointer-events:none}abbr[title]{cursor:help;border-bottom:0;text-decoration:underline dotted}b,strong{font-weight:700}blockquote{font-size:var(--f-xl);border:1px solid #ccc;border-width:1px 5px;margin-left:2em;margin-right:2em;padding:1em;font-weight:300}code{font-family:var(--mono);font-size:var(--f-sm);font-weight:400!important}:not(pre)>code{color:#00abc0;white-space:nowrap;vertical-align:middle;border:1px solid #f1f1f1;padding:4px 5px}del,strike{text-decoration:line-through}em,i{font-style:italic}h1,h2,h3,h4,h5,h6{text-align:left;font-weight:200;display:block}h1{font-size:var(--f-h1)}h2{font-size:var(--f-h2)}h3,h4,h5,h6{font-size:var(--f-md);font-weight:700}img,svg{width:100%;height:auto;display:block}svg:not(:root){overflow:hidden}ol{list-style:decimal}ul{list-style:outside}ol,ul{padding-left:2em}li{display:list-item}li+li{margin-top:.5em}pre{overflow-x:auto}pre code{overflow-wrap:normal;white-space:pre}sub,sup{font-size:80%}sub{vertical-align:sub}sup{vertical-align:super}table{border-collapse:collapse;border-bottom:1px solid #9b59b6}th,td{text-align:left;border-top:1px solid #9b59b6;border-left:1px solid #9b59b64d;padding:15px}th:first-child,td:first-child{border-left-color:#9b59b6}th:last-child,td:last-child{border-right:1px solid #9b59b6}th{color:#9b59b6;font-size:var(--f-sm);font-weight:700}[hidden]{display:none!important}.fg-black{color:#333}.fg-blue{color:#00abc0}.fg-green{color:#2ecc71}.fg-grey{color:#ccc}.fg-orange{color:#e67e22}.fg-pink{color:#ff3596}.fg-purple{color:#9b59b6}.fg-red{color:#e74c3c}.fg-teal{color:#1abc9c}.fg-white{color:#fff}.fg-yellow{color:#fff200}.fg-trans{color:#0000}.hfg-black:hover,.hfg-black:active,.hfg-black:focus{color:#333}.hfg-blue:hover,.hfg-blue:active,.hfg-blue:focus{color:#00abc0}.hfg-green:hover,.hfg-green:active,.hfg-green:focus{color:#2ecc71}.hfg-grey:hover,.hfg-grey:active,.hfg-grey:focus{color:#ccc}.hfg-orange:hover,.hfg-orange:active,.hfg-orange:focus{color:#e67e22}.hfg-pink:hover,.hfg-pink:active,.hfg-pink:focus{color:#ff3596}.hfg-purple:hover,.hfg-purple:active,.hfg-purple:focus{color:#9b59b6}.hfg-red:hover,.hfg-red:active,.hfg-red:focus{color:#e74c3c}.hfg-teal:hover,.hfg-teal:active,.hfg-teal:focus{color:#1abc9c}.hfg-white:hover,.hfg-white:active,.hfg-white:focus{color:#fff}.hfg-yellow:hover,.hfg-yellow:active,.hfg-yellow:focus{color:#fff200}.hfg-trans:hover,.hfg-trans:active,.hfg-trans:focus{color:#0000}.bg-black{background-color:#333}.bg-blue{background-color:#00abc0}.bg-green{background-color:#2ecc71}.bg-grey{background-color:#ccc}.bg-orange{background-color:#e67e22}.bg-pink{background-color:#ff3596}.bg-purple{background-color:#9b59b6}.bg-red{background-color:#e74c3c}.bg-teal{background-color:#1abc9c}.bg-white{background-color:#fff}.bg-yellow{background-color:#fff200}.bg-trans{background-color:#0000}.hbg-black:hover,.hbg-black:active,.hbg-black:focus{background-color:#333}.hbg-blue:hover,.hbg-blue:active,.hbg-blue:focus{background-color:#00abc0}.hbg-green:hover,.hbg-green:active,.hbg-green:focus{background-color:#2ecc71}.hbg-grey:hover,.hbg-grey:active,.hbg-grey:focus{background-color:#ccc}.hbg-orange:hover,.hbg-orange:active,.hbg-orange:focus{background-color:#e67e22}.hbg-pink:hover,.hbg-pink:active,.hbg-pink:focus{background-color:#ff3596}.hbg-purple:hover,.hbg-purple:active,.hbg-purple:focus{background-color:#9b59b6}.hbg-red:hover,.hbg-red:active,.hbg-red:focus{background-color:#e74c3c}.hbg-teal:hover,.hbg-teal:active,.hbg-teal:focus{background-color:#1abc9c}.hbg-white:hover,.hbg-white:active,.hbg-white:focus{background-color:#fff}.hbg-yellow:hover,.hbg-yellow:active,.hbg-yellow:focus{background-color:#fff200}.hbg-trans:hover,.hbg-trans:active,.hbg-trans:focus{background-color:#0000}.frame{flex-direction:column;justify-content:flex-start;align-items:flex-start;min-height:100dvh;display:flex}.frame>*{width:100%}.wrapper{width:100%;max-width:var(--wrapper-w,1200px);padding-left:var(--gap);padding-right:var(--gap);margin-left:auto;margin-right:auto}.i-b{aspect-ratio:330.056/495.558}.i-blobfolio{aspect-ratio:832.016/217.885}.i-rss{aspect-ratio:402.041/402.001}.i-up{aspect-ratio:15.55/9.195}.wysiwyg{letter-spacing:.025em;gap:1.5em;line-height:1.5;display:grid}.wysiwyg a{font-weight:700}.wysiwyg a:not(.fg-black):not(.fg-blue):not(.fg-green):not(.fg-grey):not(.fg-orange):not(.fg-purple):not(.fg-red):not(.fg-teal):not(.fg-white):not(.fg-yellow):not(.fg-trans){color:#ff3596}.wysiwyg a:not(.hfg-black):not(.hfg-green):not(.hfg-grey):not(.hfg-orange):not(.hfg-pink):not(.hfg-purple):not(.hfg-red):not(.hfg-teal):not(.hfg-white):not(.hfg-yellow):not(.hfg-trans):hover,.wysiwyg a:not(.hfg-black):not(.hfg-green):not(.hfg-grey):not(.hfg-orange):not(.hfg-pink):not(.hfg-purple):not(.hfg-red):not(.hfg-teal):not(.hfg-white):not(.hfg-yellow):not(.hfg-trans):active,.wysiwyg a:not(.hfg-black):not(.hfg-green):not(.hfg-grey):not(.hfg-orange):not(.hfg-pink):not(.hfg-purple):not(.hfg-red):not(.hfg-teal):not(.hfg-white):not(.hfg-yellow):not(.hfg-trans):focus{color:#00abc0}.wysiwyg h1{text-align:center}.wysiwyg h1:not(:last-child){margin-bottom:1em}.wysiwyg h2:not(:first-child){margin-top:1em}.wysiwyg bar-chart{font-size:var(--f-md);margin:1.5em 0}.footnotes{margin-top:var(--gap);font-size:80%}.footnotes ol,.footnotes ul{gap:var(--gap);display:grid}.footnotes ol li,.footnotes ul li{width:fit-content;margin-top:0}.footnotes:before{content:"-----";color:#ccc;padding-bottom:var(--nudge);display:block}.footnotes li:target{position:relative}.footnotes li:target:before{content:"";pointer-events:none;z-index:-1;background-color:#fff200;width:calc(2em + 5px);height:2em;position:absolute;top:-2px;left:-2em;rotate:-6deg}.markdown-alert{gap:var(--nudge);padding:var(--nudge);border:5px solid var(--accent,#ccc);display:grid}.markdown-alert-caution{--accent:#e67e22}.markdown-alert-important{--accent:#fff200;--title:#333}.markdown-alert-note{--accent:#00abc0}.markdown-alert-tip{--accent:#1abc9c}.markdown-alert-warning{--accent:#e74c3c}.markdown-alert-title{margin:calc(-1*var(--nudge))0 0 calc(-1*var(--nudge));width:fit-content;padding:calc(var(--nudge)/2)var(--nudge);color:var(--title,white);font-size:var(--f-sm);background-color:var(--accent,#ccc);font-weight:700}body:not(.home) *{scroll-margin-top:50px}header{--nav-h:50px;background:#fff url(/assets/header-1920.avif) 50%/cover no-repeat;height:400px;position:relative}#header-marker{left:0;bottom:var(--nav-h);pointer-events:none;width:100%;height:1px;position:absolute}.header-logo{width:100%;height:calc(100% - var(--nav-h));padding:var(--gap);justify-content:center;align-items:center;display:flex}.header-logo>span{display:none}.header-logo>a{width:100%;max-width:600px}.header-logo svg{stroke:#fffc;stroke-width:1px}.header-links{width:100%;height:var(--nav-h);z-index:9999;background-color:#333333e6;min-width:400px}.header-links>.wrapper{--wrapper-w:1000px;justify-content:center;align-items:flex-start;height:100%;display:flex;position:relative}.header-link{width:fit-content;height:var(--nav-h);letter-spacing:.05em;text-transform:lowercase;transition:var(--t-fg),var(--t-bg),var(--t-opacity);justify-content:center;align-items:center;padding:0 20px;font-size:.875rem;font-weight:700;line-height:1;display:flex}.header-link.is-active{pointer-events:none}.header-link.is-active.about,.header-link.is-active.hosting,.header-link.is-active-child.about,.header-link.is-active-child.hosting{color:#333;background-color:#fff}.header-link.is-active.development,.header-link.is-active.blog,.header-link.is-active-child.development,.header-link.is-active-child.blog{background-color:#00abc0}.header-link.is-active.contact,.header-link.is-active.shh,.header-link.is-active-child.contact,.header-link.is-active-child.shh{background-color:#9b59b6}.header-link>svg{width:auto;height:.875rem}.header-link.top,.header-link.home{opacity:0;pointer-events:none;position:absolute;top:0}.header-link.top{padding:0 var(--gap)0 0;right:0}.header-link.home{padding:0 0 0 var(--gap);left:0}body.is-sticky .header-links{position:fixed;top:0;left:0}body.is-sticky .header-link.top{opacity:1;pointer-events:auto}main{flex:auto}footer{padding:var(--gap3x)0;letter-spacing:.05em;background:#fff url(/assets/footer-1920.avif) top/cover no-repeat;font-size:.875rem;font-weight:700;line-height:1.3}footer>.wrapper{--wrapper-w:640px;align-items:center;gap:var(--gap);grid-template-columns:1fr 100px 1fr;display:grid}.footer-copyright{text-align:right}.footer-copyright:before{content:"©";display:inline-block;transform:rotate(180deg)}.footer-logo{width:100px;height:100px;transition:var(--t-fg),var(--t-bg);border-radius:50%;padding:20px}.footer-logo>svg{width:100%;height:100%}.footer-privacy{text-wrap:balance}.post{--wrapper-w:900px;margin-top:var(--gap3x);margin-bottom:var(--gap3x)}.post h1{text-wrap:balance}.post img{width:auto;max-width:100%}.post-box{--wrapper-w:600px;margin-bottom:var(--gap);font-size:var(--f-sm);font-family:var(--mono);line-height:1.4}.post-box-meta{width:100%}.post-box-image{background:#fff url(/home/about-josh.jpg) 50%/cover no-repeat}.post-box-name{font-family:var(--sans);font-size:var(--f-lg)}@media only screen and (max-width:74.9375em){:root{--f-h1:2rem;--f-h2:1.525rem;--f-xl:1.375rem;--f-lg:1.25rem}}@media only screen and (max-width:62.4375em){:root{--gap3x:60px}}@media only screen and (max-width:48.6875em){.header-link.rss{display:none}}@media only screen and (max-width:43.6875em){header{background-image:url(/assets/header-700.avif)}footer{background-image:url(/assets/footer-700.avif)}.header-link.inline:not(.contact){display:none}body.is-sticky .header-link.home{opacity:1;pointer-events:auto}}@media only screen and (max-width:37.4375em){footer>.wrapper{flex-direction:column;display:flex}.footer-logo{order:0}.footer-copyright{text-shadow:1px 1px 5px #fff,1px -1px 5px #fff,-1px 1px 5px #fff,-1px -1px 5px #fff;order:1}.footer-privacy{display:none}}