:root{--bg:#0b0d10;--edge:#252c31;--text:#e7ece9;--muted:#8d9893;--mint:#84efc1;--amber:#e6b77d;--accent:#ff6b5b;--dock-height:120px;color-scheme:dark;font-family:-apple-system,BlinkMacSystemFont,"Apple SD Gothic Neo","Noto Sans KR","Segoe UI",sans-serif}
html[data-floor=us]{--accent:#5fe3a1}
*{box-sizing:border-box}html,body{margin:0;min-width:320px;background:var(--bg);color:var(--text)}
button,input,select{font:inherit}button,select,a{-webkit-tap-highlight-color:transparent;touch-action:manipulation}button{cursor:pointer;color:var(--text)}button:disabled{cursor:default;opacity:.45}
button:focus-visible,a:focus-visible,select:focus-visible,canvas:focus-visible{outline:2px solid var(--mint);outline-offset:3px}a{color:inherit;text-decoration:none}
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
/* top bar + entrance selector */
.topbar{height:62px;border-bottom:1px solid var(--edge);display:flex;align-items:center;padding:0 max(20px,calc((100vw - 1500px)/2));gap:20px}
.brand{display:flex;align-items:center;font-size:21px;font-weight:750;letter-spacing:-1px}.brand>span:not(.brand-icon):not(.brand-dot){font-weight:450}.brand-dot{color:var(--mint)}
.brand-icon{display:inline-flex;align-items:center;justify-content:center;width:25px;height:25px;margin-right:9px;background:var(--mint);color:#10291f;font:bold 21px monospace;clip-path:polygon(0 0,80% 0,80% 20%,100% 20%,100% 100%,20% 100%,20% 80%,0 80%)}
.preview-tag{font:10px ui-monospace,monospace;letter-spacing:1.3px;color:var(--muted);border-left:1px solid var(--edge);padding-left:20px}
.entrance{display:flex;gap:4px;padding:3px;border:1px solid var(--edge);border-radius:8px;background:#0f1317}
.entrance a{display:flex;align-items:center;gap:7px;padding:7px 13px;border-radius:5px;font-size:12px;color:var(--muted);white-space:nowrap}
.entrance a:hover{color:#fff;background:#1a2026}.entrance a[aria-current=page]{background:#222a31;color:#fff;box-shadow:inset 0 -2px var(--accent)}
.flag{width:16px;height:11px;border-radius:2px;display:inline-block;flex:none}
.flag.kr{background:radial-gradient(circle at 50% 50%,#d6303a 0 2.4px,transparent 2.6px),radial-gradient(circle at 50% 62%,#2a5bb5 0 3px,transparent 3.2px),#f4f4f4}
.flag.us{background:linear-gradient(#3c3b6e 0 0) 0 0/7px 6px no-repeat,repeating-linear-gradient(#b22234 0 1.5px,#fff 1.5px 3px)}
.topbar-right{margin-left:auto;display:flex;align-items:center;gap:18px}
.connection{display:flex;align-items:center;gap:7px;font-size:11px;color:var(--muted)}.status-dot{display:inline-block;width:6px;height:6px;background:var(--amber);flex:none}.status-dot.live{background:var(--mint);box-shadow:0 0 8px #84efc155}
.langsw{display:flex;border:1px solid var(--edge);padding:3px;border-radius:5px;gap:2px}.langsw button{background:none;border:0;color:var(--muted);font:11px ui-monospace,monospace;padding:5px 8px;border-radius:2px}.langsw button[aria-pressed=true]{background:#2a3238;color:#fff}
html[data-floor=us] .langsw{display:none}
/* layout: the hall is the page */
.lounge-shell{max-width:1500px;margin:0 auto var(--dock-height);padding:14px 20px 16px;display:grid;grid-template-columns:minmax(0,1fr) 290px;gap:14px;height:calc(100dvh - 62px - var(--dock-height));min-height:560px}
.hall{position:relative;border-radius:10px;overflow:hidden;background:#07090b;border:1px solid #1c2227;box-shadow:0 20px 60px #000a;min-height:520px}
.hall-world{position:absolute;inset:0;transform-origin:50% 45%}
.hall-world.entering{transform:scale(1.22) translateY(4%);filter:brightness(.55)}
.hall-world.entered{transform:none;filter:none;transition:transform 1.5s cubic-bezier(.2,.7,.2,1),filter 1.2s ease}
#room-bg,#room-fg{position:absolute;inset:0;width:100%;height:100%;display:block}
#room-bg{touch-action:none;cursor:pointer}#room-fg{pointer-events:none;z-index:3}
/* the front wall: real DOM, so the TradingView frames stay crisp and clickable */
.front-wall{position:absolute;left:var(--wl,10%);top:var(--wt,3%);width:var(--ww,80%);height:var(--wh,55%);z-index:2;display:flex;flex-direction:column;gap:clamp(4px,.8vh,9px);padding:clamp(5px,1vh,12px) clamp(6px,1.6%,22px) 0}
.wall-sign{display:flex;justify-content:space-between;align-items:center;gap:10px;font:600 clamp(9px,1.1vw,12px)/1 ui-monospace,SFMono-Regular,Menlo,monospace;letter-spacing:.14em;color:#d8c8a8;text-shadow:0 0 12px #ffcf8a44;white-space:nowrap}
html[data-floor=us] .wall-sign{color:#cfe0f5;text-shadow:0 0 12px #8cc7ff44}
.wall-name{overflow:hidden;text-overflow:ellipsis}
.wall-clock{display:flex;gap:10px;align-items:center;letter-spacing:.06em}.wall-clock strong{font-weight:600;color:#ffd28a;font-variant-numeric:tabular-nums}
html[data-floor=us] .wall-clock strong{color:#9fe8c4}
#market-hours{font-size:.85em;color:#8f8a80;letter-spacing:.02em}#market-hours.open{color:var(--accent)}
.led-board{position:relative;flex:none;background:#030303;border:3px solid #26282b;border-radius:3px;box-shadow:0 0 0 1px #000,0 8px 30px #000c,inset 0 0 18px #000}
.led-board:after{content:"";position:absolute;inset:0;pointer-events:none;background:radial-gradient(circle,#0000 55%,#0006 56%) 0 0/3px 3px;opacity:.45}
.led-head{display:flex;justify-content:space-between;gap:8px;padding:3px 8px 0;font:10px ui-monospace,monospace;letter-spacing:.08em}
.led-title{color:#ff5a4a;text-shadow:0 0 6px #ff3a2a99;white-space:nowrap}html[data-floor=us] .led-title{color:#3ef08a;text-shadow:0 0 6px #2ad07a99}
.led-legend{color:#8a8a8a;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.led-tape{height:46px;overflow:hidden}
.led-krx{display:flex;gap:10px;justify-content:space-between;align-items:center;padding:3px 8px 4px;border-top:1px solid #1d1d1d;font:10px/1.3 ui-monospace,monospace;color:#ffb347;text-shadow:0 0 5px #ff9a2a66}
.led-krx[hidden]{display:none}.led-krx a{color:#ffd9a0;text-decoration:underline;white-space:nowrap}
/* Korean convention (up = red, down = blue): hue-rotate the TradingView frames on the Korean floor. */
.tv-skin iframe{color-scheme:normal}
.floor-kr .tv-skin iframe{color-scheme:normal;filter:hue-rotate(200deg) saturate(1.15)}
.wall-screen{position:relative;flex:1;min-height:0;display:flex;flex-direction:column;background:#06080b;border:clamp(4px,.6vw,8px) solid #15181c;border-bottom-width:clamp(6px,.9vw,12px);border-radius:4px;box-shadow:0 0 0 1px #2c3238,0 0 50px #4aa3ff22,0 18px 40px #000d}
.floor-kr .wall-screen{box-shadow:0 0 0 1px #3a3128,0 0 50px #ff6b5b1c,0 18px 40px #000d}
.screen-tabs{display:flex;gap:3px;overflow-x:auto;scrollbar-width:none;padding:4px;background:#0c0f12;border-bottom:1px solid #1c2126;flex:none}
.screen-tabs::-webkit-scrollbar{display:none}
.screen-tabs button{flex:none;height:26px;padding:0 11px;border:1px solid transparent;border-radius:4px;background:transparent;color:#97a3ad;font-size:11px;white-space:nowrap}
.screen-tabs button:hover{background:#192027;color:#e3e9ee}.screen-tabs button.active{background:#1f2a33;border-color:#3a4a58;color:#fff;box-shadow:inset 0 -2px var(--accent)}
.chart-stage{position:relative;flex:1;min-height:0}
#chart-host{position:absolute;inset:0}.tradingview-widget-container,.tradingview-widget-container__widget{height:100%;width:100%}
.chart-loading{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;gap:12px;background:#06080b;color:var(--muted);font-size:12px;pointer-events:none;text-align:center;padding:12px}
.chart-loading[hidden]{display:none}.pixel-loader{width:7px;height:7px;background:var(--mint);box-shadow:10px 0 #84efc177,20px 0 #84efc133;margin-right:18px;animation:blink 1s steps(2) infinite}
@keyframes blink{50%{opacity:.3}}
.screen-foot{display:flex;justify-content:space-between;gap:10px;align-items:center;min-height:20px;padding:2px 8px;font-size:9.5px;color:#8a949c;border-top:1px solid #1c2126;flex:none}
.screen-foot a{color:#d0dae2;text-decoration:underline}.data-note{text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
/* HUD on the floor */
.hall-hud{position:absolute;left:12px;bottom:12px;z-index:4}
.room-choice{display:flex;align-items:center;gap:8px;background:#0b0e11d9;border:1px solid #2a3238;border-radius:6px;padding:4px 8px 4px 4px;backdrop-filter:blur(4px)}
.room-choice select{background:#151a1f;color:var(--text);border:1px solid #2c343b;padding:6px 22px 6px 8px;border-radius:4px;font:11px ui-monospace,monospace}
.occupancy{font:11px ui-monospace,monospace;color:var(--muted)}.occupancy strong{font-weight:500;color:var(--mint)}
.floor-notice{position:absolute;left:50%;bottom:58px;transform:translateX(-50%);z-index:4;max-width:88%;background:#0d1114e6;border:1px solid #3b4a44;font-size:11.5px;padding:7px 13px;border-radius:5px;text-align:center;pointer-events:none}
.floor-notice:empty,.floor-notice[hidden]{display:none}
.floor-bottom{position:absolute;right:12px;bottom:14px;z-index:4;display:flex;align-items:center;gap:10px}
.floor-bottom>span{display:flex;align-items:center;gap:3px;color:#a3aea9;font-size:10px;background:#0b0e11c9;padding:5px 8px;border-radius:5px}
#move-text{margin-left:5px}
.keycap{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;border:1px solid #3a4946;border-bottom-width:2px;background:#1b2524;color:#b5c9c0;border-radius:3px;font:10px monospace}
#chat-toggle{display:none;border:1px solid #3a4946;background:#141b1f;font-size:11px;padding:7px 10px;border-radius:5px}#chat-count{color:var(--mint);margin-left:4px}
.dpad{display:none;position:absolute;right:12px;bottom:56px;z-index:4;grid-template-columns:repeat(3,34px);grid-template-rows:repeat(2,32px);gap:3px}
.dpad button{border:1px solid #52695e;background:#1c2b24d9;border-radius:5px;color:#c2e8d3;font:15px monospace;touch-action:none;user-select:none}
.dpad button[data-direction=up]{grid-column:2}.dpad button[data-direction=left]{grid-column:1;grid-row:2}.dpad button[data-direction=down]{grid-column:2;grid-row:2}.dpad button[data-direction=right]{grid-column:3;grid-row:2}.dpad button:active{background:#375a47}
/* automatic glass doors on arrival */
.entry-doors{position:absolute;inset:0;z-index:6;pointer-events:none;display:flex;align-items:center;justify-content:center}
.entry-doors .door{position:absolute;top:0;bottom:0;width:50%;background:linear-gradient(90deg,#9fb6c622,#cfe3ef3a 40%,#9fb6c61c),#0b1014e8;border:2px solid #4a5a66;transition:transform 1.1s cubic-bezier(.6,.05,.3,1) .15s}
.entry-doors .door.left{left:0;border-right-width:1px}.entry-doors .door.right{right:0;border-left-width:1px}
.door-sign{position:relative;font:700 14px ui-monospace,monospace;letter-spacing:.35em;color:#e9f3f8;background:#0008;padding:8px 14px;border:1px solid #fff3;transition:opacity .4s}
.entry-doors.open .door.left{transform:translateX(-102%)}.entry-doors.open .door.right{transform:translateX(102%)}.entry-doors.open .door-sign{opacity:0}
/* conversation */
.conversation{display:flex;flex-direction:column;min-height:0;background:#0f1317;border:1px solid var(--edge);border-radius:10px;overflow:hidden}
.conversation-heading{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px;padding:14px 14px 10px;font-size:11px;letter-spacing:.4px;border-bottom:1px solid #1c2227}
.ephemeral{color:#718077;font-size:9.5px}
#chat-log{flex:1;overflow-y:auto;scrollbar-width:thin;scrollbar-color:#384640 transparent;padding:0 14px 12px}
#chat-empty{padding:30px 0;text-align:center;color:#9ca8a1;font-size:12px}
.empty-chat-icon{display:inline-block;border:1px solid #44584c;padding:0 10px 4px;font:24px monospace;color:#a4c1ad;margin-bottom:5px}
.chat-line{margin:11px 0;font-size:12px;overflow-wrap:anywhere;line-height:1.55}.chat-line strong{display:block;font:10px ui-monospace,monospace;color:var(--mint);margin-bottom:2px}.chat-line p{margin:0;color:#c7cec9}
.source-box{border-top:1px solid #1c2227;padding:10px 14px;font-size:10.5px;line-height:1.55;color:#9aa5a0;max-height:45%;overflow:auto}
.source-box summary{cursor:pointer;color:#cfd8d3;font-size:11px}.source-box p{margin:8px 0 0}.source-box b{color:#dfe7e2;font-weight:600}
/* bottom dock */
.bottom-dock{position:fixed;bottom:0;left:0;right:0;z-index:7;border-top:1px solid var(--edge);background:#0e1215f2;backdrop-filter:blur(6px);padding:10px max(20px,calc((100vw - 1500px)/2)) env(safe-area-inset-bottom)}
#chat-form{display:flex;align-items:center;gap:18px}.identity{display:flex;gap:12px;align-items:center;min-width:160px}
.identity-label{display:block;color:#78867e;font-size:9px;letter-spacing:.8px;margin-bottom:4px}#my-nick{font:11px ui-monospace,monospace;font-weight:500}
.mini-avatar{--skin:var(--mint);display:block;width:20px;height:22px;position:relative;background:var(--skin);border:4px solid #253a32;box-shadow:0 3px #070b09;margin-top:8px}
.mini-avatar:before{content:"";position:absolute;width:14px;height:12px;top:-13px;left:-1px;background:#2b2420;border-radius:5px 5px 2px 2px}
.composer{display:flex;align-items:center;flex:1;min-width:0;background:#1a2026;border:1px solid #34423b;border-radius:6px;padding:4px;gap:10px}.composer:focus-within{border-color:#7baf94}
#chat-input{min-width:0;flex:1;border:0;background:transparent;color:var(--text);padding:9px 10px;outline:0;font-size:13px}#chat-input::placeholder{color:#748079}
#char-count{font:10px ui-monospace,monospace;color:#7f8e84;white-space:nowrap}
#send-button{background:var(--mint);color:#173b2b;border:0;border-radius:4px;padding:9px 16px;font-size:12px;font-weight:600;white-space:nowrap}
.composer-meta{display:flex;justify-content:space-between;gap:12px;color:#8a978f;font-size:9.5px;margin:7px 0 6px;min-height:12px;padding-left:178px}#chat-status.error{color:#edb88e}
footer{border-top:1px solid #222c28;padding:6px 0 8px;color:#89968f;font-size:10px;line-height:1.5;text-align:center}
.no-script{position:fixed;top:70px;left:10px;right:10px;background:#463724;padding:20px;z-index:9}
@media (max-width:1100px){.lounge-shell{grid-template-columns:minmax(0,1fr) 250px}.preview-tag{display:none}}
@media (max-width:900px){
  .lounge-shell{grid-template-columns:1fr;height:auto;min-height:0;padding:10px 10px 12px}
  .hall{height:min(760px,calc(100dvh - 62px - var(--dock-height) - 20px));min-height:560px}
  #chat-toggle{display:inline-block}.floor-bottom>span{display:none}
  .conversation{position:fixed;left:10px;right:10px;bottom:calc(var(--dock-height) + 8px);height:min(55vh,420px);z-index:8;display:none;box-shadow:0 10px 40px #000c}
  .conversation.open{display:flex}
  .dpad{display:grid}
}
@media (max-width:650px){
  .topbar{height:auto;min-height:54px;flex-wrap:wrap;gap:8px 12px;padding:8px 12px}
  .brand{font-size:18px}.brand-icon{width:21px;height:21px;font-size:17px}
  .entrance{order:3;width:100%;justify-content:stretch}.entrance a{flex:1;justify-content:center;padding:7px 8px}
  .topbar-right{gap:10px}.connection{font-size:10px}
  .hall{height:calc(100dvh - 110px - var(--dock-height) - 16px);min-height:600px}
  .wall-sign{font-size:9px;letter-spacing:.06em}.wall-name{max-width:58%}
  .led-legend{display:none}.led-krx{font-size:9px}
  .screen-tabs button{height:24px;padding:0 9px;font-size:10.5px}
  .screen-foot{font-size:8.5px}.data-note{max-width:60%}
  .identity{display:none}.composer-meta{padding-left:0}.anon-label{display:none}
  #chat-form{gap:8px}footer{font-size:9px}
}
@media (prefers-reduced-motion:reduce){.hall-world.entered,.entry-doors .door{transition:none}}

.room-name{font:11px ui-monospace,monospace;color:var(--text);padding:4px 6px;letter-spacing:.04em}
.chat-line.staff strong{color:#b9ad86}.chat-line.staff em{font-style:normal;background:#e9c46a;color:#1a1406;border-radius:3px;padding:0 4px;margin-right:2px}.chat-line.staff p{color:#8d948f;font-style:italic}
.chat-line.npc small{font:9px ui-monospace,monospace;opacity:.35;margin-left:3px;color:#c9d2d8;vertical-align:1px}
