@font-face{font-family:jetbrains mono;font-style:normal;font-weight:400;src:url(/fonts/JetbrainsMono/JetBrainsMono-Regular.ttf),local("ttf");font-display:swap}@font-face{font-family:jetbrains mono;font-style:normal;font-weight:700;src:url(/fonts/JetbrainsMono/JetBrainsMono-Bold.ttf),local("ttf");font-display:swap}@font-face{font-family:space grotesk;font-style:normal;font-weight:400;src:url(/fonts/SpaceGrotesk/SpaceGrotesk-Regular.ttf),local("ttf");font-display:swap}@font-face{font-family:space grotesk;font-style:normal;font-weight:700;src:url(/fonts/SpaceGrotesk/SpaceGrotesk-Bold.ttf),local("ttf");font-display:swap}@font-face{font-family:zedtextftl;src:url(/fonts/zed-fonts/ZedTextL-Regular.woff2)format("woff2");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:zedtextftl;src:url(/fonts/zed-fonts/ZedTextL-Bold.woff2)format("woff2");font-weight:700;font-style:normal;font-display:swap}@font-face{font-family:zeddisplayftl;src:url(/fonts/zed-fonts/ZedDisplayL-Heavy.woff2)format("woff2");font-weight:400;font-style:normal;font-display:swap}.cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));grid-template-rows:auto;gap:24px;padding:12px 0}.card{min-height:100px;background:var(--bg-2);border:2px solid var(--border-color);border-radius:10px;overflow:hidden;transition:all .3s ease}.card:hover{border-color:var(--accent);box-shadow:0 8px 16px rgba(0,0,0,.1);transform:translateY(-4px)}.card-info{padding:0 24px 24px}.card-title{margin-top:.7em;font-family:var(--header-font);font-weight:700;font-size:1.15em;letter-spacing:-.01em;line-height:1.3}.card-title a{color:var(--text-0);text-decoration:none;transition:color .2s ease}.card-title a:hover{color:var(--accent)}@media(max-width:768px){.card-title{font-size:1.1em}}@media(max-width:576px){.card-title{font-size:1.05em}}.card-image{border:unset;width:100%;height:160px;object-fit:cover;object-position:center;display:block;transition:transform .3s ease}.card:hover .card-image{transform:scale(1.05)}.card-image-placeholder{height:12px;width:100%}.card-description{margin-top:.5em;overflow:hidden;font-family:var(--text-font);line-height:1.6;color:var(--text-1);font-size:.95em}.card-tags{display:flex;flex-wrap:wrap;gap:.5rem;align-items:center;margin-top:.75rem}.card-tag{font-family:var(--text-font);font-size:.8rem;padding:.25rem .65rem;background-color:var(--bg-1);color:var(--text-1);border-radius:.375rem;text-decoration:none;transition:all .3s cubic-bezier(.4,0,.2,1);border-bottom:none;box-shadow:0 1px 3px rgba(0,0,0,.1)}.card-tag:hover{background-color:var(--accent);color:var(--hover-text);transform:translateY(-2px)scale(1.05);box-shadow:0 4px 8px rgba(0,0,0,.15)}.card-tag:active{transform:translateY(0)scale(1);box-shadow:0 1px 2px rgba(0,0,0,.1)}@media all and (max-width:720px){.cards{gap:18px;grid-template-columns:repeat(auto-fill,minmax(280px,1fr))}}.project-collection{padding:20px 0 32px;font-family:var(--reading-font)}.project-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));align-items:stretch;gap:12px}.project-card{min-width:0;overflow:hidden;border-radius:8px;background:var(--bg-2)}.project-link{display:flex;flex-direction:column;height:100%;padding:0;border:0;border-radius:inherit;color:var(--text-0);text-decoration:none}.project-link:hover{color:var(--text-0)}.project-link:focus-visible{outline:2px solid var(--link-color);outline-offset:-2px}.project-preview{flex-shrink:0;aspect-ratio:4/3;overflow:hidden;background:var(--bg-1)}.project-preview img{display:block;width:100%;height:100%;max-width:none;object-fit:cover;object-position:left top}.project-preview-placeholder{display:flex;align-items:center;justify-content:center;height:100%;color:var(--text-2);font-size:48px;font-weight:500}.project-details{display:flex;flex-direction:column;flex:1;padding:9px 10px 10px}.project-name{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden;margin:0;font-family:inherit;font-size:14px;font-weight:500;line-height:1.5;letter-spacing:0;overflow-wrap:anywhere}.project-summary{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden;margin:4px 0 0;font-family:inherit;font-size:12px;font-weight:400;line-height:1.5;color:var(--text-1)}.project-footer{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-top:auto;padding-top:10px;color:var(--text-2)}.project-source{overflow:hidden;font-size:12px;line-height:1.5;white-space:nowrap;text-overflow:ellipsis}.project-open{flex:none;width:16px;height:16px;max-height:none;border:1px solid var(--border-color);border-radius:50%;padding:2px}.project-link:hover .project-open{color:var(--text-0)}@media(max-width:480px){.project-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.project-details{padding:8px}}@media(max-width:340px){.project-grid{grid-template-columns:minmax(0,1fr)}}code{font-family:var(--code-font),ui-monospace,monospace;background:var(--bg-1);padding:.12em .35em;border-radius:4px;border:1px solid var(--border-color);font-size:.9em}pre{margin:1.5em 0;padding:18px 20px;border:1px solid var(--border-color);border-radius:8px;font-family:var(--code-font),ui-monospace,monospace;font-size:.875em;line-height:1.7;letter-spacing:0;background:var(--bg-code);overflow-x:auto;tab-size:4;-webkit-overflow-scrolling:touch}pre code{background:0 0;color:inherit;font-size:100%;padding:0;border:0;border-radius:0}.code-block{margin:1.5em 0;border:1px solid var(--border-color);border-radius:10px;overflow:hidden;background:var(--bg-code)}.code-toolbar{display:flex;align-items:center;justify-content:space-between;gap:12px;min-height:38px;padding:3px 12px;border-bottom:1px solid var(--border-color);background:var(--bg-1);font-family:var(--code-font),ui-monospace,monospace;font-size:12px;line-height:1.4}.code-info,.code-actions{display:flex;align-items:center;gap:12px}.code-language{color:var(--text-0);font-weight:700}.code-actions{gap:4px}.code-action,.code-expand{appearance:none;border:0;border-radius:4px;color:var(--text-1);background:0 0;font:inherit;cursor:pointer}.code-action{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;padding:0}.code-action:hover,.code-expand:hover{background:var(--bg-2);color:var(--text-0)}.code-action:focus-visible,.code-expand:focus-visible,.code-block pre:focus-visible{outline:2px solid var(--link-color);outline-offset:-3px}.code-block pre{margin:0;border:0;border-radius:0}.code-block pre>code{display:block;width:max-content;min-width:100%;counter-reset:code-line}.code-block code>.line{display:flex;min-height:1.7em}.code-block code>.line::before{counter-increment:code-line;content:counter(code-line);flex:0 0 3ch;box-sizing:content-box;margin-right:16px;padding-right:12px;border-right:1px solid var(--border-color);color:var(--text-2);text-align:right;user-select:none;-webkit-user-select:none}.code-block.is-collapsed pre{max-height:360px;overflow-y:hidden}.code-expand{display:flex;align-items:center;justify-content:center;width:100%;min-height:36px;padding:8px;border-top:1px solid var(--border-color);border-radius:0;font-family:var(--code-font),ui-monospace,monospace;font-size:12px}.code-copy-status{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}@media(max-width:576px){.code-toolbar{padding:3px 8px;gap:6px}.code-block code>.line::before{margin-right:10px;padding-right:8px;flex-basis:2.5ch}.code-block pre{padding:14px 10px;font-size:13px}}.chroma{color:var(--code-text);background-color:var(--bg-code)}.chroma .hl{background-color:var(--code-highlight)}.chroma .ln,.chroma .lnt{color:var(--text-2)}.chroma .k,.chroma .kc,.chroma .kn,.chroma .kp,.chroma .kr{color:var(--code-keyword)}.chroma .kd{color:var(--code-type);font-style:italic}.chroma .kt{color:var(--code-type)}.chroma .na{color:var(--code-function)}.chroma .nb{color:var(--code-type);font-style:italic}.chroma .nc{color:var(--code-function)}.chroma .nf{color:var(--code-function)}.chroma .nl{color:var(--code-type);font-style:italic}.chroma .nt{color:var(--code-keyword)}.chroma .nv,.chroma .vc,.chroma .vg,.chroma .vi{color:var(--code-type);font-style:italic}.chroma .s,.chroma .sa,.chroma .sb,.chroma .sc,.chroma .dl,.chroma .sd,.chroma .s2,.chroma .se,.chroma .sh,.chroma .si,.chroma .sx,.chroma .sr,.chroma .s1,.chroma .ss{color:var(--code-string)}.chroma .m,.chroma .mb,.chroma .mf,.chroma .mh,.chroma .mi,.chroma .il,.chroma .mo{color:var(--code-number)}.chroma .o,.chroma .ow{color:var(--code-keyword)}.chroma .c,.chroma .ch,.chroma .cm,.chroma .c1,.chroma .cs{color:var(--code-comment)}.chroma .cp,.chroma .cpf{color:var(--code-keyword)}.chroma .gd{color:var(--code-deleted)}.chroma .gi{color:var(--code-function);font-weight:700}.chroma .go{color:var(--code-comment)}.page-header{font-size:2.5em;line-height:1.15;font-family:var(--display-font);font-weight:900;letter-spacing:-.02em;margin:2.5rem 0 1rem}.centered-header{font-family:var(--display-font);font-weight:900;letter-spacing:-.02em;position:absolute;top:40%;left:50%;transform:translate(-50%,-50%);text-align:center;font-size:4em}header{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:space-between;align-items:center;padding:1em 0;font-size:1.25rem;gap:20px;width:100%;max-width:100%;box-sizing:border-box;overflow:visible}@media(min-width:769px){header{flex-wrap:nowrap}}header .main{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:flex-start;align-items:center;gap:12px;font-size:1.6rem;font-family:var(--header-font);font-weight:600;letter-spacing:-.01em;flex:initial;margin-bottom:0}header .main a{color:var(--text-0);text-decoration:none;transition:color .2s ease}header .main a:hover{color:var(--primary-color)}nav{display:flex;flex-direction:row;flex-wrap:wrap;align-items:center;gap:1rem;font-family:var(--text-font);font-size:1.05rem;flex:initial;min-width:fit-content}nav a{color:var(--text-1);text-decoration:none;transition:color .2s ease;font-weight:500;white-space:nowrap}nav a:hover{color:var(--primary-color)}@media(max-width:768px){header{flex-wrap:wrap}header .main{margin-bottom:10px}}.socials{flex-grow:0;display:flex;flex-direction:row;flex-wrap:wrap;justify-content:flex-start;align-items:center;gap:12px}.social{display:inline-flex;align-items:center;justify-content:center;width:calc(var(--nav-icon-size) + 4px);height:calc(var(--nav-icon-size) + 4px);line-height:0;border-bottom:unset;background-image:unset;padding:2px;transition:transform .2s ease}.social:hover{transform:translateY(-2px)}.social>img{border:unset;display:block;width:var(--nav-icon-size);height:var(--nav-icon-size);object-fit:contain;opacity:.7;transition:opacity .2s ease}.social>img:hover{opacity:1}.meta{color:#999;letter-spacing:-.02em;font-size:.95em;font-family:var(--text-font)}#dark-mode-toggle{appearance:none;border:0;background:0 0;border-radius:3px;cursor:pointer;flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;width:calc(var(--nav-icon-size) + 4px);height:calc(var(--nav-icon-size) + 4px);padding:2px;line-height:0}#dark-mode-toggle img{display:block;width:var(--nav-icon-size);height:var(--nav-icon-size);object-fit:contain;border:unset;transition:transform .3s ease}#dark-mode-toggle img:hover{transform:rotate(15deg)}h1,h2,h3,h4,h5,h6{font-family:var(--header-font);font-weight:600;margin-top:2em;margin-bottom:1em;letter-spacing:-.01em;line-height:1.3;color:var(--text-0)}h1{font-size:2rem;font-weight:700;margin-top:1em}h2{font-size:1.5rem}h3{font-size:1.3rem}h4{font-size:1.2rem}h5{font-size:1.1rem}h6{font-size:1rem}h1::before,h2::before,h3::before,h4::before,h5::before,h6::before{content:none}.home-link{display:inline-flex;align-items:center;justify-content:center;width:calc(var(--nav-icon-size) + 4px);height:calc(var(--nav-icon-size) + 4px);padding:2px;line-height:0;opacity:.8}.home-link svg{display:block;width:var(--nav-icon-size);height:var(--nav-icon-size);max-height:none}.home-link:hover{opacity:1}.home-link:focus-visible,.social:focus-visible,#dark-mode-toggle:focus-visible{outline:2px solid var(--link-color);outline-offset:3px}.home-link.home-avatar{padding:0;overflow:hidden;border:1px solid var(--border-color);border-radius:50%;opacity:1;transition:border-color .15s ease}.home-avatar img{display:block;width:100%;height:100%;border-radius:inherit;object-fit:cover;object-position:center 20%}.home-link.home-avatar:hover{border-color:var(--text-1)}.home-avatar-default{color:var(--text-1);background:var(--bg-2)}.home-avatar-default svg{width:100%;height:100%;max-height:none}img{max-width:100%}figure{box-sizing:border-box;display:inline-block;margin:0;max-width:100%}figure img{max-height:500px}@media screen and (min-width:600px){figure{padding:0 40px}}figure h4{font-size:1rem;margin:0;margin-bottom:1em}figure h4::before{content:"↳ "}svg{max-height:15px}.post-single{width:100%;max-width:100%}.post-single .post-header{margin-bottom:2.5rem;padding-bottom:1.5rem;border-bottom:1px solid var(--border-color)}.post-single .post-title{font-family:var(--header-font);font-size:2.5rem;font-weight:700;line-height:1.2;margin:0 0 1rem;color:var(--text-0);letter-spacing:-.02em}@media(max-width:768px){.post-single .post-title{font-size:2rem}}@media(max-width:576px){.post-single .post-title{font-size:1.75rem}}.post-single .post-meta{display:flex;flex-direction:column;gap:.75rem;margin-top:1rem}.post-single .post-date{display:block}.post-single .post-date time{font-family:var(--text-font);font-size:.9rem;color:var(--text-1);opacity:.8}.post-single .post-tags{display:flex;flex-wrap:wrap;gap:.5rem;align-items:center}.post-single .post-description{display:block;font-family:var(--text-font);font-size:1.05rem;color:var(--text-1);line-height:1.6;font-style:italic;opacity:.9;margin-top:.25rem}.post-single .post-tag{font-family:var(--text-font);font-size:.875rem;padding:.25rem .75rem;background-color:var(--bg-1);color:var(--text-1);border-radius:.375rem;text-decoration:none;transition:all .3s cubic-bezier(.4,0,.2,1);border-bottom:none;box-shadow:0 1px 3px rgba(0,0,0,.1)}.post-single .post-tag:hover{background-color:var(--accent);color:var(--hover-text);transform:translateY(-2px)scale(1.05);box-shadow:0 4px 8px rgba(0,0,0,.15)}.list-tags{display:flex;flex-wrap:wrap;gap:.5rem;align-items:center;margin-top:.75rem}.list-tag{font-family:var(--text-font);font-size:.875rem;padding:.25rem .75rem;background-color:var(--bg-1);color:var(--text-1);border-radius:.375rem;text-decoration:none;transition:all .3s cubic-bezier(.4,0,.2,1);border-bottom:none;box-shadow:0 1px 3px rgba(0,0,0,.1)}.list-tag:hover{background-color:var(--accent);color:var(--hover-text);transform:translateY(-2px)scale(1.05);box-shadow:0 4px 8px rgba(0,0,0,.15)}.list-tag:active{transform:translateY(0)scale(1);box-shadow:0 1px 2px rgba(0,0,0,.1)}.list-item .title{font-family:var(--header-font);font-size:1.75rem;font-weight:600;line-height:1.3;margin:.5rem 0;letter-spacing:-.01em}@media(max-width:768px){.list-item .title{font-size:1.5rem}}@media(max-width:576px){.list-item .title{font-size:1.25rem}}.list-item .title a{color:var(--text-0);text-decoration:none;transition:color .2s ease}.list-item .title a:hover{color:var(--accent)}.post-content{font-family:var(--text-font);font-size:1rem;line-height:var(--line-height);color:var(--text-0)}.post-content h1,.post-content h2,.post-content h3,.post-content h4,.post-content h5,.post-content h6{font-family:var(--header-font);font-weight:600;line-height:1.3;margin-top:2rem;margin-bottom:1rem;color:var(--text-0);letter-spacing:-.01em}.post-content h1{font-size:2rem;margin-top:2.5rem}.post-content h2{font-size:1.75rem;margin-top:2.25rem}.post-content h3{font-size:1.5rem}.post-content h4{font-size:1.25rem}.post-content h5{font-size:1.1rem}.post-content h6{font-size:1rem}.post-content p{margin-bottom:1.25rem;line-height:var(--line-height)}.post-content a{color:var(--link-color);text-decoration:none;border-bottom:1px solid transparent;transition:all .2s ease}.post-content a:hover{border-bottom-color:var(--link-color)}.post-content blockquote{margin:1.5rem 0;padding:1rem 1.5rem;border-left:4px solid var(--accent);background-color:var(--bg-1);border-radius:.375rem;font-style:italic;color:var(--text-1)}.post-content blockquote p:last-child{margin-bottom:0}.post-content hr{margin:2rem 0;border:none;border-top:1px solid var(--border-color)}.post-content img{max-width:100%;max-height:500px;width:auto;height:auto;border-radius:.5rem;margin:1.5rem 0;object-fit:contain}@media screen and (min-width:600px){.post-content img{max-width:70%}}.wechat-list-item{display:flex;align-items:flex-start;gap:16px;padding:18px 0;border-bottom:1px solid var(--border-color)}.wechat-list-item:last-child{border-bottom:none}.wechat-list-info{flex:1;min-width:0}.wechat-list-title{font-family:var(--header-font);font-size:1.15rem;font-weight:600;line-height:1.4;margin:0 0 8px}.wechat-list-title a{color:var(--text-0);text-decoration:none;transition:color .2s ease}.wechat-list-title a:hover{color:var(--accent)}.wechat-list-date{font-size:.85rem;color:var(--text-2)}.wechat-list-thumb{width:80px;height:80px;flex-shrink:0;border-radius:4px;overflow:hidden}.wechat-list-thumb img{width:100%;height:100%;object-fit:cover;margin:0;border-radius:4px}.wechat-list-placeholder{width:100%;height:100%;background:var(--bg-1);border-radius:4px}@media(max-width:576px){.wechat-list-item{padding:14px 0;gap:12px}.wechat-list-thumb{width:60px;height:60px}.wechat-list-title{font-size:1.05rem}}.posts-feed{display:grid;gap:12px;padding:20px 0 32px;font-family:var(--reading-font)}.post-preview{position:relative;min-width:0;overflow:hidden;border-radius:8px;background:var(--bg-2)}.post-preview-body{display:flex;align-items:center;justify-content:space-between;gap:20px;min-height:116px;padding:20px;border:0;border-radius:inherit;color:var(--text-0);text-decoration:none}.post-preview-body:hover{color:var(--text-0)}.post-preview-hit-area{position:absolute;inset:0;z-index:1;padding:0;border:0;border-radius:inherit}.post-preview-hit-area:focus-visible{outline:2px solid var(--link-color);outline-offset:-2px}.post-preview-info{flex:1;min-width:0}.post-preview-title{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden;margin:0;font-family:inherit;font-size:15px;font-weight:500;line-height:1.55;letter-spacing:0;overflow-wrap:anywhere}.post-preview-tags{display:flex;align-items:center;flex-wrap:wrap;gap:6px;margin-top:7px}.post-preview-meta{display:flex;align-items:center;flex-wrap:wrap;gap:6px 8px;margin-top:7px;color:var(--text-2);font-size:12px;font-weight:400;line-height:1.5}.post-preview-author{min-width:0;overflow-wrap:anywhere}.post-preview-meta time{color:inherit;white-space:nowrap}.post-preview-cover{flex:0 0 32%;max-width:240px;aspect-ratio:7/3;overflow:hidden;border-radius:4px;background:var(--bg-1)}.post-preview-cover img{display:block;width:100%;height:100%;object-fit:cover;object-position:center}@media(max-width:576px){.posts-feed{gap:10px;padding-top:16px}.post-preview-body{gap:12px;min-height:104px;padding:14px}.post-preview-title{font-size:14px}.post-preview-cover{flex-basis:33%;aspect-ratio:3/2}}.wechat-post{max-width:760px;margin:20px 0 0}.wechat-cover{margin:0 0 32px}.wechat-cover img{display:block;width:100%;height:auto;border-radius:3px;margin:0}.wechat-post .wechat-header{display:flex;flex-direction:column;align-items:flex-start;gap:14px;padding:0;margin-bottom:38px;border:0;text-align:left}.wechat-post .wechat-title{margin:0;font-family:var(--reading-font);font-size:28px;font-weight:600;line-height:1.45;letter-spacing:0}.wechat-post .wechat-meta{display:flex;flex-direction:row;align-items:center;flex-wrap:wrap;gap:14px;margin:0;font-family:var(--reading-font);font-size:14px;line-height:1.6;color:var(--text-2)}.wechat-post .wechat-author{color:var(--text-2)}.wechat-post .wechat-date{color:var(--text-2)}.wechat-post .post-content{font-family:var(--reading-font);font-size:16px;font-weight:400;line-height:1.6;color:var(--article-text);letter-spacing:.025em;overflow-wrap:break-word}.wechat-post .post-content p{font-family:inherit;line-height:1.6;margin:0 0 1.4em;text-align:left}.wechat-post .post-content h1,.wechat-post .post-content h2,.wechat-post .post-content h3,.wechat-post .post-content h4,.wechat-post .post-content h5,.wechat-post .post-content h6{font-family:var(--reading-font);font-weight:600;line-height:1.5;letter-spacing:0;scroll-margin-top:32px}.wechat-post .post-content h1{font-size:26px;margin:2.2em 0 .8em}.wechat-post .post-content h2{font-size:23px;margin:2.2em 0 .85em}.wechat-post .post-content h3{font-size:20px;margin:1.8em 0 .75em}.wechat-post .post-content h4{font-size:17px;margin:1.6em 0 .7em}.wechat-post .post-content h5,.wechat-post .post-content h6{font-size:16px;margin:1.5em 0 .65em}.wechat-post .post-content>:first-child{margin-top:0}.wechat-post .post-content img{display:block;max-width:100%;max-height:none;width:auto;height:auto;margin:28px auto;border-radius:3px}.wechat-post .post-content figure{display:block;padding:0;margin:28px 0}.wechat-post .post-content figure img{margin:0 auto}.wechat-post .post-content figcaption,.wechat-post .post-content figcaption h4{margin:10px 0 0;font-size:13px;font-weight:400;line-height:1.6;text-align:center;color:var(--text-2)}.wechat-post .post-content blockquote{margin:28px 0;padding:2px 0 2px 18px;border:0;border-left:3px solid var(--quote-border);border-radius:0;background:0 0;font-style:normal;color:var(--text-1)}.wechat-post .post-content blockquote p:last-child{margin-bottom:0}.wechat-post .post-content hr{width:100%;height:0;margin:40px 0;border:0;border-top:1px solid var(--border-color);background:0 0}.wechat-post .post-content ul,.wechat-post .post-content ol{padding-left:1.5em;margin:0 0 1.4em}.wechat-post .post-content li{margin-bottom:.5em;line-height:1.6}.wechat-post .post-content li>p{margin-bottom:.5em}.wechat-post .post-content ul ul,.wechat-post .post-content ol ol,.wechat-post .post-content ul ol,.wechat-post .post-content ol ul{margin:.5em 0 0}.wechat-post .post-content a{color:var(--link-color);border-bottom:1px solid transparent;border-radius:0;padding:0;text-decoration:none;transition:border-color .15s}.wechat-post .post-content a:hover{border-bottom-color:initial}.wechat-post .post-content strong{font-weight:600;color:var(--text-0)}.wechat-post .post-content :not(pre)>code:not([class]){font-family:var(--code-font),ui-monospace,monospace;font-size:.88em;padding:.12em .35em;background:var(--bg-1);border:0;border-radius:3px;color:var(--inline-code-color);overflow-wrap:anywhere}.article-table{margin:20px 0;max-width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.article-table:focus-visible{outline:2px solid var(--link-color);outline-offset:3px}.wechat-post .post-content table{width:auto;border-collapse:collapse;border:1px solid var(--border-color);margin:20px 0;font-family:inherit;font-size:14px;line-height:1.5}.wechat-post .article-table table{margin:0}.wechat-post .post-content table th,.wechat-post .post-content table td{padding:6px 10px;border:1px solid var(--border-color);text-align:left;vertical-align:top;line-height:1.5}.wechat-post .post-content table th{font-family:inherit;font-weight:600;color:var(--text-0);background:var(--bg-1)}.wechat-post .post-content mjx-container[display=true]{max-width:100%;padding:6px 0;overflow-x:auto;overflow-y:hidden}.wechat-bottom-bar{max-width:760px;margin:48px 0 0;border-top:1px solid var(--border-color);background:var(--bg-0)}.wechat-bottom-inner{display:flex;align-items:center;gap:12px;padding:18px 0}.wechat-bottom-left{display:flex;align-items:center;gap:9px}.wechat-bottom-avatar{width:28px;height:28px;border-radius:50%;overflow:hidden}.wechat-bottom-avatar img{display:block;width:100%;height:100%;object-fit:cover}.wechat-bottom-name{font-size:13px;color:var(--text-1)}.wechat-bottom-actions{display:flex;align-items:center;gap:8px;margin-left:auto}.wechat-bottom-btn{appearance:none;border:0;padding:0;cursor:pointer;display:flex;align-items:center;justify-content:center;width:36px;height:36px;border-radius:50%;background:0 0;color:var(--text-2);position:relative}.wechat-bottom-btn svg{width:19px;height:19px;max-height:none;fill:none;stroke:currentColor;stroke-width:1.5;stroke-linejoin:round;stroke-linecap:round}.wechat-bottom-btn:hover{color:var(--link-color);background:var(--bg-1)}.wechat-bottom-btn:focus-visible{outline:2px solid var(--link-color);outline-offset:2px}.wechat-bottom-btn.liked{color:var(--link-color)}.wechat-bottom-count{position:absolute;top:-1px;right:-1px;font-size:10px;color:inherit;background:var(--bg-0);padding:0 2px}@media(max-width:600px){.wechat-post .wechat-title{font-size:24px}.wechat-post .wechat-header{margin-bottom:30px}.wechat-post .post-content{letter-spacing:.015em}.wechat-post .post-content h2{font-size:21px;margin-top:2em}.wechat-post .post-content h3{font-size:19px}.wechat-bottom-bar{position:fixed;z-index:1000;bottom:0;left:0;right:0;margin:0;padding-bottom:env(safe-area-inset-bottom)}.wechat-bottom-inner{min-height:52px;padding:6px 22px}}.wechat-related{margin:2rem 0;padding:0}.wechat-related-title{font-family:var(--header-font);font-size:.95rem;font-weight:700;color:var(--text-0);margin-bottom:1rem}.wechat-related-item{display:block;padding:10px 0;font-size:.95rem;color:var(--text-0);text-decoration:none;border-bottom:1px solid var(--border-color);transition:color .2s}.wechat-related-item:hover{color:var(--link-color)}.wechat-related-num{color:var(--text-2);margin-right:8px;font-size:.85rem}.article-comments{max-width:760px;margin:16px 0 0;padding:0 0 12px;font-family:var(--reading-font);font-size:14px;line-height:1.6;color:var(--article-text);scroll-margin-top:24px}.article-comments [hidden]{display:none!important}.comments-status-row,.composer-heading{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:8px 12px}.comments-status,.comments-issue-link,.composer-note{font-size:12px;color:var(--text-2)}.comments-status-row{justify-content:flex-start;margin:0 0 16px}.comments-status{margin:0;font-family:inherit;line-height:1.6}.comments-status:empty,.composer-note:empty{display:none}.comments-issue-link{margin-left:auto}.article-comments a{padding:0;text-decoration:none}.article-comments a:hover{text-decoration:underline}.article-comments button{font-family:inherit;cursor:pointer}.comments-more{appearance:none;padding:5px 12px;border:1px solid var(--border-color);border-radius:5px;background:var(--bg-1);color:var(--text-0);font-size:12px;line-height:1.6}.comments-more:hover{background:var(--bg-2)}.article-comments button:disabled{opacity:.5;cursor:not-allowed}.article-comments button:focus-visible,.article-comments a:focus-visible{outline:2px solid var(--link-color);outline-offset:3px}.comment-thread{min-width:0;margin-bottom:24px}.thread-message{display:flex;align-items:flex-start;gap:12px;margin:0 0 12px;scroll-margin-top:24px}.thread-avatar{display:flex;align-items:center;justify-content:center;flex:0 0 28px;width:28px;height:28px;margin-top:4px;overflow:hidden;border-radius:50%;background:var(--bg-2);color:var(--text-2);font-size:13px}.thread-avatar img{display:block;width:100%;height:100%;object-fit:cover}.thread-message-card{flex:1;min-width:0;border:1px solid var(--border-color);border-radius:6px;overflow:hidden;background:var(--bg-0)}.thread-message-header{display:flex;align-items:center;flex-wrap:wrap;gap:6px 10px;padding:8px 12px;border-bottom:1px solid var(--border-color);background:var(--bg-1);font-size:12px;line-height:1.5}.thread-user{color:var(--text-0);font-weight:600}.thread-author{padding:0 5px;border:1px solid var(--border-color);border-radius:3px;color:var(--text-1);font-size:11px}.thread-date{color:var(--text-2)}.thread-message-body{padding:12px;overflow-wrap:anywhere;font-size:14px;line-height:1.6}.thread-message-body p,.article-comments .markdown-body p{margin:0 0 12px;font-family:inherit;line-height:1.6}.thread-message-body>:last-child{margin-bottom:0}.thread-message-body .thread-reply-to{margin-bottom:8px;color:var(--text-2);font-size:12px}.thread-plain{white-space:pre-wrap}.thread-message-body a{color:var(--link-color)}.thread-message-body img{max-width:100%;height:auto}.thread-message-body pre{max-width:100%;margin:12px 0;padding:10px 12px;font-size:12px;line-height:1.6}.thread-message-body blockquote{padding-left:12px;border-left:3px solid var(--quote-border);font-style:normal}.thread-message-body h1,.thread-message-body h2,.thread-message-body h3,.thread-message-body h4,.thread-message-body h5,.thread-message-body h6{margin:16px 0 8px;font-family:inherit;font-size:16px;line-height:1.5}.thread-message-body table{display:block;max-width:100%;overflow-x:auto;font-family:inherit}.thread-message-body th,.thread-message-body td{padding:5px 8px;border:1px solid var(--border-color);font-family:inherit}.thread-message-actions{display:flex;align-items:center;gap:14px;padding:0 12px 10px;color:var(--text-2);font-size:12px}.thread-text-button,.thread-toggle{appearance:none;padding:0;border:0;background:0 0;color:var(--link-color);font-size:12px;line-height:1.6}.thread-text-button:hover,.thread-toggle:hover{text-decoration:underline}.thread-permalink{margin-left:auto;color:var(--text-2)}.thread-replies{margin-left:40px;padding-left:12px;border-left:1px solid var(--border-color)}.thread-toggle,.thread-unresolved{margin:0 0 12px 52px}.thread-unresolved{font-size:12px;color:var(--text-2)}.comments-more{display:block;margin:0 auto 24px}.comment-composer{margin:24px 0;padding:0;border:0;background:0 0}.thread-reply-slot .comment-composer{margin:16px 0 0 40px;padding:0 0 0 12px;border-left:2px solid var(--border-color)}.composer-heading{margin-bottom:8px;font-size:13px;font-weight:600;color:var(--text-0)}.composer-note{margin:0 0 12px;font-family:inherit}.article-comments #gitalk-container{margin:0;font-size:14px}.article-comments .gt-container .hide{display:none!important}.article-comments .gt-container{font-family:inherit;font-size:14px;color:var(--article-text)}.article-comments .gt-container .gt-comments,.article-comments .gt-container .gt-counts,.article-comments .gt-container .gt-error,.article-comments .gt-container .gt-initing,.article-comments .gt-container .gt-action-sortasc,.article-comments .gt-container .gt-action-sortdesc{display:none}.article-comments .gt-container a{color:var(--link-color)}.article-comments .gt-container .gt-meta{z-index:5;margin:0 0 10px;padding:0;border:0;font-size:12px}.article-comments .gt-container .gt-meta::before,.article-comments .gt-container .gt-meta::after{display:none}.article-comments .gt-container .gt-user{float:none;text-align:right}.article-comments .gt-container .gt-popup{top:25px;border-color:var(--border-color);border-radius:5px;background:var(--bg-0);color:var(--text-1)}.article-comments .gt-container .gt-copyright{border-color:var(--border-color)}.article-comments .gt-container .gt-header{gap:12px}.article-comments .gt-container .gt-avatar,.article-comments .gt-container .gt-avatar-github{flex:0 0 28px;width:28px;height:28px}.article-comments .gt-container .gt-avatar img{border-radius:50%}.article-comments .gt-container .gt-header-comment{min-width:0;margin-left:0}.article-comments .gt-container .gt-header-textarea,.article-comments .gt-container .gt-header-preview{min-height:100px;padding:10px 12px;border:1px solid var(--border-color);border-radius:5px;background:var(--bg-1);color:var(--article-text);font-family:inherit;font-size:14px;line-height:1.6}.article-comments .gt-container .gt-header-textarea:focus{border-color:var(--link-color)}.article-comments .gt-container .gt-header-textarea::placeholder{color:var(--text-2)}.article-comments .gt-container .gt-header-controls{display:flex;align-items:center;justify-content:flex-end;flex-wrap:wrap;gap:8px;margin-top:10px}.article-comments .gt-container .gt-header-controls::before,.article-comments .gt-container .gt-header-controls::after{display:none}.article-comments .gt-container .gt-header-controls-tip{margin-right:auto;color:var(--text-2);font-size:12px}.article-comments .gt-container .gt-btn{float:none;width:auto;margin:0;padding:7px 10px;border:1px solid var(--border-color);border-radius:5px;background:var(--bg-1);color:var(--text-0);font-size:12px;line-height:1.4}.article-comments .gt-container .gt-btn-public,.article-comments .gt-container .gt-btn-login{background:var(--link-color);border-color:var(--link-color);color:var(--bg-0)}.article-comments .gt-container .gt-btn:hover{filter:brightness(.95)}.article-comments .gt-container .gt-btn:focus-visible{outline:2px solid var(--link-color);outline-offset:2px}.article-comments .gt-container .gt-svg svg{max-height:none;fill:currentColor}.article-comments .gt-container .gt-no-init{padding:8px 0;text-align:left;font-size:13px}.article-comments .gt-container .gt-no-init p{font-family:inherit;line-height:1.6}.article-comments .gt-container .markdown-body{color:var(--article-text);font-family:inherit;font-size:14px;line-height:1.6;background:0 0}@media(max-width:600px){.comment-editing .wechat-bottom-bar{display:none}.thread-message{gap:8px}.thread-replies{margin-left:16px;padding-left:8px}.thread-toggle,.thread-unresolved{margin-left:24px}.thread-message-header{padding:7px 10px}.thread-message-body{padding:10px}.thread-reply-slot .comment-composer{margin-left:0}.article-comments .gt-container .gt-header-avatar,.article-comments .gt-container .gt-avatar-github{display:none}}.article-comments .gt-container .gt-btn-preview{order:1}.article-comments .gt-container .gt-btn-public,.article-comments .gt-container .gt-btn-login{order:2}.article-comments .gt-container .markdown-body h1,.article-comments .gt-container .markdown-body h2,.article-comments .gt-container .markdown-body h3,.article-comments .gt-container .markdown-body h4{font-family:inherit;color:var(--text-0);border-color:var(--border-color)}.article-comments .gt-container .markdown-body pre,.article-comments .gt-container .markdown-body code{background:var(--bg-2);color:var(--article-text)}.article-comments .gt-container .markdown-body th,.article-comments .gt-container .markdown-body td{border-color:var(--border-color)}.article-comments .gt-container .markdown-body tr{background:var(--bg-0);border-color:var(--border-color)}.page-type-about{max-width:760px;margin:20px 0 32px}.page-type-about .post-content{font-family:var(--reading-font);font-size:16px;font-weight:400;line-height:1.6;color:var(--article-text)}.page-type-about .post-content p{margin:0 0 20px;font-family:inherit;line-height:1.6}.page-type-about .about-intro{display:flex;align-items:flex-start;gap:24px;margin:0 0 36px}.page-type-about .about-intro-img{flex:0 0 132px;width:132px;height:auto}.page-type-about .about-intro-img img{display:block;width:100%;max-width:100%;height:auto;max-height:none;margin:0;border:1px solid var(--border-color);border-radius:6px;object-fit:contain}.page-type-about .about-intro-text{flex:1;min-width:0}.page-type-about .about-name{margin:0 0 6px;font-family:var(--reading-font);font-size:26px;font-weight:600;line-height:1.35;letter-spacing:0;color:var(--text-0)}.page-type-about .about-name span{display:inline-block;font-weight:400;color:var(--text-1)}.page-type-about .about-intro .about-role{margin:0 0 14px;font-size:15px;color:var(--text-1)}.page-type-about .about-intro p:last-child{margin-bottom:0}.page-type-about .post-content h2{margin:32px 0 12px;font-family:var(--reading-font);font-size:19px;font-weight:600;line-height:1.5;letter-spacing:0;color:var(--text-0)}.page-type-about .post-content ul{margin:0 0 20px;padding-left:1.25em}.page-type-about .post-content li{margin:0 0 7px;line-height:1.6;overflow-wrap:anywhere}.page-type-about .post-content strong{font-weight:600;color:var(--text-0)}.page-type-about .post-content a{padding:0;border-radius:0}@media(max-width:600px){.page-type-about .about-intro{flex-direction:column;align-items:flex-start;gap:20px;margin-bottom:28px}.page-type-about .about-intro-img{flex:none;width:104px;height:auto}.page-type-about .about-name{font-size:24px}}.primary-color{color:var(--primary-color)}.draft-label{color:var(--hover-text);text-decoration:none;padding:2px 4px;border-radius:4px;margin-left:6px;background-color:var(--primary-color)}::-moz-selection{background:var(--primary-color);color:var(--hover-text);text-shadow:none}::selection{background:var(--primary-color);color:var(--hover-text)}p{line-height:1.65;margin-bottom:1em;font-family:var(--text-font)}hr{border:0;border-top:3px solid var(--border-color);margin:1em 0}blockquote{border-left:3px solid var(--border-color);color:var(--text-1);margin:0;padding-left:1em;font-family:var(--text-font);font-style:italic;line-height:1.65}a{border-radius:3px;padding:1px;border-bottom:none;color:inherit;text-decoration:none;transition:color .2s ease}a:hover{color:var(--primary-color)}time{color:grey}.list>ul{margin:0;padding:1rem 0 0}.list-item{margin-bottom:30px}@media all and (max-width:640px){.list-item .post-header{display:grid;grid-template-rows:auto 1fr}.list-item .post-header h1{margin-top:0}.list-item .post-header h1 a{border-bottom:none}}@media all and (min-width:640px){.list-item .post-header{display:grid;gap:1rem;grid-row-gap:1.5rem;grid-template-columns:auto 1fr}.list-item .post-header h1{margin:0;font-size:130%}.list-item .post-header h1 a{border-bottom:none}}#dark-mode-toggle{border-bottom:none}#dark-mode-toggle:hover{background-color:transparent}.note-container{margin:1.5em 0;border-radius:8px;border:1px solid var(--border-color);overflow:hidden}.note-header{background-color:var(--bg-1);padding:.8em 1em;font-weight:600;color:var(--text-0)}.note-toggle{width:100%;background-color:var(--bg-1);border:none;padding:.8em 1em;font-weight:600;color:var(--text-0);cursor:pointer;text-align:left;font-size:inherit;font-family:inherit;transition:background-color .2s ease}.note-toggle:hover{opacity:.9}.note-icon{display:flex;align-items:center}.note-icon::before{content:"ℹ️";margin-right:.5em}.note-center{text-align:center}.note-content{padding:1em;border-top:1px solid var(--border-color)}.note-content p:last-child{margin-bottom:0}html.light .post-content .note-container .note-content,html.light .note-container .note-content,html.light .note-content,.light .note-content{background-color:#fff!important;color:#000!important}html.light .post-content .note-container .note-content *,html.light .note-container .note-content *,html.light .note-content *,.light .note-content *{color:#000!important}html.light .post-content .note-container .note-content h1,html.light .post-content .note-container .note-content h2,html.light .post-content .note-container .note-content h3,html.light .post-content .note-container .note-content h4,html.light .post-content .note-container .note-content h5,html.light .post-content .note-container .note-content h6,html.light .note-container .note-content h1,html.light .note-container .note-content h2,html.light .note-container .note-content h3,html.light .note-container .note-content h4,html.light .note-container .note-content h5,html.light .note-container .note-content h6,html.light .note-content h1,html.light .note-content h2,html.light .note-content h3,html.light .note-content h4,html.light .note-content h5,html.light .note-content h6,.light .note-content h1,.light .note-content h2,.light .note-content h3,.light .note-content h4,.light .note-content h5,.light .note-content h6{color:#000!important;font-weight:600}html.light .post-content .note-container .note-content p,html.light .post-content .note-container .note-content li,html.light .post-content .note-container .note-content span,html.light .post-content .note-container .note-content div,html.light .post-content .note-container .note-content strong,html.light .post-content .note-container .note-content em,html.light .post-content .note-container .note-content a,html.light .note-container .note-content p,html.light .note-container .note-content li,html.light .note-container .note-content span,html.light .note-container .note-content div,html.light .note-container .note-content strong,html.light .note-container .note-content em,html.light .note-container .note-content a,html.light .note-content p,html.light .note-content li,html.light .note-content span,html.light .note-content div,html.light .note-content strong,html.light .note-content em,html.light .note-content a,.light .note-content p,.light .note-content li,.light .note-content span,.light .note-content div,.light .note-content strong,.light .note-content em,.light .note-content a{color:#000!important}html.light .post-content .note-container .note-content code:not(pre code),html.light .note-container .note-content code:not(pre code),html.light .note-content code:not(pre code),.light .note-content code:not(pre code){background-color:rgba(0,0,0,5%)!important;color:#000!important;padding:.2em .4em;border-radius:3px}html.light .post-content .note-container .note-content pre,html.light .note-container .note-content pre,html.light .note-content pre,.light .note-content pre{background-color:#282a36!important;margin:1em 0;padding:1em;border-radius:5px;overflow-x:auto}html.light .post-content .note-container .note-content pre code,html.light .note-container .note-content pre code,html.light .note-content pre code,.light .note-content pre code{background-color:transparent!important;color:#f8f8f2!important;padding:0}.post-content .note-content{background-color:inherit}html.light .post-content .note-content{background-color:#fff!important}html.dark .note-container .note-content,html.dark .note-content{background-color:rgba(0,0,0,.2);color:rgba(255,255,255,.87)}html.dark .note-container .note-content h1,html.dark .note-container .note-content h2,html.dark .note-container .note-content h3,html.dark .note-container .note-content h4,html.dark .note-container .note-content h5,html.dark .note-container .note-content h6,html.dark .note-container .note-content p,html.dark .note-container .note-content li,html.dark .note-container .note-content span,html.dark .note-container .note-content div,html.dark .note-content h1,html.dark .note-content h2,html.dark .note-content h3,html.dark .note-content h4,html.dark .note-content h5,html.dark .note-content h6,html.dark .note-content p,html.dark .note-content li,html.dark .note-content span,html.dark .note-content div{color:rgba(255,255,255,.87)}table{border-spacing:0;border-collapse:collapse;font-family:var(--text-font);font-size:.95em}table th{padding:8px 13px;border:1px solid #dfe2e5;font-family:var(--header-font);font-size:1em;font-weight:700}table td{padding:8px 13px;border:1px solid #dfe2e5;line-height:1.5}.tags li::before{content:"🏷 "}.tags a{border-bottom:none}.tags a:hover{color:var(--primary-color)}.article-tag{position:relative;z-index:2;display:inline-flex;align-items:center;flex:none;padding:3px 8px;border:0;border-radius:3px;background:var(--tag-color);color:#fff;font-family:var(--reading-font);font-size:12px;font-weight:400;line-height:1.5;letter-spacing:0;text-decoration:none;white-space:nowrap}.article-tag:hover{color:#fff;filter:brightness(.9)}.article-tag:focus-visible{outline:2px solid var(--link-color);outline-offset:2px}.tag-color-0{--tag-color:#2563b8}.tag-color-1{--tag-color:#8052ac}.tag-color-2{--tag-color:#398b36}.tag-color-3{--tag-color:#9c6519}.tag-color-4{--tag-color:#197d78}.tag-color-5{--tag-color:#b24966}.legacy-post-meta{display:flex;align-items:center;flex-wrap:wrap;gap:6px 8px;color:var(--text-2);font-family:var(--reading-font);font-size:12px;line-height:1.5}.legacy-post-meta time{color:inherit}.wechat-post .wechat-tags{display:flex;flex-wrap:wrap;align-items:center;gap:6px;max-width:100%}.wechat-post .wechat-meta{gap:6px 8px}.tag-archive>h1{margin:20px 0 0;font-family:var(--reading-font);font-size:22px;font-weight:600;line-height:1.5}.tag-cloud{display:flex;flex-wrap:wrap;gap:10px;padding:20px 0}.mermaid{text-align:center;margin-top:1em;margin-bottom:1em;padding:1em;border-radius:8px;overflow:visible}:root.light .mermaid{background-color:#f5f5f5}:root.dark .mermaid{background-color:rgba(0,0,0,.2)}.mermaid strong{font-weight:700}.mermaid svg{width:100%!important;max-width:none!important;height:auto!important;min-width:600px}.mermaid text{font-size:18px!important}.mermaid .node rect,.mermaid .node circle,.mermaid .node ellipse,.mermaid .node polygon{stroke-width:2px!important}.article-toc{margin:0 0 32px;font-family:var(--reading-font)}.toc-panel>summary{display:flex;align-items:center;justify-content:space-between;padding:12px 0;border-top:1px solid var(--border-color);border-bottom:1px solid var(--border-color);color:var(--text-1);font-size:14px;line-height:1.5;list-style:none;cursor:pointer}.toc-panel>summary::-webkit-details-marker{display:none}.toc-panel>summary svg{max-height:none}.toc-panel[open]>summary svg{transform:rotate(180deg)}.toc-panel>summary:focus-visible,.toc-sticky a:focus-visible,.toc-toggle:focus-visible{outline:2px solid var(--link-color);outline-offset:2px}.toc-sticky{max-height:50vh;padding:14px 0;overflow-y:auto;overflow-x:hidden;overscroll-behavior:contain;scrollbar-width:thin;scrollbar-color:var(--border-color)transparent}.toc-sticky nav{display:block;min-width:0;font-family:inherit;font-size:13px}.toc-sticky ul{list-style:none;margin:0;padding:0}.toc-sticky ul ul{padding-left:16px}.toc-sticky li{position:relative;padding-left:18px}.toc-sticky a{display:block;padding:5px 0;font-family:inherit;font-size:13px;font-weight:400;line-height:1.6;white-space:normal;overflow-wrap:anywhere;color:var(--text-1);border:0;border-radius:0;text-decoration:none}.toc-sticky a:hover,.toc-sticky li.selected>a{color:var(--link-color)}.toc-sticky li.selected>a{font-weight:600}.toc-toggle{appearance:none;position:absolute;left:-3px;top:5px;width:18px;height:21px;padding:0;border:0;border-radius:2px;background:0 0;color:var(--text-2);font:inherit;font-size:13px;cursor:pointer}.toc-toggle:hover{color:var(--text-0)}.toc-sticky li.toc-collapsed>ul{display:none}@media(min-width:1280px){.article-toc{position:fixed;left:calc(50% - var(--page-width)/2 + 760px + 28px);top:132px;width:200px;margin:0}.toc-panel>summary{padding:0 0 12px;border-top:0;font-size:13px}.toc-sticky{max-height:calc(100dvh - 210px)}}:root{--border-color:var(--bg-1);--font-size-base:13.5px;--mono-text-font:"Jetbrains Mono";--text-font:"ZedTextFtl";--header-font:"ZedDisplayFtl", "Space Grotesk", "Helvetica", sans-serif;--code-font:"Jetbrains Mono";--nav-icon-size:22px;--reading-font:-apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", sans-serif;--line-height:1.5;--page-width:920px}*{box-sizing:border-box}html{scrollbar-gutter:stable;background-color:var(--bg-0);color:var(--text-0);font-family:var(--text-font);line-height:var(--line-height)}@media(max-width:992px){html{font-size:calc(var(--font-size-base) * .97)}}@media(max-width:768px){html{font-size:calc(var(--font-size-base) * .95)}}@media(max-width:576px){html{font-size:calc(var(--font-size-base) * .92)}}body{min-height:100vh}.page-wrapper{display:flex;justify-content:center;padding:0 1.5rem;min-height:100vh}.page-container{width:100%;max-width:var(--page-width);position:relative}.main-content{width:100%;padding:.9rem 0;padding-bottom:1.5rem;margin-bottom:1.5rem;word-wrap:break-word}.post-content{width:100%;margin:0;padding:0}.article-page .main-content{padding-bottom:64px}@media(max-width:600px){.article-page .main-content{padding-bottom:calc(88px + env(safe-area-inset-bottom))}}