/* ════════════════════════════════════════════════════════════════════════
   GameShelter — каркас навигации (desktop sidebar + topbar + mobile burger).

   Загружается ПОСЛЕ style.min.css, поэтому является единственным источником
   правды для поведения шапки и сайдбара.

   ДЕСКТОП (≥769px, высота >500px):
     • левый сайдбар .gs-sidebar — главная навигация (menu_groups_desktop);
       два состояния: развёрнут (--gs-sb-w) / свёрнут (--gs-sb-wc, иконки).
       Свёрнутость: класс gs-sb-collapsed на <html> (localStorage 'gsSbC',
       анти-мигание — inline-скрипт в <head> base.html);
     • топбар .navbar (sticky, 60px) — глобальный поиск (Ctrl+K) + виджеты
       аккаунта. Бренд и меню из топбара переехали в сайдбар;
     • 769–1024px: сайдбар принудительно свёрнут; кнопка разворота открывает
       его OVERLAY поверх контента (класс gs-sb-open на <html> + скрим).
   МОБИЛЬНЫЕ (≤768px или ландшафт телефона): сайдбар скрыт, работает
   бургер-дровер + нижний mobile-nav (без изменений).

   Логика: static/js/app-shell.js.
   ════════════════════════════════════════════════════════════════════════ */

:root {
    --gs-sb-w: 252px;   /* сайдбар развёрнут */
    --gs-sb-wc: 72px;   /* сайдбар свёрнут (иконки) */
}

/* ── DESKTOP / TABLET (≥769px, и НЕ ландшафт телефона) ─────────────────────
   min-height:501px исключает телефоны в альбомной ориентации — им достаётся
   мобильная раскладка ниже (бургер). */
