:root{--tf-navy:#17202a;--tf-text:#2f3640;--tf-muted:#6b7785;--tf-gray:#99a2ac;--tf-border:#e3e6ea;--tf-border-strong:#cfd6dd;--tf-link:#0e83cd;--tf-link-hover:#3ea9ee;--tf-bg-soft:#f7f9fb;--tf-radius:8px;--tf-shadow:0 10px 30px rgba(15, 23, 32, 0.14);--tf-shell:#17202a;--tf-shell-deep:#101820;--tf-canvas:#ffffff;--tf-canvas-sunken:#f0f2f5;--tf-inline-code:#eef1f5;--tf-inline-code-fg:#4d4d4c;--tf-hit:#fff2ac;--tf-stripe:#f6f8fa;--tf-th:#eef1f5;--tf-quote-bg:transparent;--tf-quote-bar:#ddd;--tf-img-filter:none;--tf-scheme:light}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration,input[type=search]::-webkit-search-results-button{-webkit-appearance:none;appearance:none;display:none}#main-nav{padding-left:12px}.tf-nav-list{margin:0;padding:0;list-style:none}.tf-nav-item{position:relative;display:inline-block;vertical-align:top}.tf-nav-link{display:inline-block;padding:0 15px;line-height:50px;color:#fff;opacity:.72;font-size:15px;text-decoration:none;white-space:nowrap;cursor:pointer;transition:opacity .18s,color .18s;font-family:Lato,"Helvetica Neue",Helvetica,Arial,sans-serif}.tf-nav-item.open>.tf-nav-link,.tf-nav-item:hover>.tf-nav-link,.tf-nav-link.active,.tf-nav-link:focus,.tf-nav-link:hover{opacity:1;color:var(--tf-link-hover);outline:0}.tf-nav-link .fa{margin-left:5px;font-size:13px;transition:transform .18s}.tf-nav-item.open>.tf-nav-link .fa,.tf-nav-item:hover>.tf-nav-link .fa{transform:rotate(180deg)}.tf-nav-sub{position:absolute;top:100%;left:50%;padding-top:8px;transform:translateX(-50%) translateY(6px);opacity:0;visibility:hidden;transition:opacity .18s,transform .18s,visibility .18s;z-index:80}.tf-nav-item.open>.tf-nav-sub,.tf-nav-item:hover>.tf-nav-sub{opacity:1;visibility:visible;transform:translateX(-50%) translateY(0)}.tf-nav-sub-inner{min-width:240px;background:var(--tf-canvas);border:1px solid var(--tf-border);border-radius:var(--tf-radius);box-shadow:var(--tf-shadow);padding:8px;text-align:left}.tf-nav-sub-inner::before{content:"";position:absolute;top:2px;left:50%;width:10px;height:10px;margin-left:-5px;background:var(--tf-canvas);border-left:1px solid var(--tf-border);border-top:1px solid var(--tf-border);transform:rotate(45deg)}.tf-nav-sub-link{display:block;padding:10px 12px;border-radius:6px;text-decoration:none;transition:background .15s}.tf-nav-sub-link:hover{background:var(--tf-bg-soft)}.tf-nav-sub-name{display:block;font-size:14px;font-weight:600;color:var(--tf-text);line-height:1.4}.tf-nav-sub-desc{display:block;margin-top:2px;font-size:12px;line-height:1.5;color:var(--tf-gray)}.tf-nav-sub-link.current .tf-nav-sub-name{color:var(--tf-link)}#header-actions{flex:0 0 auto;display:flex;align-items:center;margin-left:auto}.tf-search-trigger{display:inline-flex;align-items:center;gap:8px;height:32px;padding:0 12px;margin-right:6px;border-radius:16px;background:rgba(255,255,255,.08);border:1px solid rgba(255,255,255,.16);color:rgba(255,255,255,.82);font-size:13px;cursor:pointer;transition:.18s;font-family:Lato,"Helvetica Neue",Helvetica,Arial,sans-serif}.tf-search-trigger:hover{background:rgba(255,255,255,.16);color:#fff}.tf-search-trigger kbd{font-family:inherit;font-size:11px;padding:1px 5px;border-radius:4px;background:rgba(255,255,255,.14);border:1px solid rgba(255,255,255,.12);color:rgba(255,255,255,.75)}.tf-search-trigger-label{white-space:nowrap}.tf-theme-toggle{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;margin-right:6px;padding:0;border-radius:50%;background:rgba(255,255,255,.08);border:1px solid rgba(255,255,255,.16);color:rgba(255,255,255,.82);font-size:15px;line-height:1;cursor:pointer;transition:background .18s,color .18s,transform .18s}.tf-theme-toggle:hover{background:rgba(255,255,255,.18);color:#fff}.tf-theme-toggle:active{transform:scale(.94)}.tf-theme-toggle .tf-theme-icon{display:inline-block;line-height:1}.tf-theme-toggle .tf-theme-icon-sun{display:none}html[data-theme=dark] .tf-theme-toggle .tf-theme-icon-sun{display:inline-block}html[data-theme=dark] .tf-theme-toggle .tf-theme-icon-moon{display:none}#header-actions .main-nav-link{padding:0 10px}#header-actions .main-nav-link i{font-size:20px;line-height:50px}@media screen and (max-width:768px){#header-actions{position:absolute;top:0;right:20px;bottom:0;margin:0}#header-actions .main-nav-link,.tf-search-trigger kbd,.tf-search-trigger-label{display:none}.tf-search-trigger{width:34px;height:34px;padding:0;justify-content:center;margin:0;background:0 0;border-color:transparent}.tf-theme-toggle{width:34px;height:34px;margin:0 2px 0 0;background:0 0;border-color:transparent}}.tf-mnav-item{display:block}.tf-mnav-link{display:flex;align-items:center;justify-content:space-between;color:#fff;text-decoration:none;padding:11px 15px;line-height:1.2;font-size:15px;opacity:.85}.tf-mnav-link.current,.tf-mnav-link:hover{opacity:1;color:var(--tf-link-hover)}.tf-mnav-link .fa{font-size:13px;transition:transform .2s}.tf-mnav-has-sub.open>.tf-mnav-link .fa{transform:rotate(180deg)}.tf-mnav-sub{display:none;margin:0;padding:0 0 6px;list-style:none;background:rgba(0,0,0,.18)}.tf-mnav-has-sub.open>.tf-mnav-sub{display:block}.tf-mnav-sublink{display:block;color:rgba(255,255,255,.72);text-decoration:none;padding:9px 15px 9px 30px;font-size:14px;line-height:1.2;border-left:2px solid transparent}.tf-mnav-sublink.current,.tf-mnav-sublink:hover{color:var(--tf-link-hover);border-left-color:var(--tf-link-hover)}.tf-mnav-search .tf-mnav-link{color:var(--tf-link-hover)}.tf-mnav-search .fa{margin-right:6px}body.tf-search-open{overflow:hidden}.tf-search[hidden]{display:none}.tf-search{position:fixed;inset:0;z-index:200;font-family:Lato,"Helvetica Neue",Helvetica,Arial,sans-serif}.tf-search-mask{position:absolute;inset:0;background:rgba(16,24,33,.55);animation:tf-fade-in .16s ease-out}@keyframes tf-fade-in{from{opacity:0}to{opacity:1}}.tf-search-panel{position:relative;width:92%;max-width:680px;margin:10vh auto 0;background:var(--tf-canvas);border-radius:12px;box-shadow:0 24px 60px rgba(10,18,26,.28);overflow:hidden;display:flex;flex-direction:column;max-height:76vh;animation:tf-drop-in .18s ease-out}@keyframes tf-drop-in{from{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}.tf-search-bar{display:flex;align-items:center;gap:12px;padding:16px 20px;border-bottom:1px solid var(--tf-border)}.tf-search-bar>.fa{color:var(--tf-gray);font-size:17px}.tf-search-bar input{flex:1 1 auto;min-width:0;border:0;outline:0;font-size:16px;font-family:inherit;color:var(--tf-text);background:0 0;-webkit-appearance:none}.tf-search-bar kbd{font-family:inherit;font-size:11px;color:var(--tf-gray);border:1px solid var(--tf-border);border-radius:4px;padding:2px 6px;background:var(--tf-bg-soft)}.tf-search-clear{flex:0 0 auto;width:24px;height:24px;border-radius:50%;border:0;background:0 0;color:var(--tf-gray);font-size:13px;line-height:1;cursor:pointer}.tf-search-clear:hover{color:var(--tf-text);background:var(--tf-bg-soft)}.tf-search-tabs{display:flex;align-items:center;gap:6px;padding:10px 16px;border-bottom:1px solid var(--tf-border);background:var(--tf-bg-soft);flex-wrap:wrap}.tf-search-tab{border:1px solid transparent;background:0 0;color:var(--tf-muted);font-size:13px;font-family:inherit;padding:5px 12px;border-radius:14px;cursor:pointer;transition:.15s}.tf-search-tab:hover{color:var(--tf-text)}.tf-search-tab.on{background:var(--tf-canvas);border-color:var(--tf-border-strong);color:var(--tf-link);font-weight:600}.tf-search-status{margin-left:auto;font-size:12px;color:var(--tf-gray)}.tf-search-results{overflow-y:auto;padding:6px;min-height:80px}.tf-result{display:block;padding:12px 14px;border-radius:var(--tf-radius);text-decoration:none;cursor:pointer;transition:background .12s}.tf-result.on,.tf-result:hover{background:var(--tf-bg-soft)}.tf-result-head{display:flex;align-items:center;gap:8px;margin-bottom:4px}.tf-result-type{flex:0 0 auto;font-size:11px;line-height:1;padding:4px 7px;border-radius:4px;background:#eef4fa;color:var(--tf-link)}.tf-result-type.tf-type-post{background:#eef4fa;color:#0e83cd}.tf-result-type.tf-type-gallery{background:#eefaf3;color:#1c9e63}.tf-result-type.tf-type-template{background:#fdf3e7;color:#c47b1a}.tf-result-title{font-size:15px;font-weight:600;color:var(--tf-text);line-height:1.45;flex:1 1 auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tf-result-date{flex:0 0 auto;font-size:12px;color:var(--tf-gray)}.tf-result-excerpt{font-size:13px;line-height:1.65;color:var(--tf-muted);margin:0;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.tf-result mark{background:var(--tf-hit);color:inherit;padding:0 1px;border-radius:2px}.tf-search-empty{padding:40px 20px;text-align:center;color:var(--tf-gray);font-size:14px;line-height:1.9}.tf-search-empty .fa{display:block;font-size:26px;margin-bottom:10px;color:var(--tf-border-strong)}.tf-search-foot{display:flex;align-items:center;gap:16px;padding:10px 18px;border-top:1px solid var(--tf-border);font-size:12px;color:var(--tf-gray);background:var(--tf-bg-soft)}.tf-search-foot kbd{font-family:inherit;border:1px solid var(--tf-border-strong);border-radius:4px;padding:1px 4px;background:var(--tf-canvas);margin-right:2px}.tf-search-foot .tf-foot-total{margin-left:auto;color:var(--tf-muted)}.tf-page-head{padding:34px 0 22px;border-bottom:1px solid var(--tf-border);margin-bottom:24px}.tf-page-title{font-family:Lato,"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:32px;font-weight:300;line-height:1.2;color:var(--tf-text);margin:0}.tf-page-sub{margin:8px 0 0;font-size:14px;color:var(--tf-muted);line-height:1.7}.tf-stats{display:flex;flex-wrap:wrap;gap:12px;margin-bottom:20px}.tf-stat{flex:1 1 150px;background:var(--tf-bg-soft);border:1px solid var(--tf-border);border-radius:var(--tf-radius);padding:16px 18px}.tf-stat-num{display:block;font-size:26px;font-weight:600;line-height:1.1;color:var(--tf-link);font-family:Lato,"Helvetica Neue",Helvetica,Arial,sans-serif}.tf-stat-num small{font-size:13px;font-weight:400;margin-left:2px;color:var(--tf-muted)}.tf-stat-label{display:block;margin-top:6px;font-size:13px;color:var(--tf-muted)}.tf-chart{margin:0 0 6px}.tf-chart-row{display:flex;align-items:center;gap:12px;padding:5px 0;cursor:pointer}.tf-chart-year{flex:0 0 46px;font-size:13px;color:var(--tf-muted);font-family:Lato,"Helvetica Neue",Helvetica,Arial,sans-serif}.tf-chart-track{flex:1 1 auto;height:16px;background:var(--tf-bg-soft);border-radius:8px;overflow:hidden}.tf-chart-bar{display:block;height:100%;min-width:4px;border-radius:8px;background:linear-gradient(90deg,#7fc0ee,var(--tf-link));transition:width .4s ease-out,filter .15s}.tf-chart-row:hover .tf-chart-bar{filter:brightness(1.08)}.tf-chart-value{flex:0 0 52px;text-align:right;font-size:12px;color:var(--tf-gray)}.tf-tag-list{display:flex;flex-wrap:wrap;gap:8px;margin:0;padding:0;list-style:none}.tf-tag{display:inline-flex;align-items:center;gap:6px;font-size:13px;padding:5px 11px;border-radius:14px;background:var(--tf-bg-soft);border:1px solid var(--tf-border);color:var(--tf-muted);text-decoration:none;cursor:pointer;transition:.15s;font-family:inherit}.tf-tag.on,.tf-tag:hover{border-color:var(--tf-link);color:var(--tf-link);background:#eef4fa}.tf-tag-count{font-size:11px;color:var(--tf-gray)}.tf-tag.on .tf-tag-count,.tf-tag:hover .tf-tag-count{color:inherit;opacity:.75}.tf-block{border:1px solid var(--tf-border);border-radius:var(--tf-radius);padding:20px 22px;margin-bottom:20px;background:var(--tf-canvas)}.tf-block-title{font-size:16px;font-weight:600;color:var(--tf-text);margin:0 0 14px;font-family:Lato,"Helvetica Neue",Helvetica,Arial,sans-serif}.tf-block-title .tf-block-extra{float:right;font-size:12px;font-weight:400;color:var(--tf-gray)}.tf-archive-toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:10px;margin-bottom:18px}.tf-archive-search{position:relative;flex:1 1 260px;min-width:200px}.tf-archive-search .fa{position:absolute;top:50%;left:12px;margin-top:-7px;color:var(--tf-gray);font-size:14px}.tf-archive-search input{width:100%;height:40px;padding:0 34px 0 34px;border:1px solid var(--tf-border);border-radius:var(--tf-radius);font-size:14px;font-family:inherit;color:var(--tf-text);background:var(--tf-canvas);outline:0;transition:.15s;-webkit-appearance:none}.tf-archive-search input:focus{border-color:var(--tf-link);box-shadow:0 0 0 3px rgba(14,131,205,.1)}.tf-archive-clear{position:absolute;top:50%;right:8px;margin-top:-13px;width:26px;height:26px;border-radius:50%;border:0;background:0 0;color:var(--tf-gray);cursor:pointer;font-size:14px;line-height:1;display:none}.tf-archive-search.filled .tf-archive-clear{display:block}.tf-archive-clear:hover{color:var(--tf-text);background:var(--tf-bg-soft)}.tf-archive-count{font-size:13px;color:var(--tf-gray);white-space:nowrap}.tf-archive-sort{height:40px;padding:0 10px;border:1px solid var(--tf-border);border-radius:var(--tf-radius);background:var(--tf-canvas);color:var(--tf-text);font-size:14px;font-family:inherit;cursor:pointer}.tf-archive-body{display:flex;gap:26px;align-items:flex-start;flex-wrap:wrap}.tf-archive-side{flex:0 0 230px;max-width:100%}.tf-archive-main{flex:1 1 380px;min-width:0}@media screen and (max-width:900px){.tf-archive-side{flex:1 1 100%}}.tf-year{margin-bottom:26px;scroll-margin-top:20px}.tf-year-title{display:flex;align-items:baseline;gap:12px;margin:0 0 8px;padding-bottom:8px;border-bottom:1px solid var(--tf-border);font-family:Lato,"Helvetica Neue",Helvetica,Arial,sans-serif}.tf-year-num{font-size:24px;font-weight:600;color:var(--tf-text);line-height:1}.tf-year-count{font-size:12px;color:var(--tf-gray);font-weight:400}.tf-post-list{margin:0;padding:0;list-style:none}.tf-post-item{border-bottom:1px solid #f1f3f5}.tf-post-item:last-child{border-bottom:0}.tf-post-item.hide,.tf-year.hide{display:none}.tf-post-link{display:flex;align-items:baseline;gap:14px;padding:11px 12px;border-radius:6px;text-decoration:none;transition:background .14s}.tf-post-link:hover{background:var(--tf-bg-soft)}.tf-post-title{flex:1 1 auto;min-width:0;font-size:15px;line-height:1.55;color:var(--tf-text);transition:color .14s}.tf-post-link:hover .tf-post-title{color:var(--tf-link)}.tf-post-title mark{background:var(--tf-hit);border-radius:2px;padding:0 1px}.tf-post-meta{flex:0 0 auto;display:flex;align-items:baseline;gap:12px;font-size:12px;color:var(--tf-gray);white-space:nowrap}.tf-post-tag{display:inline-block;font-size:11px;line-height:1;padding:3px 7px;border-radius:4px;background:var(--tf-bg-soft);color:var(--tf-muted);border:1px solid var(--tf-border)}.tf-archive-empty{padding:50px 0;text-align:center;color:var(--tf-gray);font-size:14px}@media screen and (max-width:640px){.tf-post-meta .tf-post-words{display:none}.tf-post-link{flex-wrap:wrap;gap:4px 12px}.tf-post-title{flex:1 1 100%}}.article-meta{display:flex;flex-wrap:wrap;align-items:center;gap:8px 16px;margin-top:14px;font-size:13px;color:var(--tf-gray)}@media screen and (min-width:769px){#content-inner.content-inner-flat{margin-left:110px;margin-right:110px}#content-inner.content-inner-flat>#sidebar{display:none}}@media screen and (min-width:769px){.article-inner-no-toc{margin-right:0!important}.article-inner-no-toc .article{max-width:100%}}@media screen and (min-width:769px){.article-inner{display:flex;align-items:flex-start;gap:32px;margin-right:0}.article-inner>.article{float:none;width:auto;flex:1 1 auto;min-width:0}.article-inner>#article-toc{display:block;float:none;flex:0 0 200px;width:200px;margin:0;opacity:1;position:sticky;top:80px;max-height:calc(100vh - 110px);overflow-y:auto;padding-top:40px}.article-inner>#article-toc>#article-toc-inner{width:auto;height:auto;overflow:visible;margin-bottom:0;padding:0}}#article-toc .sidebar-title{display:block;margin:0 0 10px;font-size:13px;letter-spacing:.06em;color:var(--tf-gray);text-transform:uppercase;font-weight:600}#article-toc .toc,#article-toc .toc-child{margin:0;padding:0;list-style:none}#article-toc .toc-item{list-style:none}#article-toc .toc-child{padding-left:10px}.article-meta-item{display:inline-flex;align-items:center;gap:5px;white-space:nowrap}.article-meta-item .fa{font-size:13px;opacity:.75}.article-meta a{color:var(--tf-gray);text-decoration:none}.article-meta a:hover{color:var(--tf-link)}.article-meta-cats a,.article-meta-tags a{display:inline-block;padding:2px 8px;margin-right:4px;border-radius:10px;background:var(--tf-bg-soft);border:1px solid var(--tf-border);font-size:12px}.article-meta-cats a:hover,.article-meta-tags a:hover{border-color:var(--tf-link);color:var(--tf-link)}#article-toc-inner .toc-link{display:block;padding:6px 0 6px 12px;border-left:2px solid transparent;color:var(--tf-muted);font-size:13px;line-height:1.5;text-decoration:none;transition:color .14s,border-color .14s;overflow:hidden;text-overflow:ellipsis}#article-toc-inner .toc-link:hover{color:var(--tf-link)}#article-toc-inner .toc-link.active{color:var(--tf-link);border-left-color:var(--tf-link);font-weight:600}.sidebar-title{display:block;margin-bottom:8px}#tf-progress{position:fixed;top:0;left:0;width:0;height:2px;background:linear-gradient(90deg,#7fc0ee,var(--tf-link));z-index:150;transition:width .1s linear;pointer-events:none}#tf-back-top{position:fixed;right:24px;bottom:24px;width:42px;height:42px;border-radius:50%;border:1px solid var(--tf-border);background:var(--tf-canvas);color:var(--tf-muted);font-size:16px;cursor:pointer;box-shadow:0 6px 18px rgba(15,23,32,.12);opacity:0;visibility:hidden;transform:translateY(8px);transition:.2s;z-index:120}#tf-back-top.show{opacity:1;visibility:visible;transform:translateY(0)}#tf-back-top:hover{color:var(--tf-link);border-color:var(--tf-link)}@media print{#tf-back-top,#tf-progress,.tf-search{display:none!important}}#plugin-list-header,.tf-book-head{display:flex;flex-wrap:wrap;align-items:center;gap:12px;margin:34px 0 0}#plugin-list-header::after,.tf-book-head::after{content:"";display:block;clear:both}#plugin-list-title,.tf-book-head-title{float:none;flex:1 1 auto}.tf-book-head-title{font-family:Lato,"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:36px;font-weight:300;line-height:1}#plugin-list-count,.tf-book-head-count{float:none;flex:0 0 auto;padding:0;margin:0;font-size:13px;color:var(--tf-gray);line-height:1.4;text-align:right}.tf-book-head-desc::before{content:"·";margin:0 6px;color:var(--tf-border)}@media (max-width:600px){.tf-book-head-count{text-align:left}.tf-book-head-desc{display:block}.tf-book-head-desc::before{content:"";margin:0}}.tf-gallery-toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:10px;margin-top:18px}.tf-gallery-input-wrap{position:relative;flex:1 1 280px;min-width:200px}.tf-gallery-input-wrap .fa{position:absolute;top:50%;left:12px;margin-top:-7px;color:var(--tf-gray);font-size:14px}#plugin-search-input{float:none;width:100%;height:42px;margin:0;padding:0 36px 0 34px;border:1px solid var(--tf-border);border-radius:var(--tf-radius);font-size:14px;font-family:inherit;color:var(--tf-text);background:var(--tf-canvas);outline:0;transition:.15s;-webkit-appearance:none}#plugin-search-input:focus{border-color:var(--tf-link);box-shadow:0 0 0 3px rgba(14,131,205,.1)}.tf-gallery-clear{position:absolute;top:50%;right:8px;margin-top:-14px;width:28px;height:28px;border-radius:50%;border:0;background:0 0;color:var(--tf-gray);cursor:pointer;display:none}.tf-gallery-input-wrap.filled .tf-gallery-clear{display:block}.tf-gallery-clear:hover{color:var(--tf-text);background:var(--tf-bg-soft)}.tf-gallery-chips{margin-top:16px;display:none}.tf-gallery-chips.on{display:block}.tf-gallery-chips-label{font-size:12px;color:var(--tf-gray);margin-bottom:8px}.tf-gallery-status{font-size:13px;color:var(--tf-gray);margin-left:auto;white-space:nowrap}.plugin-tag{border:0;background:0 0;font-family:inherit;cursor:pointer;padding:0}.plugin-tag.on{color:var(--tf-link)}#plugin-list{margin:26px -20px 40px}.tf-gallery-empty{padding:60px 0;text-align:center;color:var(--tf-gray);font-size:14px}.plugin-name mark{background:var(--tf-hit);border-radius:2px}#book ul li a.tf-book{display:flex;align-items:flex-end;position:relative;height:160px;line-height:normal;text-decoration:none;perspective:380px;perspective-origin:50% 46%}#book ul li a.tf-book .tf-book-3d{--tf-book-w:110px;--tf-book-t:26px;--tf-book-angle:-32deg;position:relative;flex:none;display:block;width:var(--tf-book-w);transform-style:preserve-3d;transform:rotateY(var(--tf-book-angle));transition:transform .45s cubic-bezier(.2,.75,.3,1)}#book ul li a.tf-book .tf-book-front{position:relative;display:block;transform:translateZ(calc(var(--tf-book-t)/ 2));border-radius:1px 4px 4px 1px;background:var(--tf-canvas);box-shadow:3px 0 9px rgba(28,16,2,.45),0 1px 0 rgba(0,0,0,.2)}#book ul li a.tf-book img{position:static;display:block;width:100%;height:auto;margin:0;border-radius:inherit;box-shadow:none;transform:none;transition:none;vertical-align:bottom}#book ul li a.tf-book .tf-book-front::after{content:"";position:absolute;inset:0;border-radius:inherit;pointer-events:none;background:linear-gradient(100deg,rgba(255,255,255,.45) 0,rgba(255,255,255,.12) 10%,rgba(255,255,255,0) 32%,rgba(0,0,0,.05) 70%,rgba(0,0,0,.22) 100%)}#book ul li a.tf-book .tf-book-spine{position:absolute;top:0;bottom:0;left:calc(50% - var(--tf-book-t)/ 2);width:var(--tf-book-t);border-radius:2px 0 0 2px;transform:translateX(calc(var(--tf-book-w)/ 2 * -1)) rotateY(-90deg);background:linear-gradient(90deg,#7d5124 0,#4d2e12 24%,#2d1a08 60%,#1b0f04 100%);box-shadow:inset 0 0 10px rgba(0,0,0,.65);backface-visibility:hidden;-webkit-backface-visibility:hidden}#book ul li a.tf-book .tf-book-pages{position:absolute;top:0;bottom:0;left:calc(50% - var(--tf-book-t)/ 2);width:var(--tf-book-t);border-radius:0 2px 2px 0;transform:translateX(calc(var(--tf-book-w)/ 2)) rotateY(90deg);background:linear-gradient(90deg,rgba(255,253,247,0) 0,rgba(255,253,247,0) 38%,rgba(96,74,44,.34) 100%),repeating-linear-gradient(90deg,#fffdf7 0,#fffdf7 1px,#e4dccb 1px,#e4dccb 2px,#f7f3ea 2px,#f7f3ea 3px);backface-visibility:hidden;-webkit-backface-visibility:hidden}#book ul li a.tf-book::after{content:"";position:absolute;left:8%;right:16%;bottom:-9px;height:12px;border-radius:50%;background:radial-gradient(ellipse at 50% 50%,rgba(18,9,0,.58) 0,rgba(18,9,0,.26) 42%,rgba(18,9,0,.06) 68%,rgba(18,9,0,0) 82%);z-index:-1;transition:transform .45s cubic-bezier(.2,.75,.3,1),opacity .45s}#book ul li a.tf-book:focus-visible .tf-book-3d,#book ul li a.tf-book:hover .tf-book-3d{transform:translateY(-9px) scale(1.06) rotateY(-24deg)}#book ul li a.tf-book:focus-visible::after,#book ul li a.tf-book:hover::after{opacity:.62;transform:scale(1.16)}@media (prefers-reduced-motion:reduce){#book ul li a.tf-book .tf-book-3d,#book ul li a.tf-book::after{transition:none}}#footer-copyright{font-size:13px;line-height:1.7}.article-content img{background:var(--tf-bg-soft,#f3f4f6)}.article-content img[width][height]{height:auto}.article-content img.tf-zoomable{cursor:zoom-in}html.tf-lb-locked,html.tf-lb-locked body{overflow:hidden}.tf-lb{position:fixed;top:0;right:0;bottom:0;left:0;z-index:9998;display:flex;flex-direction:column;opacity:0;visibility:hidden;background:rgba(10,12,16,.94);transition:opacity .2s ease,visibility .2s ease}.tf-lb.on{opacity:1;visibility:visible}.tf-lb-bar{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:12px 16px;flex:none}.tf-lb-counter{font-size:13px;font-variant-numeric:tabular-nums;color:rgba(255,255,255,.72)}.tf-lb-actions{display:flex;gap:8px}.tf-lb-btn{width:34px;height:34px;padding:0;border:0;border-radius:50%;font-size:17px;line-height:1;color:#fff;background:rgba(255,255,255,.12);cursor:pointer;transition:background .15s}.tf-lb-btn:focus-visible,.tf-lb-btn:hover{background:rgba(255,255,255,.26)}.tf-lb-view{position:relative;flex:1 1 auto;display:flex;align-items:center;justify-content:center;min-height:0;padding:0 56px}.tf-lb-img{max-width:100%;max-height:100%;opacity:0;cursor:zoom-in;user-select:none;-webkit-user-drag:none;transition:opacity .2s,transform .18s ease-out}.tf-lb-img.loaded{opacity:1}.tf-lb-img.zoomed{cursor:grab;transition:opacity .2s}.tf-lb-img.dragging{cursor:grabbing;transition:none}.tf-lb-nav{position:absolute;top:50%;width:44px;height:44px;margin-top:-22px;padding:0;display:flex;align-items:center;justify-content:center;border:0;border-radius:50%;background:rgba(255,255,255,.1);cursor:pointer;transition:background .15s}.tf-lb-nav::before{content:"";width:11px;height:11px;border-top:2px solid #fff;border-right:2px solid #fff}.tf-lb-prev{left:8px}.tf-lb-prev::before{transform:rotate(-135deg);margin-left:4px}.tf-lb-next{right:8px}.tf-lb-next::before{transform:rotate(45deg);margin-right:4px}.tf-lb-nav:focus-visible,.tf-lb-nav:hover{background:rgba(255,255,255,.24)}.tf-lb-caption{flex:none;margin:0;padding:0 24px 18px;font-size:13px;line-height:1.6;text-align:center;color:rgba(255,255,255,.68);display:none}.tf-lb-caption.on{display:block}@media (max-width:768px){.tf-lb-view{padding:0 8px}.tf-lb-nav{width:38px;height:38px;margin-top:-19px}.tf-lb-bar{padding:8px 10px}}.article-content figure.highlight,.article-content pre{position:relative}.tf-code-bar{position:absolute;top:7px;right:8px;display:flex;align-items:center;gap:8px;z-index:2}.tf-code-lang{font-size:11px;letter-spacing:.05em;text-transform:uppercase;color:rgba(140,150,165,.95);user-select:none}.tf-code-copy{padding:3px 10px;border:0;border-radius:5px;font-family:inherit;font-size:12px;line-height:1.7;color:#fff;background:rgba(102,112,128,.55);cursor:pointer;opacity:0;transition:opacity .15s,background .15s}.article-content:hover .tf-code-copy,.tf-code-copy:focus-visible{opacity:1}.tf-code-copy:hover{background:rgba(70,80,96,.9)}.tf-code-copy.done{background:rgba(40,132,94,.92)}@media (hover:none){.tf-code-copy{opacity:1}}.article-anchor{margin-left:8px;font-weight:400;color:var(--tf-link);text-decoration:none;opacity:0;transition:opacity .15s}.article-anchor::after{content:"#"}.article-anchor:focus-visible,.article-heading:hover .article-anchor{opacity:.45}.article-anchor:hover{opacity:1}.tf-toast{position:fixed;left:50%;bottom:42px;z-index:9999;padding:9px 18px;border-radius:20px;font-size:13px;color:#fff;background:rgba(24,30,40,.9);opacity:0;visibility:hidden;transform:translate(-50%,12px);transition:opacity .22s,transform .22s,visibility .22s}.tf-toast.on{opacity:1;visibility:visible;transform:translate(-50%,0)}.tf-breadcrumb{display:flex;flex-wrap:wrap;align-items:center;gap:7px;margin-bottom:14px;font-size:13px;color:var(--tf-gray)}.tf-breadcrumb a{color:var(--tf-gray);text-decoration:none}.tf-breadcrumb a:hover{color:var(--tf-link)}.tf-breadcrumb .tf-breadcrumb-sep{color:var(--tf-border-strong)}.tf-breadcrumb .tf-breadcrumb-cur{color:var(--tf-muted)}#tf-tags{margin-top:26px}.tf-tags-toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:14px;margin-bottom:18px}#tf-tags-search{width:100%;height:42px;margin:0;padding:0 36px 0 34px;border:1px solid var(--tf-border);border-radius:var(--tf-radius);font-family:inherit;font-size:14px;color:var(--tf-text);background:var(--tf-canvas);outline:0;transition:.15s;-webkit-appearance:none}#tf-tags-search:focus{border-color:var(--tf-link);box-shadow:0 0 0 3px rgba(14,131,205,.1)}.tf-tags-group{display:flex;align-items:flex-start;gap:12px;padding:14px 0;border-top:1px solid var(--tf-border)}.tf-tags-label{flex:none;width:42px;font-size:13px;line-height:26px;color:var(--tf-gray)}.tf-chip-list{display:flex;flex-wrap:wrap;gap:8px;margin:0;padding:0;list-style:none}.tf-chip{display:inline-flex;align-items:center;gap:6px;padding:3px 12px;border:1px solid var(--tf-border);border-radius:16px;font-family:inherit;font-size:13px;line-height:1.7;color:var(--tf-text);background:0 0;cursor:pointer;transition:.15s}.tf-chip em{font-style:normal;font-size:11px;color:var(--tf-gray)}.tf-chip:hover{border-color:var(--tf-link);color:var(--tf-link)}.tf-chip.on{color:#fff;background:var(--tf-link);border-color:var(--tf-link)}.tf-chip.on em{color:rgba(255,255,255,.8)}.tf-chip-mini{padding:1px 9px;font-size:12px}.tf-tag-posts{display:grid;gap:14px;margin-top:22px}.tf-tag-post{padding:18px 20px;border:1px solid var(--tf-border);border-radius:var(--tf-radius);background:var(--tf-canvas);transition:.15s}.tf-tag-post:hover{border-color:var(--tf-link);box-shadow:0 4px 16px rgba(15,23,32,.07)}.tf-tag-post-title{margin:0 0 8px;font-size:17px;font-weight:500;line-height:1.55}.tf-tag-post-title a{color:var(--tf-text);text-decoration:none}.tf-tag-post-title a:hover{color:var(--tf-link)}.tf-tag-post-meta{display:flex;flex-wrap:wrap;gap:14px;margin:0 0 9px;font-size:12px;color:var(--tf-gray)}.tf-tag-post-desc{margin:0 0 11px;font-size:14px;line-height:1.75;color:var(--tf-muted)}.tf-tag-post-chips{display:flex;flex-wrap:wrap;gap:6px}#tf-tags .tf-gallery-empty{display:none}#tf-tags .tf-gallery-empty a{color:var(--tf-link)}.tf-related{margin:34px 0 8px;padding:20px 22px;border:1px solid var(--tf-border);border-radius:var(--tf-radius);background:var(--tf-bg-soft)}.tf-related-title{margin:0 0 14px;font-size:15px;font-weight:500;color:var(--tf-muted)}.tf-related-list{margin:0;padding:0;list-style:none}.tf-related-list li{display:flex;align-items:baseline;justify-content:space-between;gap:16px;padding:9px 0;border-top:1px solid var(--tf-border)}.tf-related-list li:first-child{border-top:0;padding-top:0}.tf-related-list a{font-size:15px;line-height:1.6;color:var(--tf-text);text-decoration:none}.tf-related-list a:hover{color:var(--tf-link)}.tf-related-meta{flex:none;font-size:12px;color:var(--tf-gray);white-space:nowrap}.tf-comments-title{margin:0 0 16px;font-size:15px;font-weight:500;color:var(--tf-muted)}#comments{margin-top:34px}.tf-comments-fallback{margin:0;padding:16px 18px;border:1px dashed var(--tf-border-strong);border-radius:var(--tf-radius);font-size:13px;line-height:1.8;color:var(--tf-muted)}#footer-stats{display:flex;flex-wrap:wrap;gap:14px;margin-top:10px;font-size:12px;color:var(--tf-gray)}@media (max-width:600px){.tf-related-list li{flex-direction:column;gap:4px}}html[data-theme=dark]{color-scheme:dark;--tf-navy:#101820;--tf-text:#ccd4dc;--tf-muted:#98a4b0;--tf-gray:#71808f;--tf-border:#2a333d;--tf-border-strong:#3a4650;--tf-link:#4aa8e8;--tf-link-hover:#7ac4f7;--tf-bg-soft:#202932;--tf-shadow:0 10px 30px rgba(0, 0, 0, 0.55);--tf-shell:#101820;--tf-shell-deep:#0b1117;--tf-canvas:#1a212a;--tf-canvas-sunken:#161c23;--tf-inline-code:#232d37;--tf-inline-code-fg:#e8b06a;--tf-hit:#4a3f16;--tf-stripe:#1e2731;--tf-th:#232d37;--tf-quote-bg:#1e2731;--tf-quote-bar:#46535f;--tf-img-filter:brightness(0.88) contrast(0.97);--tf-scheme:dark}html[data-theme=dark] body{background:var(--tf-shell);color:var(--tf-text)}html[data-theme=dark] #content-wrap{background:var(--tf-canvas);border-top-color:var(--tf-shell-deep);border-bottom-color:var(--tf-shell-deep)}html[data-theme=dark] #footer,html[data-theme=dark] #mobile-nav{background:var(--tf-shell)}html[data-theme=dark] #article-toc-top,html[data-theme=dark] .archive-post-link,html[data-theme=dark] .article-content,html[data-theme=dark] .article-title,html[data-theme=dark] .sidebar-link{color:var(--tf-text)}html[data-theme=dark] .article-content a{color:var(--tf-link)}html[data-theme=dark] #article-toc-top:hover,html[data-theme=dark] .archive-post-link:hover,html[data-theme=dark] .article-content a:hover,html[data-theme=dark] .sidebar-link:hover{color:var(--tf-link-hover)}html[data-theme=dark] .sidebar-link.current,html[data-theme=dark] .sidebar-title{color:var(--tf-link)}html[data-theme=dark] .archive-post-date,html[data-theme=dark] .article-date,html[data-theme=dark] .article-footer{color:var(--tf-gray)}html[data-theme=dark] .archive-post,html[data-theme=dark] .article-footer{border-top-color:var(--tf-border)}html[data-theme=dark] .article-content blockquote{background:var(--tf-quote-bg);border-color:var(--tf-border);border-left-color:var(--tf-quote-bar)}html[data-theme=dark] .article-content table{border-color:var(--tf-border)}html[data-theme=dark] .article-content table th{background:var(--tf-th)}html[data-theme=dark] .article-content table tr:nth-child(2n){background:var(--tf-stripe)}html[data-theme=dark] code,html[data-theme=dark] pre{background:var(--tf-canvas-sunken);color:#c3cad3}html[data-theme=dark] .highlight{background:var(--tf-canvas-sunken);color:#c3cad3}html[data-theme=dark] .highlight figcaption{color:var(--tf-gray)}html[data-theme=dark] .article-content :not(pre)>code{background:var(--tf-inline-code);color:var(--tf-inline-code-fg)}html[data-theme=dark] pre .comment,html[data-theme=dark] pre .title{color:#8b95a1}html[data-theme=dark] pre .attribute,html[data-theme=dark] pre .css .class,html[data-theme=dark] pre .css .id,html[data-theme=dark] pre .css .pseudo,html[data-theme=dark] pre .html .doctype,html[data-theme=dark] pre .regexp,html[data-theme=dark] pre .ruby .constant,html[data-theme=dark] pre .tag,html[data-theme=dark] pre .variable,html[data-theme=dark] pre .xml .doctype,html[data-theme=dark] pre .xml .pi,html[data-theme=dark] pre .xml .tag .title{color:#ff7b72}html[data-theme=dark] pre .built_in,html[data-theme=dark] pre .constant,html[data-theme=dark] pre .literal,html[data-theme=dark] pre .number,html[data-theme=dark] pre .params,html[data-theme=dark] pre .preprocessor{color:#f5a35e}html[data-theme=dark] pre .class,html[data-theme=dark] pre .css .rules .attribute,html[data-theme=dark] pre .header,html[data-theme=dark] pre .inheritance,html[data-theme=dark] pre .ruby .class .title,html[data-theme=dark] pre .ruby .symbol,html[data-theme=dark] pre .string,html[data-theme=dark] pre .value,html[data-theme=dark] pre .xml .cdata{color:#9ccf6f}html[data-theme=dark] pre .css .hexcolor{color:#6fc9d0}html[data-theme=dark] pre .coffeescript .title,html[data-theme=dark] pre .function,html[data-theme=dark] pre .javascript .title,html[data-theme=dark] pre .perl .sub,html[data-theme=dark] pre .python .decorator,html[data-theme=dark] pre .python .title,html[data-theme=dark] pre .ruby .function .title,html[data-theme=dark] pre .ruby .title .keyword{color:#7fb3e8}html[data-theme=dark] pre .javascript .function,html[data-theme=dark] pre .keyword{color:#c792ea}html[data-theme=dark] .article-content img,html[data-theme=dark] .article-content video{filter:var(--tf-img-filter)}html[data-theme=dark] .article-content img:hover{filter:none}html[data-theme=dark] #intro-cmd-wrap{background:var(--tf-canvas-sunken);color:#c3cad3}html[data-theme=dark] #theme-link{color:var(--tf-border-strong);border-color:var(--tf-border-strong)}html[data-theme=dark] #theme-link:hover{background:var(--tf-border-strong);color:var(--tf-shell)}html[data-theme=dark] .article-content iframe{filter:brightness(.9) contrast(.98);border-radius:6px}html.tf-theme-anim #content-wrap,html.tf-theme-anim #footer,html.tf-theme-anim .article-content,html.tf-theme-anim .article-content a,html.tf-theme-anim .highlight,html.tf-theme-anim .tf-block,html.tf-theme-anim .tf-nav-sub-inner,html.tf-theme-anim .tf-related,html.tf-theme-anim .tf-search-panel,html.tf-theme-anim .tf-tag-post,html.tf-theme-anim body,html.tf-theme-anim code,html.tf-theme-anim pre{transition:background-color .3s ease,color .3s ease,border-color .3s ease}@media (prefers-reduced-motion:reduce){html.tf-theme-anim *{transition:none!important}}