.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{--font-sans:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", system-ui, sans-serif;--font-mono:ui-monospace, "SF Mono", Monaco, "Cascadia Code", "Roboto Mono", Consolas, monospace;--weight-text:400;--weight-emphasis:500;--background:#121212;--foreground:#f2f1ee;--muted:#1c1c1b;--muted-foreground:#95938e;--border:#333230;--ring:#6e6c67;--link-hover:color-mix(in srgb, var(--muted-foreground) 35%, var(--foreground));--accent:#e05a00;--success:#6f9170;--image-outline:#f2f1ee1f;--scale-ratio:1.125;--space-unit:.25rem;--baseline:calc(var(--space-unit) * 4);--font-size-base:.875rem;--font-size-sm:calc(var(--font-size-base) / var(--scale-ratio));--font-size-md:calc(var(--font-size-base) * var(--scale-ratio));--font-size-lg:calc(var(--font-size-base) * pow(var(--scale-ratio), 2));--line-height-sm:calc(var(--space-unit) * 5);--track-sm:-.003em;--line-height-base:calc(var(--space-unit) * 5);--track-base:-.00563em;--line-height-md:calc(var(--space-unit) * 6);--track-md:-.011em;--line-height-lg:calc(var(--space-unit) * 6);--track-lg:-.014em;--spacing-xs:calc(var(--space-unit) * pow(var(--scale-ratio), 0));--spacing-sm:calc(var(--space-unit) * pow(var(--scale-ratio), 6));--spacing-md:calc(var(--space-unit) * pow(var(--scale-ratio), 12));--spacing-lg:calc(var(--space-unit) * pow(var(--scale-ratio), 15));--spacing-xl:calc(var(--space-unit) * pow(var(--scale-ratio), 19));--spacing-2xl:calc(var(--space-unit) * pow(var(--scale-ratio), 23));--spacing-3xl:calc(var(--space-unit) * pow(var(--scale-ratio), 27));--radius:var(--space-unit);--hairline:1px;--touch-target:calc(var(--space-unit) * 11);--control-size:calc(var(--space-unit) * 8);--content-max-width:calc(var(--baseline) * 36);--ease:ease;--duration:.14s}html[data-theme=dark]{color-scheme:dark}html[data-theme=light]{color-scheme:light;--background:#f0efec;--foreground:#1a1a19;--muted:#e5e4e0;--muted-foreground:#5c5a55;--border:#d0cec8;--ring:#8a8780;--accent:#a84200;--success:#4a6648;--image-outline:#1a1a1914}@media (prefers-contrast:more){:root{--muted-foreground:#ebebf5;--border:#545458}html[data-theme=light]{--muted-foreground:#3a3a3c;--border:#8e8e93}p a:any-link,.prose a:any-link,.timeline-content a:any-link{text-decoration-color:var(--foreground)}}*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}img,video,iframe{max-width:100%}.sr-only{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}html{background-color:var(--background);scrollbar-gutter:stable;-webkit-text-size-adjust:none;text-size-adjust:none;width:100%;min-height:100%;font-size:16px;overflow-x:clip}body{width:100%;min-height:100dvh;padding:var(--spacing-2xl) env(safe-area-inset-right) 0 env(safe-area-inset-left);font-family:var(--font-sans);font-size:var(--font-size-base);font-weight:var(--weight-text);line-height:var(--line-height-base);letter-spacing:var(--track-base);color:var(--muted-foreground);background-color:var(--background);text-align:left;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;flex-direction:column;align-items:center;margin:0;display:flex}.nav,.container,.footer-content{width:100%;max-width:var(--content-max-width);margin-inline:auto}.skip-link{z-index:100;padding:var(--spacing-sm) var(--spacing-md);background:var(--foreground);color:var(--background);font-size:var(--font-size-sm);line-height:var(--line-height-sm);border-radius:var(--radius);text-decoration:none;position:absolute;top:-100px;left:0}.skip-link:focus{top:var(--spacing-md)}.nav{margin-bottom:var(--spacing-2xl)}.nav-container{justify-content:space-between;align-items:center;gap:var(--spacing-lg);display:flex}.nav-wordmark{min-height:var(--touch-target);color:var(--foreground);transition:color var(--duration) var(--ease);align-items:center;text-decoration:none;display:inline-flex}.nav-wordmark:hover{color:var(--link-hover)}.nav-links{align-items:center;gap:var(--spacing-lg);display:flex}.nav-link{min-height:var(--touch-target);line-height:var(--line-height-sm);letter-spacing:var(--track-sm);color:var(--muted-foreground);transition:color var(--duration) var(--ease);align-items:center;text-decoration:none;display:inline-flex}.nav-link.active{color:var(--foreground)}.nav-link:hover{color:var(--link-hover)}.theme-toggle{width:var(--control-size);height:var(--control-size);margin-right:calc(var(--space-unit) * -1.5);color:var(--muted-foreground);cursor:pointer;transition:color var(--duration) var(--ease);background:0 0;border:none;justify-content:center;align-items:center;padding:0;display:inline-flex}.theme-toggle:hover{color:var(--foreground)}.theme-toggle svg{transition:transform var(--duration) var(--ease);display:block}html[data-theme=light] .theme-toggle svg{transform:rotate(180deg)}.container{padding-bottom:var(--spacing-2xl);flex:1}.section{width:100%}.section-mb{margin-bottom:var(--spacing-2xl)}h1,h2,h3,h4,h5,h6{color:var(--foreground);font-weight:var(--weight-emphasis);margin:var(--spacing-xl) 0 var(--spacing-sm);text-wrap:balance}h1{font-size:var(--font-size-lg);line-height:var(--line-height-lg);letter-spacing:var(--track-lg);margin-top:0}h2,h3{font-size:var(--font-size-md);line-height:var(--line-height-md);letter-spacing:var(--track-md)}h4,h5,h6{font-size:var(--font-size-base);line-height:var(--line-height-base);letter-spacing:var(--track-base)}p,ul,ol,li{color:var(--muted-foreground)}p{margin:0 0 var(--spacing-lg);text-wrap:pretty}p:last-child{margin-bottom:0}.text{font-size:var(--font-size-base);color:var(--muted-foreground)}.highlight,strong,b{color:var(--foreground);font-weight:var(--weight-emphasis)}a:any-link{color:var(--foreground);text-decoration:none}p a:any-link,.prose a:any-link,.timeline-content a:any-link{color:var(--foreground);text-decoration:underline;text-decoration-thickness:var(--hairline);text-decoration-color:color-mix(in srgb, var(--foreground) 25%, transparent);text-underline-offset:calc(var(--space-unit) * .5);transition:text-decoration-color var(--duration) var(--ease)}p a:any-link:hover,.prose a:any-link:hover,.timeline-content a:any-link:hover{text-decoration-color:var(--muted-foreground)}a:focus-visible,button:focus-visible{outline:calc(var(--space-unit) * .5) solid var(--ring);outline-offset:calc(var(--space-unit) * .75);border-radius:var(--radius)}.list-section{margin-top:var(--spacing-2xl)}.list-label{margin:0 0 var(--spacing-sm);padding-bottom:var(--spacing-sm);font-size:var(--font-size-sm);font-weight:var(--weight-text);line-height:var(--line-height-sm);letter-spacing:var(--track-sm);color:var(--muted-foreground);border-bottom:var(--hairline) solid var(--border)}.list-label--plain{border-bottom:none;padding-bottom:0}.work-list{flex-direction:column;margin:0;padding:0;list-style:none;display:flex}.work-link{padding:var(--spacing-sm) 0;align-items:baseline;gap:0;text-decoration:none;display:flex}.work-title,.work-date{transition:color var(--duration) var(--ease)}@media (hover:hover){.work-link:hover .work-date{color:var(--link-hover)}}.work-title{font-size:var(--font-size-base);font-weight:var(--weight-text);line-height:var(--line-height-base);letter-spacing:var(--track-base);color:var(--foreground);flex-grow:1}.work-year{width:3.5rem;font-size:var(--font-size-base);line-height:var(--line-height-base);letter-spacing:var(--track-base);font-variant-numeric:tabular-nums;color:var(--muted-foreground);flex-shrink:0}.work-date{margin-left:var(--spacing-md);font-size:var(--font-size-sm);line-height:var(--line-height-sm);letter-spacing:var(--track-sm);font-variant-numeric:tabular-nums;color:var(--muted-foreground);flex-shrink:0}.project-list{flex-direction:column;margin:0;padding:0;list-style:none;display:flex}.project-link{padding:var(--spacing-xs) 0;align-items:center;gap:0;text-decoration:none;display:flex}.project-copy{align-items:baseline;gap:var(--spacing-sm);flex:1;min-width:0;display:flex}.project-name{align-items:baseline;gap:var(--spacing-xs);font-size:var(--font-size-base);font-weight:var(--weight-emphasis);line-height:var(--line-height-base);letter-spacing:var(--track-base);color:var(--foreground);transition:color var(--duration) var(--ease);flex-shrink:0;display:inline-flex}.project-desc{min-width:0;font-size:var(--font-size-base);line-height:var(--line-height-base);letter-spacing:var(--track-base);color:var(--muted-foreground);white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.project-year{margin-left:var(--spacing-md);font-size:var(--font-size-sm);line-height:var(--line-height-sm);letter-spacing:var(--track-sm);font-variant-numeric:tabular-nums;color:var(--muted-foreground);transition:color var(--duration) var(--ease);flex-shrink:0}@media (hover:hover){.project-link:hover .project-name,.project-link:hover .project-year{color:var(--link-hover)}}@media (width<=480px){.project-link{padding:var(--spacing-xs) 0}.project-copy{flex-direction:column;gap:0}.project-desc{white-space:normal;font-size:var(--font-size-sm);line-height:var(--line-height-sm);letter-spacing:var(--track-sm)}}.work-new{width:calc(var(--space-unit) * 1.5);height:calc(var(--space-unit) * 1.5);margin-left:var(--spacing-sm);vertical-align:middle;background:var(--accent);border-radius:50%;display:inline-block}.entry-footer{margin-top:var(--spacing-2xl);justify-content:space-between;align-items:center;display:flex}.back-link{align-items:center;gap:var(--spacing-xs);font-size:var(--font-size-sm);line-height:var(--line-height-sm);letter-spacing:var(--track-sm);color:var(--muted-foreground);transition:color var(--duration) var(--ease);text-decoration:none;display:inline-flex;position:relative}.back-link:hover{color:var(--foreground)}.copy-link{padding:var(--spacing-sm);margin:calc(-1 * var(--spacing-sm));font-family:inherit;font-size:var(--font-size-sm);line-height:var(--line-height-sm);letter-spacing:var(--track-sm);color:var(--muted-foreground);cursor:pointer;transition:color var(--duration) var(--ease);background:0 0;border:none;display:inline-grid;position:relative}.copy-link:hover{color:var(--foreground)}.copy-link-label{grid-area:1/1;align-items:center;transition:opacity .3s cubic-bezier(.2,0,0,1),transform .3s cubic-bezier(.2,0,0,1),filter .3s cubic-bezier(.2,0,0,1);display:inline-flex}.copy-link-done{opacity:0;filter:blur(var(--space-unit));color:var(--success);transform:scale(.25)}[data-copied] .copy-link-label:not(.copy-link-done){opacity:0;filter:blur(var(--space-unit));transform:scale(.25)}[data-copied] .copy-link-done{opacity:1;filter:none;transform:none}.entry-footer svg{width:var(--font-size-sm);height:var(--font-size-sm);flex-shrink:0;display:block}.case-header{margin-bottom:var(--spacing-2xl)}.case-header h1{margin-bottom:var(--spacing-sm)}.project-header{margin-bottom:var(--spacing-2xl)}.project-header h1{margin-bottom:var(--spacing-xs)}.project-icon{width:calc(var(--space-unit) * 14);height:calc(var(--space-unit) * 14);margin-bottom:var(--spacing-md);border-radius:calc(var(--space-unit) * 3);box-shadow:0 0 0 var(--hairline) var(--image-outline);display:block}.project-tagline{margin:0 0 var(--spacing-xs);font-size:var(--font-size-base);line-height:var(--line-height-base);letter-spacing:var(--track-base);color:var(--muted-foreground)}.project-links{gap:var(--spacing-md);margin:var(--spacing-md) 0 0;font-size:var(--font-size-sm);line-height:var(--line-height-sm);letter-spacing:var(--track-sm);flex-wrap:wrap;display:flex}.entry-meta{gap:var(--spacing-md);font-size:var(--font-size-sm);line-height:var(--line-height-sm);letter-spacing:var(--track-sm);color:var(--muted-foreground);flex-wrap:wrap;margin:0;display:flex}.case-label{margin:0 0 var(--spacing-xs);font-size:var(--font-size-sm);line-height:var(--line-height-sm);letter-spacing:var(--track-sm);color:var(--muted-foreground)}.case-result{margin:0 0 var(--spacing-2xl);font-size:var(--font-size-md);font-weight:var(--weight-text);line-height:var(--line-height-md);letter-spacing:var(--track-md);color:var(--foreground)}.prose{width:100%;min-width:0}.prose p{margin:0 0 var(--spacing-lg)}.prose p:last-child{margin-bottom:0}.prose ul,.prose ol{margin:0 0 var(--spacing-lg);padding-left:var(--spacing-lg)}.prose li{margin-bottom:var(--spacing-sm);text-wrap:pretty}.prose blockquote{margin:var(--spacing-xl) 0;padding-left:var(--spacing-lg);border-left:var(--hairline) solid var(--border);color:var(--muted-foreground);font-style:italic}.prose figure,.timeline-content figure{margin:var(--spacing-2xl) 0;margin-inline:0}.prose img,.timeline-content img{border-radius:var(--radius);outline:var(--hairline) solid var(--image-outline);outline-offset:calc(var(--hairline) * -1);width:100%;height:auto;display:block}.prose figcaption,.timeline-content figcaption{margin-top:var(--spacing-md);font-size:var(--font-size-sm);line-height:var(--line-height-sm);letter-spacing:var(--track-sm);color:var(--muted-foreground);text-align:left}.timeline-entry{padding-bottom:var(--spacing-2xl)}.timeline-entry+.timeline-entry{padding-top:var(--spacing-2xl);border-top:var(--hairline) solid var(--border)}.timeline-entry:last-child{padding-bottom:0}.timeline-date{margin-bottom:var(--spacing-sm);font-family:var(--font-mono);font-size:var(--font-size-sm);line-height:var(--line-height-sm);letter-spacing:0;color:var(--muted-foreground)}.timeline-content h2{margin:0 0 var(--spacing-sm)}.timeline-content p{margin:0 0 var(--spacing-md)}.timeline-content p:last-child{margin-bottom:0}.empty-state{color:var(--muted-foreground)}code{font-family:var(--font-mono);letter-spacing:0;color:var(--foreground);overflow-wrap:break-word;font-size:.875em;font-weight:400}:not(pre)>code{background:var(--muted);border-radius:var(--radius);padding:.1em .35em}pre{margin:var(--spacing-lg) 0;padding:var(--spacing-md);background:var(--muted);border-radius:var(--radius);font-size:var(--font-size-sm);line-height:var(--line-height-sm);overflow-x:auto}pre code{font-size:inherit;display:grid}code[data-line-numbers]{counter-reset:line}code[data-line-numbers]>[data-line]:before{counter-increment:line;content:counter(line);width:2ch;margin-right:var(--spacing-md);text-align:left;color:color-mix(in srgb, var(--muted-foreground) 55%, transparent);display:inline-block}figure[data-rehype-pretty-code-figure]{margin:var(--spacing-lg) 0;position:relative}figure[data-rehype-pretty-code-figure] pre{margin:0}.code-copy{top:var(--spacing-sm);right:var(--spacing-sm);padding:var(--spacing-xs);background:var(--muted);border-radius:var(--radius);color:var(--muted-foreground);cursor:pointer;transition:color var(--duration) var(--ease);border:none;display:inline-grid;position:absolute}.code-copy:hover{color:var(--foreground)}.code-copy svg{width:var(--font-size-sm);height:var(--font-size-sm);display:block}html[data-theme=dark] [data-theme=github-dark\ github-light] span[style]{color:var(--shiki-dark)}html[data-theme=light] [data-theme=github-dark\ github-light] span[style]{color:var(--shiki-light)}.prose .footnotes{margin-top:var(--spacing-2xl);padding-top:var(--spacing-lg);border-top:var(--hairline) solid var(--border);font-size:var(--font-size-sm);line-height:var(--line-height-sm);letter-spacing:var(--track-sm)}.prose .footnotes p{margin:0}.prose a[data-footnote-ref]{vertical-align:super;padding:0 .15em;font-size:.75em;text-decoration:none}footer{width:100%;padding:var(--spacing-xl) 0 max(var(--spacing-2xl), env(safe-area-inset-bottom));font-size:var(--font-size-sm);line-height:var(--line-height-sm);letter-spacing:var(--track-sm);color:var(--muted-foreground)}.footer-content{justify-content:space-between;align-items:center;gap:var(--spacing-md);display:flex}.footer-content p{font-size:var(--font-size-sm);margin:0}.footer-links{align-items:center;gap:var(--spacing-lg);display:flex}.footer-link{color:var(--muted-foreground);transition:color var(--duration) var(--ease);align-items:center;text-decoration:none;display:inline-flex;position:relative}@media (pointer:coarse){.footer-link:after,.back-link:after,.copy-link:after,.code-copy:after{content:"";width:max(100%, var(--touch-target));height:var(--touch-target);position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}}.footer-link--icon{width:var(--line-height-sm);height:var(--line-height-sm);flex-shrink:0;justify-content:center}.footer-link svg{width:var(--font-size-sm);height:var(--font-size-sm);flex-shrink:0;display:block}.footer-link:hover{color:var(--link-hover)}body.error-page{padding-block:var(--spacing-2xl);justify-content:center}.error-content{max-width:var(--content-max-width);padding-inline:var(--spacing-lg)}.error-content h1{margin-bottom:var(--spacing-md)}.error-content p{margin:0 0 var(--spacing-lg)}.error-content p:last-child{margin-bottom:0}@media (width<=48rem){body{padding-top:var(--spacing-xl)}.nav,.container,.footer-content,.error-content{padding-inline:var(--spacing-lg)}.nav-links{gap:var(--spacing-md)}}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important}}
