*,:before,:after,::backdrop{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 #0000;--un-ring-shadow:0 0 #0000;--un-shadow-inset: ;--un-shadow:0 0 #0000;--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:#93c5fd80;--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: }.i-lucide-terminal{--un-icon:url("data:image/svg+xml;utf8,%3Csvg viewBox='0 0 24 24' width='1.11em' height='1.11em' xmlns='http://www.w3.org/2000/svg' %3E%3Cpath fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M12 19h8M4 17l6-6l-6-6'/%3E%3C/svg%3E");-webkit-mask:var(--un-icon) no-repeat;mask:var(--un-icon) no-repeat;color:inherit;width:1.11em;height:1.11em;mask-size:100% 100%;-webkit-mask:var(--un-icon) no-repeat;mask:var(--un-icon) no-repeat;background-color:currentColor;width:1.11em;height:1.11em;mask-size:100% 100%}@media (width>=640px){.page-shell{padding-left:2.5rem;padding-right:2.5rem}}@keyframes astroFadeInOut{0%{opacity:1}to{opacity:0}}@keyframes astroFadeIn{0%{opacity:0;mix-blend-mode:plus-lighter}to{opacity:1;mix-blend-mode:plus-lighter}}@keyframes astroFadeOut{0%{opacity:1;mix-blend-mode:plus-lighter}to{opacity:0;mix-blend-mode:plus-lighter}}@keyframes astroSlideFromRight{0%{transform:translate(100%)}}@keyframes astroSlideFromLeft{0%{transform:translate(-100%)}}@keyframes astroSlideToRight{to{transform:translate(100%)}}@keyframes astroSlideToLeft{to{transform:translate(-100%)}}@media (prefers-reduced-motion){::view-transition-group(*),::view-transition-old(*),::view-transition-new(*),[data-astro-transition-scope]{animation:none!important}}.astro-route-announcer{clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;top:0;left:0;overflow:hidden}.i-lucide-rss{--un-icon:url("data:image/svg+xml;utf8,%3Csvg viewBox='0 0 24 24' width='1.11em' height='1.11em' xmlns='http://www.w3.org/2000/svg' %3E%3Cg fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2'%3E%3Cpath d='M4 11a9 9 0 0 1 9 9M4 4a16 16 0 0 1 16 16'/%3E%3Ccircle cx='5' cy='19' r='1'/%3E%3C/g%3E%3C/svg%3E");-webkit-mask:var(--un-icon) no-repeat;mask:var(--un-icon) no-repeat;color:inherit;background-color:currentColor;width:1.11em;height:1.11em;mask-size:100% 100%}.i-lucide-moon{--un-icon:url("data:image/svg+xml;utf8,%3Csvg viewBox='0 0 24 24' width='1.11em' height='1.11em' xmlns='http://www.w3.org/2000/svg' %3E%3Cpath fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401'/%3E%3C/svg%3E");-webkit-mask:var(--un-icon) no-repeat;mask:var(--un-icon) no-repeat;color:inherit;background-color:currentColor;width:1.11em;height:1.11em;mask-size:100% 100%}.i-lucide-sun{--un-icon:url("data:image/svg+xml;utf8,%3Csvg viewBox='0 0 24 24' width='1.11em' height='1.11em' xmlns='http://www.w3.org/2000/svg' %3E%3Cg fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2'%3E%3Ccircle cx='12' cy='12' r='4'/%3E%3Cpath d='M12 2v2m0 16v2M4.93 4.93l1.41 1.41m11.32 11.32l1.41 1.41M2 12h2m16 0h2M6.34 17.66l-1.41 1.41M19.07 4.93l-1.41 1.41'/%3E%3C/g%3E%3C/svg%3E");-webkit-mask:var(--un-icon) no-repeat;mask:var(--un-icon) no-repeat;color:inherit;background-color:currentColor;width:1.11em;height:1.11em;mask-size:100% 100%}.icon-button{border-radius:.25rem;justify-content:center;align-items:center;width:2.25rem;height:2.25rem;font-size:1.125rem;line-height:1.75rem;display:inline-flex}.sr-only{clip:rect(0,0,0,0);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.page-shell{width:100%;max-width:48rem;margin-left:auto;margin-right:auto;padding-left:1.5rem;padding-right:1.5rem}@media (width>=640px){.page-shell{padding-left:2.5rem;padding-right:2.5rem}}.i-lucide-terminal{--un-icon:url("data:image/svg+xml;utf8,%3Csvg viewBox='0 0 24 24' width='1.11em' height='1.11em' xmlns='http://www.w3.org/2000/svg' %3E%3Cpath fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M12 19h8M4 17l6-6l-6-6'/%3E%3C/svg%3E");-webkit-mask:var(--un-icon) no-repeat;mask:var(--un-icon) no-repeat;color:inherit;background-color:currentColor;width:1.11em;height:1.11em;mask-size:100% 100%}@property --bg{syntax:"<color>";inherits:true;initial-value:#fff}@property --text{syntax:"<color>";inherits:true;initial-value:#454545}@property --heading{syntax:"<color>";inherits:true;initial-value:#202020}@property --muted{syntax:"<color>";inherits:true;initial-value:#767676}@property --faint{syntax:"<color>";inherits:true;initial-value:#e8e8e8}@property --accent{syntax:"<color>";inherits:true;initial-value:#42786e}@property --code-bg{syntax:"<color>";inherits:true;initial-value:#f6f8fa}:root{color-scheme:light;--bg:#fff;--text:#454545;--heading:#202020;--muted:#767676;--faint:#e8e8e8;--hover:#f4f4f4;--accent:#42786e;--code-bg:#f6f8fa;font-synthesis:none;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Microsoft YaHei,sans-serif}:root.dark{color-scheme:dark;--bg:#121212;--text:#b8b8b8;--heading:#e8e8e8;--muted:#929292;--faint:#303030;--hover:#222;--accent:#8bbfb1;--code-bg:#1b1d20}*{box-sizing:border-box}html{background:var(--bg);scroll-behavior:smooth;scroll-padding-top:110px}body{background:var(--bg);color:var(--text);flex-direction:column;min-height:100svh;margin:0;line-height:1.8;display:flex}a{color:inherit;text-decoration:none}a,button{touch-action:manipulation}a:hover,button:hover{color:var(--heading)}a:focus-visible,button:focus-visible,summary:focus-visible{outline:2px solid var(--accent);outline-offset:5px}button{font:inherit;cursor:pointer;color:inherit;background:0 0;border:0}::selection{background:var(--faint);color:var(--heading)}.site-header{z-index:20;background:var(--bg);justify-content:space-between;align-items:center;gap:20px;padding:18px 32px;display:flex;position:sticky;top:0}.wordmark{letter-spacing:-1.5px;color:var(--heading);font-family:Georgia,Times New Roman,serif;font-size:28px;font-style:italic;line-height:1}.wordmark span{color:var(--muted)}.header-nav{align-items:center;gap:24px;display:flex}.language-switcher{justify-content:center;align-items:center;min-width:0;height:36px;font-size:14px;font-weight:500;display:inline-flex}.site-header nav{color:var(--muted)}.nav-link{align-items:center;font-size:14px;line-height:36px;display:inline-flex}.nav-link[aria-current=page]{color:var(--heading)}#theme-switcher{position:relative}.theme-light,.theme-dark{opacity:0;transition:opacity .22s,transform .32s;display:block;position:absolute;transform:rotate(-35deg)scale(.75)}[data-theme-preference=light] .theme-light,[data-theme-preference=dark] .theme-dark{opacity:1;transform:rotate(0)scale(1)}:root.theme-changing{transition:--bg .32s,--text .32s,--heading .32s,--muted .32s,--faint .32s,--accent .32s,--code-bg .32s}.page-content{flex:1;padding-top:80px;padding-bottom:100px}h1{letter-spacing:-.8px;color:var(--heading);margin:0 0 32px;font-size:34px;font-weight:700;line-height:1.3}h2,h3{color:var(--heading)}.home-intro{max-width:650px;font-size:17px;line-height:1.95}.home-intro p{margin:0 0 24px}.home-intro a,.text-link{color:var(--heading);border-bottom:1px solid #aaa;transition:border-color .15s}.home-intro a:hover,.text-link:hover{border-color:var(--accent);color:var(--accent)}.home-closing{color:var(--muted)}.social-links{color:var(--muted);align-items:center;gap:18px;margin-top:48px;font-size:14px;display:flex}.social-links a{border:0}.site-footer{color:var(--muted);justify-content:space-between;gap:20px;padding-top:22px;padding-bottom:28px;font-size:12px;display:flex}.page-description{color:var(--muted);margin:-14px 0 45px;font-size:16px}.empty-state{color:var(--muted);padding:35px 0 70px}.empty-icon{opacity:.55;margin-bottom:22px;font-size:28px;display:block}.empty-state h2{color:var(--text);margin:0 0 10px;font-size:17px;font-weight:450}.empty-state p{margin:0;font-size:14px}.post-year{margin-top:40px}.post-year>h2{color:var(--muted);margin:0 0 22px;font:15px ui-monospace,monospace}.post-list,.project-list{margin:0;padding:0;list-style:none}.post-list li{margin-bottom:34px}.post-title{color:var(--muted);font-size:17px;font-weight:450;line-height:1.6}.post-list p{color:var(--muted);margin:6px 0;font-size:14px}.post-meta{color:var(--muted);flex-wrap:wrap;gap:8px 16px;margin-top:7px;font-size:12px;display:flex}.post-meta a:hover{color:var(--accent)}.project-list li{margin:0 0 36px}.project-entry{align-items:flex-start;gap:20px;padding:12px 0;display:flex}.project-entry .project-icon{width:32px;height:32px;color:var(--muted);flex-shrink:0;margin-top:5px;transition:color .18s}.project-copy{min-width:0}.project-name{color:var(--heading);font-size:19px;font-weight:500;display:block}.project-description{color:var(--muted);margin-top:5px;font-size:14px;line-height:1.8;display:block}a.project-entry:hover .project-icon,a.project-entry:hover .project-name{color:var(--accent)}.back-link{color:var(--muted);margin-bottom:32px;font-size:13px;display:inline-block}.skip-link{z-index:100;background:var(--bg);padding:10px;position:fixed;top:-100px;left:16px}.skip-link:focus{top:10px}.article-heading{margin-bottom:40px}.article-heading h1{margin-bottom:18px;font-size:32px}.article-meta{color:var(--muted);flex-wrap:wrap;gap:8px 20px;font-size:13px;display:flex}.article-summary{color:var(--muted);margin-top:22px}.article-bottom{color:var(--muted);margin-top:56px;font-size:14px}.toc{display:none}@media (width>=1200px){.toc{width:180px;max-height:65vh;color:var(--muted);font-size:12px;display:block;position:fixed;top:190px;left:calc(50% + 400px);overflow:auto}.toc ol{margin:12px 0;padding:0;list-style:none}.toc li{margin:8px 0;line-height:1.6}.toc li[data-depth="3"]{padding-left:12px}.toc a[aria-current=true]{color:var(--heading);font-weight:650}}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,:before,:after{transition:none!important;animation:none!important}::view-transition-group(*){animation:none}}@media (width<=640px){.site-header{gap:12px;padding:16px}.wordmark{font-size:25px}.header-nav{gap:18px}.nav-link{font-size:14px}.language-switcher{min-width:0}.page-content{padding-top:55px;padding-bottom:75px}h1{font-size:30px}.home-intro{font-size:16px;line-height:2}.home-intro p{margin-bottom:24px}.social-links{margin-top:38px}.article-heading h1{overflow-wrap:anywhere;font-size:27px}}.header-nav .icon-button{flex-shrink:0;width:20px;height:36px;padding:0;position:relative}.header-nav .icon-button>span{width:20px;height:20px}.header-nav .language-switcher{min-width:0;padding:0;font-size:14px}.post-list li{flex-wrap:wrap;justify-content:flex-start;align-items:baseline;gap:2px 16px;display:flex}.post-list .post-title{width:fit-content;display:block}.post-list .post-meta{flex-shrink:0;margin:0}@media (prefers-reduced-motion:no-preference){::view-transition-group(*){animation-duration:.36s;animation-timing-function:cubic-bezier(.22,1,.36,1)}}html{scrollbar-gutter:stable}.post-title{text-underline-offset:5px;text-decoration:underline 1px #0000;transition:color .18s,text-decoration-color .18s}.post-title:hover,.post-title:focus-visible{color:var(--heading);text-decoration-color:var(--muted)}.post-title>span,.article-title-text{display:inline-block}::view-transition-group(site-header){animation:none}::view-transition-old(site-header){display:none}::view-transition-new(site-header){animation:none}
