@font-face{font-family:Geist;src:url(/fonts/geist-latin-var.woff2)format("woff2");font-weight:100 900;font-style:normal;font-display:swap;unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Geist;src:url(/fonts/geist-latin-400-italic.woff2)format("woff2");font-weight:400;font-style:italic;font-display:swap;unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Geist Mono;src:url(/fonts/geist-mono-latin-var.woff2)format("woff2");font-weight:100 900;font-style:normal;font-display:swap;unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{--paper:#f6f4ee;--paper-sunk:#eef0f7;--ink:#2234a8;--ink-soft:#5a64b0;--line:#c9cde6;--grid:#e3e4ef;--prose:color-mix(in srgb, var(--ink) 88%, var(--paper));--code-text:#14206e;--code-keyword:#2234a8;--code-string:#0b5f73;--code-constant:#6a3aa0;--code-punctuation:#4a5394;--code-comment:#5f6698;--font-sans:"Geist", system-ui, -apple-system, "PingFang TC", "Noto Sans TC", sans-serif;--font-mono:"Geist Mono", ui-monospace, "SF Mono", monospace;--text-label-xs:.5625rem;--text-label:.6875rem;--text-sm:.75rem;--text-code:.875rem;--text-nav:.9375rem;--text-base:1rem;--text-lede:1.0625rem;--text-h3:1.0625rem;--text-h2:1.25rem;--text-h1:1.75rem;--text-title:clamp(1.75rem, 5vw, 2.5rem);--weight-regular:400;--weight-medium:500;--leading-body:1.75;--leading-title:1.2;--leading-label:1.35;--tracking-title:-.03em;--tracking-label:.04em;--space-1:.25rem;--space-2:.5rem;--space-3:.75rem;--space-4:1rem;--space-5:1.25rem;--space-6:1.5rem;--space-7:1.75rem;--space-8:2rem;--space-10:2.5rem;--space-12:3rem;--cell:16px;--hairline:1px;--tick:15px;--sheet:44rem;--gutter:1rem;--sheet-pad:1.5rem;--radius-pill:999px}:root[data-paper=white]{--paper:#fff}:root[data-paper=blueprint]{color-scheme:dark;--paper:#13265a;--paper-sunk:#0f1f4b;--ink:#eef1fb;--ink-soft:#9fb0dc;--line:#3d5596;--grid:#22397a;--prose:#d3daf0;--code-text:#e6ebfa;--code-keyword:#fff;--code-string:#8fe0d0;--code-constant:#d6b8ff;--code-punctuation:#aab8e0;--code-comment:#8fa0cf}@media (width>=640px){:root{--sheet-pad:2rem}}*,:before,:after{box-sizing:border-box}::selection{background:var(--ink);color:var(--paper)}html{scroll-padding-top:var(--space-8);scrollbar-gutter:stable}body{background:var(--paper);color:var(--ink);font:var(--weight-regular) var(--text-base) / var(--leading-body) var(--font-sans);-webkit-font-smoothing:antialiased;margin:0}a{color:inherit;text-decoration:underline;text-decoration-color:var(--line);text-decoration-thickness:var(--hairline);text-underline-offset:.2em;transition:text-decoration-color .15s}a:hover{text-decoration-color:var(--ink)}:focus-visible{outline:var(--hairline) solid var(--ink);outline-offset:3px}p{margin:0 0 var(--space-5)}img{max-width:100%;height:auto}.label{font:var(--text-label) / var(--leading-label) var(--font-mono);letter-spacing:var(--tracking-label);text-transform:uppercase;color:var(--ink-soft)}.skip{left:var(--space-4);padding:var(--space-2) var(--space-3);background:var(--ink);color:var(--paper);position:absolute;top:-3rem}.skip:focus{top:var(--space-4)}.grid-paper{background-image:linear-gradient(var(--line) 1px, transparent 1px), linear-gradient(90deg, var(--line) 1px, transparent 1px), linear-gradient(var(--grid) 1px, transparent 1px), linear-gradient(90deg, var(--grid) 1px, transparent 1px);background-size:calc(var(--cell) * 5) calc(var(--cell) * 5), calc(var(--cell) * 5) calc(var(--cell) * 5), var(--cell) var(--cell), var(--cell) var(--cell);background-position:-1px -1px}body{flex-direction:column;min-height:100svh;display:flex}.sheet-wrap{width:100%;max-width:calc(var(--sheet) + 2 * var(--gutter));margin:var(--space-10) auto var(--space-12);padding:0 var(--gutter);flex-direction:column;flex:1;display:flex}.sheet-wrap>*{--frame:calc(2 * var(--hairline) + 2 * var(--sheet-pad) + var(--hairline));width:calc(round(down, 100% - var(--frame), var(--cell)) + var(--frame));align-self:center}.dimension{align-items:center;gap:var(--space-2);margin-bottom:var(--space-2);display:flex}.dimension:before,.dimension:after{content:"";border-top:var(--hairline) solid var(--line);flex:1;height:7px;margin-top:6px}.dimension:before{border-left:var(--hairline) solid var(--line)}.dimension:after{border-right:var(--hairline) solid var(--line)}.sheet{border:var(--hairline) solid var(--ink);flex-direction:column;flex:1;display:flex;position:relative}.tick{width:var(--tick);height:var(--tick);position:absolute}.tick:before,.tick:after{content:"";background:var(--ink);position:absolute}.tick:before{left:calc((var(--tick) - var(--hairline)) / 2);width:var(--hairline);height:100%;top:0}.tick:after{top:calc((var(--tick) - var(--hairline)) / 2);height:var(--hairline);width:100%;left:0}.tick.tl{top:calc((var(--tick) + var(--hairline)) / -2);left:calc((var(--tick) + var(--hairline)) / -2)}.tick.tr{top:calc((var(--tick) + var(--hairline)) / -2);right:calc((var(--tick) + var(--hairline)) / -2)}.tick.bl{bottom:calc((var(--tick) + var(--hairline)) / -2);left:calc((var(--tick) + var(--hairline)) / -2)}.tick.br{bottom:calc((var(--tick) + var(--hairline)) / -2);right:calc((var(--tick) + var(--hairline)) / -2)}.sheet-body{padding:var(--sheet-pad);flex-direction:column;flex:1;display:flex}.sheet-body>main{flex:1}.site-nav{justify-content:space-between;align-items:center;gap:var(--space-4);padding:var(--space-4) var(--sheet-pad);border-bottom:var(--hairline) solid var(--ink);font-size:var(--text-nav);font-weight:var(--weight-medium);display:flex}.site-nav ul{gap:var(--space-4);margin:0;padding:0;list-style:none;display:flex}@media (width>=640px){.site-nav ul{gap:var(--space-5)}}.site-nav a{text-decoration:none}.site-nav li a[aria-current]{text-decoration:underline;text-decoration-color:var(--ink)}.mark{font-size:var(--text-h2);letter-spacing:-.04em;line-height:1}.plate{margin:0 0 var(--space-8);padding:var(--space-8) var(--space-6) var(--space-7);border:var(--hairline) solid var(--line);position:relative;overflow:hidden}.plate-coords{top:var(--space-2);right:var(--space-3);position:absolute}.plate-cell{width:var(--cell);height:var(--cell);background:var(--ink);opacity:0;pointer-events:none;transition:opacity .2s;position:absolute;top:0;left:0}.plate:hover .plate-cell{opacity:.18}@media (prefers-reduced-motion:reduce){.plate-cell{transition:none}}.page-title{margin:0 0 var(--space-4);font-size:var(--text-h1);font-weight:var(--weight-medium);letter-spacing:var(--tracking-title);line-height:var(--leading-title)}.post-title{font-size:var(--text-title)}.lede{font-size:var(--text-lede);margin:0}.post-meta{gap:var(--space-2) var(--space-5);margin-top:var(--space-5);flex-wrap:wrap;display:flex}.pill{margin-bottom:var(--space-5);padding:.15rem var(--space-3);border:var(--hairline) solid var(--ink);border-radius:var(--radius-pill);font-size:var(--text-sm);font-weight:var(--weight-medium);display:inline-block}.cards{margin:var(--space-8) 0}.card{justify-content:space-between;align-items:center;gap:var(--space-4);margin:0 0 var(--space-3);padding:var(--space-4);border:var(--hairline) solid var(--line);font-weight:var(--weight-medium);text-decoration:none;transition:border-color .15s;display:flex}.card:hover{border-color:var(--ink)}.card-left{align-items:center;gap:var(--space-4);display:flex}.card time{flex:none;width:3.5rem}.card-summary{font-weight:var(--weight-regular);color:var(--prose);font-size:.9375rem;display:block}.card>.label{flex:none;margin-left:auto}.year{margin:var(--space-8) 0 var(--space-3)}.tabs{width:fit-content;margin:0 0 var(--space-6);border:var(--hairline) solid var(--line);display:flex}.tabs a{padding:var(--space-2) var(--space-4);font-weight:var(--weight-medium);color:var(--ink-soft);text-decoration:none}.tabs a+a{border-left:var(--hairline) solid var(--line)}.tabs a:hover,.tabs a[aria-current]{color:var(--ink)}.tabs a[aria-current]{box-shadow:inset 0 -2px 0 var(--ink)}.filters{margin:0 0 var(--space-6)}.filters-inner{padding:var(--space-4) var(--space-5);border:var(--hairline) solid var(--line)}.filter-group+.filter-group{margin-top:var(--space-4)}.chips{gap:var(--space-2);margin-top:var(--space-2);flex-wrap:wrap;display:flex}.chip{align-items:baseline;gap:var(--space-1);padding:.1rem var(--space-3);border:var(--hairline) solid var(--ink);border-radius:var(--radius-pill);color:var(--ink);font:var(--weight-medium) var(--text-sm) / 1.6 var(--font-sans);cursor:pointer;background:0 0;display:inline-flex}.chip[aria-pressed=false]{border-style:dashed;border-color:var(--line);color:var(--ink-soft);font-weight:var(--weight-regular)}.chip-count{font:var(--text-label-xs) var(--font-mono);color:var(--ink-soft)}.filter-status{gap:var(--space-3);margin:var(--space-4) 0 0;display:flex}.filter-reset{font:inherit;letter-spacing:inherit;text-transform:inherit;color:var(--ink);text-decoration:underline;text-decoration-color:var(--line);cursor:pointer;background:0 0;border:0;padding:0}@media (width>=1200px){.filters{top:0;bottom:0;right:calc(100% + var(--space-8));width:12rem;margin:0;position:absolute}.filters-inner{top:var(--space-8);padding:0 var(--space-4) 0 0;border:0;border-right:var(--hairline) solid var(--line);text-align:right;position:sticky}.filters .chips,.filters .filter-status{justify-content:flex-end}}.commonplace{border-bottom:var(--hairline) solid var(--grid)}.commonplace summary{align-items:baseline;gap:var(--space-3) var(--space-4);padding:var(--space-3) 0;cursor:pointer;flex-wrap:wrap;list-style:none;display:flex}.commonplace summary::-webkit-details-marker{display:none}.commonplace summary:before{content:"+";width:1ch;font-family:var(--font-mono);color:var(--ink-soft)}.commonplace[open]:not([data-closing]) summary:before{content:"−"}.commonplace-title{font-weight:var(--weight-medium);flex:1}.commonplace summary:hover .commonplace-title{text-decoration:underline;text-decoration-color:var(--line);text-underline-offset:.2em}.commonplace-body{padding:0 0 var(--space-5) calc(1ch + var(--space-4));counter-reset:none}.commonplace-body>:last-child{margin-bottom:0}.commonplace-body a{text-decoration:none}.commonplace .attribution{margin:0 0 var(--space-4)}.commonplace .attribution em{font-style:normal}.arrow{flex:none;width:12px;height:12px;transition:transform .3s}.card:hover .arrow{transform:rotate(-12deg)}.avatar{border:var(--hairline) solid var(--line);border-radius:50%;flex:none;width:56px;height:56px}.duotone{filter:url(#duotone)}.duotone.dark-source{filter:invert()url(#duotone)}:root[data-paper=white] .duotone{filter:url(#duotone-white)}:root[data-paper=white] .duotone.dark-source{filter:invert()url(#duotone-white)}:root[data-paper=blueprint] .duotone,:root[data-paper=blueprint] .duotone.dark-source{filter:url(#duotone-blueprint)}.paper-toggle{color:inherit;font:inherit;letter-spacing:inherit;text-transform:inherit;cursor:pointer;text-underline-offset:.25em;background:0 0;border:0;padding:0;text-decoration:underline dotted #0000}.paper-toggle:hover{text-decoration-color:var(--ink-soft)}.balloon{border:var(--hairline) solid var(--ink);width:1.6rem;height:1.6rem;font:var(--weight-regular) var(--text-label) var(--font-mono);border-radius:50%;flex:none;place-items:center;display:inline-grid}.contact{gap:var(--space-2) var(--space-6);margin:var(--space-8) 0 0;color:var(--ink-soft);flex-wrap:wrap;padding:0;list-style:none;display:flex}.contact a{align-items:center;gap:var(--space-2);text-decoration:none;display:inline-flex}.contact a:hover{color:var(--ink)}.title-block{gap:var(--hairline);background:var(--line);margin:var(--space-10) calc(-1 * var(--sheet-pad)) calc(-1 * var(--sheet-pad));border-top:var(--hairline) solid var(--ink);grid-template-columns:repeat(2,1fr);display:grid}.title-block>div{padding:var(--space-2) var(--space-3);line-height:var(--leading-label);background:var(--paper);color:var(--ink)}.title-block .k{color:var(--ink-soft);font-size:var(--text-label-xs);display:block}.title-block .wide{font:var(--weight-medium) .8125rem / var(--leading-label) var(--font-sans);letter-spacing:0;text-transform:none;grid-column:1/-1}.title-block .wide span{font-weight:var(--weight-regular);color:var(--ink-soft)}@media (width>=640px){.title-block{margin-top:var(--space-12);grid-template-columns:2fr repeat(4,1fr)}.title-block .wide{grid-area:span 2}}.prose{color:var(--prose);counter-reset:section figure}.prose h2,.prose h3{color:var(--ink);font-weight:var(--weight-medium);line-height:1.35}.prose h2{margin:var(--space-12) 0 var(--space-4);font-size:var(--text-h2);letter-spacing:-.02em;counter-increment:section}.prose h2:before{content:counter(section, decimal-leading-zero);margin-bottom:var(--space-1);font:var(--text-label) var(--font-mono);letter-spacing:var(--tracking-label);color:var(--ink-soft);display:block}.prose h3{margin:var(--space-8) 0 var(--space-3);font-size:var(--text-h3)}.entry+.entry{margin-top:var(--space-12)}.entry h2{margin-top:0}.entry h2 a{text-decoration:none}.role-head{justify-content:space-between;align-items:baseline;gap:0 var(--space-4);margin-bottom:var(--space-2);flex-wrap:wrap;display:flex}.role-head h3{font-size:var(--text-base);margin:0}.role-head .label{white-space:nowrap}.entry .role{margin-top:var(--space-4)}.prose strong{color:var(--ink);font-weight:var(--weight-medium)}.prose ul{margin:0 0 var(--space-5);padding-left:var(--space-5)}.prose li{margin-bottom:var(--space-2)}.prose li::marker{color:var(--ink-soft)}.prose :not(pre)>code{white-space:nowrap;font:.875em var(--font-mono);background:var(--paper-sunk);border:var(--hairline) solid var(--line);padding:.1em .3em}.prose a code{text-decoration:inherit}.prose hr{margin:var(--space-8) 0;border:0;border-top:var(--hairline) solid var(--line)}.prose table{width:fit-content;max-width:100%;margin:var(--space-6) auto;border-collapse:collapse;font-size:.9375rem;line-height:1.5;display:block;overflow-x:auto}.prose th{font:var(--weight-regular) var(--text-label) / var(--leading-label) var(--font-mono);letter-spacing:var(--tracking-label);text-transform:uppercase;color:var(--ink-soft);text-align:left;vertical-align:bottom}.prose th,.prose td{padding:var(--space-2) var(--space-4) var(--space-2) 0;border-bottom:var(--hairline) solid var(--line);vertical-align:top}.prose blockquote{margin:0 0 var(--space-3);padding-left:var(--space-5);border-left:var(--hairline) solid var(--ink);color:var(--ink)}.prose blockquote p{margin-bottom:var(--space-3)}figure{margin:var(--space-8) 0;counter-increment:figure}figure img{border:var(--hairline) solid var(--line);width:100%;display:block}figcaption{margin-top:var(--space-2)}figcaption:before{content:"Fig. " counter(figure);margin-right:var(--space-3)}:root{--astro-code-foreground:var(--code-text);--astro-code-background:var(--paper-sunk);--astro-code-token-keyword:var(--code-keyword);--astro-code-token-function:var(--code-text);--astro-code-token-parameter:var(--code-text);--astro-code-token-string:var(--code-string);--astro-code-token-string-expression:var(--code-string);--astro-code-token-link:var(--code-string);--astro-code-token-constant:var(--code-constant);--astro-code-token-punctuation:var(--code-punctuation);--astro-code-token-comment:var(--code-comment)}pre{margin:var(--space-6) 0;padding:var(--space-4) var(--space-5);border:var(--hairline) solid var(--line);font:var(--text-code) / 1.7 var(--font-mono);overflow-x:auto}.toc{margin:0 0 var(--space-8)}.toc-inner{padding:var(--space-4) var(--space-5);border:var(--hairline) solid var(--line)}.toc ol{margin:var(--space-2) 0 0;counter-reset:toc;padding:0;list-style:none}.toc li{counter-increment:toc}.toc a{gap:var(--space-3);padding:var(--space-1) 0;color:var(--ink-soft);font-size:.875rem;line-height:1.45;text-decoration:none;display:flex}.toc a:before{content:counter(toc, decimal-leading-zero);font:var(--text-label) / 1.9 var(--font-mono)}.toc a:hover,.toc a[aria-current],.toc a[aria-current]:before{color:var(--ink)}@media (width>=1200px){.toc{top:0;bottom:0;right:calc(100% + var(--space-8));width:12rem;margin:0;position:absolute}.toc-inner{top:var(--space-8);padding:0 var(--space-4) 0 0;border:0;border-right:var(--hairline) solid var(--line);text-align:right;position:sticky}.toc a{flex-direction:row-reverse}}.replies{margin-top:var(--space-12);padding-top:var(--space-6);border-top:var(--hairline) solid var(--ink)}.replies-head{justify-content:space-between;align-items:baseline;gap:var(--space-4);margin-bottom:var(--space-6);display:flex}.replies-head h2{font-size:var(--text-h2);font-weight:var(--weight-medium);letter-spacing:-.02em;margin:0}.replies ol{margin:0;padding:0;list-style:none}.reply{padding:var(--space-4) 0;border-bottom:var(--hairline) solid var(--grid)}.reply .reply{margin-left:var(--space-5);padding-bottom:0;padding-left:var(--space-4);border-bottom:0;border-left:var(--hairline) solid var(--line)}.reply-author{align-items:center;gap:var(--space-3);font-weight:var(--weight-medium);font-size:.9375rem;display:flex}.reply-author .who{min-width:0;text-decoration:none}.reply-author .handle{font-weight:var(--weight-regular);color:var(--ink-soft)}.reply-author time{white-space:nowrap;margin-left:auto}.initials{background:var(--ink);width:28px;height:28px;color:var(--paper);font:var(--weight-medium) .6875rem var(--font-mono);border-radius:50%;flex:none;place-items:center;display:inline-grid}img.initials{object-fit:cover}.reply-text{margin:var(--space-2) 0 var(--space-2) calc(28px + var(--space-3));color:var(--prose)}.reply-stats{gap:var(--space-4);margin-left:calc(28px + var(--space-3));display:flex}.replies-cta{align-items:center;gap:var(--space-2);margin-top:var(--space-6);font-weight:var(--weight-medium);text-decoration:none;display:inline-flex}.replies-cta:hover .arrow{transform:rotate(-12deg)}
