:root{--bg:#fff;--text:#737373;--strong:#171717;--hover:#171717;--border:#ededed;--line:#f4f4f4;--surface:#f0f0f0;--surface-hover:#ececec;--toolbar-bg:#fafafa;--panel:#fff;--border-strong:#d0d0d0;--ink:#333;--accent:#171717;--heading:#000;--code-bg:#f6f8fa;--code-text:#24292f;--code-comment:#6e7781;--code-keyword:#cf222e;--code-string:#0a7d38;--code-number:#b56409;--code-fn:#8250df;--code-type:#953800;--sidebar-w:220px;--content-max:1680px;--font-sans:Inter, "PingFang SC", "Noto Sans SC", "Microsoft YaHei", -apple-system, BlinkMacSystemFont, sans-serif;--color-black:#000;--leading-normal:1.5}@supports (color:lab(0% 0 0)){:root{--text:lab(48.496% 0 0);--strong:lab(7.78201% -.0000149012 0);--hover:lab(7.78201% -.0000149012 0);--ink:lab(21.12% 0 0);--accent:lab(7.78201% -.0000149012 0)}}@media (prefers-color-scheme:dark){:root{--bg:#0a0a0a;--text:#6a6a6a;--strong:#f5f5f5;--hover:#f5f5f5;--border:#1f1f1f;--line:#161616;--ink:#d0d0d0;--accent:#f5f5f5;--heading:#f5f5f5;--code-bg:#0d1117;--code-text:#c9d1d9;--code-comment:#8b949e;--code-keyword:#ff7b72;--code-string:#7ee787;--code-number:#ffa657;--code-fn:#d2a8ff;--code-type:#79c0ff}}*{box-sizing:border-box}html,body{margin:0;padding:0}html{scrollbar-gutter:stable}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.001ms!important;animation-duration:.001ms!important;animation-iteration-count:1!important}}body{background:var(--bg);color:var(--text);font-family:var(--font-sans);font-size:13px;line-height:var(--leading-normal);letter-spacing:.01em;-webkit-font-smoothing:antialiased}a{color:inherit;text-decoration:none;transition:color .15s cubic-bezier(.4,0,.2,1)}a:hover{color:var(--strong)}.muted{color:var(--text);font-size:.875rem}[data-theme=dark]{--bg:#0a0a0a;--text:#9a9a9a;--strong:#f5f5f5;--hover:#f5f5f5;--border:#222;--line:#1a1a1a;--surface:#1a1a1a;--surface-hover:#252525;--toolbar-bg:#141414;--panel:#161616;--border-strong:#333;--ink:#d6d6d6;--accent:#f5f5f5;--heading:#f5f5f5;--code-bg:#0d1117;--code-text:#c9d1d9;--code-comment:#8b949e;--code-keyword:#ff7b72;--code-string:#7ee787;--code-number:#ffa657;--code-fn:#d2a8ff;--code-type:#79c0ff}.shell{max-width:var(--content-max);min-height:100vh;margin:0 auto;position:relative}.sidebar{top:0;left:max(.5rem, calc((100vw - var(--content-max)) / 2 + .5rem));width:var(--sidebar-w);z-index:45;flex-direction:column;justify-content:space-between;gap:2rem;height:100dvh;padding:1rem 0;display:flex;position:fixed}.sidebar-top{flex-direction:column;gap:2rem;display:flex}.theme-toggle{color:var(--text);cursor:pointer;background:0 0;border:none;padding:2px;font-size:16px;line-height:1}.theme-toggle:hover{color:var(--strong)}.sidebar-head{justify-content:space-between;align-items:center;display:flex}.sidebar .online{color:var(--text);align-items:center;gap:.4rem;font-size:13px;display:flex}.sub-link{color:var(--text);cursor:pointer;font-size:13px}.social-links{flex-wrap:wrap;gap:.5rem;margin-top:.5rem;display:flex}.social-links a{color:var(--text);opacity:.6;font-size:12px;transition:opacity .15s}.social-links a:hover{opacity:1;color:var(--strong)}.sub-link:hover{color:var(--strong)}.sidebar .online .dot{background:var(--strong);border-radius:50%;width:8px;height:8px;display:inline-block;position:relative}.sidebar .online .dot:after{content:"";background:var(--strong);border-radius:50%;animation:1.1s ease-out infinite ripple;position:absolute;inset:0}@keyframes ripple{0%{opacity:.55;transform:scale(1)}to{opacity:0;transform:scale(2.8)}}.sidebar .cats{flex-direction:column;gap:.25rem;margin-top:1.25rem;display:flex}.sidebar .cats a,.sidebar .cats .cat-group>a{font-size:var(--nav-fs,14px);color:var(--text);align-self:flex-start;padding-right:16px;position:relative}.sidebar .cats a:hover,.sidebar .cats a.active{color:var(--strong)}.sidebar .cats .cat-group{flex-direction:column;gap:.125rem;display:flex}.sidebar .cats .cat-expand{opacity:.4;cursor:pointer;color:inherit;background:0 0;border:none;margin-left:4px;font-size:10px;display:inline-block}.sidebar .cats .cat-expand:hover{opacity:1}.sidebar .cats .sub-cats{flex-direction:column;gap:.125rem;padding-left:1.25rem;display:flex}.sidebar .cats .sub-cat-link{color:var(--text);opacity:.6;font-size:12px}.sidebar .cats .sub-cat-link:hover,.sidebar .cats .sub-cat-link.active{opacity:1;color:var(--strong)}.sidebar .cats .sub-cat{color:var(--text);opacity:.7;padding-left:1.5rem;font-size:12px}.sidebar .cats .sub-cat.active{opacity:1;color:var(--strong);font-weight:600}.sidebar .cats a:after{content:"";background:var(--strong);opacity:0;border-radius:50%;width:8px;height:8px;transition:opacity .2s,transform .3s cubic-bezier(.34,1.56,.64,1);position:absolute;top:50%;right:2px;transform:translateY(-50%)scale(0)}.sidebar .cats a.active:after{opacity:1;animation:.32s cubic-bezier(.34,1.56,.64,1) both dotIn}@keyframes dotIn{0%{transform:translateY(-50%)scale(0)}55%{transform:translateY(-50%)scale(1.35)}to{transform:translateY(-50%)scale(1)}}.sidebar .logo{color:var(--strong);letter-spacing:.08em;font-size:16px;font-weight:700;line-height:1}.sidebar nav{flex-direction:column;gap:.25rem;display:flex}.sidebar nav a{color:var(--text);font-size:13px;font-weight:400;transition:color .15s cubic-bezier(.4,0,.2,1)}.sidebar nav a:hover,.sidebar nav a.active{color:var(--strong)}.sidebar .foot{color:var(--text);flex-direction:column;gap:.85rem;font-size:13px;line-height:1.6;display:flex}.sidebar .sub-row{gap:.3rem;display:flex}.sidebar .sub-row input{flex:1;min-width:0;font-size:12px}.sidebar .auth{gap:.75rem;display:flex}.sidebar .auth button{color:var(--text);cursor:pointer;font:inherit;background:0 0;border:none;padding:0;transition:color .15s cubic-bezier(.4,0,.2,1)}.sidebar .auth button:hover{color:var(--strong)}.main{margin-left:calc(var(--sidebar-w) + 1.5rem);min-height:100vh;padding:1rem 2.5rem 4rem;position:relative}@media (min-width:1712px){.shell{border-left:1px solid var(--border);border-right:1px solid var(--border)}}.mobile-toggle,.overlay{display:none}@media (max-width:1024px){.mobile-toggle{background:var(--surface);width:38px;height:38px;color:var(--strong);z-index:50;cursor:pointer;border:none;border-radius:8px;justify-content:center;align-items:center;font-size:16px;display:flex;position:fixed;top:.75rem;left:.75rem}.overlay{z-index:44;background:#00000059;display:block;position:fixed;inset:0}.sidebar{z-index:46;background:var(--bg);width:248px;height:100dvh;padding:1.5rem 1.25rem;transition:transform .28s cubic-bezier(.4,0,.2,1);position:fixed;top:0;left:0;transform:translate(-100%)}.sidebar.open{transform:translate(0)}.main{margin-left:0;padding:3.5rem 1.25rem 2rem}.post-layout{flex-direction:column}.post-rail,.post-toc,.post-comments{width:100%;max-height:none;position:relative}}.last-updated{color:var(--text);margin:0;font-size:12px;position:absolute;top:1rem;right:2.5rem}.intro{color:var(--text);max-width:640px;margin:0 0 .5rem;font-size:14px;font-weight:300;line-height:1.5}.intro strong{color:var(--strong);font-weight:600}.pills{flex-wrap:wrap;gap:.5rem;margin:1.75rem 0 1.5rem;display:flex}.pill{color:var(--text);background:var(--surface);cursor:pointer;white-space:nowrap;border:none;border-radius:999px;padding:.32rem .9rem;font-family:inherit;font-size:.8rem;transition:all .2s cubic-bezier(.4,0,.2,1)}.pill:hover{color:var(--strong)}.pill.active{background:var(--strong);color:var(--bg);border-color:var(--strong)}.toolbar{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:1rem;margin:1.5rem 0 1rem;display:flex}.search-input{background:var(--surface);color:var(--strong);border:none;border-radius:999px;outline:none;flex:none;padding:.35rem .9rem;font-size:.8rem}.search-input::placeholder{color:var(--text)}.toolbar .pills{margin:0}.toolbar .filter-wrap{margin-bottom:0;position:relative}.toolbar .filter-panel{background:var(--panel);border:1px solid var(--border);opacity:0;transform-origin:100% 0;pointer-events:none;z-index:50;border-radius:12px;flex-direction:column;gap:.1rem;min-width:132px;padding:.4rem;transition:opacity .18s,transform .24s cubic-bezier(.34,1.56,.64,1);display:flex;position:absolute;top:calc(100% + 8px);right:0;transform:translateY(-8px)scale(.94);box-shadow:0 12px 32px #00000024}.toolbar .filter-panel.open{opacity:1;pointer-events:auto;transform:translateY(0)scale(1)}.toolbar .filter-panel .pill{text-align:left;color:var(--text);background:0 0;border:none;border-radius:8px;width:100%;padding:.5rem .75rem;display:block}.toolbar .filter-panel .pill:hover{background:var(--surface);color:var(--strong)}.toolbar .filter-panel .pill.active{background:var(--surface-hover);color:var(--strong);font-weight:600}.masonry{column-count:1;column-gap:8px;animation:.4s cubic-bezier(.16,1,.3,1) both feedIn}@keyframes feedIn{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}@media (min-width:460px){.masonry{column-count:2}}@media (min-width:700px){.masonry{column-count:3}}@media (min-width:940px){.masonry{column-count:var(--masonry-cols,4)}}.card{break-inside:avoid;border:1px solid var(--line);background:var(--bg);border-radius:12px;margin-bottom:10px;padding:12px;transition:transform .2s,box-shadow .2s,border-color .2s;display:block}.card:hover{background:var(--surface);border-color:var(--border-strong);transform:translateY(-3px);box-shadow:0 10px 30px -14px #00000038}.card .cover{background:var(--line);border-radius:6px;width:100%;height:auto;margin-bottom:.6rem;display:block}.card h3{color:var(--strong);margin:.25rem 0;font-size:1rem;font-weight:600;line-height:1.4}.card .excerpt{color:var(--text);margin-top:.2rem;font-size:.84rem}.card .meta{color:var(--text);font-size:.74rem}.write-page{max-width:760px;margin:0 auto;padding:0 0 5rem}.write-title{width:100%;color:var(--strong);background:0 0;border:none;border-radius:0;outline:none;padding:.5rem 0 .25rem;font-size:1.8rem;font-weight:700}.write-title::placeholder{color:var(--text);opacity:.6}.write-subtitle{width:100%;color:var(--text);background:0 0;border:none;border-radius:0;outline:none;padding:.25rem 0 1.25rem;font-size:1rem}.write-subtitle::placeholder{color:var(--text);opacity:.5}.write-meta{gap:.75rem;margin-bottom:1rem;display:flex}.write-meta select{border:1px solid var(--border);font:inherit;background:var(--surface);color:var(--strong);cursor:pointer;border-radius:8px;outline:none;flex-shrink:0;padding:.5rem .75rem}.write-meta input{flex:1}.write-upload{border:1px dashed var(--border);color:var(--text);cursor:pointer;white-space:nowrap;border-radius:10px;flex-shrink:0;align-items:center;gap:.3rem;padding:.5rem .875rem;font-size:13px;transition:all .15s;display:inline-flex}.write-upload:hover{border-color:var(--strong);color:var(--strong);border-style:solid}.write-actions{align-items:center;gap:.75rem;margin-top:1.5rem;display:flex}.write-status{color:var(--text);margin-right:auto;font-size:12px}.auth-page{max-width:560px;margin:5vh auto 5rem}.auth-page h1,.auth-page h2{color:var(--strong);margin:0 0 1.5rem;font-size:1.5rem;font-weight:700}.write-msg{color:#d4564e;margin-top:1rem;font-size:13px}.auth-avatar{object-fit:cover;vertical-align:middle;border-radius:50%;width:18px;height:18px;margin-right:4px}.auth-name{align-items:center;gap:2px;display:inline-flex}.modal-overlay{z-index:100;background:#0006;justify-content:center;align-items:center;animation:.2s fadeIn;display:flex;position:fixed;inset:0}.modal-box{background:var(--panel);border-radius:14px;width:90%;max-width:380px;padding:2rem;animation:.25s cubic-bezier(.34,1.56,.64,1) postIn;position:relative;box-shadow:0 20px 60px #00000026}.modal-box h3{color:var(--strong);margin:0 0 .5rem;font-size:1.2rem;font-weight:700}.modal-box .muted{margin-bottom:1.25rem}.modal-box form{flex-direction:column;gap:.75rem;display:flex}.modal-close{color:var(--text);cursor:pointer;background:0 0;border:none;font-size:18px;position:absolute;top:.75rem;right:.75rem}.modal-close:hover{color:var(--strong)}.profile-header{align-items:center;gap:1rem;margin-bottom:1.5rem;display:flex}.profile-tabs{border-bottom:1px solid var(--border);gap:0;margin-bottom:1.5rem;display:flex}.profile-tab{font:inherit;color:var(--text);cursor:pointer;background:0 0;border:none;border-bottom:2px solid #0000;margin-bottom:-1px;padding:.7rem 1.2rem;font-size:13px;transition:color .15s,border-color .15s}.profile-tab:hover{color:var(--strong)}.profile-tab.active{color:var(--strong);border-bottom-color:var(--strong);font-weight:600}.profile-body{min-height:200px}.profile-item{border-bottom:1px solid var(--line);padding:.85rem 0}.profile-item:last-child{border-bottom:none}.avatar-upload-area{align-items:center;gap:1rem;display:flex}.avatar-preview{object-fit:cover;border-radius:50%;width:64px;height:64px}.upload-btn{border:1px dashed var(--border);color:var(--text);cursor:pointer;border-radius:10px;align-items:center;gap:.4rem;padding:.5rem 1rem;font-size:13px;transition:all .15s;display:inline-flex}.upload-btn:hover{border-color:var(--strong);color:var(--strong);border-style:solid}.post-rail{border-right:none;flex-direction:column;flex-shrink:0;align-self:flex-start;gap:0;width:248px;max-height:calc(100vh - 2rem);display:flex;position:sticky;top:1rem;overflow-y:auto}.rail-controls{z-index:10;justify-content:space-between;align-items:center;padding:0 16px 16px;display:flex;position:relative}.rail-nav{gap:.5rem;display:flex}.rail-btn svg{width:14px;height:14px;display:block}.rail-btn{background:var(--surface);width:32px;height:32px;color:var(--strong);cursor:pointer;border:none;border-radius:50%;justify-content:center;align-items:center;font-size:14px;line-height:1;display:flex}.rail-btn:hover{background:var(--border-strong)}.rail-related{border-top:1px solid #0000001a;margin:0 16px 16px;padding-top:1rem}.rail-related h4{color:var(--strong);margin:0 0 .6rem;font-size:12px;font-weight:600}.rail-related ul{flex-direction:column;gap:.4rem;margin:0;padding:0;list-style:none;display:flex}.rail-related li a{color:var(--text);font-size:12px}.rail-related li a:hover{color:var(--strong)}.rail-cover{border-radius:8px;width:calc(100% - 32px);margin:0 16px 1rem;display:block}.rail-author{color:var(--strong);align-items:center;gap:.5rem;padding:0 20px 12px;font-size:13px;display:flex}.rail-author .comment-avatar{width:24px;height:24px;font-size:11px}.rail-meta{flex-direction:column;margin:0;padding:0 20px;font-size:12px;display:flex}.rail-meta>div{border-top:1px solid var(--border-strong);justify-content:space-between;gap:.5rem;padding:9px 0;display:flex}.rail-meta>div:first-child{border-top:none}.rail-meta dt{color:var(--text)}.rail-meta dd{color:var(--strong);margin:0}.rail-excerpt{color:#0006;margin:0;padding:12px 20px 20px;font-size:12px;line-height:1.6}@media (max-width:1100px){.post-rail{display:none}}.post-layout{align-items:flex-start;gap:1rem;animation:.32s cubic-bezier(.4,0,.2,1) postIn;display:flex}.post-article{flex:1;min-width:0;max-width:760px;margin:0 auto}.post-article .prose{margin-top:1rem}.post-related{border-top:1px solid #0000001a;margin-top:2rem;padding-top:1.25rem}.post-related h4{color:var(--strong);margin:0 0 .75rem;font-size:13px;font-weight:600}.post-related ul{flex-direction:column;gap:.5rem;margin:0;padding:0;list-style:none;display:flex}.post-related li a{color:var(--text);font-size:13px}.post-related li a:hover{color:var(--strong)}.post-cover{aspect-ratio:16/9;object-fit:cover;border-radius:8px;width:100%;margin-bottom:1rem;display:block}.post-title{color:var(--heading);letter-spacing:-.015em;margin:0 0 .3rem;font-size:1.6rem;font-weight:800;line-height:1.3}.post-subtitle{color:var(--text);margin:0 0 .4rem}.post-meta{margin-bottom:1.5rem}.post-toc{flex-shrink:0;align-self:flex-start;width:140px;padding-left:.5rem;position:sticky;top:1rem}.toc-progress{background:var(--line);border-radius:2px;height:3px;margin-bottom:1rem;overflow:hidden}.toc-progress-bar{background:var(--strong);height:100%;transition:width .1s linear}.post-toc h4{color:var(--text);margin:0 0 .6rem;font-size:12px;font-weight:500}.post-toc ul{flex-direction:column;gap:.45rem;margin:0;padding:0;list-style:none;display:flex}.post-toc a{color:var(--text);font-size:12px}.post-toc a:hover{color:var(--strong)}.post-toc li.active>a{color:var(--strong);font-weight:600}@media (max-width:1280px){.post-toc{display:none}}.post-comments-wrap{max-width:760px;margin:0 auto}.post-comments{border-top:1px solid var(--border);margin-top:3rem;padding-top:2rem}.post-comments h3{color:var(--strong);letter-spacing:.02em;margin:0 0 1rem;font-size:13px;font-weight:600}.comment-form{border:1px solid var(--border);background:var(--bg);border-radius:12px;flex-direction:column;gap:.75rem;margin-bottom:1.75rem;padding:.875rem;transition:border-color .15s;display:flex}.comment-form:focus-within{border-color:var(--strong)}.comment-form textarea{resize:vertical;width:100%;min-height:72px;font:inherit;color:var(--strong);background:0 0;border:none;outline:none;padding:0;font-size:14px;line-height:1.6}.comment-form textarea::placeholder{color:var(--text)}.comment-form-actions{justify-content:flex-end;display:flex}.comment-form-user{gap:.5rem;display:flex}.comment-input{border:1px solid var(--border);font:inherit;color:var(--strong);background:var(--bg);border-radius:8px;outline:none;flex:1;padding:.5rem .75rem;font-size:13px;transition:border-color .15s}.comment-input:focus{border-color:var(--strong)}.comment-input::placeholder{color:var(--text)}.comment-form .btn{border:1px solid var(--strong);background:var(--strong);color:var(--bg);cursor:pointer;border-radius:8px;padding:.5rem 1.25rem;font-size:13px}.comment-form .btn:disabled{opacity:.4;cursor:not-allowed}.comment{border-bottom:1px solid var(--line);gap:.7rem;padding:.9rem 0;display:flex}.comment:last-child{border-bottom:none}.comment-body{flex:1;min-width:0}.comment-actions{align-items:center;gap:1.1rem;margin-top:.35rem;font-size:12px;display:flex}.comment-del{color:var(--text);cursor:pointer}.comment-del:hover{color:#d4564e}.comment-like,.comment-reply{color:var(--text);cursor:pointer;-webkit-user-select:none;user-select:none;transition:color .15s}.comment-like:hover,.comment-reply:hover{color:var(--strong)}.comment-like.liked{color:#ef4444;animation:.3s heart-pop}@keyframes heart-pop{0%{transform:scale(1)}50%{transform:scale(1.4)}to{transform:scale(1)}}.comment-avatar{background:var(--surface);width:30px;height:30px;color:var(--strong);border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;font-size:12px;font-weight:600;display:flex}.comment-name{color:var(--text);margin-bottom:.2rem;font-size:12px;font-weight:500}.comment-text{color:var(--strong);font-size:13px;line-height:1.55}@keyframes postIn{0%{opacity:0;transform:scale(.96)}to{opacity:1;transform:scale(1)}}@media (max-width:900px){.post-layout{flex-direction:column}.post-toc{flex-shrink:0;align-self:flex-start;width:140px;padding-left:.5rem;position:sticky;top:1rem}.toc-progress{background:var(--line);border-radius:2px;height:3px;margin-bottom:1rem;overflow:hidden}.toc-progress-bar{background:var(--strong);height:100%;transition:width .1s linear}.post-toc h4{color:var(--text);margin:0 0 .6rem;font-size:12px;font-weight:500}.post-toc ul{flex-direction:column;gap:.45rem;margin:0;padding:0;list-style:none;display:flex}.post-toc a{color:var(--text);font-size:12px}.post-toc a:hover{color:var(--strong)}.post-toc li.active>a{color:var(--strong);font-weight:600}}@media (max-width:1280px){.post-toc{display:none}}.post-hero{aspect-ratio:21/9;border-radius:8px;width:100%;margin-bottom:0;position:relative;overflow:hidden}.post-head,.post-article .prose{padding:0}.post-hero .post-cover{object-fit:cover;aspect-ratio:auto;width:100%;max-width:none;height:100%;position:absolute;inset:0}.post-hero-fade{background:linear-gradient(#0000 40%,#fff 100%);position:absolute;inset:0}.post-hero-content{padding:1.5rem;position:absolute;bottom:0;left:0;right:0}.post-hero-content .post-title{text-shadow:0 1px 8px #fff9;margin:0 0 .2rem}.post-hero-content .post-subtitle{margin:0 0 .3rem}.post-comments--mobile{display:none}.skeleton{pointer-events:none}.skeleton .sk-cover{aspect-ratio:16/10;background:var(--surface-hover);border-radius:6px;width:100%;margin-bottom:.5rem}.skeleton .sk-line{background:var(--surface-hover);border-radius:4px;height:12px;margin-bottom:.4rem}.skeleton .sk-line.short{width:60%}.skeleton .sk-cover,.skeleton .sk-line{animation:1.4s ease-in-out infinite shimmer}@keyframes shimmer{0%{opacity:.55}50%{opacity:1}to{opacity:.55}}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:var(--border-strong);border-radius:4px}::-webkit-scrollbar-thumb:hover{background:var(--text)}.empty-state{text-align:center;color:var(--text);padding:3rem 1rem}.empty-state svg{opacity:.3;margin-bottom:.5rem}.container{max-width:400px;margin:3rem auto}.field{margin-bottom:1rem}.field label{color:var(--text);text-transform:uppercase;letter-spacing:.03em;margin-bottom:.35rem;font-size:12px;font-weight:500;display:block}input,textarea{border:1px solid var(--border);width:100%;font:inherit;background:var(--bg);color:var(--strong);border-radius:8px;padding:.6rem .8rem;font-size:14px;transition:border-color .15s}input:focus,textarea:focus{border-color:var(--strong);outline:none}button:focus{outline:none}.btn{border:1px solid var(--border-strong);color:var(--strong);cursor:pointer;font:inherit;background:0 0;border-radius:6px;padding:.5rem 1.1rem;text-decoration:none;display:inline-block}.btn-primary{background:var(--strong);color:var(--bg);border-color:var(--strong)}.btn:hover{border-color:var(--strong);transition:border-color .2s}.btn{transition:border-color .2s,background .2s}.row{align-items:center;gap:.5rem;display:flex}.error{color:#d4564e;margin-top:.5rem;font-size:.82rem}.prose{color:var(--ink);max-width:70ch;font-size:16px;line-height:1.8}.prose>:first-child{margin-top:0}.prose>:last-child{margin-bottom:0}.prose h1{color:var(--heading);letter-spacing:-.01em;margin:2.4rem 0 1rem;font-size:1.6rem;font-weight:800;line-height:1.3}.prose h2{color:var(--heading);letter-spacing:-.01em;margin:2.6rem 0 1rem;font-size:1.4rem;font-weight:800;line-height:1.3}.prose h3{color:var(--heading);margin:2rem 0 .8rem;font-size:1.2rem;font-weight:700;line-height:1.35}.prose p{color:var(--ink);margin:1.2rem 0}.prose ul,.prose ol{color:var(--ink);margin:1.2rem 0;padding-left:1.5rem}.prose li{margin:.45rem 0}.prose li::marker{color:var(--text)}.prose code{background:var(--surface);color:var(--heading);border-radius:4px;padding:.15rem .4rem;font-family:ui-monospace,SF Mono,Menlo,monospace;font-size:.875em}.prose pre{background:var(--code-bg);border:1px solid var(--border);border-radius:10px;margin:1.6rem 0;padding:1.1rem 1.25rem;font-size:.875rem;line-height:1.65;overflow-x:auto}.prose pre code{color:var(--code-text);font-size:inherit;background:0 0;border-radius:0;padding:0}.prose blockquote{border-left:3px solid var(--border-strong);color:var(--text);margin:1.6rem 0;padding:.2rem 0 .2rem 1.1rem}.prose a{color:var(--accent);text-underline-offset:2px;text-decoration:underline;text-decoration-thickness:1px}.prose a:hover{color:var(--strong)}.prose img{cursor:zoom-in;border-radius:8px;max-width:100%;height:auto;margin:0}.prose figure{text-align:center;margin:1.6rem 0}.prose figure img{border-radius:8px}.prose figcaption{color:var(--muted);margin-top:.5rem;font-size:.85rem;line-height:1.5}.prose hr{border:none;border-top:1px solid var(--border);margin:2.5rem 0}.prose strong{color:var(--heading);font-weight:700}.prose table{border-collapse:collapse;width:100%;margin:1.6rem 0;font-size:.9rem;display:block;overflow-x:auto}.prose th,.prose td{border:1px solid var(--border);text-align:left;padding:.5rem .75rem}.prose th{background:var(--surface);color:var(--heading);font-weight:700}.hljs{color:var(--code-text);background:0 0}.hljs-comment,.hljs-quote{color:var(--code-comment);font-style:italic}.hljs-keyword,.hljs-selector-tag,.hljs-deletion{color:var(--code-keyword)}.hljs-string,.hljs-attr,.hljs-addition,.hljs-regexp{color:var(--code-string)}.hljs-number,.hljs-literal,.hljs-variable,.hljs-template-variable,.hljs-bullet{color:var(--code-number)}.hljs-title,.hljs-section,.hljs-selector-id{color:var(--code-fn)}.hljs-type,.hljs-class .hljs-title,.hljs-built_in,.hljs-name,.hljs-tag,.hljs-params{color:var(--code-type)}.hljs-meta,.hljs-symbol,.hljs-link{color:var(--code-comment)}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}.prose-editor pre{background:var(--code-bg);border:1px solid var(--border);border-radius:8px;margin:1rem 0;padding:1rem 1.25rem;font-family:ui-monospace,SF Mono,Menlo,monospace;font-size:.875rem;line-height:1.65;overflow-x:auto}.callout{border:1px solid var(--border);background:var(--surface);color:var(--ink);border-left-width:4px;border-radius:10px;margin:1.6rem 0;padding:.95rem 1rem .95rem 2.8rem;font-size:.95rem;line-height:1.7;position:relative}.callout>:first-child{margin-top:0}.callout>:last-child{margin-bottom:0}.callout:before{color:#fff;border-radius:50%;justify-content:center;align-items:center;width:1.25rem;height:1.25rem;font-size:.8rem;font-style:normal;font-weight:700;display:flex;position:absolute;top:.9rem;left:.85rem}.callout-info{background:color-mix(in srgb, #4267d6 9%, var(--surface));border-left-color:#4267d6}.callout-info:before{content:"i";background:#4267d6}.callout-tip{background:color-mix(in srgb, #0a7d38 10%, var(--surface));border-left-color:#0a7d38}.callout-tip:before{content:"✓";background:#0a7d38}.callout-warning{background:color-mix(in srgb, #b56409 12%, var(--surface));border-left-color:#b56409}.callout-warning:before{content:"!";background:#b56409}.callout-danger{background:color-mix(in srgb, #cf222e 10%, var(--surface));border-left-color:#cf222e}.callout-danger:before{content:"✕";background:#cf222e}.editor-wrap{border:1px solid var(--border);background:var(--panel);border-radius:8px;overflow:hidden}.editor-toolbar{border-bottom:1px solid var(--line);background:var(--toolbar-bg);flex-wrap:wrap;gap:.2rem;padding:.45rem;display:flex}.tb-btn{cursor:pointer;color:var(--text);background:0 0;border:none;border-radius:6px;min-width:28px;padding:.35rem .6rem;font-size:13px}.tb-btn:hover{background:var(--surface-hover);color:var(--strong)}.tb-btn.active{background:var(--strong);color:var(--bg)}.tb-lang{border:1px solid var(--border);background:var(--surface);color:var(--strong);border-radius:6px;align-self:center;margin-left:.25rem;padding:.3rem .4rem;font-family:inherit;font-size:12px}.prose-editor{border:1px solid var(--border);min-height:320px;color:var(--strong);border-radius:6px;outline:none;padding:.9rem;line-height:1.7}.prose-editor:focus{outline:1px solid var(--strong);outline-offset:-1px}.prose-editor p{margin:.6rem 0}.prose-editor>:first-child{margin-top:0}.author-header{align-items:center;gap:1.25rem;margin-bottom:1.5rem;display:flex}.author-info{flex:1;min-width:0}.author-name{color:var(--strong);margin:0;font-size:1.5rem;font-weight:700}.author-bio{color:var(--text);margin:.4rem 0 0;font-size:14px;line-height:1.6}.author-meta{color:var(--muted);margin-top:.3rem;font-size:12px}.author-stats{border-bottom:1px solid var(--line);gap:2rem;margin-bottom:2rem;padding-bottom:1.5rem;display:flex}.author-stat{text-align:center}.author-stat-num{color:var(--strong);font-size:1.4rem;font-weight:700}.author-stat-label{color:var(--muted);font-size:12px}.author-section-title{color:var(--strong);margin:0 0 1rem;font-size:14px;font-weight:600}.author-posts{flex-direction:column;gap:1rem;display:flex}.author-post-card{border:1px solid var(--line);border-radius:10px;flex-direction:column;gap:.4rem;padding:1rem;text-decoration:none;transition:border-color .15s;display:flex}.author-post-card:hover{border-color:var(--strong)}.author-post-meta{color:var(--muted);font-size:12px}.author-post-title{color:var(--strong);margin:0;font-size:1rem;font-weight:600}.author-post-excerpt{color:var(--text);-webkit-line-clamp:2;-webkit-box-orient:vertical;margin:0;font-size:13px;line-height:1.5;display:-webkit-box;overflow:hidden}.admin-h{color:var(--text);text-transform:uppercase;letter-spacing:.05em;margin:1.75rem 0 .75rem;font-size:13px;font-weight:600}.admin-table{border-collapse:collapse;width:100%;font-size:13px}.admin-table th{text-align:left;color:var(--text);border-bottom:2px solid var(--border);padding:.7rem .6rem;font-weight:500}.admin-table td{color:var(--strong);border-bottom:1px solid var(--line);padding:.7rem .6rem}.admin-table tr:hover td{background:var(--surface)}.admin-table a{color:var(--strong);text-decoration:none}.admin-table a:hover{text-decoration:underline}.admin-setting-row{border-bottom:1px solid var(--line);justify-content:space-between;align-items:center;padding:.65rem 0;font-size:13px;display:flex}.admin-setting-row strong{color:var(--strong)}
