/* =========================================================
   📄 /styles_core/front/catalog/object_toponymics.css
   ТОПО / Каталог — блок «Топонимика» в паспорте объекта

   Дизайн по эскизу:
   - не отдельная карточка, а редакционный раздел паспорта;
   - спокойный заголовок и удобная длина строки;
   - библиографический источник визуально тише текста.
========================================================= */

/* =========================================================
   BASE
========================================================= */

.object-toponymics{
    margin-top:calc(11px * var(--density));
    padding:calc(11px * var(--density)) 0 0;

    background:transparent;
    border:0;
    border-top:1px solid rgba(92,67,38,.10);
    border-radius:0;

    color:var(--color-fg);
    box-shadow:none;
}

/* Последний блок субкарточки фактов (metric-строка, «Впадает», «Центр»
   аймака и т.п.) уже рисует свой border-bottom — следом сразу шла ещё
   одна линия от border-top блока «Топонимика», и получались две
   параллельные черты с зазором вместо одной. Раньше пустое состояние
   («Материал дорабатывается») было тут исключением — ошибочно: у
   него тот же самый двойной бордер, просто с пунктирной второй
   линией вместо сплошной. Убираем верхнюю границу «Топонимики» в
   обоих случаях. */
.object-facts + .object-toponymics{
    border-top:0;
}

/* =========================================================
   HEAD
========================================================= */

.object-toponymics__head{
    display:flex;
    align-items:center;
    justify-content:space-between;
    gap:10px;

    margin-bottom:calc(8px * var(--density));
}

/* Кнопка «прослушать» отсюда переехала в шапку паспорта (см.
   .object-preview__listen в catalog/passport.css) — раздел «Топонимика»
   больше не держит собственную. */

/* Заголовок раздела — теми же буквами, что подписи разделов в паспорте
   словарной статьи (.dictionary-article-passport__label). Раньше он был
   набран другим шрифтом, другим кеглем и другим цветом, да ещё с зелёной
   точкой впереди — украшением, которого больше нигде на сайте нет. */
.object-toponymics__title{
    margin:0;

    color:var(--color-fg);
    font-size:calc(0.78rem * var(--density));
    font-weight:900;
    line-height:1.2;
    letter-spacing:0.04em;
    text-transform:uppercase;
}

/* Счётчик «N фрагментов · N источников» у блока «Свидетельства» — та же
   роль, что у слова «Найдено» в каталоге: масштаб виден до раскрытия. */
.object-toponymics__count{
    flex:0 0 auto;

    color:#8a7b6c;
    font-size:calc(10.5px * var(--density));
    font-weight:700;
    white-space:nowrap;
    font-variant-numeric:tabular-nums;
}

/*
 * Тот же холодный оттенок, что у бейджа «есть статья ТОПО» в карточке
 * каталога (.geo-relation-card--article, card.css) — один и тот же
 * значок означает одно и то же в обоих местах: здесь он отмечает,
 * что тезис именно этой статьи одновременно — содержимое блока
 * «Топонимика» чуть выше.
 */
.object-articles-toponymics-flag{
    --topo-icon-size:11px;

    display:inline-flex;
    align-items:center;
    justify-content:center;
    width:12px;
    height:12px;
    margin-right:4px;
    vertical-align:-1px;

    color:#365b78;
}

/* =========================================================
   BODY
========================================================= */

.object-toponymics__body{
    display:flex;
    flex-direction:column;
    gap:calc(9px * var(--density));
}

/* =========================================================
   SHORT MEANING
========================================================= */

/*
 * Как в утверждённом макете: нейтральная поверхность + терракотовая
 * левая полоса (#b85f32 — тот же акцент, что у активной карточки
 * каталога, inset 2px 0 0 в card.css), а не отдельный золотой тон.
 * Один и тот же блок-паспорт для «Топонимики» и «Свидетельств» ниже —
 * не два разных цвета на один смысл «карточка-паспорт».
 *
 * Плоская заливка читалась незаметно на кремовом фоне страницы —
 * лёгкий тёплый градиент (тот же терракотовый тон, не золотой и не
 * персиковый по отдельности) добавляет блоку веса, сохраняя тот же
 * единый паттерн, что и у .object-historical-fragment ниже — один и
 * тот же градиент в обоих местах, а не два разных цвета.
 */
