/* Блок ig-sheet. Панель, строка формул и прокрутка - из выгрузки 2. Дизайн/5. этап/2026-09-23
   (blocks/objects.css); таблица листа-документа, меню панели и правила редактора Jspreadsheet CE
   добавлены при переносе (SPEC §25-§26: лист как документ). */

/* ---------- Панель форматирования ---------- */

/* Панель и строка формул прилипают к верху окна: страница листается до панели, дальше
   прокручивается только таблица (высоту ей задаёт fit() в sheet-grid.js). Слои ниже окон
   портала (.ig-modal - 15): иначе панель закрывала окна листа; панель выше строки формул -
   её выпадающие меню (палитра, размер) не уходят под строку формул */

.ig-sheet__toolbar {
  position: sticky;
  top: 0;
  z-index: 13;
  display: flex;
  align-items: center;
  gap: 4px;
  padding: 6px var(--space-3);
  border-bottom: 1px solid #eef2f3;
  background: var(--surface-0);
}

.ig-sheet__tb {
  height: 28px;
  min-width: 28px;
  padding: 0;
  border: 0;
  border-radius: var(--radius-sm);
  background: transparent;
  color: var(--ink-900);
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 4px;
  flex-shrink: 0;
}

.ig-sheet__tb:hover {
  background: var(--brand-50);
  color: var(--brand-700);
}

.ig-sheet__tb:disabled {
  cursor: default;
  opacity: 0.4;
}

.ig-sheet__tb:disabled:hover {
  background: transparent;
  color: var(--ink-900);
}

.ig-sheet__tb[aria-pressed="true"],
.ig-sheet__tb[aria-expanded="true"] {
  background: var(--brand-50);
  color: var(--brand-700);
}

.ig-sheet__tb .ig-icon {
  width: 15px;
  height: 15px;
}

.ig-sheet__tbtext {
  padding: 0 6px;
  font-size: 12.5px;
  font-weight: 500;
}

.ig-sheet__tb--size {
  min-width: 40px;
  border: 1px solid var(--border-300);
}

.ig-sheet__sep {
  width: 1px;
  height: 22px;
  margin: 0 4px;
  background: var(--border-200);
  flex-shrink: 0;
}

/* Меню под кнопкой: список пунктов или палитра цветов Google-таблиц */

.ig-sheet__menu {
  position: absolute;
  top: 100%;
  z-index: 20;
  display: flex;
  flex-direction: column;
  min-width: 140px;
  padding: 4px;
  border: 1px solid var(--border-200);
  border-radius: var(--radius-sm);
  background: var(--surface-0);
  box-shadow: var(--shadow-md);
}

.ig-sheet__menu[hidden] {
  display: none;
}

.ig-sheet__item {
  padding: 6px 10px;
  border: 0;
  border-radius: var(--radius-xs);
  background: transparent;
  color: var(--ink-900);
  font-size: 12.5px;
  text-align: left;
  cursor: pointer;
}

.ig-sheet__item:hover,
.ig-sheet__item:focus-visible {
  background: var(--brand-50);
  color: var(--brand-700);
}

.ig-sheet__menu--palette {
  gap: 2px;
  padding: 6px;
}

.ig-sheet__prow {
  display: flex;
  gap: 2px;
}

.ig-sheet__swatch {
  width: 18px;
  height: 18px;
  padding: 0;
  border: 1px solid var(--border-300);
  border-radius: var(--radius-xs);
  cursor: pointer;
}

.ig-sheet__swatch:hover,
.ig-sheet__swatch:focus-visible {
  outline: 2px solid var(--brand-600);
  outline-offset: 1px;
}

/* Меню «Границы»: сетка вариантов, как в Google-таблицах, под ней толщина линии */

.ig-sheet__menu--borders {
  gap: 6px;
  padding: 6px;
}

.ig-sheet__bgrid {
  display: grid;
  grid-template-columns: repeat(5, 28px);
  gap: 2px;
}

.ig-sheet__weights {
  display: flex;
  gap: 2px;
  padding-top: 6px;
  border-top: 1px solid var(--border-200);
}

.ig-sheet__weight {
  flex: 1 1 0;
  display: inline-flex;
  align-items: center;
  gap: 6px;
}

.ig-sheet__weight[aria-checked="true"] {
  background: var(--brand-50);
  color: var(--brand-700);
}

.ig-sheet__stroke {
  width: 18px;
  border-top: 1px solid currentColor;
}

.ig-sheet__stroke--thick {
  border-top-width: 2px;
}

