:root{line-height:1.6;font-family:"IBM Plex Mono",monospace;color:var(--THEME_COLOR,#fff);background:var(--THEME_BACKGROUND,#000)}@media (min-width:800px) and (min-height:500px){:root{font-size:1.375rem}}*{box-sizing:border-box;background-color:inherit;font-family:inherit;color:inherit;overflow-wrap:break-word;margin:0;padding:0}:after,:before{box-sizing:inherit}body,dd,dl,dt,figcaption,figure,h1,h2,h3,h4,li,ol,p,ul{margin:0;padding:0}body{-ms-overflow-style:-ms-autohiding-scrollbar;scroll-behavior:smooth;font-size:inherit;min-height:100vh}a{text-decoration:underline;text-underline-offset:.3rem;text-decoration-thickness:.2rem;text-decoration-skip-ink:auto;cursor:pointer;text-decoration-color:var(--THEME_UNDERLINE,#000)}a:active,a:focus{color:var(--THEME_HOVER/20,#000)}input::-webkit-input-placeholder,select::-webkit-input-placeholder,textarea::-webkit-input-placeholder{line-height:normal}img{max-width:100%;margin:0!important}img[data-onpage]{margin-top:2rem!important}@media (prefers-reduced-motion:reduce){*{animation-play-state:paused!important;transition:none!important;scroll-behavior:auto!important}}[tabindex="-1"]:focus{outline:0}.mermaid span{font-family:"IBM Plex Mono",monospace!important}@media (prefers-color-scheme:dark){.mermaid .label-container,.mermaid rect{fill:transparent!important;stroke:#ececec!important}.mermaid span{fill:transparent!important;color:#ececec!important}.mermaid .edgeLabel{background-color:rgba(0,0,0,.1)!important}.node path{fill:transparent!important;stroke:#fff!important}}.h1,.h2,.h3,.h4,h1,h2,h3,h4{line-height:calc(1.4 * .8);font-family:"IBM Plex Mono",monospace;font-weight:700;hyphens:none}.h1,h1{font-size:3.8416rem;font-weight:700}.h2,h2{font-size:2.744rem}.h3,h3{font-size:1.96rem}.h4,h4{font-size:1.4rem}.h5,h5{font-size:1rem}ol:not([class]),ul:not([class]){padding-left:1.5em}li:not([class]){padding-left:.25em}blockquote{margin-left:1em;padding-left:1em;border-left:solid 5px #767676;font-style:italic}table{border-collapse:collapse}td,th{border:solid 1px #767676;text-align:left;padding:.25em .75em}code:not([class]),pre:not([class]){display:inline-block;font-size:.85rem;font-family:Consolas,Monaco,"Andale Mono","Ubuntu Mono",monospace;background:var(--COLOR_LIGHTER);border-radius:.4rem}pre:not([class]){min-width:300px;padding:5px 10px}code:not([class]){padding:0 5px}pre:not([class]) code:not([class]){font-size:.85rem;font-family:inherit;background:0 0;border:none;padding:0}pre{padding:1.96rem}pre code{background:0 0}.visually-hidden{clip:rect(0 0 0 0);height:auto;margin:0;overflow:hidden;padding:0;position:absolute;width:1px;white-space:nowrap}.skip-content:focus{top:0;border:0;clip:unset;height:auto;margin:0;overflow:visible;padding:0;width:auto;white-space:wrap}.invert-link{text-decoration:none}.invert-link:focus,.invert-link:hover{text-decoration:underline}.theme-bg{background:var(--THEME_BACKGROUND,#fff)}.theme-color{color:var(--THEME_COLOR,#000)}.hero{border-radius:1.6rem;background-size:cover}@media (prefers-reduced-motion:no-preference){.hero{animation-name:move-background;animation-duration:60s;animation-iteration-count:infinite;animation-timing-function:ease}}@media (max-width:800px){.hero{display:flex;justify-content:center;align-items:center;border-radius:0;border:0;min-height:55vh}}@keyframes move-background{0%{background-position:center}50%{background-position:top}100%{background-position:center}}.theme-hightlight{color:var(--THEME_HIGHTLIGHT,#ff0)}code[class*=language-],pre[class*=language-]{color:#4f2f4f;background:0 0;font-family:Consolas,Monaco,"Andale Mono","Ubuntu Mono",monospace;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;font-size:.7142857143rem;border-radius:.4rem;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}code[class*=language-] ::-moz-selection,code[class*=language-]::-moz-selection,pre[class*=language-] ::-moz-selection,pre[class*=language-]::-moz-selection{text-shadow:none;background:#fff}code[class*=language-] ::selection,code[class*=language-]::selection,pre[class*=language-] ::selection,pre[class*=language-]::selection{background:#fff}pre[class*=language-]{padding:1em;overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:#fbfbfb}@media (prefers-color-scheme:dark){:not(pre)>code[class*=language-],pre[class*=language-]{background:#444}}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.comment{color:#5f395f}.token.prolog{color:#4f2f4f}.token.doctype{color:#4f2f4f}.token.cdata{color:#4f2f4f}.token.punctuation{color:#5f5239}.token.namespace{color:#4f2f4f}.token.property{color:#855050}.token.tag{color:#4f2f4f}.token.boolean{color:#4f2f4f}.token.constant{color:#4f2f4f}.token.symbol{color:#4f2f4f}.token.deleted{color:#4f2f4f}.token.selector{color:#727272}.token.attr-name{color:#4f2f4f}.token.string{color:#4f2f4f}.token.char{color:#4f2f4f}.token.builtin{color:#4f2f4f}.token.inserted{color:#4f2f4f}.token.number{color:#0d090f}.token.operator{color:#855050}.token.entity{color:#4f2f4f}.token.url{color:#4f2f4f}.token.atrule{color:#4f2f4f}.token.attr-value{color:#855050}.token.keyword{color:#727272}.token.function{color:#4f2f4f}.token.class-name{color:#4f2f4f}.token.regex{color:#0d090f}.token.important{color:#4f2f4f}.token.variable{color:#4f2f4f}.token.entity{color:#4f2f4f;cursor:help}.important{color:#4f2f4f}.token.bold{font-weight:700}.token.italic{font-style:italic}.language-css .style .string,.language-css .token .string{color:#4f2f4f}.l-container{--container-margin:40px;background:0 0}@media (min-width:800px){.l-container{--container-margin:100px}}.l-container{margin:0 var(--container-margin)}.l-measure{max-width:67ch}.l-jumbo{padding:6rem 0;display:flex;flex-direction:column;align-items:center;justify-content:center}@media (max-width:800px){.l-jumbo{text-align:center;padding:0 1rem}.l-jumbo h1{line-height:1;font-size:3.8416rem}.l-navigation{justify-content:space-between}}.l-jumbo h1{letter-spacing:-.15rem;color:var(--THEME_HIGHLIGHT)}.l-jumbo>*+*{margin-top:1rem;max-width:50ch}.l-pagination{margin:4rem 0 2rem 0;display:flex;justify-content:space-between;align-items:center}.l-pagination--right{justify-content:flex-end}.l-pagination-link{display:flex;align-items:center}.l-pagination-link>*{flex-shrink:0;line-height:0}.l-pagination-link--right>:last-child{width:24px;flex-basis:24px;margin-left:.5rem}.l-pagination-link--left>:first-child{width:24px;flex-basis:24px;margin-right:.5rem}footer{margin-top:5rem!important;background-color:#fafafa}@media (prefers-color-scheme:dark){footer{background-color:rgba(0,0,0,.2)}}.l-site-footer{margin-top:1rem;padding:2rem 0 3rem 0}.l-site-footer-split{display:flex;justify-content:space-between;padding:1rem 0 1.5rem 0}.l-site-footer-split>*{flex-grow:0}.l-site-footer-split>:first-child{flex-basis:100%;font-size:.7142857143rem;text-align:center}.powered-by{text-align:center;font-size:.7142857143rem}.email{text-align:center;font-size:.7142857143rem;color:var(--COLOR_DARK)}.go-portfolio{text-align:center;padding-top:2rem}.call-to-action{border:.1rem solid currentColor;padding:.35rem .9rem;border-radius:9999px;text-decoration:none;font-size:.75rem}.site-signature{width:80px;height:auto;margin:1rem auto}@media (prefers-color-scheme:dark){.site-signature{filter:invert(1)}}.site-logo-footer{width:48px;height:48px;margin-bottom:1rem;object-fit:contain}.powered-by-container{display:flex;align-items:center;justify-content:center;gap:1rem;font-size:.8rem}.powered-by-container .powered-by{text-align:left;margin:0}.powered-by-container .site-signature{margin:0;width:100px;height:auto}.l-stack{display:block}.l-stack>*+*{margin-top:1rem}.l-stack--large>*+*{margin-top:2rem}.l-description{font-weight:500}.l-first{text-transform:uppercase;letter-spacing:.2rem}.l-second{text-align:center;color:var(--COLOR_DARK)}@media (max-width:800px){.l-first{font-size:1.4rem}.l-second{font-size:1.4rem}}.l-form-row>*{display:block}.l-form-row>*+*{margin-top:.25rem}.input{display:inline-block;width:100%;height:2em;font-size:1rem;padding:.25rem .5rem;line-height:1.5;background-color:#fff;border:1px solid #ccc;border-radius:2px}.textarea{display:inline-block;width:100%;min-height:10em;font-size:1rem;padding:.25rem .5rem;line-height:1.5;background-color:#fff;border:1px solid #ccc;border-radius:2px}.button{display:inline-block;font-size:1rem;padding:.25rem .5rem;line-height:1.5;background-color:#fff;border:1px solid #ccc;border-radius:2px}.button:hover{background-color:#eaeaea;cursor:pointer}.t-page .l-stack>p>img{margin-top:1rem;margin-bottom:1rem}.l-stack img{border-radius:.6rem}.t-page .l-stack>blockquote,.t-page .l-stack>img,.t-page .l-stack>ol,.t-page .l-stack>pre,.t-page .l-stack>table{margin-top:2rem;margin-bottom:2rem}.t-page .l-stack>ul{margin-bottom:2rem}.l-stack>.h1,.l-stack>.h2,.l-stack>.h3,.l-stack>.h4,.l-stack>.h5,.l-stack>h1,.l-stack>h2,.l-stack>h3,.l-stack>h4,.l-stack>h5{margin-top:2rem}.l-post-list>*{max-width:60ch}.l-post-list>*+*{margin-top:2rem}.l-post-intro{padding:2.8rem 0 1.6rem 0;display:flex;flex-direction:column;align-items:flex-start;justify-content:center}.l-post-intro h1{letter-spacing:-.1rem}.l-post-intro>*+*{margin-top:1rem}.post-description{font-weight:400;font-size:1.4rem}.post-meta{color:var(--COLOR_MID);font-size:1rem}.read-more{text-decoration:underline;font-size:.7142857143rem}.read-more:focus,.read-more:hover{text-decoration:none}.l-site-head{font-size:.875rem!important;--site-head-flex-basis:100%;--site-head-margin-top:1rem}@media (min-width:600px){.l-site-head>*{--site-head-flex-basis:0;--site-head-margin-top:0}}.l-site-head{font-size:.875rem!important;display:flex;justify-content:space-between;align-items:center;padding:1rem 0;flex-wrap:wrap}.site-title{font-size:.875rem!important}.l-site-head>*+*{margin-top:var(--site-head-margin-top)}@media (max-width:800px){.l-site-head{margin:0;font-size:.875rem!important}.l-site-head nav{margin:0}}.l-navigation{display:flex}.l-navigation>*{white-space:pre}.l-navigation>*+*{margin-left:.5rem}.l-navigation>*+::before{content:"/";margin-right:.5rem;opacity:.4}.l-navigation a{text-decoration:underline;text-decoration-color:var(--THEME_UNDERLINE);font-size:.9rem}@media (min-width:800px){.l-navigation a{font-size:.75rem}}.l-navigation a:hover{color:var(--THEME_HOVER,#000)}.navigation{list-style:none}.l-footer-nav{--footer-nav-display:none}@media (min-width:1000px){.l-footer-nav{--footer-nav-display:block}}.l-footer-nav{display:var(--footer-nav-display)}@media (min-width:600px){.l-post-stack{--l-stack-flex-basis:calc(50% - 50px)}}.l-post-stack{margin-top:0;display:flex;flex-wrap:wrap;justify-content:space-between}.l-post-stack>*{margin-top:3rem;flex-basis:var(--l-stack-flex-basis,100%);flex-shrink:0}.post-stack-item{list-style:none}.post-stack-item *+*{margin-top:.25rem}.post-stack-date{font-size:.7142857143rem;color:var(--COLOR_DARK)}.l-site-name{display:flex;align-items:center;justify-content:center;gap:.5rem}.l-site-name>*{flex-shrink:0}.site-logo{width:32px;height:32px;object-fit:contain}@media (max-width:800px){.l-site-name{display:none}}.l-page{max-width:1200px;margin:0 auto 0 auto}.l-post-footer{display:flex;justify-content:space-between;align-items:flex-start}.l-post-tags{list-style:none;display:flex;flex-wrap:wrap}.post-tag{display:inline-block;padding:5px 10px;font-size:.8em;background:var(--COLOR_LIGHTER);border:solid 1px #ccc;text-decoration:none;margin-right:5px;margin-bottom:10px;border-radius:.4rem}.post-tag:focus,.post-tag:hover{text-decoration:underline}.site-title{font-size:1rem;line-height:1.625rem}