@font-face{font-family:Barlow;font-style:normal;font-weight:400;font-display:swap;src:url(../media/31e5e20239562b7a-s.3_otmf38u2y4x.woff2)format("woff2");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Barlow;font-style:normal;font-weight:400;font-display:swap;src:url(../media/9a8b04342f903b9d-s.00hyb-x0mjr9g.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}@font-face{font-family:Barlow;font-style:normal;font-weight:400;font-display:swap;src:url(../media/c6e2684784a55443-s.p.2p4adm_386h58.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:Barlow;font-style:normal;font-weight:500;font-display:swap;src:url(../media/742f0fcf9aa5cfe6-s.1x39li9dshdhc.woff2)format("woff2");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Barlow;font-style:normal;font-weight:500;font-display:swap;src:url(../media/b524e3bdcc8dfcd3-s.1qsgyx-tuq4mu.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}@font-face{font-family:Barlow;font-style:normal;font-weight:500;font-display:swap;src:url(../media/a083361d37caf3d1-s.p.0s4utfvp8prsy.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:Barlow;font-style:normal;font-weight:600;font-display:swap;src:url(../media/b221c6d9681431a7-s.3f7g1nki62hoj.woff2)format("woff2");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Barlow;font-style:normal;font-weight:600;font-display:swap;src:url(../media/af7efeee822b8a1b-s.3sup9rdq9grs5.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}@font-face{font-family:Barlow;font-style:normal;font-weight:600;font-display:swap;src:url(../media/6c98c9fb873995d2-s.p.22ggkaf3lyu8c.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:Barlow Fallback;src:local(Arial);ascent-override:103.43%;descent-override:20.69%;line-gap-override:0.0%;size-adjust:96.68%}.barlow_428c9ba7-module__UwdMYW__className{font-family:Barlow,Barlow Fallback;font-style:normal}.barlow_428c9ba7-module__UwdMYW__variable{--font-body:"Barlow", "Barlow Fallback"}
@font-face{font-family:Barlow Condensed;font-style:normal;font-weight:500;font-display:swap;src:url(../media/2bbd88c7cbebcb5b-s.33sztrngv_ieb.woff2)format("woff2");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Barlow Condensed;font-style:normal;font-weight:500;font-display:swap;src:url(../media/e3c10b17cdb86a23-s.198xu-2bu0foz.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}@font-face{font-family:Barlow Condensed;font-style:normal;font-weight:500;font-display:swap;src:url(../media/612838607db3d51d-s.p.2-6hkzwn24m5-.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:Barlow Condensed;font-style:normal;font-weight:600;font-display:swap;src:url(../media/9710cef2a2a6ac70-s.38t85nkp60tez.woff2)format("woff2");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Barlow Condensed;font-style:normal;font-weight:600;font-display:swap;src:url(../media/a978fc28c69736ab-s.2omtmoo94goav.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}@font-face{font-family:Barlow Condensed;font-style:normal;font-weight:600;font-display:swap;src:url(../media/303804218d80822e-s.p.3lj349bs9hfu1.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:Barlow Condensed Fallback;src:local(Arial);ascent-override:130.73%;descent-override:26.15%;line-gap-override:0.0%;size-adjust:76.49%}.barlow_condensed_cf571b7b-module__UvkZ0G__className{font-family:Barlow Condensed,Barlow Condensed Fallback;font-style:normal}.barlow_condensed_cf571b7b-module__UvkZ0G__variable{--font-display:"Barlow Condensed", "Barlow Condensed Fallback"}
:root{--bg:#25272b;--bg-deep:#1d1f22;--panel:#313439;--panel-hover:#383b41;--paper:#e9ebee;--paper-soft:#d3d6da;--muted:#a7acb3;--line:#3a3d42;--line-strong:#5a5e65;--x:#e0524a;--y:#6fbf4a;--z:#4a8bf0;--x-text:#f27a72;--y-text:#7fcc5b;--z-text:#6ca3f5;--font-display:"Barlow Condensed", "Arial Narrow", sans-serif;--font-body:"Barlow", system-ui, sans-serif;--wrap:1200px;--gutter:clamp(16px, 4vw, 40px);--space-section:clamp(64px, 9vw, 120px);--radius:2px;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}.axis-x{--axis:var(--x);--axis-text:var(--x-text)}.axis-y{--axis:var(--y);--axis-text:var(--y-text)}.axis-z{--axis:var(--z);--axis-text:var(--z-text)}*,:before,:after{box-sizing:border-box}html{background:var(--bg);-webkit-text-size-adjust:100%}body{background:var(--bg);color:var(--paper);font-family:var(--font-body);-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility;margin:0;font-size:1.0625rem;line-height:1.6}h1,h2,h3,p,ul,ol,dl,dd,figure{margin:0}ul,ol{padding:0;list-style:none}h1,h2,h3{font-family:var(--font-display);text-wrap:balance;font-weight:600;line-height:1.05}img,svg{max-width:100%;display:block}a{color:inherit}:focus-visible{outline:2px solid var(--z-text);outline-offset:3px}::selection{background:var(--z);color:#fff}.wrap{width:100%;max-width:calc(var(--wrap) + 2 * var(--gutter));padding-inline:var(--gutter);margin-inline:auto}.visually-hidden{clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.skip-link{left:var(--gutter);z-index:10;background:var(--paper);color:var(--bg);padding:10px 16px;font-weight:600;position:absolute;top:-100px}.skip-link:focus{top:12px}main{padding-bottom:var(--space-section)}.section{padding-top:var(--space-section)}.page-top{padding-top:clamp(40px,6vw,80px)}.section-title{margin-bottom:clamp(24px,3vw,40px);font-size:clamp(2rem,1.4rem + 2vw,2.9rem)}.lead{max-width:60ch;color:var(--paper-soft);margin-top:20px;font-size:clamp(1.1rem,1rem + .35vw,1.25rem);line-height:1.55}.meta{color:var(--muted);margin-top:6px;font-size:.95rem}.note{color:var(--muted);margin-top:24px;font-style:italic}.category{color:var(--axis-text);letter-spacing:.01em;font-size:.9rem;font-weight:600}.text-link{text-decoration:underline;-webkit-text-decoration-color:var(--line-strong);text-decoration-color:var(--line-strong);text-underline-offset:5px;margin-top:12px;font-weight:500;text-decoration-thickness:1px;display:inline-block}.text-link:hover{-webkit-text-decoration-color:var(--paper);text-decoration-color:var(--paper)}.bullets li{color:var(--paper-soft);padding-left:22px;position:relative}.bullets li+li{margin-top:10px}.bullets li:before{content:"";background:var(--line-strong);width:7px;height:7px;position:absolute;top:.62em;left:0}.actions{flex-wrap:wrap;gap:12px;margin-top:32px;display:flex}.button{border:1px solid var(--line-strong);border-radius:var(--radius);min-height:46px;color:var(--paper);font:500 1rem/1 var(--font-body);cursor:pointer;background:0 0;justify-content:center;align-items:center;padding:0 22px;text-decoration:none;display:inline-flex}.button:hover{border-color:var(--paper);background:#ffffff0d}.button-primary{border-color:var(--paper);background:var(--paper);color:var(--bg)}.button-primary:hover{background:#fff}.site-header{border-bottom:1px solid var(--line);background:var(--bg-deep)}.site-header-inner{grid-template-columns:1fr auto auto;grid-template-areas:"brand nav social";align-items:center;gap:8px 36px;padding-block:18px;display:grid}.brand{flex-direction:column;grid-area:brand;line-height:1.25;text-decoration:none;display:flex}.brand-name{font-family:var(--font-display);font-size:1.4rem;font-weight:600}.brand-role{color:var(--muted);font-size:.95rem}.site-nav{grid-area:nav;gap:28px;display:flex}.site-nav a{border-bottom:2px solid #0000;padding-block:6px;font-weight:500;text-decoration:none}.site-nav a:hover{border-bottom-color:var(--line-strong)}.site-nav a[aria-current=page]{border-bottom-color:var(--paper)}.header-social{grid-area:social;gap:4px;display:flex}.header-social a{width:44px;height:44px;color:var(--muted);place-items:center;display:grid}.header-social a:hover{color:var(--paper)}@media (max-width:720px){.site-header-inner{grid-template-columns:1fr auto;grid-template-areas:"brand social""nav nav";padding-block:14px 8px}.site-nav{gap:24px}}.site-footer{border-top:1px solid var(--line);color:var(--muted);font-size:.95rem}.site-footer-inner{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:16px 32px;padding-block:28px;display:flex}.footer-links{flex-wrap:wrap;gap:8px 24px;display:flex}.footer-links a{align-items:center;gap:8px;min-height:44px;text-decoration:none;display:inline-flex}.footer-links a:hover{color:var(--paper)}.gizmo-axis line{stroke:var(--line-strong)}.gizmo-axis circle{fill:var(--line-strong)}.gizmo-x[data-on=true] line{stroke:var(--x)}.gizmo-x[data-on=true] circle{fill:var(--x)}.gizmo-y[data-on=true] line{stroke:var(--y)}.gizmo-y[data-on=true] circle{fill:var(--y)}.gizmo-z[data-on=true] line{stroke:var(--z)}.gizmo-z[data-on=true] circle{fill:var(--z)}.gizmo-core{fill:var(--paper)}.gizmo-axis text{fill:var(--paper);font:600 13px var(--font-display)}.hero{padding-top:clamp(40px,7vw,96px)}.hero-inner{grid-template-columns:minmax(0,5fr) minmax(0,7fr);align-items:center;gap:clamp(32px,5vw,72px);display:grid}.hero h1{letter-spacing:-.005em;font-size:clamp(2.9rem,1.5rem + 4.6vw,5.4rem);line-height:.98}.viewport-frame{border:1px solid var(--line);background:var(--bg-deep);position:relative}.viewport-frame img{width:100%;height:auto}.viewport-gizmo{filter:drop-shadow(0 1px 2px #0009);width:clamp(64px,8vw,96px);position:absolute;top:10px;right:10px}.viewport figcaption{color:var(--muted);margin-top:10px;font-size:.9rem}@media (prefers-reduced-motion:no-preference){.viewport-gizmo line{stroke-dasharray:60;stroke-dashoffset:60px;animation:.65s cubic-bezier(.2,.7,.2,1) forwards gizmo-draw}.viewport-gizmo circle,.viewport-gizmo text{opacity:0;animation:.25s ease-out forwards gizmo-pop}.viewport-gizmo .gizmo-z line{animation-delay:.25s}.viewport-gizmo .gizmo-x line{animation-delay:.4s}.viewport-gizmo .gizmo-y line{animation-delay:.55s}.viewport-gizmo .gizmo-z :is(circle,text){animation-delay:.7s}.viewport-gizmo .gizmo-x :is(circle,text){animation-delay:.85s}.viewport-gizmo .gizmo-y :is(circle,text){animation-delay:1s}}@keyframes gizmo-draw{to{stroke-dashoffset:0}}@keyframes gizmo-pop{to{opacity:1}}@media (max-width:960px){.hero-inner{grid-template-columns:1fr}}.focus-areas{grid-template-columns:repeat(3,minmax(0,1fr));gap:clamp(28px,4vw,56px);display:grid}.focus-area:before{content:"";background:var(--axis);width:44px;height:3px;margin-bottom:18px;display:block}.focus-area h3{font-size:1.65rem}.focus-area p{color:var(--muted);margin-top:10px}@media (max-width:800px){.focus-areas{grid-template-columns:1fr}}.xr-panel{border-left:3px solid var(--axis);background:var(--panel);grid-template-columns:minmax(0,5fr) minmax(0,6fr);gap:24px clamp(32px,5vw,64px);padding:clamp(24px,4vw,48px);display:grid}.xr-panel h3{font-size:clamp(1.7rem,1.3rem + 1.2vw,2.2rem)}.xr-panel h3 a{text-decoration:none}.xr-panel h3 a:hover{text-underline-offset:6px;text-decoration:underline;text-decoration-thickness:2px}.xr-panel .note{grid-column:1/-1;margin-top:0}@media (max-width:800px){.xr-panel{grid-template-columns:1fr}}.featured-games{grid-template-columns:repeat(3,minmax(0,1fr));gap:clamp(32px,3.5vw,44px);margin-top:clamp(40px,5vw,64px);display:grid}.featured-game h3{margin-top:18px;font-size:1.55rem}.featured-game h3 a{text-decoration:none}.featured-game h3 a:hover{text-underline-offset:5px;text-decoration:underline}.featured-game>p:not(.meta){color:var(--paper-soft);margin-top:10px}.featured-game-cover{display:block}.more-link{margin-top:40px}@media (max-width:900px){.featured-games{grid-template-columns:1fr;max-width:560px}}.cover{border:1px solid var(--line);background:var(--bg-deep);overflow:hidden}.cover img{object-fit:cover;width:100%;height:100%}.cover-card{aspect-ratio:16/10}.cover-full{width:fit-content;max-width:100%;margin-top:clamp(28px,4vw,44px)}.cover-full img{width:auto;max-height:min(64vh,620px)}.cover-gizmo{background:var(--panel);place-items:center;display:grid}.cover-gizmo svg{width:min(40%,180px)}.cover-full.cover-gizmo{aspect-ratio:16/5;width:100%}.cover-full.cover-gizmo svg{width:min(22%,150px)}.nowrap{white-space:nowrap}.experience{grid-template-columns:minmax(0,4fr) minmax(0,7fr);gap:32px clamp(32px,5vw,72px);display:grid}.experience .lead{margin-top:0}.experience-list li{border-top:1px solid var(--line);padding-block:18px}.experience-list li:last-child{border-bottom:1px solid var(--line)}.experience-title{font-weight:500}@media (max-width:800px){.experience{grid-template-columns:1fr}}.contact-section{max-width:calc(760px + 2 * var(--gutter));margin-inline:0}.contact-section .lead a{text-underline-offset:4px}.contact-section .button{margin-top:32px}.contact-dialog{border:1px solid var(--line-strong);border-radius:var(--radius);background:var(--panel);width:min(460px,100vw - 32px);color:var(--paper);padding:0}.contact-dialog::backdrop{background:#0c0d0fb8}.contact-dialog-body{padding:24px 28px 28px}.contact-dialog-head{justify-content:space-between;align-items:center;margin-bottom:12px;display:flex}.contact-dialog h2{font-size:2rem}.dialog-close{width:44px;height:44px;color:var(--paper);cursor:pointer;background:0 0;border:0;place-items:center;margin-right:-10px;display:grid}.contact-dialog p{color:var(--paper-soft)}.contact-list{margin-top:20px}.contact-list>div{border-top:1px solid var(--line);padding-block:12px}.contact-list dt{color:var(--muted);font-size:.9rem}.contact-list dd{flex-wrap:wrap;align-items:center;gap:12px;font-weight:500;display:flex}.contact-list a{text-underline-offset:4px;word-break:break-all}.copy-button{border:1px solid var(--line-strong);border-radius:var(--radius);min-height:36px;color:var(--paper);font:500 .9rem var(--font-body);cursor:pointer;background:0 0;padding:0 12px}.copy-button:hover{border-color:var(--paper)}@media (prefers-reduced-motion:no-preference){.contact-dialog[open]{animation:.16s ease-out dialog-in}}@keyframes dialog-in{0%{opacity:0;transform:translateY(8px)}}.page-head h1,.project-head h1,.about-bio h1,.not-found h1{font-size:clamp(2.7rem,1.9rem + 3.2vw,4.4rem)}.filters{flex-wrap:wrap;gap:8px;margin-top:28px;display:flex}.filter{border:1px solid var(--line-strong);border-radius:var(--radius);min-height:42px;color:var(--paper);font:500 1rem var(--font-body);cursor:pointer;background:0 0;align-items:center;gap:8px;padding:0 16px;display:inline-flex}.filter:hover{border-color:var(--paper)}.filter[class*=axis-]:before{content:"";background:var(--axis);width:8px;height:8px}.filter-count{color:var(--muted);font-size:.9rem}.filter[aria-pressed=true]{border-color:var(--paper);background:var(--paper);color:var(--bg)}.filter[aria-pressed=true] .filter-count{color:#5b5f66}.project-grid{grid-template-columns:repeat(auto-fill,minmax(min(100%,300px),1fr));gap:clamp(20px,2.5vw,32px);margin-top:32px;display:grid}.project-card-link{background:var(--panel);flex-direction:column;height:100%;text-decoration:none;display:flex}.project-card-link:hover{background:var(--panel-hover)}.project-card-link:hover h3{text-underline-offset:5px;text-decoration:underline}.project-card .cover{border:0}.project-card-text{padding:18px 22px 24px}.project-card h3{margin-top:6px;font-size:1.5rem}.project-card-text>p:last-child{color:var(--paper-soft);margin-top:10px}.back-link .text-link{margin-top:0}.project-head{margin-top:28px}.project-head h1{margin-top:6px}.project-body{grid-template-columns:minmax(0,7fr) minmax(0,4fr);align-items:start;gap:40px clamp(32px,5vw,72px);margin-top:clamp(32px,4vw,48px);display:grid}.prose{max-width:68ch;font-size:1.125rem}.prose p+p,.prose p+.bullets,.prose .bullets+p{margin-top:1em}.facts{background:var(--panel);padding:8px 24px 24px}.facts dl>div{border-bottom:1px solid var(--line);padding-block:14px}.facts dt{color:var(--muted);font-size:.9rem}.facts dd{margin-top:2px}.facts .button{width:100%;margin-top:22px}.pager{border-top:1px solid var(--line);grid-template-columns:1fr 1fr;gap:16px;margin-top:clamp(48px,7vw,88px);padding-top:20px;display:grid}.pager-link{flex-direction:column;gap:2px;padding-block:10px;text-decoration:none;display:flex}.pager-next{text-align:right;align-items:flex-end}.pager-dir{color:var(--muted);font-size:.9rem}.pager-title{font-family:var(--font-display);font-size:1.45rem;font-weight:600;line-height:1.15}.pager-link:hover .pager-title{text-underline-offset:5px;text-decoration:underline}@media (max-width:800px){.project-body{grid-template-columns:1fr}}.about{grid-template-columns:minmax(0,7fr) minmax(0,4fr);align-items:start;gap:40px clamp(32px,5vw,72px);display:grid}.about-bio .lead{margin-top:28px}.about-bio .lead+p{max-width:60ch;color:var(--paper-soft);margin-top:1em;font-size:clamp(1.1rem,1rem + .35vw,1.25rem);line-height:1.55}.about .facts{margin-top:8px}@media (max-width:800px){.about{grid-template-columns:1fr}}.not-found{min-height:40vh}