.object-toponymics__short-meaning{
    display:flex;
    flex-direction:column;
    gap:calc(8px * var(--density));

    padding:calc(14px * var(--density)) calc(18px * var(--density));

    background:#F2DCBC;
    border:1px solid var(--color-border, rgba(92,67,38,.14));
    border-left:3px solid var(--color-primary);
    border-radius:8px;
}

.object-toponymics__short-meaning-text{
    color:#2a2118;

    /*
     * Было 12px, вровень с .object-historical-fragment__quote — по
     * отзыву увеличено именно здесь, в «Топонимике», текст цитаты в
     * «Свидетельствах» намеренно не трогали (просили только этот блок).
     * Затем 13px → 14px: значение — главное в плашке и должно быть
     * заметнее ссылки «статья в словаре» под ним, а не наоборот.
     */
    font-size:calc(14px * var(--density));
    font-weight:400;
    line-height:1.55;

    overflow-wrap:anywhere;
}
/* Название заметно отличается от обычного текста значения. */
.object-toponymics__short-meaning-text > strong{
    font-weight:700;
    color:inherit;
}


/* =========================================================
   MORE LINK
========================================================= */

.object-toponymics__more{
    display:inline-flex;
    align-items:center;
    align-self:flex-start;
    gap:5px;

    color:var(--color-primary-dark);

    /* Ссылка — второстепенная: мельче и легче текста значения над ней
       (14px/600), чтобы взгляд сначала падал на значение. */
    font-size:calc(12.5px * var(--density));
    font-weight:600;
    text-decoration:none;

    transition:color .15s ease, gap .15s ease;
}

/*
 * Стрелочные ссылки на сайте показывают клик через цвет и сдвиг
 * стрелки, без подчёркивания или линии под текстом — так спокойнее
 * рядом со стрелкой, которая уже сама сигнализирует «это ссылка».
 */
.object-toponymics__more:hover{
    gap:8px;
    color:var(--color-primary);
}

/* Стрелка рисуется здесь, а не инлайновым SVG в разметке: одна фигура
   в одном месте, и разметка ссылки остаётся текстом. */
.object-toponymics__more::after{
    content:'→';
    font-size:1.05em;
    line-height:1;
}

/*
 * Строка «статья в словаре →» + кнопка-глаз (предпросмотр в модалке,
 * см. object_toponymics_preview.js). space-between держит ссылку у
 * левого края, кнопку — у правого, в любом из двух мест, где строка
 * встречается (внутри бежевой плашки короткого значения или отдельно).
 */
.object-toponymics__more-row{
    display:flex;
    align-items:center;
    justify-content:space-between;
    gap:10px;
}

/*
 * Тот же скруглённый квадрат, что и у .object-preview__listen в шапке
 * паспорта (passport.css) — общий язык кнопок-иконок паспорта, не
 * отдельный круглый вид только здесь.
 */
.object-toponymics__preview{
    --topo-icon-size:16px;

    display:inline-flex;
    align-items:center;
    justify-content:center;
    flex:0 0 auto;

    width:32px;
    height:32px;
    padding:0;

    border:1px solid rgba(122,92,46,.28);
    border-radius:10px;
    background:rgba(var(--color-primary-rgb),.09);

    color:#7a5c2e;
    cursor:pointer;

    transition:background-color .15s ease, border-color .15s ease;
}

.object-toponymics__preview:hover{
    background:rgba(var(--color-primary-rgb),.17);
}

.object-toponymics__preview:focus-visible{
    outline:2px solid var(--color-primary);
    outline-offset:2px;
}

/* =========================================================
   RELATION BADGE
   В шапке блока, рядом с заголовком «ТОПОНИМИКА» — тот же приём,
   что у .object-toponymics__count в «Свидетельствах» (бейдж
   «N фрагментов · N источников»): короткая метка формы связи не
   часть определения ниже, а служебная пометка уровня заголовка.
========================================================= */

.object-toponymics__badge{
    flex:0 0 auto;

    color:#9a6a2f;
    font-size:calc(10.5px * var(--density));
    font-weight:700;
    white-space:nowrap;
}

.object-toponymics__badge sup{
    margin-left:1px;
    font-size:.85em;
    color:var(--color-primary);
    font-weight:800;
}

/* =========================================================
   EVIDENCE
========================================================= */

/*
 * Список пронумерован самим <ol> — сколько бы источников ни набралось
 * (основания топонимики, ГВР, Генштаб/OSM, временные пометки), номер
 * растёт сам, без отдельного счётчика в PHP. Один общий список на весь
 * паспорт — не только для топонимики, поэтому обёртка ниже стоит на
 * уровне паспорта, а не внутри блока «Топонимика».
 */
