/* ИС ВУ — дополнения к Bootstrap 5.3 (вендорится, без CDN — контракт, п. 12).
   УИ-006: собственные стили построены на CSS-переменных Bootstrap
   (var(--bs-...)) и парных переменных индикации для светлой и тёмной тем;
   захардкоженных цветов нет (осознанное исключение — светлая подложка PNG
   разностной карты, см. .isvu-light-media). */

/* --- Парные цвета индикации (УИ-005): контраст не ниже WCAG AA ------------- */
:root,
[data-bs-theme="light"] {
  /* Текстовые цвета статусов на светлом фоне. */
  --isvu-ok-text: #146c43;
  --isvu-warn-text: #997404;
  --isvu-danger-text: #b02a37;
  --isvu-muted-text: #6c757d;
  /* Заливки точек-индикаторов и маркеров карты. */
  --isvu-ok-fill: #198754;
  --isvu-warn-fill: #ffc107;
  --isvu-danger-fill: #dc3545;
  --isvu-muted-fill: #adb5bd;
  /* Слои карты: ось прорези и границы участка. */
  --isvu-axis: #6610f2;
  --isvu-boundary: #fd7e14;
}

[data-bs-theme="dark"] {
  --isvu-ok-text: #75b798;
  --isvu-warn-text: #ffda6a;
  --isvu-danger-text: #ea868f;
  --isvu-muted-text: #adb5bd;
  --isvu-ok-fill: #479f76;
  --isvu-warn-fill: #ffcd39;
  --isvu-danger-fill: #e35d6a;
  --isvu-muted-fill: #6c757d;
  --isvu-axis: #a370f7;
  --isvu-boundary: #feb272;
}

.season-select {
  min-width: 10.5rem;
}

/* Группы пунктов главного меню (УИ-001/УИ-002): «флот» отдельно от
   «документов и участков». В свёрнутом меню разделитель горизонтальный,
   на широких экранах — вертикальная черта; навбар всегда на синем фоне,
   поэтому цвет фиксированно полупрозрачный белый. */
.isvu-nav-sep {
  height: 1px;
  margin: 0.35rem 0.75rem;
  background: rgba(255, 255, 255, 0.3);
}
@media (min-width: 992px) {
  .isvu-nav-sep {
    width: 1px;
    height: auto;
    align-self: stretch;
    margin: 0.4rem 0.65rem;
  }
}

/* Пункты меню не переносятся посреди названия раздела. */
.navbar-nav .nav-link {
  white-space: nowrap;
}

/* На широких экранах длинное меню переносится целыми пунктами — селектор
   сезона, переключатель темы и кнопка выхода не выталкиваются за край. */
@media (min-width: 992px) {
  .navbar-collapse {
    flex-wrap: wrap;
    row-gap: 0.25rem;
  }
  .navbar-nav {
    flex-wrap: wrap;
  }
}

/* Отметки наличия материалов на панели. */
.mark-yes { color: var(--isvu-ok-text); font-weight: 600; }
.mark-no  { color: var(--isvu-muted-fill); }

/* Подсветка превышения порогов сроков и расхождений. */
.deadline-overdue { color: var(--isvu-danger-text); font-weight: 600; }
.deadline-ok      { color: var(--isvu-ok-text); }

/* Мобильная форма извещения (п. 4.4.11 ТЗ): одна колонка,
   крупные элементы; проверено на ширине 360 px. */
.notice-form { max-width: 34rem; margin: 0 auto; }
.notice-form .form-label { font-size: 1.05rem; }
@media (max-width: 400px) {
  .notice-form .btn { width: 100%; }
}

/* Диаграммы ECharts на панели. */
.chart-box { width: 100%; height: 260px; }

/* Таблицы: длинные SHA-256 не раздувают колонки. */
.sha-cell { font-family: var(--bs-font-monospace); font-size: 0.8rem; word-break: break-all; }

