*{box-sizing:border-box}
html,body{margin:0;width:100%;height:100%;overflow:hidden;background:#171411}
canvas{display:block;width:100%;height:100%;touch-action:none;outline:none}
#error{color:#eee;font:16px sans-serif;padding:28px;display:none}
#loading{position:fixed;inset:0;display:grid;place-items:center;color:#e9ded0;font:14px sans-serif;pointer-events:none;background:#171411;z-index:2}
.loading-inner{display:flex;flex-direction:column;align-items:center;gap:14px}
.loading-spinner{width:34px;height:34px;border-radius:50%;border:3px solid rgba(233,222,208,.22);border-top-color:#e9ded0;animation:tearoom-spin .9s linear infinite}
@keyframes tearoom-spin{to{transform:rotate(360deg)}}
.loading-text{margin:0;letter-spacing:.02em}
.loading-bar{width:160px;height:3px;background:rgba(233,222,208,.18);border-radius:999px;overflow:hidden}
.loading-bar-fill{height:100%;width:0%;background:#e9ded0;border-radius:999px;transition:width .2s ease}
.tearoom-back{position:fixed;top:16px;left:16px;z-index:9;color:#e9ded0;text-decoration:none;font:14px/1 -apple-system,BlinkMacSystemFont,"Noto Sans KR",sans-serif;letter-spacing:.02em;padding:10px 14px;background:rgba(23,20,17,.55);border:1px solid rgba(233,222,208,.25);border-radius:999px;backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);transition:opacity .2s ease,background .2s ease}
.tearoom-back:hover{background:rgba(23,20,17,.8)}
#introOverlay{position:fixed;inset:0;z-index:20;overflow-y:auto;-webkit-overflow-scrolling:touch;background:#171411;color:#f3ece1;font-family:-apple-system,BlinkMacSystemFont,"Noto Sans KR",sans-serif;transition:opacity .5s ease,visibility .5s ease}
#introOverlay.hide{opacity:0;visibility:hidden;pointer-events:none}
.intro-spacer-top{height:16vh}
.intro-spacer-bottom{height:55vh}
.intro-content{max-width:420px;margin:0 auto;padding:0 28px;text-align:center}
.intro-eyebrow{margin:0 0 10px;font-size:13px;letter-spacing:.14em;color:#cdbfa8;text-transform:uppercase}
.intro-title{margin:0 0 22px;font-size:24px;letter-spacing:.02em;color:#fff9f0;font-weight:600;font-family:'Noto Serif KR',serif}
.intro-body{margin:0;font-size:15px;line-height:1.9;color:#e6dfd1}
.intro-enter-btn{position:fixed;left:50%;bottom:7vh;transform:translateX(-50%);z-index:21;padding:14px 40px;border-radius:999px;border:1px solid rgba(233,222,208,.3);background:rgba(23,20,17,.5);color:#8f8477;font:14px/1 -apple-system,BlinkMacSystemFont,"Noto Sans KR",sans-serif;letter-spacing:.06em;cursor:not-allowed;opacity:1;transition:background .35s ease,color .35s ease,border-color .35s ease,transform .2s ease,opacity .5s ease}
.intro-enter-btn.active{cursor:pointer;color:#171411;background:#f3ece1;border-color:#f3ece1}
.intro-enter-btn.active:hover{transform:translateX(-50%) scale(1.04)}
.intro-enter-btn.hide{opacity:0;pointer-events:none}
.intro-scroll-indicator{position:fixed;left:50%;bottom:15vh;transform:translateX(-50%);z-index:21;width:24px;height:24px;transition:opacity .4s ease}
.intro-scroll-indicator.hide{opacity:0}
.intro-scroll-indicator .chevron{position:absolute;left:0;top:0;width:100%;height:8px;opacity:1}
.intro-scroll-indicator .chevron:before,.intro-scroll-indicator .chevron:after{content:"";position:absolute;top:0;height:100%;width:52%;background:#cdbfa8}
.intro-scroll-indicator .chevron:before{left:0;transform:skewY(28deg)}
.intro-scroll-indicator .chevron:after{right:0;transform:skewY(-28deg)}
.intro-scroll-indicator .chevron:nth-child(1){top:0}
.intro-scroll-indicator .chevron:nth-child(2){top:8px}
.intro-scroll-indicator .chevron:nth-child(3){top:16px}
@media (min-width:721px){
  .intro-spacer-top{height:30vh}
  .intro-spacer-bottom{height:26vh}
  .intro-enter-btn{bottom:16vh}
  .intro-scroll-indicator{bottom:24vh}
}
.room-cam-hint{position:fixed;top:22vh;left:50%;transform:translateX(-50%);z-index:8;max-width:88vw;text-align:center;background:rgba(23,20,17,.72);color:#fff9f0;font:14px/1.5 -apple-system,BlinkMacSystemFont,"Noto Sans KR",sans-serif;letter-spacing:.02em;padding:13px 22px;border-radius:999px;border:1px solid rgba(233,222,208,.35);box-shadow:0 8px 26px rgba(0,0,0,.4);backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);opacity:0;pointer-events:none;transition:opacity .5s ease;animation:cam-hint-breathe 2.4s ease-in-out infinite}
.room-cam-hint.show{opacity:1}
@keyframes cam-hint-breathe{0%,100%{transform:translateX(-50%) scale(1)}50%{transform:translateX(-50%) scale(1.035)}}
.octagon-blink{animation:octagon-blink 2.1s ease-in-out infinite}
@keyframes octagon-blink{0%,100%{opacity:1}50%{opacity:.18}}
