:root{--width:900px;--font-main:Roboto, sans-serif;--font-secondary:Roboto, sans-serif;--font-scale:1em;--background-color:#f5f5f0;--heading-color:#485a54;--text-color:#485a54;--link-color:#bf8e8d;--visited-color:#735b51;--blockquote-color:#f5f5f0;--blockquote-background:rgba(0, 0, 0, 0.75);--code-bg:rgba(0, 0, 0, 0.15);--code-text:#485a54;--code-border:#735b51;--footer-mix:#f5f5f0}:root.dark-theme{--background-color:#27363c;--heading-color:#f5f5f0;--text-color:#f5f5f0;--link-color:#aeedf8;--visited-color:#92a3a3;--blockquote-color:#f5f5f0;--blockquote-background:rgba(0, 0, 0, 0.25);--code-bg:rgba(0, 0, 0, 0.25);--code-text:#f5f5f0;--code-border:#92a3a3;--footer-mix:#27363c}@media(prefers-color-scheme:dark){:root:not(.light-theme){--background-color:#27363c;--heading-color:#f5f5f0;--text-color:#f5f5f0;--link-color:#aeedf8;--visited-color:#92a3a3;--blockquote-color:#f5f5f0;--blockquote-background:rgba(0, 0, 0, 0.25);--code-bg:rgba(0, 0, 0, 0.25);--code-text:#f5f5f0;--code-border:#92a3a3;--footer-mix:#27363c}}body{font-family:var(--font-secondary);font-size:var(--font-scale);margin:auto;padding:20px;max-width:var(--width);text-align:left;background-color:var(--background-color);word-wrap:break-word;overflow-wrap:break-word;line-height:1.5;color:var(--text-color)}h1,h2,h3,h4,h5,h6{font-family:var(--font-main);color:var(--heading-color)}a{color:var(--link-color);cursor:pointer;text-decoration:none}a:hover{text-decoration:underline}nav a{margin-right:8px}strong,b{color:var(--heading-color)}button{margin:0;cursor:pointer}time{font-family:monospace;font-style:normal;font-size:15px}main{line-height:1.6}table{width:100%}hr{border:0;border-top:1px dashed}img{max-width:100%}code{background-color:var(--code-bg);color:var(--code-text);padding:4px 20px;border-radius:20px;border:0 solid var(--code-border);font-family:monospace;font-size:.95em}pre code{display:block;padding:4px 20px;overflow-x:auto;border-radius:20px;line-height:1.4}blockquote{background:var(--blockquote-background);color:var(--blockquote-color);padding:4px 20px;border-radius:20px;font-weight:300}footer{padding:24px 0;text-align:center;color:color-mix(in srgb,var(--text-color) 50%,var(--footer-mix))}.title:hover{text-decoration:none}.title h1{font-size:1.5em}.inline{width:auto!important}.highlight,.chroma,figure.highlight,pre,pre.chroma{background-color:var(--code-bg)!important;color:var(--code-text)!important;border:2px solid var(--code-border)!important;border-radius:20px}.highlight pre,.chroma pre,figure.highlight pre,pre{padding:0;margin:1em 0;overflow-x:auto;line-height:1.4;background:0 0!important;border:0!important;color:inherit!important}.highlight code,.chroma code,pre code{background:0 0!important;color:inherit!important;font-family:monospace;font-size:.95em;white-space:pre}p code,li code,td code,th code{background-color:var(--code-bg)!important;color:var(--code-text)!important;border:0 solid var(--code-border)!important;border-radius:8px;padding:4px 8px}figure.highlight{margin:1em 0}.code{background-color:var(--code-bg)!important;color:var(--code-text)!important;border:2px solid var(--code-border)!important;border-radius:4px;padding:12px 14px;overflow-x:auto;line-height:1.4}ul.blog-posts{list-style-type:none;padding:unset}ul.blog-posts li{display:flex}ul.blog-posts li span{flex:0 0 130px}ul.blog-posts li a:visited{color:var(--visited-color)}.header-bar{display:flex;align-items:center;justify-content:space-between;gap:6px}.header-left{min-width:0}.header-left>*{display:block}.theme-switch{position:relative;display:inline-block;width:46px;height:26px;vertical-align:middle;margin-left:10px;flex-shrink:0}.theme-switch input{position:absolute;inset:0;margin:0;opacity:0;width:100%;height:100%;cursor:pointer;-webkit-appearance:none;appearance:none;z-index:2}.theme-switch .slider{position:absolute;inset:0;background:rgba(0,0,0,8%);border-radius:999px;transition:background .25s ease,box-shadow .25s ease;box-shadow:inset 0 0 0 1px rgba(0,0,0,5%);pointer-events:none;z-index:0}.theme-switch input:checked+.slider{background:rgba(0,0,0,.25)}:root.dark-theme .theme-switch .slider{background:rgba(255,255,255,.12);box-shadow:inset 0 0 0 1px rgba(255,255,255,.1)}:root.dark-theme .theme-switch input:checked+.slider{background:rgba(255,255,255,.3)}.theme-switch .knob{position:absolute;left:3px;top:3px;width:20px;height:20px;border-radius:50%;background:rgba(255,255,255,.9);box-shadow:0 1px 3px rgba(0,0,0,.25);transition:transform .25s ease,background .25s ease;will-change:transform;z-index:1}.theme-switch input:checked+.slider .knob{transform:translateX(20px)}:root.dark-theme .theme-switch .knob{background:rgba(0,0,0,.6);box-shadow:0 1px 3px rgba(0,0,0,.35)}.theme-switch .knob::before,.theme-switch .knob::after{content:"";position:absolute;inset:0;margin:auto;width:14px;height:14px;transition:opacity .18s ease,transform .18s ease;will-change:opacity,transform}.theme-switch .knob::before{background:50%/contain no-repeat url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><circle cx="12" cy="12" r="5" fill="black"/></svg>');opacity:1;transform:scale(1)}.theme-switch .knob::after{background:50%/contain no-repeat url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M21 12.79A9 9 0 0111.21 3a7 7 0 100 14 9 9 0 009.79-4.21z" fill="black"/></svg>');opacity:0;transform:scale(.6)}.theme-switch input:checked+.slider .knob::before{opacity:0;transform:scale(.6)}.theme-switch input:checked+.slider .knob::after{opacity:1;transform:scale(1)}:root.dark-theme .theme-switch .knob::before{background:50%/contain no-repeat url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><circle cx="12" cy="12" r="5" fill="white"/></svg>')}:root.dark-theme .theme-switch .knob::after{background:50%/contain no-repeat url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M21 12.79A9 9 0 0111.21 3a7 7 0 100 14 9 9 0 009.79-4.21z" fill="white"/></svg>')}.theme-switch:hover .slider{box-shadow:inset 0 0 0 1px rgba(0,0,0,.2)}:root.dark-theme .theme-switch:hover .slider{box-shadow:inset 0 0 0 1px rgba(255,255,255,.2)}