/* Frontline — турнирная таблица -------------------------------------------
   Отдельный файл по той же причине, что и player-missions.css: player.css уже
   большой, а рейтинг — самостоятельный экран, который будет меняться чаще
   инвентаря.

   Задача экрана ровно одна: сделать первое место видимой целью. Поэтому здесь
   три уровня громкости, и они не смешиваются.

     ТРОН     — первое место. Единственный объект на экране с движением по
                кругу, короной и золотом. Больше ни у чего этого нет, иначе
                топ-1 перестаёт быть топ-1.
     ПОДИУМ   — второе и третье. Металл есть, свечения нет, ростом ниже.
     ТАБЛИЦА  — все остальные. Ровные строки, ноль украшений, и на их фоне
                аномалия читается как сбой в сетке, а не как ещё одна плашка.

   Аномалия — это выброс в данных (см. ANOMALIES в player-rating.js), и
   нарисована она как выброс: строка получает цветную ауру своего типа и один
   проход света поперёк. Их на экране единицы — если раскрасить половину
   таблицы, пропадёт и смысл, и эффект.

   Грузится после player.css: все токены (--pl-ember, --pl-lift, --pl-glow,
   --reset-*) уже объявлены там, здесь не изобретается ни одного нового цвета
   сверх золота/серебра/бронзы, которых в палитре сайта не было.
   ========================================================================== */

.pl-rating-view {
  /* Металл подиума. Три пары «светлый край / тело», чтобы медаль читалась как
     литой объект, а не как заливка одним цветом. */
  --rt-gold-hi: #ffeeb0;
  --rt-gold: #ffc32f;
  --rt-gold-deep: #c97b00;
  --rt-silver-hi: #ffffff;
  --rt-silver: #cfd6e2;
  --rt-silver-deep: #8b94a5;
  --rt-bronze-hi: #ffd6a8;
  --rt-bronze: #d99055;
  --rt-bronze-deep: #96551f;

  /* Ширина колонок доски объявлена один раз и переопределяется в медиазапросах
     — так шапка и строки физически не могут разъехаться. Цифровые колонки
     обрезаны до ширины своего самого длинного значения: доска живёт в колонке
     кабинета шириной около 1070px, и каждый лишний rem справа съедается у
     имени, из-за чего ники начинали переноситься посреди слова. */
  --rt-cols: 4rem minmax(0, 1fr) 5.6rem 5rem 4.4rem 4.2rem 4.8rem 6rem;

  max-width: 108rem;
  margin-inline: auto;
}

.pl-rt {
  display: grid;
  gap: 1.5rem;
}

/* ===== Шапка сезона =======================================================
   Две колонки и ничего больше: слева сезон, справа одна карточка «где ты
   стоишь». Раньше колонок было три, и третья — «отрыв лидера» — на доске
   команд оставалась одна: у игрока нет строки в командной таблице, средний
   блок не рисовался, и «отрыв» растягивался в пустой прямоугольник с цифрой
   по центру. Ярусы внутри одной карточки такого состояния иметь не могут:
   нижний всегда стоит на верхнем, чем бы верхний ни был.
   ========================================================================== */

.pl-rt-season {
  position: relative;
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(17rem, 22rem);
  gap: 1.25rem;
  align-items: start;
  overflow: hidden;
  padding: 1.5rem;
  border: var(--pl-border);
  border-radius: var(--pl-radius);
  background: var(--reset-panel-raised);
  background-image: var(--pl-hatch);
  box-shadow: var(--pl-lift);
}

/* Единственный источник света на панели — в левом верхнем углу, как у
   баннера заданий. Пятно, а не градиент во всю ширину: градиент делает
   поверхность плоской, пятно оставляет её объёмной. */
.pl-rt-season__glow {
  position: absolute;
  top: -14rem;
  left: -8rem;
  width: 34rem;
  height: 26rem;
  background: radial-gradient(closest-side,
    color-mix(in srgb, var(--pl-ember) 42%, transparent), transparent 72%);
  pointer-events: none;
}

.pl-rt-season__main { position: relative; }

.pl-rt-season__kicker {
  display: inline-flex;
  align-items: center;
  gap: .5rem;
  margin: 0 0 .6rem;
  color: var(--reset-ink-coral);
}

/* Счётчик, а не предложение. «До конца сезона 26 дней» одной строкой ломалось
   в узкой колонке на три обрубка, причём заголовок здесь ещё и скошен — три
   скошенные строки читаются как обломки. Цифра вынесена в отдельный кегль и
   ломаться не может; слова рядом занимают ровно столько строк, сколько
   осталось места. */
.pl-rt-season__count {
  display: flex;
  align-items: center;
  gap: .7rem;
  margin: 0;
}

.pl-rt-season__count b {
  flex: 0 0 auto;
  font-size: var(--fs-2xl);
  font-weight: 900;
  line-height: .85;
  color: var(--reset-ink-coral);
}

.pl-rt-season__count span {
  max-width: 12ch;
  font-family: var(--heading-font-family);
  font-size: var(--fs-md);
  font-weight: 900;
  line-height: 1.05;
  text-transform: uppercase;
}

.pl-rt-season__lede {
  max-width: 52ch;
  margin: .8rem 0 1.1rem;
  color: var(--reset-muted);
  font-size: var(--fs-sm);
}

.pl-rt-season__bar {
  height: .7rem;
  border: 2px solid var(--reset-line-strong);
  border-radius: 999px;
  background: color-mix(in srgb, var(--reset-cream) 8%, transparent);
}

.pl-rt-season__bar b {
  display: block;
  width: var(--fill);
  height: 100%;
  border-radius: 999px;
  background: var(--pl-ember-ramp);
  box-shadow: var(--pl-glow-soft);
}

/* Полоса без подписей — просто оранжевая черта. Три метки под ней стоят
   дёшево и превращают её в шкалу. */
.pl-rt-season__scale {
  display: flex;
  justify-content: space-between;
  gap: .5rem;
  margin: .4rem 0 0;
  color: var(--reset-muted);
  font-family: "JetBrains Mono", monospace;
  font-size: var(--fs-2xs);
  letter-spacing: .08em;
  text-transform: uppercase;
}

.pl-rt-season__scale span:nth-child(2) { color: var(--reset-ink-coral); }

/* --- Карточка «где ты стоишь» ------------------------------------------ */

