@font-face{font-family:Plex Mono;src:url('/assets/mono.woff') format('woff');font-display:swap;font-weight:400}@font-face{font-family:Plex Serif;src:url('/assets/serif.woff') format('woff');font-display:swap;font-weight:600}
:root{--paper:#f8f8f6;--ink:#232522;--muted:#747670;--line:#d7d8d2;--mono:'Plex Mono',monospace;--serif:'Plex Serif',Georgia,serif}*{box-sizing:border-box}html{background:var(--paper);color:var(--ink);font-family:var(--mono);font-size:16px}body{margin:0}a{color:inherit;text-decoration:none}button,input,textarea{font:inherit;color:inherit}button,a,input,textarea{-webkit-tap-highlight-color:transparent}button{cursor:pointer}button:disabled{cursor:default}a:focus-visible,button:focus-visible,input:focus-visible,textarea:focus-visible{outline:1px dashed var(--ink);outline-offset:7px}.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap}.skip{position:fixed;top:-100px;left:40%;z-index:20;background:var(--paper);padding:14px}.skip:focus{top:0}.corner{position:fixed;z-index:10;padding:12px 0;font-size:14px;line-height:20px;background:var(--paper);min-height:44px}.corner.active{font-weight:bold}.corner.active:after{content:'';display:block;width:100%;height:1px;background:var(--ink);position:absolute;bottom:7px}.corner-0{top:27px;left:40px}.corner-1{top:27px;right:40px}.corner-2{bottom:26px;left:40px}.corner-3{bottom:26px;right:40px}footer{position:fixed;z-index:9;bottom:40px;left:50%;transform:translateX(-50%);font-size:12px;color:var(--muted);white-space:nowrap;background:var(--paper)}footer span{padding:0 10px}.view-switch{display:flex;justify-content:center;gap:16px;font-size:12px;letter-spacing:.08em;padding:12px;position:absolute;top:31px;left:50%;transform:translateX(-50%);z-index:3}.view-switch a{color:var(--muted);padding:5px}.view-switch a[aria-current]{color:var(--ink);text-decoration:underline;text-underline-offset:6px}.view-switch>span{color:#afb1aa;padding-top:5px}.works{height:100svh;min-height:550px;overflow:hidden}.field{position:absolute;inset:112px 6% 132px;touch-action:pan-y}.node{position:absolute;left:var(--x);top:var(--y);transform:translate(-50%,-50%);text-align:center;white-space:nowrap;z-index:1;min-height:60px;padding:8px}.node-inner{display:flex;flex-direction:column;align-items:center;transform:translate(var(--dx,0px),var(--dy,0px)) scale(var(--scale,1));opacity:var(--opacity,1);will-change:transform,opacity}.node-title{font-family:var(--serif);font-weight:600;font-size:clamp(17px,2.1vw,31px);letter-spacing:-.03em;line-height:1.3}.node-meta{font-size:12px;line-height:1.7;color:var(--muted);margin-top:6px}.node:nth-child(n+5) .node-title{font-size:clamp(15px,1.4vw,21px)}.marker{position:relative;width:4px;height:4px;background:var(--ink);border-radius:50%;margin:0 0 15px}.marker:after{content:'';position:absolute;inset:-9px;border:1px dashed var(--ink);border-radius:50%;opacity:var(--ring,0)}.node:focus-visible{outline:none;z-index:4}.node:focus-visible .node-inner{opacity:1!important;outline:1px dashed var(--ink);outline-offset:12px}.field-caption{position:absolute;bottom:112px;left:40px;right:40px;display:flex;justify-content:space-between;font-size:12px;letter-spacing:.04em;color:var(--muted)}.count{margin-left:14px;color:#92948e}.index-page{padding:143px 9% 145px}.index-grid{display:grid;grid-template-columns:1fr 1fr;gap:90px 7%}.entry-heading{display:flex;align-items:start;justify-content:space-between;gap:16px}.entry-heading h2{font:600 clamp(22px,2.5vw,36px)/1.2 var(--serif);letter-spacing:-.035em;margin:0}.entry-number{font-size:12px;color:var(--muted);padding-top:7px}.metadata{font-size:12px;line-height:1.8;color:var(--muted);margin:14px 0 23px}.image-wrap{padding-top:22px;border-top:1px solid var(--line);overflow:hidden}.image-wrap img{width:100%;height:auto;aspect-ratio:3/2;object-fit:cover;display:block;filter:saturate(.55);transition:filter .3s}.index-entry a:hover img{filter:saturate(1)}.image-note{font-size:12px;color:var(--muted);margin:10px 0}.detail{max-width:1140px;margin:auto;padding:140px 50px 160px}.back-link{font-size:12px;letter-spacing:.08em}.project-heading{margin:64px 0 34px}.project-heading h1,.text-page h1{font:600 clamp(36px,5vw,72px)/1.13 var(--serif);letter-spacing:-.05em;margin:14px 0 28px;overflow-wrap:anywhere}.project-description{font-size:16px;line-height:1.9;max-width:720px}.project-image{margin:52px 0}.project-image img{width:100%;height:auto;max-height:640px;object-fit:cover;display:block;filter:saturate(.6)}figcaption,.small-note{font-size:12px;line-height:1.7;color:var(--muted);margin-top:12px}.text-button{display:inline-block;border:1px solid var(--ink);background:transparent;padding:15px 25px;font-size:12px;letter-spacing:.06em;min-height:48px}.text-button:disabled{border-color:#d2d3cd;color:#92948c}.text-button:not(:disabled):hover{background:var(--ink);color:var(--paper)}.section-heading{display:flex;justify-content:space-between;align-items:center;border-top:1px solid var(--line);padding-top:18px}.section-heading h2{font:600 28px var(--serif)}.version-list{display:grid;grid-template-columns:repeat(3,1fr);border-top:1px solid var(--line)}.version{background:transparent;border:0;border-bottom:1px solid var(--line);text-align:left;padding:25px 12px 25px 0;display:flex;flex-direction:column;gap:10px;font-size:12px;color:var(--muted)}.version[aria-pressed=true]{color:var(--ink);border-bottom-color:var(--ink)}.archive-preview{padding:28px 0;max-width:640px}.archive-preview h3{font:600 24px var(--serif);margin:0 0 16px}.archive-preview p{font-size:14px;line-height:1.9}.text-page{width:min(760px,calc(100% - 100px));margin:0 auto;padding:19vh 0 150px}.eyebrow{font-size:12px;letter-spacing:.12em;color:var(--muted);margin-bottom:40px}.biography{font-size:16px;line-height:2;margin:38px 0 45px}.socials{display:flex;gap:25px}.socials>a,.social-placeholder{width:44px;height:44px;display:grid;place-items:center}.socials svg{width:24px;height:24px}.social-placeholder{color:var(--muted)}.collaborate h1{font-size:clamp(32px,4vw,54px)}form{margin-top:32px}input,textarea{display:block;width:100%;border:0;border-bottom:1px solid var(--line);border-radius:0;background:transparent;padding:22px 0;font-size:16px;line-height:1.7;resize:none}input::placeholder,textarea::placeholder{color:#747670;opacity:1}textarea{min-height:150px;max-height:420px}form .text-button{margin-top:34px}.news-page{height:100svh;min-height:360px;display:grid;place-items:center;padding:100px 30px}.news-page p{text-align:center;font-size:16px;line-height:1.9}::selection{background:#d5d7cf}
@media(max-width:650px){.corner-0{top:16px;left:20px}.corner-1{top:16px;right:20px}.corner-2{bottom:25px;left:20px}.corner-3{bottom:25px;right:20px}.corner{font-size:12px}footer{bottom:12px;font-size:12px}.view-switch{top:72px;font-size:12px}.works{min-height:580px}.field{inset:135px 12px 165px}.node{left:var(--mx);top:var(--my);max-width:60%;padding:10px 0}.node-title{font-size:19px}.node:nth-child(n+5) .node-title{font-size:14px;white-space:normal;max-width:180px}.node-meta{font-size:12px;white-space:normal;max-width:170px;line-height:1.6}.marker{margin-bottom:11px}.field-caption{left:20px;right:20px;bottom:101px;font-size:12px}.pointer-hint{max-width:140px;text-align:right;line-height:1.6}.index-page{padding:153px 24px 130px}.index-grid{grid-template-columns:1fr;gap:55px}.entry-heading h2{font-size:28px}.detail{padding:116px 24px 140px}.project-heading{margin-top:44px}.project-heading h1{font-size:40px}.project-description{font-size:14px}.section-heading{display:block}.section-heading h2{margin-bottom:5px}.version{font-size:12px}.text-page{width:calc(100% - 48px);padding-top:145px}.eyebrow{margin-bottom:27px}.text-page h1{font-size:41px}.biography{font-size:14px}.news-page p{font-size:14px}.metadata{font-size:12px}}
@media(max-height:550px) and (min-width:651px){.field{inset:86px 8% 115px}.node-title{font-size:20px}.node-meta{font-size:12px}.field-caption{bottom:90px}.works{min-height:400px}.corner-0,.corner-1{top:14px}.view-switch{top:18px}}
@media(prefers-reduced-motion:reduce){*,*:before,*:after{scroll-behavior:auto!important;transition:none!important}.node-inner{will-change:auto}}
.field{inset:125px 7% 135px;container-type:size}.node{width:24%;max-width:220px;white-space:normal;padding:8px 0;min-height:44px}.node-title,.node:nth-child(n+5) .node-title{font-size:clamp(12px,1.35vw,21px);font-size:clamp(12px,1.55cqw,21px);line-height:1.25;letter-spacing:-.025em;max-width:100%;overflow-wrap:normal}.node-meta{display:none}.node-inner{width:100%;pointer-events:none}.marker{width:3px;height:3px;margin-bottom:10px}.node{transform:translate(-50%,-50%) translate(var(--dx,0px),var(--dy,0px))}.node-inner{transform:scale(var(--scale,1))}.index-grid{grid-template-columns:repeat(3,minmax(0,1fr));gap:65px 4%}.entry-heading h2{font-size:clamp(19px,2vw,30px)}.index-page{padding-left:6%;padding-right:6%}.metadata{font-size:12px}.text-page{min-height:100svh;width:min(700px,calc(100% - 100px));padding-top:clamp(125px,20vh,240px);display:flex;flex-direction:column;justify-content:center}.text-page h1{font-size:clamp(30px,4vw,54px)}.biography{text-align:justify;text-align-last:left;hyphens:auto}.news-page p{max-width:700px}.view-switch a{text-transform:lowercase}.corner{text-transform:lowercase}.field-caption{pointer-events:none}
@media(max-width:650px){.field{inset:135px 20px 125px}.node{width:39%;max-width:none}.node-title,.node:nth-child(n+5) .node-title{font-size:clamp(12px,3.3vw,16px);max-width:100%;line-height:1.2}.marker{margin-bottom:7px}.works{height:100svh;min-height:560px}.field-caption{bottom:90px;font-size:10px}.pointer-hint{font-size:10px}.index-grid{grid-template-columns:1fr;gap:50px}.index-page{padding:145px 24px 130px}.entry-heading h2{font-size:clamp(23px,6vw,32px)}.text-page{width:calc(100% - 48px);min-height:100svh;padding-top:135px;justify-content:flex-start}.text-page h1{font-size:clamp(28px,8vw,40px)}.news-page{display:block;padding:145px 24px 125px}.news-page p{text-align:left;margin:0;width:100%}.biography{font-size:16px}.socials{justify-content:flex-start}}
@media(max-height:550px) and (min-width:651px){.field{inset:90px 7% 100px}.node-title,.node:nth-child(n+5) .node-title{font-size:clamp(12px,1.3vw,16px)}.marker{margin-bottom:5px}.works{min-height:350px}.field-caption{bottom:85px}.text-page{padding-top:110px}}
/* The unpainted inner viewport keeps content clear of all four corner labels. */
html,body{height:100%;overflow:hidden}.content-frame{position:fixed;inset:92px 40px 96px;overflow:auto;overscroll-behavior:contain;scrollbar-width:none;-webkit-overflow-scrolling:touch}.content-frame::-webkit-scrollbar{display:none}.content-frame main{position:relative}.content-frame main:focus{outline:none}.corner,footer{background:transparent;transition:transform .28s ease,opacity .24s ease;will-change:transform}.frame-hidden .corner-0,.frame-hidden .corner-1{transform:translateY(-100px);opacity:0;pointer-events:none}.frame-hidden .corner-2,.frame-hidden .corner-3{transform:translateY(110px);opacity:0;pointer-events:none}.frame-hidden footer{transform:translate(-50%,100px);opacity:0}.works{height:100%;min-height:0}.view-switch{top:0}.index-page{padding:65px 3% 50px}.detail{padding:32px 4% 60px}.text-page{min-height:100%;padding:35px 0 50px}.news-page{height:100%;min-height:0;padding:40px 24px}.news-page p{margin:0}.biography{white-space:pre-line}.skip{z-index:30}
@media(max-width:650px){.content-frame{inset:85px 20px 97px}.works{height:100%;min-height:0}.view-switch{top:0}.index-page{padding:60px 4px 40px}.text-page{width:100%;padding:35px 4px 45px;min-height:100%}.news-page{height:100%;padding:55px 4px 45px}.detail{padding:30px 4px 50px}.corner{background:transparent}}
@media(max-height:550px) and (min-width:651px){.content-frame{inset:70px 35px 80px}.field{inset:35px 2% 35px}.works{min-height:0}.view-switch{top:-5px}.field-caption{bottom:0}.node-title,.node:nth-child(n+5) .node-title{font-size:10px}.node{padding:4px}.marker{margin-bottom:4px}.text-page{padding-top:25px}}
/* Small type, irregular coordinates, bounded movement: a quiet spatial field. */
.field{inset:62px 4% 55px;overflow:visible}.node{width:max-content;max-width:24%;min-height:44px;padding:12px 6px;touch-action:none;user-select:none;-webkit-user-select:none;-webkit-touch-callout:none}.node-title,.node:nth-child(n+5) .node-title{font-size:clamp(11px,.96vw,14px);font-size:clamp(11px,1.12cqw,14px);font-weight:600;line-height:1.4;letter-spacing:0}.node-inner{width:auto}.marker{width:2px;height:2px;margin-bottom:8px}.marker:after{inset:-6px}.field-caption{left:16px;right:16px;bottom:12px;font-size:10px}.field-caption .pointer-hint{font-size:10px}
@media(max-width:650px){.field{inset:52px 0 50px}.node{max-width:42%;padding:10px 3px}.node-title,.node:nth-child(n+5) .node-title{font-size:11px;line-height:1.4}.marker{margin-bottom:6px}.field-caption{left:0;right:0;bottom:4px;font-size:9px}.field-caption .pointer-hint{font-size:9px;max-width:125px}.count{margin-left:3px}}
/* Header/footer masks slide with the navigation; content stays in a stable scroll flow. */
:root{--frame-top:92px;--frame-bottom:96px;--frame-side:40px}
.content-frame{inset:0 var(--frame-side);overflow-y:auto;overflow-x:hidden;scroll-padding-top:var(--frame-top);scroll-padding-bottom:var(--frame-bottom)}
.page-flow{padding-top:var(--frame-top);min-height:100%;display:flex;flex-direction:column}
.frame-band{position:fixed;left:0;right:0;background:var(--paper);z-index:5;pointer-events:none;transition:transform .28s ease;will-change:transform}
.frame-band-top{top:0;height:var(--frame-top)}.frame-band-bottom{bottom:0;height:var(--frame-bottom)}
.frame-hidden .frame-band-top{transform:translateY(-100%)}.frame-hidden .frame-band-bottom{transform:translateY(100%)}
.content-frame main{flex-shrink:0}.works{height:calc(100svh - var(--frame-top) - var(--frame-bottom));min-height:0}
.text-page,.news-page{min-height:calc(100svh - var(--frame-top) - var(--frame-bottom))}
.news-page{height:auto;display:flex;align-items:center;justify-content:center;padding:30px 0;text-align:center}
.news-message{font-size:clamp(10px,2.6vw,16px);line-height:2.1;max-width:100%}.news-message span{display:block;white-space:nowrap}
footer.site-status,.frame-hidden footer.site-status{position:relative;inset:auto;transform:none;opacity:1;z-index:6;flex-shrink:0;height:var(--frame-bottom);width:100%;margin-top:auto;display:flex;align-items:center;justify-content:center;background:transparent;font-size:9px;line-height:16px;transition:none;will-change:auto}
footer.site-status span{padding:0 8px}
@media(max-width:650px){:root{--frame-top:85px;--frame-bottom:97px;--frame-side:20px}.works{height:calc(100svh - var(--frame-top) - var(--frame-bottom));min-height:0}.news-page{display:flex;padding:30px 0}.news-page p{text-align:center;width:auto}.news-message{font-size:clamp(10px,2.7vw,14px)}footer.site-status,.frame-hidden footer.site-status{font-size:8px;align-items:flex-start;padding-top:43px}}
@media(max-height:550px) and (min-width:651px){:root{--frame-top:70px;--frame-bottom:80px;--frame-side:35px}}
:root{color-scheme:light;--theme-icon:#b2b4ad;--theme-border:#e0e1dc}
:root[data-theme=dark]{color-scheme:dark;--paper:#080f1c;--ink:#e4e5dd;--muted:#a1a399;--line:#344155;--theme-icon:#8997ad;--theme-border:#344155}
.theme-toggle{position:fixed;z-index:12;top:27px;left:50%;transform:translateX(-50%);width:44px;height:44px;border:0;border-radius:50%;background:transparent;color:var(--theme-icon);display:grid;place-items:center;padding:0;transition:transform .28s ease,opacity .24s ease}
.theme-toggle:before{content:'';position:absolute;inset:8px;border:1px solid var(--theme-border);border-radius:50%}.theme-toggle svg{width:13px;height:13px;fill:none;stroke:currentColor;stroke-width:1.25}.theme-toggle:hover,.theme-toggle:focus-visible{color:var(--ink)}.theme-toggle:focus-visible{outline:1px dashed var(--ink);outline-offset:0}.theme-sun{display:none}:root[data-theme=dark] .theme-sun{display:block}:root[data-theme=dark] .theme-moon{display:none}.frame-hidden .theme-toggle{transform:translate(-50%,-100px);opacity:0;pointer-events:none}
:root[data-theme=dark] input::placeholder,:root[data-theme=dark] textarea::placeholder{color:var(--muted)}:root[data-theme=dark] .text-button:disabled{color:var(--muted);border-color:var(--line)}:root[data-theme=dark] .count{color:var(--muted)}:root[data-theme=dark] .view-switch>span{color:var(--muted)}:root[data-theme=dark] ::selection{background:#344765;color:var(--ink)}
@media(max-width:650px){.theme-toggle{top:16px}}@media(max-height:550px) and (min-width:651px){.theme-toggle{top:14px}}
.index-entry>a{display:block;height:100%}.entry-heading{align-items:baseline}.entry-heading h2{font-size:var(--index-title-size,clamp(13px,1.7vw,22px));min-width:0;flex:1;white-space:nowrap;letter-spacing:-.035em;line-height:1.3}.entry-number{flex:none;padding:0}.index-entry .metadata{height:44px;margin:12px 0 18px;overflow:hidden}.image-wrap{padding-top:18px}
.back-link{display:inline-flex;align-items:center;gap:12px;min-height:44px}.back-circle{display:grid;place-items:center;width:28px;height:28px;border:1px solid var(--theme-border);border-radius:50%;color:var(--muted)}.back-circle svg{width:14px;height:14px;fill:none;stroke:currentColor;stroke-width:1.25}.back-link:hover .back-circle{color:var(--ink)}
body:not(.can-hide-frame) .corner,body:not(.can-hide-frame) .frame-band,body:not(.can-hide-frame) .theme-toggle{opacity:1;pointer-events:auto}body:not(.can-hide-frame) .corner,body:not(.can-hide-frame) .frame-band{transform:none}body:not(.can-hide-frame) .theme-toggle{transform:translateX(-50%)}body:not(.can-hide-frame) .frame-band{pointer-events:none}
.text-page{justify-content:center;padding-top:24px;padding-bottom:52px}.text-page.about{width:min(740px,100%)}.biography{font-size:clamp(12px,1.15vw,15px);line-height:1.85;margin:22px 0 24px}.text-page .eyebrow{margin:0 0 20px}.text-page h1{font-size:clamp(28px,3.3vw,48px);margin:0 0 16px}.news-page{padding-top:16px;padding-bottom:44px}.collaborate form{margin-top:12px}.collaborate input,.collaborate textarea{padding-top:16px;padding-bottom:16px}.collaborate textarea{min-height:120px}.field{bottom:35px}
@media(max-width:650px){.entry-heading h2{font-size:var(--index-title-size,22px)}.text-page{padding:25px 4px 45px}.biography{font-size:14px;line-height:1.8}.news-page{padding-top:16px;padding-bottom:44px}}

:root{--theme-top:27px}.theme-toggle .theme-wire{position:absolute;top:calc(-1 * var(--theme-top));left:50%;transform:translateX(-50%);width:10px;height:calc(var(--theme-top) + 8px);stroke:var(--theme-border);stroke-width:.8;fill:none;pointer-events:none;overflow:visible}
@media(max-width:650px){:root{--theme-top:16px}}@media(max-height:550px) and (min-width:651px){:root{--theme-top:14px}}
.back-top{position:fixed;z-index:12;bottom:73px;left:50%;width:44px;height:44px;display:grid;place-items:center;padding:0;background:transparent;border:0;color:var(--muted);opacity:0;transform:translate(-50%,65px);pointer-events:none;transition:transform .25s ease,opacity .25s ease}.back-top:before{content:'';position:absolute;inset:8px;border:1px solid var(--line);border-radius:50%;background:var(--paper);z-index:-1}.back-top svg{width:14px;height:14px;fill:none;stroke:currentColor;stroke-width:1.25}.back-top.visible{opacity:1;transform:translate(-50%,0);pointer-events:auto}.back-top:hover{color:var(--ink)}.news-message{transform:translateY(-1lh)}
.collaborate select{display:block;width:100%;font:inherit;font-size:16px;line-height:1.7;color:var(--ink);background:transparent;border:0;border-bottom:1px solid var(--line);border-radius:0;padding:16px 28px 16px 0;min-height:60px}.collaborate select:invalid{color:var(--muted)}.collaborate select option{background:var(--paper);color:var(--ink)}.collaborate select:focus-visible{outline:1px dashed var(--ink);outline-offset:7px}.collaborate .text-button:not(:disabled){background:var(--ink);color:var(--paper);border-color:var(--ink)}.collaborate-socials{margin-top:16px;gap:16px}.collaborate-socials a{width:36px;height:36px}
.news-copy{display:flex;flex-direction:column;align-items:center;max-width:100%;font-size:clamp(10px,2.6vw,16px);line-height:2.1;transform:translateY(-1lh)}.news-copy .news-message{transform:none;font-size:inherit}.news-socials{justify-content:center;margin-top:16px;gap:16px}.theme-toggle .theme-wire{width:18px}
/* Optical weight breathes without changing the established font or its metrics. */
.node-title{-webkit-text-stroke:var(--weight,0px) currentColor}
.tab-letter{display:inline-block}
.corner.active .tab-letter{animation:tab-dance 5s ease-in-out infinite;animation-delay:calc(5s + var(--letter)*55ms)}
@keyframes tab-dance{0%,14%,100%{transform:translateY(0)}3.5%{transform:translateY(-4px)}8%{transform:translateY(3px)}}
@media(prefers-reduced-motion:reduce){.corner.active .tab-letter{animation:none}.node-title{-webkit-text-stroke:0}}
.works,.index-page{text-transform:lowercase}
.form-trap{position:absolute;left:-10000px;width:1px;height:1px;overflow:hidden}
.privacy-links{display:inline-flex;gap:6px;margin-left:10px;padding:0!important}.privacy-links button{border:0;background:none;padding:0;font:inherit;color:inherit;text-decoration:underline;cursor:pointer}.small-note a,.privacy-page a{text-decoration:underline}
.privacy-choice{position:fixed;z-index:9;bottom:0;left:0;right:0;padding:12px 24px var(--frame-bottom);display:flex;align-items:center;justify-content:center;gap:20px;background:var(--paper);border-top:1px solid var(--line);font-size:12px;line-height:1.5;text-transform:lowercase;max-height:calc(100svh - var(--frame-top));overflow:auto;transition:padding-bottom .28s ease}.privacy-choice[hidden]{display:none}.privacy-choice p{margin:0;max-width:620px}.privacy-choice a{text-decoration:underline}.privacy-choice>div{display:flex;gap:8px}.privacy-choice button{min-height:44px;min-width:72px;border:1px solid var(--line);background:var(--paper);padding:8px 12px}.privacy-choice button:hover{border-color:var(--ink)}
.privacy-page{font-size:14px;line-height:1.8;justify-content:flex-start!important}.privacy-page h2{font:600 22px var(--serif);margin-top:32px}.privacy-page h1{font-size:36px}
@media(max-width:650px){.privacy-choice{padding:10px 16px var(--frame-bottom);gap:10px;flex-wrap:wrap}.privacy-links{display:flex;margin:5px 0 0;justify-content:center}}

.frame-hidden .privacy-choice{padding-bottom:12px}.privacy-back{align-self:flex-start;margin-bottom:24px;text-decoration:none!important}.privacy-page details{margin:18px 0}.privacy-page summary{cursor:pointer}.privacy-page h1{margin-top:0}

.about-updated{font-family:var(--mono);font-size:10px;line-height:1.6;color:var(--muted);margin:12px 0 24px}.site-status>.privacy-links{margin:0}
/* Quiet supporting text follows both palettes, with stronger focus feedback. */
:root{--footer-ink:color-mix(in srgb,var(--muted) 68%,var(--paper))}
footer.site-status{color:var(--footer-ink)}
.site-status .privacy-links a,.site-status .privacy-links button{text-decoration:underline;text-underline-offset:3px;color:inherit}
.site-status .privacy-links a:hover,.site-status .privacy-links button:hover,.site-status .privacy-links a:focus-visible,.site-status .privacy-links button:focus-visible{color:var(--ink)}
.about .biography{display:flex;flex-direction:column;gap:24px;white-space:normal}
.about .biography>p{margin:0}
.about .biography .about-updated{text-align:left;font-size:10px;line-height:1.6}
.socials,.collaborate-socials,.news-socials{gap:0}
.socials>a,.socials>.social-placeholder{position:relative;width:44px;height:44px;flex:none;color:var(--theme-icon)}
.socials>a:before,.socials>.social-placeholder:before{content:'';position:absolute;inset:8px;border:1px solid var(--theme-border);border-radius:50%;pointer-events:none}
.socials svg{width:14px;height:14px;stroke-width:1.25;stroke-linecap:round;stroke-linejoin:round;fill:none}
.socials>a:hover,.socials>a:focus-visible{color:var(--ink)}
.collaborate input,.collaborate textarea,.collaborate select{text-transform:lowercase}
.collaborate-actions{width:max-content;max-width:100%;display:flex;flex-direction:column;align-items:center;margin-top:18px}
.collaborate-actions .text-button{margin-top:0}
.collaborate-actions .socials{justify-content:center;margin-top:8px}
.is-about .back-top{bottom:calc(var(--frame-bottom) + 8px)}
/* OS menus cannot inherit translucent surfaces; enhance the native form value. */
.referral-picker{position:relative}.referral-picker select[hidden]{display:none}
.referral-trigger{display:flex;align-items:center;justify-content:space-between;width:100%;min-height:60px;border:0;border-bottom:1px solid var(--line);border-radius:0;padding:16px 4px 16px 0;background:transparent;color:var(--ink);font:inherit;font-size:16px;line-height:1.7;text-align:left;text-transform:lowercase}
.referral-trigger:after{content:'';width:6px;height:6px;border-right:1px solid currentColor;border-bottom:1px solid currentColor;transform:rotate(45deg);margin-right:8px}.referral-trigger.placeholder{color:var(--muted)}
.referral-options{position:absolute;z-index:4;top:calc(100% + 6px);left:0;right:0;padding:6px;border:1px solid var(--theme-border);border-radius:12px;background:color-mix(in srgb,var(--paper) 82%,transparent);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);box-shadow:0 8px 24px #0000000a;font:inherit;font-size:16px;color:var(--ink);animation:referral-open .18s ease-out}
.referral-options[hidden]{display:none}.referral-options [role=option]{min-height:44px;padding:10px 12px;border-radius:7px;cursor:pointer;text-transform:lowercase}.referral-options [role=option]:hover,.referral-options .highlighted{background:color-mix(in srgb,var(--ink) 7%,transparent)}.referral-options [aria-selected=true]{text-decoration:underline;text-underline-offset:4px}
@keyframes referral-open{from{opacity:0}to{opacity:1}}
@media(min-width:651px){.text-page.about{width:min(820px,100%);padding:10px 0 18px}.about .eyebrow{margin-bottom:10px}.about h1{font-size:clamp(28px,3vw,42px);margin-bottom:10px}.about .biography{font-size:clamp(12px,1vw,14px);line-height:1.65;gap:18px;margin:12px 0 14px}.about .biography .about-updated{line-height:1.6}}
@media(min-width:651px) and (max-height:700px){.text-page.about{padding:4px 0 8px}.about .eyebrow{margin-bottom:6px}.about h1{font-size:28px;margin-bottom:6px}.about .biography{line-height:1.55;gap:12px;margin:8px 0 10px}}
.marker:after{border:1px solid var(--theme-icon);opacity:var(--ring,0);animation:node-ring-pulse 2.2s ease-in-out infinite}
@keyframes node-ring-pulse{0%,100%{opacity:calc(var(--ring,0)*.08)}50%{opacity:var(--ring,0)}}
@media(prefers-reduced-motion:reduce){.marker:after,.referral-options{animation:none}}

/* The popup occupies the message field's height, inset equally from both rules. */
.referral-options{display:grid;grid-template-rows:repeat(3,minmax(0,1fr));box-sizing:border-box;overflow:auto}
.referral-options [role=option]{min-height:0;padding:0 12px;display:flex;align-items:center;line-height:1.3}
/* Titles share a clipped viewport; tabs and frame masks remain above the motion. */
.index-reveal{display:flow-root;overflow:hidden}
.works-morph-layer{position:fixed;z-index:4;inset:0 var(--frame-side);overflow:hidden;pointer-events:none;clip-path:inset(var(--frame-top) 0 var(--frame-bottom))}
.works-moving-title{white-space:nowrap;width:max-content;position:absolute;top:0;left:0;line-height:1.3;text-transform:lowercase;pointer-events:none;transform-origin:0 0;will-change:transform;font-synthesis:none;overflow:visible}
.works-incoming .node-title,.works-incoming .index-reveal,.works-incoming .entry-heading h2,.works-incoming .entry-number,.works-incoming .marker{visibility:hidden}
@media(prefers-reduced-motion:reduce){.works-morph-layer{display:none}}
/* Supplied full-page artwork keeps its original geometry and colour. */
.detail .project-image img{width:100%;height:auto;max-height:none;aspect-ratio:16/9;object-fit:contain;filter:none;border:0;border-radius:0}
:root:not([data-theme=dark]) .diagram-page img{mix-blend-mode:multiply}
.project-summary{max-width:100%;font-size:clamp(14px,1.3vw,16px)}
.project-credit{margin-top:38px}
.index-title-preview{position:fixed;z-index:8;width:min(240px,calc(100vw - 32px));aspect-ratio:16/9;pointer-events:none;opacity:0;transform:translateY(5px) scale(.97);transition:opacity .18s ease,transform .22s cubic-bezier(.2,.7,.2,1),visibility 0s .22s;visibility:hidden}
.index-title-preview.is-visible{opacity:1;transform:translateY(0) scale(1);visibility:visible;transition-delay:0s}
.index-title-preview img{width:100%;height:100%;object-fit:contain;display:block;border:0;border-radius:0}
@media(prefers-reduced-motion:reduce){.index-title-preview{transition:none}}
.index-entry .image-wrap img{aspect-ratio:16/9;object-fit:contain;filter:none}
.index-entry .index-description{max-width:100%;min-height:3.6em;height:auto;font-size:var(--index-description-size,12px);line-height:1.8;overflow:visible}
.project-summary a{text-decoration:underline;text-underline-offset:3px}
.index-entry .image-wrap{border:0}
/* Cover only the source-page footer rule (y=1014–1015 of 1080), not diagrams. */
.diagram-page{position:relative}
.diagram-page:after{content:'';position:absolute;left:0;right:0;top:93.6%;height:.8%;background:#fff;pointer-events:none}
:root:not([data-theme=dark]) .diagram-page{mix-blend-mode:multiply}
:root:not([data-theme=dark]) .diagram-page img{mix-blend-mode:normal}
/* Mask thin raster edge seams without scaling or cropping the artwork. */
.project-hero img,.index-entry .image-wrap img,.index-title-preview img{clip-path:inset(.16%)}
.project-image img,.index-entry img,.index-title-preview img{-webkit-touch-callout:none;-webkit-user-drag:none;user-select:none}

/* Project prose shares the full image column at every screen width. */
.detail .project-description{width:100%;max-width:none;font-size:16px}
.detail .project-description a{text-decoration:underline;text-underline-offset:3px}

.project-attribution a{text-decoration:underline;text-underline-offset:3px}
.project-attribution + .project-credit{margin-top:12px}
.launch-art{position:relative}
.detail>.back-link{text-transform:lowercase}
.launch-button{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);border-radius:0;font-family:var(--mono);background:var(--paper);color:var(--ink)}
/* One decoded loop; theme changes repaint it immediately without loading another image. */
img[data-app-motion]{filter:none!important;transition:none!important}
:root[data-theme=dark] img[data-app-motion]{filter:invert(1) grayscale(1)!important}
video[data-app-motion]{display:block;width:100%;height:auto;aspect-ratio:16/9;object-fit:contain;filter:none!important;transition:none!important;pointer-events:none}
:root[data-theme=dark] video[data-app-motion]{filter:invert(1) grayscale(1)!important}
.index-title-preview video{width:100%;height:100%}
.motion-access{left:12px;border:1px solid var(--ink);color:var(--ink);font:12px var(--mono)}
.motion-access:focus{top:8px}
.motion-paused .tab-letter,.motion-paused .marker:after{animation-play-state:paused!important}

/* v3.1: centre the whole news group in the current visible viewport. */
.content-frame .news-page{display:flex;align-items:center;justify-content:center;box-sizing:border-box;min-height:calc(100svh - var(--frame-top) - var(--frame-bottom));min-height:calc(100dvh - var(--frame-top) - var(--frame-bottom));height:auto;width:100%;padding:16px 0;text-align:center}
.news-page .news-copy{display:flex;flex-direction:column;align-items:center;max-width:100%;margin:0 auto;transform:translateY(calc((var(--frame-bottom) - var(--frame-top))/2))}
.news-page .news-message{margin:0;text-align:center;max-width:100%;width:auto}.news-page .news-message span{display:block;white-space:normal;overflow-wrap:break-word}.news-page .news-socials{justify-content:center;align-items:center;flex-wrap:wrap;margin:16px 0 0}

/* v3.2: a stable, explicit project column through scrolling and image decoding. */
.page-flow{width:100%;min-width:0}
.content-frame .detail{box-sizing:border-box;width:100%;max-width:1140px;min-width:0;flex:0 0 auto;align-self:center;margin:0 auto}
.content-frame .detail .project-heading,.content-frame .detail .project-image,.content-frame .detail .project-description{box-sizing:border-box;width:100%;min-width:0;max-width:100%;margin-inline:0}
.content-frame .detail .project-image img{display:block;width:100%;max-width:100%;height:auto}