/* ---------- Строка формул ---------- */

.ig-sheet__fx {
  position: sticky;
  top: 41px;
  z-index: 12;
  display: flex;
  align-items: center;
  gap: var(--space-2);
  padding: 5px var(--space-3);
  border-bottom: 1px solid var(--border-200);
  background: var(--surface-50);
}

.ig-sheet__ref {
  width: 64px;
  height: 26px;
  box-sizing: border-box;
  display: flex;
  align-items: center;
  justify-content: center;
  border: 1px solid var(--border-300);
  border-radius: var(--radius-sm);
  background: var(--surface-0);
  font-size: 12.5px;
  font-weight: 600;
  font-variant-numeric: tabular-nums;
}

.ig-sheet__fxlabel {
  font-size: 12px;
  font-weight: 600;
  font-style: italic;
  color: var(--ink-600);
}

/* Поле строки формул (sheet-fx.js): правка формулы или значения выделенной ячейки; у ячейки без
   права правки - только для чтения */

.ig-sheet__formula {
  flex: 1 1 auto;
  min-width: 0;
  height: 26px;
  box-sizing: border-box;
  padding: 0 var(--space-2);
  border: 1px solid var(--border-300);
  border-radius: var(--radius-sm);
  background: var(--surface-0);
  color: var(--sheet-ink);
  font-size: 12.5px;
  font-family: var(--font-mono);
}

.ig-sheet__formula:focus {
  outline: none;
  border-color: var(--brand-600);
  box-shadow: var(--shadow-focus);
}

.ig-sheet__formula:read-only {
  cursor: default;
}

.ig-sheet__formula:read-only:focus {
  border-color: var(--border-300);
}

/* ---------- Таблица листа ---------- */

.ig-sheet__scroll {
  flex: 1 1 auto;
  min-height: 0;
  overflow: auto;
  font-size: 12.5px;
}

/* Разметка без скриптов: буквы столбцов, номера строк, ячейки */

.ig-sheet__table {
  border-collapse: collapse;
  table-layout: fixed;
  font-size: 12.5px;
}

.ig-sheet__corner,
.ig-sheet__col,
.ig-sheet__rn {
  box-sizing: border-box;
  border-right: 1px solid var(--sheet-grid);
  border-bottom: 1px solid var(--sheet-grid);
  background: var(--surface-200);
  font-size: 11px;
  font-weight: 600;
  color: var(--ink-600);
  text-align: center;
}

.ig-sheet__corner,
.ig-sheet__rn {
  width: 34px;
  min-width: 34px;
}

.ig-sheet__col {
  height: 24px;
}

.ig-sheet__rn {
  font-size: 11.5px;
  font-weight: 400;
  font-variant-numeric: tabular-nums;
}

.ig-sheet__col--hidden,
.ig-sheet__row--hidden {
  display: none;
}

.ig-sheet__cell {
  box-sizing: border-box;
  height: 27px;
  padding: 3px 6px;
  border-right: 1px solid var(--sheet-grid);
  border-bottom: 1px solid var(--sheet-grid);
  color: var(--sheet-ink);
  font-size: 12.5px;
  line-height: 20px;
  white-space: nowrap;
  overflow: hidden;
  vertical-align: middle;
}

.ig-sheet__cell--num {
  text-align: right;
  font-variant-numeric: tabular-nums;
}

.ig-sheet__cell--hl {
  background: var(--surface-100);
}

.ig-sheet__cell--neg {
  background: var(--danger-50);
  color: #b3261e;
  font-weight: 600;
}

.ig-sheet__cell--pos {
  background: var(--success-50);
  color: var(--success-600);
}

.ig-sheet__cell--warn {
  color: var(--warning-700);
}

.ig-sheet__cell--empty {
  background: #fff9ee;
}

/* Направление текста: снизу вверх - боковое письмо слева направо (строки идут слева направо,
   «по левому краю» - от низа ячейки), сверху вниз - вертикальное письмо. Поворачивается текст,
   а не ячейка: её границы, линия закрепления и выделение остаются на своих сторонах (поворот
   ячейки на 180° переносил правую границу влево - замечание Никиты 28.09.2026). Редактор CE
   наследует направление */

.ig-sheet__cell--rot-up {
  writing-mode: sideways-lr;
}

.ig-sheet__cell--rot-down {
  writing-mode: vertical-rl;
}

/* ---------- Редактор Jspreadsheet CE ---------- */

/* Ячейки редактора - td таблицы jss_worksheet с классами ig-sheet__cell (модификатор --td);
   правила CE задают рамки и цвет селекторами с тегами, поэтому нужна специфичность через
   .ig-sheet__scroll и .jss_worksheet */

