/* public/css/etalon.css — ЭТАЛОННЫЙ СКИН «Камень + Золото» (перенос, шаги 3–10).
   Подключается ПОСЛЕДНИМ (после styles/layout/log) — глобально перекрывает прежние темы.
   Решение пользователя: ЕДИНЫЙ скин — токены перекрыты В ОБОИХ режимах (light/dark),
   переключатель тем убран из тулбара (dock.js). Источник истины: _ui_project/index.html. */

:root, :root[data-mode="dark"] {
  color-scheme: light;
  --bg: var(--et-page); --bg-2: #dcdcdc;   /* страница #c9c9c9; рабочая зона #dedede красит .frame (layout.css) */
  --panel: var(--et-paper); --panel-2: #e6e6e6;
  --border: var(--et-paper-edge);
  --text: var(--et-ink); --muted: var(--et-ink-dim);
  --accent: var(--et-head); --accent-2: var(--et-gold-mid); --accent-ink: #fff5f2;
  --danger: #b23636; --success: var(--et-win); --info: var(--et-link);
  --radius: 3px; --radius-sm: 2px;
  --shadow: 0 1px 3px rgba(0,0,0,.16);
  --font: var(--et-font-body);
  --texture: none;
  --top-a: #8a8a8a; --top-b: #6f6f6f; --top-ink: var(--et-stone-ink); --top-ink-dim: #3f434a;
  --panel-head: #e2e2e2; --head: var(--et-head);
  --link: var(--et-link); --link-hover: #163c78; --might: var(--et-win);
  --gold-1: var(--et-gold-hi); --gold-2: var(--et-gold-mid); --gold-edge: var(--et-gold-lo);
  --chat-bg: var(--et-chat-bg); --online-bg: #efefef; --online-edge: var(--et-paper-edge);
  --nick: var(--et-nick-2); --nick-alt: var(--et-nick-3); --sys-dim: #8a8a8a;
  --fig-bg: #0d0d0d; --fig-body: #8f8f8f; --fig-body-2: #6f6f6f; --fig-outline: #c9c9c9;
}

/* Заголовки — Georgia (шрифтовой стиль Варианта 4). */
h1, h2, h3, .panel__title { font-family: var(--et-font-display); letter-spacing: .5px; }
.panel__title { color: var(--et-head); }

