:root{--bg: #0b0f0e;--bg-2: #101614;--panel: #121a17;--ink: #e8ede9;--ink-2: #9fb0a7;--ink-3: #64736c;--brand: #34d399;--brand-dim: #16794f;--line: #1d2723;--line-2: #2a3731;--max-w: 880px;--mono: "Cascadia Code", "JetBrains Mono", Consolas, monospace}*{box-sizing:border-box}html{color-scheme:dark}body{margin:0;font-family:Inter,PingFang SC,Microsoft YaHei,Noto Sans SC,system-ui,sans-serif;background:var(--bg);color:var(--ink);line-height:1.8;font-size:15.5px;-webkit-font-smoothing:antialiased}body:before{content:"";position:fixed;inset:0;pointer-events:none;z-index:0;background:radial-gradient(600px 300px at 20% -80px,rgba(52,211,153,.1),transparent 70%),radial-gradient(500px 260px at 85% -60px,rgba(52,211,153,.06),transparent 70%)}.container{max-width:var(--max-w);margin:0 auto;padding:0 22px;position:relative;z-index:1}a{color:var(--brand);text-decoration:none}a:hover{text-decoration:none;filter:brightness(1.15)}h1,h2,h3{font-weight:700;letter-spacing:-.015em;line-height:1.35}.mono{font-family:var(--mono)}.site-header{position:sticky;top:0;z-index:20;background:#0b0f0ed1;backdrop-filter:blur(12px);border-bottom:1px solid var(--line)}.header-inner{display:flex;align-items:center;gap:20px;height:58px}.brand{display:flex;align-items:center;gap:10px}.brand-dot{width:9px;height:9px;border-radius:50%;background:var(--brand);box-shadow:0 0 0 4px #34d39926,0 0 12px #34d39999}.brand-name{font-size:15.5px;font-weight:700;color:var(--ink)}.brand-name em{font-style:normal;color:var(--ink-3);font-weight:400;margin-left:8px;font-size:13px}.site-nav{margin-left:auto;display:flex;gap:2px}.site-nav a{padding:6px 12px;border-radius:8px;font-size:13.5px;color:var(--ink-2);transition:color .15s,background .15s}.site-nav a:hover{color:var(--ink);background:var(--bg-2);filter:none}.site-footer{margin-top:96px;border-top:1px solid var(--line);padding:30px 0 46px;position:relative;z-index:1}.site-footer p{margin:4px 0;color:var(--ink-3);font-size:13px}.site-footer a{color:var(--ink-3)}.site-footer a:hover{color:var(--brand)}.hero{padding:72px 0 20px}.hero .kicker{font-family:var(--mono);font-size:12px;letter-spacing:.18em;color:var(--brand);text-transform:uppercase;display:flex;align-items:center;gap:10px}.hero .kicker:before{content:"";width:22px;height:1px;background:var(--brand-dim)}.hero h1{font-size:clamp(30px,5vw,44px);margin:18px 0 16px;line-height:1.25;color:var(--ink)}.hero h1 .accent{color:var(--brand)}.hero .sub{max-width:620px;color:var(--ink-2);font-size:16px;margin:0 0 26px}.hero .sub strong{color:var(--ink)}.hero .chips{display:flex;gap:10px;flex-wrap:wrap}.chip{display:inline-flex;align-items:center;gap:8px;font-family:var(--mono);font-size:12.5px;color:var(--ink-2);border:1px solid var(--line-2);background:var(--panel);padding:6px 13px;border-radius:999px}.chip b{color:var(--brand);font-weight:600}.list-head{display:flex;align-items:baseline;justify-content:space-between;margin:52px 0 10px}.list-head h2{font-size:15px;margin:0;color:var(--ink-3);font-family:var(--mono);font-weight:500;letter-spacing:.14em;text-transform:uppercase}.list-head a{font-size:13px;color:var(--ink-3)}.list-head a:hover{color:var(--brand)}.post-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px}.post-row{display:flex;align-items:baseline;gap:16px;padding:15px 16px;border:1px solid var(--line);border-radius:12px;background:var(--panel);color:var(--ink);transition:border-color .15s,transform .15s,background .15s}.post-row:hover{border-color:var(--brand-dim);background:var(--bg-2);transform:translateY(-1px)}.post-row time{flex:none;font-family:var(--mono);font-size:12.5px;color:var(--ink-3);font-variant-numeric:tabular-nums}.post-row .t{font-size:15.5px;font-weight:600}.post-row:hover .t{color:var(--brand)}.post-row .c{margin-left:auto;flex:none;font-family:var(--mono);font-size:11.5px;color:var(--ink-3);border:1px solid var(--line-2);padding:1px 9px;border-radius:999px}.page-head{margin:56px 0 8px}.page-head h1{font-size:26px;margin:0 0 8px}.page-head p{margin:0;color:var(--ink-2);font-size:14.5px}.article{max-width:700px;margin:0 auto}.article-header{margin:56px 0 6px}.article-header .meta{color:var(--ink-3);font-size:13px;display:flex;gap:14px;flex-wrap:wrap;font-family:var(--mono)}.article-header .meta a{color:var(--ink-3)}.article-header .meta a:hover{color:var(--brand)}.article-header h1{font-size:30px;margin:12px 0 0;line-height:1.4}.article-body{margin-top:32px}.article-body h2{font-size:21px;margin-top:44px;padding-bottom:10px;border-bottom:1px solid var(--line)}.article-body h3{font-size:17px;margin-top:30px}.article-body p{margin:18px 0;color:#cdd6d0}.article-body blockquote{margin:22px 0;padding:4px 0 4px 20px;border-left:2px solid var(--brand-dim);color:var(--ink-2);font-size:15px;background:linear-gradient(90deg,rgba(52,211,153,.05),transparent)}.article-body code{background:var(--bg-2);border:1px solid var(--line);color:var(--brand);padding:2px 7px;border-radius:6px;font-size:.86em;font-family:var(--mono)}.article-body pre{background:var(--bg-2);border:1px solid var(--line);padding:16px 18px;border-radius:12px;overflow-x:auto;font-size:13.5px;line-height:1.65}.article-body pre code{background:none;border:none;padding:0;color:#cdd6d0}.article-body img{max-width:100%;border-radius:12px;border:1px solid var(--line)}.article-body table{border-collapse:collapse;width:100%;margin:20px 0;font-size:14px}.article-body th,.article-body td{border:1px solid var(--line-2);padding:9px 12px;text-align:left}.article-body th{background:var(--bg-2);color:var(--ink);font-weight:600}.article-body td{color:var(--ink-2)}.article-body hr{border:none;border-top:1px solid var(--line);margin:36px 0}.article-footer{margin-top:48px;padding-top:18px;border-top:1px dashed var(--line-2);color:var(--ink-3);font-size:13.5px}.article-footer a{color:var(--ink-3)}.article-footer a:hover{color:var(--brand)}.milestones{list-style:none;margin:28px 0;padding:0;position:relative}.milestones li{position:relative;padding:0 0 26px 30px}.milestones li:before{content:"";position:absolute;left:5px;top:8px;bottom:-4px;width:1px;background:var(--line-2)}.milestones li:last-child{padding-bottom:4px}.milestones li:last-child:before{display:none}.milestones li:after{content:"";position:absolute;left:0;top:6px;width:11px;height:11px;border-radius:50%;border:2px solid var(--ink-3);background:var(--bg)}.milestones li.done:after{border-color:var(--brand);background:var(--brand);box-shadow:0 0 10px #34d39980}.milestones li.doing:after{border-color:var(--brand);animation:pulse 2s infinite}@keyframes pulse{0%,to{box-shadow:0 0 #34d39966}50%{box-shadow:0 0 0 6px #34d39900}}.milestones .m-head{display:flex;align-items:center;gap:12px}.milestones .m-state{font-family:var(--mono);font-size:11px;padding:1px 9px;border-radius:999px;border:1px solid var(--line-2);color:var(--ink-3)}.milestones li.done .m-state{color:var(--brand);border-color:var(--brand-dim);background:#34d39914}.milestones li.doing .m-state{color:var(--brand);border-color:var(--brand-dim)}.milestones .m-title{font-weight:700;font-size:15.5px}.milestones .m-date{font-family:var(--mono);font-size:12px;color:var(--ink-3);margin-left:auto}.milestones .m-desc{margin:5px 0 0;color:var(--ink-2);font-size:14px;max-width:600px}@media(max-width:620px){.post-row{flex-wrap:wrap;gap:8px 14px}.post-row time{order:2}.post-row .c{order:3;margin-left:0}.post-row .t{order:1;width:100%}.site-nav{display:none}.header-inner{height:52px}}
