/* ============================================================
   ЛИСТЫ

   Лист — это чертёж, а не часть интерфейса: он всегда белый с
   чёрными линиями, независимо от темы приложения. Поэтому цвета
   здесь заданы прямо, а не переменными темы — на бумаге и в PDF
   тёмная тема выглядела бы недоразумением.

   Размеры внутри листа — в миллиметрах: браузер переводит их в
   пиксели сам, и при печати лист получается натуральной величины.
   ============================================================ */

.sheet-view{display:flex;flex-direction:column;height:100%;min-height:0}

/* ---------- панель инструментов листа ---------- */
.sheet-bar{
  flex:none;display:flex;align-items:center;gap:14px;flex-wrap:wrap;
  padding:10px 16px;border-bottom:1px solid var(--m-outline-var);
  background:var(--m-surface);
}
.sb-field{
  display:flex;align-items:center;gap:6px;
  font-size:11.5px;color:var(--m-on-variant);white-space:nowrap;
}
.sb-field select{
  font:inherit;font-size:12.5px;color:var(--text);
  background:var(--m-s-cont);border:0;border-radius:8px;padding:5px 8px;cursor:pointer;
}
.sb-spacer{flex:1}

/* ---------- поле, на котором лежит лист ---------- */
/* Фон поля и белую бумагу рисует холст (030-b): видовые экраны — живые
   вьюпорты под листом, и непрозрачный фон их закрыл бы. Цвет поля
   холст берёт из той же переменной темы */
.sheet-scroll{
  flex:1;min-height:0;overflow:auto;
  padding:24px;background:transparent;
}
/* Панель вкладки-листа — тоже: у вкладок без сцены фон непрозрачный */
.dv-view-panel.sheet-panel:has(> .sheet-view){background:transparent}
.sheet-zoom{transform-origin:top left}

.sheet-page{
  position:relative;background:transparent;color:#000;
  box-shadow:0 6px 28px rgba(0,0,0,.25);
  font-family:"Barlow Condensed","Barlow",system-ui,sans-serif;
}

/* Внутренняя рамка чертежа: поля 20/5/5/5 и толщину линии задаёт ядро
   (client/src/core/model/sheetStamp.ts), сюда они приходят стилем узла */
/* Рамка лежит поверх штампа и указателя не ловит: её правая и нижняя
   линии — это контур штампа, и рисоваться они должны сверху */