@media (min-width: 769px) and (min-height: 501px) {

    /* ── Сдвиг всего документа вправо на ширину сайдбара ────────────── */
    body {
        padding-left: var(--gs-sb-w);
        transition: padding-left 0.22s ease;
    }
    html.gs-sb-collapsed body { padding-left: var(--gs-sb-wc); }

    /* ═══ САЙДБАР ═══════════════════════════════════════════════════── */
    .gs-sidebar {
        position: fixed;
        top: 0;
        left: 0;
        bottom: 0;
        z-index: 1010;              /* выше топбара (1000), ниже дроверов (1500+) */
        display: flex;
        flex-direction: column;
        width: var(--gs-sb-w);
        /* Премиум-стекло — как у топбара; книзу плотнее, чтобы кнопки
           футера не тонули в фоновой рекламе/градиентах страницы.
           Сверху — едва заметная неоновая подсветка (HUD-настроение) */
        background: var(--card-bg);
        background:
            radial-gradient(120% 180px at 30% -40px, color-mix(in srgb, var(--primary-color) 16%, transparent), transparent 70%),
            linear-gradient(180deg,
                color-mix(in srgb, var(--card-bg) 88%, transparent),
                color-mix(in srgb, var(--card-bg) 96%, transparent));
        -webkit-backdrop-filter: blur(18px) saturate(1.5);
        backdrop-filter: blur(18px) saturate(1.5);
        border-right: 1px solid color-mix(in srgb, var(--primary-color) 18%, var(--border-color));
        box-shadow: inset -1px 0 0 rgba(255, 255, 255, 0.04),
                    6px 0 28px rgba(0, 0, 0, 0.22);
        transition: width 0.22s ease;
        overflow: hidden;
    }
    html.gs-sb-collapsed .gs-sidebar { width: var(--gs-sb-wc); }

    /* Подписи: единый класс. В свёрнутом состоянии прячутся */
    .gs-sb-label {
        min-width: 0;
        overflow: hidden;
        text-overflow: ellipsis;
        white-space: nowrap;
    }
    html.gs-sb-collapsed .gs-sidebar .gs-sb-label { display: none; }

    /* ── Бренд: высота = топбар (60px) → единая линия ────────────────── */
    .gs-sb-brand {
        position: relative;
        display: flex;
        align-items: center;
        gap: 11px;
        height: 60px;
        flex-shrink: 0;
        padding: 0 20px;
        font-size: 1.3rem;
        font-weight: 800;
        letter-spacing: -0.3px;
        white-space: nowrap;
        text-decoration: none;
    }
    /* Неон-линия под брендом: гаснет к правому краю */
    .gs-sb-brand::after {
        content: '';
        position: absolute;
        left: 0;
        right: 0;
        bottom: 0;
        height: 1px;
        background: linear-gradient(90deg,
            color-mix(in srgb, var(--gs-brand-a, var(--primary-color)) 65%, transparent),
            color-mix(in srgb, var(--gs-brand-b, var(--accent-color)) 35%, transparent) 55%,
            transparent);
    }
    /* Логотип-молния (templates/_brand_logo.html) — hover-эффекты в style.css (.gs-logo) */
    .gs-sb-brand .gs-logo {
        width: 26px;
        height: 26px;
    }
    /* Wordmark — курсив + болд, чистый двухфазный градиент без text-stroke
       и жёстких офсетных теней (они давали «рябь» на мелком кегле).
       Палитра на переменных: --gs-brand-a/--gs-brand-b (fallback →
       --primary-color/--accent-color) — темы перекрашивают название сайта. */
    .gs-sb-brand-text {
        font-style: italic;
        font-weight: 900;
        letter-spacing: 0;
        padding-right: 4px;
        background: linear-gradient(115deg,
            color-mix(in srgb, var(--gs-brand-a, var(--primary-color)) 30%, var(--gs-brand-tint, #fff)) 0%,
            color-mix(in srgb, var(--gs-brand-a, var(--primary-color)) 76%, var(--gs-brand-tint, #fff)) 52%,
            var(--gs-brand-b, var(--accent-color)) 100%);
        -webkit-background-clip: text;
        background-clip: text;
        -webkit-text-fill-color: transparent;
        color: transparent;
        filter: drop-shadow(0 1px 1px rgba(8, 6, 24, 0.5))
                drop-shadow(0 0 14px color-mix(in srgb, var(--gs-brand-a, var(--primary-color)) 30%, transparent));
    }
    /* Светлая тема: сайдбар белый → градиент затемняется тинтом, тёмная
       микро-тень не нужна (контраст и так есть) */
    body[data-theme="light"] .gs-sb-brand-text {
        --gs-brand-tint: #26203f;
        filter: drop-shadow(0 0 10px color-mix(in srgb, var(--gs-brand-a, var(--primary-color)) 20%, transparent));
    }
    html.gs-sb-collapsed .gs-sb-brand {
        padding: 0;
        justify-content: center;
    }

    /* ── Скролл-зона навигации ───────────────────────────────────────── */
    .gs-sb-nav {
        flex: 1;
        min-height: 0;
        display: flex;
        flex-direction: column;
        gap: 14px;
        padding: 12px 12px 10px 0;
        overflow-y: auto;
        overflow-x: hidden;
        overscroll-behavior: contain;
        scrollbar-width: thin;
        scrollbar-color: var(--border-color) transparent;
    }
    .gs-sb-nav::-webkit-scrollbar { width: 4px; }
    .gs-sb-nav::-webkit-scrollbar-track { background: transparent; }
    .gs-sb-nav::-webkit-scrollbar-thumb { background: var(--border-color); border-radius: 4px; }
    html.gs-sb-collapsed .gs-sb-nav { padding: 12px 6px 10px; }

    /* Группы — HUD-секции: без карточек, заголовок с гаснущей неон-линией.
       Чётные группы — линия от accent-цвета (лёгкое чередование) */
    .gs-sb-group {
        display: flex;
        flex-direction: column;
        gap: 2px;
        flex-shrink: 0;
    }
    .gs-sb-group-title {
        display: flex;
        align-items: center;
        gap: 10px;
        padding: 4px 6px 6px 13px;
        font-size: 0.65rem;
        font-weight: 700;
        text-transform: uppercase;
        letter-spacing: 0.09em;
        color: var(--text-sec);
        white-space: nowrap;
        overflow: hidden;
    }
    .gs-sb-group-title::after {
        content: '';
        flex: 1;
        height: 1px;
        min-width: 14px;
        background: linear-gradient(90deg, color-mix(in srgb, var(--primary-color) 50%, transparent), transparent);
    }
    .gs-sb-group:nth-child(even) .gs-sb-group-title::after {
        background: linear-gradient(90deg, color-mix(in srgb, var(--accent-color) 45%, transparent), transparent);
    }
    /* Свёрнуто: заголовок → короткий неон-разделитель по центру */
    html.gs-sb-collapsed .gs-sidebar .gs-sb-group-title {
        padding: 0;
        margin: 3px auto 5px;
        width: 26px;
    }
    html.gs-sb-collapsed .gs-sidebar .gs-sb-group-title::after {
        min-width: 26px;
        background: linear-gradient(90deg, transparent, color-mix(in srgb, var(--primary-color) 55%, transparent), transparent);
    }
    html.gs-sb-collapsed .gs-sidebar .gs-sb-group:nth-child(even) .gs-sb-group-title::after {
        background: linear-gradient(90deg, transparent, color-mix(in srgb, var(--accent-color) 50%, transparent), transparent);
    }

    /* ── Пункты (Неон-HUD) ───────────────────────────────────────────── */
    .gs-sb-link {
        position: relative;
        display: flex;
        align-items: center;
        gap: 11px;
        min-height: 40px;
        padding: 9px 11px 9px 13px;
        border-radius: 0 10px 10px 0;
        color: var(--text-sec);
        font-size: 0.88rem;
        font-weight: 600;
        line-height: 1.2;
        text-decoration: none;
        white-space: nowrap;
        transition: color 0.16s ease, background-color 0.16s ease, transform 0.18s ease;
    }
    /* Неон-индикатор у левого края: растёт по высоте при ховере/активе.
       --it-c (фирменный цвет раздела из menu_structure) красит полосу и пульс;
       без него — цвета темы (primary→accent) */
    .gs-sb-link::before {
        content: '';
        position: absolute;
        left: 0;
        top: 50%;
        width: 3px;
        height: 0;
        border-radius: 2px;
        transform: translateY(-50%);
        background: linear-gradient(180deg, var(--it-c, var(--primary-color)), var(--it-c, var(--accent-color)));
        box-shadow: 0 0 9px color-mix(in srgb, var(--it-c, var(--primary-color)) 75%, transparent);
        opacity: 0;
        transition: height 0.2s ease, opacity 0.2s ease;
    }
    .gs-sb-link i {
        width: 22px;
        flex-shrink: 0;
        text-align: center;
        font-size: 1rem;
        transition: transform 0.18s ease, color 0.18s ease, filter 0.18s ease;
    }
    .gs-sb-link:hover {
        color: var(--text-main);
        background: linear-gradient(90deg, color-mix(in srgb, var(--primary-color) 13%, transparent), transparent 78%);
        transform: translateX(3px);
    }
    .gs-sb-link:hover::before {
        height: 46%;
        opacity: 0.65;
    }
    .gs-sb-link:hover i {
        transform: scale(1.1);
        color: var(--primary-color);
        filter: drop-shadow(0 0 5px color-mix(in srgb, var(--primary-color) 70%, transparent));
    }
    .gs-sb-link:focus-visible {
        outline: 2px solid var(--primary-color);
        outline-offset: 2px;
    }
    /* Активный пункт — HUD-плашка: заливка гаснет вправо, полоса пульсирует */
    .gs-sb-link.active {
        color: #fff;
        background: linear-gradient(90deg, color-mix(in srgb, var(--primary-color) 28%, transparent), color-mix(in srgb, var(--accent-color) 7%, transparent) 72%, transparent);
    }
    .gs-sb-link.active::before {
        height: 64%;
        opacity: 1;
        animation: gsSbPulse 3s ease-in-out infinite;
    }
    .gs-sb-link.active i {
        color: #fff;
        filter: drop-shadow(0 0 6px color-mix(in srgb, var(--primary-color) 85%, transparent));
    }
    .gs-sb-link.active:hover { transform: none; }
    @keyframes gsSbPulse {
        0%, 100% { box-shadow: 0 0 7px color-mix(in srgb, var(--it-c, var(--primary-color)) 60%, transparent); }
        50%      { box-shadow: 0 0 16px color-mix(in srgb, var(--it-c, var(--primary-color)) 95%, transparent); }
    }

    html.gs-sb-collapsed .gs-sidebar .gs-sb-link {
        justify-content: center;
        gap: 0;
        padding: 9px 0;
        transform: none;
    }

    /* ── Цветные 2.5D-иконки (пункты с icon_color → .gs-sb-link-c + --it-c).
       Глиф = вертикальный градиент «блик сверху → тень снизу» через
       background-clip:text; объём — drop-shadow-экструзия (text-shadow нельзя:
       при прозрачном тексте тень просвечивает сквозь глиф). Ховер/актив —
       фон и свечение фирменным цветом раздела. ─────────────────────────── */
    .gs-sb-link-c i {
        background: linear-gradient(180deg,
            color-mix(in srgb, var(--it-c) 42%, #fff) 0%,
            var(--it-c) 54%,
            color-mix(in srgb, var(--it-c) 55%, #000) 100%);
        -webkit-background-clip: text;
        background-clip: text;
        -webkit-text-fill-color: transparent;
        filter: drop-shadow(0 1px 0 color-mix(in srgb, var(--it-c) 28%, #000))
                drop-shadow(0 2px 3px rgba(0, 0, 0, 0.5));
    }
    .gs-sb-link-c:hover {
        background: linear-gradient(90deg, color-mix(in srgb, var(--it-c) 13%, transparent), transparent 78%);
    }
    .gs-sb-link-c:hover i {
        filter: drop-shadow(0 1px 0 color-mix(in srgb, var(--it-c) 28%, #000))
                drop-shadow(0 0 8px color-mix(in srgb, var(--it-c) 80%, transparent));
    }
    .gs-sb-link-c.active {
        background: linear-gradient(90deg, color-mix(in srgb, var(--it-c) 21%, transparent), color-mix(in srgb, var(--it-c) 5%, transparent) 72%, transparent);
    }
    .gs-sb-link-c.active i {
        filter: drop-shadow(0 1px 0 color-mix(in srgb, var(--it-c) 28%, #000))
                drop-shadow(0 0 9px color-mix(in srgb, var(--it-c) 88%, transparent));
    }

    /* Бейдж (приглашения в соавторы и т.п.) */
    .gs-sb-badge {
        margin-left: auto;
        flex: none;
        min-width: 21px;
        padding: 2px 7px;
        border-radius: 999px;
        text-align: center;
        font-size: 0.67rem;
        font-weight: 700;
        color: var(--text-main);
        background: color-mix(in srgb, var(--accent-color) 22%, transparent);
        border: 1px solid color-mix(in srgb, var(--accent-color) 40%, transparent);
    }
    html.gs-sb-collapsed .gs-sidebar .gs-sb-badge {
        position: absolute;
        top: 3px;
        right: 6px;
        margin: 0;
        min-width: 16px;
        padding: 1px 5px;
        font-size: 0.58rem;
    }

    /* Админ-панель — акцентный пункт вне групп (рамка вместо неон-полосы) */
    .gs-sb-link-admin {
        margin: 0 4px 0 10px;
        border: 1px solid color-mix(in srgb, var(--primary-color) 38%, var(--border-color));
        background: color-mix(in srgb, var(--primary-color) 12%, transparent);
        border-radius: 12px;
        flex-shrink: 0;
        padding-left: 11px;
    }
    .gs-sb-link-admin::before { display: none; }
    .gs-sb-link-admin i { color: var(--primary-color); }
    .gs-sb-link-admin:hover { background: color-mix(in srgb, var(--primary-color) 18%, transparent); }
    html.gs-sb-collapsed .gs-sidebar .gs-sb-link-admin { margin: 0 4px; }

    /* ── Низ сайдбара: настройки меню + кнопка сворачивания ─────────── */
    .gs-sb-footer {
        flex-shrink: 0;
        display: flex;
        flex-direction: column;
        gap: 2px;
        padding: 8px 12px max(10px, env(safe-area-inset-bottom));
        border-top: 1px solid var(--border-color);
    }
    html.gs-sb-collapsed .gs-sb-footer { padding: 8px 10px max(10px, env(safe-area-inset-bottom)); }
    .gs-sb-toggle {
        width: 100%;
        border: 0;
        background: transparent;
        font-family: inherit;
        cursor: pointer;
        text-align: left;
    }
    .gs-sb-toggle i { transition: transform 0.22s ease, color 0.18s ease; }
    html.gs-sb-collapsed .gs-sb-toggle i { transform: rotate(180deg); }

    /* Тултип свёрнутого сайдбара (элемент создаёт app-shell.js).
       ВАЖНО: дефолтные left/top + visibility:hidden обязательны — fixed-элемент
       без координат «висит» у верхнего левого угла и может отрисоваться
       призрачной пилюлей рядом с логотипом до первого показа. */
    .gs-sb-tip {
        position: fixed;
        left: -9999px;
        top: 0;
        z-index: 2000;
        padding: 7px 12px;
        border-radius: 9px;
        background: var(--card-bg);
        border: 1px solid color-mix(in srgb, var(--primary-color) 35%, var(--border-color));
        box-shadow: 0 8px 26px rgba(0, 0, 0, 0.45);
        color: var(--text-main);
        font-size: 0.8rem;
        font-weight: 600;
        white-space: nowrap;
        pointer-events: none;
        opacity: 0;
        visibility: hidden;
        transform: translateX(-5px);
        transition: opacity 0.13s ease, transform 0.13s ease, visibility 0.13s;
    }
    .gs-sb-tip.show {
        opacity: 1;
        visibility: visible;
        transform: none;
    }

    /* Скрим для планшетного overlay-разворота — на десктопе спрятан */
    .gs-sb-scrim {
        display: none;
        position: fixed;
        inset: 0;
        z-index: 1005;
        background: rgba(0, 0, 0, 0.45);
        opacity: 0;
        transition: opacity 0.2s ease;
    }

    /* ═══ ТОПБАР ═══════════════════════════════════════════════════── */
    /* Бренд и бургер — в сайдбаре/на мобильных; здесь не нужны */
    .navbar-brand { display: none !important; }
    .navbar {
        gap: 18px;
        padding: 0 22px;
        max-width: 100%;
        min-width: 0;
    }
    .navbar-user {
        margin-left: auto;
        min-width: 0;
    }

    /* ── Глобальный поиск (Ctrl+K) ───────────────────────────────────── */
    .gs-search {
        position: relative;
        flex: 0 1 520px;
        min-width: 180px;
    }
    .gs-search-icon {
        position: absolute;
        left: 13px;
        top: 50%;
        transform: translateY(-50%);
        font-size: 0.85rem;
        color: var(--text-sec);
        pointer-events: none;
        transition: color 0.15s ease;
    }
    .gs-search:focus-within .gs-search-icon { color: var(--primary-color); }
    .gs-search-input {
        width: 100%;
        height: 38px;
        padding: 0 72px 0 36px;
        border-radius: 11px;
        border: 1px solid var(--border-color);
        background: color-mix(in srgb, var(--bg-color) 55%, transparent);
        color: var(--text-main);
        font-size: 0.88rem;
        font-family: inherit;
        outline: none;
        transition: border-color 0.15s ease, background-color 0.15s ease, box-shadow 0.15s ease;
    }
    .gs-search-input::placeholder { color: var(--text-sec); opacity: 0.75; }
    .gs-search-input:focus {
        border-color: color-mix(in srgb, var(--primary-color) 55%, transparent);
        background: var(--bg-color);
        box-shadow: 0 0 0 3px color-mix(in srgb, var(--primary-color) 16%, transparent);
    }
    /* Прячем нативный крестик search-инпута (свой Esc/blur-flow) */
    .gs-search-input::-webkit-search-cancel-button { display: none; }
    .gs-search-kbd {
        position: absolute;
        right: 10px;
        top: 50%;
        transform: translateY(-50%);
        padding: 2px 7px;
        border-radius: 6px;
        font-family: inherit;
        font-size: 0.66rem;
        font-weight: 700;
        letter-spacing: 0.02em;
        color: var(--text-sec);
        background: rgba(127, 127, 127, 0.12);
        border: 1px solid var(--border-color);
        pointer-events: none;
        transition: opacity 0.15s ease;
    }
    .gs-search:focus-within .gs-search-kbd { opacity: 0; }

    /* Дропдаун результатов */
    .gs-search-dd {
        display: none;
        position: absolute;
        top: calc(100% + 8px);
        left: 0;
        width: max(100%, min(520px, 62vw));
        max-height: min(68vh, 560px);
        overflow-y: auto;
        overscroll-behavior: contain;
        padding: 8px;
        border-radius: 14px;
        border: 1px solid color-mix(in srgb, var(--primary-color) 22%, var(--border-color));
        background: var(--card-bg);
        box-shadow: 0 18px 50px rgba(0, 0, 0, 0.5);
        z-index: 1200;
        scrollbar-width: thin;
        scrollbar-color: var(--border-color) transparent;
    }
    .gs-search-dd.open { display: block; }
    .gs-dd-group-label {
        display: flex;
        align-items: center;
        gap: 7px;
        padding: 8px 10px 4px;
        font-size: 0.65rem;
        font-weight: 700;
        text-transform: uppercase;
        letter-spacing: 0.06em;
        color: var(--text-sec);
    }
    .gs-dd-group-label i { color: var(--accent-color); font-size: 0.7rem; }
    .gs-dd-item {
        display: flex;
        align-items: center;
        gap: 10px;
        padding: 8px 10px;
        border-radius: 10px;
        color: var(--text-main);
        font-size: 0.87rem;
        text-decoration: none;
        transition: background-color 0.12s ease;
    }
    .gs-dd-item:hover,
    .gs-dd-item.sel {
        background: color-mix(in srgb, var(--primary-color) 14%, transparent);
        color: var(--text-main);
    }
    .gs-dd-thumb {
        width: 30px;
        height: 30px;
        flex-shrink: 0;
        border-radius: 8px;
        object-fit: cover;
        background: rgba(127, 127, 127, 0.15);
    }
    .gs-dd-thumb-letter {
        display: flex;
        align-items: center;
        justify-content: center;
        border-radius: 50%;
        color: #fff;
        font-weight: 700;
        font-size: 0.85rem;
    }
    .gs-dd-thumb-icon {
        display: flex;
        align-items: center;
        justify-content: center;
        color: var(--text-sec);
        font-size: 0.85rem;
    }
    .gs-dd-title {
        flex: 1;
        min-width: 0;
        overflow: hidden;
        text-overflow: ellipsis;
        white-space: nowrap;
    }
    .gs-dd-sub {
        flex-shrink: 0;
        max-width: 42%;
        overflow: hidden;
        text-overflow: ellipsis;
        white-space: nowrap;
        font-size: 0.72rem;
        color: var(--text-sec);
    }
    .gs-dd-note {
        padding: 16px 12px;
        text-align: center;
        color: var(--text-sec);
        font-size: 0.84rem;
    }

    /* ── Live-тикер: пульс портала между поиском и виджетами ─────────── */
    .gs-ticker {
        position: relative;          /* якорь для поп-апа полной карточки */
        display: flex;
        align-items: center;
        gap: 10px;
        flex: 1 1 auto;
        min-width: 0;
        max-width: 560px;
    }
    .gs-ticker[hidden] { display: none; }
    /* LIVE-плашка «эфир»: стеклянный красный пилл + радар-пинг точки */
    .gs-ticker-live {
        display: inline-flex;
        align-items: center;
        gap: 7px;
        flex: none;
        padding: 4px 11px 4px 9px;
        border-radius: 999px;
        font-size: 0.6rem;
        font-weight: 800;
        letter-spacing: 0.15em;
        color: #ff7a7a;
        background: linear-gradient(180deg,
            color-mix(in srgb, #ff6b6b 22%, transparent),
            color-mix(in srgb, #ff6b6b 9%, transparent));
        border: 1px solid color-mix(in srgb, #ff6b6b 42%, transparent);
        box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.12),
                    0 2px 11px color-mix(in srgb, #ff6b6b 24%, transparent);
        text-shadow: 0 0 9px color-mix(in srgb, #ff6b6b 55%, transparent);
    }
    .gs-ticker-dot {
        position: relative;
        width: 7px;
        height: 7px;
        border-radius: 50%;
        background: #ff6b6b;
        box-shadow: 0 0 7px #ff6b6b;
    }
    /* Расходящееся кольцо-пинг (как индикатор прямого эфира) */
    .gs-ticker-dot::after {
        content: '';
        position: absolute;
        inset: 0;
        border-radius: 50%;
        background: #ff6b6b;
        animation: gsTkPing 1.8s ease-out infinite;
    }
    @keyframes gsTkPing {
        0%        { transform: scale(1);   opacity: 0.6; }
        70%, 100% { transform: scale(3);   opacity: 0; }
    }
    .gs-ticker-item {
        display: flex;
        align-items: center;
        gap: 9px;
        min-width: 0;
        padding: 6px 10px;
        border-radius: 9px;
        text-decoration: none;
        color: var(--text-main);
        transition: background-color 0.15s ease, opacity 0.19s ease, transform 0.19s ease;
    }
    .gs-ticker-item:hover {
        background: color-mix(in srgb, var(--primary-color) 10%, transparent);
        color: var(--text-main);
    }
    .gs-ticker-item i { flex: none; font-size: 0.9rem; }
    /* Окно клипа: текст едет внутри, за края не вылезает */
    .gs-ticker-text {
        min-width: 0;
        overflow: hidden;
        white-space: nowrap;
        font-size: 0.83rem;
        font-weight: 600;
    }
    /* Подвижная строка. По умолчанию влезает → многоточие как раньше */
    .gs-ticker-scroll {
        display: inline-block;
        max-width: 100%;
        overflow: hidden;
        text-overflow: ellipsis;
        white-space: nowrap;
        vertical-align: bottom;
    }
    /* Бегущая строка: JS ставит .gs-tk-run + --gs-tk-shift/--gs-tk-dur, когда
       текст не влезает. Едет вдоль окна и обратно с паузами по краям, края
       окна размываются маской (как у настоящего LED-тикера). */
    .gs-ticker-text.gs-tk-run {
        -webkit-mask-image: linear-gradient(90deg, transparent 0, #000 12px, #000 calc(100% - 16px), transparent 100%);
                mask-image: linear-gradient(90deg, transparent 0, #000 12px, #000 calc(100% - 16px), transparent 100%);
    }
    .gs-ticker-text.gs-tk-run .gs-ticker-scroll {
        max-width: none;
        overflow: visible;
        text-overflow: clip;
        will-change: transform;
        animation: gsTkScroll var(--gs-tk-dur, 9s) ease-in-out infinite;
    }
    /* Пауза бега при наведении — строку удобно читать (и под ней поп-ап) */
    .gs-ticker-item:hover .gs-ticker-text.gs-tk-run .gs-ticker-scroll {
        animation-play-state: paused;
    }
    @keyframes gsTkScroll {
        0%, 12%  { transform: translateX(0); }
        50%, 62% { transform: translateX(calc(var(--gs-tk-shift, 0px) * -1)); }
        100%     { transform: translateX(0); }
    }
    .gs-ticker-ago {
        flex: none;
        font-size: 0.72rem;
        color: var(--text-sec);
    }
    /* Смена события: уходит вверх, приходит снизу (классы ставит app-shell.js) */
    .gs-ticker-item.gs-tk-out { opacity: 0; transform: translateY(-7px); }
    .gs-ticker-item.gs-tk-in  { opacity: 0; transform: translateY(7px); transition: none; }

    /* ── Поп-ап полной карточки события: по наведению + удержанию 2с ──── */
    .gs-ticker-pop {
        position: absolute;
        top: calc(100% + 8px);
        left: 0;
        z-index: 1200;
        width: max-content;
        max-width: min(420px, 66vw);
        padding: 12px 14px;
        border-radius: 14px;
        border: 1px solid color-mix(in srgb, var(--primary-color) 24%, var(--border-color));
        background: var(--card-bg);
        box-shadow: 0 18px 50px rgba(0, 0, 0, 0.5);
        opacity: 0;
        visibility: hidden;
        transform: translateY(-6px);
        pointer-events: none;
        cursor: pointer;
        transition: opacity 0.16s ease, transform 0.16s ease, visibility 0.16s;
    }
    .gs-ticker-pop:hover {
        border-color: color-mix(in srgb, var(--primary-color) 42%, var(--border-color));
    }
    .gs-ticker-pop.open {
        opacity: 1;
        visibility: visible;
        transform: translateY(0);
        pointer-events: auto;
    }
    .gs-ticker-pop-head {
        display: flex;
        align-items: center;
        gap: 8px;
        margin-bottom: 7px;
    }
    .gs-ticker-pop-head > i { flex: none; font-size: 0.85rem; }
    .gs-ticker-pop-kind {
        font-size: 0.62rem;
        font-weight: 800;
        letter-spacing: 0.08em;
        text-transform: uppercase;
        color: var(--text-sec);
    }
    .gs-ticker-pop-ago {
        flex: none;
        margin-left: auto;
        font-size: 0.7rem;
        color: var(--text-sec);
    }
    .gs-ticker-pop-text {
        font-size: 0.9rem;
        font-weight: 600;
        line-height: 1.4;
        color: var(--text-main);
        overflow-wrap: break-word;
        word-break: break-word;
    }
    .gs-ticker-pop-hint {
        display: inline-flex;
        align-items: center;
        gap: 6px;
        margin-top: 9px;
        font-size: 0.72rem;
        font-weight: 700;
        color: var(--primary-color);
    }
    .gs-ticker-pop-hint i { font-size: 0.68rem; }

    /* ── Правый блок: плотность на ноутбуках ─────────────────────────── */
    .navbar-username { max-width: clamp(80px, 8vw, 150px); }

    @media (max-width: 1280px) {
        .navbar { padding: 0 14px; gap: 10px; }
        .navbar-user { gap: 8px; }
        .navbar-xp-widget { display: none; }
        .online-label { display: none; }
        .navbar-user .btn-text { display: none; }
        .navbar-username { max-width: 96px; }
        .gs-ticker { display: none; }
    }

    /* ═══ КАРТОЧКА ИГРОКА (правый угол топбара, ≥1025px) ═══════════════
       DOM (base.html): .navbar-player > .vip-nav-badge? + .navbar-xp-widget?
       + .navbar-username + .navbar-avatar. По умолчанию (style.css) обёртка
       display:contents — планшет/мобилка не меняются.
       Дизайн = «тихий HUD» в духе пиллов LIVE/онлайн: лёгкое стекло без
       тяжёлых рамок; ник + корона сверху, уровень и стрик лёгким текстом ниже
       (без чипов-коробок), XP-прогресс — неоновая кромка ВДОЛЬ НИЗА карточки,
       аватар справа (absolute — не раздувает высоту, рамки avatar-frame-*
       работают). Grid переставляет СУЩЕСТВУЮЩИЕ элементы, DOM/JS
       (#navbarXpFill) не трогаем. Локальные --np-*: топбар принудительно
       тёмный во всех темах, поэтому в light глобальные токены не годятся. */
    @media (min-width: 1025px) {
        .navbar-player {
            --np-bg: var(--card-bg);
            --np-line: var(--border-color);
            position: relative;
            isolation: isolate;
            display: grid;
            grid-template-areas:
                "name vip"
                "xp   xp";
            grid-template-columns: max-content max-content;
            align-items: center;
            align-content: center;
            column-gap: 7px;
            row-gap: 3px;
            min-height: 50px;
            /* Колонки max-content (НЕ minmax(0,…)/auto и БЕЗ width:fit-content):
               капсула ужимается строго по контенту (ник+корона) — без растяжки
               колонки короны (→ нет пустого зазора) и без схлопывания ника при
               нехватке места. Аватар — absolute справа, резерв в padding-right. */
            padding: 6px 50px 9px 13px;
            border-radius: 14px;
            /* Frameless HUD: без постоянной рамки/заливки — карточка не
               конкурирует с топбаром и не «зажимает» аватар в коробку.
               Мягкая стеклянная подложка проявляется только при наведении. */
            border: 1px solid transparent;
            background: color-mix(in srgb, var(--np-bg) 22%, transparent);
            box-shadow: none;
            transition: border-color 0.2s ease, background 0.2s ease, box-shadow 0.2s ease;
        }
        .navbar-player:hover {
            border-color: color-mix(in srgb, var(--primary-color) 24%, var(--np-line));
            background: linear-gradient(180deg,
                color-mix(in srgb, var(--np-bg) 42%, transparent),
                color-mix(in srgb, var(--np-bg) 72%, transparent));
            box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.06),
                        0 6px 18px rgba(0, 0, 0, 0.30);
        }
        /* Топбар тёмный и в light-теме → карточке нужна своя тёмная палитра */
        body[data-theme="light"] .navbar-player {
            --np-bg: #232733;
            --np-line: #343947;
        }
        body[data-theme="light"] .navbar-player .navbar-username { color: #e8e8e8; }

        /* Ник — верхняя строка */
        .navbar-player .navbar-username {
            grid-area: name;
            justify-self: start;
            position: relative;
            /* Свечение godlike/glow-ников (text-shadow) не срезалось overflow:hidden
               (он нужен для обрезки длинных ников): даём ореолу поле через padding,
               а negative-margin компенсирует — позиция ника и высота грид-строки не
               меняются. Внешний overflow:hidden сохраняется → длинные ники
               по-прежнему обрезаются без наезда на аватар; внутренний .nick-color
               разлочен (overflow:visible ниже), чтобы ореол дошёл до этого поля. */
            --np-nick-pad: 8px;
            padding: var(--np-nick-pad);
            margin: calc(-1 * var(--np-nick-pad));
            max-width: 150px;
            font-size: 0.95rem;
            font-weight: 800;
            letter-spacing: 0.01em;
            line-height: 1.15;
        }
        .navbar-player .navbar-username .nick-color { overflow: visible; }
        /* Декор-акцент: тонкая брендовая подложка под ником — в тон XP-полосе
           внизу карточки (единый акцентный язык). Инсеты привязаны к --np-nick-pad,
           чтобы линия шла ровно под текстом, а не под полем ореола. */
        .navbar-player .navbar-username::after {
            content: '';
            position: absolute;
            left: var(--np-nick-pad);
            right: var(--np-nick-pad);
            bottom: calc(var(--np-nick-pad) - 2px);
            height: 2px;
            border-radius: 2px;
            opacity: 0.5;
            background: linear-gradient(90deg,
                var(--gs-brand-a, var(--primary-color)),
                var(--gs-brand-b, var(--accent-color)));
        }
        /* VIP-корона — лёгкий золотой глиф у ника + мягкое золотое «дыхание»
           (декор-акцент; filter/transform — композиторские, без пикселя). */
        .navbar-player .vip-nav-badge {
            grid-area: vip;
            margin: 0;
            font-size: 0.66rem;
            line-height: 1;
            animation: npCrownGlow 2.8s ease-in-out infinite;
        }
        @keyframes npCrownGlow {
            0%, 100% { filter: drop-shadow(0 0 4px rgba(245, 166, 35, 0.45)); transform: scale(1); }
            50%      { filter: drop-shadow(0 0 8px rgba(245, 166, 35, 0.85)); transform: scale(1.1); }
        }

        /* Нижняя строка: уровень + стрик лёгким текстом, без коробок */
        .navbar-player .navbar-xp-widget {
            grid-area: xp;
            display: flex;
            padding: 0;
            border-radius: 0;
        }
        .navbar-player .navbar-xp-widget:hover { background: none; }
        .navbar-player .navbar-xp-top {
            gap: 9px;
            font-size: 0.72rem;
            font-weight: 700;
        }
        .navbar-player .navbar-xp-streak { font-size: 0.72rem; }
        .navbar-player .navbar-xp-streak i {
            display: inline-block;
            transform-origin: 50% 85%;
        }
        .navbar-player:hover .navbar-xp-streak i {
            animation: gsPlayerFlame 0.9s ease-in-out infinite;
        }

        /* XP-прогресс = неоновая кромка вдоль низа карточки, но ОБРЫВАЕТСЯ перед
           аватаром (right:54 = резерв под аватар), чтобы не заезжать под него. */
        .navbar-player .navbar-xp-bar {
            position: absolute;
            left: 13px;
            right: 54px;
            bottom: 4px;
            width: auto;
            min-width: 0;
            height: 3px;
            border-radius: 99px;
            background: color-mix(in srgb, var(--text-sec) 16%, transparent);
            overflow: hidden;
        }
        .navbar-player .navbar-xp-fill {
            border-radius: 99px;
            box-shadow: 0 0 7px color-mix(in srgb, var(--primary-color) 55%, transparent);
        }
        .navbar-player:hover .navbar-xp-fill {
            box-shadow: 0 0 10px color-mix(in srgb, var(--primary-color) 85%, transparent);
        }

        /* Аватар — absolute справа по центру (резерв в padding-right капсулы);
           неон-кольцо только без рамки. */
        .navbar-player .navbar-avatar {
            position: absolute;
            right: 8px;
            top: 50%;
            transform: translateY(-50%);
            margin: 0;
            width: 38px;
            height: 38px;
            font-size: 0.95rem;
            transition: transform 0.2s ease;
        }
        .navbar-player .navbar-avatar:not(.avatar-frame) {
            box-shadow: 0 0 0 2px color-mix(in srgb, var(--primary-color) 50%, transparent),
                        0 0 12px color-mix(in srgb, var(--primary-color) 22%, transparent);
        }
        /* Экипированные рамки в капсуле: кольцо соразмерно 38px аватару, БЕЗ
           пикселящей блюр-анимации. Именно пульсация box-shadow (divine/neon/
           plasma/…) растрировалась в пиксель и «показывала края» на мелком
           аватаре — гасим анимацию, ужимаем кольцо, а гигантский ореол заменяем
           компактным мягким свечением через --afg. «Жизнь» — только на hover
           (усиление свечения + scale аватара, композиторские свойства). */
        .navbar-player .navbar-avatar.avatar-frame::after {
            inset: -2px;
            border-width: 2px;
            animation: none !important;
            box-shadow:
                0 0 6px color-mix(in srgb, var(--afg, transparent) 78%, transparent),
                0 0 13px color-mix(in srgb, var(--afg, transparent) 38%, transparent);
        }
        .navbar-player:hover .navbar-avatar.avatar-frame::after {
            box-shadow:
                0 0 8px color-mix(in srgb, var(--afg, transparent) 92%, transparent),
                0 0 18px color-mix(in srgb, var(--afg, transparent) 48%, transparent);
        }
        /* --afg = цвет компактного свечения рамки в капсуле. Задаём только
           «премиальным» анимированным рамкам; простые/статичные рамки его не
           имеют → в капсуле показывают чистое цветное кольцо без ореола.
           Новая анимированная рамка → добавить строку (см. shop-синхронизацию). */
        .navbar-player .navbar-avatar.avatar-frame-frame-unique        { --afg: #6c5ce7; }
        .navbar-player .navbar-avatar.avatar-frame-frame-neon          { --afg: #00ff88; }
        .navbar-player .navbar-avatar.avatar-frame-frame-aurora        { --afg: #a29bfe; }
        .navbar-player .navbar-avatar.avatar-frame-frame-plasma        { --afg: #a855f7; }
        .navbar-player .navbar-avatar.avatar-frame-frame-divine        { --afg: #fbbf24; }
        .navbar-player .navbar-avatar.avatar-frame-frame-cosmic        { --afg: #6366f1; }
        .navbar-player .navbar-avatar.avatar-frame-frame-inferno       { --afg: #ef4444; }
        .navbar-player .navbar-avatar.avatar-frame-frame-legendary     { --afg: #f1c40f; }
        .navbar-player .navbar-avatar.avatar-frame-frame-supernova-vip { --afg: #ffd700; }
        .navbar-player .navbar-avatar.avatar-frame-frame-void-king-vip { --afg: #ffd700; }
        .navbar-player .navbar-avatar.avatar-frame-frame-phoenix-vip   { --afg: #ff6b35; }
        .navbar-player:hover .navbar-avatar { transform: translateY(-50%) scale(1.06); }
    }

    /* Ноутбуки 1025–1280px: XP-строка скрыта (паритет с прежним поведением),
       карточка одноэтажная — ник + корона + аватар */
    @media (min-width: 1025px) and (max-width: 1280px) {
        .navbar-player {
            min-height: 44px;
            padding: 6px 48px 6px 12px;
            /* право: 7 + 34 + 7 — резерв под absolute-аватар */
        }
        .navbar-player .navbar-xp-widget { display: none; }
        .navbar-player .navbar-username { max-width: 118px; font-size: 0.9rem; }
        .navbar-player .navbar-avatar { right: 7px; width: 34px; height: 34px; font-size: 0.85rem; }
    }

    /* ── Fixed-элементы во всю ширину (cookie-баннер, баннер поддержки,
       catfish-реклама) — начинаются правее сайдбара, чтобы не перекрывать
       его низ (кнопку «Свернуть») ────────────────────────────────────── */
    .cookie-banner,
    .support-banner,
    .ad-slot-catfish_desktop,
    .ad-slot-catfish_mobile {
        left: var(--gs-sb-w);
        transition: left 0.22s ease;
    }
    html.gs-sb-collapsed .cookie-banner,
    html.gs-sb-collapsed .support-banner,
    html.gs-sb-collapsed .ad-slot-catfish_desktop,
    html.gs-sb-collapsed .ad-slot-catfish_mobile {
        left: var(--gs-sb-wc);
    }

    /* Fullscreen-чаты (ЛС/группа/глобальный): fixed inset 0 + margin:auto —
       центрируем в области ПРАВЕЕ сайдбара, иначе он наезжает на чат
       на ширинах 1025–1300px (z-index чата ниже сайдбара) */
    .dm-chat-page { left: var(--gs-sb-w); transition: left 0.22s ease; }
    html.gs-sb-collapsed .dm-chat-page { left: var(--gs-sb-wc); }

    /* Топбар на странице чата: тело обнуляет padding-left (.dm-chat-page-body),
       поэтому sticky-навбар начинается от x=0 и уезжает ПОД фиксированный сайдбар
       (z 1010 > навбар 1000) — глобальный поиск (Ctrl K) прячется под меню.
       Сдвигаем контент топбара правее сайдбара вручную. */
    .dm-chat-page-body .navbar { padding-left: calc(var(--gs-sb-w) + 22px); }
    html.gs-sb-collapsed .dm-chat-page-body .navbar {
        padding-left: calc(var(--gs-sb-wc) + 22px);
    }

    /* Глобальный чат тянется на всю ширину контент-области (правее сайдбара):
       фон-градиент панели заливает пространство → нет чёрных «дыр» по бокам на
       широких мониторах (2K/4K). Полосы (шапка/пресенс/ввод) остаются full-bleed,
       а их контент центрируется в читаемую колонку симметричными паддингами —
       max() держит минимум 18px на узких экранах, где чат просто заполняет всё.
       Только глобальный чат (.gchat-page-body); ЛС/группы = уютная колонка 800px. */
    .gchat-page-body .dm-chat-page { max-width: none; margin: 0; }
    .gchat-page-body .dm-chat-page-header,
    .gchat-page-body .gchat-presence-bar,
    .gchat-page-body .dm-chat-page-messages,
    .gchat-page-body .dm-typing-bar,
    .gchat-page-body .dm-reply-bar,
    .gchat-page-body .dm-chat-page-input {
        padding-left: max(18px, calc((100% - 1400px) / 2));
        padding-right: max(18px, calc((100% - 1400px) / 2));
    }
    /* Панель пикера общего чата = absolute-попап над инпут-баром — правило
       вынесено из этого @media в конец файла (нужно на ВСЕХ размерах, иначе на
       мобиле панель встанет в flex-ряд с кнопками). См. #gchat-mp-panel ниже. */

    /* ── ПЛАНШЕТ / УЗКИЙ ДЕСКТОП (769–1024px): сайдбар принудительно
       свёрнут; разворот кнопкой = OVERLAY поверх контента + скрим.
       Специфичность/порядок: html.gs-sb-open идёт ПОСЛЕ правил
       html.gs-sb-collapsed → выигрывает при обоих классах сразу. ──────── */
    @media (max-width: 1024px) {
        body { padding-left: var(--gs-sb-wc); }
        html:not(.gs-sb-open) .gs-sidebar { width: var(--gs-sb-wc); }
        html:not(.gs-sb-open) .gs-sidebar .gs-sb-label { display: none; }
        html:not(.gs-sb-open) .gs-sb-group-title {
            padding: 0;
            margin: 3px auto 5px;
            width: 26px;
        }
        html:not(.gs-sb-open) .gs-sb-group-title::after {
            min-width: 26px;
            background: linear-gradient(90deg, transparent, color-mix(in srgb, var(--primary-color) 55%, transparent), transparent);
        }
        html:not(.gs-sb-open) .gs-sb-nav { padding: 12px 6px 10px; }
        html:not(.gs-sb-open) .gs-sidebar .gs-sb-link-admin { margin: 0 4px; }
        html:not(.gs-sb-open) .gs-sidebar .gs-sb-link {
            justify-content: center;
            gap: 0;
            padding: 9px 0;
        }
        html:not(.gs-sb-open) .gs-sidebar .gs-sb-badge {
            position: absolute;
            top: 3px;
            right: 6px;
            margin: 0;
            min-width: 16px;
            padding: 1px 5px;
            font-size: 0.58rem;
        }
        html:not(.gs-sb-open) .gs-sb-brand { padding: 0; justify-content: center; }
        html:not(.gs-sb-open) .gs-sb-toggle i { transform: rotate(180deg); }

        html.gs-sb-open body { padding-left: var(--gs-sb-wc); } /* overlay не двигает контент */
        html.gs-sb-open .gs-sidebar {
            width: var(--gs-sb-w);
            box-shadow: 18px 0 60px rgba(0, 0, 0, 0.45);
        }
        html.gs-sb-open .gs-sb-scrim {
            display: block;
            opacity: 1;
        }

        .cookie-banner,
        .support-banner,
        .ad-slot-catfish_desktop,
        .ad-slot-catfish_mobile,
        .dm-chat-page { left: var(--gs-sb-wc); }

        /* Сайдбар здесь всегда свёрнут (без класса gs-sb-collapsed) →
           топбар чата сдвигаем на свёрнутую ширину */
        .dm-chat-page-body .navbar { padding-left: calc(var(--gs-sb-wc) + 22px); }
    }
}

/* ── MOBILE (≤768px) + ЛАНДШАФТ ТЕЛЕФОНА (низкая высота) → бургер ───────────
   Пропускаем неуклюжую десктоп-шапку и идём в бургер-меню. Запятая = ИЛИ:
   срабатывает на узких экранах ИЛИ на телефоне в альбомном режиме. */
@media (max-width: 768px), (orientation: landscape) and (max-height: 500px) {
    /* Десктоп-каркас (сайдбар + поиск) на мобильных не участвует */
    .gs-sidebar,
    .gs-sb-scrim,
    .gs-search,
    .gs-ticker {
        display: none !important;
    }

    .navbar-menu,
    .navbar-xp-widget,
    .navbar-username,
    .vip-nav-badge,
    .mobile-nav,
    .navbar-rating-mobile,
    .navbar-support-mobile,
    .navbar-info-mobile,
    .navbar-collab-link {
        display: none !important;
    }

    body {
        padding-bottom: 0 !important;
    }
    body.burger-open {
        overflow: hidden;
    }

    .navbar {
        flex-wrap: nowrap !important;
        height: 56px !important;
        padding: 0 10px !important;
        gap: 8px !important;
        row-gap: 0 !important;
    }
    .navbar-user {
        display: flex !important;
        align-items: center;
        gap: 8px;
        flex: 0 0 auto;
        order: 3;
    }
    .navbar-primary-group {
        display: flex !important;
        align-items: center;
        gap: 8px;
        /* Профиль (колокольчик+аватар) — в правый угол, после ЛС (order:2)
           и общего чата (order:3, style.css) */
        order: 4;
    }
    .navbar-icons-group {
        display: contents !important;
    }
    .navbar-icons-group > * {
        display: none !important;
    }
    .navbar-icons-group > .dm-navbar-link {
        display: inline-flex !important;
        order: 2;
    }
    /* Общий чат (глобус) — правило живёт ЗДЕСЬ, а не в style.css (@media ≤768px):
       иначе кнопка пропадает в ландшафте телефона на ширинах 769–956px
       (iPhone 12 mini … 16 Pro Max в альбомной ориентации) */
    .navbar-icons-group > .gchat-navbar-link {
        display: inline-flex !important;
        order: 3;
        align-items: center;
        justify-content: center;
        width: 40px;
        min-width: 40px;
        height: 40px;
        padding: 0 !important;
        background: linear-gradient(135deg, color-mix(in srgb, var(--gs-brand-b, var(--accent-color)) 22%, transparent), color-mix(in srgb, var(--gs-brand-a, var(--primary-color)) 14%, transparent)) !important;
        border: 1px solid color-mix(in srgb, var(--gs-brand-b, var(--accent-color)) 46%, transparent) !important;
        border-radius: 12px !important;
        box-shadow: 0 2px 10px color-mix(in srgb, var(--gs-brand-a, var(--primary-color)) 26%, transparent) !important;
    }
    .navbar-icons-group > .gchat-navbar-link .gchat-brand-ic {
        width: 24px;
        height: 24px;
        filter: drop-shadow(0 1px 2px rgba(0, 0, 0, 0.4));
    }
    .navbar-icons-group > .gchat-navbar-link .gchat-navbar-badge {
        top: -5px;
        right: -5px;
        min-width: 18px;
        height: 18px;
    }
    .navbar .online-widget {
        display: flex !important;
    }
    .navbar-user > .btn[href*="admin"],
    .navbar-user > .btn[href*="staff"] {
        display: none !important;
    }
    .navbar-brand {
        order: 2;
        flex: 1 1 auto;
        min-width: 0;
        margin: 0;
        overflow: hidden;
        font-size: 1.15rem;
        gap: 8px;
        white-space: nowrap;
    }
    .navbar-brand .brand-text {
        display: none;
    }
    .navbar-brand .brand-text-short {
        display: inline;
        font-size: 1.08rem;
        font-weight: 800;
        overflow: hidden;
        text-overflow: ellipsis;
    }
    .navbar-avatar {
        width: 36px !important;
        height: 36px !important;
        font-size: 0.85rem !important;
        flex-shrink: 0;
    }
    .online-label {
        display: none !important;
    }
    /* Кнопки колокольчика и ЛС: единый вид с портретной версией. Дублируем
       критичное из style.css (@media ≤600px) — тот блок не покрывает ландшафт
       телефона (ширина >600px), без этого иконка прижата к краю и мельче */
    .navbar-user .notif-bell-wrap > .btn-sm,
    .navbar-user .dm-navbar-link {
        display: inline-flex !important;
        align-items: center;
        justify-content: center;
        width: 38px;
        min-width: 38px;
        height: 38px;
        padding: 0 !important;
        border-radius: 11px;
        background: linear-gradient(135deg, color-mix(in srgb, var(--primary-color) 18%, transparent), color-mix(in srgb, var(--accent-color) 12%, transparent)) !important;
        border: 1px solid color-mix(in srgb, var(--primary-color) 45%, transparent) !important;
        color: var(--primary-color) !important;
    }
    .navbar-user .notif-bell-wrap > .btn-sm i,
    .navbar-user .dm-navbar-link i {
        font-size: 1rem;
        filter: drop-shadow(0 0 4px color-mix(in srgb, var(--primary-color) 55%, transparent));
    }
    /* Бейджи непрочитанного — как в портретной версии (keyframes badgePulse
       объявлен в style.css вне media, доступен глобально) */
    .navbar-user .notif-bell-badge,
    .navbar-user .dm-navbar-badge {
        position: absolute;
        top: -5px;
        right: -5px;
        min-width: 18px;
        height: 18px;
        padding: 0 5px;
        font-size: 0.66rem;
        font-weight: 800;
        border-radius: 10px;
        background: linear-gradient(135deg, #ff5f6d, #ff7675) !important;
        color: #fff !important;
        display: flex;
        align-items: center;
        justify-content: center;
        box-shadow: 0 0 0 2px var(--card-bg), 0 0 8px rgba(255, 95, 109, 0.6);
        animation: badgePulse 1.6s ease-in-out infinite;
    }
    /* Онлайн-виджет — форма как у кнопок ЛС/уведомлений (radius 8), но в
       фирменном зелёном (онлайн-статус) и чуть ниже по вертикали */
    .navbar .online-badge {
        min-width: 38px;
        height: 33px;
        padding: 0 10px;
        gap: 5px;
        justify-content: center;
        border-radius: 8px;
        font-size: 0.8rem;
        background: linear-gradient(135deg, rgba(0, 184, 148, 0.20), rgba(0, 230, 184, 0.10));
        border: 1px solid rgba(0, 184, 148, 0.45);
        box-shadow: none;
    }
    .navbar .online-badge:hover {
        background: linear-gradient(135deg, rgba(0, 184, 148, 0.30), rgba(0, 230, 184, 0.16));
        border-color: rgba(0, 184, 148, 0.65);
        box-shadow: none;
    }
    /* Бренд: иконка портала и GS — крупнее */
    .navbar .navbar-brand { overflow: visible; }
    .navbar .navbar-brand .gs-logo { width: 30px; height: 30px; flex-shrink: 0; }
    /* Бренд — единственный сжимаемый элемент топбара (flex:1 1 auto). При
       нехватке ширины текст GS клипается ВНУТРИ своей коробки, а не
       выталкивается поверх кнопки онлайна (brand держит overflow:visible
       ради свечения лого, поэтому клип — на самом тексте) */
    .navbar .navbar-brand .gs-brand-short { flex: 0 1 auto; min-width: 0; overflow: hidden; }

    .burger-btn {
        order: 1;
        display: flex !important;
        flex-direction: column;
        justify-content: center;
        align-items: flex-start;
        gap: 4px;
        width: 40px;
        height: 40px;
        padding: 0 0 0 9px;   /* (40 - 22) / 2 — полные полоски по центру кнопки */
        border: 0;
        border-radius: 8px;
        background: transparent;
        cursor: pointer;
        flex-shrink: 0;
    }
    /* Полоски — неон-градиент бренда со свечением; средняя короче
       (на hover/тапе дорастает). Крестик: сдвиг = высота полоски + gap. */
    .burger-btn span {
        display: block;
        width: 22px;
        height: 2.5px;
        border-radius: 3px;
        background: linear-gradient(90deg,
            color-mix(in srgb, var(--gs-brand-a, var(--primary-color)) 55%, #fff) 0%,
            var(--gs-brand-a, var(--primary-color)) 55%,
            var(--gs-brand-b, var(--accent-color)) 100%);
        box-shadow: 0 0 6px color-mix(in srgb, var(--gs-brand-a, var(--primary-color)) 40%, transparent);
        transition: transform 0.3s ease, opacity 0.2s ease, width 0.25s ease;
    }
    .burger-btn span:nth-child(2) { width: 15px; }
    .burger-btn:hover span:nth-child(2),
    .burger-btn:active span:nth-child(2) { width: 22px; }
    .burger-btn:hover { background: color-mix(in srgb, var(--primary-color) 12%, transparent); }
    .burger-btn.active {
        background: color-mix(in srgb, var(--primary-color) 18%, transparent);
        box-shadow: 0 0 14px color-mix(in srgb, var(--primary-color) 45%, transparent);
    }
    .burger-btn.active span { box-shadow: 0 0 9px color-mix(in srgb, var(--gs-brand-a, var(--primary-color)) 65%, transparent); }
    .burger-btn.active span:nth-child(1) { transform: translateY(6.5px) rotate(45deg); }
    .burger-btn.active span:nth-child(2) { opacity: 0; }
    .burger-btn.active span:nth-child(3) { transform: translateY(-6.5px) rotate(-45deg); }

    /* ── Бургер-дровер — единый стиль с user-card drawer (плоская панель,
       hero-шапка с mesh-градиентом, группы-карточки). ────────────────── */
    .burger-overlay {
        display: block;
        position: fixed;
        inset: 0;
        z-index: 1500;
        /* как user-card-overlay: без backdrop-blur (тормозит на больших страницах) */
        background: rgba(0, 0, 0, 0.6);
        opacity: 0;
        visibility: hidden;
        transition: opacity 0.2s ease, visibility 0.2s ease;
    }
    .burger-overlay.active {
        opacity: 1;
        visibility: visible;
    }

    .burger-drawer {
        display: flex;
        flex-direction: column;
        position: fixed;
        top: 0;
        left: 0;
        z-index: 1600;
        width: min(86vw, 360px);
        height: 100%;
        height: 100dvh;
        background: var(--card-bg);
        border-right: 1px solid var(--border-color);
        box-shadow: 12px 0 40px rgba(0, 0, 0, 0.45);
        transform: translateX(-110%);
        transition: transform 0.24s ease-out;
        will-change: transform;
        overflow: hidden;
    }
    .burger-drawer.active {
        transform: translateX(0);
    }
    .burger-close {
        position: absolute;
        top: max(12px, env(safe-area-inset-top));
        right: 12px;
        z-index: 3;
        width: 36px;
        height: 36px;
        padding: 0;
        border: none;
        border-radius: 50%;
        background: rgba(255, 255, 255, 0.12);
        color: #fff;
        font-size: 1.05rem;
        display: flex;
        align-items: center;
        justify-content: center;
        cursor: pointer;
        transition: background 0.2s ease, transform 0.2s ease;
    }
    .burger-close:hover { background: rgba(255, 255, 255, 0.24); transform: rotate(90deg); }

    /* Шапка — mesh-градиент как .uc-hero, от края до края, без скруглений */
    .burger-header {
        position: relative;
        flex: none;
        display: flex;
        align-items: center;
        gap: 13px;
        padding: calc(max(12px, env(safe-area-inset-top)) + 10px) 56px 14px max(16px, env(safe-area-inset-left));
        background:
            radial-gradient(70% 90% at 50% 128%, color-mix(in srgb, var(--accent-color) 38%, transparent), transparent 62%),
            radial-gradient(130% 120% at 88% -20%, color-mix(in srgb, var(--accent-color) 50%, transparent), transparent 58%),
            radial-gradient(120% 130% at 0% 0%, color-mix(in srgb, var(--primary-color) 62%, transparent), transparent 55%),
            linear-gradient(160deg, color-mix(in srgb, var(--primary-color) 26%, var(--card-bg)), var(--card-bg) 80%);
        border-bottom: 1px solid var(--border-color);
    }
    /* точечная текстура — как у .uc-hero::before */
    .burger-header::before {
        content: '';
        position: absolute;
        inset: 0;
        background-image: radial-gradient(rgba(255, 255, 255, 0.10) 1px, transparent 1.4px);
        background-size: 13px 13px;
        -webkit-mask-image: linear-gradient(180deg, #000, transparent);
        mask-image: linear-gradient(180deg, #000, transparent);
        opacity: 0.6;
        pointer-events: none;
    }
    .burger-header-anon { gap: 10px; }
    .burger-avatar {
        position: relative;
        width: 54px;
        height: 54px;
        flex-shrink: 0;
        border-radius: 50%;
        border: 3px solid var(--card-bg);
        overflow: hidden;
        display: flex;
        align-items: center;
        justify-content: center;
        color: #fff;
        font-weight: 700;
        font-size: 1.15rem;
        text-decoration: none;
        background: var(--bg-color);
        box-shadow: 0 0 0 2px color-mix(in srgb, var(--accent-color) 32%, transparent), 0 6px 18px rgba(0, 0, 0, 0.4);
    }
    /* магазинные рамки рисуют своё свечение — не конфликтуем */
    .burger-avatar.avatar-frame {
        border: none;
        box-shadow: none;
    }
    .burger-avatar img {
        width: 100%;
        height: 100%;
        object-fit: cover;
        border-radius: 50%;
    }
    .burger-user-info {
        position: relative;
        flex: 1;
        min-width: 0;
    }
    .burger-username {
        display: block;
        color: var(--text-main);
        font-weight: 700;
        font-size: 1.02rem;
        text-decoration: none;
        white-space: nowrap;
        overflow: hidden;
        text-overflow: ellipsis;
    }
    .burger-xp {
        display: flex;
        align-items: center;
        gap: 8px;
        margin-top: 5px;
        font-size: 0.72rem;
        color: var(--text-sec);
        flex-wrap: wrap;
    }
    .burger-xp-level {
        display: inline-flex;
        align-items: center;
        gap: 4px;
        padding: 2px 8px;
        border-radius: 999px;
        font-weight: 700;
        line-height: 1.4;
        background: color-mix(in srgb, var(--text-main) 8%, transparent);
        border: 1px solid color-mix(in srgb, var(--text-main) 12%, transparent);
    }
    .burger-xp-streak {
        display: inline-flex;
        align-items: center;
        gap: 3px;
        font-weight: 700;
        color: #ff7043;
    }
    .burger-xp-bar {
        width: 100%;
        height: 6px;
        margin-top: 7px;
        border-radius: 4px;
        background: rgba(127, 127, 127, 0.22);
        overflow: hidden;
    }
    .burger-xp-fill {
        height: 100%;
        border-radius: 4px;
        background: linear-gradient(90deg, var(--primary-color), var(--accent-color));
        transition: width 0.6s ease;
    }

    /* Навигация — скроллится отдельно, шапка остаётся на месте */
    .burger-nav {
        flex: 1;
        min-height: 0;
        display: flex;
        flex-direction: column;
        gap: 4px;
        padding: 12px max(12px, env(safe-area-inset-left));
        padding-right: 12px;
        padding-bottom: max(18px, env(safe-area-inset-bottom));
        overflow-y: auto;
        -webkit-overflow-scrolling: touch;
        overscroll-behavior: contain;
        scrollbar-width: thin;
        scrollbar-color: var(--border-color) transparent;
    }
    .burger-nav::-webkit-scrollbar { width: 4px; }
    .burger-nav::-webkit-scrollbar-track { background: transparent; }
    .burger-nav::-webkit-scrollbar-thumb { background: var(--border-color); border-radius: 4px; }

    /* Группы — карточки как .uc-sp-block в дровере профиля */
    .burger-group {
        display: flex;
        flex-direction: column;
        gap: 2px;
        padding: 6px;
        margin-bottom: 8px;
        border-radius: 12px;
        border: 1px solid var(--border-color);
        background: rgba(127, 127, 127, 0.05);
    }
    .burger-group-title {
        display: flex;
        align-items: center;
        gap: 7px;
        padding: 5px 8px 7px;
        font-size: 0.68rem;
        font-weight: 700;
        text-transform: uppercase;
        letter-spacing: 0.05em;
        color: var(--text-sec);
    }
    .burger-group-title i {
        color: var(--accent-color);
        font-size: 0.72rem;
    }

    /* Пункты — как .uc-quick-link */
    .burger-link {
        display: flex;
        align-items: center;
        gap: 12px;
        min-height: 44px;
        padding: 10px 12px;
        border-radius: 10px;
        color: var(--text-main);
        font-size: 0.9rem;
        text-decoration: none;
        transition: background 0.15s ease;
    }
    .burger-link i {
        width: 20px;
        flex-shrink: 0;
        text-align: center;
        font-size: 0.95rem;
        color: var(--text-sec);
        transition: color 0.15s ease;
    }
    .burger-link span {
        flex: 1;
        min-width: 0;
        overflow: hidden;
        text-overflow: ellipsis;
        white-space: nowrap;
    }
    .burger-link:hover { background: rgba(127, 127, 127, 0.12); }
    .burger-link:active { background: rgba(127, 127, 127, 0.18); }
    .burger-link.active {
        background: color-mix(in srgb, var(--accent-color) 15%, transparent);
        font-weight: 600;
    }
    .burger-link.active i { color: var(--accent-color); }

    /* Фирменные цвета разделов (--it-c из menu_structure) — как в сайдбаре */
    .burger-link-c i,
    .burger-link-c.active i { color: var(--it-c); }
    .burger-link-c.active { background: color-mix(in srgb, var(--it-c) 14%, transparent); }

    /* Админ — акцентная строка вне групп */
    .burger-link-admin {
        border: 1px solid color-mix(in srgb, var(--primary-color) 38%, var(--border-color));
        background: color-mix(in srgb, var(--primary-color) 12%, transparent);
        border-radius: 12px;
        font-weight: 600;
        margin-bottom: 8px;
    }
    .burger-link-admin i { color: var(--primary-color); }
    .burger-link-admin:hover { background: color-mix(in srgb, var(--primary-color) 18%, transparent); }

    .burger-link-ideas i { color: #fbbf24; }

    .burger-link-logout,
    .burger-link-logout i { color: var(--danger-color); }
    .burger-link-logout:hover { background: color-mix(in srgb, var(--danger-color) 10%, transparent); }

    /* Бейдж — как .uc-sec-badge */
    .burger-badge {
        margin-left: auto;
        flex: none;
        min-width: 22px;
        padding: 2px 7px;
        border-radius: 999px;
        text-align: center;
        font-size: 0.68rem;
        font-weight: 700;
        color: var(--text-main);
        background: color-mix(in srgb, var(--accent-color) 22%, transparent);
        border: 1px solid color-mix(in srgb, var(--accent-color) 40%, transparent);
    }
    .burger-divider {
        height: 1px;
        margin: 6px 4px;
        border: 0;
        background: var(--border-color);
    }

    /* Самые узкие экраны — компактнее */
    @media (max-width: 360px) {
        .burger-drawer { width: 92vw; }
        .burger-avatar { width: 48px; height: 48px; font-size: 1rem; }
        .burger-header { gap: 11px; }
        .burger-username { font-size: 0.96rem; }
        .burger-nav { padding-left: max(8px, env(safe-area-inset-left)); padding-right: 8px; }
    }
}

/* ── ЛАНДШАФТ ТЕЛЕФОНА: компактнее по высоте + safe-area под вырез ───────── */
@media (orientation: landscape) and (max-height: 500px) {
    body { padding-left: 0 !important; }
    .navbar {
        height: 48px !important;
        padding-left: max(10px, env(safe-area-inset-left)) !important;
        padding-right: max(10px, env(safe-area-inset-right)) !important;
    }
    /* Меню — в бургере; нижний таб-бар не дублируем (бургер даёт полное меню) */
    .navbar-menu,
    .mobile-nav { display: none !important; }
    /* Шапка дровера компактнее по высоте */
    .burger-header {
        padding-top: calc(max(8px, env(safe-area-inset-top)) + 6px);
        padding-bottom: 10px;
    }
    .burger-avatar { width: 44px; height: 44px; }
}

/* Пламя стрика в карточке игрока (hover капсулы, десктоп ≥1025px) */
@keyframes gsPlayerFlame {
    0%, 100% { transform: scale(1) rotate(-2deg); }
    35%      { transform: scale(1.18) rotate(4deg); }
    65%      { transform: scale(0.94) rotate(-4deg); }
}

@media (prefers-reduced-motion: reduce) {
    .burger-drawer, .burger-overlay, .burger-close, .burger-xp-fill,
    .gs-sidebar, .gs-sb-scrim, .gs-sb-tip, .gs-sb-toggle i, body,
    .gs-sb-link, .gs-ticker-item, .gs-ticker-pop,
    .navbar-player, .navbar-player .navbar-avatar { transition: none; }
    .gs-sb-link.active::before, .gs-ticker-dot::after,
    .navbar-player .vip-nav-badge { animation: none; }
    .navbar-player:hover .navbar-xp-streak i { animation: none; }
    .navbar-player:hover .navbar-avatar { transform: translateY(-50%); }
    /* Бегущую строку в JS не включаем (остаётся многоточие); на всякий случай
       глушим и здесь, если .gs-tk-run уже стоял */
    .gs-ticker-text.gs-tk-run .gs-ticker-scroll { animation: none; }
}

/* ── Узкие мобильные (≤374px): компактный бренд и виджеты топбара,
   чтобы GS не наезжал на кнопку онлайна ───────────────────────────── */
@media (max-width: 374px) {
    .navbar { gap: 6px !important; }
    .navbar .navbar-brand { gap: 6px; }
    .navbar .navbar-brand .gs-logo { width: 26px; height: 26px; }
    .navbar .navbar-brand .gs-brand-short { font-size: 1.2rem; }
    .navbar .online-badge { min-width: 34px; height: 30px; padding: 0 7px; gap: 4px; }
    .navbar-user .btn-sm,
    .navbar-user .dm-navbar-link,
    .navbar-icons-group > .dm-navbar-link {
        width: 34px;
        min-width: 34px;
        height: 34px;
    }
    .navbar-avatar { width: 34px !important; height: 34px !important; }
}

/* Плавный выезд панели пикера общего чата (см. .gchat-page-body .chat-picker-panel) */
@keyframes gchatPickerUp {
    from { opacity: 0; transform: translateY(16px); }
    to   { opacity: 1; transform: translateY(0); }
}
@media (prefers-reduced-motion: reduce) {
    .gchat-page-body .chat-picker-panel { animation: none; }
}

/* Панель пикера общего чата — absolute-попап над инпут-баром (панель лежит
   ВНУТРИ #gchat-input-bar, position:relative). Не в потоке → не сжимает
   сообщения (плавно, без reflow-рывка). Desktop: 420px над кнопками (выровнено
   с колонкой контента); мобила: на всю ширину. id-специфичность надёжно. */
.gchat-page-body #gchat-input-bar { position: relative; z-index: 30; }
.gchat-page-body #gchat-mp-panel {
    position: absolute;
    bottom: calc(100% + 6px);
    left: max(18px, calc((100% - 1400px) / 2));
    max-width: 420px;
    border-radius: 14px;
    box-shadow: 0 -12px 36px rgba(0, 0, 0, 0.55);
    animation: gchatPickerUp 0.2s cubic-bezier(0.22, 1, 0.36, 1);
}
@media (max-width: 768px) {
    .gchat-page-body #gchat-mp-panel {
        left: 0; right: 0; max-width: 100%;
        border-radius: 14px 14px 0 0;
    }
}
@media (prefers-reduced-motion: reduce) {
    .gchat-page-body #gchat-mp-panel { animation: none; }
}
