:root{--bg:#0f1216;--panel:#161a20;--line:#252b34;--fg:#d6dce4;--dim:#7c8695;--acc:#8ab4ff;--well:#0b0e12;--title:#f0c674;--desc:#b6bfcb;--speech-plain:#dfe4eb;--character:#f4a3cb;--say:#6ee6f2;--emote:#bba6ff;--error:#ff6b6b;--warn:#f0c674;--banner-bg:#2b2414;--btn-bg:#1c2129;--btn-border:#2e3540;--radius:6px;--font:"Nunito", system-ui, sans-serif}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{background:var(--bg);color:var(--fg);font:16px/1.55 var(--font)}button{background:var(--btn-bg);color:var(--fg);border:1px solid var(--btn-border);border-radius:var(--radius);font:inherit;cursor:pointer;padding:3px 9px}.log{background:var(--well);border:1px solid var(--line);border-radius:var(--radius);flex:1;min-width:0;min-height:0;padding:8px 12px;font-size:16px;overflow-y:auto}.line{white-space:pre-wrap;overflow-wrap:anywhere;min-height:1.45em}.cmdform{align-items:center;gap:6px;display:flex}.cmdform input{background:var(--well);color:var(--fg);border:1px solid var(--line);font:inherit;border-radius:4px;flex:1;padding:7px 9px}.prompt{color:var(--acc)}.s-room-title{color:var(--title);font-weight:700}.s-plain{color:var(--desc)}.ch-say .s-plain,.ch-system .s-plain{color:var(--speech-plain)}.ch-say{border-left:2px solid color-mix(in srgb, var(--say) 30%, transparent);padding-left:8px}.s-character{color:var(--character)}.s-say{color:var(--say)}.s-emote{color:var(--emote)}.s-system{color:var(--dim);font-style:italic}.s-error{color:var(--error)}.s-dim,.dim{color:var(--dim)}.s-emph{font-weight:700}.screen{place-items:center;height:100%;padding:16px;display:grid}.card{background:var(--panel);border:1px solid var(--line);border-radius:6px;flex-direction:column;gap:10px;width:min(360px,100%);padding:20px 24px;display:flex}.card form{flex-direction:column;gap:10px;display:flex}.card h1{color:var(--title);margin:0;font-size:18px}.card label{color:var(--dim);flex-direction:column;gap:4px;display:flex}.card input{background:var(--well);color:var(--fg);border:1px solid var(--line);font:inherit;border-radius:4px;padding:7px 9px}.card p{margin:0}.error{color:var(--error)}.chars{flex-wrap:wrap;gap:6px;margin:0;padding:0;list-style:none;display:flex}button.link{color:var(--acc);text-align:left;background:0 0;border:none;padding:0;text-decoration:underline}.game{height:100%;position:relative;overflow:hidden}.canvas-area{position:absolute;inset:0}.canvas-area canvas{width:100%;height:100%;display:block}.banner{z-index:2;background:var(--banner-bg);border:1px solid var(--warn);border-radius:4px;padding:3px 8px;position:absolute;top:8px;left:50%;transform:translate(-50%)}.room-name{z-index:1;color:var(--title);font-weight:700;position:absolute;top:8px;left:12px}.corner{z-index:1;gap:12px;display:flex;position:absolute;top:8px;right:12px}.glass{z-index:1;flex-direction:column;gap:6px;width:min(560px,100% - 16px);height:min(320px,50%);display:flex;position:absolute;bottom:8px;left:8px}.glass .log{-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);background:#0b0e12b3}.minimap{z-index:1;box-shadow:0 0 0 1px var(--line);border-radius:var(--radius);cursor:pointer;background:#0b0e12b3;position:absolute;bottom:8px;right:12px}
