/**
 * assets/css/tower.css — Trump Tower (§163-176, §316-318).
 *
 * Раздел собран вокруг вертикального разреза здания. Три решения задают
 * всю верстку файла.
 *
 * **Разрез — настоящая прокрутка, а не список.** В контейнере лежит
 * пустая рельса высотой во все пятьсот этажей, а видимые этажи рисуются
 * поверх неё абсолютным блоком. Поэтому у рельсы нет содержимого, у окна
 * нет высоты, а высота этажа задана из скрипта: он же считает по ней,
 * какие этажи заказать.
 *
 * **Слева от разреза стоит вся башня разом** — полоса из пятидесяти
 * делений по десять этажей. Она не прокручивается: её задача — показать
 * заполненность здания целиком и дать прыгнуть в любую его часть.
 *
 * **Комната — сцена поверх страницы.** Фон нарисован, сейф лежит на нём
 * картинкой, и всё, что ниже, — обычные панели игры. Оверлей закрывает
 * экран целиком, потому что интерьер и есть отдельное место.
 */

/* Шапка раздела — общая разметка страниц, своя картинка. */
.trumpamole__skins-hero--tower::before {
    background-image: var(--tam-bg-tower, url('../tower/bg_page.webp?26090901'));
}

/* Герой стоит у правого края и не должен закрывать кнопку и плитки:
   текстовый блок рисуется поверх него. */
.trumpamole__skins-hero--tower .trumpamole__title-block,
.trumpamole__skins-hero--clans .trumpamole__title-block {
    position: relative;
    z-index: 3;
}

/*
 * Значок раздела в ленте погашен рамой (`ui-frame.css`), и лента
 * собирается в одну колонку. Своя сетка «1fr 74px» до 360px, стоявшая
 * здесь, перебивала раму двумя классами и держала пустую полосу справа:
 * на 320px шапка башни и кланов занимала 231px из 320 (§82).
 */

.tam-tower {
    padding: 0 14px calc(var(--tam-nav-h, 68px) + 24px + var(--safe-bottom, 0px));
}

.tam-tower__collect-slot {
    margin: 2px 0 0;
}

/* Значок в плитке шапки: SVG вместо картинки — это служебная иконка. */
.tam-tower__chip-icon {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 30px;
    height: 30px;
    border-radius: var(--ui-radius-sm);
    background: linear-gradient(180deg, var(--brown-3), var(--brown-1));
    color: var(--gold-2);
    box-shadow: inset 0 1px 0 color-mix(in srgb, var(--ui-ivory) 16%, transparent);
    flex: none;
}

/* ===== Поиск и адреса §164 ===== */

.tam-tower__nav {
    margin: 12px 0 10px;
}

.tam-tower__search {
    position: relative;
    display: flex;
    align-items: center;
}

.tam-tower__search-icon {
    position: absolute;
    left: 12px;
    display: inline-flex;
    color: var(--cream-4);
    pointer-events: none;
}

/*
 * Поле ввода — утопленная поверхность §8 рамы, и материал берётся оттуда.
 *
 * Здесь он был выписан руками (`#181043 → #0e0927`) — числа нового мира,
 * но мимо словаря и на полступени темнее общей выемки. Рядом с таким же
 * полем поиска клана (`.tam-clan__search`, оно в списке §8) башенное
 * читалось чуть более чёрным. Осталась геометрия и поведение ввода.
 */
.tam-tower__search-input {
    width: 100%;
    min-height: 46px;
    padding: 0 14px 0 40px;
    font-family: var(--ui-font-main);
    font-weight: var(--ui-weight-body);
    font-size: var(--ui-size-body);
    -webkit-appearance: none;
    appearance: none;
}

.tam-tower__search-input::placeholder {
    color: var(--cream-4);
}

.tam-tower__search-input:focus {
    outline: none;
    border-color: var(--gold-4);
}

.tam-tower__hits {
    display: grid;
    gap: 6px;
    margin: 8px 0 0;
}

.tam-tower__hit {
    display: flex;
    align-items: center;
    gap: 10px;
    min-height: 44px;
    padding: 0 12px;
    border: var(--ui-border) solid var(--ui-border-dark);
    border-radius: var(--ui-radius-sm);
    background:
        var(--ui-dirt-wide),
        var(--ui-dirt),
        linear-gradient(180deg, var(--ui-row-a), var(--ui-panel-dark));
    color: var(--ui-text-main);
    font-family: var(--ui-font-main);
    font-size: var(--ui-size-body);
    text-align: left;
    cursor: pointer;
}

.tam-tower__hit-icon {
    display: inline-flex;
    color: var(--gold-3);
}

/* Полоса быстрых адресов: пять кнопок в ряд, минимальный тап — вся высота. */
.tam-tower__addr {
    display: grid;
    grid-template-columns: repeat(5, 1fr);
    gap: 6px;
    margin: 10px 0 0;
}

/*
 * Ряд быстрых адресов — тот же переключатель, что вкладки (§11 рамы), и
 * теперь он берёт материал ОТТУДА, а не переписывает его рядом.
 *
 * Прежде материал был выписан здесь руками, и числа не совпали с рамой:
 * покой шёл `#1c124e → #191045` вместо `#1e1856 → #181246`, а выбор —
 * тусклой бронзой `#b07d29 → #99641a` с кантом `#dfb75f` вместо золота
 * словаря. Разница видна глазом: выбранный адрес в башне был заметно
 * грязнее выбранной вкладки в магазине и инвентаре, хотя это один и тот
 * же контрол. Здесь осталась только геометрия ряда: пять узких ячеек в
 * два этажа (значок над подписью) против однострочной вкладки. Селектор
 * взят с родителем не для веса ради веса: рама подключена последней и
 * своей однострочной вкладкой (42px, 13px, `nowrap`) переписала бы эти
 * пять ячеек в один этаж.
 */
.tam-tower__addr .tam-tower__addr-btn {
    position: relative;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 3px;
    min-height: 58px;
    padding: 6px 2px;
    border-radius: var(--ui-radius-sm);
    font-size: var(--ui-size-small);
    cursor: pointer;
}

.tam-tower__addr-btn.is-active {
    transform: translateY(-1px);
}

.tam-tower__addr-icon {
    display: inline-flex;
    color: currentColor;
}