.pl-rt-side {
  display: grid;
  align-content: start;
  gap: .8rem;
  padding: 1rem 1.1rem 1.1rem;
  border: 2px solid color-mix(in srgb, var(--pl-ember) 50%, transparent);
  border-radius: var(--pl-radius-sm);
  background: color-mix(in srgb, var(--reset-panel) 78%, transparent);
}

.pl-rt-side__tier { display: grid; gap: .3rem; }
.pl-rt-side .pl-hud { margin: 0; color: var(--reset-muted); }

.pl-rt-side__rank {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: .1rem .6rem;
  margin: 0;
}

.pl-rt-side__rank strong {
  font-size: var(--fs-2xl);
  line-height: .95;
  color: var(--reset-ink-coral);
}

/* «Команды нет» — это состояние, а не рекорд, поэтому кеглем оно тише места
   в таблице и красится в обычный текст, а не в акцент. */
.pl-rt-side__tier--empty .pl-rt-side__rank strong {
  font-size: var(--fs-lg);
  color: var(--reset-cream);
}

.pl-rt-side__note {
  margin: .2rem 0 0;
  color: var(--reset-muted);
  font-size: var(--fs-xs);
}

.pl-rt-div {
  padding: .18rem .6rem;
  border-radius: 999px;
  font-family: "JetBrains Mono", monospace;
  font-size: var(--fs-2xs);
  font-weight: 700;
  letter-spacing: .1em;
  color: var(--reset-tile-ink);
}

