:root{color-scheme:dark;--black:#090a09;--white:#e6e6e1;--quiet:#aaaCA6;--index:310px;--pad:clamp(22px,3.4vw,64px);font:400 15px/1.55 Arial,Helvetica,sans-serif;background:var(--black);color:var(--white)}*{box-sizing:border-box}body{margin:0;min-height:100svh}h1,h2,h3,p,figure,ul{margin:0;font:inherit}a{color:inherit;text-decoration:none}button,input,select{font:inherit;color:inherit}button{cursor:pointer;border:0;background:none;padding:0;text-align:left}button:hover,a:hover{color:#fff}a:hover,button:hover{text-decoration:underline;text-underline-offset:5px}a:focus-visible,button:focus-visible,input:focus-visible,summary:focus-visible{outline:1px solid #ddd;outline-offset:6px}button[aria-pressed=true],a[aria-current]{text-decoration:underline;text-underline-offset:7px}header{height:106px;position:relative;z-index:20;padding:35px var(--pad);display:flex;justify-content:space-between;gap:24px;align-items:flex-start;background:linear-gradient(#090a09 5%,#090a0900)}header nav{display:flex;gap:27px}.name{white-space:nowrap}main{position:relative;outline:none}.skip{position:fixed;top:-70px;left:20px;z-index:100;background:#111;padding:10px}.skip:focus{top:10px}.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0)}.loading{padding:var(--pad)}.room{position:relative;isolation:isolate;min-height:calc(100svh - 106px);overflow:hidden;background:radial-gradient(ellipse at 43% 48%,#121410 0%,#090a09 66%)}.room:before{content:'';position:absolute;inset:0;z-index:-1;pointer-events:none;opacity:.055;background-image:url('data:image/svg+xml,%3Csvg xmlns="http://www.w3.org/2000/svg" width="160" height="160"%3E%3Cfilter id="n"%3E%3CfeTurbulence type="fractalNoise" baseFrequency=".82" numOctaves="3" stitchTiles="stitch"/%3E%3C/filter%3E%3Crect width="100%25" height="100%25" filter="url(%23n)" opacity=".5"/%3E%3C/svg%3E')}.floor{position:absolute;inset:72% -18% -60%;pointer-events:none;transform:perspective(550px) rotateX(47deg);transform-origin:50% 0;background:linear-gradient(#0d0e0b00,#12130f 26%,#080908);z-index:-1}.floor:after{content:'';position:absolute;inset:0;opacity:.12;background-image:url('data:image/svg+xml,%3Csvg xmlns="http://www.w3.org/2000/svg" width="180" height="180"%3E%3Cfilter id="n"%3E%3CfeTurbulence type="fractalNoise" baseFrequency=".7" numOctaves="3" stitchTiles="stitch"/%3E%3C/filter%3E%3Crect width="100%25" height="100%25" filter="url(%23n)"/%3E%3C/svg%3E')}.entrance{display:flex;align-items:center;justify-content:center;padding:0 var(--pad) 8svh}.entrance figure{width:min(82vw,calc((100svh - 230px)*1.7778));margin-top:1svh}.entrance .surface{cursor:pointer}.surface{position:relative;line-height:0;max-width:100%;background:#070807;contain:layout}.surface img{display:block;width:100%;height:100%;object-fit:contain}.surface video,.surface iframe{position:absolute;inset:0;width:100%;height:100%;border:0;background:#050505;object-fit:contain}.surface .player-notice{position:absolute;inset:0;display:grid;place-content:center;line-height:1.6;background:#090a09e8;padding:28px;gap:16px}.surface .player-notice a{text-decoration:underline}.home-controls{opacity:0;display:flex;gap:25px;margin-top:17px;transition:opacity .2s}.entrance figure:hover .home-controls,.entrance figure:focus-within .home-controls{opacity:1}.gallery-room{height:calc(100svh - 106px);min-height:540px}.stage{position:absolute;left:var(--pad);right:calc(var(--index) + var(--pad) + 55px);top:0;bottom:80px;perspective:1100px;perspective-origin:50% 48%;overflow:hidden}.world{position:absolute;left:50%;top:49%;transform-style:preserve-3d;transition:transform 1.4s cubic-bezier(.55,0,.15,1)}.bay{position:absolute;left:0;top:0;transform-style:preserve-3d;backface-visibility:hidden;transition:opacity .45s}.bay.active{z-index:2}.bay.inactive{pointer-events:none;opacity:.28}.bay .wall{position:relative;padding:clamp(16px,3vw,48px);background:linear-gradient(100deg,#0c0d0b,#10110e 55%,#090a08);transform:translate(-50%,-50%);box-shadow:0 48px 90px #0005;max-width:100%}.bay.active .wall{background:linear-gradient(90deg,#0b0c0a,#10110e 60%,#0c0d0a)}.bay[data-medium=Photography] .wall,.bay[data-medium=Objects] .wall{background:transparent;box-shadow:none}.bay .surface{width:100%;aspect-ratio:var(--ratio,1.7778)}.work-controls{position:absolute;left:var(--pad);right:calc(var(--index) + var(--pad) + 55px);bottom:34px;display:flex;justify-content:space-between;gap:20px;color:var(--quiet)}.work-controls .actions{display:flex;gap:25px;flex-wrap:wrap}.work-controls .caption{max-width:65%;color:var(--white)}.work-index{position:absolute;right:var(--pad);top:18px;bottom:34px;width:var(--index);display:flex;flex-direction:column;gap:18px;z-index:3;background:none}.index-head{display:flex;justify-content:space-between;gap:15px}.index-tools{display:flex;gap:12px;flex-wrap:wrap;color:var(--quiet)}.index-tools button{font-size:inherit}.index-search{width:100%;background:none;border:0;border-bottom:1px solid #ffffff24;border-radius:0;padding:8px 0;font-size:inherit}.index-search::placeholder{color:#858880}.work-list{overflow:auto;overscroll-behavior:contain;scrollbar-width:thin;scrollbar-color:#4c4e46 transparent;padding:4px 12px 28px 0;list-style:none}.work-list li{margin-bottom:20px}.work-list a{display:block;opacity:.62}.work-list a[aria-current]{opacity:1}.work-list a:hover{opacity:1}.mobile-index-toggle{display:none}.flight .bay.active{pointer-events:none}.page{max-width:1300px;margin:0 auto;padding:30px var(--pad) 90px;min-height:calc(100svh - 106px)}.research{display:grid;grid-template-columns:minmax(0,1fr) 290px;gap:45px;align-items:center}.research figure img{width:100%;display:block}.research p{margin:25px 0}.research .research-links{display:flex;flex-direction:column;gap:15px}.research figcaption{margin:18px 0;color:var(--quiet)}.reading{max-width:790px;margin:35px auto 100px;padding:0 25px}.reading p{margin:0 0 25px;white-space:pre-line}.tabs{display:flex;gap:25px;flex-wrap:wrap;margin-bottom:45px}.text-list{list-style:none;padding:0;margin-top:40px}.text-list a{display:grid;grid-template-columns:1.3fr 1fr;gap:40px;padding:24px 0}.text-list .source{color:var(--quiet)}.text-list a[hidden]{display:none}.contact{padding-top:13svh}.contact p{margin-bottom:24px}.muted{color:var(--quiet)}.cv{white-space:pre-wrap;line-height:1.9}.detail-gallery{display:grid;gap:32px}.detail-gallery img{max-width:100%;display:block;margin:0 auto}.detail-gallery figcaption{margin-top:12px;color:var(--quiet)}dialog{background:#10110f;color:var(--white);border:1px solid #ffffff1a;width:min(850px,calc(100% - 30px));max-height:85svh;padding:35px 45px;line-height:1.7}dialog::backdrop{background:#000c}dialog .close{position:sticky;top:0;float:right;background:#10110f;padding:0 0 15px 25px}dialog h2{margin:15px 0 30px}dialog p{margin-bottom:24px;white-space:pre-line}dialog a{text-decoration:underline}.detail-tabs{display:flex;gap:22px;margin:15px 0 30px}.specification{color:var(--quiet)}.controls-note{margin-top:25px;color:var(--quiet)}.mobile-index-toggle{color:var(--quiet)}.index-empty{color:var(--quiet);padding:15px 0}.reading details{margin:28px 0}.reading summary{cursor:pointer}.reading details p{margin-top:24px}body[data-page=home] header nav a[aria-current]{text-decoration:none}
@media(min-width:1600px){:root{--index:340px}.stage{right:calc(var(--index) + var(--pad) + 75px)}}
@media(max-width:850px){:root{--index:250px;--pad:24px}header nav{gap:17px}.stage{right:calc(var(--index) + var(--pad) + 15px)}.work-controls{right:calc(var(--index) + var(--pad) + 15px)}.work-controls .caption{display:none}.research{grid-template-columns:1fr}.research aside{max-width:600px}.text-list a{grid-template-columns:1fr;gap:6px}}
@media(max-width:650px){:root{font-size:15px;--pad:22px}header{height:112px;padding:22px;display:block}header nav{margin-top:20px;justify-content:space-between;gap:12px}.room,.page{min-height:calc(100svh - 112px)}.entrance{align-items:flex-start;padding-top:16svh}.entrance figure{width:100%;margin:0}.home-controls{opacity:1}.gallery-room{height:calc(100svh - 112px);min-height:520px}.stage{top:26px;left:8px;right:8px;bottom:165px;perspective:none}.world{top:48%;transition:transform .35s ease}.bay.inactive{display:none}.bay .wall{padding:14px}.work-controls{left:22px;right:22px;bottom:92px;display:block}.work-controls .caption{display:block;max-width:100%;margin-bottom:18px}.work-controls .actions{gap:24px}.work-index{display:none;left:22px;right:22px;width:auto;top:0;bottom:30px;background:#090a09;gap:15px}.gallery-room.index-open .work-index{display:flex}.gallery-room.index-open .stage,.gallery-room.index-open .work-controls{visibility:hidden}.mobile-index-toggle{position:absolute;bottom:30px;left:22px;display:block;z-index:4}.index-open .mobile-index-toggle{display:none}.index-close{display:block}.research{gap:22px}.research figure{margin-top:20px}.page{padding-top:25px}.tabs{gap:22px;margin-bottom:30px}.text-list{margin-top:0}.text-list a{padding:20px 0}.reading{margin-top:20px;padding:0 22px}.contact{padding-top:9svh}.floor{inset:70% -50% -40%}dialog{padding:24px}.surface iframe{min-height:0}}
@media(min-width:651px){.index-close{display:none}}
@media(prefers-reduced-motion:reduce){*,*:before,*:after{transition:none!important;animation:none!important;scroll-behavior:auto!important}.bay.inactive{display:none}}body.no-motion .world{transition:none}body.no-motion .bay.inactive{display:none}
.bay .wall{max-width:none}.research figure img{height:auto}.work-controls{flex-direction:column;gap:13px}.work-controls .caption{max-width:100%}.work-controls .actions{gap:22px}.stage{bottom:120px}.surface img{aspect-ratio:inherit}.research figure img{object-fit:contain}@media(max-width:650px){.stage{bottom:185px}.work-controls{bottom:90px}.work-controls .caption{margin-bottom:0}.work-controls .actions{margin-top:14px}.entrance figure{max-width:100%}}
/* Room revision: fixed physical units, instantaneous selection, image-only light. */
:root{--black:#000;--white:#e8e8e4;--quiet:#a3a39e;background:#000}body{background:var(--black);color:var(--white)}header{background:transparent}.room{background:#000}.room:before,.floor{display:none}.room-light{position:absolute;inset:0;z-index:-1;pointer-events:none}.world,.bay{position:static;transform:none!important;transition:none!important}.stage{overflow:visible;perspective:none}.bay .wall,.bay.active .wall{position:absolute;padding:0;background:transparent;box-shadow:none;transform:translate(-50%,-50%);max-width:none}.gallery-room .wall{margin:0}.bay.inactive{display:none}.surface{background:transparent}.surface img{object-fit:contain}.surface iframe{background:#000}.entrance figure{margin:0}.entrance .surface{aspect-ratio:var(--ratio,1.7778)}.home-controls{opacity:1;transition:none;color:var(--quiet)}*,*:before,*:after{animation:none!important;transition:none!important;scroll-behavior:auto!important}.white-gallery{--black:#fafaf8;--white:#252523;--quiet:#777772;color-scheme:light}.white-gallery .room{background:#fafaf8}.white-gallery .work-index{background:transparent}.white-gallery .index-search{border-bottom-color:#25252322}.white-gallery a:hover,.white-gallery button:hover{color:#000}.white-gallery .work-list{scrollbar-color:#c9c9c3 transparent}.page,.reading{background:transparent}dialog{background:#080808}dialog .close{background:#080808}.white-gallery dialog,.white-gallery dialog .close{background:#fafaf8}.white-gallery dialog{border-color:#25252322}body:not(.white-gallery) .work-index{background:none}@media(max-width:650px){.white-gallery .index-open .work-index{background:#fafaf8}body:not(.white-gallery) .index-open .work-index{background:#000}.entrance{padding:0}.bay .wall{padding:0}}
/* White-gallery materials and a barely visible reflected surface. */
.white-gallery .bay.active .wall{box-shadow:none;background:none}
.white-gallery .bay.active .surface{box-shadow:1px 1px 1px #24241c17,3px 4px 8px #34342a10}
.white-gallery .bay.active .surface:after{content:'';position:absolute;inset:0;pointer-events:none;background:linear-gradient(117deg,transparent 0%,rgba(255,255,252,.014) 19%,rgba(255,255,252,.055) 34%,rgba(255,255,252,.018) 35.5%,transparent 57%);border:1px solid #ffffff0b}
.white-gallery .room{background:#f4f4f0}
/* A slight stand-off from the wall, with diffuse light from above-left. */
.white-gallery .bay.active .surface{box-shadow:1px 2px 2px rgba(31,31,24,.12),3px 5px 7px rgba(31,31,24,.10),5px 8px 15px rgba(31,31,24,.045)}
.white-gallery .bay.active .surface{box-shadow:1px 2px 2px rgba(31,31,24,.18),4px 6px 8px rgba(31,31,24,.16),7px 11px 18px rgba(31,31,24,.075)}
/* Directional cast shadow from a print mounted slightly away from the wall. */
.white-gallery .bay.active .surface{box-shadow:1px 1px 1px rgba(35,34,29,.14),8px 10px 5px rgba(43,41,33,.26),11px 14px 10px rgba(43,41,33,.11)}
/* Cast the print's silhouette onto the wall as a separate, offset plane. */
.white-gallery .bay.active .wall{isolation:isolate}
.white-gallery .bay.active .wall:before{content:'';position:absolute;inset:1px;z-index:-1;pointer-events:none;background:rgba(49,47,39,.34);transform:translate(17px,21px);filter:blur(3.5px)}
.white-gallery .bay.active .surface{box-shadow:1px 1px 1px rgba(31,30,24,.18)}
/* Close wall mounting: a short, soft cast shadow. */
.white-gallery .bay.active .wall:before{background:rgba(49,47,39,.20);transform:translate(4px,5px);filter:blur(2.5px)}
.white-gallery .bay.active .surface{box-shadow:.5px 1px 1px rgba(31,30,24,.10)}
.white-gallery .documentation-view .wall:before{display:none}
.white-gallery .documentation-view .surface{box-shadow:none}
.white-gallery .documentation-view .surface:after{display:none}
/* Three immediate camera positions; the artwork retains its physical dimensions. */
.gallery-room .surface[role=button]{cursor:zoom-in;touch-action:manipulation}
.gallery-room[data-view=detail] .surface[role=button]{cursor:zoom-out}
.gallery-room[data-view=closer] .stage,.gallery-room[data-view=detail] .stage{overflow:hidden}
.work-controls button[hidden]{display:none}
/* Detail covers the viewport; text remains as floating controls above the image. */
body.detail-view{overflow:hidden}
body.detail-view .gallery-room .stage{position:fixed;inset:0;width:100vw;height:100svh;overflow:hidden;z-index:1;perspective:none}
body.detail-view .gallery-room .surface[role=button]{cursor:grab;touch-action:none;user-select:none;-webkit-user-select:none}
body.detail-view .gallery-room .surface.is-dragging{cursor:grabbing}
body.detail-view .gallery-room .surface img{-webkit-user-drag:none;pointer-events:none}
body.detail-view .gallery-room .wall:before,body.detail-view .gallery-room .surface:after{display:none}
body.detail-view .gallery-room .surface{box-shadow:none}
body.detail-view header{z-index:30;color:white;mix-blend-mode:difference;background:none}
body.detail-view .work-index,body.detail-view .work-controls,body.detail-view .mobile-index-toggle{z-index:5;color:white;--white:#fff;--quiet:#fff;mix-blend-mode:difference}
body.detail-view .work-index{position:fixed;top:124px;background:none}
body.detail-view .work-controls{position:fixed}
body.detail-view .mobile-index-toggle{position:fixed}
body.detail-view .work-index a:hover,body.detail-view .work-index button:hover,body.detail-view .work-controls a:hover,body.detail-view .work-controls button:hover{color:white}
body.detail-view .index-search{border-bottom-color:#ffffff55}
body.detail-view .index-search::placeholder{color:#fff9}
@media(max-width:650px){body.detail-view .work-index{top:112px}body.detail-view .gallery-room.index-open .work-index{background:#080808;mix-blend-mode:normal;z-index:6}}
/* Stable white lettering stays legible as the photograph moves underneath. */
body.detail-view header,body.detail-view .work-index,body.detail-view .work-controls,body.detail-view .mobile-index-toggle{mix-blend-mode:normal;color:#fff;text-shadow:0 1px 3px #000b,0 0 1px #000b}
body.detail-view header a:hover{color:#fff}

/* Moving-image architecture occupies the entire screen behind floating navigation. */
.moving-room{overflow:visible;background:transparent}
.moving-room .room-light{position:fixed;inset:0;width:100vw;height:100svh}

/* Film stills are projected into the same surface as their room, with full source bounds. */
.moving-room.projection-ready:not([data-view=detail]) .surface img{opacity:0}
.moving-room .bay.active .wall,.moving-room .bay.active .surface{border:0;outline:0;box-shadow:none;background:transparent}
.moving-room .bay.active .wall:before,.moving-room .bay.active .surface:after{display:none}
/* Only the work index scrolls within the exhibition; the room fills one viewport. */
body[data-page=work]{height:100svh;overflow:hidden}
/* Multi-print groups share the room's canvas; the invisible surface retains keyboard controls. */
.grouped-prints.projection-ready .surface img{opacity:0}
.white-gallery .grouped-prints .wall:before,.white-gallery .grouped-prints .surface:after{display:none}
.white-gallery .grouped-prints .surface{box-shadow:none}
.white-gallery .bay[data-medium=Objects] .surface:after{display:none}
.white-gallery .bay[data-medium=Objects] .wall:before{display:none}
.white-gallery .bay[data-medium=Objects] .surface{box-shadow:none;filter:drop-shadow(2px 4px 2px #22222221)}
.installation-views{display:flex;gap:20px;flex-wrap:wrap}
.work-controls:has(.installation-views){flex-wrap:wrap}
.work-controls:has(.installation-views) .caption{flex-basis:100%;max-width:100%}
.orbit-room .stage{touch-action:pan-y}
.orbit-room .surface[role=button]{cursor:grab;touch-action:pan-y}
.orbit-room:active .surface[role=button]{cursor:grabbing}
.orbit-room .room-light{position:fixed;inset:0;width:100vw;height:100svh}
.orbit-room.projection-ready .surface img{opacity:0}
.white-gallery .orbit-room .wall:before,.white-gallery .orbit-room .surface:after{display:none}
.white-gallery .orbit-room .surface{box-shadow:none;filter:none}
.orbit-room .surface:focus-visible{outline:1px solid #fff6;outline-offset:7px}

/* Playback stays within the architecture; source video is decoded offscreen. */
.installation-video-source{position:fixed;width:1px;height:1px;left:0;bottom:0;opacity:0;pointer-events:none}
.volume-control{display:inline-flex;align-items:center;gap:8px;font-size:inherit;font-weight:400}
.volume-control input{width:78px;accent-color:currentColor;cursor:pointer;margin:0}
[data-playback-status]{font-size:inherit;opacity:.65}
.installation-documentation-video{position:absolute;inset:0;width:100%;height:100%;object-fit:contain;background:#000;pointer-events:auto}

.surface .installation-documentation-poster{position:absolute;inset:0;width:100%;height:100%;object-fit:contain;opacity:1!important;display:block!important;pointer-events:none;z-index:2;background:#000}
.installation-documentation-video{z-index:3}

/* Keep exhibition controls above the physical monitor foreground. */
.gallery-room .work-controls{z-index:5}

/* Continue the white gallery architecture behind the navigation. */
.white-gallery .gallery-room{overflow:visible;background:transparent}
.white-gallery .gallery-room .room-light{position:fixed;inset:0;width:100vw;height:100svh}

/* Floating lettering remains visible over full-background photographs. */
body.photo-immersive header,body.photo-immersive .work-index,body.photo-immersive .work-controls,body.photo-immersive .mobile-index-toggle{color:#fff;--white:#fff;--quiet:#e3e3df;text-shadow:0 1px 3px #000b}
body.photo-immersive a:hover,body.photo-immersive button:hover{color:#fff}
body.photo-immersive .index-search{border-bottom-color:#ffffff55}
body.photo-immersive .index-search::placeholder{color:#ddd}

.white-gallery .gallery-room[data-view=closer] .stage{overflow:visible}

/* Print groups have individual shadows; their empty wall slots have no frame. */
.white-gallery .grouped-prints .bay.active .surface{box-shadow:none;border:0}
.white-gallery .grouped-prints .bay.active .surface:after,.white-gallery .grouped-prints .bay.active .wall:before{display:none}

.white-gallery .gallery-room[data-architecture=reference-textile-room] .work-controls{--quiet:#222;--white:#111;color:#222}

.white-gallery .orbit-room .work-controls{--quiet:#333;--white:#111;color:#222}