/* Подпись переносится: `nowrap` вкладки на ячейке в 57px («ЗАКЛАДКИ»,
   «НЕДАВНИЕ») выехал бы за край ряда (§48). */
.tam-tower__addr-label {
    line-height: 1;
    text-align: center;
    white-space: normal;
}

/* Счётчик в углу кнопки. Материал — §23 рамы, здесь только вылет и размер.
   На выбранном адресе он остаётся красным: раньше он там становился
   тёмно-коричневым с золотой цифрой и переставал быть счётчиком. */
.tam-tower__addr-badge {
    position: absolute;
    top: -4px;
    right: -4px;
    z-index: 2;
    min-width: 18px;
    height: 18px;
    padding: 0 4px;
    font-size: var(--ui-size-micro);
    line-height: 1;
}

/* Раскрытый список адресов */
.tam-tower__list {
    display: grid;
    gap: 6px;
    margin: 8px 0 0;
    max-height: 210px;
    overflow-y: auto;
    -webkit-overflow-scrolling: touch;
}

/* Пустая адресная книга — общий блок §56 (`ui-empty--compact`), поэтому
   своего правила у неё больше нет. Запаска `var(--muted, #hex)` в нём
   ещё и пережила бы смену палитры. */

.tam-tower__list-row {
    display: flex;
    align-items: center;
    gap: 8px;
    min-height: 50px;
    padding: 6px 10px;
    border: var(--ui-border) solid var(--ui-border-dark);
    border-radius: var(--ui-radius-sm);
    background:
        var(--ui-dirt-wide),
        var(--ui-dirt),
        linear-gradient(180deg, var(--ui-row-a), var(--ui-panel-dark));
    color: var(--ui-text-main);
    text-align: left;
    cursor: pointer;
}

.tam-tower__list-main {
    display: flex;
    flex-direction: column;
    gap: 2px;
    flex: 1;
    min-width: 0;
}