.object-toponymics__evidence-wrap{
    margin-top:9px;
    padding-top:9px;

    border-top:1px solid rgba(92,67,38,.075);
}

.object-toponymics__evidence-title{
    margin:0 0 5px 17px;

    color:#a4917a;

    font-size:9.5px;
    font-weight:800;
    letter-spacing:.05em;
    text-transform:uppercase;
}

.object-toponymics__evidence{
    margin:0;
    padding:0 0 0 17px;

    color:#91806f;

    font-size:10px;
    line-height:1.4;
}

.object-toponymics__evidence-item + .object-toponymics__evidence-item{
    margin-top:2px;
}

/* Источник ещё не зафиксирован (например, население НП/аймака — вбитое
   вручную число без указания источника) — курсив отличает временную
   пометку от подтверждённой ссылки на источник вроде ГВР или НИИ. */
.object-toponymics__evidence-pending{
    font-style:italic;
}

/*
 * color:inherit делало ссылку неотличимой от простого текста списка —
 * акцентный цвет решает это сам по себе. Подчёркивание — только на
 * hover (не постоянно): цвет уже сигналит «это ссылка», линия снизу
 * добавляется как подтверждение при наведении, без визуального шума
 * в самом списке.
 */
.object-toponymics__cite{
    color:#9a6a2f;
    text-decoration:none;
    border-bottom:1px solid transparent;
}

.object-toponymics__cite:hover{
    color:var(--color-primary);
    border-bottom-color:currentColor;
}

/* =========================================================
   EMPTY
========================================================= */

/*
 * Раньше пустое состояние («Материал дорабатывается») выглядело как
 * отдельный, более бедный паспорт: обычный текст без рамки, пока
 * готовая статья стоит в рамке (.short-meaning выше). Теперь у пустого
 * состояния та же рамка (тот же терракотовый #b85f32, что и там), но
 * приглушённая — читается как «эта же карточка, просто пока без
 * содержания», а не как обрыв вёрстки. Секция .object-toponymics вокруг
 * неё больше не переопределяет отступ/бордюр отдельно для --empty —
 * оба состояния делят одну и ту же внешнюю рамку раздела.
 */
