:root{--paper:#f5f5f1;--panel:#fbfbf8;--ink:#1f1e1b;--reading:#45433c;--ink-soft:#66645e;--ink-faint:#a3a29b;--rule:#e0dfd8;--rule-strong:#c7c5bd;--live:#1b5e4b;--build:#6b7fa8;--paused:#a08a63;--stopped:#b0aea6;--serif:"Songti SC","Source Han Serif SC","Noto Serif SC","SimSun",serif;--sans:-apple-system,BlinkMacSystemFont,"PingFang SC","Hiragino Sans GB","Microsoft YaHei",system-ui,sans-serif;--mono:"SF Mono",ui-monospace,Menlo,Consolas,"PingFang SC",monospace}*{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{background:var(--paper);color:var(--ink);font-family:var(--sans);-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility;margin:0;font-size:15px;line-height:1.7}a{color:inherit}:focus-visible{outline:2px solid var(--live);outline-offset:3px}.wrap{max-width:1120px;margin:0 auto;padding:0 40px}.masthead{border-bottom:1px solid var(--rule)}.masthead .wrap{justify-content:space-between;align-items:baseline;gap:24px;padding-top:22px;padding-bottom:18px;display:flex}.wordmark{font-family:var(--mono);letter-spacing:.16em;text-transform:uppercase;color:var(--ink);font-size:12px;text-decoration:none}.nav{color:var(--ink-soft);gap:22px;font-size:13px;display:flex}.nav a{border-bottom:1px solid #0000;padding-bottom:2px;text-decoration:none}.nav a:hover{color:var(--ink);border-bottom-color:var(--rule-strong)}.nav a.current{color:var(--ink);border-bottom-color:var(--live)}.opening{border-bottom:1px solid var(--rule);padding:50px 0}.opening h1{font-family:var(--serif);letter-spacing:.01em;margin:0;font-size:clamp(21px,2.35vw,30px);font-weight:600;line-height:1.48}.opening h1 em{color:var(--live);font-style:normal}.facts{font-family:var(--mono);color:var(--ink-soft);flex-wrap:wrap;gap:10px 26px;margin:26px 0 0;font-size:12.5px;display:flex}.facts span:before{content:"—";color:var(--ink-faint);margin-right:9px}.section{padding:28px 0 0}.section-head{justify-content:space-between;align-items:baseline;gap:20px;padding-bottom:16px;display:flex}.section-head h2{font-family:var(--serif);letter-spacing:.04em;margin:0;font-size:19px;font-weight:600}.all-link{font-family:var(--mono);color:var(--ink-soft);border-bottom:1px solid var(--rule-strong);padding-bottom:1px;font-size:12px;text-decoration:none}.all-link:hover{color:var(--live);border-bottom-color:var(--live)}.next-list{border-top:1px solid var(--rule-strong)}.next-row{border-bottom:1px solid var(--rule);grid-template-columns:58px 180px minmax(0,1fr);align-items:baseline;gap:4px 20px;padding:12px 18px 12px 0;text-decoration:none;transition:background-color .18s;display:grid}.next-row:hover,.next-row:focus-visible{background:var(--panel);outline:none}.next-state{font-family:var(--mono);letter-spacing:.06em;font-size:10.5px}.next-state[data-status=building]{color:var(--build)}.next-state[data-status=planned]{color:var(--ink-faint)}.next-name{font-family:var(--serif);letter-spacing:.01em;font-size:16px;font-weight:600;line-height:1.5}.next-desc{color:var(--ink-soft);max-width:34em;font-size:13px;line-height:1.6}.index{border-top:1px solid var(--rule-strong)}.row{border-bottom:1px solid var(--rule);grid-template-columns:58px minmax(0,1fr) auto;gap:4px 20px;padding:17px 18px 17px 0;text-decoration:none;transition:background-color .18s;display:grid}.row:hover,.row:focus-visible{background:var(--panel);outline:none}.row-form{font-family:var(--mono);letter-spacing:.06em;color:var(--ink-faint);padding-top:7px;font-size:10.5px}.row:hover .row-form,.row:focus-visible .row-form{color:var(--live)}.row-title{font-family:var(--serif);letter-spacing:.01em;font-size:17.5px;font-weight:600;line-height:1.5}.row-meta{font-family:var(--mono);letter-spacing:.02em;color:var(--ink-faint);white-space:nowrap;padding-top:5px;font-size:11.5px}.row-desc{color:var(--ink-soft);grid-column:2/-1;max-width:34em;font-size:13.5px;line-height:1.65}.row[data-status=stopped] .row-title{color:#7c7a72}.row[data-status=stopped] .row-meta{color:var(--stopped)}.dot{background:var(--stopped);border-radius:50%;width:5px;height:5px;margin:0 7px 2px 2px;display:inline-block}[data-status=live] .dot,[data-status=running] .dot{background:var(--live)}[data-status=building] .dot{background:var(--build)}[data-status=paused] .dot{background:var(--paused)}[data-status=planned] .dot{background:var(--ink-faint)}.year+.year{margin-top:44px}.post-head+.year{margin-top:42px}.year-head{border-bottom:1px solid var(--rule-strong);justify-content:space-between;align-items:baseline;gap:16px;padding-bottom:9px;display:flex}.year-num{font-family:var(--mono);letter-spacing:.05em;color:var(--ink);font-size:17px}.year-count{font-family:var(--mono);letter-spacing:.02em;color:var(--ink-faint);font-size:11px}.work{padding:38px 0 0}.column{max-width:880px}.back{font-family:var(--mono);letter-spacing:.03em;color:var(--ink-faint);margin-bottom:30px;font-size:11.5px;text-decoration:none;display:inline-block}.back:hover{color:var(--live)}.post-head h1{font-family:var(--serif);letter-spacing:.02em;margin:0;font-size:clamp(26px,3vw,34px);font-weight:600;line-height:1.35}.post-meta{font-family:var(--mono);letter-spacing:.04em;color:var(--ink-faint);flex-wrap:wrap;align-items:baseline;gap:16px;margin-top:14px;font-size:11.5px;display:flex}.post-meta .state{align-items:center;display:flex}.post-meta .state[data-status=running]{color:var(--live)}.post-meta .state[data-status=building]{color:var(--build)}.post-meta .state[data-status=paused]{color:var(--paused)}.post-meta .state[data-status=stopped]{color:var(--stopped)}.post-meta .state[data-status=planned]{color:var(--ink-faint)}.post-meta a{border-bottom:1px solid var(--rule);text-decoration:none}.post-meta a:hover{color:var(--live);border-bottom-color:var(--live)}.post-summary{color:var(--ink-soft);max-width:620px;margin:16px 0 0;font-size:16.5px;line-height:1.85}.cover{margin:34px 0 0}.cover img{border:1px solid var(--rule-strong);width:100%;height:auto;display:block}.cover figcaption{font-family:var(--mono);letter-spacing:.02em;color:var(--ink-faint);margin-top:11px;font-size:11px}.prose{max-width:700px;color:var(--reading);margin-top:34px;font-size:16.5px;line-height:1.92}.prose>:first-child{margin-top:0}.prose h2{font-family:var(--serif);letter-spacing:.04em;color:var(--ink);border-top:1px solid var(--rule);margin:2.3em 0 .85em;padding-top:1.15em;font-size:20px;font-weight:600;line-height:1.5}.prose h2:first-child{border-top:0;margin-top:0;padding-top:0}.prose h3{font-family:var(--serif);letter-spacing:.04em;color:var(--ink);margin:1.9em 0 .55em;font-size:16.5px;font-weight:600}.prose p{margin:0 0 1.15em}.prose strong{color:var(--ink);font-weight:600}.prose em{font-style:normal;-webkit-text-emphasis:dot;text-emphasis:dot;-webkit-text-emphasis-position:under;text-emphasis-position:under}.prose a{color:var(--ink);border-bottom:1px solid var(--rule-strong);padding-bottom:1px;text-decoration:none}.prose a:hover{color:var(--live);border-bottom-color:var(--live)}.prose ul,.prose ol{margin:0 0 1.15em;padding-left:1.35em}.prose li{margin-bottom:.45em}.prose li::marker{color:var(--ink-faint)}.prose blockquote{border-left:2px solid var(--rule-strong);font-family:var(--serif);color:var(--ink);margin:1.9em 0;padding:.15em 0 .15em 24px;font-size:17.5px;line-height:1.8}.prose blockquote p{margin:0 0 .6em}.prose blockquote p:last-child{margin-bottom:0}.prose code{font-family:var(--mono);background:var(--panel);border:1px solid var(--rule);color:var(--ink);border-radius:2px;padding:1px 5px;font-size:.86em}.prose pre{background:var(--panel);border:1px solid var(--rule);-webkit-overflow-scrolling:touch;margin:0 0 1.4em;padding:18px 20px;font-size:13px;line-height:1.85;overflow-x:auto}.prose pre code{color:var(--ink-soft);background:0 0;border:0;border-radius:0;padding:0;font-size:13px}.prose table{border-collapse:collapse;width:100%;margin:0 0 1.5em;font-size:14.5px;line-height:1.6}.prose th{font-family:var(--mono);letter-spacing:.05em;color:var(--ink-faint);text-align:left;border-bottom:1px solid var(--rule-strong);padding:0 16px 9px 0;font-size:11px;font-weight:400}.prose td{border-bottom:1px solid var(--rule);vertical-align:top;padding:11px 16px 11px 0}.prose th:last-child,.prose td:last-child{padding-right:0}.prose img{border:1px solid var(--rule-strong);width:100%;height:auto;margin:1.9em 0;display:block}.prose hr{border:0;border-top:1px solid var(--rule);margin:2.6em 0}.stack{font-family:var(--mono);letter-spacing:.03em;color:var(--ink-faint);border-top:1px solid var(--rule);margin:44px 0 0;padding-top:22px;font-size:11.5px}.foot{border-top:1px solid var(--rule);font-family:var(--mono);color:var(--ink-faint);flex-wrap:wrap;gap:8px 30px;margin-top:56px;padding:26px 0 60px;font-size:11.5px;display:flex}.work .foot{border-top:0;margin-top:40px;padding-top:0}.foot a{border-bottom:1px solid var(--rule);text-decoration:none}.foot a:hover{color:var(--live);border-bottom-color:var(--live)}@media (width<=860px){.wrap{padding:0 26px}.prose{font-size:16px;line-height:1.9}}@media (width<=620px){.wrap{padding:0 20px}.opening{padding:40px 0}.opening h1{font-size:22px}.next-row{grid-template-columns:58px minmax(0,1fr)}.next-desc{grid-column:2/-1}.row{padding:15px 0}.row-title{font-size:16.5px}.row-meta{padding-top:3px}.work{padding:28px 0 0}.back{margin-bottom:22px}.post-summary,.prose{font-size:15.5px}.prose h2{font-size:18px}.prose table{font-size:13.5px}.prose th,.prose td{padding-right:10px}}@media (prefers-reduced-motion:reduce){*{transition:none!important}}