.tam-tower__list-title {
    font-family: var(--font-main), sans-serif;
    font-size: var(--ui-size-body);
    font-weight: 700;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.tam-tower__list-note {
    color: var(--ui-text-muted);
    font-family: var(--font-condensed), sans-serif;
    font-size: var(--ui-size-small);
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.tam-tower__list-floor {
    color: var(--cream-4);
    font-family: var(--font-condensed), sans-serif;
    font-size: var(--ui-size-small);
    flex: none;
}

.tam-tower__list-flag {
    display: inline-flex;
    color: var(--gold-3);
    flex: none;
}

.tam-tower__list-flag--warning { color: var(--ui-red-light); }
.tam-tower__list-flag--check   { color: var(--gold-2); }
.tam-tower__list-flag--lock    { color: var(--ui-ivory-deep); }

/* ===== Разрез §163 ===== */

/*
 * Разрез читается зданием, а не списком строк.
 *
 * Прежде это был тёмный прямоугольник с рядом одинаковых полос: рамка в
 * один пиксель, ровная заливка, чёрные квадратики окон. §17 требует
 * обратного — камня, металла, золота, света и глубины. Материал набран
 * так же, как остальная рама игры: тёмный корпус, толстая кромка,
 * золотая нить по краю шахты и фактура поверх заливки.
 *
 * Картинка башни под разрезом больше не глушится до черноты: накладка
 * ослаблена, и по краям сквозь неё виден нарисованный корпус небоскрёба.
 */
.tam-tower__cut {
    position: relative;
    display: grid;
    grid-template-columns: 26px 1fr;
    gap: 10px;
    margin: 12px 0 0;
    padding: 12px;
    border: var(--ui-border-thick) solid var(--ui-panel-edge);
    border-radius: var(--ui-radius-lg);
    background:
        var(--ui-dirt-wide),
        linear-gradient(180deg, color-mix(in srgb, var(--ui-bg-dark) 58%, transparent), color-mix(in srgb, var(--ui-bg-deep) 86%, transparent)),
        var(--tam-tower-column, url('../tower/column_bg.webp?26090901')) center / cover no-repeat;
    box-shadow: var(--shadow),
                inset 0 2px 0 color-mix(in srgb, var(--ui-purple-glow) 22%, transparent);
}

/* Полоса гроздей: вся башня одним столбиком, снизу вверх. Это лифтовая
   шахта рядом с разрезом — отсюда тёмный ствол и золотая кабина. */
.tam-tower__ladder {
    display: flex;
    flex-direction: column-reverse;
    gap: 1px;
    height: 52vh;
    min-height: 300px;
    max-height: 460px;
    padding: 3px;
    border: var(--ui-border) solid var(--ui-panel-edge);
    border-radius: var(--ui-radius-xs);
    background: linear-gradient(90deg,
                rgba(0, 0, 0, .62) 0%,
                color-mix(in srgb, var(--ui-bg-dark) 92%, transparent) 45%,
                rgba(0, 0, 0, .62) 100%);
    box-shadow: inset 0 0 10px rgba(0, 0, 0, .7);
}

.tam-tower__rung {
    position: relative;
    flex: 1;
    min-height: 0;
    padding: 0;
    border: 0;
    border-radius: 2px;
    background: color-mix(in srgb, var(--ui-purple-glow) 10%, transparent);
    cursor: pointer;
    overflow: hidden;
}

.tam-tower__rung-fill {
    position: absolute;
    inset: 0 auto 0 0;
    background: linear-gradient(180deg, var(--ui-gold), var(--ui-gold-dark));
    opacity: .8;
}

.tam-tower__rung.is-mine .tam-tower__rung-fill {
    background: linear-gradient(180deg, var(--ui-gold-hi), var(--ui-gold));
    opacity: 1;
}

/* Кабина лифта: где сейчас разрез — там она и стоит. */
.tam-tower__rung.is-here {
    background: linear-gradient(180deg, var(--ui-gold-light), var(--ui-gold-mid));
    box-shadow: 0 0 0 1px var(--ui-panel-edge), 0 0 var(--ui-glow-sm) color-mix(in srgb, var(--ui-gold) 75%, transparent);
}

/*
 * Шахта: карниз сверху, цоколь снизу, каменные стены по бокам.
 *
 * Накладки нарисованы псевдоэлементами обёртки, а не внутри прокрутки —
 * иначе они уехали бы вместе с этажами. Этажи заходят под них, и край
 * разреза выглядит перекрытием здания, а не обрезанной строкой.
 */
.tam-tower__shaft {
    position: relative;
    border-radius: var(--ui-radius-sm);
    box-shadow: inset 0 0 0 var(--ui-border) rgba(0, 0, 0, .55);
}

/* Карниз: золотая нить по верхней грани и тень от неё на этажи. */
.tam-tower__shaft::before {
    content: '';
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    height: 14px;
    border-radius: var(--ui-radius-sm) var(--ui-radius-sm) 0 0;
    background: linear-gradient(180deg,
                var(--ui-gold-dark) 0%,
                var(--ui-gold-deep) 22%,
                color-mix(in srgb, var(--ui-bg-deep) 92%, transparent) 60%,
                transparent 100%);
    pointer-events: none;
    z-index: 2;
}

/* Цоколь: тяжёлое основание, на котором стоит весь столб этажей. */
.tam-tower__shaft::after {
    content: '';
    position: absolute;
    bottom: 0;
    left: 0;
    right: 0;
    height: 16px;
    border-radius: 0 0 var(--ui-radius-sm) var(--ui-radius-sm);
    background: linear-gradient(0deg,
                var(--ui-gold-deep) 0%,
                color-mix(in srgb, var(--ui-bg-deep) 94%, transparent) 26%,
                transparent 100%);
    pointer-events: none;
    z-index: 2;
}

/* Прокручиваемое окно разреза. Боковые стены — узкие тёмные полосы по
   краям: этажи стоят МЕЖДУ ними, как перекрытия между несущими стенами. */
.tam-tower__scroll {
    position: relative;
    height: 52vh;
    min-height: 300px;
    max-height: 460px;
    padding: 0 5px;
    overflow-y: auto;
    overflow-x: hidden;
    -webkit-overflow-scrolling: touch;
    overscroll-behavior: contain;
    border-radius: var(--ui-radius-sm);
    background:
        linear-gradient(90deg,
            var(--ui-panel-edge) 0 5px,
            color-mix(in srgb, var(--ui-gold) 34%, transparent) 5px 6px,
            transparent 6px calc(100% - 6px),
            color-mix(in srgb, var(--ui-gold) 34%, transparent) calc(100% - 6px) calc(100% - 5px),
            var(--ui-panel-edge) calc(100% - 5px) 100%),
        linear-gradient(180deg, rgba(0, 0, 0, .22), rgba(0, 0, 0, .5));
    scrollbar-width: none;
}

.tam-tower__scroll::-webkit-scrollbar { width: 0; }

.tam-tower__rail {
    position: relative;
    width: 100%;
}

.tam-tower__win {
    position: absolute;
    left: 0;
    right: 0;
    display: flex;
    flex-direction: column;
}

/*
 * Один этаж — ПЕРЕКРЫТИЕ здания: номерная табличка, полоса окон, счётчик.
 *
 * Строка списка отличается от этажа ровно двумя вещами, и обе здесь
 * появились: у перекрытия есть светлая верхняя грань (по ней падает свет
 * сверху) и тяжёлая тёмная нижняя (бетон в разрезе). Без них ряд
 * одинаковых полос читается таблицей, что §17 прямо запрещает.
 */
.tam-tower__floor {
    position: relative;
    display: grid;
    grid-template-columns: 34px 20px 1fr 38px;
    align-items: center;
    gap: 6px;
    width: 100%;
    padding: 0 6px;
    border: 0;
    border-top: 1px solid color-mix(in srgb, var(--ui-purple-glow) 18%, transparent);
    /* Нижняя грань — бетонное перекрытие (`::after` ниже), а не линия. */
    border-bottom: 0;
    background:
        var(--ui-dirt-wide),
        var(--ui-dirt),
        linear-gradient(180deg,
            var(--ui-panel-light) 0%,
            var(--ui-wood) 38%,
            var(--ui-panel-dark) 78%,
            var(--ui-bg-dark) 100%);
    color: var(--ui-text-main);
    font-family: var(--ui-font-condensed);
    cursor: pointer;
    text-align: left;
}

/*
 * ПЕРЕКРЫТИЕ — бетонная плита в разрезе, а не нижняя рамка в 3px.
 *
 * §17 ТЗ требует камня прямо, и линия одного цвета его не даёт: на кадре
 * девять пустых этажей подряд читались строками таблицы, разделёнными
 * чертой. Плита — тёмная полоса с частой насечкой арматуры и светлым
 * ребром сверху: сквозь неё видно, что этажи стоят друг на друге.
 */
.tam-tower__floor::after {
    content: '';
    position: absolute;
    left: 0;
    right: 0;
    bottom: 0;
    height: 5px;
    /* Насечка арматуры держится в пределах десятой доли яркости: на
       контрасте она читалась пунктиром — то есть той же чертой между
       строками, только рваной. */
    background:
        repeating-linear-gradient(90deg,
            color-mix(in srgb, var(--ui-purple-glow) 10%, transparent) 0 4px,
            rgba(0, 0, 0, .20) 4px 9px),
        linear-gradient(180deg,
            color-mix(in srgb, var(--ui-purple-glow) 26%, transparent) 0 1px,
            var(--ui-wood-dark) 1px 3px,
            var(--ui-panel-edge) 3px 100%);
    pointer-events: none;
}

/*
 * СВЕТ НАД ДВЕРЬЮ ЛИФТА — тёплое пятно на плите этажа.
 *
 * «Декоративный свет» §17 в разрезе был только за окнами занятых офисов,
 * поэтому пустой этаж оставался мёртвым: ни одной светящейся точки на
 * сорок четыре пикселя высоты. Лампа у двери горит всегда — здание живёт
 * и там, где офисы ещё не куплены.
 */
.tam-tower__floor::before {
    content: '';
    position: absolute;
    left: 34px;
    top: 0;
    width: 42px;
    height: 100%;
    background: radial-gradient(60% 50% at 30% 22%,
        color-mix(in srgb, var(--ui-gold-light) 22%, transparent) 0%, transparent 72%);
    pointer-events: none;
}

/* Технический этаж каждой десятки: золотая грань и ровно на одну ступень
   словаря светлее обычного перекрытия — тот же ход, что у строки списка
   через `--ui-row-a` / `--ui-row-b`. */
.tam-tower__floor.is-deck {
    border-top-color: color-mix(in srgb, var(--ui-gold) 30%, transparent);
    background:
        var(--ui-dirt-wide),
        var(--ui-dirt),
        linear-gradient(180deg,
            var(--ui-wood-light) 0%,
            var(--ui-panel-light) 40%,
            var(--ui-wood) 80%,
            var(--ui-panel-dark) 100%);
}

/* Плита технического этажа — та же насечка, но золотое ребро: десятки
   считают по ней, а не по номерам. */
.tam-tower__floor.is-deck::after {
    background:
        repeating-linear-gradient(90deg,
            color-mix(in srgb, var(--ui-gold) 14%, transparent) 0 4px,
            rgba(0, 0, 0, .20) 4px 9px),
        linear-gradient(180deg,
            color-mix(in srgb, var(--ui-gold) 42%, transparent) 0 1px,
            var(--ui-gold-deep) 1px 3px,
            var(--ui-panel-edge) 3px 100%);
}

/* Нажатие подсвечивает перекрытие сверху, а не гасит его: палец стоит на
   этаже, и этаж должен ответить светом. */
.tam-tower__floor:active {
    background:
        var(--ui-dirt-wide),
        var(--ui-dirt),
        linear-gradient(180deg,
            var(--ui-wood-light) 0%,
            var(--ui-panel-light) 60%,
            var(--ui-panel-dark) 100%);
}

/* Редкость этажа показывает полоска слева (§«Этаж башни» game-ui.css):
   заливка у всех этажей одна, иначе столб превращается в радугу. */

.tam-tower__floor.is-mine {
    box-shadow: inset 3px 0 0 var(--gold-2);
}

.tam-tower__floor.has-special {
    box-shadow: inset -3px 0 0 var(--ui-purple-light);
}

.tam-tower__floor.is-mine.has-special {
    box-shadow: inset 3px 0 0 var(--gold-2), inset -3px 0 0 var(--ui-purple-light);
}

.tam-tower__floor.is-open {
    background:
        var(--ui-dirt-lite),
        linear-gradient(180deg, color-mix(in srgb, var(--ui-gold) 34%, transparent) 0%, color-mix(in srgb, var(--ui-panel-dark) 92%, transparent) 70%);
    color: var(--ui-text-main);
}

/* Номер этажа — табличка у лифта: утопленный металл, золотые цифры. */
.tam-tower__floor-no {
    display: flex;
    align-items: center;
    justify-content: center;
    height: 24px;
    border-radius: var(--ui-radius-xs);
    background: linear-gradient(180deg, var(--ui-bg-dark) 0%, var(--ui-row-a) 100%);
    box-shadow: inset 0 0 0 1px rgba(0, 0, 0, .7),
                inset 0 1px 0 color-mix(in srgb, var(--ui-purple-glow) 22%, transparent);
    color: var(--ui-gold-light);
    font-size: var(--ui-size-small);
    font-weight: 900;
    letter-spacing: .02em;
    text-shadow: 0 1px 0 rgba(0, 0, 0, .8);
}

.tam-tower__floor.is-mine .tam-tower__floor-no,
.tam-tower__floor.is-open .tam-tower__floor-no {
    background: linear-gradient(180deg, var(--ui-gold-light), var(--ui-gold-mid));
    box-shadow: inset 0 0 0 1px var(--ui-gold-deep),
                inset 0 1px 0 var(--ui-gold-hi);
    color: var(--ui-text-dark);
    text-shadow: none;
}

/*
 * ДВЕРЬ ЛИФТА — вертикальная связь этажей.
 *
 * Столбик дверей идёт сквозь весь разрез, и здание перестаёт распадаться
 * на отдельные строки: у таблицы сквозных элементов не бывает. Створки
 * металлические, между ними светящаяся щель — из шахты падает свет, тот
 * же тёплый, что горит за окнами занятых офисов.
 */
.tam-tower__door {
    position: relative;
    z-index: 1;
    /* Створки занимают середину, а ствол шахты идёт на всю высоту этажа:
       именно сквозной ствол и связывает перекрытия в здание. Двери в
       26px с воздухом сверху и снизу распадались на отдельные чипы. */
    height: 100%;
    background:
        /* блик по верхней кромке створок */
        linear-gradient(180deg, color-mix(in srgb, var(--ui-ivory-dark) 40%, transparent) 0 1px, rgba(0, 0, 0, 0) 1px)
            center / 18px 30px no-repeat,
        /* Створки: металл, между ними светящаяся щель шахты. Ступени в
           пикселях, а не в долях: рисунок двери шириной 18px, и на узком
           экране он тот же самый, только колонка вокруг уже. */
        linear-gradient(90deg,
            color-mix(in srgb, var(--ui-bg-deep) 92%, transparent) 0 1px,
            color-mix(in srgb, var(--ui-ivory-deep) 60%, transparent) 1px 2px,
            var(--ui-panel-light) 2px 8px,
            color-mix(in srgb, var(--ui-gold-light) 85%, transparent) 8px 10px,
            var(--ui-wood) 10px 16px,
            color-mix(in srgb, var(--ui-ivory-deep) 45%, transparent) 16px 17px,
            color-mix(in srgb, var(--ui-bg-deep) 92%, transparent) 17px 18px)
            center / 18px 30px no-repeat,
        /* ствол шахты */
        linear-gradient(90deg,
            color-mix(in srgb, var(--ui-bg-deep) 95%, transparent) 0 12%,
            color-mix(in srgb, var(--ui-bg-dark) 92%, transparent) 12% 88%,
            color-mix(in srgb, var(--ui-bg-deep) 95%, transparent) 88% 100%);
    box-shadow: inset 0 0 4px rgba(0, 0, 0, .75),
                0 0 6px color-mix(in srgb, var(--ui-gold-light) 10%, transparent);
}

/* Свой этаж и открытый — двери золотые: лифт стоит именно здесь. */
.tam-tower__floor.is-mine .tam-tower__door,
.tam-tower__floor.is-open .tam-tower__door {
    background:
        linear-gradient(180deg, var(--ui-gold-hi) 0 1px, rgba(0, 0, 0, 0) 1px)
            center / 18px 30px no-repeat,
        linear-gradient(90deg,
            color-mix(in srgb, var(--ui-bg-deep) 92%, transparent) 0 1px,
            var(--ui-gold-deep) 1px 2px,
            var(--ui-gold-mid) 2px 8px,
            var(--ui-gold-hi) 8px 10px,
            var(--ui-gold) 10px 16px,
            var(--ui-gold-deep) 16px 17px,
            color-mix(in srgb, var(--ui-bg-deep) 92%, transparent) 17px 18px)
            center / 18px 30px no-repeat,
        linear-gradient(90deg,
            color-mix(in srgb, var(--ui-bg-deep) 95%, transparent) 0 12%,
            color-mix(in srgb, var(--ui-bg-dark) 92%, transparent) 12% 88%,
            color-mix(in srgb, var(--ui-bg-deep) 95%, transparent) 88% 100%);
    box-shadow: inset 0 0 4px rgba(0, 0, 0, .7),
                0 0 10px color-mix(in srgb, var(--ui-gold) 45%, transparent);
}

/* Окна этажа: двадцать делений в утопленной стене, занятые горят. */
.tam-tower__windows {
    display: flex;
    gap: 2px;
    align-items: center;
    height: 24px;
    padding: 3px 4px;
    border-radius: var(--ui-radius-xs);
    background: linear-gradient(180deg, rgba(0, 0, 0, .5), rgba(0, 0, 0, .26));
    box-shadow: inset 0 2px 4px rgba(0, 0, 0, .6),
                inset 0 -1px 0 color-mix(in srgb, var(--ui-purple-glow) 12%, transparent);
}

/*
 * Пустое окно — тёмное стекло, а не чёрный квадрат.
 *
 * Прежняя заливка `rgba(0,0,0,.55)` без объёма давала ряд одинаковых
 * чёрных плиток: на снимке этаж читался не как здание, а как строка
 * непрорисованных символов. Башня по ТЗ (§17) обязана выглядеть игровой
 * локацией, поэтому у стекла появился холодный отблеск сверху, тёмная
 * рама и утопленность — та же логика, что у выемок в раме интерфейса.
 */
.tam-tower__light {
    flex: 1;
    height: 100%;
    min-width: 3px;
    border-radius: 1px;
    background: linear-gradient(160deg,
                color-mix(in srgb, var(--ui-purple-light) 55%, transparent) 0%,
                color-mix(in srgb, var(--ui-panel-dark) 95%, transparent) 42%,
                color-mix(in srgb, var(--ui-bg-deep) 98%, transparent) 100%);
    box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--ui-bg-deep) 90%, transparent),
                inset 0 1px 0 color-mix(in srgb, var(--ui-ivory-dark) 16%, transparent);
}