/* Общая полоса HP (бой/паспорта) — эталонная зелёная с цифрами внутри. */
.hpbar { height: 14px; border: 1px solid var(--et-bars-edge); border-radius: 0; background: #222; position: relative; overflow: hidden; }
.hpbar__fill { position: absolute; inset: 1px auto 1px 1px; border-radius: 0; background: linear-gradient(var(--et-hp-1), var(--et-hp-2)); }
.hpbar__label { position: absolute; inset: 0; font: 700 10px var(--et-font-body); color: #fff; text-align: center; line-height: 14px; text-shadow: 0 1px 1px #000; }

/* Анкета (шаг 9): единая колонка «бумаги», как в эталоне; Могущество зелёным.
   align-items:stretch ОБЯЗАТЕЛЕН: базовый .anketa задаёт align-items:start (грид-паспорт),
   а во flex-колонке start сжимает секции до max-content — лист становился узкой полоской. */
.anketa--et { display: flex; flex-direction: column; gap: 0; align-items: stretch; }
.kv--might .kv__v { color: var(--might); font-weight: 800; }
/* Статы эталона — ДВЕ колонки: слева Сила/Ловкость/…, справа Могущество/Уровень/Опыт/Деньги. */
.stats2 { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 0 28px; align-items: start; }
/* СТ-46 (заказчик 2026-08-16): статы с теми же отступами между строками, что и модификаторы (базовый .kv). */
.stats2 .kv { padding: 3px 0; }
@media (max-width: 560px) { .stats2 { grid-template-columns: 1fr; } }
/* СТ-16: анкета — один столбец: основные статы, ПОД ними Могущество/Уровень/Опыт/Деньги (лёгкий отступ).
   СТ-41 (заказчик 2026-08-10): название стата и цифры РАЗДВИНУТЫ на всю ширину ПАНЕЛИ (было — на
   ширину полосы опыта по СТ-39, заказчику тесно): «Сила» у левой грани панели, значение у правой,
   за рамку панели не выходит (width: 100% контента панели). */
.stats2--stack { grid-template-columns: minmax(0, 1fr); width: 100%; max-width: none; margin-inline: auto; }
/* СТ-47 (заказчик 2026-08-16): блок характеристик (Общие сведения: статы/модификаторы/могущество)
   начинается под ВЕРТИКАЛЬЮ ЛЕВОГО КРАЯ шкалы опыта — панель повторяет геометрию полосы
   (.xpbar-top .xpbar: 50% по центру, min 220px); боковых отступов у тела панели в каркасе нет,
   поэтому левые края совпадают точно. */
.screen--anketa .anketa__genpanel { width: 50%; min-width: 220px; max-width: none; margin-inline: auto; }
.stats2--stack .anketa-stats + .anketa-stats { margin-top: 8px; padding-top: 6px; border-top: 1px solid #d8d8d8; }
/* СТ-16: полоса опыта — наверху листа вместо заголовка «Анкета персонажа», вдвое уже, по центру.
   СТ-17: напротив полосы — «Рейтинг: N»; в столбце статов — шапка «Модификаторы». */
.xpbar-top { position: relative; display: flex; justify-content: center; align-items: center; }
.xpbar-top .xpbar { width: 50%; min-width: 220px; margin: 4px 0 10px; }
/* СТ-18: рейтинг — СЛЕВА от полосы, прижат к левому краю листа.
   (СТ-39: столбец статов уехал под полосу, поэтому прежнее совпадение «Р» с «С» слова «Сила» снято.) */
.anketa__rating { position: absolute; left: 0; top: 50%; transform: translateY(-50%); font: 700 13px var(--et-font-display); letter-spacing: .4px; color: var(--et-head); white-space: nowrap; }
.anketa-stats__cap { font: 700 12px var(--et-font-display); letter-spacing: .5px; color: #5a5a5a; margin-bottom: 2px; }
/* Красная строка титула («Титул: Хранитель Тумана IV») — .title-line эталона. */
.et-titleline { font: 700 13px var(--et-font-display); color: var(--et-head); margin: 7px 0 2px; display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }
.et-subline { font-size: 12px; margin: 2px 0; }
.et-subline .w { color: var(--et-win); font-weight: 700; }
.et-subline .l { color: #c22222; font-weight: 700; }
.et-subline .d { color: #777; font-weight: 700; }

/* Вход: строка «Запомнить меня» (галочка + подпись) под полем пароля. */
.auth-remember { display: flex; align-items: center; gap: 7px; margin: -4px 0 12px; cursor: pointer; font-size: .9rem; color: var(--text); }
.auth-remember input { width: 15px; height: 15px; accent-color: var(--et-head); cursor: pointer; }

/* Город: компактная кнопка «Календарь» в строке кошелька (не громоздкая тач-кнопка). */
.city__cal { min-height: auto; padding: 3px 12px; font-size: .8rem; }

/* === Фаза B, шаги 11/13/14: доска боёв · окраины · зрители · инвентарь =====================
   Общий язык «боевых» экранов: БОРДОВЫЕ полосы-заголовки секций (шапки combats-таблиц),
   светлые таблицы-зебры с тонкими линиями, кнопки-плиты (серая/бордовая). */
.screen--arena .panel__title, .screen--outskirts .panel__title,
.screen--spectate .panel__title, .screen--inv .panel__title,
.screen--shop .panel__title, .screen--bank .panel__title,
.screen--bldg .panel__title, .screen--altar .panel__title,
.screen--clan .panel__title, .screen--faction .panel__title,
.screen--mail .panel__title, .screen--chat .panel__title,
.screen--quests .panel__title, .screen--ach .panel__title, .screen--calendar .panel__title,
.screen--lb .panel__title, .screen--tourn .panel__title,
.screen--nick .panel__title, .screen--settings .panel__title, .screen--vip .panel__title,
.screen--help .panel__title, .screen--rules .panel__title, .screen--mod .panel__title,
.screen--admin .panel__title, .screen--notify .panel__title, .screen--friends .panel__title,
.screen--cosmetics .panel__title, .screen--magic .panel__title, .screen--ranged .panel__title {
  background: linear-gradient(#9e2727, #7c1d1d); color: #f4e9dc;
  padding: 4px 10px; border: 1px solid #5c1414; border-radius: 2px;
  text-shadow: 0 1px 1px rgba(0,0,0,.7); letter-spacing: .6px;
}
/* Список заявок/сборов — светлая таблица-зебра с тонкими линиями. */
.screen--arena .arena__list { border: 1px solid #c8c8c8; background: #f6f6f6; }
.screen--arena .arena__row {
  display: flex; justify-content: space-between; align-items: center; gap: 10px;
  padding: 5px 9px; border-bottom: 1px solid #d9d9d9;
}
.screen--arena .arena__row:last-child { border-bottom: none; }
.screen--arena .arena__row:nth-child(even) { background: #ececec; }
.screen--arena .arena__list > .muted { padding: 6px 9px; margin: 0; }
.screen--arena .arena__info { display: flex; flex-direction: column; gap: 1px; min-width: 0; }
/* Кнопки «боевых» экранов — плиты: серая (отмена/выход/снять) и бордовая (принять/в бой/надеть). */
.screen--arena .btn, .screen--outskirts .btn, .screen--spectate .btn, .screen--inv .btn,
.screen--shop .btn, .screen--bank .btn, .screen--bldg .btn, .screen--altar .btn,
.screen--clan .btn, .screen--faction .btn,
.screen--mail .btn, .screen--chat .btn, .screen--quests .btn, .screen--ach .btn, .screen--calendar .btn,
.screen--lb .btn, .screen--tourn .btn,
.screen--nick .btn, .screen--settings .btn, .screen--vip .btn,
.screen--help .btn, .screen--rules .btn, .screen--mod .btn,
.screen--admin .btn, .screen--notify .btn, .screen--friends .btn,
.screen--cosmetics .btn, .screen--magic .btn, .screen--ranged .btn {
  min-height: auto; padding: 4px 14px; border-radius: 2px;
  font: 700 12px var(--et-font-display); letter-spacing: .4px;
}
/* СТ-48 (заказчик 2026-08-16): поле «Введите промокод» — та же ширина, но высотой С КНОПКУ
   «Активировать» (кнопка выше: 4px поля + 12px кегль ≈ 24px). Компакт по образцу банка. */
.screen--cosmetics .find-form .field__input {
  min-height: auto; height: 24px; padding: 0 9px; line-height: 22px;
  font-size: .8rem; background: #fff; border: 1px solid #8a8a8a; border-radius: 2px;
}
.screen--arena .btn--ghost, .screen--outskirts .btn--ghost, .screen--spectate .btn--ghost, .screen--inv .btn--ghost,
.screen--shop .btn--ghost, .screen--bank .btn--ghost, .screen--bldg .btn--ghost, .screen--altar .btn--ghost,
.screen--clan .btn--ghost, .screen--faction .btn--ghost,
.screen--mail .btn--ghost, .screen--chat .btn--ghost,
.screen--quests .btn--ghost, .screen--ach .btn--ghost, .screen--calendar .btn--ghost,
.screen--lb .btn--ghost, .screen--tourn .btn--ghost,
.screen--nick .btn--ghost, .screen--settings .btn--ghost, .screen--vip .btn--ghost,
.screen--help .btn--ghost, .screen--rules .btn--ghost, .screen--mod .btn--ghost,
.screen--admin .btn--ghost, .screen--notify .btn--ghost, .screen--friends .btn--ghost,
.screen--cosmetics .btn--ghost, .screen--magic .btn--ghost, .screen--ranged .btn--ghost {
  color: var(--et-stone-ink);
  background: linear-gradient(var(--et-plate-1), var(--et-plate-2));
  border: 1px solid var(--et-plate-edge);
  box-shadow: inset 0 1px 0 rgba(255,255,255,.35); text-shadow: 0 1px 0 rgba(255,255,255,.3);
}
.screen--arena .btn--ghost:hover, .screen--outskirts .btn--ghost:hover, .screen--spectate .btn--ghost:hover, .screen--inv .btn--ghost:hover,
.screen--shop .btn--ghost:hover, .screen--bank .btn--ghost:hover, .screen--bldg .btn--ghost:hover, .screen--altar .btn--ghost:hover,
.screen--clan .btn--ghost:hover, .screen--faction .btn--ghost:hover,
.screen--mail .btn--ghost:hover, .screen--chat .btn--ghost:hover,
.screen--quests .btn--ghost:hover, .screen--ach .btn--ghost:hover, .screen--calendar .btn--ghost:hover,
.screen--lb .btn--ghost:hover, .screen--tourn .btn--ghost:hover,
.screen--nick .btn--ghost:hover, .screen--settings .btn--ghost:hover, .screen--vip .btn--ghost:hover,
.screen--help .btn--ghost:hover, .screen--rules .btn--ghost:hover, .screen--mod .btn--ghost:hover,
.screen--admin .btn--ghost:hover, .screen--notify .btn--ghost:hover, .screen--friends .btn--ghost:hover,
.screen--cosmetics .btn--ghost:hover, .screen--magic .btn--ghost:hover, .screen--ranged .btn--ghost:hover {
  background: linear-gradient(var(--et-plate-1-h), var(--et-plate-2-h));
}
.screen--arena .btn--danger, .screen--arena .btn--primary,
.screen--outskirts .btn--danger, .screen--outskirts .btn--primary,
.screen--spectate .btn--danger, .screen--spectate .btn--primary,
.screen--inv .btn--danger, .screen--inv .btn--primary,
.screen--shop .btn--danger, .screen--shop .btn--primary,
.screen--bank .btn--danger, .screen--bank .btn--primary,
.screen--bldg .btn--danger, .screen--bldg .btn--primary,
.screen--altar .btn--danger, .screen--altar .btn--primary,
.screen--clan .btn--danger, .screen--clan .btn--primary,
.screen--faction .btn--danger, .screen--faction .btn--primary,
.screen--mail .btn--danger, .screen--mail .btn--primary,
.screen--chat .btn--danger, .screen--chat .btn--primary,
.screen--quests .btn--danger, .screen--quests .btn--primary,
.screen--ach .btn--danger, .screen--ach .btn--primary,
.screen--calendar .btn--danger, .screen--calendar .btn--primary,
.screen--lb .btn--danger, .screen--lb .btn--primary,
.screen--tourn .btn--danger, .screen--tourn .btn--primary,
.screen--nick .btn--danger, .screen--nick .btn--primary,
.screen--settings .btn--danger, .screen--settings .btn--primary,
.screen--vip .btn--danger, .screen--vip .btn--primary,
.screen--help .btn--danger, .screen--help .btn--primary,
.screen--rules .btn--danger, .screen--rules .btn--primary,
.screen--mod .btn--danger, .screen--mod .btn--primary,
.screen--admin .btn--danger, .screen--admin .btn--primary,
.screen--notify .btn--danger, .screen--notify .btn--primary,
.screen--friends .btn--danger, .screen--friends .btn--primary,
.screen--cosmetics .btn--danger, .screen--cosmetics .btn--primary,
.screen--magic .btn--danger, .screen--magic .btn--primary,
.screen--ranged .btn--danger, .screen--ranged .btn--primary {
  color: #fff; background: linear-gradient(160deg, #ff6a7d 0%, #c11a35 45%, #6f0016 100%);
  border: 1px solid rgba(0,0,0,.6);
  box-shadow: inset 0 1px 0 rgba(255,255,255,.4), inset 0 -3px 5px rgba(0,0,0,.35), 0 2px 4px rgba(0,0,0,.5);
  text-shadow: 0 1px 1px rgba(0,0,0,.55);
}
/* СТ-13: primary на тех же экранах — «золото» (danger остаётся «рубином» правилом выше). */
:is(.screen--arena, .screen--outskirts, .screen--spectate, .screen--inv, .screen--shop, .screen--bank,
    .screen--bldg, .screen--altar, .screen--clan, .screen--faction, .screen--mail, .screen--chat,
    .screen--quests, .screen--ach, .screen--calendar, .screen--lb, .screen--tourn, .screen--nick,
    .screen--settings, .screen--vip, .screen--help, .screen--rules, .screen--mod, .screen--admin,
    .screen--notify, .screen--friends, .screen--cosmetics, .screen--magic, .screen--ranged) .btn--primary {
  color: #241600; background: linear-gradient(160deg, #ffe08a 0%, #cf9a22 45%, #7d5600 100%);
  text-shadow: 0 1px 0 rgba(255,255,255,.4);
}
.screen--arena .btn--danger:hover, .screen--arena .btn--primary:hover,
.screen--outskirts .btn--danger:hover, .screen--outskirts .btn--primary:hover,
.screen--spectate .btn--danger:hover, .screen--spectate .btn--primary:hover,
.screen--inv .btn--danger:hover, .screen--inv .btn--primary:hover,
.screen--shop .btn--danger:hover, .screen--shop .btn--primary:hover,
.screen--bank .btn--danger:hover, .screen--bank .btn--primary:hover,
.screen--bldg .btn--danger:hover, .screen--bldg .btn--primary:hover,
.screen--altar .btn--danger:hover, .screen--altar .btn--primary:hover,
.screen--clan .btn--danger:hover, .screen--clan .btn--primary:hover,
.screen--faction .btn--danger:hover, .screen--faction .btn--primary:hover,
.screen--mail .btn--danger:hover, .screen--mail .btn--primary:hover,
.screen--chat .btn--danger:hover, .screen--chat .btn--primary:hover,
.screen--quests .btn--danger:hover, .screen--quests .btn--primary:hover,
.screen--ach .btn--danger:hover, .screen--ach .btn--primary:hover,
.screen--calendar .btn--danger:hover, .screen--calendar .btn--primary:hover,
.screen--lb .btn--danger:hover, .screen--lb .btn--primary:hover,
.screen--tourn .btn--danger:hover, .screen--tourn .btn--primary:hover,
.screen--nick .btn--danger:hover, .screen--nick .btn--primary:hover,
.screen--settings .btn--danger:hover, .screen--settings .btn--primary:hover,
.screen--vip .btn--danger:hover, .screen--vip .btn--primary:hover,
.screen--help .btn--danger:hover, .screen--help .btn--primary:hover,
.screen--rules .btn--danger:hover, .screen--rules .btn--primary:hover,
.screen--mod .btn--danger:hover, .screen--mod .btn--primary:hover,
.screen--admin .btn--danger:hover, .screen--admin .btn--primary:hover,
.screen--notify .btn--danger:hover, .screen--notify .btn--primary:hover,
.screen--friends .btn--danger:hover, .screen--friends .btn--primary:hover,
.screen--cosmetics .btn--danger:hover, .screen--cosmetics .btn--primary:hover,
.screen--magic .btn--danger:hover, .screen--magic .btn--primary:hover,
.screen--ranged .btn--danger:hover, .screen--ranged .btn--primary:hover { filter: brightness(1.1); }
/* Кнопки зданий/Алтаря/кланов/фракций — компактные (не растягиваем .row > * { flex:1 }). */
.screen--bldg .row > .btn, .screen--altar .row > .btn, .screen--clan .row > .btn, .screen--faction .row > .btn,
.screen--mail .row > .btn, .screen--chat .row > .btn, .screen--quests .row > .btn, .screen--ach .row > .btn, .screen--calendar .row > .btn,
.screen--quests .row > .chip, .screen--ach .row > .chip, .screen--calendar .row > .chip,
.screen--chat .row > .chip,
.screen--lb .row > .btn, .screen--lb .row > .chip, .screen--tourn .row > .btn, .screen--tourn .row > .chip,
.screen--nick .row > .btn, .screen--settings .row > .btn, .screen--vip .row > .btn, .screen--vip .row > .chip,
.screen--help .row > .btn, .screen--rules .row > .btn, .screen--mod .row > .btn, .screen--mod .row > .chip,
.screen--admin .row > .btn, .screen--notify .row > .btn, .screen--notify .row > .chip, .screen--friends .row > .btn { flex: 0 0 auto; }

/* --- Шаг 17: ЗДАНИЯ и ЛЕЧЕБНИЦА (building.js) — приёмная смотрителя --- */
.screen--bldg .bldg__title, .screen--altar .bldg__title { font: 700 16px var(--et-font-display); letter-spacing: 1px; color: var(--et-head); margin: 0; }
/* Карточка смотрителя-НПЦ: светлый «кабинет» с бордовым кантом, имя красным Georgia, речь курсивом. */
.npc {
  display: flex; gap: 10px; align-items: flex-start;
  background: #f6f6f6; border: 1px solid #c8c8c8; border-left: 3px solid #7c1d1d;
  padding: 8px 10px; margin: 8px 0;
}
.npc__name { font: 700 13px var(--et-font-display); color: var(--et-head); margin-bottom: 3px; }
.npc__line { font-style: italic; color: #3a3a3a; margin: 2px 0; font-size: 12px; }

/* --- Шаг 17: АЛТАРЬ СОЗДАТЕЛЯ — устав, полоса HP с ускорением, чат-обращения --- */
.screen--altar .altar__rules { margin: 2px 0 2px 18px; font-size: 12px; line-height: 1.7; }
.screen--altar .altar__bar { height: 14px; border: 1px solid var(--et-bars-edge); background: #222; position: relative; overflow: hidden; }
.screen--altar .altar__bar-fill { position: absolute; inset: 1px auto 1px 1px; background: linear-gradient(var(--et-hp-1), var(--et-hp-2)); }
.screen--altar .altar__feed {
  background: var(--et-chat-bg); border: 1px solid #b5a9a9; padding: 5px 9px;
  max-height: 220px; overflow-y: auto; scrollbar-width: thin; font-size: .85rem; line-height: 1.55;
}
.screen--altar .altar__compose { display: flex; gap: 6px; margin-top: 6px; }
.screen--altar .altar__compose .field__input, .screen--altar .field__input {
  min-height: auto; padding: 6px 9px; border-radius: 0; background: #fff; border: 1px solid #8a8a8a; font-size: .9rem;
}
.screen--altar .altar__grid { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; align-items: start; }
@media (max-width: 760px) { .screen--altar .altar__grid { grid-template-columns: 1fr; } }
.screen--altar .altar__who { display: flex; flex-direction: column; gap: 2px; font-size: 12px; }

/* --- Шаг 18: ФРАКЦИИ — кредо, полосы влияния, реестры таблицами --- */
.screen--faction .faction__title { font: 700 16px var(--et-font-display); letter-spacing: 1px; color: var(--et-head); }
.screen--faction .faction__credo { font-style: italic; color: #3a3a3a; }
.warbar__track { height: 14px; border: 1px solid #6f6f6f; background: #dcdcdc; border-radius: 0; overflow: hidden; }
.warbar__fill { height: 100%; }
.warbar__name { font: 700 12px var(--et-font-display); }
.screen--faction .faction__joinrow, .screen--faction .faction__rosterrow,
.screen--faction .faction__shoprow, .screen--faction .faction__rankrow, .screen--faction .faction__officer {
  border-bottom: 1px solid #d9d9d9; padding: 5px 8px;
}
.screen--faction .faction__joinrow:nth-child(even), .screen--faction .faction__rosterrow:nth-child(even),
.screen--faction .faction__shoprow:nth-child(even), .screen--faction .faction__rankrow:nth-child(even) { background: #ececec; }
.screen--faction .faction__jname, .screen--faction .faction__shopname { font: 700 12px var(--et-font-display); color: var(--et-link); }
.screen--faction .faction__warn { color: #a11f1f; font-weight: 700; }

/* --- Шаг 18: КЛАНЫ — состав/топ/приглашения таблицами-зебрами --- */
.screen--clan .clan__mrow, .screen--clan .clan__toprow, .screen--clan .clan__inviterow {
  border-bottom: 1px solid #d9d9d9; padding: 5px 8px;
}
.screen--clan .clan__mrow:nth-child(even), .screen--clan .clan__toprow:nth-child(even) { background: #ececec; }
.screen--clan .clan__mname, .screen--clan .clan__topname, .screen--clan .clan__invname { font: 700 12px var(--et-font-display); color: var(--et-link); }
.screen--clan .clan__mrole { color: #5a5a5a; font-size: 11px; text-transform: uppercase; }
.screen--clan .clan__toprank { color: #5a5a5a; font-weight: 700; }

/* --- Шаг 19: ПОЧТА — реестр писем таблицей-зеброй, письмо и вложение на бумаге --- */
.screen--mail .mail__title { font: 700 16px var(--et-font-display); letter-spacing: 1px; color: var(--et-head); }
.screen--mail .mail__list { gap: 0; border: 1px solid #c8c8c8; background: #f6f6f6; }
.screen--mail .mail__row { border-bottom: 1px solid #d9d9d9; padding: 6px 9px; }
.screen--mail .mail__row:last-child { border-bottom: none; }
.screen--mail .mail__row:nth-child(even) { background: #ececec; }
.screen--mail .mail__row:hover { background: #e4e0d6; }
.screen--mail .mail__subj { font: 12px var(--et-font-display); color: var(--et-link); }
.screen--mail .mail__row.is-unread .mail__subj { font-weight: 700; }
.screen--mail .mail__vsubj { font: 700 15px var(--et-font-display); color: var(--et-head); letter-spacing: .5px; }
/* Вложение (деньги/предмет) — «вкладыш» с бордовым кантом, как карточка НПЦ. */
.screen--mail .mail__attach { background: #f6f6f6; border: 1px solid #c8c8c8; border-left: 3px solid #7c1d1d; border-radius: 0; }
.screen--mail .field__input { min-height: auto; padding: 6px 9px; border-radius: 0; background: #fff; border: 1px solid #8a8a8a; font-size: .9rem; }

/* --- Шаг 19: ОБЩЕНИЕ — лента на «розовой бумаге» чата, диалоги зеброй, кассовое поле ввода --- */
.screen--chat .chat__title { font: 700 16px var(--et-font-display); letter-spacing: 1px; color: var(--et-head); }
.screen--chat .chat__feed { background: var(--et-chat-bg); border: 1px solid #b5a9a9; border-radius: 0; scrollbar-width: thin; }
.screen--chat .chat__input { min-height: auto; padding: 6px 9px; border-radius: 0; background: #fff; border: 1px solid #8a8a8a; font-size: .9rem; }
.screen--chat .chat__cityname { font: 700 14px var(--et-font-display); color: var(--et-head); letter-spacing: .5px; }
.screen--chat .chat__convoname { font-family: var(--et-font-display); }
.screen--chat .chat__dialogs { gap: 0; border: 1px solid #c8c8c8; background: #f6f6f6; }
.screen--chat .chat__dialog { border: 0; border-bottom: 1px solid #d9d9d9; border-radius: 0; background: transparent; padding: 6px 9px; }
.screen--chat .chat__dialog:last-child { border-bottom: none; }
.screen--chat .chat__dialog:nth-child(even) { background: #ececec; }
.screen--chat .chat__dialog:hover { background: #e4e0d6; }
.screen--chat .chat__dialogname { font: 700 12px var(--et-font-display); color: var(--et-link); }

/* --- Шаг 19: ТЕЛЕПАТИЯ — «лист мысли»: мой белый, собеседника — розовая бумага; входящие с кантом --- */
.screen--chat .tele__inrow { background: #f6f6f6; border: 1px solid #c8c8c8; border-left: 3px solid #7c1d1d; border-radius: 0; }
.screen--chat .tele__field { border-radius: 0; }
.screen--chat .tele__field--mine { background: #fff; border: 1px solid #8a8a8a; }
.screen--chat .tele__field--peer { background: var(--et-chat-bg); border: 1px dashed #b5a9a9; }
.screen--chat .tele__lbl { font: 700 11px var(--et-font-display); letter-spacing: .4px; color: #5a5a5a; text-transform: uppercase; }
.screen--chat .tele__img { border-radius: 0; background: #f6f6f6; border-color: #c8c8c8; }
.screen--chat .tele__imgpic, .screen--chat .chat__msg--img .chat__imgpic { border-radius: 0; border: 1px solid #8a8a8a; }

/* --- Шаг 20: КВЕСТЫ — карточки на светлой бумаге, кант слева = состояние (готов/доступен) --- */
.screen--quests .faction__title, .screen--ach .faction__title, .screen--calendar .faction__title,
.screen--settings .faction__title, .screen--notify .faction__title, .screen--friends .faction__title {
  font: 700 16px var(--et-font-display); letter-spacing: 1px; color: var(--et-head); margin: 0;
}
.screen--quests .quest { background: #f6f6f6; border: 1px solid #c8c8c8; border-left: 3px solid #8a8a8a; border-radius: 0; }
.screen--quests .quest--ready { border-color: #c8c8c8; border-left-color: var(--et-win); }
.screen--quests .quest--available { border-left-color: #7c1d1d; }
.screen--quests .quest__title { font: 700 13px var(--et-font-display); color: var(--et-head); }
.screen--quests .quest__obj.is-done { color: var(--et-win); }
.screen--quests .quest__reward { color: #7a5c14; font-weight: 700; }

/* --- Шаг 20: ДОСТИЖЕНИЯ — плитки на бумаге; открытое — бордовый кант, легендарное — золотой --- */
.screen--ach .ach { background: #f6f6f6; border: 1px solid #c8c8c8; border-radius: 0; }
.screen--ach .ach.is-unlocked { border-left: 3px solid #7c1d1d; }
.screen--ach .ach.is-unlocked.ach--rare { border-color: #c8c8c8; border-left-color: #8a6d1a; }
.screen--ach .ach.is-unlocked.ach--legend { border-color: #8a6d1a; border-left: 3px solid #8a6d1a; box-shadow: 0 0 6px rgba(176,141,54,.45); }
.screen--ach .ach__title { font: 700 13px var(--et-font-display); color: var(--et-head); }

/* --- Шаг 20: КАЛЕНДАРЬ — 14 клеток-«листков»; следующий день — бордовая рамка; отметка зелёная --- */
.screen--calendar .cal__cell { background: #f6f6f6; border: 1px solid #c8c8c8; border-radius: 0; }
.screen--calendar .cal__cell--next { border-color: #7c1d1d; box-shadow: inset 0 0 0 1px #7c1d1d; }
.screen--calendar .cal__daynum { font: 700 11px var(--et-font-display); letter-spacing: .4px; color: #5a5a5a; text-transform: uppercase; }
.screen--calendar .cal__check { color: var(--et-win); }
.screen--calendar .cal__rew--cos { color: #8a6d1a; }

/* === Фаза C, шаг 21: РЕЙТИНГИ — «как рейтинг combats»: тёмно-красная шапка таблицы, зебра === */
.screen--lb .lb__table { border: 1px solid #c8c8c8; background: #f6f6f6; }
.screen--lb .lb__row { border-bottom: 1px solid #d9d9d9; padding: 5px 9px; border-radius: 0; }
.screen--lb .lb__row:last-child { border-bottom: none; }
.screen--lb .lb__row:nth-child(even) { background: #ececec; }
.screen--lb .lb__row--head {
  background: linear-gradient(#9e2727, #7c1d1d); border-bottom: 1px solid #5c1414;
  font-family: var(--et-font-display); letter-spacing: .6px;
}
.screen--lb .lb__row--head > * { color: #f4e9dc; text-shadow: 0 1px 1px rgba(0,0,0,.7); }
.screen--lb .lb__row.is-me { background: #f3e6e6; box-shadow: inset 3px 0 0 #7c1d1d; }
.screen--lb .lb__row--top { background: #f5eed7; }
.screen--lb .lb__row--top:nth-child(even) { background: #efe6c8; }
.screen--lb .lb__name.linklike { font: 700 12px var(--et-font-display); color: var(--et-link); }
.screen--lb .lb__rating { color: #1c1c1c; }
.screen--lb .lb__brbtn { padding: 3px 8px; font-size: 11px; }
/* СТ-19: окна рейтинга сужены (левая грань на месте, правая — по кнопке «91–100»);
   кнопки категорий — сеткой 6 колонок («Все категории» = 2 клетки), обе строки заканчиваются
   ровно на правой грани окон при любой ширине. Строка «Моего рейтинга» — по центру между шапками. */
.screen--lb .panel { max-width: 620px; }
.screen--lb .lb__brackets { display: grid; grid-template-columns: repeat(6, minmax(0, 1fr)); gap: 6px; }
.screen--lb .lb__brackets > .btn:first-child { grid-column: span 2; }
.screen--lb .lb__brackets .lb__brbtn { padding-left: 3px; padding-right: 3px; }
.screen--lb .lb__me { margin: 15px 0 0; }
/* СТ-19.1: шапка таблицы без капса («Рейтинг», не «РЕЙТИНГ»); колонки Ур./Рейтинг/П/П прижаты
   влево — значение начинается под первой буквой заголовка (и «Ур.» уходит левее от «Рейтинга»). */
.screen--lb .lb__row--head { text-transform: none; letter-spacing: .2px; }
.screen--lb .lb__lvl, .screen--lb .lb__rating, .screen--lb .lb__wl { text-align: left; }
/* СТ-19.2: «Рейтинг» в бордовой шапке — белым (правило .lb__rating красило его в тёмный);
   жирным — только первые 3 места (ряды с медалями), остальные ряды обычным шрифтом. */
.screen--lb .lb__row--head .lb__rating { color: #fff; }
.screen--lb .lb__row:not(.lb__row--top):not(.lb__row--head) > * { font-weight: 400; }
/* СТ-19.3: «Ур.» и «П/П» — жирным в шапке и в рядах топ-3 (в ряд к остальным жирным колонкам). */
.screen--lb .lb__row--head .lb__lvl, .screen--lb .lb__row--head .lb__wl,
.screen--lb .lb__row--top .lb__lvl, .screen--lb .lb__row--top .lb__wl { font-weight: 700; }
/* СТ-19.4: номера мест слева и цифры Ур./Рейтинг/П-П — мельче (медали топ-3 не трогаем). */
.screen--lb .lb__row:not(.lb__row--head):not(.lb__row--top) .lb__rank { font-size: .75rem; }
.screen--lb .lb__row:not(.lb__row--head) :is(.lb__lvl, .lb__rating, .lb__wl) { font-size: .75rem; }

/* --- Шаг 21: ТУРНИРЫ — список на бумаге, сетка: матчи-«вкладыши», победитель зелёным --- */
.screen--tourn .tourn-list { gap: 0; border: 1px solid #c8c8c8; background: #f6f6f6; }
.screen--tourn .tourn-row { border: 0; border-bottom: 1px solid #d9d9d9; border-radius: 0; background: transparent; padding: 7px 10px; }
.screen--tourn .tourn-row:last-child { border-bottom: none; }
.screen--tourn .tourn-row:nth-child(even) { background: #ececec; }
.screen--tourn .tourn-row__name { font: 700 13px var(--et-font-display); color: var(--et-head); }
.screen--tourn .br-round__title { font: 700 11px var(--et-font-display); letter-spacing: .5px; color: #5a5a5a; text-transform: uppercase; }
.screen--tourn .br-match { background: #f6f6f6; border: 1px solid #c8c8c8; border-radius: 0; }
.screen--tourn .br-side { font-family: var(--et-font-display); font-size: 12px; }
.screen--tourn .br-side--link { color: var(--et-link); font-weight: 700; }
.screen--tourn .br-side--won, .screen--tourn .br-side--won.br-side--link { color: var(--et-win); font-weight: 800; }

/* === Фаза C, шаг 22: ВХОД/РЕГИСТРАЦИЯ/ВОССТАНОВЛЕНИЕ — каменная рамка, золотой логотип === */
.screen--auth { max-width: 470px; margin: 34px auto 0; }
.screen--auth.screen--create { max-width: 720px; }   /* создание персонажа шире (образы/пол) — шаг 23 */
.screen--auth .panel {
  background: var(--et-stone); border: 1px solid #3a3a3a; border-radius: 3px;
  box-shadow: var(--et-stone-shadow), 0 5px 16px rgba(0,0,0,.3);
  padding: 2px 9px 9px;
}
/* Название игры — золотой логотип эталона (градиентный текст) по центру каменной шапки. */
.screen--auth .panel__title {
  border: 0; text-align: center; padding: 11px 6px 9px;
  font: 700 21px var(--et-font-display); letter-spacing: 2.5px; text-transform: uppercase;
  background: linear-gradient(var(--et-gold-hi), var(--et-gold-mid) 55%, var(--et-gold-lo));
  -webkit-background-clip: text; background-clip: text; color: transparent; text-shadow: none;
}
.screen--auth .panel__body { background: var(--et-paper); border: 1px solid #6f6f6f; border-radius: 0; padding: 16px 18px 18px; }
.screen--auth .field__input {
  min-height: auto; padding: 8px 10px; border-radius: 0;
  background: #fff; border: 1px solid #8a8a8a; font-size: .92rem;
}
/* Главная кнопка (Войти/Создать/Отправить) — крупная бордовая плита во всю ширину формы. */
.screen--auth .btn[type="submit"], .screen--auth .btn--primary {
  min-height: auto; padding: 9px 16px; border-radius: 2px;
  font: 700 13px var(--et-font-display); letter-spacing: 1px;
  color: #241600; background: linear-gradient(160deg, #ffe08a 0%, #cf9a22 45%, #7d5600 100%);  /* СТ-13: золото */
  border: 1px solid rgba(0,0,0,.6);
  box-shadow: inset 0 1px 0 rgba(255,255,255,.4), inset 0 -3px 5px rgba(0,0,0,.35), 0 2px 4px rgba(0,0,0,.5);
  text-shadow: 0 1px 0 rgba(255,255,255,.4);
}
.screen--auth .btn[type="submit"]:hover, .screen--auth .btn--primary:hover { filter: brightness(1.1); }
/* Второстепенные ссылки-кнопки (Регистрация/Забыли пароль/Назад) — серые плиты. */
.screen--auth .btn--ghost {
  min-height: auto; padding: 4px 12px; border-radius: 2px;
  font: 700 11px var(--et-font-display); letter-spacing: .4px;
  color: var(--et-stone-ink);
  background: linear-gradient(var(--et-plate-1), var(--et-plate-2));
  border: 1px solid var(--et-plate-edge);
  box-shadow: inset 0 1px 0 rgba(255,255,255,.35); text-shadow: 0 1px 0 rgba(255,255,255,.3);
}
.screen--auth .btn--ghost:hover { background: linear-gradient(var(--et-plate-1-h), var(--et-plate-2-h)); }

/* === Фаза C, шаг 23: СОЗДАНИЕ БОЙЦА — сегмент пола, витрина образов, город-модалка === */
.screen--create .gender-seg, .screen--settings .gender-seg { border: 1px solid var(--et-plate-edge); border-radius: 2px; align-self: flex-start; }
.screen--create .gender-seg__btn, .screen--settings .gender-seg__btn {
  font: 700 12px var(--et-font-display); letter-spacing: .4px; padding: 6px 18px;
  color: var(--et-stone-ink); background: linear-gradient(var(--et-plate-1), var(--et-plate-2));
  text-shadow: 0 1px 0 rgba(255,255,255,.3);
}
.screen--create .gender-seg__btn.is-active, .screen--settings .gender-seg__btn.is-active {
  color: #fff; background: linear-gradient(#a83232, #7c1d1d); text-shadow: 0 -1px 1px rgba(0,0,0,.6);
}
.screen--create .avatar-cell { border-radius: 0; background: #fff; border: 1px solid #c8c8c8; }
.screen--create .avatar-cell.is-selected { border-color: #7c1d1d; box-shadow: inset 0 0 0 2px #7c1d1d; }
.screen--create .field__label { font: 700 11px var(--et-font-display); letter-spacing: .5px; color: #5a5a5a; text-transform: uppercase; }
/* Модалка «родной город» живёт вне экрана — глобальные классы. */
.city-reveal__name { font-family: var(--et-font-display); color: var(--et-head); letter-spacing: 1px; }

/* --- Шаг 23: ИМЕНОВАНИЕ/ЗАЯВКА НА НИК (nickclaim) — код-вкладыш с бордовым пунктиром --- */
.screen--nick .nick__name { font: 800 18px var(--et-font-display); color: var(--et-head); letter-spacing: .5px; }
.screen--nick .nick__code { background: #f6f6f6; border: 1px dashed #7c1d1d; border-radius: 0; }
.screen--nick .nick__codeval { color: var(--et-head); }

/* === Фаза C, шаг 24: НАСТРОЙКИ — секции с бордовыми шапками, карточки сессий/устройств === */
.screen--settings .settings__subhead { font: 700 13px var(--et-font-display); letter-spacing: .5px; color: var(--et-head); }
.screen--settings .settings__field-label { font: 700 11px var(--et-font-display); letter-spacing: .4px; color: #5a5a5a; text-transform: uppercase; }
.screen--settings .settings__sess { background: #f6f6f6; border: 1px solid #c8c8c8; border-radius: 0; }
.screen--settings .settings__avatar, .screen--settings .settings__cos { border-radius: 0; background: #fff; border: 1px solid #c8c8c8; }
.screen--settings .settings__avatar.is-active, .screen--settings .settings__cos.is-active { border-color: #7c1d1d; box-shadow: inset 0 0 0 1px #7c1d1d; }
.screen--settings .field__input { min-height: auto; padding: 6px 9px; border-radius: 0; background: #fff; border: 1px solid #8a8a8a; font-size: .9rem; }
/* СТ-48 (заказчик 2026-08-16): форма смены пароля — как окно Банка (те же отступы и текст):
   подпись 11px, поле высотой 21px, межстрочный зазор 12px, слот ошибки схлопнут пока пуст. */
.screen--settings .settings__pwform .field__label { font-size: 11px; }
.screen--settings .settings__pwform .field__input { padding: 0 9px; height: 21px; line-height: 19px; font-size: .8rem; }
.screen--settings .settings__pwform .field__input[type="password"] { letter-spacing: 4px; font-weight: 700; }
.screen--settings .settings__pwform .field { margin-bottom: 12px; }
.screen--settings .settings__pwform .field__label { margin-bottom: 4px; }
.screen--settings .settings__pwform .field__error { min-height: 0; margin-top: 0; }
.screen--settings .settings__pwform .field__error:not(:empty) { margin-top: 4px; }
/* Одиночные кнопки в полях настроек не тянутся на всю ширину; образы — компактной витриной. */
.screen--settings .settings__field > .btn { align-self: flex-start; }
.screen--settings .settings__avatars { grid-template-columns: repeat(auto-fill, minmax(90px, 1fr)); }
/* Резервные коды 2FA — «квитанции» на бумаге (модалка вне экрана — глобально). */
.codes__item { background: #f6f6f6; border: 1px solid #c8c8c8; border-radius: 0; color: #1c1c1c; }

/* --- Шаг 24: VIP-магазин — витрина расходников удалена в Ф5 (минуты — у «Сотового оператора») --- */

/* === Фаза C, шаг 25: ЗНАНИЯ/ПОМОЩЬ + ПРАВИЛА — читальный лист, вкладки-ярлыки === */
.screen--help .rules__list, .screen--rules .rules__list { font-size: 13px; line-height: 1.65; }
.screen--help .rules__list li::marker, .screen--rules .rules__list li::marker { color: var(--et-head); font-weight: 700; }

/* --- Шаг 25: МОДЕРАЦИЯ — жалобы карточками с бордовым кантом, цитата курсивом --- */
.screen--mod .mod__title { font: 700 16px var(--et-font-display); letter-spacing: 1px; color: var(--et-head); }
.screen--mod .mod__report { background: #f6f6f6; border: 1px solid #c8c8c8; border-left: 3px solid #7c1d1d; border-radius: 0; }
.screen--mod .mod__rtarget { font-family: var(--et-font-display); color: var(--et-link); }
.screen--mod .field__input { min-height: auto; padding: 6px 9px; border-radius: 0; background: #fff; border: 1px solid #8a8a8a; font-size: .9rem; }

/* --- Шаг 25: АДМИНКА — сводка «камни-показатели», реестры зебрами --- */
.screen--admin .admin__stat { background: #f6f6f6; border: 1px solid #c8c8c8; border-radius: 0; }
.screen--admin .admin__stat-v { color: var(--et-head); font-family: var(--et-font-display); }
.screen--admin .admin__row, .screen--admin .admin__req { border-bottom: 1px solid #d9d9d9; }
.screen--admin .admin__row:nth-child(even), .screen--admin .admin__req:nth-child(even) { background: #ececec; }
.screen--admin .admin__row--btn:hover { background: #e4e0d6; }
.screen--admin .field__input, .screen--admin select { min-height: auto; padding: 6px 9px; border-radius: 0; background: #fff; border: 1px solid #8a8a8a; font-size: .9rem; }

/* === Фаза C, шаг 26: УВЕДОМЛЕНИЯ — лента зеброй, непрочитанное — бордовая точка на розовом === */
.screen--notify .notify__row { border-bottom: 1px solid #d9d9d9; padding: 8px 9px; }
.screen--notify .notify__row:nth-child(even) { background: #ececec; }
.screen--notify .notify__row:hover { background: #e4e0d6; }
.screen--notify .notify__row.is-unread { background: #f3e6e6; }
.screen--notify .notify__row.is-unread .notify__text { font-weight: 700; }
.screen--notify .notify__dot.is-unread { background: #7c1d1d; }

/* --- Шаг 26: ДРУЗЬЯ — список зеброй, имена синим Georgia, онлайн-точка эталонной зелёной --- */
.screen--friends .friend__row { border-bottom: 1px solid #d9d9d9; padding: 6px 9px; }
.screen--friends .friend__row:nth-child(even) { background: #ececec; }
.screen--friends .friend__name { font: 700 12px var(--et-font-display); color: var(--et-link); }
.screen--friends .friend__dot.is-online { background: var(--et-win); box-shadow: 0 0 4px var(--et-win); }

/* --- Шаг 15: МАГАЗИН — заголовок красным Georgia, вкладки-ярлыки, товар таблицей-зеброй --- */
.screen--shop .shop__title { font: 700 16px var(--et-font-display); letter-spacing: 1px; color: var(--et-head); }
.screen--shop .tabs, .screen--mail .tabs, .screen--chat .tabs, .screen--help .tabs { gap: 2px; border-bottom: 1px solid #7c868f; }
.screen--shop .tabs__item, .screen--mail .tabs__item, .screen--chat .tabs__item, .screen--help .tabs__item {
  min-height: auto; padding: 4px 13px; border-radius: 2px 2px 0 0;
  font: 700 11px var(--et-font-display); letter-spacing: .4px; color: #243040;
  background: linear-gradient(#cfd6dd, #aeb8c2); border: 1px solid #7c868f; border-bottom: none;
}
.screen--shop .tabs__item.is-active, .screen--mail .tabs__item.is-active, .screen--chat .tabs__item.is-active, .screen--help .tabs__item.is-active { background: linear-gradient(#fff, #e4e9ee); color: var(--et-head); }
.screen--shop .shop__content { gap: 0; border: 1px solid #c8c8c8; background: #f6f6f6; }
.screen--shop .shop__content > .muted { padding: 6px 9px; margin: 0; border-bottom: 1px solid #d9d9d9; }
.screen--shop .shop__row { border-bottom: 1px solid #d9d9d9; border-radius: 0; padding: 6px 9px; }
.screen--shop .shop__row:last-child { border-bottom: none; }
.screen--shop .shop__row:nth-of-type(even) { background: #ececec; }
.screen--shop .shop__row:hover { background: #e4e0d6; }
.screen--shop .shop__name { font: 700 12px var(--et-font-display); color: var(--et-link); }
.screen--shop .shop__price { color: #1c1c1c; font-weight: 700; }

/* Чипы шапки и кнопки-плиты магазина/банка НЕ растягиваются (гасим глобальный .row > * { flex:1 }). */
.screen--shop .shop__bar .chip, .screen--bank .bank__bar .chip { flex: 0 0 auto; }
.screen--shop .row > .btn, .screen--bank .row > .btn { flex: 0 0 auto; }

/* --- Шаг 16: БАНК — заголовок красным, операции секциями, журнал таблицей-зеброй --- */
.screen--bank .bank__title { font: 700 16px var(--et-font-display); letter-spacing: 1px; color: var(--et-head); }
.screen--bank .bank__log { border: 1px solid #c8c8c8; background: #f6f6f6; }
.screen--bank .bank__logrow { border-bottom: 1px solid #d9d9d9; padding: 5px 9px; }
.screen--bank .bank__logrow:last-child { border-bottom: none; }
.screen--bank .bank__logrow:nth-child(even) { background: #ececec; }
.screen--bank .bank__logamt { color: #1c1c1c; font-weight: 700; }
.screen--bank .bank__logkind { color: #5a5a5a; font-family: var(--et-font-display); }
.screen--bank .bank__locked { color: #a11f1f; font: 700 13px var(--et-font-display); }
/* СТ-19.5: банк структурирован как «Рейтинг» — левая грань окон на месте, правая по 620px
   (панели операций/журнал/шапка с чипами/примечание о комиссии — одна правая вертикаль). */
.screen--bank .panel, .screen--bank .bank__bar, .screen--bank > .muted { max-width: 620px; }
/* СТ-19.6: Турниры и Смотреть бой — как «Рейтинг»: окна до 620px, кнопки компактные плиты. */
.screen--tourn .panel, .screen--spectate .panel { max-width: 620px; }
.screen--spectate .row > .btn { flex: 0 0 auto; }
/* СТ-19.7: Арена и Окраины — так же. */
.screen--arena .panel, .screen--outskirts .panel { max-width: 620px; }
.screen--arena .row > .btn, .screen--outskirts .row > .btn { flex: 0 0 auto; }
/* СТ-19.8: Арена/Окраины/Банк/Рейтинг/Турниры/Смотреть бой — окна ПО ЦЕНТРУ листа
   (равные поля слева и справа); нижние ряды кнопок — той же ширины и тоже по центру. */
:is(.screen--arena, .screen--outskirts, .screen--bank, .screen--lb, .screen--tourn, .screen--spectate) .panel,
.screen--bank .bank__bar, .screen--bank > .muted { margin-inline: auto; }
:is(.screen--arena, .screen--outskirts, .screen--bank, .screen--lb, .screen--tourn, .screen--spectate) > .row {
  max-width: 620px; margin-inline: auto;
}
/* СТ-19.9: чип «Счёт: N фишек» в шапке банка — тот же вид, что чип «При себе», но СИНИЙ. */
.screen--bank .bank__bar .chip--money { background: #2f5f9e; border: 0; color: #fff; }
/* СТ-19.10: банк — пояснения (комиссия, интро пин-кода) и подписи полей мельче. */
.screen--bank .muted, .screen--bank .field__label { font-size: 11px; }
/* СТ-19.11: «Банк» — золотая пилюля с шёлковым отливом в один ряд/уровень с чипами счёта;
   примечание о комиссии — сразу под ней, вплотную, без наслоений. */
.screen--bank .bank__bar { align-items: center; margin-top: 4px; }
.screen--bank .bank__title {
  font: 700 14px var(--et-font-display); letter-spacing: .6px; color: #241600;
  padding: 3px 14px; border-radius: 999px;
  /* шёлк: мягкие косые блики поверх золотой заливки (без зерна алькантары) */
  background:
    linear-gradient(115deg, rgba(255,255,255,.5) 0%, rgba(255,255,255,0) 28%, rgba(255,255,255,.22) 46%, rgba(255,255,255,0) 62%, rgba(255,255,255,.32) 100%),
    linear-gradient(160deg, #ffe08a 0%, #cf9a22 55%, #9a6d10 100%);
  border: 1px solid rgba(0,0,0,.45);
  box-shadow: inset 0 1px 0 rgba(255,255,255,.5), 0 1px 2px rgba(0,0,0,.35);
  text-shadow: 0 1px 0 rgba(255,255,255,.35);
}
.screen--bank > .muted { margin-top: 4px; margin-bottom: 8px; padding-left: 16px; }
/* СТ-19.12: операции банка сеткой 2 колонки — «Вклад» слева, «Снятие» справа от него;
   остальное (установка/смена пин-кода, перевод, блокировка) — во всю ширину ниже. */
.screen--bank .bank__content {
  display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 12px 14px; /* СТ-19.30: третья колонка под смену пин-кода */
  max-width: 620px; margin-inline: auto;
}
/* СТ-70.1 (заказчик 2026-08-26): панель-ячейка сетки НЕ ужимается по содержимому — auto-поля .screen--bank .panel
   в grid-ячейке «съедали» свободное место, и окно с коротким текстом («Сложная работа» у Штыря, «Кто здесь» в жилье)
   выходило уже соседей. Для ячеек поля обнуляем: центрует сама .bank__content (max-width + auto). */
.screen--bank .bank__content > * { grid-column: 1 / -1; min-width: 0; margin-inline: 0; }
.screen--bank .bank__content > .bank__panel--dep { grid-column: 1; }
.screen--bank .bank__content > .bank__panel--wd { grid-column: 2; }
.screen--bank .bank__content > .bank__panel--pin { grid-column: 3; }
/* СТ-53: «Подработка у Штыря» — 4 задания сеткой 2×2 (простое ↖, посложнее ↗, сложное ↙, самое сложное ↘). */
/* СТ-53.2/53.3: ряды одинаковой высоты (1fr), панели растянуты, внутренности — колонкой
   с ПРИЖАТЫМ К НИЗУ действием (кнопка/таймер): все четыре окна одного размера и одного
   строя независимо от длины сюжета — ничего не «съезжает». */
.screen--oddjobs .bank__content { grid-template-columns: 1fr 1fr; grid-auto-rows: 1fr; }
.screen--oddjobs .bank__content > * { grid-column: auto; }
.screen--oddjobs .bank__content .panel { display: flex; flex-direction: column; }
.screen--oddjobs .bank__content .panel__body { flex: 1 1 auto; display: flex; flex-direction: column; gap: 6px; }
.screen--oddjobs .bank__content .panel__body > * { margin: 0; }
.screen--oddjobs .bank__content .panel__body > :last-child { margin-top: auto; }
/* СТ-53.1: строка оплаты — мелко и без диапазона повтора (отсчёт виден после взятия дела). */
.screen--oddjobs .oddjobs__pay { font-size: .78rem; margin: 2px 0; }
/* СТ-54: в Лавке фишки и чёрные метки — чёрным текстом. */
.screen--shop .shop__bar :is(.chip--money, .chip--premium) { color: #000; }
/* === СТ-56: магазин «Бонусы» — вкладки-подмагазины, карточки товаров, «Мои курсы» === */
.screen--bshop .bshop__tabs { display: flex; flex-wrap: wrap; gap: 4px; margin: 6px 0; }
.screen--bshop .bshop__body .bshop__grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 320px), 1fr)); gap: 8px; }
@media (max-width: 700px) { .screen--bshop .bshop__grid { grid-template-columns: 1fr; } }
.bshop__card {
  display: flex; gap: 8px; align-items: flex-start; min-width: 0;
  padding: 7px 8px; border: 1px solid var(--et-plate-edge); border-radius: 3px;
  background: linear-gradient(var(--et-plate-1), var(--et-plate-2));
}
.bshop__card.is-soon { opacity: .75; }
.bshop__ic {
  flex: 0 0 auto; width: 44px; height: 44px; display: flex; align-items: center; justify-content: center;
  font-size: 24px; background: #191410; border: 1px solid #4e4e4e; border-radius: 3px; padding: 0;
}
.bshop__ic--img { cursor: zoom-in; width: 128px; height: 128px; }
.bshop__ic--img:focus-visible { outline: 3px solid #a95115; outline-offset: 3px; }
.bshop__ic--img img { width: 100%; height: 100%; object-fit: cover; border-radius: 2px; display: block; }
.bshop__info { min-width: 0; flex: 1 1 auto; }
.bshop__name { font-size: .85rem; }
.bshop__desc { margin: 2px 0 4px; font-size: .75rem; line-height: 1.25; }
.bshop__foot { justify-content: space-between; align-items: center; margin: 0; }
.bshop__price { color: #000; }
.bshop__soon { text-transform: uppercase; letter-spacing: .5px; }
.bshop__course { padding: 4px 0; border-bottom: 1px dotted #8a8a8a; }
.bshop__course:last-of-type { border-bottom: 0; }
.bshop__course-h { gap: 8px; align-items: center; margin: 0; }
.bshop__active { margin: 6px 0 0; font-weight: 700; }
/* СТ-52.2/54: «Стена вызовов» — подписи полей на ОДНОЙ верхней линии (по началу длинной фразы
   «Кому лично…»), а сами окна ввода — на одной нижней линии: каждое поле — колонка на всю
   высоту ряда, подпись сверху, ввод прижат к низу. */
.screen--wall .arena__form { align-items: stretch; }
.screen--wall .arena__form .field { display: flex; flex-direction: column; }
.screen--wall .arena__form .field__label { flex: 1 1 auto; }
/* СТ-19.32: «Перевод игроку» — компактные РАВНЫЕ отступы между строками (единый шаг 8px). */
.screen--bank .bank__panel--tr .panel__body { display: flex; flex-direction: column; gap: 8px; }
.screen--bank .bank__panel--tr :is(p, .field, .row) { margin: 0; }

/* СТ-19.33: Тренажёрный зал — аватарки манекенов по уровням (колонка «аватарка + кнопка»).
   СТ-19.42: зазор между куклами +50% (14→21px); кнопки уровней = ширина куклы (135px);
   клик по кукле — увеличение ×3 по центру экрана (.dummy-zoom), клик в любом месте закрывает. */
.screen--gym .train__levels, .screen--outskirts .train__levels { align-items: flex-end; gap: 21px; }
.screen--gym .train__dummy, .screen--outskirts .train__dummy { display: flex; flex-direction: column; align-items: center; gap: 8px; }
.screen--gym .train__dummy--off .dummy-svg { opacity: .45; }
.screen--gym .train__dummy .train__lvl, .screen--outskirts .train__dummy .train__lvl { width: 155px; min-width: 0; } /* СТ-19.43: = ширина куклы */
/* СТ-19.45: «Спарринг-манекен» мельче, уровень — чёрный жирный; углы кнопок скруглены как у аватарок (rx 8). */
.screen--gym .train__lvl, .screen--outskirts .train__lvl { border-radius: 8px; }
.screen--gym .train__lvl-top { font-size: .78em; font-weight: 600; }
.screen--gym .train__lvl-sub { color: #000; font-weight: 800; font-size: .95em; }
.screen--gym .train__dummy .dummy-svg { cursor: zoom-in; }
/* СТ-19.43: кнопки уровней — «шёлк» (рецепт как у плашки «Банк»): слева светло-зелёная,
   в центре золотая, справа красная. */
.screen--gym .train__levels > .train__dummy:nth-child(1) .train__lvl,
.screen--outskirts .train__levels > .train__dummy:nth-child(1) .train__lvl {
  color: #143300; border: 1px solid rgba(0,0,0,.45);
  background:
    linear-gradient(115deg, rgba(255,255,255,.5) 0%, rgba(255,255,255,0) 28%, rgba(255,255,255,.22) 46%, rgba(255,255,255,0) 62%, rgba(255,255,255,.32) 100%),
    linear-gradient(160deg, #d6f5b8 0%, #8ed164 55%, #57952f 100%);
  box-shadow: inset 0 1px 0 rgba(255,255,255,.5), 0 1px 2px rgba(0,0,0,.35);
  text-shadow: 0 1px 0 rgba(255,255,255,.35);
}
.screen--gym .train__levels > .train__dummy:nth-child(2) .train__lvl,
.screen--outskirts .train__levels > .train__dummy:nth-child(2) .train__lvl {
  color: #241600; border: 1px solid rgba(0,0,0,.45);
  background:
    linear-gradient(115deg, rgba(255,255,255,.5) 0%, rgba(255,255,255,0) 28%, rgba(255,255,255,.22) 46%, rgba(255,255,255,0) 62%, rgba(255,255,255,.32) 100%),
    linear-gradient(160deg, #ffe08a 0%, #cf9a22 55%, #9a6d10 100%);
  box-shadow: inset 0 1px 0 rgba(255,255,255,.5), 0 1px 2px rgba(0,0,0,.35);
  text-shadow: 0 1px 0 rgba(255,255,255,.35);
}
.screen--gym .train__levels > .train__dummy:nth-child(3) .train__lvl,
.screen--outskirts .train__levels > .train__dummy:nth-child(3) .train__lvl {
  color: #000; border: 1px solid rgba(0,0,0,.45); /* СТ-19.46: текст красной кнопки тоже чёрный */
  background:
    linear-gradient(115deg, rgba(255,255,255,.5) 0%, rgba(255,255,255,0) 28%, rgba(255,255,255,.22) 46%, rgba(255,255,255,0) 62%, rgba(255,255,255,.32) 100%),
    linear-gradient(160deg, #ffb0a0 0%, #d64533 55%, #8f1d12 100%);
  box-shadow: inset 0 1px 0 rgba(255,255,255,.5), 0 1px 2px rgba(0,0,0,.35);
  text-shadow: 0 1px 0 rgba(255,255,255,.35);
}
/* СТ-19.62: «Окраины» — 3 соперника колонками как манекены зала. Колонки тянутся на одну высоту
   (stretch), окно-описание занимает свободное место → кнопки «Напасть» стоят на одном уровне. */
.screen--outskirts .train__levels { align-items: stretch; flex-wrap: wrap; }
.screen--outskirts .mob-card__desc {
  width: 155px; box-sizing: border-box; flex: 1; min-height: 92px;
  padding: 6px 9px; border: 1px solid #8a8a8a; border-radius: 8px;
  background: #e9e9e9; color: #444; font-size: .76rem; line-height: 1.35; text-align: left;
  pointer-events: none; user-select: none; /* НЕАКТИВНОЕ окно — только описание */
}
.screen--outskirts .mob-card__desc .muted { color: #666; }
.screen--outskirts .mob-card__name { font-size: .8rem; }
.screen--outskirts .mob-card__name b { color: #1c1c1c; }
.screen--outskirts .mob-card__flavor { margin: 4px 0; color: #555; }
.screen--outskirts .mob-card__reward { color: #555; }
/* СТ-31: «Окраины» тремя блоками. Блок = шапка (кто, уровень, модификатор, награда, таймер) +
   ряд из трёх бойцов. Блоки стоят В РЯД и переносятся вниз сами, как только ряд перестаёт влезать
   в центральную колонку (узкий монитор/планшет/телефон) — заказчик: «маленькое разрешение —
   слабые, под ними средние, внизу сильные». Ширина окна тут больше общих 620px: девять карточек. */
.screen--outskirts-blocks .panel { max-width: 1120px; }
.screen--outskirts-blocks .outskirts__blocks {
  display: flex; flex-wrap: wrap; justify-content: center; align-items: flex-start; gap: 14px; margin-top: 8px;
}
.screen--outskirts-blocks .outskirts__block {
  display: flex; flex-direction: column; gap: 8px;
  padding: 8px 10px 10px; border: 1px solid #8a8a8a; border-radius: 10px; background: #efefef;
}
.screen--outskirts-blocks .outskirts__block-head { text-align: center; font-size: .76rem; line-height: 1.4; color: #444; }
.screen--outskirts-blocks .outskirts__block-title { font-size: .92rem; }
.screen--outskirts-blocks .outskirts__block-title b { color: #1c1c1c; }
.screen--outskirts-blocks .outskirts__block-mod { color: #555; font-style: italic; }
.screen--outskirts-blocks .outskirts__block-reward { color: #555; }
.screen--outskirts-blocks .outskirts__block-timer { margin-top: 2px; font-weight: 700; color: #2f6b1f; }
.screen--outskirts-blocks .outskirts__block-timer.is-cooling { color: #8f1d12; }
.screen--outskirts-blocks .outskirts__block-mobs { display: flex; align-items: stretch; gap: 8px; }
.screen--outskirts-blocks .train__dummy { display: flex; flex-direction: column; align-items: center; gap: 6px; }
.screen--outskirts-blocks .train__dummy .train__lvl { width: 108px; min-width: 0; border-radius: 8px; }
.screen--outskirts-blocks .mob-card__desc {
  width: 108px; box-sizing: border-box; flex: 1;
  padding: 5px 6px; border: 1px solid #8a8a8a; border-radius: 8px;
  background: #e4e4e4; color: #444; font-size: .7rem; line-height: 1.3; text-align: center;
  pointer-events: none; user-select: none;
}
.screen--outskirts-blocks .mob-card__flavor { margin: 3px 0 0; color: #666; }
/* Цвет кнопок — по БЛОКУ (а не по позиции бойца): ровня зелёная, покрепче золотая, злые красные.
   Рецепт «шёлка» тот же, что у манекенов зала (СТ-19.43). */
.screen--outskirts-blocks .outskirts__block:nth-child(1) .train__lvl {
  color: #143300; border: 1px solid rgba(0,0,0,.45);
  background:
    linear-gradient(115deg, rgba(255,255,255,.5) 0%, rgba(255,255,255,0) 28%, rgba(255,255,255,.22) 46%, rgba(255,255,255,0) 62%, rgba(255,255,255,.32) 100%),
    linear-gradient(160deg, #d6f5b8 0%, #8ed164 55%, #57952f 100%);
  box-shadow: inset 0 1px 0 rgba(255,255,255,.5), 0 1px 2px rgba(0,0,0,.35);
  text-shadow: 0 1px 0 rgba(255,255,255,.35);
}
.screen--outskirts-blocks .outskirts__block:nth-child(2) .train__lvl {
  color: #241600; border: 1px solid rgba(0,0,0,.45);
  background:
    linear-gradient(115deg, rgba(255,255,255,.5) 0%, rgba(255,255,255,0) 28%, rgba(255,255,255,.22) 46%, rgba(255,255,255,0) 62%, rgba(255,255,255,.32) 100%),
    linear-gradient(160deg, #ffe08a 0%, #cf9a22 55%, #9a6d10 100%);
  box-shadow: inset 0 1px 0 rgba(255,255,255,.5), 0 1px 2px rgba(0,0,0,.35);
  text-shadow: 0 1px 0 rgba(255,255,255,.35);
}
.screen--outskirts-blocks .outskirts__block:nth-child(3) .train__lvl {
  color: #000; border: 1px solid rgba(0,0,0,.45);
  background:
    linear-gradient(115deg, rgba(255,255,255,.5) 0%, rgba(255,255,255,0) 28%, rgba(255,255,255,.22) 46%, rgba(255,255,255,0) 62%, rgba(255,255,255,.32) 100%),
    linear-gradient(160deg, #ffb0a0 0%, #d64533 55%, #8f1d12 100%);
  box-shadow: inset 0 1px 0 rgba(255,255,255,.5), 0 1px 2px rgba(0,0,0,.35);
  text-shadow: 0 1px 0 rgba(255,255,255,.35);
}
/* Блок «отдыхает» — карточки приглушены, кнопки уже disabled сервером/таймером. */
.screen--outskirts-blocks .train__lvl[disabled] { filter: grayscale(.75); opacity: .55; cursor: default; }

/* СТ-32: новые комнаты города. Всё в общем «камень+золото»: карточки-панели, чипы, ряды арены. */
/* Спорт-бар: окно ставок — пара бойцов + таймер + форма ставки. */
.screen--sportbar .bar__windows { display: flex; flex-direction: column; gap: 10px; margin-top: 8px; }
.screen--sportbar .bar__window { padding: 8px 10px; border: 1px solid #8a8a8a; border-radius: 10px; background: #efefef; }
.screen--sportbar .bar__pair { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; }
.screen--sportbar .bar__fighter b { color: #1c1c1c; }
.screen--sportbar .bar__timer { font-weight: 700; }
.screen--sportbar .bar__form { display: flex; flex-wrap: wrap; align-items: flex-end; gap: 10px; margin-top: 6px; }
.screen--sportbar .bar__form .field { max-width: 160px; }
/* Центральная площадь: вкладки Рейтинг/Турниры + встроенный экран без своей рамки-«screen». */
.screen--square .square__tabs { justify-content: center; }
.screen--square .square__body > .screen { padding: 0; }
/* Барахолка: форма ставки в строке лота + селект вещи. */
.screen--flea .flea__bidform { display: flex; align-items: flex-end; gap: 8px; }
.screen--flea .flea__bidform .field { max-width: 140px; margin: 0; }
.screen--flea .flea__select { width: 100%; padding: 6px 8px; border: 1px solid #8a8a8a; border-radius: 8px; background: #fff; font: inherit; }
.screen--flea .flea__sell { display: flex; flex-direction: column; gap: 8px; }
/* Решалы: список поручений — те же ряды, что на доске арены. */
.screen--fixers .fixer__offers { display: flex; flex-direction: column; gap: 8px; }
.dummy-zoom { position: fixed; inset: 0; z-index: 60; display: flex; align-items: center; justify-content: center; cursor: zoom-out; }
.dummy-zoom .dummy-svg, .dummy-zoom .mob-svg { max-width: 92vw; max-height: 92vh; }
/* СТ-35: портрет бойца «Окраин» тоже увеличивается по клику — курсор подсказывает, что можно нажать. */
.screen--outskirts .mob-svg { cursor: zoom-in; }
/* СТ-36 → СТ-41 (заказчик 2026-08-10): служебные кнопки админа стоят ПЕРВЫМИ В СТРОКЕ ПОДВКЛАДОК
   (одна линия и одна высота с «Город»/«Атлас» — это обычные .frame__subtab). Модификатор — лёгкая
   золотая тонировка, чтобы служебное отличалось от навигации. Видит только админ. */
.admin-dev__btn {
  /* СТ-47 (заказчик 2026-08-16): текст ЧЁРНЫМ и сами кнопки меньше (мельче кегль, уже поля). */
  color: #000;
  background: linear-gradient(#f7eed8, #e8d9ae);
  border-color: var(--et-gold-lo, #c9a94e);
  font-size: .72rem;
  padding: 2px 7px;
}
.admin-dev__btn:hover { background: linear-gradient(#fbf5e6, #efe3c2); }
/* СТ-19.57: блок «Мастер боя» под манекенами (уровни «Сильного удара»). Пустой (флаг OFF) — скрыт. */
/* СТ-29: «Мастер боя» переехал из зала на свой экран — стили за ним. */
.screen--master .gym-master { display: flex; flex-direction: column; gap: 6px; align-items: flex-start; }
.screen--master .gym-master:empty { display: none; }
.screen--master .gym-master__lvl { font-weight: 700; }
/* СТ-19.50: кукла робота-манекена в бою — по центру правой панели (как образ игрока слева).
   СТ-34: там же портрет бойца «Окраин» — та же плита, то же центрирование. */
.fright__doll > .dummy-svg,
.fright__doll > .mob-svg { display: block; margin-inline: auto; }
/* СТ-19.51: плитки зон (куда бил / что закрывал) в логе боя — на 40% меньше (230→138px, 15→9px). */
.zbar__cells { max-width: 138px; }
.zbar__cell { height: 9px; }
/* СТ-19.52/19.53: формат «Имя | нанёс удар [5] ; поставил блок [5]» — имя ВСЕГДА полное.
   Раскладка ТАБЛИЦЕЙ: колонка имени общая для всех рядов = самое длинное имя, короткие имена
   выравниваются по нему, ленты зон у всех бойцов начинаются на одном уровне. */
.log-zones { display: table; }
.zbar { display: table-row; }
.zbar > * { display: table-cell; vertical-align: middle; padding-top: 2px; }
.zbar__who { max-width: none; min-width: 0; overflow: visible; text-overflow: clip; text-align: right; white-space: nowrap; padding-right: .6em; }
.zbar__sep { color: var(--muted); padding-right: 1.5em; } /* «|» + отступ ≈ 5 пробелов */
.zbar__semi { color: var(--muted); padding: 0 .6em; }
.zbar__lbl { font-size: .72rem; color: var(--muted); white-space: nowrap; padding-right: .5em; }
.zbar__cells { max-width: none; white-space: nowrap; }
.zbar__cell { display: inline-block; width: 25px; margin-right: 3px; vertical-align: middle; }
/* СТ-19.52: «Сдаться» в шапке — лёгкий отступ от «Вернуться в бой!». */
.frame__subtab--resign { margin-left: 6px; }
/* СТ-19.54: модалка «Вы уверены, что хотите сдаться?» — «Да» у ЛЕВОЙ грани, «Нет» у правой,
   кнопки РАВНОГО размера; поверхность «алькантара» (матовая замша: мелкий ворс-крап без глянца,
   мягкая внутренняя тень). «Да» — красная, «Нет» — серая. */
.modal__actions:has(.btn--alc) { justify-content: space-between; }
.btn--alc {
  min-width: 118px; padding: 8px 14px; border-radius: 8px;
  font-weight: 700; color: #fff; border: 1px solid rgba(0,0,0,.5);
  text-shadow: 0 1px 1px rgba(0,0,0,.45);
  background-size: 7px 7px, 11px 11px, 13px 13px, 100% 100%;
  box-shadow: inset 0 1px 0 rgba(255,255,255,.10), inset 0 -2px 6px rgba(0,0,0,.35);
}
.btn--alc-red {
  background-image:
    radial-gradient(circle at 30% 40%, rgba(255,255,255,.07) 0 1px, transparent 1.6px),
    radial-gradient(circle at 70% 60%, rgba(0,0,0,.10) 0 1px, transparent 1.6px),
    radial-gradient(circle at 45% 80%, rgba(255,255,255,.05) 0 1px, transparent 1.6px),
    linear-gradient(165deg, #c0453a 0%, #a1352b 55%, #7a221a 100%);
}
.btn--alc-gray {
  background-image:
    radial-gradient(circle at 30% 40%, rgba(255,255,255,.07) 0 1px, transparent 1.6px),
    radial-gradient(circle at 70% 60%, rgba(0,0,0,.10) 0 1px, transparent 1.6px),
    radial-gradient(circle at 45% 80%, rgba(255,255,255,.05) 0 1px, transparent 1.6px),
    linear-gradient(165deg, #9b9ba0 0%, #7d7d83 55%, #5c5c62 100%);
}
/* СТ-41 (заказчик 2026-08-10): ЗОЛОТЫЕ кнопки VIP-магазина — рецепт «шёлка» плашки Банка. */
.btn--gold {
  color: #241600; font-weight: 800; border: 1px solid rgba(0,0,0,.45);
  background:
    linear-gradient(115deg, rgba(255,255,255,.5) 0%, rgba(255,255,255,0) 28%, rgba(255,255,255,.22) 46%, rgba(255,255,255,0) 62%, rgba(255,255,255,.32) 100%),
    linear-gradient(160deg, #ffe08a 0%, #cf9a22 55%, #9a6d10 100%);
  box-shadow: inset 0 1px 0 rgba(255,255,255,.5), 0 1px 2px rgba(0,0,0,.35);
  text-shadow: 0 1px 0 rgba(255,255,255,.35);
}
.btn--gold:hover:not(:disabled) { filter: brightness(1.07); }
.btn--gold:disabled { filter: grayscale(.55) brightness(.95); }
.screen--bank .bank__content .panel { border-top: 0; margin-top: 0; }
/* Поля сумм/пин-кода — компактные «кассовые» поля на бумаге. */
.screen--bank .field__input, .screen--shop .field__input {
  min-height: auto; padding: 6px 9px; border-radius: 0;
  background: #fff; border: 1px solid #8a8a8a; font-size: .9rem;
}
.screen--bank .field__input[type="password"] { letter-spacing: 4px; font-weight: 700; }
/* СТ-19.13: поля ввода банка ниже на ~35% (сумма вклада/снятия и остальные — единая высота). */
.screen--bank .field__input { padding: 2px 9px; font-size: .8rem; line-height: 1.25; }
/* СТ-19.14/19.14.1: цифры/пин в полях банка — по центру ПО ВЕРТИКАЛИ (явная высота 21px,
   строка = внутренней высоте; по горизонтали — обычное левое выравнивание); блоки формы
   «Снятие» (и остальных панелей) равноудалённы: пустой резерв под текст ошибки убран, зазоры = 12px. */
.screen--bank .field__input { padding-top: 0; padding-bottom: 0; height: 21px; line-height: 19px; }
.screen--bank .field { margin-bottom: 12px; }
.screen--bank .field__error { min-height: 0; margin-top: 0; }
.screen--bank .field__error:not(:empty) { margin-top: 4px; }
.screen--bank .panel__body .row { margin-top: 0; }
/* СТ-19.23: поля ввода Арены (мин./макс. уровень) — та же компактная высота, что строки-описания подразделов (как в Банке).
   СТ-19.29: высота +10% (21→23px). */
.screen--arena .field__input {
  min-height: auto; padding: 0 9px; border-radius: 0;
  background: #fff; border: 1px solid #8a8a8a; font-size: .8rem;
  height: 23px; line-height: 21px;
}
.screen--arena .field { margin-bottom: 12px; }
.screen--arena .field__error { min-height: 0; margin-top: 0; }
.screen--arena .field__error:not(:empty) { margin-top: 4px; }
/* СТ-19.24: «Открытых заявок/сборов нет» — мелким шрифтом; «Тип боя» и «Размер команды» — в один уровень.
   Порядок детей фиксирован в arena.js renderCreate(): 1 подпись типа, 2 кнопки типа, 3 подпись размера, 4 кнопки размера. */
.screen--arena .arena__list .muted { font-size: 14px; } /* СТ-19.26: +30% к 11px */
.screen--arena .arena__create { display: grid; grid-template-columns: max-content max-content; gap: 8px 28px; align-items: start; }
.screen--arena .arena__create > :nth-child(1) { grid-area: 1 / 1; }
.screen--arena .arena__create > :nth-child(2) { grid-area: 2 / 1; }
.screen--arena .arena__create > :nth-child(3) { grid-area: 1 / 2; }
.screen--arena .arena__create > :nth-child(4) { grid-area: 2 / 2; }
.screen--arena .arena__create > :nth-child(n+5) { grid-column: 1 / -1; }
/* СТ-19.27: равные вертикальные отступы между всеми строками Арены — единый шаг 8px,
   собственные margin строк (p, .row, подписи, чекбокс, поля) погашены. */
.screen--arena .panel__body { display: flex; flex-direction: column; gap: 8px; }
.screen--arena .panel__body :is(p, .row, .arena__lbl, .arena__checkrow, .arena__form) { margin: 0; }
.screen--arena .arena__list { gap: 8px; }
.screen--arena .arena__list p { margin: 0; }
.screen--arena .arena__row { padding: 0 0 8px; }
.screen--arena .field { margin-bottom: 0; }
/* СТ-19.28: единый размер всех текстов Арены — 14px (подсказки, подписи, чекбокс, списки, поля);
   заголовки панелей и кнопки — свои размеры, их не трогаем. */
.screen--arena :is(.muted, .arena__lbl, .arena__checkrow, .arena__from, .arena__info, .field__label, .field__input) { font-size: 14px; }

/* --- Шаг 13: ОКРАИНЫ (PvE) — таблица-зебра противников; босс — бордовый акцент слева --- */
.screen--outskirts .mob-list { gap: 0; border: 1px solid #c8c8c8; background: #f6f6f6; }
.screen--outskirts .mob-row { border: 0; border-bottom: 1px solid #d9d9d9; border-radius: 0; background: transparent; padding: 7px 10px; }
.screen--outskirts .mob-row:last-child { border-bottom: none; }
.screen--outskirts .mob-row:nth-child(even) { background: #ececec; }
.screen--outskirts .mob-row--boss { border-left: 3px solid #7c1d1d; background: #f3e6e6; }
.screen--outskirts .mob-row__name { font: 700 13px var(--et-font-display); color: var(--et-link); }
.screen--outskirts .mob-row__flavor { margin: 2px 0 5px; font-size: 11px; }

/* --- Шаг 13: ЗРИТЕЛИ — таблица-зебра боёв; просмотр: лог на бумаге в тонкой рамке --- */
.screen--spectate .spec-list { gap: 0; border: 1px solid #c8c8c8; background: #f6f6f6; }
.screen--spectate .spec-row { border: 0; border-bottom: 1px solid #d9d9d9; border-radius: 0; background: transparent; padding: 6px 10px; }
.screen--spectate .spec-row:last-child { border-bottom: none; }
.screen--spectate .spec-row:nth-child(even) { background: #ececec; }
.screen--spectate .spec-row__vs .linklike { font: 700 13px var(--et-font-display); }
.screen--spectate .spec-fighter { border-radius: 0; background: #f1f1f1; border: 1px solid #cfcfcf; border-left: 3px solid #7c1d1d; }
.screen--spectate .flog { background: var(--et-paper); border: 1px solid #6f6f6f; border-radius: 0; }
.screen--spectate .spec-status--end { font: 700 13px var(--et-font-display); color: var(--et-head); }

/* --- Шаг 14: ИНВЕНТАРЬ — «Надетое» и «Сумка» таблицами-зебрами; сравнение ▲/▼ как было --- */
.screen--inv .worn { border: 1px solid #c8c8c8; background: #f6f6f6; }
.screen--inv .worn__row { border-bottom: 1px solid #d9d9d9; padding: 5px 9px; }
.screen--inv .worn__row:last-child { border-bottom: none; }
.screen--inv .worn__row:nth-child(even) { background: #ececec; }
.screen--inv .worn__name { font-weight: 700; }
.screen--inv .bag { gap: 0; border: 1px solid #c8c8c8; background: #f6f6f6; }
.screen--inv .bag__row { border-bottom: 1px solid #d9d9d9; padding: 2px 9px 7px; }
.screen--inv .bag__row:last-child { border-bottom: none; }
.screen--inv .bag__row:nth-child(even) { background: #ececec; }
.screen--inv .bag__name { font: 700 12px var(--et-font-display); color: var(--et-link); }
.screen--inv .bag__actions { display: flex; gap: 5px; flex-wrap: wrap; }
/* Карточка предмета и блок сравнения — «вкладыш» на бумаге. */
.screen--inv .card { background: var(--et-paper); border: 1px solid #b5b5b5; border-radius: 0; }
.screen--inv .inv-cmp { background: var(--et-paper); border: 1px solid #b5b5b5; border-top: 0; padding: 6px 10px; }

/* === Фаза B, шаг 12: ЭКРАН БОЯ — рамка-камень вокруг лога, кнопки-плиты, палитра лога цела === */
/* Лог: КАМЕННАЯ рамка (полоса-камень эталона), внутри — светлая бумага; палитру строк даёт log.css. */
.screen--fight .fight__panel--log {
  background: var(--et-stone); border: 1px solid #3a3a3a; border-radius: 2px;
  box-shadow: var(--et-stone-shadow); padding: 2px 8px 8px; margin-top: 9px;
}
.screen--fight .fight__panel--log .panel__title {
  background: none; border: 0; padding: 5px 2px;
  color: var(--et-gold-ink); text-shadow: 0 -1px 1px #000; letter-spacing: 1px;
}
.screen--fight .fight__panel--log .panel__body { padding: 0; }
.screen--fight .fight__log { background: var(--et-paper); border: 1px solid #6f6f6f; padding: 6px 9px; }
/* Кнопки блока/режима/цели/заклинаний — серые плиты; активная — бордовая. */
.screen--fight .block-btn, .screen--fight .mode-btn, .screen--fight .target-btn, .screen--fight .spell-btn {
  min-height: auto; padding: 6px 10px; border-radius: 2px; cursor: pointer;
  font: 700 12px var(--et-font-display); letter-spacing: .4px;
  color: var(--et-stone-ink);
  background: linear-gradient(var(--et-plate-1), var(--et-plate-2));
  border: 1px solid var(--et-plate-edge);
  box-shadow: inset 0 1px 0 rgba(255,255,255,.35); text-shadow: 0 1px 0 rgba(255,255,255,.3);
}
.screen--fight .block-btn:hover, .screen--fight .mode-btn:hover, .screen--fight .target-btn:hover, .screen--fight .spell-btn:hover {
  background: linear-gradient(var(--et-plate-1-h), var(--et-plate-2-h));
}
.screen--fight .block-btn.is-active, .screen--fight .mode-btn.is-active, .screen--fight .target-btn.is-active, .screen--fight .spell-btn.is-active {
  color: #fff; background: linear-gradient(#a83232, #7c1d1d);
  border-color: #5c1414; text-shadow: 0 -1px 1px rgba(0,0,0,.6);
}
.screen--fight .block-btn:disabled, .screen--fight .mode-btn:disabled, .screen--fight .target-btn:disabled { opacity: .55; cursor: default; }
/* «Ход» — крупная бордовая плита; «Сдаться» и итоговые кнопки — плиты. */
.screen--fight .btn { border-radius: 2px; font-family: var(--et-font-display); letter-spacing: .4px; }
.screen--fight .fight__submit {
  min-height: auto; padding: 9px 26px; font: 700 13px var(--et-font-display); letter-spacing: 1px;
  color: #fff; background: linear-gradient(160deg, #ff6a7d 0%, #c11a35 45%, #6f0016 100%);  /* СТ-13: рубин */
  border: 1px solid rgba(0,0,0,.6); text-shadow: 0 1px 1px rgba(0,0,0,.55);
  box-shadow: inset 0 1px 0 rgba(255,255,255,.4), inset 0 -3px 5px rgba(0,0,0,.35), 0 2px 4px rgba(0,0,0,.5);
}
.screen--fight .fight__submit:hover { filter: brightness(1.1); }
.screen--fight .fight__resign, .screen--fight .btn--ghost {
  min-height: auto; padding: 6px 14px; font-size: 12px; font-weight: 700;
  color: var(--et-stone-ink);
  background: linear-gradient(var(--et-plate-1), var(--et-plate-2));
  border: 1px solid var(--et-plate-edge);
  box-shadow: inset 0 1px 0 rgba(255,255,255,.35); text-shadow: 0 1px 0 rgba(255,255,255,.3);
}
.screen--fight .fight__section-title { font: 700 12px var(--et-font-display); letter-spacing: .5px; color: #5a5a5a; }
/* СТ-63 (заказчик 2026-08-20): центральное окно боя (выбор ударов/приёмов) — по образцу «Банка»
   (СТ-19.5/19.8): та же ширина 620px по центру листа и те же компактные кнопки-плиты 4×14/12px.
   Отступы панели уже банковские (общий .panel__body 16/18px), их не трогаем. */
.screen--fight .fight__panel--controls { max-width: 620px; margin-inline: auto; }
/* Шапка дуэльного боя (раунд/таймер/vs) — той же ширины, иначе над окном 620px висит плита во всю страницу. */
.screen--fight2 .fight__panel--head { max-width: 620px; margin-inline: auto; }
.screen--fight .fight__panel--controls :is(.btn, .mode-btn, .spell-btn, .block-btn, .target-btn) {
  min-height: auto; padding: 4px 14px; border-radius: 2px;
  font: 700 12px var(--et-font-display); letter-spacing: .4px;
}

/* Нижняя панель (шаг 4): каменный тулбар-подвал + золотые часы Courier. */
.dock__toolbar {
  background: var(--et-stone);
  border-top: 1px solid var(--et-stone-edge-top); border-bottom: 2px solid var(--et-stone-edge-bot);
  box-shadow: var(--et-stone-shadow);
}
.dock__toolbar .dock__tool, .dock__toolbar .dock__link, .dock__toolbar .dock__lang { color: var(--et-stone-ink); text-shadow: var(--et-stone-ink-glow); }
.dock__clock { font: 700 12px 'Courier New', monospace; color: var(--et-clock); text-shadow: 0 1px 1px #000; }
.dock__tab.is-active { color: var(--et-head); }
.dock__feed { background: var(--et-chat-bg); }
.dock__time { color: var(--et-chat-time); }

/* === Фаза C, шаг 27: доступность эталона ===
   Адаптив ≤1020px живёт в layout.css (столбик, кукла по центру, панорама 100%, меню без
   смещения). Здесь — фокус с клавиатуры: вкладки-ярлыки не имели своего кольца (базовый
   .tabs__item без outline-правила) — даём бордовое, в тон шапок. Плиты (.btn) уже получают
   золотое кольцо из styles.css через --accent-2 → --et-gold-mid. reduced-motion гасится
   глобально в styles.css (*, !important) — эталон анимаций не добавляет. */
.tabs__item:focus-visible { outline: 2px solid var(--et-head); outline-offset: -2px; }


/* === СТ-19.65: раздел «Общение» (Чат/Почта/Кварталы/Клан/Друзья) — по образцу «Банка» (СТ-19.5/8/11):
   заголовок экрана — золотая шёлковая пилюля (рецепт плашки «Банк»), окна/вкладки/тело — одна
   колонна по центру до 620px, кнопки и чипы в рядах — компактные плиты, не растягиваются
   (гасим глобальный .row > * {flex:1}). Идёт ПОСЛЕ красных правил заголовков — та же
   специфичность, позже = побеждает. */
:is(.screen--chat, .screen--mail, .screen--faction, .screen--clan, .screen--friends) > * {
  max-width: 620px; margin-inline: auto;
}
:is(.screen--chat, .screen--mail, .screen--faction, .screen--clan, .screen--friends) .row > .btn,
:is(.screen--chat, .screen--mail, .screen--faction, .screen--clan, .screen--friends) .row > .chip {
  flex: 0 0 auto;
}
.screen--chat .chat__title, .screen--mail .mail__title,
:is(.screen--faction, .screen--clan, .screen--friends) .faction__title {
  font: 700 14px var(--et-font-display); letter-spacing: .6px; color: #241600;
  padding: 3px 14px; border-radius: 999px;
  background:
    linear-gradient(115deg, rgba(255,255,255,.5) 0%, rgba(255,255,255,0) 28%, rgba(255,255,255,.22) 46%, rgba(255,255,255,0) 62%, rgba(255,255,255,.32) 100%),
    linear-gradient(160deg, #ffe08a 0%, #cf9a22 55%, #9a6d10 100%);
  border: 1px solid rgba(0,0,0,.45);
  box-shadow: inset 0 1px 0 rgba(255,255,255,.5), 0 1px 2px rgba(0,0,0,.35);
  text-shadow: 0 1px 0 rgba(255,255,255,.35);
}
/* === СТ-19.66: анкета, панель травмы — кнопка «Лечиться за N» / «В лазарет» = «окно»-чип
   (тот же вид, что плашка «Травма (…)»), в строке шапки сразу после «Пройдёт сама через ~N мин».
   Класс .chip задаёт форму; здесь — сброс кнопочного хрома и состояния. */
.injury-heal {
  cursor: pointer; border: 1px solid rgba(0,0,0,.45); font: inherit; font-size: .8rem; font-weight: 700; line-height: inherit;
  /* СТ-19.67: светло-синяя алькантара (зерно как у .btn--alc-red/-gray из СТ-19.54) */
  color: #fff; text-shadow: 0 1px 1px rgba(0,0,0,.45);
  background-color: transparent;
  background-image:
    radial-gradient(circle at 30% 40%, rgba(255,255,255,.07) 0 1px, transparent 1.6px),
    radial-gradient(circle at 70% 60%, rgba(0,0,0,.10) 0 1px, transparent 1.6px),
    radial-gradient(circle at 45% 80%, rgba(255,255,255,.05) 0 1px, transparent 1.6px),
    linear-gradient(165deg, #8fb6e3 0%, #6f96c6 55%, #4a6f9e 100%);
  background-size: 7px 7px, 11px 11px, 13px 13px, 100% 100%;
  box-shadow: inset 0 1px 0 rgba(255,255,255,.12), inset 0 -2px 5px rgba(0,0,0,.30);
}
.injury-heal:hover { filter: brightness(1.12); }
.injury-heal:disabled { opacity: .55; cursor: default; filter: none; }

/* === СТ-20: ЕДИНЫЙ СТАНДАРТ ЦЕНТРАЛЬНЫХ ОКОН (эталон = «Банк», чек-лист в docs/UI_STANDARD.md).
   Три правила добиваются на все оставшиеся экраны центра: (1) одна колонна по центру до 620px,
   (2) золотая шёлковая пилюля заголовка экрана, (3) кнопки/чипы в рядах — компактные, не тянутся.
   ИСКЛЮЧЕНИЯ (не трогаем): бой (fight — макет v3), зал/манекены (gym) и Окраины (outskirts —
   стоп-точка заказчика; их .train__* делят один CSS), авторизация (auth — свой узкий шаблон),
   админка (admin — служебные таблицы аудита шире 620px, ей только пилюля). Чат/почта/кварталы/
   клан/друзья уже приведены СТ-19.65, банк — эталон. Блок идёт ПОСЛЕДНИМ — при равной
   специфичности побеждает по каскаду. */
:is(.screen--shop, .screen--inv, .screen--bldg, .screen--altar, .screen--city,
    .screen--quests, .screen--ach, .screen--calendar, .screen--notify, .screen--settings,
    .screen--vip, .screen--help, .screen--rules, .screen--cosmetics, .screen--magic,
    .screen--ranged, .screen--nick, .screen--mod, .screen--home, .screen--anketa,
    .screen--profile, .screen--arena, .screen--lb, .screen--tourn, .screen--spectate) > * {
  max-width: 620px; margin-inline: auto;
}
:is(.screen--shop, .screen--inv, .screen--bldg, .screen--altar, .screen--city,
    .screen--quests, .screen--ach, .screen--calendar, .screen--notify, .screen--settings,
    .screen--vip, .screen--help, .screen--rules, .screen--cosmetics, .screen--magic,
    .screen--ranged, .screen--nick, .screen--mod, .screen--home, .screen--anketa,
    .screen--profile, .screen--arena, .screen--lb, .screen--tourn, .screen--spectate) .row > .btn,
:is(.screen--shop, .screen--inv, .screen--bldg, .screen--altar, .screen--city,
    .screen--quests, .screen--ach, .screen--calendar, .screen--notify, .screen--settings,
    .screen--vip, .screen--help, .screen--rules, .screen--cosmetics, .screen--magic,
    .screen--ranged, .screen--nick, .screen--mod, .screen--home, .screen--anketa,
    .screen--profile, .screen--arena, .screen--lb, .screen--tourn, .screen--spectate) .row > .chip {
  flex: 0 0 auto;
}
/* Пилюля заголовка — там, где у экрана есть своя шапка-строка (рецепт СТ-19.11).
   Экраны из одной панели (арена/рейтинг/турниры/инвентарь и т.п.) живут бордовым
   заголовком панели; анкета — без заголовка по решению СТ-16 (полоса опыта);
   город — красный эталонный h1 (утверждённый скин площади). */
:is(.screen--ach, .screen--admin, .screen--calendar, .screen--cosmetics,
    .screen--quests, .screen--notify, .screen--rules, .screen--settings) .faction__title,
.screen--shop .shop__title,
.screen--mod .mod__title,
:is(.screen--altar, .screen--bldg) .bldg__title {
  font: 700 14px var(--et-font-display); letter-spacing: .6px; color: #241600;
  padding: 3px 14px; border-radius: 999px;
  background:
    linear-gradient(115deg, rgba(255,255,255,.5) 0%, rgba(255,255,255,0) 28%, rgba(255,255,255,.22) 46%, rgba(255,255,255,0) 62%, rgba(255,255,255,.32) 100%),
    linear-gradient(160deg, #ffe08a 0%, #cf9a22 55%, #9a6d10 100%);
  border: 1px solid rgba(0,0,0,.45);
  box-shadow: inset 0 1px 0 rgba(255,255,255,.5), 0 1px 2px rgba(0,0,0,.35);
  text-shadow: 0 1px 0 rgba(255,255,255,.35);
}
/* Город/Главная/Анкета не были в глобальных списках кнопок-плит (Фаза B) — добиваем:
   компактная плита, ghost = камень, primary = ЗОЛОТО (СТ-13), danger = РУБИН (СТ-12). */
:is(.screen--city, .screen--home, .screen--anketa, .screen--profile) .btn {
  min-height: auto; padding: 4px 14px; border-radius: 2px;
  font: 700 12px var(--et-font-display); letter-spacing: .4px;
}
:is(.screen--city, .screen--home, .screen--anketa, .screen--profile) .btn--ghost {
  color: var(--et-stone-ink);
  background: linear-gradient(var(--et-plate-1), var(--et-plate-2));
  border: 1px solid var(--et-plate-edge);
  box-shadow: inset 0 1px 0 rgba(255,255,255,.35); text-shadow: 0 1px 0 rgba(255,255,255,.3);
}
:is(.screen--city, .screen--home, .screen--anketa, .screen--profile) .btn--ghost:hover {
  background: linear-gradient(var(--et-plate-1-h), var(--et-plate-2-h));
}
:is(.screen--city, .screen--home, .screen--anketa, .screen--profile) .btn--danger {
  color: #fff; background: linear-gradient(160deg, #ff6a7d 0%, #c11a35 45%, #6f0016 100%);
  border: 1px solid rgba(0,0,0,.6);
  box-shadow: inset 0 1px 0 rgba(255,255,255,.4), inset 0 -3px 5px rgba(0,0,0,.35), 0 2px 4px rgba(0,0,0,.5);
  text-shadow: 0 1px 1px rgba(0,0,0,.55);
}
:is(.screen--city, .screen--home, .screen--anketa, .screen--profile) .btn--primary {
  color: #241600; background: linear-gradient(160deg, #ffe08a 0%, #cf9a22 45%, #7d5600 100%);
  border: 1px solid rgba(0,0,0,.6);
  box-shadow: inset 0 1px 0 rgba(255,255,255,.4), inset 0 -3px 5px rgba(0,0,0,.35), 0 2px 4px rgba(0,0,0,.5);
  text-shadow: 0 1px 0 rgba(255,255,255,.4);
}
:is(.screen--city, .screen--home, .screen--anketa, .screen--profile) :is(.btn--danger, .btn--primary):hover {
  filter: brightness(1.1);
}

/* === СТ-23: (1) «эхо-призрак» номера при регистрации в правом верхнем углу анкеты —
   меньше на 65% (масштаб 0.35, якорь — правый верхний угол; перекрывает и мобильный
   scale(.85) из styles.css — этот файл грузится позже). (2) Шапки-пилюли разделов —
   логичный отступ снизу до следующего окна/кнопок (глобальный .row даёт только
   margin-top, снизу пилюля липла к вкладкам и панелям). */
.ghost-number { transform: rotate(-4deg) scale(.7); transform-origin: top right; } /* СТ-23.2: ×2 от 0.35 */
:is(.chat__bar, .mail__bar, .faction__bar, .shop__bar, .mod__bar) { margin-bottom: 12px; }

/* === СТ-23.1: ФИКС центровки окон. layout.css `.frame__main .panel { margin: 0; }` (два класса)
   перебивал авто-отступы правил `> *` (один класс) из СТ-20/СТ-19.65 — панели получали ширину
   620px, но прижимались к ЛЕВОМУ краю (банк работал: его правила СТ-19.8 тоже из двух классов).
   Поднимаем специфичность до двух классов — файл грузится последним, при равенстве побеждает. */
:is(.screen--shop, .screen--inv, .screen--bldg, .screen--altar, .screen--city,
    .screen--quests, .screen--ach, .screen--calendar, .screen--notify, .screen--settings,
    .screen--vip, .screen--help, .screen--rules, .screen--cosmetics, .screen--magic,
    .screen--ranged, .screen--nick, .screen--mod, .screen--home, .screen--anketa,
    .screen--profile, .screen--arena, .screen--lb, .screen--tourn, .screen--spectate,
    .screen--chat, .screen--mail, .screen--faction, .screen--clan, .screen--friends) .panel {
  margin-inline: auto;
}
/* Городская шапка-эталон (h1/флейвор/строка чипов): их margin задан в layout.css двумя классами —
   добиваем авто-отступы той же специфичностью (верх/низ сохраняются из прежних правил). */
.screen--city :is(.et-h1, .et-flavor, .et-centerline) { margin-inline: auto; }

/* СТ-49 (заказчик 2026-08-16): фото-карта города вместо сетки кнопок-зданий;
   текст чипов кошелька и «на чужбине (дом: …)» — ЧЁРНЫЙ.
   СТ-50: карта БЕЗ увеличения по клику (курсор обычный), поверх — круглые кнопки-цифры. */
.screen--city .city__photo { display: block; width: 100%; height: auto; border-radius: 4px; }
.screen--city :is(.chip--money, .chip--away, .chip--home) { color: #000; }

/* СТ-50 (заказчик 2026-08-16): интерактивная карта города. Круглые кнопки-цифры стоят на месте
   нарисованных кружков (координаты в %, центрирование transform'ом); под картой — синхронный ряд
   кнопок одинаковой ширины (6 в строке, дальше перенос). Подсветка .is-hot — перекрёстная. */
.citymap__wrap { position: relative; }
.citymap__pin {
  position: absolute; transform: translate(-50%, -50%);
  width: 27px; height: 27px; border-radius: 50%;
  background: #191410; color: #f0b73f; border: 2px solid #f0b73f;
  font: 700 12px/1 var(--et-font-display); cursor: pointer; padding: 0;
  display: flex; align-items: center; justify-content: center;
  box-shadow: 0 0 6px rgba(0,0,0,.8);
}
.citymap__pin:hover, .citymap__pin.is-hot { background: #f0b73f; color: #191410; box-shadow: 0 0 10px rgba(240,183,63,.8); }
/* СТ-71 (заказчик 2026-08-30): карты с табличками-названиями — прозрачная рамка над табличкой
   (размер в % холста из MAP_POINTS), номер-бейдж слева от неё; подсветка перекрёстная, как у кружков. */
.citymap__hot {
  position: absolute; transform: translate(-50%, -50%);
  background: transparent; border: 1px solid transparent; border-radius: 3px;
  cursor: pointer; padding: 0; min-width: 24px; min-height: 16px;
}
.citymap__hot:hover, .citymap__hot.is-hot { border-color: #f0b73f; background: rgba(240,183,63,.14); box-shadow: 0 0 10px rgba(240,183,63,.8); }
.citymap__hot-n {
  position: absolute; left: 0; top: 50%; transform: translate(-60%, -50%);
  width: 19px; height: 19px; border-radius: 50%;
  background: #191410; color: #f0b73f; border: 1.5px solid #f0b73f;
  font: 700 10px/16px var(--et-font-display); text-align: center;
  box-shadow: 0 0 6px rgba(0,0,0,.8); pointer-events: none;
}
.citymap__hot:hover .citymap__hot-n, .citymap__hot.is-hot .citymap__hot-n { background: #f0b73f; color: #191410; }
/* СТ-50.1 (заказчик 2026-08-16): 3 ряда по 4 кнопки (на очень узких экранах — по 2, чтобы читались подписи). */
.citymap__btns { display: grid; grid-template-columns: repeat(4, 1fr); gap: 5px; margin-top: 6px; }
@media (max-width: 560px) { .citymap__btns { grid-template-columns: repeat(2, 1fr); } }
.citymap__btn {
  display: flex; align-items: center; justify-content: flex-start; text-align: left; gap: 5px;
  min-width: 0; padding: 4px 6px; border-radius: 3px; cursor: pointer;
  color: var(--et-stone-ink); background: linear-gradient(var(--et-plate-1), var(--et-plate-2));
  border: 1px solid var(--et-plate-edge);
  box-shadow: inset 0 1px 0 rgba(255,255,255,.35);
  font: 700 11px var(--et-font-display); letter-spacing: .3px;
}
.citymap__btn-n {
  flex: 0 0 auto; width: 17px; height: 17px; border-radius: 50%;
  background: #191410; color: #f0b73f;
  display: flex; align-items: center; justify-content: center; font-size: 10px;
}
.citymap__btn-t { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.citymap__btn:hover, .citymap__btn.is-hot {
  background: linear-gradient(#fbe9bd, #eecf85); border-color: #c9a94e; color: #241600;
}
.citymap__btn:hover .citymap__btn-n, .citymap__btn.is-hot .citymap__btn-n { background: #f0b73f; color: #191410; }

/* === СТ-22: экран «Приёмы» — тот же эталон-облик, что у лавки/стрелкового (пилюля-заголовок,
   плиты-кнопки серая/золото/рубин, окно 620px по центру, компактные ряды). Самодостаточный блок —
   не трогаем гигантские общие списки селекторов выше. === */
.screen--techniques .panel { max-width: 620px; margin-inline: auto; }
.screen--techniques .panel__title {
  background: linear-gradient(#9e2727, #7c1d1d); color: #f4e9dc;
  padding: 4px 10px; border: 1px solid #5c1414; border-radius: 2px;
  text-shadow: 0 1px 1px rgba(0,0,0,.7); letter-spacing: .6px;
}
.screen--techniques .btn {
  min-height: auto; padding: 4px 14px; border-radius: 2px;
  font: 700 12px var(--et-font-display); letter-spacing: .4px;
}
.screen--techniques .btn--ghost {
  color: var(--et-stone-ink);
  background: linear-gradient(var(--et-plate-1), var(--et-plate-2));
  border: 1px solid var(--et-plate-edge);
  box-shadow: inset 0 1px 0 rgba(255,255,255,.35); text-shadow: 0 1px 0 rgba(255,255,255,.3);
}
.screen--techniques .btn--ghost:hover { background: linear-gradient(var(--et-plate-1-h), var(--et-plate-2-h)); }
.screen--techniques .btn--danger {
  color: #fff; background: linear-gradient(160deg, #ff6a7d 0%, #c11a35 45%, #6f0016 100%);
  border: 1px solid rgba(0,0,0,.6);
  box-shadow: inset 0 1px 0 rgba(255,255,255,.4), inset 0 -3px 5px rgba(0,0,0,.35), 0 2px 4px rgba(0,0,0,.5);
  text-shadow: 0 1px 1px rgba(0,0,0,.55);
}
.screen--techniques .btn--primary {
  color: #241600; background: linear-gradient(160deg, #ffe08a 0%, #cf9a22 45%, #7d5600 100%);
  border: 1px solid rgba(0,0,0,.6);
  box-shadow: inset 0 1px 0 rgba(255,255,255,.4), inset 0 -3px 5px rgba(0,0,0,.35), 0 2px 4px rgba(0,0,0,.5);
  text-shadow: 0 1px 0 rgba(255,255,255,.4);
}
.screen--techniques .btn--danger:hover, .screen--techniques .btn--primary:hover { filter: brightness(1.1); }
.screen--techniques .row > .btn, .screen--techniques .row > .chip { flex: 0 0 auto; }
/* Карточки приёмов — светлые плашки эталона (как списки арены/лавки), заголовок партии — дисплейный. */
.screen--techniques .tech__item { background: #f6f6f6; border: 1px solid #c8c8c8; border-radius: 2px; }
.screen--techniques .tech__item.is-owned { border-color: #b89b4a; background: #f9f6ec; }
.screen--techniques .tech__party-title { font: 700 13px var(--et-font-display); letter-spacing: .5px; color: var(--et-head); }

/* === СТ-29: экран «Мастер боя» — по стандарту СТ-20 (колонна 620px по центру, кнопки-плиты). */
.screen--master > * { max-width: 620px; margin-inline: auto; }
.screen--master .panel { margin-inline: auto; }
.screen--master .row > .btn, .screen--master .row > .chip { flex: 0 0 auto; }
.screen--master .btn {
  min-height: auto; padding: 4px 14px; border-radius: 2px;
  font: 700 12px var(--et-font-display); letter-spacing: .4px;
}
.screen--master .btn--ghost {
  color: var(--et-stone-ink);
  background: linear-gradient(var(--et-plate-1), var(--et-plate-2));
  border: 1px solid var(--et-plate-edge);
  box-shadow: inset 0 1px 0 rgba(255,255,255,.35); text-shadow: 0 1px 0 rgba(255,255,255,.3);
}
.screen--master .btn--ghost:hover { background: linear-gradient(var(--et-plate-1-h), var(--et-plate-2-h)); }
.screen--master .btn--primary {
  color: #241600; background: linear-gradient(160deg, #ffe08a 0%, #cf9a22 45%, #7d5600 100%);
  border: 1px solid rgba(0,0,0,.6);
  box-shadow: inset 0 1px 0 rgba(255,255,255,.4), inset 0 -3px 5px rgba(0,0,0,.35), 0 2px 4px rgba(0,0,0,.5);
  text-shadow: 0 1px 0 rgba(255,255,255,.4);
}
.screen--master .btn--primary:hover { filter: brightness(1.1); }
/* СТ-67: банк владельца — подпись комиссии внутри .bank__main (эталонное правило ловит только прямого потомка экрана) */
.screen--bank .bank__main > .muted { max-width: 620px; margin-inline: auto; margin-top: 4px; margin-bottom: 8px; padding-left: 16px; font-size: 11px; }
.screen--bank .bank__owner .bank__log { border: 1px solid #c8c8c8; background: #f6f6f6; }

/* СТ-73 (заказчик 2026-08-31): вкладка «Собственность» в инвентаре — строка с галочкой. */
.prop__toggle { align-items: center; gap: 6px; cursor: pointer; margin-bottom: 6px; }
.prop__toggle input { margin: 0; }

/* Shop image preview */
.bonus-zoom { color: #eee4d3; background: #211b16; border: 1px solid #9a7750; border-radius: 8px; padding: 34px 12px 12px; width: min-content; max-width: calc(100vw - 32px); max-height: calc(100dvh - 32px); box-shadow: 0 12px 40px #0008; }
.bonus-zoom::backdrop { background: #000b; }
.bonus-zoom img { display: block; max-width: calc(100vw - 58px); height: auto; object-fit: contain; border-radius: 3px; cursor: zoom-out; }
.bonus-zoom p { margin: 10px 0 0; font-size: 14px; line-height: 1.4; text-align: center; overflow-wrap: anywhere; }
.bonus-zoom__close { position: absolute; top: 0; right: 0; width: 34px; height: 34px; padding: 0; background: transparent; border: 0; color: inherit; font-size: 26px; cursor: pointer; }
.bonus-zoom__close:focus-visible { outline: 2px solid #e6b972; outline-offset: -3px; }
@media (max-width: 380px) { .bshop__ic--img { width: 96px; height: 96px; } }

/* Картинки из общего каталога в сумке и на барахолке. */
.screen--inv .bag__row--image { display: grid; grid-template-columns: 128px minmax(0, 1fr); gap: 8px 12px; padding: 10px; align-items: start; }
.bag__row--image > .bshop__ic { grid-column: 1; grid-row: 1 / span 6; }
.bag__row--image > :not(.bshop__ic) { grid-column: 2; justify-self: start; }
.bag__row--image .bag__details { min-width: 0; }
.bshop__course--image { display: grid; grid-template-columns: 128px minmax(0, 1fr); gap: 8px 12px; align-items: start; padding: 10px 0; }
.bshop__course--image > .bshop__ic { grid-column: 1; grid-row: 1 / span 3; }
.bshop__course--image > :not(.bshop__ic) { grid-column: 2; }
.screen--goods .bshop__card { margin-bottom: 8px; }
.goods__preview { margin: 8px 0; }
@media (max-width: 380px) {
  .screen--inv .bag__row--image, .bshop__course--image { grid-template-columns: 96px minmax(0, 1fr); }
}
