@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}}.footer{border-top:1px solid var(--rule);flex-wrap:wrap;justify-content:space-between;gap:.5rem 1.5rem;margin-top:auto;padding-block:1.5rem 2.5rem;display:flex}.footer-row{flex-wrap:wrap;gap:.5rem 1.25rem;display:flex}.footer-links,.footer-langs{gap:1rem;display:flex}.footer-langs a{text-decoration:underline;text-decoration-color:var(--rule-strong);text-underline-offset:.2em}.footer-langs a:hover{text-decoration-color:currentColor}.theme-toggle[data-astro-cid-l6lhmie6]{color:var(--muted);align-items:center;padding:.25rem;transition:color .15s;display:inline-flex}.theme-toggle[data-astro-cid-l6lhmie6]:hover{color:var(--fg)}.icon-moon[data-astro-cid-l6lhmie6]{display:none}:root[data-theme=dark] .icon-moon[data-astro-cid-l6lhmie6]{display:block}:root[data-theme=dark] .icon-sun[data-astro-cid-l6lhmie6]{display:none}@media (prefers-color-scheme:dark){:root:not([data-theme=light]) .icon-moon[data-astro-cid-l6lhmie6]{display:block}:root:not([data-theme=light]) .icon-sun[data-astro-cid-l6lhmie6]{display:none}}.header{z-index:10;background:var(--bg);position:sticky;top:0}.header-inner{border-bottom:1px solid var(--rule);justify-content:space-between;align-items:center;gap:1.5rem;padding-block:1rem;display:flex;position:relative}.header-inner:after{content:"";top:calc(100% + 1px);pointer-events:none;background:linear-gradient(to bottom, var(--bg) 0%, color-mix(in srgb, var(--bg) 92%, transparent) 18%, color-mix(in srgb, var(--bg) 70%, transparent) 40%, color-mix(in srgb, var(--bg) 35%, transparent) 68%, transparent 100%);height:5rem;position:absolute;inset-inline:0}.brand{align-items:center;gap:.6rem;font-weight:500;display:inline-flex}.brand-photo{object-fit:cover;border:1px solid var(--rule);border-radius:50%;width:1.75rem;height:1.75rem}.nav{align-items:center;gap:1rem;font-size:.9375rem;display:flex}.nav-link{color:var(--muted);transition:color .15s}.nav-link:hover,.nav-link.is-active{color:var(--fg)}.suggest[data-astro-cid-2eazxm32]{color:var(--muted);border-bottom:1px solid var(--rule);justify-content:space-between;align-items:center;gap:1rem;padding-block:.5rem;font-size:.875rem;display:flex}.suggest[data-astro-cid-2eazxm32][hidden]{display:none}button[data-astro-cid-2eazxm32]{color:var(--faint);padding:.25rem;font-size:1.1rem;line-height:1}button[data-astro-cid-2eazxm32]:hover{color:var(--fg)}.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}:root{color-scheme:light dark;--bg:#fcfcfa;--bg-2:#f3f3ef;--fg:#1c1c1a;--muted:#6f6f6a;--faint:#a8a8a1;--rule:#e6e6e1;--rule-strong:#cfcfc8;--selection:#e9e4d3;--font:"JetBrains Mono", ui-monospace, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace;--mono:var(--font);--measure:38rem;--gutter:1.25rem;--radius:6px;--thumb:2.25rem;--year-w:2.75rem}@media (prefers-color-scheme:dark){:root:not([data-theme=light]){color-scheme:dark;--bg:#111110;--bg-2:#1a1a19;--fg:#e8e8e3;--muted:#9c9c95;--faint:#66665f;--rule:#262624;--rule-strong:#3a3a37;--selection:#3a3625}}:root[data-theme=dark]{color-scheme:dark;--bg:#111110;--bg-2:#1a1a19;--fg:#e8e8e3;--muted:#9c9c95;--faint:#66665f;--rule:#262624;--rule-strong:#3a3a37;--selection:#3a3625}:root[data-theme=light]{color-scheme:light}*,:before,:after{box-sizing:border-box;margin:0;padding:0}html{-webkit-text-size-adjust:100%;text-size-adjust:100%;scroll-behavior:smooth;scroll-padding-top:5rem}body{background:var(--bg);min-height:100vh;color:var(--fg);font-family:var(--font);-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility;font-size:.9375rem;line-height:1.6}::selection{background:var(--selection)}img,picture,svg,video,iframe{max-width:100%;height:auto;display:block}ul,ol{list-style:none}a{color:inherit;text-decoration:none}button,input,select,textarea{font:inherit;color:inherit;background:0 0;border:0}button{cursor:pointer}h1,h2,h3,h4{text-wrap:pretty;font-weight:500;line-height:1.25}:target{scroll-margin-block:4ex}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important}}.wrap{width:100%;max-width:calc(var(--measure) + 2 * var(--gutter));padding-inline:var(--gutter);margin:0 auto}.site{flex-direction:column;min-height:100vh;display:flex}.site>main{flex:1;padding-block:2.5rem 5rem}.label{font-family:var(--mono);letter-spacing:.02em;text-transform:lowercase;color:var(--faint);margin-block:3rem .75rem;font-size:.75rem}.meta{font-family:var(--mono);color:var(--muted);font-variant-numeric:tabular-nums;font-size:.75rem}.link{text-decoration:underline;text-decoration-color:var(--rule-strong);text-underline-offset:.2em;text-decoration-thickness:1px;transition:text-decoration-color .15s}.link:hover{text-decoration-color:currentColor}.row{--row-pad:1rem;padding:var(--row-pad) 0;--node-y:calc(var(--row-pad) + .15rem + .6rem);grid-template-columns:auto 1fr auto;align-items:start;column-gap:1rem;display:grid;position:relative}.timeline .row:before{content:"";top:0;bottom:0;right:calc(var(--year-w) / 2 - .5px);background:var(--rule);width:1px;position:absolute}.timeline .row:first-child:before{top:var(--node-y)}.timeline .row:last-child:before{bottom:calc(100% - var(--node-y))}.timeline--open .row:last-child:before{bottom:0}.row-title:after{content:"";position:absolute;inset:0}.row .row-title{text-underline-offset:.2em;text-decoration:underline 1px #0000;transition:text-decoration-color .15s}.row:hover .row-title{text-decoration-color:var(--rule-strong)}.row-thumb{width:var(--thumb);height:var(--thumb);background:var(--bg-2);border:1px solid var(--rule);border-radius:8px;margin-top:.1rem;overflow:hidden}.row-thumb img{object-fit:cover;width:100%;height:100%}.row-thumb--empty{border-style:dashed}.row-title{font-size:.9375rem;font-weight:500}.row-desc{color:var(--muted);margin-top:.1rem;font-size:.875rem;line-height:1.45}.row-aside{white-space:nowrap;padding-top:.15rem}.row-year{width:var(--year-w);text-align:center;background:var(--bg);display:inline-block;position:relative}.peek-list{position:relative}.peek{z-index:5;pointer-events:none;opacity:0;border:1px solid var(--rule);border-radius:var(--radius);background:var(--bg-2);width:20rem;max-width:60vw;transition:opacity .15s;position:absolute;top:0;left:0;overflow:hidden;box-shadow:0 12px 32px -16px #00000059}.peek img{width:100%;height:auto}.peek-dots{justify-content:center;gap:.3rem;padding:.45rem 0 .5rem;display:flex}.peek-dots:empty{display:none}.peek-dots span{background:var(--rule-strong);border-radius:50%;width:4px;height:4px;transition:background .15s}.peek-dots span.is-on{background:var(--muted)}.peek-list.is-peeking .peek{opacity:1}.peek-list .row{transition:opacity .15s}.peek-list.is-peeking .row:not(:hover){opacity:.45}@media (hover:none){.peek{display:none}}.title{max-width:32rem;font-size:1.25rem;font-weight:500;line-height:1.4}.lede{color:var(--muted);max-width:34rem;margin-top:.75rem}.prose{font-size:.9375rem;line-height:1.65}.prose>*+*{margin-top:1.1em}.prose h2,.prose h3,.prose h4{margin-top:2.4em;font-weight:500}.prose h2{font-size:1.125rem}.prose h3{font-size:1rem}.prose h4{color:var(--muted);font-size:.9375rem}.prose h2+*,.prose h3+*,.prose h4+*{margin-top:.6em}.prose a{text-decoration:underline;text-decoration-color:var(--rule-strong);text-underline-offset:.2em;text-decoration-thickness:1px}.prose a:hover{text-decoration-color:currentColor}.prose ul,.prose ol{padding-inline-start:1.4em}.prose ul{list-style:outside}.prose ol{list-style:decimal}.prose li+li,.prose li>ul,.prose li>ol{margin-top:.3em}.prose li::marker{color:var(--faint)}.prose strong,.prose b{font-weight:600}.prose blockquote{border-inline-start:2px solid var(--rule-strong);color:var(--muted);padding-inline-start:1rem;font-style:italic}.prose hr{border:0;border-top:1px solid var(--rule);margin-block:3em}.prose img,.prose video{border-radius:var(--radius);border:1px solid var(--rule);background:#fff;width:auto;max-height:32rem}.prose iframe{border-radius:var(--radius);max-width:100%;margin-inline:auto}.prose center{display:block}.prose :not(pre)>code{font-family:var(--mono);background:var(--bg-2);border:1px solid var(--rule);border-radius:4px;padding:.1em .35em;font-size:.85em}.prose pre{font-family:var(--mono);border-radius:var(--radius);border:1px solid var(--rule);direction:ltr;padding:1rem 1.1rem;font-size:.8125rem;line-height:1.55;overflow-x:auto}.prose pre code{font-size:inherit;background:0 0;border:0;padding:0}.prose pre.astro-code{background:var(--bg-2)!important}.prose pre.astro-code span{color:var(--shiki-light)}@media (prefers-color-scheme:dark){:root:not([data-theme=light]) .prose pre.astro-code span{color:var(--shiki-dark)}}:root[data-theme=dark] .prose pre.astro-code span{color:var(--shiki-dark)}.prose table{border-collapse:collapse;width:100%;font-size:.9375rem}.prose th,.prose td{text-align:left;border-bottom:1px solid var(--rule);vertical-align:top;padding:.45em .7em}.prose th{color:var(--muted);border-bottom-color:var(--rule-strong);font-weight:500}.prose details{border:1px solid var(--rule);border-radius:var(--radius);color:var(--muted);padding:.75rem 1rem;font-size:.9375rem}.prose details summary{cursor:pointer;color:var(--fg);font-weight:500;list-style:none}.prose details summary::-webkit-details-marker{display:none}.prose details summary:before{content:"+";width:1.2em;color:var(--faint);font-family:var(--mono);display:inline-block}.prose details[open] summary:before{content:"–"}.prose details[open] summary{margin-bottom:.5rem}.prose small{color:var(--muted);font-size:.875rem}.prose .footnotes{border-top:1px solid var(--rule);color:var(--muted);margin-top:4em;padding-top:1.5em;font-size:.9375rem}.prose .footnotes h2{display:none}