/* Занятый офис — тёплый свет за стеклом: единственное тёплое пятно на
   фиолетовом фасаде, поэтому занятость видна с одного взгляда. */
.tam-tower__light.is-on {
    background: linear-gradient(160deg,
                var(--ui-gold-light) 0%,
                var(--ui-gold) 45%,
                var(--ui-gold-dark) 100%);
    box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--ui-bg-deep) 90%, transparent),
                0 0 6px color-mix(in srgb, var(--ui-gold) 55%, transparent);
}

/* Свой офис горит ярче и с ореолом: его ищут взглядом среди чужих. */
.tam-tower__light.is-mine {
    background: linear-gradient(160deg,
                var(--ui-gold-hi) 0%,
                var(--ui-gold-light) 55%,
                var(--ui-gold) 100%);
    box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--ui-bg-deep) 90%, transparent),
                0 0 9px color-mix(in srgb, var(--ui-gold-hi) 80%, transparent);
}

/* Счётчик занятости: компактный чип, а не широкая таблетка. Материал
   утопленной поверхности он берёт из рамы (§ «утопленные», ui-frame.css),
   здесь задан только размер — иначе на 320px он отъедает половину окон. */
.tam-tower__floor-note {
    padding: 2px 5px;
    border-radius: var(--ui-radius-xs);
    font-size: var(--ui-size-small);
    font-weight: 700;
    line-height: 1.3;
    text-align: center;
    color: var(--ui-text-muted);
}

