/*! tailwindcss v4.0.14 | MIT License | https://tailwindcss.com */
html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,embed,figure,figcaption,footer,header,hgroup,menu,nav,output,ruby,section,summary,time,mark,audio,video{vertical-align:baseline;border:0;margin:0;padding:0;font-size:100%}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}body{line-height:1}blockquote,q{quotes:none}blockquote:before,blockquote:after,q:before,q:after{content:none}table{border-collapse:collapse;border-spacing:0}*,:before,:after{box-sizing:border-box}.clearfix:after{content:"";clear:both;display:table}.hidden,.large-hidden{display:none}.post h1,h3,h4,h5,p,.post-body ul,ol,pre{margin-bottom:20px}html{-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}html,body{height:100%}body{color:#666;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;fill:currentColor;background-color:#efefef;padding-top:40px;font:16px/1 -apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol}.header-main-links{display:inline-block}.footer-main-links{display:none}h1{color:#222;font-size:24px;font-weight:700}h2{color:#666;font-size:19px;line-height:1.3em}.profile #wrapper{max-width:800px;margin:0 auto;padding:100px 40px 0}.profile #header{text-align:center;position:relative}.profile #avatar,.post #avatar{background-color:#fff;border-radius:50%;width:80px;height:80px;margin-bottom:20px;display:inline-block}.profile h1{color:#1a202c;font-size:24px;font-weight:600;line-height:1.4em}.profile h2{color:#aaa;font-size:20px;font-style:normal;font-weight:500}.shadow{box-shadow:0 4px 8px #00000026}nav.main-nav{z-index:100;background:#fff;justify-content:space-between;align-items:center;height:64px;display:flex;position:fixed;top:0;left:0;right:0}.main-nav .home a.title{color:#000;padding-left:20px;font-size:22px;font-weight:600}.main-nav .user-actions{color:#999}.main-nav .links span.link:last-child{margin-right:20px;font-size:14px}.pill,.pill-tag{color:#000;background-color:#ddd;border-radius:6px;padding:4px;font-size:10px}a.pill:hover,a.pill-tag:hover{color:#5694f1}#post-list .pill,#post-list .pill-tag{font-size:12px}.main-nav a.cta{color:#fff;background:#5badf0;border-radius:3px;margin-left:12px;padding:8px 12px;display:inline}#wrapper{max-width:800px;margin:0 auto;padding:60px 40px 100px}#wrapper.home{max-width:800px;margin:40px auto 0;padding:0 40px 20px}.home #avatar{float:right;border-radius:50%;width:40px;height:40px}a,#title,#post-list a:hover,#post-list a:hover h2,#post-list li:hover .dates,#post-list li:hover .tags,#title:hover{color:#5694f1;text-decoration:none}#post-list a:hover{color:#5694f1!important}p a,strong.external{color:#5694f1}a,#post-nav a,#post-list a{-o-transition:all .15s ease;transition:all .15s}ul,ol{margin:0 0 20px;padding:0}ul{list-style-type:disc}ol{list-style:decimal}li{margin-left:20px;list-style-position:outside}#post-body,p,td,li,.project-description{color:#1a202c;font-size:17px;line-height:1.7}b,strong{color:#1e2025;font-weight:700}em,i{font-style:italic}#title{margin:0;padding-bottom:20px;font-size:19px;font-weight:500;line-height:100%;display:inline-block}.description{float:right;color:#aaa;font:italic 14px/1.4em Georgia,serif}.home h1{color:#222;font-size:30px;font-weight:700}.home h2{color:#bbb;font:italic 19px/1.3em Georgia,serif}.post header{text-align:center}.post h1{color:#222;margin-bottom:0;font-size:24px;font-weight:600;line-height:1.4em}.post h2{color:#111;margin-bottom:0;font-size:18px;font-weight:600;line-height:1.5em}.post h2.subtitle{color:#bbb;font:italic 19px/1.3em Georgia,serif}.post h2.headline{color:#999;text-transform:none;margin:5px 0 0;font-size:13px;font-weight:400;line-height:2em;display:inline-block}#post-list h2,small{color:#999;max-width:400px;margin-top:2px;font-size:13px;font-weight:400;line-height:1.5em}h3,h4,h5{color:#1a202c}h3{font-size:20px;font-weight:500;line-height:1.5em}h4{font-size:16px;font-weight:700}h5{font-size:15px;font-weight:700}h6{color:#666;margin-bottom:6px;font-size:13px;font-weight:700}p.small{color:#999;text-align:center;margin-top:20px;font-size:14px;line-height:1.5;display:block}blockquote{background-color:#dedede;padding:15px;box-shadow:0 4px 8px #00000026}.external_link>blockquote blockquote{box-shadow:none;background-color:#d3d3d3;border-left:4px solid #bbb;padding:4px 4px 4px 12px}blockquote>p:last-child{margin-bottom:0}blockquote{margin-bottom:20px}hr{background:#bbb;border:none;height:1px;margin:40px auto;display:block}span.code{background-color:#ddd;font-family:Menlo,Monaco,Courier New,Courier,monospace;font-size:14px}h1 code{font-size:22px;font-weight:700}h2 code{font-size:19px;font-weight:700}table{border-collapse:collapse;width:100%;margin:40px 0;font-size:13px;line-height:1.5em}th,td{text-align:left;vertical-align:top;padding-right:20px}table td,td{border-spacing:none;padding:10px 15px}tr>td{border-bottom:1px solid #ddd}tr:nth-child(odd)>td{background:#ddd}thead th,th{text-align:left;color:#1a202c;cursor:default;white-space:nowrap;background-color:#ccc;border-bottom:1px solid #dadadc;height:20px;padding:10px 15px;font-size:13px;font-weight:700}img{width:100%;max-width:100%;height:auto}#badge{width:48px;height:48px;position:absolute;bottom:8px;right:8px}#post-list{margin-bottom:0}#post-list li{border-top:1px solid #ccc;padding-top:14px}.separator{padding-top:40px}#post-list li{margin-bottom:0;margin-left:0;padding-bottom:14px;list-style-type:none}#post-list li:last-child{border-bottom:1px solid #ccc}#post-list a{color:#1a202c;font:700 17px/1.7em Helvetica Neue,helvetica,Arial,sans-serif;display:block}#post-list a.tweet p{font-weight:400!important}#post-list a.tweet:hover p{color:#5694f1!important}#post-list .dates,#post-list .tags{float:right;color:#999;text-align:right;font:500 15px/1.8 Helvetica Neue,helvetica,Arial,sans-serif;display:inline;position:relative;top:1px}#post-list .dates_small{display:none}#post-list-footer{border-top:1px solid #eee;margin-top:20px;padding-top:100px}#archive-link{border-radius:4px;padding:3px 10px 6px;font-size:13px;font-weight:700;display:inline-block;box-shadow:0 0 0 1px #a2d0f6}#archive-link:hover{color:#fff;background:#5694f1;box-shadow:0 0 0 1px #5694f1}#archive-link span{font-size:17px;position:relative;top:0}#footer{padding:40px 0 0}#post-meta{color:#444;border-top:1px solid #eee;border-bottom:1px solid #eee;margin-top:40px;margin-bottom:40px;padding-top:40px;padding-bottom:40px;font-size:13px;font-weight:700;line-height:1.4}#post-meta div span{color:#aaa;font-weight:500;display:block}#post-meta div span.dark{color:#1e2025}#post-meta div{float:left;margin:0 25px 0 0}#sharing{float:right;margin:-2px}#sharing a{color:#d4d4d4;vertical-align:middle;margin-top:4px;margin-left:1px;font-size:23px;display:inline-block}#sharing a:hover{opacity:.8}#post-nav{justify-content:space-between;margin-top:20px;font-size:13px;font-weight:500;display:flex}#post-nav span{-o-transition:all .1s linear;transition:all .1s linear;position:relative}#post-nav span .arrow{padding:1px;position:relative}h1.archive{margin-bottom:0}h2.month{text-transform:uppercase;border-bottom:1px solid #eee;width:100%;margin-top:40px;margin-bottom:10px;padding-bottom:10px;font:700 13px/1 Helvetica Neue,helvetica,Arial,sans-serif}#post-meta img.avatar{float:left;border-radius:50%;width:36px;height:36px;margin-top:3px;margin-right:20px;box-shadow:0 0 0 3px #fff,0 0 0 4px #eee}#post-list.archive.readmore h3{margin-bottom:30px;font:400 20px Helvetica Neue,Helvetica,Arial,sans-serif}#post-list.archive.readmore a{color:#5694f1;font:400 16px/1.6 Helvetica Neue,helvetica,Arial,sans-serif}#post-list.archive.readmore a:hover{opacity:.8}#post-list.archive.readmore .dates{font:300 15px/1.6 Helvetica Neue,helvetica,Arial,sans-serif}#sharing a.facebook{background:#4361b3}#sharing a.twitter{background:#4fafed}#sharing a.instagram{background:#f55376}#sharing a.bluesky{background:#1083fe}#sharing a{color:#fff;border-radius:4px;margin-left:2px;padding:6px 10px;font-size:13px;font-weight:700}.sm-show{display:none}.bg-show{display:inline}@media screen and (width<=1000px){.main-nav .user-actions{display:none}body{padding-top:80px}.bg-show{display:none}.sm-show{display:inline}#wrapper{padding:20px}.post{margin:40px 0}.main-nav a.cta{width:100%;margin-left:0}#post-list{margin-top:0}#post-meta{margin-top:60px}#title{font-size:17px}#post-list .dates{display:none}#post-list .dates_small{float:none;text-align:left;margin-left:calc(20px + .5rem);display:block}#post-list .pill{background:0 0!important;padding:0!important}#post-list-footer{margin-top:20px;padding-top:40px}h1{font-size:26px}.post h2.headline{font-size:13px}.post h1{font-size:24px}.post h2{font-size:20px}div.project small{padding-top:8px;display:inline-block}.header-main-links{display:none}.footer-main-links{padding-top:0;padding-bottom:40px;display:block}.footer-main-links a{text-align:center;color:#5badf0;background:#ddd;border-radius:3px;margin-top:8px;padding:8px 12px;font-size:14px;line-height:1.35;display:block}.small-hidden{display:none}.large-hidden{display:inline}.main-nav .links{background-color:#efefef;padding:0;position:fixed;inset:80px 0 0}.main-nav .links-container{flex-direction:column;justify-content:center;max-height:100%;display:flex;overflow-y:scroll}.main-nav .links-container>div{max-height:100vh;overflow-y:scroll}.main-nav .links a.link{text-align:center;margin:0;padding:12px 0;font-size:22px;line-height:44px;display:block}.main-nav .links a.link span:not(:last-child){text-align:center;margin:0;font-size:18px;line-height:44px;display:block}.main-nav .links span.link:last-child{margin-right:0}.main-nav .links a.link:not(:last-child){border-bottom:1px solid #ccc}.main-nav .menu-button{margin-right:20px}.main-nav .menu-button svg{width:24px;height:24px}.small-block{overflow:hidden}.main-nav .links a.link{padding:20px;justify-content:space-between!important;align-items:center!important;padding-top:10px!important;padding-bottom:10px!important;line-height:normal!important;display:flex!important}.main-nav .links .link.cta{justify-content:center!important}}#social{fill:currentColor;flex-direction:row;justify-content:center;display:flex}#social a{fill:#efefef;background-color:#cdd4da;border:4px solid #cdd4da;border-radius:4px;width:32px;height:32px;margin-right:.5rem;text-decoration:none}#social a.facebook:hover{background-color:#1877f2;border-color:#1877f2}#social a.github:hover{background-color:#181717;border-color:#181717}#social a.linkedin:hover{background-color:#0077b5;border-color:#0077b5}#social a.twitter:hover{background-color:#1da1f2;border-color:#1da1f2}#social a.instagram:hover{background-color:#f55376;border-color:#f55376}#social a.bluesky:hover{background-color:#1083fe;border-color:#1083fe}#social a.strava:hover{background-color:#fc4c02;border-color:#fc4c02}#social a.komoot:hover{background-color:#6aa127;border-color:#6aa127}code{font-family:Menlo,Monaco,Courier New,Courier,monospace;font-size:14px;font-weight:700;line-height:1.7em}p code,li code{background-color:#ddd;border:2px solid #ddd;display:inline-block}pre code{background:0 0!important;border:none!important}.highlight code{background:0 0!important}.center,.text-center{text-align:center}.right,.text-right{text-align:right}.bottom{vertical-align:bottom}.strong{font-weight:700}.apps img{border-style:solid;border-width:0;border-radius:22.544%;width:85px;height:85px}#projects .project{margin-bottom:24px}.project h2,.badges{margin-bottom:8px;font-weight:600}.project-description+small{display:inline-block;margin-top:8px!important}.badges{padding-top:8px;padding-bottom:0}div.badges a{display:inline!important}#post-body h1,#post-body h2{margin-bottom:.83em}#post-body.reading-list h2{margin-top:2.5em;margin-bottom:0}#post-body.reading-list h2:first-of-type,#post-body.reading-list p.hashtags{margin-top:0}.post-tags{flex-wrap:wrap;justify-content:center;gap:20px 10px;margin:10px;padding-top:10px;display:flex}.http-error,.http-error h1{color:#8b0000!important;font-weight:700!important}.http-error{flex-direction:column;gap:20px;padding:120px 0;display:flex}li.not-published{background-color:#ffeaeb;border-left:4px solid #ffeaeb;border-right:4px solid #ffeaeb}#search{padding-top:30px;padding-bottom:10px}.detail{padding-top:30px}#search form{border-radius:12px}#search button{float:right;cursor:pointer;background:#ddd;border:none;border-top-right-radius:12px;border-bottom-right-radius:12px;width:48px;height:48px;margin:0;font-size:17px}#search input[type=text],#search textarea{color:#1a202c;border:0;outline:none;font-size:1em;line-height:30px}#search input[type=text]{border-top-left-radius:12px;border-bottom-left-radius:12px;width:calc(100% - 48px);height:30px;padding:24px 16px}#search textarea{width:100%;height:300px;padding:12px 16px}.related{margin-top:.83em}.related ul{margin-bottom:0}pre{border-radius:.25rem;margin-top:1rem;margin-bottom:1rem;overflow-x:auto;box-shadow:0 4px 8px #00000026;color:#fff!important;padding:1rem!important}#post-list li.not-published a{font-style:italic}pre{white-space:pre-wrap;color:#fff;white-space:pre;background-color:#272b2d;padding:8px;font-family:Source Code Pro,Menlo,monospace;font-size:.8em;font-weight:500;line-height:1.75em;overflow:auto}#post-body .post-info,#post-body .related{margin:8px auto;padding:20px 0;line-height:1.25em}#post-body .post-info,#post-body .related p:first-child{margin-bottom:6px}#post-body .related{border-bottom:none}#post-body .post-info strong{color:#999}#post-body .post-info small{max-width:400px;display:inline-block}#post-body h2,#post-body h3{color:#1a202c;margin-top:40px;font-weight:700}#post-body h3{font-size:17px}#post-list a.external{color:#999}h2.post-group{color:#1a202c;margin-top:30px;margin-bottom:10px;font-size:18px;font-weight:700}.mini-button{color:#000;background-color:#facc15}blockquote h1:first-child,blockquote h2:first-child{margin-top:0!important}@media (prefers-color-scheme:dark){body{background-color:#333}nav.main-nav{background-color:#232323}.main-nav a.home,.main-nav a.title{color:#efefef!important}.profile h1,.post h1,h2.post-group{color:#efefef}h2{color:#bbb}li{color:#efefef}#post-list li,#archive-list li{border-top:1px solid #222}#post-list li:last-child,.main-nav .links a.link:not(:last-child){border-bottom:1px solid #222}#post-list a{color:#5694f1}tr:nth-child(odd)>td{background:#0003}th{background-color:#000}th,td{color:#efefef!important;border-bottom:1px solid #000!important}#a,#title,#post-list a:hover,#post-list li:hover .dates,#post-list li:hover .tags,#title:hover{color:#efefef}a.symbol{color:#666}#search input[type=text]{color:#efefef;background-color:#222}#search button{color:#efefef;background-color:#111}#post-body,p,.project-description,#post-body h1,#post-body h2,#post-body h3{color:#efefef}code{background-color:#000000bf!important;border:#000!important}h3,h4,h5{color:#efefef}blockquote{background-color:#232323;border-left:3px solid #1f1f1f}b,strong{color:#efefef}#social a{fill:#666;background-color:#1f1f1f;border:4px solid #1f1f1f}img{background-color:#333}.http-error,.http-error h1,.not-published .dates,.not-published{color:red!important}.not-published .status,.status-pill{color:#fff!important;background-color:#8b0000!important}.pill,.pill-tag{color:#ddd;background-color:#000}p code{background-color:#232323!important;border:2px solid #232323!important}@media screen and (width<=720px){.main-nav .links span.link:not(:last-child){border-bottom-color:#666}.main-nav .links{background-color:#333}}hr{background:#666}.mini-button{color:#facc15}}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#buy_me_a_coffee img{display:inline;background-color:none!important;border-radius:10px!important;width:217px!important;height:60px!important}.published_at_pill{align-items:center;gap:.75rem;display:flex}#header h1{justify-content:center;align-items:center;gap:.75rem;display:flex}#header h2{margin-top:6px}.tag-list{margin-top:30px}.pill-view-count{color:#efefef;background-color:#999}.external-link-image{background:#dedede;margin-bottom:0;padding:0}.meme-image-container{flex:20%;align-items:center;display:block}.meme-image-description{margin-top:8px;display:inline-block}.flex-end{align-self:flex-end}.cover-center-top{object-fit:cover;object-position:center top}.cursor-pointer{cursor:pointer}.glightbox-clean .gslide-description{background:0 0!important}.glightbox img{object-fit:cover!important;width:180px!important;height:180px!important}.gslide-title{text-align:center!important;color:#fff!important;margin:0!important}@media screen and (width<=500px){.glightbox img{width:100%}}.memes-container img{width:50%!important}.memes-container .memes{grid:auto/auto auto auto;gap:20px;margin-top:20px;display:grid}@media screen and (width<=1000px){.memes-container .memes{grid:auto/auto auto auto}}@media screen and (width<=720px){.memes-container .memes{grid:auto/auto auto}}@media screen and (width<=500px){.memes-container .memes{grid:auto/auto}}.lowercase{text-transform:lowercase}.mt-20{margin-top:20px!important}.mt-30{margin-top:30px!important}.mt-48{margin-top:48px!important}.mb-0{margin-bottom:0!important}.py-40{padding-top:40px!important;padding-bottom:40px!important}.tool-external-ip,.tool-uuid{flex-direction:column;gap:20px;padding:120px 0;display:flex}.flex{display:flex}.gap-2{gap:.5rem}.min-w-20{min-width:20px}.whitespace-pre-line{white-space:pre}pre.athl{color:#e6edf3;background-color:#0d1117}.attribute{color:#79c0ff}.attribute-builtin{color:#e6edf3}.boolean{color:#79c0ff}.character{color:#a5d6ff}.character-special{color:#e6edf3}.comment,.comment-documentation{color:#8b949e}.comment-error{color:#0d1117;background-color:#f85149}.comment-note{color:#2f81f7}.comment-todo{color:#0d1117;background-color:#7d8590}.comment-warning{color:#0d1117;background-color:#d29922}.constant,.constant-builtin{color:#79c0ff}.constant-macro{color:#ff7b72}.constructor{color:#ffa657}.diff-delta{color:#d29922;background-color:#231e14}.diff-minus{color:#f85149;background-color:#2c171b}.diff-plus{color:#3fb950;background-color:#10231c}.function,.function-call,.function-macro,.function-method,.function-method-call{color:#d2a8ff}.keyword,.keyword-conditional,.keyword-conditional-ternary,.keyword-coroutine,.keyword-debug,.keyword-directive,.keyword-directive-define{color:#ff7b72}.keyword-exception{color:#79c0ff}.keyword-function,.keyword-import,.keyword-modifier,.keyword-operator,.keyword-repeat,.keyword-return,.keyword-type{color:#ff7b72}.label{color:#7ee787}.markup-heading,.markup-heading-1,.markup-heading-2,.markup-heading-3,.markup-heading-4,.markup-heading-5,.markup-heading-6{color:#79c0ff;font-weight:700}.markup-italic{color:#e6edf3;font-style:italic}.markup-link{color:#e6edf3;text-decoration:underline}.markup-link-label{color:#e6edf3}.markup-link-url{color:#e6edf3;text-decoration:underline}.markup-list{color:#79c0ff}.markup-list-checked{color:#3fb950}.markup-list-unchecked{color:#6e7681}.markup-math,.markup-quote{color:#e6edf3}.markup-raw,.markup-raw-block{color:#e6edf3;font-style:italic}.markup-strikethrough{color:#e6edf3;text-decoration:line-through}.markup-strong{color:#e6edf3;font-weight:700}.markup-underline{text-decoration:underline}.module{color:#ff7b72}.module-builtin{color:#79c0ff}.normal{color:#e6edf3;background-color:#0d1117}.number,.number-float,.operator,.property{color:#79c0ff}.punctuation-bracket,.punctuation-delimiter,.punctuation-special{color:#e6edf3}.string,.string-documentation{color:#a5d6ff}.string-escape{color:#a5d6ff;font-weight:700}.string-regexp{color:#a5d6ff}.string-special,.string-special-path{color:#e6edf3}.string-special-symbol{color:#79c0ff}.string-special-url{color:#79c0ff;font-style:italic;text-decoration:underline}.tag{color:#7ee787}.tag-attribute{color:#79c0ff}.tag-builtin{color:#7ee787}.type{color:#ffa657}.type-builtin{color:#ff7b72}.type-definition{color:#ffa657}.variable{color:#e6edf3}.variable-builtin,.variable-member{color:#79c0ff}.variable-parameter{color:#e6edf3}.variable-parameter-builtin{color:#79c0ff}