/* Каталог книг и справочников (/files/books).
   Дополняет тему сайта (np_style.css) только тем, что относится к разделу:
   список разделов слева, таблица источников и карточки. */

/* Список разделов каталога: на широких экранах остаётся на виду при прокрутке */
.np-books-categories .list-group-item {
  padding: .4rem .6rem;
  font-size: .9rem;
}

.np-books-category-name {
  display: inline-block;
  max-width: 100%;
  padding-right: .5rem;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

@media (min-width: 992px) {
  .np-books-categories {
    position: sticky;
    top: .5rem;
  }
}

/* Таблица источников */
.np-books-table {
  font-size: .95rem;
}

/* Ширины колонок задаёт разметка: у DataTables выключен autoWidth
   (public/js/book.js, initTable), иначе он считает ширины по содержимому и
   таблица не занимает всю ширину колонки — на телефоне это особенно заметно
   (ср. таблицы правки: np-edit-table в public/css/np_style.css). */
.np-books-table td,
.np-books-table th {
  overflow-wrap: anywhere;
}

.np-books-col-icon {
  width: 46px;
}

.np-books-col-year {
  width: 80px;
}

/* Обложка источника в строке таблицы: узкая миниатюра */
.np-books-cover-thumb {
  display: block;
  width: 30px;
  height: 42px;
  object-fit: cover;
  border: 1px solid var(--bs-border-color);
  border-radius: .15rem;
  background: #f4f4f4;
}

/* Заглушка вместо обложки в строке таблицы: тот же значок книги, что и в
   карточках (bs5.book.blocks.cover_placeholder), но меньше базовых 64px из
   темы (public/css/np_style.css, .np-book-cover-placeholder) — строка таблицы
   должна оставаться невысокой. */
.np-books-col-icon .np-book-cover-placeholder {
  display: block;
  width: 30px;
  height: 30px;
}

.np-books-name {
  font-weight: 600;
}

.np-books-meta,
.np-books-description {
  font-size: .85rem;
  color: var(--bs-secondary-color);
}

.np-books-description {
  margin-top: 2px;
}

/* Карточки источников */
.np-book-card-cover {
  display: flex;
  align-items: center;
  justify-content: center;
  height: 190px;
  overflow: hidden;
  background: #f4f4f4;
  border-bottom: 1px solid var(--bs-border-color);
}

.np-book-card-cover img {
  max-width: 100%;
  max-height: 100%;
  object-fit: contain;
}

.np-book-card-cover--empty {
  padding: 2rem;
}

/* Заглушка вместо обложки: значок книги (bs5.book.blocks.cover_placeholder).
   Базовые размеры (64px) и оттенок значка лежат в базовой теме —
   public/css/np_style.css, .np-book-cover-placeholder: заглушка выводится и в
   блоке ссылок, а book.css на тех страницах не подключается. Здесь остаётся
   только то, что относится к страницам источника. */

.np-book-card-title {
  font-weight: 600;
  font-size: .95rem;
  line-height: 1.25;
}

.np-book-card-meta,
.np-book-card-description {
  font-size: .82rem;
  color: var(--bs-secondary-color);
}

.np-book-card-description {
  margin-top: .25rem;
}

.np-book-card-footer {
  display: flex;
  flex-wrap: wrap;
  gap: .25rem;
  padding-top: .4rem;
}

.np-book-card-footer .badge {
  font-weight: 400;
  white-space: normal;
  text-align: left;
}

/* Пояснение в форме добавления */
.np-books-form-note {
  font-size: .85rem;
  color: var(--bs-secondary-color);
}

/* --- Страница источника (/files/books/{id}) -------------------------------- */

/* Обложка источника и сведения о нём: слева картинка, справа описание. */
.np-book-page-cover {
  max-width: 100%;
  max-height: 420px;
  border: 1px solid var(--bs-border-color);
  border-radius: .25rem;
  padding: .25rem;
  background: var(--bs-body-bg);
}

/* Обложку не добавили: пустая площадка с пунктирной рамкой и значком книги. */
.np-book-page-cover--empty {
  display: flex;
  align-items: center;
  justify-content: center;
  min-height: 160px;
  border-style: dashed;
}

/* В шапке страницы источника значок крупнее, чем базовые 64px из темы
   (public/css/np_style.css, .np-book-cover-placeholder) */
.np-book-page-cover--empty .np-book-cover-placeholder {
  width: 96px;
  height: 96px;
}

.np-book-page-info {
  margin-bottom: .5rem;
}

.np-book-page-info dt {
  font-weight: 600;
  color: var(--bs-secondary-color);
}

.np-book-page-desc img {
  max-width: 100%;
  height: auto;
}

/* Оглавление: название — слева, номер страницы — справа, между ними точки. */
.np-chapter-list {
  list-style: none;
  margin: 0;
  padding-left: 0;
}

.np-chapter-item {
  scroll-margin-top: 5rem;
}

.np-chapter-row {
  display: flex;
  align-items: baseline;
  gap: .25rem;
  padding: .15rem 0;
}

.np-chapter-title {
  flex: 0 1 auto;
}

.np-chapter-dots {
  flex: 1 1 auto;
  min-width: 1.5rem;
  align-self: center;
  border-bottom: 1px dotted var(--bs-secondary-color);
  margin: 0 .35rem;
  transform: translateY(-.25rem);
}

.np-chapter-page {
  flex: 0 0 auto;
  font-variant-numeric: tabular-nums;
  white-space: nowrap;
}

.np-chapter-children {
  font-size: .95em;
}

/* Пункт, к которому пришли по якорю с другой страницы. */
.np-chapter-item.np-chapter-target > .np-chapter-row {
  background: var(--bs-warning-bg-subtle, rgba(255, 193, 7, .15));
  border-radius: .2rem;
}

/* --- Обложка в форме правки источника (bs5.book.edit) ----------------------- */

/* Текущая обложка рядом с полем выбора файла: площадка того же вида, что и в
   шапке страницы источника (.np-book-page-cover), но размером под форму. */
.np-edit-cover-preview {
  flex: 0 0 auto;
  display: flex;
  align-items: center;
  justify-content: center;
  width: 96px;
  height: 128px;
  overflow: hidden;
  border: 1px solid var(--bs-border-color);
  border-radius: .25rem;
  padding: .25rem;
  background: var(--bs-body-bg);
}

.np-edit-cover-preview img {
  max-width: 100%;
  max-height: 100%;
  object-fit: contain;
}

/* Обложки нет: пустая площадка с пунктирной рамкой и значком книги. */
.np-edit-cover-preview--empty {
  border-style: dashed;
}

.np-edit-cover-preview--empty .np-book-cover-placeholder {
  width: 48px;
  height: 48px;
}

/* --- Правка оглавления ------------------------------------------------------ */

.np-chapter-admin-item {
  list-style: none;
}

.np-chapter-admin-row {
  display: flex;
  align-items: baseline;
  gap: .5rem;
  padding: .2rem 0;
}

.np-chapter-admin-title {
  flex: 0 1 auto;
}

.np-chapter-admin-dots {
  flex: 1 1 auto;
  min-width: 1.5rem;
  align-self: center;
  border-bottom: 1px dotted var(--bs-secondary-color);
  margin: 0 .35rem;
  transform: translateY(-.25rem);
}

.np-chapter-admin-page {
  flex: 0 0 auto;
  font-variant-numeric: tabular-nums;
  white-space: nowrap;
}

/* «Добавить подглаву» — сразу после названия пункта, а дальше точки и кнопки
   правки/удаления справа (см. blocks/chapter_admin_items.blade.php). */
.np-chapter-admin-child {
  flex: 0 0 auto;
  margin-right: .25rem;
}

.np-chapter-picked {
  font-weight: 600;
}

.np-chapter-results {
  max-height: 220px;
  overflow-y: auto;
}

.np-chapter-results .list-group-item {
  cursor: pointer;
}

/* Форма пункта оглавления: раскрывается прямо в списке (js/book_chapters.js),
   поэтому выделена рамкой и фоном — видно, к какому пункту добавляется подглава. */
.np-chapter-form {
  background: var(--bs-tertiary-bg, #f8f9fa);
  border: 1px solid var(--bs-border-color, #dee2e6);
  border-radius: .375rem;
  padding: .75rem;
  margin: .35rem 0 .75rem;
}

/* Форма подглавы стоит внутри пункта — отступ как у дочерних пунктов списка. */
.np-chapter-admin-item > .np-chapter-form {
  margin-left: 1.5rem;
}