.tam-tower__floor-note b {
    color: var(--ui-gold-light);
}

/* ===== Развёрнутый этаж ===== */

.tam-tower__plate {
    margin: 12px 0 0;
    padding: 12px;
    border: 1px solid color-mix(in srgb, var(--ui-ivory) 12%, transparent);
    border-radius: var(--ui-radius-md);
    background: linear-gradient(180deg, var(--brown-1), var(--brown-0));
    box-shadow: var(--shadow-md, 0 12px 28px rgba(0, 0, 0, .34));
}

.tam-tower__plate-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px;
    margin-bottom: 10px;
}

.tam-tower__plate-title {
    margin: 0;
    color: var(--gold-2);
    font-family: var(--font-heading), sans-serif;
    font-size: var(--ui-size-value);
}

.tam-tower__plate-close {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 34px;
    height: 34px;
    border: 1px solid color-mix(in srgb, var(--ui-ivory) 14%, transparent);
    border-radius: var(--ui-radius-sm);
    background: var(--brown-2);
    color: var(--cream-3);
    cursor: pointer;
}

/* Двадцать офисов этажа — сетка окон, а не список строк. */
.tam-tower__cells {
    display: grid;
    grid-template-columns: repeat(5, 1fr);
    gap: 6px;
}

/*
 * Ячейка офиса — дверь в коридоре этажа.
 *
 * Здесь до последнего держалась старая тёплая палитра: занятый офис был
 * коричнево-серым (`#3a2a2a`), свободный — светло-коричневым. Рядом с
 * фиолетовым корпусом игры это читалось куском чужого интерфейса (§103).
 * Материал взят из словаря: занятая дверь тёмная, свободная — светлее
 * корпуса, своя — золотая.
 */
.tam-tower__cell {
    position: relative;
    display: flex;
    align-items: center;
    justify-content: center;
    min-height: 46px;
    border: var(--ui-border) solid var(--ui-border-dark);
    border-radius: var(--ui-radius-sm);
    background:
        var(--ui-dirt-wide),
        var(--ui-dirt),
        linear-gradient(180deg, var(--ui-row-a), var(--ui-panel-dark));
    box-shadow: inset 0 1px 0 color-mix(in srgb, var(--ui-purple-glow) 16%, transparent), 0 3px 0 rgba(0, 0, 0, .45);
    color: var(--ui-text-faint);
    font-family: var(--font-condensed), sans-serif;
    font-size: var(--ui-size-small);
    cursor: pointer;
}