.pl-rt-div--legend { background: linear-gradient(135deg, var(--rt-gold-hi), var(--rt-gold)); }
.pl-rt-div--diamond { background: linear-gradient(135deg, #bde9ff, var(--reset-sky)); }
.pl-rt-div--platinum { background: linear-gradient(135deg, #e9eef7, var(--rt-silver)); }
.pl-rt-div--gold { background: linear-gradient(135deg, var(--rt-gold), var(--rt-gold-deep)); }
.pl-rt-div--silver { background: linear-gradient(135deg, var(--rt-silver-hi), var(--rt-silver-deep)); }
.pl-rt-div--bronze { background: linear-gradient(135deg, var(--rt-bronze-hi), var(--rt-bronze)); }

.pl-rt-side__facts {
  display: flex;
  flex-wrap: wrap;
  gap: .1rem 1.1rem;
  margin: .3rem 0 0;
}

.pl-rt-side__facts div { display: grid; }

.pl-rt-side__facts dt {
  color: var(--reset-muted);
  font-family: "JetBrains Mono", monospace;
  font-size: var(--fs-2xs);
  letter-spacing: .08em;
  text-transform: uppercase;
}

.pl-rt-side__facts dd {
  margin: 0;
  font-family: var(--heading-font-family);
  font-size: var(--fs-md);
  font-weight: 900;
}

.pl-rt-side__goal {
  display: flex;
  gap: .45rem;
  margin: .5rem 0 0;
  color: var(--reset-ink-coral);
  font-size: var(--fs-xs);
  font-weight: 700;
}

/* --- Отрыв лидера -------------------------------------------------------
   Нижний ярус той же карточки. Цифра и подпись стоят в строку, а не столбиком
   по центру: так блок занимает ровно свою высоту и не может растянуться в
   пустой прямоугольник, чем бы ни был ярус над ним. */

.pl-rt-side__gap {
  display: grid;
  gap: .25rem;
  padding-top: .8rem;
  border-top: 1px dashed var(--reset-line-strong);
}

.pl-rt-side__gapline {
  display: flex;
  align-items: baseline;
  gap: .6rem;
  margin: 0;
}

.pl-rt-side__gapline strong {
  flex: 0 0 auto;
  font-family: var(--heading-font-family);
  font-size: var(--fs-lg);
  font-weight: 900;
  line-height: 1;
  color: var(--reset-ink-sun);
}

.pl-rt-side__gapline span {
  color: var(--reset-muted);
  font-size: var(--fs-2xs);
  line-height: 1.3;
}

.pl-rt-side__gapline b {
  color: var(--reset-cream);
  font-weight: 800;
}

/* ===== Переключатель и фильтры ============================================
   Раньше это были два голых ряда пилюль подряд: сверху «Игроки/Команды», под
   ними десять фильтров из трёх разных групп, разделённых только пробелом.
   Пробел не работает: пилюли одинаковые, активных сразу три, подписей нет, и
   какая из них чем управляет — приходится угадывать по значениям.

   Теперь это одна панель с двумя ярусами. Верхний меняет саму таблицу (игроки
   или команды), нижний — только выборку в ней, и черта между ними говорит,
   что это разные вещи. Нижний ярус — сетка из двух колонок: слева имена осей
   одно под другим, справа их значения. Три подписанные строки читаются как
   три вопроса с ответами, а не как один ряд из десяти одинаковых кнопок, и
   ни одна группа уже не может разорваться переносом посередине. */

.pl-rt-controls {
  display: grid;
  gap: .95rem;
  padding: 1rem 1.15rem 1.15rem;
  border: var(--pl-border);
  border-radius: var(--pl-radius);
  background: color-mix(in srgb, var(--reset-panel) 70%, transparent);
}

.pl-rt-controls__top {
  display: flex;
  flex-wrap: wrap;
  gap: .6rem 1rem;
  align-items: center;
  justify-content: space-between;
}

.pl-rt-switch { margin-bottom: 0; }

/* Сброс — не фильтр, поэтому он не пилюля: пунктир и приглушённый цвет держат
   его вне ряда выбора. Появляется только когда сбрасывать есть что. */
.pl-rt-reset {
  display: inline-flex;
  align-items: center;
  gap: .45rem;
  padding: .42rem .9rem;
  border: 2px dashed var(--reset-line-strong);
  border-radius: 999px;
  background: none;
  color: var(--reset-muted);
  font: inherit;
  font-family: var(--heading-font-family);
  font-size: var(--fs-2xs);
  font-weight: 800;
  letter-spacing: .06em;
  text-transform: uppercase;
  cursor: pointer;
  transition: color .14s ease, border-color .14s ease;
}

.pl-rt-reset:hover {
  border-color: var(--reset-ink-coral);
  color: var(--reset-cream);
}

/* Две колонки: слева подписи осей, справа их значения. Рядом три поля не
   встают — доска живёт в колонке около 1070px, а десять пилюль с подписями
   шире, — и в ряд они всё равно ломались бы на две строки, только каждый раз
   в новом месте. В столбик всё предсказуемо: подписи по одной вертикали,
   пилюли по другой, и глаз идёт по левому краю сверху вниз, а не по десяти
   капсулам подряд. */
.pl-rt-filters {
  display: grid;
  grid-template-columns: auto minmax(0, 1fr);
  gap: .55rem 1.1rem;
  align-items: center;
  padding-top: .95rem;
  border-top: 1px dashed var(--reset-line-strong);
}

/* Поле — обёртка только для разметки: `contents` отдаёт подпись и пилюли
   прямо в сетку, поэтому они попадают в разные колонки одной строки, а на
   телефоне (там колонка одна) сами встают друг под друга. */
.pl-rt-field { display: contents; }

.pl-rt-field__label {
  color: var(--reset-muted);
  line-height: 1;
}

/* ===== Подиум ============================================================= */

/* Место под собственный вынос. Трон поднят на 1.5rem, а его медаль торчит
   ещё на 1.7rem выше карточки — вместе это 3.2rem над верхней кромкой сетки,
   и без запаса корона садилась прямо на строку фильтров. Отступ держит вынос
   внутри коробки подиума, поэтому расстояние до фильтров задаёт только зазор
   сетки и его можно менять, не думая о короне. */
.pl-rt-podium {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 1rem;
  align-items: end;
  padding-top: 3.2rem;
}

.pl-rt-place {
  position: relative;
  display: grid;
  justify-items: center;
  gap: .3rem;
  padding: 2.4rem 1rem 1.2rem;
  border: var(--pl-border);
  border-radius: var(--pl-radius);
  background: var(--reset-panel-raised);
  background-image: var(--pl-hatch);
  box-shadow: var(--pl-lift);
  text-align: center;
}

/* Медаль сидит верхом на кромке карточки — так подиум читается как подиум
   ещё до того, как прочитаны цифры. */
.pl-rt-place__medal {
  position: absolute;
  top: -1.35rem;
  display: grid;
  place-items: center;
  width: 2.9rem;
  height: 2.9rem;
  border: 2px solid var(--reset-shadow);
  border-radius: 50%;
  font-family: var(--heading-font-family);
  font-size: 1.3rem;
  font-weight: 900;
  color: #2a1d05;
}

.pl-rt-place--2 .pl-rt-place__medal {
  background: linear-gradient(150deg, var(--rt-silver-hi), var(--rt-silver) 55%, var(--rt-silver-deep));
}

.pl-rt-place--3 .pl-rt-place__medal {
  background: linear-gradient(150deg, var(--rt-bronze-hi), var(--rt-bronze) 55%, var(--rt-bronze-deep));
}

.pl-rt-place--2 { border-color: color-mix(in srgb, var(--rt-silver) 70%, transparent); }
.pl-rt-place--3 { border-color: color-mix(in srgb, var(--rt-bronze) 70%, transparent); }

.pl-rt-place__face {
  display: grid;
  place-items: center;
  overflow: hidden;
  width: 5.4rem;
  height: 5.4rem;
  border: 2px solid var(--reset-line-strong);
  border-radius: 50%;
  background: var(--pl-plate);
}

.pl-rt-place__face img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}

.pl-rt-place__name {
  margin: .5rem 0 0;
  font-size: var(--fs-md);
  font-family: var(--heading-font-family);
  font-weight: 900;
  overflow-wrap: anywhere;
}

.pl-rt-place__where {
  display: flex;
  flex-wrap: wrap;
  gap: .3rem;
  justify-content: center;
  margin: 0;
  color: var(--reset-muted);
  font-size: var(--fs-2xs);
}

.pl-rt-place__where i { color: var(--reset-ink-coral); }

.pl-rt-place__ro {
  margin-top: .5rem;
  font-size: var(--fs-xl);
  line-height: 1;
}

.pl-rt-place__ro-label {
  margin: 0;
  color: var(--reset-muted);
}

.pl-rt-place__facts {
  display: flex;
  gap: .9rem;
  margin: .9rem 0 0;
  padding-top: .8rem;
  border-top: 1px solid var(--reset-line);
  width: 100%;
  justify-content: center;
}

.pl-rt-place__facts div { display: grid; gap: .1rem; }

.pl-rt-place__facts dt {
  color: var(--reset-muted);
  font-family: "JetBrains Mono", monospace;
  font-size: var(--fs-2xs);
  letter-spacing: .06em;
  text-transform: uppercase;
}

.pl-rt-place__facts dd {
  margin: 0;
  font-family: var(--heading-font-family);
  font-size: var(--fs-sm);
  font-weight: 900;
}

/* --- Трон ---------------------------------------------------------------
   Всё, что ниже, есть только у первого места. Это единственная награда на
   экране, которую нельзя разделить с кем-то ещё, и выглядеть она обязана
   соответственно: карточка выше остальных, вращающееся золотое кольцо и
   корона вместо цифры. */

.pl-rt-place--1 {
  z-index: 1;
  padding: 3rem 1.2rem 1.5rem;
  transform: translateY(-1.5rem);
  border-color: transparent;
  background:
    linear-gradient(var(--reset-panel-raised), var(--reset-panel-raised)) padding-box,
    linear-gradient(150deg, var(--rt-gold-hi), var(--rt-gold) 45%, var(--rt-gold-deep)) border-box;
  border: 3px solid transparent;
  box-shadow:
    var(--pl-lift-hi),
    0 0 42px -12px color-mix(in srgb, var(--rt-gold) 85%, transparent);
}

.pl-rt-place--1 .pl-rt-place__medal {
  width: 3.4rem;
  height: 3.4rem;
  top: -1.7rem;
  font-size: 1.5rem;
  background: linear-gradient(150deg, var(--rt-gold-hi), var(--rt-gold) 50%, var(--rt-gold-deep));
  box-shadow: 0 0 26px -6px var(--rt-gold);
}

.pl-rt-place--1 .pl-rt-place__face {
  width: 6.6rem;
  height: 6.6rem;
  border-color: var(--rt-gold);
  box-shadow: 0 0 30px -10px var(--rt-gold);
}

.pl-rt-place--1 .pl-rt-place__ro {
  font-size: var(--fs-2xl);
  color: var(--reset-ink-sun);
}

/* Вращающееся золотое кольцо по кромке трона.

   Первая версия крутила сам градиент: `transform: rotate()` на элементе
   размером с карточку. Повёрнутый прямоугольник занимает площадь заметно
   больше собственной коробки и ничем не обрезан, поэтому светлые секторы
   конического градиента уезжали на соседние карточки подиума и засвечивали
   на них имена. Отсюда конструкция из двух коробок: внешняя обрезает
   (`overflow: hidden`) и маской оставляет от себя только рамку в 3px,
   внутренняя внутри неё крутится сколько угодно.

   Маска — стандартный рецепт градиентной рамки: два одинаковых слоя, один по
   content-box, и вычитание одного из другого. Там, где её нет, остаётся
   статичная золотая рамка самой карточки — трон не перестаёт быть троном. */
.pl-rt-aurora {
  position: absolute;
  inset: -3px;
  z-index: 2;
  overflow: hidden;
  padding: 3px;
  border-radius: calc(var(--pl-radius) + 3px);
  pointer-events: none;
  -webkit-mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
  -webkit-mask-composite: xor;
  mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
  mask-composite: exclude;
}

.pl-rt-aurora i {
  position: absolute;
  /* Квадрат заведомо больше карточки: при повороте он обязан перекрывать её
     углы, иначе в кольце появляются прорехи. */
  inset: -60%;
  display: block;
  background: conic-gradient(from 0deg,
    transparent 0deg,
    var(--rt-gold-hi) 40deg,
    var(--rt-gold) 80deg,
    transparent 150deg,
    transparent 210deg,
    var(--rt-gold) 260deg,
    var(--rt-gold-hi) 300deg,
    transparent 360deg);
  animation: pl-rt-spin 6s linear infinite;
}

@keyframes pl-rt-spin {
  to { transform: rotate(1turn); }
}

.pl-rt-throne {
  display: inline-flex;
  align-items: center;
  gap: .4rem;
  margin-top: .9rem;
  padding: .3rem .8rem;
  border-radius: 999px;
  background: linear-gradient(135deg, var(--rt-gold-hi), var(--rt-gold-deep));
  color: #2a1d05;
  font-weight: 800;
}

/* ===== Полоса аномалий ==================================================== */

.pl-rt-anoms { display: grid; gap: .9rem; }

.pl-rt-anoms__head h3 {
  margin: 0;
  font-size: var(--fs-lg);
  text-transform: uppercase;
}

.pl-rt-anoms__head p {
  max-width: 68ch;
  margin: .25rem 0 0;
  color: var(--reset-muted);
  font-size: var(--fs-sm);
}

.pl-rt-anoms__grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(11.5rem, 1fr));
  gap: .8rem;
}

.pl-rt-anom-card {
  --tone: var(--pl-ember);
  position: relative;
  display: grid;
  gap: .25rem;
  overflow: hidden;
  padding: 1rem 1.1rem;
  border: 2px solid color-mix(in srgb, var(--tone) 55%, transparent);
  border-radius: var(--pl-radius-sm);
  background: var(--reset-panel-raised);
  box-shadow: var(--pl-lift-sm), 0 0 26px -14px var(--tone);
}

/* Один проход света по карточке, раз в четыре секунды. Аномалия — это
   короткое событие, а не постоянно включённая лампочка. */
.pl-rt-anom-card__sweep {
  position: absolute;
  inset: 0;
  background: linear-gradient(105deg, transparent 42%,
    color-mix(in srgb, var(--tone) 26%, transparent) 50%, transparent 58%);
  transform: translateX(-120%);
  animation: pl-rt-sweep 4.5s ease-in-out infinite;
  pointer-events: none;
}

@keyframes pl-rt-sweep {
  0%, 55% { transform: translateX(-120%); }
  85%, 100% { transform: translateX(120%); }
}

.pl-rt-anom-card__icon {
  display: grid;
  place-items: center;
  width: 2.2rem;
  height: 2.2rem;
  border-radius: 50%;
  background: color-mix(in srgb, var(--tone) 20%, transparent);
  color: var(--tone);
  font-size: 1rem;
}

.pl-rt-anom-card .pl-hud { margin: .4rem 0 0; color: var(--tone); }

.pl-rt-anom-card strong {
  font-size: var(--fs-md);
  line-height: 1.15;
}

.pl-rt-anom-card__who {
  margin: .3rem 0 0;
  font-size: var(--fs-xs);
  font-weight: 700;
}

.pl-rt-anom-card__who span {
  color: var(--reset-muted);
  font-weight: 500;
}

/* Тон каждой аномалии. Ключи совпадают с ANOMALIES в player-rating.js —
   значок в строке и карточка в полосе обязаны быть одного цвета, иначе связь
   между ними не читается. */
.pl-rt-anom-card--streak, .pl-rt-anom--streak { --tone: var(--pl-ember); }
.pl-rt-anom-card--carnage, .pl-rt-anom--carnage { --tone: var(--reset-ink-rose); }
.pl-rt-anom-card--sniper, .pl-rt-anom--sniper { --tone: var(--reset-ink-sky); }
.pl-rt-anom-card--climb, .pl-rt-anom--climb { --tone: var(--reset-ink-ok); }
.pl-rt-anom-card--wildcard, .pl-rt-anom--wildcard { --tone: var(--reset-ink-sun); }
.pl-rt-anom-card--grind, .pl-rt-anom--grind { --tone: var(--reset-ink-sun); }
.pl-rt-anom-card--freefall, .pl-rt-anom--freefall { --tone: var(--reset-ink-danger); }

/* ===== Доска ==============================================================
   Настоящая <table> не даёт строке ни трансформации, ни собственной тени, а
   здесь строка — это объект, который поднимается и светится. Поэтому сетка на
   div-ах, но с полными ролями ARIA: скринридер читает её как таблицу. */

.pl-rt-board {
  display: grid;
  gap: .4rem;
}

.pl-rt-status,
.pl-rt-empty {
  display: grid;
  place-items: center;
  gap: .65rem;
  min-height: 11rem;
  padding: 1.5rem;
  border: var(--pl-border);
  border-radius: var(--pl-radius-sm);
  background: var(--reset-panel-raised);
  color: var(--reset-muted);
  text-align: center;
}

.pl-rt-status > i,
.pl-rt-empty > i {
  color: var(--reset-ink-coral);
  font-size: 1.35rem;
}

.pl-rt-status > strong,
.pl-rt-empty > strong {
  color: var(--reset-cream);
  font-family: var(--heading-font-family);
  font-size: var(--fs-lg);
}

.pl-rt-status > span,
.pl-rt-empty > span {
  max-width: 38rem;
  font-size: var(--fs-sm);
}

.pl-rt-status--error > i { color: var(--reset-ink-danger); }
.pl-rt-status .pl-btn { margin-top: .25rem; }
.pl-rt-empty { min-height: 9rem; }

.pl-rt-row {
  display: grid;
  grid-template-columns: var(--rt-cols);
  gap: .6rem;
  align-items: center;
  padding: .7rem .9rem;
  border: var(--pl-border);
  border-radius: var(--pl-radius-sm);
  background: var(--reset-panel-raised);
  box-shadow: var(--pl-lift-sm);
  transition: transform .14s ease, box-shadow .14s ease, border-color .14s ease;
}

.pl-rt-row:not(.pl-rt-row--head):hover {
  transform: translate(-2px, -2px);
  border-color: var(--reset-line-strong);
  box-shadow: var(--pl-lift);
}

/* Шапка прилипает не к нулю, а под мачту кабинета: `.pl-top` сама sticky и
   лежит на z-index 5, поэтому липкая строка с top:0 просто уезжала бы под
   неё. Высоту мачты меряет player-rating.js и кладёт в --pl-top-h.

   И выглядит она как продолжение мачты, а не как строка таблицы, которая
   почему-то не уехала: тот же паз, та же кромка, тот же край, что у ленты и
   панели полки в player.css. Колонки при этом не двигаются — фон уезжает в
   поля подложкой, а не отступами самой строки. */
.pl-rt-row--head {
  position: sticky;
  top: var(--pl-top-h, 0px);
  z-index: 3;
  padding-block: .55rem;
  border: 0;
  border-radius: 0;
  background: none;
  box-shadow: none;
  color: var(--reset-muted);
  font-family: "JetBrains Mono", monospace;
  font-size: var(--fs-2xs);
  font-weight: 700;
  letter-spacing: .1em;
  text-transform: uppercase;
}

.pl-rt-row--head::before {
  content: "";
  position: absolute;
  z-index: -1;
  inset: 0 calc(var(--pl-gutter, 0px) * -1);
  border-bottom: var(--pl-border);
  background: var(--pl-groove, var(--reset-bg));
  box-shadow: inset 0 3px 0 color-mix(in srgb, var(--reset-cream) 7%, transparent);
}

.pl-rt-row--head:hover { transform: none; }

.pl-rt-c {
  display: flex;
  align-items: center;
  gap: .4rem;
  min-width: 0;
}

.pl-rt-c--n,
.pl-rt-c--kd,
.pl-rt-c--ro { justify-content: flex-end; text-align: right; }

.pl-rt-row--head .pl-rt-c--n,
.pl-rt-row--head .pl-rt-c--kd,
.pl-rt-row--head .pl-rt-c--ro { justify-content: flex-end; }

.pl-rt-c--n { flex-direction: column; align-items: flex-end; gap: .1rem; }

.pl-rt-c b {
  font-family: var(--heading-font-family);
  font-size: var(--fs-base);
  font-weight: 900;
}

.pl-rt-c--ro {
  flex-direction: column;
  align-items: flex-end;
  gap: 0;
}

.pl-rt-c--ro b {
  font-size: var(--fs-md);
  color: var(--reset-ink-coral);
}

/* Сколько скилла не доехало до очков из-за нехватки матчей. Единственное
   число на экране, которое объясняет, почему сосед со скиллом ниже стоит
   выше. */
.pl-rt-loss {
  color: var(--reset-ink-warn);
  font-family: "JetBrains Mono", monospace;
  font-size: var(--fs-2xs);
  font-style: normal;
  cursor: help;
}

/* --- Место -------------------------------------------------------------- */

.pl-rt-c--rank { gap: .5rem; }

.pl-rt-num {
  min-width: 1.6rem;
  font-family: var(--heading-font-family);
  font-size: var(--fs-md);
  font-weight: 900;
  font-variant-numeric: tabular-nums;
}

.pl-rt-delta {
  display: inline-flex;
  align-items: center;
  gap: .1rem;
  font-family: "JetBrains Mono", monospace;
  font-size: var(--fs-2xs);
  font-weight: 700;
}

.pl-rt-delta.is-up { color: var(--reset-ink-ok); }
.pl-rt-delta.is-down { color: var(--reset-ink-danger); }
.pl-rt-delta.is-flat { color: var(--reset-muted); opacity: .55; }

/* --- Кто --------------------------------------------------------------- */

.pl-rt-c--who { flex-wrap: wrap; gap: .5rem; }

.pl-rt-who {
  display: flex;
  align-items: center;
  gap: .6rem;
  min-width: 0;
}

.pl-rt-face,
.pl-rt-crest {
  flex: 0 0 auto;
  display: grid;
  place-items: center;
  overflow: hidden;
  width: 2.6rem;
  height: 2.6rem;
  border: 2px solid var(--reset-line-strong);
  border-radius: 50%;
  background: var(--pl-plate);
}

.pl-rt-face img { width: 100%; height: 100%; object-fit: cover; }

/* Герб команды — щит с монограммой. Рисуется из имени, потому что загружать
   логотипы у команд, которых ещё нет в базе, неоткуда, а «два серых кружка»
   вместо гербов убивают весь смысл командной таблицы. */
.pl-rt-crest {
  border: 0;
  border-radius: 5px 5px 40% 40% / 5px 5px 30% 30%;
  color: #17130d;
  font-family: var(--heading-font-family);
  font-size: var(--fs-xs);
  font-weight: 900;
  letter-spacing: -.02em;
  box-shadow: inset 0 0 0 2px rgba(0, 0, 0, .28);
}

.pl-rt-crest--t0 { background: linear-gradient(150deg, #ffd66b, #e07a12); }
.pl-rt-crest--t1 { background: linear-gradient(150deg, #a8d8f0, var(--reset-sky)); }
.pl-rt-crest--t2 { background: linear-gradient(150deg, #ffb1c9, var(--reset-rose)); }
.pl-rt-crest--t3 { background: linear-gradient(150deg, #9df0c4, var(--reset-ok)); }
.pl-rt-crest--t4 { background: linear-gradient(150deg, #ffb59a, var(--reset-coral)); }
.pl-rt-crest--t5 { background: linear-gradient(150deg, #dfe5f1, var(--rt-silver-deep)); }

.pl-rt-who__text { display: grid; gap: .1rem; min-width: 0; }

.pl-rt-nick {
  display: flex;
  align-items: center;
  gap: .4rem;
  min-width: 0;
  font-family: var(--heading-font-family);
  font-size: var(--fs-sm);
  font-weight: 900;
}

/* Ник обрезается многоточием, а не переносится: «SHADOWK / Z» в две строки
   читается как две разные строки таблицы. Обрезка живёт на внутреннем span —
   у флекс-контейнера text-overflow не работает. */
.pl-rt-nick > span {
  overflow: hidden;
  min-width: 0;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.pl-rt-me {
  padding: 0 .35rem;
  border-radius: 999px;
  background: var(--pl-ember-ramp);
  color: var(--pl-ember-ink);
  font-family: "JetBrains Mono", monospace;
  font-size: var(--fs-2xs);
  font-style: normal;
  font-weight: 700;
  text-transform: uppercase;
}

.pl-rt-meta {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: .1rem .5rem;
  color: var(--reset-muted);
  font-size: var(--fs-2xs);
}

.pl-rt-city {
  display: inline-flex;
  align-items: center;
  gap: .2rem;
}

.pl-rt-city i { font-size: .7em; }

/* Две команды с одинаковым именем — единственное, что их различает, это
   город, поэтому у дублей он перестаёт быть подписью и становится частью
   имени: обводка, фон, тот же вес. */
.pl-rt-city.is-dupe {
  padding: .05rem .45rem;
  border: 1px solid color-mix(in srgb, var(--pl-ember) 60%, transparent);
  border-radius: 999px;
  background: color-mix(in srgb, var(--pl-ember) 12%, transparent);
  color: var(--reset-ink-coral);
  font-weight: 700;
  cursor: help;
}

.pl-rt-club { opacity: .75; }

/* --- Значок аномалии в строке ------------------------------------------ */

.pl-rt-anom {
  --tone: var(--pl-ember);
  display: inline-flex;
  align-items: center;
  gap: .3rem;
  padding: .16rem .5rem;
  border: 1px solid color-mix(in srgb, var(--tone) 60%, transparent);
  border-radius: 999px;
  background: color-mix(in srgb, var(--tone) 14%, transparent);
  color: var(--tone);
  font-family: "JetBrains Mono", monospace;
  font-size: var(--fs-2xs);
  letter-spacing: .06em;
}

.pl-rt-anom b { font: inherit; font-weight: 700; }
.pl-rt-anom em { font-style: normal; opacity: .8; }

/* --- Числа -------------------------------------------------------------- */

/* Доля максимального скилла таблицы. Полоска стоит рядом с числом матчей не
   случайно: рядом видно, что у KAI полоска почти во всю ширину, а очков
   меньше, чем у соседа с полоской короче, — это и есть формула, показанная
   без формулы. */
.pl-rt-bar {
  width: 100%;
  max-width: 5.4rem;
  height: .28rem;
  border-radius: 999px;
  background: color-mix(in srgb, var(--reset-cream) 12%, transparent);
}

.pl-rt-bar i {
  display: block;
  width: var(--rt-skill);
  height: 100%;
  border-radius: 999px;
  background: var(--pl-ember-ramp);
}

.pl-rt-warn,
.pl-rt-ok {
  font-family: "JetBrains Mono", monospace;
  font-size: var(--fs-2xs);
  font-style: normal;
  cursor: help;
}

.pl-rt-warn { color: var(--reset-ink-warn); }
.pl-rt-ok { color: var(--reset-muted); opacity: .6; }

/* --- Форма -------------------------------------------------------------- */

.pl-rt-c--form { justify-content: center; }

.pl-rt-form {
  display: inline-flex;
  gap: .2rem;
}

.pl-rt-form b {
  width: .5rem;
  height: 1.05rem;
  border-radius: 2px;
}

.pl-rt-form b.is-win { background: var(--reset-ok); }
.pl-rt-form b.is-loss { background: color-mix(in srgb, var(--reset-danger) 55%, transparent); }

/* --- Состав ------------------------------------------------------------- */

.pl-rt-stack { display: inline-flex; }

.pl-rt-stack img {
  width: 1.7rem;
  height: 1.7rem;
  border: 2px solid var(--reset-panel-raised);
  border-radius: 50%;
  object-fit: cover;
  background: var(--pl-plate);
}

.pl-rt-stack img + img { margin-left: -.6rem; }

/* --- Призовые строки ---------------------------------------------------- */

.pl-rt-row.is-podium { border-width: 2px; }

.pl-rt-row.is-place-1 {
  border-color: var(--rt-gold);
  background:
    linear-gradient(90deg, color-mix(in srgb, var(--rt-gold) 16%, transparent), transparent 38%),
    var(--reset-panel-raised);
}

.pl-rt-row.is-place-2 {
  border-color: color-mix(in srgb, var(--rt-silver) 80%, transparent);
  background:
    linear-gradient(90deg, color-mix(in srgb, var(--rt-silver) 20%, transparent), transparent 32%),
    var(--reset-panel-raised);
}

.pl-rt-row.is-place-3 {
  border-color: color-mix(in srgb, var(--rt-bronze) 75%, transparent);
  background:
    linear-gradient(90deg, color-mix(in srgb, var(--rt-bronze) 18%, transparent), transparent 32%),
    var(--reset-panel-raised);
}

.pl-rt-row.is-place-1 .pl-rt-num { color: var(--reset-ink-sun); }

/* --- Строка-аномалия ----------------------------------------------------
   Аура своего цвета плюс один проход света. Строк с аномалией на экране
   три-четыре из тридцати — именно поэтому приём работает. */

.pl-rt-row.is-anomaly {
  position: relative;
  overflow: hidden;
  border-color: color-mix(in srgb, var(--tone, var(--pl-ember)) 55%, transparent);
  box-shadow: var(--pl-lift-sm), 0 0 24px -12px var(--tone, var(--pl-ember));
}

/* Свечение — инструмент тёмной темы; на кремовом фоне от него не остаётся
   ничего, и аномалия там опознаётся только по значку. Поэтому у строки есть
   ещё и заливка своим тоном, работающая в обеих темах. Призовые тройки её не
   получают: у них уже есть металл, и два фона в одной строке дерутся. */
.pl-rt-row.is-anomaly:not(.is-podium) {
  background:
    linear-gradient(90deg, color-mix(in srgb, var(--tone, var(--pl-ember)) 14%, transparent), transparent 34%),
    var(--reset-panel-raised);
}

.pl-rt-row.is-anomaly::after {
  content: "";
  position: absolute;
  inset: 0;
  background: linear-gradient(100deg, transparent 44%,
    color-mix(in srgb, var(--tone, var(--pl-ember)) 18%, transparent) 50%, transparent 56%);
  transform: translateX(-120%);
  animation: pl-rt-sweep 6s ease-in-out infinite;
  pointer-events: none;
}

.pl-rt-row.is-anom-streak { --tone: var(--pl-ember); }
.pl-rt-row.is-anom-carnage { --tone: var(--reset-ink-rose); }
.pl-rt-row.is-anom-sniper { --tone: var(--reset-ink-sky); }
.pl-rt-row.is-anom-climb { --tone: var(--reset-ink-ok); }
.pl-rt-row.is-anom-wildcard { --tone: var(--reset-ink-sun); }
.pl-rt-row.is-anom-grind { --tone: var(--reset-ink-sun); }
.pl-rt-row.is-anom-freefall { --tone: var(--reset-ink-danger); }

/* --- Твоя строка --------------------------------------------------------
   Прилипает к нижней кромке экрана, пока доска в кадре. В длинной таблице
   единственный вопрос игрока — «а я где» — и ответ на него не должен
   требовать скролла. */

.pl-rt-row.is-you {
  position: sticky;
  bottom: .6rem;
  z-index: 2;
  border-color: transparent;
  background:
    linear-gradient(var(--reset-panel-raised), var(--reset-panel-raised)) padding-box,
    var(--pl-ember-ramp) border-box;
  border: 3px solid transparent;
  box-shadow: var(--pl-lift), var(--pl-glow-soft);
}

/* --- Разделители зон ----------------------------------------------------- */

.pl-rt-zone {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: .3rem .7rem;
  margin: .35rem 0;
  padding: .1rem 0;
  border-top: 2px dashed var(--reset-line-strong);
  padding-top: .5rem;
}

.pl-rt-zone .pl-hud { color: var(--reset-muted); }
.pl-rt-zone em { color: var(--reset-muted); font-size: var(--fs-2xs); font-style: normal; opacity: .8; }

.pl-rt-zone--gold {
  border-color: color-mix(in srgb, var(--rt-gold) 70%, transparent);
}
.pl-rt-zone--gold .pl-hud { color: var(--reset-ink-sun); }

.pl-rt-zone--cut {
  border-color: color-mix(in srgb, var(--pl-ember) 70%, transparent);
}
.pl-rt-zone--cut .pl-hud { color: var(--reset-ink-coral); }

.pl-rt-break {
  display: flex;
  align-items: center;
  gap: .7rem;
  padding: .5rem .9rem;
  color: var(--reset-muted);
}

.pl-rt-break span {
  font-family: var(--heading-font-family);
  font-size: var(--fs-md);
  font-weight: 900;
  letter-spacing: .1em;
}

.pl-rt-break em { font-size: var(--fs-2xs); font-style: normal; }

.pl-rt-more {
  display: flex;
  margin: .5rem auto 0;
}

/* ===== Как считается место =============================================== */

.pl-rt-howto {
  padding: 1.35rem 1.5rem;
  border: 2px dashed var(--reset-line-strong);
  border-radius: var(--pl-radius);
  background: color-mix(in srgb, var(--reset-panel) 60%, transparent);
}

.pl-rt-howto h3 {
  margin: 0;
  font-size: var(--fs-md);
  text-transform: uppercase;
}

.pl-rt-howto__lede {
  max-width: 70ch;
  margin: .4rem 0 .9rem;
  color: var(--reset-muted);
  font-size: var(--fs-sm);
}

/* Формула напечатана как формула, а не пересказана прозой: её будут
   обсуждать и оспаривать, и обсуждать надо ровно то, что считает сервер. */
.pl-rt-formula {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: .4rem;
  margin: 0 0 1rem;
  padding: .7rem 1rem;
  border-radius: var(--pl-radius-sm);
  background: color-mix(in srgb, var(--reset-cream) 7%, transparent);
  font-family: "JetBrains Mono", monospace;
  font-size: var(--fs-sm);
}

.pl-rt-formula b { color: var(--reset-ink-coral); }
.pl-rt-formula span { color: var(--reset-muted); }

.pl-rt-howto__list {
  display: grid;
  gap: .55rem;
  margin: 0;
  padding: 0;
  list-style: none;
}

.pl-rt-howto__list li {
  display: flex;
  gap: .6rem;
  font-size: var(--fs-sm);
}

.pl-rt-howto__list i {
  flex: 0 0 1.2rem;
  margin-top: .2rem;
  color: var(--reset-ink-coral);
}

/* ===== Тёмная тема ========================================================
   Металл на почти чёрном фоне гаснет — золото уходит в коричневый, серебро в
   серое пятно. Поэтому в тёмной обе шкалы поднимаются на пару ступеней, а
   свечение трона, наоборот, получает право работать в полную силу. */

:root[data-home-theme="dark"] .pl-rating-view {
  --rt-gold-hi: #fff3c4;
  --rt-gold: #ffcb45;
  --rt-gold-deep: #e08a00;
  --rt-silver: #e2e8f2;
  --rt-silver-deep: #a3adbe;
  --rt-bronze: #f0a765;
  --rt-bronze-deep: #b8692c;
}

:root[data-home-theme="dark"] .pl-rt-place--1 {
  box-shadow:
    var(--pl-lift-hi),
    0 0 70px -14px color-mix(in srgb, var(--rt-gold) 70%, transparent);
}

:root[data-home-theme="dark"] .pl-rt-row--head {
  background: var(--reset-bg);
}

/* ===== Шестая вкладка =====================================================
   Рейтинг добавил на нижнюю панель шестую кнопку, и на 375px колонка «в шлем»
   ужалась до того, что подпись переносилась на две строки. Место панель
   отдаёт из отступов, а не из кегля: уменьшить шрифт на панели, которую жмут
   большим пальцем в темноте, — плохой размен. Живёт здесь, а не в player.css,
   потому что причина этой правки — именно этот экран.
   ========================================================================== */

@media (max-width: 900px) {
  .pl-tabbar {
    gap: .12rem;
    padding-left: .25rem;
    padding-right: .25rem;
  }

  .pl-tabbar button {
    padding-left: .05rem;
    padding-right: .05rem;
    letter-spacing: -.01em;
  }
}

/* ===== Адаптив ============================================================ */

@media (max-width: 1200px) {
  .pl-rating-view { --rt-cols: 4rem minmax(0, 1fr) 5.6rem 5rem 4.4rem 4.8rem 6rem; }
  .pl-rt-c--kd, .pl-rt-c--roster { display: none; }
  .pl-rt-row--head .pl-rt-c--kd, .pl-rt-row--head .pl-rt-c--roster { display: none; }
}

@media (max-width: 900px) {
  .pl-rt-season { grid-template-columns: minmax(0, 1fr); }
}

@media (max-width: 900px) {
  /* Нижняя панель на телефоне зафиксирована поверх страницы, поэтому липкая
     строка игрока обязана останавливаться над ней, а не под. */
  .pl-rt-row.is-you { bottom: calc(4.9rem + env(safe-area-inset-bottom)); }

  /* Остаются место, кто, скилл, матчи и очки — то, из чего рейтинг собран.
     Пятая ячейка в строке — винрейт; он уходит первым, потому что победы уже
     учтены в скилле и на узком экране дублируют его. */
  .pl-rating-view { --rt-cols: 3.6rem minmax(0, 1fr) 5.4rem 5rem 6rem; }
  .pl-rt-row > .pl-rt-c:nth-child(5) { display: none; }
  .pl-rt-c--form { display: none; }
  /* Подиум перестаёт быть подиумом, когда карточки уже колонки текста: на
     узком экране это просто три карточки в столбик, первая — первой. */
  /* В столбик трон уже никуда не поднимается, поэтому запас сверху нужен
     только под медаль. Зато появляется вторая беда: медаль каждой следующей
     карточки висит над предыдущей, и зазор в 1rem её не разводит. */
  .pl-rt-podium {
    grid-template-columns: minmax(0, 1fr);
    gap: 2.6rem;
    padding-top: 1.9rem;
  }
  .pl-rt-place--1 { order: -1; transform: none; }
  .pl-rt-place { padding-top: 2.6rem; }
}

@media (max-width: 620px) {
  .pl-rt-season { padding: 1.1rem; grid-template-columns: minmax(0, 1fr); }

  /* На телефоне три поля в ряд не стоят: любое из них ужимается до одной
     пилюли в строке и группа растягивается в столбик. Дешевле отдать каждой
     группе всю ширину сразу — тогда её пилюли переносятся между собой, а не
     между группами. Переключатель доски делит строку пополам: две кнопки под
     большой палец, обе одного размера. */
  .pl-rt-controls { padding: .9rem 1rem 1rem; }
  .pl-rt-filters {
    grid-template-columns: minmax(0, 1fr);
    gap: .3rem;
    padding-top: .85rem;
  }
  .pl-rt-field__label { margin-top: .5rem; }

  /* В инвентаре ряд фильтров длинный, и на телефоне он честно превращается в
     свайп-ленту (`.pl-chips` в player.css). Здесь в группе две-четыре пилюли,
     и последняя из них — «Зомби», «Мой город» — уезжала за правый край: чтобы
     узнать, что фильтр вообще есть, его надо было сначала найти пальцем.
     Подпись группы теперь занимает свою строку, ширина освободилась — пилюли
     переносятся и видны все сразу. */
  .pl-rt-chips {
    flex-wrap: wrap;
    overflow-x: visible;
    padding-bottom: 0;
  }
  .pl-rt-switch { flex: 1 1 100%; }
  .pl-rt-switch .pl-tab { flex: 1 1 0; justify-content: center; }

  /* Строка перестаёт быть строкой таблицы и становится карточкой: место и имя
     сверху, под ними четыре подписанные величины в один ряд. Ячейки те же —
     меняется только их расстановка по сетке, поэтому разметка и порядок
     чтения для скринридера остаются прежними. */
  .pl-rt-row--head { display: none; }

  .pl-rt-row {
    grid-template-columns: repeat(4, minmax(0, 1fr));
    gap: .6rem .5rem;
  }

  .pl-rt-row > .pl-rt-c:nth-child(1) { grid-area: 1 / 1 / 2 / 2; }
  .pl-rt-row > .pl-rt-c:nth-child(2) { grid-area: 1 / 2 / 2 / 5; }
  .pl-rt-row > .pl-rt-c:nth-child(3) { grid-area: 2 / 1 / 3 / 2; }
  .pl-rt-row > .pl-rt-c:nth-child(4) { grid-area: 2 / 2 / 3 / 3; }
  .pl-rt-row > .pl-rt-c:nth-child(5) { grid-area: 2 / 3 / 3 / 4; display: flex; }
  .pl-rt-row > .pl-rt-c:nth-child(6),
  .pl-rt-row > .pl-rt-c:nth-child(7) { display: none; }
  .pl-rt-row > .pl-rt-c:nth-child(8) { grid-area: 2 / 4 / 3 / 5; }

  /* Подпись переезжает внутрь ячейки — на телефоне заголовка таблицы нет, и
     без неё «96» под ником не значит ничего. */
  .pl-rt-c--n,
  .pl-rt-c--ro {
    flex-direction: column;
    align-items: flex-start;
    gap: 0;
    text-align: left;
  }

  .pl-rt-c--n::before,
  .pl-rt-c--ro::before {
    content: attr(data-label);
    color: var(--reset-muted);
    font-family: "JetBrains Mono", monospace;
    font-size: var(--fs-2xs);
    letter-spacing: .06em;
    text-transform: uppercase;
  }

  .pl-rt-c--n b,
  .pl-rt-c--ro b { font-size: var(--fs-sm); }
  .pl-rt-c--ro b { font-size: var(--fs-md); }

  .pl-rt-bar,
  .pl-rt-warn,
  .pl-rt-ok { display: none; }

  .pl-rt-face, .pl-rt-crest { width: 2.2rem; height: 2.2rem; }
  .pl-rt-place__facts { gap: 1.4rem; }
  .pl-rt-howto { padding: 1.1rem; }
  /* В строке таблицы значку хватает названия — значение стоит рядом в
     колонках. На карточке подиума колонок нет, и «СЕРИЯ» без числа не значит
     ничего, поэтому там подпись остаётся. */
  .pl-rt-row .pl-rt-anom em { display: none; }
}

/* ===== Меньше движения ====================================================
   Трон остаётся золотым, аномалия — цветной; исчезает только само движение.
   Игрок, который выключил анимации, не должен лишиться информации. */

@media (prefers-reduced-motion: reduce) {
  .pl-rt-aurora i { animation: none; }
  .pl-rt-anom-card__sweep,
  .pl-rt-row.is-anomaly::after { animation: none; opacity: .5; transform: none; }
  .pl-rt-row { transition: none; }
  .pl-rt-row:not(.pl-rt-row--head):hover { transform: none; }
}
