:root{--ground:#12100d;--surface:#1b1814;--surface-2:#25211b;--screen:#100e0b;--ink:#ebe4d7;--ink-2:#b8ae9e;--ink-3:#8f8676;--accent:#e9a440;--accent-ink:#1a1206;--sans:"Mona Sans", "Helvetica Neue", Arial, sans-serif;--mono:"Red Hat Mono", ui-monospace, "SFMono-Regular", Menlo, monospace;--r:4px;--ease-out:cubic-bezier(.16, 1, .3, 1);color-scheme:dark}*,:before,:after{box-sizing:border-box}html{scroll-behavior:smooth;background:var(--ground)}html.locked{overflow:hidden}body{background:var(--ground);color:var(--ink);font-family:var(--sans);-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility;margin:0;font-size:17px;font-weight:380;line-height:1.65}a{color:inherit;text-decoration:none}button{font:inherit;color:inherit;cursor:pointer}::selection{background:var(--accent);color:var(--accent-ink)}:focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:2px}code,kbd{font-family:var(--mono)}kbd{background:var(--surface-2);color:var(--ink-2);border-radius:3px;padding:4px 7px;font-size:12px;line-height:1}.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}.ico{vertical-align:-.05em;width:.85em;height:.85em;transition:transform .18s var(--ease-out);display:inline-block}.skip{z-index:60;background:var(--accent);color:var(--accent-ink);border-radius:var(--r);padding:10px 14px;position:fixed;top:16px;left:16px;transform:translateY(-200%)}.skip:focus{transform:none}.scene{height:210svh;position:relative}.scene-pin{height:100svh;position:sticky;top:0;overflow:hidden}#gl{touch-action:pan-y;width:100%;height:100%;display:block;position:absolute;inset:0}.scene-pin:after{content:"";pointer-events:none;background:linear-gradient(90deg,#12100deb 0%,#12100d8c 32%,#12100d00 58%);position:absolute;inset:0}.scene-copy{z-index:2;width:min(640px,100%);padding-left:max(16px, 6vw, env(safe-area-inset-left,0px));padding-right:max(16px, env(safe-area-inset-right,0px));pointer-events:none;padding-bottom:14svh;position:absolute;bottom:0;left:0}.scene-copy h1{letter-spacing:-.035em;margin:0 0 28px;font-size:clamp(52px,7.2vw,104px);font-weight:720;font-stretch:125%;line-height:.92}.lede{max-width:30ch;margin:0;font-size:clamp(18px,1.45vw,21px);font-weight:400;line-height:1.5}.hint{color:var(--ink-3);max-width:38ch;margin:28px 0 0;font-size:15px}.hint code{color:var(--accent);font-size:.95em}.hint-touch{display:none}@media (pointer:coarse){.hint-fine{display:none}.hint-touch{display:inline}}.scene-veil{z-index:3;background:var(--ground);opacity:0;pointer-events:none;position:absolute;inset:0}@media (aspect-ratio<=21/20){.scene-pin:after{background:linear-gradient(#12100df0 0%,#12100d99 34%,#12100d00 52%)}.scene-copy{padding-top:calc(env(safe-area-inset-top,0px) + 64px);padding-bottom:0;top:0;bottom:auto}.scene-copy h1{margin-bottom:18px}.hint{margin-top:18px}}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}.scene{height:100svh}}.no-gl .scene{height:auto}.no-gl .scene-pin{height:auto;min-height:70svh;position:relative}.no-gl #gl,.no-gl .hint{display:none}.no-gl .scene-copy{padding-top:22svh;position:relative}.page{max-width:1240px;padding-left:max(24px, env(safe-area-inset-left,0px));padding-right:max(24px, env(safe-area-inset-right,0px));grid-template-columns:minmax(0,1fr) minmax(0,1.22fr);gap:80px;margin:0 auto;display:grid}.side{flex-direction:column;height:100svh;padding-block:104px 56px;display:flex;position:sticky;top:0}.side-name{letter-spacing:-.03em;font-size:40px;font-weight:700;font-stretch:125%;line-height:1}.side-role{margin:14px 0 0;font-size:19px;font-weight:520}.side-line{color:var(--ink-2);max-width:32ch;margin:14px 0 0}.toc{flex-direction:column;align-items:flex-start;margin-top:56px;display:flex}.toc a{color:var(--ink-3);transition:color .18s var(--ease-out);align-items:center;gap:16px;padding-block:9px;font-size:15px;font-weight:560;display:flex}.toc .bar{width:28px;height:2px;transition:width .24s var(--ease-out), background-color .18s;background:currentColor}.toc a:hover,.toc a.on{color:var(--ink)}.toc a:hover .bar{width:56px}.toc a.on .bar{background:var(--accent);width:64px}.side-foot{flex-direction:column;gap:22px;margin-top:auto;display:flex}.side-shell{border-radius:var(--r);background:var(--surface);text-align:left;width:100%;max-width:360px;transition:background-color .18s var(--ease-out);border:0;justify-content:space-between;align-items:center;gap:16px;padding:13px 14px;display:flex}.side-shell:hover{background:var(--surface-2)}.side-shell:active{transform:translateY(1px)}.side-shell .term{font-family:var(--mono);color:var(--ink);white-space:nowrap;text-overflow:ellipsis;font-size:14px;overflow:hidden}.side-shell .term b{color:var(--accent);font-weight:400}.side-shell .open{color:var(--ink-3);flex:none;align-items:center;gap:8px;font-size:13px;display:flex}.links{flex-wrap:wrap;gap:8px 22px;font-size:15px;font-weight:500;display:flex}.links a{color:var(--ink-2);transition:color .18s var(--ease-out);align-items:center;gap:6px;display:inline-flex}.links a:hover{color:var(--ink)}.links a:hover .ico{transform:translate(2px,-2px)}main{flex-direction:column;gap:152px;min-width:0;padding-block:104px 56px;display:flex}main>section{scroll-margin-top:80px}.sec-h{clip:rect(0 0 0 0);width:1px;height:1px;position:absolute;overflow:hidden}.about p{max-width:60ch;color:var(--ink-2);margin:0 0 20px}.about p:first-of-type{color:var(--ink);max-width:34ch;margin-bottom:28px;font-size:21px;font-weight:400;line-height:1.55}.about strong{color:var(--ink);font-weight:560}.jobs{flex-direction:column;gap:8px;margin:0;padding:0;list-style:none;display:flex}.job{border-radius:var(--r);transition:background-color .24s var(--ease-out), opacity .24s var(--ease-out);grid-template-columns:124px minmax(0,1fr);gap:24px;margin-inline:-24px;padding:24px;display:grid}@media (hover:hover){.jobs:hover .job{opacity:.55}.jobs .job:hover{opacity:1;background:var(--surface)}}.job-when{color:var(--ink-3);font-variant-numeric:tabular-nums;margin:3px 0 0;font-size:14px;font-weight:500}.job h3{margin:0;font-size:18px;font-weight:620;line-height:1.4}.job h3 span{color:var(--ink-2);font-weight:450}.job-prev{color:var(--ink-3);margin:6px 0 0;font-size:15px}.job-desc{color:var(--ink-2);margin:14px 0 0}.job-wins{gap:6px;margin:16px 0 0;padding:0;list-style:none;display:grid}.job-wins li{color:var(--ink-2);padding-left:20px;font-size:16px;position:relative}.job-wins li:before{content:"";background:var(--accent);width:9px;height:2px;position:absolute;top:.8em;left:0}.job-tech{color:var(--ink-3);margin:16px 0 0;font-size:14px}.job-links{margin:14px 0 0;font-size:15px}.job-links a:hover{color:var(--accent)}.creds{color:var(--ink-3);max-width:60ch;margin:40px 0 0;font-size:15px}.creds a,.job-links a{color:var(--ink);align-items:center;gap:6px;font-weight:560;display:inline-flex}.creds a:hover .ico,.job-links a:hover .ico{transform:translate(2px,-2px)}.feature{grid-template-columns:196px minmax(0,1fr);align-items:start;gap:36px;display:grid}.feature>img{aspect-ratio:9/16;object-fit:cover;object-position:top;border-radius:var(--r);background:var(--surface);width:100%;max-width:100%;height:auto;display:block}.feature.has-video,.feature.no-media{grid-template-columns:minmax(0,1fr);gap:28px}.feature h3{letter-spacing:-.02em;flex-wrap:wrap;align-items:center;gap:8px 12px;margin:0;font-size:32px;font-weight:680;font-stretch:112%;line-height:1.05;display:flex}.feature .meta{color:var(--ink-3);margin:10px 0 0;font-size:15px}.feature .desc{color:var(--ink-2);max-width:56ch;margin:18px 0 0}.feature .links{flex-wrap:wrap;gap:8px 28px;margin:22px 0 0;display:flex}.feature .go{align-items:center;gap:6px;font-weight:560;display:inline-flex}.status{border-radius:var(--r);background:var(--surface-2);color:var(--accent);font-family:var(--mono);letter-spacing:0;padding:3px 8px;font-size:12px;font-weight:500;font-stretch:100%;line-height:1.3;display:inline-block}.video{aspect-ratio:16/9;border-radius:var(--r);background:var(--screen);margin:0;position:relative;overflow:hidden}.video iframe,.video-start{border:0;width:100%;height:100%;position:absolute;inset:0}.video-start{background:radial-gradient(ellipse at 30% 35%, #e9a44024, transparent 60%), var(--screen);place-items:center;display:grid}.video-start img{object-fit:cover;width:100%;height:100%;position:absolute;inset:0}.video-play{background:var(--accent);width:72px;height:72px;color:var(--accent-ink);transition:transform .22s var(--ease-out);border-radius:50%;place-items:center;font-size:26px;display:grid;position:relative;box-shadow:0 12px 32px -8px #0009}.video-play .ico{margin-left:3px}.video-start:hover .video-play,.video-start:focus-visible .video-play{transform:scale(1.08)}.video-start:focus-visible{outline-offset:-3px}.video-cap{font-family:var(--mono);color:var(--ink);font-size:13px;position:absolute;bottom:14px;left:18px;right:18px}.video-cap span{color:var(--ink-3)}.video-start img~.video-cap{text-shadow:0 1px 8px #000c}.feature .go:hover{color:var(--accent)}.feature .go:hover .ico{transform:translate(2px,-2px)}.projects{flex-direction:column;gap:4px;margin:64px 0 0;padding:0;list-style:none;display:flex}.projects a{border-radius:var(--r);transition:background-color .2s var(--ease-out);grid-template-columns:minmax(0,1fr) auto;align-items:baseline;gap:4px 24px;margin-inline:-24px;padding:18px 24px;display:grid}.projects a:hover{background:var(--surface)}.projects .n{align-items:center;gap:8px;font-size:18px;font-weight:620;display:inline-flex}.projects a:hover .ico{color:var(--accent);transform:translate(2px,-2px)}.projects .s{color:var(--ink-3);text-align:right;font-size:14px}.projects .b{color:var(--ink-2);grid-column:1/-1;max-width:56ch;margin:0;font-size:16px}.repos-head{justify-content:space-between;align-items:center;gap:16px;display:flex}.repos-head p{margin:0;font-size:18px;font-weight:620}.repos-head a{color:var(--ink-2);white-space:nowrap;align-items:center;gap:6px;font-size:15px;display:inline-flex}.repos-head a:hover{color:var(--ink)}.repos-tools{align-items:center;gap:20px;display:flex}.strip-nav{gap:6px;display:flex}.strip-nav button{border-radius:var(--r);background:var(--surface);width:32px;height:32px;color:var(--ink-2);transition:background-color .18s var(--ease-out), color .18s var(--ease-out);border:0;place-items:center;padding:0;display:grid}.strip-nav button:hover{background:var(--surface-2);color:var(--ink)}.strip-nav button:active{transform:translateY(1px)}.strip-nav .back{transform:scaleX(-1)}@media (pointer:coarse),(width<=640px){.strip-nav{display:none}}.strip{scrollbar-width:none;cursor:grab;-webkit-user-select:none;user-select:none;margin-bottom:-56px;padding-block:24px 56px;position:relative;overflow:auto hidden;-webkit-mask-image:linear-gradient(90deg,#0000,#000 6% 94%,#0000);mask-image:linear-gradient(90deg,#0000,#000 6% 94%,#0000)}.strip::-webkit-scrollbar{display:none}.strip.dragging{cursor:grabbing}.strip-track{gap:12px;width:max-content;display:flex}.repo{aspect-ratio:9/16;border-radius:var(--r);background:var(--surface);width:148px;max-width:100%;transform-origin:var(--ox,50%) 30%;transition:transform .32s var(--ease-out), box-shadow .32s var(--ease-out), background-color .2s var(--ease-out);flex-direction:column;flex:none;justify-content:space-between;display:flex;position:relative;overflow:hidden}.repo:focus-visible{z-index:1;outline-offset:2px;background:var(--surface-2);transform:scale(1.3);box-shadow:0 20px 40px -12px #000000b3}@media (hover:hover){.strip:not(.dragging) .repo:hover{z-index:1;background:var(--surface-2);transform:scale(1.3);box-shadow:0 20px 40px -12px #000000b3}}.repo img{object-fit:cover;object-position:top;width:100%;height:100%;position:absolute;inset:0}.repo .rn{font-family:var(--mono);color:var(--ink);overflow-wrap:anywhere;padding:14px;font-size:13px;line-height:1.4;position:relative}.repo .rv{color:var(--ink-3);align-items:center;gap:6px;padding:14px;font-size:13px;display:flex;position:relative}.repo.has-img{background:var(--ground)}.repo.has-img img{flex:1;height:auto;min-height:0;position:static}.repo.has-img .rv{display:none}@media (prefers-reduced-motion:reduce){.repo{transition:none}}.contact h2{letter-spacing:-.03em;text-wrap:balance;margin:0;font-size:clamp(36px,4.2vw,54px);font-weight:680;font-stretch:118%;line-height:1}.contact>p{color:var(--ink-2);max-width:50ch;margin:20px 0 0}.contact>p a{color:var(--ink);text-underline-offset:3px;text-decoration:underline;text-decoration-color:var(--ink-3)}.contact>p a:hover{text-decoration-color:var(--accent)}.form{grid-template-columns:1fr 1fr;gap:20px;max-width:620px;margin-top:40px;display:grid}.field{flex-direction:column;gap:8px;min-width:0;display:flex}.field.wide{grid-column:1/-1}.field label{color:var(--ink-2);font-size:14px;font-weight:520}.field input,.field textarea{border-radius:var(--r);background:var(--surface);width:100%;color:var(--ink);font:inherit;transition:background-color .18s var(--ease-out);border:0;padding:13px 14px;font-size:16px}.field textarea{resize:vertical;min-height:140px}.field input:hover,.field textarea:hover{background:var(--surface-2)}.field input:focus-visible,.field textarea:focus-visible{outline-offset:0}.field input:disabled,.field textarea:disabled{opacity:.6}.form-row{flex-wrap:wrap;grid-column:1/-1;align-items:center;gap:18px;display:flex}.btn{border-radius:var(--r);background:var(--accent);color:var(--accent-ink);transition:background-color .18s var(--ease-out), transform .14s var(--ease-out);border:0;padding:13px 22px;font-size:16px;font-weight:620}.btn:hover{background:#f2b65c}.btn:active{transform:translateY(1px)}.btn:disabled{opacity:.6;cursor:default}.form-status{color:var(--ink-2);font-size:15px}.form-status.is-error{color:#f0a08a}main.cs{max-width:720px;padding-block:40px 72px;padding-left:max(16px, env(safe-area-inset-left,0px));padding-right:max(16px, env(safe-area-inset-right,0px));margin:0 auto;display:block}.cs-back a{letter-spacing:-.02em;font-size:20px;font-weight:700;font-stretch:125%}.cs-back .arrow{color:var(--ink-3);font-weight:400;font-stretch:100%}.cs-back a:hover .arrow{color:var(--accent)}.cs-head{margin:72px 0 56px}.cs-context{color:var(--ink-3);margin:0 0 14px;font-size:15px;font-weight:500}.cs-head h1{letter-spacing:-.03em;text-wrap:balance;margin:0;font-size:clamp(32px,5vw,48px);font-weight:680;font-stretch:118%;line-height:1.05}.cs-glance{flex-wrap:wrap;gap:8px;margin:24px 0 0;padding:0;list-style:none;display:flex}.cs-glance li{border-radius:var(--r);background:var(--surface);color:var(--ink-2);padding:4px 10px;font-size:14px}.cs-body{color:var(--ink-2);overflow-wrap:break-word}.cs-body h2{color:var(--ink);letter-spacing:-.015em;margin:56px 0 14px;font-size:24px;font-weight:660;font-stretch:112%;line-height:1.2}.cs-body h3{color:var(--ink);margin:32px 0 8px;font-size:18px;font-weight:620}.cs-body p,.cs-body ul,.cs-body ol{margin:0 0 18px}.cs-body ul,.cs-body ol{padding-left:1.3em}.cs-body li{margin-bottom:6px}.cs-body li::marker{color:var(--accent)}.cs-body strong{color:var(--ink);font-weight:600}.cs-body a{color:var(--ink);text-underline-offset:3px;text-decoration:underline;text-decoration-color:var(--accent)}.cs-body a:hover{color:var(--accent)}.cs-foot{border-top:1px solid var(--surface-2);flex-wrap:wrap;gap:8px 28px;margin-top:64px;padding-top:24px;font-weight:560;display:flex}.cs-foot a:hover{color:var(--accent)}.colophon{color:var(--ink-3);max-width:52ch;font-size:14px}.colophon p{margin:0 0 6px}@media (width<=1023px){.page{grid-template-columns:minmax(0,1fr);gap:0}.side{height:auto;padding-block:72px 16px;position:static}.toc{display:none}.side-foot{margin-top:36px}main{gap:112px;padding-top:64px}.sec-h{z-index:5;clip:auto;background:var(--ground);width:auto;height:auto;color:var(--ink);margin:0 -24px 20px;padding:14px 24px;font-size:15px;font-weight:620;position:sticky;top:0;overflow:visible}}@media (width<=640px){.job{grid-template-columns:minmax(0,1fr);gap:6px}.feature{grid-template-columns:minmax(0,1fr)}.feature>img{width:62%}.video-cap span{display:none}.projects a{grid-template-columns:minmax(0,1fr)}.projects .s{text-align:left}.form{grid-template-columns:minmax(0,1fr)}}.console{z-index:50;background:var(--screen);padding-bottom:env(safe-area-inset-bottom,0px);opacity:0;visibility:hidden;flex-direction:column;transition:opacity .16s cubic-bezier(.4,0,1,1),transform .16s cubic-bezier(.4,0,1,1),visibility 0s linear .16s;display:flex;position:fixed;inset:0;transform:scale(1.012)}.console.open{opacity:1;visibility:visible;transition:opacity .22s var(--ease-out), transform .3s var(--ease-out), visibility 0s;transform:none}.console-bar{min-height:44px;padding-top:env(safe-area-inset-top,0px);padding-left:max(16px, env(safe-area-inset-left,0px));padding-right:max(16px, env(safe-area-inset-right,0px));background:var(--surface);font-family:var(--mono);color:var(--ink-3);flex:none;justify-content:center;align-items:center;font-size:13px;display:flex;position:relative}.console-bar button{right:max(16px, env(safe-area-inset-right,0px));color:var(--ink-2);font-family:var(--sans);background:0 0;border:0;align-items:center;gap:8px;padding:2px 0;font-size:14px;display:inline-flex;position:absolute;bottom:8px}.console-bar button:hover{color:var(--ink)}.console-inner{width:100%;max-width:1240px;min-height:0;padding-block:22px 18px;padding-left:max(24px, env(safe-area-inset-left,0px));padding-right:max(24px, env(safe-area-inset-right,0px));flex-direction:column;flex:1;margin:0 auto;display:flex}.console-out{min-height:0;font-family:var(--mono);white-space:pre-wrap;overflow-wrap:anywhere;color:var(--ink-2);scrollbar-width:thin;scrollbar-color:var(--surface-2) transparent;flex:0 auto;font-size:15px;line-height:1.6;overflow-y:auto}.ln.in{color:var(--ink)}.ln .p{color:var(--accent)}.ln.sys{color:var(--ink-3)}.console-form{font-family:var(--mono);align-items:baseline;padding-top:6px;font-size:15px;display:flex}.console-form label{color:var(--accent);white-space:pre}.console-form input{min-width:0;color:var(--ink);font:inherit;caret-color:var(--accent);background:0 0;border:0;outline:0;flex:1;padding:0}.chips{flex-wrap:wrap;gap:8px;margin-top:auto;padding-top:14px;display:flex}.chips button{border-radius:var(--r);background:var(--surface-2);color:var(--ink-2);font-family:var(--mono);min-height:36px;transition:color .18s var(--ease-out), background-color .18s var(--ease-out);border:0;padding:8px 12px;font-size:13px}.chips button:hover{color:var(--ink);background:#2e2922}.console-hint{color:var(--ink-3);align-self:center;margin-left:auto;font-size:13px}@media (width>=1024px){.console-out,.console-form{font-size:16px}}@media (width<=640px){.console-bar{justify-content:flex-start}.console-hint{display:none}}@media (prefers-reduced-motion:reduce){.console,.console.open{transform:none}}
