/* 好友房 */
body[data-view="room"]{overflow:hidden}
body.online #newBtn,body.online #logBtn{display:none}
#view-play[data-ol="wait"]>:not(.top):not(#olWait):not(#olBanner):not(#olCd){display:none}
#view-play[data-ol="game"]>#olWait{display:none}
.ol-banner{position:fixed;top:0;left:0;right:0;z-index:45;background:var(--cinnabar);color:#fff;text-align:center;font-size:13px;padding:6px 10px}
.ol-wait{flex:1;min-height:0;overflow:auto;display:flex;flex-direction:column;gap:12px;padding-bottom:8px}
.ol-head{text-align:center}
.ol-lbl{font-size:12px;color:var(--mist);letter-spacing:.08em}
.ol-code{font:700 44px/1.2 ui-monospace,Menlo,Consolas,monospace;letter-spacing:.14em;color:var(--brass);background:none;border:1px dashed rgba(226,171,75,.5);border-radius:12px;padding:6px 18px;margin:4px 0;min-width:0}
.ol-seats{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}
.ol-seat{display:flex;flex-direction:column;align-items:center;gap:5px;padding:10px 4px;border:1px solid var(--line);border-radius:12px;background:rgba(var(--shade),.3);min-width:0;text-align:center}
.ol-seat.me{border-color:var(--brass)}
.ol-seat.ready{box-shadow:inset 0 0 0 1px #7bd88f}
.ol-seat.empty{border-style:dashed;cursor:pointer}
.ol-seat .nm{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ol-seat .ava{position:relative}
.ol-online{position:absolute;right:-1px;bottom:-1px;width:10px;height:10px;border-radius:50%;background:#7bd88f;border:2px solid var(--felt)}
.ol-online.off{background:#888}
.ol-tag{font-size:11px;padding:1px 7px;border-radius:999px;border:1px solid var(--line);color:var(--mist);line-height:1.5}
.ol-tag.ok{background:#2f7d46;border-color:#2f7d46;color:#fff}
.ol-tag.ai{border-color:rgba(226,171,75,.5);color:var(--brass)}
.ol-tag.off{background:#555;color:#fff}
.ol-owner{font-size:11px;color:var(--brass);font-weight:700}
.ol-hintline{font-size:11px;color:var(--mist)}
.ol-ctl{display:flex;flex-direction:column;gap:4px;width:100%;align-items:stretch}
.ol-ctl select{font:13px var(--f-ui);padding:4px;border-radius:8px;background:rgba(var(--shade),.55);color:var(--text);border:1px solid var(--line);min-width:0}
.ol-seat .ghost.sm,.ol-info .ghost.sm{padding:4px 6px;font-size:12px;min-width:0}
.ol-info{display:flex;flex-wrap:wrap;gap:6px 10px;align-items:center;justify-content:center;font-size:13px;color:var(--mist)}
.ol-info .ol-rules{flex-basis:100%;text-align:center}
.ol-sec{border:1px solid var(--line);border-radius:12px;padding:10px 12px;background:rgba(var(--shade),.25)}
.ol-scroll{overflow:auto;max-height:40vh}
.ol-ledger{width:100%;border-collapse:collapse;font-size:13px}
.ol-ledger th,.ol-ledger td{padding:5px 4px;border-top:1px solid var(--line);text-align:right;font-variant-numeric:tabular-nums}
.ol-ledger th:first-child,.ol-ledger td:first-child{text-align:left}
.ol-ledger td.up{color:var(--brass)}.ol-ledger td.down{color:var(--down)}
.ol-ledger tr.sum td{font-weight:700}
.danger{color:var(--warn)}
.ol-cd{position:fixed;inset:0;z-index:35;display:grid;place-items:center;font:400 160px var(--f-display);color:var(--brass);background:rgba(8,14,30,.5);pointer-events:none}
.ol-cd.go{animation:pop 1s ease-out}
.ol-bub{position:absolute;z-index:5;max-width:55%;background:var(--porcelain);color:var(--ink);font-size:13px;padding:5px 10px;border-radius:12px;pointer-events:none;word-break:break-all}
.ol-bub.b0{bottom:8px;left:50%;transform:translateX(-50%)}
.ol-bub.b1{top:30%;right:0}
.ol-bub.b2{top:30%;left:0}
.ol-dot{position:absolute;top:1px;right:1px;width:9px;height:9px;border-radius:50%;background:var(--cinnabar)}
#olChatBtn{position:relative}
.ol-chat{z-index:48}
.ol-chatlog{height:40vh;overflow:auto;border:1px solid var(--line);border-radius:10px;padding:8px;margin-bottom:8px;font-size:14px}
.ol-msg{margin:3px 0;word-break:break-all}.ol-msg b{color:var(--brass)}
.ol-chatrow{display:flex;gap:8px}
.ol-off{opacity:.55}
.seat .clock.sm{width:30px;height:30px;font-size:13px}
@media (max-width:480px){.ol-code{font-size:36px}.ol-seats{gap:6px}}

/* #42 语音 */
.ava.speaking{box-shadow:0 0 0 3px #7be08a,0 0 12px #7be08a}
#olVoiceBtn.on{color:#7be08a}
.ol-voice{z-index:60}.ol-talk{width:100%;margin:12px 0;padding:18px;font-size:18px;touch-action:none;user-select:none}
.ol-talk.on{filter:brightness(1.25)}
.ol-vrow{display:flex;align-items:center;gap:10px;padding:8px 0;border-bottom:1px solid rgba(255,255,255,.1)}
.ol-vrow .nm{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis}.ol-vrow.speaking .nm{color:#7be08a}
