/* ============================================================================
   Раздел «Дуэли» — своя визуальная система.

   Отдельный файл, а не куски в styles.css: здесь живут длинные таблицы —
   рейтинги, ленты матчей, разбивки по режимам, — со своей сеткой колонок и
   правилами схлопывания на узких экранах. Остальному сайту это не нужно.

   Палитра общая и описана в styles.css; ниже только псевдонимы. Все классы с
   префиксом .d-, чтобы гарантированно не пересечься с остальным сайтом.
   ========================================================================= */

/* Палитра описана один раз — в styles.css. Здесь только псевдонимы под
   короткие имена раздела, чтобы у сайта был один источник правды: поменял
   --panel в styles.css — поменялось и тут. */
:root {
    --d-panel: var(--panel);
    --d-panel-2: var(--panel-2);
    --d-panel-3: var(--panel-3);
    --d-row-alt: rgba(36, 29, 39, 0.55);
    --d-line: var(--line);
    --d-text: var(--text-primary);
    --d-dim: var(--text-secondary);
    --d-mute: var(--text-mute);
    --d-accent: var(--primary-color);
    --d-accent-hover: var(--hover-color);
    --d-good: var(--success-color);
    --d-bad: var(--danger-color);
    --d-warn: var(--warning-color);
    --d-info: var(--info-color);

    /* Медали: свои три цвета, больше нигде на сайте не нужны. */
    --d-gold: var(--gold);
    --d-silver: var(--silver);
    --d-bronze: var(--bronze);
}

/* Outfit подключён глобально в styles.css; здесь только межстрочный ритм,
   он в разделе плотнее, чем на остальном сайте. */
#duels,
.d-card {
    line-height: 1.55;
}

.d-mc {
    font-family: 'Minecraft', 'Courier New', monospace;
    letter-spacing: 0.5px;
    line-height: 1.3;
}

.d-num {
    font-variant-numeric: tabular-nums;
}

/* --- Карточка ------------------------------------------------------------ */

/* Ровно та же карточка, что .dash-card на остальном сайте: блок дуэлей на
   главной стоит в одном ряду с соседями и не должен от них отличаться. */
.d-card {
    background: var(--bg-card);
    border-radius: var(--radius-card);
    border: 1px solid var(--line);
    box-shadow: var(--shadow-card);
    padding: 1.4rem 1.6rem;
    color: var(--d-text);
}

.d-card+.d-card {
    margin-top: 16px;
}

.d-card-head {
    display: flex;
    justify-content: space-between;
    align-items: center;
    gap: 16px;
    margin-bottom: 16px;
    flex-wrap: wrap;
}

.d-card-head h3 {
    margin: 0;
    font-size: 17px;
    font-weight: 600;
    color: var(--d-text);
    text-transform: none;
    letter-spacing: 0;
}

.d-card-note {
    margin: 14px 0 0 0;
    font-size: 12.5px;
    color: var(--d-mute);
    line-height: 1.55;
}

.d-timer {
    font-size: 12px;
    color: var(--d-mute);
    font-variant-numeric: tabular-nums;
}

/* --- Чипы фильтров ------------------------------------------------------- */

.d-pills {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 8px;
}

.d-pills+.d-pills {
    margin-top: 12px;
    padding-top: 12px;
    border-top: 1px solid var(--d-line);
}

/* Не флексбокс намеренно. При display:inline-flex с align-items:baseline
   флексбокс выравнивает базовые линии элементов между собой, но саму группу
   ставит к ВЕРХУ контейнера: в капсуле высотой 34px строчный бокс в 20px
   прижимался к верхнему краю, и текст сидел выше середины примерно на 7px.
   Обычный inline-block решает обе задачи разом: название и счётчик — inline-
   содержимое на одной базовой линии, а по вертикали их центрируют одинаковые
   отступы. Высота — 18 + 8 + 8 = 34px, как было. */
.d-pill {
    display: inline-block;
    padding: 8px 16px;
    border: 0;
    border-radius: 999px;
    font: inherit;
    font-size: 13px;
    line-height: 18px;
    font-weight: 500;
    color: var(--d-dim);
    background: var(--d-panel-2);
    cursor: pointer;
    white-space: nowrap;
    transition: background 0.15s, color 0.15s;
}

.d-pill:hover {
    background: var(--d-panel-3);
    color: var(--d-text);
}

.d-pill.on {
    background: var(--d-accent);
    color: #ffffff;
    font-weight: 700;
}

/* Отступ от названия задаётся здесь: пробела в разметке больше нет. */
.d-pill .d-n {
    margin-left: 6px;
    font-size: 10.5px;
    opacity: 0.7;
    font-variant-numeric: tabular-nums;
}

/* --- Таблица лидеров ----------------------------------------------------- */

