:root{--paper:#f3eee4;--paper-deep:#e8dfd1;--white:#fffdf8;--ink:#171713;--muted:#6f6b63;--line:#ccc2b4;--clay:#a85c3c;--sage:#66796b;--max:1240px;--serif:Georgia, "Times New Roman", "Songti SC", "SimSun", "Noto Serif CJK SC", serif;--sans:Inter, ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Noto Sans CJK SC", sans-serif;--mono:"SFMono-Regular", Consolas, "Liberation Mono", monospace;--ease:cubic-bezier(.165, .84, .44, 1)}*{box-sizing:border-box}html{background:var(--paper);color:var(--ink);scroll-behavior:smooth}body{background:radial-gradient(circle at 83% 5%, #b85b3d17, transparent 24rem), var(--paper);min-width:320px;font-family:var(--sans);text-rendering:optimizelegibility;margin:0;line-height:1.55}html[lang=zh-CN] body{line-height:1.7}h1,h2,h3,h4{font-family:var(--serif);color:var(--ink)}a{color:inherit;text-underline-offset:.18em;text-decoration-thickness:1px}a:hover{color:var(--clay)}img,svg{max-width:100%;display:block}:focus-visible{outline:2px solid var(--clay);outline-offset:4px}::selection{background:#a85c3c38}mark{color:inherit;background:#f5e0a8;border-radius:2px;padding:0 1px}.site-header{z-index:20;backdrop-filter:blur(16px);background:#f3eee4e6;border-bottom:1px solid #ccc2b4c7;position:sticky;top:0}.nav-shell,.page-shell,.footer-shell{width:min(calc(100% - 48px), var(--max));margin-inline:auto}.nav-shell{justify-content:space-between;align-items:center;gap:28px;min-height:74px;display:flex}.wordmark{font-family:var(--serif);letter-spacing:-.03em;color:var(--ink);font-size:22px;font-weight:700;line-height:1;text-decoration:none}.wordmark span{color:var(--clay)}.primary-nav{letter-spacing:.09em;text-transform:uppercase;align-items:center;gap:clamp(16px,2.3vw,34px);font-size:12px;font-weight:700;display:flex}.primary-nav a{color:var(--muted);text-decoration:none;position:relative}.primary-nav a:hover{color:var(--clay)}.primary-nav a[aria-current=page]{color:var(--ink)}.primary-nav a[aria-current=page]:after{background:var(--clay);content:"";height:2px;position:absolute;bottom:-8px;left:0;right:0}.page-shell{min-height:70vh;padding:0 0 40px}.filter-row{align-items:center;gap:14px;max-width:940px;margin:0 auto;padding:clamp(32px,6vh,56px) 0 18px;display:flex}.search-wrap{flex:1;min-width:0;position:relative}.search-wrap input{width:100%;font:400 15px var(--sans);color:var(--ink);background:var(--white);border:1px solid var(--line);appearance:none;transition:border-color .18s var(--ease), box-shadow .18s var(--ease);border-radius:999px;padding:13px 64px 13px 22px;box-shadow:0 1px #1717130a}.search-wrap input::-webkit-search-cancel-button{appearance:none}.search-wrap input::-webkit-search-decoration{appearance:none}.search-wrap input::-webkit-search-results-button{appearance:none}.search-wrap input::-webkit-search-results-decoration{appearance:none}.search-wrap input::placeholder{color:var(--muted);opacity:.7}.search-wrap input:focus{border-color:var(--clay);outline:none;box-shadow:0 0 0 3px #a85c3c1f}.search-wrap .filter-hint{color:var(--muted);border:1px solid var(--line);pointer-events:none;border-radius:5px;padding:1px 6px;font-size:11px;position:absolute;top:50%;right:16px;transform:translateY(-50%)}.filter-row .filter-count{font:700 10px/1 var(--mono);color:var(--muted);letter-spacing:.1em;white-space:nowrap}.cluster{max-width:940px;margin:0 0 48px}.cluster-head{border-bottom:1px solid var(--ink);align-items:baseline;gap:12px;padding:12px 4px;display:flex}.cluster-head h2{letter-spacing:-.02em;margin:0;font-size:22px;font-weight:500}.cluster-head .count{font:700 10px/1 var(--mono);color:var(--muted);letter-spacing:.14em}.krow{border-bottom:1px solid var(--line);transition:background .18s var(--ease), transform .18s var(--ease);grid-template-columns:56px minmax(0,1fr) auto;align-items:baseline;gap:20px;padding:20px 6px;text-decoration:none;display:grid}.krow:hover{background:var(--white);transform:translate(4px)}.krow .idx{font:700 11px/1 var(--mono);color:var(--clay);letter-spacing:.12em}.krow .ktitle{letter-spacing:-.02em;margin:0 0 5px;font-size:21px;font-weight:500;line-height:1.25}.krow:hover .ktitle{color:var(--clay)}.krow .ksum{color:var(--muted);margin:0;font-size:14px;line-height:1.65}.krow .ktags{flex-wrap:wrap;justify-content:flex-end;gap:6px;padding-top:4px;display:flex}.krow .ktags span{border:1px solid var(--line);color:var(--muted);letter-spacing:.08em;text-transform:uppercase;white-space:nowrap;border-radius:999px;padding:4px 9px;font-size:9px;font-weight:700}.search-empty{color:var(--muted);padding:40px 0;font-size:14px}.shelf{max-width:940px;margin-top:56px}.shelf-head{border-bottom:1px solid var(--ink);align-items:baseline;gap:12px;margin-bottom:4px;padding-bottom:12px;display:flex}.shelf-head h2{letter-spacing:-.02em;margin:0;font-size:22px;font-weight:500}.shelf-head .count{font:700 10px/1 var(--mono);color:var(--muted);letter-spacing:.14em}.bookrow{border-bottom:1px solid var(--line);transition:background .18s var(--ease), transform .18s var(--ease);grid-template-columns:64px minmax(0,1fr) auto;align-items:baseline;gap:20px;padding:15px 6px;text-decoration:none;display:grid}a.bookrow:hover{background:var(--white);transform:translate(4px)}.bookrow .bstatus{letter-spacing:.12em;text-transform:uppercase;white-space:nowrap;font-size:9px;font-weight:800}.bookrow .bstatus--reading{color:var(--sage)}.bookrow .bstatus--done{color:var(--muted)}.bookrow .bstatus--to-read{color:var(--clay)}.bookrow .btitle{font-family:var(--serif);letter-spacing:-.01em;font-size:17px;font-weight:500}.bookrow:hover .btitle{color:var(--clay)}.bookrow .bdetail{color:var(--muted);margin:3px 0 0;font-size:13px;line-height:1.6}.bookrow .bnote{color:var(--muted);white-space:nowrap;font-size:11px;font-style:italic}.note{max-width:700px;margin:0 auto}.back-link{letter-spacing:.1em;text-transform:uppercase;color:var(--muted);margin:30px 0 8px;font-size:11px;font-weight:800;text-decoration:none;display:inline-block}.back-link:hover{color:var(--clay)}.note-head{padding:22px 0 10px}.note-head .cat{color:var(--clay);font:700 10px/1 var(--mono);letter-spacing:.14em;text-transform:uppercase;display:inline-block}.note-head h1{letter-spacing:-.05em;max-width:16ch;margin:16px 0 20px;font-size:clamp(34px,5vw,52px);font-weight:500;line-height:1.04}.note-head .opening{max-width:60ch;color:var(--ink);font-family:var(--serif);letter-spacing:.005em;margin:0;font-size:clamp(18px,2.2vw,22px);line-height:1.7}.note-head .meta-line{color:var(--muted);letter-spacing:.02em;margin:18px 0 0;font-size:12px}.note-block{margin-bottom:12px}.note-block h2{border-left:3px solid var(--clay);letter-spacing:-.01em;margin:44px 0 16px;padding-left:14px;font-size:21px;font-weight:500;line-height:1.3}.note-block .section-body>p{margin:0 0 14px}.note-block ul{margin:0 0 14px;padding-left:20px}.note-block li{margin-bottom:6px}.note-block li::marker{color:var(--clay)}.inline-code{font-family:var(--mono);background:var(--paper-deep);border:1px solid var(--line);color:var(--ink);white-space:nowrap;border-radius:3px;padding:0 4px;font-size:.88em}pre.codeblock{background:var(--paper-deep);border:1px solid var(--line);border-left:3px solid var(--clay);font-family:var(--mono);white-space:pre;margin:16px 0;padding:16px 16px 16px 0;font-size:13px;line-height:1.65;position:relative;overflow-x:auto}pre.codeblock code{font-family:inherit}pre.codeblock[data-lang]:after{content:attr(data-lang);font-family:var(--sans);letter-spacing:.1em;text-transform:uppercase;color:var(--muted);font-size:9px;font-weight:800;position:absolute;top:8px;right:12px}pre.codeblock .ln{color:#6f6b6373;user-select:none;text-align:right;width:2.4ch;margin-right:14px;display:inline-block}.example,.nextstep{background:var(--paper-deep);border:1px solid var(--line);margin:20px 0;padding:18px 20px}.example{border-left:3px solid var(--clay)}.nextstep{border-left:3px solid var(--sage)}.example p,.nextstep p{margin:0;line-height:1.7}.example p+p,.nextstep p+p{margin-top:10px}.example pre.codeblock,.nextstep pre.codeblock{background:var(--white)}.subtopics{border-top:1px solid var(--line)}.subtopic{border-bottom:1px solid var(--line)}.subtopic summary{cursor:pointer;transition:background .18s var(--ease);align-items:baseline;gap:10px;padding:13px 4px;list-style:none;display:flex}.subtopic summary::-webkit-details-marker{display:none}.subtopic summary:hover{background:var(--white)}.subtopic summary:before{content:"+";color:var(--clay);font-family:var(--mono);flex:none;font-weight:700}.subtopic[open] summary:before{content:"–"}.subtopic strong{font-family:var(--serif);letter-spacing:-.01em;font-size:16px;font-weight:500}.subtopic .snote{color:var(--muted);font-size:13px}.subtopic .sbody{color:var(--muted);margin:0;padding:2px 0 14px 26px;font-size:14px;line-height:1.7}.subtopic .sbody p{margin:0}.subtopic .sbody p+p{margin-top:8px}.subtopic pre.codeblock{margin:10px 0 0}.angles{background:var(--line);border:1px solid var(--line);grid-template-columns:repeat(auto-fill,minmax(270px,1fr));gap:1px;display:grid}.angle{background:var(--paper);padding:20px 20px 22px}.angle h3{letter-spacing:-.01em;margin:0 0 8px;font-size:17px;font-weight:500}.angle p{color:var(--muted);margin:0;font-size:13.5px;line-height:1.7}.booklist{border-top:1px solid var(--line)}.book{border-bottom:1px solid var(--line);grid-template-columns:auto 1fr;gap:6px 14px;padding:14px 4px;display:grid}.book strong{font-family:var(--serif);letter-spacing:-.01em;font-size:16px;font-weight:500}.book .reading{color:var(--sage);border:1px solid var(--sage);border-radius:999px;align-self:center;padding:0 8px;font-size:10px;font-weight:800}.book p{color:var(--muted);grid-column:1/-1;margin:0;font-size:13.5px;line-height:1.65}.links{border-top:1px solid var(--line)}.link-item{border-bottom:1px solid var(--line);transition:background .18s var(--ease), transform .18s var(--ease);padding:13px 4px;text-decoration:none;display:block}.link-item:hover{background:var(--white);transform:translate(4px)}.link-item strong{font-family:var(--serif);color:var(--ink);font-size:16px;font-weight:500}.link-item:hover strong{color:var(--clay)}.link-item .why{color:var(--muted);margin-top:2px;font-size:13px;line-height:1.6;display:block}.pager{background:var(--line);border:1px solid var(--line);grid-template-columns:1fr 1fr;gap:1px;margin-top:44px;display:grid}.pager a{background:var(--paper);padding:18px 20px;text-decoration:none}.pager a:hover{background:var(--white)}.pager a.next{text-align:right}.pager .dir{color:var(--muted);letter-spacing:.14em;text-transform:uppercase;margin-bottom:6px;font-size:9px;font-weight:800;display:block}.pager .t{font-family:var(--serif);color:var(--ink);font-size:17px;font-weight:500}.pager a:hover .t{color:var(--clay)}.term{border-bottom:1px dotted var(--clay);color:var(--clay-deep);cursor:help;position:relative}.term:after{content:attr(data-tip);z-index:40;background:var(--ink);width:max-content;max-width:min(300px,76vw);color:var(--paper);font-family:var(--sans);opacity:0;pointer-events:none;transition:opacity .18s var(--ease), transform .18s var(--ease);border-radius:6px;padding:8px 12px;font-size:12px;line-height:1.6;position:absolute;bottom:135%;left:0;transform:translateY(5px)}.term.term-r:after{left:auto;right:0}.term:hover:after,.term:focus:after{opacity:1;transform:translateY(0)}.site-footer{background:var(--ink);color:var(--paper);margin-top:80px}.footer-shell{justify-content:space-between;align-items:end;gap:40px;padding:52px 0 60px;display:flex}.footer-title{font-family:var(--serif);letter-spacing:-.03em;margin:0 0 8px;font-size:clamp(24px,3vw,38px);font-weight:500}.footer-copy{color:#aaa59b;margin:0;font-size:14px}.footer-links{letter-spacing:.08em;text-transform:uppercase;flex-wrap:wrap;justify-content:flex-end;gap:22px;font-size:11px;font-weight:800;display:flex}.footer-links a{color:var(--paper);text-decoration:none}.footer-links a:hover{color:#e78b69}@media (width<=720px){.filter-row{flex-wrap:wrap}.search-wrap .filter-hint{display:none}.filter-row .filter-count{margin-left:auto}.krow,.bookrow{grid-template-columns:44px minmax(0,1fr)}.krow .ktags,.bookrow .bnote{grid-column:2;justify-content:flex-start;padding-top:2px}.footer-shell{flex-direction:column;align-items:flex-start}.footer-links{justify-content:flex-start}.pager{grid-template-columns:1fr}}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important}}
