:root{--font-body: -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", sans-serif;--font-mono: "SF Mono", "JetBrains Mono", Consolas, "Courier New", monospace;--font-size: 16px;--line-height: 1.7}[data-theme=normal]{--color-bg: #09090b;--color-surface: #131316;--color-text: #f4f4f5;--color-text-muted: #9d9d95;--color-primary: #e8b64c;--color-primary-contrast: #09090b;--color-border: #26262a;--color-code-bg: #18181b;--color-text-secondary: #a1a1aa;--color-text-heading: #fafafa;--color-border-strong: #3f3f46;--color-accent-subtle: rgba(232, 182, 76, .12);--color-on-image: #ffffff;--color-on-image-muted: #e4e4e7;--color-error: #f87171;--color-surface-2: var(--color-surface-2);--color-table-head: #1a1a1f;--z-header: 100;--z-overlay: 9998;--radius: 12px;--max-width: 1100px;--shadow: 0 8px 30px rgba(0, 0, 0, .35);--card-padding: 20px;--font-body: system-ui, -apple-system, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Noto Sans SC", sans-serif;--font-display: "Playfair Display", "Noto Serif SC", "Source Han Serif SC", "Source Han Serif CN", "Songti SC", "SimSun", serif;--font-ui: system-ui, -apple-system, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", sans-serif;--font-mono: "JetBrains Mono", "Fira Code", ui-monospace, "SF Mono", Consolas, monospace}@media(prefers-reduced-motion:reduce){[data-theme=normal] .nh-bubble{animation:none!important}}[data-theme=normal][data-lowend=true] .nh-bubble{backdrop-filter:none;animation:none}[data-theme=normal] body{background:radial-gradient(ellipse 90% 55% at 50% 0%,color-mix(in srgb,var(--color-primary) 5%,transparent),transparent 70%),var(--color-bg);color:var(--color-text)}[data-theme=normal] .site-header{position:sticky;top:0;z-index:var(--z-header);background:transparent;border-bottom:none}[data-theme=normal] .site-header .inner{justify-content:center}[data-theme=normal] .pill-theme{display:flex;height:100%}[data-theme=normal] .pill-theme .theme-toggle{display:inline-flex;align-items:center;justify-content:center;height:100%;padding:0 14px;border:none;background:transparent;color:var(--color-text-secondary);cursor:pointer;border-radius:9999px;transition:color .25s ease}[data-theme=normal] .pill-theme .theme-toggle:hover{color:var(--color-primary)}[data-theme=normal] .sidebar{display:none}[data-theme=normal] .page-layout{display:contents}[data-theme=normal] .reader-home{display:none}[data-theme=normal] .nh-container{max-width:var(--max-width);margin:0 auto;padding:0 20px 80px}[data-theme=normal] .nh-hero{position:relative;overflow:hidden;min-height:82svh;margin-top:-57px;display:flex;align-items:center;justify-content:center;text-align:center;padding:0}[data-theme=normal] .nh-hero-content{position:relative;z-index:2;padding:56px 24px}[data-theme=normal] .nh-hero-content.nh-hero-split{display:flex;align-items:center;justify-content:center;gap:64px;max-width:1000px;width:100%;margin:0 auto;text-align:left;padding:0 clamp(24px,4vw,48px)}[data-theme=normal] .nh-avatar-wrap{display:flex;align-items:center;gap:36px;flex-shrink:0}[data-theme=normal] .nh-avatar{flex-shrink:0;perspective:800px}[data-theme=normal] .nh-avatar img{width:140px;height:140px;border-radius:50%;object-fit:cover;border:3px solid color-mix(in srgb,var(--color-primary) 45%,transparent);box-shadow:0 0 50px color-mix(in srgb,var(--color-primary) 28%,transparent);display:block;transition:transform .3s cubic-bezier(.4,0,.2,1),box-shadow .3s ease}[data-theme=normal] .nh-avatar:hover img{transform:rotateY(-14deg) rotateX(6deg) scale(1.04);box-shadow:0 0 60px color-mix(in srgb,var(--color-primary) 40%,transparent)}[data-theme=normal] .nh-intro{min-width:0}[data-theme=normal] .nh-hero .nh-intro astro-island{display:contents}[data-theme=normal] .nh-hero:after{content:"";position:absolute;inset:0;z-index:1;pointer-events:none;background:linear-gradient(to bottom,rgba(9,9,11,.15) 0%,rgba(9,9,11,.45) 55%,var(--color-bg) 100%)}[data-theme=normal] .nh-hero astro-island{position:absolute;inset:0;display:block}[data-theme=normal] .nh-avatar-wrap astro-island{display:contents}[data-theme=normal] .nh-eyebrow{font-family:var(--font-mono);font-size:12px;letter-spacing:.25em;text-transform:uppercase;color:var(--color-primary);margin:0 0 10px;font-weight:600}[data-theme=normal] .nh-title{font-family:var(--font-display);font-size:clamp(2.4rem,6vw,3.75rem);font-weight:700;letter-spacing:-.02em;color:var(--color-text-heading);margin:0 0 10px;line-height:1.1}[data-theme=normal] .blur-text-word{display:inline-block;will-change:transform,filter,opacity}[data-theme=normal] .nh-witty{display:block;font-size:18px;color:var(--color-text);margin:0 0 8px;font-family:var(--font-display);font-weight:400}[data-theme=normal] .nh-desc{color:var(--color-text-muted);font-size:15px;max-width:560px;margin:0;line-height:1.7}[data-theme=normal] .nh-stats-bubbles{display:grid;grid-template-columns:repeat(2,auto);gap:16px}[data-theme=normal] .nh-bubble{width:96px;height:96px;border-radius:50%;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;background:#1313168c;border:1px solid var(--color-border);backdrop-filter:blur(8px);animation:nhBubbleFloat 6s ease-in-out infinite}[data-theme=normal] .nh-bubble.b2{animation-delay:-1.5s}[data-theme=normal] .nh-bubble.b3{animation-delay:-3s}[data-theme=normal] .nh-bubble.b4{animation-delay:-4.5s}[data-theme=normal] .nh-bubble .num{font-family:var(--font-mono);font-size:22px;font-weight:700;color:var(--color-text);font-variant-numeric:tabular-nums;line-height:1}[data-theme=normal] .nh-bubble .label{font-size:11px;color:var(--color-text-muted);letter-spacing:.05em}@keyframes nhBubbleFloat{0%,to{transform:translateY(0)}50%{transform:translateY(-7px)}}[data-theme=normal] [data-reveal]{opacity:0;transform:translateY(28px);transition:opacity .7s cubic-bezier(.22,1,.36,1),transform .7s cubic-bezier(.22,1,.36,1);transition-delay:var(--reveal-delay, 0ms)}[data-theme=normal] [data-reveal].is-visible{opacity:1;transform:none}@media(prefers-reduced-motion:reduce){[data-theme=normal] [data-reveal]{opacity:1!important;transform:none!important;transition:none!important}}[data-theme=normal] .nh-section{margin-top:88px}[data-theme=normal] .nh-container>.nh-section:first-of-type{margin-top:56px}[data-theme=normal] .nh-section-head{margin-bottom:28px;text-align:center}[data-theme=normal] .nh-section-head h2{font-family:var(--font-display);font-size:28px;font-weight:700;color:var(--color-text-heading);margin:4px 0 0}[data-theme=normal] .nh-section-head.nh-latest-head{display:flex;flex-direction:column;align-items:center;gap:12px}[data-theme=normal] .nh-latest-head .nh-eyebrow{margin-bottom:0}[data-theme=normal] .nh-latest-head h2{margin-top:0}[data-theme=normal] .nh-post-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:20px}[data-theme=normal] .nh-post-card{display:flex;flex-direction:column;background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius);overflow:hidden;text-decoration:none;color:inherit;transition:transform .2s ease,border-color .2s ease}[data-theme=normal] .nh-post-card:hover{transform:translateY(-6px);border-color:color-mix(in srgb,var(--color-primary) 45%,var(--color-border));box-shadow:0 18px 40px -18px #0000008c}[data-theme=normal] .nh-post-cover{aspect-ratio:16 / 9;overflow:hidden;background:linear-gradient(135deg,var(--color-surface-2),#2a2a33)}[data-theme=normal] .nh-post-cover img{width:100%;height:100%;object-fit:cover;display:block;transition:transform .5s cubic-bezier(.22,1,.36,1)}[data-theme=normal] .nh-post-card:hover .nh-post-cover img{transform:scale(1.08)}[data-theme=normal] .nh-post-cover-fallback{width:100%;height:100%;display:flex;align-items:center;justify-content:center;font-size:40px;font-weight:800;color:color-mix(in srgb,var(--color-text) 25%,transparent)}[data-theme=normal] .nh-post-body{padding:16px;display:flex;flex-direction:column;gap:8px;flex:1}[data-theme=normal] .nh-post-title{font-family:var(--font-display);font-size:17px;font-weight:600;color:var(--color-text-heading);margin:0;line-height:1.45;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}[data-theme=normal] .nh-post-card:hover .nh-post-title{color:var(--color-primary)}[data-theme=normal] .nh-post-summary{color:var(--color-text-muted);font-size:13px;line-height:1.6;margin:0;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;flex:1}[data-theme=normal] .nh-post-meta{display:flex;gap:14px;color:var(--color-text-muted);font-size:12px;flex-wrap:wrap;font-family:var(--font-mono);font-variant-numeric:tabular-nums}[data-theme=normal] .nh-cats{display:flex;flex-wrap:wrap;justify-content:center;gap:10px}[data-theme=normal] .nh-cat{display:inline-flex;align-items:center;gap:8px;padding:7px 16px;border:1px solid var(--color-border);border-radius:999px;color:var(--color-text-muted);text-decoration:none;font-size:14px;transition:color .2s ease,border-color .2s ease}[data-theme=normal] .nh-cat:hover{color:var(--color-primary);border-color:var(--color-primary)}[data-theme=normal] .nh-cat-count{font-family:var(--font-mono);font-size:12px;color:var(--color-text-muted);opacity:.7}[data-theme=normal] .nh-tags{display:flex;flex-wrap:wrap;justify-content:center;gap:8px;margin-top:16px}[data-theme=normal] .nh-tag{padding:3px 10px;border:1px solid var(--color-border);border-radius:6px;color:var(--color-text-muted);text-decoration:none;font-size:12px;transition:color .2s ease,border-color .2s ease}[data-theme=normal] .nh-tag:hover{color:var(--color-primary);border-color:var(--color-primary)}[data-theme=normal] .nh-sub{margin-top:72px}[data-theme=normal] .nh-sub-head{display:flex;flex-direction:column;align-items:center;gap:10px;text-align:center}[data-theme=normal] .nh-more{color:var(--color-text-muted);text-decoration:none;font-size:14px;transition:color .2s ease;white-space:nowrap}[data-theme=normal] .nh-more:hover{color:var(--color-primary)}[data-theme=normal] .nh-douban{display:grid;grid-template-columns:repeat(auto-fill,minmax(110px,1fr));gap:12px}[data-theme=normal] .nh-douban-item{aspect-ratio:2 / 3;border-radius:10px;overflow:hidden;background:var(--color-surface);border:1px solid var(--color-border)}[data-theme=normal] .nh-douban-item img{width:100%;height:100%;object-fit:cover;display:block;transition:transform .2s ease}[data-theme=normal] .nh-douban-item:hover img{transform:scale(1.05)}[data-theme=normal] .nh-douban-fallback{width:100%;height:100%;display:flex;align-items:center;justify-content:center;color:var(--color-text-muted);font-size:20px;font-weight:700}[data-theme=normal] .nh-projects{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:14px}[data-theme=normal] .nh-project{display:flex;flex-direction:column;gap:6px;padding:16px;background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius);text-decoration:none;color:inherit;transition:transform .2s ease,border-color .2s ease}[data-theme=normal] .nh-project:hover{transform:translateY(-3px);border-color:var(--color-border-strong)}[data-theme=normal] .nh-project-name{font-family:var(--font-display);font-weight:600;color:var(--color-text-heading)}[data-theme=normal] .nh-project-desc{color:var(--color-text-muted);font-size:13px;line-height:1.5}[data-theme=normal] .nh-project-lang{align-self:flex-start;font-size:11px;color:var(--color-primary);border:1px solid var(--color-border);border-radius:999px;padding:1px 8px}[data-theme=normal] .posts-page{position:relative;max-width:720px;margin:0 auto;padding:56px 20px 80px}[data-theme=normal] .posts-page:before{content:"";position:absolute;top:-24px;left:50%;transform:translate(-50%);width:min(680px,80%);height:300px;background:radial-gradient(ellipse at center,color-mix(in srgb,var(--color-primary) 16%,transparent),transparent 68%);pointer-events:none;z-index:0}[data-theme=normal] .posts-header{position:relative;z-index:1;text-align:center;margin-bottom:40px}[data-theme=normal] .posts-heading{font-family:var(--font-display);font-size:clamp(30px,4.5vw,40px);font-weight:700;color:var(--color-text-heading);margin:0 0 10px;letter-spacing:-.01em}[data-theme=normal] .posts-subtitle{color:var(--color-text-muted);font-size:15px;margin:0 0 14px}[data-theme=normal] .posts-count{font-family:var(--font-mono);font-size:13px;color:var(--color-primary);margin:0}[data-theme=normal] .posts-list{list-style:none;margin:0;padding:0}[data-theme=normal] .posts-item{padding:26px 0;border-bottom:1px solid var(--color-border)}[data-theme=normal] .posts-item:first-child{padding-top:0}[data-theme=normal] .posts-meta{display:flex;gap:12px;align-items:center;font-family:var(--font-mono);font-size:12.5px;margin-bottom:10px}[data-theme=normal] .posts-cat{color:var(--color-primary);text-decoration:none}[data-theme=normal] .posts-cat:hover{text-decoration:underline}[data-theme=normal] .posts-date{color:var(--color-text-muted)}[data-theme=normal] .posts-title{font-family:var(--font-display);font-size:21px;font-weight:600;line-height:1.4;margin:0 0 8px}[data-theme=normal] .posts-title a{color:var(--color-text-heading);text-decoration:none;transition:color .2s ease}[data-theme=normal] .posts-title a:hover{color:var(--color-primary)}[data-theme=normal] .posts-summary{color:var(--color-text-muted);font-size:14px;line-height:1.7;margin:0 0 10px}[data-theme=normal] .posts-tags{display:flex;flex-wrap:wrap;gap:10px}[data-theme=normal] .posts-tag{color:var(--color-text-muted);font-size:12.5px;text-decoration:none;transition:color .2s ease}[data-theme=normal] .posts-tag:hover{color:var(--color-primary)}[data-theme=normal] .posts-more-bar{text-align:center;padding:36px 0 4px}[data-theme=normal] .posts-more-btn{border:1px solid var(--color-border);background:var(--color-surface);color:var(--color-text);border-radius:999px;padding:10px 28px;font-size:14px;cursor:pointer;transition:border-color .2s ease,color .2s ease}[data-theme=normal] .posts-more-btn:hover:not(:disabled){border-color:var(--color-primary);color:var(--color-primary)}[data-theme=normal] .posts-more-btn:disabled{opacity:.6;cursor:not-allowed}[data-theme=normal] .posts-more-done,[data-theme=normal] .posts-more-error{font-size:13px;color:var(--color-text-muted);margin:0}[data-theme=normal] .posts-more-error{color:var(--color-error);margin-bottom:8px}[data-theme=normal] .archive-page .archive-group{margin-top:36px}[data-theme=normal] .archive-page .archive-group:first-of-type{margin-top:0}[data-theme=normal] .archive-month{font-family:var(--font-mono);font-size:14px;font-weight:600;letter-spacing:.12em;color:var(--color-primary);border-bottom:1px solid var(--color-border);padding-bottom:10px;margin:0 0 4px}[data-theme=normal] .archive-page .posts-item{padding:16px 0}[data-theme=normal] .archive-page .posts-title-sm{font-size:17px}[data-theme=normal] .archive-page .posts-meta{margin-bottom:6px}[data-theme=normal] .friends-page .link-card,[data-theme=normal] .projects-page .project-card{transition:transform .2s ease,border-color .2s ease,box-shadow .2s ease}[data-theme=normal] .friends-page .link-card:hover,[data-theme=normal] .projects-page .project-card:hover{transform:translateY(-3px);border-color:var(--color-primary);box-shadow:0 12px 28px -14px #0000004d}[data-theme=normal] .douban-page .douban-cover{box-shadow:var(--shadow);transition:transform .25s ease,border-color .25s ease}[data-theme=normal] .douban-page .douban-card:hover .douban-cover{transform:translateY(-4px);border-color:var(--color-primary)}[data-theme=normal] .douban-page .douban-title{transition:color .2s ease}[data-theme=normal] .douban-page .douban-card:hover .douban-title{color:var(--color-primary)}[data-theme=normal] .page-title{font-family:var(--font-display);font-size:28px;font-weight:700;color:var(--color-text-heading);margin-bottom:20px;max-width:var(--max-width);margin-left:auto;margin-right:auto}[data-theme=normal] .post-card{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius);box-shadow:var(--shadow);padding:var(--card-padding)}[data-theme=normal] .post-card:hover{border-color:var(--color-border-strong)}[data-theme=normal] .post-card .post-title{font-family:var(--font-display)}[data-theme=normal] .post-card .post-title a{color:var(--color-text-heading)}[data-theme=normal] .post-card .post-title a:hover{color:var(--color-primary)}[data-theme=normal] .post-meta{font-family:var(--font-mono);font-variant-numeric:tabular-nums}[data-theme=normal] .pagination a{background:var(--color-surface)}[data-theme=normal] .article-wrapper{max-width:var(--max-width);margin:0 auto;padding:32px 20px 64px}[data-theme=normal] .article-head.has-cover .article-hero{width:100%;height:240px;border-radius:16px;overflow:hidden;position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;border:1px solid var(--color-border);box-shadow:0 12px 40px #00000073}[data-theme=normal] .article-head.has-cover .article-hero img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;display:block}[data-theme=normal] .article-head.has-cover .article-hero:after{content:"";position:absolute;inset:0;background:linear-gradient(to bottom,#09090b26,#09090b99);pointer-events:none}[data-theme=normal] .article-head.has-cover .article-header{position:relative;z-index:1;padding:0 32px;margin:0}[data-theme=normal] .article-head.has-cover .article-title{color:var(--color-on-image);text-shadow:0 2px 24px rgba(0,0,0,.6);max-width:560px;margin:0 0 10px}[data-theme=normal] .article-head.has-cover .article-meta{color:var(--color-on-image-muted);margin:0}[data-theme=normal] .article-title{font-family:var(--font-display);font-size:clamp(30px,4vw,38px);font-weight:700;color:var(--color-text-heading);margin:0 0 12px;line-height:1.3;letter-spacing:-.01em}[data-theme=normal] .article-meta{font-family:var(--font-mono);font-variant-numeric:tabular-nums;color:var(--color-text-muted);font-size:14px;display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-bottom:32px}[data-theme=normal] .article-meta a{color:var(--color-text-muted)}[data-theme=normal] .article-footer{margin-top:40px;padding-top:20px;border-top:1px solid var(--color-border)}[data-theme=normal] .post-nav{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:16px;margin-top:40px;padding-top:24px;border-top:1px solid var(--color-border)}[data-theme=normal] .post-nav-item{display:flex;flex-direction:column;gap:6px;padding:14px 16px;border:1px solid var(--color-border);border-radius:var(--radius);background:var(--color-surface);text-decoration:none;transition:border-color .2s ease,transform .2s ease}[data-theme=normal] .post-nav-item:hover{border-color:var(--color-primary);transform:translateY(-2px)}[data-theme=normal] .post-nav-item.next{text-align:right}[data-theme=normal] .post-nav-item.empty{visibility:hidden;border:none;background:none}[data-theme=normal] .post-nav-label{font-size:12px;color:var(--color-text-muted);font-family:var(--font-mono)}[data-theme=normal] .post-nav-item:hover .post-nav-label{color:var(--color-primary)}[data-theme=normal] .post-nav-title{font-size:15px;font-weight:600;color:var(--color-text-heading);font-family:var(--font-display);line-height:1.45;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}[data-theme=normal] .related-posts{margin-top:48px}[data-theme=normal] .related-title{font-family:var(--font-display);font-size:18px;font-weight:700;color:var(--color-text-heading);margin:0 0 16px}[data-theme=normal] .related-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px}[data-theme=normal] .related-card{display:flex;flex-direction:column;border:1px solid var(--color-border);border-radius:var(--radius);overflow:hidden;background:var(--color-surface);text-decoration:none;color:inherit;transition:transform .2s ease,border-color .2s ease,box-shadow .2s ease}[data-theme=normal] .related-card:hover{transform:translateY(-3px);border-color:color-mix(in srgb,var(--color-primary) 45%,var(--color-border));box-shadow:0 12px 28px -14px #00000073}[data-theme=normal] .related-cover{aspect-ratio:16 / 9;overflow:hidden;background:linear-gradient(135deg,var(--color-surface-2),#2a2a33)}[data-theme=normal] .related-cover img{width:100%;height:100%;object-fit:cover;display:block;transition:transform .5s cubic-bezier(.22,1,.36,1)}[data-theme=normal] .related-card:hover .related-cover img{transform:scale(1.06)}[data-theme=normal] .related-cover-fallback{width:100%;height:100%;display:flex;align-items:center;justify-content:center;font-size:32px;font-weight:800;color:color-mix(in srgb,var(--color-text) 25%,transparent)}[data-theme=normal] .related-body{padding:12px 14px}[data-theme=normal] .related-name{font-family:var(--font-display);font-size:15px;font-weight:600;color:var(--color-text-heading);margin:0 0 4px;line-height:1.4;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}[data-theme=normal] .related-card:hover .related-name{color:var(--color-primary)}[data-theme=normal] .related-summary{color:var(--color-text-muted);font-size:12.5px;line-height:1.5;margin:0;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}[data-theme=normal] .tags{list-style:none;display:flex;gap:8px;flex-wrap:wrap;margin:0;padding:0}[data-theme=normal] .tag{font-size:13px;color:var(--color-primary);border:1px solid var(--color-border);border-radius:999px;padding:3px 12px;text-decoration:none;transition:color .2s ease,border-color .2s ease}[data-theme=normal] .tag:hover{border-color:var(--color-primary)}[data-theme=normal] .link-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:14px;max-width:var(--max-width);margin:0 auto}[data-theme=normal] .link-card{display:flex;gap:12px;align-items:center;padding:14px;background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius);box-shadow:var(--shadow);text-decoration:none;color:var(--color-text);transition:border-color .2s ease,transform .2s ease}[data-theme=normal] .link-card:hover{border-color:var(--color-primary);transform:translateY(-2px)}[data-theme=normal] .link-avatar{width:40px;height:40px;border-radius:50%;background:var(--color-primary);color:var(--color-primary-contrast);display:flex;align-items:center;justify-content:center;font-weight:700}[data-theme=normal] .link-name{font-family:var(--font-display);font-weight:600;color:var(--color-text-heading)}[data-theme=normal] .link-desc{color:var(--color-text-muted);font-size:13px;margin-top:2px}[data-theme=normal] .project-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:14px;max-width:var(--max-width);margin:0 auto}[data-theme=normal] .project-card{display:flex;flex-direction:column;gap:8px;padding:16px;background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius);box-shadow:var(--shadow);text-decoration:none;color:var(--color-text);transition:border-color .2s ease,transform .2s ease}[data-theme=normal] .project-card:hover{border-color:var(--color-primary);transform:translateY(-2px)}[data-theme=normal] .project-name{font-family:var(--font-display);font-weight:600;color:var(--color-text-heading)}[data-theme=normal] .project-lang{font-size:12px;color:var(--color-primary);border:1px solid var(--color-border);border-radius:999px;padding:1px 8px}[data-theme=normal] .project-desc,[data-theme=normal] .project-stars,[data-theme=normal] .project-updated{color:var(--color-text-muted);font-size:12px}[data-theme=normal] .douban-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:24px 16px;max-width:var(--max-width);margin:0 auto}[data-theme=normal] .douban-card{display:flex;flex-direction:column;gap:8px;text-decoration:none;color:var(--color-text)}[data-theme=normal] .douban-cover{display:block;aspect-ratio:2 / 3;border-radius:var(--radius);overflow:hidden;background:var(--color-surface);border:1px solid var(--color-border)}[data-theme=normal] .douban-cover img{width:100%;height:100%;object-fit:cover;display:block}[data-theme=normal] .douban-card:hover .douban-title{color:var(--color-primary)}[data-theme=normal] .douban-title{font-family:var(--font-display);font-size:14px;color:var(--color-text-heading);line-height:1.5;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}[data-theme=normal] .douban-stars{color:var(--color-primary);font-size:12px;letter-spacing:1px}[data-theme=normal] .douban-stars i{color:var(--color-border-strong);font-style:normal}[data-theme=normal] .douban-date{font-family:var(--font-mono);color:var(--color-text-muted);font-size:12px}[data-theme=normal] .douban-empty,[data-theme=normal] .link-empty,[data-theme=normal] .projects-empty,[data-theme=normal] .post-empty{text-align:center;color:var(--color-text-muted);padding:64px 0}[data-theme=normal] .search-form input{border:1px solid var(--color-border);background:var(--color-surface);color:var(--color-text)}[data-theme=normal] .search-form button{background:var(--color-primary);color:var(--color-primary-contrast);border:none}[data-theme=normal] .result-info{color:var(--color-text-muted)}[data-theme=normal] .site-footer{border-top:1px solid var(--color-border);color:var(--color-text-muted);display:flex;align-items:center;justify-content:space-between;gap:24px;padding:18px 20px}[data-theme=normal] .site-footer .site-footer-text,[data-theme=normal] .site-footer .footer-right{white-space:nowrap;font-size:13px}[data-theme=normal] .tech-loop{flex:1;min-width:0;overflow:hidden;-webkit-mask-image:linear-gradient(to right,transparent,#000 8%,#000 92%,transparent);mask-image:linear-gradient(to right,transparent,#000 8%,#000 92%,transparent)}[data-theme=normal] .tech-loop__track{display:flex;align-items:center;gap:30px;width:max-content;animation:techScroll 30s linear infinite}[data-theme=normal] .tech-loop:hover .tech-loop__track{animation-play-state:paused}[data-theme=normal] .tech-loop__item{display:inline-flex;align-items:center;opacity:.55;transition:opacity .2s ease}[data-theme=normal] .tech-loop__item:hover{opacity:1}@keyframes techScroll{0%{transform:translate(0)}to{transform:translate(-50%)}}[data-theme=normal] .article-content{font-size:17px;line-height:1.85;color:var(--color-text)}[data-theme=normal] .article-content>:first-child{margin-top:0}[data-theme=normal] .article-content a{color:var(--color-primary)}[data-theme=normal] .article-content h1,[data-theme=normal] .article-content h2,[data-theme=normal] .article-content h3,[data-theme=normal] .article-content h4{font-family:var(--font-display);font-weight:700;color:var(--color-text-heading)}[data-theme=normal] .article-content h2{font-size:26px;margin:2em 0 .8em;padding-bottom:10px;border-bottom:1px solid var(--color-border);letter-spacing:-.01em}[data-theme=normal] .article-content h3{font-size:20px;margin:1.7em 0 .65em}[data-theme=normal] .article-content h4{font-size:17px;margin:1.5em 0 .6em}[data-theme=normal] .article-content blockquote{margin:1.6em 0;padding:14px 20px;border-left:3px solid var(--color-primary);background:var(--color-accent-subtle);border-radius:0 10px 10px 0;color:var(--color-text-secondary);font-style:italic}[data-theme=normal] .article-content p code,[data-theme=normal] .article-content li code{background:var(--color-surface-2);padding:2px 7px;border-radius:6px;color:var(--color-primary);font-size:.9em}[data-theme=normal] .article-content pre{background:var(--color-code-bg);border:1px solid var(--color-border);border-radius:12px;padding:32px 20px 18px;line-height:1.75;font-size:13.5px;position:relative}[data-theme=normal] .article-content pre code{background:transparent;padding:0;color:inherit}[data-theme=normal] .article-content pre[data-lang]:before{content:attr(data-lang);position:absolute;top:10px;left:18px;font-size:11px;font-family:var(--font-mono);letter-spacing:.12em;text-transform:uppercase;color:var(--color-text-muted);opacity:.6;pointer-events:none}[data-theme=normal] .code-copy-btn{position:absolute;top:8px;right:10px;border:1px solid var(--color-border);background:var(--color-surface);color:var(--color-text-muted);font-size:11px;font-family:var(--font-mono);padding:3px 10px;border-radius:6px;cursor:pointer;opacity:0;transition:opacity .2s ease,color .2s ease,border-color .2s ease}[data-theme=normal] .article-content pre:hover .code-copy-btn,[data-theme=normal] .code-copy-btn:focus-visible{opacity:1}[data-theme=normal] .code-copy-btn:hover{color:var(--color-primary);border-color:var(--color-primary)}[data-theme=normal] .code-copy-btn.copied{color:var(--color-primary);border-color:var(--color-primary);opacity:1}[data-theme=normal] .article-content table{font-size:14.5px}[data-theme=normal] .article-content th{background:var(--color-table-head);text-align:left;font-weight:600}[data-theme=normal] .article-content th,[data-theme=normal] .article-content td{padding:10px 14px}[data-theme=normal] .article-content img{border-radius:12px;box-shadow:0 8px 30px #0006}[data-theme=normal] .article-content hr{border:none;border-top:1px solid var(--color-border);margin:2em 0}[data-theme=normal] .article-content strong{color:var(--color-text-heading);font-weight:700}[data-theme=normal] .article-content mark{background:color-mix(in srgb,var(--color-primary) 28%,transparent);color:var(--color-text);padding:1px 5px;border-radius:4px}[data-theme=normal] .page-layout.article-layout{display:grid;grid-template-columns:minmax(0,720px) 208px;column-gap:40px;row-gap:56px;justify-content:center;max-width:1160px;margin:0 auto;padding:32px 20px 64px;align-items:start}[data-theme=normal] .article-layout .site-main{display:contents}[data-theme=normal] .article-layout .article-head{grid-column:1 / -1;position:relative;text-align:center;padding:56px 0 8px}[data-theme=normal] .article-layout .article-head:before{content:"";position:absolute;top:-24px;left:50%;transform:translate(-50%);width:min(680px,80%);height:300px;background:radial-gradient(ellipse at center,color-mix(in srgb,var(--color-primary) 16%,transparent),transparent 68%);pointer-events:none;z-index:0}[data-theme=normal] .article-layout .article-head .article-header{position:relative;z-index:1}[data-theme=normal] .article-layout .article-head .article-title{font-size:clamp(32px,4.5vw,42px);max-width:760px;margin:0 auto 16px}[data-theme=normal] .article-layout .article-head .article-meta{justify-content:center}[data-theme=normal] .article-layout .article-wrapper{grid-column:1;width:100%;max-width:none;margin:0;padding:0 0 64px}[data-theme=normal] .article-layout .article-toc{grid-column:2;grid-row:2;position:sticky;top:96px;align-self:start;max-height:calc(100vh - 128px);overflow-y:auto;padding:0;background:transparent;border:none;--accent: var(--color-primary);--text: var(--color-text-muted);--marker: var(--color-border-strong)}[data-theme=normal] .article-layout .article-toc-title{font-size:12px;letter-spacing:.15em;color:var(--color-text-muted);margin:0 0 16px;font-weight:600;font-family:var(--font-mono)}[data-theme=normal] .article-layout .article-toc .line-sidebar__list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column}[data-theme=normal] .article-layout .article-toc .line-sidebar__item{--effect: 0;display:flex;align-items:center;gap:12px;padding:5px 0}[data-theme=normal] .article-layout .article-toc .line-sidebar__marker{flex-shrink:0;width:30px;height:2px;border-radius:999px;background:color-mix(in srgb,var(--accent) calc(var(--effect) * 100%),var(--marker));transform:scaleX(calc(.3 + var(--effect) * .7));transform-origin:left}[data-theme=normal] .article-layout .article-toc .line-sidebar__label{display:flex;align-items:baseline;gap:8px;text-decoration:none;color:var(--text);transform:translate(calc(var(--effect) * 8px));will-change:transform;line-height:1.5}[data-theme=normal] .article-layout .article-toc .line-sidebar__index{font-family:var(--font-mono);font-size:10px;font-variant-numeric:tabular-nums;color:var(--marker);opacity:.75}[data-theme=normal] .article-layout .article-toc .line-sidebar__text{font-size:13px;color:color-mix(in srgb,var(--accent) calc(var(--effect) * 100%),var(--text))}[data-theme=normal] .article-layout .article-toc .toc-h3{padding-left:16px}[data-theme=normal] .article-layout .article-toc{scrollbar-width:thin;scrollbar-color:var(--color-border-strong) transparent}[data-theme=normal] .article-layout .article-toc::-webkit-scrollbar{width:4px}[data-theme=normal] .article-layout .article-toc::-webkit-scrollbar-thumb{background:var(--color-border-strong);border-radius:999px}[data-theme=normal] .article-layout .article-toc.has-more:after{content:"";position:sticky;bottom:0;display:block;height:28px;margin-top:-28px;background:linear-gradient(to top,var(--color-bg),transparent);pointer-events:none}@media(max-width:1100px){[data-theme=normal] .page-layout.article-layout{grid-template-columns:minmax(0,1fr);gap:0}[data-theme=normal] .article-layout .article-head,[data-theme=normal] .article-layout .article-wrapper{min-width:0}[data-theme=normal] .article-layout .article-toc{display:none}[data-theme=normal] .nh-post-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}[data-theme=normal] .border-glow-card{--edge-proximity: 0;--cursor-angle: 45deg;--edge-sensitivity: 30;--color-sensitivity: calc(var(--edge-sensitivity) + 20);--border-radius: var(--radius);--glow-padding: 18px;--cone-spread: 25;--fill-opacity: .45;--glow-color: hsl(43deg 80% 60% / 100%);--glow-color-60: hsl(43deg 80% 60% / 60%);--glow-color-50: hsl(43deg 80% 60% / 50%);--glow-color-40: hsl(43deg 80% 60% / 40%);--glow-color-30: hsl(43deg 80% 60% / 30%);--glow-color-20: hsl(43deg 80% 60% / 20%);--glow-color-10: hsl(43deg 80% 60% / 10%);--gradient-one: radial-gradient(at 80% 55%, var(--color-primary) 0px, transparent 50%);--gradient-two: radial-gradient(at 69% 34%, #fb923c 0px, transparent 50%);--gradient-three: radial-gradient(at 8% 6%, #f43f5e 0px, transparent 50%);--gradient-four: radial-gradient(at 41% 38%, var(--color-primary) 0px, transparent 50%);--gradient-five: radial-gradient(at 86% 85%, #f43f5e 0px, transparent 50%);--gradient-six: radial-gradient(at 82% 18%, #fb923c 0px, transparent 50%);--gradient-seven: radial-gradient(at 51% 4%, #fbbf24 0px, transparent 50%);--gradient-base: linear-gradient(var(--color-primary) 0 100%);position:relative;border-radius:var(--border-radius);isolation:isolate;transform:translateZ(.01px);overflow:visible}[data-theme=normal] .border-glow-card:before,[data-theme=normal] .border-glow-card:after,[data-theme=normal] .border-glow-card>.edge-light{content:"";position:absolute;inset:0;border-radius:inherit;transition:opacity .25s ease-out;z-index:-1}[data-theme=normal] .border-glow-card:not(:hover):not(.sweep-active):before,[data-theme=normal] .border-glow-card:not(:hover):not(.sweep-active):after,[data-theme=normal] .border-glow-card:not(:hover):not(.sweep-active)>.edge-light{opacity:0;transition:opacity .75s ease-in-out}[data-theme=normal] .border-glow-card:before{border:1px solid transparent;background:linear-gradient(var(--color-surface) 0 100%) padding-box,linear-gradient(#fff0 0% 100%) border-box,var(--gradient-one, radial-gradient(at 80% 55%, hsla(268, 100%, 76%, 1) 0px, transparent 50%)) border-box,var(--gradient-two, radial-gradient(at 69% 34%, hsla(349, 100%, 74%, 1) 0px, transparent 50%)) border-box,var(--gradient-three, radial-gradient(at 8% 6%, hsla(136, 100%, 78%, 1) 0px, transparent 50%)) border-box,var(--gradient-four, radial-gradient(at 41% 38%, hsla(192, 100%, 64%, 1) 0px, transparent 50%)) border-box,var(--gradient-five, radial-gradient(at 86% 85%, hsla(186, 100%, 74%, 1) 0px, transparent 50%)) border-box,var(--gradient-six, radial-gradient(at 82% 18%, hsla(52, 100%, 65%, 1) 0px, transparent 50%)) border-box,var(--gradient-seven, radial-gradient(at 51% 4%, hsla(12, 100%, 72%, 1) 0px, transparent 50%)) border-box,var(--gradient-base, linear-gradient(var(--color-primary) 0 100%)) border-box;opacity:calc((var(--edge-proximity) - var(--color-sensitivity)) / (100 - var(--color-sensitivity)));mask-image:conic-gradient(from var(--cursor-angle) at center,black calc(var(--cone-spread) * 1%),transparent calc((var(--cone-spread) + 15) * 1%),transparent calc((100 - var(--cone-spread) - 15) * 1%),black calc((100 - var(--cone-spread)) * 1%))}[data-theme=normal] .border-glow-card:after{border:1px solid transparent;background:var(--gradient-one, radial-gradient(at 80% 55%, hsla(268, 100%, 76%, 1) 0px, transparent 50%)) padding-box,var(--gradient-two, radial-gradient(at 69% 34%, hsla(349, 100%, 74%, 1) 0px, transparent 50%)) padding-box,var(--gradient-three, radial-gradient(at 8% 6%, hsla(136, 100%, 78%, 1) 0px, transparent 50%)) padding-box,var(--gradient-four, radial-gradient(at 41% 38%, hsla(192, 100%, 64%, 1) 0px, transparent 50%)) padding-box,var(--gradient-five, radial-gradient(at 86% 85%, hsla(186, 100%, 74%, 1) 0px, transparent 50%)) padding-box,var(--gradient-six, radial-gradient(at 82% 18%, hsla(52, 100%, 65%, 1) 0px, transparent 50%)) padding-box,var(--gradient-seven, radial-gradient(at 51% 4%, hsla(12, 100%, 72%, 1) 0px, transparent 50%)) padding-box,var(--gradient-base, linear-gradient(var(--color-primary) 0 100%)) padding-box;mask-image:linear-gradient(to bottom,#000,#000),radial-gradient(ellipse at 50% 50%,black 40%,transparent 65%),radial-gradient(ellipse at 66% 66%,black 5%,transparent 40%),radial-gradient(ellipse at 33% 33%,black 5%,transparent 40%),radial-gradient(ellipse at 66% 33%,black 5%,transparent 40%),radial-gradient(ellipse at 33% 66%,black 5%,transparent 40%),conic-gradient(from var(--cursor-angle) at center,transparent 5%,black 15%,black 85%,transparent 95%);mask-composite:subtract,add,add,add,add,add;opacity:calc(var(--fill-opacity, .5) * (var(--edge-proximity) - var(--color-sensitivity)) / (100 - var(--color-sensitivity)));mix-blend-mode:soft-light}[data-theme=normal] .border-glow-card>.edge-light{inset:calc(var(--glow-padding) * -1);pointer-events:none;z-index:1;mask-image:conic-gradient(from var(--cursor-angle) at center,black 2.5%,transparent 10%,transparent 90%,black 97.5%);opacity:calc((var(--edge-proximity) - var(--edge-sensitivity)) / (100 - var(--edge-sensitivity)));mix-blend-mode:plus-lighter}[data-theme=normal] .border-glow-card>.edge-light:before{content:"";position:absolute;inset:var(--glow-padding);border-radius:inherit;box-shadow:inset 0 0 0 1px var(--glow-color, hsl(40deg 80% 80% / 100%)),inset 0 0 1px 0 var(--glow-color-60, hsl(40deg 80% 80% / 60%)),inset 0 0 3px 0 var(--glow-color-50, hsl(40deg 80% 80% / 50%)),inset 0 0 6px 0 var(--glow-color-40, hsl(40deg 80% 80% / 40%)),inset 0 0 15px 0 var(--glow-color-30, hsl(40deg 80% 80% / 30%)),inset 0 0 25px 2px var(--glow-color-20, hsl(40deg 80% 80% / 20%)),inset 0 0 50px 2px var(--glow-color-10, hsl(40deg 80% 80% / 10%)),0 0 1px 0 var(--glow-color-60, hsl(40deg 80% 80% / 60%)),0 0 3px 0 var(--glow-color-50, hsl(40deg 80% 80% / 50%)),0 0 6px 0 var(--glow-color-40, hsl(40deg 80% 80% / 40%)),0 0 15px 0 var(--glow-color-30, hsl(40deg 80% 80% / 30%)),0 0 25px 2px var(--glow-color-20, hsl(40deg 80% 80% / 20%)),0 0 50px 2px var(--glow-color-10, hsl(40deg 80% 80% / 10%))}[data-theme=normal] .nh-post-card.border-glow-card{display:flex;flex-direction:column;background:var(--color-surface);border:1px solid var(--color-border);overflow:visible}[data-theme=normal] .nh-post-card.border-glow-card>.border-glow-inner{display:flex;flex-direction:column;flex:1;min-height:0;position:relative;overflow:hidden;border-radius:inherit}[data-theme=normal] .nh-project.border-glow-card{display:flex;flex-direction:column;background:var(--color-surface);border:1px solid var(--color-border)}[data-theme=normal] .nh-project.border-glow-card>.border-glow-inner{display:contents}[data-theme=normal] .talk-item .talk-content{font-size:15px;line-height:1.8;color:var(--color-text);margin:0 0 10px;white-space:pre-wrap;word-break:break-word}@media(max-width:768px){[data-theme=normal] .site-header{display:none}[data-theme=normal] .nh-hero{min-height:auto;padding:48px 0 24px}[data-theme=normal] .nh-hero-content.nh-hero-split{flex-direction:column;gap:32px;text-align:center}[data-theme=normal] .nh-intro{width:100%}[data-theme=normal] .nh-desc{margin:0 auto}[data-theme=normal] .nh-avatar-wrap{gap:20px}[data-theme=normal] .nh-avatar img{width:96px;height:96px}[data-theme=normal] .nh-bubble{width:72px;height:72px}[data-theme=normal] .nh-bubble .num{font-size:17px}[data-theme=normal] .nh-bubble .label{font-size:10px}[data-theme=normal] .nh-title{font-size:clamp(1.6rem,6vw,2rem)}[data-theme=normal] .nh-section{margin-top:56px}[data-theme=normal] .nh-post-grid,[data-theme=normal] .nh-projects{grid-template-columns:1fr}[data-theme=normal] .nh-douban{grid-template-columns:repeat(3,1fr)}[data-theme=normal] .article-head.has-cover .article-hero{height:180px}[data-theme=normal] .article-head.has-cover .article-header{padding:0 20px}[data-theme=normal] .page-layout.article-layout{padding:20px 16px 48px}[data-theme=normal] .article-title{font-size:26px}[data-theme=normal] .article-content{font-size:16px}[data-theme=normal] .post-nav{grid-template-columns:1fr}[data-theme=normal] .post-nav-item.next{text-align:left}[data-theme=normal] .site-footer{flex-direction:column;gap:10px;padding:16px;text-align:center}[data-theme=normal] .tech-loop{display:none}[data-theme=normal] .site-footer .site-footer-text,[data-theme=normal] .site-footer .footer-right{white-space:normal}[data-theme=normal] .posts-page{padding:36px 16px 64px}[data-theme=normal] .posts-title{font-size:18px}[data-theme=normal] .posts-meta,[data-theme=normal] .comment-form .row{flex-wrap:wrap}[data-theme=normal] .comment-form input{min-width:0;flex:1 1 45%}[data-theme=normal] .comment-form .captcha-row{flex-wrap:wrap}[data-theme=normal] .article-content :not(pre)>code{overflow-wrap:anywhere}}[data-theme=normal] .gallery-grid{columns:3 240px;column-gap:16px}[data-theme=normal] .gallery-item{display:block;width:100%;margin:0 0 16px;padding:0;border:none;background:none;cursor:zoom-in;border-radius:var(--radius);overflow:hidden;position:relative;break-inside:avoid;-webkit-column-break-inside:avoid}[data-theme=normal] .gallery-item img{width:100%;display:block;border-radius:var(--radius);transition:transform .45s cubic-bezier(.22,1,.36,1)}[data-theme=normal] .gallery-item:hover img{transform:scale(1.04)}[data-theme=normal] .gallery-item-title{position:absolute;left:0;right:0;bottom:0;padding:28px 12px 10px;font-size:13px;color:var(--color-text);background:linear-gradient(to top,rgba(9,9,11,.65),transparent);opacity:0;transition:opacity .3s ease;text-align:center}[data-theme=normal] .gallery-item:hover .gallery-item-title{opacity:1}[data-theme=normal] .gallery-lightbox{position:fixed;inset:0;z-index:var(--z-overlay);background:#09090be0;display:flex;align-items:center;justify-content:center;padding:32px;cursor:zoom-out}[data-theme=normal] .gallery-lightbox-inner{position:relative;max-width:100%;max-height:100%}[data-theme=normal] .gallery-lightbox img{display:block;max-width:min(1100px,100%);max-height:85vh;border-radius:var(--radius);box-shadow:0 24px 60px #0009}[data-theme=normal] .gallery-lightbox-meta{position:absolute;left:0;right:0;bottom:-52px;text-align:center;color:var(--color-text)}[data-theme=normal] .gallery-lightbox-title{margin:0 0 4px;font-family:var(--font-display);font-size:16px}[data-theme=normal] .gallery-lightbox-desc{margin:0;font-size:13px;color:var(--color-text-muted)}[data-theme=normal] .gallery-lightbox-close{position:absolute;top:-44px;right:0;background:none;border:none;color:var(--color-text);font-size:22px;cursor:pointer;padding:6px}[data-theme=normal] .gallery-empty{text-align:center;color:var(--color-text-muted);padding:48px 0}[data-theme=normal] .about-card{display:flex;flex-direction:column;align-items:center;text-align:center;background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius);padding:48px 32px;box-shadow:var(--shadow)}[data-theme=normal] .about-avatar{width:96px;height:96px;border-radius:50%;object-fit:cover;border:3px solid color-mix(in srgb,var(--color-primary) 45%,transparent);box-shadow:0 0 40px color-mix(in srgb,var(--color-primary) 25%,transparent)}[data-theme=normal] .about-name{font-family:var(--font-display);font-size:26px;font-weight:700;color:var(--color-text-heading);margin:18px 0 6px}[data-theme=normal] .about-intro{color:var(--color-text);font-size:15px;margin:0 0 8px}[data-theme=normal] .about-desc{color:var(--color-text-muted);font-size:14px;max-width:560px;margin:0;line-height:1.7}[data-theme=normal] .about-stats{display:flex;gap:32px;margin:32px 0}[data-theme=normal] .about-stat{display:flex;flex-direction:column;align-items:center;gap:2px}[data-theme=normal] .about-stat span{font-family:var(--font-mono);font-size:24px;font-weight:700;color:var(--color-primary);font-variant-numeric:tabular-nums}[data-theme=normal] .about-stat em{font-style:normal;font-size:12px;color:var(--color-text-muted)}[data-theme=normal] .about-links{display:flex;gap:12px;flex-wrap:wrap;justify-content:center}[data-theme=normal] .about-links a{color:var(--color-text-muted);text-decoration:none;border:1px solid var(--color-border);border-radius:999px;padding:5px 16px;font-size:13px;transition:color .2s ease,border-color .2s ease}[data-theme=normal] .about-links a:hover{color:var(--color-primary);border-color:var(--color-primary)}[data-theme=normal] .about-copyright{margin:32px 0 0;font-size:12px;color:var(--color-text-muted);opacity:.7}[data-theme=normal] .about-content{margin:24px 0 0;text-align:left;width:100%;max-width:640px;color:var(--color-text-secondary);font-size:14.5px;line-height:1.9;white-space:pre-wrap;word-break:break-word}[data-theme=normal] .about-content:before{content:"";display:block;border-top:1px solid var(--color-border);margin-bottom:24px}[data-theme=normal] .about-blocks{margin-top:28px;width:100%;max-width:640px;text-align:left}[data-theme=normal] .about-block{display:flex;gap:14px;align-items:flex-start;padding:18px 0;border-top:1px dashed var(--color-border)}[data-theme=normal] .about-block:last-child{padding-bottom:0}[data-theme=normal] .about-block-emoji{font-size:22px;line-height:1.7;flex-shrink:0}[data-theme=normal] .about-block-text{margin:0;font-size:14.5px;line-height:1.9;color:var(--color-text-secondary);white-space:pre-wrap}[data-theme=reader]{--color-bg: rgb(243, 240, 233);--color-surface: transparent;--color-text: #3a3837;--color-text-muted: #b0aba4;--color-primary: #8b3525;--color-primary-contrast: #ffffff;--color-border: #e5e1da;--color-code-bg: #f0ede7;--color-text-secondary: #888580;--color-text-heading: #2c2b29;--color-border-strong: #c8c3ba;--color-text-primary: var(--color-text);--radius: 2px;--max-width: 1200px;--shadow: none;--font-size: 17px;--font-display: "Lora", "Noto Serif SC", "Source Han Serif SC", "Source Han Serif CN", "Songti SC", "Noto Serif CJK SC", "SimSun", serif;--font-body: "EB Garamond", "Noto Serif SC", "Source Han Serif SC", "Source Han Serif CN", "Songti SC", "Noto Serif CJK SC", "SimSun", serif;--font-ui: system-ui, -apple-system, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", sans-serif;--font-mono: "JetBrains Mono", "Fira Code", "Cascadia Code", ui-monospace, monospace}[data-theme=reader] body{background-color:var(--color-bg);color:var(--color-text);font-family:var(--font-body);font-size:var(--font-size);line-height:1.7;letter-spacing:.01em;background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.65' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='0.03'/%3E%3C/svg%3E");background-blend-mode:multiply;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}[data-theme=reader] a{color:var(--color-primary);text-underline-offset:4px;transition:color .18s ease}[data-theme=reader] .site-header{display:none}@keyframes readerFadeUp{0%{opacity:0;transform:translateY(16px)}to{opacity:1;transform:translateY(0)}}@keyframes readerFadeUpStagger{0%{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}@keyframes readerPulse{0%,to{opacity:1}50%{opacity:.5}}[data-theme=reader] .page-layout{display:grid;grid-template-columns:280px 1fr;gap:96px;max-width:1200px;margin:0 auto;padding:96px clamp(24px,6vw,72px);min-height:100vh;animation:readerFadeUp .42s cubic-bezier(0,0,.2,1) forwards}[data-theme=reader] .site-main{padding-bottom:96px}[data-theme=reader] .sidebar{position:sticky;top:96px;height:fit-content;min-height:calc(61.8vh - 96px);display:flex;flex-direction:column;gap:48px}[data-theme=reader] .brand-area .brand-name{font-family:var(--font-display);font-size:3rem;font-weight:700;color:var(--color-text-heading);letter-spacing:.1em;line-height:1.25;display:flex;align-items:baseline;margin-bottom:24px}[data-theme=reader] .brand-area .brand-name a{color:inherit;text-decoration:none}[data-theme=reader] .brand-mark{display:inline-block;width:8px;height:8px;background-color:var(--color-primary);margin-left:4px;flex-shrink:0;animation:readerPulse 4s ease-in-out infinite}[data-theme=reader] .brand-banner{display:block;margin-bottom:24px}[data-theme=reader] .brand-banner img{display:block;width:100%;max-width:240px;height:auto;border-radius:2px}[data-theme=reader] .bio{font-size:1rem;color:var(--color-text-secondary);line-height:1.85;white-space:normal}[data-theme=reader] .site-nav{display:flex;flex-direction:column;gap:16px;font-family:var(--font-ui);font-size:.833rem;letter-spacing:.15em}[data-theme=reader] .site-nav [data-menu-for=reader]{gap:16px}[data-theme=reader] .site-nav a{color:var(--color-text-secondary);display:inline-flex;align-items:center;width:fit-content;text-decoration:none}[data-theme=reader] .site-nav a:before{content:"—";margin-right:8px;color:transparent;transition:color .18s ease}[data-theme=reader] .site-nav a:hover,[data-theme=reader] .site-nav a.active{color:var(--color-text-primary)}[data-theme=reader] .site-nav a.active:before,[data-theme=reader] .site-nav a:hover:before{color:var(--color-primary)}[data-theme=reader] .sidebar-footer{margin-top:auto;display:flex;flex-direction:column;align-items:flex-start;gap:24px}[data-theme=reader] .social-row{display:flex;flex-direction:row;align-items:center;gap:16px}[data-theme=reader] .social-icon{color:var(--color-text-muted);display:inline-flex;transition:color .18s ease,transform .18s ease}[data-theme=reader] .social-icon:hover{color:var(--color-text-secondary);transform:translateY(-2px)}[data-theme=reader] .sidebar-footer .theme-toggle{display:inline-flex;align-items:center;border:none;background:transparent;padding:0;color:var(--color-text-muted);cursor:pointer;opacity:.8;transition:color .18s ease,opacity .18s ease,transform .18s ease}[data-theme=reader] .sidebar-footer .theme-toggle:hover{color:var(--color-text-secondary);opacity:1;transform:translateY(-2px)}[data-theme=reader] .sidebar-copyright{font-family:var(--font-ui);font-size:.694rem;color:var(--color-text-muted);letter-spacing:.05em;opacity:.7}[data-theme=reader] .page-layout:not(.article-layout)~.site-footer{display:none}[data-theme=reader] .site-footer{border-top:none;text-align:center;justify-content:center;padding:96px 16px 32px;max-width:1200px;font-family:var(--font-ui);font-size:.694rem;color:var(--color-text-muted);letter-spacing:.05em}[data-theme=reader] .site-footer .footer-right{display:none}[data-theme=reader] .content-stream{display:flex;flex-direction:column;gap:96px;padding-top:8px}[data-theme=reader] .year-group{display:grid;grid-template-columns:72px 1fr;gap:24px;position:relative}[data-theme=reader] .year-label{font-family:var(--font-display);font-size:1.5rem;font-weight:700;color:var(--color-text-muted);position:sticky;top:96px;height:fit-content;text-align:right;padding-right:16px;padding-top:24px;letter-spacing:.15em;margin:0}[data-theme=reader] .year-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;border-left:1px solid var(--color-border)}[data-theme=reader] .year-item{display:block;padding:24px 0 24px 32px;position:relative;opacity:0;transform:translateY(12px);animation:readerFadeUpStagger .5s cubic-bezier(0,0,.2,1) forwards}[data-theme=reader] .year-item:nth-child(1){animation-delay:60ms}[data-theme=reader] .year-item:nth-child(2){animation-delay:.12s}[data-theme=reader] .year-item:nth-child(3){animation-delay:.18s}[data-theme=reader] .year-item:nth-child(4){animation-delay:.24s}[data-theme=reader] .year-item:nth-child(5){animation-delay:.3s}[data-theme=reader] .year-item:nth-child(6){animation-delay:.36s}[data-theme=reader] .year-item:nth-child(7){animation-delay:.42s}[data-theme=reader] .year-item:nth-child(8){animation-delay:.48s}[data-theme=reader] .year-item:before{content:"";position:absolute;left:-3px;top:32px;width:5px;height:5px;border-radius:50%;background-color:var(--color-border-strong);transition:background-color .18s ease}[data-theme=reader] .year-item:hover:before{background-color:var(--color-primary)}[data-theme=reader] .year-item .item-main{display:block}[data-theme=reader] .year-item .item-date{display:block;font-family:var(--font-mono);font-size:.833rem;color:var(--color-text-secondary);letter-spacing:.1em;font-variant-numeric:tabular-nums;margin-bottom:8px;opacity:1}[data-theme=reader] .year-item .item-title{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;font-size:1.5rem;font-weight:400;color:var(--color-text-primary);line-height:1.45;text-decoration:none;transition:color .18s ease}[data-theme=reader] .year-item:hover .item-title{color:var(--color-primary)}[data-theme=reader] .item-summary,[data-theme=reader] .item-views{display:none}[data-theme=reader] .pagination{display:flex;align-items:center;justify-content:space-between;margin-top:96px;padding-top:32px;border-top:1px solid var(--color-border);font-family:var(--font-ui);font-size:.833rem;letter-spacing:.15em}[data-theme=reader] .pagination a{color:var(--color-text-secondary);text-decoration:none;transition:color .18s ease}[data-theme=reader] .pagination a:hover{color:var(--color-primary)}[data-theme=reader] .page-info{color:var(--color-text-muted)}[data-theme=reader] .page-layout.article-layout{grid-template-columns:1fr minmax(0,clamp(580px,62vw,720px)) 1fr;gap:0 32px;padding:96px clamp(20px,4vw,56px);max-width:none;width:100%}[data-theme=reader] .sidebar-vertical{position:sticky;top:96px;min-height:0;gap:0;justify-self:end;align-self:start}[data-theme=reader] .brand-block{display:flex;flex-direction:column;align-items:center;gap:12px;color:var(--color-text-heading);transition:color .18s ease}[data-theme=reader] .brand-block:hover{color:var(--color-text-primary)}[data-theme=reader] .brand-name-vertical{writing-mode:vertical-rl;font-family:var(--font-display);font-size:2.25rem;font-weight:700;letter-spacing:.2em;line-height:1;color:inherit}[data-theme=reader] .article-wrapper{min-width:0;width:100%}[data-theme=reader] .article-toc{position:sticky;top:96px;align-self:start;justify-self:start;max-width:220px;max-height:calc(100vh - 128px);overflow-y:auto;font-family:var(--font-ui);font-size:.75rem}[data-theme=reader] .article-toc-title{font-size:.694rem;letter-spacing:.2em;color:var(--color-text-muted);margin:0 0 16px}[data-theme=reader] .article-toc ul{list-style:none;margin:0;padding:0;border-left:1px solid var(--color-border)}[data-theme=reader] .article-toc li{margin:0}[data-theme=reader] .article-toc a{display:block;padding:4px 0 4px 14px;margin-left:-1px;border-left:1px solid transparent;color:var(--color-text-secondary);text-decoration:none;line-height:1.6;transition:color .18s ease,border-color .18s ease}[data-theme=reader] .article-toc a:hover{color:var(--color-primary);border-left-color:var(--color-primary)}[data-theme=reader] .article-toc .toc-h3{padding-left:26px;font-size:.694rem;color:var(--color-text-muted)}@media(max-width:1100px){[data-theme=reader] .page-layout.article-layout{grid-template-columns:clamp(48px,7vw,72px) 1fr;gap:0 24px;justify-content:start}[data-theme=reader] .article-toc{display:none}}@media(max-width:720px){[data-theme=reader] .page-layout.article-layout{grid-template-columns:1fr;padding:48px 20px}[data-theme=reader] .sidebar-vertical{display:none}}[data-theme=reader] .article-title{font-family:var(--font-display);font-size:clamp(2rem,4vw,3rem);font-weight:700;color:var(--color-text-heading);line-height:1.25;margin:0 0 24px;letter-spacing:-.02em}[data-theme=reader] .article-meta{font-family:var(--font-mono);font-size:.833rem;color:var(--color-text-secondary);display:flex;gap:8px;align-items:center;flex-wrap:wrap;font-variant-numeric:tabular-nums;margin-bottom:48px}[data-theme=reader] .article-meta>*:not(:last-child):after{content:"·";margin-left:8px;color:var(--color-border-strong)}[data-theme=reader] .article-meta a{color:var(--color-text-secondary);text-decoration:none}[data-theme=reader] .article-meta a:hover{color:var(--color-primary)}[data-theme=reader] .article-content{font-size:1.125rem;line-height:1.85;word-break:break-word;font-variant-numeric:tabular-nums}[data-theme=reader] .article-content p{line-height:1.75;margin:0 0 12px}[data-theme=reader] .article-content strong{font-weight:inherit;color:inherit;text-decoration:underline;text-decoration-color:var(--color-primary);text-decoration-thickness:1.5px;text-underline-offset:.25em;text-decoration-skip-ink:none}[data-theme=reader] .article-content h2{font-family:var(--font-display);font-size:1.875rem;font-weight:700;color:var(--color-text-heading);margin-top:64px;margin-bottom:24px;line-height:1.45}[data-theme=reader] .article-content h3{font-family:var(--font-display);font-size:1.5rem;font-weight:700;color:var(--color-text-heading);margin-top:48px;margin-bottom:16px;line-height:1.45}[data-theme=reader] .article-content blockquote{border-left:2px solid var(--color-primary);background:var(--color-code-bg);padding:16px 24px;margin:32px 0;color:var(--color-text-secondary);line-height:1.85;font-style:normal}[data-theme=reader] .article-content blockquote p{margin-bottom:0}[data-theme=reader] .article-content ul{list-style:none;padding-left:0;margin-bottom:20px}[data-theme=reader] .article-content ul>li{position:relative;padding-left:1.4em;margin-bottom:8px}[data-theme=reader] .article-content ul>li:before{content:"";position:absolute;left:0;top:.8em;width:6px;height:6px;background-color:var(--color-primary)}[data-theme=reader] .article-content ol{list-style:none;counter-reset:reader-ol;padding-left:0;margin-bottom:20px}[data-theme=reader] .article-content ol>li{counter-increment:reader-ol;position:relative;padding-left:2.2em;margin-bottom:8px}[data-theme=reader] .article-content ol>li:before{content:counter(reader-ol,decimal-leading-zero) ".";position:absolute;left:0;top:.1em;font-family:var(--font-mono);font-size:.85em;color:var(--color-text-secondary);font-variant-numeric:tabular-nums}[data-theme=reader] .article-content code{font-family:var(--font-mono);font-size:.9em;background:var(--color-code-bg);padding:2px 6px;border-radius:3px}[data-theme=reader] .article-content pre{background:var(--color-code-bg);border-left:3px solid var(--color-border-strong);padding:16px;overflow-x:auto;margin:32px 0}[data-theme=reader] .article-content pre code{background:none;padding:0;border-radius:0;font-size:.833rem;line-height:1.6}[data-theme=reader] .article-content a{color:var(--color-text-primary);text-decoration:underline;text-decoration-color:var(--color-border-strong);text-underline-offset:3px;text-decoration-thickness:1px;transition:color .18s ease,text-decoration-color .18s ease}[data-theme=reader] .article-content a:hover{color:var(--color-primary);text-decoration-color:var(--color-primary)}[data-theme=reader] .article-content em{font-style:normal;text-decoration:underline wavy;text-decoration-color:var(--color-text-secondary);text-decoration-thickness:1.25px;text-underline-offset:.2em}[data-theme=reader] .article-content del{text-decoration:line-through;text-decoration-color:var(--color-border-strong);text-decoration-thickness:1.25px;color:var(--color-text-muted)}[data-theme=reader] .article-content hr{border:none;text-align:center;margin:64px 0}[data-theme=reader] .article-content hr:after{content:"***";font-family:var(--font-display);font-size:1.5rem;color:var(--color-border-strong);letter-spacing:.5em}[data-theme=reader] .article-content img{width:100%;height:auto;display:block;margin:32px 0}[data-theme=reader] .article-content table{width:100%;border-collapse:collapse;margin:24px 0 32px;font-size:.833rem;border:1px solid var(--color-border)}[data-theme=reader] .article-content thead{border-bottom:2px solid var(--color-border-strong)}[data-theme=reader] .article-content th,[data-theme=reader] .article-content td{padding:12px 16px;border:1px solid var(--color-border);text-align:left;vertical-align:top}[data-theme=reader] .article-content th{font-family:var(--font-ui);font-weight:600;color:var(--color-text-heading);background:var(--color-code-bg)}[data-theme=reader] .article-content tbody tr:nth-child(2n){background:var(--color-code-bg)}[data-theme=reader] .article-footer{margin-top:96px;padding-top:48px;border-top:1px solid var(--color-border)}[data-theme=reader] .post-nav{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:24px;margin-top:48px;padding-top:32px;border-top:1px solid var(--color-border)}[data-theme=reader] .post-nav-item{display:flex;flex-direction:column;gap:8px;text-decoration:none;min-width:0}[data-theme=reader] .post-nav-item.next{text-align:right;align-items:flex-end}[data-theme=reader] .post-nav-item.empty{visibility:hidden}[data-theme=reader] .post-nav-label{font-size:.75rem;color:var(--color-text-muted);letter-spacing:.08em}[data-theme=reader] .post-nav-title{font-family:var(--font-display);font-size:1.05rem;font-weight:600;color:var(--color-text-heading);line-height:1.5;transition:color .2s ease}[data-theme=reader] .post-nav-item:hover .post-nav-title{color:var(--color-primary)}[data-theme=reader] .tags{list-style:none;display:flex;gap:12px;flex-wrap:wrap;margin:0 0 48px;padding:0}[data-theme=reader] .tag{font-family:var(--font-ui);font-size:.694rem;color:var(--color-text-secondary);border:1px solid var(--color-border);padding:4px 12px;border-radius:2px;letter-spacing:.15em;text-decoration:none;transition:color .18s ease,border-color .18s ease}[data-theme=reader] .tag:hover{color:var(--color-primary);border-color:var(--color-primary)}[data-theme=reader] .page-title{font-family:var(--font-display);font-size:2.25rem;font-weight:700;color:var(--color-text-heading);letter-spacing:.02em;margin:0 auto 40px;max-width:760px}[data-theme=reader] .archive-group{max-width:760px;margin:0 auto}[data-theme=reader] .archive-group .month{font-family:var(--font-ui);font-size:.833rem;font-weight:400;color:var(--color-text-muted);letter-spacing:.2em;border-bottom:none;padding:40px 0 8px;margin:0}[data-theme=reader] .archive-group ul{margin:0;padding:0;list-style:none;border-left:1px solid var(--color-border)}[data-theme=reader] .archive-group li{padding:14px 0 14px 24px;position:relative}[data-theme=reader] .archive-group li:before{content:"";position:absolute;left:-3px;top:22px;width:5px;height:5px;border-radius:50%;background-color:var(--color-border-strong)}[data-theme=reader] .archive-group .date{font-family:var(--font-mono);font-size:.75rem;min-width:96px;opacity:.8;font-variant-numeric:tabular-nums;letter-spacing:.08em}[data-theme=reader] .archive-group a{color:var(--color-text-primary);font-size:1.125rem;text-decoration:none}[data-theme=reader] .archive-group a:hover{color:var(--color-primary)}[data-theme=reader] .link-grid{grid-template-columns:1fr;max-width:760px;gap:0}[data-theme=reader] .link-card{background:transparent;border:0;border-bottom:1px solid var(--color-border);border-radius:0;box-shadow:none;padding:16px 4px}[data-theme=reader] .link-card:hover{border-bottom-color:var(--color-primary)}[data-theme=reader] .link-avatar{width:36px;height:36px;background:transparent;color:var(--color-text-primary);border:1px solid var(--color-border);font-size:15px;font-family:var(--font-display)}[data-theme=reader] .link-name{font-weight:500;font-family:var(--font-display)}[data-theme=reader] .link-desc{font-size:13px;opacity:.75}[data-theme=reader] .project-list{grid-template-columns:1fr;max-width:760px;gap:0}[data-theme=reader] .project-card{background:transparent;border:0;border-bottom:1px solid var(--color-border);border-radius:0;box-shadow:none;padding:18px 4px}[data-theme=reader] .project-card:hover{border-bottom-color:var(--color-primary)}[data-theme=reader] .project-name{font-family:var(--font-display);font-weight:600;letter-spacing:.02em}[data-theme=reader] .project-lang{border-color:var(--color-border);color:var(--color-text-muted)}[data-theme=reader] .search-form{max-width:760px;gap:12px}[data-theme=reader] .search-form input{background:transparent;border:0;border-bottom:1px solid var(--color-border);border-radius:0;padding:8px 2px;font-family:inherit;font-size:1rem;color:var(--color-text);outline:none;transition:border-color .18s ease}[data-theme=reader] .search-form input:focus{border-bottom-color:var(--color-text-muted)}[data-theme=reader] .search-form button{background:transparent;border:0;border-radius:0;color:var(--color-text-muted);font-size:.833rem;letter-spacing:.15em;padding:0 8px;cursor:pointer;transition:color .18s ease}[data-theme=reader] .search-form button:hover{color:var(--color-text)}[data-theme=reader] .result-info{max-width:760px;font-family:var(--font-ui);color:var(--color-text-muted)}[data-theme=reader] .post-card{background:transparent;border-bottom:1px solid var(--color-border);border-radius:0;box-shadow:none;padding:32px 0}[data-theme=reader] .post-card .post-title{font-family:var(--font-display);font-size:1.5rem}[data-theme=reader] .post-views{display:none}[data-theme=reader] .projects-empty,[data-theme=reader] .link-empty,[data-theme=reader] .post-empty{text-align:center;color:var(--color-text-muted);padding:64px 0;font-family:var(--font-ui);font-size:.833rem;letter-spacing:.15em}[data-theme=reader] .comment-section{border-top:1px solid var(--color-border);margin-top:64px;padding-top:32px}@media(prefers-reduced-motion:reduce){[data-theme=reader] .page-layout,[data-theme=reader] .year-item{opacity:1;transform:none;animation:none}}[data-theme=reader] .douban-grid{max-width:760px}[data-theme=reader] .douban-card{color:var(--color-text-primary)}[data-theme=reader] .douban-title{font-family:var(--font-display);font-size:.9rem;transition:color .18s ease}[data-theme=reader] .douban-card:hover .douban-title{color:var(--color-primary)}[data-theme=reader] .douban-cover{border:1px solid var(--color-border);border-radius:2px}[data-theme=reader] .douban-meta{font-family:var(--font-ui);font-size:.75rem;color:var(--color-text-muted)}[data-theme=reader] .douban-stars{color:var(--color-primary);font-size:.75rem}[data-theme=reader] .douban-date{color:var(--color-text-muted);opacity:.8}[data-theme=reader] .normal-home,[data-theme=reader] .tech-loop{display:none}[data-theme=reader] .article-head.has-cover .article-hero{margin-bottom:8px}[data-theme=reader] .article-head.has-cover .article-hero img{width:100%;height:320px;object-fit:cover;display:block;border-radius:12px}[data-theme=reader] .article-toc .line-sidebar__marker,[data-theme=reader] .article-toc .line-sidebar__index{display:none}[data-theme=reader] .article-toc .line-sidebar__item{padding:0}[data-theme=reader] .posts-page{max-width:720px;margin:0 auto;padding:40px 20px 72px}[data-theme=reader] .posts-heading{font-family:var(--font-display);font-size:2rem;font-weight:700;margin:0 0 10px}[data-theme=reader] .posts-subtitle{color:var(--color-text-muted);margin:0 0 12px}[data-theme=reader] .posts-count{color:var(--color-primary);font-size:.833rem}[data-theme=reader] .posts-list{list-style:none;margin:0;padding:0}[data-theme=reader] .posts-item{padding:24px 0;border-bottom:1px solid var(--color-border)}[data-theme=reader] .posts-meta{font-size:.75rem;color:var(--color-text-muted);margin-bottom:8px}[data-theme=reader] .posts-cat{color:var(--color-primary);text-decoration:none}[data-theme=reader] .posts-title{font-family:var(--font-display);font-size:1.4rem;font-weight:700;margin:0 0 8px}[data-theme=reader] .posts-title a{color:var(--color-text-heading);text-decoration:none}[data-theme=reader] .posts-title a:hover{color:var(--color-primary)}[data-theme=reader] .posts-summary{color:var(--color-text-muted);font-size:.875rem;line-height:1.7;margin:0 0 8px}[data-theme=reader] .posts-tags{display:flex;flex-wrap:wrap;gap:10px}[data-theme=reader] .posts-tag{color:var(--color-text-muted);font-size:.75rem;text-decoration:none}[data-theme=reader] .posts-more-bar{text-align:center;padding:32px 0 0}[data-theme=reader] .posts-more-btn{border:1px solid var(--color-border);background:none;color:var(--color-text);border-radius:999px;padding:9px 26px;font-size:.875rem;cursor:pointer}[data-theme=reader] .posts-more-btn:hover:not(:disabled){border-color:var(--color-primary);color:var(--color-primary)}[data-theme=reader] .posts-more-done,[data-theme=reader] .posts-more-error{font-size:.75rem;color:var(--color-text-muted)}[data-theme=reader] .archive-page .archive-group{margin-top:32px}[data-theme=reader] .archive-month{font-family:var(--font-mono);font-size:.833rem;font-weight:600;letter-spacing:.12em;color:var(--color-primary);border-bottom:1px solid var(--color-border);padding-bottom:8px;margin:0 0 2px}[data-theme=reader] .archive-page .posts-item{padding:14px 0}[data-theme=reader] .archive-page .posts-title-sm{font-size:1.05rem}[data-theme=reader] .talk-item .talk-content{font-size:.9375rem;line-height:1.8;margin:0 0 8px;white-space:pre-wrap;word-break:break-word}@media(max-width:768px){[data-theme=reader] .sidebar{display:none}[data-theme=reader] .page-layout:not(.article-layout){grid-template-columns:1fr}[data-theme=reader] .page-layout:not(.article-layout) .site-main{grid-column:1}[data-theme=reader] .sidebar-vertical{display:none}[data-theme=reader] .page-layout.article-layout{grid-template-columns:1fr;padding:24px 16px 56px}[data-theme=reader] .article-title{font-size:1.7rem}}[data-theme=reader] .related-posts{margin-top:40px}[data-theme=reader] .related-title{font-size:1.1rem;font-weight:700;margin:0 0 12px}[data-theme=reader] .related-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px}[data-theme=reader] .related-card{display:flex;flex-direction:column;text-decoration:none;color:inherit}[data-theme=reader] .related-cover{aspect-ratio:16 / 9;overflow:hidden;border-radius:var(--radius);background:var(--color-surface);border:1px solid var(--color-border)}[data-theme=reader] .related-cover img{width:100%;height:100%;object-fit:cover;display:block}[data-theme=reader] .related-cover-fallback{width:100%;height:100%;display:flex;align-items:center;justify-content:center;font-size:28px;font-weight:600;color:var(--color-text-muted)}[data-theme=reader] .related-name{font-size:.95rem;font-weight:600;margin:8px 0 0;color:var(--color-text-heading)}[data-theme=reader] .related-summary{font-size:.8rem;color:var(--color-text-muted);margin:4px 0 0;line-height:1.5}@media(max-width:768px){[data-theme=reader] .related-grid{grid-template-columns:1fr}}[data-theme=reader] .gradient-blob{display:none}[data-theme=reader] .gallery-grid{columns:3 220px;column-gap:12px}[data-theme=reader] .gallery-item{display:block;width:100%;margin:0 0 12px;padding:0;border:none;background:none;cursor:zoom-in;break-inside:avoid;-webkit-column-break-inside:avoid}[data-theme=reader] .gallery-item img{width:100%;display:block}[data-theme=reader] .gallery-item-title{display:block;margin-top:4px;font-size:.8rem;color:var(--color-text-muted);text-align:center}[data-theme=reader] .gallery-lightbox{position:fixed;inset:0;z-index:9999;background:#000000bf;display:flex;align-items:center;justify-content:center;padding:24px;cursor:zoom-out}[data-theme=reader] .gallery-lightbox img{max-width:100%;max-height:85vh;display:block}[data-theme=reader] .gallery-lightbox-close{position:absolute;top:16px;right:16px;background:none;border:none;color:#fff;font-size:22px;cursor:pointer}[data-theme=reader] .gallery-empty{text-align:center;color:var(--color-text-muted);padding:48px 0}.lb-fade-enter-active,.lb-fade-leave-active{transition:opacity .25s ease}.lb-fade-enter-from,.lb-fade-leave-to{opacity:0}[data-theme=reader] .about-card{text-align:center;padding:24px 0}[data-theme=reader] .about-avatar{width:88px;height:88px;border-radius:50%;object-fit:cover}[data-theme=reader] .about-name{font-family:var(--font-display);font-size:1.5rem;font-weight:700;color:var(--color-text-heading);margin:16px 0 6px}[data-theme=reader] .about-intro{font-size:.9375rem;color:var(--color-text);margin:0 0 8px}[data-theme=reader] .about-desc{font-size:.875rem;color:var(--color-text-muted);max-width:560px;margin:0 auto;line-height:1.7}[data-theme=reader] .about-stats{display:flex;gap:28px;justify-content:center;margin:28px 0}[data-theme=reader] .about-stat{display:flex;flex-direction:column;align-items:center;gap:2px}[data-theme=reader] .about-stat span{font-size:1.25rem;font-weight:700;color:var(--color-primary)}[data-theme=reader] .about-stat em{font-style:normal;font-size:.75rem;color:var(--color-text-muted)}[data-theme=reader] .about-links{display:flex;gap:16px;justify-content:center;flex-wrap:wrap}[data-theme=reader] .about-links a{color:var(--color-primary);text-decoration:none;font-size:.875rem}[data-theme=reader] .about-copyright{margin:28px 0 0;font-size:.75rem;color:var(--color-text-muted)}[data-theme=reader] .about-content{margin:24px auto 0;text-align:left;max-width:640px;color:var(--color-text-secondary);font-size:.875rem;line-height:1.9;white-space:pre-wrap;word-break:break-word}[data-theme=reader] .about-content:before{content:"";display:block;border-top:1px solid var(--color-border);margin-bottom:20px}[data-theme=reader] .about-blocks{margin-top:24px;width:100%;max-width:640px;margin-left:auto;margin-right:auto;text-align:left}[data-theme=reader] .about-block{display:flex;gap:12px;align-items:flex-start;padding:16px 0;border-top:1px solid var(--color-border)}[data-theme=reader] .about-block:last-child{padding-bottom:0}[data-theme=reader] .about-block-emoji{font-size:1.125rem;line-height:1.7;flex-shrink:0}[data-theme=reader] .about-block-text{margin:0;font-size:.875rem;line-height:1.9;color:var(--color-text-secondary);white-space:pre-wrap}pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}/*!
  Theme: GitHub
  Description: Light theme as seen on github.com
  Author: github.com
  Maintainer: @Hirse
  Updated: 2021-05-15

  Outdated base version: https://github.com/primer/github-syntax-light
  Current colors taken from GitHub's CSS
*/.hljs{color:#24292e;background:#fff}.hljs-doctag,.hljs-keyword,.hljs-meta .hljs-keyword,.hljs-template-tag,.hljs-template-variable,.hljs-type,.hljs-variable.language_{color:#d73a49}.hljs-title,.hljs-title.class_,.hljs-title.class_.inherited__,.hljs-title.function_{color:#6f42c1}.hljs-attr,.hljs-attribute,.hljs-literal,.hljs-meta,.hljs-number,.hljs-operator,.hljs-variable,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id{color:#005cc5}.hljs-regexp,.hljs-string,.hljs-meta .hljs-string{color:#032f62}.hljs-built_in,.hljs-symbol{color:#e36209}.hljs-comment,.hljs-code,.hljs-formula{color:#6a737d}.hljs-name,.hljs-quote,.hljs-selector-tag,.hljs-selector-pseudo{color:#22863a}.hljs-subst{color:#24292e}.hljs-section{color:#005cc5;font-weight:700}.hljs-bullet{color:#735c0f}.hljs-emphasis{color:#24292e;font-style:italic}.hljs-strong{color:#24292e;font-weight:700}.hljs-addition{color:#22863a;background-color:#f0fff4}.hljs-deletion{color:#b31d28;background-color:#ffeef0}.theme-toggle[data-v-decfabaf]{border:1px solid var(--color-border);background:var(--color-surface);color:var(--color-text);border-radius:var(--radius);padding:4px 10px;cursor:pointer;font-size:13px}.theme-toggle[data-v-decfabaf]:hover{color:var(--color-primary);border-color:var(--color-primary)}.pill-nav-items[data-v-2095887a]{position:relative;display:flex;align-items:center;height:42px;background:color-mix(in srgb,var(--color-surface) 65%,transparent);border:1px solid var(--color-border);border-radius:9999px;backdrop-filter:blur(10px)}.pill-logo[data-v-2095887a]{display:inline-flex;align-items:center;height:100%;padding:0 16px 0 14px;margin-right:2px;text-decoration:none;flex-shrink:0}.pill-logo svg[data-v-2095887a]{height:24px;width:auto;display:block}.pill-list[data-v-2095887a]{list-style:none;display:flex;align-items:stretch;gap:3px;margin:0;padding:3px;height:100%}.pill-list>li[data-v-2095887a]{display:flex;height:100%}.pill[data-v-2095887a]{display:inline-flex;align-items:center;justify-content:center;height:100%;padding:0 16px;background:transparent;color:var(--color-text-secondary);text-decoration:none;border-radius:9999px;box-sizing:border-box;font-weight:600;font-size:14px;line-height:0;letter-spacing:.2px;white-space:nowrap;cursor:pointer;position:relative;overflow:hidden;transition:color .25s ease}.pill .hover-circle[data-v-2095887a]{position:absolute;left:50%;bottom:0;border-radius:50%;background:var(--color-primary);z-index:1;display:block;pointer-events:none;will-change:transform}.pill .label-stack[data-v-2095887a]{position:relative;display:inline-block;line-height:1;z-index:2}.pill .pill-label[data-v-2095887a]{position:relative;z-index:2;display:inline-block;line-height:1;will-change:transform}.pill .pill-label-hover[data-v-2095887a]{position:absolute;left:0;top:0;color:var(--color-primary-contrast);z-index:3;display:inline-block;will-change:transform,opacity}.pill.is-active[data-v-2095887a]:after{content:"";position:absolute;bottom:-6px;left:50%;transform:translate(-50%);width:12px;height:12px;background:var(--color-primary);border-radius:50%;z-index:4}.pill.is-active[data-v-2095887a]{color:var(--color-text)}.mobile-topbar[data-v-2e6d065e]{position:sticky;top:0;z-index:120;display:flex;align-items:center;justify-content:space-between;height:56px;padding:0 18px;background:color-mix(in srgb,var(--color-surface) 92%,transparent);backdrop-filter:blur(8px);border-bottom:1px solid var(--color-border)}.mobile-brand[data-v-2e6d065e]{font-weight:700;font-size:16px;color:var(--color-text-heading);text-decoration:none}.mobile-hamburger[data-v-2e6d065e]{display:flex;flex-direction:column;justify-content:center;gap:5px;width:38px;height:38px;background:none;border:none;padding:8px;cursor:pointer}.mobile-hamburger .bar[data-v-2e6d065e]{display:block;height:2px;width:100%;border-radius:2px;background:var(--color-text);transition:transform .25s ease,opacity .2s ease}.mobile-hamburger.open .bar[data-v-2e6d065e]:nth-child(1){transform:translateY(7px) rotate(45deg)}.mobile-hamburger.open .bar[data-v-2e6d065e]:nth-child(2){opacity:0}.mobile-hamburger.open .bar[data-v-2e6d065e]:nth-child(3){transform:translateY(-7px) rotate(-45deg)}.mobile-menu[data-v-2e6d065e]{position:fixed;inset:56px 0 0;z-index:95;background:color-mix(in srgb,var(--color-bg) 96%,transparent);backdrop-filter:blur(10px);overflow-y:auto;padding:12px 18px 40px}.mobile-link[data-v-2e6d065e]{display:block;padding:14px 6px;font-size:16px;color:var(--color-text);text-decoration:none;border-bottom:1px solid var(--color-border)}.mobile-link[data-v-2e6d065e]:active,.mobile-link[data-v-2e6d065e]:hover{color:var(--color-primary)}.mobile-menu-foot[data-v-2e6d065e]{display:flex;justify-content:center;padding-top:24px}.menu-enter-active[data-v-2e6d065e],.menu-leave-active[data-v-2e6d065e]{transition:opacity .2s ease}.menu-enter-from[data-v-2e6d065e],.menu-leave-to[data-v-2e6d065e]{opacity:0}*{box-sizing:border-box}body{margin:0;font-family:var(--font-body);font-size:var(--font-size);line-height:var(--line-height);-webkit-font-smoothing:antialiased}a{color:var(--color-primary)}body{transition:opacity .2s ease}html.theme-switching body{opacity:0}.nav-progress{position:fixed;top:0;left:0;width:0;height:2px;background:var(--color-primary);z-index:9998;pointer-events:none;transition:width .1s linear}.mobile-header{display:none}@media(max-width:768px){.mobile-header{display:block}}.site-header{background:var(--color-surface);border-bottom:1px solid var(--color-border)}.inner{max-width:var(--max-width);margin:0 auto;padding:0 20px;display:flex;align-items:center;justify-content:space-between;height:56px}.nav{display:flex;gap:16px;align-items:center}.nav a{color:var(--color-text-muted);text-decoration:none;font-size:14px}.nav a:hover{color:var(--color-primary)}.site-main{min-width:0;min-height:calc(100vh - 120px)}.site-footer{border-top:1px solid var(--color-border);padding:20px;display:flex;justify-content:space-between;color:var(--color-text-muted);font-size:14px;max-width:var(--max-width);margin:0 auto}.markdown-body{line-height:var(--line-height);word-break:break-word}.markdown-body h1,.markdown-body h2,.markdown-body h3{margin:1.4em 0 .6em;line-height:1.4}.markdown-body p{margin:.8em 0}.markdown-body code{background:var(--color-code-bg);border-radius:4px;padding:2px 5px;font-family:var(--font-mono);font-size:.9em}.markdown-body pre{background:var(--color-code-bg);padding:16px;border-radius:var(--radius);overflow-x:auto}.markdown-body pre code{background:transparent;padding:0}.markdown-body img{max-width:100%;border-radius:var(--radius)}.markdown-body audio{max-width:100%;margin:.8em 0}.markdown-body blockquote{margin:.8em 0;padding-left:14px;border-left:3px solid var(--color-border);color:var(--color-text-muted)}.markdown-body table{border-collapse:collapse;margin:.8em 0;width:100%}.markdown-body th,.markdown-body td{border:1px solid var(--color-border);padding:8px 12px}.post-list{display:flex;flex-direction:column;gap:16px}.post-card{padding:var(--card-padding)}.post-card .post-title{margin:0 0 8px;font-size:20px}.post-card .post-title a{color:var(--color-text);text-decoration:none}.post-card .post-title a:hover{color:var(--color-primary)}.post-card .post-summary{color:var(--color-text-muted);margin:0 0 12px;font-size:14px;line-height:1.6}.post-meta{display:flex;gap:16px;flex-wrap:wrap;color:var(--color-text-muted);font-size:13px;align-items:center}.post-empty{text-align:center;color:var(--color-text-muted);padding:48px 0}:focus-visible{outline:2px solid var(--color-primary);outline-offset:2px;border-radius:4px}.skip-link{position:absolute;left:-9999px;top:0;z-index:9999;background:var(--color-primary);color:var(--color-primary-contrast);padding:8px 16px;border-radius:0 0 8px 8px;text-decoration:none;font-size:14px}.skip-link:focus{left:0}.site-nav [data-menu-for]{display:none}html[data-theme=normal] .site-nav [data-menu-for=normal],html[data-theme=reader] .site-nav [data-menu-for=reader]{display:flex;flex-direction:column}
