@font-face{font-family:inter variable;src:url(/fonts/inter-variable.woff2)format('woff2');font-weight:100 900;font-display:swap;unicode-range:U+0-24F,U+259,U+1E??,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@import '/fonts/noto-sans-tc/NotoSansTC-Regular.css';@import '/fonts/noto-sans-tc/NotoSansTC-Bold.css';@font-face{font-family:cascadia code;src:url(/fonts/cascadia-code-variable.woff2)format('woff2');font-weight:200 700;font-style:normal;font-display:swap;unicode-range:U+0-24F,U+259,U+1E??,U+2000-206F,U+2074,U+20AC,U+2122,U+2190-21BB,U+2212,U+FEFF,U+FFFD}@font-face{font-family:cascadia code;src:url(/fonts/cascadia-code-italic-variable.woff2)format('woff2');font-weight:200 700;font-style:italic;font-display:swap;unicode-range:U+0-24F,U+259,U+1E??,U+2000-206F,U+2074,U+20AC,U+2122,U+2190-21BB,U+2212,U+FEFF,U+FFFD}@font-face{font-family:sarasa mono tc;src:url(/fonts/sarasa-mono-tc.woff2)format('woff2');font-weight:400;font-display:swap;size-adjust:120%;unicode-range:U+2E80-2FDF,U+3000-309F,U+30A0-312F,U+3400-4DBF,U+4E00-A48F,U+F900-FAFF,U+FE1?,U+FE30-FE4F,U+FF00-FFEF}:root{--bg:#F5F5F7;--bg-alt:#EBEBEE;--bg-code:#E8E8EC;--fg:#0A0A12;--fg-mid:#333348;--fg-muted:#5C5C78;--fg-subtle:#9090AA;--rule:#C8C8D8;--rule-strong:#0A0A12;--accent:#8D7595;--accent-alt:#a693ac;--code-fg:#0A0A12;--grid-line:rgba(158, 88, 228, 0.08);--grid-line-major:rgba(158, 88, 228, 0.14);--grid-size:48px;--grid-size-major:240px;--glow:none;--glow-strong:none;--font-sans:'Inter Variable', 'Noto Sans TC', system-ui, sans-serif;--font-mono:'Cascadia Code', 'Sarasa Mono TC', 'Menlo', 'Consolas', monospace;--measure:760px;--pad:clamp(1rem, 4vw, 2rem);--radius:0px}[data-theme=dark]{--bg:#080810;--bg-alt:#0F0F1C;--bg-code:#0C0C18;--fg:#E0E0F0;--fg-mid:#AAAAC8;--fg-muted:#6868A0;--fg-subtle:#3A3A60;--rule:#252540;--rule-strong:#E0E0F0;--accent:#a693ac;--accent-alt:#B1a0b6;--code-fg:#D8D8F0;--grid-line:rgba(158, 88, 228, 0.10);--grid-line-major:rgba(158, 88, 228, 0.20);--glow:none;--glow-strong:none}*,*::before,*::after{box-sizing:border-box}html{font-size:16px;scroll-behavior:smooth;-webkit-text-size-adjust:100%}body{margin:0;background-color:var(--bg);color:var(--fg);font-family:var(--font-sans);font-size:1rem;line-height:1.8;text-spacing-trim:space-first;font-feature-settings:'kern' 1,'liga' 1}img,svg,video{max-width:100%;display:block}a{color:var(--accent);text-decoration:none}a:hover{color:var(--accent-alt);text-decoration:underline;text-shadow:var(--glow)}.site-header{position:sticky;top:0;z-index:100;background:var(--bg);border-bottom:1px solid var(--rule)}.nav{max-width:var(--measure);margin:0 auto;padding:0 var(--pad);display:flex;align-items:stretch;gap:0;min-height:3rem}.nav-home{font-family:var(--font-mono);font-size:.82rem;font-weight:700;letter-spacing:.12em;text-transform:uppercase;color:var(--fg);text-decoration:none;margin-right:auto;display:flex;align-items:center;padding:0 1rem 0 0;border-right:1px solid var(--rule)}.nav-home:hover{color:var(--accent);text-decoration:none;text-shadow:var(--glow)}.nav-home::before{content:'[ ';color:var(--accent);font-weight:400;margin-right:.15em}.nav-home::after{content:' ]';color:var(--accent);font-weight:400;margin-left:.15em}.nav-links{list-style:none;margin:0;padding:0;display:flex;gap:0;align-items:stretch;position:relative}.nav-links li{display:flex;align-items:stretch;border-left:1px solid var(--rule)}.nav-links a{font-family:var(--font-mono);font-size:.68rem;letter-spacing:.12em;font-weight:500;color:var(--fg-muted);text-decoration:none;text-transform:uppercase;display:flex;align-items:center;padding:0 .9rem;border-bottom:2px solid transparent;transition:color .1s,border-color .1s,background .1s}.nav-links a:hover{color:var(--accent);background:color-mix(in srgb,var(--accent) 6%,transparent);border-bottom-color:var(--accent);text-decoration:none;text-shadow:var(--glow)}.nav-links a[aria-current=page]{color:var(--accent);border-bottom-color:var(--accent);background:color-mix(in srgb,var(--accent) 8%,transparent)}.theme-toggle{background:0 0;border:none;border-left:1px solid var(--rule);cursor:pointer;padding:0 .75rem;color:var(--fg-muted);font-family:var(--font-mono);font-size:.68rem;letter-spacing:.08em;transition:color .15s,background .15s;align-self:stretch;display:flex;align-items:center}.theme-toggle:hover{color:var(--accent);background:color-mix(in srgb,var(--accent) 6%,transparent)}.theme-toggle__icon::before{content:'◑'}[data-theme=dark] .theme-toggle__icon::before{content:'◐'}.nav-indicator{position:absolute;bottom:0;left:0;height:2px;background:var(--accent);box-shadow:var(--glow);pointer-events:none;transition:left .28s cubic-bezier(.4,0,.2,1),width .28s cubic-bezier(.4,0,.2,1),opacity .2s}.lang-switch{display:flex;align-items:stretch;border-left:1px solid var(--rule)}.lang-btn{font-family:var(--font-mono);font-size:.62rem;letter-spacing:.06em;background:0 0;border:none;border-right:1px solid var(--rule);cursor:pointer;padding:0 .65rem;color:var(--fg-muted);text-decoration:none;transition:color .15s,background .15s;align-self:stretch;line-height:1;display:flex;align-items:center}.lang-btn:last-child{border-right:none}.lang-btn:hover{color:var(--accent);background:color-mix(in srgb,var(--accent) 6%,transparent);text-decoration:none}.lang-btn.is-active{color:var(--accent);background:color-mix(in srgb,var(--accent) 10%,transparent);font-weight:700}.main-content{max-width:var(--measure);margin:0 auto;padding:2.5rem var(--pad)4rem;background:var(--bg);position:relative;border-left:1px solid var(--rule);border-right:1px solid var(--rule);min-height:calc(100vh - 3rem - 4rem)}.main-content::before{content:'';position:absolute;top:-1px;left:-1px;width:16px;height:16px;border-top:2px solid var(--accent);border-left:2px solid var(--accent);pointer-events:none}.main-content::after{content:'';position:absolute;top:-1px;right:-1px;width:16px;height:16px;border-top:2px solid var(--accent);border-right:2px solid var(--accent);pointer-events:none}.list-header{margin-bottom:2.5rem}.list-header-rule{height:2px;background:var(--accent);margin-bottom:0;box-shadow:var(--glow)}.list-title{font-family:var(--font-mono);font-size:clamp(1.2rem,3.5vw,1.8rem);font-weight:700;letter-spacing:.04em;text-transform:uppercase;line-height:1.15;margin:0;color:var(--fg);padding:.6rem 0 .4rem;border-bottom:1px solid var(--rule)}.list-desc{font-family:var(--font-mono);color:var(--fg-muted);font-size:.75rem;letter-spacing:.06em;margin:.6rem 0 0}.year-group{margin-bottom:2rem}.year-label{font-family:var(--font-mono);font-size:.68rem;letter-spacing:.16em;text-transform:uppercase;color:var(--accent);font-weight:600;margin:0;padding:.3rem .5rem;border:1px solid var(--rule);border-bottom:none;background:color-mix(in srgb,var(--accent) 5%,transparent);display:inline-block}.post-list{list-style:none;margin:0;padding:0;border:1px solid var(--rule)}.post-list{counter-reset:post-index}.post-list__item{border-bottom:1px solid var(--rule);counter-increment:post-index}.post-list__item:last-child{border-bottom:none}.post-list__link{display:grid;grid-template-columns:3rem 1fr auto;align-items:center;padding:.55rem .75rem .55rem 0;color:var(--fg);text-decoration:none;transition:background .1s,color .1s}.post-list__link:hover{background:color-mix(in srgb,var(--accent) 6%,transparent);color:var(--accent);text-decoration:none}.post-list__link:hover .post-list__meta{color:var(--accent-alt)}.post-list__link::before{content:counter(post-index,decimal-leading-zero);font-family:var(--font-mono);font-size:.65rem;color:var(--fg-subtle);padding:0 .65rem 0 0;border-right:1px solid var(--rule);text-align:right;align-self:stretch;display:flex;align-items:center;justify-content:flex-end}.post-list__title{font-size:.9rem;font-weight:500;text-align:left;padding-left:.75rem}.post-list__meta{font-family:var(--font-mono);font-size:.68rem;color:var(--fg-subtle);white-space:nowrap;display:flex;gap:.6rem;align-items:center;padding-left:.75rem}.post-list__tags{color:var(--fg-subtle)}.post-header{margin-bottom:2rem}.post-header-rule{height:2px;background:var(--accent);margin-bottom:0;box-shadow:var(--glow)}.post-meta{font-family:var(--font-mono);font-size:.68rem;letter-spacing:.1em;text-transform:uppercase;color:var(--fg-muted);display:flex;align-items:center;gap:.5rem;flex-wrap:wrap;margin:0;padding:.5rem 0;border-bottom:1px solid var(--rule)}.meta-sep{color:var(--fg-subtle)}.post-meta a{color:var(--fg-muted);text-decoration:none}.post-meta a:hover{color:var(--accent)}.post-title{font-family:var(--font-mono);font-size:clamp(1.4rem,4vw,2.2rem);font-weight:700;letter-spacing:-.01em;line-height:1.15;margin:.75rem 0 0;color:var(--fg)}.post-subtitle{margin:.6rem 0 0;font-family:var(--font-mono);font-size:.85rem;color:var(--fg-muted);font-weight:400;letter-spacing:.04em}.post-footer{margin-top:3rem;padding-top:0;border-top:none}.post-nav{display:flex;justify-content:space-between;gap:0;border:1px solid var(--rule)}.post-nav__prev,.post-nav__next{display:flex;flex-direction:column;gap:.2rem;text-decoration:none;flex:1;padding:.75rem 1rem;transition:background .1s}.post-nav__prev:hover,.post-nav__next:hover{background:color-mix(in srgb,var(--accent) 6%,transparent)}.post-nav__next{border-left:1px solid var(--rule);text-align:right}.post-nav__label{font-family:var(--font-mono);font-size:.62rem;letter-spacing:.12em;color:var(--fg-subtle);text-transform:uppercase}.post-nav__title{font-size:.85rem;font-weight:500;color:var(--accent)}.post-nav__prev:hover .post-nav__title,.post-nav__next:hover .post-nav__title{text-decoration:underline}.prose{font-size:1.0625rem;line-height:1.85;color:var(--fg);text-spacing-trim:space-first}.prose{counter-reset:h2-counter}.prose h2{counter-increment:h2-counter;font-family:var(--font-mono);font-size:1rem;font-weight:700;letter-spacing:.06em;text-transform:uppercase;margin:2.5rem 0 .75rem;padding:.4rem .6rem;border:1px solid var(--rule);border-left:3px solid var(--accent);display:flex;align-items:baseline;gap:.75rem;color:var(--fg);background:color-mix(in srgb,var(--accent) 4%,var(--bg))}.prose h2::before{content:counter(h2-counter,decimal-leading-zero)"/";font-family:var(--font-mono);font-size:.68rem;font-weight:400;letter-spacing:.08em;color:var(--accent);flex-shrink:0}.prose h3{font-family:var(--font-mono);font-size:.9rem;font-weight:600;letter-spacing:.06em;text-transform:uppercase;margin:1.75rem 0 .5rem;color:var(--fg);padding-left:.6rem;border-left:2px solid var(--rule)}.prose h4{font-family:var(--font-mono);font-size:.8rem;font-weight:600;text-transform:uppercase;letter-spacing:.08em;margin:1.5rem 0 .4rem;color:var(--fg-muted)}.heading-anchor{margin-left:.4rem;font-size:.8em;color:var(--fg-subtle);text-decoration:none;opacity:0;transition:opacity .15s}h2:hover .heading-anchor,h3:hover .heading-anchor,h4:hover .heading-anchor{opacity:1}.prose p{margin:0 0 1.2rem}.prose p:last-child{margin-bottom:0}.prose a{color:var(--accent);text-decoration:underline;text-underline-offset:2px}.prose a:hover{color:var(--accent-alt);text-shadow:var(--glow)}.prose strong{font-weight:700;color:var(--fg)}.prose em{font-style:italic}.prose ul,.prose ol{margin:0 0 1.2rem 1.5rem;padding:0}.prose li{margin-bottom:.3rem}.prose li>ul,.prose li>ol{margin-top:.3rem;margin-bottom:0}.prose blockquote{margin:1.5rem 0;padding:.6rem 1rem;border-left:3px solid var(--accent);border:1px solid var(--rule);border-left:3px solid var(--accent);color:var(--fg-mid);font-family:var(--font-mono);font-size:.9rem;background:color-mix(in srgb,var(--accent) 4%,var(--bg))}.prose blockquote p:last-child{margin-bottom:0}.prose hr{border:none;border-top:1px solid var(--rule);margin:2rem 0}.prose code:not(pre code){font-family:var(--font-mono);font-size:.875em;background:var(--bg-code);color:var(--accent);padding:.1em .35em;border:1px solid var(--rule)}.prose table{width:100%;border-collapse:collapse;font-size:.88rem;margin:1.5rem 0;border:1px solid var(--rule)}.prose th,.prose td{text-align:left;padding:.45rem .75rem;border-bottom:1px solid var(--rule);border-right:1px solid var(--rule)}.prose th:last-child,.prose td:last-child{border-right:none}.prose th{font-family:var(--font-mono);font-size:.68rem;letter-spacing:.08em;text-transform:uppercase;color:var(--accent);font-weight:600;background:color-mix(in srgb,var(--accent) 6%,var(--bg));border-bottom:2px solid var(--accent)}.prose tr:hover td{background:color-mix(in srgb,var(--accent) 4%,transparent)}.prose img{max-width:100%;margin:1.5rem auto;border:1px solid var(--rule)}.prose figure{margin:1.5rem 0}.prose figcaption{font-family:var(--font-mono);font-size:.68rem;letter-spacing:.04em;color:var(--fg-muted);text-align:center;margin-top:.5rem}.codeblock{margin:1.5rem 0;border:1px solid var(--rule);overflow:hidden;background:var(--bg-code);border-left:2px solid var(--accent)}.codeblock__header{display:flex;justify-content:space-between;align-items:center;padding:.3rem .8rem;background:color-mix(in srgb,var(--accent) 8%,var(--bg-code));border-bottom:1px solid var(--rule)}.codeblock__filename{font-family:var(--font-mono);font-size:.68rem;letter-spacing:.06em;color:var(--accent)}.codeblock__filename::before{content:'▸ ';color:var(--fg-subtle)}.codeblock__copy{font-family:var(--font-mono);font-size:.62rem;letter-spacing:.1em;text-transform:uppercase;background:0 0;border:1px solid var(--rule);color:var(--fg-subtle);cursor:pointer;padding:.15rem .5rem;transition:border-color .15s,color .15s,box-shadow .15s}.codeblock__copy:hover{border-color:var(--accent);color:var(--accent);box-shadow:var(--glow)}.codeblock__copy[data-copied]{color:var(--accent);border-color:var(--accent);box-shadow:var(--glow-strong)}.codeblock .highlight,.codeblock .chroma{margin:0;background:0 0}.codeblock pre,.codeblock pre code{margin:0;padding:1rem 1rem 1rem 0;overflow-x:auto;font-family:var(--font-mono);font-size:.875rem;line-height:1.7;background:0 0;color:var(--code-fg)}.codeblock pre code{padding:0}.codeblock pre .ln,.codeblock pre .lnt{display:inline-block;width:2.5rem;text-align:right;padding-right:1rem;color:var(--fg-subtle);user-select:none;font-size:.72rem;border-right:1px solid var(--rule);margin-right:.5rem}.codeblock pre .hl{display:block;background:color-mix(in srgb,var(--accent) 12%,transparent);margin:0 -1rem 0 0;padding:0 1rem 0 0;border-left:2px solid var(--accent)}:root .chroma .k{color:#7b2fbe;font-weight:600}:root .chroma .s{color:#006b3c}:root .chroma .s1{color:#006b3c}:root .chroma .s2{color:#006b3c}:root .chroma .c{color:#7a7a9a;font-style:italic}:root .chroma .c1{color:#7a7a9a;font-style:italic}:root .chroma .n{color:#0a0a12}:root .chroma .na{color:#116329}:root .chroma .nb{color:#5a2db0}:root .chroma .nc{color:#8228dc}:root .chroma .nf{color:#9e58e4}[data-theme=dark] .chroma .k{color:#bd93f9;font-weight:600}[data-theme=dark] .chroma .s{color:#50fa7b}[data-theme=dark] .chroma .s1{color:#50fa7b}[data-theme=dark] .chroma .s2{color:#50fa7b}[data-theme=dark] .chroma .c{color:#6272a4;font-style:italic}[data-theme=dark] .chroma .c1{color:#6272a4;font-style:italic}[data-theme=dark] .chroma .n{color:#e0e0f0}[data-theme=dark] .chroma .na{color:#50fa7b}[data-theme=dark] .chroma .nb{color:#8be9fd}[data-theme=dark] .chroma .nc{color:#ffb86c}[data-theme=dark] .chroma .nf{color:#bc7df0}[data-theme=dark] .codeblock{background:#0c0c18}[data-theme=dark] .codeblock pre{background:#0c0c18}.series-box{margin:2rem 0;padding:0;border:1px solid var(--rule);border-left:3px solid var(--accent);background:var(--bg-alt);overflow:hidden}.series-label{font-family:var(--font-mono);font-size:.65rem;letter-spacing:.12em;text-transform:uppercase;color:var(--accent);font-weight:600;padding:.35rem .9rem;border-bottom:1px solid var(--rule);background:color-mix(in srgb,var(--accent) 8%,var(--bg-alt))}.series-list{margin:0;padding:.75rem 1rem .75rem 1.5rem;font-size:.88rem}.series-list li{margin-bottom:.2rem}.series-list a{color:var(--accent)}.series-current{font-weight:700}.series-current a{color:var(--fg);pointer-events:none}.tag-cloud{display:flex;flex-wrap:wrap;gap:.4rem;margin-top:1rem}.tag-cloud__item{font-family:var(--font-mono);font-size:.72rem;letter-spacing:.06em;color:var(--fg-mid);border:1px solid var(--rule);padding:.2rem .55rem;text-decoration:none;transition:border-color .15s,color .15s,box-shadow .15s,background .15s;display:flex;align-items:center;gap:.3rem;text-transform:uppercase}.tag-cloud__item:hover{border-color:var(--accent);color:var(--accent);background:color-mix(in srgb,var(--accent) 6%,transparent);box-shadow:var(--glow);text-decoration:none}.tag-cloud__count{font-size:.62rem;color:var(--fg-subtle);background:var(--bg);padding:.05rem .3rem;border:1px solid var(--rule)}.search-ui{margin-top:1rem}.search-input{width:100%;font-family:var(--font-mono);font-size:.9rem;letter-spacing:.04em;padding:.6rem .9rem;border:1px solid var(--rule);border-left:3px solid var(--rule);background:var(--bg);color:var(--fg);outline:none;transition:border-color .15s,box-shadow .15s}.search-input:focus{border-color:var(--accent);border-left-color:var(--accent);box-shadow:var(--glow)}.search-input::placeholder{color:var(--fg-subtle);font-family:var(--font-mono)}.search-results{margin-top:1.5rem}.search-result{padding:.75rem;border:1px solid var(--rule);border-top:none;transition:background .1s}.search-result:first-child{border-top:1px solid var(--rule)}.search-result:hover{background:color-mix(in srgb,var(--accent) 5%,transparent)}.search-result__title{font-family:var(--font-mono);font-size:.9rem;font-weight:600;color:var(--accent);text-decoration:none;letter-spacing:.02em}.search-result__title:hover{text-decoration:underline}.search-result__meta{font-family:var(--font-mono);font-size:.62rem;letter-spacing:.08em;color:var(--fg-subtle);margin:.15rem 0 .35rem;text-transform:uppercase}.search-result__summary{font-size:.85rem;color:var(--fg-mid);line-height:1.6}.search-result__summary mark{background:color-mix(in srgb,var(--accent) 20%,transparent);color:inherit}.search-empty{font-family:var(--font-mono);font-size:.78rem;color:var(--fg-muted);padding:1rem 0;letter-spacing:.06em}.site-footer{border-top:1px solid var(--rule);margin-top:0;background:var(--bg)}.footer-inner{max-width:var(--measure);margin:0 auto;padding:1.25rem var(--pad);display:flex;justify-content:space-between;align-items:center;gap:1rem;flex-wrap:wrap;border-left:1px solid var(--rule);border-right:1px solid var(--rule)}.footer-copy{font-family:var(--font-mono);font-size:.65rem;letter-spacing:.08em;color:var(--fg-subtle);text-transform:uppercase}.footer-copy::before{content:'SYS.OK // ';color:var(--accent);opacity:.7}.footer-links{display:flex;gap:0}.footer-links a{font-family:var(--font-mono);font-size:.65rem;letter-spacing:.08em;text-transform:uppercase;color:var(--fg-muted);text-decoration:none;padding:.25rem .75rem;border-left:1px solid var(--rule);transition:color .15s,background .15s}.footer-links a:first-child{border-left:none}.footer-links a:hover{color:var(--accent);background:color-mix(in srgb,var(--accent) 6%,transparent)}@media(max-width:640px){.nav{display:grid;grid-template-columns:1fr auto;grid-template-areas:"home   toggle" "links  lang";padding:0;min-height:auto}.nav-home{grid-area:home;padding:.55rem var(--pad);border-right:none;border-bottom:1px solid var(--rule);font-size:.75rem;margin-right:0}.nav-home::before,.nav-home::after{display:none}.theme-toggle{grid-area:toggle;border-left:1px solid var(--rule);border-bottom:1px solid var(--rule);padding:0 .9rem}.nav-links{grid-area:links;overflow-x:auto;scrollbar-width:none}.nav-links::-webkit-scrollbar{display:none}.nav-links li:first-child{border-left:none}.nav-links a{min-height:44px;padding:0 .9rem;font-size:.62rem}.lang-switch{grid-area:lang;border-left:1px solid var(--rule);flex-shrink:0}.lang-btn{min-height:44px;padding:0 .75rem;font-size:.62rem}.post-nav{flex-direction:column}.post-nav__next{text-align:left;border-left:none;border-top:1px solid var(--rule)}.post-list__link{grid-template-columns:2.5rem 1fr auto}.footer-inner{flex-direction:column;align-items:flex-start;gap:.5rem}body{--grid-size:36px;--grid-size-major:180px}}@media(max-width:400px){.nav-links a{font-size:.6rem;padding:0 .45rem}.lang-btn{padding:0 .45rem;font-size:.6rem}.post-list__meta{gap:.35rem}}@media print{.site-header,.site-footer,.post-nav,.codeblock__copy,.theme-toggle{display:none}body{font-size:11pt;background-image:none;background-color:#fff;color:#000}.main-content{border:none;background:0 0}.main-content::before,.main-content::after{display:none}.prose h2{background:0 0;border:none;border-bottom:1px solid #ccc;color:#000;text-transform:none}.prose h2::before{color:#666}a[href]::after{content:" (" attr(href)")";font-size:.8em;color:#666}}