/* Квитанция на форме офлайн-загрузки: прокрутка без инлайновых стилей. */
.isvu-receipt-box { max-height: 22rem; overflow: auto; }

/* УИ-006: PNG разностной карты не перегенерируется под тему — в обеих темах
   отображается на светлой карточке-подложке, иначе легенда нечитаемая
   (осознанное исключение, единственный фиксированный цвет). */
.isvu-light-media {
  background: #ffffff;
  padding: 0.5rem;
  border-radius: var(--bs-border-radius);
}

/* --- УИ-005: индикатор актуальности телеметрии ------------------------------ */
.isvu-ind {
  display: inline-flex;
  align-items: center;
  gap: 0.35rem;
  font-size: 0.85em;
  white-space: nowrap;
}
.isvu-ind-dot {
  width: 0.65em;
  height: 0.65em;
  border-radius: 50%;
  flex: none;
}
.isvu-ind--fresh { color: var(--isvu-ok-text); }
.isvu-ind--fresh .isvu-ind-dot { background: var(--isvu-ok-fill); }
.isvu-ind--stale { color: var(--isvu-warn-text); }
.isvu-ind--stale .isvu-ind-dot { background: var(--isvu-warn-fill); }
.isvu-ind--dead { color: var(--isvu-danger-text); font-weight: 600; }
.isvu-ind--dead .isvu-ind-dot { background: var(--isvu-danger-fill); }
.isvu-ind--offseason { color: var(--isvu-muted-text); }
.isvu-ind--offseason .isvu-ind-dot { background: var(--isvu-muted-fill); }

/* УИ-005: бейдж срока действия документа. */
.isvu-expiry { font-size: 0.85em; white-space: nowrap; }
.isvu-expiry--ok { color: var(--isvu-ok-text); }
.isvu-expiry--warn { color: var(--isvu-warn-text); font-weight: 600; }
.isvu-expiry--expired { color: var(--isvu-danger-text); font-weight: 600; }

/* --- УИ-003: интерактивная карта --------------------------------------------- */
.isvu-map { width: 100%; background: var(--bs-secondary-bg); }
.isvu-map-page { height: 70vh; min-height: 420px; }
.isvu-map-embedded { height: 420px; }

/* УИ-006: тёмного источника тайлов нет — фильтр ТОЛЬКО на tile pane;
   треки, маркеры, попапы и легенда рисуются поверх без фильтра. */
.isvu-map-dark-tiles .leaflet-tile-pane {
  filter: invert(1) hue-rotate(180deg) brightness(0.9) contrast(0.9) saturate(0.7);
}

/* Маркеры позиций: пиктограмма по типу борта, цвет — статус актуальности. */
.isvu-marker { background: none; border: none; }
.isvu-marker-shape {
  display: block;
  width: 14px;
  height: 14px;
  margin: 2px;
  border: 2px solid var(--bs-body-bg);
  box-shadow: 0 0 3px rgba(0, 0, 0, 0.6);
}
.isvu-marker-shape--dredger { transform: rotate(45deg); }
.isvu-marker-shape--bek { border-radius: 50%; }
.isvu-marker--fresh .isvu-marker-shape { background: var(--isvu-ok-fill); }
.isvu-marker--stale .isvu-marker-shape { background: var(--isvu-warn-fill); }
.isvu-marker--dead .isvu-marker-shape { background: var(--isvu-danger-fill); }
.isvu-marker--offseason .isvu-marker-shape { background: var(--isvu-muted-fill); }

/* Оси прорезей и границы участков рисуются canvas-рендерером; цвета
   берутся модулем карты из переменных --isvu-axis / --isvu-boundary. */