.tam-tower__cell--free {
    background:
        var(--ui-dirt-wide),
        var(--ui-dirt),
        linear-gradient(180deg, var(--ui-panel-light), var(--ui-panel-main));
    color: var(--ui-text-main);
}

.tam-tower__cell--mine {
    border-color: var(--ui-gold-btn-edge);
    background:
        var(--ui-dirt-lite),
        linear-gradient(180deg, var(--ui-gold-btn-top), var(--ui-gold-btn-low));
    color: var(--ui-text-dark);
    font-weight: 700;
}

.tam-tower__cell--secret {
    border-color: var(--ui-purple-light);
    background:
        var(--ui-dirt-wide),
        linear-gradient(180deg, var(--ui-purple), var(--ui-purple-deep));
    color: var(--ui-text-main);
}

.tam-tower__cell-flag {
    position: absolute;
    top: 3px;
    right: 4px;
    display: inline-flex;
    color: var(--gold-2);
}

.tam-tower__cell--mine .tam-tower__cell-flag {
    color: var(--ui-text-dark);
}

/* Точка «в сейфе что-то есть» */
.tam-tower__cell-dot {
    position: absolute;
    left: 4px;
    top: 4px;
    width: 7px;
    height: 7px;
    border-radius: 50%;
    background: var(--ui-gold-light);
    box-shadow: 0 0 var(--ui-glow-sm) color-mix(in srgb, var(--ui-gold-light) 90%, transparent);
}

.tam-tower__legend {
    display: flex;
    flex-wrap: wrap;
    gap: 12px;
    margin-top: 10px;
    color: var(--ui-text-muted);
    font-family: var(--font-condensed), sans-serif;
    font-size: var(--ui-size-small);
}

.tam-tower__legend-item {
    display: inline-flex;
    align-items: center;
    gap: 5px;
}

.tam-tower__legend-dot {
    width: 10px;
    height: 10px;
    border-radius: var(--ui-radius-pill);
}

.tam-tower__legend-dot--mine  { background: var(--ui-gold); }
.tam-tower__legend-dot--free  { background: var(--ui-panel-light); }
.tam-tower__legend-dot--taken { background: var(--ui-panel-dark); box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--ui-purple-glow) 30%, transparent); }

/* ===== Комната §168, §316 ===== */

.tam-tower__room-host {
    position: fixed;
    inset: 0;
    /* Выше шапки и нижнего меню (2000), но ниже окон игры (10000):
       происшествие и находка секрета должны лечь поверх комнаты. */
    z-index: var(--tam-z-scene);
    /* Непрозрачный фон игры: сквозь полупрозрачный просвечивало нижнее
       меню, и это читалось как сбой, а не как приём. */
    background: var(--bg-main);
    overflow-y: auto;
    -webkit-overflow-scrolling: touch;
}

.tam-tower__room-host[hidden] {
    display: none;
}

.tam-tower__room {
    min-height: 100%;
    padding: calc(12px + var(--safe-top, 0px)) 0 calc(24px + var(--safe-bottom, 0px));
}

/*
 * Шапка комнаты — лента раздела, а не строка текста на фоне.
 *
 * Оверлей открывается на весь экран, и без плотной ленты сверху он
 * выглядел документом: название висело прямо на фоне игры. Материал взят
 * тот же, что у шапок панелей (§ полоса заголовка), с тяжёлой нижней
 * гранью — под ней уезжает содержимое комнаты.
 */
.tam-tower__room-bar {
    position: sticky;
    top: 0;
    z-index: 3;
    display: flex;
    align-items: center;
    gap: 8px;
    padding: 10px 14px;
    border-bottom: var(--ui-border-thick) solid var(--ui-panel-edge);
    background:
        var(--ui-dirt-wide),
        var(--ui-dirt),
        linear-gradient(180deg, var(--ui-head-light) 0%, var(--ui-head) 55%, var(--ui-head-dark) 100%);
    box-shadow: var(--ui-shadow-soft), inset 0 1px 0 color-mix(in srgb, var(--ui-ivory-dark) 22%, transparent);
}

.tam-tower__room-name {
    display: flex;
    flex-direction: column;
    gap: 2px;
    flex: 1;
    min-width: 0;
}

/* Плотный капслок с обводкой — так набраны все вывески игры. */
.tam-tower__room-name b {
    color: var(--ui-ivory-light);
    font-family: var(--ui-font-condensed);
    font-weight: var(--ui-weight-title);
    font-size: var(--ui-size-value);
    text-transform: uppercase;
    letter-spacing: .02em;
    text-shadow:
        -1px -1px 0 color-mix(in srgb, var(--ui-text-outline) 90%, transparent), 1px -1px 0 color-mix(in srgb, var(--ui-text-outline) 90%, transparent),
        -1px  1px 0 color-mix(in srgb, var(--ui-text-outline) 90%, transparent), 1px  1px 0 color-mix(in srgb, var(--ui-text-outline) 90%, transparent);
}

.tam-tower__room-name span {
    color: var(--ui-text-muted);
    font-family: var(--font-condensed), sans-serif;
    font-size: var(--ui-size-small);
    text-transform: uppercase;
    letter-spacing: .02em;
}

.tam-tower__room-mark,
.tam-tower__room-close {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 40px;
    height: 40px;
    border: var(--ui-border) solid var(--ui-panel-edge);
    border-radius: var(--ui-radius-sm);
    background:
        var(--ui-dirt-wide),
        var(--ui-dirt),
        linear-gradient(180deg, var(--ui-panel-main), var(--ui-panel-dark));
    box-shadow: inset 0 1px 0 color-mix(in srgb, var(--ui-purple-glow) 28%, transparent), 0 3px 0 rgba(0, 0, 0, .45);
    color: var(--ui-gold-light);
    cursor: pointer;
    flex: none;
}

.tam-tower__room-mark.is-on {
    border-color: var(--gold-4);
    color: var(--gold-2);
}

/* Сцена: нарисованная комната, поверх — свет по оттенку обстановки. */
.tam-tower__scene {
    position: relative;
    aspect-ratio: 4 / 3;
    margin: 10px 14px 0;
    border: 1px solid color-mix(in srgb, var(--ui-ivory) 14%, transparent);
    border-radius: var(--ui-radius-lg);
    /* Интерьер нарисован диорамой с вырезанным фоном: под ним нужна своя
       темнота, иначе сквозь комнату просвечивает оверлей страницы.
       Заливка была коричнево-чёрной (`#1c1414`) — последний кусок тёплого
       мира в разделе, и по краям диорамы он читался бурой каймой. */
    background-color: var(--ui-bg-deep);
    background-position: center;
    background-size: cover;
    box-shadow: var(--shadow);
    overflow: hidden;
}

