:root{--paper:#ede8e0;--ink:#443a43;--muted:#847b81;--lilac:#786581;--line:rgba(83,65,72,.16);--panel:#f9f6f0;--serif:Georgia,'Times New Roman',serif}
*{box-sizing:border-box}body{margin:0;background:var(--paper);color:var(--ink);font-family:var(--serif);overflow:hidden}button,input,textarea,select{font:inherit}button,a,label{ -webkit-tap-highlight-color:transparent}button{color:inherit;cursor:pointer}button:disabled{cursor:wait;opacity:.5}a{color:inherit;text-decoration:none}button{border:0;background:none}button:focus-visible,a:focus-visible,input:focus-visible,textarea:focus-visible,select:focus-visible{outline:2px solid #80688e;outline-offset:5px}button,a{touch-action:manipulation}#room{position:fixed;inset:0}#room canvas{display:block;width:100%;height:100%;touch-action:none;outline:none}.topbar{position:fixed;left:42px;right:42px;top:0;height:88px;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--line);z-index:2}.back-link,.text-button{font-size:13px;padding:10px 0}.back-link span{margin-right:10px;font-size:20px}.room-wordmark{font-size:19px;letter-spacing:.025em}.room-wordmark i{font-size:25px;color:var(--lilac)}.text-button span{margin-left:16px}.intro{position:fixed;top:17%;left:4.3%;pointer-events:none;z-index:1}.eyebrow{font-family:var(--serif);font-size:9px;font-weight:normal;letter-spacing:2px;line-height:1.6}.intro h1{font-size:clamp(40px,4.1vw,68px);line-height:1.12;font-weight:normal;letter-spacing:-2.7px;margin:22px 0 21px}.intro h1 i{font-weight:normal;color:#82718f}.intro-copy{font-size:14px;color:var(--muted);line-height:1.9}.member-note{display:flex;align-items:center;gap:12px;margin-top:28px;font-size:11px;letter-spacing:1.7px}.member-note>span:first-child{font-size:34px;color:#9b8ba7}.member-note small{display:block;font-size:10px;letter-spacing:.5px;color:var(--muted);margin-top:5px}.view-list{pointer-events:auto;display:grid;gap:4px;margin-top:42px;justify-items:start}.view-list button{text-align:left;font-size:12px;padding:11px 0;color:#827a7c;transition:color .2s}.view-list span{font-size:10px;margin-right:16px;color:#a49aa2}.view-list button.active{color:#594662}.view-list button.active:after{content:'—';margin-left:22px;color:#9c7faa}.view-list button:hover{color:#594662}.scene-caption{position:fixed;bottom:134px;left:46%;font-size:8px;letter-spacing:2px;color:#8d8080;display:flex;align-items:center;gap:12px;pointer-events:none}.tiny-line{height:1px;width:26px;background:#ad9da4}.scene-tools{position:fixed;right:42px;top:40%;display:grid;gap:8px}.scene-tools button{border:1px solid var(--line);background:#f5f0e8b0;backdrop-filter:blur(8px);width:35px;height:35px;border-radius:50%;font-size:20px;transition:background .2s}.scene-tools button:hover{background:var(--panel)}.bottom-bar{position:fixed;bottom:0;left:42px;right:42px;min-height:100px;display:flex;align-items:center;justify-content:space-between;border-top:1px solid var(--line);gap:20px}.listening-note{display:flex;gap:13px;align-items:center}.music-mark{font-size:23px;color:#8d7798;display:grid;place-items:center;border:1px solid var(--line);width:44px;height:44px;border-radius:50%}.listening-note .eyebrow{display:block;font-size:8px;letter-spacing:1.5px;color:var(--muted);margin-bottom:6px}.listening-note a{font-size:13px}.listening-note a span{color:var(--muted);font-size:11px}.gesture-hint{font-size:10px;color:var(--muted)}.gesture-hint span{padding:0 8px}.light-switch{display:flex;background:#e3ddd64a;padding:5px;border:1px solid var(--line);border-radius:25px;gap:2px}.light-switch button{padding:8px 13px;border-radius:20px;font-size:15px;color:var(--muted)}.light-switch button span{font-size:11px;margin-left:5px}.light-switch button.active{background:#fbf8f2;color:#695870;box-shadow:0 2px 8px #5f475b0a}#loading{position:fixed;inset:0;background:#ede8e0;z-index:20;display:flex;flex-direction:column;align-items:center;justify-content:center;transition:opacity .7s;pointer-events:none}#loading.done{opacity:0}#loading p{font-size:22px}#loading-detail{font-size:12px;color:var(--muted)}.loading-flower{font-size:38px;color:#a08aab;animation:breathe 2s ease-in-out infinite}@keyframes breathe{50%{opacity:.35;transform:rotate(45deg)}}#hover-label{position:fixed;pointer-events:none;z-index:4;background:#fcf8f0ed;border:1px solid var(--line);padding:9px 13px;font-size:12px;border-radius:3px;box-shadow:0 5px 25px #4a354a0a}#toast{position:fixed;bottom:118px;left:50%;transform:translateX(-50%);max-width:90%;padding:13px 22px;background:var(--panel);box-shadow:0 5px 35px #45334122;z-index:30;border-radius:5px;font-size:13px}dialog{color:var(--ink);background:var(--panel);border:1px solid #c7bab0;padding:32px;box-shadow:0 20px 100px #35273930}dialog::backdrop{background:#352c3340;backdrop-filter:blur(5px)}dialog h2{font-weight:normal;font-size:33px;letter-spacing:-1px;margin:10px 0 20px}dialog p{line-height:1.8}.drawer{margin:0 0 0 auto;height:100dvh;max-height:100dvh;width:430px;max-width:100%;padding:33px;overflow:auto;border-right:0;border-top:0;border-bottom:0}.drawer-head{display:flex;justify-content:space-between;gap:20px;align-items:flex-start}.close-button{font-family:Arial,sans-serif;font-size:26px;width:32px;height:32px;line-height:1;border:1px solid var(--line);border-radius:50%;background:var(--panel);flex-shrink:0}.panel-copy{font-size:13px;color:var(--muted)}.collection-entry{width:100%;display:flex;text-align:left;align-items:center;gap:15px;padding:17px 0;border-bottom:1px solid var(--line)}.collection-entry img{width:54px;height:64px;object-fit:cover;background:#e4dcd5;border:3px solid #eee8e0}.collection-entry strong{display:block;font-weight:normal;font-size:16px;margin-bottom:7px}.collection-entry small{font-size:10px;color:var(--muted)}.collection-entry>span:last-child{margin-left:auto;color:var(--muted)}.primary-button{background:#73607e;color:#fff9f6;padding:13px 19px;border-radius:2px;font-size:13px;border:1px solid #73607e}.primary-button:hover{background:#5d496a}.drawer>.primary-button{width:100%;margin-top:25px}.fine-print{font-size:10px;color:var(--muted);line-height:1.8}.collection-actions{display:flex;justify-content:space-between;gap:15px}.collection-actions .text-button{font-size:11px}.import-label{cursor:pointer}.item-dialog{width:880px;max-width:calc(100% - 32px);padding:0;overflow:auto;max-height:90dvh}.item-dialog[open]{display:grid;grid-template-columns:1.05fr 1fr}.item-dialog>.close-button,.form-dialog>.close-button{position:absolute;right:15px;top:15px;z-index:1}.item-photo-wrap{min-height:420px;display:flex;align-items:center;background:#e6dfd6}.item-photo-wrap img{width:100%;max-height:70dvh;object-fit:contain}.item-copy{padding:45px 30px 30px}.item-copy>p:not(.eyebrow){font-size:13px}.item-copy>p.fine-print{font-size:11px}#item-gallery{display:flex;gap:8px;margin:20px 0}#item-gallery button{padding:0;border:1px solid var(--line)}#item-gallery img{display:block;width:48px;height:54px;object-fit:cover}.form-dialog{position:relative;width:420px;max-width:calc(100% - 24px);max-height:92dvh}.form-dialog h2{font-size:29px}.form-dialog label{display:block;font-size:12px;margin-top:19px}.form-dialog input,.form-dialog select,.form-dialog textarea{display:block;width:100%;padding:10px;background:#fffaf5;border:1px solid #d6cdc4;margin-top:7px;border-radius:2px;color:var(--ink);font-size:13px}.form-dialog input[type=file]{font-size:11px}.form-dialog .primary-button{width:100%;margin-top:10px}.form-error{font-size:12px;color:#954b58}#remove-item{display:block;margin-top:15px;font-size:11px}#remove-item[hidden]{display:none}.no-script{position:fixed;inset:35%;z-index:50;background:var(--panel);padding:35px}.webgl-error{position:fixed;top:40%;left:38%;max-width:400px;padding:25px;background:var(--panel);z-index:21;line-height:1.8}body.evening{--paper:#e2dce1;--line:rgba(85,63,86,.18);--ink:#403044;--muted:#7d6c81}.scene-tools,.topbar,.bottom-bar{transition:color .4s,border-color .4s}
.scene-caption{top:121px;bottom:auto;left:53%}
.detail-view .intro>p,.detail-view .intro>h1,.detail-view .intro>.member-note,.detail-view .scene-caption{display:none}
.detail-view .view-list{position:fixed;bottom:125px;left:42px;background:#f9f6f0e6;backdrop-filter:blur(12px);padding:14px 23px;border:1px solid var(--line);border-radius:4px}
.detail-view .topbar,.detail-view .bottom-bar{background:#f9f6f0d9;backdrop-filter:blur(12px);padding-left:18px;padding-right:18px}
@media(min-width:1800px){.intro{left:6%;top:20%}.intro h1{font-size:76px}.intro-copy{font-size:16px}}
@media(max-width:1100px){.gesture-hint{display:none}.intro{left:4%;top:17%}.intro h1{font-size:45px}.intro-copy{font-size:12px}.scene-caption{left:43%;font-size:7px}.member-note{margin-top:20px}.view-list{margin-top:28px}}
@media(max-width:700px){.topbar{left:20px;right:20px;height:67px}.back-link{font-size:11px}.back-link span{margin-right:4px}.room-wordmark{display:none}.topbar .text-button{font-size:12px}.intro{left:24px;top:91px}.intro .eyebrow{font-size:7px;letter-spacing:1.6px}.intro h1{font-size:38px;letter-spacing:-1.5px;line-height:1.03;margin:11px 0}.intro h1 br{display:none}.intro h1 i{margin-left:4px}.intro-copy{font-size:12px;line-height:1.6;margin:12px 0}.intro-copy br{display:none}.member-note{position:fixed;right:22px;top:195px;gap:8px;margin:0;font-size:9px;letter-spacing:1px}.member-note>span:first-child{font-size:25px}.member-note small{font-size:8px}.view-list{position:fixed;bottom:113px;left:50%;transform:translateX(-50%);display:flex;width:max-content;max-width:95%;gap:10px;background:#f6f0e8dc;backdrop-filter:blur(8px);padding:5px 15px;border:1px solid var(--line);border-radius:25px}.view-list button{font-size:10px;padding:7px 0;white-space:nowrap}.view-list span{display:none}.view-list button.active:after{display:none}.view-list button.active{text-decoration:underline;text-underline-offset:5px}.scene-tools{right:16px;top:auto;bottom:176px;gap:6px}.scene-tools button{width:30px;height:30px;font-size:17px}.scene-caption{display:none}.bottom-bar{left:20px;right:20px;min-height:90px;gap:10px}.listening-note{gap:8px}.music-mark{width:30px;height:30px;font-size:17px}.listening-note a{font-size:11px}.listening-note a span{font-size:9px}.listening-note .eyebrow{font-size:6px}.light-switch{padding:3px}.light-switch button{padding:8px 9px}.light-switch button span{display:none}.item-dialog[open]{display:block}.item-photo-wrap{min-height:0;height:34dvh}.item-photo-wrap img{height:100%;object-fit:contain}.item-copy{padding:24px}.item-copy h2{font-size:27px;margin-bottom:10px}.drawer{padding:25px}dialog h2{font-size:29px}.webgl-error{left:20px;right:20px;top:40%;font-size:13px}#toast{bottom:160px}}
@media(prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
@media(max-width:700px){.detail-view .view-list{left:50%;bottom:113px;padding:5px 15px;border-radius:25px}.detail-view .topbar,.detail-view .bottom-bar{padding-left:0;padding-right:0}}
#play-item{display:block;margin-top:12px}#play-item[hidden]{display:none}
#player-panel{position:fixed;right:28px;top:105px;bottom:115px;width:380px;padding:24px;background:#faf7f1f5;border:1px solid #ccbeb1;box-shadow:0 16px 60px #352b3929;backdrop-filter:blur(16px);z-index:6;overflow-y:auto;overscroll-behavior:contain;border-radius:6px}#player-panel[hidden]{display:none}.player-heading{display:flex;justify-content:space-between;gap:8px}.player-heading .eyebrow{font-size:7px;margin:0 0 9px}.player-heading h2{font-weight:normal;font-size:27px;letter-spacing:-.8px;margin:0}.player-heading .close-button{width:28px;height:28px;font-size:20px}#player-panel .panel-copy{font-size:11px;line-height:1.6;margin:13px 0 18px}#album-choices{display:grid;grid-template-columns:repeat(4,1fr);gap:9px}.album-choice{padding:0;text-align:left}.album-choice img{width:100%;aspect-ratio:1;object-fit:cover;border:2px solid transparent;border-radius:2px;box-shadow:0 3px 8px #3f2e3920}.album-choice span{display:block;font-size:9px;line-height:1.35;margin:5px 0 0;min-height:25px}.album-choice[aria-pressed=true] img{border-color:#9173a0;outline:2px solid #bca7c433;outline-offset:2px}.now-playing{display:flex;gap:13px;align-items:center;margin-top:20px;border-top:1px solid var(--line);padding-top:18px}.now-playing img{width:61px;height:61px;object-fit:cover;border-radius:50%;box-shadow:0 2px 8px #3b243a20}.now-playing p{font-size:9px;color:var(--muted);margin:0 0 5px;line-height:1.5}.now-playing h3{font-weight:normal;font-size:18px;margin:5px 0}.now-playing #player-status{font-size:9px;margin:7px 0 0}.transport{display:flex;align-items:center;justify-content:center;gap:23px;margin:20px 0 13px}.transport>button{font-size:12px}.transport .primary-button{min-width:113px;padding:10px 18px}.play-timeline{display:flex;gap:12px;align-items:center;font-size:8px;color:var(--muted);margin-bottom:17px}.play-timeline progress{height:3px;width:100%;border:0;accent-color:#8c7799}.play-timeline span{white-space:nowrap}#spotify-embed iframe{display:block;border:0;max-width:100%;border-radius:10px}.playback-note{font-size:9px!important}.playback-note a,#lyrics-link{text-decoration:underline;text-underline-offset:3px}#track-list{margin-top:15px}.track-row{display:grid;grid-template-columns:20px 1fr 30px;gap:8px;align-items:center;text-align:left;width:100%;padding:10px 7px;border-bottom:1px solid var(--line);font-size:11px;line-height:1.4}.track-row>span:first-child,.track-row>span:last-child{font-size:9px;color:var(--muted)}.track-row.selected{background:#e7ddea;color:#684978}.local-audio{border-top:1px solid var(--line);padding:14px 0 0;margin-top:3px;font-size:11px}.local-audio summary{cursor:pointer}.file-choice{display:block;position:relative;background:#ece4ec;border:1px dashed #b5a1ba;padding:12px;text-align:center;font-size:11px;cursor:pointer;overflow:hidden;line-height:1.5}.file-choice input{display:block;max-width:100%;font-size:10px;margin-top:9px}.lyrics-dialog{width:710px;max-width:calc(100% - 24px);max-height:94dvh;overflow:auto}.lyric-view{background:#e7dfd3;min-height:280px;display:grid;place-items:center}.lyric-view img{display:block;max-width:100%;max-height:58dvh;object-fit:contain}.lyric-view img[hidden]{display:none}#empty-pages{text-align:center;padding:45px 30px}#empty-pages[hidden]{display:none}#empty-pages>span{font-size:38px;color:#a18baa}.page-controls{display:flex;justify-content:center;gap:24px;align-items:center;margin:15px 0;font-size:11px}.page-controls button{font-size:20px}.player-open .scene-tools{right:425px}.player-open .intro>p,.player-open .intro>h1,.player-open .intro>.member-note{display:none}
@media(max-width:700px){#player-panel{top:78px;bottom:103px;right:12px;left:12px;width:auto;padding:20px}.player-open .scene-tools{display:none}.lyrics-dialog{padding:20px}.lyric-view img{max-height:49dvh}.player-open .view-list{visibility:hidden}}
.track-row{font-size:12px}.play-timeline progress::-webkit-progress-bar{background:#ded4dc}.play-timeline progress::-webkit-progress-value{background:#90769b}.play-timeline progress::-moz-progress-bar{background:#90769b}
@media(max-width:700px){.music-mark{width:40px;height:40px}}
@media(max-width:700px){.view-list{gap:9px;padding:6px 11px}.view-list button{font-size:9px}.detail-view .view-list{padding:6px 11px}}

/* Portfolio presentation: text-led index and in-scene object identification. */
.collection-group{margin-top:34px}
.collection-group:first-child{margin-top:28px}
.collection-group h3{margin:0 0 6px;font-size:9px;font-weight:normal;letter-spacing:1.8px;text-transform:uppercase;color:var(--muted)}
.collection-entry{gap:18px;padding:14px 2px;transition:padding .2s,color .2s,background .2s}
.collection-entry:hover{padding-left:9px;color:#624f6b;background:#efe8ee66}
.collection-entry strong{font-size:15px;margin-bottom:5px}
.collection-entry small{font-size:9px;letter-spacing:.45px;text-transform:uppercase}
.collection-entry>span:last-child{font-size:11px}
.object-caption{position:fixed;right:94px;bottom:126px;z-index:4;min-width:220px;padding:13px 17px 14px;background:#f9f6f0e8;border:1px solid var(--line);border-left:3px solid #8f789b;box-shadow:0 8px 28px #45334113;backdrop-filter:blur(14px)}
.object-caption[hidden]{display:none}
.object-caption span,.object-caption strong{display:block}
.object-caption span{margin-bottom:6px;font-size:8px;letter-spacing:1.5px;text-transform:uppercase;color:var(--muted)}
.object-caption strong{font-size:15px;font-weight:normal}
@media(max-width:700px){.object-caption{right:16px;left:16px;bottom:162px;min-width:0;padding:10px 14px}.object-caption strong{font-size:13px}}

/* Lamp overrides sit beside the room's day/night switch. */
.lighting-controls{display:flex;align-items:center;gap:20px;flex-shrink:0}
.desk-lamp-control{display:grid;gap:6px;text-align:center}.desk-lamp-control>.eyebrow{font-size:7px;letter-spacing:1.4px;color:var(--muted)}
.lamp-options{display:flex;gap:2px;padding:3px;border:1px solid var(--line);border-radius:20px;background:#e3ddd64a}
.lamp-options button{min-width:38px;min-height:32px;padding:5px 10px;border-radius:16px;font-size:11px;color:var(--muted)}
.lamp-options button.active{background:#fbf8f2;color:#48654e;box-shadow:0 2px 8px #354b350a}
body.evening{--paper:#d3d8d2;--line:rgba(54,78,60,.20);--ink:#303e34;--muted:#5e7264}
@media(max-width:1100px){.gesture-hint{display:none}}
@media(max-width:700px){.lighting-controls{gap:8px}.desk-lamp-control{gap:3px}.lamp-options{padding:2px}.lamp-options button{min-width:32px;min-height:32px;padding:5px 6px}.bottom-bar{left:14px;right:14px}.light-switch button{min-height:40px;min-width:34px;padding:7px}.listening-note a span{display:none}.lighting-controls .light-switch{margin-top:12px}}
@media(max-width:360px){.bottom-bar{flex-wrap:wrap;justify-content:center;gap:4px;padding:8px 0}.listening-note{width:100%;justify-content:center}.view-list{bottom:137px}.scene-tools{bottom:192px}}
