.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:oklch(18.2% 0 0);--foreground:oklch(95.8% 0 0);--muted:oklch(22.6% 0 0);--muted-foreground:oklch(66.3% 0 0);--border:oklch(31.7% 0 0);--ring:oklch(53.1% 0 0);--accent:oklch(63.3% .184 44);--success:oklch(62.2% .062 145.5);--image-outline:oklch(95.8% 0 0/.12);--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);--radius-min:calc(var(--space-unit) * .5);--hairline:1px;--touch-target:calc(var(--space-unit) * 11);--control-size:calc(var(--space-unit) * 8);--row-padding:var(--spacing-xs);--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:oklch(95.2% 0 0);--foreground:oklch(21.7% 0 0);--muted:oklch(91.9% 0 0);--muted-foreground:oklch(46.8% 0 0);--border:oklch(85.1% 0 0);--ring:oklch(62.4% 0 0);--accent:oklch(51.1% .148 44.2);--success:oklch(47.9% .058 143);--image-outline:oklch(21.7% 0 0/.08)}@media (prefers-contrast:more){:root{--muted-foreground:oklch(94.3% 0 0);--border:oklch(44.7% 0 0)}html[data-theme=light]{--muted-foreground:oklch(34.9% 0 0);--border:oklch(64.8% 0 0)}}*{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);align-items:center;text-decoration:none;display:inline-flex}.theme-toggle{width:var(--control-size);height:var(--control-size);margin-inline:calc((var(--font-size-sm) - var(--control-size)) / 2);cursor:pointer;background:0 0;border:none;justify-content:center;align-items:center;padding:0;display:inline-flex;position:relative}.theme-toggle,.footer-link,.back-link,.project-links .action-link,.copy-link{color:var(--muted-foreground);transition:color var(--duration) var(--ease)}@media (hover:hover){.theme-toggle:hover,.footer-link:hover,.back-link:hover,.project-links .action-link:hover,.copy-link:hover{color:var(--foreground)}}.theme-toggle:focus-visible,.footer-link:focus-visible,.back-link:focus-visible,.project-links .action-link:focus-visible,.copy-link:focus-visible,.code-copy:focus-visible{color:var(--foreground)}.theme-toggle:focus-visible,button.back-link:focus-visible,.copy-link:focus-visible,.code-copy:focus-visible{outline:none}.theme-toggle svg{width:var(--font-size-sm);height:var(--font-size-sm);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-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}.highlight,strong,b{color:var(--foreground);font-weight:var(--weight-emphasis)}:where(a:any-link){color:var(--foreground);text-decoration:none}p a:any-link,.prose a:any-link,.timeline-content a:any-link,.row-name{color:var(--foreground);text-decoration-line:underline;text-decoration-style:dotted;text-decoration-thickness:var(--hairline);text-underline-offset:calc(var(--space-unit) * .5);transition:text-decoration-color var(--duration) var(--ease)}p a:any-link,.prose a:any-link,.timeline-content a:any-link{text-decoration-color:color-mix(in oklch, var(--foreground) 50%, transparent)}.row-name{text-decoration-color:#0000}@media (prefers-contrast:more){p a:any-link,.prose a:any-link,.timeline-content a:any-link{text-decoration-style:solid;text-decoration-color:currentColor}}@media (hover:hover){:where(p,.prose,.timeline-content) a:any-link:hover,:is(.work-link,.project-link):hover .row-name{text-decoration-color:currentColor}}:where(p,.prose,.timeline-content) a:any-link:focus-visible,:is(.work-link,.project-link):focus-visible .row-name{text-decoration-color:currentColor}a:focus-visible,button:focus-visible,pre:focus-visible{outline:var(--hairline) solid var(--ring);outline-offset:calc(var(--space-unit) * .75)}:where(a,button,pre):focus-visible{border-radius:var(--radius)}@media (prefers-contrast:more){a:focus-visible,button:focus-visible,pre:focus-visible{outline-width:calc(var(--space-unit) * .5);outline-color:var(--foreground)}}.list-section{margin-top:var(--spacing-2xl)}.list-section+.list-section{margin-top:var(--spacing-lg);padding-top:var(--spacing-xl);border-top:var(--hairline) solid var(--border)}.showcase-bar{justify-content:space-between;align-items:center;gap:var(--spacing-sm) var(--spacing-md);margin:0 0 calc(var(--spacing-lg) - var(--row-padding));flex-wrap:wrap;display:flex}.showcase-tabs{gap:var(--spacing-sm);display:flex}.showcase-tab{padding:var(--spacing-xs) var(--spacing-md);border:var(--hairline) solid var(--border);font:inherit;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);cursor:pointer;transition:color var(--duration) var(--ease), background-color var(--duration) var(--ease), border-color var(--duration) var(--ease);background:0 0;border-radius:999px;position:relative}.showcase-tab[aria-selected=true]{color:var(--foreground);background:var(--muted);border-color:var(--muted)}@media (hover:hover){.showcase-tab:not([aria-selected=true]):hover{color:var(--foreground);border-color:var(--ring)}}.showcase-tabs .showcase-tab:focus-visible{color:var(--foreground);border-color:var(--foreground);outline:none}.showcase-panel--photos{padding-top:var(--row-padding)}.list-label{margin:0 0 var(--spacing-xs);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)}.work-list,.project-list{flex-direction:column;margin:0;padding:0;list-style:none;display:flex}.work-link,.project-link{align-items:start;column-gap:var(--spacing-md);padding-block:var(--row-padding);font-size:var(--font-size-base);font-weight:var(--weight-text);line-height:var(--line-height-base);letter-spacing:var(--track-base);grid-template-columns:minmax(0,1fr) auto;display:grid}.work-date,.project-year{text-align:right;font-variant-numeric:tabular-nums;color:var(--muted-foreground);justify-self:end}.project-copy{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.project-name{font-weight:var(--weight-emphasis)}.project-desc{margin-left:var(--spacing-sm);color:var(--muted-foreground)}@media (width<=480px){.project-copy{white-space:normal}.project-desc{font-size:var(--font-size-sm);line-height:var(--line-height-sm);letter-spacing:var(--track-sm);margin-left:0;display:block}}.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-back{margin-bottom:var(--spacing-lg)}.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);text-decoration:none;display:inline-flex;position:relative}.copy-link{font:inherit;letter-spacing:inherit;cursor:pointer;background:0 0;border:none;justify-items:start;padding:0;display:inline-grid;position:relative}.copy-link-label{grid-area:1/1;transition:opacity .3s cubic-bezier(.2,0,0,1),filter .3s cubic-bezier(.2,0,0,1)}.copy-link-done{opacity:0;filter:blur(var(--space-unit));color:var(--success)}[data-copied] .copy-link-label:not(.copy-link-done){opacity:0;filter:blur(var(--space-unit))}[data-copied] .copy-link-done{opacity:1;filter:none}.back-link svg{width:var(--font-size-sm);height:var(--font-size-sm);flex-shrink:0;display:block}.entry-header{margin-bottom:var(--spacing-2xl)}.entry-header h1{margin-bottom:var(--spacing-sm)}.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}.project-links .action-link{text-decoration:none}.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}.entry-meta .copy-link{justify-items:end;margin-left:auto}.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}.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}code{font-family:var(--font-mono);font-size:.875em;font-weight:var(--weight-text);letter-spacing:0;color:var(--foreground);overflow-wrap:break-word}: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 oklch, 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:max(var(--radius-min), calc(var(--radius) - var(--spacing-sm)));color:var(--muted-foreground);cursor:pointer;transition:color var(--duration) var(--ease);border:none;display:inline-grid;position:absolute}@media (hover:hover){.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{margin:0}.footer-links{align-items:center;gap:var(--spacing-lg);display:flex}.footer-link{align-items:center;text-decoration:none;display:inline-flex;position:relative}@media (pointer:coarse){.footer-link:after,.showcase-tab:after,.back-link:after,.copy-link:after,.code-copy:after,.theme-toggle:after,.project-links .action-link:after,.nav-wordmark:after{content:"";width:max(100%, var(--touch-target));height:var(--touch-target);position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.project-links .action-link,.nav-wordmark{position:relative}:root{--row-padding:calc((var(--touch-target) - var(--line-height-base)) / 2)}.footer-links{gap:calc(var(--touch-target) - var(--font-size-sm))}}.footer-link--icon{padding:var(--spacing-sm);margin:calc(-1 * var(--spacing-sm));flex-shrink:0}.footer-link svg{width:var(--font-size-sm);height:var(--font-size-sm);flex-shrink:0;display:block}@media (width<=48rem){body{padding-top:var(--spacing-xl)}.nav,.container,.footer-content{padding-inline:var(--spacing-lg)}}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important}}.face-mark[data-astro-cid-mct6gjrt]{height:calc(var(--space-unit) * 6);transform:translateY(calc(var(--space-unit) * 1));display:block}.face-mark[data-astro-cid-mct6gjrt] svg[data-astro-cid-mct6gjrt]{width:auto;height:100%;display:block}.face-mark__path[data-astro-cid-mct6gjrt]{fill:currentColor}