/* Одна сетка на шапку и строки: колонки обязаны совпадать. */
.d-lb-head,
.d-lb-row {
    display: grid;
    grid-template-columns: 48px minmax(0, 1fr) 92px 92px 112px 88px 80px;
    gap: 12px;
    align-items: center;
}

.d-lb-head {
    padding: 0 16px 10px 16px;
    font-size: 11px;
    font-weight: 600;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: var(--d-mute);
}

.d-lb-head button {
    background: none;
    border: 0;
    padding: 0;
    font: inherit;
    color: inherit;
    text-align: left;
    cursor: pointer;
}

.d-lb-head button:hover {
    color: var(--d-text);
}

.d-lb-head .on {
    color: var(--d-accent);
}

/* Строки идут одним блоком без зазоров — так длинный список читается
   как таблица, а не как россыпь плашек. */
.d-rows {
    display: flex;
    flex-direction: column;
    border-radius: 10px;
    overflow: hidden;
}

.d-lb-row {
    padding: 10px 16px;
    background: var(--d-panel-2);
}

.d-lb-row:nth-child(even) {
    background: var(--d-row-alt);
}

.d-lb-row:hover {
    background: var(--d-panel-3);
}

.d-lb-row .d-pos {
    font-size: 15px;
    font-weight: 700;
    color: var(--d-mute);
    font-variant-numeric: tabular-nums;
}

.d-lb-row .d-pos.g1 { color: var(--d-gold); }
.d-lb-row .d-pos.g2 { color: var(--d-silver); }
.d-lb-row .d-pos.g3 { color: var(--d-bronze); }

.d-nick {
    font-family: 'Minecraft', 'Courier New', monospace;
    letter-spacing: 0.5px;
    line-height: 1.3;
    font-size: 15px;
    color: var(--d-text);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    cursor: pointer;
}

.d-nick:hover {
    color: var(--d-accent);
}

.d-cell {
    font-size: 14px;
    color: var(--d-dim);
    font-variant-numeric: tabular-nums;
}

/* Колонка, по которой сейчас сортируем, — единственная акцентная. */
.d-cell.lead {
    font-size: 15px;
    font-weight: 700;
    color: var(--d-accent);
}

.d-w { color: var(--d-good); }
.d-l { color: var(--d-bad); }

/* Своя строка: отдельно под таблицей, поэтому со скруглением. */
.d-me {
    margin-top: 14px;
    padding-top: 14px;
    border-top: 1px solid var(--d-line);
}

.d-me .d-lb-row {
    border-radius: 12px;
    background: rgba(255, 0, 60, 0.13);
    box-shadow: inset 0 0 0 1px rgba(255, 0, 60, 0.32);
}

.d-me-tag {
    font-family: 'Outfit', sans-serif;
    font-size: 11px;
    letter-spacing: 0.06em;
    text-transform: uppercase;
    color: var(--d-mute);
}

/* --- Лента матчей -------------------------------------------------------- */

.d-match-row {
    display: grid;
    grid-template-columns: 150px minmax(0, 1fr) 96px 76px 116px;
    gap: 14px;
    align-items: center;
    padding: 12px 16px;
    background: var(--d-panel-2);
}

.d-match-row:nth-child(even) {
    background: var(--d-row-alt);
}

.d-match-row:hover {
    background: var(--d-panel-3);
}

/* Аннулированный матч не прячем: молча исчезнувший матч читается как потеря
   данных, а не как решение модерации. */
.d-match-row.voided {
    opacity: 0.55;
}

.d-match-row.voided .d-vs {
    text-decoration: line-through;
}

.d-tag {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    height: 24px;
    padding: 0 10px;
    border-radius: 6px;
    font-size: 11px;
    font-weight: 600;
    letter-spacing: 0.04em;
    background: var(--d-panel-3);
    color: var(--d-dim);
    white-space: nowrap;
}

.d-tag.warn {
    background: rgba(224, 164, 74, 0.16);
    color: var(--d-warn);
}

.d-tag.good {
    background: rgba(39, 174, 96, 0.16);
    color: var(--d-good);
}

.d-tag.bad {
    background: rgba(255, 51, 85, 0.14);
    color: var(--d-bad);
}

