:root{--bg: #ebe4d2;--bg-2: #e0d9c5;--card: #fbf6e6;--rule: #1a1a1a;--card-edge:#a89f82;--ink: #1a1a1a;--ink-2: #333;--muted: #7a7668;--accent: #c5452a;--accent-ink:#fff;--shadow: rgba(26,26,26,.08);--shadow-hover: rgba(26,26,26,.15);--f-sans: "Manrope","Noto Sans TC",system-ui,sans-serif;--f-mono: "JetBrains Mono",ui-monospace,monospace;--pad:18px;--gutter:16px;--max:1100px}[data-theme=dark]{--bg: #1c1916;--bg-2: #232019;--card: #25211b;--rule: #3a352c;--card-edge:#3f392e;--ink: #e3dcc8;--ink-2: #b8b09a;--muted: #8a8370;--accent: #e07556;--accent-ink:#1a1511;--shadow: rgba(0,0,0,.35);--shadow-hover: rgba(0,0,0,.5)}*{box-sizing:border-box}html,body{margin:0;background:var(--bg);color:var(--ink);font-family:var(--f-sans);-webkit-font-smoothing:antialiased;transition:background .25s ease,color .25s ease}a{color:inherit;text-decoration:none}.wrap{max-width:var(--max);margin:0 auto;padding:0 var(--pad)}.top{display:grid;grid-template-columns:2fr 8fr 2fr;align-items:stretch;border-bottom:1.5px solid var(--rule);padding:14px 0}.top>*{padding:0 var(--gutter);border-right:1.5px solid var(--rule);min-height:44px;display:flex;flex-direction:column;justify-content:center}.top>*:first-child{padding-left:0}.top>*:last-child{padding-right:0;border-right:0}.mark{flex-direction:row!important;align-items:baseline;justify-content:space-between;gap:10px}.mark .name{font-weight:700;letter-spacing:-.015em;font-size:16px}.mark .handle{font-family:var(--f-mono);font-size:11px;color:var(--muted)}.nav{flex-direction:row!important;gap:22px;font-family:var(--f-mono);font-size:12px;letter-spacing:.1em;text-transform:uppercase;align-items:center!important}.nav a{position:relative;padding:2px 0;color:var(--ink)}.nav a.on{color:var(--accent)}.nav a.on:after{content:"";position:absolute;left:0;right:0;bottom:-4px;height:2px;background:var(--accent)}.topright{text-align:right;font-family:var(--f-mono);font-size:11px;color:var(--muted);line-height:1.5}.topright b{color:var(--ink);display:block;font-weight:500}.controls{display:flex;align-items:center;gap:8px;padding:10px 0;border-bottom:1.5px solid var(--rule);font-family:var(--f-mono);font-size:10px;letter-spacing:.14em;text-transform:uppercase}.controls .grp{display:inline-flex;align-items:center;border:1px solid var(--rule)}.controls .grp .lbl{padding:4px 10px;color:var(--muted);letter-spacing:.18em;border-right:1px solid var(--rule)}.controls .grp button{background:transparent;color:var(--muted);border:0;padding:4px 10px;font:inherit;cursor:pointer;letter-spacing:.14em;text-transform:uppercase;border-right:1px solid var(--rule)}.controls .grp button:last-child{border-right:0}.controls .grp button:hover{color:var(--ink)}.controls .grp button.on{background:var(--accent);color:var(--accent-ink)}.controls .spacer{flex:1}.controls .ts{color:var(--muted);letter-spacing:.08em;text-transform:none}.hero{display:grid;grid-template-columns:2fr 8fr 2fr;border-bottom:1.5px solid var(--rule)}.hero>*{padding:22px var(--gutter);border-right:1.5px solid var(--rule)}.hero>*:first-child{padding-left:0}.hero>*:last-child{padding-right:0;border-right:0}.hero .k{font-family:var(--f-mono);font-size:10px;color:var(--muted);letter-spacing:.18em;text-transform:uppercase;margin-bottom:8px}.hero .k b{color:var(--ink)}.hero .lede{font-size:22px;line-height:1.45;font-weight:500;letter-spacing:-.005em;max-width:36ch;margin:0}[data-theme=dark] .hero .lede{font-weight:400}.hero .lede .ac{color:var(--accent);font-weight:700}[data-theme=dark] .hero .lede .ac{font-weight:500}.hero .lede em{font-style:normal;color:var(--muted);font-weight:400}.hero .sub{margin-top:12px;font-size:14px;line-height:1.65;color:var(--ink-2);max-width:60ch}.hero .sub b{font-weight:600;color:var(--ink)}.hero .links{margin-top:14px;display:flex;gap:8px;flex-wrap:wrap}.btn{display:inline-flex;align-items:center;gap:6px;padding:5px 10px;border:1px solid var(--rule);font-family:var(--f-mono);font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--ink);cursor:pointer;background:transparent}.btn.primary{background:var(--accent);border-color:var(--accent);color:var(--accent-ink)}.btn:hover{background:var(--ink);color:var(--bg);border-color:var(--ink)}.btn.primary:hover{background:var(--ink);border-color:var(--ink);color:var(--bg)}.now-card .lab{font-family:var(--f-mono);font-size:10px;letter-spacing:.18em;text-transform:uppercase;color:var(--ink);margin-bottom:8px}.now-card .dot{display:inline-block;width:7px;height:7px;border-radius:50%;background:var(--accent);margin-right:4px;vertical-align:middle;animation:pulse 2.4s ease-in-out infinite}@keyframes pulse{50%{opacity:.3;transform:scale(.8)}}.now-card p{margin:0 0 8px;font-size:12.5px;line-height:1.55;color:var(--ink-2)}.now-card p b{color:var(--ink);display:block;font-weight:600;margin-bottom:2px;font-size:11px;letter-spacing:.04em;text-transform:uppercase;font-family:var(--f-mono)}.now-card .ago{font-family:var(--f-mono);font-size:10px;color:var(--muted);margin-top:8px;letter-spacing:.04em}.ruler{display:flex;justify-content:space-between;align-items:center;font-family:var(--f-mono);font-size:10px;color:var(--muted);letter-spacing:.2em;text-transform:uppercase;padding:12px 0}.ruler .mid{flex:1;height:1px;background:var(--rule);margin:0 14px}.ruler b{color:var(--ink);letter-spacing:.2em}.cards{padding-bottom:22px;display:grid;grid-template-columns:repeat(2,1fr);gap:14px}.c{position:relative;background:var(--card);border:1px solid var(--card-edge);border-radius:3px;padding:16px 20px 42px;box-shadow:2px 3px 0 var(--shadow);transition:transform .12s,box-shadow .12s,background .25s ease,border-color .25s ease;display:block;color:inherit}.c:hover{transform:translate(-1px,-1px);box-shadow:3px 4px 0 var(--shadow-hover)}.c .d{position:absolute;left:20px;top:14px;font-family:var(--f-mono);font-size:10px;color:var(--muted);letter-spacing:.1em}.c .d b{color:var(--ink);font-weight:500}.c .no{position:absolute;top:14px;right:16px;font-family:var(--f-mono);font-size:10px;color:var(--muted);letter-spacing:.2em}.c .body{padding-top:26px;border-top:1px solid var(--card-edge);margin-top:10px;opacity:.95}[data-theme=dark] .c .body{border-top-color:#3a3529}.c .kind{display:inline-block;font-family:var(--f-mono);font-size:9px;letter-spacing:.18em;text-transform:uppercase;padding:1px 6px;border:1px solid var(--rule);color:var(--muted);position:absolute;left:20px;bottom:14px}.c.essay .kind{color:var(--accent);border-color:var(--accent)}.c.deep .kind{background:var(--ink);color:var(--bg);border-color:var(--ink)}.c.note .kind{color:var(--ink-2);border-color:var(--card-edge)}.c.log .kind{color:var(--muted);border-color:var(--card-edge)}.c h3{margin:4px 0 6px;font-size:18px;font-weight:600;line-height:1.3;letter-spacing:-.008em;color:var(--ink)}[data-theme=dark] .c h3{font-weight:500}.c:hover h3{color:var(--accent)}.c .dek{font-size:13px;line-height:1.55;color:var(--ink-2);margin:0}.c .meta{position:absolute;right:20px;bottom:14px;font-family:var(--f-mono);font-size:10px;color:var(--muted);letter-spacing:.04em}.c .meta b{color:var(--ink);font-weight:500}.loadmore{display:block;text-align:center;width:100%;padding:14px 0;margin-top:8px;font-family:var(--f-mono);font-size:11px;letter-spacing:.18em;text-transform:uppercase;border:0;background:transparent;color:var(--ink);cursor:pointer;border-top:1.5px solid var(--rule)}.loadmore:hover{color:var(--accent)}.foot{display:grid;grid-template-columns:2fr 8fr 2fr;padding:22px 0 30px;border-top:1.5px solid var(--rule);margin-top:8px}.foot>*{padding:14px var(--gutter);border-right:1.5px solid var(--rule)}.foot>*:first-child{padding-left:0}.foot>*:last-child{padding-right:0;border-right:0}.foot .lab{font-family:var(--f-mono);font-size:10px;letter-spacing:.18em;text-transform:uppercase;color:var(--muted);margin-bottom:6px}.foot .big{font-size:20px;font-weight:600;letter-spacing:-.01em;margin:0 0 8px;max-width:30ch;line-height:1.3}[data-theme=dark] .foot .big{font-weight:500}.foot .sub{font-size:13px;line-height:1.55;color:var(--ink-2);margin:0 0 10px;max-width:44ch}.foot .links-mono{font-family:var(--f-mono);font-size:11px;color:var(--ink-2);line-height:1.9;letter-spacing:.04em}.foot .links-mono a{display:inline-block;margin-right:14px;border-bottom:1px solid var(--card-edge);padding-bottom:1px}.foot .links-mono a:hover{color:var(--accent);border-color:var(--accent)}.foot .colo{font-family:var(--f-mono);font-size:10px;color:var(--muted);line-height:1.7;letter-spacing:.04em}.foot .colo b{color:var(--ink);font-weight:500}.sig{text-align:center;font-family:var(--f-mono);font-size:10px;color:var(--muted);letter-spacing:.24em;text-transform:uppercase;padding:16px 0 28px}.sig .x{color:var(--accent)}[data-lang=en] .zh,[data-lang=zh] .en{display:none!important}.post{max-width:68ch;margin:0 auto;padding:32px 0 24px}.post .back{font-family:var(--f-mono);font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--muted);display:inline-block;margin-bottom:28px}.post .back:hover{color:var(--accent)}.post .stamp{font-family:var(--f-mono);font-size:10px;letter-spacing:.18em;text-transform:uppercase;color:var(--muted);margin-bottom:10px;display:flex;gap:14px;flex-wrap:wrap;align-items:center}.post .stamp b{color:var(--ink);font-weight:500}.post .stamp .kbadge{padding:1px 6px;border:1px solid var(--card-edge);color:var(--ink-2)}.post h1{font-size:34px;line-height:1.2;letter-spacing:-.015em;font-weight:700;margin:6px 0 10px}[data-theme=dark] .post h1{font-weight:500}.post .lead{font-size:17px;line-height:1.55;color:var(--ink-2);margin:0 0 24px;border-bottom:1.5px solid var(--rule);padding-bottom:18px}.post .prose{font-size:16px;line-height:1.75;color:var(--ink)}.post .prose>*+*{margin-top:1.1em}.post .prose h2{font-size:22px;font-weight:600;letter-spacing:-.005em;margin-top:2em;margin-bottom:.2em;color:var(--ink)}.post .prose h3{font-size:18px;font-weight:600;margin-top:1.6em;margin-bottom:.1em;color:var(--ink)}.post .prose a{color:var(--accent);border-bottom:1px solid var(--accent)}.post .prose a:hover{background:var(--accent);color:var(--accent-ink)}.post .prose code{font-family:var(--f-mono);font-size:.88em;background:var(--bg-2);padding:1px 5px;border-radius:2px}.post .prose pre{background:var(--card);border:1px solid var(--card-edge);border-radius:3px;padding:14px 16px;overflow-x:auto;font-size:13px;line-height:1.55}.post .prose pre code{background:transparent;padding:0;font-size:inherit}.post .prose blockquote{border-left:3px solid var(--accent);padding:2px 0 2px 16px;color:var(--ink-2);font-style:italic;margin-left:0}.post .prose ul,.post .prose ol{padding-left:1.4em}.post .prose li+li{margin-top:.35em}.post .prose hr{border:0;border-top:1.5px solid var(--rule);margin:2.2em 0}.post-nav{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-top:40px;padding-top:24px;border-top:1.5px solid var(--rule);font-family:var(--f-mono);font-size:11px;letter-spacing:.08em;text-transform:uppercase}.post-nav a{display:block;padding:14px;border:1px solid var(--card-edge);background:var(--card);transition:transform .12s,box-shadow .12s}.post-nav a:hover{transform:translate(-1px,-1px);box-shadow:3px 4px 0 var(--shadow-hover);color:var(--accent)}.post-nav .lab{color:var(--muted);font-size:9px;letter-spacing:.2em;display:block;margin-bottom:4px}.post-nav .t{font-family:var(--f-sans);font-size:13px;font-weight:600;letter-spacing:-.005em;text-transform:none;color:var(--ink);line-height:1.3}[data-theme=dark] .post-nav .t{font-weight:500}.post-nav .next{text-align:right}.page-head{display:grid;grid-template-columns:2fr 8fr 2fr;border-bottom:1.5px solid var(--rule);padding:28px 0}.page-head>*{padding:0 var(--gutter);border-right:1.5px solid var(--rule);display:flex;flex-direction:column;justify-content:center}.page-head>*:first-child{padding-left:0}.page-head>*:last-child{padding-right:0;border-right:0}.page-head .k{font-family:var(--f-mono);font-size:10px;color:var(--muted);letter-spacing:.18em;text-transform:uppercase}.page-head .k b{color:var(--ink)}.page-head h1{font-size:34px;font-weight:700;letter-spacing:-.015em;margin:0 0 6px;line-height:1.15}[data-theme=dark] .page-head h1{font-weight:500}.page-head .dek{font-size:14px;line-height:1.6;color:var(--ink-2);max-width:56ch;margin:0}.page-head .meta{font-family:var(--f-mono);font-size:10px;color:var(--muted);letter-spacing:.12em;text-transform:uppercase;text-align:right;line-height:1.8}.page-head .meta b{color:var(--ink);font-weight:500}.filter{display:flex;gap:8px;padding:16px 0 10px;flex-wrap:wrap;align-items:center;font-family:var(--f-mono);font-size:10px;letter-spacing:.14em;text-transform:uppercase}.filter .flbl{color:var(--muted);margin-right:4px}.filter button{background:transparent;border:1px solid var(--rule);color:var(--ink-2);padding:4px 10px;cursor:pointer;font:inherit;letter-spacing:.14em;text-transform:uppercase}.filter button:hover{color:var(--accent);border-color:var(--accent)}.filter button.on{background:var(--ink);color:var(--bg);border-color:var(--ink)}.year-rule{display:flex;align-items:baseline;gap:14px;padding:18px 0 6px;font-family:var(--f-mono);font-size:10px;letter-spacing:.2em;text-transform:uppercase;color:var(--muted)}.year-rule b{color:var(--ink);font-size:15px;letter-spacing:.06em;font-weight:500}.year-rule .mid{flex:1;height:1px;background:var(--rule)}.projects-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:14px;padding:18px 0 22px}.p{position:relative;background:var(--card);border:1px solid var(--card-edge);border-radius:3px;padding:18px 20px 20px;box-shadow:2px 3px 0 var(--shadow);transition:transform .12s,box-shadow .12s,background .25s ease,border-color .25s ease;display:flex;flex-direction:column;gap:10px;color:inherit}.p:hover{transform:translate(-1px,-1px);box-shadow:3px 4px 0 var(--shadow-hover)}.p .p-head{display:flex;align-items:center;justify-content:space-between;gap:10px;font-family:var(--f-mono);font-size:10px;letter-spacing:.14em;text-transform:uppercase;color:var(--muted)}.p .p-head .slug{color:var(--ink);font-weight:500;font-size:11px;letter-spacing:.08em}.p .status{display:inline-flex;align-items:center;gap:6px;font-family:var(--f-mono);font-size:10px;letter-spacing:.14em}.p .status .dot{width:7px;height:7px;border-radius:50%;display:inline-block}.p.live .status .dot{background:#2a9d5c}.p.live .status{color:#2a9d5c}.p.wip .status .dot{background:var(--accent);animation:pulse 2.4s ease-in-out infinite}.p.wip .status{color:var(--accent)}.p.archived .status .dot{background:var(--muted)}.p h3{margin:0;font-size:20px;font-weight:600;letter-spacing:-.01em;line-height:1.25;color:var(--ink)}[data-theme=dark] .p h3{font-weight:500}.p:hover h3{color:var(--accent)}.p .desc{margin:0;font-size:13.5px;line-height:1.6;color:var(--ink-2)}.p .stack{display:flex;flex-wrap:wrap;gap:6px;margin-top:auto;font-family:var(--f-mono);font-size:10px;letter-spacing:.04em;color:var(--ink-2)}.p .stack span{padding:2px 7px;background:var(--bg-2);border:1px solid var(--card-edge);border-radius:2px}.p .p-links{display:flex;gap:16px;font-family:var(--f-mono);font-size:11px;letter-spacing:.06em;padding-top:4px}.p .p-links a{color:var(--ink-2);border-bottom:1px solid var(--card-edge);padding-bottom:1px}.p .p-links a:hover{color:var(--accent);border-color:var(--accent)}.single{max-width:68ch;margin:0 auto;padding:32px 0 24px}.single .stamp{font-family:var(--f-mono);font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--muted);margin-bottom:22px;display:flex;gap:14px;flex-wrap:wrap;align-items:center}.single .stamp b{color:var(--ink);font-weight:500}.single .stamp .dot{display:inline-block;width:7px;height:7px;border-radius:50%;background:var(--accent);animation:pulse 2.4s ease-in-out infinite}.single h2{font-size:13px;font-family:var(--f-mono);font-weight:500;letter-spacing:.2em;text-transform:uppercase;color:var(--muted);margin:36px 0 10px;display:flex;align-items:center;gap:12px}.single h2:before{content:"";display:inline-block;width:18px;height:2px;background:var(--accent)}.single p{font-size:16px;line-height:1.75;color:var(--ink);margin:0 0 1em}.single p:last-child{margin-bottom:0}.single p.lede{font-size:19px;line-height:1.5;color:var(--ink);letter-spacing:-.005em;max-width:38ch;margin-bottom:1.2em}.single p.lede em{font-style:normal;color:var(--muted)}.single .kv{padding:0;list-style:none;margin:0}.single .kv li{padding:10px 0;border-bottom:1px dashed var(--card-edge);display:grid;grid-template-columns:120px 1fr;gap:14px;font-size:14px;line-height:1.55;color:var(--ink)}.single .kv li:last-child{border-bottom:0}.single .kv li .t{font-family:var(--f-mono);font-size:11px;font-weight:500;color:var(--muted);letter-spacing:.1em;text-transform:uppercase;padding-top:2px}.single .kv li .v b{font-weight:600}[data-theme=dark] .single .kv li .v b{font-weight:500}.single .note{font-family:var(--f-mono);font-size:11px;line-height:1.7;color:var(--muted);padding:14px 18px;border:1px dashed var(--card-edge);margin:36px 0 0}.single .note a{color:var(--accent);border-bottom:1px solid var(--accent)}.single .tags{display:flex;flex-wrap:wrap;gap:6px;font-family:var(--f-mono);font-size:11px;letter-spacing:.04em}.single .tags span{padding:3px 9px;background:var(--bg-2);border:1px solid var(--card-edge);border-radius:2px}@media(max-width:800px){.top,.hero,.foot,.page-head{grid-template-columns:1fr}.top>*,.hero>*,.foot>*,.page-head>*{border-right:0!important;border-bottom:1.5px solid var(--rule);padding:12px 0!important}.top>*:last-child,.hero>*:last-child,.foot>*:last-child,.page-head>*:last-child{border-bottom:0}.cards,.projects-grid{grid-template-columns:1fr}.controls{flex-wrap:wrap}.page-head .meta{text-align:left}.post h1{font-size:28px}.post-nav{grid-template-columns:1fr}.post-nav .next{text-align:left}.single .kv li{grid-template-columns:1fr;gap:4px}}html[data-theme=dark]{color-scheme:dark}
