:root{--bg:#0e1116;--panel:#171c24;--panel2:#1e2530;--line:#2a3140;--text:#e7edf5;--muted:#93a0b3;--accent:#8eb4ff;--good:#3dd68c}
*{box-sizing:border-box}
body{margin:0;min-height:100vh;display:flex;flex-direction:column;font:14.5px/1.45 system-ui,sans-serif;background:var(--bg);color:var(--text)}
button,input,select,textarea{font:inherit;color:var(--text)}
a{color:#c5dcff}
.shell{display:grid;grid-template-columns:216px 1fr;flex:1;min-height:0}
.side{background:#12161d;border-right:1px solid var(--line);padding:16px 12px;display:flex;flex-direction:column;gap:12px}
.brand{font-weight:650;letter-spacing:-.01em;font-size:15px;padding:4px 8px}
.side select{background:#10141b;border:1px solid var(--line);border-radius:8px;padding:8px 10px}
.nav{display:flex;flex-direction:column;gap:2px}
.nav button{background:transparent;border:0;border-radius:8px;padding:8px 10px;text-align:left;cursor:pointer;color:var(--muted)}
.nav button.active{background:#243044;color:#fff}
.who{margin-top:auto;display:flex;gap:10px;align-items:center;padding:8px 10px;border:1px solid var(--line);border-radius:12px;background:#171c24}
.who img{width:36px;height:36px;border-radius:50%;object-fit:cover;flex:none;background:#2a3344}
.who b{display:block;font-size:13px;font-weight:650;line-height:1.2}
.who span{display:block;color:var(--muted);font-size:11px}
.signout{background:#8f2d2d;border:0;color:#fff;border-radius:6px;padding:2px 7px;font-size:11px;line-height:1.4;cursor:pointer;margin-top:4px}
.stage{display:flex;flex-direction:column;min-height:0;flex:1}
.legalbar{display:flex;gap:14px;align-items:center;flex-wrap:wrap;padding:8px 18px;border-top:1px solid var(--line);background:#10141b;font-size:12px;color:var(--muted)}
.legalbar a{color:#c5dcff;text-decoration:none}
.legalbar a:hover{text-decoration:underline}
.legalbtn{border:1px solid var(--line);border-radius:7px;padding:4px 9px;background:#171c24}
.legalbar .credit{margin-left:auto}
.doc{max-width:720px;padding:28px 22px 72px}
.doc a.back{position:fixed;left:16px;bottom:16px;z-index:20;display:inline-block;margin:0;padding:8px 14px;background:#243044;color:#fff;text-decoration:none;border:1px solid var(--line);border-radius:8px;box-shadow:0 8px 20px rgba(0,0,0,.45)}
.doc h1{font-size:22px;margin:8px 0 12px}
.doc h2{font-size:15px;margin:18px 0 4px}
.doc h3{font-size:13.5px;margin:12px 0 4px;color:#d5deea}
.doc p{color:var(--text);margin:0 0 10px}
.doc ul{margin:6px 0 12px;padding-left:18px}
.devgrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:10px}
.devgrid h2{font-size:13px;margin:0 0 6px;color:var(--muted);font-weight:650}
.devgrid b{font-size:20px;font-weight:650;letter-spacing:-.02em}
.devgrid .wide{grid-column:1 / -1}
.devtable{width:100%;border-collapse:collapse;font-size:12.5px;margin-top:8px}
.devtable th,.devtable td{text-align:left;padding:4px 8px;border-bottom:1px solid var(--line);vertical-align:top}
.devtable th{color:var(--muted);font-weight:650}
.vrcbar{position:sticky;bottom:0;display:flex;gap:8px;align-items:center;flex-wrap:wrap;padding:8px 28px;border-top:1px solid var(--line);background:#12161de8;font-size:12.5px;color:var(--muted)}
.vrcbar b{color:var(--text);font-weight:650}
.dot{width:8px;height:8px;border-radius:50%;background:#3dd68c;flex:none}
.dot.warn{background:#e0a23a}
.dot.bad{background:#e07a7a}
.main{padding:22px 28px 40px;flex:1}
#app{flex:1;display:flex;flex-direction:column;min-height:0}
.login{flex:1;display:grid;place-items:center}
.login a button{background:#5865f2;border:0;color:#fff;padding:10px 16px;border-radius:8px;font-weight:650}
.card{background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:12px 14px;margin:0 0 8px}
.stack{position:fixed;right:16px;bottom:16px;z-index:50;width:min(340px,calc(100% - 32px));display:flex;flex-direction:column;gap:8px;pointer-events:none}
.toast,.note{position:relative;width:auto;pointer-events:auto;touch-action:pan-y;background:#1c2330;border:1px solid #3a4a66;color:var(--text);border-radius:12px;padding:12px 14px;box-shadow:0 10px 28px #0008;animation:pop .22s ease}
.note [data-yes]{background:#243044;border-color:#8eb4ff;color:#fff}
.toast{display:flex;gap:10px;align-items:flex-start;justify-content:space-between}
.note button,.toast button,.main button,.actions button{background:#121821;border:1px solid var(--line);color:var(--text);border-radius:8px;padding:7px 10px;cursor:pointer}
.nav button,.side select{font:inherit}
.note button[type="submit"]{background:#243044;border-color:#8eb4ff;color:#fff}
.note input,.note textarea{background:#10141b;border:1px solid var(--line);color:var(--text);border-radius:8px;padding:8px 10px;width:100%}
.note textarea{min-height:84px}
.toast .x,.note .x{background:transparent;border:0;color:var(--muted);font-size:18px;line-height:1;padding:0 2px;cursor:pointer}
.toast.bad{border-color:#a85a5a}
.note{border-color:var(--line)}
@keyframes pop{from{transform:translateY(10px);opacity:0}to{transform:none;opacity:1}}
.row{display:flex;gap:10px;align-items:center;justify-content:space-between}
.meta,.hint,.muted{color:var(--muted);font-size:13px}
.hint{margin:0 0 8px}
.join{background:var(--good)!important;color:#062014!important;border:0!important;font-weight:650;text-decoration:none;display:inline-block;border-radius:8px;padding:6px 10px;font-size:13px}
button.danger{background:#6e2a2a!important;border-color:#6e2a2a!important;color:#fff!important}
button.wipe{background:#5b34b5!important;border-color:#5b34b5!important;color:#fff!important}
button:disabled{cursor:not-allowed;opacity:.55}
button.person,.person{display:flex;gap:12px;align-items:center;text-align:left;width:100%}
.avatar{width:56px;height:56px;border-radius:50%;object-fit:cover;flex:none;background:#2a3344}
h1{margin:0 0 8px;font-size:22px;font-weight:650;letter-spacing:-.02em}
h2{margin:18px 0 8px;font-size:15px;font-weight:650}
h3{margin:0 0 6px;font-size:14px}
label{display:flex;gap:8px;align-items:center;margin:6px 0}
.emoji{height:1.15em;width:1.15em;vertical-align:-.2em;object-fit:contain}
@media(max-width:720px){.shell{grid-template-columns:1fr}.side{border-right:0;border-bottom:1px solid var(--line)}.nav{flex-direction:row;flex-wrap:wrap}.grid{grid-template-columns:1fr}.main{padding:16px}}
details{background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:8px 12px;margin:0 0 8px}
summary{cursor:pointer;font-weight:600}
.grid{display:grid;grid-template-columns:1fr 1fr;gap:8px 12px}
.floatwin{position:fixed;z-index:35;left:72px;top:56px;width:min(560px,calc(100vw - 24px));height:min(620px,calc(100vh - 24px));min-width:300px;min-height:260px;max-width:calc(100vw - 16px);max-height:calc(100vh - 16px);display:flex;flex-direction:column;background:#141922;border:1px solid var(--line);border-radius:14px;box-shadow:0 24px 60px #000a;resize:both;overflow:auto}
.floathead{position:sticky;top:0;display:flex;align-items:center;justify-content:space-between;gap:10px;padding:10px 12px;cursor:grab;background:#1b2433;user-select:none;z-index:1;font-size:13px}
.floatwin label{display:flex;flex-direction:column;align-items:stretch;gap:4px;margin:6px 0;font-size:13px;color:var(--muted)}
.floatwin button,.floatwin select,.floatwin input,.floatwin textarea{background:#10141b;border:1px solid var(--line);color:var(--text);border-radius:8px;padding:7px 10px}
.floatwin button{cursor:pointer}
.floatwin button[type="submit"],.floatwin #agreebtn{background:#243044;border-color:#8eb4ff;color:#fff}
.floatwin .x{background:transparent;border:0;color:var(--muted);font-size:18px;line-height:1;padding:0 4px}
textarea,input,select{background:#10141b;color:#e7edf5;caret-color:#e7edf5;border:1px solid var(--line);border-radius:8px;padding:8px 10px}
input::placeholder,textarea::placeholder{color:#93a0b3}
.actions input{flex:1;min-width:180px;width:auto}
textarea{min-height:64px}
.tablewrap{overflow:auto;border:1px solid var(--line);border-radius:10px}
table.audit{width:100%;border-collapse:collapse;font-size:13px}
table.audit th,table.audit td{text-align:left;padding:8px 10px;border-bottom:1px solid var(--line);vertical-align:top}
table.audit th{color:var(--muted);font-weight:650;cursor:pointer;white-space:nowrap;background:#141922}
table.audit td:nth-child(4){max-width:240px}
table.audit button.undo{margin-left:8px;padding:2px 8px;font-size:12px;background:#6e2a2a;border-color:#6e2a2a;color:#fff}
table.audit button.detail{background:transparent;border:0;color:#c5dcff;padding:0;text-align:left;cursor:pointer}
.auditpop{position:fixed;inset:0;z-index:40;background:#0008;display:grid;place-items:center;padding:16px}
.auditpop .sheet{width:min(560px,100%);max-height:min(70vh,640px);overflow:auto;background:#171c24;border:1px solid var(--line);border-radius:14px;padding:14px 16px;box-shadow:0 24px 60px #000a}
.auditpop .sheet p{margin:0 0 8px;white-space:pre-wrap;overflow-wrap:anywhere}
.auditpop .x{background:transparent;border:0;color:var(--muted);font-size:18px;line-height:1;padding:0 4px;cursor:pointer}
.rules-frame{width:100%;height:240px;border:0;border-radius:8px;background:transparent}
#dashrules{min-height:160px;font-family:ui-monospace,monospace}
.actions{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}
.setup-head h1{margin-bottom:4px}
.setup-tabs{display:flex;flex-wrap:wrap;gap:6px;position:sticky;top:0;z-index:4;padding:8px 0;background:#0e1116f2}
.setup-tabs button{background:#121821;border:1px solid var(--line);color:var(--muted);border-radius:999px;padding:6px 12px}
.setup-tabs button.on{background:#243044;border-color:#8eb4ff;color:#fff}
.setup-panel{display:none}
.setup-panel.on{display:block}
.setup-card{background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:14px 16px;margin:0 0 12px}
.setup-card h2{margin:0 0 4px;font-size:15px}
.setup .fields{display:grid;grid-template-columns:1fr 1fr;gap:12px 14px;margin-top:12px}
.setup .stack-fields{display:grid;gap:12px}
.setup label{display:flex;flex-direction:column;align-items:stretch;gap:4px;margin:0;color:var(--muted);font-size:12px}
.setup .checks{display:flex;flex-wrap:wrap;gap:8px}
.setup .check{flex-direction:row;align-items:center;gap:8px;width:auto;padding:8px 10px;border:1px solid var(--line);border-radius:8px;background:#10141b;color:var(--text);font-size:13px}
.setup .pills{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}
.setup .pill{border:1px solid var(--line);border-radius:999px;padding:4px 10px;color:var(--muted);font-size:12px;background:#121821}
.setup .hint.warn{color:#e0a23a;margin-top:10px}
.setup .savebar{position:sticky;bottom:52px;z-index:4;display:flex;justify-content:space-between;align-items:center;gap:12px;padding:10px 12px;background:#171c24f2;border:1px solid var(--line);border-radius:12px}
.setup .savebar button{background:#243044;border-color:#8eb4ff;color:#fff;font-weight:650}
@media(max-width:720px){.setup .fields{grid-template-columns:1fr}}
section{margin:0 0 18px}
/* 2.12.28: Dev page Pending actions */
.pendwrap{margin-top:8px}
.pendwrap .devtable{margin-top:0}
.pendtable td.pendleft{white-space:nowrap;font-variant-numeric:tabular-nums}
.pendtable td.pendleft.due{color:#ffcf7a}
.pendtable button.pendrun{padding:3px 10px;font-size:12px;white-space:nowrap}
.pendtag{display:inline-block;border:1px solid var(--line);border-radius:999px;padding:1px 8px;font-size:11.5px;background:#121821;white-space:nowrap}
.pendtag.close{border-color:#6e2a2a}.pendtag.open{border-color:#2f6b4f}.pendtag.poll{border-color:#3a4a66}.pendtag.expire-held{border-color:#6b5a2f}.pendtag.cooldown-end{border-color:#5b34b5}
.pendok{color:var(--good)!important}
.penderr{color:#ff8a8a!important}
/* 2.12.29: per-row reason box next to Run now */
.pendact{display:flex;gap:6px;align-items:center}
.pendact input.pendreason{padding:3px 8px;font-size:12px;width:180px;min-width:110px}
/* 2.12.30: server picker is dev-only; keep it hidden for everyone else */
#guild[hidden]{display:none!important}
/* 2.12.32: clickable Logs rows + details panel */
table.audit tr.auditrow{cursor:pointer}
table.audit tr.auditrow:hover td{background:#1b2230}
table.audit tr.auditrow:focus{outline:2px solid var(--accent);outline-offset:-2px}
.auditpop .sheet{width:min(720px,100%);max-height:min(85vh,820px)}
.auditpop h4{margin:12px 0 6px;font-size:12px;color:var(--muted);font-weight:650;text-transform:uppercase;letter-spacing:.04em}
.auditpop table.kv{width:100%;border-collapse:collapse;font-size:13px}
.auditpop table.kv th{width:32%;text-align:left;color:var(--muted);font-weight:600;padding:5px 8px 5px 0;vertical-align:top;border-bottom:1px solid var(--line)}
.auditpop table.kv td{padding:5px 0;vertical-align:top;border-bottom:1px solid var(--line);overflow-wrap:anywhere}
.auditpop table.kv ul{margin:0;padding-left:18px}
.auditpop .subkv{border:1px solid var(--line);border-radius:8px;padding:6px 8px;margin:4px 0}
.auditpop code{background:#10141b;border:1px solid var(--line);border-radius:6px;padding:1px 5px;font-size:12px}
.auditpop button.copy{padding:1px 7px;font-size:11.5px;background:#121821;border:1px solid var(--line);border-radius:6px;color:var(--text);cursor:pointer}
.auditpop a{color:#c5dcff}
.auditpop .status{border:1px solid var(--line);border-radius:8px;padding:6px 8px;margin:4px 0;background:#141a24}
.auditpop .status.open{border-color:#2f6b4f}.auditpop .status.queued{border-color:#3a4a66}.auditpop .status.held{border-color:#6b5a2f}
/* 2.12.34: VRChat account chips (Setup) + account panel */
.setup .pills button.vrcchip{cursor:pointer;font:inherit;font-size:12px;color:var(--text)}
.setup .pills button.vrcchip:hover{border-color:#8eb4ff}
.setup .pills button.vrcchip:focus-visible{outline:2px solid var(--accent);outline-offset:1px}
.setup .pills button.vrcchip[data-state="online"]{border-color:#2f6b4f}
.setup .pills button.vrcchip[data-state="needs2fa"]{border-color:#e0a23a;color:#ffcf7a}
.vrcpop .sheet{width:min(520px,100%)}
.vrcpop .sheet p.meta{margin:0 0 4px}
.vrcpop form{display:flex;flex-direction:column;gap:8px;margin:10px 0}
.vrcpop label{flex-direction:column;align-items:stretch;gap:4px;margin:0;font-size:12.5px;color:var(--muted)}
.vrcpop input{width:100%}
.vrcpop button:not(.x){background:#121821;border:1px solid var(--line);color:var(--text);border-radius:8px;padding:7px 10px;cursor:pointer}
.vrcpop button[type="submit"]{background:#243044;border-color:#8eb4ff;color:#fff}
.vrcpop details{margin-top:8px}
.vrcpop .vrcacts{display:flex;flex-wrap:wrap;gap:6px;margin-top:10px}
.vrcpop .vrcmsg{color:var(--good);margin:6px 0}
.vrcpop .vrcmsg.bad{color:#ff8a8a}
.vrcpop .vrcmsg:empty{display:none}
.vrcstate{display:inline-block;border:1px solid var(--line);border-radius:999px;padding:1px 9px;font-size:12px;background:#121821}
.vrcstate.online{border-color:#2f6b4f;color:#7fe0b0}.vrcstate.needs2fa{border-color:#e0a23a;color:#ffcf7a}
/* 2.12.33: full-viewport dashboard. Sidebar bottom is pinned (Discord card + Sign out,
   then FAQ / Terms / Privacy); VRChat status stays pinned under the content pane;
   only the content pane scrolls. Scoped to body.dash so login + FAQ/Terms/Privacy pages are unchanged. */
.sidefoot{margin-top:auto;display:flex;flex-direction:column;gap:10px;flex:none}
.sidefoot .who{margin-top:0}
.side .legalbar{display:flex;flex-wrap:wrap;gap:6px 10px;padding:10px 4px 0;border-top:1px solid var(--line);background:transparent;font-size:12px}
.side .legalbar .legalbtn{padding:2px 8px}
.side .legalbar .credit{margin-left:0;width:100%;font-size:11px;line-height:1.3}
@media(min-width:801px){
  body.dash{height:100vh;height:100dvh;min-height:0;overflow:hidden}
  body.dash #app{min-height:0;overflow:hidden}
  body.dash .shell{grid-template-columns:216px minmax(0,1fr);grid-template-rows:minmax(0,1fr);min-height:0;overflow:hidden}
  body.dash .side{min-height:0;overflow:hidden}
  body.dash .side .nav{flex:1 1 auto;min-height:0;overflow-y:auto}
  body.dash .stage{min-height:0;overflow:hidden}
  body.dash .main{flex:1 1 auto;min-height:0;overflow-y:auto;overscroll-behavior:contain}
  body.dash .vrcbar{position:static;flex:none}
  body.dash .setup .savebar{bottom:8px}
}
@media(max-width:800px){
  body.dash .shell{grid-template-columns:1fr}
  body.dash .side{border-right:0;border-bottom:1px solid var(--line)}
  body.dash .nav{flex-direction:row;flex-wrap:wrap}
  body.dash .sidefoot{margin-top:4px}
}