/* inline-block области прокрутки CE без зазора под строку текста: полоса прокрутки вправо
   встаёт вплотную под таблицу */

.ig-sheet__scroll .jss_content {
  padding: 0;
  overflow: auto;
  vertical-align: top;
}

.ig-sheet__scroll .jss_worksheet {
  border: 0;
  font-size: 12.5px;
  color: var(--sheet-ink);
}

.ig-sheet__scroll .jss_worksheet > thead > tr > td {
  height: 24px;
  padding: 0;
  border-top: 0;
  border-left: 0;
  border-right: 1px solid var(--sheet-grid);
  border-bottom: 1px solid var(--sheet-grid);
  background: var(--surface-200);
  font-size: 11px;
  font-weight: 600;
  color: var(--ink-600);
  text-align: center;
  position: sticky;
  top: 0;
  z-index: 6;
}

.ig-sheet__scroll .jss_worksheet .ig-sheet__index {
  width: 34px;
  padding: 0;
  line-height: 20px;
  border-top: 0;
  border-left: 0;
  border-right: 1px solid var(--sheet-grid);
  border-bottom: 1px solid var(--sheet-grid);
  background: var(--surface-200);
  font-size: 11.5px;
  color: var(--ink-600);
  text-align: center;
  font-variant-numeric: tabular-nums;
}

.ig-sheet__scroll .ig-sheet__cell--td {
  display: table-cell;
  height: 27px;
  vertical-align: middle;
  padding: 3px 6px;
  border-top: 0;
  border-left: 0;
  border-right: 1px solid var(--sheet-edge-r, var(--sheet-grid));
  border-bottom: 1px solid var(--sheet-edge-b, var(--sheet-grid));
  line-height: 20px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: clip;
  background-clip: padding-box;
}

.ig-sheet__scroll .ig-sheet__cell--td.readonly {
  color: var(--sheet-ink);
}

/* Своя полоса прокрутки вправо под прокручиваемой частью листа (sheet-grid.js): родную
   горизонтальную у .jss_content скрипт выключает, вертикальная остаётся родной */

.ig-sheet__hbar {
  overflow-x: auto;
  overflow-y: hidden;
}

.ig-sheet__hspace {
  height: 1px;
}

.ig-sheet__hbar::-webkit-scrollbar {
  height: 8px;
}

.ig-sheet__hbar::-webkit-scrollbar-track {
  background: var(--surface-200);
}

.ig-sheet__hbar::-webkit-scrollbar-thumb {
  background: var(--ink-400);
}

/* Границы ячеек (sheet-grid.js, applyEdges): правая и нижняя - цветом рамки ячейки
   (--sheet-edge-r, --sheet-edge-b выше), толстая часть и верх с левом - тенями внутрь
   (--sheet-edges), размер ячейки не меняется */

.ig-sheet__scroll .jss_worksheet td.ig-sheet__cell--td {
  box-shadow: var(--sheet-edges, none);
}

/* Выделение - фирменной линией (как синее в Google-таблицах), а не чёрной: чёрные границы
   ячеек его не скрывают. Толщину и вид линии задаёт CE */

.ig-sheet__scroll .jss_worksheet td.highlight-top {
  border-top-color: var(--brand-600);
}

.ig-sheet__scroll .jss_worksheet td.highlight-right {
  border-right-color: var(--brand-600);
}

.ig-sheet__scroll .jss_worksheet td.highlight-bottom {
  border-bottom-color: var(--brand-600);
}

.ig-sheet__scroll .jss_worksheet td.highlight-left {
  border-left-color: var(--brand-600);
}

/* Прежние области выделения (sheet-multiselect.js) - как выделение CE: фон и линии по краю;
   активная ячейка при нескольких областях - рамкой. Стоят до закреплений: у закреплённых ячеек,
   как и у выделения CE, фон свой */

.ig-sheet__scroll .jss_worksheet td.ig-sheet__multi {
  background-color: var(--sheet-select);
}

.ig-sheet__scroll .jss_worksheet td.ig-sheet__multi-top {
  border-top: 1px solid var(--brand-600);
}

.ig-sheet__scroll .jss_worksheet td.ig-sheet__multi-right {
  border-right-color: var(--brand-600);
}

.ig-sheet__scroll .jss_worksheet td.ig-sheet__multi-bottom {
  border-bottom-color: var(--brand-600);
}

