@font-face{font-family:Geist;src:url('/assets/geist-regular.b5e4774c82.woff2') format('woff2');font-weight:400;font-style:normal;font-display:swap}
@font-face{font-family:Geist;src:url('/assets/geist-semibold.7e5b14c5d2.woff2') format('woff2');font-weight:600;font-style:normal;font-display:swap}
@font-face{font-family:'Geist Mono';src:url('/assets/geist-mono-regular.38c3922851.woff2') format('woff2');font-weight:400;font-style:normal;font-display:swap}
:root{color-scheme:light;--bg:#e8ebe1;--ink:#1b1f17;--muted:#4d5345;--line:#a9af9c;--accent:#596348;--select:color-mix(in srgb,var(--ink) 10%,transparent);--panel:#dde2d5;--grid:#9fa793;--orbit:#a8b29c;--light:#bcc8ae;--hit:#ffffff;--sans:Geist,system-ui,sans-serif;--mono:'Geist Mono',ui-monospace,monospace;--ease:cubic-bezier(.2,0,0,1);--hover:120ms;--press:80ms;--gutter:44px}
:root[data-theme="dark"]{color-scheme:dark;--bg:#1b201b;--ink:#e3e8da;--muted:#b1bba9;--line:#59644f;--accent:#c2d2b0;--select:color-mix(in srgb,var(--ink) 22%,transparent);--panel:#252d22;--grid:#56624d;--orbit:#6b7b5e;--light:#486039}
@media(prefers-color-scheme:dark){:root:not([data-theme="light"]){color-scheme:dark;--bg:#1b201b;--ink:#e3e8da;--muted:#b1bba9;--line:#59644f;--accent:#c2d2b0;--select:color-mix(in srgb,var(--ink) 22%,transparent);--panel:#252d22;--grid:#56624d;--orbit:#6b7b5e;--light:#486039}}
*{box-sizing:border-box}
::selection{background-color:var(--select)}
html{-webkit-text-size-adjust:100%;text-size-adjust:100%;scroll-behavior:smooth;scroll-padding-top:28px;scrollbar-gutter:stable;overflow-x:clip}
html.arriving{scroll-behavior:auto}
.lg[id]{scroll-margin-top:38svh}
html.overlay-open{overflow:hidden}
body{margin:0;background:var(--bg);color:var(--ink);font:400 17px/1.5 var(--sans);-webkit-font-smoothing:antialiased}
h1,h2,h3,p,figure,blockquote,dl,dd,ol{margin:0}
ol{padding:0;list-style:none}
h1,h2,h3{font-weight:400}
a{color:inherit;text-decoration:none}
button{font:inherit;color:inherit}
a,button{-webkit-tap-highlight-color:transparent}
:is(a,button,[tabindex]):not(:where([tabindex="-1"])):focus-visible{outline:2px solid var(--ink);outline-offset:4px;border-radius:2px}
main:focus,footer:focus{outline:0}
.shell{display:flex;flex-direction:column;min-height:100svh;max-width:1200px;margin:auto;padding:0 var(--gutter);container-type:inline-size;container-name:site-shell}
.shell>main{flex:1 0 auto}
.skip{position:fixed;z-index:50;left:16px;top:10px;padding:10px 16px;background:var(--ink);color:var(--bg);transform:translateY(-160%)}
.skip:focus{transform:none}
.skip:not(:focus){clip-path:inset(50%)}
.text-link{display:inline-flex;align-items:center;min-height:44px;text-decoration:underline 1px;text-underline-offset:.24em;text-decoration-color:color-mix(in srgb,var(--line) 75%,transparent);transition:transform var(--hover) var(--ease),text-decoration-color var(--hover) var(--ease)}
.text-link:active{transform:translateY(1px);text-decoration-color:var(--ink);transition-duration:var(--press)}
@media(hover:hover){.text-link:hover{transform:translate(1px,-1px);text-decoration-color:var(--ink)}.text-link:hover:active{transform:translateY(1px)}}
.lg-keep{white-space:nowrap}
.prose .text-link,.region-card .text-link,.region-list .text-link{display:inline;min-height:0;text-decoration-color:var(--line)}
@media(hover:hover){.prose .text-link:hover,.region-card .text-link:hover,.region-list .text-link:hover{transform:none;text-decoration-color:var(--ink)}}
.prose p+p,.prose p+blockquote,.prose blockquote+p{margin-top:.8em}
.prose code{font:400 .88em var(--mono)}
.prose pre{margin:0;white-space:pre-wrap;overflow-wrap:anywhere;font:400 12px/1.6 var(--mono)}
.prose pre:has(>code.language-console){padding:18px 20px;border:1px solid var(--line);background:var(--panel);color:var(--ink);font-size:13px;overflow-x:auto}
.prose pre>code{font:inherit}
.caption,.prose{overflow-wrap:anywhere}
.prose blockquote{padding-left:16px;border-left:1px solid var(--line)}
.masthead{display:flex;justify-content:space-between;align-items:flex-start;gap:20px;padding-top:44px}
.identity-heading{font:inherit;min-width:0}
.identity{display:inline-flex;flex-direction:row;flex-wrap:wrap;align-items:baseline;gap:0 14px;padding:2px 0}
.name{font:400 38px/1.1 var(--sans);letter-spacing:-.012em}
body:not(.home) .identity{column-gap:12px}
.controls{display:flex;flex:none;align-items:center;gap:18px;margin-top:4px;color:var(--muted)}
html:not(.js) .controls .ts{display:none}
.controls-rule{display:none;width:1px;height:14px;background:var(--line)}
.controls .ts{margin:0 -8px}
.site-nav{display:flex;align-items:center;gap:16px}
#projects,#links{scroll-margin-top:-12px}
.js .controls-rule{display:block}
.contact-button{position:relative;display:inline-flex;align-items:center;min-height:44px;padding:0 2px;color:var(--ink);font-size:15px;text-decoration:underline 1px;text-underline-offset:.3em;text-decoration-color:transparent;transition:text-decoration-color var(--hover) var(--ease)}
.contact-button:active,.contact-button[aria-current="page"]{text-decoration-color:var(--ink)}
@media(hover:hover){.contact-button:hover{text-decoration-color:var(--ink)}}
.collection{margin-top:52px}
.collection-head{display:flex;justify-content:space-between;align-items:center;gap:16px;padding-bottom:6px}
.collection-head h2{font:400 34px/1.2 var(--sans);letter-spacing:normal;color:var(--ink)}
.collection-head h1{font:400 34px/1.2 var(--sans);letter-spacing:normal}
.projects{display:flex;flex-direction:column}
:root.js .collection[data-view="index"] .collection-grid{display:none}
.project{padding:22px 0 60px;border-top:1px solid var(--line);scroll-margin-top:28px}
.project-title{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 14px;min-width:0}
.project-title>.tags{align-self:center}
.tags{display:inline-flex;flex-wrap:wrap;gap:6px}
.tag{position:relative;display:inline-flex;align-items:center;gap:6px;height:24px;padding:0 8px;border:1px solid color-mix(in srgb,var(--line) 85%,transparent);border-radius:3px;background:none;color:var(--muted);font:400 11px/1 var(--mono);letter-spacing:.02em;cursor:pointer;transition:color var(--hover) var(--ease),border-color var(--hover) var(--ease),background-color var(--hover) var(--ease)}
.tag::before{content:'';position:absolute;inset:-10px -3px}
.tag>span{text-box:trim-both cap alphabetic}
.tag[aria-pressed="true"]{border-color:var(--ink);background:var(--ink);color:var(--bg)}
@media(hover:hover){.tag:hover{border-color:var(--muted);color:var(--ink)}.tag[aria-pressed="true"]:hover{color:var(--bg)}}
.tag:active{transform:translateY(.5px)}
.tag-filter{display:inline-flex;align-items:center;margin-left:auto}
.tag-filter[hidden]{display:none}
.tag-out{display:none!important}
.project h3{font-size:27px;line-height:1.15;letter-spacing:-.02em}
.ab-side{display:flex;flex-direction:column;gap:14px;min-width:0}
.frame{display:block}
.frame[hidden]{display:none}
.figure-side .caption+.region-list{margin-top:20px}
.index{display:none}
:root.js .collection[data-view="index"] .collection-index{display:flex;flex-direction:column;border-top:1px solid var(--line);padding-top:10px}
.index-entry{display:grid;grid-template-columns:5.5ch minmax(0,1fr) auto;column-gap:18px;align-items:baseline;padding:12px 0 14px}
@media(max-width:700px){.index-entry{grid-template-columns:5.5ch minmax(0,1fr);column-gap:12px}}
.stage{position:relative;display:block;max-width:100%}
.stage picture{display:contents}
.stage[data-tone]{--tone-now:var(--tone)}
:root[data-theme="dark"] .stage[data-tone-dark]{--tone-now:var(--tone-dark)}
@media(prefers-color-scheme:dark){:root:not([data-theme="light"]) .stage[data-tone-dark]{--tone-now:var(--tone-dark)}}
.stage:is(.pending,.arrived){background-color:var(--tone-now)}
.stage img.for-dark{display:none}
:root[data-theme="dark"] .stage img.for-dark{display:block}
:root[data-theme="dark"] .stage img.for-light{display:none}
@media(prefers-color-scheme:dark){:root:not([data-theme="light"]) .stage img.for-dark{display:block}:root:not([data-theme="light"]) .stage img.for-light{display:none}}
.stage img,.stage video{display:block;max-width:100%;height:auto}
.stage[data-ar]{aspect-ratio:var(--ratio)}
.stage[data-ar] :is(img,video){width:100%;height:100%;max-width:none}
.regions{position:absolute;inset:0;width:100%;height:100%;overflow:visible;pointer-events:none}
.stage{--region-rest:.6}
.region,.region-edge{fill:transparent;stroke:transparent;vector-effect:non-scaling-stroke;transition:fill var(--hover) var(--ease),stroke var(--hover) var(--ease),stroke-width var(--hover) var(--ease)}
.region{stroke-width:1}
.region-edge{stroke-width:3;pointer-events:none}
[data-region]{pointer-events:visiblePainted;cursor:help;outline:none}
.region-edge:has(+ .region.on){stroke:rgba(20,22,18,.8);stroke-width:5}
.region-edge:has(+ .region.sel){stroke:rgba(20,22,18,.85);stroke-width:6}
.region-cards{position:absolute;inset:0;pointer-events:none}
.region-card{position:absolute;z-index:3;left:0;top:0;width:max-content;max-width:min(280px,100%);padding:7px 10px 8px;border:1px solid var(--line);border-radius:3px;background:var(--bg);color:var(--ink);font-size:13px;line-height:1.45;box-shadow:0 1px 10px rgba(0,0,0,.12);cursor:default;opacity:0;visibility:hidden}
.region-card:not(.on){display:none}
.region-card .region-label .text-link{margin:-1px -4px;padding:1px 4px;border-radius:2px;transition:background-color var(--hover) var(--ease),text-decoration-color var(--hover) var(--ease)}
@media(hover:hover){.region-card .region-label .text-link:hover{background:color-mix(in srgb,var(--ink) 8%,transparent)}}
.region-label{font-size:14px}
.region-note{margin-top:3px;color:var(--muted);font-size:12.5px}
.stage-clip video{position:relative;width:100%}
.clip-controls{position:absolute;z-index:2;left:8px;bottom:8px;display:flex;gap:4px;opacity:0;transition:opacity 140ms var(--ease)}
.stage-clip:hover .clip-controls,.clip-controls:focus-within{opacity:1}
.clip-controls button{display:grid;place-items:center;width:20px;height:20px;padding:0;border:1px solid color-mix(in srgb,#fff 45%,transparent);border-radius:3px;background:rgba(16,17,19,.55);color:#fff;cursor:pointer}
.clip-controls svg{width:16px;height:16px}
.clip-controls button:active{transform:translateY(1px)}
.clip-toggle .g-play{transform:translateX(-.7px)}
.clip-mute[data-state="none"]{display:none}
.clip-toggle[aria-pressed="true"] .g-play,.clip-toggle[aria-pressed="false"] .g-pause{display:none}
.clip-mute .g-waves,.clip-mute .g-slash{display:none}
.clip-mute[data-state="on"] .g-waves{display:inline}
.clip-mute[data-state="on"] .g-x,.clip-mute[data-state="none"] .g-x{display:none}
.clip-mute[data-state="none"] .g-waves,.clip-mute[data-state="none"] .g-slash{display:inline}
.clip-mute[aria-disabled="true"]{opacity:.5;cursor:default;pointer-events:none}
@media(hover:none){.clip-controls{pointer-events:none}}
@media(prefers-reduced-motion:reduce){.clip-controls{transition:none}}
.set-page{padding-bottom:40px}
.set-head{padding:56px 0 8px}
.set-title{font-size:40px;line-height:1.1;letter-spacing:-.012em;overflow-wrap:anywhere}
.set-description{max-width:62ch;margin-top:14px;font-size:19px;line-height:1.5;color:var(--muted);text-wrap:pretty}
.set-spec{display:grid;grid-template-columns:max-content minmax(0,1fr);margin-top:26px;border-block:1px solid var(--line);font:400 13px/1.7 var(--mono)}
.set-spec>div{display:contents}
.set-spec dt,.set-spec dd{display:flex;align-items:center;min-height:40px;min-width:0}
.set-spec dt{padding-right:18px;border-right:1px solid var(--line);color:var(--muted)}
.set-spec dd{padding-left:18px}
.set-spec dd .text-link{min-height:36px}
.set-spec>div+div>*{border-top:1px dotted var(--line)}
.set-items{display:flex;flex-direction:column;gap:56px;margin-top:48px}
.item{scroll-margin-top:24px;min-width:0}
.item:focus{outline:0}
.set-items{--max-h:min(calc(100svh - 72px),1200px)}
.item .stage[data-ar]{width:min(100%,calc(var(--max-h) * var(--ratio)))}
.stage:is([data-stage="loom-rs-lens"],[data-stage="loom-rs-clip"]){box-shadow:0 0 0 1px var(--line)}
@media(max-width:700px){:is(#item-tui-stills,#item-cli-stills) .gallery-row>.item{flex:1 1 100%}:is(#item-tui-stills,#item-cli-stills) .gallery-row>.item .stage[data-ar]{aspect-ratio:var(--ratio);background:none}:is(#item-tui-stills,#item-cli-stills) .gallery-row>.item .stage[data-ar] :is(img,video){object-fit:fill}}
.item figcaption{max-width:62ch;margin-top:10px}
.set-items,.group-items{container-type:inline-size}
.region-list{display:none}
.region-list li{padding:9px 10px 10px;border-bottom:1px dotted var(--line);transition:background-color var(--hover) var(--ease)}
.region-list li:first-child{border-top:1px solid var(--line)}
.region-list li{cursor:pointer}
.region-list .region-label{font-size:14px}
@container (min-width:760px){.has-side{display:flex;align-items:flex-start;gap:32px}.has-side>.stage[data-ar]{flex:none;width:min(calc(100% - 292px),calc(var(--max-h) * var(--ratio)))}.has-side>.figure-side{flex:1 1 260px;max-width:360px;margin-top:0}.has-side .region-list{display:block;margin-top:16px}.has-side .figure-side>.caption:empty+.region-list,.has-side .figure-side>.region-list:first-child{margin-top:0}}
.caption{font-size:14px;line-height:1.5;color:var(--muted)}
.set-items>.item-link+.item-link{margin-top:-40px}
.group-items>.item-link+.item-link{margin-top:-28px}
.item-link{display:flex;flex-wrap:wrap;align-items:baseline;gap:0 12px;font-size:18px}
.item-link:has(>.cx-row){display:block;max-width:640px;font-size:inherit;border-bottom:1px solid var(--line)}
:is(.set-items,.group-items)>:is(:first-child,:not(.item-link)+.item-link):has(>.cx-row){border-top:1px solid var(--line)}
.item-set{display:grid;grid-template-columns:220px minmax(0,1fr);gap:0 40px;padding-top:22px;border-top:1px solid var(--line)}
@media(min-width:1100px){.set-items>.item-set~:not(.item-set){margin-left:260px}}
.set-items>.item-set+:not(.item-set){padding-top:22px;border-top:1px solid var(--line)}
@media(min-width:1100px){.set-items>.item-set+:not(.item-set){border-image:linear-gradient(var(--line),var(--line)) 1 / 1px 0 0 / 0 0 0 260px}}
@media(max-width:1099px){.item-set{grid-template-columns:minmax(0,1fr);gap:14px}}
.group-head h2,.group-head h3{font-size:19px;line-height:1.3;letter-spacing:-.01em}
.group-description{margin-top:10px;font-size:15px;line-height:1.55;color:var(--muted)}
.group-description.prose p+p{margin-top:.7em}
.group-items{display:flex;flex-direction:column;gap:40px;min-width:0}
.item-gallery{min-width:0}
.gallery-row{display:flex;gap:10px;align-items:flex-start}
.gallery-row>.item{flex:var(--ratio,1) 1 0;min-width:0}
.gallery-row .stage[data-ar]{width:100%}
.in-gallery>.stage:not(.stage-clip){cursor:zoom-in}
.has-side>.stage:not(.stage-clip,.stage-mark),.item-image:not(.in-gallery)>.stage:not(.stage-mark){cursor:zoom-in}
.stage:not(.stage-clip):has([data-region].sel){cursor:default}
.gallery-foot{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:4px 24px;margin-top:14px;max-width:none}
.post-card{position:relative;display:flex;flex-direction:column;gap:12px;max-width:560px;padding:14px 16px 12px;border:1px solid var(--line);border-radius:4px;background:color-mix(in srgb,var(--panel) 55%,transparent);font-size:14px;line-height:1.45;color:var(--ink)}
.pc-post{display:flex;flex-direction:column;gap:10px;min-width:0}
.pc-head{display:flex;align-items:center;gap:10px;min-width:0}
.pc-avatar{flex:none;width:40px;height:40px;border-radius:50%;background:color-mix(in srgb,var(--line) 45%,transparent)}
.pc-who{display:flex;flex-direction:column;min-width:0;line-height:1.25}
.pc-name{font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pc-handle{font:400 12px/1.35 var(--mono);color:var(--muted);text-decoration:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
@media(hover:hover){.pc-handle:hover{color:var(--ink)}}
.pc-corner{margin-left:auto;align-self:flex-start;display:none;align-items:center;gap:8px}
.pc-corner .pc-via{display:none}
.post-card .lg{--lg-h:max(var(--lg-size,.56em),var(--lg-min,7px));bottom:var(--lg-bottom,calc(var(--lg-mid,.3547em) - var(--lg-h) / 2));width:calc(var(--lg-h) * var(--lg-ratio,1));height:var(--lg-h)}
.post-card .lg[data-glyph="bluesky"]{--lg-ratio:1.125;--lg-size:0.5882em;--lg-mid:0.3547em;--lg-src:url("data:image/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%27-0.002%200.664%2012.004%2010.675%27%20fill%3D%27%23000%27%3E%3Cg%20transform%3D%27scale(0.5)%27%3E%3Cpath%20d%3D%27M12%2010.8c-1.087-2.114-4.046-6.053-6.798-7.995C2.566.944%201.561%201.266.902%201.565.139%201.908%200%203.08%200%203.768c0%20.69.378%205.65.624%206.479.815%202.736%203.713%203.66%206.383%203.364.136-.02.275-.039.415-.056-.138.022-.276.04-.415.056-3.912.58-7.387%202.005-2.83%207.078%205.013%205.19%206.87-1.113%207.823-4.308.953%203.195%202.05%209.271%207.733%204.308%204.267-4.308%201.172-6.498-2.74-7.078a8.741%208.741%200%200%201-.415-.056c.14.017.279.036.415.056%202.67.297%205.568-.628%206.383-3.364.246-.828.624-5.79.624-6.478%200-.69-.139-1.861-.902-2.206-.659-.298-1.664-.62-4.3%201.24C16.046%204.748%2013.087%208.687%2012%2010.8Z%27%20fill-rule%3D%27nonzero%27%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E")}
.post-card .lg[data-glyph="x"]{--lg-ratio:1.107;--lg-size:0.5588em;--lg-mid:0.3547em;--lg-src:url("data:image/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%27-0.007%200.572%2012.014%2010.858%27%20fill%3D%27%23000%27%3E%3Cg%20transform%3D%27scale(0.5)%27%3E%3Cpath%20d%3D%27M18.901%201.153h3.68l-8.04%209.19L24%2022.846h-7.406l-5.8-7.584-6.638%207.584H.474l8.6-9.83L0%201.154h7.594l5.243%206.932ZM17.61%2020.644h2.039L6.486%203.24H4.298Z%27%20fill-rule%3D%27nonzero%27%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E")}
.pc-reply{margin:-4px 0 0;font-size:13px;color:var(--muted)}
.pc-reply-to{color:var(--muted)}
.pc-text{overflow-wrap:anywhere}
.pc-text .text-link,.pc-foot .text-link{display:inline;min-height:0}
.pc-play{position:absolute;left:50%;top:50%;width:0;height:0;margin:-11px 0 0 -7px;border-style:solid;border-width:11px 0 11px 18px;border-color:transparent transparent transparent rgba(255,255,255,.9);filter:drop-shadow(0 0 2px rgba(0,0,0,.5))}
.post-card .pc-foot{position:static;isolation:auto;display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 14px;margin:0;padding:0;border:0;font:400 12px/1.6 var(--mono);color:var(--muted)}
.pc-act{display:inline;min-height:0;white-space:nowrap;color:var(--muted);text-decoration:underline 1px;text-decoration-style:solid;text-underline-offset:.24em;text-decoration-color:color-mix(in srgb,var(--line) 75%,transparent);transition:color var(--hover) var(--ease),transform var(--hover) var(--ease),text-decoration-color var(--hover) var(--ease)}
.pc-act:active{transform:translateY(1px);transition-duration:var(--press)}
@media(hover:hover){.pc-act:hover{color:var(--ink);transform:translate(1px,-1px);text-decoration-color:var(--ink)}.pc-act:hover:active{transform:translateY(1px)}}
.pc-via.pc-act{text-decoration-line:underline}
.pc-act .lg{text-decoration:none}
.pc-counts{display:none;gap:12px}
.pc-via{margin-left:auto;color:var(--muted);text-decoration:none;white-space:nowrap}
.lg[data-glyph="arenablock"]{--lg-ratio:1;--lg-size:.75em;--lg-bottom:-.02em;--lg-gap:.3em;--lg-src:url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%227 7 82 82%22%3E%3Cg transform=%22rotate%2810 40 40%29%22%3E%3Cpath d=%22M40 15V65M18.35 27.5L61.65 52.5M18.35 52.5L61.65 27.5%22 fill=%22none%22 stroke=%22%23000%22 stroke-width=%2211%22 stroke-linecap=%22square%22/%3E%3C/g%3E%3Crect x=%2264%22 y=%2265%22 width=%2222%22 height=%2222%22 fill=%22%23000%22/%3E%3C/svg%3E")}
.pc-via-corner{display:inline-flex;padding:2px;margin:-2px -4px 0 0}
.pc-via-corner .lg[data-glyph="arenablock"]{--lg-size:14px;margin:0}
@media(hover:hover){.pc-via:hover{color:var(--ink)}}
.pc-via .lg{margin-left:.34em}
.post-card .lg[data-glyph="arenablock"]{--lg-src:url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%227 7 82 82%22%3E%3Cg transform=%22rotate%2810 40 40%29%22%3E%3Cpath d=%22M40 15V65M18.35 27.5L61.65 52.5M18.35 52.5L61.65 27.5%22 fill=%22none%22 stroke=%22%23000%22 stroke-width=%228%22 stroke-linecap=%22square%22/%3E%3C/g%3E%3Crect x=%2264%22 y=%2265%22 width=%2222%22 height=%2222%22 fill=%22%23000%22/%3E%3C/svg%3E")}
.pc-date-plat .lg:is([data-glyph="x"],[data-glyph="bluesky"]){--lg-mid:.44em}
.pc-tip{position:absolute;right:0;top:calc(100% + 5px);z-index:4;width:max-content;max-width:min(240px,calc(100vw - 48px));padding:4px 8px;border:1px solid var(--line);border-radius:3px;background:var(--bg);color:var(--ink);font:400 12px/1.4 var(--sans);white-space:normal;box-shadow:0 1px 8px rgba(0,0,0,.1);opacity:0;visibility:hidden;pointer-events:none;transition:opacity 90ms var(--ease),visibility 0s 90ms}
.pc-via-corner .pc-tip{top:auto;bottom:calc(100% + 8px)}
.pc-via-off{position:relative;cursor:default}
.pc-via-off>.pc-via-id{opacity:.45}
.pc-via-go{color:inherit;cursor:pointer;outline-offset:3px;transition:color var(--hover) var(--ease)}
.pc-via-go>.lg{opacity:.45;transition:opacity var(--hover) var(--ease)}
.pc-via-off .pc-tip{top:auto;bottom:calc(100% + 6px)}
.pc-via-off:is(:hover,:focus-within) .pc-tip{opacity:1;visibility:visible;transition:opacity 90ms var(--ease),visibility 0s}
.pc-via-go:is(:hover,:focus-visible){color:var(--ink)}
.pc-via-off:has(>.pc-via-go:is(:hover,:focus-visible))>.pc-via-id{color:var(--muted)}
.pc-via-go:is(:hover,:focus-visible)>.lg{opacity:1}
.post-card .region-cards{z-index:3}
.gallery-caption{max-width:62ch}
.group-items .item-set{grid-template-columns:minmax(0,1fr);gap:12px}
.set-nav{display:flex;justify-content:space-between;flex-wrap:wrap;gap:8px 24px;margin-top:64px;padding-top:14px;border-top:1px solid var(--line)}
.set-nav .text-link{min-height:52px;text-decoration-color:transparent}
.set-nav .link-text{display:flex;flex-direction:column}
.set-nav-label{font:400 11px/1.6 var(--mono);color:var(--muted)}
.set-nav [rel="next"]{margin-left:auto;text-align:right}
.set-nav [rel="next"] .link-text{align-items:flex-end}
.key{font:400 12px/1 var(--mono)}
[data-loading]{opacity:.62;transition:opacity var(--hover) var(--ease)}
footer{position:relative;isolation:isolate;container:foot/inline-size;border-top:1px solid var(--line);padding:22px 0 40px;margin-top:24px;font-size:14px;scroll-margin-top:28px}
footer .text-link{white-space:nowrap}
.foot-names{display:flex;flex-wrap:wrap;justify-content:flex-end;column-gap:26px}
.foot-glyphs{display:none;justify-content:flex-end;margin-right:-11px;align-items:center}
.foot-glyphs .ae-icon{min-width:0;min-height:44px;padding:0 11px}
.foot-names .text-link[data-pressed],.foot-glyphs .ae-icon[data-pressed]{text-decoration-color:var(--ink);color:var(--ink);transform:translateY(1px);transition-duration:var(--press)}
@media(hover:none){.foot-names .text-link:active:not([data-pressed]){transform:none;text-decoration-color:color-mix(in srgb,var(--line) 75%,transparent)}}
::view-transition-group(morph){z-index:2;animation-duration:220ms;animation-timing-function:var(--ease)}
::view-transition-old(morph),::view-transition-new(morph){height:100%;animation-duration:220ms}
::view-transition-old(root),::view-transition-new(root){animation-duration:110ms}
.masthead{view-transition-name:masthead}
::view-transition-group(masthead){animation-duration:220ms}
@media(max-width:899px){.item-set{grid-template-columns:minmax(0,1fr);gap:14px}}
@media(max-width:700px){:root{--gutter:16px}html{scroll-padding-top:20px}.masthead{gap:12px;padding-top:16px}.controls{gap:10px;margin-top:-4px}.contact-button{font-size:14px}.name{font-size:28px}.collection{margin-top:36px}.project{padding:18px 0 42px}.project h3{font-size:22px}.collection-head :is(h1,h2){font-size:26px}.set-items{--max-h:75svh}.item .stage[data-ar]{margin-inline:auto}.set-head{padding-top:32px}.set-title{font-size:31px}.set-description{font-size:17px}.set-spec{font-size:12px}.set-spec dt{padding-right:12px}.set-spec dd{padding-left:12px}.set-items{gap:44px;margin-top:36px}.gallery-row{flex-wrap:wrap;gap:8px}.gallery-row>.item{flex:1 1 calc(50% - 4px)}.gallery-row>.item .stage[data-ar]{aspect-ratio:3/4;background:var(--panel)}.gallery-row>.item .stage[data-ar] :is(img,video){object-fit:cover}.gallery-row>.item .stage.has-regions[data-ar]{aspect-ratio:var(--ratio);background:none}.gallery-row>.item .stage.has-regions[data-ar] img{object-fit:fill}footer{padding:18px 0 30px}.foot-names{column-gap:20px}}
@media(max-width:600px){.masthead{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:4px 12px}.identity{flex-direction:row;flex-wrap:wrap;align-items:baseline;gap:0 10px}.controls{display:contents}.controls .ts{grid-column:2;grid-row:1;align-self:center;margin-right:-8px}.controls-rule{display:none!important}.site-nav{grid-column:1/-1;grid-row:2;margin-left:-2px}}
@media(max-width:600px) and (pointer:coarse){.controls .ts{margin-right:-14px}}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*::before,*::after{transition-duration:0s!important}.text-link,.text-link:hover,.text-link:active{transform:none!important}.contact-button:active,.lr-step:active{transform:none!important}}
@media(hover:hover) and (pointer:fine){:is(.in-gallery>.stage:not(.stage-clip),.has-side>.stage:not(.stage-clip,.stage-mark),.item-image:not(.in-gallery)>.stage:not(.stage-mark),.post-photo)::after{content:'';position:absolute;top:8px;right:8px;width:9px;height:9px;border-top:1.5px solid #fff;border-right:1.5px solid #fff;filter:drop-shadow(0 0 1px rgba(0,0,0,.85)) drop-shadow(0 0 3px rgba(0,0,0,.35));opacity:calc(var(--cue,0)*.6);pointer-events:none;transition:opacity var(--hover) var(--ease),transform var(--hover) var(--ease)}:is(.in-gallery>.stage:not(.stage-clip),.has-side>.stage:not(.stage-clip,.stage-mark),.item-image:not(.in-gallery)>.stage:not(.stage-mark),.post-photo):hover::after{opacity:.95;transform:translate(2px,-2px)}}
@media(min-width:701px){.project:has(>:is(.cx-body,.arenablock-body,.receipt-body)){display:grid;grid-template-columns:minmax(0,var(--cl-media,340px)) minmax(0,var(--cl-text,1fr));column-gap:var(--cl-gap,32px)}.project:has(>:is(.cx-body,.arenablock-body)){--cl-media:260px}.project:has(>.receipt-body){--cl-media:1.2fr;--cl-gap:56px}.project>:is(.cx-body,.arenablock-body,.receipt-body){display:contents}.project:has(>:is(.cx-body,.arenablock-body,.receipt-body)){grid-template-rows:auto 1fr}.project:has(>.receipt-body){grid-template-columns:fit-content(calc((100% - 56px) * .545)) minmax(0,1fr)}}
.stage-clip{cursor:zoom-in}
.stage-clip .clip-controls button{cursor:pointer}
.project:has(>.receipt-body):not(:has(.frame-excerpt)){grid-template-rows:auto 1fr}
::view-transition-group(overlay-backdrop){animation-duration:120ms}
.lr{content-visibility:auto;contain-intrinsic-size:auto calc(var(--lr-h,600px) + 130px)}
.set-items>.item-set{content-visibility:auto;contain-intrinsic-size:auto 900px}
.lr,.set-items>.item-set{overflow-clip-margin:200px}
mark{background:var(--select);color:inherit;padding:0 .08em;border-radius:1px}
.item-related{--lr-w:220px;--lr-gap:10px;--lr-pad:10px;--lr-drop:24px;padding-top:22px;border-top:1px solid var(--line)}
.item-related :is(.ab-description,.ab-rest){display:none}
.item-related :is(.lr-track,.rel-strip){--lr-bleed:0px;margin-inline:0;padding-inline:0;scroll-padding-inline:0}
.rel-list{display:flex;flex-direction:column;gap:40px}
.rel-head{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 12px;min-height:32px;margin-bottom:12px}
.rel-title{font-size:22px;letter-spacing:-.02em;line-height:1.2}
.rel-title .text-link{min-height:32px}
.rel-kind{font:400 12px/1.5 var(--mono);color:var(--muted)}
@media(hover:hover) and (pointer:fine){:is(.rel-strip,.mb-strip){cursor:grab}}
.rel-strip{display:flex;gap:8px;overflow-x:auto;scroll-snap-type:x proximity;scrollbar-width:thin;scrollbar-color:var(--line) transparent;padding-bottom:8px}
.rel-strip:focus-visible{outline:2px solid var(--ink);outline-offset:2px}
.rel-shot{flex:none;height:200px;scroll-snap-align:start;background:var(--panel)}
.rel-shot img{display:block;width:auto;height:100%;transition:opacity var(--hover) var(--ease)}
@media(hover:hover){.rel-shot:hover img{opacity:.86}}
@media(max-width:700px){.rel-shot{height:150px}}
:root{--lg-gap:.3em;--lg-rest:.74;--lg-ease:var(--ease,cubic-bezier(.2,0,0,1));--lg-time:var(--hover,120ms)}
:root[data-theme="dark"]{--lg-rest:.8}
@media (prefers-color-scheme:dark){:root:not([data-theme="light"]){--lg-rest:.8}}
.lg{--lg-h:max(var(--lg-size,.56em),var(--lg-min,7px));display:inline-block;position:relative;bottom:var(--lg-bottom,calc(var(--lg-mid,.3547em) - var(--lg-h) / 2));width:calc(var(--lg-h) * var(--lg-ratio,1));height:var(--lg-h);margin-left:var(--lg-gap);margin-right:.08em;vertical-align:baseline}
.lg::before{content:none}
.lg::after{content:"";position:absolute;inset:0;background:currentColor;-webkit-mask:var(--lg-src) center/contain no-repeat;mask:var(--lg-src) center/contain no-repeat;opacity:var(--lg-rest);transition:opacity var(--lg-time) var(--lg-ease)}
a:is(:hover,:focus-visible,:active) .lg::after{opacity:1}
@media (prefers-reduced-motion:reduce){.lg::after{transition:none}}
@media (forced-colors:active){.lg::after{background:LinkText;opacity:1}}
.lg[data-glyph="github"]{--lg-ratio:1.026;--lg-size:0.6471em;--lg-mid:0.3547em;--lg-src:url("data:image/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%27-0.011%200.139%2012.021%2011.722%27%20fill%3D%27%23000%27%3E%3Cg%20transform%3D%27scale(0.5)%27%3E%3Cpath%20d%3D%27M12%20.297c-6.63%200-12%205.373-12%2012%200%205.303%203.438%209.8%208.205%2011.385.6.113.82-.258.82-.577%200-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422%2018.07%203.633%2017.7%203.633%2017.7c-1.087-.744.084-.729.084-.729%201.205.084%201.838%201.236%201.838%201.236%201.07%201.835%202.809%201.305%203.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93%200-1.31.465-2.38%201.235-3.22-.135-.303-.54-1.523.105-3.176%200%200%201.005-.322%203.3%201.23.96-.267%201.98-.399%203-.405%201.02.006%202.04.138%203%20.405%202.28-1.552%203.285-1.23%203.285-1.23.645%201.653.24%202.873.12%203.176.765.84%201.23%201.91%201.23%203.22%200%204.61-2.805%205.625-5.475%205.92.42.36.81%201.096.81%202.22%200%201.606-.015%202.896-.015%203.286%200%20.315.21.69.825.57C20.565%2022.092%2024%2017.592%2024%2012.297c0-6.627-5.373-12-12-12%27%20fill-rule%3D%27nonzero%27%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E")}
.lg[data-glyph="bluesky"]{--lg-ratio:1.125;--lg-size:0.5882em;--lg-mid:0.3547em;--lg-src:url("data:image/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%27-0.002%200.664%2012.004%2010.675%27%20fill%3D%27%23000%27%3E%3Cg%20transform%3D%27scale(0.5)%27%3E%3Cpath%20d%3D%27M12%2010.8c-1.087-2.114-4.046-6.053-6.798-7.995C2.566.944%201.561%201.266.902%201.565.139%201.908%200%203.08%200%203.768c0%20.69.378%205.65.624%206.479.815%202.736%203.713%203.66%206.383%203.364.136-.02.275-.039.415-.056-.138.022-.276.04-.415.056-3.912.58-7.387%202.005-2.83%207.078%205.013%205.19%206.87-1.113%207.823-4.308.953%203.195%202.05%209.271%207.733%204.308%204.267-4.308%201.172-6.498-2.74-7.078a8.741%208.741%200%200%201-.415-.056c.14.017.279.036.415.056%202.67.297%205.568-.628%206.383-3.364.246-.828.624-5.79.624-6.478%200-.69-.139-1.861-.902-2.206-.659-.298-1.664-.62-4.3%201.24C16.046%204.748%2013.087%208.687%2012%2010.8Z%27%20fill-rule%3D%27nonzero%27%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E")}
.lg[data-glyph="x"]{--lg-ratio:1.107;--lg-size:0.5588em;--lg-mid:0.3547em;--lg-src:url("data:image/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%27-0.007%200.572%2012.014%2010.858%27%20fill%3D%27%23000%27%3E%3Cg%20transform%3D%27scale(0.5)%27%3E%3Cpath%20d%3D%27M18.901%201.153h3.68l-8.04%209.19L24%2022.846h-7.406l-5.8-7.584-6.638%207.584H.474l8.6-9.83L0%201.154h7.594l5.243%206.932ZM17.61%2020.644h2.039L6.486%203.24H4.298Z%27%20fill-rule%3D%27nonzero%27%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E")}
.lg[data-glyph="arena"]{--lg-ratio:1.689;--lg-size:0.4706em;--lg-mid:0.3547em;--lg-src:url("data:image/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%27-0.012%20-0.012%2020.315%2012.027%27%20fill%3D%27%23000%27%3E%3Cg%20transform%3D%27scale(0.1349)%27%3E%3Cpath%20d%3D%27M148.93%2062.356l-20.847-16.384c-1.276-1-1.276-2.642%200-3.645l20.848-16.38c1.28-1.002%201.815-2.695%201.19-3.76-.626-1.062-2.374-1.44-3.88-.84l-24.79%209.874c-1.507.606-2.927-.22-3.153-1.83L114.57%202.926C114.34%201.317%20113.13%200%20111.877%200c-1.247%200-2.456%201.317-2.68%202.925l-3.73%2026.467c-.228%201.61-1.646%202.434-3.155%201.83l-24.38-9.71c-1.512-.602-3.975-.602-5.483%200l-24.384%209.71c-1.508.604-2.928-.22-3.154-1.83L41.186%202.925C40.956%201.317%2039.748%200%2038.5%200c-1.252%200-2.463%201.317-2.688%202.925l-3.73%2026.467c-.226%201.61-1.645%202.434-3.153%201.83L4.14%2021.35c-1.507-.603-3.252-.223-3.878.838-.625%201.066-.092%202.76%201.184%203.76l20.85%2016.38c1.277%201.003%201.277%202.645%200%203.646L1.446%2062.356C.166%2063.358-.364%2065.152.26%2066.34c.627%201.19%202.372%201.668%203.877%201.064l24.567-9.866c1.51-.603%202.914.218%203.125%201.828l3.544%2026.696c.214%201.607%201.618%202.923%203.12%202.923%201.5%200%202.905-1.315%203.12-2.923l3.55-26.696c.21-1.61%201.62-2.43%203.122-1.828l24.164%209.698c1.506.606%203.97.606%205.477%200l24.16-9.698c1.504-.603%202.91.218%203.125%201.828l3.55%2026.696c.212%201.607%201.617%202.923%203.115%202.923%201.502%200%202.907-1.315%203.12-2.923l3.55-26.696c.216-1.61%201.62-2.43%203.124-1.828l24.57%209.866c1.5.604%203.25.125%203.876-1.063.627-1.186.094-2.98-1.185-3.982zM95.89%2046.18L77.53%2060.315c-1.285.99-3.393.99-4.674%200L54.49%2046.18c-1.284-.99-1.294-2.62-.02-3.625l18.4-14.493c1.274-1.005%203.363-1.005%204.638%200l18.4%2014.493c1.277%201.004%201.267%202.634-.02%203.626z%27%20fill-rule%3D%27nonzero%27%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E")}
.lg[data-glyph="external"]{--lg-ratio:0.999;--lg-size:0.5000em;--lg-mid:0.2941em;--lg-src:url("data:image/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%272.499%202.853%206.642%206.649%27%20fill%3D%27%23000%27%3E%3Cg%20transform%3D%27translate(6%206)%20rotate(-45)%20scale(0.0125%20-0.0125)%20translate(-400%20-355)%27%3E%3Cpath%20d%3D%27M333%2044%20602%20314H45V396H604L334%20666H445L755%20355L444%2044Z%27%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E")}
.lg[data-glyph="linkedin"]{--lg-ratio:1;--lg-size:0.5294em;--lg-mid:0.3547em;--lg-src:url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' fill='black'><g transform='scale(0.5)'><path fill-rule='evenodd' d='M3.5 0h17A3.5 3.5 0 0 1 24 3.5v17a3.5 3.5 0 0 1-3.5 3.5h-17A3.5 3.5 0 0 1 0 20.5v-17A3.5 3.5 0 0 1 3.5 0ZM5 9.4h3.5V20H5ZM6.75 3.6a2.05 2.05 0 1 0 0 4.1a2.05 2.05 0 1 0 0-4.1ZM10.7 9.4h3.35v1.5c.55-1 1.85-1.8 3.55-1.8c2.9 0 4.1 1.8 4.1 5V20h-3.5v-5.2c0-1.5-.5-2.5-1.85-2.5c-1.5 0-2.15 1.1-2.15 2.6V20h-3.5Z'/></g></svg>")}
.lg[data-glyph="email"]{--lg-ratio:1.333;--lg-size:0.4706em;--lg-mid:0.3547em;--lg-src:url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 9' fill='black'><g transform='scale(0.5)'><path fill-rule='evenodd' d='M2.5 0h19A2.5 2.5 0 0 1 24 2.5v13a2.5 2.5 0 0 1-2.5 2.5h-19A2.5 2.5 0 0 1 0 15.5v-13A2.5 2.5 0 0 1 2.5 0ZM2.2 3.1 12 10.3l9.8-7.2v2.3L12 12.6 2.2 5.4Z'/></g></svg>")}
::view-transition{background:var(--bg)}
.links-channels{display:flex;flex-direction:column;gap:52px}
.lr{position:relative}
.lr-title{font-size:22px;letter-spacing:-.02em;line-height:1.2}
.lr-title .text-link{min-height:32px}
.lr-pos{margin-left:auto;display:flex;align-items:center;gap:2px;font:400 12px/1 var(--mono);color:var(--muted);font-variant-numeric:tabular-nums}
.lr-step{display:grid;place-items:center;width:28px;height:28px;padding:0;border:0;background:none;color:color-mix(in srgb,var(--muted) 55%,var(--bg));font:400 16px/1 var(--sans);cursor:pointer;transition:color 160ms var(--ease),transform var(--hover) var(--ease)}
.lr-step:disabled{opacity:.35;cursor:default}
@media(hover:hover){.lr-step:not(:disabled):hover{color:var(--ink)}.lr-step[data-step="1"]:not(:disabled):hover{transform:translateX(1px)}.lr-step[data-step="-1"]:not(:disabled):hover{transform:translateX(-1px)}}
.post-card{transition:border-color var(--hover) var(--ease)}
.channel-page .set-items{display:flex;flex-direction:column;gap:40px;margin-top:36px}
.lr .post-card{--pc-bg:color-mix(in srgb,var(--panel) 55%,var(--bg));min-height:0;max-height:100%;overflow-y:auto;overscroll-behavior-y:auto;padding-bottom:0;background:var(--pc-bg);scrollbar-width:none}
.lr .post-card>.pc-foot{position:sticky;bottom:0;z-index:1;margin:0 -16px;padding:6px 16px 12px;background:var(--pc-bg)}
.lr .post-card>.pc-foot::before{content:"";position:absolute;left:0;right:0;bottom:100%;height:36px;background:linear-gradient(to bottom,transparent,var(--pc-bg));opacity:0;pointer-events:none;transition:opacity 160ms var(--ease)}
.lr :is(.pc-post,.pc-thread,.pc-next,.pc-quote)>*{flex-shrink:0}
.lr .post-card{--clip-up:calc(var(--pc-foot,38px) + 8px)}
@media(hover:none) and (pointer:coarse){.lr .post-card{overflow-y:hidden}.lr .post-card>.pc-foot::before{height:64px;background:linear-gradient(to bottom,transparent,var(--pc-bg) 30%)}.lr .post-card>.pc-foot>:not(:first-child){order:2}}
.lr .post-card :is(.pc-media,.post-photo){overflow:clip}
.lr .post-card .stage-clip>.clip-controls{position:sticky;left:auto;bottom:var(--clip-up);width:max-content;margin:-28px 0 0 8px;transition:opacity 140ms var(--ease),bottom 160ms var(--ease)}
@media(prefers-reduced-motion:reduce){.lr .post-card .stage-clip>.clip-controls{transition:none}}
.lc-host-link{color:inherit;text-decoration:underline 1px;text-underline-offset:.24em;text-decoration-color:color-mix(in srgb,var(--line) 75%,transparent);transition:color var(--hover) var(--ease),text-decoration-color var(--hover) var(--ease)}
@media(hover:hover){.lc-host-link:hover{color:var(--ink);text-decoration-color:var(--ink)}}
.lc-host-link .lg{text-decoration:none;margin-left:.3em}
:is(.lc-text,.ab-description,.prose) blockquote:has(>:is(pre,code,.pre-art)){padding-left:0;border-left:0}
.cc{display:none}
.js .cc{position:relative;display:inline-flex;align-items:center}
.set-page:has(>.cc){position:relative}
.js .set-head-cc>.cc{min-width:40px;min-height:32px}
@media(pointer:coarse){.js .set-head-cc>.cc{min-width:44px;min-height:44px}}
.set-page>.cc{position:absolute;z-index:2;top:12px;right:0}
.collection-head .cc{margin-left:auto}
.mb-head h2{display:flex;align-items:baseline;gap:8px}
.mb-body{gap:16px}
.mb-strip{--mb-h:124px;--mb-fade-l:28px;--mb-fade-r:56px;display:flex;align-items:flex-start;gap:10px;margin:0 calc(-1 * var(--mb-bleed,var(--gutter))) 0 calc(-1 * var(--gutter));padding:2px var(--mb-bleed,var(--gutter)) 6px var(--gutter);scroll-padding-inline:var(--gutter);overflow-x:auto;overscroll-behavior-x:contain;scrollbar-width:none;-webkit-mask-image:linear-gradient(to right,transparent,#000 var(--mb-fade-l),#000 calc(100% - var(--mb-fade-r)),transparent);mask-image:linear-gradient(to right,transparent,#000 var(--mb-fade-l),#000 calc(100% - var(--mb-fade-r)),transparent)}
.mb-head{display:flex;flex-direction:column;gap:6px}
.mb-pos{display:none;margin:0 0 0 -6px}
.mb-strip::-webkit-scrollbar{display:none}
.mb-item{flex:none;display:flex;flex-direction:column;gap:5px}
.mb-tile{position:relative;display:block;height:var(--mb-h);aspect-ratio:var(--pc-ratio,1);padding:0;border:1px solid color-mix(in srgb,var(--line) 70%,transparent);border-radius:3px;background:var(--panel);overflow:hidden;cursor:zoom-in;transition:border-color var(--hover) var(--ease),opacity var(--hover) var(--ease)}
.mb-tile img{display:block;width:100%;height:100%;object-fit:cover}
.mb-tile-type{width:178px;aspect-ratio:auto;padding:10px 11px;text-align:left;font:400 12px/1.45 var(--sans);color:color-mix(in srgb,var(--ink) 85%,var(--bg))}
.mb-tile-text{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:6;overflow:hidden}
.mb-tile[aria-expanded="true"]{border-color:var(--ink);cursor:zoom-out}
.mb-strip:has(.mb-tile[aria-expanded="true"]) .mb-tile:not([aria-expanded="true"]){opacity:.62}
@media(hover:hover){.mb-tile:hover{border-color:var(--ink);opacity:1}}
.mb-tile .pc-play{transform:scale(.8)}
.mb-date{font:400 11px/1.2 var(--mono);color:var(--muted)}
.mb-stage[hidden],.ab-panel[hidden]{display:none}
.mb-stage{display:grid;grid-template-rows:0fr;opacity:0;transition:grid-template-rows 220ms var(--ease),opacity 180ms var(--ease)}
.mb-stage.open{grid-template-rows:1fr;opacity:1}
.mb-stage-inner{min-height:0;overflow:hidden}
.mb-stage-inner>.ab-panel{height:var(--mb-frame,auto);overflow-y:auto;overscroll-behavior-y:contain;scrollbar-width:thin;scrollbar-color:color-mix(in srgb,var(--muted) 40%,transparent) transparent;align-content:start}
.ab-panel{display:grid;grid-template-columns:minmax(0,1fr);gap:18px;padding:16px;border:1px solid var(--line);border-radius:4px;background:color-mix(in srgb,var(--panel) 55%,transparent);animation:ab-in 180ms var(--ease)}
.ab-panel.has-media{grid-template-columns:minmax(0,1.35fr) minmax(0,1fr)}
@keyframes ab-in{from{opacity:0}to{opacity:1}}
.mb-stage{overflow-anchor:none}
.ab-side{align-self:start;display:flex;flex-direction:column;gap:10px;min-width:0;font-size:14px;line-height:1.5}
.ab-side .lc-title{font-size:17px}
.ab-description{overflow-wrap:anywhere}
.ab-side>.pc-foot{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 14px;margin:0;padding:10px 0 0}
.ab-description blockquote{margin:.4em 0;padding-left:12px;border-left:1px solid var(--line);color:color-mix(in srgb,var(--ink) 80%,var(--bg))}
.ab-description ul{margin:.4em 0;padding-left:1.2em}
.ab-media{display:flex;flex-direction:column;gap:6px;min-width:0}
.ab-stage{position:relative;aspect-ratio:var(--pc-ratio);max-height:62svh;margin:0 auto;overflow:hidden;border-radius:3px;cursor:zoom-in;background:color-mix(in srgb,var(--line) 30%,transparent)}
.ab-stage :is(img,video){display:block;width:100%;height:100%;object-fit:contain}
.ab-embed iframe{display:block;width:100%;height:100%;border:0}
.ab-comments{display:flex;flex-direction:column;gap:10px;margin-top:4px;padding-top:10px;border-top:1px solid color-mix(in srgb,var(--line) 60%,transparent);font-size:13px}
.ab-comment-head{display:flex;gap:10px;align-items:baseline;font:400 10.5px/1.4 var(--mono);color:color-mix(in srgb,var(--muted) 72%,var(--bg))}
.ab-comment-author{color:var(--ink);font-family:var(--sans);font-size:13px}
.ab-added{font:400 12px/1.6 var(--mono);color:var(--muted)}
@media(max-width:760px){.ab-panel.has-media{grid-template-columns:minmax(0,1fr)}.mb-strip{--mb-h:100px}}
@media(prefers-reduced-motion:reduce){.mb-stage{transition:none}.ab-panel{animation:none}}
.ab-panel.ab-post{grid-template-columns:minmax(0,560px) minmax(0,1fr)}
.ab-post>.post-card{background:var(--bg)}
@media(max-width:760px){.ab-panel.ab-post{grid-template-columns:minmax(0,1fr)}}
.ab-side>.ab-comments:first-child{margin-top:0;padding-top:0;border-top:0}
@media(hover:none){.mb-stage-inner>.ab-panel{overscroll-behavior-y:auto}}
.mb-head[hidden]{display:none}
.ab-link-side[hidden]{display:none}
.ab-link-side{display:flex;flex-direction:column;gap:4px;font-size:14px;line-height:1.45}
.ab-link-side .lc-out{font:400 12px/1.5 var(--mono);color:var(--muted)}
.ab-link-side .lc-title{font-size:16px;font-weight:600;line-height:1.3}
.ab-link-side .lc-out .lg{margin-left:.34em}
.mb-count{min-width:5ch;text-align:center;font:400 12px/1 var(--mono);font-variant-numeric:tabular-nums;color:var(--muted)}
.ae-icon{display:inline-flex;align-items:center;justify-content:center;min-width:24px;min-height:32px;color:var(--muted);transition:color var(--hover,120ms) var(--ease,ease)}
.ae-icon:is(:hover,:focus-visible){color:var(--ink,var(--fg,currentColor))}
.ae-icon .lg{--lg-h:17px;--lg-bottom:0;margin:0;vertical-align:middle}
.ae-icon .lg::after{opacity:1}
.ae-icon .lg:is([data-glyph="arena"]){--lg-h:10px}
.ae-icon .lg:is([data-glyph="x"]){--lg-h:15px}
.ae-icon .lg:is([data-glyph="email"]){--lg-h:13px}
.theme-snap{--hover:0ms;--press:0ms;--lg-time:0ms}
.theme-snap :is(.lr-thumb,.lr-step,.pc-via-corner){transition-duration:0ms!important}
.ts{position:relative;display:inline-grid;place-items:center;width:32px;height:32px;margin:0;padding:0;border:0;border-radius:50%;background:none;color:var(--ink);cursor:pointer;-webkit-tap-highlight-color:transparent;touch-action:manipulation}
.ts:focus-visible{outline:1.5px solid var(--ink);outline-offset:-3px}
.ts svg{display:block;width:16px;height:16px;overflow:visible;fill:none;stroke:currentColor;stroke-width:1.5;stroke-linecap:square;stroke-linejoin:miter}
.ts .face{display:block;width:16px;height:16px;transition:transform 220ms cubic-bezier(.3,1.4,.5,1)}
@media (hover:hover){.ts:hover .face{transform:rotate(-20deg)}}
.ts.pressed .face{transform:scale(.86);transition:transform 60ms var(--ease)}
@media (hover:hover){.ts.pressed:hover .face{transform:rotate(-20deg) scale(.86)}}
.ts-tip{position:absolute;z-index:5;top:calc(100% + 2px);right:8px;padding:3px 7px;border:1px solid var(--line);border-radius:3px;background:var(--bg);color:var(--ink);font:400 12px/1.4 var(--sans);letter-spacing:0;white-space:nowrap;pointer-events:none;opacity:0;visibility:hidden;transform:translateY(-2px);transition:opacity 120ms var(--ease),transform 160ms var(--ease),visibility 0s linear 120ms}
.ts.tip-on .ts-tip{opacity:1;visibility:visible;transform:none;transition:opacity 90ms var(--ease),transform 160ms var(--ease),visibility 0s}
@media (pointer:coarse){.ts-tip{right:14px;top:calc(100% - 2px)}}
@media (forced-colors:active){.ts-tip{border-color:CanvasText}}
.ts .fill{fill:currentColor;stroke:none}
:root:not([data-theme]) .ts .fill{fill:none;stroke:currentColor}
@media (pointer:coarse){.ts{width:44px;height:44px}}
.ts-lamp .rays{transform-origin:8px 8px;transition:transform 150ms cubic-bezier(.3,1.4,.5,1),opacity 90ms linear}
.ts-lamp .disc{transform-origin:8px 8px;transform:scale(.58);transition:transform 160ms cubic-bezier(.3,1.45,.5,1)}
.ts-lamp .bite{transform:translate(10px,-10px);transition:transform 170ms cubic-bezier(.3,1.35,.5,1)}
.ts-lamp .bite-edge{fill:none;stroke:none}
:root:not([data-theme]) .ts-lamp .bite-edge{stroke:currentColor}
:root[data-resolved="dark"] .ts-lamp .rays{transform:rotate(45deg) scale(.2);opacity:0}
:root[data-resolved="dark"] .ts-lamp .disc{transform:none}
:root[data-resolved="dark"] .ts-lamp .bite{transform:translate(3.3px,-3.3px)}
.ts-lamp .disc,.ts-lamp .bite{vector-effect:non-scaling-stroke}
@media (hover:hover){:root[data-resolved="dark"] .ts-lamp:hover .face{transform:translateY(-2px)}:root[data-resolved="dark"] .ts-lamp.pressed:hover .face{transform:translateY(-2px) scale(.86)}}
@media (prefers-reduced-motion:reduce){.ts-tip{transform:none!important}.ts .face,.ts-lamp :is(.rays,.disc,.bite){transition:none!important}}
[data-tone="273a39"]{--tone:#273a39}
[data-tone-dark="273a39"]{--tone-dark:#273a39}
[data-tone="c8d1c9"]{--tone:#c8d1c9}
[data-tone-dark="c8d1c9"]{--tone-dark:#c8d1c9}
[data-tone="1d2526"]{--tone:#1d2526}
[data-tone-dark="1d2526"]{--tone-dark:#1d2526}
[data-tone="161b22"]{--tone:#161b22}
[data-tone-dark="161b22"]{--tone-dark:#161b22}
[data-tone="11131a"]{--tone:#11131a}
[data-tone-dark="11131a"]{--tone-dark:#11131a}
[data-tone="2e3c31"]{--tone:#2e3c31}
[data-tone-dark="2e3c31"]{--tone-dark:#2e3c31}
[data-tone="f2eeee"]{--tone:#f2eeee}
[data-tone-dark="f2eeee"]{--tone-dark:#f2eeee}
[data-tone="ede8ea"]{--tone:#ede8ea}
[data-tone-dark="ede8ea"]{--tone-dark:#ede8ea}
#item-python-cli-renders .gallery-row{max-width:calc(2.743 * min(72svh,640px) + 10px)}
#item-pwa-details .gallery-row{max-width:calc(1.982 * min(72svh,640px) + 10px)}
[data-pc-ar="1277x718"]{--pc-ratio:1.779}
[data-pc-ar="1280x1280"]{--pc-ratio:1}
[data-pc-ar="1357x1600"]{--pc-ratio:0.848}
[data-pc-ar="1600x1068"]{--pc-ratio:1.498}
[data-pc-ar="1600x1600"]{--pc-ratio:1}
[data-pc-ar="2463x1273"]{--pc-ratio:1.935}
[data-pc-ar="2560x2560"]{--pc-ratio:1}
[data-ar="1281x818"]{--ratio:1.566}
[data-ar="1600x1068"]{--ratio:1.4981}
[data-ar="1600x1285"]{--ratio:1.2451}
[data-ar="1327x949"]{--ratio:1.3983}
[data-ar="1290x980"]{--ratio:1.3163}
[data-ar="1198x1800"]{--ratio:0.6656}
[data-ar="1800x1179"]{--ratio:1.5267}
:root[data-keys]{--kf-wash:var(--select);--kf-ink:var(--ink);--kf-rule:var(--ink)}
:root[data-keys] :is(.project.kf-at .project-title h3,.lr.kf-in .lr-title) .text-link{text-decoration-color:var(--kf-ink)}
.prose pre{overscroll-behavior-x:contain}
.masthead{align-items:baseline}
.controls{margin-top:0}
.identity{padding:0}
.name{display:inline-block;text-decoration:underline 1px;text-underline-offset:.14em;text-decoration-color:transparent;transition:text-decoration-color var(--hover) var(--ease),transform var(--hover) var(--ease),color var(--hover) var(--ease)}
@media(hover:hover){.identity:hover .name{text-decoration-color:var(--ink)}}
.identity:focus-visible .name{text-decoration-color:var(--ink)}
.identity:active .name{transform:translateY(1px);transition-duration:var(--press)}
@media(max-width:600px){.masthead{align-items:center}}
:is(.contact-button,.view-switch button,.cx-row,.cx-source,.ab-tile,.lr-step:not(:disabled),.lr-item:not(.lr-more) .post-card,.pc-card){transition-property:color,border-color,background-color,text-decoration-color,transform;transition-duration:var(--hover);transition-timing-function:var(--ease)}
:is(.contact-button,.view-switch button,.cx-row,.cx-source,.ab-tile,.lr-step:not(:disabled)):active{transform:translateY(1px);transition-duration:var(--press)}
.set-head.set-head-cc{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center}
.set-head.set-head-cc>*{grid-column:1/-1}
.set-head.set-head-cc>.set-title{grid-column:1}
.set-head>.cc{grid-column:2;margin-left:10px;margin-right:-8px}
@media(pointer:coarse){.set-head>.cc{margin-right:-14px}}
.js .set-head>.cc{display:inline-flex}
@media(prefers-reduced-motion:reduce){.name{transition:none!important}}
.pl-field,.pl-icon{display:none}
.js .pl-field{position:relative;display:inline-block;width:164px;height:32px;margin:0 6px 0 -10px;padding:0 26px 0 10px;white-space:nowrap;border:1px solid transparent;border-radius:6px;background:transparent;color:var(--muted);font:400 15px/30px var(--sans);text-align:left;cursor:pointer;-webkit-tap-highlight-color:transparent;transition:background-color var(--hover) var(--ease),border-color var(--hover) var(--ease),color var(--hover) var(--ease)}
.pl-field svg{display:inline-block;margin-right:8px;vertical-align:-2px}
.pl-field svg,.pl-icon svg{flex:none;width:14px;height:14px;fill:none;stroke:currentColor;stroke-width:1.5;stroke-linecap:round;overflow:visible}
.pl-label-site{display:none}
.pl-field-key{position:absolute;top:0;right:10px;font:400 12px/30px var(--mono);color:var(--muted);opacity:0;transition:opacity var(--hover) var(--ease)}
@media(hover:hover){.pl-field:hover{border-color:color-mix(in srgb,var(--line) 70%,transparent);background:var(--panel);color:var(--ink)}.pl-field:hover .pl-field-key{opacity:1}}
.pl-field:focus-visible{outline:1.5px solid var(--ink);outline-offset:-2px;color:var(--ink)}
.pl-field:focus-visible .pl-field-key{opacity:1}
.pl-field:active{background:color-mix(in srgb,var(--ink) 8%,var(--panel))}
.pl-icon{place-items:center;width:32px;height:32px;margin:0 -2px 0 -8px;padding:0;border:0;border-radius:50%;background:none;color:var(--ink);cursor:pointer;-webkit-tap-highlight-color:transparent;touch-action:manipulation}
.pl-icon svg{width:16px;height:16px;transition:transform 220ms cubic-bezier(.3,1.4,.5,1)}
@media(hover:hover){.pl-icon:hover svg{transform:rotate(-12deg) scale(1.06)}}
.pl-icon:active svg{transform:scale(.86);transition:transform 60ms var(--ease)}
.pl-icon:focus-visible{outline:1.5px solid var(--ink);outline-offset:-3px}
@media(pointer:coarse){.pl-icon{width:44px;height:44px}}
@media(max-width:600px){.masthead{grid-template-columns:minmax(0,1fr) auto auto}.controls .ts{grid-column:3}.js .pl-field{display:none}.js .pl-icon{display:inline-grid;grid-column:2;grid-row:1;align-self:center;margin:0 -6px 0 0}}
@media(prefers-reduced-motion:reduce){.pl-icon svg,.pl-field,.pl-field-key{transition:none!important}}
.text-link:has(>.link-text[data-split]){text-decoration-line:none}
.link-text[data-split]{text-decoration-color:inherit}
.project-title h3 .text-link,.lr-title .text-link{text-decoration-color:transparent}
@media(hover:hover){.project-title h3 .text-link:hover,.lr-title .text-link:hover{text-decoration-color:var(--ink)}}
.project-title h3 .text-link:focus-visible,.lr-title .text-link:focus-visible{text-decoration-color:var(--ink)}
.foot-names .lg:not(.lg-lead){display:none}
.foot-names .lg-lead{margin-left:0;margin-right:var(--lg-gap)}
@container foot (width < 456.15px){:root .foot-names{display:none}:root .foot-glyphs{display:flex}}