@font-face{font-family:Manrope;src:url('/home/assets/Manrope.ttf') format('truetype');font-weight:200 800;font-display:swap}
:root{--paper:#c7e3e9;--ink:#18383e;--muted:#4c6b70;--line:rgba(24,56,62,.23);font-family:Manrope,Arial,sans-serif;color:var(--ink);background:var(--paper);font-synthesis:none}
*{box-sizing:border-box}body{margin:0}a{color:inherit;text-decoration:none}button{font:inherit;color:inherit;cursor:pointer}button,a{-webkit-tap-highlight-color:transparent}button{background:none;border:0}a:focus-visible,button:focus-visible{outline:2px solid var(--ink);outline-offset:6px}.skip{position:fixed;left:24px;top:-100px;padding:12px;background:#fff;z-index:30}.skip:focus{top:12px}
.masthead{position:fixed;z-index:12;left:38px;right:38px;top:26px;display:flex;justify-content:space-between;align-items:flex-start;font-size:12px}.identity{font-size:15px;font-weight:750;letter-spacing:-.04em}.identity span{display:block;font-size:10px;font-weight:450;letter-spacing:0;margin-top:4px}.masthead nav{display:flex;gap:30px;align-items:center}.index-toggle{padding:0}.index-toggle span{font-size:9px;vertical-align:super;margin-left:3px}.version-link{color:var(--muted)}
.journey{height:1600vh}.gallery{position:sticky;top:0;width:100%;height:100svh;min-height:600px;overflow:hidden;isolation:isolate}.intro{position:absolute;left:38px;top:122px;z-index:5;pointer-events:none}.eyebrow{font-size:9px;letter-spacing:.1em;text-transform:uppercase;margin:0 0 18px}h1{font-size:clamp(40px,5.4vw,78px);line-height:.98;letter-spacing:-.065em;font-weight:500;margin:0}.about{position:absolute;z-index:5;right:38px;top:119px;font-size:12px;line-height:1.65;margin:0;pointer-events:none}.about span{display:block;color:var(--muted);font-size:10px;margin-top:14px}
#scene,.objects{position:absolute;inset:0;margin:0;padding:0;list-style:none}#scene{z-index:2;pointer-events:none}#scene canvas{width:100%;height:100%;display:block}.objects{z-index:3;pointer-events:none}.exhibit{position:absolute;left:0;top:0;width:var(--object-width,220px);height:var(--object-height,220px);transform:translate(var(--x,-500px),var(--y,400px));will-change:transform;pointer-events:auto}.exhibit[hidden]{display:none}.object-link{display:block;width:100%;height:100%;position:relative;outline-offset:9px!important;border-radius:48% 48% 10px 10px}.object-fallback{position:absolute;inset:-20% -20% -7%;display:block;pointer-events:none;mix-blend-mode:multiply;opacity:.85;transition:opacity .25s}.object-fallback img{width:100%;height:100%;object-fit:contain}.model-ready .object-fallback{opacity:0}.caption{position:absolute;top:100%;left:48%;width:205px;display:flex;align-items:flex-start;gap:10px;transform:translateY(17px) rotate(29deg);transform-origin:0 0;line-height:1.1;pointer-events:none}.caption-number{font-size:12px;font-weight:500;padding-right:10px;border-right:1px solid var(--line);padding-top:2px;min-height:29px}.caption-copy{display:block;min-width:0}.caption-copy strong{display:block;font-size:17px;letter-spacing:-.04em;font-weight:750;max-width:170px}.caption-copy>span{display:block;font-size:8px;letter-spacing:.04em;text-transform:uppercase;margin-top:6px;line-height:1.4}.open-arrow{font-size:16px;opacity:0;transform:translate(-5px,3px);transition:opacity .2s,transform .3s}.object-link:hover .open-arrow,.object-link:focus-visible .open-arrow{opacity:1;transform:none}.object-link:hover .caption-copy strong,.object-link:focus-visible .caption-copy strong{text-decoration:underline;text-underline-offset:4px}
.collection-note{display:none}.gallery-footer{position:absolute;left:38px;right:38px;bottom:42px;z-index:6;display:grid;grid-template-columns:100px 1fr auto;align-items:start;gap:28px;padding-top:18px;border-top:1px solid var(--line);background:var(--paper)}.position{font-size:16px;font-variant-numeric:tabular-nums;display:flex;gap:9px;align-items:center}.position .current{font-size:27px;line-height:1}.position-divider{opacity:.4}.position>span:last-child{font-size:11px;color:var(--muted)}.selected strong{font-size:13px;font-weight:750}.selected p{font-size:11px;margin:5px 0 0;color:var(--muted);max-width:470px}.browse{display:flex;gap:12px;align-items:center}.scroll-hint{font-size:10px;margin-right:12px}.browse button{width:35px;height:35px;border:1px solid var(--line);border-radius:50%;font-size:20px;transition:background .2s}.browse button:hover{background:rgba(255,255,255,.35)}.browse button:disabled{opacity:.3;cursor:default}.progress{position:absolute;left:0;right:0;top:-1px;height:2px;pointer-events:none}.progress>span{display:block;width:3.45%;height:100%;background:var(--ink);transform-origin:left;transition:width .12s}.scene-note{position:absolute;bottom:15px;left:38px;font-size:8px;color:var(--muted);z-index:5}.scene-note a{text-decoration:underline;text-underline-offset:2px}
.backdrop{position:absolute;left:31%;top:20%;width:44%;height:42%;max-height:360px;z-index:1;background:#eff3e8;box-shadow:0 24px 55px -30px #2f67704d;opacity:0;transform:translateY(28px) rotate(-5deg) scale(.94);transform-origin:45% 80%;pointer-events:none;transition:opacity .25s,transform .5s cubic-bezier(.16,1,.3,1);overflow:hidden;border:1px solid #18383e1f;border-radius:3px}.backdrop.visible{opacity:1;transform:translateY(0) rotate(-4deg) scale(1)}.preview-top{height:30px;padding:0 14px;display:flex;gap:12px;align-items:center;justify-content:space-between;border-bottom:1px solid #18383e1a;font-size:8px;text-transform:uppercase;letter-spacing:.06em}.preview-type{margin-left:auto;color:#657d80}.preview-image{position:absolute;inset:30px 0 0;overflow:hidden}.preview-image img{width:100%;height:100%;object-fit:cover;object-position:top;animation:preview-drift 5s cubic-bezier(.2,.6,.2,1) both}.preview-image img.phone{object-fit:contain;object-position:70% 10%;padding:20px;background:#e7ebdf}.preview-image img.creative{object-fit:contain;padding:14px;background:#f5f0df}.preview-text{position:absolute;inset:60px 30px 30px;display:flex;flex-direction:column;justify-content:center}.preview-text strong{font-size:clamp(25px,3.8vw,58px);font-weight:500;letter-spacing:-.055em;line-height:1}.preview-text p{font-size:13px;line-height:1.5;max-width:300px;margin:16px 0 20px}.preview-status{font-size:8px;text-transform:uppercase;letter-spacing:.08em;opacity:.65}.has-image .preview-text{inset:auto 0 0;padding:13px 18px;background:linear-gradient(transparent,#eff3e8 24%);min-height:70px}.has-image .preview-text strong{font-size:17px}.has-image .preview-text p{font-size:10px;margin:6px 0 0;max-width:90%}.has-image .preview-status{display:none}.preview-decoration{position:absolute;right:10%;top:23%;font-size:100px;font-weight:300;letter-spacing:-.08em;color:#18383e0d;transform:rotate(-15deg)}@keyframes preview-drift{from{transform:translateY(18px) scale(1.04);opacity:.4}to{transform:translateY(0) scale(1);opacity:1}}
.index-dialog{width:min(900px,calc(100% - 32px));max-height:86svh;padding:32px 40px;border:1px solid var(--line);border-radius:4px;background:#eff3e8;color:var(--ink)}.index-dialog::backdrop{background:#173a4255;backdrop-filter:blur(8px)}.index-header{display:flex;align-items:start;justify-content:space-between;gap:20px}.index-header .eyebrow{margin-bottom:12px}.index-header h2{font-weight:500;font-size:38px;letter-spacing:-.05em;margin:0}.index-header h2 span{font-size:12px;vertical-align:super;letter-spacing:0}.index-close{padding:5px 0;font-size:11px}.index-help{font-size:11px;line-height:1.5;color:var(--muted);margin:22px 0}.index-dialog ol{padding:0;list-style:none;margin:0}.index-dialog li a{display:grid;grid-template-columns:25px 1fr 160px 16px;gap:10px;padding:12px 0;border-top:1px solid #18383e24;align-items:center;font-size:11px}.index-dialog li a:hover strong{text-decoration:underline}.index-dialog li a>span:first-child{font-size:9px;color:var(--muted)}.index-dialog strong{font-size:14px;font-weight:600}.index-dialog small{font-size:10px;color:var(--muted)}.index-contact{border-top:1px solid var(--line);padding-top:24px;font-size:12px}.index-contact p{color:var(--muted);font-size:10px}
@media(min-width:1600px){.intro{top:15%}.about{top:15%;font-size:14px}.about span{font-size:12px}.caption-copy strong{font-size:20px}.caption-copy>span{font-size:9px}.caption{width:240px}.caption-copy strong{max-width:200px}}
@media(max-width:800px){.masthead{left:24px;right:24px;top:22px}.masthead nav{gap:18px}.version-link{display:none}.intro{left:24px;top:115px}h1{font-size:58px}.about{right:24px;top:120px;font-size:10px;max-width:230px}.about span{font-size:9px}.gallery-footer{left:24px;right:24px;grid-template-columns:70px 1fr auto;gap:16px}.collection-note,.scene-note{left:24px}.caption{width:160px;gap:8px}.caption-copy strong{font-size:14px;max-width:130px}.caption-copy>span{font-size:7px}.caption-number{font-size:10px;padding-right:8px}.scroll-hint{display:none}.browse{gap:8px}.backdrop{left:22%;width:62%;top:24%;height:36%}}
@media(max-width:520px){.gallery{min-height:620px}.masthead{left:20px;right:20px;top:20px}.identity{font-size:13px}.identity span{font-size:8px}.masthead nav{gap:15px;font-size:10px}.masthead nav>a:last-child{display:none}.intro{left:20px;top:108px}.eyebrow{font-size:8px;margin-bottom:14px}h1{font-size:49px}.about{left:20px;right:auto;top:250px;font-size:11px;line-height:1.5}.about span{font-size:9px;margin-top:9px}.about br{display:none}.about{max-width:260px}.gallery-footer{left:20px;right:20px;bottom:42px;grid-template-columns:54px 1fr auto;gap:12px;padding-top:14px}.position{gap:5px}.position .current{font-size:22px}.position>span:last-child{font-size:9px}.selected strong{font-size:11px}.selected p{font-size:9px;line-height:1.45;max-width:195px}.browse{gap:6px}.browse button{width:28px;height:28px;font-size:16px}.collection-note{display:none}.scene-note{left:20px;font-size:7px;bottom:17px}.caption{width:144px;transform:translateY(12px) rotate(29deg);gap:7px;left:43%}.caption-copy strong{font-size:12px;max-width:110px}.caption-copy>span{font-size:6px;margin-top:5px}.caption-number{font-size:9px;padding-right:7px;min-height:24px}.open-arrow{display:none}.backdrop{left:12%;top:21%;width:79%;height:33%;max-height:280px;z-index:1}.preview-text{inset:50px 20px 20px}.preview-text strong{font-size:38px}.preview-text p{font-size:11px}.intro,.about{transition:opacity .25s}.preview-open .intro,.preview-open .about{opacity:.12}.index-dialog{padding:24px 20px}.index-header h2{font-size:30px}.index-dialog li a{grid-template-columns:20px 1fr 14px}.index-dialog li small{display:none}.index-help{font-size:10px}}
@media(prefers-reduced-motion:reduce){*,*::before,*::after{scroll-behavior:auto!important;animation:none!important;transition:none!important}}
@media(max-height:700px) and (min-width:600px){.intro{top:90px}h1{font-size:46px}.about{top:93px;font-size:10px}.about span{font-size:9px;margin-top:10px}.caption{width:170px}.caption-copy strong{font-size:14px;max-width:135px}.caption-copy>span{font-size:7px}}
@media(max-height:750px) and (max-width:520px){.intro{top:94px}h1{font-size:44px}.about{top:207px;font-size:10px;line-height:1.5}.about span{display:none}}
.object-link:focus-visible{border-radius:3px;outline:1px solid var(--ink);outline-offset:8px}
.gallery-footer{position:fixed}
@media(min-width:521px){.about span{display:none}}
/* Studio light: a soft blue sweep, a bright upper fill and a satin ground. */
:root{--paper:#c7e7f1;--ink:#183740;--muted:#4b707c}
.gallery{background:radial-gradient(ellipse at 52% 12%,#ecfbffbd 0%,#d7f2f65c 40%,transparent 72%),linear-gradient(168deg,#c5e6f0 0%,#b9deed 62%,#caeaf2 100%)}
.gallery::before{content:"";position:absolute;inset:35% -10% 10%;background:radial-gradient(ellipse at 54% 58%,#eefcff6b,transparent 65%);pointer-events:none;z-index:0}
.gallery-footer{background:transparent}.backdrop{background:#f4fff9;border-color:#fff8;box-shadow:0 0 28px #eaffff85,0 18px 45px -25px #3a829e66;transform:translateY(22px) rotate(-2deg) scale(.95)}
.backdrop.visible{transform:translateY(0) rotate(-1.2deg) scale(1)}.preview-top{border-color:#2b6a6e17}.preview-image img.phone{background:#edf8f2}.has-image .preview-text{background:linear-gradient(transparent,#f4fff9 24%)}
.truck-presentation .preview-text{inset:60px auto 35px 28px;width:42%;justify-content:center}.truck-presentation .preview-text strong{font-size:clamp(34px,4.4vw,64px)}.truck-presentation .preview-text p{font-size:11px;line-height:1.6}.truck-presentation .preview-status{font-size:7px;line-height:1.5}.route-study{height:100%;width:100%;position:absolute;inset:0;overflow:visible}.route-line{stroke-dasharray:300;stroke-dashoffset:300;animation:route-draw 2.8s cubic-bezier(.22,.65,.2,1) forwards}.voice-bar{transform-box:fill-box;transform-origin:center;animation:voice-intake .65s ease-in-out alternate 6}
@keyframes route-draw{to{stroke-dashoffset:0}}@keyframes voice-intake{from{transform:scaleY(.45)}to{transform:scaleY(1)}}
@media(max-width:520px){.truck-presentation .preview-text{inset:42px auto 20px 18px;width:44%}.truck-presentation .preview-text strong{font-size:34px}.truck-presentation .preview-text p{font-size:9px}}
@media(prefers-reduced-motion:reduce){.route-line{stroke-dashoffset:0}}
/* Focus belongs to the selected project, independent of the object's subject. */
.exhibit.is-focused{z-index:2}.caption{margin-top:var(--focus-offset,0px);pointer-events:auto}.is-focused .caption-number{font-weight:750}.is-focused .object-link::before{content:"";position:absolute;inset:-45% -25% -15%;border-radius:20%}.is-focused:not(.model-ready) .object-fallback{transform:scale(1.35);transform-origin:50% 90%}

/* The shared composition supersedes the earlier diagonal catalogue row. */
.caption{left:50%;width:190px;transform:translate(-50%,15px);gap:8px}
.caption-copy strong{font-size:14px;max-width:155px}.caption-copy>span{font-size:7px;margin-top:5px}.caption-number{font-size:10px;padding-right:8px;min-height:26px}
.is-focused .caption{width:240px}.is-focused .caption-copy strong{font-size:17px;max-width:195px}
.is-focused .object-link::before{inset:-105% -70% -10%}
.backdrop{left:28.5%;top:14%;width:49%;height:45%;max-height:none}
.backdrop.visible{transform:none}.preview-open .intro,.preview-open .about{opacity:1}
@media(min-width:1000px){h1{font-size:clamp(48px,4.6vw,72px)}.about{font-size:10px;max-width:210px;right:3%}.gallery-footer{bottom:28px;padding-top:12px}.scene-note{bottom:5px}.intro{top:20%}.eyebrow{margin-bottom:15px}}
@media(min-width:600px) and (max-width:999px){.backdrop{left:31%;top:21%;width:45%;height:36%}.intro{top:19%}h1{font-size:45px}.about{top:95px;max-width:210px}.caption{width:135px}.caption-copy strong{font-size:12px}.is-focused .caption{width:190px}.is-focused .caption-copy strong{font-size:15px}}
@media(max-width:599px){.backdrop{left:23%;top:29%;width:70%;height:25%}.preview-open .about{opacity:0}.intro{top:100px}.caption{width:110px;left:50%;transform:translate(-50%,12px);gap:6px}.caption-copy strong{font-size:11px;max-width:85px}.caption-copy>span{font-size:6px}.caption-number{font-size:8px;padding-right:6px}.is-focused .caption{width:180px}.is-focused .caption-copy strong{font-size:15px;max-width:150px}.truck-presentation .preview-text{inset:30px auto 16px 14px;width:44%}.truck-presentation .preview-text strong{font-size:30px}.truck-presentation .preview-text p{font-size:8px}.preview-top{font-size:6px;padding:0 10px}.about{top:245px}.is-focused .object-link::before{inset:-100% -25% -10%}}

@media(max-height:750px) and (max-width:599px){.backdrop{top:37%;height:25%}.intro{top:94px}.preview-text strong{font-size:30px}.preview-text p{font-size:10px}}

/* Reveal the exhibition only after its first complete 3D frame. */
#scene-loader{background:radial-gradient(ellipse at 52% 12%,#ecfbffbd,transparent 72%),linear-gradient(168deg,#c5e6f0,#b9deed 62%,#caeaf2);opacity:1;visibility:visible;transition:opacity .32s ease,visibility 0s .32s}
html:not(.is-loading) #scene-loader{opacity:0;visibility:hidden;pointer-events:none}
.loader-brand{position:absolute;top:26px;left:38px;font-size:15px;font-weight:750;letter-spacing:-.04em}.loader-brand span{display:block;font-size:10px;font-weight:450;letter-spacing:0;margin-top:4px}
#scene-loader .loader-content{font-family:Manrope,Arial,sans-serif;padding:28px;text-align:center}
.loader-label{font-size:26px;font-weight:500;letter-spacing:-.045em;margin:0}.loader-detail{font-size:11px;color:var(--muted);line-height:1.6;margin:12px 0 30px}
.loader-progress{width:220px;height:2px;background:#18374026;overflow:hidden}.loader-progress span{display:block;width:100%;height:100%;background:var(--ink);transform:scaleX(var(--loaded,0));transform-origin:left;transition:transform .18s ease}
.loader-count{font-size:10px;font-variant-numeric:tabular-nums;letter-spacing:.05em;margin-top:12px}.loader-alternative{font-size:10px;color:var(--muted);margin-top:35px;text-decoration:underline;text-underline-offset:4px}
[data-scene-state=error] .loader-progress,[data-scene-state=error] .loader-count{display:none}[data-scene-state=error] .loader-alternative{margin-top:0;font-size:12px}
.model-ready .object-fallback{opacity:0;visibility:hidden;transition:none}
@media(max-width:599px){.loader-brand{top:20px;left:20px;font-size:13px}.loader-brand span{font-size:8px}.loader-label{font-size:24px}}

/* Projected sculpture bounds define the pointer target; empty stage stays empty. */
.exhibit,.object-link{pointer-events:none}.object-link::before,.is-focused .object-link::before{content:"";position:absolute;inset:auto;left:var(--hit-x,0px);top:var(--hit-y,0px);width:var(--hit-w,100%);height:var(--hit-h,100%);border-radius:14px;pointer-events:auto;cursor:pointer}
.object-link:focus-visible{outline:none}.object-link:focus-visible::before{outline:1px solid var(--ink);outline-offset:7px}.object-link:focus-visible .caption-copy strong{text-decoration:underline}
.gallery.is-dragging,.gallery.is-dragging *{cursor:grabbing!important;user-select:none}.selected-link{display:inline-flex;gap:7px;align-items:center}.selected-link>span{font-size:12px;opacity:.6}.selected-link:hover strong{text-decoration:underline;text-underline-offset:3px}
/* Swapping content remains subtle, with no animated blur or permanent GPU work. */
.backdrop.visible{animation:preview-reveal .28s cubic-bezier(.2,.7,.2,1) both}@keyframes preview-reveal{from{opacity:0;transform:translateY(12px) scale(.985)}to{opacity:1;transform:none}}

/* Place labels below the projected silhouette, including wide objects' front edge. */
.caption-copy strong{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
@media(min-width:600px){.gallery-footer{bottom:18px}}
body[data-scene=webgl] .exhibit:not(.model-ready):not(.model-failed) .object-fallback{visibility:hidden;opacity:0}
body[data-scene=webgl] .exhibit:not(.model-ready):not(.model-failed) .caption-copy>span::after{content:" · loading";text-transform:none;opacity:.7}

@media(min-width:600px){.scene-note{left:auto;right:38px;bottom:4px}}

.preview-image img{animation-duration:.55s}