.ig-sheet__scroll .jss_worksheet td.ig-sheet__multi-left {
  border-left: 1px solid var(--brand-600);
}

.ig-sheet__scroll .jss_worksheet td.ig-sheet__multi-active {
  box-shadow: inset 0 0 0 2px var(--brand-600), var(--sheet-edges, 0 0 transparent);
}

/* Номера строк и буквы столбцов всех областей темнее, как в Google-таблицах: и у выделения CE
   (selected), и у прежних областей - одним цветом, выше фона закреплённых ячеек */

.ig-sheet__scroll .jss_worksheet > thead > tr > td.selected,
.ig-sheet__scroll .jss_worksheet > thead > tr > td.ig-sheet__multi-head,
.ig-sheet__scroll .jss_worksheet > tbody > tr.selected > td.ig-sheet__index,
.ig-sheet__scroll .jss_worksheet > tbody > tr > td.ig-sheet__index.ig-sheet__multi-head {
  background-color: var(--sheet-head-select);
}

/* Граница закрепления: правый край последнего закреплённого столбца - линия в 3 px (рамка
   ячейки и тень наружу, поверх уезжающих под неё столбцов), как в Google-таблицах; границы
   ячейки внутри неё остаются. Стоит до линий перетаскивания: на время переноса место вставки
   важнее */

.ig-sheet__scroll .jss_worksheet td.ig-sheet__frozen-edge {
  border-right-color: var(--sheet-freeze);
  box-shadow: 2px 0 0 var(--sheet-freeze), var(--sheet-edges, 0 0 transparent);
}

.ig-sheet__scroll .jss_worksheet td.ig-sheet__multi-active.ig-sheet__frozen-edge {
  box-shadow: inset 0 0 0 2px var(--brand-600), 2px 0 0 var(--sheet-freeze), var(--sheet-edges, 0 0 transparent);
}

/* Ссылки правящейся формулы - цветные рамки диапазонов, как в Google-таблицах
   (sheet-formula-assist.js): тени внутрь по краю диапазона (--sheet-formula-ref) поверх
   границ ячейки и линии закрепления */

.ig-sheet__scroll .jss_worksheet td.ig-sheet__formula-ref {
  box-shadow: var(--sheet-formula-ref), var(--sheet-edges, 0 0 transparent);
}

.ig-sheet__scroll .jss_worksheet td.ig-sheet__formula-ref.ig-sheet__frozen-edge {
  box-shadow: var(--sheet-formula-ref), 2px 0 0 var(--sheet-freeze), var(--sheet-edges, 0 0 transparent);
}

/* Пометки скрытых столбцов и строк (sheet-grid.js, markHidden): маленькие стрелки у соседних
   видимых букв и номеров, как в Google-таблицах; щелчок (у кого есть право на раскладку)
   показывает группу. Отступ от правого и нижнего края - полоса изменения размера CE (6 px) */

.ig-sheet__unhide {
  position: absolute;
  z-index: 1;
  display: flex;
  align-items: center;
  justify-content: center;
  width: 12px;
  height: 14px;
  padding: 0;
  border: 0;
  border-radius: var(--radius-xs);
  background: transparent;
  color: var(--brand-700);
  font-size: 11px;
  line-height: 1;
  cursor: default;
}

.ig-sheet__unhide--action {
  cursor: pointer;
}

.ig-sheet__unhide--action:hover,
.ig-sheet__unhide--action:focus-visible {
  background: var(--brand-50);
}

.ig-sheet__unhide--end {
  top: 5px;
  right: 6px;
}

.ig-sheet__unhide--start {
  top: 5px;
  left: 1px;
}

.ig-sheet__unhide--bottom {
  right: 1px;
  bottom: 6px;
}

.ig-sheet__unhide--top {
  top: 1px;
  right: 1px;
}

/* Перетаскивание строки за номер и столбца за букву: место вставки - линия с бирюзой */

.ig-sheet__scroll .jss_worksheet .ig-sheet__index,
.ig-sheet__scroll .jss_worksheet > thead > tr > td:not(.ig-sheet__th--corner) {
  cursor: grab;
}

.ig-sheet__scroll--dragging,
.ig-sheet__scroll--dragging * {
  cursor: grabbing;
  user-select: none;
}

.ig-sheet__scroll .jss_worksheet td.ig-sheet__drop-above {
  box-shadow: inset 0 2px 0 var(--brand-600);
}

.ig-sheet__scroll .jss_worksheet td.ig-sheet__drop-below {
  box-shadow: inset 0 -2px 0 var(--brand-600);
}