.sheet-border{
  position:absolute;box-sizing:border-box;pointer-events:none;
  border:0.7mm solid #000;
}
.sheet-page.drop-target .sheet-border{outline:1mm dashed #35c9bd;outline-offset:1mm}
.sheet-hint{font-size:11.5px;color:var(--m-on-variant)}
.sheet-field{position:absolute}

/* ---------- видовой экран (030-b) ---------- */
/* Экран — окно в вид: его прямоугольник — ровно подрезка × масштаб.
   Картинку рисует холст под ним, поверх — вектор; подпись — под окном,
   вне прямоугольника */
.sheet-vp{
  position:absolute;box-sizing:border-box;
  border:0.25mm solid transparent;background:transparent;
  cursor:move;touch-action:none;
}
.sheet-vp:hover{border-color:#35c9bd}
.sheet-vp.moving{border-color:#35c9bd;box-shadow:0 0 0 1px #35c9bd}
.sheet-vp.selected{border-color:#35c9bd;box-shadow:0 0 0 0.5mm rgba(53,201,189,.35)}
.sheet-vp.activated{border:0.5mm solid #1a9c90;cursor:grab}
.vp-image{
  position:absolute;inset:0;overflow:hidden;background:transparent;
  display:flex;align-items:center;justify-content:center;
}
.vp-vector{position:absolute;inset:0;width:100%;height:100%;pointer-events:none}
/* Снимок экрана — только для печати: на экране вид живой */
.vp-print{display:none}
.vp-wait{font-size:3mm;color:#8a8a8a}
.vp-cap{
  position:absolute;left:0;top:100%;margin-top:1mm;max-width:100%;
  display:flex;gap:2mm;align-items:baseline;
  font-size:3.2mm;line-height:1.2;white-space:nowrap;overflow:hidden;
}
.vp-cap b{overflow:hidden;text-overflow:ellipsis}
.vp-cap .vp-scale{color:#555;flex:none}
.vp-close{
  position:absolute;right:1mm;top:1mm;width:5mm;height:5mm;
  border:0;border-radius:50%;background:rgba(0,0,0,.45);color:#fff;
  font-size:3mm;line-height:1;cursor:pointer;opacity:0;transition:opacity .12s;
}
.sheet-vp:hover .vp-close{opacity:1}
/* Ручки подрезки — у выбранного экрана: стороны и углы */
.vp-handle{
  position:absolute;width:2.4mm;height:2.4mm;box-sizing:border-box;
  background:#fff;border:0.3mm solid #1a9c90;display:none;
  transform:translate(-50%,-50%);
}
.sheet-vp.selected .vp-handle{display:block}
.vp-handle[data-h="n"]{left:50%;top:0;cursor:ns-resize}
.vp-handle[data-h="s"]{left:50%;top:100%;cursor:ns-resize}
.vp-handle[data-h="w"]{left:0;top:50%;cursor:ew-resize}
.vp-handle[data-h="e"]{left:100%;top:50%;cursor:ew-resize}
.vp-handle[data-h="nw"]{left:0;top:0;cursor:nwse-resize}
.vp-handle[data-h="se"]{left:100%;top:100%;cursor:nwse-resize}
.vp-handle[data-h="ne"]{left:100%;top:0;cursor:nesw-resize}
.vp-handle[data-h="sw"]{left:0;top:100%;cursor:nesw-resize}
/* Вид активирован: всё остальное на листе бледнеет */
.vp-activated .sheet-stamp,
.vp-activated .sheet-border,
.vp-activated .sheet-vp:not(.activated){opacity:.35}

/* ---------- основная надпись по ГОСТ Р 21.101, форма 3 ---------- */
/* Штамп прижат к рамке: правая и нижняя его линии — это линии рамки,
   поэтому своих у него только верхняя и левая. Внутренние линии рисуют
   сами ячейки, каждая слева и сверху от себя (см. js/studio/stamp.js).

   Координаты и размеры ячеек приходят из ядра и ставятся стилем узла;
   здесь только начертание. */
.sheet-stamp{
  position:absolute;box-sizing:border-box;
  border-style:solid;border-color:#000;border-width:0.7mm 0 0 0.7mm;
  background:#fff;
}
.st-cell{
  position:absolute;box-sizing:border-box;overflow:hidden;
  display:flex;align-items:center;gap:0.6mm;
  padding:0 0.7mm;line-height:1.05;
}
.st-a-center{justify-content:center;text-align:center}
.st-a-left{justify-content:flex-start;text-align:left}

/* Подпись формы — часть бланка, печатается всегда */
.st-form-label{font-size:2.3mm;color:#000}
/* Подсказка видна, пока графа пуста, и в печать не идёт */
.st-hint{font-size:2.3mm;color:#9a9a9a}
.st-text{overflow:hidden;text-overflow:ellipsis}

.st-t-form  .st-text{font-size:2.6mm}
.st-t-value .st-text{font-size:3.2mm}
.st-t-small .st-text{font-size:2.4mm}
.st-t-small{padding:0 0.2mm}
.st-t-title .st-text{font-size:4.2mm;white-space:normal}
.st-t-title{padding:0 1.5mm}

/* Ячейка правится двойным кликом; вычисляемую правит документ */
.st-cell.editable{cursor:text}
.st-cell.editable:hover{background:#eef7f6}
.st-cell.computed{background:#f2f2f2;cursor:default}
.st-input{
  width:100%;min-width:0;box-sizing:border-box;
  font:inherit;font-size:3.2mm;color:#000;text-align:inherit;
  border:0.25mm solid #35c9bd;border-radius:0.5mm;background:#fff;
  padding:0 0.5mm;outline:0;
}

/* ---------- печать ---------- */
/* На время печати страница листа переезжает в отдельный корень:
   так до принтера доходит только она, без ленты и палитр. */
#printRoot{display:none}

@media print{
  body.printing-sheet .app{display:none !important}
  body.printing-sheet #printRoot{display:block}
  body.printing-sheet .sheet-page{box-shadow:none;margin:0;background:#fff}
  body.printing-sheet .vp-close,
  body.printing-sheet .vp-handle{display:none}
  body.printing-sheet .sheet-vp{border-color:transparent;box-shadow:none}
  /* Живой вьюпорт — холст, на печать он не попадает: вместо него снимок
     той же камерой (030-b) */
  body.printing-sheet .vp-print{display:block;position:absolute;inset:0;width:100%;height:100%}
  /* На чертеже нет ни подсказок пустых граф, ни подсветки вычисляемых.
     Без привязки к printing-sheet: печатается лист или его снимок для
     PDF (031) — подсказкам там не место в обоих случаях. */
  .st-hint{display:none}
  .st-cell.computed{background:none}
  /* Картинки видов должны печататься в полном цвете */
  body.printing-sheet .vp-image img{print-color-adjust:exact;-webkit-print-color-adjust:exact}
}
