.pipby-companion{--pipby-inset-left: max(12px, env(safe-area-inset-left));--pipby-inset-right: max(12px, env(safe-area-inset-right));--pipby-inset-top: max(20px, env(safe-area-inset-top));--pipby-inset-bottom: max(12px, env(safe-area-inset-bottom));position:fixed;right:max(24px,env(safe-area-inset-right));bottom:max(16px,env(safe-area-inset-bottom));z-index:55;width:94px;aspect-ratio:180 / 250;pointer-events:none;-webkit-user-select:none;user-select:none}.pipby-companion.is-positioned{top:0;left:0;right:auto;bottom:auto;transform:translate3d(var(--pipby-x),var(--pipby-y),0)}.pipby-companion .pipby-safe-area{position:absolute;inset:var(--pipby-inset-top) var(--pipby-inset-right) var(--pipby-inset-bottom) var(--pipby-inset-left);visibility:hidden}.pipby-companion .pipby-flight{width:100%;height:100%;animation:pipby-hover 3.2s ease-in-out infinite}.pipby-companion .pipby-artwork{position:relative;display:block;width:100%;height:100%;overflow:visible;filter:drop-shadow(0 3px 3px #6679a544)}.pipby-companion .pipby-front,.pipby-companion .pipby-profile{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;overflow:visible}.pipby-companion .pipby-profile,.pipby-companion[data-moving=true] .pipby-front{visibility:hidden}.pipby-companion[data-moving=true] .pipby-profile{visibility:visible}.pipby-companion[data-direction=left] .pipby-profile{transform:scaleX(-1)}.pipby-companion[data-moving=true] .pipby-flight{animation:pipby-fly-right 1.4s ease-in-out infinite}.pipby-companion[data-moving=true][data-direction=left] .pipby-flight{animation-name:pipby-fly-left}.pipby-companion .fairy-cape{transform-origin:90px 120px;animation:pipby-cape 3.2s ease-in-out infinite}.pipby-companion .fairy-wing{transform-origin:78px 126px;animation:pipby-wing-left 1.1s ease-in-out infinite}.pipby-companion .wing-right{transform-origin:102px 126px;animation-name:pipby-wing-right}.pipby-companion .wing-near,.pipby-companion .wing-far{transform-origin:91px 126px}.pipby-companion .wing-far{animation-name:pipby-wing-far}.pipby-companion[data-moving=true] .fairy-wing{animation-duration:.42s}.pipby-companion[data-moving=true] .fairy-cape{animation-duration:1.4s}.pipby-companion .human-eyes{transform-origin:90px 72px;animation:pipby-blink 5s infinite}.pipby-companion .fairy-orb{filter:drop-shadow(0 0 3px #d1fbaa)}.pipby-companion .fairy-sparkles{animation:pipby-glow 2.4s ease-in-out infinite}#root:has(.hall-ui) .pipby-companion:not(.is-positioned){right:max(240px,env(safe-area-inset-right))}@media(max-width:520px){.pipby-companion{right:max(12px,env(safe-area-inset-right));bottom:max(12px,env(safe-area-inset-bottom));width:72px}#root:has(.hall-ui) .pipby-companion:not(.is-positioned){right:max(166px,env(safe-area-inset-right))}}@keyframes pipby-hover{0%,to{transform:translateY(-2px) rotate(-1deg)}50%{transform:translateY(-6px) rotate(1deg)}}@keyframes pipby-fly-right{0%,to{transform:translateY(-2px) rotate(8deg)}50%{transform:translateY(-6px) rotate(5deg)}}@keyframes pipby-fly-left{0%,to{transform:translateY(-2px) rotate(-8deg)}50%{transform:translateY(-6px) rotate(-5deg)}}@keyframes pipby-cape{0%,to{transform:skew(-2deg)}50%{transform:skew(3deg) translateY(-1px)}}@keyframes pipby-wing-left{0%,to{transform:rotate(-8deg) scaleY(.85)}50%{transform:rotate(14deg) scaleY(1)}}@keyframes pipby-wing-right{0%,to{transform:rotate(8deg) scaleY(.85)}50%{transform:rotate(-14deg) scaleY(1)}}@keyframes pipby-wing-far{0%,to{transform:translate(9px,-3px) rotate(-10deg) scale(.8)}50%{transform:translate(9px,-3px) rotate(18deg) scale(.85)}}@keyframes pipby-blink{0%,43%,47%,to{transform:scaleY(1)}45%{transform:scaleY(.1)}}@keyframes pipby-glow{0%,to{opacity:.65}50%{opacity:1}}@media(prefers-reduced-motion:reduce){.pipby-companion .pipby-flight,.pipby-companion .fairy-cape,.pipby-companion .fairy-wing,.pipby-companion .human-eyes,.pipby-companion .fairy-sparkles{animation:none!important}}@media print{.pipby-companion{display:none}}*{box-sizing:border-box}:root{--paper: #f1efe7;--ink: #343b36;--muted: #7d8076;--line: #b8b9aa;--accent: #78876d;--serif: "Noto Serif SC", "Songti SC", "SimSun", serif}html,body,#root{height:100%;width:100%;margin:0;overflow:hidden}body{color:var(--ink);background:var(--paper);font-family:var(--serif);-webkit-font-smoothing:antialiased}button,input,select{font:inherit}button{cursor:pointer;color:inherit}button:disabled{cursor:default}button:focus-visible,input:focus-visible,select:focus-visible{outline:2px solid #8b7656;outline-offset:4px}.hall-canvas{position:fixed!important;top:0;right:0;bottom:0;left:0;touch-action:none}.hall-canvas canvas{cursor:grab}.entrance-canvas canvas{cursor:default}.paper-grain{position:fixed;top:0;right:0;bottom:0;left:0;pointer-events:none;z-index:15;opacity:.08;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='grain'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.75' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23grain)' opacity='.65'/%3E%3C/svg%3E")}.ginkgo-leaves{position:fixed;top:0;right:0;bottom:0;left:0;overflow:hidden;pointer-events:none;z-index:61}.ginkgo-fall{position:absolute;top:-70px;width:var(--leaf-size);animation:ginkgo-fall var(--fall-time) var(--leaf-delay) linear infinite}.ginkgo-leaf{display:block;width:100%;overflow:visible;transform-origin:50% 65%;animation:ginkgo-flutter 4.8s var(--leaf-delay) ease-in-out infinite alternate}@keyframes ginkgo-fall{0%{transform:translateZ(0);opacity:0}8%{opacity:.75}85%{opacity:.65}to{transform:translate3d(var(--leaf-drift),calc(100vh + 140px),0);opacity:0}}@keyframes ginkgo-flutter{0%{transform:translate(-12px) rotate(var(--leaf-turn)) scaleX(.65)}50%{transform:translate(9px) rotate(calc(var(--leaf-turn) + 55deg)) scaleX(1)}to{transform:translate(-4px) rotate(calc(var(--leaf-turn) + 125deg)) scaleX(.55)}}@media(max-width:600px){.ginkgo-fall:nth-child(2n){display:none}}@media(prefers-reduced-motion:reduce){.ginkgo-leaves{display:none}}.loading-mask{position:fixed;top:0;right:0;bottom:0;left:0;z-index:60;display:grid;place-items:center;align-content:center;gap:18px;color:#f4f8ed;background:linear-gradient(135deg,#4f6f3e,#6f9365 44%,#314d39);pointer-events:auto}.loading-mask:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;opacity:.16;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='180' height='180'%3E%3Cfilter id='g'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.62' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23g)' opacity='.7'/%3E%3C/svg%3E")}.loading-orb{position:relative;width:86px;height:86px;border:1px solid #dbe9c47d;border-radius:50%;display:grid;place-items:center;box-shadow:inset 0 0 0 10px #eff7e50f,0 16px 40px #1f35253b}.loading-orb:before{content:"";position:absolute;top:7px;right:7px;bottom:7px;left:7px;border-radius:50%;border:2px solid transparent;border-top-color:#f6ffe9;border-right-color:#d0e6b7;animation:loading-spin 1.05s linear infinite}.loading-orb:after{content:"";position:absolute;top:24px;right:24px;bottom:24px;left:24px;border:1px solid #edf7df75;border-radius:50%}.loading-orb span{width:9px;height:9px;border-radius:50%;background:#f7ffe8;box-shadow:0 0 20px #f5ffd3}.loading-mask p{position:relative;margin:0;font-size:13px;letter-spacing:.28em;text-indent:.28em}.loading-mask.is-fading{animation:loading-fade-out .8s ease-in-out forwards}@keyframes loading-fade-out{0%{opacity:1}to{opacity:0}}@keyframes loading-spin{to{transform:rotate(360deg)}}@keyframes loading-fade-in{0%{opacity:0}to{opacity:1}}.ui-root,.hall-ui{position:fixed;top:0;right:0;bottom:0;left:0;pointer-events:none;z-index:20}.hall-ui{z-index:0;transition:opacity .25s}.hall-map{position:absolute;bottom:75px;right:36px;width:178px;padding:12px 10px 8px;background:#f4f2e9e8;border:1px solid #c4c7b7;border-radius:3px}.map-title{display:grid;grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);align-items:center;gap:4px;font-size:10px;padding:0 5px}.map-title small{font-family:Georgia,serif;letter-spacing:.08em;color:#8a927b;white-space:nowrap}.map-heading{white-space:nowrap}.map-version{font-size:8px;text-align:center}.map-title .map-reset{justify-self:end}.map-reset{pointer-events:auto;display:grid;place-items:center;width:24px;height:24px;padding:0;border:0;border-radius:2px;background:transparent;font-size:18px;color:#6a7960}.map-reset:hover,.map-entrance:hover{background:#e2e5d8}.map-body{width:155px;height:155px;position:relative;margin:3px auto 0}.map-body svg{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%}.map-body polygon{fill:#e7e9df;stroke:#939d86;stroke-width:1}.map-body .map-inner{fill:#f3f2e9;stroke:#c7cbb9;stroke-dasharray:2 3}.map-door{pointer-events:auto;position:absolute;transform:translate(-50%,-50%);width:27px;height:27px;display:grid;place-items:center;font-family:Georgia,serif;font-size:10px;background:#f9f7ee;border:1px solid #acb29b;border-radius:2px}.map-door.selected{background:var(--room-color);color:#fff;border-color:var(--room-color)}.map-needle{position:absolute;left:66px;top:62px;height:32px;width:23px;text-align:center;font-size:24px;color:#6a7960}.map-entrance{pointer-events:auto;position:absolute;bottom:7px;left:50%;transform:translate(-50%);min-width:40px;padding:4px;border:0;border-radius:2px;background:transparent;text-align:center;font-size:8px;color:#7e876e}.map-actions{display:flex;align-items:center;gap:4px}.map-actions>p{flex:1;font-size:9px;margin:1px 0 0;color:#8a917b;text-align:center}.map-login{flex:none;pointer-events:auto;display:grid;place-items:center;width:26px;height:28px;padding:4px;border:0;border-radius:3px;background:transparent;color:#64725b}.map-login:hover{background:#e2e5d8}.map-login svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:1.3;stroke-linejoin:round}.map-user-label{pointer-events:auto;display:flex;align-items:center;gap:7px;width:100%;min-width:0;margin-top:7px;padding:7px 2px 0;border:0;border-top:1px solid #cbd1be;background:none;color:#53634c;text-align:left}.map-user-label>span{display:grid;place-items:center;width:20px;height:20px;flex:none;border:1px solid #aab49e;border-radius:50%;background:#e5e9dd;font-size:9px}.map-user-label>strong{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:10px;font-weight:500}.map-user-label:hover,.map-user-label.selected{color:#2f4734}.map-status{margin:7px 2px 0;border-top:1px solid #d4c3ba;padding-top:7px;color:#934f3f;font-size:9px;line-height:1.5}.scene-fallback{position:fixed;inset:40% 15% auto;text-align:center;font-size:17px;line-height:2}.empty-room{position:fixed;top:0;right:0;bottom:0;left:0;z-index:30;background:var(--paper)}.room-exit{position:absolute;top:max(20px,env(safe-area-inset-top));left:max(20px,env(safe-area-inset-left));display:grid;place-items:center;width:48px;height:48px;padding:12px;border:0;border-radius:4px;background:transparent;color:var(--ink)}.room-exit:hover{background:#deded266}.room-exit svg{width:24px;height:24px;fill:none;stroke:currentColor;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}.door-flash{position:fixed;top:0;right:0;bottom:0;left:0;z-index:100;background:#fff;opacity:0;pointer-events:none}.door-flash.is-active{pointer-events:auto}.entrance-ui{position:fixed;top:0;right:0;bottom:0;left:0;z-index:20;pointer-events:none}.filing-link{position:absolute;left:50%;bottom:14px;transform:translate(-50%);pointer-events:auto;color:#7c8273;font-size:10px;line-height:1.4;letter-spacing:.06em;text-decoration:none;opacity:.86;transition:color .2s,opacity .2s;white-space:nowrap}.filing-link:hover,.filing-link:focus-visible{color:#4e5b46;opacity:1;text-decoration:underline}.entrance-header{display:flex;justify-content:space-between;align-items:center;position:absolute;top:0;left:0;right:0;padding:29px 38px}.entrance-edition{display:flex;align-items:center;gap:13px;font-family:Georgia,serif;font-size:9px;letter-spacing:.17em;color:#828473}.entrance-edition i{width:29px;height:1px;background:#b4b5a6}.entrance-intro{position:absolute;left:4%;top:34%;transition:opacity .45s,transform .6s}.entrance-intro>p{font-size:10px;letter-spacing:.07em;color:#8b8b7b;margin:0 0 20px}.entrance-intro h1{font-size:clamp(24px,2.6vw,38px);font-weight:500;line-height:1.7;letter-spacing:.04em;margin:0 0 21px}.entrance-intro>span{display:block;font-size:12px;line-height:2;color:#808572}.entrance-flourish{font-size:39px;color:#99a086;margin:15px 0 0 80px;transform:rotate(12deg);font-family:Georgia,serif}.entrance-action{position:absolute;left:50%;bottom:76px;transform:translate(-50%);text-align:center;width:235px}.entry-invitation{display:block;font-size:9px;letter-spacing:.18em;color:#7d8370;margin-bottom:12px}.push-door{pointer-events:auto;background:#737f65;color:#fffef4;border:1px solid #606f53;border-radius:3px 7px 2px 4px;display:flex;align-items:center;justify-content:space-between;width:100%;padding:14px 24px;font-size:14px;letter-spacing:.12em;box-shadow:4px 4px #4d5a3f14;transition:background .2s,box-shadow .2s}.push-door:hover{background:#5c6f4f;box-shadow:5px 5px #4d5a3f20}.push-door span{font-size:21px;line-height:1}.push-door:disabled{opacity:.75;cursor:wait}.entrance-action>p{font-size:9px;letter-spacing:.06em;color:#858a76;margin:13px 0 0}.entrance-footer{position:absolute;bottom:24px;left:38px;right:38px;display:flex;align-items:center;justify-content:space-between;gap:20px;color:#838874}.entrance-footer span:first-child{font-family:Georgia,serif;font-size:13px;letter-spacing:.1em}.entrance-footer span:nth-child(2){font-size:10px;letter-spacing:.1em}.entrance-footer small{font-size:8px;letter-spacing:.09em}.facade-sign{display:flex;align-items:center;gap:12px;white-space:nowrap;text-align:center;color:#656b5c;pointer-events:none}.facade-sign>img{width:50px;height:50px;flex:0 0 50px;object-fit:contain}.facade-sign-copy{display:block}.facade-sign-copy>span{display:block;font-size:clamp(19px,2.2vw,29px);font-weight:500;letter-spacing:.08em}.facade-sign-copy small{display:block;font-family:Georgia,serif;font-size:9px;letter-spacing:.18em;margin-top:10px}.facade-plaque{background:#e3e0d4;border:1px solid #969c89;box-shadow:3px 3px #b1b3a5;border-radius:2px;text-align:center;padding:13px 18px;color:#7b836d;pointer-events:none}.facade-plaque small{display:block;font-size:8px;font-family:Georgia,serif;letter-spacing:.15em}.facade-plaque strong{display:block;font-family:Georgia,serif;font-size:29px;font-weight:400;margin:6px 0}.facade-plaque span{display:block;font-size:10px;white-space:nowrap}.entrance-ui.is-opening .entrance-intro{opacity:0;transform:translateY(-12px)}.entrance-ui.is-opening .entrance-header,.entrance-ui.is-opening .entrance-footer{opacity:0;transition:opacity .55s}.entrance-ui.is-opening .entry-invitation,.entrance-ui.is-opening .filing-link{opacity:0;transition:opacity .3s}@media(max-width:950px){.entrance-header{padding:23px}.entrance-intro{left:24px;top:26%;max-width:230px}.entrance-intro h1{font-size:25px}.entrance-intro>p{font-size:8px}.entrance-intro>span{font-size:10px}.entrance-footer{left:24px;right:24px}.entrance-footer small{display:none}}@media(max-width:600px){.entrance-header{padding:20px}.entrance-edition{font-size:7px;gap:6px}.entrance-edition i{width:14px}.entrance-intro{left:20px;right:20px;top:102px;max-width:none;text-align:center}.entrance-intro>p{font-size:9px;margin-bottom:9px}.entrance-intro h1{font-size:23px;line-height:1.65;margin:0}.entrance-intro h1 br{display:none}.entrance-intro>span,.entrance-flourish{display:none}.entrance-action{bottom:93px;width:215px}.entrance-footer{left:20px;right:20px;bottom:23px;flex-wrap:wrap;justify-content:center;gap:9px}.entrance-footer span:first-child{font-size:12px;width:100%;text-align:center}.entrance-footer span:nth-child(2){font-size:8px}.filing-link{bottom:10px;font-size:9px}}@media(max-height:620px)and (min-width:601px){.entrance-intro{top:25%}.entrance-intro h1{font-size:25px}.entrance-flourish{display:none}.entrance-action{bottom:48px}.entrance-footer{bottom:15px}}@media(max-width:800px){.hall-map{right:23px}}@media(max-width:520px){.map-title{padding:0}.hall-map{right:15px;bottom:68px;width:130px;padding:10px 4px 6px}.map-body{width:116px;height:116px}.map-door{width:23px;height:23px;font-size:9px}.map-needle{top:44px;left:46px}.map-entrance{bottom:7px;font-size:7px}.map-actions>p{font-size:8px}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-delay:0s!important;transition-duration:.01ms!important}}