.ig-sheet__scroll .jss_worksheet td.ig-sheet__drop-left {
  box-shadow: inset 2px 0 0 var(--brand-600);
}

.ig-sheet__scroll .jss_worksheet td.ig-sheet__drop-right {
  box-shadow: inset -2px 0 0 var(--brand-600);
}

/* Перенос ячеек мышью (sheet-move.js): у края выделения - курсор «перемещение», новое место -
   пунктирная рамка поверх листа (в конце body, обрезана по видимой части таблицы), под окнами
   портала */

.ig-sheet__scroll--movable td {
  cursor: move;
}

.ig-sheet__scroll--moving,
.ig-sheet__scroll--moving * {
  cursor: move;
  user-select: none;
}

.ig-sheet__move-frame {
  position: fixed;
  z-index: 13;
  box-sizing: border-box;
  border: 2px dashed var(--brand-600);
  pointer-events: none;
}

.ig-sheet__move-frame[hidden] {
  display: none;
}

/* Закрепления - липкие ячейки: столбцы (и номера строк) прилипают слева, строки шапки -
   под буквами столбцов; пересечение - над обоими, буквы столбцов - над всем */

.ig-sheet__scroll .jss_worksheet td.ig-sheet__frozen-col {
  position: sticky;
  z-index: 3;
  background-color: var(--surface-0);
}

.ig-sheet__scroll .jss_worksheet > tbody > tr > td.ig-sheet__frozen-row {
  position: sticky;
  z-index: 4;
  background-color: var(--surface-0);
}

.ig-sheet__scroll .jss_worksheet > tbody > tr > td.ig-sheet__frozen-row.ig-sheet__frozen-col {
  z-index: 5;
}

.ig-sheet__scroll .jss_worksheet > thead > tr > td.ig-sheet__frozen-col {
  z-index: 7;
}

/* Цвет текста модификаторов - выше правила CE для ячеек только на чтение */

.ig-sheet__scroll .ig-sheet__cell--td.ig-sheet__cell--neg {
  color: #b3261e;
}

.ig-sheet__scroll .ig-sheet__cell--td.ig-sheet__cell--pos {
  color: var(--success-600);
}

.ig-sheet__scroll .ig-sheet__cell--td.ig-sheet__cell--warn {
  color: var(--warning-700);
}

.ig-sheet__scroll .ig-sheet__cell--td.ig-sheet__cell--num {
  text-align: right;
  font-variant-numeric: tabular-nums;
}

/* Галочка «Поиска» (sheet-checkbox.js): квадрат по центру ячейки, как флажок Google-таблиц;
   у того, кто не может править, - бледнее и без руки */

.ig-sheet__check {
  position: relative;
  display: inline-block;
  width: 14px;
  height: 14px;
  box-sizing: border-box;
  vertical-align: middle;
  border: 2px solid var(--ink-400);
  border-radius: 2px;
  background: var(--surface-0);
  cursor: pointer;
}

.ig-sheet__check[aria-checked="true"] {
  border-color: var(--brand-600);
  background: var(--brand-600);
}

.ig-sheet__check[aria-checked="true"]::after {
  content: "";
  position: absolute;
  left: 3px;
  top: 0;
  width: 4px;
  height: 8px;
  box-sizing: border-box;
  border: solid var(--ink-0);
  border-width: 0 2px 2px 0;
  transform: rotate(45deg);
}

.ig-sheet__check[aria-disabled="true"] {
  cursor: default;
  opacity: 0.6;
}

/* Бледная подсказка пустой ячейки (data-hint, «дата» в строке дат отгрузки): только вид -
   пропадает, как только в ячейке есть значение или открыт редактор */

.ig-sheet__scroll .ig-sheet__cell--hint:empty::before {
  content: attr(data-hint);
  color: var(--sheet-freeze);
  font-size: 10px;
  font-style: italic;
  font-weight: 400;
}

/* Примечание ячейки при наведении (sheet-tip.js): маленькая спокойная плашка; живёт в конце
   body, чтобы её не обрезала область прокрутки таблицы. Над панелью листа, под окнами портала */

.ig-sheet__tip {
  position: fixed;
  z-index: 14;
  max-width: 240px;
  padding: 2px 8px;
  border: 1px solid var(--border-300);
  border-radius: var(--radius-xs);
  background: var(--surface-50);
  box-shadow: var(--shadow-sm);
  color: var(--ink-600);
  font-size: 11px;
  line-height: 16px;
  pointer-events: none;
}

.ig-sheet__tip[hidden] {
  display: none;
}
