:root{font-family:Arial,Helvetica,sans-serif;color:#242420;background:#f3f1eb;font-synthesis:none}*{box-sizing:border-box}body{margin:0}body:after{content:"";position:fixed;inset:0;pointer-events:none;opacity:.045;z-index:8;background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 180 180' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Cpath fill='%23000' filter='url(%23n)' opacity='.6' d='M0 0h180v180H0z'/%3E%3C/svg%3E")}a{color:inherit;text-decoration:none}button{font:inherit;color:inherit}header{position:relative;z-index:10;display:flex;align-items:center;justify-content:space-between;padding:34px 3.5vw;min-height:88px;gap:24px}.identity{font-size:16px;letter-spacing:.06em;white-space:nowrap}nav{display:flex;gap:clamp(24px,5.5vw,84px)}nav a{font-size:14px;letter-spacing:.16em;padding:10px 0}a:hover,nav a[aria-current]{text-decoration:underline;text-underline-offset:6px}a:focus-visible,button:focus-visible{outline:2px solid #53544d;outline-offset:6px}#hero{height:calc(100svh - 88px);min-height:520px;position:relative;overflow:hidden}canvas{position:absolute;inset:0;width:100%;height:100%}.target{position:absolute;border-radius:50%;background:none;border:0;cursor:pointer;padding:0;min-width:48px;min-height:48px}.target:focus-visible{outline-offset:7px}.target span{position:absolute;top:calc(100% + 15px);left:50%;transform:translateX(-50%);width:210px;font-size:14px;line-height:1.5;background:#f3f1eb;padding:8px;visibility:hidden}.target:focus-visible span{visibility:visible}#break{position:absolute;border:0;background:none;text-align:left;font-size:14px;letter-spacing:.13em;padding:16px 0;cursor:pointer;touch-action:none;white-space:nowrap}#break span{display:block;font-size:12px;letter-spacing:.03em;margin-top:10px;color:#686861}#label{position:absolute;pointer-events:none;font-size:14px;line-height:1.6;max-width:240px;margin:0;background:#f3f1ebe8;padding:8px 12px;visibility:hidden}#page{padding:48px 7vw 90px;max-width:1600px;margin:auto}h1{font-size:clamp(30px,4vw,58px);font-weight:400;letter-spacing:-.035em;margin:20px 0 50px}p{font-size:16px;line-height:1.7;max-width:680px}.grid{display:grid;grid-template-columns:1fr 1fr;gap:58px 36px}.card img{width:100%;aspect-ratio:16/10;object-fit:cover}.card h2{font-size:18px;font-weight:400;margin:18px 0 8px}.meta{font-size:14px;color:#676861}.index-row{display:grid;grid-template-columns:60px 1fr auto;gap:20px;padding:26px 0;align-items:baseline}.index-row:hover{opacity:.6}.project-image{display:block;width:100%;max-height:75vh;object-fit:contain;object-position:left;margin:32px 0}.back{font-size:14px;display:inline-block;margin-bottom:16px}.project-nav{display:flex;justify-content:space-between;gap:30px;margin-top:45px}button:disabled{cursor:default}[hidden]{display:none!important}@media(max-width:600px){header{padding:22px 22px;flex-wrap:wrap;gap:22px}nav{width:100%;justify-content:space-between;gap:18px}nav a{font-size:12px}.identity{font-size:15px}#hero{height:calc(100svh - 119px);min-height:500px}#page{padding:30px 24px 60px}.grid{grid-template-columns:1fr;gap:36px}.index-row{grid-template-columns:25px 1fr;gap:12px}.index-row .meta{grid-column:2}h1{margin-bottom:32px}#break{font-size:12px}}

/* Flat billiards poster palette, based on the supplied reference. */
:root:not(:has(.ethereal-page,.dare-page,.invisible-page)){background:#086bc4;color:#fffdf5}body:after{display:none}header{height:94px;min-height:94px;padding:26px 3.5vw}#hero{height:calc(100svh - 94px);min-height:490px}a:focus-visible,button:focus-visible{outline-color:#ffda00}#break span,.meta{color:#d7e8fa}#label,.target span{background:#fffdf5;color:#171b22}#label .meta{color:#414b58}.target{touch-action:none}#break{color:#fffdf5}#page{padding-top:52px}h1{font-weight:500}h2{font-weight:400;font-size:20px;margin-top:36px}.intro{font-size:clamp(22px,2.8vw,37px);line-height:1.4;letter-spacing:-.02em}.about-layout{display:grid;grid-template-columns:1.1fr 1fr;gap:10vw}.about-layout h2:first-child{margin-top:0}.about-layout .intro{margin-top:0}.description{font-size:19px;max-width:760px;line-height:1.7}.source-link{text-decoration:underline;text-underline-offset:6px}.card img{background:#095caf}.index-row{grid-template-columns:45px 1fr minmax(140px,30%)}.index-row .meta:last-child{text-align:right}@media(max-width:650px){header{height:120px;min-height:120px;padding:22px}#hero{height:calc(100svh - 120px);min-height:490px}.about-layout{grid-template-columns:1fr;gap:35px}.index-row{grid-template-columns:25px 1fr}.index-row .meta:last-child{text-align:left}.intro a{overflow-wrap:anywhere}#break{font-size:12px;letter-spacing:.05em}.project-nav{font-size:14px}}

#hero.is-transitioning .target,#hero.is-transitioning #break{pointer-events:none}#hero.is-transitioning #label{transition:opacity .2s}

.project-video{margin:16px 0 28px}.project-gallery{margin:32px 0 48px;display:grid;gap:24px}.project-gallery .project-image{margin:0}.fluid-gallery{grid-template-columns:repeat(2,minmax(0,1fr));gap:1rem;align-items:center}.fluid-gallery .project-image{width:100%;height:auto;max-height:none;object-fit:contain}.project-description{margin-top:40px}

.portfolio-section{margin-top:64px;padding:28px 0;border-top:1px solid #ffffff55;border-bottom:1px solid #ffffff55}.portfolio-heading{display:flex;align-items:baseline;gap:20px}.portfolio-heading h2{margin:0}.portfolio-actions{display:flex;flex-wrap:wrap;gap:28px;margin:22px 0}.portfolio-reader summary{cursor:pointer;padding:18px 0;list-style:none;display:flex;justify-content:space-between;font-size:18px}.portfolio-reader summary::-webkit-details-marker{display:none}.portfolio-reader summary:focus-visible{outline:2px solid #ffda00;outline-offset:4px}.portfolio-reader[open] summary span{transform:rotate(45deg)}.pdf-frame iframe{width:100%;height:75vh;min-height:440px;border:0;display:block;background:#fff}.pdf-frame:empty{display:none}@media(max-width:650px){.portfolio-section{margin-top:40px}.pdf-frame iframe{height:65vh;min-height:340px}}

.pdf-frame{max-height:78vh;overflow:auto;background:#075aaa;overscroll-behavior:contain}.pdf-frame figure{margin:0;padding:0 0 18px}.pdf-frame img{display:block;width:100%;height:auto}.pdf-frame figcaption{text-align:center;font-size:12px;padding-top:10px;color:#d7e8fa}

.about-profile{max-width:1200px;margin:auto}.about-profile .about-lead{max-width:1050px;margin-bottom:72px}.about-practices{display:grid;grid-template-columns:1fr 1.15fr;gap:8vw}.about-profile h2{font-size:13px;letter-spacing:.09em;text-transform:uppercase;margin:0 0 28px;color:#d7e8fa}.about-profile h3{font-size:21px;line-height:1.35;font-weight:400;margin:0 0 10px}.about-profile p{font-size:17px;line-height:1.75}.about-profile .intro{font-size:clamp(25px,3.2vw,43px);line-height:1.35}.about-profile .meta{font-size:13px;line-height:1.7}.about-practices p a{text-decoration:underline;text-underline-offset:4px}.about-role{margin-top:36px;padding-top:26px;border-top:1px solid #ffffff35}.about-background{display:grid;grid-template-columns:1fr 1.15fr;gap:8vw;margin-top:72px;padding-top:32px;border-top:1px solid #ffffff55}.about-background p{font-size:16px}.about-profile a{overflow-wrap:anywhere}@media(max-width:700px){.about-practices,.about-background{grid-template-columns:1fr;gap:50px}.about-profile .about-lead{margin-bottom:48px}.about-background{margin-top:50px}}

.contact-page{max-width:1120px;margin:auto}.contact-page>.intro{margin-bottom:56px}.contact-list{border-top:1px solid #ffffff66}.contact-item,.contact-email{border-bottom:1px solid #ffffff45}.contact-row{display:grid;grid-template-columns:1fr 1.4fr 24px;gap:24px;align-items:center;padding:30px 0;cursor:pointer;list-style:none}.contact-row::-webkit-details-marker{display:none}.contact-row>span:first-child{font-size:14px;color:#d7e8fa}.contact-row strong{font-size:clamp(18px,2.4vw,30px);font-weight:400;overflow-wrap:anywhere}.contact-row>span:last-child{text-align:right;font-size:24px}.contact-row:hover{text-decoration:none;opacity:.8}.contact-item[open] .contact-expand{transform:rotate(45deg)}.contact-card{padding:8px 0 32px;text-align:center}.contact-card img{display:block;margin:auto;width:auto;max-width:100%;max-height:620px;border-radius:12px}.contact-card p{margin:18px auto 0;font-size:13px;color:#d7e8fa}.contact-instagram-qr{padding:0 0 24px}.contact-instagram-qr>summary{font-size:13px;cursor:pointer;width:fit-content}.contact-instagram-qr .contact-card{padding-top:24px}@media(max-width:650px){.contact-row{grid-template-columns:1fr 24px;gap:12px;padding:24px 0}.contact-row>span:first-child{grid-column:1}.contact-row strong{grid-column:1;grid-row:2}.contact-row>span:last-child{grid-column:2;grid-row:1 / 3}.contact-card img{max-height:65vh}}

.contact-simple .contact-lines p,.contact-simple .contact-cv{font-size:16px;line-height:1.8;margin:0 0 14px;font-weight:400}.contact-simple .contact-cv{margin-top:36px}.contact-simple .contact-cv a{text-decoration:underline;text-underline-offset:5px}.contact-simple .contact-lines a{overflow-wrap:anywhere}

/* Midnight billiards poster, homepage only. */
body:has(#hero:not([hidden])){background:#101027;color:#fffdf5}body:has(#hero:not([hidden]))>header{background:#101027}body:has(#hero:not([hidden])) .identity{color:#fffdf5}body:has(#hero:not([hidden])) nav a{color:#d6ceff}#hero{background:#101027}#hero #break{color:#fffdf5}#hero #break span{color:#a995ff}#hero #label,#hero .target span{background:#231157;color:#fffdf5}#hero #label .meta{color:#c9baff}

/* Selected work: one floating image-sphere per row. */
body:has(.work-orbits){background:#101027;color:#fffdf5}body:has(.work-orbits)>header{background:#101027}#page:has(.work-orbits){max-width:1600px;padding:28px 5vw 120px}.work-orbits>h1{font-size:14px;letter-spacing:.12em;text-transform:uppercase;margin:10px 0 32px;color:#c9baff}.work-orbit-row{display:flex;align-items:center;justify-content:space-between;gap:6vw;min-height:540px;padding:24px 0;isolation:isolate}.work-orbit-row:nth-child(even){flex-direction:row-reverse}.work-orb{flex:none;width:min(52vw,620px);aspect-ratio:1;border-radius:50%;animation:work-orb-drift 7s ease-in-out infinite alternate;animation-delay:var(--orb-delay);background:var(--orb-color);box-shadow:0 26px 36px -25px #0009}.work-orb-surface{width:100%;height:100%;border-radius:50%;overflow:hidden;position:relative;background:var(--orb-color);transform:rotate(-8deg)}.work-orbit-row:nth-child(even) .work-orb-surface{transform:rotate(9deg)}.work-orb img{width:100%;height:100%;object-fit:cover;display:block;transform:scale(1.12) skew(-5deg,2deg);mask-image:radial-gradient(ellipse at 48% 42%,#000 45%,#000e 66%,#0006 85%,transparent 100%)}.work-orb-surface:after{content:"";position:absolute;inset:0;border-radius:50%;background:radial-gradient(ellipse at 30% 20%,transparent 45%,#10002030 75%,var(--orb-accent) 110%);pointer-events:none}.work-orbit-caption{flex:1;max-width:420px}.work-orbit-caption h2{font-size:clamp(24px,3vw,43px);line-height:1.15;letter-spacing:-.035em;margin:0 0 20px}.work-orbit-caption p{font-size:13px;line-height:1.65;color:#bfb2e5;margin:0}.work-orbit-caption>span{display:block;font-size:28px;margin-top:24px}.work-orbit-row:hover{text-decoration:none}.work-orbit-row:hover .work-orb,.work-orbit-row:focus-visible .work-orb{animation-play-state:paused}.work-orbit-row:hover h2{text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:7px}@keyframes work-orb-drift{from{transform:translateY(-7px) rotate(-1.5deg)}to{transform:translateY(7px) rotate(1.5deg)}}@media(max-width:700px){#page:has(.work-orbits){padding:25px 6vw 80px}.work-orbit-row,.work-orbit-row:nth-child(even){flex-direction:column;align-items:flex-start;gap:28px;padding:25px 0 55px;min-height:0}.work-orbit-row:nth-child(even){align-items:flex-end}.work-orb{width:76vw;max-width:480px}.work-orbit-caption{max-width:76vw}.work-orbit-row:nth-child(even) .work-orbit-caption{text-align:right}.work-orbit-caption h2{font-size:27px}.work-orbit-caption>span{margin-top:14px}}@media(prefers-reduced-motion:reduce){.work-orb{animation:none}}
/* Touching spheres: a staggered contact chain with diffuse ambient light. */
#page:has(.work-orbits){max-width:1400px;padding:32px 4vw 90px;overflow:hidden}.work-orbit-list{position:relative;width:100%}.work-orbit-row,.work-orbit-row:nth-child(even){position:absolute;top:0;left:0;display:block;min-height:0;padding:0;isolation:auto;will-change:transform}.work-orb{width:100%;height:100%;animation:none!important;position:relative;box-shadow:12px 26px 38px -22px #000b;will-change:transform}.work-orb:before{content:"";position:absolute;inset:-8%;border-radius:50%;background:radial-gradient(circle,var(--orb-color),transparent 70%);filter:blur(38px);opacity:.38;z-index:-1;pointer-events:none}.work-orb-surface,.work-orbit-row:nth-child(even) .work-orb-surface{transform:none;box-shadow:inset -24px -30px 48px #08041999}.work-orb img{transform:none;mask-image:none}.work-orb canvas{position:absolute;inset:0;width:100%;height:100%;border-radius:50%}.work-orb-surface:after{background:radial-gradient(ellipse at 30% 24%,#fff7 0%,#ffffff12 19%,transparent 43%),radial-gradient(circle at 42% 36%,transparent 55%,#0b032a55 86%,#08021caa 100%);mix-blend-mode:soft-light}.work-orbit-caption{position:absolute;top:35%;left:107%;width:43%;max-width:none;pointer-events:none}.work-orbit-row:nth-child(even) .work-orbit-caption{left:auto;right:107%;text-align:left}.work-orbit-caption h2{font-size:clamp(19px,2.3vw,32px);line-height:1.18}.work-orbit-caption p{font-size:12px}.work-orbit-caption>span{font-size:22px;margin-top:15px}.work-orbit-row:hover h2{text-decoration:none}.work-orbit-row:focus-visible{outline:1px solid #d1bfff;outline-offset:5px;border-radius:50%}@media(max-width:700px){.work-orb{width:100%;max-width:none}.work-orbit-caption,.work-orbit-row:nth-child(even) .work-orbit-caption{top:38%;left:65%;right:auto;width:60%;text-align:right;z-index:2;text-shadow:0 2px 14px #000}.work-orbit-row:nth-child(even) .work-orbit-caption{left:auto;right:65%;text-align:left}.work-orbit-caption h2{font-size:19px}.work-orbit-caption p{font-size:10px}.work-orbit-caption>span{margin-top:8px}.work-orbit-row{isolation:isolate}}
/* Classic billiard edging and autonomous numbered companion balls. */
.work-orb-surface:before{content:"";position:absolute;inset:0;border-radius:50%;border:3px solid var(--orb-color);box-shadow:inset 0 0 0 1px #ffffff38;z-index:3;pointer-events:none}.work-pool-ball{position:absolute;left:0;top:0;border-radius:50%;background:radial-gradient(circle at 30% 24%,#ffffff8c,transparent 27%),radial-gradient(circle at 37% 32%,transparent 40%,#0009 100%),var(--pool-color);box-shadow:5px 9px 12px -4px #0009,inset 0 0 0 1px #ffffff30;pointer-events:none;z-index:2;will-change:transform}.work-pool-ball.is-striped{background:radial-gradient(circle at 30% 24%,#ffffffb3,transparent 27%),radial-gradient(circle at 37% 32%,transparent 40%,#0009 100%),linear-gradient(22deg,#f8f3df 0 23%,var(--pool-color) 24% 76%,#f8f3df 77%)}.work-pool-ball span{position:absolute;left:50%;top:50%;width:43%;height:43%;display:grid;place-items:center;border-radius:50%;background:#fff9ed;color:#16151b;font:600 clamp(18px,2vw,29px)/1 Arial,sans-serif;box-shadow:inset -2px -2px 5px #ccc6;transform:translate(-50%,-50%)}.work-orbit-caption{z-index:4;text-shadow:0 2px 12px #101027}.work-orbit-row{pointer-events:none}.work-orbit-row .work-orb{pointer-events:auto;cursor:pointer}.work-orbit-row .work-orbit-caption{pointer-events:auto}
.work-orbit-row{z-index:3}
/* Homepage palette sampled from the original works: warm stone, grey green,
   TribeTech lavender and Dream of Hua blue. Keep generous pale negative space. */
body:has(#hero:not([hidden])){background:#e9e7e4;color:#292b36;isolation:isolate}body:has(#hero:not([hidden])):before{content:"";position:fixed;inset:-12%;z-index:-1;pointer-events:none;background:radial-gradient(ellipse at 12% 26%,#7a7e7c88 0%,#7a7e7c00 39%),radial-gradient(ellipse at 79% 15%,#d7ccd0d9 0%,#d7ccd000 38%),radial-gradient(ellipse at 88% 66%,#9e93a3b3 0%,#9e93a300 38%),radial-gradient(ellipse at 18% 94%,#2b3f6170 0%,#2b3f6100 43%),radial-gradient(ellipse at 53% 76%,#b5aca27a 0%,#b5aca200 34%),linear-gradient(130deg,#e9e7e2,#efebed 55%,#d9dfe4);filter:blur(55px)}body:has(#hero:not([hidden]))>header{background:transparent}body:has(#hero:not([hidden])) .identity,body:has(#hero:not([hidden])) nav a{color:#292b36}body:has(#hero:not([hidden])) #hero{background:transparent}#hero #break{color:#30323d}#hero #break span{color:#64636d}#hero #label,#hero .target span{background:#faf9f1ed;color:#292b36;backdrop-filter:blur(12px)}#hero #label .meta{color:#65616e}body:has(#hero:not([hidden])) a:focus-visible,body:has(#hero:not([hidden])) button:focus-visible{outline-color:#5c526d}
/* Living diffusion: saturated artwork-inspired clouds, slow independent drift. */
body:has(#hero:not([hidden])){background:#e8e2ee}body:has(#hero:not([hidden])):before{inset:-22%;background:radial-gradient(ellipse at 15% 26%,#426eefd9 0%,#426eef00 36%),radial-gradient(ellipse at 78% 20%,#b957eadb 0%,#b957ea00 36%),radial-gradient(ellipse at 86% 78%,#ed826ace 0%,#ed826a00 38%),radial-gradient(ellipse at 25% 91%,#38b6afc9 0%,#38b6af00 39%),radial-gradient(ellipse at 49% 47%,#f8d791b5 0%,#f8d79100 30%),#ede4eb;filter:blur(65px);animation:home-color-drift 22s ease-in-out infinite alternate;will-change:transform}body:has(#hero:not([hidden])):after{display:block;content:"";position:fixed;inset:-18%;z-index:-1;pointer-events:none;opacity:.65;background:radial-gradient(ellipse at 64% 32%,#eea4cbba,transparent 33%),radial-gradient(ellipse at 29% 63%,#9694efb3,transparent 35%),radial-gradient(ellipse at 71% 79%,#ffe3aa99,transparent 34%);filter:blur(70px);animation:home-color-counterflow 17s ease-in-out infinite alternate;will-change:transform}@keyframes home-color-drift{0%{transform:translate(-4%,-3%) scale(1.04) rotate(-7deg)}50%{transform:translate(5%,2%) scale(1.12) rotate(2deg)}100%{transform:translate(-1%,6%) scale(1.06) rotate(12deg)}}@keyframes home-color-counterflow{0%{transform:translate(6%,-5%) scale(1.12) rotate(8deg)}100%{transform:translate(-7%,5%) scale(1.02) rotate(-13deg)}}@media(prefers-reduced-motion:reduce){body:has(#hero:not([hidden])):before,body:has(#hero:not([hidden])):after{animation:none}}
/* Grainy liquid field replaces the earlier drifting pastel layers on Home. */
#home-flow{display:none;position:fixed;inset:0;width:100%;height:100%;z-index:-1;pointer-events:none}body.has-home-flow:has(#hero:not([hidden])) #home-flow{display:block}body.has-home-flow:has(#hero:not([hidden])):before,body.has-home-flow:has(#hero:not([hidden])):after{display:none}body.has-home-flow:has(#hero:not([hidden])){background:#2a3e61}body.has-home-flow:has(#hero:not([hidden])) .identity,body.has-home-flow:has(#hero:not([hidden])) nav a{color:#fffdf5;text-shadow:0 1px 5px #152238aa}body.has-home-flow:has(#hero:not([hidden]))>header{background:linear-gradient(#19213955,transparent)}body.has-home-flow #hero #break,body.has-home-flow #hero #break span{color:#fffdf5;text-shadow:0 1px 5px #152238cc}

/* About: black canvas and fluorescent introduction. */
html:has(.about-profile),body:has(.about-profile){background:#000;color:#fffdf5}
body:has(.about-profile)>header{background:transparent!important;background-image:none!important;backdrop-filter:none!important;box-shadow:none;color:#fffdf5}
body:has(.about-profile)>header:before,body:has(.about-profile)>header:after{display:none}
body:has(.about-profile)>header a{color:#fffdf5;text-shadow:none}
.about-profile>h1,.about-profile>.about-lead{color:#eaff27}
.about-profile h2,.about-profile .meta{color:#bcbcb7}
