/* ============================================================
   ОБЩЕЕ ЛОББИ ИГР — единый вид страницы игры для всего сайта
   ------------------------------------------------------------
   Здесь живут классы, которые раньше существовали в ДВУХ копиях —
   в games/monopoly/monopoly.css и в games/mafia/mafia.css (см. бывший
   комментарий в шапке mafia.css: "при случае стоит вынести их в общий
   css, чтобы не дублировать при добавлении следующих игр"). Копии
   успели разойтись (у списка комнат была разная max-height, у кнопок —
   разный hover), из-за чего одинаковые по смыслу экраны выглядели
   по-разному. Теперь правило одно на весь сайт.

   Структура страницы игры (одинаковая у Монополии и Мафии):
     .menu-screen
       nav.header-nav          ← шапка сайта, та же что на главной (menu.css)
       .game-page-hero         ← пилюля с названием игры + заголовок + описание
       .lobby-wrap.active      ← само лобби
         #...CreateJoinBox     → .lobby-grid: "Войти в комнату" + "Открытые комнаты"
         #...RoomBox           → .lobby-grid: комната + её настройки
       .rating-section         ← рейтинг игроков (menu.css)
       .site-version-footer

   Подключать ПОСЛЕ menu.css и ДО css самой игры — чтобы игра могла
   при необходимости что-то переопределить у себя.

   Старые имена (.mono-page-hero/.mono-lobby-wrap/.mono-lobby-grid)
   оставлены рядом с новыми как синонимы: монополия использует их в
   разметке и в JS в нескольких местах, переименовывать всё разом —
   лишний риск ради косметики.
============================================================ */

