@font-face{font-family:Geist;font-style:normal;font-display:swap;font-weight:100 900;src:url(/fonts/geist-latin-wght-normal.woff2)format("woff2-variations"),url(/fonts/geist-latin-wght-normal.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Geist;font-style:normal;font-display:swap;font-weight:100 900;src:url(/fonts/geist-latin-ext-wght-normal.woff2)format("woff2-variations"),url(/fonts/geist-latin-ext-wght-normal.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}:root{--text-invert:#f2f2ef;--surface-dark:#000;--surface:#fff;--text-dim:.6;--line:#ffffff26;--hairline:1px;--pill-tint:#00000040;--pill-tint-hover:#00000059;--pill-tint-dim:#00000021;--pill-invert:#fff3;--pill-invert-hover:#fff6;--pill-invert-dim:#ffffff1a;--pill-shadow:inset 0 1px 1px #ffffff40, inset 0 -1px 1px #ffffff1a;--pill-filter:blur(6px) saturate(160%) brightness(.85);--glass-tint:#00000040;--glass-filter:blur(28px) saturate(160%) brightness(.85);--glass-drop:0 1.5rem 4rem -1rem #00000080;--skeleton:linear-gradient(110deg, #2a2a2a 25%, #3d3d3d 50%, #2a2a2a 75%);--font:"Geist", "Inter", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;--font-mono:ui-monospace, "SF Mono", Menlo, Monaco, "Cascadia Code", Consolas, monospace;--fs:.7rem;--fs-read:.8rem;--lh-ui:1.2;--lh-read:1.38;--rhythm-cols:1fr 1fr 1fr;--rhythm-gap:.63rem;--text-inset:.315rem;--edge-inset:.625rem;--section-gap:1.26rem;--nav-col:calc((100vw - 2 * var(--edge-inset) - 2 * var(--rhythm-gap)) / 3);--prose-inset-right:calc(3 * var(--edge-inset));--band-top:45svh;--radius:.315rem;--pill-h:calc(var(--fs) * var(--lh-ui) + 2 * var(--text-inset));--t-instant:.2s;--t-fast:.5s;--open-ease:linear(0, .18 6%, .36 13%, .48 22%, .5 26%, .5 65%, .55 70%, .65 77%, .77 84%, .86 89%, .93 93%, .97 97%, 1);--close-ease:cubic-bezier(.4, 0, 1, 1);--hint-ease:cubic-bezier(.215, .61, .355, 1);--z-stage:0;--z-ascii:1;--z-trail:2;--z-hero:3;--z-bar:4;--z-nav:999;--z-window:9000;--z-window-nav:9100;--z-modal:9999;--z-hint:10000;--z-loader:10010;--z-terminal:10020;--color-text-primary:var(--text-invert);--color-text-muted:#f2f2ef99;--color-surface-base:var(--surface-dark);--color-surface-muted:var(--surface);--color-pill:var(--pill-invert);--color-focus-ring:var(--text-invert);--font-family-primary:var(--font);--font-family-mono:var(--font-mono);--font-size-base:var(--fs);--font-size-sm:var(--fs-read);--font-line-height-body:var(--lh-read);--space-2:var(--text-inset);--space-3:var(--edge-inset);--gutter:var(--edge-inset);--radius-xs:var(--radius);--shadow-1:var(--pill-shadow);--target-min:var(--pill-h);--focus-ring-width:1px;--focus-ring-offset:2px;--window-blur:28px;--window-inset-mobile:var(--edge-inset);--chrome-bottom:2rem;--chrome-bottom-mobile:2rem}@media (width<=479px){:root{--fs:.75rem;--fs-read:.82rem}}@media (prefers-reduced-motion:reduce){:root{--t-instant:0s;--t-fast:0s}}*,:before,:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%;text-size-adjust:100%;color-scheme:dark;background:var(--surface-dark);font-size:1vw}@media (width<=1440px){html{font-size:1.1118vw}}@media (width<=991px){html{font-size:2.0857vw}}@media (width<=767px){html{font-size:2.8141vw}}@media (width<=568px){html{font-size:2.8225vw}}@media (width<=479px){html{font-size:4.0989vw}}@media (width<=390px){html{font-size:4.1131vw}}html,body{overscroll-behavior:none;height:100dvh;overflow:hidden}body{background:var(--surface-dark);width:100%;color:var(--text-invert);font-family:var(--font);font-size:var(--fs);font-weight:400;line-height:var(--lh-ui);font-synthesis:none;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;margin:0;position:fixed;inset:0}h1,h2,h3,h4,p,ul,ol,figure,dl,dd{margin:0}h1,h2,h3,h4{font-size:inherit;font-weight:inherit}ul,ol{padding:0;list-style:none}img,video,canvas,svg{max-width:100%;display:block}img,video{height:auto}a{color:inherit;text-decoration:none}button{font:inherit;color:inherit;cursor:pointer;appearance:none;background:0 0;border:0;margin:0;padding:0}.tabular,time{font-variant-numeric:tabular-nums}:focus-visible{outline:1px solid var(--text-invert);outline-offset:2px}::selection{background:var(--surface);color:var(--surface-dark)}.sr-only{clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.skip-link{top:var(--edge-inset);left:var(--edge-inset);z-index:var(--z-loader);padding:var(--text-inset);background:var(--surface);color:var(--surface-dark);border-radius:var(--radius);position:fixed;transform:translateY(-300%)}.skip-link:focus-visible{transform:none}*{scrollbar-width:thin;scrollbar-color:#ffffff40 transparent}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}.t{font-size:var(--fs);line-height:var(--lh-ui)}.t-read{font-size:var(--fs-read);line-height:var(--lh-read);text-wrap:pretty}.dim{opacity:var(--text-dim)}.pill{max-width:100%;height:var(--pill-h);padding:0 var(--text-inset);border-radius:var(--radius);font-size:var(--fs);white-space:nowrap;color:var(--text-invert);background-color:var(--pill-tint);backdrop-filter:var(--pill-filter);box-shadow:var(--pill-shadow);cursor:pointer;justify-content:center;align-items:center;line-height:1;transition:background-color .2s,color .2s,opacity .2s;display:inline-flex;position:relative}.pill:hover{background-color:var(--pill-tint-hover)}.pill--square{aspect-ratio:1;padding:0}.lbl{vertical-align:top;line-height:inherit;display:inline-block}.lbl-t{min-height:1em;line-height:1;display:block}.link-icon{color:currentColor;opacity:0;pointer-events:none;vertical-align:middle;justify-content:center;align-items:center;width:.75rem;height:.75rem;transition:opacity .2s;display:inline-flex}.link-icon svg{width:100%;height:100%}.cursor-hint{z-index:var(--z-hint);font-size:var(--fs);white-space:nowrap;color:var(--surface);mix-blend-mode:difference;pointer-events:none;opacity:0;will-change:transform;transition:opacity .18s var(--hint-ease);padding:4px 7px;line-height:1;position:fixed;top:0;left:0;transform:translate(-9999px,-9999px)}.cursor-hint.is-visible{opacity:1}.cursor-hint__mask{vertical-align:top;min-width:3em;line-height:var(--lh-ui);min-height:calc(1em * var(--lh-ui));display:inline-block}.cursor-hint__layer{line-height:var(--lh-ui);display:block}.cursor-hint__coords{font-variant-numeric:tabular-nums;min-width:6em;display:none}.cursor-hint.is-coords .cursor-hint__mask{display:none}.cursor-hint.is-coords .cursor-hint__coords{display:inline-block}@media (hover:none),(pointer:coarse){.cursor-hint{display:none}}.loader[data-astro-cid-tfd3xvz2]{display:none}html.is-js .loader[data-astro-cid-tfd3xvz2]{z-index:var(--z-loader);background:var(--surface-dark);pointer-events:none;display:block;position:fixed;inset:0}html.is-js .loader[data-astro-cid-tfd3xvz2].loader--done{display:none}.loader__line[data-astro-cid-tfd3xvz2]{top:var(--band-top);left:var(--edge-inset);right:var(--edge-inset);background:var(--text-invert);transform-origin:0 0;height:1px;position:absolute;transform:scaleX(0)scaleY(.5)}.stage[data-astro-cid-q37xf432]{z-index:var(--z-stage);pointer-events:none;background:var(--surface-dark);position:fixed;inset:0;overflow:clip}html.is-js .stage[data-astro-cid-q37xf432]{opacity:0}.stage[data-astro-cid-q37xf432]:after{content:"";background:var(--stage-grain,none);opacity:.07;mix-blend-mode:overlay;pointer-events:none;animation:.5s steps(6,end) infinite stage-grain;position:absolute;inset:-64px}@keyframes stage-grain{0%{transform:translate(0)}20%{transform:translate(-23px,17px)}40%{transform:translate(31px,-9px)}60%{transform:translate(-11px,-29px)}80%{transform:translate(19px,27px)}to{transform:translate(-7px,5px)}}body.motion-paused .stage[data-astro-cid-q37xf432]:after,body.home-window-open .stage[data-astro-cid-q37xf432]:after{animation-play-state:paused}.stage__canvas[data-astro-cid-q37xf432]{width:100%;max-width:none;height:100%}.stage__video[data-astro-cid-q37xf432]{opacity:0;pointer-events:none;width:1px;height:1px;position:fixed}.hero-ascii[data-astro-cid-q37xf432]{z-index:var(--z-ascii);pointer-events:none;opacity:0;will-change:opacity;width:100%;max-width:none;height:100%;position:fixed;inset:0}html:not(.is-js) .stage[data-astro-cid-q37xf432]{background:var(--stage-cutout) 50% 100% / auto 92% no-repeat, var(--surface-dark)}html:not(.is-js) .stage__canvas[data-astro-cid-q37xf432]{display:none}.image-wrap[data-astro-cid-7dntc6ph]{z-index:var(--z-trail);pointer-events:none;position:fixed;inset:0;overflow:hidden}.content__img[data-astro-cid-7dntc6ph]{--trail-unit:15rem;--img-w:var(--trail-unit);--img-h:calc(var(--trail-unit) * 3 / 4);width:var(--img-w);height:var(--img-h);opacity:0;backface-visibility:hidden;will-change:transform;pointer-events:none;position:absolute;top:0;left:0;overflow:hidden}.content__img--vertical[data-astro-cid-7dntc6ph]{--img-w:calc(var(--trail-unit) * 3 / 4);--img-h:var(--trail-unit)}.content__img-inner[data-astro-cid-7dntc6ph]{object-fit:contain;width:100%;max-width:none;height:100%;position:absolute;inset:0}.trail-lines{z-index:2147483000;pointer-events:none;mix-blend-mode:difference;width:100%;max-width:none;height:100%;position:absolute;inset:0;overflow:visible}.trail-lines line{stroke:#fff;stroke-width:1px;vector-effect:non-scaling-stroke}@media (width<=991px){.content__img[data-astro-cid-7dntc6ph]{--trail-unit:13rem}}@media (width<=767px){.content__img[data-astro-cid-7dntc6ph]{--trail-unit:11rem}}@media (width<=479px){.content__img[data-astro-cid-7dntc6ph]{--trail-unit:9rem}}.navigation-top[data-astro-cid-wpvy4v7s]{z-index:var(--z-nav);grid-template-columns:var(--rhythm-cols);column-gap:var(--rhythm-gap);padding:var(--edge-inset) var(--edge-inset) 0;pointer-events:none;align-items:start;display:grid;position:fixed;inset:0 0 auto}.nav-link[data-astro-cid-wpvy4v7s]{pointer-events:auto;background-color:var(--pill-invert);justify-content:flex-start;justify-self:stretch}.nav-link[data-astro-cid-wpvy4v7s]:hover{background-color:var(--pill-invert-hover)}body.ascii-on .nav-link[data-astro-cid-wpvy4v7s]{background-color:var(--pill-tint)}body.ascii-on .nav-link[data-astro-cid-wpvy4v7s]:hover{background-color:var(--pill-tint-hover)}.nav-link--brand[data-astro-cid-wpvy4v7s]{grid-column:1}.nav-link--works[data-astro-cid-wpvy4v7s]{grid-column:2}.nav-link--profile[data-astro-cid-wpvy4v7s]{grid-column:3}@media (hover:hover) and (width>=480px){.navigation-top[data-astro-cid-wpvy4v7s]:has(>.nav-link:hover)>.nav-link[data-astro-cid-wpvy4v7s]:not(:hover){background-color:var(--pill-invert-dim);color:color-mix(in srgb, var(--text-invert) 50%, transparent)}body.ascii-on .navigation-top[data-astro-cid-wpvy4v7s]:has(>.nav-link:hover)>.nav-link[data-astro-cid-wpvy4v7s]:not(:hover){background-color:var(--pill-tint-dim)}}@media (width>=480px){body.home-window-open .nav-link[data-astro-cid-wpvy4v7s]:not([aria-current=page]):not(:hover){background-color:var(--pill-tint-dim);color:color-mix(in srgb, var(--text-invert) 50%, transparent)}}body.home-window-open .navigation-top[data-astro-cid-wpvy4v7s]{z-index:var(--z-window-nav)}@media (prefers-reduced-motion:no-preference){html.is-js .navigation-top[data-astro-cid-wpvy4v7s]:not(.nav-armed)>.nav-link[data-astro-cid-wpvy4v7s],.navigation-top[data-astro-cid-wpvy4v7s].nav-armed>.nav-link[data-astro-cid-wpvy4v7s]{clip-path:inset(0 100% 0 0 round var(--radius));min-width:var(--pill-h)}.navigation-top[data-astro-cid-wpvy4v7s].nav-armed.nav-in>.nav-link[data-astro-cid-wpvy4v7s]{animation:pill-blink-in .72s linear calc(var(--pill-i,0) * 90ms) forwards}}@keyframes pill-blink-in{0%{clip-path:inset(0 0 0 0 round var(--radius));max-width:var(--pill-h);animation-timing-function:step-end}13%{clip-path:inset(0 100% 0 0 round var(--radius));max-width:var(--pill-h);animation-timing-function:step-end}23%{clip-path:inset(0 0 0 0 round var(--radius));max-width:var(--pill-h);animation-timing-function:step-end}36%{clip-path:inset(0 100% 0 0 round var(--radius));max-width:var(--pill-h);animation-timing-function:step-end}46%{clip-path:inset(0 0 0 0 round var(--radius));max-width:var(--pill-h);animation-timing-function:ease}to{clip-path:inset(0 0 0 0 round var(--radius));max-width:100%}}@media (width<=479px){.navigation-top[data-astro-cid-wpvy4v7s]{grid-template-columns:1fr minmax(var(--pill-h), auto) minmax(var(--pill-h), auto)}.nav-link--brand[data-astro-cid-wpvy4v7s]{justify-self:start}}.hero-frame[data-astro-cid-rjehllys]{inset:0 var(--edge-inset) var(--edge-inset);pointer-events:none;position:absolute}.hero-content[data-astro-cid-rjehllys]{inset:var(--band-top) 0 0;z-index:var(--z-hero);text-shadow:0 0 .5rem #0000008c,0 1px 2px #0009;flex-direction:column;display:flex;position:absolute;overflow:hidden}html.is-js .hero-content[data-astro-cid-rjehllys]:not(.intro-ready){visibility:hidden}.hero-grid[data-astro-cid-rjehllys]{grid-template-columns:var(--rhythm-cols);column-gap:var(--rhythm-gap);row-gap:var(--rhythm-gap);grid-template-rows:1fr auto;width:100%;height:100%;display:grid}.hero-grid[data-astro-cid-rjehllys]>[data-astro-cid-rjehllys]{pointer-events:auto}.hero-identity[data-astro-cid-rjehllys]{padding-left:var(--text-inset);grid-area:1/1;align-self:start}.hero-line[data-astro-cid-rjehllys]{display:block}.hero-list[data-astro-cid-rjehllys]{row-gap:var(--rhythm-gap);padding-left:var(--text-inset);flex-direction:column;display:flex}.hero-list--design[data-astro-cid-rjehllys]{grid-area:1/2;align-self:start}.hero-list--engineering[data-astro-cid-rjehllys]{grid-area:1/3;align-self:start}.hero-list--featured[data-astro-cid-rjehllys]{grid-area:1/3;place-self:start end}.list-items[data-astro-cid-rjehllys]{padding-left:var(--edge-inset);flex-direction:column;align-items:flex-start;row-gap:.5rem;display:flex}.list-items--no-gap[data-astro-cid-rjehllys]{row-gap:0}.hero-list--featured[data-astro-cid-rjehllys] .list-items[data-astro-cid-rjehllys]{margin-top:-.25rem}.drum[data-astro-cid-rjehllys]{overscroll-behavior:contain;scroll-snap-type:y mandatory;scrollbar-width:none;mask-image:linear-gradient(to bottom, rgb(0 0 0/var(--drum-top,1)) 0, #000 var(--drum-edge,42.857%), #000 calc(100% - var(--drum-edge,42.857%)), rgb(0 0 0/var(--drum-bottom,0)) 100%);overflow-y:auto}.drum[data-astro-cid-rjehllys]::-webkit-scrollbar{display:none}.drum[data-astro-cid-rjehllys].is-gliding{scroll-snap-type:none}html.is-js:not(.featured-ready) .drum[data-astro-cid-rjehllys]{height:0;overflow:hidden}.featured-row[data-astro-cid-rjehllys]{scroll-snap-align:start;flex-shrink:0;align-items:center;column-gap:.4rem;width:max-content;display:inline-flex}.row-link[data-astro-cid-rjehllys]{max-width:100%;padding:.25rem 0;display:inline-block}@media (pointer:coarse),(width<=767px){.row-link[data-astro-cid-rjehllys]{padding:max(.25rem, calc((24px - 1em * var(--lh-ui)) / 2)) 0}}body.ascii-on .hero-list--featured[data-astro-cid-rjehllys]{pointer-events:none}@media (hover:hover){.row-link[data-astro-cid-rjehllys]{transition:opacity .2s}.drum[data-astro-cid-rjehllys]:has(.row-link:hover) .row-link[data-astro-cid-rjehllys]:not(:hover){opacity:.5}.featured-row[data-astro-cid-rjehllys]{transition:transform .2s}.featured-row[data-astro-cid-rjehllys]:has(.row-link:hover){transform:translate(-.3rem)}.hero-grid[data-astro-cid-rjehllys]>[data-astro-cid-rjehllys]{transition:opacity .2s}.hero-grid[data-astro-cid-rjehllys]:has(.hero-list--featured:hover)>[data-astro-cid-rjehllys]:not(.hero-list--featured){opacity:.5}}@media (width<=991px){.hero-grid[data-astro-cid-rjehllys]{row-gap:var(--section-gap);grid-template-rows:auto auto 1fr auto}.hero-identity[data-astro-cid-rjehllys]{grid-column:1/span 3}.hero-list--design[data-astro-cid-rjehllys]{grid-area:2/1}.hero-list--engineering[data-astro-cid-rjehllys]{grid-area:2/2}.hero-list--featured[data-astro-cid-rjehllys]{grid-area:2/3;justify-self:start}}@media (width<=479px){.hero-content[data-astro-cid-rjehllys]{inset:calc(var(--band-top) - 12svh) 0 0}.hero-grid[data-astro-cid-rjehllys]{grid-template-rows:auto auto auto;grid-template-columns:1fr 1fr}.hero-identity[data-astro-cid-rjehllys]{grid-column:1/-1}.hero-list--design[data-astro-cid-rjehllys]{grid-area:2/1;margin-top:.74rem}.hero-list--engineering[data-astro-cid-rjehllys]{grid-area:2/2;margin-top:.74rem}.hero-list--featured[data-astro-cid-rjehllys]{left:var(--edge-inset);bottom:var(--edge-inset);z-index:2;position:fixed}}.case[data-astro-cid-gjxckoxw]{--case-pad:calc(var(--edge-inset) * 2);border-top:var(--hairline) solid var(--line);scroll-margin-top:var(--rhythm-gap);flex-direction:column;gap:1.5rem;padding:2.5rem 0 3.5rem;display:flex}.case[data-astro-cid-gjxckoxw]:first-of-type{padding-top:var(--rhythm-gap);border-top:0}.case-head[data-astro-cid-gjxckoxw],.case-metrics[data-astro-cid-gjxckoxw],.case-body[data-astro-cid-gjxckoxw]{padding:0 var(--case-pad)}.case-head[data-astro-cid-gjxckoxw]{row-gap:.6rem;column-gap:var(--rhythm-gap);grid-template-columns:1fr auto;grid-template-areas:"meta links""title title";align-items:center;display:grid}.case-meta[data-astro-cid-gjxckoxw]{grid-area:meta;gap:1.2em;display:flex}.case-title[data-astro-cid-gjxckoxw]{letter-spacing:-.02em;text-wrap:balance;grid-area:title;font-size:1.6rem;font-weight:500;line-height:1.1}.case-links[data-astro-cid-gjxckoxw]{grid-area:links;gap:.4rem;display:flex}.case-link[data-astro-cid-gjxckoxw]{gap:var(--text-inset)}.case-metrics[data-astro-cid-gjxckoxw]{gap:var(--rhythm-gap);grid-template-columns:repeat(3,minmax(0,1fr));display:grid}.case-metric[data-astro-cid-gjxckoxw]{padding-top:var(--rhythm-gap);border-top:var(--hairline) solid var(--line);flex-direction:column-reverse;justify-content:flex-end;gap:.3rem;display:flex}.case-metric-value[data-astro-cid-gjxckoxw]{letter-spacing:-.01em;font-size:1.15rem;font-weight:500;line-height:1.15}.case-body[data-astro-cid-gjxckoxw]{grid-template-columns:minmax(0,3fr) minmax(0,2fr);align-items:start;gap:2.5rem;display:grid}.case-about[data-astro-cid-gjxckoxw]{gap:var(--section-gap);flex-direction:column;max-width:38rem;display:flex}.case-stack[data-astro-cid-gjxckoxw]{flex-wrap:wrap;gap:.3rem;display:flex}.case-tag[data-astro-cid-gjxckoxw]{border:var(--hairline) solid var(--line);border-radius:var(--radius);color:color-mix(in srgb, var(--text-invert) 75%, transparent);white-space:nowrap;padding:.2rem .45rem}.case-images[data-astro-cid-gjxckoxw]{gap:var(--text-inset);padding:0 var(--case-pad);grid-template-columns:repeat(6,minmax(0,1fr));margin-top:.5rem;display:grid}.project-image[data-astro-cid-gjxckoxw]{border-radius:var(--radius);background:var(--skeleton);box-shadow:inset 0 0 0 var(--hairline) var(--line);background-size:200% 100%;position:relative;overflow:hidden}.project-image--lead[data-astro-cid-gjxckoxw]{grid-column:1/-1}.project-image--half[data-astro-cid-gjxckoxw]{grid-column:span 3}.project-image--phone[data-astro-cid-gjxckoxw]{grid-column:span 2}.project-image--diagram[data-astro-cid-gjxckoxw]{background:#f4f5f7;padding:1.2rem}.project-image--diagram[data-astro-cid-gjxckoxw] img{border-radius:calc(var(--radius) * .5)}.project-image[data-astro-cid-gjxckoxw] img{cursor:zoom-in;opacity:0;width:100%;height:auto;transition:opacity .3s;display:block}.project-image[data-astro-cid-gjxckoxw] img[data-loaded=true],html:not(.is-js) .project-image[data-astro-cid-gjxckoxw] img{opacity:1}.project-image[data-astro-cid-gjxckoxw] .project-image__ascii{pointer-events:none;opacity:.5;position:absolute;inset:0}.project-image[data-astro-cid-gjxckoxw] .project-image__ascii canvas{width:100%;height:100%}@media (width<=767px){.case[data-astro-cid-gjxckoxw]{--case-pad:var(--edge-inset);gap:1.2rem;padding:2rem 0 2.5rem}.case-head[data-astro-cid-gjxckoxw]{grid-template-columns:1fr;grid-template-areas:"meta""title""links"}.case-title[data-astro-cid-gjxckoxw]{font-size:1.35rem}.case-metrics[data-astro-cid-gjxckoxw]{grid-template-columns:1fr;gap:0}.case-metric[data-astro-cid-gjxckoxw]{flex-direction:row-reverse;justify-content:flex-end;align-items:baseline;gap:.6em;padding:.55rem 0}.case-metric-value[data-astro-cid-gjxckoxw]{font-size:1rem}.case-body[data-astro-cid-gjxckoxw]{grid-template-columns:1fr;gap:1.2rem}.case-images[data-astro-cid-gjxckoxw]{padding:0 var(--text-inset)}.project-image--half[data-astro-cid-gjxckoxw]{grid-column:1/-1}.project-image--diagram[data-astro-cid-gjxckoxw]{padding:.6rem}}.job-row[data-astro-cid-towtvkb2]{border-top:var(--hairline) solid var(--line);padding-top:var(--rhythm-gap);color:inherit;padding-bottom:2.5rem;display:block}a[data-astro-cid-towtvkb2].job-row{cursor:pointer}.job-name[data-astro-cid-towtvkb2]{gap:var(--text-inset);padding:0 var(--edge-inset);flex-direction:column-reverse;display:flex}.job-meta[data-astro-cid-towtvkb2]{justify-content:space-between;align-items:baseline;column-gap:var(--rhythm-gap);display:flex}.job-meta[data-astro-cid-towtvkb2]>[data-astro-cid-towtvkb2]:last-child{text-align:end;white-space:nowrap;min-width:7em}.job-title[data-astro-cid-towtvkb2]{flex-direction:column;display:flex}.job-title[data-astro-cid-towtvkb2] .link-icon{margin-left:var(--text-inset)}.job-desc[data-astro-cid-towtvkb2]{padding:var(--section-gap) var(--prose-inset-right) 0 var(--edge-inset);flex-direction:column;gap:1.7rem;display:flex}.job-desc-list[data-astro-cid-towtvkb2]{gap:var(--text-inset);padding-left:var(--rhythm-gap);flex-direction:column;display:flex}.job-desc-list-item[data-astro-cid-towtvkb2]{gap:var(--text-inset);align-items:flex-start;display:flex}.dot[data-astro-cid-towtvkb2]{opacity:.4;background:currentColor;border-radius:50%;flex:0 0 2px;width:2px;height:2px;margin-top:.45rem}@media (width<=479px){.job-desc[data-astro-cid-towtvkb2]{padding-right:var(--edge-inset)}}.home-window[data-astro-cid-763mxtzp]{z-index:var(--z-window);position:fixed;inset:0}.home-window[data-astro-cid-763mxtzp][hidden]{display:none}html.deeplink-intro .home-window[data-astro-cid-763mxtzp]{visibility:hidden}html:not(.is-js) .home-window[data-astro-cid-763mxtzp]{visibility:visible}.home-window__backdrop[data-astro-cid-763mxtzp]{opacity:0;background:0 0;transition:opacity .35s;position:absolute;inset:0}.home-window[data-astro-cid-763mxtzp].is-open .home-window__backdrop[data-astro-cid-763mxtzp]{opacity:1;transition-duration:1s}.home-window[data-astro-cid-763mxtzp].is-closing .home-window__backdrop[data-astro-cid-763mxtzp]{opacity:0;transition-duration:.35s}.home-window__pane[data-astro-cid-763mxtzp]{--hw-radius:calc(var(--radius) + var(--text-inset));top:var(--hw-top,3rem);right:var(--edge-inset);bottom:var(--edge-inset);left:var(--edge-inset);border-radius:var(--hw-radius);box-shadow:var(--glass-drop);color:var(--text-invert);transform-origin:50%;will-change:transform;flex-direction:column;display:flex;position:absolute;overflow:hidden}.home-window__glass[data-astro-cid-763mxtzp]{z-index:-1;border-radius:inherit;pointer-events:none;background:var(--glass-tint);backdrop-filter:var(--glass-filter);box-shadow:var(--pill-shadow);position:absolute;inset:0}@media (width>=768px){.home-window__pane[data-astro-cid-763mxtzp].is-section-portfolio:not(.is-fullscreen){left:var(--edge-inset);right:calc(var(--edge-inset) + var(--nav-col) + var(--rhythm-gap))}.home-window__pane[data-astro-cid-763mxtzp].is-section-profile:not(.is-fullscreen){left:calc(100vw - var(--edge-inset) - var(--nav-col));right:var(--edge-inset)}.home-window__pane[data-astro-cid-763mxtzp].is-fullscreen:not(.is-section-portfolio) .home-window__content[data-astro-cid-763mxtzp]{--hw-zoom:2;zoom:var(--hw-zoom);--hairline:calc(1px / var(--hw-zoom))}.home-window__pane[data-astro-cid-763mxtzp].is-fullscreen:not(.is-section-portfolio) .home-window__section[data-astro-cid-763mxtzp]{max-width:calc((2 * var(--nav-col) + var(--rhythm-gap)) / var(--hw-zoom));padding-top:max(0px, calc((var(--band-top) - var(--hw-content-top,88px)) / var(--hw-zoom)))}}.home-window__pane[data-astro-cid-763mxtzp].is-section-portfolio .home-window__glass[data-astro-cid-763mxtzp]{background:#080808d1}.home-window__controls[data-astro-cid-763mxtzp]{z-index:2;padding:var(--text-inset);pointer-events:none;gap:.4rem;display:flex;position:absolute;top:0;left:0;right:0}.home-window__controls[data-astro-cid-763mxtzp]>[data-astro-cid-763mxtzp]{pointer-events:auto}@media (hover:hover) and (pointer:fine){.home-window__btn[data-astro-cid-763mxtzp][data-home-window-close]:not(:focus-visible){clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}}@media (width<=767px){.home-window__fs[data-astro-cid-763mxtzp]{display:none}}.home-window__fs[data-astro-cid-763mxtzp] .link-icon{width:calc(var(--fs) * var(--lh-ui));height:calc(var(--fs) * var(--lh-ui));opacity:1}.home-window__zoom[data-astro-cid-763mxtzp]{color:color-mix(in srgb, var(--text-invert) 50%, transparent);pointer-events:none;align-self:center}.home-window__pane[data-astro-cid-763mxtzp]:not(.is-fullscreen) .home-window__zoom[data-astro-cid-763mxtzp],.home-window__pane[data-astro-cid-763mxtzp].is-section-portfolio .home-window__zoom[data-astro-cid-763mxtzp]{display:none}.home-window__socials[data-astro-cid-763mxtzp]{flex-wrap:wrap;justify-content:flex-end;gap:.4rem;margin-left:auto;display:flex}.home-window__pane[data-astro-cid-763mxtzp]:not(.is-section-profile) .home-window__socials[data-astro-cid-763mxtzp]{display:none}@media (hover:hover) and (width>=480px){.home-window__controls[data-astro-cid-763mxtzp]:has(.pill:hover) .pill[data-astro-cid-763mxtzp]:not(:hover){background-color:var(--pill-tint-dim);color:color-mix(in srgb, var(--text-invert) 50%, transparent)}}.home-window__content[data-astro-cid-763mxtzp]{overscroll-behavior:contain;isolation:isolate;outline:none;flex:auto;overflow:auto}.home-window__section[data-astro-cid-763mxtzp][hidden]{display:none}.home-window__section[data-astro-cid-763mxtzp]{padding-top:max(0px, calc(var(--band-top) - var(--hw-content-top,88px)))}.home-window__section[data-astro-cid-763mxtzp].works{grid-template-columns:clamp(11rem,24%,16rem) minmax(0,1fr);align-items:start;padding-top:2.6rem;display:grid}.works-index[data-astro-cid-763mxtzp]{padding:var(--rhythm-gap) var(--edge-inset) var(--rhythm-gap) calc(var(--edge-inset) * 2);flex-direction:column;gap:1.6rem;display:flex;position:sticky;top:2.2rem}.works-group-label[data-astro-cid-763mxtzp]{margin-bottom:.5rem}.works-list[data-astro-cid-763mxtzp]{flex-direction:column;display:flex}.works-link[data-astro-cid-763mxtzp]{color:color-mix(in srgb, var(--text-invert) 55%, transparent);grid-template-columns:1.9em 1fr;padding:.28rem 0;transition:color .2s;display:grid}.works-link[data-astro-cid-763mxtzp]:hover,.works-link[data-astro-cid-763mxtzp][aria-current=true]{color:var(--text-invert)}.works-link[data-astro-cid-763mxtzp][aria-current=true] .works-num[data-astro-cid-763mxtzp]{opacity:1}.works-name[data-astro-cid-763mxtzp]{text-wrap:balance}.works-cases[data-astro-cid-763mxtzp]{border-left:var(--hairline) solid var(--line);min-width:0}@media (width<=767px){.home-window__section[data-astro-cid-763mxtzp].works{padding-top:0;display:block}.works-index[data-astro-cid-763mxtzp]{z-index:1;min-height:calc(var(--pill-h) + 2 * var(--text-inset));scrollbar-width:none;padding:0 var(--edge-inset) 0 0;border-bottom:var(--hairline) solid var(--line);box-shadow:-4.2rem 0 0 0 #080808f0, -4.2rem var(--hairline) 0 0 var(--line);background:#080808f0;flex-direction:row;align-items:center;gap:0;margin-left:4.2rem;position:sticky;top:0;overflow-x:auto}.works-group-label[data-astro-cid-763mxtzp]{display:none}.works-list[data-astro-cid-763mxtzp]{flex-direction:row}.works-link[data-astro-cid-763mxtzp]{gap:.35em;padding:.35rem .55rem;display:flex}.works-name[data-astro-cid-763mxtzp]{text-wrap:nowrap}.works-cases[data-astro-cid-763mxtzp]{border-left:0}}.profile[data-astro-cid-763mxtzp]{flex-direction:column;gap:2.5rem;display:flex}.typed[data-astro-cid-763mxtzp]{padding:0 var(--edge-inset)}.typed[data-astro-cid-763mxtzp] p[data-astro-cid-763mxtzp]+p[data-astro-cid-763mxtzp]{margin-top:var(--edge-inset)}.group-label[data-astro-cid-763mxtzp]{padding:0 var(--edge-inset)}.rows[data-astro-cid-763mxtzp]+.group-label[data-astro-cid-763mxtzp]{margin-top:1.5rem;margin-bottom:var(--rhythm-gap)}.spacer[data-astro-cid-763mxtzp]{height:var(--rhythm-gap)}.end-space[data-astro-cid-763mxtzp]{height:30svh}body.home-window-locked{overflow:hidden}@media (prefers-reduced-motion:reduce){.home-window__backdrop[data-astro-cid-763mxtzp]{transition:none!important}}.bottom-bar[data-astro-cid-fieeo65e]{inset:auto var(--edge-inset) var(--text-inset);z-index:var(--z-bar);grid-template-columns:var(--rhythm-cols);column-gap:var(--rhythm-gap);line-height:var(--lh-ui);pointer-events:none;align-items:end;transition:opacity .45s;display:grid;position:fixed}html.is-js .bottom-bar[data-astro-cid-fieeo65e]{opacity:0}html.is-js .bottom-bar[data-astro-cid-fieeo65e].is-revealed,.bottom-bar[data-astro-cid-fieeo65e]:focus-within{opacity:1}.bb-size[data-astro-cid-fieeo65e],.bb-tagline[data-astro-cid-fieeo65e],.bb-os[data-astro-cid-fieeo65e]{white-space:nowrap;padding-left:var(--text-inset);grid-row:1;justify-self:start}.bb-size[data-astro-cid-fieeo65e]{grid-column:1}.bb-tagline[data-astro-cid-fieeo65e]{grid-column:2}.bb-os[data-astro-cid-fieeo65e]{grid-column:3}.bb-end[data-astro-cid-fieeo65e]{justify-self:end;gap:var(--rhythm-gap);grid-area:1/3;align-items:baseline;display:inline-flex}.bb-motion[data-astro-cid-fieeo65e]{pointer-events:auto;transition:opacity .2s}.bb-motion[data-astro-cid-fieeo65e]:hover,.bb-motion[data-astro-cid-fieeo65e]:focus-visible{opacity:1}.bb-clock[data-astro-cid-fieeo65e]{white-space:nowrap}.bb-colon[data-astro-cid-fieeo65e]{visibility:hidden}.bb-clock[data-astro-cid-fieeo65e].is-live .bb-colon[data-astro-cid-fieeo65e]{visibility:visible}.bb-colon[data-astro-cid-fieeo65e].is-off{opacity:0}@media (width<=479px){.bottom-bar[data-astro-cid-fieeo65e]{display:none}}.image-modal[data-astro-cid-xekddyko]{--pad:2.5rem;z-index:var(--z-modal);opacity:0;pointer-events:none;backdrop-filter:blur();transition:backdrop-filter 1s var(--open-ease), -webkit-backdrop-filter 1s var(--open-ease);position:fixed;inset:0}.image-modal[data-astro-cid-xekddyko].is-open{opacity:1;pointer-events:auto;backdrop-filter:blur(20px)}.image-modal[data-astro-cid-xekddyko].is-closing{pointer-events:none;backdrop-filter:blur();transition:backdrop-filter .35s var(--close-ease), -webkit-backdrop-filter .35s var(--close-ease)}.image-modal__stage[data-astro-cid-xekddyko]{justify-content:center;align-items:center;display:flex;position:absolute;inset:0;overflow:hidden}.image-modal[data-astro-cid-xekddyko].is-full .image-modal__stage[data-astro-cid-xekddyko]{display:block;overflow:hidden auto}.image-modal__inner[data-astro-cid-xekddyko]{transform-origin:50%;will-change:transform;position:relative}.image-modal[data-astro-cid-xekddyko].is-full .image-modal__inner[data-astro-cid-xekddyko]{width:min(100%, calc(100vw - var(--pad) * 2));margin:var(--pad) auto}.image-modal__img[data-astro-cid-xekddyko]{width:auto;height:auto;max-width:calc(100vw - var(--pad) * 2);max-height:calc(100svh - var(--pad) * 2);cursor:zoom-in;user-select:none;display:block}.image-modal[data-astro-cid-xekddyko].is-full .image-modal__img[data-astro-cid-xekddyko]{cursor:zoom-out;width:100%;max-width:none;max-height:none}body.image-modal-locked{overflow:hidden}.image-modal-cursor-hint{mix-blend-mode:difference}@media (prefers-reduced-motion:reduce){.image-modal[data-astro-cid-xekddyko],.image-modal[data-astro-cid-xekddyko].is-open,.image-modal[data-astro-cid-xekddyko].is-closing{transition:none}}@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}}.term[data-astro-cid-kenkipkp]{right:var(--gutter);bottom:calc(var(--chrome-bottom) + var(--gutter));z-index:var(--z-terminal);width:min(560px, calc(100vw - var(--gutter) * 2));border-radius:var(--radius-xs);background:color-mix(in srgb, var(--color-surface-base) 92%, transparent);height:min(440px,64dvh);-webkit-backdrop-filter:blur(var(--window-blur));box-shadow:var(--shadow-1);font-family:var(--font-family-mono);font-size:var(--font-size-sm);line-height:var(--font-line-height-body);grid-template-rows:auto minmax(0,1fr);display:grid;position:fixed}.term[data-astro-cid-kenkipkp][hidden]{display:none}.term__bar[data-astro-cid-kenkipkp]{align-items:center;gap:var(--space-3);padding:var(--space-2) var(--space-2) var(--space-2) var(--space-3);background:var(--color-pill);cursor:grab;touch-action:none;user-select:none;display:flex}.term[data-astro-cid-kenkipkp].is-dragging .term__bar[data-astro-cid-kenkipkp]{cursor:grabbing}.term__title[data-astro-cid-kenkipkp]{font-size:var(--font-size-base)}.term__hint[data-astro-cid-kenkipkp]{font-size:var(--font-size-base);white-space:nowrap;text-overflow:ellipsis;flex:1;overflow:hidden}.term__close[data-astro-cid-kenkipkp]{font-family:var(--font-family-primary);cursor:pointer}.term__body[data-astro-cid-kenkipkp]{overscroll-behavior:contain;padding:var(--space-3);overflow-y:auto}.term__log[data-astro-cid-kenkipkp] p{white-space:pre-wrap;overflow-wrap:anywhere}.term__log[data-astro-cid-kenkipkp] .term__cmd{color:var(--color-text-muted)}.term__log[data-astro-cid-kenkipkp] .term__cmd:not(:first-child){margin-top:.9em}.term__log[data-astro-cid-kenkipkp] .term__wait{color:var(--color-text-muted);animation:.5s steps(2,end) infinite term-wait}@keyframes term-wait{50%{opacity:.3}}.term__input[data-astro-cid-kenkipkp]::placeholder{color:var(--color-text-muted);opacity:.6}.term-fab[data-astro-cid-kenkipkp]{display:none}@media (width<=479px){.term__hint[data-astro-cid-kenkipkp]{visibility:hidden}.term-fab[data-astro-cid-kenkipkp]{right:var(--edge-inset);bottom:calc(var(--edge-inset) + env(safe-area-inset-bottom,0px));z-index:var(--z-bar);display:inline-flex;position:fixed}body.home-window-open .term-fab[data-astro-cid-kenkipkp],html.terminal-on .term-fab[data-astro-cid-kenkipkp]{display:none}}.term__log[data-astro-cid-kenkipkp] a{text-underline-offset:2px;text-decoration:underline}.term__line[data-astro-cid-kenkipkp]{gap:var(--space-2);align-items:center;display:flex}.term__prompt[data-astro-cid-kenkipkp]{color:var(--color-text-muted);white-space:nowrap}.term__input[data-astro-cid-kenkipkp]{min-width:0;min-height:var(--target-min);color:var(--color-text-primary);font:inherit;caret-color:var(--color-text-primary);background:0 0;border:0;flex:1;padding:0}.term__input[data-astro-cid-kenkipkp]:focus{outline:none}.term[data-astro-cid-kenkipkp]:focus-within{outline:var(--focus-ring-width) solid var(--color-focus-ring);outline-offset:var(--focus-ring-offset)}@media (width<=767px){.term[data-astro-cid-kenkipkp]{right:var(--window-inset-mobile);left:var(--window-inset-mobile);width:auto;bottom:calc(var(--chrome-bottom-mobile) + var(--gutter))}}main[data-astro-cid-sksmwptc]{outline:none}