.tam-tower__scene-light {
    position: absolute;
    inset: 0;
    pointer-events: none;
    mix-blend-mode: soft-light;
    opacity: .8;
}

.tam-tower__room--warm .tam-tower__scene-light {
    background: radial-gradient(120% 90% at 50% 10%, color-mix(in srgb, var(--ui-gold-hi) 55%, transparent), transparent 70%);
}

.tam-tower__room--gold .tam-tower__scene-light {
    background: radial-gradient(120% 90% at 50% 10%, color-mix(in srgb, var(--ui-gold-light) 70%, transparent), transparent 72%);
}

.tam-tower__room--cold .tam-tower__scene-light {
    background: radial-gradient(120% 90% at 50% 10%, color-mix(in srgb, var(--ui-blue) 40%, transparent), transparent 70%);
}

.tam-tower__scene-tag {
    position: absolute;
    left: 10px;
    top: 10px;
    display: inline-flex;
    align-items: center;
    gap: 6px;
    padding: 5px 10px;
    border-radius: var(--ui-radius-sm);
    background: color-mix(in srgb, var(--ui-bg-dark) 82%, transparent);
    color: var(--ui-purple-light);
    font-family: var(--font-condensed), sans-serif;
    font-size: var(--ui-size-small);
}

/* Сейф §168: стоит в комнате, нажимается пальцем. */
.tam-tower__safe {
    position: absolute;
    right: 6%;
    bottom: 6%;
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 2px;
    width: 30%;
    max-width: 130px;
    padding: 0;
    border: 0;
    background: none;
    cursor: pointer;
}

.tam-tower__safe img {
    width: 100%;
    height: auto;
    filter: drop-shadow(var(--ui-art-shadow-md));
}

.tam-tower__safe.is-ready img {
    animation: tam-tower-safe 2.4s ease-in-out infinite;
}

@keyframes tam-tower-safe {
    0%, 100% { transform: translateY(0); }
    50%      { transform: translateY(-4px); }
}

.tam-tower__safe-sum {
    padding: 2px 8px;
    border-radius: var(--ui-radius-sm);
    background: color-mix(in srgb, var(--ui-bg-dark) 90%, transparent);
    color: var(--cream-4);
    font-family: var(--font-condensed), sans-serif;
    font-size: var(--ui-size-small);
    font-weight: 700;
}

.tam-tower__safe.is-ready .tam-tower__safe-sum {
    background: var(--gold-3);
    color: var(--brown-0);
}

@media (prefers-reduced-motion: reduce) {
    .tam-tower__safe.is-ready img { animation: none; }
}

.tam-tower__room-body {
    display: grid;
    gap: 10px;
    padding: 12px 14px 0;
}

/* Характеристики офиса */
.tam-tower__stats {
    display: grid;
    gap: 1px;
    border-radius: var(--ui-radius-md);
    overflow: hidden;
    background: rgba(0, 0, 0, .4);
}

/*
 * Строки «производит / уровень / владелец».
 *
 * Селектор с родителем взят намеренно: `.tam-tower__stat` перечислен
 * среди мелких контролов рамы (§12 `ui-frame.css`), а рама грузится
 * последней и делала строку узкой пилюлей. Здесь строка — полка во всю
 * ширину, поэтому вес правила должен быть выше рамы.
 *
 * Заливки были коричневыми (`#2a1f1f` и `#241a1a`) — остаток прежней
 * тёплой темы, из-за которого карточка офиса выглядела чужой.
 */
.tam-tower__stats .tam-tower__stat {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px;
    min-height: 0;
    padding: 10px 12px;
    border: 0;
    border-radius: 0;
    box-shadow: none;
    background:
        var(--ui-dirt-wide),
        var(--ui-dirt),
        linear-gradient(180deg, var(--ui-row-a), var(--ui-panel-dark));
    font-family: var(--font-main), sans-serif;
    font-size: var(--ui-size-body);
}

.tam-tower__stats .tam-tower__stat:nth-child(even) {
    background:
        var(--ui-dirt-wide),
        var(--ui-dirt),
        linear-gradient(180deg, var(--ui-row-b), var(--ui-bg-dark));
}

.tam-tower__stat span {
    color: var(--ui-text-muted);
}

.tam-tower__stat b {
    color: var(--ui-text-main);
    text-align: right;
}

/* Предпросмотр сделки §165: золотая кромка — это главное место экрана,
   но корпус у него общий, панельный, а не почти чёрный. */
.tam-tower__deal {
    padding: 12px;
    border: var(--ui-border) solid var(--ui-gold-dark);
    border-radius: var(--ui-radius-md);
    background:
        var(--ui-dirt-wide),
        var(--ui-dirt),
        linear-gradient(180deg, color-mix(in srgb, var(--ui-gold) 16%, transparent), var(--ui-panel-dark) 60%, var(--ui-bg-dark) 100%);
    box-shadow: inset 0 1px 0 color-mix(in srgb, var(--ui-gold-light) 22%, transparent), 0 4px 0 rgba(0, 0, 0, .4);
}

.tam-tower__deal--note {
    display: flex;
    align-items: center;
    gap: 8px;
    border-color: color-mix(in srgb, var(--ui-purple-glow) 22%, transparent);
    background: linear-gradient(180deg, var(--ui-row-b), var(--ui-bg-dark));
    color: var(--ui-text-muted);
    font-family: var(--font-main), sans-serif;
    font-size: var(--ui-size-body);
}

.tam-tower__deal-row {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px;
    padding: 5px 0;
    font-family: var(--font-main), sans-serif;
    font-size: var(--ui-size-body);
}

.tam-tower__deal-row span {
    color: var(--ui-text-muted);
}

.tam-tower__deal-row b {
    color: var(--gold-2);
}

.tam-tower__deal-actions {
    display: grid;
    gap: 8px;
    margin-top: 10px;
}

/* Обстановка §316 */
.tam-tower__decor {
    padding: 12px;
    border: 1px solid color-mix(in srgb, var(--ui-ivory) 12%, transparent);
    border-radius: var(--ui-radius-md);
    background: var(--brown-1);
}