/* ── Каркас страницы ── */
.game-page-hero,.mono-page-hero{width:100%;max-width:960px;margin:0 auto;padding:40px 24px 0;text-align:center}
.game-page-hero .hero-title,.mono-page-hero .hero-title{font-size:30px;margin-bottom:8px}
.game-page-hero .hero-sub,.mono-page-hero .hero-sub{font-size:14px;margin-bottom:0}
.game-pill{display:inline-flex;align-items:center;gap:7px;background:rgba(144,96,200,0.1);border:1px solid rgba(144,96,200,0.2);border-radius:100px;padding:6px 16px;font-size:12px;font-weight:700;color:#9060c8;margin-bottom:16px}

/* Лобби — обычный блок в потоке страницы (шапка+описание+лобби+рейтинг
   на одном экране): .menu-screen сам уже fixed/на весь экран со своим
   скроллом (см. menu.css), лобби внутри него никакой отдельной позиции
   не требует, только скрыт/показан. */
.lobby-wrap,.mono-lobby-wrap{display:none}
.lobby-wrap.active,.mono-lobby-wrap.active{display:block}
.lobby-wrap,.mono-lobby-wrap{width:100%;max-width:960px;margin:0 auto;padding:28px 24px 8px;box-sizing:border-box}
.lobby-grid,.mono-lobby-grid{display:grid;grid-template-columns:1fr 1fr;gap:20px;margin-top:4px}
@media (max-width:720px){.lobby-grid,.mono-lobby-grid{grid-template-columns:1fr}}

/* Ссылка "← Назад" в шапке. На узких экранах шапка (логотип+магазин+
   баланс+аватар) и так впритык — лишний текст "Назад" вылезает за край.
   Сворачиваем до одной стрелки, действие остаётся рабочим. */
.header-back-link{display:flex;align-items:center;gap:6px;font-size:12px;font-weight:700;color:#9060c8;background:rgba(144,96,200,0.08);border:1px solid rgba(144,96,200,0.18);border-radius:8px;padding:6px 14px;cursor:pointer;text-decoration:none;transition:background .12s;flex-shrink:0}
.header-back-link:hover{background:rgba(144,96,200,0.14)}
@media (max-width:480px){
  .header-back-link{padding:6px 10px;font-size:14px}
  .header-back-link .back-label{display:none}
}

/* ── Панели ── */
.panel{background:rgba(255,255,255,0.55);border:1px solid rgba(255,255,255,0.9);border-radius:20px;backdrop-filter:blur(10px);padding:26px 28px}
.panel-title{font-size:15px;font-weight:800;color:#3a2a4a;margin-bottom:18px;display:flex;align-items:center;gap:8px}
/* На узких телефонах боковые паддинги панели съедают заметную долю
   ширины экрана — подрезаем, содержимое остаётся тем же. */
@media (max-width:480px){.panel{padding:20px 16px;border-radius:16px}}
.lobby-panel,.mono-lobby-panel{max-width:100%}

/* ── Поля ввода и кнопки ── */
.input-row{display:flex;gap:10px}
.inp{flex:1;min-width:0;height:42px;border-radius:10px;border:1.5px solid rgba(200,180,220,0.5);background:rgba(255,255,255,0.7);padding:0 14px;font-family:inherit;font-size:13px;color:#3a2a4a;outline:none;transition:border-color .12s,box-shadow .12s;text-transform:uppercase}
.inp::placeholder{color:#a090c0;text-transform:none}
.inp:focus{border-color:#9060c8;box-shadow:0 0 0 3px rgba(144,96,200,0.12)}
.btn-primary{height:42px;padding:0 22px;border-radius:10px;border:none;background:linear-gradient(135deg,#c0a0e0,#9060c8);color:#fff;font-family:inherit;font-size:13px;font-weight:700;cursor:pointer;white-space:nowrap;box-shadow:0 2px 10px rgba(144,96,200,0.3);transition:filter .12s}
.btn-primary:hover{filter:brightness(1.1)}
.btn-ghost{width:100%;height:42px;border-radius:10px;border:1.5px solid rgba(144,96,200,0.25);background:rgba(144,96,200,0.07);color:#7a4ab0;font-family:inherit;font-size:13px;font-weight:700;cursor:pointer;transition:background .12s}
.btn-ghost:hover{background:rgba(144,96,200,0.13)}
.or-divider{display:flex;align-items:center;gap:10px;margin:16px 0;color:#9080b0;font-size:11px;font-weight:600}
.or-divider::before,.or-divider::after{content:'';flex:1;height:1px;background:rgba(200,180,220,0.5)}
.mono-big-btn{width:100%;padding:13px;border-radius:14px;border:none;background:linear-gradient(135deg,#c0a0e0,#9060c8);color:#fff;font-size:14px;font-weight:700;cursor:pointer;font-family:inherit;transition:filter .12s}
.mono-big-btn:hover:not(:disabled){filter:brightness(1.08)}
.mono-big-btn:disabled{opacity:.4;cursor:not-allowed;filter:none}
.net-btn{flex:1;padding:11px;border-radius:12px;border:1.5px solid rgba(200,180,220,0.5);background:rgba(255,255,255,0.5);color:#7060a0;font-size:13px;font-weight:600;cursor:pointer;font-family:inherit;transition:background .12s}
.net-btn:hover{background:rgba(255,255,255,0.85)}
.net-btn.reconnect{background:linear-gradient(135deg,#f5d020,#e0a020);border-color:rgba(200,150,30,0.5);color:#5a4a10;font-weight:700}
.net-row{display:flex;gap:8px;margin-bottom:12px}
.net-note{font-size:11px;color:#a090b0;text-align:center;margin-top:10px;line-height:1.4}
.net-lobby-hint{font-size:10.5px;color:#a090b8;text-align:center;margin-bottom:8px;line-height:1.4}

/* Код комнаты. Отдельный класс, а не id: id у каждой игры свой
   (#netRoomCodeDisplay / #mafiaRoomCodeDisplay), вид — общий. */
.room-code-display,#netRoomCodeDisplay{font-size:24px;font-weight:800;color:#3a2a4a;letter-spacing:4px;text-align:center;margin:8px 0;background:rgba(255,255,255,0.5);border-radius:10px;padding:8px}

/* ── Кнопка обновления списка ── */
.lobby-refresh-btn{margin-left:auto;width:28px;height:28px;border-radius:8px;border:1px solid rgba(144,96,200,0.2);background:rgba(144,96,200,0.08);color:#9060c8;font-size:15px;line-height:1;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:background .12s}
.lobby-refresh-btn:hover{background:rgba(144,96,200,0.16)}
/* Крутится на КАЖДЫЙ клик, даже если реальный запрос к серверу в этот
   раз не ушёл (троттлинг 1 раз/30с молчаливый — кнопка всегда выглядит
   одинаково отзывчивой). */
.lobby-refresh-btn.spin{animation:lobbyRefreshSpin .5s ease}
@keyframes lobbyRefreshSpin{from{transform:rotate(0)}to{transform:rotate(360deg)}}

/* ── Список открытых комнат ── */
.online-row{display:flex;align-items:center;gap:8px;margin-bottom:14px}
.online-dot{width:8px;height:8px;border-radius:50%;background:#5aa050;box-shadow:0 0 6px rgba(90,160,80,0.5)}
.online-count{font-size:13px;font-weight:700;color:#3a2a4a}
.online-label{font-size:12px;color:#9080b0}
.lobby-list-box{display:flex;flex-direction:column;gap:7px;max-height:220px;overflow-y:auto;padding-right:2px}
.lobby-list-empty{font-size:11px;color:#a090b0;text-align:center;padding:14px 6px}
.room-row{display:flex;align-items:center;gap:10px;padding:10px 12px;border-radius:11px;background:rgba(255,255,255,0.55);border:1px solid rgba(200,180,220,0.35);cursor:pointer;transition:background .1s,transform .1s}
.room-row:hover{background:rgba(255,255,255,0.85);transform:translateX(2px)}
.room-row.started{background:rgba(245,200,66,0.1);border-color:rgba(224,160,32,0.4)}
.room-row.started:hover{background:rgba(245,200,66,0.18)}
.room-icon{width:34px;height:34px;border-radius:9px;display:flex;align-items:center;justify-content:center;font-size:16px;flex-shrink:0;background:rgba(144,96,200,0.1)}
.room-info{flex:1;min-width:0}
.room-name{font-size:12.5px;font-weight:700;color:#3a2a4a;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:flex;align-items:center;gap:6px}
.room-meta{font-size:10.5px;color:#9080b0;margin-top:1px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.room-started-badge{font-size:9px;font-weight:800;text-transform:uppercase;letter-spacing:0.3px;color:#8a6410;background:rgba(224,160,32,0.2);padding:2px 6px;border-radius:100px;flex-shrink:0}
.room-players{font-size:11px;color:#9080b0;flex-shrink:0}
.room-join{font-size:11px;font-weight:700;color:#7a4ab0;background:rgba(144,96,200,0.1);padding:4px 12px;border-radius:100px;flex-shrink:0}
.room-row.started .room-join{color:#8a6410;background:rgba(245,200,66,0.25)}
/* Строка комнаты, распознанная как "моя активная партия" — тот же
   .room-row, но с жёлтым акцентом вместо фиолетового, чтобы бросалась
   в глаза среди прочих открытых комнат. */
.room-row.reconnect{background:rgba(245,208,32,0.14);border-color:rgba(224,160,32,0.5)}
.room-join.room-join-reconnect{background:linear-gradient(135deg,#f5d020,#e0a020);color:#5a4a10;font-weight:700}
/* Заполненное лобби: войти нельзя, смотреть тоже нечего (партия ещё не
   началась) — строка остаётся в списке, но без реакции на клик, чтобы
   не выглядела рабочей кнопкой, которая молча ничего не делает. */
.room-row-locked{cursor:default;opacity:.65}
.room-row-locked:hover{background:rgba(255,255,255,0.55);transform:none}
.room-join-full{color:#9080b0;background:rgba(150,130,180,0.12)}

/* ── Гостевой вид списка комнат: размытые примеры + кнопка входа поверх ── */
.lobby-list-box-guest{position:relative;overflow:hidden}
.lobby-guest-blurred{display:flex;flex-direction:column;gap:7px;filter:blur(4px);pointer-events:none;user-select:none}
.lobby-guest-cta{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;padding:12px}
.lobby-guest-cta .btn-primary{white-space:normal;height:auto;padding:12px 20px;text-align:center;line-height:1.3}

/* ── Требование аккаунта (сетевая игра без него невозможна) ── */
.net-auth-required-box{background:rgba(255,255,255,0.55);border:1.5px solid rgba(200,180,220,0.5);border-radius:14px;padding:20px 18px;text-align:center}
.net-auth-required-icon{font-size:28px;margin-bottom:8px}
.net-auth-required-text{font-size:12px;color:#7060a0;line-height:1.5;margin-bottom:6px}

/* ── Кнопка "Добавить бота" (общая для Монополии и Мафии) ── */
.mafia-add-bot-btn{
  width:100%;margin-bottom:10px;padding:11px;
  border-radius:12px;border:1.5px solid rgba(144,96,200,0.35);
  background:linear-gradient(135deg,rgba(192,160,224,0.18),rgba(144,96,200,0.22));
  color:#6a40a0;font-size:13px;font-weight:700;cursor:pointer;font-family:inherit;
  display:flex;align-items:center;justify-content:center;gap:8px;
  transition:transform .15s,box-shadow .15s,background .15s;
}
.mafia-add-bot-btn:hover{
  transform:translateY(-1px);
  box-shadow:0 6px 18px rgba(144,96,200,0.25);
  background:linear-gradient(135deg,rgba(192,160,224,0.28),rgba(144,96,200,0.32));
}
.mafia-add-bot-btn:active{transform:translateY(0)}
/* Иконка-робот с этой кнопки убрана (и в Мафии, и в Монополии кнопка
   теперь без эмодзи), стили .mafia-add-bot-icon удалены как мёртвые. */
/* Кнопки лобби НЕ прячутся, а становятся неактивными: исчезающая кнопка
   меняет высоту панели, и вёрстка прыгает при каждом входе/выходе игрока.
   Раз кнопка остаётся на месте — ей нужен явный вид "недоступно". */
.mafia-add-bot-btn:disabled{opacity:.42;cursor:not-allowed;filter:grayscale(.4);box-shadow:none}
.mafia-add-bot-btn:disabled:hover{transform:none;filter:grayscale(.4)}

/* ── Оверлей "Подключение..." ── */
.net-loading-overlay{position:fixed;inset:0;z-index:600;background:rgba(60,40,80,0.45);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:14px}
.net-loading-spinner{width:38px;height:38px;border-radius:50%;border:4px solid rgba(255,255,255,0.35);border-top-color:#fff;animation:netSpin .8s linear infinite}
.net-loading-text{color:#fff;font-size:14px;font-weight:700;text-shadow:0 2px 6px rgba(0,0,0,0.3)}
@keyframes netSpin{to{transform:rotate(360deg)}}
