    :root {
      --bg-dark: #0f0a06;
      --bg-mid: #1a120b;
      --bg-card: rgba(63, 43, 26, 0.6);
      --amber-100: #fef3c7;
      --amber-200: #fde68a;
      --amber-300: #fcd34d;
      --amber-400: #fbbf24;
      --amber-600: #d97706;
      --amber-700: #b45309;
      --amber-800: #92400e;
      --blue-400: #60a5fa;
      --blue-600: #2563eb;
      --blue-800: #1e40af;
      --green-500: #22c55e;
      --red-500: #ef4444;
      --wood: #5c3d2a;
      --wood-dark: #3f2b1a;
      --text-muted: #8b7355;
      --text-dim: #6b5244;
      --border: rgba(251, 191, 36, 0.15);
      /* Полупрозрачные тоны (для inline-замен) */
      --amber-glow-soft: rgba(251, 191, 36, 0.08);
      --amber-glow-mid:  rgba(251, 191, 36, 0.15);
      --amber-glow-line: rgba(251, 191, 36, 0.2);
      --amber-text-soft: rgba(253, 230, 138, 0.6);
      --amber-text-mid:  rgba(253, 230, 138, 0.8);
      --bg-card-soft:    rgba(15, 10, 6, 0.4);
      --bg-card-mid:     rgba(15, 10, 6, 0.5);
      /* Тени — единая лестница */
      --shadow-sm: 0 4px 12px rgba(0, 0, 0, 0.25);
      --shadow-md: 0 6px 20px rgba(0, 0, 0, 0.3);
      --shadow-lg: 0 10px 28px rgba(0, 0, 0, 0.35);
      --shadow-xl: 0 16px 44px rgba(0, 0, 0, 0.4);

      /* ── Theme tokens (тёмная по умолчанию) ── */
      --page-bg-image: url('background-dark.png');
      /* Радиальная виньетка: центр — мягкий тинт для читаемости, углы — глубокая
         заливка чтобы притушить орнаменты, иначе они конкурируют с контентом */
      --page-bg-tint: radial-gradient(ellipse at center, rgba(15, 10, 6, 0.35) 0%, rgba(15, 10, 6, 0.62) 55%, rgba(15, 10, 6, 0.85) 100%);
      --text: var(--amber-200);
      --text-strong: var(--amber-400);
      --text-on-card: var(--amber-200);
      --surface-bg: rgba(15, 10, 6, 0.55);
      --surface-bg-strong: rgba(15, 10, 6, 0.72);
      --surface-border: rgba(251, 191, 36, 0.18);
      --header-bg: linear-gradient(90deg, rgba(20, 12, 6, 0.7), rgba(20, 12, 6, 0.55));
    }

    /* ── Светлая тема ── */
    [data-theme="light"] {
      --page-bg-image: url('background-light.png');
      --page-bg-tint: radial-gradient(ellipse at center, rgba(255, 248, 232, 0.35) 0%, rgba(252, 240, 215, 0.6) 55%, rgba(248, 235, 205, 0.78) 100%);
      --text: #4a3324;
      --text-strong: #92400e;
      --text-on-card: #3a2a18;
      --text-muted: #8a7355;
      --text-dim: #a08a6a;
      --surface-bg: rgba(255, 247, 230, 0.74);
      --surface-bg-strong: rgba(255, 248, 235, 0.88);
      --surface-border: rgba(146, 64, 14, 0.22);
      --amber-glow-soft: rgba(180, 83, 9, 0.06);
      --amber-glow-mid:  rgba(180, 83, 9, 0.12);
      --amber-glow-line: rgba(180, 83, 9, 0.2);
      --amber-text-soft: rgba(74, 51, 36, 0.55);
      --amber-text-mid:  rgba(74, 51, 36, 0.78);
      --bg-card-soft:    rgba(255, 247, 230, 0.6);
      --bg-card-mid:     rgba(255, 247, 230, 0.78);
      --bg-card:         rgba(255, 247, 230, 0.72);
      --border:          rgba(146, 64, 14, 0.18);
      --header-bg: linear-gradient(90deg, rgba(255, 247, 230, 0.85), rgba(252, 240, 215, 0.78));
      --shadow-sm: 0 4px 12px rgba(110, 70, 30, 0.12);
      --shadow-md: 0 6px 20px rgba(110, 70, 30, 0.16);
      --shadow-lg: 0 10px 28px rgba(110, 70, 30, 0.2);
      --shadow-xl: 0 16px 44px rgba(110, 70, 30, 0.22);
      /* Перекраска amber-токенов для читаемости на светлом фоне.
         amber-100 НЕ трогаем — используется как текст на тёмных amber-кнопках. */
      --amber-200: #5a3818;
      --amber-400: #92400e;
      --amber-600: #b45309;
    }

    /* На мобильных используем портретные варианты —
       лучше скомпонованы под вертикальный экран и не растягиваются. */
    @media (max-width: 700px) {
      :root {
        --page-bg-image: url('background-dark-mobile.png');
      }
      [data-theme="light"] {
        --page-bg-image: url('background-mobile-light.png');
      }
    }

    * {
      margin: 0;
      padding: 0;
      box-sizing: border-box;
    }

    body {
      font-family: 'Segoe UI', 'SF Pro Display', system-ui, sans-serif;
      background:
        var(--page-bg-tint),
        var(--page-bg-image) center / cover no-repeat fixed,
        linear-gradient(160deg, var(--bg-dark), var(--bg-mid) 40%, #0d1117);
      color: var(--text);
      min-height: 100vh;
      display: flex;
      flex-direction: column;
    }

    /* ── Шапка ── */
    header {
      display: flex;
      align-items: center;
      justify-content: space-between;
      padding: 12px 24px;
      background: var(--header-bg);
      border-bottom: 1px solid var(--surface-border);
      position: sticky;
      top: 0;
      z-index: 50;
      backdrop-filter: blur(12px);
    }

    .logo {
      display: flex;
      align-items: center;
      cursor: pointer;
      flex-shrink: 0;
      background: transparent;
      border: 1px solid transparent;
      padding: 2px 4px;
      border-radius: 8px;
    }
    .logo:focus-visible {
      outline: none;
      border-color: var(--amber-glow-line);
      background: var(--amber-glow-soft);
    }

    .logo-img {
      height: 44px;
      width: auto;
      display: block;
      transition: opacity 0.25s, transform 0.25s;
    }

    .logo:hover .logo-img {
      transform: translateY(-1px);
    }

    /* Показываем только нужный SVG в зависимости от темы */
    .logo-img-light { display: none; }
    [data-theme="light"] .logo-img-dark  { display: none; }
    [data-theme="light"] .logo-img-light { display: block; }

    @media (max-width: 900px) {
      .logo-img { height: 36px; }
    }

    @media (max-width: 640px) {
      .logo-img { height: 32px; }
    }

    .primary-nav {
      display: flex;
      align-items: center;
      gap: 4px;
      flex: 1;
      justify-content: center;
      margin: 0 16px;
    }

    .nav-link {
      padding: 7px 14px;
      border-radius: 8px;
      font-size: 13px;
      font-weight: 600;
      letter-spacing: 0.5px;
      color: var(--amber-200);
      text-decoration: none;
      transition: background 0.15s, color 0.15s;
      white-space: nowrap;
    }

    .nav-link:hover {
      background: rgba(251, 191, 36, 0.08);
      color: var(--amber-100);
    }

    .nav-link.active {
      background: rgba(251, 191, 36, 0.14);
      color: var(--amber-400);
      box-shadow: inset 0 -2px 0 var(--amber-400);
    }

    @media (max-width: 900px) {
      .primary-nav {
        gap: 0;
        margin: 0 8px;
      }
      .nav-link {
        padding: 6px 8px;
        font-size: 11px;
      }
    }

    /* На мобильных верхнее меню прячем — открывается через hamburger,
       выезжающий drawer'ом из правой части экрана. */
    @media (max-width: 640px) {
      .primary-nav { display: none; }
    }

    /* Hamburger button — виден только на мобильном. */
    .menu-toggle {
      display: none;
      width: 36px;
      height: 36px;
      border-radius: 8px;
      background: none;
      border: 1px solid var(--amber-glow-line);
      flex-direction: column;
      align-items: center;
      justify-content: center;
      gap: 4px;
      padding: 0;
      cursor: pointer;
    }
    .menu-toggle span {
      display: block;
      width: 18px;
      height: 2px;
      background: var(--amber-400);
      border-radius: 2px;
      transition: transform 0.2s, opacity 0.2s;
    }
    @media (max-width: 640px) {
      .menu-toggle { display: flex; }
    }

    /* Drawer-меню — выезжает сверху на мобильном. */
    .mobile-drawer {
      position: fixed;
      top: 0; left: 0; right: 0;
      z-index: 70;
      background: var(--surface-bg-strong);
      backdrop-filter: blur(16px);
      -webkit-backdrop-filter: blur(16px);
      border-bottom: 1px solid var(--amber-glow-line);
      box-shadow: 0 12px 32px rgba(0, 0, 0, 0.4);
      padding: 64px 20px 20px;
      animation: drawerSlideDown 0.18s ease-out;
    }
    @keyframes drawerSlideDown {
      from { transform: translateY(-100%); opacity: 0.6; }
      to   { transform: translateY(0);     opacity: 1; }
    }
    .drawer-nav {
      display: flex;
      flex-direction: column;
      gap: 4px;
    }
    .drawer-link {
      padding: 14px 16px;
      border-radius: 10px;
      font-size: 16px;
      font-weight: 600;
      color: var(--text);
      text-decoration: none;
      letter-spacing: 0.5px;
      border: 1px solid transparent;
    }
    .drawer-link:hover, .drawer-link:focus-visible {
      background: var(--amber-glow-soft);
      border-color: var(--amber-glow-mid);
      color: var(--amber-400);
      outline: none;
    }
    .drawer-link.active {
      background: var(--amber-glow-mid);
      color: var(--amber-400);
    }
    body.drawer-open { overflow: hidden; }
    /* На десктопе меню всегда скрыто (мы не используем drawer выше 640px). */
    @media (min-width: 641px) {
      .mobile-drawer { display: none !important; }
    }

    .header-tools {
      display: flex;
      align-items: center;
      gap: 10px;
    }

    .user-bar {
      display: flex;
      align-items: center;
      gap: 16px;
    }

    .online-badge {
      display: flex;
      align-items: center;
      gap: 5px;
      padding: 4px 10px;
      border-radius: 8px;
      background: rgba(34, 197, 94, 0.08);
      border: 1px solid rgba(34, 197, 94, 0.2);
      font-size: 12px;
      font-weight: 600;
      color: var(--green-500);
    }

    .online-badge .online-dot {
      width: 6px;
      height: 6px;
      border-radius: 50%;
      background: var(--green-500);
      animation: pulse 1.5s ease-in-out infinite;
    }

    .balance-badge {
      display: flex;
      align-items: center;
      gap: 6px;
      padding: 6px 14px;
      border-radius: 8px;
      background: rgba(251, 191, 36, 0.1);
      border: 1px solid rgba(251, 191, 36, 0.2);
    }

    .balance-badge span {
      color: var(--amber-200);
      font-weight: 700;
    }

    .user-info {
      text-align: right;
    }

    .user-info .name {
      color: var(--amber-100);
      font-size: 14px;
      font-weight: 500;
    }

    .user-info .stats {
      font-size: 11px;
      color: var(--text-dim);
    }

    /* ── Sound toggle ── */
    .sound-toggle, .icon-toggle {
      background: none;
      border: 1px solid var(--amber-glow-line);
      color: var(--amber-400);
      font-size: 16px;
      cursor: pointer;
      width: 36px;
      height: 36px;
      border-radius: 8px;
      display: flex;
      align-items: center;
      justify-content: center;
      transition: all 0.2s;
    }

    .sound-toggle:hover, .icon-toggle:hover {
      background: var(--amber-glow-soft);
    }

    .sound-toggle.muted {
      color: var(--text-dim);
      border-color: rgba(107, 82, 68, 0.3);
    }

    /* ── Контент ── */
    main {
      flex: 1;
      display: flex;
      align-items: center;
      justify-content: center;
      padding: 20px;
    }

    /* ── Уведомления ── */
    @keyframes bounce {
      0% {
        transform: translateX(-50%) scale(0.9);
      }

      100% {
        transform: translateX(-50%) scale(1);
      }
    }

    /* ── Disconnect notification ── */
    .disconnect-banner {
      position: fixed;
      top: 60px;
      left: 50%;
      transform: translateX(-50%);
      padding: 10px 20px;
      border-radius: 10px;
      font-size: 13px;
      font-weight: 600;
      background: rgba(220, 38, 38, 0.25);
      border: 1px solid rgba(239, 68, 68, 0.4);
      color: #fca5a5;
      z-index: 99;
      display: none;
      animation: bounce 0.3s ease;
    }

    .disconnect-banner .timer-badge {
      display: inline-block;
      margin-left: 8px;
      padding: 2px 8px;
      border-radius: 6px;
      background: rgba(239, 68, 68, 0.3);
      font-size: 12px;
    }

    /* ── Карточки ── */
    .card {
      padding: 24px;
      border-radius: 16px;
      background: var(--bg-card);
      border: 1px solid var(--border);
      box-shadow: var(--shadow-md);
      backdrop-filter: blur(14px);
      -webkit-backdrop-filter: blur(14px);
    }

    .card h3 {
      color: var(--amber-200);
      font-size: 18px;
      margin-bottom: 16px;
    }

    /* ══════════════════════════════════════════════════════════
     ЛЕНДИНГ
     ══════════════════════════════════════════════════════════ */
    #landing-view {
      width: 100%;
      max-width: 960px;
      display: flex;
      flex-direction: column;
      gap: 0;
    }

    /* ── Hero ── */
    .hero {
      text-align: center;
      padding: 56px 20px 48px;
      position: relative;
      overflow: hidden;
    }

    .hero::before {
      content: '';
      position: absolute;
      top: -50%;
      left: -30%;
      width: 160%;
      height: 200%;
      background: radial-gradient(ellipse at 50% 30%, rgba(251, 191, 36, 0.08) 0%, transparent 50%),
        radial-gradient(ellipse at 20% 80%, rgba(180, 83, 9, 0.05) 0%, transparent 40%),
        radial-gradient(ellipse at 80% 80%, rgba(96, 165, 250, 0.03) 0%, transparent 40%);
      pointer-events: none;
    }

    .hero::after {
      content: '';
      position: absolute;
      bottom: 0;
      left: 10%;
      right: 10%;
      height: 2px;
      background: linear-gradient(90deg, transparent, var(--amber-700), var(--amber-400), var(--amber-700), transparent);
      opacity: 0.4;
    }

    .hero-title {
      font-size: 44px;
      color: var(--amber-400);
      letter-spacing: 5px;
      margin-bottom: 16px;
      text-shadow: 0 0 60px rgba(251, 191, 36, 0.15);
      font-weight: 800;
    }

    @media (max-width: 500px) {
      .hero-title {
        font-size: 28px;
        letter-spacing: 3px;
      }
    }

    .hero-subtitle {
      font-size: 20px;
      color: var(--amber-200);
      opacity: 0.95;
      margin-bottom: 10px;
      font-weight: 400;
      line-height: 1.5;
    }

    .hero .sub2 {
      font-size: 14px;
      color: var(--text-muted);
      margin-bottom: 32px;
      max-width: 520px;
      margin-left: auto;
      margin-right: auto;
      line-height: 1.6;
    }

    .hero-cta {
      display: flex;
      gap: 12px;
      justify-content: center;
      flex-wrap: wrap;
      margin-bottom: 16px;
    }

    .btn-hero {
      padding: 16px 36px;
      border-radius: 14px;
      border: none;
      font-size: 17px;
      font-weight: 700;
      cursor: pointer;
      transition: all 0.3s;
      letter-spacing: 0.5px;
    }

    .btn-hero:hover {
      transform: scale(1.05);
    }

    .btn-hero:active {
      transform: scale(0.95);
    }

    .btn-hero-primary {
      background: linear-gradient(135deg, var(--amber-700), var(--amber-600));
      color: var(--amber-100);
      box-shadow: 0 8px 32px rgba(180, 83, 9, 0.4);
    }

    .btn-hero-secondary {
      background: rgba(251, 191, 36, 0.06);
      color: var(--amber-400);
      border: 1px solid rgba(251, 191, 36, 0.2);
    }

    .btn-hero-tertiary {
      background: none;
      color: var(--text-muted);
      border: 1px solid rgba(107, 82, 68, 0.3);
      font-size: 14px;
      padding: 12px 24px;
    }

    .btn-hero-tertiary:hover {
      color: var(--amber-200);
      border-color: rgba(251, 191, 36, 0.2);
    }

    .hero-trust {
      display: flex;
      justify-content: center;
      gap: 20px;
      flex-wrap: wrap;
      margin-top: 8px;
    }

    .hero-trust-item {
      font-size: 11px;
      color: var(--text-dim);
      display: flex;
      align-items: center;
      gap: 5px;
    }

    .hero-trust-item .ht-icon {
      color: var(--green-500);
      font-size: 13px;
    }

    /* ── Live status bar ── */
    .live-bar {
      display: flex;
      justify-content: center;
      gap: 28px;
      flex-wrap: wrap;
      padding: 16px 20px;
      border-top: 1px solid rgba(251, 191, 36, 0.06);
      border-bottom: 1px solid rgba(251, 191, 36, 0.06);
      background: var(--bg-card-soft);
    }

    .live-item {
      display: flex;
      align-items: center;
      gap: 8px;
      font-size: 13px;
      color: var(--amber-200);
    }

    .live-dot {
      width: 7px;
      height: 7px;
      border-radius: 50%;
      background: var(--green-500);
      animation: pulse 1.5s ease-in-out infinite;
    }

    .live-val {
      font-weight: 700;
      color: var(--amber-400);
    }

    /* ── Mini demo ── */
    .mini-demo-section {
      padding: 48px 24px;
      border-top: 1px solid rgba(251, 191, 36, 0.06);
      text-align: center;
    }

    .mini-demo-title {
      font-size: 22px;
      color: var(--amber-400);
      font-weight: 800;
      margin-bottom: 6px;
      letter-spacing: 1px;
    }

    .mini-demo-sub {
      font-size: 13px;
      color: var(--text-muted);
      margin-bottom: 28px;
    }

    .demo-board-table {
      display: block;
      position: relative;
      background: url('table.png') center / 100% 100% no-repeat;
      border-radius: 8%/16%;
      aspect-ratio: 1536 / 1024;
      width: min(640px, 92vw);
      margin: 0 auto;
      box-shadow:
        0 22px 50px rgba(0, 0, 0, 0.5),
        0 8px 22px rgba(0, 0, 0, 0.3),
        0 0 50px rgba(251, 170, 60, 0.06);
    }

    .demo-pit {
      position: absolute;
      display: flex;
      flex-direction: column;
      align-items: center;
      justify-content: center;
      border-radius: 50%;
      background: transparent;
      border: none;
      transition: all 0.25s;
    }

    .demo-pit>* {
      /* Сдвиг масштабируется с шириной экрана: на мобильном ~4-5px, на десктопе 10px. */
      transform: translateY(min(10px, 1.3vw));
    }

    .demo-stones {
      display: flex;
      flex-wrap: wrap;
      justify-content: center;
      gap: clamp(0.5px, 0.2vw, 1.5px);
      max-width: 80%;
      padding: 0 clamp(1px, 0.25vw, 2px);
      box-sizing: border-box;
    }

    .demo-pit .demo-count {
      font-size: clamp(9px, 1.7vw, 13px);
      font-weight: 800;
      color: rgba(253, 230, 138, 0.95);
      text-shadow: 0 1px 4px rgba(0, 0, 0, 0.85), 0 0 6px rgba(0, 0, 0, 0.5);
      margin-top: 1px;
    }

    .demo-pit.demo-active {
      background: rgba(251, 191, 36, 0.2);
      box-shadow: 0 0 18px rgba(251, 191, 36, 0.6), inset 0 0 12px rgba(251, 191, 36, 0.15);
    }

    .demo-pit.demo-highlight {
      background: rgba(34, 197, 94, 0.18);
      box-shadow: 0 0 14px rgba(34, 197, 94, 0.55);
    }

    .demo-pit.demo-capture {
      background: rgba(251, 191, 36, 0.3);
      box-shadow: 0 0 22px rgba(251, 191, 36, 0.7);
    }

    /* Координаты лунок — те же, что в боевой доске */
    .demo-row-top .demo-pit:nth-child(1) {
      left: 20.44%;
      top: 21.78%;
      width: 6.25%;
      height: 16.89%;
    }

    .demo-row-top .demo-pit:nth-child(2) {
      left: 27.41%;
      top: 21.78%;
      width: 5.86%;
      height: 16.80%;
    }

    .demo-row-top .demo-pit:nth-child(3) {
      left: 34.18%;
      top: 21.78%;
      width: 5.86%;
      height: 16.80%;
    }

    .demo-row-top .demo-pit:nth-child(4) {
      left: 41.02%;
      top: 21.88%;
      width: 5.73%;
      height: 16.70%;
    }

    .demo-row-top .demo-pit:nth-child(5) {
      left: 47.76%;
      top: 21.88%;
      width: 5.66%;
      height: 16.89%;
    }

    .demo-row-top .demo-pit:nth-child(6) {
      left: 54.59%;
      top: 21.88%;
      width: 5.53%;
      height: 16.80%;
    }

    .demo-row-top .demo-pit:nth-child(7) {
      left: 60.97%;
      top: 21.88%;
      width: 6.18%;
      height: 16.89%;
    }

    .demo-row-top .demo-pit:nth-child(8) {
      left: 67.97%;
      top: 21.88%;
      width: 5.73%;
      height: 16.89%;
    }

    .demo-row-top .demo-pit:nth-child(9) {
      left: 74.64%;
      top: 21.97%;
      width: 5.79%;
      height: 16.80%;
    }

    .demo-row-bot .demo-pit:nth-child(1) {
      left: 20.51%;
      top: 54.79%;
      width: 6.12%;
      height: 16.99%;
    }

    .demo-row-bot .demo-pit:nth-child(2) {
      left: 27.41%;
      top: 54.69%;
      width: 5.86%;
      height: 17.09%;
    }

    .demo-row-bot .demo-pit:nth-child(3) {
      left: 34.18%;
      top: 54.69%;
      width: 5.86%;
      height: 16.99%;
    }

    .demo-row-bot .demo-pit:nth-child(4) {
      left: 40.92%;
      top: 54.79%;
      width: 5.92%;
      height: 16.99%;
    }

    .demo-row-bot .demo-pit:nth-child(5) {
      left: 47.56%;
      top: 54.79%;
      width: 6.05%;
      height: 17.09%;
    }

    .demo-row-bot .demo-pit:nth-child(6) {
      left: 54.59%;
      top: 54.79%;
      width: 5.53%;
      height: 16.99%;
    }

    .demo-row-bot .demo-pit:nth-child(7) {
      left: 60.90%;
      top: 54.79%;
      width: 6.32%;
      height: 17.09%;
    }

    .demo-row-bot .demo-pit:nth-child(8) {
      left: 67.84%;
      top: 54.88%;
      width: 5.99%;
      height: 16.99%;
    }

    .demo-row-bot .demo-pit:nth-child(9) {
      left: 74.58%;
      top: 54.98%;
      width: 5.92%;
      height: 16.99%;
    }

    /* Попиксельные сдвиги для демо-доски — применяются на всех разрешениях,
       так же как на боевой. Демо использует ту же фотографию, поэтому смещения
       в процентах одинаковы. */
    .demo-row-top .demo-pit:nth-child(1) { left: calc(20.44% - 0.122%); }
    .demo-row-top .demo-pit:nth-child(2) { left: calc(27.41% - 0.244%); }
    .demo-row-top .demo-pit:nth-child(3) { left: calc(34.18% - 0.366%); }
    .demo-row-top .demo-pit:nth-child(4) { left: calc(41.02% - 0.488%); }
    .demo-row-top .demo-pit:nth-child(5) { left: calc(47.76% - 0.610%); }
    .demo-row-top .demo-pit:nth-child(6) { left: calc(54.59% - 0.732%); }
    .demo-row-top .demo-pit:nth-child(7) { left: calc(60.97% - 0.976%); }
    .demo-row-top .demo-pit:nth-child(8) { left: calc(67.97% - 1.220%); }
    .demo-row-top .demo-pit:nth-child(9) { left: calc(74.64% - 1.463%); }

    .demo-row-bot .demo-pit:nth-child(1) { left: calc(20.51% - 0.122%); }
    .demo-row-bot .demo-pit:nth-child(2) { left: calc(27.41% - 0.244%); }
    .demo-row-bot .demo-pit:nth-child(3) { left: calc(34.18% - 0.366%); }
    .demo-row-bot .demo-pit:nth-child(4) { left: calc(40.92% - 0.488%); }
    .demo-row-bot .demo-pit:nth-child(5) { left: calc(47.56% - 0.610%); }
    .demo-row-bot .demo-pit:nth-child(6) { left: calc(54.59% - 0.732%); }
    .demo-row-bot .demo-pit:nth-child(7) { left: calc(60.90% - 0.976%); }
    .demo-row-bot .demo-pit:nth-child(8) { left: calc(67.84% - 1.220%); }
    .demo-row-bot .demo-pit:nth-child(9) { left: calc(74.58% - 1.463%); }

    .demo-kazan {
      position: absolute;
    }

    #demo-kazan-opp {
      left: 5.93%;
      top: 35.55%;
      width: 14.84%;
      height: 23.73%;
    }

    #demo-kazan-me {
      left: 79.26%;
      top: 35.64%;
      width: 14.78%;
      height: 23.63%;
    }

    .demo-kazan-bowl {
      position: absolute;
      inset: 0;
      border-radius: 50%;
      overflow: hidden;
      background: transparent;
      border: none;
    }

    .demo-kazan-fill {
      position: absolute;
      bottom: 5px;
      left: 0;
      right: 0;
      height: 0%;
      background: linear-gradient(to top, rgba(180, 140, 50, 0.6), rgba(220, 180, 80, 0.2));
      transition: height 0.5s ease;
      opacity: 0.5;
    }

    .demo-kazan-num {
      position: absolute;
      inset: 0;
      display: flex;
      align-items: center;
      justify-content: center;
      padding-top: 0;
      color: #fff;
      font-weight: 800;
      /* Адаптивный шрифт: на десктопе ~18px, на мобиле — меньше, без переполнения чаши. */
      font-size: clamp(11px, 2.4vw, 18px);
      text-shadow: 0 2px 4px rgba(0, 0, 0, 0.85), 0 0 8px rgba(0, 0, 0, 0.4);
    }

    .demo-kazan-label {
      position: absolute;
      bottom: calc(100% - 22px);
      left: 50%;
      transform: translateX(-50%);
      white-space: nowrap;
      font-size: 8px;
      font-weight: 700;
      letter-spacing: 0.5px;
      color: rgba(255, 230, 150, 0.85);
      text-shadow: 0 1px 3px rgba(0, 0, 0, 0.8);
    }

    .demo-caption {
      font-size: 14px;
      color: var(--amber-200);
      margin-top: 16px;
      min-height: 24px;
      transition: opacity 0.3s;
      line-height: 1.5;
    }

    .demo-caption strong {
      color: var(--amber-400);
    }

    .demo-controls {
      margin-top: 16px;
      display: flex;
      gap: 12px;
      justify-content: center;
    }

    .demo-btn {
      padding: 10px 24px;
      border-radius: 10px;
      border: none;
      font-size: 14px;
      font-weight: 600;
      cursor: pointer;
      transition: all 0.2s;
    }

    .demo-btn:hover {
      transform: scale(1.03);
    }

    .demo-btn-replay {
      background: rgba(251, 191, 36, 0.1);
      color: var(--amber-400);
      border: 1px solid rgba(251, 191, 36, 0.2);
    }

    .demo-btn-play {
      background: linear-gradient(135deg, var(--amber-700), var(--amber-600));
      color: var(--amber-100);
      box-shadow: 0 4px 16px rgba(180, 83, 9, 0.3);
    }

    .demo-btn-next {
      background: linear-gradient(135deg, rgba(34, 197, 94, 0.2), rgba(34, 197, 94, 0.1));
      color: var(--green-500);
      border: 1px solid rgba(34, 197, 94, 0.3);
      animation: pulseNext 1.5s ease-in-out infinite;
    }

    @keyframes pulseNext {

      0%,
      100% {
        box-shadow: 0 0 0 0 rgba(34, 197, 94, 0);
      }

      50% {
        box-shadow: 0 0 12px 2px rgba(34, 197, 94, 0.25);
      }
    }

    /* ── Section base ── */
    .landing-section {
      padding: 48px 24px;
      border-top: 1px solid rgba(251, 191, 36, 0.06);
    }

    .landing-section h3 {
      font-size: 24px;
      color: var(--amber-400);
      text-align: center;
      margin-bottom: 6px;
      letter-spacing: 2px;
      font-weight: 800;
    }

    .landing-section .section-sub {
      text-align: center;
      font-size: 14px;
      color: var(--text-muted);
      margin-bottom: 32px;
    }

    .about-text {
      max-width: 640px;
      margin: 0 auto;
      font-size: 15px;
      line-height: 1.9;
      color: var(--amber-200);
      opacity: 0.85;
      text-align: center;
    }

    .about-text strong {
      color: var(--amber-400);
    }

    /* ── Value props (why it hooks) ── */
    .value-grid {
      display: grid;
      grid-template-columns: 1fr 1fr;
      gap: 14px;
      max-width: 600px;
      margin: 0 auto;
    }

    @media (max-width: 600px) {
      .value-grid {
        grid-template-columns: 1fr;
      }
    }

    .value-card {
      padding: 22px 20px;
      border-radius: 14px;
      background: var(--bg-card-soft);
      border: 1px solid var(--amber-glow-soft);
      backdrop-filter: blur(10px);
      -webkit-backdrop-filter: blur(10px);
      box-shadow: var(--shadow-sm);
      transition: transform 0.25s, border-color 0.25s, box-shadow 0.25s;
      display: flex;
      gap: 14px;
      align-items: flex-start;
    }

    .value-card:hover {
      border-color: rgba(251, 191, 36, 0.2);
      transform: translateY(-2px);
    }

    .value-icon {
      font-size: 28px;
      flex-shrink: 0;
    }

    .value-title {
      font-size: 14px;
      font-weight: 700;
      color: var(--amber-400);
      margin-bottom: 4px;
    }

    .value-desc {
      font-size: 12px;
      color: var(--text-muted);
      line-height: 1.6;
    }

    /* ── Rules steps ── */
    .steps {
      display: flex;
      flex-direction: column;
      gap: 0;
      max-width: 560px;
      margin: 0 auto;
      position: relative;
    }

    .steps::before {
      content: '';
      position: absolute;
      left: 27px;
      top: 28px;
      bottom: 28px;
      width: 2px;
      background: linear-gradient(to bottom, var(--amber-700), rgba(251, 191, 36, 0.1));
    }

    .step {
      display: flex;
      gap: 20px;
      align-items: flex-start;
      padding: 16px 0;
      position: relative;
    }

    .step-num {
      width: 56px;
      height: 56px;
      border-radius: 50%;
      flex-shrink: 0;
      display: flex;
      align-items: center;
      justify-content: center;
      font-size: 22px;
      font-weight: 800;
      background: linear-gradient(135deg, var(--wood-dark), var(--wood));
      border: 2px solid var(--amber-700);
      color: var(--amber-400);
      z-index: 1;
    }

    .step-body {
      padding-top: 4px;
    }

    .step-title {
      font-size: 16px;
      font-weight: 700;
      color: var(--amber-100);
      margin-bottom: 4px;
    }

    .step-desc {
      font-size: 13px;
      color: var(--text-muted);
      line-height: 1.7;
    }

    /* ── Heritage cards ── */
    .heritage-grid {
      display: grid;
      grid-template-columns: 1fr 1fr 1fr;
      gap: 16px;
      max-width: 720px;
      margin: 0 auto;
    }

    @media (max-width: 700px) {
      .heritage-grid {
        grid-template-columns: 1fr;
      }
    }

    .heritage-card {
      padding: 24px 18px;
      border-radius: 16px;
      text-align: center;
      background: var(--bg-card-soft);
      border: 1px solid var(--amber-glow-soft);
      backdrop-filter: blur(10px);
      -webkit-backdrop-filter: blur(10px);
      box-shadow: var(--shadow-sm);
      transition: transform 0.25s, border-color 0.25s, box-shadow 0.25s;
    }

    .heritage-card:hover {
      border-color: rgba(251, 191, 36, 0.25);
      transform: translateY(-3px);
      box-shadow: var(--shadow-sm);
    }

    .heritage-icon {
      font-size: 32px;
      margin-bottom: 12px;
    }

    .heritage-title {
      font-size: 14px;
      font-weight: 700;
      color: var(--amber-400);
      margin-bottom: 6px;
    }

    .heritage-desc {
      font-size: 12px;
      color: var(--text-muted);
      line-height: 1.6;
    }

    /* ── Countries flags ── */
    .countries-row {
      display: flex;
      justify-content: center;
      gap: 24px;
      flex-wrap: wrap;
      margin-top: 12px;
    }

    .country-tag {
      display: flex;
      align-items: center;
      gap: 6px;
      font-size: 12px;
      color: var(--text-muted);
    }

    .country-tag .flag {
      font-size: 18px;
    }

    /* ── Testimonial / Quote ── */
    .quote-block {
      max-width: 560px;
      margin: 0 auto;
      text-align: center;
      padding: 28px 20px;
      border-left: 3px solid var(--amber-700);
      border-right: 3px solid var(--amber-700);
      border-radius: 4px;
    }

    .quote-text {
      font-size: 17px;
      font-style: italic;
      color: var(--amber-200);
      line-height: 1.8;
      opacity: 0.9;
    }

    .quote-attr {
      font-size: 12px;
      color: var(--text-dim);
      margin-top: 14px;
      letter-spacing: 1px;
    }

    /* ── CTA final ── */
    .landing-cta {
      text-align: center;
      padding: 48px 24px 32px;
      border-top: 1px solid rgba(251, 191, 36, 0.06);
      position: relative;
    }

    .landing-cta h3 {
      font-size: 24px;
      color: var(--amber-400);
      margin-bottom: 10px;
      letter-spacing: 2px;
    }

    .landing-cta p {
      font-size: 14px;
      color: var(--text-muted);
      margin-bottom: 24px;
      max-width: 420px;
      margin-left: auto;
      margin-right: auto;
    }

    .cta-features {
      display: flex;
      justify-content: center;
      gap: 24px;
      flex-wrap: wrap;
      margin-top: 18px;
    }

    .cta-feat {
      font-size: 11px;
      color: var(--text-dim);
      display: flex;
      align-items: center;
      gap: 6px;
    }

    .cta-feat .check {
      color: var(--green-500);
      font-size: 14px;
    }

    /* ══════════════════════════════════════════════════════════
     АВТОРИЗАЦИЯ (поверх лендинга, модальное окно)
     ══════════════════════════════════════════════════════════ */
    #auth-overlay {
      position: fixed;
      inset: 0;
      z-index: 80;
      background: var(--surface-bg-strong);
      backdrop-filter: blur(8px);
      display: flex;
      align-items: center;
      justify-content: center;
      padding: 20px;
      animation: fadeIn 0.3s ease;
    }

    @keyframes fadeIn {
      from {
        opacity: 0;
      }

      to {
        opacity: 1;
      }
    }

    #auth-overlay .auth-modal {
      max-width: 380px;
      width: 100%;
      display: flex;
      flex-direction: column;
      gap: 20px;
      animation: slideUp 0.3s ease;
    }

    @keyframes slideUp {
      from {
        transform: translateY(20px);
        opacity: 0;
      }

      to {
        transform: translateY(0);
        opacity: 1;
      }
    }

    #auth-overlay .auth-title {
      text-align: center;
    }

    #auth-overlay .auth-title .icon {
      font-size: 48px;
      margin-bottom: 12px;
    }

    #auth-overlay .auth-title h2 {
      font-size: 24px;
      color: var(--amber-400);
      letter-spacing: 2px;
    }

    #auth-overlay .auth-title p {
      font-size: 13px;
      color: var(--text-muted);
      margin-top: 4px;
    }

    .auth-close {
      position: absolute;
      top: 20px;
      right: 24px;
      background: none;
      border: none;
      color: var(--text-muted);
      font-size: 28px;
      cursor: pointer;
      transition: color 0.2s;
    }

    .auth-close:hover {
      color: var(--amber-400);
    }

    input[type="text"],
    input[type="password"],
    input[type="email"],
    input[type="tel"],
    input[type="number"],
    input[type="datetime-local"],
    input[type="date"],
    input[type="time"] {
      width: 100%;
      padding: 12px 16px;
      border-radius: 12px;
      background: var(--bg-card-mid);
      border: 1px solid var(--amber-glow-line);
      color: var(--text);
      font-size: 15px;
      outline: none;
    }

    input[type="text"]::placeholder,
    input[type="password"]::placeholder,
    input[type="email"]::placeholder,
    input[type="tel"]::placeholder,
    input[type="number"]::placeholder {
      color: var(--amber-text-soft);
    }

    input[type="text"]:focus,
    input[type="password"]:focus,
    input[type="email"]:focus,
    input[type="tel"]:focus,
    input[type="number"]:focus,
    input[type="datetime-local"]:focus,
    input[type="date"]:focus,
    input[type="time"]:focus {
      border-color: var(--amber-400);
    }

    /* Native picker icon (calendar/clock) — в темной теме браузер рисует
       иконку черной по умолчанию, что плохо читается. Инвертируем. */
    input[type="datetime-local"]::-webkit-calendar-picker-indicator,
    input[type="date"]::-webkit-calendar-picker-indicator,
    input[type="time"]::-webkit-calendar-picker-indicator {
      filter: invert(0.8) brightness(1.2);
      cursor: pointer;
    }

    .btn {
      padding: 13px 26px;
      border-radius: 14px;
      border: none;
      font-size: 15px;
      font-weight: 700;
      letter-spacing: 0.5px;
      cursor: pointer;
      transition: transform 0.15s, box-shadow 0.2s, background 0.2s;
    }

    .btn:hover {
      transform: translateY(-1px) scale(1.02);
    }

    .btn:active {
      transform: scale(0.97);
    }

    .btn-primary {
      background: linear-gradient(135deg, var(--amber-700), var(--amber-600));
      color: var(--amber-100);
      box-shadow: 0 6px 20px rgba(180, 83, 9, 0.3);
    }

    .btn-primary:hover {
      box-shadow: 0 10px 28px rgba(180, 83, 9, 0.4);
    }

    .btn-blue {
      background: linear-gradient(135deg, var(--blue-800), var(--blue-600));
      color: #bfdbfe;
      box-shadow: 0 6px 20px rgba(37, 99, 235, 0.25);
    }

    .btn-blue:hover {
      box-shadow: 0 10px 28px rgba(37, 99, 235, 0.35);
    }

    .btn-green {
      background: linear-gradient(135deg, #065f46, #059669);
      color: #d1fae5;
      font-size: 13px;
      padding: 8px 18px;
    }

    .btn-danger {
      background: rgba(127, 29, 29, 0.4);
      color: #fca5a5;
      border: 1px solid rgba(239, 68, 68, 0.35);
    }

    .btn-danger:hover {
      background: rgba(127, 29, 29, 0.55);
      box-shadow: 0 4px 14px rgba(239, 68, 68, 0.2);
    }

    .btn-sm {
      font-size: 12px;
      padding: 6px 14px;
    }

    .btn-full {
      width: 100%;
    }

    /* ── Лобби ── */
    #lobby-view {
      width: 100%;
      max-width: 960px;
      display: flex;
      flex-direction: column;
      gap: 0;
    }

    .waiting-msg-text { color: var(--amber-text-mid); }
    .auth-label { font-size: 13px; color: var(--amber-text-mid); margin-bottom: 8px; display: block; }

    /* Уважаем системную настройку «уменьшить анимацию» —
       критично для пользователей с вестибулярными расстройствами. */
    @media (prefers-reduced-motion: reduce) {
      *, *::before, *::after {
        animation-duration: 0.01ms !important;
        animation-iteration-count: 1 !important;
        transition-duration: 0.01ms !important;
        scroll-behavior: auto !important;
      }
    }

    /* Видимый focus-ring для всех интерактивных элементов с клавиатуры. */
    .btn-hero:focus-visible,
    .btn:focus-visible,
    .btn-link:focus-visible,
    .nav-link:focus-visible,
    .footer-link:focus-visible,
    .panel-tab:focus-visible,
    .icon-toggle:focus-visible,
    .auth-close:focus-visible,
    .bot-level-btn:focus-visible {
      outline: 2px solid var(--amber-400);
      outline-offset: 2px;
    }

    /* Утилитарный класс — текст для скринридеров, скрытый визуально. */
    .visually-hidden {
      position: absolute !important;
      width: 1px; height: 1px;
      padding: 0; margin: -1px;
      overflow: hidden; clip: rect(0, 0, 0, 0);
      white-space: nowrap; border: 0;
    }

    /* Admin role badge — показывается в шапке при активной admin-сессии,
       визуально предупреждает «вы под админом, играть нельзя» и служит
       кнопкой выхода из admin-роли. */
    .admin-badge {
      background: var(--red-500, #ef4444);
      color: #fff;
      border: none;
      border-radius: 8px;
      padding: 6px 12px;
      font-size: 12px;
      font-weight: 700;
      letter-spacing: 0.5px;
      cursor: pointer;
      transition: filter 0.15s ease;
    }
    .admin-badge:hover { filter: brightness(1.1); }
    .admin-badge:focus-visible { outline: 2px solid #fff; outline-offset: 2px; }

    /* Auth modal: убираем inline-стили, контролируем размер для iOS-клавиатуры (M7). */
    .auth-card { width: 100%; max-height: calc(100vh - 120px); overflow-y: auto; }
    .auth-input { margin-bottom: 16px; }
    .auth-hint { text-align: center; font-size: 11px; color: var(--text-dim); margin-top: 12px; }
    /* Когда форма отдаёт ошибку (неверный пароль / rate-limit / network),
       подсветка переключается с тихого dim на видимый красный + полужирный +
       чуть крупнее, чтобы пользователь увидел отказ. */
    .auth-hint.is-error {
      color: var(--red-500, #ef4444);
      font-size: 13px;
      font-weight: 600;
    }

    /* Admin: форма создания турнира — компактная, два столбца на десктопе,
       один на мобильном. */
    .adm-form { margin: 12px 0; padding: 12px; border: 1px solid rgba(107,82,68,0.25);
                border-radius: 10px; background: var(--bg-card-soft); }
    .adm-form summary { cursor: pointer; font-weight: 600; padding: 4px 0; }
    .adm-form-grid {
      display: grid; grid-template-columns: 1fr 1fr; gap: 8px 12px; margin: 10px 0;
    }
    .adm-form-grid label {
      display: flex; flex-direction: column; gap: 4px; font-size: 12px;
      color: var(--text-muted);
    }
    .adm-form-grid input, .adm-form-grid select {
      padding: 6px 8px; border-radius: 6px; border: 1px solid rgba(107,82,68,0.3);
      background: var(--bg-card-mid); color: var(--text-default);
      font-size: 13px;
    }
    .adm-form-hint { margin-top: 8px; font-size: 12px; color: var(--text-dim); }
    @media (max-width: 600px) { .adm-form-grid { grid-template-columns: 1fr; } }

    /* Враппер для админ-таблиц: одинаковая ширина и горизонтальный скролл
       при переполнении. Без этого таблицы с разным числом колонок (текущие
       турниры vs ежедневные шаблоны) визуально различались по ширине. */
    .adm-table-wrap {
      width: 100%;
      overflow-x: auto;
    }
    .adm-table-wrap > .lb-table { min-width: 100%; }

    /* Кратковременная подсветка строки таблицы — для deep-link навигации
       (adminFocusTournament, adminTxFocus): визуальная связка «клик в одной
       таблице → подсвеченная строка в другой». Цвет — амбер-акцент из
       темы; затухание через transition. */
    .lb-table tr.adm-row-highlight {
      background-color: rgba(251, 191, 36, 0.18);
      transition: background-color 1.5s ease-out;
    }

    /* Компактный вариант .kyc-badge для admin-таблицы пользователей.
       Стандартный бейдж (padding 6/12, font-weight 600) рассчитан на
       крупный блок в profile-view; в табличной ячейке смотрится тяжело
       и ломает плотность строк. Уменьшаем padding и letter-spacing,
       цвета/border наследуются от .kyc-* класса. */
    .kyc-badge.adm-kyc-cell {
      padding: 2px 8px;
      font-size: 0.85em;
      font-weight: 500;
      letter-spacing: 0;
      white-space: nowrap;
    }

    /* Тулбар над таблицей (search, filters). */
    .adm-toolbar {
      display: flex;
      gap: 10px;
      align-items: center;
      margin: 8px 0 12px;
    }
    /* Admin-input: тот же look, что .adm-form-grid input — узкий
       padding, тёмный card-mid фон, едва заметный border. На фокусе
       подсвечиваем янтарной рамкой, как на остальных интерактивах. */
    .adm-input {
      flex: 1;
      max-width: 360px;
      padding: 6px 10px;
      border-radius: 6px;
      border: 1px solid rgba(107, 82, 68, 0.3);
      background: var(--bg-card-mid);
      color: var(--text-default);
      font-size: 13px;
      transition: border-color 0.15s, box-shadow 0.15s;
      font-family: inherit;
    }
    /* Глобальные input[type="datetime-local"] стили (1372) делают input
       на всю ширину и высоким — внутри .adm-input их нужно загасить. */
    input.adm-input[type="datetime-local"],
    input.adm-input[type="date"],
    input.adm-input[type="time"] {
      width: auto;
      padding: 6px 10px;
      border-radius: 6px;
      font-size: 13px;
    }
    .adm-input::placeholder { color: var(--text-dim); }
    .adm-input:focus {
      outline: none;
      border-color: var(--amber-400);
      box-shadow: 0 0 0 2px rgba(251, 191, 36, 0.15);
    }
    /* Убираем дефолтный browser-cancel на type=search чтобы не выпадал
       из стиля. */
    .adm-input::-webkit-search-cancel-button {
      -webkit-appearance: none;
      appearance: none;
    }

    /* Сортируемые заголовки таблиц. */
    .lb-table th.adm-sort {
      cursor: pointer;
      user-select: none;
    }
    .lb-table th.adm-sort:hover {
      color: var(--amber-200, var(--amber-300));
    }

    /* Финансы: горизонтальный фильтр-бар (пресеты + даты + Применить). */
    .adm-fin-bar {
      display: flex;
      flex-wrap: wrap;
      align-items: center;
      gap: 10px;
      margin: 12px 0 14px;
      padding: 10px 12px;
      border: 1px solid rgba(107, 82, 68, 0.25);
      border-radius: 10px;
      background: var(--bg-card-soft);
    }
    /* Прижимаем «Применить» (последний элемент бара) к правому краю. */
    .adm-fin-bar > button:last-child {
      margin-left: auto;
    }
    .adm-fin-presets {
      display: flex;
      gap: 4px;
      margin-right: 8px;
    }
    .adm-fin-date {
      display: flex;
      align-items: center;
      gap: 6px;
      font-size: 12px;
      color: var(--text-muted);
    }
    /* Кликабельные карточки в финансах: подсвечиваем рамку на hover'е,
       чтобы было понятно, что клик что-то делает (drill-down). */
    .stat-card.is-clickable {
      cursor: pointer;
      transition: border-color 0.15s, transform 0.1s;
    }
    .stat-card.is-clickable:hover {
      border-color: var(--amber-400);
      transform: translateY(-1px);
    }
    .stat-card.is-active {
      border-color: var(--amber-300, var(--amber-400));
      box-shadow: 0 0 0 2px rgba(251, 191, 36, 0.15);
    }
    .adm-fin-drill {
      margin-top: 14px;
      padding: 12px;
      border: 1px solid rgba(107, 82, 68, 0.25);
      border-radius: 10px;
      background: var(--bg-card-soft);
    }
    .adm-fin-drill-head {
      font-size: 12px;
      font-weight: 600;
      letter-spacing: 0.5px;
      text-transform: uppercase;
      color: var(--amber-300, var(--amber-400));
      margin-bottom: 8px;
    }

    /* Fraud-flags: severity badges + summary bar + details row. */
    .t-sev {
      display: inline-block;
      padding: 2px 8px;
      border-radius: 999px;
      font-size: 11px;
      letter-spacing: 0.4px;
      text-transform: lowercase;
      border: 1px solid currentColor;
    }
    .t-sev-high   { color: var(--red-500, #ef4444); }
    .t-sev-medium { color: var(--amber-300, var(--amber-400)); }
    .t-sev-low    { color: var(--text-muted); }

    .adm-fraud-summary {
      display: flex;
      gap: 14px;
      align-items: center;
      margin: 8px 0 10px;
      font-size: 12px;
      color: var(--text-muted);
    }

    .adm-fraud-details-row.hidden { display: none; }
    .adm-fraud-details-cell {
      background: rgba(251, 191, 36, 0.03);
      padding: 12px 18px !important;
    }
    .adm-fraud-details .lbl {
      color: var(--text-muted);
      font-size: 11px;
      text-transform: uppercase;
      letter-spacing: 0.4px;
      margin-right: 6px;
    }
    .adm-fraud-meta { display: flex; gap: 18px; flex-wrap: wrap; margin-bottom: 6px; }
    .adm-fraud-meta code {
      font-family: ui-monospace, Menlo, monospace;
      font-size: 12px;
      color: var(--text-default);
    }
    .adm-fraud-desc { margin: 6px 0; font-size: 13px; }
    .adm-fraud-payload pre {
      margin: 4px 0 0;
      padding: 8px 10px;
      background: var(--bg-card-mid);
      border: 1px solid rgba(107, 82, 68, 0.3);
      border-radius: 6px;
      font-family: ui-monospace, Menlo, monospace;
      font-size: 12px;
      color: var(--text-default);
      max-height: 240px;
      overflow: auto;
      white-space: pre-wrap;
      word-break: break-word;
    }

    /* Подсветка целевой строки транзакции при клике на Ref-якорь. */
    @keyframes adm-tx-flash {
      0%   { background: rgba(251, 191, 36, 0.30); }
      100% { background: transparent; }
    }
    .lb-table tr.adm-tx-flash td {
      animation: adm-tx-flash 1.5s ease-out;
    }

    /* Раскрываемая строка с участниками турнира (admin tournaments table).
       Скрыта по умолчанию; toggling через .hidden. Содержимое вложенной
       ячейки имеет padding для визуальной отбивки от parent-таблицы. */
    .adm-participants-row.hidden { display: none; }
    .adm-participants-cell {
      background: rgba(251, 191, 36, 0.03);
      padding: 12px 18px !important;
    }
    .adm-participants h5 {
      margin: 0;
      color: var(--amber-300, var(--amber-400));
      font-size: 11px;
      letter-spacing: 0.5px;
      text-transform: uppercase;
    }
    .adm-participants .lb-table { margin-top: 4px; }

    /* Компактные иконки-действия для админ-таблиц (Пользователи и др.).
       Title-tooltip даёт текстовую подпись на hover, экономит место.
       Прижимаем к правому краю — действия читаются как «trailing»,
       цифры/имена слева центрируют внимание на данных. */
    .adm-user-actions { white-space: nowrap; text-align: right; }
    /* Заголовок «Действия» тоже выравниваем справа — иначе th и td
       визуально расходятся (.lb-table th — text-align: left по умолчанию). */
    .lb-table th:last-child { text-align: right; }
    /* Последняя кнопка в ячейке без правого отступа — иконки прижимаются
       вплотную к правому краю таблицы. */
    .adm-user-actions .adm-icon-btn:last-child { margin-right: 0; }
    .adm-icon-btn {
      display: inline-flex;
      align-items: center;
      justify-content: center;
      width: 32px;
      height: 32px;
      padding: 0;
      margin-right: 4px;
      font-size: 16px;
      line-height: 1;
      background: transparent;
      border: 1px solid rgba(251, 191, 36, 0.2);
      border-radius: 6px;
      cursor: pointer;
      /* Цвет stroke в SVG = currentColor → амбер. Эмодзи (если останутся
         где-то) рендерятся системным цветом, на цвет не влияют. */
      color: var(--amber-300, var(--amber-400));
      transition: background 0.15s, border-color 0.15s, color 0.15s;
    }
    .adm-icon-btn:hover {
      background: rgba(251, 191, 36, 0.10);
      border-color: var(--amber-400);
      color: var(--amber-200, var(--amber-300));
    }
    .adm-icon-btn:focus-visible {
      outline: 2px solid var(--amber-400);
      outline-offset: 2px;
    }
    .adm-icon-btn.adm-icon-danger {
      border-color: rgba(239, 68, 68, 0.25);
      color: rgba(239, 68, 68, 0.75);
    }
    .adm-icon-btn.adm-icon-danger:hover {
      background: rgba(239, 68, 68, 0.10);
      border-color: var(--red-500);
      color: var(--red-500);
    }

    /* Inline-кнопки в админ-блоках (KYC, sessions revoke и т.п.). Меньше
       по размеру чем .btn в hero/wallet, чтобы помещаться в строку рядом
       с label'ом. */
    .adm-btn {
      display: inline-flex;
      align-items: center;
      gap: 4px;
      padding: 6px 12px;
      border-radius: 8px;
      border: 1px solid transparent;
      font-size: 13px;
      font-weight: 600;
      cursor: pointer;
      transition: background 0.15s, border-color 0.15s, color 0.15s;
      font-family: inherit;
    }
    .adm-btn-primary {
      background: linear-gradient(135deg, var(--amber-700), var(--amber-600));
      color: var(--amber-100);
      border-color: var(--amber-600);
    }
    .adm-btn-primary:hover { box-shadow: 0 4px 14px rgba(180, 83, 9, 0.3); }
    .adm-btn-secondary {
      background: var(--bg-card-mid);
      color: var(--amber-200, var(--amber-300));
      border-color: rgba(251, 191, 36, 0.3);
    }
    .adm-btn-secondary:hover {
      background: rgba(251, 191, 36, 0.10);
      border-color: var(--amber-400);
    }
    .adm-btn-danger {
      background: rgba(127, 29, 29, 0.4);
      color: #fca5a5;
      border-color: rgba(239, 68, 68, 0.35);
    }
    .adm-btn-danger:hover {
      background: rgba(127, 29, 29, 0.55);
      border-color: var(--red-500);
    }
    .adm-btn:focus-visible {
      outline: 2px solid var(--amber-400);
      outline-offset: 2px;
    }
    /* Группа KYC/sessions actions: label + ряд кнопок. */
    .adm-kyc-actions {
      display: flex;
      align-items: center;
      flex-wrap: wrap;
      gap: 8px;
      margin-top: 10px;
    }
    .adm-kyc-label {
      font-size: 12px;
      color: var(--text-muted);
      font-weight: 600;
    }

    /* Inline-сообщения внутри админ-панелей: "Данных нет" / "Ошибка: ...". */
    .adm-msg {
      margin: 0;
      padding: 8px 0;
      font-size: 13px;
    }
    .adm-msg-empty { color: var(--text-dim); }
    .adm-msg-error { color: var(--red-500); }
    .adm-msg-pad   { padding: 10px; }

    /* Подзаголовки секций внутри drilldown'ов (Призёры/Остальные/...). */
    .adm-section-h {
      margin: 12px 0 4px;
      font-size: 13px;
      font-weight: 600;
      color: var(--amber-200, var(--amber-300));
    }
    .adm-section-h:first-child { margin-top: 8px; }
    /* Цветовые акценты внутри admin-таблиц. */
    .adm-text-success { color: var(--green-500); }

    /* Auth tabs: переключатель «по никнейму / по телефону». */
    .auth-tabs {
      display: flex;
      gap: 4px;
      margin-bottom: 12px;
      border-bottom: 1px solid rgba(107, 82, 68, 0.25);
    }
    .auth-tab {
      flex: 1;
      padding: 8px 12px;
      background: transparent;
      border: none;
      color: var(--text-muted);
      font-weight: 600;
      font-size: 13px;
      cursor: pointer;
      border-bottom: 2px solid transparent;
      transition: all 0.15s;
    }
    .auth-tab.active {
      color: var(--amber-100);
      border-bottom-color: var(--amber-400);
    }
    .auth-pane.hidden { display: none; }

    /* Никнейм в шапке не должен ломать вёрстку при длинном имени (M6). */
    .user-info .name {
      max-width: 140px;
      overflow: hidden;
      text-overflow: ellipsis;
      white-space: nowrap;
    }
    @media (max-width: 900px) {
      .user-info .name { max-width: 90px; }
    }

    /* Активный пункт навигации в футере подсвечивается так же, как в шапке. */
    .footer-link.active {
      color: var(--amber-400);
      background: var(--amber-glow-soft);
    }

    /* В светлой теме переопределяем «бледный амбер» на читаемый тёмный
       только в текстовых контекстах (на кнопках с тёмным градиентом
       amber-100 остаётся светлым — там фон уже тёмный). */
    [data-theme="light"] .nav-link:hover,
    [data-theme="light"] .nav-link.active,
    [data-theme="light"] .btn-link:hover,
    [data-theme="light"] .footer-link:hover,
    [data-theme="light"] .user-info .name,
    [data-theme="light"] .step-title,
    [data-theme="light"] .room-item .host,
    [data-theme="light"] .lb-table td {
      color: var(--text-strong);
    }

    /* Статус-бейджи: на cream фоне светлые цвета теряются.
       Делаем плотнее фон и темнее текст в светлой теме. */
    [data-theme="light"] .online-badge {
      background: rgba(22, 163, 74, 0.14);
      border-color: rgba(22, 163, 74, 0.4);
      color: #166534;
    }
    [data-theme="light"] .online-badge .online-dot {
      background: #16a34a;
    }
    [data-theme="light"] #connection-status.connected {
      background: rgba(22, 163, 74, 0.2);
      color: #14532d;
    }
    [data-theme="light"] #connection-status.disconnected {
      background: rgba(220, 38, 38, 0.18);
      color: #7f1d1d;
    }

    /* ── Site footer ── */
    .site-footer {
      width: 100%;
      margin-top: 32px;
      padding: 28px 24px 24px;
      background: linear-gradient(180deg, transparent, rgba(0, 0, 0, 0.25));
      border-top: 1px solid var(--amber-glow-soft);
      text-align: center;
      font-size: 12px;
      color: var(--text-muted);
      position: relative;
    }

    .footer-ornament {
      width: 200px;
      height: 14px;
      margin: 0 auto 18px;
      background:
        linear-gradient(90deg, transparent 0%, var(--amber-glow-line) 20%, var(--amber-400) 50%, var(--amber-glow-line) 80%, transparent 100%);
      mask-image: radial-gradient(ellipse at center, #000 25%, transparent 70%);
      -webkit-mask-image: radial-gradient(ellipse at center, #000 25%, transparent 70%);
      opacity: 0.45;
    }

    .footer-nav {
      display: flex;
      justify-content: center;
      flex-wrap: wrap;
      gap: 4px 8px;
      margin-bottom: 14px;
    }

    .footer-link {
      padding: 6px 12px;
      border-radius: 8px;
      color: var(--amber-200);
      text-decoration: none;
      font-size: 12px;
      font-weight: 600;
      letter-spacing: 0.5px;
      transition: background 0.15s, color 0.15s;
    }

    .footer-link:hover {
      background: var(--amber-glow-soft);
      color: var(--amber-100);
    }

    .footer-meta {
      display: flex;
      justify-content: center;
      flex-wrap: wrap;
      gap: 6px 18px;
      letter-spacing: 0.5px;
      opacity: 0.75;
    }

    /* ── Lobby hero (профиль игрока) ── */
    .lobby-hero {
      text-align: center;
      padding: 40px 20px 32px;
      position: relative;
      overflow: hidden;
    }

    .lobby-hero::before {
      content: '';
      position: absolute;
      top: -50%;
      left: -30%;
      width: 160%;
      height: 200%;
      background: radial-gradient(ellipse at 50% 30%, rgba(251, 191, 36, 0.08) 0%, transparent 50%),
        radial-gradient(ellipse at 20% 80%, rgba(180, 83, 9, 0.05) 0%, transparent 40%);
      pointer-events: none;
    }

    .lobby-hero::after {
      content: '';
      position: absolute;
      bottom: 0;
      left: 10%;
      right: 10%;
      height: 2px;
      background: linear-gradient(90deg, transparent, var(--amber-700), var(--amber-400), var(--amber-700), transparent);
      opacity: 0.4;
    }

    .lobby-hero-name {
      position: relative;
      font-size: 32px;
      font-weight: 800;
      letter-spacing: 3px;
      color: var(--amber-400);
      text-shadow: 0 0 40px rgba(251, 191, 36, 0.18);
      margin-bottom: 22px;
    }

    .lobby-hero-stats {
      position: relative;
      display: grid;
      grid-template-columns: repeat(4, 1fr);
      gap: 14px;
      max-width: 720px;
      margin: 0 auto;
    }

    @media (max-width: 600px) {
      .lobby-hero-stats { grid-template-columns: repeat(2, 1fr); }
      .lobby-hero-name { font-size: 22px; letter-spacing: 2px; }
    }

    /* Кошелёк (Доступно/В резерве/Всего), детали турнира (Взнос/Призовой
       фонд/Статус) и профиль (Рейтинг/Статус/Проверка) — по 3 карточки.
       Без переопределения grid'а из 4 колонок 4-я остаётся пустой →
       визуально блок съезжает влево. Сужаем сетку до 3 колонок; centering
       продолжает работать через `margin: 0 auto` родителя. */
    #wallet-view .lobby-hero-stats,
    #tournament-detail-view .lobby-hero-stats,
    #profile-view .lobby-hero-stats {
      grid-template-columns: repeat(3, minmax(140px, 1fr));
      max-width: 560px;
    }
    @media (max-width: 600px) {
      #wallet-view .lobby-hero-stats,
      #tournament-detail-view .lobby-hero-stats,
      #profile-view .lobby-hero-stats {
        grid-template-columns: repeat(3, 1fr);
      }
    }

    .lobby-stat {
      padding: 14px 10px;
      border-radius: 12px;
      background: var(--bg-card-soft);
      border: 1px solid var(--amber-glow-mid);
      backdrop-filter: blur(10px);
      -webkit-backdrop-filter: blur(10px);
      box-shadow: var(--shadow-sm);
      display: flex;
      flex-direction: column;
      align-items: center;
      gap: 4px;
    }

    .lobby-stat .num {
      font-size: 22px;
      font-weight: 800;
      color: var(--amber-300, var(--amber-400));
      letter-spacing: 0.5px;
    }

    .lobby-stat .lbl {
      font-size: 10px;
      letter-spacing: 1px;
      text-transform: uppercase;
      color: var(--text-muted);
    }

    /* ── Section head с кнопкой справа ── */
    /* Заголовок секции занимает всю ширину и центрируется как обычно,
       а кнопка-обновление прижимается к правому краю поверх — без сдвига заголовка. */
    .section-head {
      position: relative;
      margin-bottom: 6px;
    }

    .section-head h3 {
      margin-bottom: 0;
      /* Симметричный right+left padding под ширину кнопки «Обновить»
         (≈ 96px). Без него текст h3 (text-align:center) расползается на
         всю ширину и перекрывает absolute-кнопку. */
      padding: 0 110px;
    }
    @media (max-width: 600px) {
      .section-head h3 { padding: 0; }
    }

    .section-head .btn-link {
      position: absolute;
      right: 0;
      top: 50%;
      transform: translateY(-50%);
    }

    @media (max-width: 600px) {
      .section-head .btn-link {
        position: static;
        transform: none;
        display: block;
        margin: 8px auto 0;
      }
    }

    .btn-link {
      background: transparent;
      border: 1px solid rgba(251, 191, 36, 0.2);
      color: var(--amber-200);
      padding: 6px 14px;
      border-radius: 8px;
      font-size: 12px;
      font-weight: 600;
      cursor: pointer;
      transition: all 0.2s;
      letter-spacing: 0.5px;
    }

    .btn-link:hover {
      background: rgba(251, 191, 36, 0.08);
      color: var(--amber-100);
      border-color: rgba(251, 191, 36, 0.35);
    }

    /* ── Создать партию: единый бокс ── */
    .create-game-box {
      max-width: 640px;
      margin: 0 auto;
      padding: 24px;
      border-radius: 16px;
      background: var(--bg-card-soft);
      border: 1px solid var(--amber-glow-mid);
      backdrop-filter: blur(12px);
      -webkit-backdrop-filter: blur(12px);
      box-shadow: var(--shadow-md);
      display: flex;
      flex-direction: column;
      gap: 18px;
    }

    .create-row {
      display: flex;
      flex-direction: column;
      gap: 6px;
    }

    .field-label {
      font-size: 11px;
      letter-spacing: 1px;
      text-transform: uppercase;
      color: var(--text-muted);
      font-weight: 600;
    }

    .create-cta {
      margin-top: 4px;
      margin-bottom: 0;
    }

    .bot-level-desc {
      font-size: 11px;
      color: var(--text-dim);
      margin-top: 4px;
      min-height: 16px;
    }

    .leaderboard-meta {
      text-align: center;
      font-size: 11px;
      color: var(--text-dim);
      margin-bottom: 12px;
    }

    .create-btns {
      display: flex;
      gap: 12px;
      margin-top: 12px;
    }

    .create-btns .btn {
      flex: 1;
    }

    /* ── Private room toggle ── */
    .private-toggle {
      display: flex;
      align-items: center;
      gap: 8px;
      margin-top: 10px;
      font-size: 12px;
      color: var(--text-muted);
    }

    .private-toggle input[type="checkbox"] {
      accent-color: var(--amber-600);
      width: 16px;
      height: 16px;
      cursor: pointer;
    }

    /* ── Bot level selector ── */
    .bot-level-section {
      margin-top: 10px;
    }

    .bot-level-section label {
      font-size: 11px;
      color: rgba(253, 230, 138, 0.6);
      display: block;
      margin-bottom: 6px;
    }

    .bot-level-btns {
      display: flex;
      gap: 8px;
    }

    .bot-level-btn {
      padding: 6px 14px;
      border-radius: 8px;
      border: 1px solid rgba(96, 165, 250, 0.2);
      background: var(--bg-card-mid);
      color: var(--text-muted);
      font-size: 12px;
      font-weight: 600;
      cursor: pointer;
      transition: all 0.2s;
    }

    .bot-level-btn.active {
      background: linear-gradient(135deg, #1e3a5f, var(--blue-600));
      color: #bfdbfe;
      border-color: var(--blue-400);
    }

    .room-item {
      display: flex;
      align-items: center;
      justify-content: space-between;
      padding: 12px 16px;
      border-radius: 12px;
      background: var(--bg-card-soft);
      border: 1px solid rgba(107, 82, 68, 0.2);
    }

    .room-item .host {
      color: var(--amber-100);
      font-weight: 500;
    }

    .rooms-header {
      display: flex;
      justify-content: space-between;
      align-items: center;
    }

    .lb-table {
      width: 100%;
      border-collapse: collapse;
      font-size: 13px;
    }

    .lb-table th {
      text-align: left;
      color: var(--amber-400);
      font-size: 10px;
      font-weight: 600;
      letter-spacing: 0.5px;
      text-transform: uppercase;
      padding: 6px 8px;
      border-bottom: 1px solid rgba(251, 191, 36, 0.15);
    }

    .lb-table td {
      padding: 6px 8px;
      border-bottom: 1px solid rgba(251, 191, 36, 0.05);
      color: var(--amber-100);
    }

    .lb-table tr:hover td {
      background: rgba(251, 191, 36, 0.04);
    }

    .lb-table .lb-rank {
      width: 32px;
      font-weight: 700;
      color: var(--amber-400);
    }

    .lb-table .lb-name {
      font-weight: 600;
    }

    .lb-table .lb-earned {
      font-weight: 600;
    }

    .lb-earned.positive {
      color: var(--green-500);
    }

    .lb-earned.negative {
      color: var(--red-500);
    }

    .lb-top1 .lb-rank { color: #ffd700; font-weight: 800; }
    .lb-top2 .lb-rank { color: #c0c0c0; font-weight: 800; }
    .lb-top3 .lb-rank { color: #cd7f32; font-weight: 800; }
    .lb-top1 td, .lb-top2 td, .lb-top3 td {
      background: rgba(251, 191, 36, 0.04);
    }

    /* Архив турниров: компактная таблица под секцией «Активные».
       Всё хром — light-touch: те же fonts/border, но row-hover ведёт
       в детальный view, status-badge цветной. */
    .lb-table td.num,
    .lb-table th.num { text-align: right; }
    .tournament-row { cursor: pointer; }
    .tournament-row:hover td { background: rgba(251, 191, 36, 0.06); }
    .t-status {
      display: inline-block;
      padding: 2px 8px;
      border-radius: 999px;
      font-size: 11px;
      letter-spacing: 0.4px;
      text-transform: lowercase;
      border: 1px solid currentColor;
    }
    .t-status-completed { color: var(--green-500); }
    .t-status-canceled  { color: var(--text-muted); }
    .t-status-scheduled { color: var(--amber-300, var(--amber-400)); }
    .t-reason {
      margin-top: 4px;
      font-size: 11px;
      color: var(--text-dim);
    }
    .t-winner {
      font-size: 12px;
      line-height: 1.4;
      white-space: nowrap;
    }
    .t-winner-prize {
      color: var(--green-500);
      font-weight: 600;
      margin-left: 4px;
    }

    .lb-top2 .lb-rank {
      color: #c0c0c0;
    }

    .lb-top3 .lb-rank {
      color: #cd7f32;
    }

    .rooms-empty {
      text-align: center;
      padding: 32px 0;
      color: var(--text-dim);
    }

    .rooms-empty .ico {
      font-size: 32px;
      margin-bottom: 8px;
    }

    .stats-grid {
      display: grid;
      grid-template-columns: repeat(4, 1fr);
      gap: 12px;
    }

    /* Профильная статистика — карточки фиксированной ширины и центрированы.
       На лобби/админ stats-grid остаётся «растяжимой» (1fr), чтобы заполнять
       весь блок: там карточки несут KPI и их растягивание уместно. В профиле
       же 4 простые цифры (игры/победы/поражения/ничьи) на широком экране
       выглядят растянутыми и «пустыми» — фиксированный размер + центровка
       читаются лучше. На мобильном (≤600px) переходим на 2 колонки, тоже
       центрированные — переопределяет дефолтный .stats-grid мобильный break. */
    #profile-stats-grid {
      grid-template-columns: repeat(4, minmax(120px, 180px));
      justify-content: center;
    }
    @media (max-width: 600px) {
      #profile-stats-grid {
        grid-template-columns: repeat(2, minmax(120px, 180px));
      }
    }

    .stat-card {
      padding: 12px;
      border-radius: 12px;
      text-align: center;
      background: var(--bg-card-soft);
      border: 1px solid rgba(107, 82, 68, 0.15);
    }

    .stat-card .val {
      font-size: 20px;
      font-weight: 700;
    }

    .stat-card .label {
      font-size: 11px;
      color: var(--text-dim);
    }

    .stat-card .stat-sub {
      font-size: 11px;
      color: var(--text-dim);
      margin-top: 2px;
    }

    details {
      border-radius: 16px;
      background: var(--bg-card-soft);
      border: 1px solid rgba(107, 82, 68, 0.1);
      overflow: hidden;
    }

    details summary {
      padding: 12px 20px;
      cursor: pointer;
      color: rgba(253, 230, 138, 0.6);
      font-size: 13px;
      font-weight: 500;
    }

    details summary:hover {
      color: var(--amber-200);
    }

    details .rules-body {
      padding: 0 20px 16px;
      font-size: 12px;
      color: var(--text-muted);
      line-height: 1.7;
    }

    details .rules-body p {
      margin-bottom: 6px;
    }

    details .rules-body strong {
      color: var(--amber-400);
    }

    /* ── Игра ── */
    #game-view {
      width: 100%;
      max-width: 760px;
      display: flex;
      flex-direction: column;
      align-items: center;
      gap: 16px;
    }

    .game-bar {
      width: 100%;
      max-width: 920px;
      display: flex;
      align-items: center;
      justify-content: space-between;
      padding: 14px 22px;
      border-radius: 16px;
      background: var(--bg-card-soft);
      border: 1px solid var(--amber-glow-mid);
      backdrop-filter: blur(12px);
      -webkit-backdrop-filter: blur(12px);
      box-shadow: var(--shadow-md);
      flex-wrap: wrap;
      gap: 12px;
      position: relative;
      overflow: hidden;
    }

    .game-bar::after {
      content: '';
      position: absolute;
      bottom: 0;
      left: 8%;
      right: 8%;
      height: 1px;
      background: linear-gradient(90deg, transparent, rgba(251, 191, 36, 0.3), transparent);
    }

    .game-bar .players {
      display: flex;
      align-items: center;
      gap: 14px;
      font-size: 18px;
      letter-spacing: 1.5px;
    }

    .game-bar .players .vs {
      color: var(--amber-600);
      font-size: 12px;
      letter-spacing: 2px;
      opacity: 0.7;
    }

    .game-bar .p0 {
      color: var(--amber-400);
      font-weight: 800;
      text-shadow: 0 0 20px rgba(251, 191, 36, 0.25);
    }

    .game-bar .p1 {
      color: var(--blue-400);
      font-weight: 800;
      text-shadow: 0 0 20px rgba(96, 165, 250, 0.2);
    }

    .game-bar .bank-info {
      display: flex;
      align-items: center;
      gap: 10px;
    }

    .bank-badge {
      padding: 6px 14px;
      border-radius: 10px;
      font-size: 14px;
      font-weight: 800;
      background: rgba(251, 191, 36, 0.12);
      color: var(--amber-400);
      border: 1px solid rgba(251, 191, 36, 0.18);
      letter-spacing: 0.5px;
    }

    .bot-level-badge {
      padding: 5px 12px;
      border-radius: 10px;
      font-size: 11px;
      font-weight: 700;
      letter-spacing: 1px;
      text-transform: uppercase;
      background: rgba(96, 165, 250, 0.1);
      color: var(--blue-400);
      border: 1px solid rgba(96, 165, 250, 0.2);
    }

    .board-wrap {
      padding: 12px 0;
      display: flex;
      flex-direction: column;
      align-items: center;
      gap: 10px;
    }

    .board-table {
      display: block;
      padding: 0;
      border-radius: 8%/16%;
      background: url('table.png') center / 100% 100% no-repeat;
      border: none;
      position: relative;
      aspect-ratio: 1536 / 1024;
      width: min(820px, 94vw);
      box-shadow:
        0 28px 70px rgba(0, 0, 0, 0.55),
        0 10px 30px rgba(0, 0, 0, 0.35),
        0 0 60px rgba(251, 170, 60, 0.07);
    }

    .board-table::before {
      display: none;
    }

    .pits-center {
      display: contents;
    }

    .pit-row {
      display: contents;
    }

    .board-ornament {
      display: none;
    }

    .pit {
      position: absolute;
      display: flex;
      flex-direction: column;
      align-items: center;
      justify-content: center;
      border-radius: 50%;
      background: transparent;
      border: none;
      cursor: default;
      box-shadow: none;
      transition: all 0.25s;
    }

    .pit>* {
      /* Сдвиг содержимого вниз масштабируется с шириной экрана.
         min(10px, 1.3vw): десктоп ≥770px → 10px, мобила 350-400px → 4.5-5.2px. */
      transform: translateY(min(10px, 1.3vw));
    }
    /* ── Точные координаты лунок (% от размеров доски) ── */
    /* Верхний ряд: nth-child(1) = левая, nth-child(9) = правая */
    #top-row .pit:nth-child(1) {
      left: 20.44%;
      top: 21.78%;
      width: 6.25%;
      height: 16.89%;
    }

    #top-row .pit:nth-child(2) {
      left: 27.41%;
      top: 21.78%;
      width: 5.86%;
      height: 16.80%;
    }

    #top-row .pit:nth-child(3) {
      left: 34.18%;
      top: 21.78%;
      width: 5.86%;
      height: 16.80%;
    }

    #top-row .pit:nth-child(4) {
      left: 41.02%;
      top: 21.88%;
      width: 5.73%;
      height: 16.70%;
    }

    #top-row .pit:nth-child(5) {
      left: 47.76%;
      top: 21.88%;
      width: 5.66%;
      height: 16.89%;
    }

    #top-row .pit:nth-child(6) {
      left: 54.59%;
      top: 21.88%;
      width: 5.53%;
      height: 16.80%;
    }

    #top-row .pit:nth-child(7) {
      left: 60.97%;
      top: 21.88%;
      width: 6.18%;
      height: 16.89%;
    }

    #top-row .pit:nth-child(8) {
      left: 67.97%;
      top: 21.88%;
      width: 5.73%;
      height: 16.89%;
    }

    #top-row .pit:nth-child(9) {
      left: 74.64%;
      top: 21.97%;
      width: 5.79%;
      height: 16.80%;
    }

    /* Нижний ряд */
    #bot-row .pit:nth-child(1) {
      left: 20.51%;
      top: 54.79%;
      width: 6.12%;
      height: 16.99%;
    }

    #bot-row .pit:nth-child(2) {
      left: 27.41%;
      top: 54.69%;
      width: 5.86%;
      height: 17.09%;
    }

    #bot-row .pit:nth-child(3) {
      left: 34.18%;
      top: 54.69%;
      width: 5.86%;
      height: 16.99%;
    }

    #bot-row .pit:nth-child(4) {
      left: 40.92%;
      top: 54.79%;
      width: 5.92%;
      height: 16.99%;
    }

    #bot-row .pit:nth-child(5) {
      left: 47.56%;
      top: 54.79%;
      width: 6.05%;
      height: 17.09%;
    }

    #bot-row .pit:nth-child(6) {
      left: 54.59%;
      top: 54.79%;
      width: 5.53%;
      height: 16.99%;
    }

    #bot-row .pit:nth-child(7) {
      left: 60.90%;
      top: 54.79%;
      width: 6.32%;
      height: 17.09%;
    }

    #bot-row .pit:nth-child(8) {
      left: 67.84%;
      top: 54.88%;
      width: 5.99%;
      height: 16.99%;
    }

    #bot-row .pit:nth-child(9) {
      left: 74.58%;
      top: 54.98%;
      width: 5.92%;
      height: 16.99%;
    }

    /* Попиксельные сдвиги влево на каждой лунке (1..9 → 0.12%..1.46%
       от ширины доски). Они компенсируют асимметрию фотографии. Применяются
       на всех разрешениях — проценты автоматически масштабируются с шириной
       доски. */
    #top-row .pit:nth-child(1) { left: calc(20.44% - 0.122%); }
    #top-row .pit:nth-child(2) { left: calc(27.41% - 0.244%); }
    #top-row .pit:nth-child(3) { left: calc(34.18% - 0.366%); }
    #top-row .pit:nth-child(4) { left: calc(41.02% - 0.488%); }
    #top-row .pit:nth-child(5) { left: calc(47.76% - 0.610%); }
    #top-row .pit:nth-child(6) { left: calc(54.59% - 0.732%); }
    #top-row .pit:nth-child(7) { left: calc(60.97% - 0.976%); }
    #top-row .pit:nth-child(8) { left: calc(67.97% - 1.220%); }
    #top-row .pit:nth-child(9) { left: calc(74.64% - 1.463%); }

    #bot-row .pit:nth-child(1) { left: calc(20.51% - 0.122%); }
    #bot-row .pit:nth-child(2) { left: calc(27.41% - 0.244%); }
    #bot-row .pit:nth-child(3) { left: calc(34.18% - 0.366%); }
    #bot-row .pit:nth-child(4) { left: calc(40.92% - 0.488%); }
    #bot-row .pit:nth-child(5) { left: calc(47.56% - 0.610%); }
    #bot-row .pit:nth-child(6) { left: calc(54.59% - 0.732%); }
    #bot-row .pit:nth-child(7) { left: calc(60.90% - 0.976%); }
    #bot-row .pit:nth-child(8) { left: calc(67.84% - 1.220%); }
    #bot-row .pit:nth-child(9) { left: calc(74.58% - 1.463%); }

    .pit.clickable {
      cursor: pointer;
    }
    .pit.clickable:focus-visible {
      outline: none;
      box-shadow: 0 0 0 3px var(--amber-400), 0 0 18px rgba(251, 191, 36, 0.6);
    }

    /* Расширяем тач-зону кликабельной лунки до WCAG-минимума 32×32px,
       не меняя визуального положения (H4). Псевдо-элемент ловит pointer-события. */
    @media (pointer: coarse) {
      .pit.clickable::before {
        content: '';
        position: absolute;
        inset: -10px;
        min-width: 32px;
        min-height: 32px;
        margin: auto;
      }
    }

    .pit.clickable:hover {
      background: rgba(251, 191, 36, 0.2);
      box-shadow: 0 0 18px rgba(251, 191, 36, 0.6), inset 0 0 12px rgba(251, 191, 36, 0.15);
    }

    .pit.clickable:active {
      background: rgba(251, 191, 36, 0.3);
      box-shadow: 0 0 22px rgba(251, 191, 36, 0.7);
    }

    .pit.highlighted {
      background: rgba(251, 191, 36, 0.1);
      box-shadow: 0 0 12px rgba(251, 191, 36, 0.5);
    }

    .pit.disabled {
      opacity: 0.5;
    }

    .pit.tuz-amber {
      background: rgba(251, 191, 36, 0.15);
      border: 2px solid rgba(251, 191, 36, 0.5);
      box-shadow: 0 0 10px rgba(251, 191, 36, 0.4);
    }

    .pit.tuz-blue {
      background: rgba(96, 165, 250, 0.15);
      border: 2px solid rgba(96, 165, 250, 0.5);
      box-shadow: 0 0 10px rgba(96, 165, 250, 0.4);
    }

    .pit .tuz-label {
      position: absolute;
      top: -9px;
      left: 50%;
      transform: translateX(-50%);
      font-size: 8px;
      font-weight: 700;
      padding: 1px 6px;
      border-radius: 4px;
      letter-spacing: 0.5px;
    }

    .pit .tuz-label.amber {
      background: var(--amber-600);
      color: var(--bg-dark);
    }

    .pit .tuz-label.blue {
      background: var(--blue-600);
      color: white;
    }

    /* ── Move glow animation ── */
    @keyframes glowPulse {
      0% {
        box-shadow: 0 0 8px rgba(251, 191, 36, 0.5);
      }

      50% {
        box-shadow: 0 0 20px rgba(251, 191, 36, 0.8), 0 0 40px rgba(251, 191, 36, 0.3);
      }

      100% {
        box-shadow: 0 0 8px rgba(251, 191, 36, 0.5);
      }
    }

    .pit.last-move-glow {
      animation: glowPulse 0.6s ease-in-out 2;
    }

    /* ── Move animation ── */
    .flying-stone {
      position: fixed;
      width: 14px;
      height: 14px;
      border-radius: 50%;
      background: radial-gradient(circle at 35% 28%, #999, #555, #222);
      box-shadow: 0 0 8px rgba(0, 0, 0, 0.5), 0 2px 4px rgba(0, 0, 0, 0.6), inset 0 1px 2px rgba(255, 255, 255, 0.2);
      z-index: 200;
      pointer-events: none;
      transition: none;
    }

    @keyframes stoneLand {
      0% {
        transform: scale(1.4);
      }

      50% {
        transform: scale(0.8);
      }

      100% {
        transform: scale(1);
      }
    }

    @keyframes pitReceive {
      0% {
        background: transparent;
      }

      40% {
        background: rgba(251, 191, 36, 0.15);
        box-shadow: 0 0 14px rgba(251, 191, 36, 0.4);
      }

      100% {
        background: transparent;
      }
    }

    .pit.pit-receiving {
      animation: pitReceive 0.35s ease-out;
    }

    @keyframes pitPickup {
      0% {
        transform: scale(1);
      }

      30% {
        transform: scale(0.95);
      }

      100% {
        transform: scale(1);
      }
    }

    .pit.pit-picking-up {
      animation: pitPickup 0.4s ease-out;
    }

    @keyframes captureFlash {
      0% {
        background: transparent;
      }

      30% {
        background: rgba(34, 197, 94, 0.2);
        box-shadow: 0 0 20px rgba(34, 197, 94, 0.6);
      }

      100% {
        background: transparent;
      }
    }

    .pit.pit-captured {
      animation: captureFlash 0.5s ease-out;
    }

    @keyframes kazanFlash {
      0% {
        filter: brightness(1);
      }

      40% {
        filter: brightness(1.5);
      }

      100% {
        filter: brightness(1);
      }
    }

    .kazan-box.kazan-receiving {
      animation: kazanFlash 0.4s ease-out;
    }

    @keyframes tuzAppear {
      0% {
        transform: scale(0);
        opacity: 0;
      }

      50% {
        transform: scale(1.3);
        opacity: 1;
      }

      100% {
        transform: scale(1);
        opacity: 1;
      }
    }

    .pit.tuz-new {
      animation: tuzAppear 0.6s ease-out;
    }

    .stones-wrap {
      display: flex;
      flex-wrap: wrap;
      justify-content: center;
      /* Все размеры — относительные, чтобы камни помещались в любую лунку. */
      gap: clamp(0.5px, 0.2vw, 1.5px);
      max-width: 80%;
      padding: 0 clamp(1px, 0.25vw, 2px);
      box-sizing: border-box;
    }

    .stone {
      /* Камни масштабируются с шириной экрана; clamp гарантирует
         минимум 3px (видимы) и максимум 7px (не толкают друг друга). */
      width: clamp(3px, 0.95vw, 7px);
      height: clamp(3px, 0.95vw, 7px);
      border-radius: 50%;
      background: radial-gradient(circle at 35% 28%, #777, #3a3a3a, #1a1a1a);
      box-shadow: 0 1px 2px rgba(0, 0, 0, 0.6), inset 0 0.5px 1px rgba(255, 255, 255, 0.15);
      flex-shrink: 0;
    }

    .stone.sm {
      width: clamp(2.5px, 0.7vw, 5px);
      height: clamp(2.5px, 0.7vw, 5px);
    }

    .pit-count {
      color: #fff;
      font-weight: 800;
      /* Адаптивный размер: 9-14px; не вылезает из узких лунок на мобильном. */
      font-size: clamp(9px, 1.8vw, 14px);
      text-shadow: 0 1px 3px rgba(0, 0, 0, 0.8), 0 0 6px rgba(0, 0, 0, 0.4);
    }

    .pit-idx {
      display: none;
    }

    .kazan.kazan-side {
      position: absolute;
    }

    /* Точные координаты казанов */
    #kazan-opp {
      left: 5.93%;
      top: 35.55%;
      width: 14.84%;
      height: 23.73%;
    }

    #kazan-me {
      left: 79.26%;
      top: 35.64%;
      width: 14.78%;
      height: 23.63%;
    }

    .kazan-label {
      position: absolute;
      bottom: calc(100% - 40px);
      left: 50%;
      transform: translateX(-50%);
      white-space: nowrap;
      font-size: 9px;
      font-weight: 700;
      letter-spacing: 0.5px;
      text-transform: uppercase;
      color: rgba(255, 255, 255, 0.7);
      text-shadow: 0 1px 3px rgba(0, 0, 0, 0.8);
    }

    .kazan-label.amber {
      color: rgba(255, 230, 150, 0.85);
    }

    .kazan-label.blue {
      color: rgba(150, 200, 255, 0.85);
    }

    .kazan-box {
      position: absolute;
      inset: 0;
      border-radius: 50%;
      overflow: hidden;
      background: transparent;
      border: none;
      box-shadow: none;
    }

    .kazan-box.amber {
      border: none;
    }

    .kazan-box.blue {
      border: none;
    }

    .kazan-fill {
      position: absolute;
      bottom: 6px;
      left: 0;
      right: 0;
      transition: height 0.5s ease;
      opacity: 0.45;
    }

    .kazan-fill.amber {
      background: linear-gradient(to top, rgba(180, 140, 50, 0.7), rgba(220, 180, 80, 0.2));
    }

    .kazan-fill.blue {
      background: linear-gradient(to top, rgba(50, 100, 180, 0.6), rgba(80, 150, 220, 0.2));
    }

    .kazan-num {
      position: absolute;
      inset: 0;
      display: flex;
      align-items: center;
      justify-content: center;
      /* Микро-подъём цифры: масштабируется с шириной (в десктопе — 2px, в мобиле — пропорционально). */
      padding-bottom: min(2px, 0.3vw);
      color: #fff;
      font-weight: 800;
      /* Шрифт казана адаптивный: на 820px-board ≈ 22px, на 350px ≈ 14-15px. */
      font-size: clamp(14px, 2.7vw, 22px);
      text-shadow: 0 2px 4px rgba(0, 0, 0, 0.8), 0 0 8px rgba(0, 0, 0, 0.4);
    }

    .kazan-target {
      position: absolute;
      top: calc(100% - 36px);
      left: 50%;
      transform: translateX(-50%);
      white-space: nowrap;
      font-size: 9px;
      color: rgba(255, 255, 255, 0.5);
      text-shadow: 0 1px 2px rgba(0, 0, 0, 0.8);
    }

    .turn-indicator {
      display: flex;
      flex-direction: column;
      align-items: center;
    }

    .turn-text {
      font-size: 18px;
      font-weight: 800;
      text-shadow: 0 2px 4px rgba(0, 0, 0, 0.5);
    }

    .turn-text.amber {
      color: var(--amber-400);
    }

    .turn-text.blue {
      color: var(--blue-400);
    }

    .turn-text.green {
      color: var(--green-500);
    }

    .turn-text.red {
      color: var(--red-500);
    }

    .turn-dot {
      width: 12px;
      height: 12px;
      border-radius: 50%;
      margin-top: 4px;
      animation: pulse 1s infinite;
    }

    .turn-dot.amber {
      background: var(--amber-400);
    }

    .turn-dot.blue {
      background: var(--blue-400);
    }

    @keyframes pulse {

      0%,
      100% {
        opacity: 1;
      }

      50% {
        opacity: 0.4;
      }
    }

    .waiting-view {
      display: flex;
      flex-direction: column;
      align-items: center;
      gap: 16px;
      padding: 32px 0;
    }

    .spinner {
      font-size: 40px;
      animation: spin 1.5s linear infinite;
    }

    @keyframes spin {
      from {
        transform: rotate(0);
      }

      to {
        transform: rotate(360deg);
      }
    }

    /* ── Room code display ── */
    .room-code-display {
      margin-top: 12px;
      padding: 12px 20px;
      border-radius: 10px;
      background: rgba(251, 191, 36, 0.08);
      border: 1px solid rgba(251, 191, 36, 0.2);
      text-align: center;
    }

    .room-code-display .code-label {
      font-size: 11px;
      color: var(--text-muted);
      margin-bottom: 4px;
    }

    .room-code-display .code-value {
      font-size: 18px;
      font-weight: 700;
      color: var(--amber-400);
      letter-spacing: 3px;
      font-family: monospace;
    }

    .game-buttons {
      display: flex;
      gap: 12px;
      flex-wrap: wrap;
    }

    /* ── Chat panel ── */
    .chat-panel {
      width: 100%;
      max-width: 760px;
    }

    .chat-panel .card {
      padding: 16px;
    }

    .chat-panel h4 {
      font-size: 13px;
      color: var(--text-muted);
      margin-bottom: 8px;
      font-weight: 600;
      letter-spacing: 1px;
    }

    .chat-messages {
      max-height: 150px;
      overflow-y: auto;
      margin-bottom: 8px;
      display: flex;
      flex-direction: column;
      gap: 4px;
      scrollbar-width: thin;
      scrollbar-color: rgba(251, 191, 36, 0.2) transparent;
    }

    .chat-messages::-webkit-scrollbar {
      width: 4px;
    }

    .chat-messages::-webkit-scrollbar-track {
      background: transparent;
    }

    .chat-messages::-webkit-scrollbar-thumb {
      background: rgba(251, 191, 36, 0.2);
      border-radius: 2px;
    }

    .chat-msg {
      font-size: 13px;
      line-height: 1.4;
      padding: 4px 8px;
      border-radius: 6px;
      background: var(--bg-card-soft);
    }

    .chat-msg .chat-sender {
      font-weight: 700;
      margin-right: 6px;
    }

    .chat-msg .chat-sender.amber {
      color: var(--amber-400);
    }

    .chat-msg .chat-sender.blue {
      color: var(--blue-400);
    }

    .chat-msg .chat-text {
      color: var(--amber-200);
    }

    .chat-input-row {
      display: flex;
      gap: 8px;
    }

    .chat-input-row input[type="text"] {
      flex: 1;
      padding: 8px 12px;
      font-size: 13px;
      border-radius: 8px;
    }

    .chat-input-row button {
      padding: 8px 16px;
      border-radius: 8px;
      border: none;
      background: linear-gradient(135deg, var(--amber-800), var(--amber-700));
      color: var(--amber-100);
      font-size: 13px;
      font-weight: 600;
      cursor: pointer;
      transition: all 0.2s;
    }

    .chat-input-row button:hover {
      transform: scale(1.02);
    }

    /* ── Event log panel ── */
    .event-log-panel {
      width: 100%;
      max-width: 760px;
    }

    .event-log-panel .card {
      padding: 12px 16px;
    }

    .event-log-panel h4 {
      font-size: 12px;
      color: var(--text-dim);
      margin-bottom: 6px;
      font-weight: 600;
      letter-spacing: 1px;
    }

    .event-log-list {
      display: flex;
      flex-direction: column;
      gap: 2px;
      max-height: 120px;
      overflow-y: auto;
      scrollbar-width: thin;
      scrollbar-color: rgba(251, 191, 36, 0.15) transparent;
    }

    .event-log-list::-webkit-scrollbar {
      width: 3px;
    }

    .event-log-list::-webkit-scrollbar-thumb {
      background: rgba(251, 191, 36, 0.15);
      border-radius: 2px;
    }

    .log-entry {
      font-size: 11px;
      color: var(--text-dim);
      line-height: 1.4;
      padding: 2px 4px;
    }

    .log-entry .log-time {
      color: rgba(251, 191, 36, 0.3);
      margin-right: 6px;
      font-family: monospace;
      font-size: 10px;
    }

    /* ── Confetti ── */
    @keyframes confettiFall {
      0% {
        transform: translateY(-10px) rotate(0deg);
        opacity: 1;
      }

      100% {
        transform: translateY(100vh) rotate(720deg);
        opacity: 0;
      }
    }

    .confetti-container {
      position: fixed;
      top: 0;
      left: 0;
      width: 100%;
      height: 100%;
      pointer-events: none;
      z-index: 200;
      overflow: hidden;
    }

    .confetti-piece {
      position: absolute;
      top: -10px;
      width: 10px;
      height: 10px;
      animation: confettiFall 3s ease-in forwards;
    }

    footer {
      text-align: center;
      padding: 20px;
      font-size: 11px;
      color: #3d2b1a;
      border-top: 1px solid rgba(251, 191, 36, 0.04);
    }

    .hidden {
      display: none !important;
    }

    /* ── Подключение ── */
    #connection-status {
      position: fixed;
      bottom: 12px;
      right: 12px;
      padding: 6px 12px;
      border-radius: 8px;
      font-size: 11px;
      z-index: 50;
    }

    #connection-status.connected {
      background: rgba(5, 150, 105, 0.2);
      color: #6ee7b7;
    }

    #connection-status.disconnected {
      background: rgba(220, 38, 38, 0.2);
      color: #fca5a5;
    }

    /* ── Responsive ── */
    @media (max-width: 600px) {
      .hero-title {
        font-size: 28px;
        letter-spacing: 2px;
      }

      .hero-subtitle {
        font-size: 16px;
      }

      .stats-grid {
        grid-template-columns: repeat(2, 1fr);
      }

      .hero-cta {
        flex-direction: column;
        align-items: center;
      }

      .btn-hero {
        width: 100%;
        max-width: 300px;
      }

      .game-bar {
        flex-direction: column;
        align-items: flex-start;
      }

      .demo-kazan-label {
        font-size: 7px;
      }

      .live-bar {
        gap: 12px;
        font-size: 12px;
      }
    }

    /* ── Board responsive ──
       Размеры pit-count, stones-wrap, .stone, .kazan-num уже масштабируются
       через clamp() в базовых правилах, поэтому отдельные media-overrides
       больше не нужны — оставляем только специфичные правки для надписей. */
    @media (max-width: 700px) {
      .kazan-label {
        font-size: 7px;
      }

      .turn-text {
        font-size: 15px;
      }
    }

    @media (max-width: 600px) {
      /* На узких экранах подписи СОПЕРНИК / ВАШ / Цель: 82 наезжают на
         цифру внутри казана из-за абсолютного смещения. Прячем их —
         цвет/сторона казана однозначно идентифицируется визуально. */
      .kazan-label,
      .kazan-target {
        display: none;
      }

      .pit-idx {
        font-size: 6px;
      }

      .turn-text {
        font-size: 12px;
      }

      /* Header: один компактный ряд вместо распылённых элементов. */
      header {
        padding: 8px 12px;
      }
      .online-badge {
        font-size: 10px;
        padding: 3px 6px;
      }
      .balance-badge {
        font-size: 12px;
        padding: 4px 8px;
      }
      .user-bar .online-badge,
      .user-bar .balance-badge {
        display: none;
      }
      /* Стат-блок имени и W/L прячем — занимает ширину. Видны через drawer. */
      .user-info { display: none; }
      .header-tools { gap: 6px; }

      /* Игровой бар компактнее: режим/уровень в один ряд маленьким шрифтом. */
      .game-bar {
        padding: 10px 14px;
        gap: 8px;
      }
      .game-bar .players { font-size: 14px; gap: 8px; }
      .bank-badge { font-size: 12px; padding: 4px 10px; }
      .bot-level-badge { font-size: 10px; padding: 3px 8px; }

      /* Кнопки игры (Сдаться/В лобби/Ещё раз) — поменьше, в один ряд. */
      .game-buttons { gap: 8px; }
      .game-buttons .btn {
        padding: 10px 18px;
        font-size: 14px;
      }

      .panel-tab {
        padding: 10px 12px;
        font-size: 11px;
      }
      .panel-body {
        padding: 10px 12px;
        max-height: 140px;
      }
    }

    /* ── View transitions ── */
    #landing-view,
    #lobby-view,
    #game-view {
      transition: opacity 0.3s ease, transform 0.3s ease;
    }

    .view-enter {
      opacity: 0;
      transform: translateY(12px);
    }

    .view-active {
      opacity: 1;
      transform: translateY(0);
    }

    /* ── Result modal ── */
    .result-overlay {
      position: fixed;
      inset: 0;
      background: rgba(0, 0, 0, 0.75);
      z-index: 150;
      display: flex;
      align-items: center;
      justify-content: center;
      animation: fadeIn 0.3s ease;
    }

    @keyframes fadeIn {
      from {
        opacity: 0;
      }

      to {
        opacity: 1;
      }
    }

    .result-modal {
      background: linear-gradient(135deg, var(--bg-mid), var(--bg-dark));
      border: 1px solid rgba(251, 191, 36, 0.2);
      border-radius: 20px;
      padding: 32px 40px;
      text-align: center;
      max-width: 420px;
      width: 90%;
      animation: modalSlideIn 0.4s ease;
    }

    @keyframes modalSlideIn {
      from {
        opacity: 0;
        transform: scale(0.85) translateY(20px);
      }

      to {
        opacity: 1;
        transform: scale(1) translateY(0);
      }
    }

    .result-icon {
      font-size: 56px;
      margin-bottom: 12px;
    }

    .result-title {
      font-size: 28px;
      font-weight: 800;
      letter-spacing: 1px;
      margin-bottom: 16px;
    }

    .result-title.win {
      color: var(--green-500);
    }

    .result-title.lose {
      color: var(--red-500);
    }

    .result-title.draw {
      color: var(--amber-400);
    }

    .result-score {
      font-size: 18px;
      color: var(--amber-100);
      margin-bottom: 16px;
    }

    .result-score .score-big {
      font-size: 36px;
      font-weight: 800;
    }

    .result-details {
      display: flex;
      flex-direction: column;
      gap: 6px;
      margin-bottom: 24px;
      font-size: 14px;
      color: var(--amber-200);
    }

    .result-details .detail-row {
      display: flex;
      justify-content: space-between;
      padding: 4px 0;
      border-bottom: 1px solid rgba(251, 191, 36, 0.06);
    }

    .result-details .detail-label {
      color: var(--text-muted);
    }

    .result-details .detail-value {
      font-weight: 600;
    }

    .result-details .elo-change {
      font-weight: 700;
      font-size: 16px;
    }

    .elo-up {
      color: var(--green-500);
    }

    .elo-down {
      color: var(--red-500);
    }

    .result-buttons {
      display: flex;
      gap: 12px;
      justify-content: center;
      flex-wrap: wrap;
    }

    /* ── Typed notifications ── */
    #notification {
      display: none;
      position: fixed;
      top: 16px;
      left: 50%;
      transform: translateX(-50%);
      padding: 12px 24px;
      border-radius: 12px;
      font-size: 14px;
      font-weight: 600;
      z-index: 100;
      max-width: 90%;
      text-align: center;
      animation: notifySlideIn 0.3s ease;
    }

    @keyframes notifySlideIn {
      from {
        opacity: 0;
        transform: translateX(-50%) translateY(-10px);
      }

      to {
        opacity: 1;
        transform: translateX(-50%) translateY(0);
      }
    }

    #notification.notify-success {
      background: linear-gradient(135deg, rgba(34, 197, 94, 0.9), rgba(22, 163, 74, 0.9));
      color: white;
      box-shadow: 0 4px 20px rgba(34, 197, 94, 0.3);
    }

    #notification.notify-error {
      background: linear-gradient(135deg, rgba(220, 38, 38, 0.9), rgba(185, 28, 28, 0.9));
      color: white;
      box-shadow: 0 4px 20px rgba(220, 38, 38, 0.3);
    }

    #notification.notify-info {
      background: linear-gradient(135deg, rgba(180, 130, 50, 0.9), rgba(160, 110, 30, 0.9));
      color: white;
      box-shadow: 0 4px 20px rgba(251, 191, 36, 0.3);
    }

    /* ── Panel tabs (chat/log) ── */
    .game-panels {
      width: 100%;
      max-width: 920px;
      margin: 18px auto 0;
      border-radius: 14px;
      background: var(--bg-card-soft);
      border: 1px solid var(--amber-glow-mid);
      backdrop-filter: blur(12px);
      -webkit-backdrop-filter: blur(12px);
      box-shadow: var(--shadow-md);
      overflow: hidden;
    }

    .panel-tabs {
      display: flex;
      gap: 0;
      border-bottom: 1px solid rgba(251, 191, 36, 0.1);
      background: rgba(0, 0, 0, 0.18);
      /* На узких viewport'ах (admin 7 табов = 853px на 375px screen)
         flex:1 не может сжать текст ниже content-width — табы вываливаются
         за родителя и тащат page-overflow. overflow-x:auto делает табы
         горизонтально-скроллимыми внутри своего контейнера, не ломая
         layout страницы. */
      overflow-x: auto;
      scrollbar-width: thin;
    }
    .panel-tabs::-webkit-scrollbar { height: 4px; }

    .panel-tab {
      flex: 1 0 auto;
      padding: 12px 16px;
      background: none;
      border: none;
      color: var(--text-muted);
      font-size: 12px;
      font-weight: 700;
      letter-spacing: 1.5px;
      text-transform: uppercase;
      cursor: pointer;
      border-bottom: 2px solid transparent;
      transition: all 0.2s;
      white-space: nowrap;
    }

    .panel-tab.active {
      color: var(--amber-400);
      border-bottom-color: var(--amber-400);
      background: rgba(251, 191, 36, 0.04);
    }

    .panel-tab:hover {
      color: var(--amber-200);
    }

    .panel-body {
      background: transparent;
      padding: 14px 18px;
      max-height: 200px;
      overflow-y: auto;
    }

    /* Admin view-контейнер: фиксированная ширина (как у #lobby-view).
       <main> — flex с justify-content:center, поэтому без width:100% +
       max-width админка центрировалась по контенту: узкий таб давал узкий
       блок, широкий — широкий, и блок «прыгал» по ширине при переключении.
       Теперь ширина стабильна независимо от содержимого. */
    #admin-view {
      width: 100%;
      max-width: 1100px;
      display: flex;
      flex-direction: column;
    }

    /* ── Generic UI modal (uiConfirm/uiPrompt) ──
       Заменяет native confirm/prompt: те рисуются ОС'ом и ломают наш дизайн.
       Этот модал в стиле auth-overlay: затемнение, центрированная карточка,
       одинаковые кнопки. z-index 90 выше auth-overlay (80), чтобы перекрывать. */
    .ui-modal {
      position: fixed;
      inset: 0;
      z-index: 90;
      background: var(--surface-bg-strong);
      backdrop-filter: blur(8px);
      display: flex;
      align-items: center;
      justify-content: center;
      padding: 20px;
      animation: fadeIn 0.2s ease;
    }
    .ui-modal-card {
      max-width: 420px;
      width: 100%;
      background: var(--bg-card-mid);
      border: 1px solid var(--amber-glow-line);
      border-radius: 14px;
      padding: 22px 24px;
      display: flex;
      flex-direction: column;
      gap: 14px;
      animation: slideUp 0.2s ease;
    }
    .ui-modal-title {
      margin: 0;
      font-size: 18px;
      font-weight: 700;
      color: var(--amber-400);
      letter-spacing: 0.5px;
    }
    .ui-modal-msg {
      margin: 0;
      color: var(--text);
      font-size: 14px;
      line-height: 1.5;
      white-space: pre-line;
    }
    .ui-modal-input-wrap input {
      width: 100%;
    }
    .ui-modal-actions {
      display: flex;
      gap: 10px;
      justify-content: flex-end;
      margin-top: 6px;
    }

    /* Раздел «Информация» в футере: колонка ссылок на документы. */
    .footer-info {
      display: flex;
      flex-direction: column;
      gap: 14px;
      align-items: center;
      margin: 8px 0 22px;
    }
    .footer-info-title {
      margin: 0 0 4px;
      font-size: 17px;
      font-weight: 600;
      letter-spacing: 0.4px;
      color: var(--text);
    }
    .footer-info .footer-link {
      color: var(--text-dim);
      text-decoration: none;
      font-size: 15px;
      transition: color 0.2s ease;
    }
    .footer-info .footer-link:hover,
    .footer-info .footer-link.active {
      color: var(--amber-400);
    }
    @media (min-width: 720px) {
      .footer-info {
        flex-flow: row wrap;
        justify-content: center;
        gap: 10px 22px;
      }
      .footer-info-title {
        width: 100%;
        text-align: center;
      }
    }

    /* Страница документа (#info-view). */
    .info-doc-updated {
      color: var(--text-dim);
      font-size: 13px;
      margin-bottom: 18px;
    }
    .info-doc-body h4 {
      margin: 22px 0 8px;
      font-size: 16px;
      color: var(--amber-400);
      font-weight: 600;
    }
    .info-doc-body p {
      margin: 0;
      line-height: 1.65;
      color: var(--text);
      max-width: 70ch;
    }
    .info-doc-nav {
      display: flex;
      flex-wrap: wrap;
      gap: 8px 18px;
      margin-top: 32px;
      padding-top: 18px;
      border-top: 1px solid var(--amber-glow-line);
    }

    /* Оверлей ожидания (#ui-busy): пауза перед редиректом на страницу
       провайдера. Карточка без кнопок — отменять нечего, запрос ушёл. */
    .ui-busy-card {
      align-items: center;
      text-align: center;
      max-width: 380px;
    }
    .ui-busy-spinner {
      width: 42px;
      height: 42px;
      border-radius: 50%;
      border: 3px solid var(--amber-glow-line);
      border-top-color: var(--amber-400);
      animation: busySpin 0.9s linear infinite;
      margin-bottom: 2px;
    }
    @keyframes busySpin {
      to { transform: rotate(360deg); }
    }
    /* Уважаем системную настройку «меньше движения»: вместо вращения —
       мягкое пульсирование, индикация процесса сохраняется. */
    @media (prefers-reduced-motion: reduce) {
      .ui-busy-spinner {
        animation: pulse 1.4s ease-in-out infinite;
      }
    }

    /* Admin: чек-бокс «Создавать ежедневно» в форме создания турнира. */
    .adm-recur-label {
      display: flex;
      align-items: center;
      gap: 8px;
      margin: 8px 0 12px;
      font-size: 13px;
      color: var(--text-muted);
      cursor: pointer;
    }
    .adm-recur-label input[type="checkbox"] {
      width: 16px; height: 16px;
      cursor: pointer;
    }

    /* Admin form: подсветка невалидного поля + стиль ошибки в hint'е.
       .field-error на input — красная рамка. .adm-form-hint.is-error —
       видимый красный блок с подробным списком ошибок. */
    #admin-view .field-error,
    #admin-view input.field-error,
    #admin-view select.field-error {
      border-color: var(--red-500, #ef4444) !important;
      box-shadow: 0 0 0 1px var(--red-500, #ef4444);
    }
    .adm-form-hint.is-error {
      color: var(--red-500, #ef4444);
      background: rgba(239, 68, 68, 0.08);
      border: 1px solid rgba(239, 68, 68, 0.3);
      border-radius: 8px;
      padding: 10px 12px;
      margin-top: 12px;
      font-size: 13px;
      line-height: 1.5;
    }

    /* Admin: панель табов имеет ОДНУ ФИКСИРОВАННУЮ высоту, не зависящую от
       содержимого. Без этого при переключении Турниры → Пользователи →
       Транзакции блок прыгает по высоте. Height: фиксированный, content
       длиннее — скролл внутри (overflow-y:auto). */
    #admin-view .panel-body {
      height: 65vh;
      max-height: 65vh;
      overflow-y: auto;
    }

    /* Admin compact hero: одна строка вместо большой lobby-hero-карточки.
       Login слева крупно, last-login справа подписью. ~50px вместо ~180. */
    .admin-hero-compact {
      display: flex;
      flex-wrap: wrap;
      align-items: baseline;
      justify-content: space-between;
      gap: 8px 16px;
      padding: 14px 20px;
      border-bottom: 1px solid rgba(251, 191, 36, 0.12);
      margin-bottom: 16px;
    }
    .admin-hero-login {
      font-size: 18px;
      font-weight: 700;
      letter-spacing: 1px;
      color: var(--amber-400);
    }
    .admin-hero-meta {
      font-size: 12px;
      color: var(--text-muted);
    }

    /* ── Waiting timer ── */
    .waiting-timer {
      font-size: 13px;
      color: var(--text-dim);
      font-variant-numeric: tabular-nums;
    }

    @media (max-width: 600px) {
      .result-modal {
        padding: 24px 20px;
      }

      .result-title {
        font-size: 22px;
      }

      .result-score .score-big {
        font-size: 28px;
      }
    }

    /* ── PR 9 (этап 12): Admin ops dashboard ── */
    .adm-ops-grid {
      display: grid;
      grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
      gap: 12px;
      padding: 8px 0;
    }
    .adm-ops-card {
      display: flex;
      flex-direction: column;
      align-items: flex-start;
      gap: 8px;
      padding: 16px 18px;
      min-height: 88px;
      background: rgba(251, 191, 36, 0.04);
      border: 1px solid rgba(251, 191, 36, 0.18);
      border-radius: 10px;
      color: var(--text);
      cursor: pointer;
      font: inherit;
      text-align: left;
      transition: background 120ms ease, border-color 120ms ease, transform 120ms ease;
    }
    .adm-ops-card:hover {
      background: rgba(251, 191, 36, 0.10);
      border-color: rgba(251, 191, 36, 0.4);
    }
    .adm-ops-card:active {
      transform: translateY(1px);
    }
    .adm-ops-label {
      font-size: 12px;
      letter-spacing: 0.5px;
      text-transform: uppercase;
      color: var(--text-muted);
    }
    .adm-ops-value {
      font-size: 28px;
      font-weight: 700;
      font-variant-numeric: tabular-nums;
      color: var(--amber-400);
    }
    .adm-ops-warn {
      border-color: rgba(217, 119, 6, 0.5);
      background: rgba(217, 119, 6, 0.08);
    }
    .adm-ops-warn .adm-ops-value {
      color: var(--amber-600);
    }
    .adm-ops-alert {
      border-color: rgba(239, 68, 68, 0.5);
      background: rgba(239, 68, 68, 0.08);
    }
    .adm-ops-alert .adm-ops-value {
      color: var(--red-500);
    }

    /* ── PR 11: KYC бейджи в profile-view ── */
    .kyc-badge {
      display: inline-block;
      padding: 6px 12px;
      border-radius: 6px;
      font-weight: 600;
      letter-spacing: 0.5px;
      border: 1px solid;
    }
    .kyc-ok {
      color: var(--green-500);
      border-color: rgba(34, 197, 94, 0.5);
      background: rgba(34, 197, 94, 0.08);
    }
    .kyc-pending {
      color: var(--amber-400);
      border-color: rgba(251, 191, 36, 0.5);
      background: rgba(251, 191, 36, 0.08);
    }
    .kyc-rejected {
      color: var(--red-500);
      border-color: rgba(239, 68, 68, 0.5);
      background: rgba(239, 68, 68, 0.08);
    }
    .kyc-unverified {
      color: var(--text-muted);
      border-color: rgba(120, 120, 120, 0.4);
      background: rgba(120, 120, 120, 0.06);
    }

    /* ── Турниры: mobile-оптимизация (iPhone Air ≈ 393-430 px) ───────────
       Архив турниров — таблица из 7 колонок (Старт/Тип/Статус/Приз/Уч./
       Призёры/Подробнее) — на узком экране переполнялась горизонтально.
       Active-карточки + детальный лидерборд тоже перегружены.
       Базовая стратегия: скрыть низкоприоритетные колонки на ≤600px,
       уменьшить padding/font, дать таблицам fallback horizontal-scroll.   */
    @media (max-width: 600px) {
      /* Архив: убираем «Тип» и «Уч.» (5-я колонка). Эти данные есть в
         детальной странице, в архив-листинге они приоритет 3-4. */
      .tournaments-archive th:nth-child(2),
      .tournaments-archive td:nth-child(2),
      .tournaments-archive th:nth-child(5),
      .tournaments-archive td:nth-child(5) {
        display: none;
      }
      .tournaments-archive th,
      .tournaments-archive td {
        padding: 6px 5px;
        font-size: 12px;
      }
      .tournaments-archive .t-status {
        font-size: 10px;
        padding: 1px 6px;
      }
      .tournaments-archive .t-reason {
        font-size: 10px;
      }
      .tournaments-archive .t-winner {
        font-size: 11px;
        white-space: nowrap;
        overflow: hidden;
        text-overflow: ellipsis;
        max-width: 110px;
      }
      .tournaments-archive .t-winner-prize {
        display: none; /* приз показываем в детальном view, в листинге он шумит */
      }
      .tournaments-archive td:last-child .btn-link {
        font-size: 11px;
        padding: 2px 4px;
      }

      /* Детальный view: лидерборд. Скрываем «Игр» (4-я колонка) —
         числовое поле, редко важное в призовом контексте. */
      #tournament-detail .lb-table th:nth-child(4),
      #tournament-detail .lb-table td:nth-child(4) {
        display: none;
      }
      #tournament-detail .lb-table th,
      #tournament-detail .lb-table td {
        padding: 5px 6px;
        font-size: 12px;
      }
      #tournament-detail .lb-table .lb-name {
        max-width: 120px;
        overflow: hidden;
        text-overflow: ellipsis;
        white-space: nowrap;
      }

      /* Active tournament cards (.room-item внутри #tournaments-list-active):
         даты типа "DD.MM.YYYY HH:mm (Asia/Bishkek)" длинные → разрешаем
         word-break, чтобы не вылазили за карточку. */
      #tournaments-list-active .room-item {
        padding: 12px;
      }
      #tournaments-list-active .card-meta {
        word-break: break-word;
        line-height: 1.4;
      }
      #tournaments-list-active .room-item .host {
        word-break: break-word;
      }
    }

    /* Fallback: если содержимое всё-таки переполняет (очень длинный
       nickname в призёрах, например) — позволяем горизонтальный скролл
       у обёртки таблицы вместо overflow всего <body>. */
    @media (max-width: 600px) {
      .tournaments-archive {
        display: block;
        overflow-x: auto;
        -webkit-overflow-scrolling: touch;
      }
    }
