:root{
  --bg:#0a0b16;
  --bg-grad-1:#1b0f3a;
  --bg-grad-2:#071022;
  --surface:rgba(255,255,255,.045);
  --surface-2:rgba(255,255,255,.075);
  --surface-solid:#151726;
  --line:rgba(255,255,255,.10);
  --text:#f4f2ff;
  --text-dim:#9a95bd;
  --accent:#8b5cf6;
  --accent-2:#22d3ee;
  --accent-text:#0a0b16;
  --bus:#ff3d6e;
  --bus-2:#ff7a3d;
  --bus-text:#fff6f2;
  --danger:#ff5470;
  --warn:#ffb020;
  --ok:#2ee6a6;
  --radius:18px;
  --font-head:'Cairo',sans-serif;
  --font-body:'Tajawal',sans-serif;
  --shadow-glow:0 0 44px -12px rgba(139,92,246,.55);
  color-scheme:dark;
}
:root[data-theme="light"]{
  --bg:#eef1ff;
  --bg-grad-1:#ffe1f2;
  --bg-grad-2:#dfe9ff;
  --surface:rgba(255,255,255,.62);
  --surface-2:rgba(255,255,255,.85);
  --surface-solid:#ffffff;
  --line:rgba(24,20,60,.12);
  --text:#181430;
  --text-dim:#5c5980;
  --accent:#7c3aed;
  --accent-2:#0891a8;
  --accent-text:#ffffff;
  --bus:#e63462;
  --bus-2:#ff8a3d;
  --bus-text:#fff;
  --danger:#d81d4a;
  --warn:#b06b00;
  --ok:#0c8f5e;
  --shadow-glow:0 0 44px -16px rgba(124,58,237,.35);
  color-scheme:light;
}
*{box-sizing:border-box;}
svg{vertical-align:-3px;flex:none;}
.bus-icon-img{vertical-align:-4px;flex:none;object-fit:contain;}
html,body{margin:0;padding:0;}
body{
  background:var(--bg);
  color:var(--text);
  font-family:var(--font-body);
  min-height:100vh;
  direction:inherit;
  position:relative;
  overflow-x:hidden;
  transition:background .35s ease,color .35s ease;
}
body::before,body::after{
  content:'';
  position:fixed;
  border-radius:50%;
  filter:blur(70px);
  z-index:-1;
  opacity:.55;
  animation:drift 16s ease-in-out infinite alternate;
}
body::before{
  width:60vmax;height:60vmax;
  top:-20vmax;right:-18vmax;
  background:radial-gradient(circle,var(--bg-grad-1),transparent 70%);
}
body::after{
  width:55vmax;height:55vmax;
  bottom:-22vmax;left:-16vmax;
  background:radial-gradient(circle,var(--bg-grad-2),transparent 70%);
  animation-delay:-8s;
}
@keyframes drift{
  0%{transform:translate(0,0) scale(1);}
  100%{transform:translate(-4%,5%) scale(1.08);}
}
#app{
  max-width:640px;
  margin:0 auto;
  padding:24px 16px 70px;
  min-height:100vh;
  position:relative;
}
#app.has-nav{padding-bottom:96px;}
h1,h2,h3{font-family:var(--font-head);margin:0 0 6px;}
.brand{display:flex;align-items:center;gap:12px;margin-bottom:26px;}
.brand .badge{
  width:56px;height:56px;
  display:flex;align-items:center;justify-content:center;
  flex:none;
}
.brand h1{
  font-size:22px;
  background:linear-gradient(90deg,var(--text),var(--accent-2));
  -webkit-background-clip:text;background-clip:text;color:transparent;
  letter-spacing:.2px;
}
.card{
  background:var(--surface);
  border:1px solid var(--line);
  border-radius:var(--radius);
  padding:20px;
  margin-bottom:16px;
  backdrop-filter:blur(18px);
  -webkit-backdrop-filter:blur(18px);
  box-shadow:0 20px 45px -30px rgba(0,0,0,.7);
  transition:background .35s ease,border-color .35s ease;
}
.card.winner-card{border-color:var(--ok);box-shadow:0 0 0 1px var(--ok),0 18px 40px -24px rgba(46,230,166,.35);}
.road{
  height:2px;
  background:repeating-linear-gradient(90deg,var(--line) 0 14px,transparent 14px 26px);
  margin:18px 0;
}
label{display:block;font-size:13px;color:var(--text-dim);margin:0 0 6px;}
input[type=text],input[type=password],input[type=number]{
  width:100%;
  padding:13px 14px;
  border-radius:12px;
  border:1px solid var(--line);
  background:var(--surface-2);
  color:var(--text);
  font-family:var(--font-body);
  font-size:15px;
  margin-bottom:12px;
  transition:border-color .15s ease,box-shadow .15s ease;
}
input:focus{outline:none;border-color:var(--accent-2);box-shadow:0 0 0 3px rgba(34,211,238,.18);}
.btn{
  display:inline-flex;align-items:center;justify-content:center;gap:8px;
  width:100%;padding:14px 16px;border-radius:13px;border:none;
  background:linear-gradient(135deg,var(--accent),var(--accent-2));
  color:var(--accent-text);
  font-family:var(--font-head);font-weight:800;font-size:15px;
  cursor:pointer;margin-bottom:10px;
  box-shadow:0 10px 24px -12px rgba(139,92,246,.6);
  transition:transform .12s ease,box-shadow .12s ease,filter .12s ease;
}
.btn:hover{filter:brightness(1.07);}
.btn:active{transform:translateY(1px) scale(.99);}
.btn:disabled{opacity:.35;cursor:not-allowed;box-shadow:none;filter:none;}
.btn.secondary{background:transparent;color:var(--text);border:1px solid var(--line);box-shadow:none;}
.btn.ghost{background:var(--surface-2);color:var(--text);border:1px solid var(--line);box-shadow:none;}
.btn.danger{background:linear-gradient(135deg,var(--bus-2),var(--bus));color:var(--bus-text);}
.btn.small{width:auto;padding:8px 14px;font-size:13px;}
.tabs{display:flex;gap:8px;margin-bottom:16px;}
.tab{
  flex:1;text-align:center;padding:10px;border-radius:12px;cursor:pointer;
  color:var(--text-dim);font-family:var(--font-head);font-weight:700;border:1px solid var(--line);
}
.tab.active{background:linear-gradient(135deg,var(--accent),var(--accent-2));color:var(--accent-text);border-color:transparent;}
.section-label-row{display:flex;align-items:center;justify-content:space-between;margin-top:4px;}
.section-label-row label{margin:0;}
.link-btn{
  display:inline-flex;align-items:center;gap:6px;
  background:none;border:none;color:var(--accent-2);font-family:var(--font-head);
  font-weight:700;font-size:12.5px;cursor:pointer;padding:4px 0;
}
.chips{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:14px;}
.chip{
  padding:9px 11px;border-radius:10px;border:1px solid var(--line);
  background:var(--surface-2);color:var(--text);cursor:pointer;
  font-size:15px;user-select:none;min-width:38px;text-align:center;
  transition:transform .1s ease,box-shadow .15s ease;
}
.chip.on{background:linear-gradient(135deg,var(--accent),var(--accent-2));color:var(--accent-text);border-color:transparent;box-shadow:0 6px 16px -8px rgba(139,92,246,.7);transform:translateY(-1px);}
.options{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:14px;}
.opt{
  padding:10px 15px;border-radius:12px;border:1px solid var(--line);
  background:var(--surface-2);color:var(--text);cursor:pointer;
  font-family:var(--font-head);font-weight:700;font-size:14px;
}
.opt.on{background:linear-gradient(135deg,var(--accent),var(--accent-2));color:var(--accent-text);border-color:transparent;}
.opt-input{
  padding:10px 15px;border-radius:12px;border:1px solid var(--accent-2);
  background:var(--surface-2);color:var(--text);
  font-family:var(--font-head);font-weight:700;font-size:14px;
  width:96px;text-align:center;
}
.player-row{
  display:flex;align-items:center;justify-content:space-between;
  padding:10px 0;border-bottom:1px solid var(--line);
}
.player-row:last-child{border-bottom:none;}
.player-id{display:flex;align-items:center;gap:8px;}
.player-row .dot{width:8px;height:8px;border-radius:50%;display:inline-block;}
.dot.on{background:var(--ok);box-shadow:0 0 8px var(--ok);}
.dot.off{background:var(--text-dim);}
.crown{color:#d4af37;}
.code-box-wrap{display:flex;flex-direction:column;align-items:center;gap:10px;margin-bottom:6px;}
.code-box{
  font-family:var(--font-head);font-size:42px;letter-spacing:11px;text-align:center;
  background:var(--surface-2);border:1px dashed var(--accent-2);border-radius:14px;
  color:var(--accent-2);
  padding:16px 20px;width:100%;
  text-shadow:0 0 24px rgba(34,211,238,.4);
}
.copy-btn{
  display:inline-flex;align-items:center;gap:6px;
  padding:9px 16px;border-radius:10px;border:1px solid var(--line);
  background:var(--surface-2);color:var(--text);font-family:var(--font-head);
  font-weight:700;font-size:13px;cursor:pointer;
}
.copy-btn:hover{border-color:var(--accent-2);}
.center{text-align:center;}
.letter-stage{display:flex;flex-direction:column;align-items:center;margin:6px 0 16px;}
.letter-stage-label{font-size:12.5px;color:var(--text-dim);font-family:var(--font-head);font-weight:700;letter-spacing:.5px;margin-bottom:10px;}
.letter-hero{
  position:relative;
  width:114px;height:114px;
  border-radius:30px;
  display:flex;align-items:center;justify-content:center;
  background:linear-gradient(155deg,var(--surface-2),var(--surface));
  border:1px solid var(--line);
  box-shadow:var(--shadow-glow);
}
.letter-hero::before{
  content:'';position:absolute;inset:-8px;border-radius:40px;
  background:conic-gradient(from 0deg,var(--accent),var(--accent-2),var(--accent));
  z-index:-1;opacity:.55;filter:blur(14px);
  animation:spin 6s linear infinite;
}
.letter-hero span{
  font-family:var(--font-head);font-size:41.6px;font-weight:800;
  background:linear-gradient(180deg,var(--text),var(--accent-2));
  -webkit-background-clip:text;background-clip:text;color:transparent;
  line-height:1;
}
.timer{text-align:center;font-family:var(--font-head);font-size:27px;font-weight:800;margin-bottom:18px;color:var(--text-dim);}
.timer.warn{color:var(--danger);animation:pulse-text .6s ease-in-out infinite;}
@keyframes pulse-text{0%,100%{opacity:1;}50%{opacity:.45;}}
.field-label{font-family:var(--font-head);font-size:14px;font-weight:700;margin-bottom:6px;color:var(--text);}
.bus-btn{
  width:100%;padding:20px;border-radius:18px;border:none;
  background:linear-gradient(135deg,var(--bus-2),var(--bus));
  color:var(--bus-text);
  font-family:var(--font-head);font-weight:800;font-size:21px;letter-spacing:.3px;
  cursor:pointer;margin-top:8px;
  box-shadow:0 0 0 0 rgba(255,61,110,.6);
  animation:bus-pulse 1.7s ease-out infinite;
}
.bus-btn:disabled{opacity:.3;cursor:not-allowed;animation:none;box-shadow:none;}
@keyframes bus-pulse{
  0%{box-shadow:0 0 0 0 rgba(255,61,110,.5);}
  70%{box-shadow:0 0 0 18px rgba(255,61,110,0);}
  100%{box-shadow:0 0 0 0 rgba(255,61,110,0);}
}
.cat-block{margin-bottom:22px;}
.cat-title{
  font-family:var(--font-head);font-size:16px;font-weight:800;margin-bottom:10px;
  padding-bottom:6px;border-bottom:2px solid var(--accent-2);display:inline-block;
}
.answer-cell{
  display:flex;align-items:center;justify-content:space-between;gap:10px;
  background:var(--surface-2);border:1px solid var(--line);border-radius:12px;
  padding:10px 12px;margin-bottom:8px;
}
.answer-cell .name{font-size:13px;color:var(--text-dim);min-width:80px;display:inline-flex;align-items:center;gap:6px;cursor:pointer;}
.answer-cell .word{flex:1;font-weight:600;text-align:center;}
.answer-cell .empty{color:var(--text-dim);font-style:italic;}
.score-btns{display:flex;gap:6px;}
.score-btn{
  width:34px;height:34px;border-radius:9px;border:1px solid var(--line);
  background:var(--surface);color:var(--text);font-weight:700;cursor:pointer;
  display:grid;place-items:center;font-family:var(--font-head);font-size:15px;line-height:1;padding:0;box-sizing:border-box;
}
.score-btn.on{background:linear-gradient(135deg,var(--accent),var(--accent-2));color:var(--accent-text);border-color:transparent;box-shadow:0 0 10px -2px rgba(139,92,246,.65);}
.score-progress{text-align:center;font-size:12.5px;color:var(--text-dim);margin-bottom:10px;font-family:var(--font-head);font-weight:700;}
.top-bar{display:flex;justify-content:space-between;align-items:center;margin-bottom:14px;}
.top-bar .info{font-size:13px;color:var(--text-dim);}
.round-outcome{
  text-align:center;font-family:var(--font-head);font-weight:800;font-size:18px;
  padding:16px;border-radius:16px;margin-bottom:16px;
}
.round-outcome.win{background:rgba(46,230,166,.14);color:var(--ok);border:1px solid rgba(46,230,166,.4);}
.round-outcome.lose{background:rgba(255,84,112,.12);color:var(--danger);border:1px solid rgba(255,84,112,.35);}
.leader{display:flex;align-items:center;justify-content:space-between;padding:12px 0;border-bottom:1px solid var(--line);}
.leader:last-child{border-bottom:none;}
.leader .rank{font-family:var(--font-head);font-weight:800;color:var(--text-dim);width:26px;}
.leader.first .rank{color:var(--warn);}
.leader .pts{font-family:var(--font-head);font-weight:800;}
.muted{color:var(--text-dim);font-size:13px;}
.err{color:var(--danger);font-size:13px;margin:-4px 0 10px;}
.msg-ok{color:var(--ok);font-size:13px;margin:-4px 0 10px;text-align:center;font-weight:700;}
.auth-switch{
  text-align:center;font-size:13px;color:var(--text-dim);margin:6px 0 0;cursor:pointer;
}
.auth-switch span{color:var(--accent-2);font-weight:700;}
.auth-viewport{min-height:78vh;display:flex;flex-direction:column;justify-content:center;}
.scoring-wrap{position:relative;}
.card.spectator{pointer-events:none;}
.spinner{
  width:34px;height:34px;border-radius:50%;
  border:3px solid var(--line);border-top-color:var(--accent-2);
  margin:0 auto 16px;animation:spin 1s linear infinite;
}
@keyframes spin{to{transform:rotate(360deg);}}
.top-banner{
  position:fixed;top:16px;left:50%;transform:translateX(-50%);
  z-index:60;padding:13px 22px;border-radius:14px;
  background:var(--surface-solid);color:var(--text);
  border:1px solid var(--accent-2);
  font-family:var(--font-head);font-weight:800;font-size:14px;
  box-shadow:0 20px 40px -16px rgba(0,0,0,.6);
  animation:bannerIn .25s ease;max-width:92vw;text-align:center;
  display:inline-flex;align-items:center;gap:8px;
}
.top-banner .banner-icon{display:flex;color:var(--accent-2);flex:none;}
@keyframes bannerIn{from{opacity:0;transform:translate(-50%,-12px);}to{opacity:1;transform:translate(-50%,0);}}
.avatar-img{border-radius:50%;object-fit:cover;border:2px solid var(--line);}
.avatar-fallback{
  border-radius:50%;display:flex;align-items:center;justify-content:center;margin:0 auto;
  background:linear-gradient(135deg,var(--accent),var(--accent-2));color:var(--accent-text);
  font-family:var(--font-head);font-weight:800;
}
.avatar-edit{display:flex;flex-direction:column;align-items:center;gap:10px;}
.avatar-upload-btn{
  display:inline-flex;align-items:center;gap:6px;padding:9px 16px;border-radius:10px;
  background:var(--surface-2);border:1px solid var(--line);color:var(--text);
  font-family:var(--font-head);font-weight:700;font-size:13px;cursor:pointer;
}
.avatar-upload-btn:hover{border-color:var(--accent-2);}
.contact-grid{display:flex;gap:12px;}
.contact-card{
  flex:1;display:flex;flex-direction:column;align-items:center;gap:8px;
  padding:16px 10px;border-radius:14px;border:1px solid var(--line);
  background:var(--surface-2);text-decoration:none;color:var(--text);
  font-family:var(--font-head);font-weight:700;font-size:13px;
  transition:transform .12s ease,border-color .15s ease;
}
.contact-card:hover{transform:translateY(-2px);border-color:var(--accent-2);}
.contact-icon{width:44px;height:44px;border-radius:50%;overflow:hidden;display:flex;align-items:center;justify-content:center;}
.bottom-nav{
  position:fixed;bottom:16px;left:50%;transform:translateX(-50%);
  display:flex;gap:6px;
  width:calc(100% - 40px);max-width:340px;
  background:var(--surface-solid);
  border:1px solid var(--line);
  border-radius:20px;
  padding:8px 10px calc(8px + env(safe-area-inset-bottom));
  box-shadow:0 20px 40px -16px rgba(0,0,0,.55);
  z-index:40;
}
.nav-indicator{
  position:absolute;top:8px;bottom:8px;left:0;
  border-radius:14px;
  background:linear-gradient(135deg,var(--accent),var(--accent-2));
  box-shadow:0 6px 16px -8px rgba(139,92,246,.7);
  transition:transform .28s cubic-bezier(.4,0,.2,1),width .28s cubic-bezier(.4,0,.2,1);
  z-index:0;
  pointer-events:none;
}
.nav-btn{
  position:relative;z-index:1;
  flex:1;display:flex;flex-direction:column;align-items:center;gap:3px;
  background:none;border:none;color:var(--text-dim);cursor:pointer;
  font-family:var(--font-head);font-weight:700;font-size:11px;
  padding:6px 0;border-radius:14px;
  transition:color .15s ease;
}
.nav-btn .nav-icon{display:flex;}
.nav-btn.active{color:var(--accent-text);}
.theme-fab{
  position:fixed;top:16px;left:16px;z-index:45;
  width:44px;height:44px;border-radius:50%;
  border:1px solid var(--line);
  background:var(--surface-solid);
  display:flex;align-items:center;justify-content:center;
  font-size:20px;cursor:pointer;
  box-shadow:0 10px 24px -12px rgba(0,0,0,.5);
}
html[dir="ltr"] .theme-fab{left:auto;right:16px;}
.profile-menu{display:flex;flex-direction:column;}
.menu-btn{text-align:start;justify-content:flex-start;}
.logout-btn.menu-btn{background:transparent;border:1px solid var(--danger);color:var(--danger);box-shadow:none;}
.modal-overlay{
  position:fixed;inset:0;z-index:80;
  background:rgba(5,4,14,.6);
  display:flex;align-items:center;justify-content:center;
  padding:20px;
}
.modal-box{
  background:var(--surface-solid);border:1px solid var(--line);border-radius:18px;
  padding:24px;max-width:340px;width:100%;text-align:center;
  box-shadow:0 30px 60px -20px rgba(0,0,0,.75);
}
.modal-actions{display:flex;gap:10px;margin-top:16px;}
.modal-actions .btn{margin-bottom:0;}
@media (max-width:420px){
  .code-box{font-size:34px;letter-spacing:8px;}
  .letter-hero{width:96px;height:96px;}
  .letter-hero span{font-size:35.2px;}
}

/* ---------- Language switch ---------- */
.lang-btn{
  display:flex;align-items:center;justify-content:center;gap:10px;
  width:100%;padding:12px 16px;border-radius:13px;
  background:var(--surface-2);border:1px solid var(--line);color:var(--text);
  font-family:var(--font-head);font-weight:800;font-size:15px;cursor:pointer;
  margin-bottom:16px;
}
.lang-btn:hover{border-color:var(--accent-2);}
.lang-flag{
  width:26px;height:26px;border-radius:50%;flex:none;
  display:flex;align-items:center;justify-content:center;
  font-size:16px;line-height:1;overflow:hidden;
  background:var(--surface-solid);border:1px solid var(--line);
}

/* ---------- Search bar ---------- */
.search-bar{
  display:flex;align-items:center;gap:10px;
  background:var(--surface-2);border:1px solid var(--line);
  border-radius:14px;padding:11px 14px;margin-bottom:16px;
}
.search-bar svg{color:var(--text-dim);flex:none;}
.search-bar input{
  border:none;background:none;outline:none;color:var(--text);
  font-family:var(--font-body);font-size:15px;width:100%;padding:0;margin:0;
}

/* ---------- Clickable user rows ---------- */
.user-row{
  display:flex;align-items:center;gap:12px;
  padding:11px 6px;border-radius:12px;cursor:pointer;
  transition:background .12s ease;
}
.user-row:hover{background:var(--surface-2);}
.user-row .u-name{flex:1;min-width:0;}
.user-row .u-nick{font-weight:700;font-family:var(--font-head);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.user-row .u-user{font-size:12px;color:var(--text-dim);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.player-clickable{cursor:pointer;}
.player-clickable:hover{opacity:.85;}
.empty-state{text-align:center;color:var(--text-dim);font-size:13.5px;padding:26px 10px;}
.friend-tag{
  font-size:11px;font-family:var(--font-head);font-weight:700;color:var(--ok);
  background:rgba(46,230,166,.14);border:1px solid rgba(46,230,166,.35);
  border-radius:8px;padding:3px 8px;flex:none;
}

/* ---------- Player popup ---------- */
.popup-box{
  background:var(--surface-solid);border:1px solid var(--line);border-radius:20px;
  padding:26px 22px 22px;max-width:340px;width:100%;text-align:center;position:relative;
  box-shadow:0 30px 60px -20px rgba(0,0,0,.75);
}
.popup-close{
  position:absolute;top:12px;left:12px;width:32px;height:32px;border-radius:50%;
  border:1px solid var(--line);background:var(--surface-2);color:var(--text);
  display:flex;align-items:center;justify-content:center;cursor:pointer;
}
.popup-actions{display:flex;gap:10px;margin-top:18px;}
.popup-actions .btn{margin-bottom:0;}
.btn.friend-add{background:linear-gradient(135deg,var(--accent),var(--accent-2));color:var(--accent-text);}
.btn.friend-remove{background:transparent;border:1px solid var(--danger);color:var(--danger);box-shadow:none;}

/* ---------- Chat (DM) screen ---------- */
.chat-header{display:flex;align-items:center;gap:12px;margin-bottom:16px;}
.chat-header .u-nick{font-family:var(--font-head);font-weight:800;font-size:17px;}
.dm-messages{display:flex;flex-direction:column;gap:10px;margin-bottom:14px;max-height:56vh;overflow-y:auto;padding:4px 2px;}
.msg-row{display:flex;gap:8px;max-width:82%;}
.msg-row.mine{align-self:flex-end;flex-direction:row-reverse;margin-inline-start:auto;}
.msg-bubble{
  background:var(--surface-2);border:1px solid var(--line);border-radius:14px;
  padding:9px 13px;font-size:14px;line-height:1.45;word-break:break-word;
}
.msg-row.mine .msg-bubble{background:linear-gradient(135deg,var(--accent),var(--accent-2));color:var(--accent-text);border-color:transparent;}
.msg-time{font-size:10.5px;color:var(--text-dim);margin-top:3px;display:block;}
.msg-row.mine .msg-time{text-align:end;}
.chat-input-row{display:flex;gap:8px;align-items:center;}
.chat-input-row input{margin-bottom:0;flex:1;}
.chat-send-btn{
  flex:none;width:46px;height:46px;border-radius:12px;border:none;
  background:linear-gradient(135deg,var(--accent),var(--accent-2));color:var(--accent-text);
  display:flex;align-items:center;justify-content:center;cursor:pointer;
}
.chat-send-btn:disabled{opacity:.35;cursor:not-allowed;}

/* ---------- Floating room-chat button + panel ---------- */
.room-chat-fab{
  position:fixed;bottom:20px;right:20px;z-index:50;
  width:56px;height:56px;border-radius:50%;border:none;
  background:linear-gradient(135deg,var(--accent),var(--accent-2));
  color:var(--accent-text);display:flex;align-items:center;justify-content:center;
  box-shadow:0 14px 30px -10px rgba(139,92,246,.7);cursor:pointer;
}
.room-chat-fab .badge-count{
  position:absolute;top:-4px;left:-4px;min-width:20px;height:20px;padding:0 5px;
  border-radius:10px;background:var(--danger);color:#fff;
  font-family:var(--font-head);font-weight:800;font-size:11px;
  display:flex;align-items:center;justify-content:center;
  border:2px solid var(--bg);
}
.room-chat-panel{
  position:fixed;bottom:0;right:0;left:0;z-index:70;
  display:flex;justify-content:flex-end;
}
.room-chat-panel .panel-overlay{position:fixed;inset:0;background:rgba(5,4,14,.55);}
.room-chat-box{
  position:relative;z-index:1;width:100%;max-width:400px;
  background:var(--surface-solid);border:1px solid var(--line);
  border-radius:20px 20px 0 0;padding:16px 16px calc(14px + env(safe-area-inset-bottom));
  max-height:78vh;display:flex;flex-direction:column;
  box-shadow:0 -20px 50px -20px rgba(0,0,0,.6);
  margin-left:auto;margin-right:0;
}
@media (max-width:420px){.room-chat-box{max-width:100%;}}
.room-chat-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px;}
.room-chat-head h3{margin:0;}
.room-chat-messages{flex:1;overflow-y:auto;display:flex;flex-direction:column;gap:10px;padding:4px 2px;margin-bottom:10px;}
.rc-msg{display:flex;gap:8px;align-items:flex-start;}
.rc-msg .rc-body{flex:1;min-width:0;}
.rc-msg .rc-name{font-family:var(--font-head);font-weight:700;font-size:12.5px;color:var(--accent-2);cursor:pointer;}
.rc-msg .rc-text{font-size:14px;line-height:1.4;word-break:break-word;}

/* ---------- Contact icon images (Telegram / WhatsApp) ---------- */
.contact-icon img{width:100%;height:100%;object-fit:cover;border-radius:50%;}

/* ---------- Lobby: kebab menu + invite ---------- */
.kebab-btn{
  background:none;border:none;color:var(--text-dim);cursor:pointer;
  padding:6px;border-radius:8px;display:flex;align-items:center;justify-content:center;flex:none;
}
.kebab-btn:hover{background:var(--surface-2);color:var(--text);}
.msg-menu-box{padding-top:34px;}
.msg-menu-reactions{
  display:flex;justify-content:center;gap:6px;flex-wrap:wrap;
  margin-bottom:16px;padding-bottom:14px;border-bottom:1px solid var(--line);
}
.reaction-pick{
  width:38px;height:38px;border-radius:50%;border:1px solid var(--line);
  background:var(--surface-2);font-size:19px;cursor:pointer;
  display:flex;align-items:center;justify-content:center;
  transition:transform .12s ease;
}
.reaction-pick:hover{transform:scale(1.12);}
.msg-menu-actions{display:flex;flex-direction:column;gap:8px;}
.msg-menu-actions .menu-btn{margin-bottom:0;}
.edited-tag{font-size:11px;color:var(--text-dim);font-style:italic;}
.msg-reactions{font-size:12.5px;margin-top:3px;}
.msg-row.mine .msg-reactions{text-align:end;}
.editing-bar{
  display:flex;align-items:center;gap:6px;justify-content:space-between;
  background:var(--surface-2);border:1px solid var(--accent-2);border-radius:10px;
  padding:7px 12px;margin-bottom:8px;font-size:12.5px;color:var(--text-dim);
}
.editing-bar .link-btn{font-size:12px;padding:0;}
.invite-card{
  background:var(--surface-2);border:1px solid var(--line);border-radius:14px;
  padding:12px 14px;min-width:180px;
}
.invite-card-row{display:flex;align-items:center;gap:8px;font-family:var(--font-head);font-weight:700;font-size:13px;margin-bottom:8px;}
.invite-code{
  font-family:var(--font-head);font-size:22px;font-weight:800;letter-spacing:5px;
  text-align:center;color:var(--accent-2);margin-bottom:8px;
}
.invite-card .btn.small{width:100%;}
.invite-invalid{color:var(--text-dim);font-size:13px;text-align:center;padding:4px 0;}
.invite-card.invalid{opacity:.7;}

/* ---------- Room voice chat (mic / speaker) ---------- */
.voice-fabs{position:fixed;bottom:20px;left:20px;z-index:50;display:flex;flex-direction:column;gap:10px;}
.voice-fab{
  width:50px;height:50px;border-radius:50%;border:1px solid var(--line);
  background:var(--surface-solid);color:var(--text);
  display:flex;align-items:center;justify-content:center;cursor:pointer;
  box-shadow:0 14px 30px -12px rgba(0,0,0,.55);
}
.voice-fab.on{background:linear-gradient(135deg,var(--accent),var(--accent-2));color:var(--accent-text);border-color:transparent;box-shadow:0 0 18px -2px rgba(139,92,246,.7);}
.voice-player-row{display:flex;align-items:center;gap:10px;padding:9px 2px;}
.mute-toggle-btn{
  width:32px;height:32px;border-radius:9px;border:1px solid var(--line);
  background:var(--surface-2);color:var(--text);display:flex;align-items:center;justify-content:center;
  cursor:pointer;flex:none;
}
.mute-toggle-btn.on{background:var(--danger);color:#fff;border-color:transparent;}
.vol-slider{width:80px;flex:none;accent-color:var(--accent-2);margin:0;}

/* ---------- Persistent leave button (in-game) ---------- */
.leave-mini-btn{
  background:var(--surface-2);border:1px solid var(--line);color:var(--danger);
  width:34px;height:34px;border-radius:10px;flex:none;
  display:flex;align-items:center;justify-content:center;cursor:pointer;
}

/* ---------- DM attachments / voice notes ---------- */
.dm-input-tools{display:flex;gap:8px;align-items:center;}
.tool-btn{
  flex:none;width:40px;height:40px;border-radius:12px;border:1px solid var(--line);
  background:var(--surface-2);color:var(--text);display:flex;align-items:center;justify-content:center;cursor:pointer;
}
.tool-btn.recording{background:var(--danger);color:#fff;border-color:transparent;}
.attach-menu-box{padding:20px 18px;}
.attach-option{
  display:flex;align-items:center;gap:12px;width:100%;
  background:var(--surface-2);border:1px solid var(--line);border-radius:12px;
  padding:12px 14px;margin-bottom:10px;color:var(--text);cursor:pointer;font-family:var(--font-head);font-weight:700;font-size:14px;
}
.recording-bar{
  display:flex;align-items:center;gap:10px;justify-content:space-between;
  background:var(--surface-2);border:1px solid var(--danger);border-radius:10px;
  padding:8px 12px;margin-bottom:8px;font-size:13px;
}
.recording-bar .rec-dot{width:9px;height:9px;border-radius:50%;background:var(--danger);flex:none;animation:recBlink 1s infinite;}
@keyframes recBlink{0%,100%{opacity:1;}50%{opacity:.25;}}
.recording-bar .rec-wave{flex:1;display:flex;align-items:center;gap:2px;height:28px;overflow:hidden;}
.recording-bar .rec-bar{flex:0 0 3px;width:3px;height:4px;min-height:4px;border-radius:3px;background:linear-gradient(180deg,var(--accent),var(--accent-2));transition:height .08s ease;}
.recording-bar .rec-time{font-family:var(--font-head);font-weight:700;flex:none;}
.recording-bar .rec-btn{background:none;border:none;color:var(--text);cursor:pointer;display:flex;align-items:center;justify-content:center;padding:4px;}
.recording-bar .rec-btn.send{color:var(--ok);}
.recording-bar .rec-btn.cancel{color:var(--danger);}
.msg-bubble.voice-bubble{padding:8px 10px;display:flex;align-items:center;gap:8px;min-width:180px;}
.voice-play-btn{
  flex:none;width:30px;height:30px;border-radius:50%;border:none;cursor:pointer;
  display:flex;align-items:center;justify-content:center;
  background:linear-gradient(135deg,var(--accent),var(--accent-2));color:var(--accent-text);
}
.voice-wave{flex:1;display:flex;align-items:center;gap:2px;height:26px;overflow:hidden;}
.voice-bar{flex:0 0 3px;width:3px;border-radius:3px;background:var(--line);transition:background .1s ease;}
.voice-bar.played{background:linear-gradient(180deg,var(--accent),var(--accent-2));}
.voice-time{flex:none;font-family:var(--font-head);font-weight:700;font-size:11px;color:var(--text-dim);}
.msg-image-wrap .msg-image{max-width:220px;max-height:220px;border-radius:12px;display:block;object-fit:cover;}
.msg-file-card{
  display:flex;align-items:center;gap:10px;background:var(--surface-2);
  border:1px solid var(--line);border-radius:12px;padding:10px 12px;text-decoration:none;color:var(--text);min-width:180px;
}
.msg-file-card .file-name{font-size:13px;font-weight:600;word-break:break-all;}
.rc-msg .rc-text audio{width:200px;max-width:55vw;height:32px;}

/* ---------- Delete-message confirm dialog ---------- */
.delete-check-row{
  display:flex;align-items:center;gap:10px;margin-top:14px;
  font-size:13.5px;color:var(--text);cursor:pointer;
}
.delete-check-row input[type="checkbox"]{width:18px;height:18px;accent-color:var(--accent-2);flex:none;margin:0;}
