/* A reading surface for every visual theme. */
.reader-progress{position:fixed;top:0;left:0;right:0;height:3px;z-index:60;pointer-events:none}
.reader-progress progress{display:block;width:100%;height:3px;appearance:none;border:0;background:transparent}
.reader-progress progress::-webkit-progress-bar{background:transparent}
.reader-progress progress::-webkit-progress-value{background:var(--theme-accent);border-radius:0 4px 4px 0}
.reader-progress progress::-moz-progress-bar{background:var(--theme-accent)}
#readingPercent{position:absolute;right:18px;top:10px;padding:3px 9px;border:1px solid var(--border-color);border-radius:20px;background:var(--bg-content);color:var(--text-muted);font:11px/1.5 sans-serif}
.is-reading .header--article{max-width:1180px;margin:16px auto 0;border:1px solid var(--border-color);border-radius:12px;background:var(--bg-content)}
.is-reading .header--article .header__nav{border:0;padding-top:10px;padding-bottom:8px}
.is-reading .header--article .theme-toolbar{border-top:1px solid var(--border-color);border-bottom:0;padding-top:10px;padding-bottom:12px;margin-bottom:0;border-radius:0 0 12px 12px}
.is-reading .article{background:transparent;padding-bottom:30px}
.is-reading .article>.ft__center{max-width:1120px;padding:40px 40px 0;margin:0 auto;text-align:left;box-sizing:border-box}
.is-reading .article .item__meta{padding-top:0;font-size:13px;line-height:1.9;display:flex;flex-wrap:wrap;gap:4px 10px;color:var(--text-muted)}
.is-reading .article .item__title{font-size:clamp(28px,3vw,42px);font-weight:750;line-height:1.5;letter-spacing:-.025em;max-width:820px;margin:14px 0 24px;overflow-wrap:anywhere}
.is-reading .article>.item__cover{max-width:1040px;height:260px;border-radius:12px;margin-bottom:26px}
.reader-toolbar{display:flex;align-items:center;flex-wrap:wrap;gap:8px;width:min(1120px,calc(100% - 40px));margin:0 auto 22px;padding:12px 20px;box-sizing:border-box;border:1px solid var(--border-color);border-radius:10px;background:var(--bg-content);color:var(--text-muted);position:sticky;top:12px;z-index:25;font-size:13px;box-shadow:0 4px 16px #00000005}
.reader-toolbar__spacer{flex:1}.reader-estimate{font-size:13px;white-space:nowrap}
.reader-toolbar button{padding:6px 12px;min-height:36px;border:1px solid var(--border-color);border-radius:6px;color:var(--text-main);background:var(--bg-content);cursor:pointer;font:inherit;white-space:nowrap}
.reader-toolbar button:hover,.reader-toolbar button[aria-pressed=true]{border-color:var(--theme-accent);color:var(--theme-accent);background:var(--code-bg)}
.reader-toolbar button:disabled{opacity:.4;cursor:default}
#readingFontSize{font-size:12px;min-width:32px;text-align:center}
.article-layout{display:grid;grid-template-columns:minmax(0,800px) 232px;gap:36px;max-width:1120px;margin:0 auto;padding:0 20px;align-items:start;box-sizing:border-box}
.article-layout:has(.reader-outline[hidden]){grid-template-columns:minmax(0,800px);justify-content:center}
.article:has(.reader-outline[hidden])>.ft__center{max-width:840px}
html[data-blog-theme] .article .article-paper.wrapper{max-width:none;width:100%;min-width:0;padding:40px 44px 32px;margin:0;border:1px solid var(--border-color);border-radius:12px;background:var(--bg-content);box-sizing:border-box;box-shadow:0 4px 20px #00000004}
html[data-blog-theme] .article .item__content--article{font-family:'Noto Sans CJK SC','PingFang SC','Microsoft YaHei',sans-serif;font-size:var(--reader-font-size,18px);line-height:1.95;letter-spacing:.015em;word-break:normal;overflow-wrap:anywhere;padding:0;margin:0;background:transparent;max-width:100%;color:var(--text-main)}
html[data-blog-theme] .item__content--article p{margin-bottom:1.3em;text-align:left}
html[data-blog-theme] .item__content--article :is(h1,h2,h3,h4){scroll-margin-top:100px;line-height:1.5;color:var(--text-main);font-weight:700;letter-spacing:-.015em}
html[data-blog-theme] .item__content--article h1{font-size:1.6em;margin:1.6em 0 .8em}
html[data-blog-theme] .item__content--article h2{font-size:1.35em;margin:1.9em 0 .85em;padding-bottom:.35em;border-bottom:1px solid var(--border-color)}
html[data-blog-theme] .item__content--article h3{font-size:1.12em;margin:1.7em 0 .65em}
html[data-blog-theme] .item__content--article h4{font-size:1em;margin:1.5em 0 .6em}
html[data-blog-theme] .item__content--article>p:first-child:has(>img:only-child){margin:0 0 30px;text-align:center}
html[data-blog-theme] .item__content--article>p:first-child>img:only-child{max-height:300px;object-fit:contain;border-radius:8px}
html[data-blog-theme] .item__content--article img{display:inline-block;max-width:100%;height:auto;border-radius:8px;vertical-align:middle}
html[data-blog-theme] .item__content--article :is(ul,ol){padding-left:1.5em;margin:.8em 0 1.4em}
html[data-blog-theme] .item__content--article li+li{margin-top:.45em}
html[data-blog-theme] .item__content--article li p{margin:.5em 0}
html[data-blog-theme] .item__content--article a{text-decoration-line:underline;text-decoration-color:color-mix(in srgb,var(--theme-accent) 45%,transparent);text-underline-offset:4px;overflow-wrap:anywhere}
html[data-blog-theme] .item__content--article a:hover{text-decoration-color:var(--theme-accent)}
html[data-blog-theme] .item__content--article blockquote{margin:1.5em 0;padding:16px 22px;border-left:3px solid var(--theme-accent);border-radius:0 8px 8px 0;background:var(--code-bg);color:var(--text-muted)}
html[data-blog-theme] .item__content--article blockquote p:last-child{margin-bottom:0}
html[data-blog-theme] .item__content--article :not(pre)>code{padding:3px 6px;border:1px solid var(--border-color);border-radius:4px;font-size:.85em;white-space:break-spaces;background:var(--code-bg);color:var(--text-main)}
html[data-blog-theme] .item__content--article pre{position:relative;box-sizing:border-box;max-width:100%;margin:1.5em 0;padding:48px 20px 20px;border:1px solid var(--border-color);border-radius:9px;background:var(--code-bg);overflow:auto;line-height:1.7;tab-size:4}
html[data-blog-theme] .item__content--article pre:before{content:attr(data-language);position:absolute;top:0;left:0;right:0;height:33px;line-height:33px;padding:0 14px;color:var(--text-muted);font:12px/33px sans-serif;border-bottom:1px solid var(--border-color);background:var(--bg-content)}
html[data-blog-theme] .item__content--article pre code{display:block;padding:0;border:0;font-family:'Cascadia Code','SFMono-Regular','Consolas','Noto Sans Mono CJK SC',monospace;font-size:14px;line-height:1.8;white-space:pre;word-break:normal;overflow-wrap:normal;min-width:0;background:transparent;color:var(--text-main)}
.reader-copy{position:absolute;right:8px;top:4px;z-index:2;padding:3px 10px;color:var(--theme-accent);border:1px solid var(--border-color);border-radius:4px;background:var(--bg-content);font:12px/20px sans-serif;cursor:pointer}
.item__content--article pre .vditor-copy{display:none}
html[data-blog-theme] .item__content--article table{display:block;border-collapse:collapse;max-width:100%;overflow:auto;white-space:normal;font-size:.9em;margin:1.5em 0;border:1px solid var(--border-color);border-radius:6px}
html[data-blog-theme] .item__content--article table :is(th,td){min-width:90px;max-width:500px;line-height:1.75;padding:10px 14px;border-color:var(--border-color);color:var(--text-main)}
html[data-blog-theme] .item__content--article table th{background:var(--code-bg);font-weight:650;text-align:left}
html[data-blog-theme] .item__content--article table tr{background:var(--bg-content)}
html[data-blog-theme] .item__content--article table tr:nth-child(even){background:color-mix(in srgb,var(--code-bg) 55%,var(--bg-content))}
html[data-blog-theme] .item__content--article hr{height:1px;border:0;background:var(--border-color);margin:2em 0}
.reader-outline{position:sticky;top:100px;min-width:0;max-height:calc(100vh - 125px);overflow:auto;font-size:13px}
.reader-outline[hidden]{display:none}
.reader-outline details{border:1px solid var(--border-color);border-radius:10px;background:var(--bg-content);padding:16px}
.reader-outline summary{font-size:14px;font-weight:650;color:var(--text-main);cursor:pointer;line-height:1.8}
.reader-outline__nav{display:flex;flex-direction:column;gap:3px;padding-top:12px;border-top:1px solid var(--border-color);margin-top:12px}
.reader-outline__nav a{display:block;padding:6px 9px;border-left:2px solid transparent;line-height:1.6;color:var(--text-muted);overflow-wrap:anywhere;border-radius:0 5px 5px 0}
.reader-outline__nav a[data-level=h3]{padding-left:20px;font-size:12px}
.reader-outline__nav a[data-level=h1]{font-weight:650}
.reader-outline__nav a:hover,.reader-outline__nav a[aria-current]{text-decoration:none;background:var(--code-bg);border-left-color:var(--theme-accent);color:var(--theme-accent)}
.reader-endmark{text-align:center;color:var(--theme-accent);padding:30px 0;font-size:20px}
.reader-neighbours{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px;border-top:1px solid var(--border-color);padding-top:24px}
.reader-neighbours a{color:var(--text-main);font-size:14px;line-height:1.7;overflow-wrap:anywhere}
.reader-neighbours a span{display:block;font-size:11px;color:var(--text-muted);margin-bottom:6px}
.is-reading .article-signature{font-size:12px;line-height:1.8;margin-top:40px;padding:18px;border:1px dashed var(--border-color);border-radius:8px;background:var(--code-bg);color:var(--text-muted);opacity:.9}
.is-reading .article__bottom{max-width:1120px;margin:0 auto;background:transparent}
.is-reading .article__bottom .item{margin:18px 0 24px}
.reader-focus .header--article,.reader-focus .article__bottom,.reader-focus .footer,.reader-focus .comment__wrapper,.reader-focus #b3logsolocomments{display:none}
.reader-focus .article>.ft__center{padding-top:40px}
/* Theme-specific reading personalities. */
html[data-blog-theme="magazine"] .is-reading .article>.ft__center{border-top:4px solid var(--theme-accent);margin-top:36px;padding-top:28px}
html[data-blog-theme="magazine"] .article .article-paper.wrapper{border-radius:2px;border-top:3px double var(--border-color)}
html[data-blog-theme="magazine"] .reader-toolbar,html[data-blog-theme="magazine"] .reader-outline details{border-radius:2px}
html[data-blog-theme="magazine"] .item__content--article :is(h1,h2,h3){font-family:'Noto Serif CJK SC','Songti SC','STSong',serif}
html[data-blog-theme="sticker"] .article .article-paper.wrapper{border:2px solid var(--text-main);border-radius:5px;box-shadow:7px 7px 0 var(--border-color)}
html[data-blog-theme="sticker"] .reader-toolbar{border:2px solid var(--text-main);border-radius:5px;background:var(--note-lilac)}
html[data-blog-theme="sticker"] .reader-outline details{border:2px solid var(--text-main);border-radius:5px;background:var(--note-blue)}
html[data-blog-theme="sticker"] .item__content--article h2{border-bottom:7px solid var(--note-pink);padding-bottom:3px;display:table}
html[data-blog-theme="snow"] .article .article-paper.wrapper{border-radius:18px;box-shadow:0 10px 38px #2865990a}
html[data-blog-theme="snow"] .reader-toolbar{border-radius:14px;box-shadow:0 4px 18px #2865990a}
html[data-blog-theme="snow"] .item__content--article{letter-spacing:.025em}
html[data-blog-theme="aurora"] .article .article-paper.wrapper{border-radius:20px;box-shadow:0 14px 40px #4c428e10}
html[data-blog-theme="aurora"] .reader-outline details{border-color:var(--theme-accent);background:var(--bg-content)}
html[data-blog-theme="geek"] .article .article-paper.wrapper{border-radius:4px;border-style:dashed}
html[data-blog-theme="geek"] .reader-toolbar,html[data-blog-theme="geek"] .reader-outline details{border-radius:4px;font-family:inherit}
html[data-blog-theme="geek"] .item__content--article :is(h1,h2,h3){font-family:'Cascadia Code','Noto Sans Mono CJK SC',monospace}
html[data-blog-theme="geek"] .reader-outline summary:before{content:'~/ ';color:var(--theme-accent)}
html[data-blog-theme="geek"] .item__content--article pre:before{content:'● ● ●    ' attr(data-language);color:var(--theme-accent)}
@media(max-width:1099px){
 .article-layout{display:flex;flex-direction:column;max-width:860px;gap:18px;padding:0 20px}
 .reader-outline{position:static;width:100%;max-height:none;order:-1}
 .reader-outline details{padding:12px 18px}.reader-outline__nav{max-height:40vh;overflow:auto}
 .reader-toolbar{max-width:820px;width:calc(100% - 40px);padding:10px 14px}
 .is-reading .article>.ft__center{max-width:860px;padding:32px 40px 0}
 .is-reading .article>.item__cover{max-width:800px}
 .is-reading .header--article{margin:12px 20px 0}
}
@media(max-width:600px){
 .is-reading .header--article{margin:10px 12px 0;border-radius:9px}
 .is-reading .header--article .wrapper{padding-left:12px;padding-right:12px;margin-left:0;margin-right:0}
 .is-reading .header--article .header__nav{gap:4px 13px}
 .is-reading .header--article .header__nav>a:first-child{font-weight:650;width:100%;padding:0;border-bottom:1px solid var(--border-color);margin-bottom:5px}
 .is-reading .header--article .header__nav .fn__right{gap:12px;margin-left:0}
 .is-reading .header--article .theme-toolbar{gap:7px}
 .is-reading .article>.ft__center,.article:has(.reader-outline[hidden])>.ft__center{padding:28px 22px 0}
 .is-reading .article .item__title{font-size:28px;line-height:1.5;margin:12px 0 20px}
 .is-reading .article .item__meta{font-size:12px;gap:2px 7px}
 .is-reading .article>.item__cover{height:170px;margin:0 16px 20px}
 .reader-toolbar{width:calc(100% - 24px);gap:6px;padding:8px 10px;top:5px;margin-bottom:16px;border-radius:8px}
 .reader-toolbar button{padding:5px 8px;min-height:34px;font-size:12px}
 #readingFontSize{font-size:10px;min-width:27px}.reader-estimate{font-size:11px}.reader-toolbar__spacer{flex:1;min-width:0}
 .article-layout{padding:0 12px;gap:14px}
 html[data-blog-theme] .article .article-paper.wrapper{padding:24px 20px;border-radius:10px;box-shadow:none}
 html[data-blog-theme] .article .item__content--article{font-size:var(--reader-font-size,18px);line-height:1.95;letter-spacing:0}
 html[data-blog-theme] .item__content--article h1{font-size:1.45em}.item__content--article h2{font-size:1.25em}
 html[data-blog-theme] .item__content--article pre{padding:44px 14px 16px;border-radius:7px}
 html[data-blog-theme] .item__content--article pre code{font-size:12px;line-height:1.8}
 html[data-blog-theme] .item__content--article blockquote{padding:12px 15px}
 .reader-outline details{padding:10px 14px;border-radius:8px}.reader-outline summary{font-size:13px}
 .reader-outline__nav a{min-height:28px;padding:5px 8px;line-height:1.7}
 .reader-neighbours{gap:14px}.reader-neighbours a{font-size:13px}.reader-endmark{padding:24px 0}
 #readingPercent{top:5px;right:7px;font-size:10px;opacity:.85}
 html[data-blog-theme="magazine"] .is-reading .article>.ft__center{margin-top:24px;padding-top:22px}
 html[data-blog-theme="sticker"] .article .article-paper.wrapper{border-radius:4px;box-shadow:3px 3px 0 var(--border-color)}
}
/* Native anchors already include the document's 80px scroll padding. */
html[data-blog-theme] .item__content--article :is(h1,h2,h3,h4){scroll-margin-top:20px}
.reader-outline summary{position:sticky;top:0;z-index:2;background:var(--bg-content);padding:4px 0}
html[data-blog-theme] .item__content--article>p:first-child>img:only-child{max-height:220px}
@media(max-width:600px){html[data-blog-theme] .item__content--article>p:first-child>img:only-child{max-height:170px}}
@media(max-width:360px){.reader-estimate{width:100%}.reader-toolbar__spacer{display:none}}

/* Vditor's precomputed line-number heights drift after responsive font changes. */
html[data-blog-theme] .item__content--article pre code{overflow:visible!important;max-height:none!important;height:auto!important}
html[data-blog-theme] .item__content--article pre code.vditor-linenumber{padding-left:0!important}
.item__content--article pre .vditor-linenumber__rows,.item__content--article pre .vditor-linenumber__temp{display:none!important}

.reader-code-caption{display:none}
@media(min-width:1100px){
 html[data-blog-theme="snow"] .article-layout{grid-template-columns:minmax(0,760px) 220px;max-width:1050px;gap:28px}
 html[data-blog-theme="snow"] .article-layout:has(.reader-outline[hidden]){grid-template-columns:minmax(0,800px)}
 html[data-blog-theme="geek"] .article-layout{grid-template-columns:220px minmax(0,820px);gap:30px}
 html[data-blog-theme="geek"] .article-layout .article-paper{grid-column:2;grid-row:1}
 html[data-blog-theme="geek"] .article-layout .reader-outline{grid-column:1;grid-row:1}
 html[data-blog-theme="geek"] .article-layout:has(.reader-outline[hidden]){grid-template-columns:minmax(0,800px)}
 html[data-blog-theme="geek"] .article-layout:has(.reader-outline[hidden]) .article-paper{grid-column:1}
 html[data-blog-theme="geek"] .article:not(:has(.reader-outline[hidden]))>.ft__center{padding-left:290px}
}
