*{box-sizing:border-box}html,body{margin:0;height:100%;overflow:hidden;font:13px/1.4 Inter,"Segoe UI",system-ui,sans-serif}
/* theme variables come from server config (client.theme.css) via /theme.js */
body{background:var(--bg);color:var(--fg)}#c{position:fixed;inset:0;width:100%;height:100%;display:block}
#ui{position:fixed;inset:0;pointer-events:none}#ui>*{pointer-events:auto}
.tl{position:absolute;left:14px;top:12px}.brand{font-weight:700;letter-spacing:.32em;font-size:14px;display:flex;align-items:center;gap:4px}
.zero{display:inline-grid;place-items:center;width:18px;height:18px;border:1.6px solid currentColor;border-radius:50%;font-size:11px;letter-spacing:0}
.online{color:var(--mut);font-size:11px;margin:2px 0 8px}.online b{color:var(--fg);font-weight:600}.dot{display:inline-block;width:6px;height:6px;border-radius:50%;background:#2fbf5a;margin-right:4px}
.pills{display:flex;gap:6px}.pill{background:var(--chip);border:1px solid var(--line);border-radius:999px;padding:3px 9px;font-size:11px;cursor:pointer;color:var(--fg)}
.news{margin-top:10px;width:232px;background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:10px;max-height:46vh;overflow:auto;box-shadow:0 2px 12px rgba(0,0,0,.05)}
.news h4{margin:0 0 6px;font-size:13px;display:flex;justify-content:space-between;align-items:center}.badge{background:#dfe6ff;color:#3b5bdb;border-radius:999px;padding:0 6px;font-size:10px;margin-left:6px}
.news .it{background:#eef2ff;border-radius:8px;padding:8px;margin:6px 0}body.dark .news .it{background:#1c2033}.news .it.read{background:transparent}.news .d{font-size:10px;color:var(--mut)}.news .t{font-weight:600;font-size:12px}.news p{margin:3px 0 0;font-size:11px;color:var(--mut)}
.tr{position:absolute;right:14px;top:10px;display:flex;gap:8px;align-items:center}.btn{background:var(--chip);border:1px solid var(--line);border-radius:999px;padding:5px 12px;cursor:pointer;color:var(--fg);font-size:12px}
.btn.dark{background:#141414;color:#fff;border-color:#141414}.btn.primary{background:#f2c94c;border-color:#e0b53a;color:#141414;font-weight:600}.link{cursor:pointer;font-size:12px}
.chat{position:absolute;left:14px;bottom:44px;width:300px;font-size:11px;color:var(--mut)}.chat .m b{color:var(--fg);font-weight:600}.chat .m{margin:3px 0}
.chat input{width:100%;border:none;background:transparent;border-top:1px solid var(--line);padding:6px 0;color:var(--fg);outline:none}
.br{position:absolute;right:14px;bottom:12px;display:flex;gap:8px;align-items:center;font-size:11px}.emo{border:1px solid var(--line);background:var(--chip);border-radius:999px;padding:2px 8px;cursor:pointer;color:var(--fg)}
.hint{position:absolute;left:50%;transform:translateX(-50%);bottom:12px;font-size:10px;color:var(--mut);white-space:nowrap}
.veil{position:absolute;inset:0;background:rgba(244,244,242,.72);backdrop-filter:blur(6px);display:grid;place-items:center}body.dark .veil{background:rgba(10,10,12,.7)}
.welcome{text-align:center;max-width:980px}.welcome .brand{justify-content:center;font-size:20px;letter-spacing:.42em}.welcome .zero{width:26px;height:26px;font-size:15px}.tag{color:var(--mut);margin:6px 0 26px}
.cards{display:grid;grid-template-columns:repeat(4,1fr);gap:0}.card{padding:18px 18px;border-left:1px solid var(--line)}.card:first-child{border:none}.card.sel{border:1px solid #999;border-radius:8px}
.card svg{height:96px;margin-bottom:10px}.card .n{font-size:10px;color:var(--mut)}.card h3{margin:4px 0 6px;font-size:14px}.card p{margin:0;color:var(--mut);font-size:11px}
.cta{margin-top:24px;display:flex;gap:10px;justify-content:center}.cta .btn{padding:8px 20px;font-weight:600}
.modal{background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:22px 26px;box-shadow:0 10px 40px rgba(0,0,0,.12);position:relative}
.signin{width:340px;text-align:center}.signin p{color:var(--mut);font-size:12px}.signin .btn{width:100%;margin:6px 0;padding:8px}.signin input{width:100%;padding:7px 10px;border:1px solid var(--line);border-radius:8px;margin-top:6px;background:var(--chip);color:var(--fg)}
.x{position:absolute;right:12px;top:10px;cursor:pointer;color:var(--mut);font-size:16px}
.lotcard{position:absolute;right:14px;top:56px;width:300px;max-height:calc(100vh - 120px);overflow:auto}.lotcard .cls{font-size:10px;letter-spacing:.12em;color:var(--mut)}.lotcard h2{margin:2px 0 10px;font-size:18px}
.lotcard .row{display:flex;justify-content:space-between;font-size:12px;padding:3px 0}.lotcard .row span:first-child{color:var(--mut)}.lotcard .btn{width:100%;margin:4px 0;border-radius:8px;padding:7px}
.board{width:620px;max-height:84vh;overflow:auto}.tabs{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin:10px 0}.tab{border:1px solid var(--line);border-radius:10px;padding:8px 10px;cursor:pointer}.tab.sel{border:2px solid #141414}body.dark .tab.sel{border-color:#ddd}
.tab b{display:block;font-size:12px}.tab small{color:var(--mut)}.post{border:1px solid var(--line);border-radius:10px;padding:10px;margin:8px 0;display:flex;gap:10px}.post .v{text-align:center;color:var(--mut);min-width:20px;cursor:pointer}
.post .meta{font-size:11px;color:var(--mut);margin-top:4px}.state{font-weight:600;color:var(--fg)}textarea{width:100%;border:1px solid var(--line);border-radius:8px;padding:8px;background:var(--chip);color:var(--fg)}
.toast{position:absolute;top:12px;left:50%;transform:translateX(-50%);background:var(--panel);border:1px solid var(--line);border-radius:999px;padding:5px 14px;font-size:12px}
.tip{position:absolute;background:#141414;color:#fff;font-size:11px;padding:3px 8px;border-radius:6px;pointer-events:none}
.curtain{background:repeating-linear-gradient(45deg,#ddd 0 8px,#fff 8px 16px);padding:6px;border-radius:6px;text-align:center;font-size:11px;margin:6px 0}
/* round 2 */
.r2.map{width:600px}.r2 .legend{display:flex;gap:12px;font-size:11px;margin:6px 0}.r2 .legend i{display:inline-block;width:9px;height:9px;margin-right:4px;border-radius:2px}
.r2 .opt{border:1px solid var(--line);border-radius:8px;padding:8px;margin:6px 0;cursor:pointer}.r2 .opt.sel{border-color:#141414;background:var(--chip)}.r2 .opt small{display:block;color:var(--mut)}
.r2 label{display:flex;gap:8px;align-items:center;margin:8px 0}.r2 .row{display:flex;justify-content:space-between;font-size:12px;margin:3px 0}.mut{color:var(--mut);font-size:12px}
.r2.place,.r2.tour,.r2.gfx,.r2.snd{width:420px}.r2 .thumbs{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}.r2 .th{border:1px solid var(--line);border-radius:6px;padding:4px 6px;font-size:11px}
.loadbar{position:fixed;top:10px;left:50%;transform:translateX(-50%);background:var(--bg,#fff);border:1px solid var(--line);border-radius:10px;padding:8px 14px;font-size:12px;z-index:40;animation:fin .25s ease-out}
.loadbar.err{border-color:#e55;color:#b22;max-width:640px}.gamebar{position:fixed;top:10px;right:10px;display:flex;gap:6px;z-index:40}
.gameplayers{position:fixed;left:10px;bottom:10px;width:220px;background:var(--bg,#fff);border:1px solid var(--line);border-radius:10px;padding:8px;font-size:12px;z-index:40}
.gamehud{position:fixed;top:60px;left:50%;transform:translateX(-50%);display:flex;gap:18px;font-weight:700;z-index:40;flex-wrap:wrap;justify-content:center;max-width:600px}
.xp{margin-top:10px;border-top:1px solid var(--line);padding-top:8px}@keyframes fin{from{opacity:0;transform:translate(-50%,-6px)}to{opacity:1}}
/* cycle 5: sandboxed game view */
.gameview{position:fixed;inset:0;z-index:40;pointer-events:none}
.gameview iframe{position:absolute;inset:0;width:100%;height:100%;border:0;pointer-events:auto;background:rgba(255,255,255,.55)}
.gameview .gamebar{position:absolute;top:12px;left:50%;transform:translateX(-50%);display:flex;gap:10px;align-items:center;pointer-events:auto;background:#fff;border-radius:12px;padding:6px 12px;box-shadow:0 2px 10px #0002;font:14px system-ui}
.gameview .ghud{position:absolute;top:60px;left:50%;transform:translateX(-50%);white-space:pre-line;background:#fffe;border-radius:10px;padding:8px 14px;font:14px system-ui;max-width:60%;text-align:center}
.gameview .gstat{position:absolute;bottom:40px;left:50%;transform:translateX(-50%);background:#111;color:#fff;border-radius:10px;padding:8px 14px;font:14px system-ui;pointer-events:auto}
.gameview .gstat.warn{background:#c9961a}.gameview .gstat.bad{background:#b3261e}.gameview .gstat[hidden],.gameview .ghud[hidden]{display:none}
.signin .sh{margin:6px 0 0;text-align:center}.signin button.btn{display:block;width:100%;margin:6px 0;font:inherit;cursor:pointer}.signin button[disabled]{opacity:.45;cursor:not-allowed}
.signin .gnote{display:block;text-align:center;color:#888;font-size:12px}.signin .devf{display:grid;gap:6px;margin-top:10px;border-top:1px solid #eee;padding-top:10px}
.signin .devf label{display:grid;gap:2px;font-size:12px;color:#555}.signin .derr{color:#b3261e;min-height:1em}

/* cycle 7: agent name/activity tags over agent avatars */
.agenttag{position:fixed;transform:translate(-50%,-100%);pointer-events:none;background:rgba(20,20,20,.85);color:#fff;padding:2px 6px;border-radius:4px;font:11px ui-monospace,monospace;white-space:nowrap;z-index:5}.agenttag small{display:block;color:#ffd36b}

.aboutbox{position:fixed;left:12px;bottom:12px;max-width:430px;max-height:46vh;overflow:auto;background:rgba(255,255,255,.94);border:1px solid #ccc;border-radius:10px;padding:8px 12px;font:13px/1.45 system-ui;z-index:5;color:#222}.aboutbox summary{cursor:pointer;font-weight:600}.aboutbox h2{font-size:15px;margin:6px 0}.aboutbox p{margin:5px 0}
.aboutbox .steps,#about .steps{display:flex;gap:8px}#about figure{flex:1;margin:0}#about img{width:100%;border-radius:6px;display:block}#about figcaption{font-size:12px;margin-top:3px}#about .note{font-size:11px;color:#666}

/* cycle 12 */.aboutlink{position:fixed;left:12px;bottom:12px;font:12px system-ui;color:var(--link);z-index:5;background:var(--panel);padding:3px 8px;border-radius:6px}.signin .aboutsec{text-align:left;max-height:40vh;overflow:auto;border-top:1px solid #ddd;margin-top:10px;font-size:12px}.aboutsec .steps{display:flex;gap:8px}.aboutsec figure{flex:1;margin:0}.aboutsec img{width:100%;border-radius:6px;display:block}.adminnotes summary{cursor:pointer;font-weight:600;font-size:12px}
.signin{width:560px;max-height:92vh;overflow:auto}

/* staff Agents section (public/staff.js); colours are server theme variables */
.agentsec{position:fixed;left:14px;bottom:12px;width:300px;max-height:46vh;overflow:auto;background:var(--bg);color:var(--fg);border:1px solid var(--line);border-radius:12px;padding:10px;z-index:6;font-size:12px}
.agentsec h4{margin:0 0 6px;font-size:13px;display:flex;justify-content:space-between}.agentsec .bot{padding:5px 7px;border:1px solid var(--line);border-radius:8px;margin:4px 0;cursor:pointer;display:flex;justify-content:space-between}.agentsec .bot.sel{border-color:var(--accent)}
.agentsec .kv{margin:2px 0;word-break:break-all}.agentsec .kv b{color:var(--mut);font-weight:500}.agentsec .e{color:var(--mut);font-style:italic}.agentsec .row{display:flex;gap:6px;margin:6px 0;flex-wrap:wrap}.agentsec iframe{width:100%;height:110px;border:1px solid var(--line);background:var(--bg)}
.dot3{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:5px}.dot3.running{background:#3f8;animation:pz 1s infinite}.dot3.idle{background:#fc3}.dot3.offline{background:#666}@keyframes pz{50%{transform:scale(1.6);opacity:.5}}
.botfloat{position:fixed;pointer-events:none;background:var(--panel);color:var(--fg);border:1px solid var(--line);border-radius:8px;padding:6px 8px;font-size:11px;max-width:230px;transform:translate(-50%,-100%);z-index:4}.botfloat img{width:100%}
.camviews{position:fixed;left:50%;bottom:12px;transform:translateX(-50%);display:flex;gap:6px;z-index:6}
.adminnotes>summary{cursor:pointer;font-weight:600;background:var(--chip);border:1px solid var(--accent);border-radius:8px;padding:5px 8px;margin-bottom:6px}.cyclink{display:block;color:var(--link);margin:4px 0 6px;font-size:12px}.vprompt{top:52px;z-index:20}
.rolebadge{display:inline-block;font-size:10px;font-weight:700;padding:1px 7px;border-radius:999px;border:1px solid var(--line);background:var(--chip);color:var(--fg)}.rolebadge.admin{border-color:var(--accent);color:var(--accent)}
.lbpanel{position:fixed;right:14px;top:56px;width:380px;max-height:78vh;overflow:auto;background:var(--bg);color:var(--fg);border:1px solid var(--line);border-radius:12px;padding:10px;z-index:7;font-size:12px}.lbpanel h3{margin:0 0 6px}.lbpanel h4{margin:10px 0 4px;color:var(--mut)}
.lbagent{border:1px solid var(--line);border-radius:8px;padding:6px;margin:4px 0}.lbwarn{color:#ff8a65;font-weight:600;margin:3px 0}.lbev{font-family:ui-monospace,monospace;font-size:11px;max-height:180px;overflow:auto}.lbpanel .pill.sel{border-color:var(--accent)}
.veil{z-index:30}
.staff .chat{left:330px;bottom:52px}#about a,.veil a,.modal a{color:var(--link)}

.lbfile{cursor:pointer;text-decoration:underline dotted}.lbsrc{position:fixed;left:14px;top:56px;width:min(760px,55vw);max-height:84vh;overflow:auto;background:var(--bg);color:var(--fg);border:1px solid var(--line);border-radius:12px;padding:10px;z-index:8;font-size:12px}.lbsrc pre{font:11px/1.45 ui-monospace,monospace;white-space:pre-wrap;margin:6px 0 0}.lbsrc .ln{display:inline-block;width:3.2em;color:var(--mut);user-select:none}
.bdpanel{position:fixed;overflow:auto;background:var(--bg);color:var(--fg);border:1px solid var(--line);border-radius:12px;padding:10px;z-index:7;font-size:12px}.bdpanel h3{margin:0 0 6px}
.bdrow,.bdtip{border:1px solid var(--line);border-radius:8px;padding:5px 7px;margin:4px 0;background:var(--chip)}.bdst{font-family:ui-monospace,monospace;color:var(--accent)}.bdmut{color:var(--mut)}.pill.sel{border-color:var(--accent)}.bdtabs{flex-wrap:wrap;margin-bottom:6px}
.bdd{font-size:11px;background:var(--input);color:var(--fg);border:1px solid var(--line);border-radius:6px}.bdd.sel.yes{border-color:var(--bd-yes);color:var(--bd-yes)}.bdd.sel.no{border-color:var(--bd-no);color:var(--bd-no)}.bdd.sel.maybe{border-color:var(--bd-maybe);color:var(--bd-maybe)}
.bdadd input,.bdadd textarea{width:100%;box-sizing:border-box;margin:3px 0;background:var(--input);color:var(--fg);border:1px solid var(--line);border-radius:6px}.bdhide{color:var(--link);cursor:pointer;margin-left:6px}
.bdpanel button{background:var(--input);color:var(--fg);border:1px solid var(--line);border-radius:6px;cursor:pointer}
/* b07 economy panels */.econ{max-width:860px;max-height:80vh;overflow:auto;background:#000;color:#fff;opacity:1;z-index:50;position:relative}.econ-tabs{margin:6px 0 10px}.econ-tabs .pill{cursor:pointer;margin-right:6px}.econ-tabs .pill.sel{font-weight:700;text-decoration:underline}.econ-t{border-collapse:collapse;width:100%;font-size:12px}.econ-t td,.econ-t th{border-bottom:1px solid var(--line);padding:3px 6px;text-align:left}.econ-f{margin:8px 0;padding:8px;border:1px solid var(--line);border-radius:8px}.econ-f input,.econ-f select,.econ-pick input,.econ-pick select{background:var(--panel);color:var(--fg);border:1px solid var(--line);padding:3px 5px}.econ .err{color:#f88}.econ .link{cursor:pointer;text-decoration:underline}
.fixpanel button,.bugdlg button,.fixpanel select{background:var(--input);color:var(--fg);border:1px solid var(--line);border-radius:6px;cursor:pointer}

/* build 10: game bar extras, how-to box, avatar viewer, system chat line (server theme variables) */
.gamebar .gvol{display:inline-flex;align-items:center;gap:4px}.gamebar .gvol input{width:90px}
.ghowto{position:absolute;top:56px;left:50%;transform:translateX(-50%);max-width:420px;padding:10px 14px;white-space:pre-wrap;background:var(--bg);color:var(--fg);border:1px solid var(--line);border-radius:8px}
.av3d{width:100%;height:220px;margin:8px 0;display:flex;flex-direction:column;align-items:center;justify-content:center}
.th[data-user]{cursor:pointer}.m.sys{opacity:.75;font-style:italic}
.gameview .gamebar{background:var(--bg);color:var(--fg);border:1px solid var(--line)}.gameview .gamebar .gname{color:var(--fg)}.gameview .gamebar .btn{background:var(--input);color:var(--fg);border:1px solid var(--line)}

/* build 03: civic panel */
.civic{background:var(--bg);z-index:40;max-width:560px;max-height:80vh;overflow:auto}.civic .row{display:flex;justify-content:space-between;gap:8px;align-items:center;padding:5px 0;border-bottom:1px solid var(--line)}.civic .pill.sel{background:var(--accent);color:var(--bg)}
.civic .seats{display:flex;flex-wrap:wrap;gap:3px;margin-top:6px}.civic .seats i{width:10px;height:10px;border-radius:2px;background:var(--chip);border:1px solid var(--line)}.civic .seats i.on{background:var(--accent)}.civic .seats i.vol{background:var(--link)}.civic textarea{background:var(--chip);color:var(--fg);border:1px solid var(--line);border-radius:8px;padding:6px;margin:4px 0}
/* build 04 social screens */
.soc-btn{cursor:pointer}.soc-btn[data-n]:not([data-n=""])::after{content:attr(data-n);background:var(--accent);color:var(--bg);border-radius:9px;padding:0 6px;margin-left:6px;font-size:11px;font-weight:700}
.soc{position:fixed;right:16px;bottom:56px;width:380px;max-height:70vh;overflow:auto;z-index:31;background:var(--panel);color:var(--fg);border:1px solid var(--line);border-radius:12px;padding:12px 14px;font-size:13px}
.soc .x{float:right;cursor:pointer;font-size:18px}.soc-tabs{display:flex;gap:6px;margin:8px 0}.soc-tabs .pill{cursor:pointer}.soc-tabs .pill.sel{background:var(--fg);color:var(--bg)}
.soc-row{display:flex;gap:6px;align-items:center;margin:6px 0}.soc-row input{flex:1;background:var(--input);color:var(--fg);border:1px solid var(--line);border-radius:6px;padding:5px 8px}
.soc-item{display:flex;flex-wrap:wrap;gap:6px;align-items:center;padding:6px 4px;border-bottom:1px solid var(--line);cursor:default}.soc-item[data-thread]{cursor:pointer}.soc-item b{flex:1}.soc-item .btn{padding:1px 8px;font-size:11px}
.soc-new{background:var(--accent);color:var(--bg);border-radius:8px;padding:0 6px;font-size:11px}.soc-dot{width:8px;height:8px;border-radius:50%;background:var(--mut)}.soc-dot.on{background:var(--ok)}
.soc-log{max-height:38vh;overflow:auto;border:1px solid var(--line);border-radius:8px;padding:6px}.soc-msg{margin:4px 0}.soc-msg small{color:var(--mut)}.soc-msg.me{text-align:right}.soc .cls{margin-top:8px}
.soc-item select{background:var(--input);color:var(--fg);border:1px solid var(--line);border-radius:6px;font-size:11px;padding:1px 4px}
.soc-priv .soc-toggle{display:flex;gap:6px;align-items:center;margin:4px 0;cursor:pointer}.soc-badge{margin-top:10px;font-weight:600}.soc-denied{color:var(--fg);border:1px solid var(--line);border-radius:6px;padding:4px 6px;margin-top:4px}
.gversions{position:absolute;top:84px;right:16px;width:min(460px,90vw);max-height:70vh;overflow:auto;padding:10px 14px;background:#0b0d14;color:#e8e8ef;border:1px solid #2c2e3a;border-radius:12px;pointer-events:auto;font:13px system-ui;z-index:2}
.gversions .gvrow{display:flex;justify-content:space-between;align-items:center;gap:8px;padding:5px 0;border-bottom:1px solid #1d2030}.gversions .gvrow.live em{color:#3ecf6e;font-style:normal}
.gversions .gvlog{color:#9aa0b4;font-size:12px;padding:2px 0}.gversions b{display:block;margin:6px 0}
.wardrobe{min-width:380px;max-width:92vw}.wardrobe h4{margin:14px 0 6px;opacity:.7;font-weight:600}.wd-hint{opacity:.7;font-size:13px;margin:4px 0}.wd-row{display:flex;align-items:center;gap:10px;padding:6px 8px;border:1px solid var(--line);border-radius:10px;margin:4px 0}.wd-row.on{border-color:var(--link)}.wd-n{width:18px;opacity:.6}.wd-name{flex:1}.wd-empty,.wd-on{opacity:.6;font-size:13px}
.formats{min-width:440px;max-width:92vw}.fm{width:100%;border-collapse:collapse;font-size:14px}.fm th{text-align:left;opacity:.6;font-weight:600;padding:6px 8px}.fm td{padding:6px 8px;border-top:1px solid var(--line)}.fm-ok{color:#3ecf6e}.fm-wait{color:#f2c94c}.fm-note td{border-top:0;opacity:.6;font-size:12px;padding-top:0}
