:root{--bg: #111318;--panel: #1a1d24;--border: #2a2f3a;--text: #d8dbe2;--muted: #7d838f;--accent: #e0b25a;--room: #9ad0ff;--combat: #ff8a80;--say: #b6e3a1;--tell: #f2a7d8;--yell: #ffb86b;--group: #c6b5ff;--family: #8fd3c7;--error: #ff6b6b;font-family:Noto Sans KR,Malgun Gothic,system-ui,sans-serif}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{background:var(--bg);color:var(--text);overflow:hidden}.layout{display:grid;grid-template-columns:1fr 300px;grid-template-rows:1fr;height:100%;height:100dvh;overflow:hidden}.tabbar{display:none}.log-pane{display:flex;flex-direction:column;min-width:0;min-height:0}.log{flex:1;min-height:0;overflow-y:auto;padding:16px;font-family:D2Coding,Consolas,monospace;font-size:14px;line-height:1.5;white-space:pre-wrap;word-break:break-all}.line{margin-bottom:4px}.ch-system{color:var(--muted)}.ch-room{color:var(--room)}.ch-combat{color:var(--combat)}.ch-say{color:var(--say)}.ch-tell{color:var(--tell)}.ch-yell{color:var(--yell)}.ch-group{color:var(--group)}.ch-family{color:var(--family)}.ch-error{color:var(--error)}.entities .leader,.from{color:var(--accent)}.input-row{display:flex;gap:8px;padding:12px 16px;border-top:1px solid var(--border)}.input-row input{flex:1;padding:10px 12px;font-size:16px;min-width:0;background:var(--panel);color:var(--text);border:1px solid var(--border);border-radius:6px}.input-row button,.exits button{padding:8px 14px;background:var(--panel);color:var(--text);border:1px solid var(--border);border-radius:6px;cursor:pointer}.input-row button:hover,.exits button:hover{border-color:var(--accent)}.side-pane{border-left:1px solid var(--border);padding:12px;overflow-y:auto;min-height:0}.panel{background:var(--panel);border:1px solid var(--border);border-radius:8px;padding:12px;margin-bottom:12px}.panel h2{margin:0;font-size:13px;color:var(--accent);text-transform:uppercase;letter-spacing:.05em;display:inline}.panel>summary{list-style:none;cursor:pointer;margin:0 0 8px;-webkit-user-select:none;user-select:none}.panel>summary::-webkit-details-marker{display:none}.panel>summary:before{content:"▾";display:inline-block;width:14px;color:var(--muted);font-size:12px}.panel:not([open])>summary{margin-bottom:0}.panel:not([open])>summary:before{content:"▸"}.panel dl{display:grid;grid-template-columns:auto 1fr;gap:4px 12px;margin:0;font-size:14px}.panel dt{color:var(--muted)}.panel dd{margin:0}.muted{color:var(--muted);font-size:14px;margin:0}.room-name{margin:0 0 8px;font-weight:600;color:var(--room)}.exits{display:flex;flex-wrap:wrap;gap:6px}.exits button:disabled{opacity:.5;cursor:default}.entities{list-style:none;margin:10px 0 0;padding:0;font-size:14px}.entities li{padding:2px 0;color:var(--muted)}.entities .link{background:none;border:none;padding:0;color:var(--text);cursor:pointer;font:inherit}.entities .link:hover{color:var(--accent);text-decoration:underline}.entities .slot{color:var(--muted);font-size:12px}.entities .actions{float:right;display:inline-flex;gap:4px}.entities .mini{background:var(--panel);color:var(--muted);border:1px solid var(--border);border-radius:4px;padding:0 6px;font-size:11px;cursor:pointer}.entities .mini:hover{color:var(--text);border-color:var(--accent)}.ch-broadcast{color:var(--accent)}.entities .price{float:right;color:var(--accent);font-size:12px}.badge{margin-left:8px;padding:1px 6px;font-size:10px;border-radius:4px;background:var(--combat);color:#111}.entities li.fighting .link{color:var(--combat)}.hpbar{display:inline-block;vertical-align:middle;width:60px;height:6px;margin-left:6px;background:var(--border);border-radius:3px;overflow:hidden}.hpfill{display:block;height:100%;background:var(--combat)}.quick{display:flex;gap:6px;padding:6px 16px 0;flex-wrap:wrap}.quick button{padding:4px 10px;font-size:12px;background:var(--panel);color:var(--muted);border:1px solid var(--border);border-radius:12px;cursor:pointer}.quick button:hover:not(:disabled){color:var(--text);border-color:var(--accent)}.quick button:disabled{opacity:.4;cursor:default}.quick button.target{color:var(--combat);border-color:var(--combat)}@keyframes flash{0%{background:#e0b25a47}to{background:transparent}}.line.fresh{animation:flash 2s ease-out 1;border-radius:3px}.line.fresh.ch-error{animation:flash-error 2s ease-out 1}@keyframes flash-error{0%{background:#ff6b6b59}to{background:transparent}}.log-pane{position:relative}.jump{position:absolute;right:24px;bottom:96px;z-index:2;padding:6px 12px;font-size:12px;border-radius:14px;cursor:pointer;background:var(--accent);color:#111;border:none;box-shadow:0 2px 8px #0006}.combatbar{display:flex;align-items:center;gap:8px;padding:6px 16px;font-size:12px;border-top:1px solid var(--border);background:var(--panel);color:var(--text)}.combatbar .who{font-weight:600;white-space:nowrap}.combatbar .num{color:var(--muted);font-variant-numeric:tabular-nums}.combatbar .vs{color:var(--muted)}.hpbar.big{width:90px;height:8px;margin-left:0}.hpfill.danger{background:var(--error)}.log-pane.low-hp .input-row input{border-color:var(--error);box-shadow:0 0 0 1px #ff6b6b66 inset}.panel dd.warn{color:var(--error);font-weight:600}.banner{display:flex;align-items:center;justify-content:space-between;gap:8px;margin:0 16px;padding:6px 12px;font-size:12px;border-radius:6px}.banner.offline{background:#ff6b6b26;border:1px solid var(--error);color:var(--text)}.banner.idle{background:#e0b25a26;border:1px solid var(--accent);color:var(--text)}.banner button{padding:3px 10px;font-size:12px;border-radius:10px;cursor:pointer;background:var(--panel);color:var(--text);border:1px solid var(--border)}.banner button:hover{border-color:var(--accent)}.suggest{display:flex;align-items:center;gap:6px;padding:6px 16px 0;flex-wrap:wrap;font-size:12px}.suggest button{padding:3px 10px;font-size:12px;border-radius:10px;cursor:pointer;background:var(--panel);color:var(--accent);border:1px solid var(--accent)}.suggest button:hover{background:var(--accent);color:#111}.asking-prompt{margin:6px 16px 0;padding:4px 10px;font-size:12px;color:var(--accent);border-left:3px solid var(--accent);white-space:pre-wrap}.input-row.asking input{border-color:var(--accent);background:#22201a}.helpcard{position:absolute;left:16px;right:16px;top:12px;max-height:60%;z-index:3;display:flex;flex-direction:column;background:var(--panel);border:1px solid var(--accent);border-radius:8px;box-shadow:0 4px 16px #00000080}.helphead{display:flex;justify-content:space-between;align-items:center;padding:8px 12px;border-bottom:1px solid var(--border);font-size:12px;color:var(--accent)}.helphead .mini{background:var(--panel);color:var(--text);border:1px solid var(--border);border-radius:4px;padding:2px 8px;font-size:12px;cursor:pointer}.helpcard pre{margin:0;padding:10px 12px;overflow:auto;font-family:D2Coding,Consolas,monospace;font-size:13px;line-height:1.45;white-space:pre-wrap;word-break:break-all}.roombar{display:flex;flex-direction:column;gap:4px;padding:6px 16px 0;font-size:12px}.roombar .exits-row,.roombar .chips{display:flex;align-items:center;gap:6px;overflow-x:auto;scrollbar-width:thin;padding-bottom:2px}.roombar .lead{flex:none;color:var(--muted);font-size:11px}.roombar .exits-row button{flex:none;padding:4px 12px;font-size:13px;cursor:pointer;white-space:nowrap;background:var(--panel);color:var(--room);border:1px solid var(--room);border-radius:6px}.roombar .exits-row button:hover:not(:disabled){background:var(--room);color:#111}.roombar .exits-row button.closed{border-style:dashed}.roombar .exits-row button:disabled{opacity:.35;cursor:default}.roombar .chip{flex:none;display:inline-flex;align-items:center;gap:6px;padding:3px 10px;font-size:12px;cursor:pointer;background:var(--panel);color:var(--text);border:1px solid var(--border);border-radius:12px;white-space:nowrap}.roombar .chip:hover{border-color:var(--accent)}.roombar .chip .lv{color:var(--muted);font-size:11px}.roombar .chip .hpbar{width:36px;height:5px;margin-left:0}.roombar .chip.player{color:var(--muted)}.roombar .chip.selected{border-color:var(--accent);color:var(--accent);background:#26231a}.roombar .chip.fighting{border-color:var(--combat)}.roombar .chip.fighting .name{color:var(--combat)}.roombar .menu{display:flex;align-items:center;gap:4px;flex-wrap:wrap;padding:6px;background:var(--bg);border:1px solid var(--accent);border-radius:6px}.roombar .menu .who{color:var(--accent);margin-right:4px}.roombar .menu button{padding:5px 12px;font-size:12px;cursor:pointer;background:var(--panel);color:var(--text);border:1px solid var(--border);border-radius:4px}.roombar .menu button:hover{border-color:var(--accent)}.roombar .menu button.primary{color:var(--combat);border-color:var(--combat);font-weight:600}.roombar .menu button.danger{color:var(--error);border-color:var(--error)}.roombar .menu button.skill{color:var(--accent)}.roombar .menu button.close{margin-left:auto;color:var(--muted)}.entities li,.roombar,.toolbar button,.dirpad button,.tabbar button{-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;touch-action:manipulation}.toolbar{display:flex;align-items:flex-start;gap:6px;padding:6px 16px 0}.toolbar .foldcol{flex:none;display:flex;flex-direction:column;gap:4px}.toolbar .fold{flex:none;padding:4px 8px;font-size:12px;background:none;color:var(--muted);border:1px solid var(--border);border-radius:12px;cursor:pointer}.toolbar .fold:hover{color:var(--text);border-color:var(--accent)}.toolbar .fold.more{display:none}.toolbar .groups{display:flex;align-items:center;gap:6px;overflow-x:auto;white-space:nowrap;flex:1;min-width:0;padding-bottom:2px;scrollbar-width:thin}.toolbar .group{display:inline-flex;gap:6px;padding-right:8px;border-right:1px solid var(--border)}.toolbar .group:last-child{border-right:none}.toolbar .groups button{position:relative;padding:4px 10px;font-size:12px;background:var(--panel);color:var(--muted);border:1px solid var(--border);border-radius:12px;cursor:pointer;white-space:nowrap}.toolbar .groups button sup{position:absolute;top:-6px;right:4px;font-size:9px;color:var(--muted);opacity:.8}.toolbar .groups button:hover:not(:disabled){color:var(--text);border-color:var(--accent)}.toolbar .groups button:disabled{opacity:.4;cursor:default}.toolbar .groups button.primary{color:var(--combat);border-color:var(--combat);font-weight:600}.toolbar .groups button.primary:hover:not(:disabled){background:var(--combat);color:#111}.toolbar .groups button.danger:not(:disabled){color:var(--error);border-color:var(--error)}.toolbar .groups button.aim:not(:disabled){color:var(--text);border-style:dashed;border-color:var(--combat)}.toolbar .groups button.fav{color:var(--accent);border-color:var(--accent)}.toolbar .groups button.fav.add{padding:4px 8px}.toolbar .groups button.freq{color:var(--say)}.toolbar .groups button.here{color:var(--room);border-color:var(--room)}.toolbar .groups button.here:hover:not(:disabled){background:var(--room);color:#111}.entities .mini.here{color:var(--room);border-color:var(--room)}.toolbar .groups button.on{color:var(--text);border-color:var(--accent)}.toolbar .targetsel{display:inline-flex;align-items:center;gap:4px;font-size:12px;color:var(--muted);padding-right:8px;border-right:1px solid var(--border)}.toolbar .targetsel select{font-size:12px;background:var(--panel);color:var(--text);border:1px solid var(--border);border-radius:6px;padding:3px 6px;max-width:140px}.toolbar.collapsed{padding-bottom:0}.favform,.favmenu{display:flex;align-items:center;gap:6px;flex-wrap:wrap;padding:6px 16px 0;font-size:12px}.favform input{font-size:13px;padding:4px 8px;background:var(--panel);color:var(--text);border:1px solid var(--border);border-radius:6px;min-width:0}.favform input:first-child{width:110px}.favform input:nth-child(2){flex:1;min-width:160px}.favform button,.favmenu button{padding:3px 10px;font-size:12px;border-radius:10px;cursor:pointer;background:var(--panel);color:var(--text);border:1px solid var(--border)}.favform button:hover:not(:disabled),.favmenu button:hover{border-color:var(--accent)}.favmenu span{color:var(--accent)}.skills{display:flex;gap:6px;padding:6px 16px 0;flex-wrap:wrap;align-items:center;font-size:12px}.skills button{padding:4px 10px;font-size:12px;background:var(--panel);color:var(--text);border:1px solid var(--border);border-radius:12px;cursor:pointer}.skills button:hover:not(:disabled){border-color:var(--accent)}.skills button.aim{border-style:dashed}.skills button.aim:not(:disabled){border-style:solid;border-color:var(--combat);color:var(--combat)}.skills button:disabled{opacity:.4;cursor:default}.entities .menu button.skill{color:var(--accent)}.quick button.on{color:var(--text);border-color:var(--accent)}.channels{display:flex;gap:12px;flex-wrap:wrap;padding:6px 16px 0;font-size:12px}.channels label{display:inline-flex;align-items:center;gap:4px;cursor:pointer}.channels label.off span{opacity:.45;text-decoration:line-through}.maptools{display:flex;justify-content:space-between;align-items:center;margin-bottom:6px;font-size:12px}.maptools .mini{background:var(--panel);color:var(--text);border:1px solid var(--border);border-radius:4px;padding:2px 8px;font-size:12px;cursor:pointer}.minimap.r5 .map-room text{font-size:9px}.entities .stat{margin-left:6px;font-size:11px;color:var(--muted);font-variant-numeric:tabular-nums}.entities .stat.mine{color:var(--accent)}.entities .cond{margin-left:6px;font-size:11px}.entities .cond.broken{color:var(--error);font-weight:600}.entities .cond.weak{color:var(--yell)}.entities li.poor .price,.entities li.poor .link{color:var(--muted)}.panel .cat{margin:8px 0 0;font-size:12px;color:var(--accent)}.panel .small{font-size:12px;margin-bottom:4px}.entities .slot{margin-left:6px}.entities li{position:relative}.entities .menu{display:flex;gap:4px;flex-wrap:wrap;margin:4px 0 2px;padding:6px;clear:both;background:var(--bg);border:1px solid var(--accent);border-radius:6px}.entities .menu button{padding:4px 10px;font-size:12px;cursor:pointer;background:var(--panel);color:var(--text);border:1px solid var(--border);border-radius:4px}.entities .menu button:hover{border-color:var(--accent)}.entities .menu button.danger{color:var(--combat);border-color:var(--combat)}.floor-head{display:flex;justify-content:space-between;align-items:center;margin-top:10px}.floor-head .mini{font-size:12px;padding:3px 10px;cursor:pointer;border-radius:4px;background:var(--panel);color:var(--text);border:1px solid var(--accent)}.floor-head .mini:hover{background:var(--accent);color:#111}.dirpad{display:flex;align-items:center;gap:10px;margin-bottom:8px}.dirpad .grid{display:grid;grid-template-columns:repeat(3,40px);grid-auto-rows:32px;gap:3px}.dirpad .center{display:flex;align-items:center;justify-content:center;color:var(--muted)}.dirpad .updown{display:flex;flex-direction:column;gap:3px}.dirpad button{padding:0;font-size:12px;background:var(--panel);color:var(--text);border:1px solid var(--border);border-radius:6px;cursor:pointer;min-height:32px;min-width:40px}.dirpad .updown button{padding:0 8px}.dirpad button:hover:not(:disabled){border-color:var(--accent)}.dirpad button:disabled{opacity:.25;cursor:default}.minimap{display:block;width:100%;max-width:280px;margin:0 auto;background:var(--bg);border:1px solid var(--border);border-radius:6px}.map-link{stroke:var(--muted);stroke-width:2}.map-link.closed{stroke-dasharray:3 3;stroke:var(--combat)}.map-room rect{fill:var(--panel);stroke:var(--border);stroke-width:1.5}.map-room text{fill:var(--text);font-size:10px;font-family:Noto Sans KR,Malgun Gothic,sans-serif;pointer-events:none}.map-room .updown{font-size:7px;fill:var(--accent)}.map-room.unknown rect{fill:var(--bg);stroke-dasharray:2 2}.map-room.unknown text{fill:var(--muted)}.map-room.current rect{stroke:var(--accent);stroke-width:2.5;fill:#2b2a1f}.map-room.clickable{cursor:pointer}.map-room.clickable:hover rect{stroke:var(--room)}@media (max-width: 720px){.layout{grid-template-columns:1fr;grid-template-rows:1fr auto auto}.side-pane{border-left:none;overflow-y:auto;padding:8px;grid-row:1}.log-pane{grid-row:1 / span 2;min-height:0}.tabbar{grid-row:3}.layout:not([data-tab=log]) .log-pane{grid-row:2}.layout:not([data-tab=log]) .log-pane .log,.layout:not([data-tab=log]) .log-pane .quick{display:none}.log{padding:10px 12px;font-size:13px}.quick{padding:6px 12px 0}.jump{right:12px;bottom:88px}.banner,.asking-prompt{margin-left:12px;margin-right:12px}.suggest,.channels,.skills,.toolbar,.favform,.favmenu{padding-left:12px;padding-right:12px}.layout:not([data-tab=log]) .log-pane .skills,.layout:not([data-tab=log]) .log-pane .toolbar,.layout:not([data-tab=log]) .log-pane .favform,.layout:not([data-tab=log]) .log-pane .favmenu{display:none}.toolbar .groups{flex-wrap:wrap;white-space:normal;overflow:hidden;row-gap:6px;max-height:90px}.toolbar .groups.expanded{max-height:none}.toolbar .group{flex-wrap:wrap;row-gap:6px}.toolbar .group[data-name=aim]{order:-2}.toolbar .targetsel{order:-1}.toolbar .groups button{min-height:40px;padding:6px 14px;font-size:14px}.toolbar .fold{min-height:40px}.toolbar .fold.more{display:block;font-size:11px;padding:2px 6px;min-height:0}.toolbar .targetsel select{font-size:14px;padding:6px 8px}.layout[data-roombar=on] .toolbar .targetsel{display:none}.roombar{padding-left:12px;padding-right:12px}.roombar .exits-row button{min-height:40px;padding:6px 14px;font-size:14px}.roombar .chip{min-height:36px;padding:4px 12px;font-size:13px}.roombar .menu button{min-height:40px;padding:6px 14px;font-size:14px}.layout:not([data-tab=log]) .log-pane .roombar{display:none}.helpcard{left:8px;right:8px;top:8px;max-height:70%}.layout:not([data-tab=log]) .log-pane .helpcard,.layout:not([data-tab=log]) .log-pane .channels{display:none}.combatbar{padding:6px 12px}.layout:not([data-tab=log]) .log-pane .combatbar,.layout:not([data-tab=log]) .log-pane .jump{display:none}.input-row{padding:8px 12px}.layout[data-tab=log] .side-pane{display:none}.layout[data-tab=room] .panel:not([data-group=room]){display:none}.layout[data-tab=me] .panel:not([data-group=me]){display:none}.layout[data-tab=bag] .panel:not([data-group=bag]){display:none}.tabbar{display:grid;grid-template-columns:repeat(4,1fr);border-top:1px solid var(--border);background:var(--panel);padding-bottom:env(safe-area-inset-bottom)}.tabbar button{position:relative;padding:12px 0;font-size:14px;background:none;color:var(--muted);border:none;border-top:2px solid transparent;cursor:pointer}.tabbar button.active{color:var(--accent);border-top-color:var(--accent)}.tabbar .dot{position:absolute;top:8px;right:25%;width:7px;height:7px;border-radius:50%;background:var(--combat)}}@media (pointer: coarse){.toolbar .groups button sup{display:none}}
