/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */
@layer theme{:root,:host{--font-sans:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring:where(:not(iframe)){outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}html{-webkit-text-size-adjust:100%;scrollbar-gutter:stable}body{background:var(--gb-surface);color:var(--gb-on-surface);font-family:var(--gb-font-body);font-size:var(--gb-text-body);margin:0;line-height:1.6}code,pre,kbd,samp{font-family:var(--gb-font-mono)}:focus-visible{outline:2px solid var(--gb-focus-ring);outline-offset:2px}img{max-width:100%;height:auto}}@layer components{.page{min-height:100dvh;max-width:var(--gb-measure);padding-inline:var(--gb-gutter);padding-block:var(--gb-space-6);flex-direction:column;margin-inline:auto;display:flex}.site-header{top:var(--gb-space-3);z-index:var(--gb-z-sticky);justify-content:space-between;align-items:center;gap:var(--gb-space-3);margin-bottom:var(--gb-space-6);padding-block:var(--gb-space-3);padding-inline:var(--gb-space-4);background:var(--gb-surface);border:1px solid #0000;border-bottom-color:var(--gb-outline-variant);flex-wrap:wrap;transition:transform .3s,border-radius .25s,box-shadow .25s,border-color .25s;display:flex;position:sticky}.site-header.is-scrolled{border-color:var(--gb-outline-variant);border-radius:var(--gb-shape-xl);box-shadow:var(--gb-shadow-paper)}.site-header.is-hidden{transform:translateY(-100%)}.site-logo{align-items:center;gap:var(--gb-space-2);font-size:var(--gb-text-title);font-weight:700;display:inline-flex}.site-logo-link{color:var(--gb-primary);text-decoration:none}.site-logo-img{width:auto;height:28px;display:block}.site-nav{align-items:center;gap:var(--gb-space-1);font-size:var(--gb-text-label);flex-wrap:wrap;flex:auto;justify-content:flex-end;display:flex}.site-nav a{min-height:44px;padding-inline:var(--gb-space-3);border-radius:var(--gb-shape-full);color:var(--gb-on-surface-variant);align-items:center;text-decoration:none;display:inline-flex}.site-nav a[aria-current=page]{color:var(--gb-primary);font-weight:600}.site-nav .nav-external:after{content:"↗";opacity:.7;margin-left:2px;font-size:.85em}.theme-toggle,.rss-toggle,.nav-toggle{cursor:pointer;width:44px;height:44px;color:var(--gb-primary);background:0 0;border:none;flex:none;justify-content:center;align-items:center;padding:0;line-height:1;transition:color .2s;display:inline-flex}.theme-toggle{font-size:1.75rem}.theme-toggle:before{content:"◐"}html[data-theme=light] .theme-toggle:before{content:"☀"}html[data-theme=dark] .theme-toggle:before{content:"☾"}.theme-toggle:hover,.rss-toggle:hover,.nav-toggle:hover,.rss-toggle[aria-expanded=true],.nav-toggle[aria-expanded=true]{color:var(--gb-primary)}@supports (color:color-mix(in lab, red, red)){.theme-toggle:hover,.rss-toggle:hover,.nav-toggle:hover,.rss-toggle[aria-expanded=true],.nav-toggle[aria-expanded=true]{color:color-mix(in srgb, var(--gb-primary) 78%, var(--gb-on-surface))}}.header-actions{align-items:center;gap:var(--gb-space-3);flex:none;margin-left:auto;display:inline-flex}.rss-menu{flex:none;display:inline-flex;position:relative}.rss-panel{top:calc(100% + var(--gb-space-2));z-index:var(--gb-z-overlay);min-width:9rem;padding:var(--gb-space-2);background:var(--gb-surface);border:1px solid var(--gb-outline-variant);border-radius:var(--gb-shape-md);box-shadow:var(--gb-shadow-2);flex-direction:column;gap:2px;display:flex;position:absolute;right:0}.rss-panel[hidden]{display:none}.rss-panel a{min-height:40px;padding:0 var(--gb-space-3);border-radius:var(--gb-shape-sm);color:var(--gb-on-surface-variant);font-size:var(--gb-text-label);align-items:center;text-decoration:none;display:flex}.rss-panel a:hover{background:var(--gb-state-hover);color:var(--gb-primary)}.rss-menu:has(#rss-links:empty){display:none}.post-list{gap:var(--gb-space-4);flex-direction:column;margin:0;padding:0;list-style:none;display:flex}.post-card{padding:calc(var(--gb-space-5) * var(--gb-density));border:1px solid var(--gb-outline-variant);border-radius:var(--gb-shape-lg);background:var(--gb-surface-container-low);display:block}.post-card-main{text-decoration:none;display:block}.post-card-title{font-size:var(--gb-text-title);color:var(--gb-on-surface);font-weight:600}.post-meta{align-items:center;gap:var(--gb-space-2);margin-top:var(--gb-space-2);font-size:var(--gb-text-label);color:var(--gb-on-surface-variant);flex-wrap:wrap;display:flex}.post-card-date{color:var(--gb-on-surface-variant)}.tag{color:var(--gb-on-surface-variant);font-size:var(--gb-text-label);align-items:center;display:inline-flex}.tag-link{text-decoration:none}.pager{justify-content:center;align-items:center;gap:var(--gb-space-4);margin-top:var(--gb-space-7);font-size:var(--gb-text-label);color:var(--gb-on-surface-variant);display:flex}.pager a{color:var(--gb-primary);text-decoration:none}.pager a:hover{text-decoration:underline}.pager .disabled{color:var(--gb-on-surface-variant);opacity:.5}.empty{margin-top:var(--gb-space-7);text-align:center;font-size:var(--gb-text-label);color:var(--gb-on-surface-variant)}.post-article{margin-top:var(--gb-space-5);padding:var(--gb-space-7) var(--gb-space-6);background:var(--gb-surface);border:1px solid var(--gb-outline-variant);border-radius:var(--gb-shape-xl);box-shadow:var(--gb-shadow-paper)}.giscus{margin-top:var(--gb-space-5);padding:var(--gb-space-6);background:var(--gb-surface);border:1px solid var(--gb-outline-variant);border-radius:var(--gb-shape-xl);box-shadow:var(--gb-shadow-paper)}.dark .post-article,.dark .giscus,.dark .site-header.is-scrolled{box-shadow:none}.post-title{font-size:var(--gb-text-display);color:var(--gb-on-surface);font-weight:700;line-height:1.2}.post-meta-row{align-items:center;gap:var(--gb-space-2);margin-top:var(--gb-space-3);font-size:var(--gb-text-label);color:var(--gb-on-surface-variant);flex-wrap:wrap;display:flex}.year-nav{gap:var(--gb-space-2);margin:var(--gb-space-4) 0 var(--gb-space-6);flex-wrap:wrap;display:flex}.year-link{color:var(--gb-on-surface-variant);text-underline-offset:3px;font-size:var(--gb-text-label);text-decoration:underline}.year-link.active{color:var(--gb-primary);font-weight:600}.dir-map{gap:var(--gb-space-3);margin-top:var(--gb-space-5);flex-direction:column;display:flex}.dir-map-item{padding:var(--gb-space-4);border:1px solid var(--gb-outline-variant);border-radius:var(--gb-shape-lg);background:var(--gb-surface-container-low);color:var(--gb-on-surface);justify-content:space-between;align-items:center;text-decoration:none;display:flex}.dir-count{padding:2px var(--gb-space-2);border:1px solid var(--gb-outline-variant);border-radius:var(--gb-shape-full);color:var(--gb-on-surface-variant);font-size:var(--gb-text-label);align-items:center;display:inline-flex}.back-link{margin-bottom:var(--gb-space-3);color:var(--gb-primary);font-size:var(--gb-text-label);text-decoration:none;display:inline-block}.site-footer{color:var(--gb-on-surface-variant);font-size:var(--gb-text-label);margin-top:auto;line-height:1.8}.site-footer a{color:var(--gb-on-surface-variant);text-decoration:none}.site-footer a:hover{color:var(--gb-primary);text-decoration:underline}.footer-line{justify-content:center;align-items:center;gap:var(--gb-space-3);padding-top:var(--gb-space-6);border-top:1px solid var(--gb-outline-variant);flex-wrap:wrap;display:flex}.footer-beian{align-items:center;gap:4px;display:inline-flex}}@layer utilities{.prose{color:var(--tw-prose-body);max-width:65ch}.prose :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-lead);margin-top:1.2em;margin-bottom:1.2em;font-size:1.25em;line-height:1.6}.prose :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-links);font-weight:500;text-decoration:underline}.prose :where(strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-bold);font-weight:600}.prose :where(a strong):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(blockquote strong):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(thead th strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em;list-style-type:decimal}.prose :where(ol[type=A]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=A s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=I]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type=I s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type="1"]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal}.prose :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em;list-style-type:disc}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-counters);font-weight:400}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-bullets)}.prose :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:1.25em;font-weight:600}.prose :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:var(--tw-prose-hr);border-top-width:1px;margin-top:3em;margin-bottom:3em}.prose :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-quotes);border-inline-start-width:.25rem;border-inline-start-color:var(--tw-prose-quote-borders);quotes:"“""”""‘""’";margin-top:1.6em;margin-bottom:1.6em;padding-inline-start:1em;font-style:italic;font-weight:500}.prose :where(blockquote p:first-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:open-quote}.prose :where(blockquote p:last-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:close-quote}.prose :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:0;margin-bottom:.888889em;font-size:2.25em;font-weight:800;line-height:1.11111}.prose :where(h1 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:900}.prose :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:2em;margin-bottom:1em;font-size:1.5em;font-weight:700;line-height:1.33333}.prose :where(h2 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:800}.prose :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:1.6em;margin-bottom:.6em;font-size:1.25em;font-weight:600;line-height:1.6}.prose :where(h3 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:700}.prose :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:1.5em;margin-bottom:.5em;font-weight:600;line-height:1.5}.prose :where(h4 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:700}.prose :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em;display:block}.prose :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-kbd);box-shadow:0 0 0 1px var(--tw-prose-kbd-shadows), 0 3px 0 var(--tw-prose-kbd-shadows);padding-top:.1875em;padding-inline-end:.375em;padding-bottom:.1875em;border-radius:.3125rem;padding-inline-start:.375em;font-family:inherit;font-size:.875em;font-weight:500}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-code);font-size:.875em;font-weight:600}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):before,.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:"`"}.prose :where(a code):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(h1 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.875em}.prose :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.9em}.prose :where(h4 code):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(blockquote code):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(thead th code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-pre-code);background-color:var(--tw-prose-pre-bg);padding-top:.857143em;padding-inline-end:1.14286em;padding-bottom:.857143em;border-radius:.375rem;margin-top:1.71429em;margin-bottom:1.71429em;padding-inline-start:1.14286em;font-size:.875em;font-weight:400;line-height:1.71429;overflow-x:auto}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:inherit;color:inherit;font-size:inherit;font-family:inherit;line-height:inherit;background-color:#0000;border-width:0;border-radius:0;padding:0}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):before,.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:none}.prose :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){table-layout:auto;width:100%;margin-top:2em;margin-bottom:2em;font-size:.875em;line-height:1.71429}.prose :where(thead):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-th-borders)}.prose :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);vertical-align:bottom;padding-inline-end:.571429em;padding-bottom:.571429em;padding-inline-start:.571429em;font-weight:600}.prose :where(tbody tr):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-td-borders)}.prose :where(tbody tr:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:0}.prose :where(tbody td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:baseline}.prose :where(tfoot):not(:where([class~=not-prose],[class~=not-prose] *)){border-top-width:1px;border-top-color:var(--tw-prose-th-borders)}.prose :where(tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:top}.prose :where(th,td):not(:where([class~=not-prose],[class~=not-prose] *)){text-align:start}.prose :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-captions);margin-top:.857143em;font-size:.875em;line-height:1.42857}.prose{--tw-prose-body:oklch(37.3% .034 259.733);--tw-prose-headings:oklch(21% .034 264.665);--tw-prose-lead:oklch(44.6% .03 256.802);--tw-prose-links:oklch(21% .034 264.665);--tw-prose-bold:oklch(21% .034 264.665);--tw-prose-counters:oklch(55.1% .027 264.364);--tw-prose-bullets:oklch(87.2% .01 258.338);--tw-prose-hr:oklch(92.8% .006 264.531);--tw-prose-quotes:oklch(21% .034 264.665);--tw-prose-quote-borders:oklch(92.8% .006 264.531);--tw-prose-captions:oklch(55.1% .027 264.364);--tw-prose-kbd:oklch(21% .034 264.665);--tw-prose-kbd-shadows:oklab(21% -.00316127 -.0338527/.1);--tw-prose-code:oklch(21% .034 264.665);--tw-prose-pre-code:oklch(92.8% .006 264.531);--tw-prose-pre-bg:oklch(27.8% .033 256.848);--tw-prose-th-borders:oklch(87.2% .01 258.338);--tw-prose-td-borders:oklch(92.8% .006 264.531);--tw-prose-invert-body:oklch(87.2% .01 258.338);--tw-prose-invert-headings:#fff;--tw-prose-invert-lead:oklch(70.7% .022 261.325);--tw-prose-invert-links:#fff;--tw-prose-invert-bold:#fff;--tw-prose-invert-counters:oklch(70.7% .022 261.325);--tw-prose-invert-bullets:oklch(44.6% .03 256.802);--tw-prose-invert-hr:oklch(37.3% .034 259.733);--tw-prose-invert-quotes:oklch(96.7% .003 264.542);--tw-prose-invert-quote-borders:oklch(37.3% .034 259.733);--tw-prose-invert-captions:oklch(70.7% .022 261.325);--tw-prose-invert-kbd:#fff;--tw-prose-invert-kbd-shadows:#ffffff1a;--tw-prose-invert-code:#fff;--tw-prose-invert-pre-code:oklch(87.2% .01 258.338);--tw-prose-invert-pre-bg:#00000080;--tw-prose-invert-th-borders:oklch(44.6% .03 256.802);--tw-prose-invert-td-borders:oklch(37.3% .034 259.733);font-size:1rem;line-height:1.75}.prose :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;margin-bottom:.5em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose :where(.prose>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(.prose>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(.prose>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;padding-inline-start:1.625em}.prose :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding-top:.571429em;padding-inline-end:.571429em;padding-bottom:.571429em;padding-inline-start:.571429em}.prose :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(.prose>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(.prose>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}}:root{--gb-shape-xs:4px;--gb-shape-sm:8px;--gb-shape-md:12px;--gb-shape-lg:16px;--gb-shape-xl:32px;--gb-shape-full:9999px;--gb-space-1:4px;--gb-space-2:8px;--gb-space-3:12px;--gb-space-4:16px;--gb-space-5:24px;--gb-space-6:32px;--gb-space-7:48px;--gb-space-8:64px;--gb-density:1;--gb-gutter:16px;--gb-measure:48rem;--gb-z-base:0;--gb-z-sticky:100;--gb-z-overlay:1000;--gb-z-fab:1100;--gb-z-toast:1200;--gb-font-body:-apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Microsoft YaHei", "Noto Sans SC", sans-serif;--gb-font-display:var(--gb-font-body);--gb-font-mono:ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;--gb-text-display:clamp(1.75rem, 1.15rem + 2.6vw, 2.25rem);--gb-text-headline:clamp(1.4rem, 1.05rem + 1.5vw, 1.75rem);--gb-text-title:1.125rem;--gb-text-body:1rem;--gb-text-label:.8125rem;--gb-primary:#3b5bdb;--gb-on-primary:#fff;--gb-primary-container:#eef2ff;--gb-on-primary-container:#1c2e6b;--gb-secondary:#71717a;--gb-on-secondary:#fff;--gb-error:#dc2626;--gb-on-error:#fff;--gb-outline:#d4d4d8;--gb-outline-variant:#e8e8ea;--gb-surface:#fff;--gb-surface-dim:#fff;--gb-surface-bright:#fff;--gb-surface-container-lowest:#fff;--gb-surface-container-low:#fff;--gb-surface-container:#fff;--gb-surface-container-high:#f4f4f5;--gb-surface-container-highest:#e4e4e7;--gb-on-surface:#18181b;--gb-on-surface-variant:#71717a;--gb-shadow-1:0 1px 2px #18181b0d;--gb-shadow-2:0 6px 24px #18181b14;--gb-shadow-paper:0 1px 2px #18181b08, 0 6px 22px #18181b0b;--gb-state-hover:var(--gb-primary)}@supports (color:color-mix(in lab, red, red)){:root{--gb-state-hover:color-mix(in srgb, var(--gb-primary) 8%, transparent)}}:root{--gb-state-focus:var(--gb-primary)}@supports (color:color-mix(in lab, red, red)){:root{--gb-state-focus:color-mix(in srgb, var(--gb-primary) 10%, transparent)}}:root{--gb-state-pressed:var(--gb-primary)}@supports (color:color-mix(in lab, red, red)){:root{--gb-state-pressed:color-mix(in srgb, var(--gb-primary) 10%, transparent)}}:root{--gb-focus-ring:var(--gb-primary);--gb-hl-bg:#fafafa;--gb-hl-fg:#24292e;--gb-hl-comment:#6a737d;--gb-hl-keyword:#d73a49;--gb-hl-func:#6f42c1;--gb-hl-string:#032f62;--gb-hl-number:#005cc5;--gb-hl-variable:#e36209;--gb-hl-section:#22863a;--gb-toc-width:14rem;--gb-zoom-overlay:#18181bb8;--gb-error-code-size:clamp(6rem, 22vw, 13rem)}.prose{--tw-prose-body:var(--gb-on-surface);--tw-prose-headings:var(--gb-on-surface);--tw-prose-lead:var(--gb-on-surface-variant);--tw-prose-links:var(--gb-primary);--tw-prose-bold:var(--gb-on-surface);--tw-prose-counters:var(--gb-on-surface-variant);--tw-prose-bullets:var(--gb-outline);--tw-prose-hr:var(--gb-outline-variant);--tw-prose-quotes:var(--gb-on-surface-variant);--tw-prose-quote-borders:var(--gb-outline-variant);--tw-prose-captions:var(--gb-on-surface-variant);--tw-prose-kbd:var(--gb-on-surface);--tw-prose-kbd-shadows:15 23 42;--tw-prose-code:var(--gb-on-surface);--tw-prose-pre-code:var(--gb-hl-fg);--tw-prose-pre-bg:var(--gb-hl-bg);--tw-prose-th-borders:var(--gb-outline-variant);--tw-prose-td-borders:var(--gb-outline-variant);max-width:none;font-size:var(--gb-text-body);color:var(--gb-on-surface);line-height:1.75}.prose :where(h2,h3):not(:first-child){margin-top:var(--gb-space-6)}.prose :where(table){display:block;overflow-x:auto}.post-article pre{background:var(--gb-hl-bg);border:1px solid var(--gb-outline-variant);border-radius:var(--gb-shape-md);padding:0;overflow:hidden}.post-article pre code{padding:var(--gb-space-4);color:var(--gb-hl-fg);background:0 0;font-size:.875rem;display:block;overflow-x:auto}.hljs-comment,.hljs-quote{color:var(--gb-hl-comment);font-style:italic}.hljs-keyword,.hljs-selector-tag,.hljs-literal,.hljs-doctag,.hljs-meta .hljs-keyword{color:var(--gb-hl-keyword)}.hljs-title,.hljs-title.function_,.hljs-name{color:var(--gb-hl-func)}.hljs-section{color:var(--gb-hl-section);font-weight:700}.hljs-string,.hljs-regexp,.hljs-addition,.hljs-meta .hljs-string{color:var(--gb-hl-string)}.hljs-number,.hljs-built_in,.hljs-type,.hljs-symbol,.hljs-bullet,.hljs-link{color:var(--gb-hl-number)}.hljs-variable,.hljs-template-variable,.hljs-attr,.hljs-attribute,.hljs-tag{color:var(--gb-hl-variable)}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}.hljs-deletion{color:var(--gb-hl-keyword)}#page-title:empty,.year-nav:empty,.dir-map:empty,.site-footer .footer-line:empty{display:none}@media (min-width:768px){:root{--gb-gutter:24px}}@media (max-width:767px){.post-article,.giscus{padding:var(--gb-space-5) var(--gb-space-4);border-radius:var(--gb-shape-lg)}}@media (prefers-reduced-motion:reduce){*,:before,:after{transition:none!important;animation:none!important}}post-toc{right:var(--gb-space-4);bottom:calc(var(--gb-space-7) + env(safe-area-inset-bottom,0px));z-index:var(--gb-z-overlay);width:min(20rem, calc(100vw - 2 * var(--gb-gutter)));max-height:60vh;padding:var(--gb-space-2) var(--gb-space-3);border:1px solid var(--gb-outline-variant);border-radius:var(--gb-shape-lg);background:var(--gb-surface);box-shadow:var(--gb-shadow-2);font-size:var(--gb-text-label);opacity:0;visibility:hidden;transform:translateY(var(--gb-space-3));transition:opacity .2s,transform .2s,visibility .2s;position:fixed;overflow-y:auto}post-toc.is-open{opacity:1;visibility:visible;transform:none}post-toc:empty{display:none}.toc-head{width:100%;margin-bottom:var(--gb-space-1);padding:var(--gb-space-1) var(--gb-space-2);color:var(--gb-on-surface);font:inherit;text-align:left;cursor:pointer;background:0 0;border:none;font-weight:600;display:block}post-toc .toc-list{padding-left:var(--gb-space-3);margin:0;list-style:none}post-toc>.toc-list{padding-left:0}post-toc .toc-list-item{margin:1px 0}post-toc .toc-link{min-height:32px;padding:var(--gb-space-1) var(--gb-space-2);border-radius:var(--gb-shape-sm);color:var(--gb-on-surface-variant);overflow-wrap:anywhere;line-height:1.5;text-decoration:none;display:block}post-toc .toc-link:hover{background:var(--gb-state-hover);color:var(--gb-primary)}post-toc .toc-link.is-active-link{color:var(--gb-primary);font-weight:600}@media (min-width:1280px){post-toc{top:6.5rem;bottom:auto;left:calc(50% - var(--gb-measure) / 2 - var(--gb-toc-width) - var(--gb-space-5));width:var(--gb-toc-width);max-height:calc(100vh - 9rem);z-index:var(--gb-z-sticky);opacity:1;visibility:visible;background:var(--gb-surface-container-low);box-shadow:none;margin:0;position:fixed;right:auto;transform:none}post-toc:not(.few-entries) .toc-head{cursor:default}post-toc.few-entries:not(.is-open) .toc-list{display:none}post-toc.few-entries .toc-head:after{content:"▸";margin-left:var(--gb-space-2);color:var(--gb-on-surface-variant);font-size:.85em}post-toc.few-entries.is-open .toc-head:after{content:"▾"}}reading-progress{z-index:var(--gb-z-overlay);background:var(--gb-primary);pointer-events:none;width:0;height:3px;transition:width .1s linear;display:block;position:fixed;top:0;left:0}.fab-cluster{right:var(--gb-space-4);bottom:calc(var(--gb-space-4) + env(safe-area-inset-bottom,0px));z-index:var(--gb-z-fab);gap:var(--gb-space-2);opacity:0;visibility:hidden;flex-direction:column;transition:opacity .2s;display:flex;position:fixed}.fab-cluster.is-visible{opacity:1;visibility:visible}.fab-cluster .fab{width:44px;height:44px;color:var(--gb-primary);cursor:pointer;background:0 0;border:none;justify-content:center;align-items:center;padding:0;line-height:1;transition:color .2s;display:inline-flex}.fab-cluster .fab:hover{color:var(--gb-primary)}@supports (color:color-mix(in lab, red, red)){.fab-cluster .fab:hover{color:color-mix(in srgb, var(--gb-primary) 78%, var(--gb-on-surface))}}.fab-cluster .fab svg{fill:currentColor;width:28px;height:28px}@media (min-width:1280px){.fab-cluster{right:calc(50% - var(--gb-measure) / 2 - 32px)}.fab-cluster .fab-toc{display:none}}.share-menu{min-width:8rem;padding:var(--gb-space-2);background:var(--gb-surface);border:1px solid var(--gb-outline-variant);border-radius:var(--gb-shape-md);box-shadow:var(--gb-shadow-2);flex-direction:column;gap:2px;display:flex;position:absolute;bottom:0;right:52px}.share-menu[hidden]{display:none}.share-menu button{min-height:40px;padding:0 var(--gb-space-3);border-radius:var(--gb-shape-sm);color:var(--gb-on-surface-variant);font-size:var(--gb-text-label);text-align:left;cursor:pointer;background:0 0;border:none;align-items:center;display:flex}.share-menu button:hover{background:var(--gb-state-hover);color:var(--gb-primary)}.post-article pre{position:relative}.code-copy{top:var(--gb-space-2);right:var(--gb-space-2);z-index:1;min-height:28px;padding:2px var(--gb-space-2);border:1px solid var(--gb-outline-variant);border-radius:var(--gb-shape-sm);background:var(--gb-surface-container-high);color:var(--gb-on-surface-variant);font-size:var(--gb-text-label);font-family:var(--gb-font-body);cursor:pointer;opacity:0;align-items:center;gap:4px;transition:opacity .2s,color .2s;display:inline-flex;position:absolute}.post-article pre:hover .code-copy,.code-copy:focus-visible{opacity:1}.code-copy.is-copied{color:var(--gb-primary);opacity:1}.medium-zoom-overlay{z-index:var(--gb-z-toast)!important;background:var(--gb-zoom-overlay)!important}.medium-zoom--opened .medium-zoom-overlay{background:var(--gb-zoom-overlay)!important}.medium-zoom-image--opened{z-index:calc(var(--gb-z-toast) + 1)!important}.prose img[data-zoomable]{cursor:zoom-in}.katex-display{margin:var(--gb-space-5) 0;padding-block:var(--gb-space-1);overflow:auto hidden}.katex{font-size:1em}.post-card-cover{aspect-ratio:16/9;width:100%;margin-bottom:var(--gb-space-3);border-radius:var(--gb-shape-md);object-fit:cover;background:var(--gb-surface-container-high);display:block}.post-card-summary{margin-top:var(--gb-space-2);color:var(--gb-on-surface-variant);font-size:var(--gb-text-label);-webkit-line-clamp:2;-webkit-box-orient:vertical;line-height:1.6;display:-webkit-box;overflow:hidden}.tag-cloud{justify-content:center;align-items:baseline;gap:var(--gb-space-3);margin:var(--gb-space-6) 0;flex-wrap:wrap;display:flex}.tag-cloud-item{padding:var(--gb-space-1) var(--gb-space-2);color:var(--gb-on-surface-variant);line-height:1.3;font-size:var(--gb-text-body);align-items:center;gap:4px;text-decoration:none;display:inline-flex}.tag-cloud-item:hover{color:var(--gb-primary)}.tag-cloud-count{color:var(--gb-on-surface-variant);font-size:var(--gb-text-label);opacity:.7}.error-page{justify-content:center;align-items:center;gap:var(--gb-space-4);padding:var(--gb-space-8) 0;text-align:center;flex-direction:column;flex:auto;display:flex}.error-code{font-size:var(--gb-error-code-size);color:var(--gb-outline-variant);letter-spacing:.02em;font-weight:800;line-height:1}.error-message{font-size:var(--gb-text-headline);color:var(--gb-on-surface)}.error-desc{color:var(--gb-on-surface-variant);font-size:var(--gb-text-body)}.error-home{min-height:44px;margin-top:var(--gb-space-3);padding:0 var(--gb-space-5);border-radius:var(--gb-shape-full);background:var(--gb-primary);color:var(--gb-on-primary);font-size:var(--gb-text-label);align-items:center;text-decoration:none;display:inline-flex}@media (max-width:767px){.code-copy{opacity:.7}}.prose :where(h1,h2,h3,h4,h5,h6) .heading-anchor{opacity:0;color:var(--gb-on-surface-variant);margin-left:.3em;font-weight:400;text-decoration:none;transition:opacity .2s}.prose :where(h1,h2,h3,h4,h5,h6) .heading-anchor:before{content:"#"}.prose :where(h1,h2,h3,h4,h5,h6):hover .heading-anchor,.heading-anchor:focus-visible{opacity:1}.giscus-fallback{margin-top:var(--gb-space-5);padding:var(--gb-space-5);border:1px solid var(--gb-outline-variant);border-radius:var(--gb-shape-lg);background:var(--gb-surface-container-low);color:var(--gb-on-surface-variant);text-align:center;font-size:var(--gb-text-label);text-decoration:none;display:block}.giscus-fallback:hover{color:var(--gb-primary)}@media (max-width:767px){.site-nav{top:calc(100% + var(--gb-space-2));left:var(--gb-space-3);right:var(--gb-space-3);z-index:var(--gb-z-overlay);padding:var(--gb-space-2);background:var(--gb-surface);border:1px solid var(--gb-outline-variant);border-radius:var(--gb-shape-md);box-shadow:var(--gb-shadow-2);flex-direction:column;flex:none;align-items:stretch;gap:2px;display:none;position:absolute}.site-nav.is-open{display:flex}.site-nav a{justify-content:flex-start}}@media (min-width:768px){.nav-toggle{display:none}}:root{--gb-font-body:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "PingFang SC", "Microsoft YaHei", "Noto Sans SC", sans-serif;--gb-font-display:var(--gb-font-body);--gb-font-mono:ui-monospace, SFMono-Regular, Menlo, Consolas, "Liberation Mono", monospace;--gb-primary:#000;--gb-on-primary:#fff;--gb-primary-container:#f4f4f5;--gb-on-primary-container:#18181b;--gb-secondary:#71717a;--gb-on-secondary:#fff;--gb-error:#dc2626;--gb-on-error:#fff;--gb-outline:#d4d4d8;--gb-outline-variant:#e8e8ea;--gb-surface:#fff;--gb-surface-dim:#fff;--gb-surface-bright:#fff;--gb-surface-container-lowest:#fff;--gb-surface-container-low:#fff;--gb-surface-container:#fff;--gb-surface-container-high:#f4f4f5;--gb-surface-container-highest:#e4e4e7;--gb-on-surface:#18181b;--gb-on-surface-variant:#71717a;--gb-zoom-overlay:#18181bb8;--gb-shadow-1:0 1px 2px #18181b0d;--gb-shadow-2:0 6px 24px #18181b14;--gb-hl-bg:#fafafa;--gb-hl-fg:#24292e;--gb-hl-comment:#6a737d;--gb-hl-keyword:#d73a49;--gb-hl-func:#6f42c1;--gb-hl-string:#032f62;--gb-hl-number:#005cc5;--gb-hl-variable:#e36209;--gb-hl-section:#22863a}.dark{--gb-primary:#fff;--gb-on-primary:#000;--gb-primary-container:#1a1a1a;--gb-on-primary-container:#ededed;--gb-secondary:#94a3b8;--gb-on-secondary:#0b0b0b;--gb-error:#f87171;--gb-on-error:#0b0b0b;--gb-outline:#3a3a3a;--gb-outline-variant:#262626;--gb-surface:#000;--gb-surface-dim:#000;--gb-surface-bright:#1a1a1a;--gb-surface-container-lowest:#000;--gb-surface-container-low:#0a0a0a;--gb-surface-container:#121212;--gb-surface-container-high:#1a1a1a;--gb-surface-container-highest:#222;--gb-on-surface:#ededed;--gb-on-surface-variant:#a1a1aa;--gb-zoom-overlay:#000000e0;--gb-shadow-1:0 1px 2px #0009;--gb-shadow-2:0 6px 24px #000000b3;--gb-hl-bg:#0d0d0d;--gb-hl-fg:#c9d1d9;--gb-hl-comment:#8b949e;--gb-hl-keyword:#ff7b72;--gb-hl-func:#d2a8ff;--gb-hl-string:#a5d6ff;--gb-hl-number:#79c0ff;--gb-hl-variable:#ffa657;--gb-hl-section:#7ee787}