.tam-tower__decor-head {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: 8px;
    margin-bottom: 10px;
}

.tam-tower__decor-head h4 {
    margin: 0;
    color: var(--gold-2);
    font-family: var(--font-heading), sans-serif;
    font-size: var(--ui-size-body);
}

.tam-tower__decor-head span {
    color: var(--cream-4);
    font-family: var(--font-condensed), sans-serif;
    font-size: var(--ui-size-small);
}

.tam-tower__slots {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 6px;
}

.tam-tower__slot {
    display: flex;
    flex-direction: column;
    gap: 3px;
    min-height: 54px;
    padding: 7px 8px;
    border: var(--ui-border) solid var(--ui-border-dark);
    border-radius: var(--ui-radius-sm);
    background:
        var(--ui-dirt-wide),
        var(--ui-dirt),
        linear-gradient(180deg, var(--ui-row-a), var(--ui-panel-dark));
    color: var(--cream-3);
    text-align: left;
    cursor: pointer;
}

.tam-tower__slot.is-set {
    border-color: var(--gold-4);
}

.tam-tower__slot.is-open {
    background: linear-gradient(180deg, color-mix(in srgb, var(--ui-gold) 26%, transparent), var(--ui-panel-dark));
}

.tam-tower__slot-name {
    color: var(--cream-4);
    font-family: var(--font-condensed), sans-serif;
    font-size: var(--ui-size-micro);
    text-transform: uppercase;
    letter-spacing: .04em;
}

.tam-tower__slot-item {
    font-family: var(--font-main), sans-serif;
    font-size: var(--ui-size-small);
    line-height: 1.15;
}

.tam-tower__slot.is-set .tam-tower__slot-item {
    color: var(--gold-2);
}

.tam-tower__items {
    display: grid;
    gap: 6px;
    margin-top: 8px;
}

.tam-tower__item {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px;
    min-height: 46px;
    padding: 0 12px;
    border: 1px solid color-mix(in srgb, var(--ui-ivory) 12%, transparent);
    border-radius: var(--ui-radius-sm);
    background: linear-gradient(180deg, var(--brown-2), var(--brown-1));
    color: var(--ui-text-main);
    font-family: var(--font-main), sans-serif;
    font-size: var(--ui-size-body);
    cursor: pointer;
}

.tam-tower__item.is-set {
    border-color: var(--gold-4);
    color: var(--gold-2);
    cursor: default;
}

.tam-tower__item.is-off {
    opacity: .45;
}

/*
 * Закрытая вещь обстановки (§7 задания): видно, что она есть, и видно
 * условие. Гасить её так же, как «не хватает монет», нельзя — это разные
 * новости: монеты добываются сегодня, уровень — нет.
 */
.tam-tower__item.is-locked {
    opacity: .72;
    border-style: dashed;
    border-color: color-mix(in srgb, var(--ui-gold-light) 26%, transparent);
    background: color-mix(in srgb, var(--ui-bg-dark) 72%, transparent);
    cursor: default;
}

.tam-tower__item.is-locked .tam-tower__item-name {
    color: var(--ui-text-muted);
}

.tam-tower__item.is-locked .tam-tower__item-price {
    color: var(--gold-3);
    font-size: var(--ui-size-small);
    white-space: nowrap;
}

.tam-tower__item--off {
    background:
        var(--ui-dirt-wide),
        var(--ui-dirt),
        linear-gradient(180deg, var(--ui-row-b), var(--ui-bg-dark));
    color: var(--ui-ivory-deep);
}

.tam-tower__item-price {
    display: inline-flex;
    align-items: center;
    gap: 5px;
    color: var(--gold-2);
    font-weight: 700;
    flex: none;
}

/* История офиса */
.tam-tower__history {
    padding: 12px;
    border: var(--ui-border) solid var(--ui-border-dark);
    border-radius: var(--ui-radius-md);
    background:
        var(--ui-dirt-wide),
        var(--ui-dirt),
        linear-gradient(180deg, var(--ui-row-b), var(--ui-bg-dark));
}

.tam-tower__history h4 {
    margin: 0 0 8px;
    color: var(--cream-3);
    font-family: var(--font-heading), sans-serif;
    font-size: var(--ui-size-small);
}

.tam-tower__history-row {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px;
    padding: 5px 0;
    border-top: 1px solid color-mix(in srgb, var(--ui-ivory) 7%, transparent);
    color: var(--ui-text-muted);
    font-family: var(--font-condensed), sans-serif;
    font-size: var(--ui-size-small);
}

.tam-tower__history-row:first-of-type {
    border-top: 0;
}

.tam-tower__history-row b {
    color: var(--gold-3);
    flex: none;
}

/* Выбор щита — список в окне */
.tam-tower__shields {
    display: grid;
    gap: 8px;
}

.tam-tower__shield-btn {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px;
    min-height: var(--tap, 56px);
    padding: 0 14px;
    border: 1px solid var(--gold-4);
    border-radius: var(--ui-radius-sm);
    background: linear-gradient(180deg, var(--brown-2), var(--brown-1));
    color: var(--ui-text-main);
    font-family: var(--font-main), sans-serif;
    font-size: var(--ui-size-body);
    cursor: pointer;
}

.tam-tower__shield-btn b {
    color: var(--gold-2);
}

.tam-tower__shield-btn.is-off {
    border-color: color-mix(in srgb, var(--ui-ivory) 12%, transparent);
    opacity: .5;
}

/* ===== Узкий экран ===== */

@media (max-width: 360px) {
    .tam-tower {
        padding-left: 10px;
        padding-right: 10px;
    }

    .tam-tower__cut {
        grid-template-columns: 20px 1fr;
        gap: 8px;
        padding: 8px;
    }

    .tam-tower__floor {
        grid-template-columns: 30px 18px 1fr 34px;
        gap: 4px;
    }

    /* Лампа над дверью смещается вместе с колонкой номера. */
    .tam-tower__floor::before { left: 30px; }

    .tam-tower__addr-btn {
        min-height: 54px;
        font-size: var(--ui-size-micro);
    }

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

/* Низкий экран: разрез не должен съедать всю страницу. */
@media (max-height: 680px) {
    .tam-tower__scroll,
    .tam-tower__ladder {
        height: 44vh;
        min-height: 240px;
    }
}
