@font-face{font-family:"NODD Oswald";src:url("../fonts/Oswald-Variable.woff2") format("woff2"),url("../fonts/Oswald-Variable.ttf") format("truetype");font-weight:200 700;font-style:normal;font-display:swap}
:root{--paper:#f6f5f0;--ink:#111110;--muted:#67675f;--font-display:"NODD Oswald","Arial Narrow","Apple SD Gothic Neo","Pretendard","Noto Sans KR","Malgun Gothic",system-ui,sans-serif;--font-text:"Apple SD Gothic Neo","Pretendard","Noto Sans KR","Malgun Gothic",system-ui,sans-serif;--hair:rgba(17,17,16,.22);--ease:cubic-bezier(.22,1,.36,1);--header-x:clamp(20px,2.8vw,42px);--pointer-x:0px;--pointer-y:0px;--pointer-x-reverse:0px;--pointer-y-reverse:0px}
*{box-sizing:border-box}html{background:var(--paper);scroll-behavior:smooth;color-scheme:light}body{margin:0;background:var(--paper);color:var(--ink);font-family:var(--font-display);font-size:16px;line-height:1.5;-webkit-font-smoothing:antialiased}body.is-leaving{opacity:.72;transition:opacity 160ms ease}a,button,input,textarea,select{color:inherit;font:inherit}a{text-decoration:none}button{border:0;background:none;cursor:pointer}button:disabled{cursor:not-allowed}a:focus-visible,button:focus-visible,input:focus-visible,textarea:focus-visible,select:focus-visible{outline:2px solid var(--ink);outline-offset:5px}::selection{background:var(--ink);color:var(--paper)}
.site-header{position:fixed;z-index:100;top:0;right:0;left:0;display:flex;align-items:center;justify-content:space-between;padding:26px var(--header-x);pointer-events:none}.admin-bar .site-header{top:32px}.site-header a{pointer-events:auto}.site-mark{display:inline-flex;gap:7px;align-items:center;font-size:.78rem;font-weight:700;letter-spacing:-.02em}.site-mark i{display:block;width:4px;height:4px;border-radius:50%;background:currentColor;opacity:.4}.site-nav{display:flex;gap:clamp(18px,2.2vw,36px);font-size:.76rem;font-weight:600;letter-spacing:.1em}.site-nav a{position:relative;padding:7px 0}.site-nav a::after{position:absolute;right:0;bottom:2px;left:0;height:1px;background:currentColor;content:"";transform:scaleX(0);transform-origin:right;transition:transform 260ms var(--ease)}.site-nav a:hover::after,.site-nav a:focus-visible::after{transform:scaleX(1);transform-origin:left}.site-footer{display:flex;justify-content:space-between;padding:28px var(--header-x);border-top:1px solid var(--hair);color:var(--muted);font-size:.7rem;font-weight:600;letter-spacing:.11em}.nodd-scene .site-footer{display:none}
.home-shell{min-height:100svh;overflow:hidden}.node-scene{position:relative;min-height:max(100svh,780px);overflow:hidden;isolation:isolate;perspective:1400px;cursor:crosshair}.scene-kicker{position:absolute;z-index:35;top:clamp(100px,13vh,132px);left:50%;margin:0;color:var(--muted);font-size:.68rem;font-weight:650;letter-spacing:.23em;transform:translateX(-50%);transition:opacity 600ms var(--ease)}.scene-wordmark{position:absolute;z-index:30;top:49%;left:50%;display:flex;gap:.19em;align-items:center;width:max-content;white-space:nowrap;font-size:clamp(7rem,15.1vw,15rem);font-weight:700;letter-spacing:-.065em;line-height:.75;pointer-events:none;transform:translate3d(-50%,-50%,170px);transform-origin:center;transition:filter 780ms var(--ease),opacity 780ms var(--ease),transform 780ms var(--ease)}.nodes-layer{position:absolute;z-index:12;inset:80px 0 72px;transform:translate3d(0,0,-140px) scale(.94);filter:blur(12px);opacity:.42;transition:filter 780ms var(--ease),opacity 780ms var(--ease),transform 780ms var(--ease)}.connection-field{position:absolute;z-index:9;inset:0;width:100%;height:100%;overflow:visible;pointer-events:none;transform:translate3d(0,0,-150px) scale(.94);filter:blur(6px);opacity:.32;transition:filter 780ms var(--ease),opacity 780ms var(--ease),transform 780ms var(--ease)}.connection-field line{stroke:var(--ink);stroke-width:.7;vector-effect:non-scaling-stroke}.connection-field circle{fill:var(--paper);stroke:var(--ink);stroke-width:.8;vector-effect:non-scaling-stroke}
.art-node{--embed-scale:.53;position:absolute;z-index:1;display:block;width:286px;color:var(--ink);cursor:pointer;transform-style:preserve-3d;transition:opacity 350ms ease,filter 350ms ease}.art-node:nth-child(1){top:22%;left:clamp(48px,9vw,150px);transform:translate3d(var(--pointer-x-reverse),var(--pointer-y-reverse),10px) rotate(-2.2deg)}.art-node:nth-child(2){right:calc(50% - 145px);bottom:5%;transform:translate3d(var(--pointer-x),var(--pointer-y),55px) rotate(1.1deg)}.art-node:nth-child(3){top:19%;right:clamp(48px,8vw,135px);transform:translate3d(var(--pointer-x),var(--pointer-y-reverse),30px) rotate(2deg)}.art-node__float{position:relative;width:100%;transform:translate3d(0,0,0);animation:nodd-float-a 8.4s ease-in-out infinite alternate}.art-node:nth-child(2) .art-node__float{animation-name:nodd-float-b;animation-duration:9.6s}.art-node:nth-child(3) .art-node__float{animation-name:nodd-float-c;animation-duration:7.3s}.node-embed-viewport{position:relative;width:286px;height:440px;background:rgba(255,255,255,.48);box-shadow:0 18px 42px rgba(0,0,0,.08);transition:box-shadow 280ms ease,transform 280ms var(--ease)}.art-node:hover .node-embed-viewport{box-shadow:0 24px 58px rgba(0,0,0,.12);transform:translateY(-2px)}.node-embed-scale{width:540px;transform:scale(var(--embed-scale));transform-origin:top left}.node-embed-scale .instagram-media{min-width:326px!important;width:540px!important;margin:0!important}.node-embed-scale iframe{width:540px!important;min-width:0!important}.art-node__meta{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-top:12px;font-size:.72rem;font-weight:650;letter-spacing:.055em;opacity:0;transform:translateY(-6px);transition:opacity 360ms ease 360ms,transform 360ms var(--ease) 360ms}.art-node__meta span:first-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.art-node__meta span:last-child{color:var(--muted);font-size:.62rem;letter-spacing:.12em}.node-loading{position:absolute;inset:0;display:grid;place-items:center;background:#ebeae5;color:var(--muted);font-size:.64rem;letter-spacing:.16em}.node-loading::before{position:absolute;top:18px;left:18px;width:7px;height:7px;border-radius:50%;background:var(--ink);content:"";animation:nodd-pulse 1.3s ease infinite}.scene-loading{position:absolute;top:50%;left:50%;display:flex;gap:12px;align-items:center;color:var(--muted);font-size:.68rem;letter-spacing:.16em;transform:translate(-50%,-50%)}.scene-loading span{width:7px;height:7px;border-radius:50%;background:currentColor;animation:nodd-pulse 1.2s ease infinite}.scene-empty{position:absolute;top:64%;left:50%;width:min(460px,80vw);text-align:center;transform:translateX(-50%)}.scene-empty p{margin:0 0 8px;font-size:.76rem;font-weight:650;letter-spacing:.12em}.scene-empty small{color:var(--muted);font-size:.78rem}.scene-empty a{display:inline-block;margin-top:16px;border-bottom:1px solid currentColor;font-size:.7rem;font-weight:700;letter-spacing:.12em}
.node-scene[data-mode="works"] .scene-wordmark{z-index:1;filter:blur(10px);opacity:.07;transform:translate3d(-50%,-48%,-210px) scale(.93)}.node-scene[data-mode="works"] .nodes-layer{filter:none;opacity:1;transform:translate3d(0,0,120px) scale(1)}.node-scene[data-mode="works"] .connection-field{filter:none;opacity:1;transform:translate3d(0,0,85px) scale(1)}.node-scene[data-mode="works"] .art-node__meta{opacity:1;transform:translateY(0)}.node-scene[data-mode="works"] .scene-kicker{opacity:.36}.node-scene[data-mode="transitioning"] .art-node{pointer-events:none}
.scene-controls{position:absolute;z-index:60;right:var(--header-x);bottom:26px;left:var(--header-x);display:grid;grid-template-columns:1fr auto 1fr;align-items:center;pointer-events:none}.scene-controls button{display:inline-flex;gap:11px;align-items:center;min-height:44px;padding:0;pointer-events:auto;font-size:.68rem;font-weight:700;letter-spacing:.14em}.focus-control{justify-self:start}.focus-control i{width:7px;height:7px;border:1px solid currentColor;border-radius:50%;background:currentColor;box-shadow:0 0 0 0 rgba(17,17,16,.12);transition:box-shadow 220ms ease}.focus-control:hover i{box-shadow:0 0 0 6px rgba(17,17,16,.1)}.shuffle-control{justify-self:end;opacity:1;transition:opacity 300ms ease}.shuffle-control:disabled{opacity:0;pointer-events:none}.scene-controls p{margin:0;color:var(--muted);font-size:.64rem;letter-spacing:.15em}.scene-noscript{position:absolute;bottom:80px;left:50%;transform:translateX(-50%)}
@keyframes nodd-float-a{from{transform:translate3d(0,-4px,0)}to{transform:translate3d(0,5px,0)}}@keyframes nodd-float-b{from{transform:translate3d(0,5px,0)}to{transform:translate3d(0,-4px,0)}}@keyframes nodd-float-c{from{transform:translate3d(0,-2px,0)}to{transform:translate3d(0,6px,0)}}@keyframes nodd-pulse{0%,100%{opacity:.25;transform:scale(.72)}50%{opacity:1;transform:scale(1)}}
.editorial-page{position:relative;min-height:100svh;padding:120px var(--header-x) 12vh;overflow:hidden}.editorial-mast{position:relative;display:grid;grid-template-columns:1fr auto;align-content:space-between;min-height:60vh;padding:20px 0 36px;border-bottom:1px solid var(--ink)}.editorial-mast>p,.contact-mast>p{margin:0;color:var(--muted);font-size:.72rem;font-weight:650;letter-spacing:.16em}.editorial-mast h1{grid-column:1/-1;align-self:end;margin:0;font-size:clamp(6rem,15vw,14rem);font-weight:700;letter-spacing:-.075em;line-height:.68}.editorial-mast>span{position:absolute;right:0;bottom:38px;color:var(--muted);font-size:.68rem;letter-spacing:.14em}.editorial-content{display:grid;grid-template-columns:minmax(170px,.65fr) minmax(0,1.2fr) minmax(240px,.8fr);gap:42px 5vw;padding:14vh 0 16vh}.editorial-content>.nodd-lede{grid-column:2/-1;margin:0 0 12vh;font-size:clamp(2.2rem,4.8vw,5.2rem);font-weight:600;letter-spacing:-.055em;line-height:1.02}.editorial-content h2{grid-column:1;margin:0;padding-top:12px;border-top:1px solid var(--ink);font-size:clamp(3rem,6vw,6rem);letter-spacing:-.06em;line-height:.9}.editorial-content h2+ p{grid-column:2;margin:0;font-family:var(--font-text);font-size:1.05rem;line-height:1.8}.editorial-content blockquote{grid-column:2/-1;margin:12vh 0 0;font-size:clamp(2.2rem,5vw,5.6rem);font-weight:600;letter-spacing:-.055em;line-height:1.08}.editorial-orbit{position:absolute;right:-11vw;bottom:3vh;margin:0;color:transparent;font-size:11vw;font-weight:700;letter-spacing:-.07em;line-height:1;-webkit-text-stroke:1px rgba(17,17,16,.12);white-space:nowrap;pointer-events:none}
.contact-page{padding-bottom:14vh}.contact-mast{min-height:54vh;padding:20px 0 42px;border-bottom:1px solid var(--ink)}.contact-mast h1{margin:13vh 0 0;font-size:clamp(4.5rem,11vw,11rem);font-weight:700;letter-spacing:-.07em;line-height:.8}.contact-grid{display:grid;grid-template-columns:minmax(0,1fr) minmax(380px,.8fr);gap:8vw;padding-top:10vh}.contact-copy{max-width:720px}.contact-copy .nodd-lede{margin:0 0 28px;font-size:clamp(2rem,4vw,4.2rem);font-weight:600;letter-spacing:-.045em;line-height:1.05}.contact-copy p{font-family:var(--font-text);font-size:1.05rem;line-height:1.8}.contact-copy h2{margin:58px 0 8px;font-size:.72rem;letter-spacing:.16em}.contact-copy .nodd-note{margin-top:50px;color:var(--muted);font-size:.8rem}.contact-form{display:flex;flex-direction:column;border-top:1px solid var(--ink)}.contact-form label{display:flex;flex-direction:column;gap:12px;padding:22px 0;border-bottom:1px solid var(--hair)}.contact-form label span{font-size:.68rem;font-weight:700;letter-spacing:.14em}.contact-form input,.contact-form textarea{width:100%;padding:0;border:0;background:transparent;border-radius:0;font-family:var(--font-text);font-size:1rem;resize:vertical}.contact-form button{display:flex;align-items:center;justify-content:space-between;min-height:72px;padding:0;border-bottom:1px solid var(--ink);font-size:.76rem;font-weight:700;letter-spacing:.13em}.contact-form button:disabled{color:var(--muted)}.contact-status{margin:18px 0 0;font-family:var(--font-text)}.contact-honeypot{position:absolute!important;left:-9999px!important}.blank-page{min-height:100svh}.default-page,.error-page{min-height:100svh;padding:150px var(--header-x) 80px}.default-page__inner{width:min(860px,100%);margin:auto}.default-page h1,.error-page h1{font-size:clamp(4rem,10vw,10rem);letter-spacing:-.07em;line-height:.85}.error-page p,.error-page a{font-size:.72rem;font-weight:700;letter-spacing:.13em}
.work-page{position:relative;min-height:100svh;overflow:hidden}.work-ghostmark{position:fixed;z-index:0;top:49%;left:50%;color:rgba(17,17,16,.035);font-size:15vw;font-weight:700;letter-spacing:-.065em;line-height:.75;white-space:nowrap;transform:translate(-50%,-50%);pointer-events:none}.work-layout{position:relative;z-index:2;display:grid;grid-template-columns:minmax(180px,.55fr) minmax(350px,1.2fr) minmax(170px,.5fr);grid-template-rows:1fr auto;gap:30px 4vw;min-height:100svh;padding:120px var(--header-x) 28px}.work-meta{align-self:center}.work-meta p{margin:0 0 32px;color:var(--muted);font-size:.68rem;letter-spacing:.15em}.work-meta h1{margin:0 0 12px;font-size:clamp(2rem,4vw,4.8rem);font-weight:650;letter-spacing:-.055em;line-height:.95}.work-meta>a{font-size:.78rem;font-weight:650;letter-spacing:.06em}.work-media{position:relative;display:grid;align-content:center;justify-content:center;min-width:0}.work-embed-shell{width:min(540px,100%);margin:auto}.work-embed-shell .instagram-media{min-width:0!important;width:100%!important;margin:0 auto!important}.work-embed-shell iframe{min-width:0!important;width:100%!important}.embed-wait{margin:12px 0 0;color:var(--muted);font-size:.64rem;letter-spacing:.12em;text-align:center}.work-media.is-loaded .embed-wait{display:none}.artist-rail{align-self:center;padding-left:24px;border-left:1px solid var(--hair)}.artist-rail>span{color:var(--muted);font-size:.64rem;letter-spacing:.16em}.artist-rail nav{display:flex;flex-direction:column;gap:12px;margin-top:36px}.artist-rail a{width:max-content;color:#9b9b94;font-size:.78rem;font-weight:650;transition:color 180ms ease,transform 180ms ease}.artist-rail a:hover,.artist-rail a[aria-current="page"]{color:var(--ink);transform:translateX(5px)}.work-navigation{grid-column:1/-1;display:grid;grid-template-columns:1fr auto auto 1fr;gap:clamp(18px,3vw,44px);align-items:center;padding-top:18px;border-top:1px solid var(--hair);font-size:.66rem;font-weight:700;letter-spacing:.1em}.work-navigation>*:last-child{justify-self:end}.work-navigation span{color:#b0b0a8}
@media(max-width:900px){.admin-bar .site-header{top:46px}.node-scene{min-height:max(100svh,760px)}.art-node{--embed-scale:.42;width:226px}.node-embed-viewport{width:226px;height:360px}.art-node:nth-child(1){left:3vw}.art-node:nth-child(2){right:calc(50% - 113px)}.art-node:nth-child(3){right:3vw}.editorial-content{grid-template-columns:1fr 2fr}.editorial-content>.nodd-lede,.editorial-content blockquote{grid-column:1/-1}.editorial-content h2{grid-column:1}.editorial-content h2+p{grid-column:2}.contact-grid{grid-template-columns:1fr}.work-layout{grid-template-columns:1fr;grid-template-rows:auto auto auto auto;padding-top:100px}.work-meta{display:grid;grid-template-columns:1fr auto;align-items:end}.work-meta p{grid-column:1/-1;margin-bottom:12px}.work-meta h1{margin:0}.work-media{min-height:520px}.artist-rail{padding:22px 0 0;border-top:1px solid var(--hair);border-left:0}.artist-rail>span{display:none}.artist-rail nav{flex-direction:row;gap:18px;width:max-content;margin:0}.work-navigation{grid-column:1;grid-template-columns:1fr 1fr}.work-navigation>*:nth-child(even){justify-self:end}.work-navigation>*:last-child{justify-self:end}}
@media(max-width:720px){:root{--header-x:20px}.site-header{padding-top:18px}.site-nav{gap:13px;font-size:.66rem}.site-mark{font-size:.7rem}.scene-kicker{top:90px}.scene-wordmark{flex-direction:column;gap:0;font-size:27vw;line-height:.68}.scene-wordmark span:last-child{margin-left:.26em}.node-scene{min-height:max(100svh,880px);overflow:hidden}.nodes-layer{inset:70px 0 85px}.art-node{--embed-scale:.34;width:184px}.node-embed-viewport{width:184px;height:292px}.art-node:nth-child(1){top:17%;left:-16px}.art-node:nth-child(2){right:calc(50% - 92px);bottom:8%}.art-node:nth-child(3){top:26%;right:-18px}.art-node__meta{font-size:.64rem}.art-node__meta span:last-child{display:none}.scene-controls{bottom:max(14px,env(safe-area-inset-bottom))}.scene-controls p{display:none}.shuffle-control{max-width:115px;text-align:right}.editorial-page{padding-top:100px}.editorial-mast{min-height:52vh}.editorial-mast h1{font-size:25vw}.editorial-content{display:block;padding-top:90px}.editorial-content>.nodd-lede{margin-bottom:100px}.editorial-content h2{margin:70px 0 24px}.editorial-content h2+p{font-size:1rem}.editorial-content blockquote{margin-top:100px}.contact-mast{min-height:46vh}.contact-mast h1{margin-top:14vh;font-size:17vw}.contact-grid{padding-top:72px}.work-layout{padding-right:20px;padding-left:20px}.work-meta{display:block}.work-meta h1{font-size:2.8rem}.work-meta>a{display:block;margin-top:10px}.work-media{min-height:500px}.work-navigation{gap:18px;font-size:.6rem}.work-navigation>*:nth-child(2){order:3;justify-self:start}.work-navigation>*:nth-child(3){order:4;justify-self:end}.site-footer{padding-right:20px;padding-left:20px}}
@media(max-width:430px){.node-scene{min-height:max(100svh,820px)}.art-node{--embed-scale:.29;width:157px}.node-embed-viewport{width:157px;height:250px}.art-node:nth-child(2){right:calc(50% - 78px)}.scene-controls button{font-size:.62rem}.work-media{min-height:460px}}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}.scene-wordmark,.nodes-layer,.connection-field,.art-node__meta{transition-duration:120ms!important}.art-node__float,.node-loading::before,.scene-loading span{animation:none!important}.art-node{transform:none!important}body.is-leaving{transition:none}}

/* Instagram's script replaces the blockquote with a fixed-width iframe. The
   scale wrapper must be a transformable box; inline spans ignore this scale. */
.node-embed-scale{display:block}

/* 2.0 — connected portfolio field. Instagram is an ingestion source only. */
.constellation-shell{min-height:100svh;overflow:hidden}
.constellation{position:relative;min-height:100svh;height:100svh;overflow:hidden;isolation:isolate;background:var(--paper);cursor:crosshair}
.constellation__intro{position:absolute;z-index:1;top:50%;left:50%;display:flex;flex-direction:column;align-items:center;color:rgba(17,17,16,.055);white-space:nowrap;pointer-events:none;transform:translate(-50%,-50%);transition:filter .9s var(--ease),opacity .9s var(--ease),transform .9s var(--ease)}
.constellation__intro span{margin-bottom:1.1rem;font-size:.7rem;font-weight:650;letter-spacing:.36em}
.constellation__intro strong{font-size:clamp(7rem,18vw,19rem);font-weight:700;letter-spacing:-.075em;line-height:.68}
.constellation__lines,.constellation__clusters,.constellation__nodes{position:absolute;inset:84px 0 68px}
.constellation__lines{z-index:4;width:100%;height:calc(100% - 152px);overflow:visible;pointer-events:none}
.constellation__lines line{stroke:rgba(17,17,16,.29);stroke-width:.65;vector-effect:non-scaling-stroke;transition:opacity .75s ease}
.constellation__lines line[data-kind="between"]{stroke:rgba(17,17,16,.14);stroke-dasharray:2 5}
.constellation__clusters{z-index:12;pointer-events:none}
.constellation__nodes{z-index:10}
.constellation-node{--x:50%;--y:50%;--w:90px;--r:0deg;position:absolute;top:var(--y);left:var(--x);width:var(--w);margin:0;padding:0;border:0;background:transparent;text-align:left;transform:translate(-50%,-50%) rotate(var(--r));transform-origin:center;transition:top .95s var(--ease),left .95s var(--ease),width .95s var(--ease),opacity .65s ease,filter .65s ease,transform .5s var(--ease);will-change:top,left,width,opacity,transform}
.constellation-node::before{position:absolute;z-index:-1;inset:-8px;border:1px solid transparent;content:"";transition:border-color .25s ease}
.constellation-node img{display:block;width:100%;aspect-ratio:var(--ratio);border:1px solid rgba(17,17,16,.12);background:#e7e6e0;box-shadow:0 9px 24px rgba(17,17,16,.09);object-fit:cover;filter:saturate(.91) contrast(1.02);animation:nodd-node-breathe 7s ease-in-out infinite alternate;transition:box-shadow .3s ease,filter .3s ease,transform .35s var(--ease)}
.constellation-node:nth-child(3n+1) img{animation-duration:8.3s;animation-delay:-2.2s}.constellation-node:nth-child(3n+2) img{animation-duration:6.4s;animation-delay:-4.1s}
.constellation-node:hover,.constellation-node:focus-visible{z-index:50;transform:translate(-50%,-50%) rotate(0) scale(1.09)}
.constellation-node:hover img,.constellation-node:focus-visible img{box-shadow:0 19px 48px rgba(17,17,16,.17);filter:saturate(1) contrast(1.04)}
.constellation-node:focus-visible{outline:0}.constellation-node:focus-visible::before{border-color:var(--ink)}
.constellation-node>span{position:absolute;top:calc(100% + 8px);left:0;display:flex;flex-direction:column;width:max-content;max-width:190px;opacity:0;pointer-events:none;transform:translateY(-4px);transition:opacity .22s ease,transform .25s var(--ease)}
.constellation-node>span b{overflow:hidden;max-width:190px;font-size:.6rem;font-weight:650;letter-spacing:.08em;text-overflow:ellipsis;white-space:nowrap}.constellation-node>span small{margin-top:2px;color:var(--muted);font-size:.58rem;font-weight:650;letter-spacing:.06em}
.constellation-node:hover>span,.constellation-node:focus-visible>span{opacity:1;transform:translateY(0)}
.constellation-cluster-label{--x:50%;--y:50%;position:absolute;top:var(--y);left:var(--x);display:flex;gap:7px;align-items:center;width:max-content;color:rgba(17,17,16,.58);font-size:.61rem;font-weight:650;letter-spacing:.065em;pointer-events:auto;transform:translate(-50%,15px);transition:color .25s ease,opacity .55s ease,transform .75s var(--ease)}
.constellation-cluster-label::before{width:4px;height:4px;border-radius:50%;background:currentColor;content:""}.constellation-cluster-label:hover,.constellation-cluster-label:focus-visible{color:var(--ink)}
.constellation__artist{position:absolute;z-index:40;top:42%;left:var(--header-x);display:flex;flex-direction:column;align-items:flex-start;opacity:0;pointer-events:none;transform:translateY(18px);transition:opacity .5s ease .15s,transform .65s var(--ease) .15s}
.constellation__artist>span{margin-bottom:14px;color:var(--muted);font-size:.62rem;font-weight:650;letter-spacing:.16em}.constellation__artist a{font-size:clamp(2.5rem,5vw,5.8rem);font-weight:650;letter-spacing:-.055em;line-height:.85}.constellation__artist a::after{display:block;width:0;height:1px;margin-top:9px;background:currentColor;content:"";transition:width .35s var(--ease)}.constellation__artist a:hover::after{width:100%}.constellation__artist p{margin:18px 0 0;color:var(--muted);font-size:.62rem;font-weight:650;letter-spacing:.13em}
.constellation__controls{position:absolute;z-index:70;right:var(--header-x);bottom:18px;left:var(--header-x);display:grid;grid-template-columns:1fr auto 1fr;align-items:center;pointer-events:none}.constellation__controls button{display:flex;gap:10px;align-items:center;min-height:42px;padding:0;pointer-events:auto;font-size:.66rem;font-weight:700;letter-spacing:.13em}.constellation__controls button:last-child{justify-self:end}.constellation__controls button:disabled{opacity:.22;pointer-events:none}.constellation__controls p{margin:0;color:var(--muted);font-size:.6rem;font-weight:650;letter-spacing:.14em}
.constellation__loading,.constellation__empty{position:absolute;top:50%;left:50%;display:flex;flex-direction:column;gap:12px;align-items:center;color:var(--muted);font-size:.64rem;letter-spacing:.16em;text-align:center;transform:translate(-50%,-50%)}.constellation__loading i{width:6px;height:6px;border-radius:50%;background:currentColor;animation:nodd-pulse 1.1s ease infinite}.constellation__empty strong{color:var(--ink);font-size:.8rem}.constellation__empty span{font-family:var(--font-text);letter-spacing:0}.constellation__noscript{position:absolute;z-index:80;right:20px;bottom:70px;left:20px;text-align:center}
.constellation[data-mode="artist"] .constellation__intro{filter:blur(12px);opacity:.25;transform:translate(-50%,-50%) scale(.92)}
.constellation[data-mode="artist"] .constellation__artist{opacity:1;pointer-events:auto;transform:translateY(0)}
.constellation[data-mode="artist"] .constellation-cluster-label{opacity:0;pointer-events:none}.constellation[data-mode="artist"] .constellation-cluster-label.is-active{opacity:0}
.constellation-node.is-distant{opacity:.025;filter:blur(5px);pointer-events:none;transform:translate(-50%,-50%) scale(.55)}
.constellation-node.is-related{z-index:22}.constellation-node.is-related>span{opacity:1;transform:translateY(0)}.constellation-node.is-selected::before{border-color:var(--ink)}
.constellation[data-mode="artist"] .constellation__lines line{stroke:rgba(17,17,16,.24)}
@keyframes nodd-node-breathe{from{transform:translate3d(0,-2px,0)}to{transform:translate3d(0,3px,0)}}

.artist-page,.artist-index{min-height:100svh;padding:118px var(--header-x) 12vh}
.artist-hero{display:grid;grid-template-columns:1.15fr .85fr;grid-template-rows:auto 1fr auto;gap:36px 8vw;min-height:66vh;padding:18px 0 46px;border-bottom:1px solid var(--ink)}
.artist-hero>p{grid-column:1/-1;margin:0;color:var(--muted);font-size:.66rem;font-weight:650;letter-spacing:.17em}.artist-hero h1{align-self:center;margin:0;font-size:clamp(4rem,10vw,11.5rem);font-weight:650;letter-spacing:-.075em;line-height:.75;overflow-wrap:anywhere}.artist-hero__bio{align-self:center;max-width:570px}.artist-hero__bio p{margin:0 0 24px;font-family:var(--font-text);font-size:1rem;line-height:1.75}.artist-hero__bio p[lang="en"]{color:var(--muted);font-family:inherit;font-size:.8rem;letter-spacing:.02em;line-height:1.6}.artist-hero>a{grid-column:1/-1;width:max-content;font-size:.65rem;font-weight:700;letter-spacing:.13em}
.artist-works-grid{display:grid;grid-template-columns:repeat(12,1fr);gap:clamp(28px,5vw,82px) 2.2vw;padding-top:10vh}.artist-work{grid-column:span 4;display:grid;grid-template-columns:auto 1fr;gap:10px 16px;align-items:end}.artist-work:nth-child(5n+2),.artist-work:nth-child(5n+4){grid-column:span 3;margin-top:10vh}.artist-work:nth-child(5n+3){grid-column:span 5}.artist-work>span{align-self:start;color:var(--muted);font-size:.6rem;letter-spacing:.12em}.artist-work img,.artist-work>i{grid-column:1/-1;display:block;width:100%;aspect-ratio:1;background:#e8e7e1;object-fit:cover;transition:filter .3s ease,transform .45s var(--ease)}.artist-work strong{overflow:hidden;font-size:.68rem;font-weight:650;letter-spacing:.06em;text-overflow:ellipsis;white-space:nowrap}.artist-work:hover img{filter:saturate(.7);transform:scale(.985)}
.artist-index__mast{display:grid;grid-template-columns:1fr 1fr;align-items:end;min-height:54vh;padding:18px 0 44px;border-bottom:1px solid var(--ink)}.artist-index__mast>p{grid-column:1/-1;align-self:start;margin:0;color:var(--muted);font-size:.66rem;font-weight:650;letter-spacing:.17em}.artist-index__mast h1{margin:0;font-size:clamp(5rem,13vw,14rem);font-weight:700;letter-spacing:-.075em;line-height:.68}.artist-index__mast>span{justify-self:end;margin-bottom:5px;color:var(--muted);font-size:.72rem;letter-spacing:.06em;line-height:1.65;text-align:right}.artist-index__grid{display:grid;grid-template-columns:repeat(3,1fr);gap:1px;margin-top:10vh;background:var(--hair);border:1px solid var(--hair)}.artist-index__card{position:relative;display:grid;grid-template-columns:auto 1fr auto;gap:16px;align-items:end;min-height:42vw;padding:18px;background:var(--paper)}.artist-index__card>span{position:absolute;top:18px;left:18px;z-index:2;font-size:.6rem;letter-spacing:.12em}.artist-index__card img,.artist-index__card>i{position:absolute;inset:0;width:100%;height:100%;background:#e6e5df;object-fit:cover;opacity:.12;filter:grayscale(1);transition:opacity .45s ease,filter .45s ease}.artist-index__card strong,.artist-index__card small{position:relative;z-index:2}.artist-index__card strong{font-size:clamp(1.2rem,2.3vw,2.8rem);font-weight:650;letter-spacing:-.04em;overflow-wrap:anywhere}.artist-index__card small{justify-self:end;font-size:.58rem;font-weight:650;letter-spacing:.12em}.artist-index__card:hover img{opacity:.88;filter:grayscale(0)}

.work-media__image{display:block;max-width:100%;max-height:72vh;width:auto;height:auto;margin:auto;box-shadow:0 24px 60px rgba(17,17,16,.1);object-fit:contain}.work-media__pending{display:flex;flex-direction:column;gap:10px;align-items:center;justify-content:center;width:min(540px,100%);aspect-ratio:1;background:#ebeae5;color:var(--muted);text-align:center}.work-media__pending strong{color:var(--ink);font-size:.8rem;letter-spacing:.13em}.work-media__pending span{font-family:var(--font-text);font-size:.8rem}.work-meta>a span{display:block;margin-top:6px;color:var(--muted);font-size:.55rem;letter-spacing:.12em}

@media(max-width:900px){.constellation__artist{top:18%;left:20px}.constellation__artist a{font-size:3.2rem}.artist-hero{grid-template-columns:1fr;grid-template-rows:auto auto auto auto}.artist-hero>p,.artist-hero>a{grid-column:1}.artist-hero h1{align-self:end}.artist-hero__bio{align-self:start}.artist-works-grid{grid-template-columns:repeat(6,1fr)}.artist-work,.artist-work:nth-child(5n+2),.artist-work:nth-child(5n+3),.artist-work:nth-child(5n+4){grid-column:span 3;margin-top:0}.artist-index__grid{grid-template-columns:repeat(2,1fr)}.artist-index__card{min-height:62vw}}
@media(max-width:720px){.constellation{min-height:100svh;height:100svh}.constellation__lines,.constellation__clusters,.constellation__nodes{inset:72px 0 66px}.constellation__lines{height:calc(100% - 138px)}.constellation__intro strong{font-size:28vw;line-height:.72;white-space:normal;text-align:center}.constellation-node{width:min(var(--w),18vw)}.constellation-node>span{display:none}.constellation-cluster-label{font-size:.52rem}.constellation[data-mode="artist"] .constellation-node.is-related{width:min(var(--w),38vw)}.constellation__artist{top:13%}.constellation__artist a{font-size:2.45rem}.constellation__controls p{display:none}.constellation__controls{grid-template-columns:1fr 1fr}.artist-page,.artist-index{padding-top:94px}.artist-hero{min-height:64vh;gap:28px}.artist-hero h1{font-size:17vw}.artist-works-grid{display:grid;grid-template-columns:1fr 1fr;gap:52px 14px}.artist-work,.artist-work:nth-child(5n+2),.artist-work:nth-child(5n+3),.artist-work:nth-child(5n+4){grid-column:auto}.artist-index__mast{grid-template-columns:1fr;min-height:48vh}.artist-index__mast h1{font-size:22vw}.artist-index__mast>span{display:none}.artist-index__grid{grid-template-columns:1fr}.artist-index__card{min-height:112vw}.work-media__image{max-height:62vh}}
@media(prefers-reduced-motion:reduce){.constellation-node,.constellation__intro,.constellation__artist,.constellation-cluster-label{transition-duration:.12s!important}.constellation-node img{animation:none!important}}

/* 2.2 — one uninterrupted, high-density graph. */
.constellation{--pan-x:0px;--pan-y:0px;background-color:#f6f5f0;background-image:radial-gradient(rgba(17,17,16,.11) .55px,transparent .55px);background-size:23px 23px}
.constellation::after{position:absolute;z-index:0;inset:0;background:radial-gradient(circle at 50% 48%,rgba(246,245,240,.18),rgba(246,245,240,.72) 76%,var(--paper) 100%);content:"";pointer-events:none}
.constellation__intro{z-index:2;color:rgba(17,17,16,.034)}
.constellation__intro span{margin-bottom:.7rem;font-size:.57rem;letter-spacing:.42em}
.constellation__intro strong{font-size:clamp(5rem,13vw,13rem)}
.constellation__lines,.constellation__nodes{inset:76px 1.5vw 62px;transition:transform .8s var(--ease);transform:translate3d(var(--pan-x),var(--pan-y),0)}
.constellation__lines{z-index:5;width:97vw;height:calc(100% - 138px)}
.constellation__lines line{stroke:rgba(17,17,16,.34);stroke-width:.55;stroke-linecap:round}
.constellation__lines line[data-kind="mesh"]{stroke:rgba(17,17,16,.15);stroke-width:.45}
.constellation__nodes{z-index:8}
.field-node{z-index:8}
.field-node img{border-color:rgba(17,17,16,.18);box-shadow:0 5px 15px rgba(17,17,16,.11);animation-delay:var(--delay)}
.field-node::after{position:absolute;top:50%;left:50%;width:3px;height:3px;border:1px solid rgba(17,17,16,.46);border-radius:50%;content:"";pointer-events:none;transform:translate(-50%,-50%) scale(0);transition:transform .28s var(--ease)}
.field-node:hover::after,.field-node:focus-visible::after{transform:translate(-50%,-50%) scale(1)}
.constellation[data-mode="artist"]{background-size:28px 28px}
.constellation[data-mode="artist"] .constellation__intro{opacity:.5;filter:blur(8px);transform:translate(-50%,-50%) scale(.84)}
.constellation[data-mode="artist"] .constellation__nodes,.constellation[data-mode="artist"] .constellation__lines{transform:none}
.constellation-node.is-distant{opacity:.065;filter:grayscale(1) blur(1px);transform:translate(-50%,-50%) scale(.62)}
.constellation-node.is-related{z-index:24}
.constellation-node.is-related img{box-shadow:0 15px 42px rgba(17,17,16,.14)}
.constellation-node.is-selected{z-index:36}
.constellation-node.is-selected img{box-shadow:0 32px 90px rgba(17,17,16,.2);filter:saturate(1) contrast(1.03)}
.constellation-node.is-selected::before{inset:-11px;border-color:rgba(17,17,16,.65)}
.constellation-node.is-selected::after{transform:translate(-50%,-50%) scale(1)}
.constellation__artist{top:50%;left:3.2vw;max-width:24vw;transform:translateY(-30%)}
.constellation__artist>span{margin-bottom:18px}.constellation__artist a{display:flex;gap:11px;align-items:flex-start;font-size:clamp(2.2rem,4.2vw,5rem);overflow-wrap:anywhere}.constellation__artist a i{font-size:.75rem;font-style:normal;letter-spacing:0}.constellation__artist p{line-height:1.7}.constellation__artist small{margin-top:12px;color:rgba(17,17,16,.4);font-size:.53rem;font-weight:650;letter-spacing:.13em;line-height:1.5}
.constellation[data-mode="artist"] .constellation__artist{transform:translateY(-50%)}
.constellation__controls{bottom:13px}

@media(max-width:900px){.constellation__artist{top:17%;left:20px;max-width:62vw}.constellation[data-mode="artist"] .constellation__artist{transform:none}.constellation__artist small{display:none}}
@media(max-width:720px){.constellation{min-height:100svh;height:100svh;background-size:19px 19px}.constellation__lines,.constellation__nodes{inset:68px 0 58px}.constellation__lines{width:100%;height:calc(100% - 126px)}.constellation__intro strong{font-size:23vw}.constellation-node{width:min(var(--w),14vw)}.constellation[data-mode="artist"] .constellation-node.is-related{width:min(var(--w),31vw)}.constellation[data-mode="artist"] .constellation-node.is-selected{width:min(var(--w),58vw)}.constellation__artist{top:11%;max-width:75vw}.constellation__artist a{font-size:2rem}.constellation__artist>span{margin-bottom:8px}}

/* 2.3 — condensed orbital field inspired by contemporary radial galleries. */
.constellation::before{position:absolute;z-index:3;top:49%;left:50%;width:min(72vmin,740px);aspect-ratio:1;border:1px solid rgba(17,17,16,.085);border-radius:50%;background:radial-gradient(circle,rgba(246,245,240,.05) 0 46%,rgba(17,17,16,.018) 46.2% 46.5%,transparent 46.8%);content:"";pointer-events:none;transform:translate(-50%,-50%);transition:width .9s var(--ease),opacity .6s ease,filter .8s var(--ease)}
.constellation::after{background:radial-gradient(circle at 50% 49%,rgba(246,245,240,.05),rgba(246,245,240,.2) 36%,rgba(246,245,240,.72) 73%,var(--paper) 100%)}
.constellation__intro strong{font-size:clamp(4.8rem,11vw,11rem)}
.constellation__intro span{letter-spacing:.48em}
.constellation__lines line{stroke:rgba(17,17,16,.4);stroke-width:.52}
.constellation__lines line[data-kind="mesh"]{stroke:rgba(17,17,16,.2);stroke-width:.4}
.field-node img{box-shadow:0 4px 13px rgba(17,17,16,.13)}
.field-node:hover,.field-node:focus-visible{transform:translate(-50%,-50%) rotate(0) scale(1.28)}
.constellation[data-mode="artist"]::before{width:min(82vmin,820px);opacity:.56;filter:blur(1px)}
.constellation[data-mode="artist"] .constellation__intro{opacity:.34;transform:translate(-50%,-50%) scale(.7)}
.constellation[data-mode="artist"] .constellation-node.is-related:not(.is-selected) img{box-shadow:0 12px 32px rgba(17,17,16,.14)}
.constellation[data-mode="artist"] .constellation-node.is-selected>span{top:calc(100% + 13px);left:50%;align-items:center;max-width:260px;transform:translate(-50%,0)}
.constellation[data-mode="artist"] .constellation-node.is-selected>span b{max-width:260px;font-size:.67rem}.constellation[data-mode="artist"] .constellation-node.is-selected>span small{font-size:.61rem}
@media(max-width:720px){.constellation::before{width:82vmin}.constellation[data-mode="artist"]::before{width:96vmin}.constellation__intro strong{font-size:19vw}.constellation-node{width:min(var(--w),12vw)}.constellation[data-mode="artist"] .constellation-node.is-related{width:min(var(--w),25vw)}.constellation[data-mode="artist"] .constellation-node.is-selected{width:min(var(--w),54vw)}}

/* 2.4 — identity-first, zoomable three-dimensional node sphere. */
.constellation{touch-action:none}
.constellation:focus{outline:0}
.constellation::before{width:min(76vmin,760px);border:0;background:radial-gradient(circle at 37% 31%,rgba(255,255,255,.54),transparent 28%),radial-gradient(circle at 50% 49%,transparent 0 56%,rgba(17,17,16,.035) 57%,transparent 59%),radial-gradient(circle at 58% 62%,rgba(17,17,16,.035),transparent 68%);box-shadow:inset -42px -34px 90px rgba(17,17,16,.025)}
.field-node{opacity:var(--depth-opacity,1)}
.constellation:not([data-mode="artist"]) .constellation-node{transition:top .12s linear,left .12s linear,width .12s linear,opacity .28s ease,filter .4s ease,transform .32s var(--ease)}
.constellation[data-mode="identity"]{cursor:pointer}
.constellation[data-mode="identity"] .constellation__intro{z-index:34;color:var(--ink);filter:none;opacity:1;transform:translate(-50%,-50%) scale(1)}
.constellation[data-mode="identity"] .constellation__intro span{color:rgba(17,17,16,.62)}
.constellation[data-mode="identity"] .constellation__intro strong{font-size:clamp(6.8rem,15vw,15rem);text-shadow:0 1px 0 rgba(246,245,240,.5)}
.constellation[data-mode="identity"] .constellation__nodes{filter:blur(10px) saturate(.72);opacity:.25;pointer-events:none;transform:scale(.82)}
.constellation[data-mode="identity"] .constellation__lines{filter:blur(5px);opacity:.2;transform:scale(.82)}
.constellation[data-mode="identity"]::before{opacity:.22;filter:blur(8px);transform:translate(-50%,-50%) scale(.82)}
.constellation[data-mode="identity"] .constellation__controls p{color:rgba(17,17,16,.54)}
.constellation[data-mode="identity"] .constellation__controls button:first-child{opacity:0}
.constellation[data-mode="overview"] .constellation__intro{z-index:2;color:rgba(17,17,16,.035);filter:blur(5px);opacity:.72;transform:translate(-50%,-50%) scale(.78)}
.constellation[data-mode="overview"] .constellation__nodes,.constellation[data-mode="overview"] .constellation__lines{filter:none;opacity:1;transform:none}
.constellation[data-mode="overview"]::before{opacity:.7;filter:none;transform:translate(-50%,-50%) scale(1)}
.constellation-node.is-distant{opacity:.05!important}
.constellation-node>span small{display:none!important}
@media(max-width:720px){.constellation[data-mode="identity"] .constellation__intro strong{font-size:24vw}.constellation[data-mode="identity"] .constellation__nodes,.constellation[data-mode="identity"] .constellation__lines{transform:scale(.72)}.constellation::before{width:84vmin}.constellation:not([data-mode="artist"]) .constellation-node{width:min(var(--w),15vw)}}
@media(prefers-reduced-motion:reduce){.constellation:not([data-mode="artist"]) .constellation-node{transition-duration:.12s!important}}

/* 2.5 — orbit / field controls and tactile globe interaction. */
.constellation__modes{position:absolute;z-index:80;top:88px;right:var(--header-x);display:flex;gap:3px;padding:3px;border:1px solid rgba(17,17,16,.12);border-radius:999px;background:rgba(246,245,240,.7);backdrop-filter:blur(12px)}
.constellation__modes button{display:flex;gap:7px;align-items:center;min-height:30px;padding:0 10px;border-radius:999px;color:rgba(17,17,16,.42);font-size:.53rem;letter-spacing:.12em;transition:background .25s ease,color .25s ease,transform .25s var(--ease)}
.constellation__modes button span{font-size:.8rem;line-height:1}.constellation__modes button b{font-weight:700}.constellation__modes button[aria-pressed="true"]{background:var(--ink);color:var(--paper)}.constellation__modes button:hover{transform:translateY(-1px)}
.constellation__zoom{position:absolute;z-index:300;bottom:24px;left:var(--header-x);display:flex;align-items:center;pointer-events:none}.constellation__zoom i{display:block;width:72px;height:2px;overflow:hidden;background:rgba(17,17,16,.16);border-radius:1px}.constellation__zoom i b{display:block;width:100%;height:100%;background:var(--ink);transform:scaleX(.18);transform-origin:left center;transition:transform .18s ease}.constellation__zoom .is-sr{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}
.constellation[data-mode="expanded"]{cursor:default}.constellation[data-mode="expanded"] .constellation__intro{opacity:.1;filter:blur(8px);transform:translate(-50%,-50%) scale(.72)}.constellation[data-mode="expanded"] .constellation__nodes,.constellation[data-mode="expanded"] .constellation__lines{filter:none;opacity:1;transform:none}.constellation[data-mode="expanded"]::before{opacity:.16;transform:translate(-50%,-50%) scale(1.2)}.constellation.is-dragging{cursor:grabbing}.constellation.is-converging .constellation__nodes{animation:nodd-field-converge 1.35s var(--ease) both}.constellation.is-converging .constellation__lines{animation:nodd-lines-converge 1.35s var(--ease) both}
@keyframes nodd-field-converge{0%{opacity:.2;transform:scale(1.3)}100%{opacity:1;transform:scale(1)}}@keyframes nodd-lines-converge{0%{opacity:0;transform:scale(1.24)}100%{opacity:1;transform:scale(1)}}
.nodd-scene .site-footer{position:fixed;z-index:90;right:var(--header-x);bottom:12px;left:var(--header-x);display:flex;justify-content:space-between;pointer-events:none}.nodd-scene .site-footer span{font-size:.52rem;letter-spacing:.13em}
@media(max-width:720px){.constellation__modes{top:72px;right:18px}.constellation__modes button{min-height:28px;padding:0 8px}.constellation__modes button b{display:none}.constellation__zoom{bottom:21px;left:18px}.constellation__zoom i{width:52px}.nodd-scene .site-footer{right:18px;bottom:9px;left:18px}.nodd-scene .site-footer span{font-size:.46rem}}
@media(prefers-reduced-motion:reduce){.constellation.is-converging .constellation__nodes,.constellation.is-converging .constellation__lines{animation:none}}

/* 2.6 — clean field chrome and native-drag-free globe controls. */
.constellation::before{display:none!important}
.constellation[data-mode="overview"] .constellation__intro{z-index:2;color:rgba(17,17,16,.1);opacity:.42;filter:blur(4px);transform:translate(-50%,-50%) scale(1)}
.constellation[data-mode="expanded"] .constellation__intro{z-index:2;color:rgba(17,17,16,.07);opacity:.24;filter:blur(5px);transform:translate(-50%,-50%) scale(1)}
.constellation[data-mode="overview"] .constellation__intro strong,.constellation[data-mode="expanded"] .constellation__intro strong{display:block;width:90vw;font-size:clamp(5.4rem,18vw,19rem);letter-spacing:-.09em;line-height:.7;text-align:center;white-space:nowrap}
.constellation-node,.constellation-node img{user-select:none;-webkit-user-select:none;-webkit-user-drag:none}.constellation-node{cursor:pointer}.constellation.is-dragging .constellation-node{cursor:grabbing}
.constellation__modes{top:auto;right:var(--header-x);bottom:24px}.constellation__controls{right:var(--header-x);bottom:24px;left:var(--header-x);display:grid;grid-template-columns:1fr auto 1fr;align-items:center;border-top:1px solid rgba(17,17,16,.22);padding-top:12px}.constellation__controls button{min-height:25px}.constellation__controls button:first-child{justify-self:start}.constellation__controls .constellation__reconnect{display:none}.constellation__copyright{grid-column:2;margin:0;color:var(--ink);font-size:.52rem;font-weight:650;letter-spacing:.13em;white-space:nowrap}.constellation__count{display:none!important}.constellation__zoom{bottom:66px}.constellation__modes button{min-height:25px}.nodd-scene .site-footer{display:none!important}
@media(max-width:720px){.constellation[data-mode="overview"] .constellation__intro strong,.constellation[data-mode="expanded"] .constellation__intro strong{width:90vw;font-size:clamp(3.4rem,19vw,9rem)}.constellation__controls{right:18px;bottom:22px;left:18px;padding-top:9px}.constellation__modes{right:18px;bottom:59px}.constellation__zoom{bottom:58px;left:18px}}

/* 2.7 — restrained motion, persistent graph lines, and final chrome alignment. */
.constellation__intro,.constellation__intro *{user-select:none;-webkit-user-select:none;-webkit-user-drag:none}
.constellation[data-mode="identity"] .constellation__nodes{transform-origin:50% 50%;animation:nodd-identity-shrink 1.9s cubic-bezier(.22,.74,.24,1) forwards}.constellation[data-mode="identity"] .constellation__lines{transform-origin:50% 50%;animation:nodd-identity-lines 1.9s cubic-bezier(.22,.74,.24,1) forwards;filter:blur(2px)}
@keyframes nodd-identity-shrink{0%{transform:scale(1.5)}100%{transform:scale(1)}}@keyframes nodd-identity-lines{0%{transform:scale(1.5);opacity:.16}100%{transform:scale(1);opacity:.38}}
.constellation[data-mode="overview"] .constellation__intro strong,.constellation[data-mode="expanded"] .constellation__intro strong,.constellation[data-mode="artist"] .constellation__intro strong{width:80vw;font-size:clamp(5rem,16vw,17rem)}
.constellation[data-mode="artist"] .constellation__intro{z-index:2;color:rgba(17,17,16,.08);opacity:.4;filter:blur(5px);transform:translate(-50%,-50%) scale(1)}
.constellation[data-mode="overview"] .constellation__lines,.constellation[data-mode="expanded"] .constellation__lines,.constellation[data-mode="artist"] .constellation__lines{visibility:visible;opacity:1!important}
.constellation__controls{border-top:0;padding-top:0}.constellation__zoom{bottom:24px}.constellation__copyright{align-self:center}.constellation__modes{align-self:center}
.site-mark{gap:7px}.site-mark i{display:none}
@media(max-width:720px){.constellation[data-mode="overview"] .constellation__intro strong,.constellation[data-mode="expanded"] .constellation__intro strong,.constellation[data-mode="artist"] .constellation__intro strong{width:80vw;font-size:clamp(3.2rem,17vw,8rem)}.constellation__controls{bottom:22px;padding-top:0}.constellation__zoom{bottom:22px}.constellation__modes{bottom:22px}}
@media(prefers-reduced-motion:reduce){.constellation[data-mode="identity"] .constellation__nodes,.constellation[data-mode="identity"] .constellation__lines{animation:none}}
.constellation[data-mode="overview"] .constellation-node img{transform:scale(var(--thumb-scale,1));transform-origin:center}.constellation[data-mode="overview"] .constellation-node:hover img,.constellation[data-mode="overview"] .constellation-node:focus-visible img{transform:none}
.constellation[data-mode="identity"] .constellation__nodes,.constellation[data-mode="identity"] .constellation__lines{animation:none!important;transform:none!important}
.constellation[data-mode="overview"] .constellation-node{transform:translate(-50%,-50%) rotate(var(--r)) scale(var(--node-scale,1));transform-origin:center;transition:top .12s linear,left .12s linear,width .12s linear,opacity .28s ease,filter .4s ease}.constellation[data-mode="overview"] .constellation-node img{transform:none}.constellation[data-mode="overview"] .constellation-node:hover,.constellation[data-mode="overview"] .constellation-node:focus-visible{transform:translate(-50%,-50%) rotate(var(--r)) scale(var(--node-scale,1))}

/* 2.8 — stable zoomed rotation rendering. The sphere is already eased in
   JavaScript; independent image/opacity transitions and breathe animations
   otherwise interpolate against every frame and produce visible flicker. */
.constellation[data-mode="overview"] .constellation-node,
.constellation[data-mode="expanded"] .constellation-node{
  transition:none!important;
  backface-visibility:hidden;
  transform-style:preserve-3d;
}
.constellation[data-mode="overview"] .constellation-node img,
.constellation[data-mode="expanded"] .constellation-node img{
  animation:none!important;
  backface-visibility:hidden;
  transform:translateZ(0);
  transition:none!important;
}
.constellation[data-mode="overview"] .constellation__lines line,
.constellation[data-mode="expanded"] .constellation__lines line{
  transition:none!important;
}

/* Keep the chrome anchored to the viewport while the sphere grows. The
   artwork layer may extend beyond the field at 200% zoom, but navigation,
   ratio gauge and copyright must remain visible at the bottom edge. */
.constellation__controls,
.constellation__zoom,
.constellation__modes{
  position:fixed!important;
}
/* GRID mode: dense scrolling masonry wall */
.constellation-shell.is-grid{overflow:visible}.constellation[data-mode="expanded"],.constellation.is-grid-detail{height:var(--grid-height,auto);overflow:visible}.constellation[data-mode="expanded"]{touch-action:pan-y}.constellation[data-mode="expanded"] .constellation__intro,.constellation.is-grid-detail .constellation__intro{position:fixed;top:50%}.constellation[data-mode="expanded"] .constellation__controls,.constellation[data-mode="expanded"] .constellation__modes,.constellation.is-grid-detail .constellation__controls,.constellation.is-grid-detail .constellation__modes,.constellation.is-grid-detail .constellation__artist{position:fixed}.constellation[data-mode="expanded"] .constellation__zoom,.constellation.is-grid-detail .constellation__zoom{opacity:0;pointer-events:none}.constellation[data-mode="expanded"] .constellation__lines{height:calc(100% - 138px)}.constellation.is-grid-detail .constellation__nodes,.constellation.is-grid-detail .constellation__lines{position:fixed;inset:76px 1.5vw 62px;height:auto;transform:none}.constellation[data-mode="expanded"] .constellation-node{width:var(--w);transform:translate(-50%,-50%) translate(var(--fx,0px),var(--fy,0px)) rotate(var(--r));transition:top .7s var(--ease),left .7s var(--ease),width .7s var(--ease),opacity .6s ease,filter .4s ease}.constellation[data-mode="expanded"] .constellation-node:hover,.constellation[data-mode="expanded"] .constellation-node:focus-visible{transform:translate(-50%,-50%) translate(var(--fx,0px),var(--fy,0px)) rotate(0)}.constellation[data-mode="expanded"] .constellation-node img{transform:translateY(0) scale(1);transform-origin:center;transition:opacity .6s ease,transform .6s var(--ease),box-shadow .3s ease,filter .3s ease}.constellation[data-mode="expanded"] .constellation-node:not(.is-shown) img{opacity:0;transform:translateY(22px) scale(.94)}.constellation[data-mode="expanded"] .constellation-node.is-shown img{transition-delay:var(--reveal-delay,0ms)}.constellation[data-mode="expanded"] .constellation-node.is-near img{transform:translateY(0) scale(1.035);box-shadow:0 10px 26px rgba(17,17,16,.15)}.constellation[data-mode="expanded"] .constellation-node:hover img,.constellation[data-mode="expanded"] .constellation-node:focus-visible img{transform:translateY(0) scale(1.08);box-shadow:0 14px 34px rgba(17,17,16,.18);transition-delay:0ms}.constellation[data-mode="expanded"] .constellation__lines line{stroke-width:.6;transition:opacity .75s ease,stroke .25s ease,stroke-width .25s ease}.constellation[data-mode="expanded"] .constellation__lines line.is-hot{stroke:rgba(17,17,16,.85);stroke-width:1.1}
@media(max-width:720px){.constellation.is-grid-detail .constellation__nodes,.constellation.is-grid-detail .constellation__lines{inset:68px 0 58px}}
@media(prefers-reduced-motion:reduce){.constellation[data-mode="expanded"] .constellation-node,.constellation[data-mode="expanded"] .constellation-node img{transition-duration:.12s;transition-delay:0ms}}
@supports (animation-timeline: scroll()) and (translate: 0 1px){.constellation[data-mode="expanded"] .constellation-node{animation:nodd-wall-parallax linear both;animation-timeline:scroll(root block)}@keyframes nodd-wall-parallax{from{translate:0 0}to{translate:0 var(--py,0px)}}}
@media(prefers-reduced-motion:reduce){.constellation[data-mode="expanded"] .constellation-node{animation:none}}
.constellation[data-mode="overview"].is-turning .constellation-node{pointer-events:none}
.constellation[data-mode="expanded"] .constellation-node img{will-change:transform,opacity}
/* Pages v2: shared */
.skip-link{position:absolute;z-index:200;top:-60px;left:var(--header-x);padding:10px 14px;background:var(--ink);color:var(--paper);font-size:.7rem;font-weight:700;letter-spacing:.14em;transition:top .2s ease}.skip-link:focus{top:12px;outline:0}body:not(.home) .site-header{transition:background-color .35s ease,box-shadow .35s ease}body:not(.home) .site-header.is-scrolled{background:rgba(246,245,240,.88);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);box-shadow:0 1px 0 var(--hair)}[data-reveal]{opacity:0;transform:translateY(12px);transition:opacity .62s var(--ease),transform .62s var(--ease)}[data-reveal].is-in{opacity:1;transform:none}[data-reveal][data-reveal-delay="1"]{transition-delay:60ms}[data-reveal][data-reveal-delay="2"]{transition-delay:120ms}[data-reveal][data-reveal-delay="3"]{transition-delay:180ms}[data-reveal][data-reveal-delay="4"]{transition-delay:240ms}[data-reveal][data-reveal-delay="5"]{transition-delay:300ms}
/* Pages v2: about */
.editorial-mast>span{display:none}.editorial-content{counter-reset:act}.editorial-content>*{grid-column:2/-1;min-width:0}.editorial-content>.nodd-sub{margin:-8vh 0 0;max-width:62ch;color:var(--muted);font-family:var(--font-display);font-size:1rem;letter-spacing:.01em;line-height:1.6}.editorial-content>.nodd-lede{font-family:var(--font-text);letter-spacing:-.02em}.editorial-content blockquote{font-family:var(--font-text);letter-spacing:-.02em}.editorial-content blockquote p{margin:0}.editorial-content>.nodd-act{grid-column:1/-1;display:grid;grid-template-columns:minmax(170px,.65fr) minmax(0,1.2fr) minmax(240px,.8fr);gap:28px 5vw;align-items:start}.editorial-content>.nodd-act>*{grid-column:2;margin:0;font-family:var(--font-text);font-size:1.05rem;line-height:1.85}.editorial-content>.nodd-act>h2+*{grid-row:1}.editorial-content>.nodd-act>*+*{margin-top:0}.editorial-content>.nodd-act>h2{position:relative;grid-column:1;grid-row:1;margin:0;padding-top:18px;border-top:0;font-family:var(--font-display);font-size:clamp(2.4rem,5vw,4.6rem);letter-spacing:-.06em;line-height:.9}.editorial-content>.nodd-act>h2::before{counter-increment:act;content:counter(act,decimal-leading-zero);display:block;margin-bottom:14px;color:var(--muted);font-size:.66rem;font-weight:650;letter-spacing:.16em}.editorial-content>.nodd-act>h2::after{content:"";position:absolute;top:0;right:0;left:0;height:1px;background:var(--ink);transform:scaleX(0);transform-origin:left;transition:transform .9s var(--ease) .1s}.editorial-content>.nodd-act.is-in>h2::after{transform:scaleX(1)}.editorial-content>.nodd-act+.nodd-act{margin-top:2vh}.editorial-orbit{animation:nodd-orbit-drift 90s linear infinite alternate}@keyframes nodd-orbit-drift{from{transform:translateX(0)}to{transform:translateX(-28%)}}.editorial-empty{grid-column:2/-1;margin:0;color:var(--muted);font-family:var(--font-text)}.editorial-next{display:flex;flex-wrap:wrap;justify-content:space-between;gap:16px 32px;margin-top:4vh;padding-top:26px;border-top:1px solid var(--ink);font-size:.72rem;font-weight:700;letter-spacing:.14em}.editorial-next a{position:relative;padding:8px 0}.editorial-next a::after{position:absolute;right:0;bottom:2px;left:0;height:1px;background:currentColor;content:"";transform:scaleX(0);transform-origin:right;transition:transform .3s var(--ease)}.editorial-next a:hover::after,.editorial-next a:focus-visible::after{transform:scaleX(1);transform-origin:left}
@media(max-width:900px){.editorial-content>.nodd-act{grid-template-columns:1fr 2fr}}
@media(max-width:720px){.editorial-mast h1{font-size:22vw}.editorial-content>.nodd-sub{margin-top:-40px}.editorial-content>.nodd-act{display:block;margin-top:64px}.editorial-content>.nodd-act>h2{grid-row:auto;margin:0 0 20px;padding-top:16px;font-size:2.6rem}.editorial-content>.nodd-act>*+*{margin-top:14px}.editorial-content>.nodd-act>*{font-size:1rem;line-height:1.8}.editorial-next{flex-direction:column}}
@media(prefers-reduced-motion:reduce){[data-reveal]{opacity:1;transform:none;transition:none}.editorial-content>.nodd-act>h2::after{transform:scaleX(1);transition:none}.editorial-orbit{animation:none}}
/* Pages v2: artist */
.artist-index__grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:clamp(22px,2.6vw,44px) clamp(16px,2vw,32px);margin-top:8vh;background:none;border:0}.artist-index__card{position:relative;display:grid;grid-template-columns:1fr auto;grid-template-rows:auto auto auto;gap:6px 12px;align-items:end;min-height:0;padding:0;background:none}.artist-index__card>span{position:static;grid-column:1/-1;margin-bottom:6px;color:var(--muted);font-size:.6rem;font-weight:650;letter-spacing:.12em}.artist-index__cover{grid-column:1/-1;margin:0 0 6px;aspect-ratio:3/4;overflow:hidden;background:#e6e5df}.artist-index__card img,.artist-index__card>i{position:static;inset:auto;display:block;width:100%;height:100%;object-fit:cover;opacity:1;filter:none;transform:scale(1);transition:transform .8s var(--ease)}.artist-index__card:hover img,.artist-index__card:focus-visible img{opacity:1;filter:none;transform:scale(1.035)}.artist-index__card strong{font-size:clamp(1rem,1.45vw,1.5rem);letter-spacing:-.03em}.artist-index__card small{align-self:end;padding-bottom:3px}.artist-hero h1{font-size:clamp(3.2rem,8.5vw,9rem);overflow-wrap:normal;word-break:keep-all}.artist-hero__pending{margin:0;color:var(--muted);font-family:var(--font-display);font-size:.66rem;font-weight:650;letter-spacing:.16em}.artist-hero__links{grid-column:1/-1;display:flex;flex-wrap:wrap;gap:12px 30px;font-size:.65rem;font-weight:700;letter-spacing:.13em}.artist-hero__links a{position:relative;padding:6px 0}.artist-hero__links a::after{position:absolute;right:0;bottom:0;left:0;height:1px;background:currentColor;content:"";transform:scaleX(0);transform-origin:right;transition:transform .3s var(--ease)}.artist-hero__links a:hover::after,.artist-hero__links a:focus-visible::after{transform:scaleX(1);transform-origin:left}.artist-works-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:clamp(24px,3vw,48px) 2vw;align-items:start;padding-top:8vh}.artist-work,.artist-work:nth-child(5n+2),.artist-work:nth-child(5n+4),.artist-work:nth-child(5n+3){grid-column:auto;display:grid;grid-template-columns:auto 1fr;gap:8px 14px;align-items:end;margin:0 0 clamp(26px,3vw,46px);break-inside:avoid;-webkit-column-break-inside:avoid}.artist-work img,.artist-work>i{aspect-ratio:var(--ratio,1);height:auto;background:#e8e7e1;transition:transform .7s var(--ease),filter .3s ease}.artist-work:hover img,.artist-work:focus-visible img{filter:none;transform:scale(1.02)}.artist-works-grid__empty{color:var(--muted);font-family:var(--font-text)}
@media(max-width:1400px){.artist-works-grid{grid-template-columns:repeat(3,1fr)}}
@media(max-width:900px){.artist-index__grid{grid-template-columns:repeat(3,minmax(0,1fr))}.artist-works-grid{grid-template-columns:repeat(2,1fr)}}
@media(max-width:720px){.artist-index__grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:22px 14px}.artist-index__card{min-height:0}.artist-hero{grid-template-columns:1fr;grid-template-rows:auto auto auto auto;min-height:0;gap:22px 0}.artist-hero h1{font-size:14vw}.artist-hero__bio{max-width:none}.artist-works-grid{grid-template-columns:repeat(2,1fr);gap:40px 14px}.artist-work{margin-bottom:22px}}
/* Pages v2: contact */
.contact-form label{position:relative;transition:border-color .25s ease}.contact-form label.is-invalid{border-bottom-color:#8a2a1e}.contact-form .field-error{display:none;margin-top:-4px;color:#8a2a1e;font-family:var(--font-text);font-size:.78rem;line-height:1.4}.contact-form label.is-invalid .field-error{display:block}.contact-form input:focus-visible,.contact-form textarea:focus-visible{outline:0;box-shadow:0 1px 0 var(--ink)}.contact-form button{transition:opacity .25s ease,color .25s ease}.contact-form.is-sending button{opacity:.5;pointer-events:none}.contact-form.is-sent label{opacity:.35;pointer-events:none}.contact-form.is-sent button{pointer-events:none}.contact-status{min-height:1.5em;font-size:.9rem;line-height:1.5;transition:opacity .3s ease}.contact-status[data-tone="ok"]{color:var(--ink)}.contact-status[data-tone="error"]{color:#8a2a1e}.contact-honeypot{position:absolute!important;left:-9999px!important;width:1px;height:1px;overflow:hidden}.contact-copy p,.contact-copy .nodd-note{font-family:var(--font-text)}
@media(max-width:720px){.contact-grid{gap:48px;padding-top:6vh}.contact-form textarea{min-height:140px}}
.constellation[data-mode="overview"].is-over-globe{cursor:grab}.constellation[data-mode="overview"].is-dragging{cursor:grabbing}
/* Sphere transform render path (SPHERE_RENDER = "transform") */
.constellation[data-render="transform"][data-mode="overview"] .constellation-node,.constellation[data-render="transform"][data-mode="identity"] .constellation-node{transform:translate(-50%,-50%) translate3d(var(--tx,0px),var(--ty,0px),0) rotate(var(--r)) scale(var(--node-scale,1));transform-origin:center;will-change:transform,opacity;transition:opacity .28s ease,filter .4s ease}.constellation[data-render="transform"][data-mode="overview"] .constellation-node:hover,.constellation[data-render="transform"][data-mode="overview"] .constellation-node:focus-visible{transform:translate(-50%,-50%) translate3d(var(--tx,0px),var(--ty,0px),0) rotate(var(--r)) scale(var(--node-scale,1))}
/* Pages v3: minimal type — sub-pages step back so the works lead */
.artist-index__mast{display:block;min-height:0;padding:10px 0 22px;border-bottom:1px solid var(--hair)}
.artist-index__mast>p,.artist-hero>p,.editorial-mast>p,.contact-mast>p{margin:0 0 12px;color:var(--muted);font-size:.6rem;font-weight:500;letter-spacing:.18em}
.artist-index__mast h1,.artist-hero h1,.editorial-mast h1,.contact-mast h1{margin:0;font-size:clamp(1.7rem,3.2vw,3rem);font-weight:500;letter-spacing:-.025em;line-height:1.08}
.artist-index__mast>span,.artist-index__card>span,.artist-index__card small,.artist-work>span,.editorial-orbit,.editorial-mast>span{display:none}
.artist-index__grid{margin-top:5vh}
.artist-index__card{grid-template-columns:1fr;grid-template-rows:auto auto;gap:9px 0}
.artist-index__cover{margin:0}
.artist-index__card strong{font-size:.7rem;font-weight:500;letter-spacing:.03em}
.artist-hero{min-height:0;gap:20px 8vw;padding:10px 0 30px;border-bottom:1px solid var(--hair)}
.artist-hero h1{align-self:start;overflow-wrap:anywhere}
.artist-hero__bio{align-self:start}
.artist-hero__bio p{margin:0 0 16px;font-size:.94rem;line-height:1.7}
.artist-hero__bio p[lang="en"]{font-size:.76rem}
.artist-hero__pending,.artist-hero__links,.editorial-next,.contact-form label span,.contact-form button,.contact-copy h2{font-weight:500;letter-spacing:.16em}
.artist-hero__links,.editorial-next{font-size:.6rem}
.artist-works-grid{padding-top:5vh}
.artist-work,.artist-work:nth-child(5n+2),.artist-work:nth-child(5n+4),.artist-work:nth-child(5n+3){grid-template-columns:1fr;gap:7px 0}
.artist-work strong{color:var(--muted);font-size:.62rem;font-weight:500;letter-spacing:.02em}
.editorial-mast{display:block;min-height:0;padding:10px 0 24px;border-bottom:1px solid var(--hair)}
.editorial-content{padding:7vh 0 9vh}
.editorial-content>.nodd-lede{margin:0 0 5vh;font-size:clamp(1.3rem,2.3vw,2.1rem);font-weight:500;letter-spacing:-.015em;line-height:1.35}
.editorial-content>.nodd-sub{margin-top:0;font-size:.9rem}
.editorial-content blockquote{margin-top:6vh;font-size:clamp(1.2rem,2.1vw,1.9rem);font-weight:500;letter-spacing:-.015em;line-height:1.4}
.editorial-content>.nodd-act>h2{padding-top:12px;font-size:clamp(1.1rem,1.7vw,1.5rem);font-weight:500;letter-spacing:-.015em;line-height:1.2}
.editorial-content>.nodd-act>h2::before{content:none}
.editorial-content>.nodd-act>*{font-size:.96rem;line-height:1.8}
.editorial-next{border-top:1px solid var(--hair)}
.contact-mast{min-height:0;padding:10px 0 24px;border-bottom:1px solid var(--hair)}
.contact-mast h1{margin-top:0}
.contact-grid{padding-top:6vh}
.contact-copy .nodd-lede{font-size:clamp(1.2rem,2.1vw,1.9rem);font-weight:500;letter-spacing:-.015em;line-height:1.4}
.contact-copy p{font-size:.96rem}
.contact-copy h2{font-size:.6rem}
.contact-form label span{font-size:.6rem}
.contact-form button{min-height:60px;font-size:.64rem}
@media(max-width:720px){.artist-index__mast h1,.artist-hero h1,.editorial-mast h1,.contact-mast h1{font-size:1.6rem}.editorial-content>.nodd-act>h2{font-size:1.15rem}}
/* Artist-mode video — the selected work plays in place of its cover, in the same box. */
.constellation-node img[hidden]{display:none!important}
.constellation[data-mode="artist"] .constellation-node.is-selected video{display:block;width:100%;aspect-ratio:var(--ratio);border:1px solid rgba(17,17,16,.12);background:#e7e6e0;box-shadow:0 32px 90px rgba(17,17,16,.2);object-fit:cover;filter:saturate(1) contrast(1.03);pointer-events:none}
/* Gallery pages (ART / COMMERCIAL / IP) — masonry wall from gallery blocks + lightbox */
.gallery-page{padding-bottom:10vh}
.gallery-mast{display:block;padding:10px 0 22px;border-bottom:1px solid var(--hair)}
.gallery-mast>p{margin:0 0 12px;color:var(--muted);font-size:.6rem;font-weight:500;letter-spacing:.18em}
.gallery-mast h1{margin:0;font-size:clamp(1.7rem,3.2vw,3rem);font-weight:500;letter-spacing:-.025em;line-height:1.08}
.gallery-wall{padding-top:5vh}
.gallery-wall .wp-block-gallery,.gallery-wall .wp-block-gallery.has-nested-images{display:block;margin:0;columns:var(--gallery-cols,4);column-gap:var(--gallery-gap,clamp(14px,1.6vw,28px))!important}
/* Core gallery CSS uses :not(#individual-image) to outrank themes, so these are !important. */
.gallery-wall .wp-block-image,.gallery-wall .wp-block-gallery.has-nested-images figure.wp-block-image{display:block!important;width:auto!important;max-width:none!important;flex:none!important;margin:0 0 var(--gallery-gap,clamp(14px,1.6vw,28px))!important;break-inside:avoid;-webkit-column-break-inside:avoid;cursor:zoom-in;outline:none}
.gallery-wall .wp-block-image img,.gallery-wall .wp-block-gallery.has-nested-images figure.wp-block-image img{display:block;width:100%!important;height:auto!important;max-width:100%!important;flex:none!important;object-fit:cover;background:#e8e7e1;transition:transform .7s var(--ease),filter .3s ease}
.gallery-wall .wp-block-image:hover img,.gallery-wall .wp-block-image:focus-visible img{transform:scale(1.015)}
.gallery-wall .wp-block-image figcaption,.gallery-wall .wp-block-gallery.has-nested-images figure.wp-block-image figcaption{position:static;margin:7px 0 0;padding:0;background:none;color:var(--muted);font-size:.62rem;font-weight:500;letter-spacing:.02em;text-align:left}
.gallery-lightbox{position:fixed;inset:0;z-index:200;display:grid;grid-template-rows:1fr auto;align-items:stretch;padding:0;background:rgba(246,245,241,.96)}
.gallery-lightbox[hidden]{display:none}
.gallery-lightbox figure{display:grid;grid-template-rows:minmax(0,1fr) auto;justify-items:center;align-items:center;gap:12px;margin:0;height:100%;min-height:0}
.gallery-lightbox figure img{width:auto;height:auto;max-width:min(74vw,1280px);max-height:100%;min-height:0;object-fit:contain;box-shadow:0 32px 90px rgba(17,17,16,.2)}
.gallery-lightbox figcaption{color:var(--muted);font-size:.62rem;font-weight:500;letter-spacing:.14em}
.gallery-lightbox button{padding:12px;border:0;background:none;color:var(--ink);font:inherit;font-size:.62rem;font-weight:500;letter-spacing:.16em;cursor:pointer}
.gallery-lightbox__close{position:absolute;top:26px;right:var(--header-x)}
@media(max-width:1100px){.gallery-wall .wp-block-gallery,.gallery-wall .wp-block-gallery.has-nested-images{columns:var(--gallery-cols-md,3)}}
@media(max-width:720px){.site-nav{flex-wrap:wrap;justify-content:flex-end;gap:6px 12px}.gallery-wall .wp-block-gallery,.gallery-wall .wp-block-gallery.has-nested-images{columns:var(--gallery-cols-sm,2);column-gap:var(--gallery-gap-sm,12px)}.gallery-wall .wp-block-image,.gallery-wall .wp-block-gallery.has-nested-images figure.wp-block-image{margin-bottom:var(--gallery-gap-sm,12px)!important}.gallery-lightbox{grid-template-columns:1fr;padding:0 16px}.gallery-lightbox__prev,.gallery-lightbox__next{position:absolute;bottom:20px}.gallery-lightbox__prev{left:16px}.gallery-lightbox__next{right:16px}}
/* Bottom bar: the ORBIT/GRID switch sits in the middle, the footer line on the right. */
.constellation__modes{right:auto;left:50%;transform:translateX(-50%)}
.constellation__copyright{grid-column:3;justify-self:end;text-align:right}
/* GRID morph: the works fly between the globe and the wall. Input is frozen for the flight and the connection lines are rebuilt at the destination. */
.constellation.is-morphing{pointer-events:none}
.constellation.is-morphing .constellation__lines{opacity:0!important;transition:opacity .16s ease}
/* Gallery page options (NODD BLOC > 사이트 설정) */
.gallery-wall[data-captions="off"] figcaption{display:none!important}
.gallery-wall[data-lightbox="0"] .wp-block-image,.gallery-wall[data-lightbox="0"] .wp-block-gallery.has-nested-images figure.wp-block-image{cursor:default}
.editorial-hero{margin:0;padding-top:5vh}
.editorial-hero img{display:block;width:100%;height:auto;background:#e8e7e1}
/* Lightbox stage + thumbnail strip */
.gallery-lightbox__stage{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:clamp(8px,2vw,28px);min-height:0;padding:clamp(48px,7vh,72px) var(--header-x) clamp(14px,2vh,22px)}
.gallery-strip{position:relative;width:100%;overflow:hidden;padding:0 0 40px}
.gallery-strip::-webkit-scrollbar{display:none}
.gallery-strip__rail{--strip-gap:clamp(3px,.4vw,6px);--strip-thumb:clamp(48px,6vw,74px);position:relative;width:100%;height:calc(var(--strip-thumb) + 14px);margin:0;padding:14px 0 0}
.gallery-strip__lines{position:absolute;top:0;left:0;color:var(--ink);pointer-events:none}
.gallery-strip__item{position:absolute;top:14px;left:50%;width:var(--strip-thumb);aspect-ratio:1;padding:0;border:0;background:#e8e7e1;overflow:hidden;cursor:pointer;opacity:.42;filter:saturate(.7);transform:translateX(calc(-50% + var(--x,0px)));transition:transform .55s var(--ease),opacity .4s ease,filter .3s ease}
.gallery-strip__item img{display:block;width:100%;height:100%;object-fit:cover}
.gallery-strip__item:hover,.gallery-strip__item:focus-visible{opacity:.8;filter:none;transform:translateX(calc(-50% + var(--x,0px))) translateY(-3px)}
.gallery-strip__item[aria-current="true"]{opacity:1;filter:none;transform:translateX(calc(-50% + var(--x,0px))) translateY(-5px);box-shadow:0 10px 26px rgba(17,17,16,.2)}
@media(max-width:720px){.gallery-lightbox__stage{grid-template-columns:1fr;padding-top:56px}.gallery-lightbox__prev,.gallery-lightbox__next{position:absolute;bottom:auto;top:50%;transform:translateY(-50%)}.gallery-lightbox__prev{left:8px}.gallery-lightbox__next{right:8px}.gallery-strip__rail{padding-left:16px;padding-right:16px}}
/* Mode switch — liquid glass.
   The ring is a body of tinted glass, not a blurred panel: the backdrop is bent
   through it (SVG lens), the tint is warm charcoal rather than neutral grey so
   it does not read as plastic, and the glass stays clear enough to see through
   while the shadow beneath it keeps the silhouette. Two specular rims — inner
   stronger than outer — give the ring its thickness. */
.constellation__modes{
  --switch-w:40px;--switch-h:31px;
  --glass-tint:71 60 57;   /* 유리 색 · 완전 중성 회색은 플라스틱으로 보임 */
  --glass-see:.10;         /* 투명화 — 낮출수록 배경이 더 비침 */
  --glass-rim-in:.62;      /* 안쪽 림 */
  --glass-rim-out:.3;      /* 바깥 림 */
  position:relative;gap:0;padding:4px;border:0;border-radius:999px;
  background:
    linear-gradient(177deg,rgba(255,255,255,.5) 0%,rgba(255,255,255,.05) 46%,rgba(255,255,255,.18) 100%),
    radial-gradient(130% 180% at 50% -40%,rgba(255,255,255,.55),rgba(255,255,255,0) 58%),
    rgba(var(--glass-tint)/var(--glass-see));
  backdrop-filter:blur(2.4px) saturate(1.5) brightness(1.05);
  -webkit-backdrop-filter:blur(2.4px) saturate(1.5) brightness(1.05);
  box-shadow:
    inset 0 .8px .6px rgba(255,255,255,var(--glass-rim-in)),
    inset 0 -.8px .6px rgba(255,255,255,calc(var(--glass-rim-in) * .42)),
    inset 0 0 0 .7px rgba(255,255,255,.34),
    0 0 0 .7px rgba(var(--glass-tint)/var(--glass-rim-out)),
    0 10px 22px -8px rgba(17,17,16,.34),
    0 2px 6px -2px rgba(17,17,16,.2)}
/* Real refraction where the browser can bend a backdrop through a filter. */
@supports (backdrop-filter:url(#nodd-glass)){
.constellation__modes{backdrop-filter:url(#nodd-glass) saturate(1.5) brightness(1.05)}}
.nodd-glass-defs{position:absolute;width:0;height:0;overflow:hidden;pointer-events:none}
.constellation__modes button{position:relative;z-index:1;justify-content:center;width:var(--switch-w);min-height:var(--switch-h);padding:0;border-radius:999px;color:rgba(17,17,16,.62);background:none;transition:color .28s ease}
.constellation__modes button svg{display:block;width:17px;height:17px;filter:drop-shadow(0 .5px 0 rgba(255,255,255,.5))}
.constellation__modes button b{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip-path:inset(50%);white-space:nowrap}
.constellation__modes button:hover{color:rgba(17,17,16,.85);transform:none}
.constellation__modes button:focus-visible{outline:1px solid var(--ink);outline-offset:5px}
.constellation__modes button[aria-pressed="true"]{color:var(--paper);background:var(--ink)}
.constellation__modes button[aria-pressed="true"] svg{filter:drop-shadow(0 .5px .5px rgba(0,0,0,.45))}
@supports selector(:has(*)){
.constellation__modes::before{position:absolute;z-index:0;top:4px;left:4px;width:var(--switch-w);height:var(--switch-h);border-radius:999px;content:"";
  background:linear-gradient(178deg,rgba(38,37,34,.97),rgba(13,13,12,.94));
  box-shadow:inset 0 .8px 0 rgba(255,255,255,.26),inset 0 -.8px 0 rgba(255,255,255,.08),0 3px 8px -2px rgba(17,17,16,.45);
  transition:transform .42s cubic-bezier(.34,1.32,.44,1)}
.constellation__modes button[aria-pressed="true"]{background:none}
.constellation__modes:has(button:last-of-type[aria-pressed="true"])::before{transform:translateX(var(--switch-w))}}
@media(prefers-reduced-motion:reduce){.constellation__modes::before{transition:none}}
/* Glass is a luxury: when the viewer asks for less transparency, give them a plate. */
@media(prefers-reduced-transparency:reduce){
.constellation__modes{background:rgba(246,245,240,.97);backdrop-filter:none;-webkit-backdrop-filter:none}}
@media(max-width:720px){.constellation__modes{--switch-w:35px;--switch-h:28px;padding:3px}.constellation__modes::before{top:3px;left:3px}.constellation__modes button svg{width:15px;height:15px}}
/* Lightbox close: a hairline cross, drawn at the size of a gesture. */
.gallery-lightbox__close{display:flex;align-items:center;justify-content:center;width:44px;height:44px;padding:0;top:22px}
.gallery-lightbox__close svg{display:block;width:26px;height:26px;transition:transform .3s var(--ease),opacity .3s ease;opacity:.72}
.gallery-lightbox__close:hover svg,.gallery-lightbox__close:focus-visible svg{opacity:1;transform:rotate(90deg)}
.gallery-lightbox__close span{position:absolute;width:1px;height:1px;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}
@media(max-width:720px){.gallery-strip{padding-bottom:28px}.gallery-strip__rail{padding-top:12px}.gallery-lightbox__close{width:38px;height:38px;top:14px}.gallery-lightbox__close svg{width:22px;height:22px}}
@media(prefers-reduced-motion:reduce){.gallery-strip__item{transition:none}}
/* Works past the visible window wait off stage, so the row reads the same whether the gallery holds an odd or an even number. */
.gallery-strip__item.is-out{opacity:0;pointer-events:none}
/* About — one ledger. Section labels on the left, Korean in the middle, English on the right; the two name entries are simply the last rows, so the page needs no second heading and no second set of rules. Five studies differ only in how the rows are marked. */
.editorial-page--about,.contact-page{padding-left:0;padding-right:0}
.about-wrap{max-width:1060px;margin:0 auto;padding:0 clamp(18px,5vw,40px)}
.editorial-page--about .editorial-mast,.contact-page .contact-mast{display:block;min-height:0;padding:0;border:0}
.editorial-page--about .editorial-mast>p,.contact-page .contact-mast>p{margin:0 0 10px;color:var(--muted);font-family:var(--font-display);font-size:.58rem;font-weight:500;letter-spacing:.2em}
.editorial-page--about .editorial-mast h1,.contact-page .contact-mast h1{margin:0;font-family:var(--font-display);font-size:1.32rem;font-weight:500;letter-spacing:-.01em;line-height:1.45;text-wrap:balance}
.about-headline-en{margin:5px 0 0;color:var(--muted);font-family:var(--font-display);font-size:.9rem;font-weight:400;line-height:1.45}
.editorial-page--about .editorial-content,.contact-page .contact-body{display:block;padding:34px 0 0}
.about-cols{display:grid;grid-template-columns:104px minmax(0,1fr) minmax(0,1fr);gap:0 clamp(18px,3vw,38px)}
.about-row{display:grid;grid-column:1/-1;grid-template-columns:subgrid}
.about-row::before{grid-column:1;padding:17px 0;color:var(--muted);font-family:var(--font-display);font-size:.55rem;font-weight:500;letter-spacing:.16em;content:attr(data-label)}
.about-ko,.about-en{margin:0;padding:17px 0;font-family:var(--font-text);font-size:.78rem;line-height:1.9}
.about-en{color:var(--muted)}
/* One hairline between rows — never above the first, never doubled. */
.about-row + .about-row::before,.about-row + .about-row>.about-ko,.about-row + .about-row>.about-en{border-top:1px solid var(--hair)}
.about-row--term::before{color:var(--ink);font-family:var(--font-display);font-size:.92rem;letter-spacing:.02em}
.about-row--term + .about-row--term::before{color:var(--ink)}
.about-sign{display:flex;flex-wrap:wrap;align-items:baseline;gap:10px;margin:34px 0 0;font-family:var(--font-display);font-size:.95rem;font-weight:500}
.about-sign i{font-style:normal;color:var(--muted);font-size:.58rem;letter-spacing:.18em;text-transform:uppercase}
.editorial-page--about .editorial-next{margin-top:48px;padding-top:16px;border-top:1px solid var(--hair);font-size:.58rem}
@media(max-width:820px){
.about-cols,.contact-ledger{grid-template-columns:1fr!important;gap:0!important}
.about-row,.contact-row{display:block!important;padding:16px 0}
.about-row + .about-row{border-top:1px solid var(--hair)}
.about-row::before,.contact-row>span:not(.contact-field){display:block;padding:0 0 6px!important;border-top:0!important}
.about-ko,.about-en,.contact-row input,.contact-row textarea{padding:0!important;border-top:0!important}
.about-en{margin-top:8px!important;padding-left:12px!important;border-left:1px solid var(--hair)}
.about-styler{flex-direction:column;gap:6px;bottom:10px;border-radius:14px}}
.contact-page .contact-mast{margin:0}
/* Contact form — name and address share a line, the message takes the width. */
.contact-ledger{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:22px clamp(18px,3vw,38px);margin-top:36px}
.contact-row{display:block}
.contact-row--message{grid-column:1/-1}
.contact-row>span:not(.contact-field){display:block;padding:0 0 6px;color:var(--muted);font-family:var(--font-display);font-size:.55rem;font-weight:500;letter-spacing:.16em}
.contact-row>.contact-field{display:block;padding:0}
.contact-field input,.contact-field textarea{width:100%;padding:7px 0;border:0;border-bottom:1px solid var(--hair);background:none;color:var(--ink);font-family:var(--font-text);font-size:.82rem;line-height:1.8}
.contact-field input:focus,.contact-field textarea:focus{border-bottom-color:var(--ink);outline:none}
.contact-field textarea{resize:vertical;min-height:96px}
.contact-field .field-error{display:none;margin-top:5px;color:#8a2a1e;font-size:.66rem}
.contact-row.is-invalid .field-error{display:block}
.contact-row.is-invalid input,.contact-row.is-invalid textarea{border-bottom-color:#8a2a1e}
.contact-submit{display:flex;flex-wrap:wrap;align-items:baseline;gap:14px;margin:30px 0 0}
.contact-submit button{display:inline-flex;align-items:center;gap:9px;padding:0;border:0;background:none;color:var(--ink);font-family:var(--font-display);font-size:.72rem;font-weight:500;letter-spacing:.14em;cursor:pointer}
.contact-submit button:disabled{color:var(--muted);cursor:default}
.contact-submit button::after{width:26px;height:1px;background:currentColor;content:"";transition:width .3s var(--ease)}
.contact-submit button:hover::after{width:40px}
.contact-status{margin:0;color:var(--muted);font-size:.72rem}
.contact-status[data-tone="ok"]{color:var(--ink)}
.contact-status[data-tone="error"]{color:#8a2a1e}
.contact-honeypot{position:absolute;width:1px;height:1px;margin:-1px;overflow:hidden;clip-path:inset(50%)}
@media(max-width:820px){.contact-ledger{grid-template-columns:1fr;gap:18px}}
/* Holding page — the wordmark alone on paper until the work is shown. */
.soon{position:relative;display:grid;place-items:center;min-height:100svh;padding:clamp(28px,7vw,72px);overflow:hidden;text-align:center}
.soon__reel{position:absolute;inset:0;opacity:0;transition:opacity 1.1s var(--ease)}
.soon__reel.is-live{opacity:.5}
.soon__reel img{display:block;width:100%;height:100%;object-fit:cover;filter:grayscale(1) contrast(1.06)}
.soon__reel::after{position:absolute;inset:0;background:radial-gradient(120% 90% at 50% 50%,rgba(246,245,240,.72) 0%,rgba(246,245,240,.92) 58%,var(--paper) 100%);content:""}
.soon__inner{position:relative;z-index:1;display:grid;justify-items:center;gap:0;max-width:640px}
.soon__label{margin:0 0 26px;color:var(--muted);font-family:var(--font-display);font-size:.58rem;font-weight:500;letter-spacing:.32em}
.soon__mark{display:grid;gap:0;margin:0;font-family:var(--font-display);font-size:clamp(3.4rem,13vw,8.5rem);font-weight:700;letter-spacing:-.05em;line-height:.86}
.soon__line{margin:26px 0 0;font-family:var(--font-text);font-size:.86rem;line-height:1.8}
.soon__line[lang="en"]{margin-top:5px;color:var(--muted);font-size:.76rem}
.soon__tag{margin:30px 0 0;color:var(--muted);font-family:var(--font-display);font-size:.55rem;font-weight:500;letter-spacing:.2em;text-transform:uppercase}
.soon__link{margin:34px 0 0}
.soon__link a{position:relative;padding:6px 0;font-family:var(--font-display);font-size:.6rem;font-weight:500;letter-spacing:.18em}
.soon__link a::after{position:absolute;right:0;bottom:0;left:0;height:1px;background:currentColor;content:"";transform:scaleX(1);transform-origin:left;transition:transform .3s var(--ease)}
.soon__link a:hover::after{transform:scaleX(0);transform-origin:right}
body:has(.soon) .site-header,body:has(.soon) .site-footer{display:none}
/* 모바일 메뉴 — 우측 상단 햄버거. 두 줄만 쓴 건 사이트 타이포가 얇은 1px 선을
   기준선으로 쓰기 때문이고, 열리면 그 두 줄이 그대로 X 가 된다. */
.site-burger{position:relative;z-index:2;display:none;width:26px;height:18px;padding:0;border:0;background:none;color:inherit;cursor:pointer;pointer-events:auto}
.site-burger i{position:absolute;right:0;left:0;height:1px;background:currentColor;transition:transform .34s var(--ease)}
.site-burger i:first-child{top:5px}
.site-burger i:last-child{top:12px}
.site-burger[aria-expanded="true"] i:first-child{transform:translateY(3.5px) rotate(45deg)}
.site-burger[aria-expanded="true"] i:last-child{transform:translateY(-3.5px) rotate(-45deg)}
@media(max-width:720px){
  .site-burger{display:block}
  .site-nav{position:fixed;z-index:1;inset:0;display:flex;flex-direction:column;flex-wrap:nowrap;justify-content:center;gap:2px;padding:0 var(--header-x);background:var(--paper);font-size:1.45rem;font-weight:600;letter-spacing:.02em;visibility:hidden;opacity:0;transform:translateY(-8px);transition:opacity .28s ease,transform .38s var(--ease),visibility .28s;pointer-events:none}
  .site-nav.is-open{visibility:visible;opacity:1;transform:none;pointer-events:auto}
  .site-nav a{padding:10px 0}
  .site-nav a::after{display:none}
  body.nav-open{overflow:hidden}
}
/* ── 구 형태 페이지(/home) 모바일 교정 ────────────────────────────────────
   워드마크를 화면의 정확한 중앙에 둔다. 인트로는 세로 플렉스라 NODES CONNECT
   라벨이 워드마크와 같은 상자에 들어가 있었고, 중앙에 놓이는 건 라벨까지 포함한
   덩어리여서 워드마크 자체는 12.45px 아래로 내려갔다. 라벨을 흐름에서 빼면
   상자 = 워드마크가 되어 오차가 구조적으로 사라진다. 간격은 기존 margin-bottom
   을 그대로 쓰므로 모바일 값(.7rem)도 자동으로 따라온다. */
.constellation__intro span{position:absolute;bottom:100%;left:50%;transform:translateX(-50%)}
/* 광학 보정은 넣지 않는다. 실제 Oswald 로 래스터해서 재보면 잉크 중심과
   라인박스 중심의 차이가 93.6px 에서 0.72px, 216px 에서 0.50px 로 사실상 0 이다.
   (앞서 나온 4.64px 은 폰트가 폴백된 상태의 측정이라 틀렸다.) 보정을 걸면
   오히려 폰에서 4.7px, 데스크톱에서 10.8px 위로 뜬다. */

/* 메인은 스크롤하지 않는다. 문서를 뷰포트에 묶으면 iOS 주소창이 접히지 않고,
   접힐 때마다 터지던 resize → 89노드 재배치도 같이 사라진다. GRID 와
   GRID 상세만 스크롤한다. :has() 로 모드를 따라가므로 JS 동기화 지점이 없다. */
html:has(.constellation:not([data-mode="expanded"]):not(.is-grid-detail)),
html:has(.constellation:not([data-mode="expanded"]):not(.is-grid-detail)) body{height:100%;overflow:hidden;overscroll-behavior-y:none}

/* 노치·홈인디케이터. viewport-fit=cover 가 이미 켜져 있어 인셋이 0 이 아니다. */
@media(max-width:720px){
  .constellation__controls,.constellation__zoom,.constellation__modes{bottom:max(22px,calc(env(safe-area-inset-bottom,0px) + 10px))}
  .constellation__zoom{left:max(18px,env(safe-area-inset-left,0px))}
  .constellation__controls{right:max(18px,env(safe-area-inset-right,0px));left:max(18px,env(safe-area-inset-left,0px))}
}

/* 노드 레이어는 위아래 인셋이 다르다(데스크톱 76/62, 모바일 68/58). 그래서 레이어
   기준 50% 는 화면 중앙이 아니고, 예전의 49% 는 그 어긋남을 한 화면에서만 대충
   맞춘 값이었다. 화면 중앙 = 레이어의 50% + (아래인셋 − 위인셋)/2 이고,
   무대가 뷰포트 한 장이 된 지금 이 식은 모든 화면 높이에서 정확하다. */
.constellation{--nodes-top:76px;--nodes-bottom:62px;--sphere-y:calc(50% + (var(--nodes-bottom) - var(--nodes-top)) / 2)}
@media(max-width:720px){.constellation{--nodes-top:68px;--nodes-bottom:58px}}

/* 메인 모바일 라이트박스는 씬의 고정 크롬(헤더 100, 하단 게이지·토글 300) 위에 떠야 한다. */
.nodd-scene .gallery-lightbox{z-index:1000}

/* 라이트박스 위에서 가로로 미는 건 우리가 받는다(이전·다음). 세로만 브라우저에 맡긴다. */
.gallery-lightbox{touch-action:pan-y}

/* Production override: the ORBIT sphere does not show work titles on hover. */
.constellation[data-mode="overview"] .constellation-node > span{display:none!important;opacity:0!important;visibility:hidden!important;pointer-events:none!important}

/* 2026-09-17: 아티스트 작품 영역을 다단(columns)에서 4열 grid로 전환. 예전 12열 시절의 span/오프셋 규칙은 grid에서 무효화한다. */
.artist-works-grid>.artist-work,.artist-works-grid>.artist-work:nth-child(n){grid-column:auto;margin-top:0;margin-bottom:0}
