@font-face{font-family:Sora Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url(/assets/sora-latin-ext-wght-normal-CawQDOvP.woff2)format("woff2-variations");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:Sora Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url(/assets/sora-latin-wght-normal-DdqRvwsR.woff2)format("woff2-variations");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:Martian Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url(data:font/woff2;base64,d09GMgABAAAAAAxkABMAAAAAFZAAAAwBAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGhwbHhwoBmA/U1RBVIEmJyoAgQwvZBEICoosiE0LNgAwjiQBNgIkA2IEIAWGeAeBWwwHGzATIxG2k5OySvEXCbYhWv3gJrFpmoZGMZIax+NtVJ3VzdFgGn7fE9wAFrgQPhkhySw8fWvlr+qe4WMCdQFAhQrQRScSHDiUmxhzPjLv/P78e9afzDi32H3iHarWIEmFcQqmTmchdp/gP4Ff0P/pzP5oRmBgGWEpQNClugqo6PKuKNc3BxVg1QeQbG9WJpCJZQkp3XpLlszhJjDgHQblcAZnMRpJyPe/AGdh/3O/T5uzzPL9mc1sFlA4UqJCV+WnmJ8lyhK+X1ykEowHlJ26CncLgAoAlKiqsLbw7+L+G1JOWa5ZM17mPNKpEQOSOjN7vLaxCBCzeb2KIhiEiEyCACHFisn0LO2HNixAEkDRtcMoFDztZPkCiGBL8vWtfkd/QTPoc+ZLgCUkyAGSpNdrRKBwHlAPUNioPz3+Q+FZiOwP4qqmgp3kH3gHQPcNBihnEAQfBbIFQDW9d5pPEwTcO9I8AQh3ZS3yslBoVNrFOglyrXSk+vo91dP9eFeOYBwVR94uJadaae40JCBROZ0BKvHHAcH/DbfgfeC5vH5HXwpAutT3EWVzHNquU0wAFDBANoOgeMv9f50rncGl3IRrPUcw9hN5TT6SPn5QQzDrR/KKfCC9C9XrWbzTkM0yhyyCIjGppMt07og0YtKlkCFVq7NDOkXI5uOr2gNxoEWbKYdhq0LAb4BEYDZcmuHgLVwctXpw8rUPvrNg9SkQkyyAKVyg+wlyIWOA/AXgCWAbAAZNepMMjbq3hHAqDOWbEWuNb4uNQ6HullXc6u1NTanW2rxqQ63ilqiwWbDQLEQb0DpykZyfI4TA7n+X2PYeOvDOOwHy3XfJ/W/D1nfQgfdC6G0fg1qFIICpmwL/g0828ErPewSxjd787AVkohIMhQaSIO98e/e9m7E+xKJtpA7oOmFOaNrmiZOia3cneVeBrZeeIVhCEeQnc/P3RnQF0VW3rT13nL+0wde1KETzH8tfXrO7au/pKjWs85pCrtBL7xHb7n6xEZMp5TiQ9j9fC3+SEENhat5w1VNH6zMXo8GwYC6E/EsGNDKG8ENPwdbgk16E6jehA3cQ227vVSzgBvxB1/3v3z9xHecEmeAt/Dj/Udbc+yJ534sCETfLQUF85PCrb7xx/NWT7qrVsr15ISOc9S5aF0L1a67x1iMmJiTwZZrDxo0lExzEH+RSv8vj8j8WcvDNCvvA+acOdHcO9A9PDQw5hk5o7Gb9kPX8m1YyTTZbrCZ3ltaXM4dyyovKdJdK6R4cZmTU0nJYCDmxdw1lPrgctR7eyARmijpjoYFKCGxuyuAKlJMxX4FS0ZafEk12c5JTwf3pjDUxmbFTvkI85ys7pZTkaOoXRyQ9ZvavpYxHEsum/WsoD5ObVO9lUSt5K1hDK5c967govrbW8/HdOpdVTod8za74va+ce9Yd97x+GNAJ/Pjj8Y6lw9+e937x/p3/jFBvDTo8AeRP7nr2rDPffxtSYro4rosIxB0MbXsjLqdHzKMX/p/pUk/J3uBQfAfH2bNSfUQz3uWkbF/G5dph88jopEKvskq+4lByc/bSXq/Da79muzysthq6/R2dtm62eTpAuVzIcHkQ3Rerb91WhwfvC9Q3VutLx9vdeawOttODPwfX42HbuEFjGR30afMIp9mwSJRh3QkNtSCAR55SCVdiLmBP7VKwQrjCgcCqwDAxX165Jw2YxnVE5H5BfsAIDG6U36F9+xx0Q58SK1rMsVGrbRfe5dQvwZnWieqQ9fEWVdU0THVzGEPqLXU+6Gk+9jozBQEICiw6D8AqIEe3cbQjbgkvq3Id+sSYtZDpZSSMgZnRoC4rt33aLzBvCrEc58bhWVhvEJOKkAp8YH00KklDb2ihf+iHynhNZivp8MDzfAzRIw+kVQ1vBIOVCv2Z27kTDna7B6khd/N0OI2nEVkWxXLO8+fw3Ol8TnOAMHI+BAimYAQNZADL2GHwy1Yw0nuFLMIxdswFv2IMOGlS+sUNKRyzKY13unxDsa8slfLVAfUTgmGhSEAsIYnTaQEo3hzy6Y/RWCWdZqWXg+zNid3n+/ixMXdu1XSX0khlQiGRxVUwqARBHXY6G/fTJIgePf2SKJqwQjXq4VjEQDe7tVbYzrROzmfxVWDfu8OS2fqnrs39IMLX7KuhsCUQUKvP3VNSjb7QEPO8I33KBNfFTuop5Bi6uuJyOt0eSP2COnJ+t2Mhf7wt4VGqog/vEROmJDcbdAoshKTBZNJjWh12a9JnumVz0+CNyGPm1YZEDzXBk1gplBrDuS2ugpL0/nNNrhclstyiDkd/ttC7Q1slBLkxjEtiY5zkBIfn6jY+yfA8+YnFvGB1uih0Iuw0DjuF3eBMNbqgDcqkJaUy3qBpXn6t2ynOLNGgtFEcUAMh6nS+GHckjNWkxbfXeucb48zpwWCoECo6EGLI5UPG4PUzYJBjVs+rgjOYy/WQPYYHhXzYbXQooPd4bJNJK0dXcO/exFM9o2iKC7gwNV4wLS1Z542UubImrsZ+D6lPNdbhJ4sdz0dyqUCBmt6/F/y70sR59p5QSDpURNZps/lsVNvLYsFgE0Ua90OjMV4Yo9B6rZP5GHIbYNorSxKqw4XgiTVHwv6uazaTcYG0seDb3RPU6/G5NkQjglH0oO2P7ePh8ELBLrbrmYAzniEt5mD5xo0P32pL0VKuUG8MJmsUDwY3byYtg0qHmNPc3Hx9Z8qzNwPqzEaMry//IfGF61DQpIx3bV+NhXye+q80UQyHu8SIQTHHFImsbG/ftkWsEjux8zm4KrqKcmBXbPPFy42uIu7Z3R/PVawz03V0797P5mJ9Kredz7+7z5M8/UhdK72441Luo8CJU/KITSnlwlG/aOHQp7B9+7pEM1YIs66y7YdI+OgNKlfM1e5237hb3ujgyz7aspKACRZbCwaMi7GBDEPStyYIICFGXAy4SEr13mgsGnEb9a5V6JAJerlsPG6FSS2rnlytP7ouz9pSrYl4LtcLhfL59W3QfYTApN9pN6vVNmeLHDhtTkKvxwrN6E02u+j12mft1E3N3PhjpBBvpeKFy9B9aCKXK+XGYD4tvIHekIfG5W3l6gDpXQEJHhNniO4+a0DfS70O+E2FQjAIt0H3KQoyijarxaC28p/ev3iIk5blGaFhKLfb3SG2B1d3HNbMVVEUlK7F0oU6Cjcuwiz6YnUCIEQQYhgkZPPdSKUKHq8gl7OyPNPPZDC5vQYYVmtBvw3aV02zM7C8OAGnU2BbBSfVDkYYHxQv7a/UKMhJkCmuzfd7KVYDAfXkQYQ4k48fbNQSy+9K9DokS6by6VKA6+vOxKKSrZQGQNieCLEjAuDyF6RswakesYWCclthzQGRFuylSVGWO/0FkbMYjeT8lertoQoaNZuAQQxm7hKGfhJTzWS2QZNj++Vyo1taN2IGKRoQgWjT6QwQACCAyW+ZO3+w6IYCxlUAgEyl/T+vAHD49c4fyWr1pTsWXBRkK7/KqvV7J+w/dQgg2Oi82rdglu7Bg4NggpdhqzAvKmSkYPPuDBEA+Pu04EssfPMeIKBQD8MA2wyjzhtl+QcYsQHwOXkHFzpzL1dS5QM3bMfJLZMRcIdC/7nLqK/pqfR6kEsg5iYXQs5zxec4N2Rb5paQyQqnIQq4S0wv90hXy318SnlApvhtxMTAqqKKPBbHbi1eBcuiiBNH1ifRrMo4wSCua5Wmw0kpaXyWpQHtnz0ZBSEbx9MZkqCovTPxSqo02rQFG1MxW8In8aNuac5UQ8+cMmaNA43B7paXMVvAWGpBUTXFlMIm3lQ7YpP1KTWcWAczU8mvzEisQ6v27dayV+Fi//C4BLw0o3/IKtd0PO20jd7StbMbaq2Kaec6Fe3XY53a90z5STrSBJzdrqsEne2aWIbWCbXTZ4paHhqrP5Wt52RotiZ6+k8pyletZ6ycUplsUZ2u1hVXlr0DlM3yJk8ChF+iEFT7QzDUqjfNYcp8GsWKI6544ksgoUQYiSVFUiVN0tFqznyyklhJtNauZsb3SaQoymyOto0HKSIcEm8r2BI8EawMlNbtMovXS3ZZZIYqtvyBptGxde3sqRrvWAFte8ctaKZE+SjSdpPfAQ==)format("woff2-variations");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Martian Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url(/assets/martian-mono-cyrillic-wght-normal-B84CD5C_.woff2)format("woff2-variations");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Martian Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url(/assets/martian-mono-latin-ext-wght-normal-DlL6xMw5.woff2)format("woff2-variations");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:Martian Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url(/assets/martian-mono-latin-wght-normal-5W32yIyr.woff2)format("woff2-variations");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}:root{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--bg:oklch(100% 0 0);--surface:oklch(95.5% .008 357);--ink:oklch(18% .015 357);--muted:oklch(45% .02 357);--rasp:oklch(55% .21 357);--rasp-deep:oklch(49% .2 357);--accent:oklch(42% .15 265);--hairline:oklch(18% .015 357/.14);--footer-bg:oklch(18% .015 357);--footer-ink:oklch(97% .004 357);--footer-link-hover:oklch(78% .16 357);--font-sans:"Sora Variable", system-ui, sans-serif;--font-mono:"Martian Mono Variable", monospace;--ease-out:cubic-bezier(.22, 1, .36, 1)}:root[data-theme=dark]{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--bg:oklch(13% .01 357);--surface:oklch(18% .012 357);--ink:oklch(93% .006 357);--muted:oklch(70% .015 357);--rasp:oklch(60% .22 357);--rasp-deep:oklch(74% .17 357);--hairline:oklch(93% .006 357/.16);--footer-bg:oklch(17% .012 357);--footer-ink:oklch(93% .006 357)}*{box-sizing:border-box}html,body,#app{min-height:100%}body{background:var(--bg);color:var(--ink);font-family:var(--font-sans);-webkit-font-smoothing:antialiased;transition:background .25s var(--ease-out), color .25s var(--ease-out);margin:0;font-size:1.0625rem;line-height:1.65}::selection{background:var(--rasp);color:oklch(100% 0 0)}h1,h2,h3{text-wrap:balance;letter-spacing:-.03em;margin:0;font-weight:800;line-height:1.08}p{text-wrap:pretty;margin:0}a{color:var(--rasp-deep);text-underline-offset:.18em;transition:text-underline-offset .18s var(--ease-out);text-decoration:underline;text-decoration-thickness:1.5px}a:hover{text-underline-offset:.3em}:focus-visible{outline:2px solid var(--rasp);outline-offset:3px;border-radius:2px}.container{width:min(100% - 3rem,68rem);margin-inline:auto}.sand-hero{border-bottom:1px solid var(--hairline);height:clamp(380px,62vh,640px);position:relative}.sand-canvas{z-index:1;touch-action:pan-y;cursor:crosshair;width:100%;height:100%;display:block;position:relative}.sand-glow{filter:blur(10px)saturate(1.3);opacity:.9;pointer-events:none;width:100%;height:100%;display:none;position:absolute;inset:0}:root[data-theme=dark] .sand-glow{display:block}.theme-toggle{z-index:2;border:1px solid var(--ink);background:var(--bg);color:var(--ink);font-family:var(--font-mono);cursor:pointer;transition:background .16s var(--ease-out);border-radius:999px;padding:.35rem .85rem;font-size:.72rem;position:absolute;top:1.25rem;right:1.25rem}.theme-toggle:hover{background:var(--surface)}.sand-hint{z-index:2;font-family:var(--font-mono);color:var(--muted);pointer-events:none;transition:opacity .4s var(--ease-out);font-size:.72rem;position:absolute;bottom:1.25rem;right:1.25rem}.sand-hint[data-awake=true]{opacity:0}.sand-tools{z-index:2;background:var(--bg);border:1px solid var(--ink);border-radius:999px;flex-wrap:wrap;gap:.375rem;padding:.375rem;display:flex;position:absolute;bottom:1.25rem;left:1.25rem}.sand-tool{font-family:var(--font-mono);color:var(--ink);cursor:pointer;transition:background .16s var(--ease-out);background:0 0;border:1px solid #0000;border-radius:999px;align-items:center;gap:.45em;padding:.3rem .7rem;font-size:.72rem;display:inline-flex}.sand-tool:hover{background:var(--surface)}.sand-tool[aria-pressed=true]{border-color:var(--ink)}.sand-swatch{border-radius:50%;width:.7em;height:.7em}.sand-swatch-erase{border:1.5px solid var(--muted)}.sand-reset{color:var(--muted)}.hero-copy{padding-block:clamp(3rem,7vw,5.5rem) clamp(1.5rem,4vw,3rem)}.hero-copy h1{font-size:clamp(2.6rem,6.5vw,5rem)}.lede{max-width:38ch;margin-top:1.4rem;font-size:clamp(1.15rem,2.2vw,1.45rem);font-weight:450;line-height:1.5}.lede em{color:var(--rasp-deep);font-style:normal;font-weight:700}.hero-note{color:var(--muted);margin-top:1.4rem;font-size:.95rem}.projects{padding-block:clamp(3.5rem,9vw,7rem) clamp(2rem,5vw,3.5rem)}.projects h2,.smaller h2{font-size:clamp(1.9rem,4.5vw,3.1rem)}.section-sub{color:var(--muted);margin-top:.8rem}.project-list{margin:clamp(2rem,5vw,3.5rem) 0 0;padding:0;list-style:none}.project{border-top:1px solid var(--hairline);grid-template-columns:minmax(15rem,2fr) 3fr;gap:clamp(1.5rem,4vw,4rem);padding-block:clamp(2.25rem,5vw,3.75rem);display:grid}.project-name{letter-spacing:-.02em;color:var(--ink);font-size:clamp(1.7rem,3.2vw,2.5rem);font-weight:800;line-height:1.1;text-decoration:none;display:inline-block}.project-name .arrow{color:var(--rasp);transition:transform .18s var(--ease-out);margin-left:.18em;font-size:.7em;display:inline-block}.project-name:hover{color:var(--rasp-deep)}.project-name:hover .arrow{transform:translate(.15em,-.15em)}.project-tagline{margin-top:.6rem;font-weight:600}.project-stack{font-family:var(--font-mono);color:var(--muted);margin-top:.75rem;font-size:.74rem}.project-body p{max-width:62ch}.project-live{margin-top:1rem;font-weight:600}.interlude{background:var(--surface);padding-block:clamp(3rem,7vw,5rem)}.interlude p{letter-spacing:-.01em;text-align:center;max-width:44ch;font-size:clamp(1.2rem,2.4vw,1.6rem);font-weight:600;line-height:1.45}.smaller{padding-block:clamp(3.5rem,9vw,6.5rem)}.smaller-list{gap:1.25rem;margin:clamp(1.5rem,4vw,2.5rem) 0 0;padding:0;list-style:none;display:grid}.smaller-list li{max-width:68ch}.footer{background:var(--footer-bg);color:var(--footer-ink);transition:background .25s var(--ease-out);padding-block:clamp(4rem,10vw,7.5rem)}.footer h2{font-size:clamp(2.4rem,6vw,4.2rem)}.footer-lede{max-width:40ch;margin-top:1.2rem;font-size:1.1rem}.footer-links{flex-wrap:wrap;gap:.6rem 2.5rem;margin:2.25rem 0 0;padding:0;list-style:none;display:flex}.footer-links a{color:var(--footer-ink);transition:color .16s var(--ease-out), text-underline-offset .18s var(--ease-out);font-size:clamp(1.1rem,2.2vw,1.4rem);font-weight:700}.footer-links a:hover{color:var(--footer-link-hover)}.footer a:focus-visible{outline-color:var(--footer-ink)}.colophon{font-family:var(--font-mono);max-width:58ch;margin-top:clamp(2.5rem,6vw,4rem);font-size:.78rem;line-height:1.8}@media (width<=720px){.project{grid-template-columns:1fr;gap:1.1rem}.sand-tools{justify-content:center;bottom:.75rem;left:.75rem;right:.75rem}.sand-hint{inset:1.05rem auto auto 1rem}.theme-toggle{top:.75rem;right:.75rem}}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important}}
