:root,.light{--hue-theme:220deg;--c-text:hsl(var(--hue-theme) 0% 0%);--c-text-1:hsl(var(--hue-theme) 0% 20%);--c-text-2:hsl(var(--hue-theme) 0% 40%);--c-text-3:hsl(var(--hue-theme) 0% 46%);--c-bg:hsl(var(--hue-theme) 0% 100%);--c-bg-1:hsl(var(--hue-theme) 20% 98%);--c-bg-2:hsl(var(--hue-theme) 10% 95%);--c-bg-3:hsl(var(--hue-theme) 10% 92%);--c-bg-soft:hsl(var(--hue-theme) 20% 20% / 10%);--c-border:hsl(var(--hue-theme) 10% 91%);--c-bg-a50:hsl(var(--hue-theme) 20% 98% / 50%);--c-bg-a80:hsl(var(--hue-theme) 20% 98% / 80%);--c-primary:hsl(var(--hue-theme) 100% 55%);--c-primary-soft:hsl(var(--hue-theme) 100% 60% / 15%);--c-accent:hsl(180deg 70% 60%);--ld-bg-blur:var(--c-bg-1);--ld-bg-card:var(--c-bg);--ld-bg-active:var(--c-bg);--ld-shadow:var(--c-bg-soft);--c-success:#5A5;--c-success-soft:#3F32;--c-warning:#D85;--c-warning-soft:#F932;--c-error:#D55;--c-error-soft:#F332;color-scheme:only light}.dark{--c-text:hsl(var(--hue-theme) 0% 100%);--c-text-1:hsl(var(--hue-theme) 0% 90%);--c-text-2:hsl(var(--hue-theme) 0% 70%);--c-text-3:hsl(var(--hue-theme) 0% 50%);--c-bg:hsl(var(--hue-theme) 0% 7%);--c-bg-1:hsl(var(--hue-theme) 10% 10%);--c-bg-2:hsl(var(--hue-theme) 10% 14%);--c-bg-3:hsl(var(--hue-theme) 10% 18%);--c-bg-soft:hsl(var(--hue-theme) 100% 95% / 15%);--c-border:hsl(var(--hue-theme) 10% 20%);--c-bg-a50:hsl(var(--hue-theme) 10% 10% / 50%);--c-bg-a80:hsl(var(--hue-theme) 10% 10% / 80%);--c-primary:hsl(var(--hue-theme) 100% 70%);--c-primary-soft:hsl(var(--hue-theme) 100% 60% / 20%);--ld-bg-blur:var(--c-bg-a80);--ld-bg-card:var(--c-bg-3);--ld-bg-active:var(--c-primary-soft);--ld-shadow:var(--c-bg-a50);color-scheme:dark}.article{margin:1rem;line-height:1.8}.article p{margin:.5em 0}.article>*,.article>p{margin:1rem 0}.article :target{border-radius:.2rem;animation:highlight 3s}@keyframes highlight{50%{background-color:var(--c-primary-soft)}}.article>:where(h1,h2,h3,h4,h5,h6){margin:1.6em 0 .8em;font-family:var(--font-creative);font-weight:550;color:var(--c-text)}.article :where(menu,ol,ul):not([class]){margin:.5em 0;padding-inline-start:1.5em;font-size:.9rem}.article :where(menu,ol,ul):not([class]),.article :where(menu,ol,ul):not([class]) ol ol ol{list-style:revert}.article :where(menu,ol,ul):not([class]) ol,.article :where(menu,ol,ul):not([class]) ol ol ol ol{list-style-type:lower-alpha}.article :where(menu,ol,ul):not([class]) ol ol,.article :where(menu,ol,ul):not([class]) ol ol ol ol ol{list-style-type:lower-roman}.article :where(menu,ol,ul):not([class]) ol,.article :where(menu,ol,ul):not([class]) ul{margin-top:0}.article :where(menu,ol,ul):not([class])>li{margin:.2em 0}.article :where(menu,ol,ul):not([class])>li::marker{color:var(--c-primary)}.article blockquote{padding:.2rem .8rem;border-inline-start:4px solid var(--c-border);border-radius:4px;background-color:var(--c-bg-2);font-size:.9rem}.article blockquote>.z-codeblock{margin:0 -.8rem}.article img{height:auto;max-width:100%}.article img.icon{height:1.4em;vertical-align:middle;transform:translateY(-.1em)}.article img:not([class]),.article img.image{display:block;margin:1rem auto;border-radius:.5rem}.article hr{margin:3em 0;border-top:.4em dashed var(--c-border)}.article strong{background:linear-gradient(var(--c-primary-soft),var(--c-primary-soft))no-repeat 50% 100%/100% 30%}.article del{opacity:.5}.article.md-tech>h2>a::before{content:"#";color:#fff}.article.md-tech>:where(h2,h3,h4,h5,h6)>a::before{content:"";margin-inline-end:.5em;padding:0 2px;border-radius:.2rem;background-color:var(--c-primary);text-autospace:no-autospace}.article.md-story h1,.article.md-story h2,.article.md-story h3,.article.md-story h4,.article.md-story h5,.article.md-story h6,.article.md-story .title-like{position:relative;font-family:var(--font-serif);font-weight:bolder;text-align:center;text-wrap:balance}.article.md-story>h2::before{content:"";position:absolute;width:2.5em;height:2.5em;margin:-.4em 0 0 -.7em;border-radius:50%;background-image:linear-gradient(var(--c-primary-soft),transparent);z-index:-1}.article.md-story>h3::after{content:"";position:absolute;bottom:0;width:.4em;height:.7em;background-color:var(--c-primary-soft)}.article.md-story>p,.article.md-story :not([class])>p{text-indent:2em}.article.md-story>p>[class],.article.md-story :not([class])>p>[class]{text-indent:0}.post-header{contain:paint;display:flex;flex-direction:column;justify-content:space-between;gap:1rem;margin:.5rem;border-radius:1rem;background-color:var(--c-bg-2);color:var(--c-text);position:relative}@media(max-width:768px){.post-header{margin:0;border-radius:0}}.post-header.has-cover{min-height:16rem;max-height:20rem;color:#fff}.post-header.has-cover .post-info{filter:drop-shadow(0 1px 2px #000)}.post-header.has-cover .post-title{background-image:linear-gradient(transparent,rgba(0,0,0,.2),rgba(0,0,0,.333333));text-shadow:var(--text-shadow-black)}.post-header.has-cover .post-cover{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;z-index:0}.post-title{padding:.8em 1rem;font-size:1.6em;line-height:1.2;z-index:1;position:relative}.post-nav{padding:.8em 1rem;font-size:.8em;z-index:1;position:relative}.post-nav .post-info{display:flex;flex-wrap:wrap;gap:.5em 1.2em;column-gap:clamp(1em,3%,1.5em)}.md-excerpt{opacity:.6;margin:1rem .5rem;padding:.5rem;font-size:.9em;transition:opacity .2s;line-height:1.7}.md-excerpt:hover,.md-excerpt.is-typing,.md-excerpt.is-done{opacity:1}.md-excerpt .spark{margin-inline-end:.3em;vertical-align:-.15em}.md-excerpt .typewriter-target{white-space:pre-wrap;word-break:break-word}.md-excerpt.has-typewriter{cursor:pointer}html.js .md-excerpt:not(.is-typing):not(.is-done) .typewriter-target{opacity:0}.md-excerpt .typewriter-cursor{display:inline-block;width:.55ch;margin-inline-start:.05em;border-inline-end:.12em solid var(--c-primary);animation:typewriter-caret 1s step-end infinite;vertical-align:baseline}.md-excerpt.is-done .typewriter-cursor{opacity:0;animation:none}@media(prefers-reduced-motion:reduce){.md-excerpt .typewriter-cursor{display:none}}@keyframes typewriter-caret{50%{border-color:transparent}}.post-tags{display:flex;flex-wrap:wrap;gap:.4rem;margin:1rem .5rem}.post-tags a{padding:.2em .65em;border-radius:999px;background:var(--c-bg-2);font-size:.85em;color:var(--c-text-2)}.post-tags a:hover{color:var(--c-primary);background:var(--c-primary-soft)}.post-nav-links{display:grid;grid-template-columns:1fr 1fr;gap:.75rem;margin:2rem .5rem}@media(max-width:528px){.post-nav-links{grid-template-columns:1fr}}.post-nav-links a{padding:.85rem 1rem;border-radius:.75rem;background:var(--c-bg-2);transition:all .15s}.post-nav-links a:hover{box-shadow:var(--box-shadow-2);transform:translateY(-1px)}.post-nav-links a .label{display:block;font-size:.75em;color:var(--c-text-3);margin-bottom:.25em}.post-nav-links a.next{text-align:end}.z-codeblock{--line-height:1.4;--collapsed-rows:16;--tab-size:3;contain:paint;position:relative;margin:.5em 0;border-radius:.5em;background-color:var(--c-bg-2);border:1px solid var(--c-border);box-shadow:var(--box-shadow-1);font-size:.85em;line-height:var(--line-height);tab-size:var(--tab-size,3);overflow:hidden}.z-codeblock>figcaption{display:flex;justify-content:space-between;align-items:flex-start;gap:1em;position:sticky;top:0;padding:0 1em;z-index:2;min-height:1.6em;color:var(--c-text-2)}.z-codeblock>figcaption>.filename{display:inline-flex;align-items:center;gap:.3em;padding:.2em .8em;border-radius:0 0 .5em .5em;background-color:var(--c-border);word-break:break-all;font-size:.92em}.z-codeblock>figcaption>.filename .icon{width:1em;height:1em;flex-shrink:0}.z-codeblock>figcaption>.language{opacity:.45;height:0;transform:translateY(.25em);font-family:var(--font-monospace);font-size:.85em;text-transform:lowercase;pointer-events:none}.z-codeblock>figcaption>.operations{position:absolute;opacity:0;inset-inline-end:0;top:0;display:inline-flex;align-items:center;gap:.15em;padding:.15em .55em;border-end-start-radius:.5em;background-color:var(--c-bg-2);transition:opacity .2s;z-index:3}.z-codeblock>figcaption>.operations button{opacity:.55;padding:.2em .45em;border-radius:.3em;font-size:.9em;color:var(--c-text-2);transition:opacity .15s,color .15s,background .15s}.z-codeblock>figcaption>.operations button:hover,.z-codeblock>figcaption>.operations button:focus-visible{opacity:1;color:var(--c-primary);background:var(--c-primary-soft)}.z-codeblock>figcaption>.operations button[aria-pressed=true]{opacity:1;color:var(--c-primary)}.z-codeblock>figcaption>.operations button.is-copied{opacity:1;color:var(--c-success,var(--c-primary))}.z-codeblock:hover>figcaption>.operations,.z-codeblock:focus-within>figcaption>.operations{opacity:1}@media(hover:none),(pointer:coarse){.z-codeblock>figcaption>.operations{opacity:1}}.z-codeblock .code-body{position:relative;overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch}.z-codeblock .code-body .highlight,.z-codeblock .code-body .chroma,.z-codeblock .code-body pre{margin:0!important;padding:0!important;border:0!important;border-radius:0!important;box-shadow:none!important;background:0 0!important;overflow:visible!important;font-size:inherit;line-height:inherit;tab-size:inherit}.z-codeblock .code-body pre,.z-codeblock .code-body code{font-family:var(--font-monospace);color:var(--c-text-1)}.z-codeblock .code-body>.highlight,.z-codeblock .code-body>pre{padding:1rem!important;display:block}.z-codeblock .code-body.wrap pre,.z-codeblock .code-body.wrap code,.z-codeblock .code-body.wrap .chroma{white-space:pre-wrap!important;word-break:break-word;overflow-wrap:anywhere}.z-codeblock.collapsible>.code-body{padding-bottom:.35rem}.z-codeblock.collapsed>.code-body{overflow:hidden;max-height:calc(var(--line-height) * var(--collapsed-rows) * 1em + 1rem);mask-image:linear-gradient(to top,transparent -2em,#fff 4em)}.z-codeblock>.toggle-btn{display:flex;align-items:center;justify-content:center;gap:.35em;position:relative;width:100%;opacity:.45;padding:.35em .6em;background-color:var(--c-bg-3,var(--c-bg-soft));color:var(--c-text-2);font-size:.9em;border:0;border-top:1px solid var(--c-border);cursor:pointer;transition:opacity .2s,color .2s,background .2s}.z-codeblock>.toggle-btn:hover,.z-codeblock>.toggle-btn:focus-visible{opacity:1;color:var(--c-primary);background:var(--c-primary-soft)}.z-codeblock>.toggle-btn .toggle-icon{display:inline-flex;transition:transform .2s}.z-codeblock>.toggle-btn .toggle-icon .icon{width:1.1em;height:1.1em}.z-codeblock>.toggle-btn .toggle-icon.is-collapsed{transform:rotate(180deg)}.z-codeblock>.toggle-btn .toggle-meta{font-variant-numeric:tabular-nums}.sc-video{margin:1rem .5rem;border-radius:.8rem;overflow:hidden;background:var(--c-bg-2);box-shadow:var(--box-shadow-1)}.sc-video video,.sc-video iframe{display:block;width:100%;aspect-ratio:16/9;border:0;background:#000}.sc-alert{margin:1rem .5rem;padding:.85rem 1rem;border-radius:.75rem;border:1px solid var(--c-border);background:var(--c-bg-2);box-shadow:var(--box-shadow-1)}.sc-alert-title{display:block;margin-bottom:.35rem;font-family:var(--font-creative);font-weight:550}.sc-alert-info,.sc-alert-note{border-color:var(--c-primary);background:var(--c-primary-soft)}.sc-alert-tip,.sc-alert-success{border-color:var(--c-success)}.sc-alert-warning{border-color:var(--c-warning)}.sc-alert-error,.sc-alert-danger{border-color:var(--c-error)}.sc-folding{margin:1rem .5rem;padding:.6rem .9rem;border-radius:.75rem;background:var(--c-bg-2);border:1px solid var(--c-border)}.sc-folding summary{cursor:pointer;font-family:var(--font-creative);font-weight:550;list-style:none}.sc-folding summary::-webkit-details-marker{display:none}.sc-folding-body{margin-top:.75rem;padding-top:.75rem;border-top:1px solid var(--c-border)}.sc-linkcard{display:flex;gap:.85rem;align-items:center;margin:1rem .5rem;padding:.9rem 1rem;border-radius:.8rem}.sc-linkcard-icon{width:2.5rem;height:2.5rem;border-radius:.5rem;object-fit:cover}.sc-linkcard-text{display:grid;gap:.15rem;min-width:0}.sc-linkcard-title{font-family:var(--font-creative);font-weight:550}.sc-linkcard-desc,.sc-linkcard-url{font-size:.85em;color:var(--c-text-2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sc-badge{display:inline-flex;align-items:center;padding:.1em .55em;border-radius:999px;background:var(--sc-badge,var(--c-primary-soft));color:var(--c-primary);font-size:.85em}.sc-quote{margin:1rem .5rem;padding:.85rem 1rem;border-inline-start:3px solid var(--c-primary);border-radius:0 .75rem .75rem 0;background:var(--c-bg-2)}.sc-quote footer{margin-top:.5rem;font-size:.85em;color:var(--c-text-3)}