:root{--bg-color: #f5f3ec;--text-color: #2e2e2e;--text-meta-color: #636363;--link-color: #777;--link-unvisited-color: #666;--link-hover-color: #222;--link-visited-color: #777;--link-decoration-color: rgba(0, 0, 0, .2);--link-decoration-unvisited-color: rgba(0, 0, 0, .5);--link-decoration-hover-color: rgba(0, 0, 0, .4);--link-decoration-visited-color: rgba(0, 0, 0, .15);--code-border-color: #000;--code-label-color: #666;--code-label-bg: rgba(248, 245, 240, .9);--inline-code-bg: #eeebe5;--emphasis-bg: rgba(255, 215, 0, .35);--emphasis-text-color: #8a4b00;--remark-bg: rgba(0, 0, 0, .04);--remark-border-color: rgba(0, 0, 0, .15);--remark-text-color: var(--text-color);--remark-inline-code-bg: rgba(0, 0, 0, .06);--tldr-bg: rgba(59, 130, 246, .08);--tldr-border-color: rgba(59, 130, 246, .3);--tldr-text-color: var(--text-color);--tldr-title-color: #2563eb;--tldr-inline-code-bg: rgba(59, 130, 246, .12);--table-header-bg: #eeebe5;--table-border-color: rgba(0, 0, 0, .1);--table-row-hover-bg: #f3f0ea;--blockquote-border-color: #999;--blockquote-bg: #eeebe5;--blockquote-text-color: #2e2e2e;--toggle-button-bg: #f3f0ea;--toggle-button-border: #646cff;--font-size-active-bg: #333;--font-size-active-color: #fff;--switch-plate-bg: #eeebe5;--switch-toggle-bg: #e0e0e0;--switch-shadow: rgba(0, 0, 0, .15);--image-shadow: 0 4px 20px rgba(0, 0, 0, .15), 0 2px 6px rgba(0, 0, 0, .1);--font-size-scale: 1.125;--tag-bg: #eae7e0;--tag-color: #555;--bg-secondary: #f0ede6;--bg-hover: #eae7e0}html:has(#dark-mode-toggle:checked),html[data-blog-dark]{color-scheme:dark;--bg-color: #1a1a1a;--text-color: #e0e0e0;--text-meta-color: #999;--link-color: #bbb;--link-unvisited-color: #f0f0f0;--link-hover-color: #e0e0e0;--link-visited-color: #999;--link-decoration-color: rgba(255, 255, 255, .2);--link-decoration-unvisited-color: rgba(255, 255, 255, .5);--link-decoration-hover-color: rgba(255, 255, 255, .4);--link-decoration-visited-color: rgba(255, 255, 255, .15);--code-border-color: #444;--code-label-color: #ccc;--code-label-bg: rgba(26, 26, 26, .9);--inline-code-bg: #4a4a4a;--emphasis-bg: rgba(255, 183, 0, .25);--emphasis-text-color: #ffd479;--remark-bg: rgba(255, 255, 255, .05);--remark-border-color: rgba(255, 255, 255, .18);--remark-text-color: var(--text-color);--remark-inline-code-bg: rgba(255, 255, 255, .08);--tldr-bg: rgba(96, 165, 250, .1);--tldr-border-color: rgba(96, 165, 250, .4);--tldr-text-color: var(--text-color);--tldr-title-color: #60a5fa;--tldr-inline-code-bg: rgba(96, 165, 250, .15);--table-header-bg: #2a2a2a;--table-border-color: rgba(255, 255, 255, .1);--table-row-hover-bg: #2a2a2a;--blockquote-border-color: #666;--blockquote-bg: #2a2a2a;--blockquote-text-color: #e0e0e0;--toggle-button-bg: #2a2a2a;--toggle-button-border: #4a9eff;--font-size-active-bg: rgba(255, 255, 255, .15);--font-size-active-color: #e0e0e0;--switch-plate-bg: #2a2a2a;--switch-toggle-bg: #3a3a3a;--switch-shadow: rgba(0, 0, 0, .3);--image-shadow: 0 16px 40px rgba(0, 0, 0, .65), 0 6px 20px rgba(0, 0, 0, .45), 0 0 0 1px rgba(255, 255, 255, .05)}.dark-mode-toggle{position:absolute;opacity:0;width:0;height:0;pointer-events:none}.dark-mode-label{position:fixed;top:1.5rem;right:1.5rem;z-index:1000;cursor:pointer;padding:.5rem;background:transparent}.switch-plate{position:relative;display:block;width:2.5rem;height:3.5rem;background-color:var(--switch-plate-bg);border-radius:.4rem;box-shadow:0 3px 6px var(--switch-shadow),inset 0 1px #fff6,inset 0 -1px #0000001a;padding:.35rem .3rem;transition:background-color .3s ease,box-shadow .3s ease}.dark-mode-label:hover .switch-plate{box-shadow:0 6px 12px var(--switch-shadow),inset 0 1px #fff6,inset 0 -1px #0000001a}.switch-toggle{position:absolute;left:50%;top:.5rem;transform:translate(-50%);width:1.9rem;height:1.2rem;background-color:var(--switch-toggle-bg);border-radius:.2rem;box-shadow:0 2px 4px #0003,inset 0 1px 2px #ffffff80,inset 0 -1px 1px #0000001a;transition:top .25s cubic-bezier(.4,0,.2,1);cursor:pointer}html:has(#dark-mode-toggle:checked) .switch-toggle,html[data-blog-dark] .switch-toggle{top:1.8rem}@media(max-width:600px){.dark-mode-label{top:1rem;right:1rem;padding:.375rem}.switch-plate{width:2.2rem;height:3rem;padding:.3rem .25rem}.switch-toggle{width:1.7rem;height:1rem;top:.45rem}html:has(#dark-mode-toggle:checked) .switch-toggle,html[data-blog-dark] .switch-toggle{top:1.55rem}}.font-size-controls{position:fixed;top:1.5rem;left:1.5rem;z-index:1000;display:flex;gap:.25rem;background-color:var(--switch-plate-bg);padding:.35rem;border-radius:.4rem;box-shadow:0 3px 6px var(--switch-shadow),inset 0 1px #fff6,inset 0 -1px #0000001a;transition:background-color .3s ease,box-shadow .3s ease}.font-size-controls:hover{box-shadow:0 6px 12px var(--switch-shadow),inset 0 1px #fff6,inset 0 -1px #0000001a}.font-size-btn{background-color:transparent;border:none;color:var(--text-color);font-weight:600;padding:0;cursor:pointer;border-radius:.2rem;transition:background-color .2s ease,color .2s ease;font-family:system-ui,-apple-system,sans-serif;line-height:1;display:flex;align-items:center;justify-content:center;width:1.75rem;height:1.75rem;text-align:center}#font-size-medium{font-size:.75rem}#font-size-large{font-size:.95rem}#font-size-xl{font-size:1.15rem}.font-size-btn:hover{background-color:#0000000d}html:has(#dark-mode-toggle:checked) .font-size-btn:hover,html[data-blog-dark] .font-size-btn:hover{background-color:#ffffff1a}.font-size-btn.active{background-color:var(--font-size-active-bg);color:var(--font-size-active-color);box-shadow:inset 0 1px 2px #0000001a,0 1px 2px #0000001a}html:has(#dark-mode-toggle:checked) .font-size-btn.active,html[data-blog-dark] .font-size-btn.active{background-color:var(--font-size-active-bg);color:var(--font-size-active-color);box-shadow:inset 0 1px 2px #0003,0 1px 2px #0000001a}html[data-font-size=medium]{--font-size-scale: 1}html:not([data-font-size]){--font-size-scale: 1.2}html[data-font-size=large]{--font-size-scale: 1.2}html[data-font-size=xl]{--font-size-scale: 1.4}@media(min-width:2560px){html[data-font-size=medium]{--font-size-scale: 1.25}html:not([data-font-size]){--font-size-scale: 1.5}html[data-font-size=large]{--font-size-scale: 1.5}html[data-font-size=xl]{--font-size-scale: 1.75}}@media(max-width:600px){.font-size-controls{top:1rem;left:1rem;padding:.3rem;gap:.2rem}#font-size-medium{font-size:.65rem}#font-size-large{font-size:.8rem}#font-size-xl{font-size:.95rem}.font-size-btn{width:1.5rem;height:1.5rem}}.language-selector{position:fixed;top:1.5rem;right:5.5rem;z-index:1000;padding:.5rem;background:transparent}.language-selector-btn{background-color:var(--switch-plate-bg);border:none;color:var(--text-color);padding:.35rem .75rem;border-radius:.4rem;cursor:pointer;display:flex;align-items:center;justify-content:center;gap:.5rem;font-size:.875rem;font-weight:500;min-width:7rem;box-shadow:0 3px 6px var(--switch-shadow),inset 0 1px #fff6,inset 0 -1px #0000001a;transition:background-color .3s ease,box-shadow .3s ease,color .3s ease;font-family:system-ui,-apple-system,sans-serif}.language-selector-btn:hover{box-shadow:0 6px 12px var(--switch-shadow),inset 0 1px #fff6,inset 0 -1px #0000001a}.language-selector-icon{font-size:.875rem;line-height:1;font-weight:600;font-family:system-ui,-apple-system,sans-serif;color:var(--text-color);opacity:.8}.language-selector-text{font-size:.875rem;font-weight:600;white-space:nowrap;text-align:center}.language-dropdown{position:absolute;top:calc(100% + .5rem);right:0;background-color:var(--switch-plate-bg);border-radius:.4rem;box-shadow:0 6px 20px var(--switch-shadow),0 2px 8px #0000001a;min-width:150px;max-height:300px;overflow-y:auto;display:none;flex-direction:column;padding:.25rem;margin:0;list-style:none}.language-dropdown.show{display:flex}.language-option{background-color:transparent;border:none;color:var(--text-color);padding:.6rem .75rem;text-align:left;cursor:pointer;border-radius:.3rem;font-size:.875rem;font-family:system-ui,-apple-system,sans-serif;transition:background-color .2s ease,color .2s ease;width:100%}.language-option:hover{background-color:#0000000d}html:has(#dark-mode-toggle:checked) .language-option:hover,html[data-blog-dark] .language-option:hover{background-color:#ffffff1a}.language-option.active{background-color:var(--font-size-active-bg);color:var(--font-size-active-color);font-weight:600}a.language-option{text-decoration:none;color:inherit;display:block;box-sizing:border-box}@media(max-width:600px){.language-selector{top:1rem;right:4rem;padding:.375rem}.language-selector-btn{padding:.3rem .6rem;font-size:.8rem}.language-selector-icon{font-size:.75rem}.language-selector-text{font-size:.8rem}.language-dropdown{min-width:130px;max-height:250px}.language-option{padding:.5rem .6rem;font-size:.8rem}}*{margin:0;padding:0;box-sizing:border-box}body{font-family:Iowan Old Style,"Noto Serif TC","Noto Serif",Palatino Linotype,Palatino,Book Antiqua,Georgia,Times New Roman,serif;font-size:calc(1rem * var(--font-size-scale, 1.125));line-height:1.7;color:var(--text-color);background-color:var(--bg-color);padding:2rem 1rem;position:relative;transition:background-color .3s ease,color .3s ease;overflow-x:hidden}.cjk-spaced{letter-spacing:.09em}html:lang(zh) body,html:lang(zh-tw) body,html:lang(zh-cn) body,html:lang(ja) body,html:lang(ko) body{line-height:1.9;font-family:Iowan Old Style,"Noto Serif",Palatino Linotype,Palatino,Book Antiqua,Georgia,Times New Roman,Noto Sans TC,Noto Sans SC,Noto Sans JP,Noto Sans KR,PingFang TC,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Microsoft JhengHei,Hiragino Sans,Hiragino Kaku Gothic ProN,Apple SD Gothic Neo,Malgun Gothic,Meiryo,Yu Gothic,sans-serif}html:lang(zh) #blog-content,html:lang(zh-tw) #blog-content,html:lang(zh-cn) #blog-content,html:lang(ja) #blog-content,html:lang(ko) #blog-content{font-family:Iowan Old Style,"Noto Serif",Palatino Linotype,Palatino,Book Antiqua,Georgia,Times New Roman,Noto Sans TC,Noto Sans SC,Noto Sans JP,Noto Sans KR,PingFang TC,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Microsoft JhengHei,Hiragino Sans,Hiragino Kaku Gothic ProN,Apple SD Gothic Neo,Malgun Gothic,Meiryo,Yu Gothic,sans-serif}html:lang(zh) #blog-content article h1,html:lang(zh) #blog-content article h2,html:lang(zh) #blog-content article h3,html:lang(zh) #blog-content article h4,html:lang(zh) #blog-content article h5,html:lang(zh) #blog-content article h6,html:lang(zh-tw) #blog-content article h1,html:lang(zh-tw) #blog-content article h2,html:lang(zh-tw) #blog-content article h3,html:lang(zh-tw) #blog-content article h4,html:lang(zh-tw) #blog-content article h5,html:lang(zh-tw) #blog-content article h6,html:lang(zh-cn) #blog-content article h1,html:lang(zh-cn) #blog-content article h2,html:lang(zh-cn) #blog-content article h3,html:lang(zh-cn) #blog-content article h4,html:lang(zh-cn) #blog-content article h5,html:lang(zh-cn) #blog-content article h6,html:lang(ja) #blog-content article h1,html:lang(ja) #blog-content article h2,html:lang(ja) #blog-content article h3,html:lang(ja) #blog-content article h4,html:lang(ja) #blog-content article h5,html:lang(ja) #blog-content article h6,html:lang(ko) #blog-content article h1,html:lang(ko) #blog-content article h2,html:lang(ko) #blog-content article h3,html:lang(ko) #blog-content article h4,html:lang(ko) #blog-content article h5,html:lang(ko) #blog-content article h6{font-family:Iowan Old Style,"Noto Serif TC","Noto Serif SC","Noto Serif JP","Noto Serif KR","Noto Serif",Palatino Linotype,Palatino,Book Antiqua,Georgia,Times New Roman,serif}html:lang(zh) body[data-blog-lang-mode=article] header h1,html:lang(zh-tw) body[data-blog-lang-mode=article] header h1,html:lang(zh-cn) body[data-blog-lang-mode=article] header h1,html:lang(ja) body[data-blog-lang-mode=article] header h1,html:lang(ko) body[data-blog-lang-mode=article] header h1{font-family:Iowan Old Style,"Noto Serif TC","Noto Serif SC","Noto Serif JP","Noto Serif KR","Noto Serif",Palatino Linotype,Palatino,Book Antiqua,Georgia,Times New Roman,serif}html:lang(zh) body:is([data-blog-lang-mode=articles-listing],[data-blog-lang-mode=series]) .site-nav-link,html:lang(zh-tw) body:is([data-blog-lang-mode=articles-listing],[data-blog-lang-mode=series]) .site-nav-link,html:lang(zh-cn) body:is([data-blog-lang-mode=articles-listing],[data-blog-lang-mode=series]) .site-nav-link,html:lang(ja) body:is([data-blog-lang-mode=articles-listing],[data-blog-lang-mode=series]) .site-nav-link,html:lang(ko) body:is([data-blog-lang-mode=articles-listing],[data-blog-lang-mode=series]) .site-nav-link,html:lang(zh) body[data-blog-lang-mode=articles-listing] .articles-header h1,html:lang(zh-tw) body[data-blog-lang-mode=articles-listing] .articles-header h1,html:lang(zh-cn) body[data-blog-lang-mode=articles-listing] .articles-header h1,html:lang(ja) body[data-blog-lang-mode=articles-listing] .articles-header h1,html:lang(ko) body[data-blog-lang-mode=articles-listing] .articles-header h1,html:lang(zh) body[data-blog-lang-mode=articles-listing] .articles-header .subtitle,html:lang(zh-tw) body[data-blog-lang-mode=articles-listing] .articles-header .subtitle,html:lang(zh-cn) body[data-blog-lang-mode=articles-listing] .articles-header .subtitle,html:lang(ja) body[data-blog-lang-mode=articles-listing] .articles-header .subtitle,html:lang(ko) body[data-blog-lang-mode=articles-listing] .articles-header .subtitle,html:lang(zh) body[data-blog-lang-mode=series] .series-header h1,html:lang(zh-tw) body[data-blog-lang-mode=series] .series-header h1,html:lang(zh-cn) body[data-blog-lang-mode=series] .series-header h1,html:lang(ja) body[data-blog-lang-mode=series] .series-header h1,html:lang(ko) body[data-blog-lang-mode=series] .series-header h1,html:lang(zh) body[data-blog-lang-mode=series] .series-header .subtitle,html:lang(zh-tw) body[data-blog-lang-mode=series] .series-header .subtitle,html:lang(zh-cn) body[data-blog-lang-mode=series] .series-header .subtitle,html:lang(ja) body[data-blog-lang-mode=series] .series-header .subtitle,html:lang(ko) body[data-blog-lang-mode=series] .series-header .subtitle,html:lang(zh) body:is([data-blog-lang-mode=articles-listing],[data-blog-lang-mode=series]) .article-title,html:lang(zh-tw) body:is([data-blog-lang-mode=articles-listing],[data-blog-lang-mode=series]) .article-title,html:lang(zh-cn) body:is([data-blog-lang-mode=articles-listing],[data-blog-lang-mode=series]) .article-title,html:lang(ja) body:is([data-blog-lang-mode=articles-listing],[data-blog-lang-mode=series]) .article-title,html:lang(ko) body:is([data-blog-lang-mode=articles-listing],[data-blog-lang-mode=series]) .article-title{font-family:Iowan Old Style,"Noto Serif TC","Noto Serif SC","Noto Serif JP","Noto Serif KR","Noto Serif",Palatino Linotype,Palatino,Book Antiqua,Georgia,Times New Roman,serif}html:lang(zh) body[data-blog-lang-mode=series] .site-nav-link,html:lang(zh-tw) body[data-blog-lang-mode=series] .site-nav-link,html:lang(zh-cn) body[data-blog-lang-mode=series] .site-nav-link,html:lang(ja) body[data-blog-lang-mode=series] .site-nav-link,html:lang(ko) body[data-blog-lang-mode=series] .site-nav-link,html:lang(zh) body[data-blog-lang-mode=series] .series-header h1,html:lang(zh-tw) body[data-blog-lang-mode=series] .series-header h1,html:lang(zh-cn) body[data-blog-lang-mode=series] .series-header h1,html:lang(ja) body[data-blog-lang-mode=series] .series-header h1,html:lang(ko) body[data-blog-lang-mode=series] .series-header h1,html:lang(zh) body[data-blog-lang-mode=series] .series-header .subtitle,html:lang(zh-tw) body[data-blog-lang-mode=series] .series-header .subtitle,html:lang(zh-cn) body[data-blog-lang-mode=series] .series-header .subtitle,html:lang(ja) body[data-blog-lang-mode=series] .series-header .subtitle,html:lang(ko) body[data-blog-lang-mode=series] .series-header .subtitle,html:lang(zh) body[data-blog-lang-mode=series] .article-title,html:lang(zh-tw) body[data-blog-lang-mode=series] .article-title,html:lang(zh-cn) body[data-blog-lang-mode=series] .article-title,html:lang(ja) body[data-blog-lang-mode=series] .article-title,html:lang(ko) body[data-blog-lang-mode=series] .article-title{font-family:Iowan Old Style,"Noto Serif TC","Noto Serif SC","Noto Serif JP","Noto Serif KR","Noto Serif",Palatino Linotype,Palatino,Book Antiqua,Georgia,Times New Roman,serif}html:lang(en) #blog-content article{font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif}html:lang(en) #blog-content article h1,html:lang(en) #blog-content article h2,html:lang(en) #blog-content article h3,html:lang(en) #blog-content article h4,html:lang(en) #blog-content article h5,html:lang(en) #blog-content article h6{font-family:Iowan Old Style,"Noto Serif TC","Noto Serif",Palatino Linotype,Palatino,Book Antiqua,Georgia,Times New Roman,serif}html:lang(en) .article-excerpt{font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif}body.font-size-transition-enabled{transition:background-color .3s ease,color .3s ease,font-size .3s ease}.container{max-width:860px;margin:0 auto}.sticky-nav{position:sticky;top:0;z-index:100;background:var(--bg-color);padding:.75rem 0;margin:-.75rem 0 1rem;border-bottom:1px solid transparent;transition:border-color .2s ease,background-color .3s ease}.sticky-nav.scrolled{border-bottom-color:var(--table-border-color, #e5e7eb)}@media(max-width:800px){.sticky-nav{top:0;padding-top:4.25rem}}@media(max-width:480px){.sticky-nav{top:0;padding-top:3.75rem}}.site-nav{display:flex;flex-wrap:wrap;align-items:center;gap:.5rem 1.25rem;margin-bottom:2rem;padding:0;list-style:none}.site-nav-link{color:var(--text-meta-color);text-decoration:none;font-size:.9rem;transition:color .2s ease}.site-nav-link:hover{color:var(--link-hover-color, #2563eb)}.site-nav-link.active{color:var(--link-hover-color, #2563eb);font-weight:600}.site-nav-wrapper .site-nav{margin-bottom:0}.back-link{display:inline-block;color:var(--text-meta-color);text-decoration:none;font-size:.9rem;transition:color .2s ease}.back-link:hover{color:var(--link-hover-color, #2563eb)}.back-link:before{content:"← "}article{margin-top:2rem}h1{font-size:2rem;margin-bottom:.5rem;font-weight:600}.meta{color:var(--text-meta-color);font-size:.9rem;margin-bottom:2rem}article p{margin-bottom:1rem}article h2{font-size:1.5rem;margin-top:2rem;margin-bottom:1rem;font-weight:600}article h3{font-size:1.25rem;margin-top:1.5rem;margin-bottom:.75rem;font-weight:600}article ul,article ol{margin-left:0;padding-left:calc(2.5rem * var(--font-size-scale, 1));margin-bottom:1rem;list-style-position:outside}article li{margin-bottom:.5rem;padding-left:calc(.5rem * var(--font-size-scale, 1));overflow-wrap:break-word;word-wrap:break-word;margin-left:0}article ol{list-style-type:decimal}article ol ol{list-style-type:lower-alpha}article ol ol ol{list-style-type:lower-roman}article ol ol ol ol{list-style-type:decimal}article ol ol ol ol ol{list-style-type:lower-alpha}article ol ol ol ol ol ol{list-style-type:lower-roman}article a{color:var(--link-color);text-decoration:none;border-bottom:1px solid var(--link-decoration-color);padding-bottom:1px;transition:color .2s,border-color .2s}article a:link{color:var(--link-unvisited-color, var(--link-color));border-bottom-color:var(--link-decoration-unvisited-color, var(--link-decoration-color))}article a:hover{color:var(--link-hover-color);border-bottom-color:var(--link-decoration-hover-color)}article a:visited{color:var(--link-visited-color);border-bottom-color:var(--link-decoration-visited-color)}article a:visited:hover{color:var(--link-hover-color);border-bottom-color:var(--link-decoration-hover-color)}article a[target=_blank]{position:relative}article a[target=_blank]:after{content:"↗";display:inline-block;font-size:.65em;font-weight:900;opacity:.4;margin-left:.15em;vertical-align:super;line-height:0;transition:opacity .2s}article a[target=_blank]:hover:after{opacity:.6}article blockquote{border-left:4px solid var(--blockquote-border-color);padding:.5rem 1rem .5rem 1.5rem;margin:1.5rem 0;background-color:var(--blockquote-bg);color:var(--blockquote-text-color);font-style:italic;border-radius:0 4px 4px 0;transition:border-color .3s ease,background-color .3s ease,color .3s ease}article blockquote p{margin-bottom:.5rem}article blockquote p:last-child{margin-bottom:0}pre{border:1px solid var(--code-border-color);border-radius:6px;padding:16px;overflow-x:auto;margin-bottom:1rem;position:relative;background-color:var(--bg-color);transition:border-color .3s ease,background-color .3s ease}.code-copy-btn{position:absolute;top:8px;right:12px;background:var(--code-label-bg);border:1px solid var(--code-border-color);border-radius:4px;padding:4px 8px;cursor:pointer;font-size:.7rem;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,sans-serif;font-weight:500;color:var(--code-label-color);opacity:0;transition:opacity .2s ease,background-color .2s ease,color .2s ease,transform .15s ease;display:flex;align-items:center;gap:4px;z-index:10}pre:hover .code-copy-btn{opacity:1}.code-copy-btn:hover{background-color:var(--inline-code-bg);color:var(--text-color)}.code-copy-btn:active{transform:scale(.95)}.code-copy-btn.copied{color:#22c55e;border-color:#22c55e}.code-copy-btn svg{width:14px;height:14px;stroke:currentColor;stroke-width:2;fill:none}pre:has(.code-copy-btn) .code-language-label{right:auto;left:12px}canvas{display:block;margin:1.5rem auto;border:1px solid var(--code-border-color);border-radius:6px}.example-canvas{width:100%;aspect-ratio:4 / 2}.code-language-label{position:absolute;top:8px;right:12px;font-size:.75rem;color:var(--code-label-color);background:var(--code-label-bg);padding:2px 8px;border-radius:4px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,sans-serif;text-transform:uppercase;font-weight:500;letter-spacing:.5px;transition:color .3s ease,background .3s ease}code{font-family:SF Mono,Monaco,Cascadia Code,Roboto Mono,Consolas,Courier New,monospace;font-size:85%}code:not(pre code){background-color:var(--inline-code-bg);padding:.2em .4em;border-radius:3px;transition:background-color .3s ease}.text-emphasis{position:relative;display:inline-block;color:var(--emphasis-text-color);padding:.1em .35em;font-weight:600;letter-spacing:.01em;z-index:0}.text-emphasis:before{content:"";position:absolute;left:-.3em;right:-.35em;bottom:-.25em;height:65%;background:var(--emphasis-bg);border-radius:999px;z-index:-1;clip-path:polygon(3% 55%,12% 40%,28% 48%,42% 38%,60% 50%,78% 42%,95% 55%,92% 72%,74% 68%,58% 82%,37% 72%,18% 84%,6% 73%);transform:rotate(-1.75deg) translateY(.05em);transition:background .3s ease,transform .3s ease}.remark{margin:1.5rem 0;padding:1rem 1.25rem;background-color:var(--remark-bg);border-left:3px solid var(--remark-border-color);border-radius:.5rem;color:var(--remark-text-color);font-style:normal;line-height:1.6;transition:background-color .3s ease,color .3s ease,border-color .3s ease}.remark strong{color:inherit;font-weight:700}.remark code{background-color:var(--remark-inline-code-bg);color:inherit}.tldr{margin:2rem 0;padding:1.25rem 1.5rem;background-color:var(--tldr-bg);border-left:4px solid var(--tldr-border-color);border-radius:.5rem;color:var(--tldr-text-color);font-style:normal;line-height:1.7;transition:background-color .3s ease,color .3s ease,border-color .3s ease}.tldr>*:first-child{margin-top:0}.tldr>*:last-child{margin-bottom:0}.tldr h2,.tldr h3,.tldr h4{color:var(--tldr-title-color);margin-top:1rem;margin-bottom:.75rem;font-weight:600}.tldr h2:first-child,.tldr h3:first-child,.tldr h4:first-child{margin-top:0}.tldr strong{color:inherit;font-weight:700}.tldr code{background-color:var(--tldr-inline-code-bg);color:inherit}pre code{background:transparent;padding:0;border:none;display:block}.image-shadow{box-shadow:var(--image-shadow, 0 4px 20px rgba(0, 0, 0, .15), 0 2px 6px rgba(0, 0, 0, .1));transition:box-shadow .3s ease}.image-rounded{border-radius:8px;overflow:hidden}.image-caption{display:block;text-align:center;font-size:.875rem;color:var(--text-meta-color);font-style:italic;margin-top:.5rem;margin-bottom:1.5rem;line-height:1.5;transition:color .3s ease}article table{width:100%;border-collapse:collapse;margin-bottom:1rem}article table thead{background-color:var(--table-header-bg)}article table th{padding:12px 16px;text-align:left;font-weight:600;border-bottom:2px solid var(--table-border-color);color:var(--text-color)}article table td{padding:12px 16px;border-bottom:1px solid var(--table-border-color)}article table tbody tr:hover{background-color:var(--table-row-hover-bg);transition:background-color .2s ease}article table tbody tr:last-child td{border-bottom:none}@media(min-width:2560px){h1{font-size:2.5rem}article h2{font-size:2rem}article h3{font-size:1.75rem}.meta{font-size:1rem}code{font-size:90%}.image-caption{font-size:1rem}}@media(max-width:980px){body{padding:5rem .5rem 1rem}.container{margin-top:0}h1{font-size:1.5rem}}@media(max-height:600px){body{padding-top:5rem}.container{margin-top:0}}.image-viewer-overlay{position:fixed;inset:0;background-color:#000000e6;z-index:10000;display:none;flex-direction:column;align-items:center;justify-content:center;opacity:0;transition:opacity .3s ease}.image-viewer-overlay.show{display:flex;opacity:1}.image-viewer-close{position:absolute;top:1rem;right:1rem;background:#ffffff1a;border:none;color:#fff;font-size:2rem;width:3rem;height:3rem;border-radius:50%;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:background-color .2s ease,transform .2s ease;z-index:10001}.image-viewer-close:hover{background:#fff3;transform:scale(1.1)}.image-viewer-container{flex:1;width:100%;display:flex;align-items:center;justify-content:center;overflow:hidden;cursor:zoom-out}.image-viewer-img{max-width:90%;max-height:85vh;object-fit:contain;cursor:grab;user-select:none;-webkit-user-drag:none;will-change:transform;transform-origin:center center;-webkit-transform-origin:center center;touch-action:none}.image-viewer-img.dragging{cursor:grabbing;transition:none!important}.image-viewer-img:not(.dragging){transition:transform .15s ease-out}.image-viewer-img:active{cursor:grabbing}.image-viewer-controls{position:absolute;bottom:1.5rem;left:50%;transform:translate(-50%);display:flex;align-items:center;gap:.5rem;background:#0009;padding:.5rem 1rem;border-radius:2rem;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px)}.image-viewer-btn{background:#ffffff1a;border:none;color:#fff;font-size:1rem;padding:.5rem .75rem;border-radius:.5rem;cursor:pointer;transition:background-color .2s ease;font-family:system-ui,-apple-system,sans-serif}.image-viewer-btn:hover{background:#ffffff40}.image-viewer-zoom-level{color:#fff;font-size:.875rem;min-width:3rem;text-align:center;font-family:system-ui,-apple-system,sans-serif}img[data-zoomable]{cursor:zoom-in;transition:transform .2s ease,box-shadow .2s ease}img[data-zoomable]:hover{transform:scale(1.02);box-shadow:0 8px 25px #0003}@media(max-width:600px){.image-viewer-close{top:.75rem;right:.75rem;width:2.5rem;height:2.5rem;font-size:1.5rem}.image-viewer-controls{bottom:1rem;padding:.4rem .75rem;gap:.4rem}.image-viewer-btn{padding:.4rem .6rem;font-size:.875rem}.image-viewer-zoom-level{font-size:.75rem;min-width:2.5rem}.image-viewer-img{max-width:95%;max-height:80vh}}.toc-sidebar{position:fixed;left:1.5rem;top:50%;transform:translateY(-50%);width:240px;max-height:60vh;overflow-y:auto;z-index:50;display:none;scrollbar-width:thin;scrollbar-color:var(--table-border-color, rgba(0, 0, 0, .2)) transparent}.toc-sidebar::-webkit-scrollbar{width:4px}.toc-sidebar::-webkit-scrollbar-track{background:transparent}.toc-sidebar::-webkit-scrollbar-thumb{background-color:var(--table-border-color, rgba(0, 0, 0, .2));border-radius:4px}.toc-sidebar::-webkit-scrollbar-thumb:hover{background-color:var(--text-meta-color)}.toc-nav{padding:1rem;background-color:var(--bg-color);border-radius:8px;border:1px solid var(--table-border-color, rgba(0, 0, 0, .1));box-shadow:0 2px 8px #0000000d;transition:background-color .3s ease,border-color .3s ease}.toc-title{font-size:calc(.7rem * var(--font-size-scale, 1));font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--text-meta-color);margin-bottom:.75rem;padding-bottom:.5rem;border-bottom:1px solid var(--table-border-color, rgba(0, 0, 0, .1))}.toc-list{list-style:none;padding:0;margin:0}.toc-item{margin:0;padding:0}.toc-link{display:block;font-size:calc(.75rem * var(--font-size-scale, 1));color:var(--text-meta-color);text-decoration:none;border-left:2px solid transparent;padding:.35rem 0 .35rem .75rem;margin-left:-.75rem;transition:color .2s ease,border-color .2s ease,font-size .3s ease;line-height:1.4;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.toc-link:hover{color:var(--text-color)}.toc-link.active{color:var(--text-color);border-left-color:var(--text-color);font-weight:500}.toc-h2 .toc-link{padding-left:1.25rem;margin-left:-.75rem}.toc-h3 .toc-link{padding-left:1.75rem;margin-left:-.75rem;font-size:calc(.7rem * var(--font-size-scale, 1))}@media(max-width:1200px){.toc-sidebar{display:none!important}}.toc-mobile{display:none;position:fixed;bottom:1.5rem;right:1.5rem;z-index:100}.toc-mobile-btn{width:3rem;height:3rem;border-radius:50%;background-color:var(--bg-color);border:1px solid var(--table-border-color, rgba(0, 0, 0, .1));box-shadow:0 2px 12px #00000026;cursor:pointer;display:flex;align-items:center;justify-content:center;color:var(--text-color);transition:background-color .2s ease,box-shadow .2s ease,transform .2s ease}.toc-mobile-btn:hover{box-shadow:0 4px 16px #0003;transform:scale(1.05)}.toc-mobile-btn:active{transform:scale(.95)}.toc-mobile-btn svg{width:1.25rem;height:1.25rem}.toc-mobile-dropdown{position:absolute;bottom:calc(100% + .75rem);right:0;width:280px;max-height:60vh;background-color:var(--bg-color);border:1px solid var(--table-border-color, rgba(0, 0, 0, .1));border-radius:12px;box-shadow:0 4px 24px #00000026;display:none;flex-direction:column;overflow:hidden;transition:background-color .3s ease,border-color .3s ease}.toc-mobile-dropdown.show{display:flex}.toc-mobile-header{display:flex;align-items:center;justify-content:space-between;padding:.75rem 1rem;border-bottom:1px solid var(--table-border-color, rgba(0, 0, 0, .1))}.toc-mobile-title{font-size:calc(.8rem * var(--font-size-scale, 1));font-weight:600;color:var(--text-color)}.toc-mobile-close{background:none;border:none;font-size:1.5rem;color:var(--text-meta-color);cursor:pointer;padding:0;line-height:1;transition:color .2s ease}.toc-mobile-close:hover{color:var(--text-color)}.toc-mobile-list{list-style:none;padding:.5rem 0;margin:0;overflow-y:auto;scrollbar-width:thin;scrollbar-color:var(--table-border-color, rgba(0, 0, 0, .2)) transparent}.toc-mobile-list::-webkit-scrollbar{width:4px}.toc-mobile-list::-webkit-scrollbar-track{background:transparent}.toc-mobile-list::-webkit-scrollbar-thumb{background-color:var(--table-border-color, rgba(0, 0, 0, .2));border-radius:4px}.toc-mobile-item{margin:0;padding:0}.toc-mobile-link{display:block;padding:.6rem 1rem;font-size:calc(.85rem * var(--font-size-scale, 1));color:var(--text-meta-color);text-decoration:none;transition:background-color .2s ease,color .2s ease;border-left:3px solid transparent}.toc-mobile-link:hover{background-color:#00000008;color:var(--text-color)}html:has(#dark-mode-toggle:checked) .toc-mobile-link:hover,html[data-blog-dark] .toc-mobile-link:hover{background-color:#ffffff0d}.toc-mobile-link.active{color:var(--text-color);border-left-color:var(--text-color);font-weight:500}.toc-mobile-h2 .toc-mobile-link{padding-left:1.5rem}.toc-mobile-h3 .toc-mobile-link{padding-left:2rem;font-size:calc(.8rem * var(--font-size-scale, 1))}@media(max-width:1200px){.toc-mobile{display:block}}@media(max-width:480px){.toc-mobile{bottom:1rem;right:1rem}.toc-mobile-btn{width:2.75rem;height:2.75rem}.toc-mobile-dropdown{width:calc(100vw - 2rem);max-width:320px}}