.d-vs {
    font-family: 'Minecraft', 'Courier New', monospace;
    letter-spacing: 0.5px;
    line-height: 1.3;
    font-size: 14px;
    color: var(--d-dim);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.d-right {
    text-align: right;
}

/* --- Плитки сводки ------------------------------------------------------- */

.d-tiles {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
    gap: 16px;
}

.d-tile {
    background: var(--d-panel);
    border-radius: 16px;
    padding: 16px 20px;
    box-shadow: 0 6px 20px rgba(0, 0, 0, 0.3);
}

.d-tile-label {
    font-size: 12px;
    color: var(--d-mute);
}

.d-tile-value {
    font-size: 30px;
    font-weight: 800;
    line-height: 1.2;
    color: var(--d-text);
    font-variant-numeric: tabular-nums;
}

.d-tile-sub {
    font-size: 12px;
    color: var(--d-mute);
    font-variant-numeric: tabular-nums;
}

/* --- Профиль игрока ------------------------------------------------------ */

.d-profile-head {
    display: flex;
    align-items: center;
    gap: 22px;
    flex-wrap: wrap;
}

.d-avatar {
    width: 84px;
    height: 84px;
    flex-shrink: 0;
    border-radius: 12px;
    background: var(--d-panel-3);
    object-fit: cover;
    image-rendering: pixelated;
}

/* Лицо вырезается из скина 64×64 двумя слоями: сверху шляпа (клетка в точке
   40,8), под ней лицо (8,8). Масштаб 84/8 = 10.5, значит текстуру растягиваем
   до 64 × 10.5 = 672px. Тот же приём, что у .staff-head, только крупнее. */
.d-avatar.has-skin {
    background-image: var(--skin), var(--skin);
    background-repeat: no-repeat;
    background-size: 672px auto;
    background-position: -420px -84px, -84px -84px;
}

.d-profile-name {
    font-size: 32px;
}

.d-profile-rank {
    font-size: 34px;
    font-weight: 800;
    color: var(--d-accent);
    line-height: 1.15;
    font-variant-numeric: tabular-nums;
}

/* Плашка про откат: у игрока цифры изменились задним числом, и он должен
   понимать почему. */
.d-banner {
    display: flex;
    align-items: center;
    gap: 16px;
    border-left: 3px solid var(--d-warn);
}

.d-banner-text {
    flex-grow: 1;
    font-size: 13.5px;
    color: var(--d-dim);
    line-height: 1.6;
}

.d-banner-text strong {
    color: var(--d-text);
}

.d-bars {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(190px, 1fr));
    gap: 16px;
}

.d-bar-box {
    background: var(--d-panel-2);
    border-radius: 12px;
    padding: 14px 16px;
}

.d-bar {
    height: 4px;
    margin-top: 10px;
    background: rgba(255, 255, 255, 0.07);
    border-radius: 2px;
    overflow: hidden;
}

.d-bar span {
    display: block;
    height: 100%;
    background: var(--d-accent);
}

.d-mode-head,
.d-mode-row {
    display: grid;
    grid-template-columns: minmax(0, 1fr) 78px 118px 88px 74px 100px 82px;
    gap: 12px;
    align-items: center;
}

.d-mode-head {
    padding: 0 16px 10px 16px;
    font-size: 11px;
    font-weight: 600;
    letter-spacing: 0.07em;
    text-transform: uppercase;
    color: var(--d-mute);
}

.d-mode-row {
    padding: 10px 16px;
    background: var(--d-panel-2);
    font-variant-numeric: tabular-nums;
}

.d-mode-row:nth-child(even) {
    background: var(--d-row-alt);
}

.d-mode-row:hover {
    background: var(--d-panel-3);
}

.d-hist-row {
    display: grid;
    grid-template-columns: 104px 150px minmax(0, 1fr) 84px 74px 116px;
    gap: 14px;
    align-items: center;
    padding: 11px 16px;
    background: var(--d-panel-2);
}

.d-hist-row:nth-child(even) {
    background: var(--d-row-alt);
}

.d-hist-row:hover {
    background: var(--d-panel-3);
}

.d-hist-row.voided {
    opacity: 0.55;
}

.d-hist-row.voided .d-vs {
    text-decoration: line-through;
}

/* --- Служебные состояния ------------------------------------------------- */

.d-empty,
.d-loading {
    padding: 28px 0;
    text-align: center;
    font-size: 14px;
    color: var(--d-mute);
}

.d-error {
    padding: 20px 0;
    text-align: center;
    font-size: 14px;
    color: var(--d-bad);
}

.d-back {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    margin-bottom: 14px;
    font-size: 13px;
    color: var(--d-accent);
    cursor: pointer;
}

.d-more {
    margin-top: 14px;
    text-align: center;
}

/* --- Узкие экраны -------------------------------------------------------- */

/* Колонки схлопываются по одной: сначала уходят вторичные (матчи, K/D),
   последним остаётся «место — ник — метрика». */
