pre { line-height: 125%; }
td.linenos .normal { color: #666666; background-color: transparent; padding-left: 5px; padding-right: 5px; }
span.linenos { color: #666666; background-color: transparent; padding-left: 5px; padding-right: 5px; }
td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
.highlight .hll { background-color: #ffffcc }
.highlight { background: #f0f0f0; }
.highlight .c { color: #60A0B0; font-style: italic } /* Comment */
.highlight .err { border: 1px solid #F00 } /* Error */
.highlight .k { color: #007020; font-weight: bold } /* Keyword */
.highlight .o { color: #666 } /* Operator */
.highlight .ch { color: #60A0B0; font-style: italic } /* Comment.Hashbang */
.highlight .cm { color: #60A0B0; font-style: italic } /* Comment.Multiline */
.highlight .cp { color: #007020 } /* Comment.Preproc */
.highlight .cpf { color: #60A0B0; font-style: italic } /* Comment.PreprocFile */
.highlight .c1 { color: #60A0B0; font-style: italic } /* Comment.Single */
.highlight .cs { color: #60A0B0; background-color: #FFF0F0 } /* Comment.Special */
.highlight .gd { color: #A00000 } /* Generic.Deleted */
.highlight .ge { font-style: italic } /* Generic.Emph */
.highlight .ges { font-weight: bold; font-style: italic } /* Generic.EmphStrong */
.highlight .gr { color: #F00 } /* Generic.Error */
.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
.highlight .gi { color: #00A000 } /* Generic.Inserted */
.highlight .go { color: #888 } /* Generic.Output */
.highlight .gp { color: #C65D09; font-weight: bold } /* Generic.Prompt */
.highlight .gs { font-weight: bold } /* Generic.Strong */
.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.highlight .gt { color: #04D } /* Generic.Traceback */
.highlight .kc { color: #007020; font-weight: bold } /* Keyword.Constant */
.highlight .kd { color: #007020; font-weight: bold } /* Keyword.Declaration */
.highlight .kn { color: #007020; font-weight: bold } /* Keyword.Namespace */
.highlight .kp { color: #007020 } /* Keyword.Pseudo */
.highlight .kr { color: #007020; font-weight: bold } /* Keyword.Reserved */
.highlight .kt { color: #902000 } /* Keyword.Type */
.highlight .m { color: #40A070 } /* Literal.Number */
.highlight .s { color: #4070A0 } /* Literal.String */
.highlight .na { color: #4070A0 } /* Name.Attribute */
.highlight .nb { color: #007020 } /* Name.Builtin */
.highlight .nc { color: #0E84B5; font-weight: bold } /* Name.Class */
.highlight .no { color: #60ADD5 } /* Name.Constant */
.highlight .nd { color: #555; font-weight: bold } /* Name.Decorator */
.highlight .ni { color: #D55537; font-weight: bold } /* Name.Entity */
.highlight .ne { color: #007020 } /* Name.Exception */
.highlight .nf { color: #06287E } /* Name.Function */
.highlight .nl { color: #002070; font-weight: bold } /* Name.Label */
.highlight .nn { color: #0E84B5; font-weight: bold } /* Name.Namespace */
.highlight .nt { color: #062873; font-weight: bold } /* Name.Tag */
.highlight .nv { color: #BB60D5 } /* Name.Variable */
.highlight .ow { color: #007020; font-weight: bold } /* Operator.Word */
.highlight .w { color: #BBB } /* Text.Whitespace */
.highlight .mb { color: #40A070 } /* Literal.Number.Bin */
.highlight .mf { color: #40A070 } /* Literal.Number.Float */
.highlight .mh { color: #40A070 } /* Literal.Number.Hex */
.highlight .mi { color: #40A070 } /* Literal.Number.Integer */
.highlight .mo { color: #40A070 } /* Literal.Number.Oct */
.highlight .sa { color: #4070A0 } /* Literal.String.Affix */
.highlight .sb { color: #4070A0 } /* Literal.String.Backtick */
.highlight .sc { color: #4070A0 } /* Literal.String.Char */
.highlight .dl { color: #4070A0 } /* Literal.String.Delimiter */
.highlight .sd { color: #4070A0; font-style: italic } /* Literal.String.Doc */
.highlight .s2 { color: #4070A0 } /* Literal.String.Double */
.highlight .se { color: #4070A0; font-weight: bold } /* Literal.String.Escape */
.highlight .sh { color: #4070A0 } /* Literal.String.Heredoc */
.highlight .si { color: #70A0D0; font-style: italic } /* Literal.String.Interpol */
.highlight .sx { color: #C65D09 } /* Literal.String.Other */
.highlight .sr { color: #235388 } /* Literal.String.Regex */
.highlight .s1 { color: #4070A0 } /* Literal.String.Single */
.highlight .ss { color: #517918 } /* Literal.String.Symbol */
.highlight .bp { color: #007020 } /* Name.Builtin.Pseudo */
.highlight .fm { color: #06287E } /* Name.Function.Magic */
.highlight .vc { color: #BB60D5 } /* Name.Variable.Class */
.highlight .vg { color: #BB60D5 } /* Name.Variable.Global */
.highlight .vi { color: #BB60D5 } /* Name.Variable.Instance */
.highlight .vm { color: #BB60D5 } /* Name.Variable.Magic */
.highlight .il { color: #40A070 } /* Literal.Number.Integer.Long */

:root{color-scheme:light;--paper:#f8f7f3;--surface:#fdfcf9;--ink:#2c2d2b;--muted:#73756e;--line:#dedfd7;--accent:#894b40;--wash:#edede6;--serif:"Iowan Old Style","Songti SC","STSong","Noto Serif CJK SC","SimSun",serif;--sans:"PingFang SC","Hiragino Sans GB","Microsoft YaHei",sans-serif}
*{box-sizing:border-box}html{scroll-padding-top:104px}body{margin:0;background:var(--paper);color:var(--ink);font:15px/1.7 var(--sans);-webkit-font-smoothing:antialiased}a{color:inherit;text-decoration:none}button,input{font:inherit;color:inherit}button{cursor:pointer}a,button,input{ -webkit-tap-highlight-color:transparent}a:focus-visible,button:focus-visible,summary:focus-visible{outline:2px solid var(--accent);outline-offset:5px}button{border:0;background:transparent;padding:8px 0}button:disabled{cursor:wait}input{border:0;border-radius:0;min-width:0;background:transparent}input:focus{outline:0}::selection{background:#e8d9cf;color:#302b27}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
.topbar{height:80px;padding:0 42px;display:flex;align-items:center;gap:38px;border-bottom:1px solid var(--line);background:var(--paper);position:sticky;top:0;z-index:10}.brand{display:inline-flex;align-items:center;gap:14px;font:600 24px/1 var(--serif);letter-spacing:.08em;white-space:nowrap}.brand-mark{display:block;width:22px;height:27px;position:relative;border:1px solid currentColor;border-radius:1px;color:var(--accent);flex-shrink:0}.brand-mark:before{content:"";position:absolute;left:4px;top:0;bottom:0;border-left:1px solid currentColor}.brand-mark:after{content:"";position:absolute;width:7px;right:3px;top:6px;border-top:1px solid currentColor}.search{display:flex;align-items:center;width:330px;max-width:40vw;margin-left:auto;border-bottom:1px solid #aaaDA3;transition:border-color .18s}.search:focus-within{border-color:var(--accent);box-shadow:0 1px 0 var(--accent)}.search input{width:100%;padding:9px 0;font-size:13px;height:40px}.search input::placeholder{color:var(--muted)}.search button{flex:0 0 auto;white-space:nowrap;font-size:12px;letter-spacing:.08em;padding:9px 0 9px 20px;color:var(--muted)}.search button:hover{color:var(--accent)}.logout .quiet{font-size:12px;color:var(--muted);white-space:nowrap;min-height:40px}.quiet:hover{color:var(--accent)}
.layout{display:grid;grid-template-columns:224px minmax(0,1fr);max-width:1440px;margin:0 auto;min-height:calc(100dvh - 80px)}.layout aside{padding:39px 28px 48px 36px;position:sticky;top:80px;height:calc(100dvh - 80px);overflow:auto;border-right:1px solid var(--line);scrollbar-width:thin;scrollbar-color:#cdcec5 transparent}.layout main{padding:54px clamp(36px,5.5vw,88px) 110px;min-width:0;max-width:1120px;width:100%;background:var(--surface)}nav a{display:block;font-size:13px;padding:6px 0;color:#60645d;position:relative;transition:color .15s}nav a:hover{color:var(--accent)}nav a[aria-current]{color:var(--accent);font-weight:500}nav a[aria-current]:before{content:"";position:absolute;left:-13px;top:50%;height:4px;width:4px;margin-top:-2px;background:var(--accent);border-radius:50%}.nav-all{color:var(--ink);font-weight:500;margin:0 0 35px}.nav-label{display:block;font-size:11px;color:var(--muted);letter-spacing:.12em;margin-bottom:12px}.tag-navigation{border-top:1px solid var(--line);margin-top:28px;padding-top:13px}.tag-navigation summary{font-size:12px;color:var(--muted);list-style:none;cursor:pointer;display:flex;align-items:center;justify-content:space-between;padding:8px 0}.tag-navigation summary::-webkit-details-marker,.mobile-directory summary::-webkit-details-marker{display:none}.disclosure{display:block;width:6px;height:6px;border-bottom:1px solid currentColor;border-right:1px solid currentColor;transform:rotate(45deg);transition:transform .18s;margin-right:3px}details[open]>summary>.disclosure{transform:rotate(225deg)}.tags{padding-top:8px;display:flex;flex-wrap:wrap;gap:3px 12px}.tags a{font-size:11px;padding:2px 0;line-height:1.9}.tags a[aria-current]:before{display:none}.mobile-directory{display:none}
.page-heading{display:flex;gap:20px;align-items:baseline;justify-content:space-between;margin-bottom:15px;padding-bottom:31px;border-bottom:1px solid #888d82}.page-heading h1{font:500 clamp(30px,2.8vw,42px)/1.45 var(--serif);letter-spacing:.035em;margin:0;overflow-wrap:anywhere}.article-count{font:12px/1.5 var(--sans);font-variant-numeric:tabular-nums;color:var(--muted);white-space:nowrap}.article-row{display:flex;align-items:center;gap:22px;padding:24px 0;border-bottom:1px solid var(--line);min-height:94px}.row-content{min-width:0;flex:1}.article-row h2{font:500 21px/1.65 var(--serif);margin:0;letter-spacing:.015em;transition:color .18s}.article-row p{font-size:13px;line-height:1.85;color:var(--muted);margin:9px 0 0;overflow-wrap:anywhere;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.article-row .category{font-size:11px;white-space:nowrap;color:var(--muted)}.arrow{font-size:19px;font-family:var(--serif);color:#a4a79e;transition:transform .18s,color .18s}.article-row:hover h2{color:var(--accent)}.article-row:hover .arrow{color:var(--accent);transform:translateX(3px)}.empty{padding:35px 0;color:var(--muted);font-size:14px}
.article-meta{margin:0 auto 26px;max-width:730px;font-size:12px;color:var(--accent);letter-spacing:.035em}.article-meta a{border-bottom:1px solid transparent;padding-bottom:3px}.article-meta a:hover{border-color:var(--accent)}.prose{max-width:730px;margin:0 auto;font:18px/2 var(--serif);overflow-wrap:anywhere}.prose>p{margin:1.3em 0;text-align:justify}.prose h1{font:600 38px/1.5 var(--serif);letter-spacing:.025em;margin:0 0 40px;overflow-wrap:anywhere}.prose h2{font:600 27px/1.6 var(--serif);margin:2.2em 0 .9em;padding:0;border:0}.prose h3{font:600 22px/1.65 var(--serif);margin:1.8em 0 .7em}.prose h4{font-size:19px;margin:1.5em 0 .5em}.prose hr{border:0;border-top:1px solid var(--line);margin:36px 0}.prose li{margin:.4em 0}.prose ul,.prose ol{padding-left:1.55em}.prose li::marker{color:#858a7d}.prose a{color:var(--accent);text-decoration:underline;text-decoration-color:#bba89d;text-underline-offset:4px;text-decoration-thickness:1px}.prose a:hover{text-decoration-color:var(--accent)}.prose [id]{scroll-margin-top:110px}.prose img{display:block;max-width:100%;height:auto;margin:28px auto;border-radius:2px}.prose blockquote{border:0;border-left:2px solid #b6b9ac;margin:30px 0;padding:1px 24px;color:#60665c;font-size:.96em;background:transparent}.prose blockquote>p{margin:.65em 0}.prose .callout{border-left:2px solid #a6ad98;border-radius:0;background:#f1f2eb;padding:12px 24px;margin:32px 0;font:15px/1.9 var(--sans)}.prose .callout>p{margin:.6em 0}.prose .unpublished{color:#85877f;text-decoration:underline dotted;text-underline-offset:4px;cursor:default}.prose table{display:block;max-width:100%;overflow-x:auto;border-collapse:collapse;font:13px/1.85 var(--sans);margin:28px 0;scrollbar-width:thin}.prose th,.prose td{padding:13px 16px;text-align:left;border:0;border-bottom:1px solid var(--line);min-width:80px;vertical-align:top}.prose th{font-weight:500;background:#eeefe7;border-top:1px solid #9fa594;color:#3d4638}.prose code{font: .82em/1.7 "SFMono-Regular",Consolas,"Liberation Mono",monospace;background:#edeee7;padding:3px 5px;border-radius:2px}.prose pre{background:#f1f1eb;border:1px solid #e4e5dc;border-radius:2px;padding:22px 24px;font:13px/1.8 "SFMono-Regular",Consolas,"Liberation Mono",monospace;overflow:auto;white-space:pre;margin:28px 0;scrollbar-width:thin}.prose pre code{background:transparent;padding:0;font:inherit}.prose .highlight{background:transparent}.prose .highlight pre{line-height:1.8}.prose .highlight .err{border:0}.prose .pdf-frame{width:100%;height:70vh;border:1px solid var(--line);margin:20px 0}.prose .footnotes{font:13px/1.9 var(--sans);color:var(--muted);margin-top:45px}.prose input[type=checkbox]{accent-color:var(--accent);pointer-events:none}.backlinks{max-width:730px;margin:65px auto 0;border-top:1px solid #a3a99b;padding-top:25px}.backlinks h2{font-size:12px;color:var(--muted);font-weight:400;letter-spacing:.08em;margin:0 0 15px}.backlinks a{display:flex;gap:20px;justify-content:space-between;align-items:baseline;font:16px/1.7 var(--serif);padding:10px 0;border-bottom:1px solid var(--line)}.backlinks a:hover{color:var(--accent)}.backlinks a span{color:var(--muted);font-size:14px}
.login-page{min-height:100dvh;display:grid;place-items:center;padding:80px 36px;background:var(--paper)}.login-shell{width:min(100%,850px);display:grid;grid-template-columns:1fr 1fr;gap:85px;align-items:center;margin-top:-5vh}.login-identity{padding:40px 60px 45px 0;border-right:1px solid #c8cbbf;min-height:290px;display:flex;flex-direction:column;justify-content:center}.login-identity .brand-mark{width:32px;height:40px;margin-bottom:26px}.login-identity .brand-mark:before{left:6px}.login-identity .brand-mark:after{right:5px;top:9px;width:11px}.login-identity h1{font:500 54px/1.4 var(--serif);letter-spacing:.12em;margin:0;white-space:nowrap}.login-form{width:100%;max-width:320px}.field{margin-bottom:31px}.field label{display:block;font-size:12px;color:#686c62;letter-spacing:.07em;margin-bottom:4px}.field input{width:100%;height:46px;padding:7px 0;border-bottom:1px solid #aaaF9F;font-size:16px;transition:border-color .15s,box-shadow .15s}.field input:focus{border-color:var(--accent);box-shadow:0 1px 0 var(--accent)}.primary{width:100%;height:47px;margin-top:8px;padding:0 18px;background:#373f34;color:#f8f8f1;display:flex;align-items:center;justify-content:space-between;font-size:13px;letter-spacing:.15em;border-radius:2px;transition:background .18s}.primary:hover{background:#4a5544}.primary span{font:19px var(--serif);letter-spacing:0;transition:transform .18s}.primary:hover span{transform:translateX(3px)}.error{font-size:12px;color:#8f4336;line-height:1.8;margin:-8px 0 20px}
@media(min-width:1440px){.layout{border-left:1px solid var(--line);border-right:1px solid var(--line)}}
@media(max-width:1000px){.topbar{padding:0 28px;gap:28px}.layout{grid-template-columns:195px minmax(0,1fr)}.layout aside{padding-left:26px;padding-right:22px}.layout main{padding:43px 36px 90px}.article-row{gap:14px}.article-row h2{font-size:20px}.article-row .category{font-size:10px}.prose h1{font-size:34px}.login-shell{gap:50px;max-width:740px}.login-identity{padding-right:40px}}
@media(max-width:700px){html{scroll-padding-top:155px}.topbar{height:auto;min-height:112px;padding:20px 23px 15px;gap:16px 22px;flex-wrap:wrap}.brand{font-size:23px;gap:11px}.brand-mark{width:18px;height:23px}.logout{margin-left:auto}.logout .quiet{min-height:26px;padding:0}.topbar .search{order:3;margin:0;max-width:none;width:100%}.search input{height:35px;padding:4px 0;font-size:13px}.search button{padding:4px 0 4px 16px;min-height:35px}.layout{display:block;min-height:calc(100dvh - 156px)}.layout aside{display:none}.layout main{padding:34px 23px 75px;min-height:calc(100dvh - 156px)}.mobile-directory{display:block;background:var(--paper);border-bottom:1px solid var(--line)}.mobile-directory>summary{list-style:none;padding:13px 24px;font-size:12px;color:#62685b;display:flex;justify-content:space-between;align-items:center;cursor:pointer;min-height:45px}.mobile-directory-body{padding:10px 24px 24px;border-top:1px solid var(--line);max-height:60dvh;overflow-y:auto}.mobile-directory-body .nav-all{margin-bottom:20px}.category-links{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:3px 14px}.mobile-directory-body .nav-label{margin:0 0 10px}.mobile-directory-body nav a{font-size:12px;padding:6px 0}.mobile-directory-body nav a[aria-current]:before{left:-9px;width:3px;height:3px}.mobile-directory-body .tag-navigation{margin-top:20px}.mobile-directory-body .tags{gap:4px 16px}.page-heading{padding-bottom:23px;margin-bottom:5px;gap:14px}.page-heading h1{font-size:31px}.article-count{font-size:11px}.article-row{padding:21px 0;min-height:88px;gap:12px;flex-wrap:wrap;position:relative;padding-right:22px}.row-content{flex:1 1 100%}.article-row h2{font-size:20px;line-height:1.65}.article-row .category{font-size:10px;line-height:1;margin-top:-5px}.article-row .arrow{position:absolute;right:0;top:50%;margin-top:-15px;font-size:18px}.article-row p{font-size:12px;margin-top:7px}.article-meta{font-size:11px;margin-bottom:22px}.prose{font-size:17px;line-height:1.95}.prose h1{font-size:30px;line-height:1.5;margin-bottom:30px}.prose h2{font-size:24px;margin-top:1.9em}.prose h3{font-size:20px}.prose blockquote{padding-left:18px;padding-right:9px}.prose .callout{padding:10px 17px;font-size:14px}.prose pre{font-size:12px;padding:18px 16px}.prose table{font-size:12px}.prose th,.prose td{padding:10px 12px}.prose [id]{scroll-margin-top:145px}.backlinks{margin-top:45px}.backlinks a{font-size:15px}.login-page{padding:50px 28px}.login-shell{display:block;max-width:340px;margin-top:-5vh}.login-identity{min-height:auto;display:block;border-right:0;border-bottom:1px solid #c8cbbf;padding:0 0 32px;margin-bottom:36px}.login-identity .brand-mark{width:24px;height:30px;margin-bottom:20px}.login-identity h1{font-size:39px;letter-spacing:.1em}.login-form{max-width:none}.field{margin-bottom:27px}.primary{height:48px}}
@media(prefers-reduced-motion:reduce){*,*:before,*:after{scroll-behavior:auto!important;transition:none!important}}
.layout main{max-width:none}
/* Hierarchical catalogue */
.layout{grid-template-columns:270px minmax(0,1fr)}.layout aside{padding:32px 22px 45px 30px}.nav-all{margin-bottom:24px}.tree-node>summary{display:flex;gap:9px;align-items:center;list-style:none;cursor:pointer;min-height:34px}.tree-node>summary::-webkit-details-marker{display:none}.tree-node>summary:before{content:"";display:block;width:5px;height:5px;border-right:1px solid #898f80;border-bottom:1px solid #898f80;transform:rotate(-45deg);flex:0 0 5px;transition:transform .15s}.tree-node[open]>summary:before{transform:rotate(45deg)}.tree-node .tree-folder{min-width:0;flex:1;padding:7px 0;line-height:1.6;font-size:12px;overflow-wrap:anywhere}.tree-children{margin-left:3px;padding-left:13px;border-left:1px solid #e0e3d8}.tree-page{font-size:11px;line-height:1.8;padding:6px 2px;color:#787d70;overflow-wrap:anywhere}.tree-index{color:#6c755f}.tree nav a[aria-current]:before,.tree a[aria-current]:before{display:none}.tree a[aria-current]{color:var(--accent);font-weight:600}.root-page{margin-top:15px}.all-pages{border-top:1px solid var(--line);margin-top:23px;padding-top:17px}.breadcrumbs{display:flex;flex-wrap:wrap;align-items:baseline;gap:5px 10px;font:11px/1.9 var(--sans);color:var(--muted);margin:0 0 25px;padding:0;max-width:none}.breadcrumbs a{display:inline;padding:0;font:inherit;color:inherit}.breadcrumbs a:hover{color:var(--accent)}.breadcrumbs>span[aria-current]{color:#4d5546;overflow-wrap:anywhere}.breadcrumbs a[aria-current]:before{display:none}.prose+.backlinks{margin-top:60px}.folder-indexes{display:flex;flex-wrap:wrap;gap:8px 22px;padding:17px 0;border-bottom:1px solid var(--line);font-size:12px;color:var(--accent)}.folder-indexes a{display:flex;gap:12px;align-items:center}.folder-indexes a:hover{text-decoration:underline;text-underline-offset:4px}.folder-row{display:flex;align-items:center;gap:17px;padding:22px 0;border-bottom:1px solid var(--line)}.folder-row h2{flex:1;min-width:0;margin:0;font:500 22px/1.65 var(--serif);overflow-wrap:anywhere}.folder-symbol{height:14px;width:18px;border:1px solid #969d89;border-radius:1px;position:relative;flex-shrink:0}.folder-symbol:before{content:"";position:absolute;left:-1px;top:-5px;width:8px;height:4px;border:1px solid #969d89;border-bottom:0;border-radius:1px 1px 0 0;background:var(--surface)}.folder-row:hover h2{color:var(--accent)}.folder-row:hover .arrow{color:var(--accent);transform:translateX(3px)}.result-path{display:block;margin-top:8px;font:11px/1.7 var(--sans);color:var(--muted);overflow-wrap:anywhere}.folder-list+.article-list .article-row:first-child{margin-top:15px}.folder-list+.article-list:empty{display:none}.breadcrumbs~.prose{margin-left:0;margin-right:auto}
@media(max-width:1000px) and (min-width:701px){.layout{grid-template-columns:235px minmax(0,1fr)}.layout aside{padding-left:24px;padding-right:16px}}
@media(max-width:700px){.layout{display:block}.mobile-directory-body .tree-node .tree-folder{font-size:13px;padding:8px 0}.mobile-directory-body .tree-page{font-size:12px;padding:7px 2px}.mobile-directory-body{max-height:65dvh}.mobile-directory-body .tree-children{padding-left:15px;margin-left:3px}.folder-row{padding:20px 0;gap:14px}.folder-row h2{font-size:21px}.breadcrumbs{font-size:10px;gap:4px 8px;margin-bottom:23px}.folder-indexes{font-size:11px}.result-path{font-size:10px}.mobile-directory-body nav .breadcrumbs{display:none}}

@media(max-width:700px){.mobile-directory-body .nav-all{display:none}}