.object-toponymics__empty-text{
    display:flex;
    align-items:center;
    gap:8px;

    padding:calc(14px * var(--density)) calc(18px * var(--density));

    background:var(--color-surface, #FFFBF5);
    border:1px solid var(--color-border, rgba(92,67,38,.14));
    border-left:3px solid rgba(var(--color-primary-rgb),.35);
    border-radius:8px;

    color:#8a7457;
    font-size:calc(12px * var(--density));
    line-height:1.45;
    font-style:italic;
}

.object-toponymics--needs-check{
    border-top-color:rgba(184,137,69,.24);
}

/* =========================================================
   СВИДЕТЕЛЬСТВА
   object_passport/blocks/historical.php. Тот же блок-паспорт, что и
   «Топонимика» выше (нейтральная поверхность + терракотовая левая
   полоса var(--color-primary)) — раньше у раздела был свой отдельный персиковый
   градиент, и «Топонимика»/«Свидетельства» читались как два разных
   паспорта на одной карточке. Записи historical_texts с одним
   edition_id сгруппированы под одной строкой источника: автор и год
   не повторяются на каждую цитату.
========================================================= */

.object-historical-list{
    display:flex;
    flex-direction:column;
    gap:calc(9px * var(--density));
}

.object-historical-fragment{
    padding:calc(11px * var(--density)) calc(14px * var(--density));

    /* Тот же ровный фон, что у .object-toponymics__short-meaning выше —
       один общий приём на оба блока-цитаты, не два разных цвета. */
    background:#F2DCBC;
    border:1px solid var(--color-border, rgba(92,67,38,.14));
    border-left:3px solid var(--color-primary);
    border-radius:8px;
}

/* Автор и год издания — теперь первая строка самой карточки, а не
   отдельная строка над списком: карточка должна читаться сама по
   себе, без соседей сверху. */
.object-historical-source{
    display:block;
    margin-bottom:calc(4px * var(--density));

    color:var(--color-muted, #6f6a63);
    font-size:calc(11px * var(--density));
    line-height:1.4;
}

/*
 * Заголовок фрагмента — сам ссылка на источник целиком (раньше эту
 * роль играла отдельная строка «свидетельство целиком» под цитатой —
 * лишняя строка ради того же перехода). Стрелка — тем же приёмом, что
 * у .object-toponymics__more (псевдоэлемент, без подчёркивания).
 * Тот же размер и вес, что у .object-toponymics__short-meaning-text и
 * .object-historical-fragment__quote — у многих фрагментов своей
 * цитаты (quote) нет, и на экране остаётся только эта строка, играя
 * роль основного текста карточки.
 */
.object-historical-fragment__label{
    display:inline-flex;
    align-items:baseline;
    gap:5px;
    margin-bottom:calc(5px * var(--density));

    color:var(--color-primary-dark);
    /* Было 12px — вровень с цитатой под ним, ссылка не выделялась. */
    font-size:calc(13.5px * var(--density));
    font-weight:600;
    line-height:1.3;
    text-decoration:none;

    transition:color .15s ease, gap .15s ease;
}

.object-historical-fragment__label:hover{
    gap:8px;
    color:var(--color-primary);
}

.object-historical-fragment__label::after{
    content:'→';
    font-size:1.05em;
    line-height:1;
}

.object-historical-fragment__quote{
    color:var(--color-fg);
    /*
     * Тот же размер И тот же вес, что у
     * .object-toponymics__short-meaning-text выше — одного unified'а
     * font-size было мало, без явного font-weight эта строка
     * наследовала обычный (400), а «Топонимика» рядом стоит на 600 —
     * два блока цитат одного уровня выглядели по-разному даже при
     * одинаковом размере шрифта. Курсив оставлен — это единственное,
     * что осознанно отличает прямую цитату из старого текста от
     * короткого значения словаря.
     */
    font-size:calc(12px * var(--density));
    font-weight:600;
    font-style:italic;
    line-height:1.5;

    overflow-wrap:anywhere;
}

.object-historical-fragment__quote::before{ content:'«'; }
.object-historical-fragment__quote::after{ content:'»'; }

/* =========================================================
   БЛОК «СТАТЬИ» — тизер-карточки редакционных статей
   Тот же приём, что у .object-historical-list/-fragment выше: карточка
   должна быть самодостаточной единицей (заголовок-ссылка + анонс),
   без отдельной строки-обвязки над списком.
========================================================= */

.object-articles-list{
    display:flex;
    flex-direction:column;
    gap:calc(9px * var(--density));
}

.object-articles-item{
    padding:calc(11px * var(--density)) calc(14px * var(--density));

    /* Тот же ровный фон, что у .object-historical-fragment — общий
       приём для тизер-карточек в паспорте, не свой отдельный цвет. */
    background:#F2DCBC;
    border:1px solid var(--color-border, rgba(92,67,38,.14));
    border-radius:10px;
}

.object-articles-item__title{
    display:inline-flex;
    align-items:baseline;
    gap:5px;
    margin-bottom:calc(5px * var(--density));

    color:var(--color-primary-dark);
    font-size:calc(13px * var(--density));
    font-weight:700;
    line-height:1.4;
    text-decoration:none;
}

.object-articles-item__title:hover{
    gap:8px;
    color:var(--color-primary);
}

.object-articles-item__title::after{
    content:'→';
    font-size:1.05em;
    line-height:1;
}

/* =========================================================
   MOBILE
========================================================= */

@media (max-width:700px){
    .object-toponymics{
        padding-top:10px;
    }
}

/* «На исторических картах» — фрагменты исторических карт (blocks/historical_maps.php) */

.object-old-maps__list { display: flex; flex-direction: column; gap: 6px; margin: 0; padding: 0; list-style: none; }
.object-old-maps__list li { list-style: none; }
/* Блок идёт сразу за «Топонимикой» — без своей линии-разделителя сверху. */
.object-toponymics.object-old-maps { border-top: 0; }

/* Строка-сведение «Улаганъ — Карта Алтайского округа, 1900 →» + глаз —
   та же плашка-напоминалка, что «Топонимика» (.object-toponymics__short-meaning);
   поведение (вся плашка — ссылка, наведение) — общее, в конце файла. */
.object-old-maps__item {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: calc(9px * var(--density, 1)) calc(10px * var(--density, 1)) calc(9px * var(--density, 1)) calc(16px * var(--density, 1));
    background: #F2DCBC;
    border: 1px solid var(--color-border, rgba(92,67,38,.14));
    border-left: 3px solid var(--color-primary);
    border-radius: 8px;
    color: #2a2118;
}
.object-old-maps__link {
    display: flex;
    flex: 1 1 auto;
    align-items: baseline;
    gap: 8px;
    min-width: 0;
    color: inherit;
    text-decoration: none;
}
.object-old-maps__label { flex: none; font-family: var(--font-serif, Georgia, serif); font-size: 1rem; font-weight: 700; font-style: italic; }
.object-old-maps__map { flex: 1 1 auto; min-width: 0; overflow: hidden; color: #6b5238; font-size: .82rem; text-overflow: ellipsis; white-space: nowrap; }
.object-old-maps__arrow { flex: none; color: #6b5238; transition: transform .15s ease; }

/* =========================================================
   Плашки-напоминалки паспорта — одно поведение у всех
   («Топонимика», «Свидетельства», «Статья об объекте»,
   «На исторических картах»): вся плашка — ссылка (главная ссылка
   растянута на плашку псевдоэлементом), при наведении фон чуть
   темнеет, ссылка — оранжевая, стрелка → сдвигается. Глаз и другие
   ссылки внутри (сноски) — поверх, свои действия: наведение на глаз
   плашку не подсвечивает. Плашка без ссылки (тезис статьи) не
   кликается.
========================================================= */

.object-toponymics__short-meaning:has(.object-toponymics__more),
.object-historical-fragment:has(.object-historical-fragment__label),
.object-articles-item,
.object-old-maps__item{
    position:relative;
    cursor:pointer;
    transition:background-color .15s ease;
}

.object-toponymics__short-meaning .object-toponymics__more::before,
.object-historical-fragment__label::before,
.object-articles-item__title::before,
.object-old-maps__link::before{
    content:"";
    position:absolute;
    inset:0;
    z-index:1;
    border-radius:inherit;
}

.object-toponymics__short-meaning:has(.object-toponymics__more) :is(a, button, sup):not(.object-toponymics__more),
.object-historical-fragment :is(a, button, sup):not(.object-historical-fragment__label),
.object-articles-item :is(a, button, sup):not(.object-articles-item__title),
.object-old-maps__item button{
    position:relative;
    z-index:2;
}

.object-toponymics__short-meaning:has(.object-toponymics__more):hover:not(:has(.object-toponymics__preview:hover, sup:hover)),
.object-historical-fragment:has(.object-historical-fragment__label):hover:not(:has(.object-toponymics__preview:hover, sup:hover)),
.object-articles-item:hover:not(:has(.object-toponymics__preview:hover, sup:hover)),
.object-old-maps__item:hover:not(:has(.object-toponymics__preview:hover)){
    background:#EDD2AD;
}

.object-old-maps__item:hover:not(:has(.object-toponymics__preview:hover)) :is(.object-old-maps__map, .object-old-maps__arrow){
    color:var(--color-primary);
}

.object-old-maps__item:hover:not(:has(.object-toponymics__preview:hover)) .object-old-maps__arrow{
    transform:translateX(3px);
}

.object-toponymics__short-meaning:hover:not(:has(.object-toponymics__preview:hover, sup:hover)) .object-toponymics__more,
.object-historical-fragment:hover:not(:has(.object-toponymics__preview:hover, sup:hover)) .object-historical-fragment__label,
.object-articles-item:hover:not(:has(.object-toponymics__preview:hover, sup:hover)) .object-articles-item__title{
    gap:8px;
    color:var(--color-primary);
}

/* Заголовок статьи в строке с глазом — без нижнего отступа. */
.object-articles-item .object-toponymics__more-row .object-articles-item__title{
    margin-bottom:0;
}

/* «Статья об объекте» — та же оранжевая полоса слева, что у остальных плашек. */
.object-articles-item{
    border-left:3px solid var(--color-primary);
    border-radius:8px;
}

html[data-theme="dark"] .object-toponymics__short-meaning:has(.object-toponymics__more):hover:not(:has(.object-toponymics__preview:hover, sup:hover)),
html[data-theme="dark"] .object-historical-fragment:has(.object-historical-fragment__label):hover:not(:has(.object-toponymics__preview:hover, sup:hover)),
html[data-theme="dark"] .object-articles-item:hover:not(:has(.object-toponymics__preview:hover, sup:hover)),
html[data-theme="dark"] .object-old-maps__item:hover:not(:has(.object-toponymics__preview:hover)){
    background:rgba(224,171,95,.15);
}
