:root{color-scheme:light dark;--paper:oklch(97.5% .003 250);--paper-raise:oklch(99% .002 250);--ink:oklch(26% .02 250);--ink-soft:oklch(40% .02 250);--ink-faint:oklch(45% .015 250);--rule:oklch(26% .02 250/.15);--rule-strong:oklch(26% .02 250/.5);--accent:oklch(45% .13 158);--accent-soft:oklch(50% .14 158/.09);--code-paper:oklch(22% .015 250);--code-ink:oklch(86% .02 170);--code-dim:oklch(62% .03 180);--font-sans:"IBM Plex Sans", "IBM Plex Sans TC", "Noto Sans TC", "PingFang TC", sans-serif;--font-mono:"IBM Plex Mono", ui-monospace, "SF Mono", Menlo, monospace;--measure:38rem;--space-1:.25rem;--space-2:.5rem;--space-3:.75rem;--space-4:1rem;--space-5:1.25rem;--space-6:1.5rem;--space-8:2rem;--space-10:2.5rem;--space-12:3rem;--space-16:4rem;--ease-out:cubic-bezier(.22, 1, .36, 1);--dur:.14s}:root[data-theme=dark]{--paper:oklch(18.5% .012 220);--paper-raise:oklch(22% .014 220);--ink:oklch(87.5% .015 190);--ink-soft:oklch(70% .018 200);--ink-faint:oklch(56.5% .02 210);--rule:oklch(87.5% .015 190/.14);--rule-strong:oklch(87.5% .015 190/.45);--accent:oklch(80% .16 158);--accent-soft:oklch(80% .16 158/.1);--code-paper:oklch(15.5% .012 230);--code-ink:oklch(86% .02 170);--code-dim:oklch(58% .03 190)}@media (prefers-color-scheme:dark){:root[data-theme=auto]{--paper:oklch(18.5% .012 220);--paper-raise:oklch(22% .014 220);--ink:oklch(87.5% .015 190);--ink-soft:oklch(70% .018 200);--ink-faint:oklch(56.5% .02 210);--rule:oklch(87.5% .015 190/.14);--rule-strong:oklch(87.5% .015 190/.45);--accent:oklch(80% .16 158);--accent-soft:oklch(80% .16 158/.1);--code-paper:oklch(15.5% .012 230);--code-ink:oklch(86% .02 170);--code-dim:oklch(58% .03 190)}}html[lang=en] body{letter-spacing:.002em;line-height:1.6}*{box-sizing:border-box}html,body{overflow-x:clip}body{background:var(--paper);color:var(--ink);font-family:var(--font-sans);text-wrap:pretty;-webkit-font-smoothing:antialiased;transition:background var(--dur) var(--ease-out), color var(--dur) var(--ease-out);margin:0;font-size:1rem;line-height:1.75}a{color:inherit}a:focus-visible,button:focus-visible{outline:2px solid var(--accent);outline-offset:3px}::selection{background:var(--accent-soft)}.page{max-width:46rem;padding:0 var(--space-6);margin:0 auto}.masthead{justify-content:space-between;align-items:baseline;gap:var(--space-4);padding:var(--space-8) 0 var(--space-4);border-bottom:1px solid var(--rule-strong);display:flex}.wordmark{font-family:var(--font-mono);align-items:baseline;gap:.1ch;font-size:.9375rem;font-weight:600;text-decoration:none;display:inline-flex}.wordmark .tilde{color:var(--ink-faint)}.wordmark .cursor{background:var(--accent);width:.55ch;height:1.05em;margin-left:.35ch;animation:1.2s step-end infinite blink;display:inline-block;transform:translateY(.15em)}@keyframes blink{50%{opacity:0}}@media (prefers-reduced-motion:reduce){.wordmark .cursor{animation:none}}.masthead nav{align-items:baseline;gap:var(--space-6);font-family:var(--font-mono);font-size:.8125rem;display:flex}.masthead nav a{color:var(--ink-soft);padding:var(--space-2) 0;transition:color var(--dur) var(--ease-out);text-decoration:none}.masthead nav a:before{content:"~/";color:var(--ink-faint)}.masthead nav a:hover,.masthead nav a:hover:before{color:var(--accent)}.masthead nav a[aria-current]{color:var(--ink)}.combo{position:relative}.combo-btn{font:inherit;cursor:pointer;align-items:baseline;gap:var(--space-2);border:1px solid var(--rule);color:var(--ink-soft);background:0 0;border-radius:0;padding:.15rem .55rem;display:inline-flex}.combo-btn[aria-expanded=true]{border-color:var(--accent);color:var(--accent);background:var(--accent-soft)}.combo-arrow{color:var(--ink-faint);font-size:.85em}.combo-list{z-index:60;padding:var(--space-1) 0;white-space:nowrap;background:var(--paper-raise);border:1px solid var(--rule-strong);min-width:100%;margin:0;list-style:none;position:absolute;top:calc(100% + 4px);right:0}.combo-list [role=option]{cursor:pointer;padding:.25rem .6rem .25rem 1.4em;display:block;position:relative}.combo-list [role=option]:hover,.combo-list [role=option].is-active{background:var(--accent-soft);color:var(--accent)}.combo-list [role=option][aria-selected=true]:before{content:"›";color:var(--accent);position:absolute;left:.5em}.page-head{padding:var(--space-8) 0 var(--space-6);border-bottom:1px solid var(--rule)}.page-title{font-family:var(--font-mono);color:var(--ink-soft);margin:0;font-size:.875rem;font-weight:400}.page-title .prompt{color:var(--accent)}.page-sub{margin:var(--space-1) 0 0;color:var(--ink-faint);font-family:var(--font-mono);font-size:.75rem}.page-sub a{text-decoration:none}.page-sub a:hover{color:var(--accent)}.post-index{padding:var(--space-2) 0;margin:0;list-style:none}.post-index li{gap:var(--space-4);padding:var(--space-5) 0;border-bottom:1px dashed var(--rule);grid-template-columns:6.5rem 1fr;display:grid}.post-index li:last-child{border-bottom:none}.post-date{font-family:var(--font-mono);color:var(--ink-faint);font-variant-numeric:tabular-nums;padding-top:.5em;font-size:.75rem}.post-title{font-family:var(--font-mono);transition:color var(--dur) var(--ease-out);font-size:1rem;font-weight:500;line-height:1.5;text-decoration:none;display:inline}.post-title:before{content:"› ";color:var(--ink-faint);transition:color var(--dur) var(--ease-out)}.post-title:hover,.post-title:hover:before{color:var(--accent)}.post-series-tag{font-family:var(--font-mono);color:var(--ink-faint);margin-left:var(--space-2);white-space:nowrap;font-size:.6875rem}.post-series-tag:before{content:"["}.post-series-tag:after{content:"]"}.post-desc{margin:var(--space-1) 0 0;color:var(--ink-soft);font-size:.875rem;line-height:1.6}.post-empty{padding:var(--space-6) 0;color:var(--ink-faint);font-family:var(--font-mono);font-size:.8125rem}.post-empty:before{content:"// ";color:var(--accent)}.article-head{padding:var(--space-10) 0 var(--space-6);border-bottom:1px solid var(--rule)}.article-head h1{margin:0 0 var(--space-4);letter-spacing:-.005em;text-wrap:balance;font-size:clamp(1.625rem,4vw,2.125rem);font-weight:700;line-height:1.3}.article-meta{font-family:var(--font-mono);color:var(--ink-faint);font-variant-numeric:tabular-nums;font-size:.75rem}.article-meta:before{content:"// ";color:var(--accent)}.article-body{max-width:var(--measure)}.article-body p{margin:var(--space-5) 0}.article-body .lede{font-size:1.0625rem}.article-body .lede:before{content:"> ";color:var(--accent);font-family:var(--font-mono)}.article-body h2{margin:var(--space-10) 0 var(--space-3);font-size:1.25rem;font-weight:600;line-height:1.4}.article-body h2:before{content:"## ";color:var(--accent);font-family:var(--font-mono);font-size:.85em;font-weight:400}.article-body h3{margin:var(--space-8) 0 var(--space-2);font-size:1.0625rem;font-weight:600;line-height:1.4}.article-body h3:before{content:"### ";color:var(--accent);font-family:var(--font-mono);font-size:.85em;font-weight:400}.article-body ul,.article-body ol{padding-left:1.5em}.article-body li{margin:var(--space-1) 0}.article-body ul li::marker{content:"- ";color:var(--accent);font-family:var(--font-mono)}.article-body ol li::marker{font-family:var(--font-mono);color:var(--ink-faint)}.article-body blockquote{margin:var(--space-8) 0;padding:var(--space-3) var(--space-4);border-left:1px solid var(--accent);font-family:var(--font-mono);color:var(--ink-soft);font-size:.875rem}.article-body blockquote p{margin:0}.article-body blockquote p:before{content:"# ";color:var(--accent)}.article-body img{max-width:100%;height:auto}.article-body hr{border:0;border-top:1px dashed var(--rule);margin:var(--space-10) 0}.article-body pre{margin:var(--space-6) 0;padding:var(--space-4) var(--space-5);border:1px solid var(--rule-strong);font-family:var(--font-mono);font-size:.8125rem;line-height:1.65;overflow-x:auto;background:var(--code-paper)!important;color:var(--code-ink)!important}.article-body pre code{font-family:inherit}.article-body code{font-family:var(--font-mono);font-size:.85em}.article-body :not(pre)>code{background:var(--accent-soft);color:var(--ink);padding:.08em .35em}.article-body a{text-decoration:underline;text-decoration-color:var(--accent);text-underline-offset:.25em}.article-body a:hover{color:var(--accent)}.series-box{margin:var(--space-12) auto 0;max-width:var(--measure);border:1px solid var(--rule);padding:var(--space-5) var(--space-6)}.series-box h2{margin:0 0 var(--space-3);font-family:var(--font-mono);color:var(--ink-faint);font-size:.75rem;font-weight:500}.series-box h2:before{content:"series: ";color:var(--accent)}.series-box ol{margin:0;padding-left:1.4em;font-size:.9375rem}.series-box li{margin:var(--space-1) 0}.series-box li::marker{font-family:var(--font-mono);color:var(--ink-faint)}.series-box a{text-decoration:none}.series-box a:hover{color:var(--accent)}.series-box [aria-current]{color:var(--ink-faint)}.series-links{justify-content:space-between;gap:var(--space-4);margin-top:var(--space-4);padding-top:var(--space-3);border-top:1px dashed var(--rule);font-family:var(--font-mono);font-size:.75rem;display:flex}.series-links a{color:var(--ink-soft);white-space:nowrap;text-overflow:ellipsis;min-width:0;text-decoration:none;overflow:hidden}.series-links a:hover{color:var(--accent)}.footer{margin-top:var(--space-16);padding:var(--space-5) 0 var(--space-8);border-top:1px solid var(--rule);justify-content:space-between;gap:var(--space-4);font-family:var(--font-mono);color:var(--ink-faint);font-size:.75rem;display:flex}.footer a{color:inherit;text-decoration:none}.footer a:hover{color:var(--accent)}.footer .exit:after{content:" · exit 0"}@media (width<=40rem){.post-index li{gap:var(--space-1);grid-template-columns:1fr}.post-date{padding-top:0}.masthead{row-gap:var(--space-2);padding:var(--space-6) 0 var(--space-3);flex-wrap:wrap}.masthead nav{gap:var(--space-2) var(--space-4);flex-wrap:wrap}.series-links{gap:var(--space-2);flex-direction:column}}@media (prefers-reduced-motion:reduce){*{transition-duration:.01ms!important}}
