:root{font-family:Inter,system-ui,Segoe UI,Arial,sans-serif;color:#e4ebf5;background:#080e18}*{box-sizing:border-box}body{margin:0}.hidden{display:none!important}button,input,select{font:inherit}button{cursor:pointer;border:1px solid #35537c;background:#2464a6;color:white;border-radius:9px;padding:11px 14px}button:hover{filter:brightness(1.13)}input,select{background:#0e1828;color:#eef4fc;border:1px solid #3b506a;padding:12px;border-radius:8px;width:100%;outline:none}input:focus,select:focus{border-color:#7db9f7}.overlay{position:fixed;inset:0;z-index:40;background:radial-gradient(circle at 50% 20%,#223754,#070c15 70%);display:grid;place-items:center;padding:15px}.modal{width:min(420px,95vw);background:#121d2e;border:1px solid #3b516d;border-radius:20px;padding:30px;box-shadow:0 18px 70px #0009}.modal h1{font-size:28px;margin:12px 0}.modal p,.modal small{color:#a8b7ca;line-height:1.5}.modal form{display:grid;gap:16px;margin-top:20px}.modal label{display:grid;gap:7px;color:#c9d6e6;font-size:13px}.modal .link{background:none;border:0;color:#9fcafb;padding:8px 0;margin-top:5px}.kicker{color:#80d6bb;letter-spacing:.16em;font-weight:700;font-size:12px}.error{color:#ff9d97!important;min-height:1.2em}.classdesc{background:#1d2e44;padding:12px;border-radius:9px;color:#b7d1eb;font-size:13px}header{height:62px;display:flex;align-items:center;justify-content:space-between;padding:0 20px;background:#121e2f;border-bottom:1px solid #35465a;gap:15px}header strong{color:#b8e5ba;font-size:18px}header .dim{font-size:12px;margin-left:14px;color:#8194aa}.header-right{display:flex;align-items:center;gap:12px;font-size:12px;color:#b5c6db}.smallbtn{padding:7px 10px;font-size:12px;background:#21364e}main{display:grid;grid-template-columns:minmax(0,1fr) 300px;height:calc(100dvh - 62px);min-height:350px}#viewport{position:relative;overflow:hidden;background:#131b25}canvas{width:100%;height:100%;display:block;touch-action:none}.hud{position:absolute;top:14px;left:14px;right:14px;pointer-events:none;text-shadow:1px 2px 3px #000}.hud-line{display:flex;justify-content:space-between}.help{margin-top:6px;font-size:12px;color:#ebf5e4}#connection{margin-top:6px;color:#bcd1e1;font-size:12px}aside{min-height:0;display:flex;flex-direction:column;background:#111c2c;border-left:1px solid #34465a;padding:15px;gap:12px}.side-title{display:flex;justify-content:space-between;color:#cce0fb;font-size:13px;font-weight:800;letter-spacing:.06em}#messages{min-height:70px;flex:1;overflow-y:auto;font-size:13px;display:flex;flex-direction:column;gap:8px;word-break:break-word}#messages .name{font-weight:700;color:#99d6ff}#messages .system{color:#8fa6bc;font-style:italic}#chatForm{display:flex;gap:6px}#chatForm button{padding:8px}#chatText{padding:8px;min-width:0}.aside-info{border-top:1px solid #394c63;padding-top:12px;font-size:12px;color:#a9bbd0;max-height:40%;overflow:auto}.aside-info b{color:#d4e7fd}.aside-info p{line-height:1.5}.aside-info hr{border:0;border-top:1px solid #33465e}#playerList{margin-top:8px;line-height:1.8}@media(max-width:750px){main{display:flex;flex-direction:column;height:auto;min-height:calc(100dvh - 62px)}#viewport{height:60dvh;min-height:350px}aside{height:37dvh;min-height:220px}header{padding:8px;height:auto;min-height:62px;flex-wrap:wrap}header .dim{display:none}#characterLabel{display:none}.aside-info{display:none}}

/* Townbound RPG HUD */
#rpgVitals{position:absolute;top:88px;left:14px;display:flex;align-items:center;gap:10px;background:#0e1827de;border:1px solid #b18a4b;border-radius:12px;padding:9px 12px;width:235px;box-shadow:0 5px 22px #0008;pointer-events:none}#playerPortrait{height:49px;width:49px;display:grid;place-items:center;border-radius:8px;background:linear-gradient(135deg,#55412c,#182d42);border:2px solid #c9a36c;font-size:25px}#rpgVitals>div:last-child{flex:1;min-width:0}#hudName{font-size:13px;color:#f3ddb0;display:block}#hudClass{display:block;color:#9cb4d0;font-size:10px}.meter{position:relative;background:#2a1720;border:1px solid #65536a;height:15px;margin-top:4px;border-radius:3px;overflow:hidden}.meter>div{height:100%;width:100%;background:linear-gradient(#e95d5d,#921d32)}.meter.mp>div{background:linear-gradient(#5ba5f2,#1956ab)}.meter span{position:absolute;left:0;top:0;width:100%;text-align:center;font-size:10px;line-height:13px;text-shadow:0 1px 2px black}
#actionbar{position:absolute;bottom:15px;left:50%;transform:translateX(-50%);display:flex;gap:4px;background:#0c1524e8;padding:7px;border:2px solid #8d704b;border-radius:12px;box-shadow:0 4px 24px #000b;max-width:calc(100% - 110px)}.actionSlot,.bagSlot{position:relative;display:grid;place-items:center;background:linear-gradient(#283449,#111c2e);border:1px solid #58708a;border-radius:6px;color:#fff;user-select:none}.actionSlot{width:50px;height:50px;font-size:24px}.actionSlot span{position:absolute;bottom:1px;right:4px;font-size:10px;color:#e4d2a9}.actionSlot.selected{border-color:#e3ba62;box-shadow:inset 0 0 9px #d6a34e66}.actionSlot:focus-visible,.bagSlot:focus-visible{outline:2px solid #e9bb5b}
#bagToggle{position:absolute;bottom:22px;right:14px;background:#192942;border-color:#b18a4b;padding:10px}#bagToggle kbd{opacity:.7;font-size:11px}#bag{position:absolute;right:14px;bottom:82px;width:330px;max-width:calc(100% - 28px);background:#121c2bf2;border:2px solid #ad8c59;border-radius:13px;padding:13px;box-shadow:0 12px 40px #000c;color:#e9ddc9}.bagTitle,.bagFooter{display:flex;justify-content:space-between;align-items:center}.bagTitle strong{color:#f8d997}.bagTitle button{padding:2px 9px;background:#28384d}#bagGrid{display:grid;grid-template-columns:repeat(6,1fr);gap:5px;margin:13px 0}.bagSlot{height:45px;font-size:23px;cursor:pointer}.bagSlot:hover{border-color:#e9c777}.bagSlot .qty{position:absolute;right:3px;bottom:1px;font-size:10px;background:#121a23a8;padding:0 2px}.bagSlot.dragging{opacity:.45}.bagFooter{font-size:12px;color:#d6c5a9;border-top:1px solid #4d5662;padding-top:9px}#itemTip{font-size:11px;color:#a9b5c5;min-height:29px;margin-top:9px}#toast{position:absolute;top:22%;left:50%;transform:translateX(-50%);padding:10px 18px;background:#1d2a3bea;border:1px solid #c4a166;border-radius:8px;color:#f5e2ba;pointer-events:none;white-space:nowrap}@media(max-width:950px){#actionbar{bottom:12px;gap:2px;padding:4px}.actionSlot{width:34px;height:37px;font-size:18px}#bagToggle{bottom:65px}}

/* Mouseover object inspector: readable label and stable scripting identifier. */
#objectHover{position:absolute;z-index:16;max-width:270px;min-width:145px;pointer-events:none;background:#101c2aef;border:1px solid #e0b76e;border-radius:9px;padding:9px 12px;box-shadow:0 8px 25px #000a;color:#f9e8c4;display:flex;flex-direction:column;gap:3px;font-size:12px;overflow-wrap:anywhere}
#objectHover strong{font-size:14px;color:#ffe2a0}#objectHover span{text-transform:capitalize;color:#b3c5d6;font-size:11px}#objectHover code{font-family:ui-monospace,Consolas,monospace;color:#8ad7be;font-size:11px}

#objectHover{z-index:35!important;display:flex;visibility:visible;min-width:175px;}
#objectHover.hidden{display:none!important;}

/* Consistent 24-slot (6 x 4) inventory grid */
#bag{box-sizing:border-box;width:min(370px,calc(100% - 28px));overflow:hidden}
#bagGrid{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));grid-auto-rows:auto;gap:5px;min-width:0;width:100%;box-sizing:border-box}
#bagGrid .bagSlot{box-sizing:border-box;width:100%;min-width:0;height:auto;aspect-ratio:1/1;padding:0;overflow:hidden;font-size:clamp(15px,2vw,24px)}
#bagGrid .bagSlot .qty{right:2px;bottom:1px}
