:root{--bg:#FFF7F6;--ink:#111111;--muted:#765042;--deep:#552E1B;--accent:#9B254A;--quote:#7B2038;--toc:#000000;--rule:rgba(85, 46, 27, .24);--dash:rgba(85, 46, 27, .3);--surface:rgba(85, 46, 27, .06);--code-bg:rgba(155, 37, 74, .09);--alert-bg:rgba(155, 37, 74, .028);--alert-rule:rgba(155, 37, 74, .3);--select-bg:#9B254A;--select-fg:#FFFFFF;--logo:#000000;--ok:#2F6B3F;--bad:#A42744;--warn:#8A5A12;--serif:"Newsreader", "Noto Serif TC", "Songti TC", "PMingLiU", "Source Han Serif TC", Georgia, serif;--col:35rem;color-scheme:light}@media(prefers-color-scheme:dark){:root:not([data-theme=light]){--bg:#33101C;--ink:#F3E7E3;--muted:#C49CA2;--deep:#EBD6D2;--accent:#EB9DB1;--quote:#E3A9B8;--toc:#FFFFFF;--rule:rgba(243, 224, 221, .18);--dash:rgba(243, 224, 221, .28);--surface:rgba(243, 224, 221, .06);--code-bg:rgba(243, 224, 221, .06);--alert-bg:rgba(235, 157, 177, .045);--alert-rule:rgba(235, 157, 177, .32);--select-bg:#F3E7E3;--select-fg:#33101C;--logo:#FFFFFF;--ok:#A3D4AE;--bad:#F4AEBE;--warn:#E6C079;color-scheme:dark}}:root[data-theme=dark]{--bg:#33101C;--ink:#F3E7E3;--muted:#C49CA2;--deep:#EBD6D2;--accent:#EB9DB1;--quote:#E3A9B8;--toc:#FFFFFF;--rule:rgba(243, 224, 221, .18);--dash:rgba(243, 224, 221, .28);--surface:rgba(243, 224, 221, .06);--code-bg:rgba(243, 224, 221, .06);--alert-bg:rgba(235, 157, 177, .045);--alert-rule:rgba(235, 157, 177, .32);--select-bg:#F3E7E3;--select-fg:#33101C;--logo:#FFFFFF;--ok:#A3D4AE;--bad:#F4AEBE;--warn:#E6C079;color-scheme:dark}:root{--color-background:var(--bg);--color-foreground:var(--ink);--color-border:var(--rule);--color-card:var(--surface);--color-card-foreground:var(--ink);--color-muted:var(--surface);--color-muted-foreground:var(--muted);--color-primary:var(--accent);--color-primary-foreground:var(--bg);--color-accent:var(--accent);--color-tip:var(--ok);--color-caution:var(--bad);--color-warning:var(--warn)}html:lang(en) .prose{font-size:calc(17px + 1pt);letter-spacing:0;line-height:1.85;hyphens:auto;-webkit-hyphens:auto}*{box-sizing:border-box}html{-webkit-text-size-adjust:100%;scroll-behavior:smooth}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}}body{margin:0;background:var(--bg);color:var(--ink);font-family:var(--serif);font-size:16px;line-height:1.8;padding-inline:clamp(16px,5vw,56px)}::selection{background:var(--select-bg);color:var(--select-fg)}img,video,iframe{max-width:100%}a{color:inherit;text-decoration:none}a:focus-visible,button:focus-visible,input:focus-visible{outline:2px solid var(--accent);outline-offset:3px}button{font:inherit;color:inherit;background:0 0;border:0;padding:0;cursor:pointer}[hidden]{display:none!important}.wrap{max-width:68rem;margin-inline:auto}.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}.site-head{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:16px;padding-block:28px}.logo{color:var(--logo);display:inline-block;line-height:0;justify-self:start}.logo svg{height:42px;width:auto;display:block}.logo path{stroke:currentColor;stroke-width:1px;vector-effect:non-scaling-stroke;stroke-linecap:round;stroke-linejoin:round}.nav{display:flex;gap:clamp(18px,3vw,36px);font-size:15px;letter-spacing:.12em}.nav a{padding-block:4px;border-bottom:1px solid transparent;white-space:nowrap}.nav a:hover{color:var(--accent)}.nav a[aria-current=page]{border-bottom-color:var(--accent);color:var(--accent)}.tools{display:flex;gap:18px;justify-content:flex-end;align-items:center;font-size:14px;color:var(--muted)}.tools a:hover,.tools button:hover{color:var(--accent)}.tools svg{width:18px;height:18px;display:block;fill:none;stroke:currentColor;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round}.tools .icon-moon{display:none}:root[data-theme=dark] .tools .icon-sun{display:none}:root[data-theme=dark] .tools .icon-moon{display:block}@media(prefers-color-scheme:dark){:root:not([data-theme=light]) .tools .icon-sun{display:none}:root:not([data-theme=light]) .tools .icon-moon{display:block}}@media(max-width:640px){.site-head{grid-template-columns:auto 1fr;row-gap:18px}.nav{grid-column:1/-1;grid-row:2;justify-content:center;gap:26px}:lang(zh) .site-head{grid-template-columns:auto 1fr auto;gap:12px;padding-block:22px}:lang(zh) .logo svg{height:34px}:lang(zh) .nav{grid-column:auto;grid-row:auto;gap:14px;font-size:14px;letter-spacing:.06em;position:relative;top:2px}:lang(zh) .tools{gap:12px;font-size:13px}}main{--main-pb:clamp(56px, 9vw, 120px);min-height:60vh;padding-block:clamp(24px,6vw,72px)var(--main-pb)}.page-title{font-size:28px;font-weight:500;letter-spacing:.08em;margin:0 0 40px}.home{display:grid;grid-template-columns:minmax(0,1fr)auto;gap:clamp(24px,5vw,72px);align-items:end;margin-bottom:calc(-1 * var(--main-pb))}.me{align-self:center;display:flex;flex-direction:column;gap:6px;padding-bottom:clamp(24px,6vw,72px)}.me h1{font-size:clamp(34px,5vw,52px);font-weight:500;letter-spacing:.04em;margin:0;line-height:1.25}.me .role{color:var(--muted);letter-spacing:.32em;font-size:16px;margin:0 0 28px}.contact{border-top:1px solid var(--rule);padding-top:16px;margin:0;font-size:15px;display:grid;gap:4px;max-width:16rem}.contact dt{color:var(--muted);letter-spacing:.14em;font-size:12px}.contact dd{margin:0;user-select:all}.draw{display:block;cursor:pointer;line-height:0}.draw svg{display:block;height:min(68vh,620px);width:auto;max-width:100%;overflow:visible}.draw path{fill:none;stroke:var(--accent);stroke-width:8;stroke-linecap:round;stroke-linejoin:round}.draw svg.play path{stroke-dasharray:1 1;animation:pen var(--d)linear var(--t)both}@keyframes pen{0%{stroke-dashoffset:.999;opacity:0}1%{stroke-dashoffset:.999;opacity:1}100%{stroke-dashoffset:0;opacity:1}}@media(prefers-reduced-motion:reduce){.draw svg.play path{animation:none}}@media(max-width:720px){.home{grid-template-columns:minmax(0,1fr)}.me{padding-bottom:0}.draw{justify-self:end}.draw svg{height:auto;width:min(100%,360px)}}.narrow{max-width:44rem;margin-inline:auto}.year{font-size:14px;color:var(--muted);letter-spacing:.2em;margin:0;padding-bottom:10px;border-bottom:1px solid var(--rule);font-weight:400}.list{list-style:none;margin:0 0 48px;padding:0}.list li{border-bottom:1px solid var(--rule)}.list a{display:grid;grid-template-columns:4.2em minmax(0,1fr)auto;gap:16px;align-items:baseline;padding-block:14px}.list time{color:var(--muted);font-size:14px;font-variant-numeric:tabular-nums}.list .t{font-size:17px}.list .c{color:var(--muted);font-size:13px;letter-spacing:.08em;white-space:nowrap}.list a:hover .t{color:var(--accent)}.list.cats{border-top:1px solid var(--rule)}.list.cats a{grid-template-columns:minmax(0,1fr)auto;padding-block:16px}.list.cats .t{font-size:19px;letter-spacing:.06em}.list.cats .n{color:var(--muted);font-size:14px;font-variant-numeric:tabular-nums}.list-head{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:6px 24px;margin-bottom:24px}.list-head .page-title{margin:0}.stats{margin:0;color:var(--muted);font-size:14px;letter-spacing:.08em;font-variant-numeric:tabular-nums}.years{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px 24px;margin-bottom:36px}.year-btns{display:flex;flex-wrap:wrap;gap:10px}.years button{display:inline-flex;align-items:center;gap:8px;padding:5px 16px 1px;border:1px solid var(--accent);border-radius:999px;color:var(--accent);font-size:14px;letter-spacing:.1em;font-variant-numeric:tabular-nums;transition:background-color .2s ease,color .2s ease}.years button:hover,.years button[aria-pressed=true]{background:var(--accent);color:var(--bg)}.years svg{position:relative;top:-2px;width:15px;height:15px;fill:none;stroke:currentColor;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round}.featured{margin-bottom:36px}.featured h2{font-size:14px;font-weight:400;color:var(--muted);letter-spacing:.2em;margin:0 0 10px}.featured ul{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:0 24px}.featured a{display:flex;flex-direction:column;gap:2px;height:100%;padding:12px 0 14px;border-top:1px solid var(--accent)}.featured .t{font-size:17px;font-weight:700;line-height:1.55}.featured .c{color:var(--muted);font-size:13px;letter-spacing:.08em}.featured a:hover .t{color:var(--accent)}@media(max-width:560px){.featured ul{grid-template-columns:minmax(0,1fr)}}.crumb{margin:0 0 20px;font-size:14px;color:var(--muted);letter-spacing:.08em}.crumb a:hover{color:var(--accent)}@media(max-width:560px){.list a{grid-template-columns:4.2em minmax(0,1fr)}.list.cats a{grid-template-columns:minmax(0,1fr)auto}.list .c{display:none}}.article{display:grid;grid-template-columns:minmax(0,1fr)minmax(0,var(--col))minmax(0,1fr);column-gap:clamp(24px,4vw,56px)}.post{grid-column:2;min-width:0}.post>header h1{font-size:clamp(28px,4vw,36px);font-weight:700;line-height:1.45;letter-spacing:.03em;margin:0 0 14px;text-wrap:balance}.post>header p{color:var(--muted);font-size:14px;letter-spacing:.1em;margin:0;font-variant-numeric:tabular-nums}.post>header p a:hover{color:var(--accent)}.post>header{margin-bottom:32px}.post .cover{width:100%;height:auto;display:block;margin:0 0 40px}.toc{grid-column:1;justify-self:end;width:100%;max-width:13rem;align-self:start;position:sticky;top:calc(env(safe-area-inset-top,0px) + 24px);max-height:calc(100vh - 48px);overflow-y:auto;font-size:13px;line-height:1.6}.toc{color:var(--toc)}.toc h2{font-size:12px;font-weight:400;letter-spacing:.2em;margin:0 0 14px}.toc ul{list-style:none;margin:0;padding:0;display:grid;gap:10px}.toc nav>ul>li>a{font-weight:500}.toc ul ul{margin-top:10px;padding-left:1em}.toc a:hover{color:var(--accent)}@media(max-width:900px){.article{grid-template-columns:minmax(0,1fr);row-gap:28px;max-width:var(--col);margin-inline:auto}.toc,.post{grid-column:1}.toc{position:static;max-width:none;max-height:none;justify-self:stretch;padding-bottom:20px;border-bottom:1px solid var(--rule)}}.prose{font-size:17px;line-height:2.05;letter-spacing:.03em;text-align:justify;overflow-wrap:break-word}.prose p{margin:0 0 1.5em}.prose h2{font-size:23px;font-weight:700;margin:2.4em 0 .9em;line-height:1.5;text-align:left}.prose h3{font-size:19px;font-weight:700;margin:2em 0 .8em;line-height:1.6;text-align:left}.prose h4{font-size:17px;font-weight:700;margin:1.8em 0 .6em;text-align:left}.prose>:first-child{margin-top:0}.prose ul,.prose ol{margin:0 0 1.5em;padding-left:1.6em}.prose li{margin-bottom:.4em}.prose a{color:var(--accent);text-decoration:underline;text-underline-offset:4px;text-decoration-thickness:1px}.prose blockquote{margin:0 0 1.5em;padding:2px 0 2px 1.2em;border-left:2px solid var(--accent);color:var(--quote)}.prose blockquote p{margin:0 0 .8em}.prose blockquote p:last-child{margin:0}.prose hr{border:0;border-top:1px solid var(--rule);margin:2.5em 0}.prose hr.hl{margin-inline:auto;max-width:100%}.prose img{max-width:100%;height:auto;display:block;margin:0 auto 1.5em}.prose figure{margin:0 0 1.8em}.prose figure img{margin:0 auto}@media(prefers-color-scheme:dark){:root:not([data-theme=light]) img[src*="-ink."]{filter:invert(1)}}:root[data-theme=dark] img[src*="-ink."]{filter:invert(1)}.prose figcaption{margin-top:.7em;font-size:14px;line-height:1.7;color:var(--muted);text-align:center;letter-spacing:.02em}.prose table{display:block;overflow-x:auto;border-collapse:collapse;margin:0 0 1.5em;text-align:left;font-size:15px;line-height:1.7}.prose th,.prose td{border-bottom:1px solid var(--rule);padding:6px 12px 6px 0;vertical-align:top}.prose pre{overflow-x:auto;padding:14px 16px;background:var(--surface);font-size:14px;line-height:1.7;text-align:left}.prose code{font-size:.9em}.prose :not(pre)>code{padding:.25em .4em 0;border:1px solid var(--rule);border-radius:4px;background:var(--code-bg);font-family:inherit}.prose video,.prose iframe{display:block;margin:0 auto 1.5em}.prose .footnotes{font-size:14px;color:var(--muted)}.prose .alert{position:relative;margin:0 0 1.5em;padding:.9em 1.2em;background:var(--alert-bg);text-align:left;--alert-tick:18px;--alert-gap:6px}.prose .alert::before,.prose .alert::after{content:"";position:absolute;top:0;bottom:0;width:calc(var(--alert-gap) + 1px);pointer-events:none;background-image:linear-gradient(var(--alert-rule),var(--alert-rule)),linear-gradient(var(--alert-rule),var(--alert-rule));background-repeat:no-repeat;background-size:1px 100%,1px var(--alert-tick)}.prose .alert::before{left:0;background-position:0 0,100% 100%}.prose .alert::after{right:0;background-position:100% 0,0 0}.prose .alert>:last-child{margin-bottom:0}.prose .alert p{margin-bottom:.8em}.prose .alert-title,.prose .alert>summary{margin:0 0 .5em;font-weight:700;color:var(--quote)}.prose .alert>summary{cursor:pointer}.prose .alert:not([open])>summary{margin-bottom:0}.prose .gallery{display:grid;grid-template-columns:repeat(var(--cols,1),minmax(0,1fr));gap:12px;align-items:start;margin:2em 0}.prose .gallery p{margin:0;display:contents}.prose .gallery figure{margin:0 0 1em}@media(max-width:560px){.prose .gallery{grid-template-columns:minmax(0,1fr)}.prose .gallery.multi{grid-template-columns:repeat(2,minmax(0,1fr))}}.prose .photos{display:flex;flex-wrap:wrap;justify-content:center;align-items:flex-start;gap:12px;margin:2em 0}.prose .photos figure{margin:0;max-width:100%}.prose .photos img{width:100%;aspect-ratio:var(--ar);object-fit:cover}.blur-text{filter:blur(5px);transition:filter .3s ease}.blur-text:hover,.blur-text:focus{filter:blur(0)}.prose .icon{display:inline-flex;vertical-align:middle;color:var(--accent);text-decoration:none}.prose .icon svg{width:1.5em;height:1.5em;transition:fill .2s ease}.prose a.icon:hover svg,.prose a.icon:focus-visible svg{fill:currentColor}.page-about .prose figure img{max-width:240px;margin:0}.page-portfolio .prose table{font-size:14px}.page-portfolio .prose td,.page-portfolio .prose th{min-width:6em}.pager{display:grid;grid-template-columns:minmax(0,1fr)minmax(0,1fr);margin-top:72px}.pager-item{display:flex;flex-direction:column;min-height:110px;padding:6px 28px 6px 0}.pager-item.next{padding:6px 0 6px 28px;text-align:right;border-left:1px dashed var(--dash)}.pager-item .k{display:flex;align-items:center;gap:8px;margin-bottom:10px;font-size:13px;color:var(--muted);letter-spacing:.12em}.pager-item.next .k,.pager-item.next time{justify-content:flex-end}.pager-item .k svg{width:14px;height:14px;fill:none;stroke:currentColor;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round}.pager-item .t{font-size:17px;font-weight:700;line-height:1.55;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.pager-item time{display:flex;margin-top:auto;padding-top:14px;font-size:12px;color:var(--muted);font-variant-numeric:tabular-nums;letter-spacing:.06em}a.pager-item:hover .t{color:var(--accent)}.pager[data-set=category]{display:none}:root[data-pager=category] .has-cat .pager[data-set=date]{display:none}:root[data-pager=category] .has-cat .pager[data-set=category]{display:grid}.pager-switch{display:flex;align-items:center;gap:10px;margin:28px auto 0;padding:4px 0;border:0;background:0 0;font:inherit;font-size:13px;color:var(--muted);letter-spacing:.06em;cursor:pointer}.pager-switch[hidden]{display:none}.pager-switch .track{position:relative;flex:none;width:30px;height:16px;border:1px solid var(--muted);border-radius:999px;transition:border-color .2s ease,background-color .2s ease}.pager-switch .track::after{content:"";position:absolute;top:2px;left:2px;width:10px;height:10px;border-radius:50%;background:var(--muted);transition:transform .2s ease,background-color .2s ease}.pager-switch[aria-checked=true]{color:var(--ink)}.pager-switch[aria-checked=true] .track{border-color:var(--accent);background:var(--accent)}.pager-switch[aria-checked=true] .track::after{transform:translateX(14px);background:var(--bg)}@media(max-width:640px){.pager{grid-template-columns:minmax(0,1fr)}.pager-item{min-height:0;padding:18px 0}.pager-item.next{padding:18px 0;border-left:0;border-top:1px dashed var(--dash)}.pager-item.empty{display:none}.pager-item.empty+.pager-item.next{border-top:0}}.jump{position:fixed;right:clamp(16px,3vw,40px);bottom:calc(env(safe-area-inset-bottom,0px) + clamp(20px,4vw,40px));z-index:10}.jump button{display:grid;place-items:center;width:40px;height:40px;border:1px solid var(--rule);border-radius:50%;background:var(--bg);color:var(--muted);transition:color .2s ease,border-color .2s ease;animation:jump-in .2s ease}.jump button:hover{color:var(--accent);border-color:var(--accent)}.jump svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round}@keyframes jump-in{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}@media(prefers-reduced-motion:reduce){.jump button{animation:none}}.search{width:min(40rem,calc(100vw - 32px));max-height:min(80vh,44rem);margin-top:10vh;padding:0;border:1px solid var(--rule);background:var(--bg);color:var(--ink);font-family:var(--serif)}.search::backdrop{background:rgba(20,10,6,.45)}.search form{display:flex;align-items:center;gap:12px;padding:16px 20px;border-bottom:1px solid var(--rule)}.search input{flex:1;min-width:0;font:inherit;font-size:17px;color:inherit;background:0 0;border:0;outline:0}.search input::placeholder{color:var(--muted);opacity:.7}.search form button{color:var(--muted);font-size:13px;letter-spacing:.1em}.search form button:hover{color:var(--accent)}.search-results{list-style:none;margin:0;padding:0 20px;overflow-y:auto;max-height:calc(min(80vh,44rem) - 62px)}.search-results li{border-bottom:1px solid var(--rule)}.search-results li:last-child{border-bottom:0}.search-results a{display:block;padding-block:14px}.search-results .t{display:block;font-size:17px}.search-results .s{display:block;color:var(--muted);font-size:13px;line-height:1.7}.search-results a:hover .t,.search-results a:focus .t{color:var(--accent)}.search-results mark{background:0 0;color:var(--accent)}.search-note{padding:18px 0;color:var(--muted);font-size:14px}.site-foot{border-top:1px solid var(--rule);padding-block:48px 28px}.foot-grid{display:flex;justify-content:space-between;gap:40px;flex-wrap:wrap}.foot-grid .logo svg{height:64px}.foot-cols{display:flex;gap:clamp(40px,8vw,96px);flex-wrap:wrap}.foot-cols h2{font-size:12px;font-weight:400;color:var(--muted);letter-spacing:.2em;margin:0 0 14px}.foot-cols ul{list-style:none;margin:0;padding:0;display:grid;gap:8px;font-size:14px}.foot-cols a:hover{color:var(--accent)}.copy{display:flex;flex-wrap:wrap;gap:6px 20px;margin:44px 0 0;padding-top:18px;border-top:1px solid var(--rule);color:var(--muted);font-size:12px;letter-spacing:.08em}.copy a:hover{color:var(--accent)}.notfound{max-width:var(--col);margin-inline:auto}.notfound p{color:var(--muted)}.notfound a{color:var(--accent);text-decoration:underline;text-underline-offset:4px}