@media (max-width: 1100px) {

    .d-lb-head,
    .d-lb-row {
        grid-template-columns: 44px minmax(0, 1fr) 88px 104px 84px;
    }

    .d-lb-head .hide-md,
    .d-lb-row .hide-md {
        display: none;
    }

    .d-mode-head,
    .d-mode-row {
        grid-template-columns: minmax(0, 1fr) 70px 110px 80px 70px;
    }

    .d-mode-head .hide-md,
    .d-mode-row .hide-md {
        display: none;
    }

    .d-hist-row {
        grid-template-columns: 96px minmax(0, 1fr) 76px 104px;
    }

    .d-hist-row .hide-md {
        display: none;
    }

    .d-match-row {
        grid-template-columns: 132px minmax(0, 1fr) 76px 110px;
    }

    .d-match-row .hide-md {
        display: none;
    }
}

@media (max-width: 720px) {
    .d-card {
        padding: 18px 16px;
        border-radius: 14px;
    }

    .d-lb-head {
        display: none;
    }

    .d-lb-row {
        grid-template-columns: 34px minmax(0, 1fr) 78px;
        min-height: 48px;
        padding: 6px 12px;
    }

    .d-lb-row .hide-sm {
        display: none;
    }

    /* Вместо исчезнувших колонок — вторая строка под ником. */
    .d-sub {
        display: block;
        font-family: 'Outfit', sans-serif;
        letter-spacing: 0;
        font-size: 11.5px;
        color: var(--d-mute);
        line-height: 1.25;
    }

    .d-mode-head {
        display: none;
    }

    .d-mode-row {
        grid-template-columns: minmax(0, 1fr) 64px 96px;
    }

    .d-mode-row .hide-sm {
        display: none;
    }

    /* Последняя колонка — по содержимому: в 72px «35 мин назад» ломалось
       на две строки. Время в подписи под ником здесь не дублируется, там
       остаётся только режим. */
    .d-hist-row {
        grid-template-columns: 88px minmax(0, 1fr) auto;
    }

    .d-hist-row .d-right {
        white-space: nowrap;
    }

    .d-hist-row .hide-sm {
        display: none;
    }

    /* Колонок ровно две: от пяти ячеек здесь остаются ник и метка реплея —
       режим и счёт скрыты, длительность тоже, а режим со временем всё равно
       повторён подписью под ником. Стояло три, и лишняя колонка съедала
       ник: «DrierDrope… ▸ …», а метка реплея висела в пустоте посередине.
       (Та же ловушка, что описана у .d-home-row: скрытая ячейка выпадает
       из сетки целиком, и колонку под неё держать нельзя.) */
    .d-match-row {
        grid-template-columns: minmax(0, 1fr) auto;
    }

    .d-match-row .hide-sm {
        display: none;
    }

    /* Тач-цель 44px набирается отступами: min-height при inline-block не
       центрует содержимое, а только растягивает капсулу вниз. */
    .d-pill {
        padding: 13px 16px;
    }

    .d-profile-name {
        font-size: 26px;
    }

    .d-tile-value {
        font-size: 26px;
    }
}

/* --- Блок на главной ------------------------------------------------------ */

/* Карточка на главной уже страницы раздела: колонок меньше, подпись со
   вспомогательными числами прижата вправо перед значением. */
.d-home-row {
    grid-template-columns: 40px minmax(0, 1fr) auto 76px;
}

/* На десктопе подпись под ником не нужна — там есть колонки. */
@media (min-width: 721px) {

    .d-sub,
    .d-only-sm {
        display: none;
    }
}

/* На телефоне от пяти числовых колонок остаётся одна — та, по которой сейчас
   сортируют. Остальное уходит в подпись под ником. */
@media (max-width: 720px) {
    .d-only-sm {
        display: block;
    }
}

/* --- Телефон: компактность --------------------------------------------- */

@media (max-width: 720px) {

    /* Скрытая ячейка выпадает из сетки целиком, поэтому на телефоне у строки
       ровно три колонки — иначе значение вставало бы в третью, а четвёртая
       оставалась пустой, и число не доезжало до правого края. */
    .d-home-row {
        grid-template-columns: 34px minmax(0, 1fr) 76px;
    }

    /* Чипы режимов уезжают лентой вбок. Развёрнутые в пять рядов, они
       занимали пол-экрана раньше первой строки рейтинга. */
    .d-pills {
        flex-wrap: nowrap;
        overflow-x: auto;
        scrollbar-width: none;
        -webkit-overflow-scrolling: touch;
        margin-left: -16px;
        margin-right: -16px;
        padding-left: 16px;
        padding-right: 16px;
    }

    .d-pills::-webkit-scrollbar {
        display: none;
    }

    /* Десять строк подряд на телефоне — это пол-экрана скролла ради карточки,
       которая всего лишь ведёт в раздел. Остальное открывается по «Весь
       рейтинг». В самом разделе список остаётся полным: там он и нужен. */
    #duels-home-card .d-rows .d-lb-row:nth-child(n+6) {
        display: none;
    }
}