/* Стрелки направления и маркеры начала/конца прохода. */
.isvu-track-arrow-box { background: none; border: none; }
.isvu-track-arrow {
  display: block;
  font-size: 12px;
  line-height: 14px;
  text-align: center;
  text-shadow: 0 0 2px var(--bs-body-bg);
}
.isvu-track-endpoint {
  display: flex;
  align-items: center;
  justify-content: center;
  border-radius: 50%;
  font-size: 10px;
  font-weight: 700;
  line-height: 1;
}
.isvu-track-endpoint--start {
  background: var(--isvu-ok-fill);
  color: var(--bs-body-bg);
  border: 2px solid var(--bs-body-bg);
}
.isvu-track-endpoint--finish {
  background: var(--bs-body-color);
  color: var(--bs-body-bg);
  border: 2px solid var(--bs-body-bg);
  border-radius: 3px;
  font-size: 8px;
}

/* УИ-003: служебная строка в тултипе точки трека (проход/точка/шаг). */
.isvu-tooltip-note {
  color: var(--bs-secondary-color);
  font-size: 0.85em;
}

/* Легенда треков под картой. */
.isvu-track-legend { font-size: 0.85rem; }
.isvu-track-legend-item {
  display: inline-flex;
  align-items: center;
  gap: 0.4rem;
  margin-right: 1rem;
}
.isvu-track-legend-chip {
  width: 0.9rem;
  height: 0.9rem;
  border-radius: 0.2rem;
  flex: none;
}

/* УИ-006: попапы, тултипы и контролы Leaflet следуют теме интерфейса. */
[data-bs-theme="dark"] .leaflet-popup-content-wrapper,
[data-bs-theme="dark"] .leaflet-popup-tip,
[data-bs-theme="dark"] .leaflet-tooltip,
[data-bs-theme="dark"] .leaflet-control-layers,
[data-bs-theme="dark"] .leaflet-bar a {
  background: var(--bs-body-bg);
  color: var(--bs-body-color);
}
[data-bs-theme="dark"] .leaflet-tooltip-top { border-top-color: var(--bs-body-bg); }
[data-bs-theme="dark"] .leaflet-tooltip-bottom { border-bottom-color: var(--bs-body-bg); }
[data-bs-theme="dark"] .leaflet-tooltip-left { border-left-color: var(--bs-body-bg); }
[data-bs-theme="dark"] .leaflet-tooltip-right { border-right-color: var(--bs-body-bg); }
[data-bs-theme="dark"] .leaflet-bar a { border-bottom-color: var(--bs-border-color); }
[data-bs-theme="dark"] .leaflet-control-attribution {
  background: rgba(0, 0, 0, 0.6);
  color: var(--bs-body-color);
}
.isvu-map-popup a { color: var(--bs-link-color); }

/* --- Экран привязки PDF-планшета: растр, опорные точки, область данных ------
   Растр листа всегда светлый (лист бумаги), поэтому обёртка помечена
   .isvu-light-media; метки и рамка рисуются поверх и стилизуются
   переменными Bootstrap, чтобы читаться в обеих темах. */
.isvu-sheet-wrap {
  position: relative;
  display: block;
  overflow: hidden;
}
.isvu-sheet-overlay {
  position: absolute;
  inset: 0.5rem;
  cursor: crosshair;
}
.isvu-sheet-marker {
  position: absolute;
  transform: translate(-50%, -50%);
  min-width: 1.25rem;
  height: 1.25rem;
  padding: 0 0.2rem;
  border-radius: 0.625rem;
  background: var(--bs-danger);
  color: #fff;
  font-size: 0.7rem;
  line-height: 1.25rem;
  text-align: center;
  font-weight: 600;
  box-shadow: 0 0 0 2px rgba(255, 255, 255, 0.85);
  pointer-events: none;
}
.isvu-sheet-area {
  position: absolute;
  border: 2px dashed var(--bs-primary);
  background: rgba(13, 110, 253, 0.08);
  pointer-events: none;
}

/* Карта выбора координат опорной точки на экране привязки планшета. */
.isvu-picker-map {
  height: 320px;
}
