@font-face{font-family:Inter;font-style:normal;font-weight:400 700;font-display:swap;src:url(/fonts/inter-4.1-roman-latin.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+2190-2199,U+2212,U+2215,U+2713,U+2715,U+FEFF,U+FFFD}@font-face{font-family:Inter;font-style:normal;font-weight:400 700;font-display:swap;src:url(/fonts/inter-4.1-roman-latin-ext.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,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:Inter;font-style:normal;font-weight:400 700;font-display:swap;src:url(/fonts/inter-4.1-roman-cyrillic.woff2)format("woff2");unicode-range:U+400-52F,U+1C80-1C8A,U+20B4,U+2116,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter;font-style:italic;font-weight:400 700;font-display:swap;src:url(/fonts/inter-4.1-italic-latin.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+2190-2199,U+2212,U+2215,U+2713,U+2715,U+FEFF,U+FFFD}@font-face{font-family:Inter;font-style:italic;font-weight:400 700;font-display:swap;src:url(/fonts/inter-4.1-italic-latin-ext.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,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:Inter;font-style:italic;font-weight:400 700;font-display:swap;src:url(/fonts/inter-4.1-italic-cyrillic.woff2)format("woff2");unicode-range:U+400-52F,U+1C80-1C8A,U+20B4,U+2116,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter fallback;src:local(Arial),local(Helvetica),local(Liberation Sans);size-adjust:107.1%;ascent-override:90.4%;descent-override:22.5%;line-gap-override:0%}:root{--ink:#111;--muted:#6b6b6b;--line:#e3e2df;--tint:#f5f4f0;--link:#1858c4;--link-line:#1858c44d;--visited:#7a2f99;--pink:#e3277f;--font:Inter, "Inter fallback", system-ui, sans-serif;--small:14px;--text:17px;--h2:28px;--h1:44px;--leading:1.6;--measure:640px;--side:32px;--gap:16px;--section:80px;--top:72px;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}@media (width<=600px){:root{--h2:24px;--h1:36px;--side:20px;--section:56px;--top:32px}}*,:before,:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%;scroll-padding-top:24px}body{color:var(--ink);font-family:var(--font);font-size:var(--text);line-height:var(--leading);font-optical-sizing:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background:#fff;margin:0}img{max-width:100%}h1,h2,h3{text-wrap:balance}h1{font-size:var(--h1);letter-spacing:-.01em;margin:0;font-weight:700;line-height:1.1}h2{margin:var(--section) 0 var(--gap);font-size:var(--h2);font-weight:400;line-height:1.2}h3{font-size:var(--text);line-height:var(--leading);margin:0;font-weight:600}p{margin:0 0 var(--gap);text-wrap:pretty}ul,ol{margin:0 0 var(--gap);padding:0;list-style:none}strong{font-weight:600}time,.num{font-variant-numeric:tabular-nums}.meta,.aside{font-size:var(--small);color:var(--muted);line-height:1.5}a{color:var(--link);text-underline-offset:.2em;text-decoration-line:underline;text-decoration-thickness:1px;-webkit-text-decoration-color:var(--link-line);text-decoration-color:var(--link-line)}a:visited{color:var(--visited);-webkit-text-decoration-color:var(--visited);text-decoration-color:var(--visited)}a:hover{color:var(--pink);text-decoration-color:currentColor}a:focus-visible,summary:focus-visible,button:focus-visible{outline:2px solid var(--link);outline-offset:2px;border-radius:3px}.icon{vertical-align:middle;border-radius:3px;width:16px;height:16px;margin-right:.35em;position:relative;top:-.05em}.nowrap{white-space:nowrap}.item-link{font-weight:600}.page{max-width:calc(var(--measure) + 2 * var(--side));padding:var(--top) var(--side) 0;margin:0 auto}.page.wide{max-width:calc(1120px + 2 * var(--side))}.back{margin:0 0 32px}.back a:before{content:"← "}.portraits{gap:12px;margin-bottom:24px;display:flex}.portraits a{border-radius:50%;display:block}.portraits img{border-radius:50%;width:112px;height:112px;display:block}@media (width<=600px){.portraits img{width:88px;height:88px}}.tags{margin:12px 0 20px}.facts{grid-template-columns:max-content 1fr;gap:2px 24px;margin:0 0 40px;display:grid}.facts div{display:contents}.facts dt{color:var(--muted)}.facts dd{margin:0}.follow{flex-wrap:wrap;align-items:center;gap:8px 16px;margin:28px 0 24px;display:flex}.follow-card{border:1.5px solid var(--ink);box-shadow:0 2px 0 var(--ink);color:var(--ink);border-radius:12px;align-items:center;gap:16px;padding:14px 24px 14px 18px;text-decoration:none;transition:transform .12s,box-shadow .12s;display:inline-flex}.follow-card:visited{color:var(--ink)}.follow-card:hover{color:var(--ink);box-shadow:0 3px 0 var(--ink);transform:translateY(-1px)}.follow-card:active{box-shadow:0 1px 0 var(--ink);transform:translateY(1px)}.follow-card>span{flex-direction:column;display:flex}.follow-title{font-weight:600}.follow-handle{color:var(--link)}.follow-card:hover .follow-handle{color:var(--pink)}.doodle img{width:170px;height:auto;display:block}@media (width<=600px){.follow{flex-direction:column-reverse;align-items:stretch;gap:0}.follow-card{justify-content:flex-start}.doodle{align-self:flex-start;margin:0 0 -4px 16px}.doodle img{width:160px}}.since{margin-bottom:12px}.updates li{grid-template-columns:2.75rem 3.5rem 1fr;gap:0 12px;margin-bottom:8px;display:grid}.updates time,.update-year{color:var(--muted);font-variant-numeric:tabular-nums;white-space:nowrap}@media (width<=600px){.updates li{grid-template-columns:3.5rem 1fr}.update-year{display:none}.updates li:has(.update-year:not(:empty)) time:after{content:none}}.new{background:var(--pink);color:#fff;letter-spacing:.06em;text-transform:uppercase;font-feature-settings:"case";vertical-align:2px;border-radius:4px;padding:1px 6px;font-size:11px;font-weight:700;line-height:16px;display:inline-block}.more{margin:0 0 var(--gap)}.more summary{color:var(--link);cursor:pointer;list-style:none;display:inline-block}.more summary::-webkit-details-marker{display:none}.more summary:before{content:"+";text-align:center;width:1em;margin-right:.25em;font-weight:600;display:inline-block}.more[open] summary:before{content:"−"}.more summary:hover{color:var(--pink)}.more[open] summary{margin-bottom:8px}.strip{gap:8px;display:flex}.strip li{flex:var(--ratio) 1 0;min-width:0}.strip a,.justified a{display:block}.strip img,.justified img{outline-offset:-1px;border-radius:4px;outline:1px solid #0000000f;width:100%;height:auto;display:block}@media (width<=600px){.strip li:nth-child(n+4){display:none}}.project{grid-template-columns:1fr 240px;align-items:start;column-gap:28px;margin-bottom:40px;display:grid}.project:not(:has(.shot)){grid-template-columns:1fr}.project>*{grid-column:1}.project .shot{grid-area:1/2/span 4}.shot{display:block}.shot img{aspect-ratio:16/10;object-fit:cover;object-position:top;outline-offset:-1px;border-radius:6px;outline:1px solid #00000014;width:100%;height:auto;display:block}.project .meta{margin:0 0 8px}.cw{color:var(--ink)}.project p:last-child{margin-bottom:0}.project-links{flex-wrap:wrap;gap:4px 24px;display:flex}@media (width<=600px){.project{grid-template-columns:1fr}.project .shot{grid-area:auto/1;margin-bottom:12px}}.list li{margin-bottom:14px}.list li p{margin:0}.list .meta{white-space:nowrap;margin-left:4px}.hire{margin-top:var(--section);background:var(--tint);border-radius:14px;padding:4px 32px 12px}.hire h2{margin-top:24px}@media (width<=600px){.hire{margin-left:calc(-1 * var(--side));margin-right:calc(-1 * var(--side));padding:4px var(--side) 12px;border-radius:0}}.site-foot{max-width:calc(var(--measure) + 2 * var(--side));padding:0 var(--side) 64px;font-size:var(--small);color:var(--muted);margin:96px auto 0;line-height:1.5}.site-foot.wide{max-width:calc(1120px + 2 * var(--side))}.site-foot:before{content:"";border-top:1px solid var(--line);margin-bottom:24px;display:block}.foot-links{flex-wrap:wrap;gap:8px 24px;margin-bottom:12px;display:flex}.site-foot p{margin:0}.gallery h1{margin-bottom:8px}.gallery .lede{margin:16px 0 0}.gallery h2{margin:56px 0 16px}.gallery section:first-of-type h2{margin-top:40px}.gallery .lede+section .justified{margin-top:32px}.justified{--row:230px;flex-wrap:wrap;gap:8px;display:flex}.justified li{flex:var(--ratio) 1 calc(var(--ratio) * var(--row));min-width:0}.justified .justified-end{flex:100000 1 0;height:0}.justified a{cursor:zoom-in}@media (width<=600px){.justified{--row:128px;gap:4px}}html.viewer-open{overflow:hidden}.viewer:focus{outline:none}.viewer{--viewer-bg:255 255 255;--pad-top:64px;--pad-side:88px;--pad-bottom:80px;z-index:100;background:rgb(var(--viewer-bg));overscroll-behavior:contain;touch-action:none;-webkit-user-select:none;user-select:none;transition:background-color .2s;position:fixed;inset:0}.viewer.plain{--viewer-bg:0 0 0;--pad-top:0px;--pad-side:0px;--pad-bottom:0px}.viewer-track{will-change:transform;position:absolute;inset:0}.viewer-track.animate{transition:transform .26s cubic-bezier(.2,.8,.2,1)}.slide{padding:var(--pad-top) var(--pad-side) var(--pad-bottom);justify-content:center;align-items:center;margin:0;display:flex;position:absolute;inset:0}.slide:first-child{transform:translate(-100%)}.slide:nth-child(3){transform:translate(100%)}.slide-frame{width:min(100vw - 2 * var(--pad-side), (100dvh - var(--pad-top) - var(--pad-bottom)) * var(--ratio));aspect-ratio:var(--ratio);display:block;position:relative}.slide-frame img{-webkit-user-drag:none;width:100%;height:100%;position:absolute;inset:0}.slide-full{opacity:0;transition:opacity .2s}.slide-full.loaded{opacity:1}.viewer-close,.viewer-prev,.viewer-next{color:var(--ink);place-items:center;transition:opacity .2s;display:grid;position:absolute}.viewer-close:visited,.viewer-prev:visited,.viewer-next:visited{color:var(--ink)}.viewer-close:hover,.viewer-prev:hover,.viewer-next:hover{color:var(--pink)}.viewer svg{fill:none;stroke:currentColor;stroke-width:1.8px;stroke-linecap:round;stroke-linejoin:round}.viewer-close{top:calc(10px + env(safe-area-inset-top,0px));border-radius:50%;width:48px;height:48px;right:10px}.viewer-prev,.viewer-next{border-radius:12px;width:64px;height:96px;top:50%;translate:0 -50%}.viewer-prev{left:12px}.viewer-next{right:12px}.viewer-count{top:calc(22px + env(safe-area-inset-top,0px));font-size:var(--small);color:var(--muted);font-variant-numeric:tabular-nums;margin:0;line-height:1.5;transition:opacity .2s;position:absolute;left:22px}.viewer-caption{left:50%;bottom:calc(24px + env(safe-area-inset-bottom,0px));text-align:center;width:min(40rem,100% - 40px);font-size:var(--small);margin:0;line-height:1.5;transition:opacity .2s;position:absolute;translate:-50%}.viewer.plain :is(.viewer-close,.viewer-prev,.viewer-next,.viewer-count,.viewer-caption){opacity:0;pointer-events:none}@media (width<=600px),(pointer:coarse){.viewer{--pad-side:0px;--pad-top:64px;--pad-bottom:72px}.viewer-prev,.viewer-next{display:none}}.post article>header{margin-bottom:40px}.post h1{font-size:var(--h1)}.post article>header .meta{margin:12px 0 0}.post figure{margin:32px 0}.post-end{margin-top:56px}.post-end a:before{content:"← "}.factorio-template{white-space:nowrap;border:1px solid #10a8c0;border-radius:4px;padding:0 5px}.factorio-map img{border-radius:4px;width:100%;max-width:450px;height:auto;margin:0 auto;display:block}.factorio-ending{text-align:center;margin-top:48px}.factorio-ending p{margin:0 0 8px}.factorio-rocket{margin:40px auto 0;display:block}kbd{border:1px solid var(--line);min-width:2em;font:inherit;font-size:var(--small);letter-spacing:.04em;font-feature-settings:"case";border-bottom-width:3px;border-radius:6px;padding:0 6px;font-weight:600;display:inline-block}fieldset{border:1px solid var(--line);border-radius:10px;margin:0 0 24px;padding:8px 20px 0}legend{margin-left:-6px;padding:0 6px;font-weight:600}.option{margin:0 0 16px}.option p{margin-bottom:12px}.option-1{border-color:#e0483e}.option-2{border-color:#2f9e55}.option-3{border-color:var(--link)}.mark-1{border-bottom:2px solid #e0483e}.mark-2{border-bottom:2px solid #2f9e55}.mark-3{border-bottom:2px solid var(--link)}@media (width<=600px){fieldset{padding:4px 14px 0}}@media (prefers-reduced-motion:reduce){*,:before,:after{transition:none!important}}
