.ml-2{margin-left:0.5rem}.font-italic{font-style:italic}.mb-0{margin-bottom:0rem !important}.post-list>li{font-size:1rem}@media (prefers-color-scheme: dark){.show-light-mode-only{display:none}}@media (prefers-color-scheme: light){.show-dark-mode-only{display:none}}.project-item{display:flex;gap:1rem;justify-content:space-between}hr{margin-bottom:1rem !important}body,h1,h2,h3,h4,h5,h6,p,blockquote,pre,hr,dl,dd,ol,ul,figure{margin:0;padding:0}:root{--code-font-size: 14px;--text-color: rgb(29, 29, 31);--background-color: #ffff;--code-background-color: #f2f2f2;--link-color: #06c;--link-visited-color: rgb(112, 0, 177)}@media (prefers-color-scheme: dark){:root{--text-color: rgb(231, 232, 235);--background-color: #2d2d2d;--code-background-color: #222024;--link-color: rgb(90, 200, 250);--link-visited-color: #f5a6ff}}body{font:400 16px/1.5 -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";color:var(--text-color);background-color:var(--background-color);-webkit-text-size-adjust:100%;-webkit-font-feature-settings:"kern" 1;-moz-font-feature-settings:"kern" 1;-o-font-feature-settings:"kern" 1;font-feature-settings:"kern" 1;font-kerning:normal;display:flex;min-height:100vh;flex-direction:column}h1,h2,h3,h4,h5,h6,p,blockquote,pre,ul,ol,dl,figure{margin-bottom:15px}main{display:block}img{max-width:100%;vertical-align:middle;background:white}figure>img{display:block}figcaption{font-size:16px}ul,ol{margin-left:30px}li>ul,li>ol{margin-bottom:0}h1,h2,h3,h4,h5,h6{font-weight:400}h1>code,h2>code,h3>code,h4>code,h5>code,h6>code{font-size:inherit}a{color:var(--link-color);text-decoration:none}a:visited{color:var(--link-visited-color)}a:hover{text-decoration:underline}.social-media-list a:hover{text-decoration:none}.social-media-list a:hover .username{text-decoration:underline}blockquote{border-left:4px solid #e8e8e8;padding-left:15px}blockquote>:last-child{margin-bottom:0}pre,code{border-radius:3px;background-color:var(--code-background-color)}code{font-size:var(--code-font-size);padding:1px 5px}pre{padding:8px 12px;overflow-x:auto}pre>code{border:0;padding-right:0;padding-left:0}.wrapper{max-width:-webkit-calc(800px - (30px * 2));max-width:calc(800px - (30px * 2));margin-right:auto;margin-left:auto;padding-right:30px;padding-left:30px}@media screen and (max-width: 800px){.wrapper{max-width:-webkit-calc(800px - (30px));max-width:calc(800px - (30px));padding-right:15px;padding-left:15px}}.wrapper:after,.footer-col-wrapper:after{content:"";display:table;clear:both}.svg-icon{width:16px;height:16px;display:inline-block;fill:currentColor;padding-right:5px;vertical-align:text-top}.social-media-list li+li{padding-top:5px}table{margin-bottom:30px;width:100%;text-align:left;border-collapse:collapse;border:1px solid #e8e8e8}table th,table td{padding:10px 15px}table th{border:1px solid #dedede;border-bottom-color:#c9c9c9}table td{border:1px solid #e8e8e8}.site-title{font-size:26px;font-weight:300;line-height:54px;letter-spacing:-1px;margin-bottom:0;float:left}.site-title,.site-title:visited{color:var(--text-color)}.site-footer{padding:30px 0}.footer-heading{font-size:18px;margin-bottom:15px}.contact-list,.social-media-list{list-style:none;margin-left:0}.footer-col-wrapper{font-size:16px;color:#828282;margin-left:-15px}.footer-col{float:left;margin-bottom:15px;padding-left:15px}.footer-col-1{width:-webkit-calc(35% - (30px / 2));width:calc(35% - (30px / 2))}.footer-col-2{width:-webkit-calc(20% - (30px / 2));width:calc(20% - (30px / 2))}.footer-col-3{width:-webkit-calc(45% - (30px / 2));width:calc(45% - (30px / 2))}@media screen and (max-width: 800px){.footer-col-1,.footer-col-2{width:-webkit-calc(50% - (30px / 2));width:calc(50% - (30px / 2))}.footer-col-3{width:-webkit-calc(100% - (30px / 2));width:calc(100% - (30px / 2))}}@media screen and (max-width: 600px){.footer-col{float:none;width:-webkit-calc(100% - (30px / 2));width:calc(100% - (30px / 2))}}.page-content{padding:30px 0;flex:1}.page-heading{font-size:32px}.post-list-heading{font-size:28px}.post-list{margin-left:0;list-style:none}.post-list>li{margin-bottom:30px}.post-meta{font-size:16px;color:#828282}.post-link{display:block;font-size:24px}.post-header{margin-bottom:30px}.post-title{font-size:42px;letter-spacing:-1px;line-height:1}@media screen and (max-width: 800px){.post-title{font-size:36px}}.post-content{margin-bottom:30px}.post-content h2{font-size:32px}@media screen and (max-width: 800px){.post-content h2{font-size:28px}}.post-content h3{font-size:26px}@media screen and (max-width: 800px){.post-content h3{font-size:22px}}.post-content h4{font-size:20px}@media screen and (max-width: 800px){.post-content h4{font-size:18px}}code{font-family:ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono"}.highlight .hll{background-color:#ffffcc}.highlight .c{color:#8f5902;font-style:italic}.highlight .err{color:#a40000;border:1px solid #ef2929}.highlight .g{color:#000000}.highlight .k{color:#204a87;font-weight:bold}.highlight .l{color:#000000}.highlight .n{color:#000000}.highlight .o{color:#ce5c00;font-weight:bold}.highlight .x{color:#000000}.highlight .p{color:#000000;font-weight:bold}.highlight .cm{color:#8f5902;font-style:italic}.highlight .cp{color:#8f5902;font-style:italic}.highlight .c1{color:#8f5902;font-style:italic}.highlight .cs{color:#8f5902;font-style:italic}.highlight .gd{color:#a40000}.highlight .ge{color:#000000;font-style:italic}.highlight .gr{color:#ef2929}.highlight .gh{color:#000080;font-weight:bold}.highlight .gi{color:#00a000}.highlight .go{color:#000000;font-style:italic}.highlight .gp{color:#8f5902}.highlight .gs{color:#000000;font-weight:bold}.highlight .gu{color:#800080;font-weight:bold}.highlight .gt{color:#a40000;font-weight:bold}.highlight .kc{color:#204a87;font-weight:bold}.highlight .kd{color:#204a87;font-weight:bold}.highlight .kn{color:#204a87;font-weight:bold}.highlight .kp{color:#204a87;font-weight:bold}.highlight .kr{color:#204a87;font-weight:bold}.highlight .kt{color:#204a87;font-weight:bold}.highlight .ld{color:#000000}.highlight .m{color:#0000cf;font-weight:bold}.highlight .s{color:#4e9a06}.highlight .na{color:#c4a000}.highlight .nb{color:#204a87}.highlight .nc{color:#000000}.highlight .no{color:#000000}.highlight .nd{color:#5c35cc;font-weight:bold}.highlight .ni{color:#ce5c00}.highlight .ne{color:#cc0000;font-weight:bold}.highlight .nf{color:#000000}.highlight .nl{color:#f57900}.highlight .nn{color:#000000}.highlight .nx{color:#000000}.highlight .py{color:#000000}.highlight .nt{color:#204a87;font-weight:bold}.highlight .nv{color:#000000}.highlight .ow{color:#204a87;font-weight:bold}.highlight .w{color:#f8f8f8}.highlight .mf{color:#0000cf;font-weight:bold}.highlight .mh{color:#0000cf;font-weight:bold}.highlight .mi{color:#0000cf;font-weight:bold}.highlight .mo{color:#0000cf;font-weight:bold}.highlight .sb{color:#4e9a06}.highlight .sc{color:#4e9a06}.highlight .sd{color:#8f5902;font-style:italic}.highlight .s2{color:#4e9a06}.highlight .se{color:#4e9a06}.highlight .sh{color:#4e9a06}.highlight .si{color:#4e9a06}.highlight .sx{color:#4e9a06}.highlight .sr{color:#4e9a06}.highlight .s1{color:#4e9a06}.highlight .ss{color:#4e9a06}.highlight .bp{color:#3465a4;font-weight:bold}.highlight .vc{color:#000000}.highlight .vg{color:#000000}.highlight .vi{color:#000000}.highlight .il{color:#0000cf;font-weight:bold}.theme-dark .highlight{background:#202020;color:#d0d0d0}.theme-dark .highlight .hll{background-color:#404040}.theme-dark .highlight .c{color:#999999;font-style:italic}.theme-dark .highlight .err{color:#a61717;background-color:#e3d2d2}.theme-dark .highlight .esc{color:#d0d0d0}.theme-dark .highlight .g{color:#d0d0d0}.theme-dark .highlight .k{color:#6ab825;font-weight:bold}.theme-dark .highlight .l{color:#d0d0d0}.theme-dark .highlight .n{color:#d0d0d0}.theme-dark .highlight .o{color:#d0d0d0}.theme-dark .highlight .x{color:#d0d0d0}.theme-dark .highlight .p{color:#d0d0d0}.theme-dark .highlight .ch{color:#999999;font-style:italic}.theme-dark .highlight .cm{color:#999999;font-style:italic}.theme-dark .highlight .cp{color:#cd2828;font-weight:bold}.theme-dark .highlight .cpf{color:#999999;font-style:italic}.theme-dark .highlight .c1{color:#999999;font-style:italic}.theme-dark .highlight .cs{color:#e50808;font-weight:bold;background-color:#520000}.theme-dark .highlight .gd{color:#d22323;color:#d2a8a7}.theme-dark .highlight .ge{color:#d0d0d0;font-style:italic}.theme-dark .highlight .gr{color:#d22323}.theme-dark .highlight .gh{color:#ffffff;font-weight:bold}.theme-dark .highlight .gi{color:#589819}.theme-dark .highlight .go{color:#cccccc}.theme-dark .highlight .gp{color:#aaaaaa}.theme-dark .highlight .gs{color:#d0d0d0;font-weight:bold}.theme-dark .highlight .gu{color:#ffffff}.theme-dark .highlight .gt{color:#d22323}.theme-dark .highlight .kc{color:#6ab825;font-weight:bold}.theme-dark .highlight .kd{color:#6ab825;font-weight:bold}.theme-dark .highlight .kn{color:#6ab825;font-weight:bold}.theme-dark .highlight .kp{color:#6ab825}.theme-dark .highlight .kr{color:#6ab825;font-weight:bold}.theme-dark .highlight .kt{color:#6ab825;font-weight:bold}.theme-dark .highlight .ld{color:#d0d0d0}.theme-dark .highlight .m{color:#3677a9}.theme-dark .highlight .s{color:#ed9d13}.theme-dark .highlight .na{color:#bbbbbb}.theme-dark .highlight .nb{color:#24909d}.theme-dark .highlight .nc{color:#447fcf}.theme-dark .highlight .no{color:#40ffff}.theme-dark .highlight .nd{color:#ffa500}.theme-dark .highlight .ni{color:#d0d0d0}.theme-dark .highlight .ne{color:#bbbbbb}.theme-dark .highlight .nf{color:#447fcf}.theme-dark .highlight .nl{color:#d0d0d0}.theme-dark .highlight .nn{color:#447fcf}.theme-dark .highlight .nx{color:#d0d0d0}.theme-dark .highlight .py{color:#d0d0d0}.theme-dark .highlight .nt{color:#6ab825;font-weight:bold}.theme-dark .highlight .nv{color:#40ffff}.theme-dark .highlight .ow{color:#6ab825;font-weight:bold}.theme-dark .highlight .w{color:#666666}.theme-dark .highlight .mb{color:#3677a9}.theme-dark .highlight .mf{color:#3677a9}.theme-dark .highlight .mh{color:#3677a9}.theme-dark .highlight .mi{color:#3677a9}.theme-dark .highlight .mo{color:#3677a9}.theme-dark .highlight .sa{color:#ed9d13}.theme-dark .highlight .sb{color:#ed9d13}.theme-dark .highlight .sc{color:#ed9d13}.theme-dark .highlight .dl{color:#ed9d13}.theme-dark .highlight .sd{color:#ed9d13}.theme-dark .highlight .s2{color:#ed9d13}.theme-dark .highlight .se{color:#ed9d13}.theme-dark .highlight .sh{color:#ed9d13}.theme-dark .highlight .si{color:#ed9d13}.theme-dark .highlight .sx{color:#ffa500}.theme-dark .highlight .sr{color:#ed9d13}.theme-dark .highlight .s1{color:#ed9d13}.theme-dark .highlight .ss{color:#ed9d13}.theme-dark .highlight .bp{color:#24909d}.theme-dark .highlight .fm{color:#447fcf}.theme-dark .highlight .vc{color:#40ffff}.theme-dark .highlight .vg{color:#40ffff}.theme-dark .highlight .vi{color:#40ffff}.theme-dark .highlight .vm{color:#40ffff}.theme-dark .highlight .il{color:#3677a9}@media (prefers-color-scheme: dark){.highlight{background:#202020;color:#d0d0d0}.highlight .hll{background-color:#404040}.highlight .c{color:#999999;font-style:italic}.highlight .err{color:#a61717;background-color:#e3d2d2}.highlight .esc{color:#d0d0d0}.highlight .g{color:#d0d0d0}.highlight .k{color:#6ab825;font-weight:bold}.highlight .l{color:#d0d0d0}.highlight .n{color:#d0d0d0}.highlight .o{color:#d0d0d0}.highlight .x{color:#d0d0d0}.highlight .p{color:#d0d0d0}.highlight .ch{color:#999999;font-style:italic}.highlight .cm{color:#999999;font-style:italic}.highlight .cp{color:#cd2828;font-weight:bold}.highlight .cpf{color:#999999;font-style:italic}.highlight .c1{color:#999999;font-style:italic}.highlight .cs{color:#e50808;font-weight:bold;background-color:#520000}.highlight .gd{color:#d22323;color:#d2a8a7}.highlight .ge{color:#d0d0d0;font-style:italic}.highlight .gr{color:#d22323}.highlight .gh{color:#ffffff;font-weight:bold}.highlight .gi{color:#589819}.highlight .go{color:#cccccc}.highlight .gp{color:#aaaaaa}.highlight .gs{color:#d0d0d0;font-weight:bold}.highlight .gu{color:#ffffff}.highlight .gt{color:#d22323}.highlight .kc{color:#6ab825;font-weight:bold}.highlight .kd{color:#6ab825;font-weight:bold}.highlight .kn{color:#6ab825;font-weight:bold}.highlight .kp{color:#6ab825}.highlight .kr{color:#6ab825;font-weight:bold}.highlight .kt{color:#6ab825;font-weight:bold}.highlight .ld{color:#d0d0d0}.highlight .m{color:#3677a9}.highlight .s{color:#ed9d13}.highlight .na{color:#bbbbbb}.highlight .nb{color:#24909d}.highlight .nc{color:#447fcf}.highlight .no{color:#40ffff}.highlight .nd{color:#ffa500}.highlight .ni{color:#d0d0d0}.highlight .ne{color:#bbbbbb}.highlight .nf{color:#447fcf}.highlight .nl{color:#d0d0d0}.highlight .nn{color:#447fcf}.highlight .nx{color:#d0d0d0}.highlight .py{color:#d0d0d0}.highlight .nt{color:#6ab825;font-weight:bold}.highlight .nv{color:#40ffff}.highlight .ow{color:#6ab825;font-weight:bold}.highlight .w{color:#666666}.highlight .mb{color:#3677a9}.highlight .mf{color:#3677a9}.highlight .mh{color:#3677a9}.highlight .mi{color:#3677a9}.highlight .mo{color:#3677a9}.highlight .sa{color:#ed9d13}.highlight .sb{color:#ed9d13}.highlight .sc{color:#ed9d13}.highlight .dl{color:#ed9d13}.highlight .sd{color:#ed9d13}.highlight .s2{color:#ed9d13}.highlight .se{color:#ed9d13}.highlight .sh{color:#ed9d13}.highlight .si{color:#ed9d13}.highlight .sx{color:#ffa500}.highlight .sr{color:#ed9d13}.highlight .s1{color:#ed9d13}.highlight .ss{color:#ed9d13}.highlight .bp{color:#24909d}.highlight .fm{color:#447fcf}.highlight .vc{color:#40ffff}.highlight .vg{color:#40ffff}.highlight .vi{color:#40ffff}.highlight .vm{color:#40ffff}.highlight .il{color:#3677a9}}
