/* ── вкладка «ПТО» карточки объекта ─────────────────────────
   Вкладка занимает тело карточки целиком: сверху полоса видов и файла
   проекта, под ней — инструменты вида, ниже прокручивается только сам
   вид. Заголовки таблиц прилипают к верху прокрутки, как в прайсах. */
.pto-host { height: 100%; }
.pto { display: flex; flex-direction: column; height: 100%; min-height: 0; }
.pto-bar {
  flex: none; display: flex; align-items: center; gap: 11px; flex-wrap: wrap;
  padding: 9px var(--gut); border-bottom: 1px solid var(--line2);
}
.pto-src { margin-left: auto; display: flex; align-items: center; gap: 9px; min-width: 0; }
.pto-file {
  max-width: 252px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
  font-size: 11px; color: var(--ink2);
}
.pto-src .role-sel { max-width: 270px; }
.pto-view { flex: 1; min-height: 0; display: flex; flex-direction: column; }
.pto-tools {
  flex: none; display: flex; align-items: center; gap: 7px; flex-wrap: wrap;
  padding: 8px var(--gut); border-bottom: 1px solid var(--line2);
}
.pto-tools .grow { flex: 1; }
.pto-tools .pg-find input { width: 198px; }
.pto-main { flex: 1; min-height: 0; overflow: auto; }
.pto-saved { white-space: nowrap; }
.pto-saved.bad { color: var(--bad); }
.pto .btn-brand.sm svg, .pto .btn-ghost.sm svg { width: 12.5px; height: 12.5px; fill: none;
  stroke: currentColor; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; }
.pto .btn-brand.sm, .pto .btn-ghost.sm { display: inline-flex; align-items: center; gap: 5.5px; }
.pto-hint {
  margin: 12.5px var(--gut) 3.5px; padding: 9px 12.5px; border-radius: var(--r-sm);
  background: var(--raise); color: var(--ink2); font-size: 11px; line-height: 1.5;
}
.pto-h4 {
  margin: 0; padding: 16px var(--gut) 7px;
  font: 600 9.5px var(--sans); letter-spacing: .07em; text-transform: uppercase; color: var(--ink3);
}

/* ── состав проекта ── */
.pto-grp { border-bottom: 1px solid var(--line2); }
.pto-grp-h {
  display: flex; align-items: center; gap: 7px; width: 100%;
  padding: 11px var(--gut); border: 0; background: none; cursor: pointer;
  font: inherit; font-size: 11.5px; color: var(--ink); text-align: left;
}
.pto-grp-h:hover { background: var(--raise); }
.pto-grp-h svg { width: 12.5px; height: 12.5px; fill: none; stroke: var(--ink3); stroke-width: 2;
  transition: transform .15s var(--ease); }
.pto-grp.open > .pto-grp-h svg { transform: rotate(90deg); }
.pto-grp-h i { font-style: normal; font-size: 10.5px; color: var(--ink3); }
.pto-file-group > .pto-file-h { background: var(--raise); }
.pto-file-h b { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.pto-file-inner > .pto-grp-h { padding-left: calc(var(--gut) + 18px); }
.pto-file-inner > .pto-sheets { margin-left: 18px; width: calc(100% - 18px); }
.tbl.pto-sheets thead th { top: 0; }
.tbl.pto-sheets tbody td { height: 36px; padding-top: 2.5px; padding-bottom: 2.5px; }
/* Номер листа бывает словом («Разрешение 2») — обрезаем, целиком в подсказке. */
.pto-sheets .pto-no { color: var(--ink3); font-variant-numeric: tabular-nums;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.pto-sp td.pto-sp-no { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.pto-sel {
  width: 100%; height: 27px; padding: 0 5.5px; border: 1px solid transparent;
  border-radius: var(--r-sm); background: transparent; color: var(--ink2);
  font: inherit; font-size: 11px; cursor: pointer;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.pto-sel:hover { border-color: var(--line2); }
.pto-edited td:first-child { box-shadow: inset 3px 0 0 var(--brand-soft); }
.pto-open { display: inline-flex; align-items: center; gap: 3.5px; white-space: nowrap; }
.pto-open svg { width: 11px; height: 11px; fill: none; stroke: currentColor; stroke-width: 2;
  stroke-linecap: round; stroke-linejoin: round; }
.pto-blind {
  display: inline-block; margin-left: 5.5px; padding: 0 5.5px; border-radius: 5.5px;
  background: var(--warn-soft); color: var(--warn); font-size: 9.5px; font-style: normal;
}
/* Без своей горизонтальной прокрутки: иначе шапка сетки не прилипла бы к
   верху вида — шире экрана сетку прокручивает сам вид. */
.pto-matrix-wrap { padding: 0 var(--gut) 14.5px; }
.pto-matrix { border-collapse: separate; border-spacing: 0; font-size: 11px; }
.pto-matrix th, .pto-matrix td {
  border-bottom: 1px solid var(--line2); border-right: 1px solid var(--line2);
  padding: 4.5px 7px; vertical-align: top; text-align: left;
}
.pto-matrix thead th {
  background: var(--raise); font-weight: 600; color: var(--ink2); white-space: nowrap;
  border-top: 1px solid var(--line2);
}
.pto-matrix th:first-child { border-left: 1px solid var(--line2); }
.pto-matrix tbody th { font-weight: 600; color: var(--ink2); white-space: nowrap; background: var(--card); }
.pto-matrix td { min-width: 135px; }
.pto-chip {
  display: inline-block; margin: 1px 2.5px 1px 0; padding: 2px 6.5px; border-radius: 5.5px;
  border: 1px solid var(--line2); background: var(--card); color: var(--ink2);
  font: inherit; font-size: 10.5px; cursor: pointer;
}
.pto-chip:hover { border-color: var(--brand); color: var(--brand-deep); background: var(--brand-tint); }
.pto-chip-plan_light { border-color: var(--info-soft); }
.pto-chip-plan_power { border-color: var(--ok-soft); }
/* Кнопка секции живёт в шапке столбца: отсюда её и ищут, глядя на сетку. */
.pto-sec-pdf {
  margin-left: 3.5px; padding: 1px 5.5px; border-radius: 5.5px;
  border: 1px solid var(--line2); background: var(--card); color: var(--ink3);
  font: inherit; font-size: 9.5px; font-weight: 600; letter-spacing: .03em; cursor: pointer;
}
.pto-sec-pdf:hover { border-color: var(--brand); color: var(--brand-deep); background: var(--brand-tint); }
.pto-sec-pdf:disabled { opacity: .5; cursor: default; }
.pto-sec-pdf:disabled:hover { border-color: var(--line2); color: var(--ink3); background: var(--card); }
/* Полоса скачивания книги — рядом с её кнопкой. Секция весит 10–20 МБ,
   весь проект под 60: без полосы кажется, что платформа зависла. Пока
   сервер собирает книгу и размер ещё не известен, полоса бегает. */
.pto-pdf-prog {
  display: inline-flex; align-items: center; gap: 5.5px; margin-left: 5.5px;
  vertical-align: middle; white-space: nowrap;
  font-size: 9.5px; font-weight: 600; color: var(--ink3); font-variant-numeric: tabular-nums;
}
.pto-tools .pto-pdf-prog { margin: 0 3.5px 0 0; font-size: 10.5px; }
/* В шапке сетки полоса встаёт справа от кнопки, но места в столбце не
   занимает: на узком экране столбец иначе раздался бы на время скачивания
   и сетка дёрнулась. Что не влезло — срезает сама клетка шапки. */
/* Шапка с секциями прилипает под заголовком «Планы по этажам и секциям». */
.pto-matrix thead th { position: sticky; top: 38px; z-index: 2; overflow: hidden; }
.pto-matrix thead .pto-pdf-prog { position: absolute; }
.pto-pdf-bar {
  position: relative; width: 45px; height: 4.5px; border-radius: 999px;
  background: var(--box-bg); overflow: hidden;
}
.pto-tools .pto-pdf-bar { width: 90px; }
.pto-pdf-bar i {
  display: block; height: 100%; width: 0; border-radius: inherit;
  background: var(--brand); transition: width .15s linear;
}
.pto-pdf-prog.wait .pto-pdf-bar i { width: 40% !important; animation: ptoPdfWait 1.1s ease-in-out infinite alternate; }
@keyframes ptoPdfWait { from { transform: translateX(-100%); } to { transform: translateX(250%); } }
.pto-pdf-prog.done { color: var(--ok); }
.pto-pdf-prog.done .pto-pdf-bar i { background: var(--ok); }
@media (prefers-reduced-motion: reduce) {
  .pto-pdf-prog.wait .pto-pdf-bar i { animation: none; }
}

/* ── чек-лист ── */
.tbl.pto-cl { width: auto; }
.tbl.pto-cl thead th { top: 0; }
.tbl.pto-cl tbody td { height: 32.5px; padding-top: 2px; padding-bottom: 2px; }
.pto-cl .pto-lbl { color: var(--ink); font-size: 11px; }
.pto-cl tr.pto-hl td { background: var(--ok-soft); font-weight: 600; }
.pto-cl tr.pto-hl .pos-in { font-weight: 600; }
.pto-cl .pto-calc { color: var(--ink); font-variant-numeric: tabular-nums; }
/* Тип квартир — две клетки в одной: количество и площадь. Столбиком, а
   не рядом: в колонке секции сотня пикселей, и «1 038,5» просит места
   целиком. Подпись «шт / м²» — у названия строки, чтобы не повторять её
   в каждой колонке. */
.pto-cl .pto-two { display: flex; flex-direction: column; gap: 1.5px; align-items: stretch; }
.pto-cl .pto-two .pos-in { padding-top: 2px; padding-bottom: 2px; }
.pto-cl .pto-two > span { text-align: right; }
.pto-cl .pto-sub { color: var(--ink3); font-size: 10.5px; font-style: normal; }
.pto-cl .pto-lbl .pto-sub { margin-left: 4.5px; }
/* Площадь паркинга — у итога: в «Итого общую площадь» она не входит, но
   на глазах у площадей ей место. */
.pto-parea { margin: 9px var(--gut) 0; font-size: 11px; color: var(--ink2); }
.pto-parea:empty { display: none; }
.pto-auto .pos-in, .pto-auto.pto-f .pos-in { color: var(--info); }
td.pto-auto { box-shadow: inset 0 -2px 0 var(--info-soft); }
.pto-ta { resize: none; line-height: 1.35; display: block; overflow: hidden; }
.pto-warn {
  margin: 11px var(--gut) 0; padding: 8px 12.5px; border-radius: var(--r-sm);
  background: var(--warn-soft); color: var(--warn); font-size: 11px; line-height: 1.6;
}
.tbl.pto-park { margin-bottom: 21.5px; }

/* ── карточка ── */
.pto-card { padding-bottom: 29px; }
.pto-card-head { padding: 14.5px var(--gut) 3.5px; }
.pto-card-head b { display: block; font-size: 13.5px; color: var(--ink); }
.pto-card-head span { display: block; margin-top: 2.5px; font-size: 11px; color: var(--ink3); }
.pto-card-head p { margin: 7px 0 0; max-width: 684px; font-size: 11px; color: var(--ink3); line-height: 1.5; }
.pto-blk { margin: 12.5px var(--gut) 0; max-width: 990px; border: 1px solid var(--line2);
  border-radius: var(--r-sm); overflow: hidden; }
.pto-blk h4 {
  margin: 0; padding: 8px 12.5px; background: var(--raise); border-bottom: 1px solid var(--line2);
  font-size: 11px; font-weight: 600; color: var(--ink);
}
.pto-f {
  display: grid; grid-template-columns: minmax(180px, 38%) 1fr; gap: 9px; align-items: start;
  padding: 3.5px 12.5px; border-bottom: 1px solid var(--line2);
}
.pto-f:last-child { border-bottom: 0; }
.pto-f > span { padding: 6.5px 0; font-size: 11px; color: var(--ink2); line-height: 1.35; }
.pto-f .pos-in { margin: 1px 0; }
/* В карточке поля — поля формы, а не клетки таблицы: рамку видно и в
   покое, иначе пустая карточка читается как список вопросов без места
   для ответа. */
.pto-blk .pos-in { border-color: var(--line2); background: var(--card); }
.pto-blk .pos-in:hover { border-color: var(--line); }
.pto-f.pto-auto .pos-in { background: var(--card); }
.pto-f.pto-auto { background: var(--info-soft); }
.pto-ro { padding: 6.5px 0; font-size: 11px; white-space: pre-wrap; }
.pto-ctbl-wrap { overflow-x: auto; }
.pto-ctbl { width: 100%; border-collapse: collapse; font-size: 11px; }
.pto-ctbl th {
  padding: 5.5px 7px; text-align: left; font-weight: 600; font-size: 10.5px; color: var(--ink3);
  border-bottom: 1px solid var(--line2); background: var(--card);
}
.pto-ctbl td { padding: 2px 3.5px; border-bottom: 1px solid var(--line2); vertical-align: top; }
.pto-ctbl td.pto-lbl { padding: 7px 9px; color: var(--ink); white-space: nowrap; }
.pto-ctbl td.pto-x { width: 27px; text-align: center; }
.pto-empty-row { padding: 9px 11px !important; font-size: 11px; }
.pto-addrow { margin: 5.5px 9px 7px; }
.pto-auto-blk h4 { background: var(--info-soft); }
.pto-tag { font-style: normal; font-weight: 400; font-size: 10px; color: var(--info); margin-left: 5.5px; }

/* ── кабельный журнал ── */
.tbl.pto-jt { border-collapse: separate; border-spacing: 0; }
.tbl.pto-jt thead th { top: 0; }
.tbl.pto-jt tbody td { height: 34px; padding-top: 2px; padding-bottom: 2px; }
.tbl.pto-jt td, .tbl.pto-jt th { padding-left: 5.5px; padding-right: 5.5px; }
.tbl.pto-jt th:first-child, .tbl.pto-jt td:first-child { padding-left: calc(var(--gut) - 6.5px); }
.pto-jt tr.pto-jh td {
  height: auto; padding-top: 12.5px; padding-bottom: 5.5px; background: var(--card);
  border-bottom: 1px solid var(--line); font-size: 11px; color: var(--ink);
}
.pto-jt tr.pto-jh span { margin: 0 9px; color: var(--ink3); font-size: 11px; }
.pto-jt tr.pto-flag td { background: color-mix(in srgb, var(--warn-soft) 55%, transparent); }
.pto-checks { font-size: 10px; line-height: 1.3; }
.pto-chk {
  display: inline-block; margin: 1px 2.5px 1px 0; padding: 1px 5.5px; border-radius: 5.5px;
  background: var(--warn-soft); color: var(--warn);
}
.pto-chk.pto-chk-ref { background: var(--info-soft); color: var(--info); }
.pto-acts { opacity: 1; white-space: nowrap; }
.pto-acts .lnk { padding: 2px 6.5px; font-size: 12.5px; }
.pto-check { display: inline-flex; align-items: center; gap: 5.5px; font-size: 11px; color: var(--ink2); cursor: pointer; }
.pto-check i { font-style: normal; color: var(--warn); font-weight: 600; }
.pto-reserve { display: inline-flex; align-items: center; gap: 5.5px; font-size: 11px; color: var(--ink2); }
.pto-reserve .pos-in { width: 54px; border-color: var(--line2); }
.pto-jsheet { max-width: 288px; }
.tbl.pto-sum { width: 100%; }
.tbl.pto-sum thead th { top: 0; }
.pto-sum tr.pto-total td { font-weight: 600; color: var(--ink); background: var(--raise); }
.pto-warn-t { color: var(--warn); font-weight: 600; }

@media (max-width: 684px) {
  .pto-src { margin-left: 0; flex-wrap: wrap; }
  .pto-f { grid-template-columns: 1fr; gap: 0; }
  .pto-tools .pg-find input { width: 135px; }
}

/* ── тома проекта (06.10.2026) ──
   Проект объекта бывает десятком томов — на каждую секцию свой ЭОМ и ЭГ.
   Таблица томов раскрывается под полосой: секция каждого и разбор. */
#ptoDocs svg { transition: transform .15s var(--ease); }
#ptoDocs.on svg { transform: rotate(90deg); }
#ptoDocs.on { border-color: var(--brand); color: var(--brand-deep); background: var(--brand-tint); }
.pto-docs { flex: none; max-height: 46vh; overflow: auto; border-bottom: 1px solid var(--line2);
  background: color-mix(in srgb, var(--raise) 40%, var(--card)); }
.tbl.pto-docs-t { min-width: 760px; }
.tbl.pto-docs-t thead th { top: 0; }
.tbl.pto-docs-t tbody td { height: 34px; padding-top: 2px; padding-bottom: 2px; }
.pto-docs .t-name { font-weight: 500; font-size: 11.5px; }
.pto-docs .pto-hint { margin-top: 8px; margin-bottom: 10px; }
.pto-dsec { width: 90px; text-align: center; }
.pto-dsec::placeholder { color: var(--ink4, var(--ink3)); font-style: italic; }
.pto-edited-in { border-color: var(--brand-soft, var(--brand)) !important; }
.pto-dsec-auto { margin-left: 4px; font-size: 13px; }
/* Шифр тома бывает длинным («323_24-2.26 ПС-0.49 19.4-ЭС с изм.1_02») —
   в узкой колонке он наезжал на наименование: обрезаем, целиком — в подсказке. */
.pto-part { font-variant-numeric: tabular-nums; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.pto-docs [data-dparse] { white-space: nowrap; }
.pto-scope { max-width: 230px; }

/* ── спецификация ПТО (08.10.2026) ──
   Те же строки, что в «Тендере»; своё — «Расчёт ПТО» по каждой позиции. */
.tbl.pto-sp thead th { top: 0; }
.tbl.pto-sp tbody td { height: 32px; padding-top: 2px; padding-bottom: 2px; }
.pto-sp-nm { display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.pto-sp td.pto-sp-tx { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--ink2); }
.pto-sp td.pto-sp-in { background: color-mix(in srgb, var(--info) 6%, var(--card)); }
.pto-sp td.pto-sp-in .pos-in { width: 100%; }
.pto-sp td.pto-sp-in .pos-in.bad { box-shadow: inset 0 0 0 1px var(--bad); }
.pto-sp td.pto-sp-d { color: var(--ink3); font-size: 11px; }
.pto-sp td.pto-sp-d.less { color: var(--ok); font-weight: 600; }
.pto-sp td.pto-sp-d.more { color: var(--warn); font-weight: 600; }
.pto-sp tr.pto-sp-sec td { background: var(--raise); font-weight: 600; color: var(--ink); }
.pto-sp tr.pto-sp-doc td { background: var(--card); padding: 8px 12px; border-top: 2px solid var(--line); }
.pto-sp tr.pto-sp-doc b { margin-right: 8px; }
.pto-sp tr.pto-sp-doc i { font-style: normal; color: var(--ink3); font-size: 11px; margin-right: 10px; }
.pto-sp-none { color: var(--warn); font-size: 11px; margin-right: 10px; }
.pto-sp tr.pto-sp-skip td { color: var(--ink3); }
.pto-sp td.pto-sp-empty { height: 60px; text-align: center; color: var(--ink3); }

/* ── расчёт ПТО из Excel: предпросмотр (09.10.2026) ──
   Что изменится, что уже так же, чего нет в спецификации — до записи. */
.pf-crop.pto-imp { width: min(760px, 96vw); max-height: 90vh; display: flex; flex-direction: column; gap: 10px; }
.pto-imp h3 { margin: 0; }
.pto-imp-src { margin: 0; font-size: 11px; color: var(--ink3); overflow-wrap: anywhere; }
.pto-imp-warn { margin: 0; padding: 8px 10px; border-radius: 8px; background: var(--warn-soft); color: var(--warn); font-size: 11.5px; line-height: 1.45; }
.pto-imp-sum { display: flex; flex-wrap: wrap; gap: 8px; }
.pto-imp-sum span { display: flex; align-items: baseline; gap: 6px; padding: 7px 11px; border-radius: 9px; background: var(--raise); font-size: 11.5px; color: var(--ink2); }
.pto-imp-sum b { font-size: 15px; color: var(--ink); }
.pto-imp-sum .on b { color: var(--brand-deep); }
.pto-imp-sum .warn b { color: var(--warn); }
.pto-imp-list { flex: 1 1 auto; min-height: 90px; overflow: auto; border: 1px solid var(--line2); border-radius: 9px; }
.tbl.pto-imp-tbl { --tbl-min: 0px; }
.pto-imp-tbl thead th { top: 0; }
.pto-imp-tbl th:nth-child(1) { width: 64px; }
.pto-imp-tbl th:nth-child(3) { width: 54px; }
.pto-imp-tbl th:nth-child(4), .pto-imp-tbl th:nth-child(5) { width: 96px; }
.pto-imp-tbl tbody td { height: 30px; padding-top: 2px; padding-bottom: 2px; }
.pto-imp-none { margin: 0; font-size: 12px; color: var(--ink2); }
.pto-imp-more summary { cursor: pointer; font-size: 11.5px; color: var(--ink2); }
.pto-imp-more ul { margin: 6px 0 0; padding-left: 18px; max-height: 140px; overflow: auto; font-size: 11px; line-height: 1.5; color: var(--ink2); }
.pto-imp-more li b { font-weight: 600; color: var(--ink3); margin-right: 4px; }
.pto-sum-note{margin:10px 0;color:var(--ink-2,#64748b);font-size:13px}

/* ── 21.10.2026: замечания заказчика по ПТО ───────────────────
   Состав проекта: заголовки разделов прилипают к верху прокрутки — у
   длинного раздела свернуть его можно из любого места списка («закрепить
   кнопку свернуть/развернуть»). Под заголовком тома — заголовок раздела,
   под ним — шапка таблицы листов. */
.pto-main .pto-grp > .pto-grp-h {
  position: sticky; top: 0; z-index: 4; height: 38px; padding-top: 0; padding-bottom: 0;
  background: var(--card); box-shadow: 0 1px 0 var(--line2);
}
.pto-main .pto-file-group > .pto-file-h { background: var(--raise); }
.pto-main .pto-file-inner > .pto-grp-h { top: 38px; z-index: 3; }
.pto-file-inner > .tbl.pto-sheets thead th { top: 76px; }

/* Спецификация по проектам: строка проекта сворачивает его позиции и
   прилипает под шапкой таблицы. */
.pto-sp tr.pto-sp-doc td { position: sticky; top: 32.5px; z-index: 1; }
.pto-sp-tog {
  display: inline-flex; align-items: center; gap: 6px; margin: 0 8px 0 -4px; padding: 2px 6px 2px 4px;
  border: 0; border-radius: 6px; background: none; color: var(--ink); font: inherit; cursor: pointer;
}
.pto-sp-tog:hover { background: var(--raise); }
.pto-sp-tog b { margin: 0; }
.pto-sp-tog svg { width: 12.5px; height: 12.5px; fill: none; stroke: var(--ink3); stroke-width: 2;
  transition: transform .15s var(--ease); }
.pto-sp tr.pto-sp-doc.open .pto-sp-tog svg { transform: rotate(90deg); }

/* Журнал: длина со схемы не правится — серым; по расчётам — поле. */
.pto-jt td.pto-len-ro { color: var(--ink2); background: color-mix(in srgb, var(--raise) 55%, transparent); }
.pto-jt .pos-in.bad { box-shadow: inset 0 0 0 1px var(--bad); }
/* «Данные для расчёта»: выбор и, для «Другое», комментарий под ним. */
.pto-data { display: flex; flex-direction: column; gap: 3px; padding: 2px 0; }
.pto-data .pto-data-sel { width: 100%; height: 26px; padding: 0 6px; font-size: 11px; }
.pto-data .pto-data-note { width: 100%; height: 24px; font-size: 11px; }
.pto-data.st-ok .pto-data-sel { color: var(--ok); }
.pto-data.st-equip .pto-data-sel, .pto-data.st-partial .pto-data-sel,
.pto-data.st-other .pto-data-sel { color: var(--warn); font-weight: 600; }
.pto-data-ro { font-size: 11px; color: var(--ink2); }
.pto-data-ro.st-equip, .pto-data-ro.st-partial, .pto-data-ro.st-other { color: var(--warn); font-weight: 600; }
.pto-jt tr.pto-gap td:first-child { box-shadow: inset 3px 0 0 var(--warn); }
/* По щитам: заголовок щита — с числом линий и длиной. */
.pto-jt tr.pto-jh-panel td { background: color-mix(in srgb, var(--info) 5%, var(--card)); }
.pto-jt tr.pto-jh-panel b { font-size: 12px; }
.pto-jt tr.pto-jh .pto-open { margin-right: 6px; }

/* Свой журнал: длина из него, красным — расходится с платформой. */
.pto-mine { font-variant-numeric: tabular-nums; font-weight: 600; }
.pto-mine.ok { color: var(--ok); }
.pto-mine.bad { color: var(--bad); }
.pto-mine i { display: inline-block; margin-left: 4px; padding: 0 4px; border-radius: 4px; background: var(--bad-soft, #fde8e8);
  color: var(--bad); font-style: normal; font-size: 9.5px; font-weight: 600; }
.pto-mine-none { font-size: 10.5px; color: var(--ink3); }
.pto-mine-chip {
  display: inline-flex; align-items: center; gap: 6px; max-width: 360px; height: 27px; padding: 0 9px;
  border: 1px solid var(--line); border-radius: 8px; background: var(--card); font-size: 11px; color: var(--ink2);
}
.pto-mine-chip svg { width: 13px; height: 13px; flex: none; fill: none; stroke: var(--info); stroke-width: 1.8;
  stroke-linejoin: round; stroke-linecap: round; }
.pto-mine-chip b { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--ink); font-weight: 600; }
.pto-mine-chip i { flex: none; font-style: normal; color: var(--ink3); }
.pto-mine-chip .lnk { flex: none; font-size: 11px; cursor: pointer; }
.pto-mine-extra { padding-bottom: 18px; }
.tbl.pto-mine-t thead th { top: 0; }
.pto-tools .btn-ghost.sm i { font-style: normal; color: var(--warn); font-weight: 600; }
.pto-tools .btn-ghost.sm:disabled { opacity: .55; cursor: default; }
.pto-calc-n { font-style: normal; font-size: 9.5px; color: var(--info); margin-left: 3px; }

/* Замечания проектировщику — окно с текстом, который можно поправить. */
.pf-crop.pto-rem { width: min(860px, 96vw); max-height: 90vh; display: flex; flex-direction: column; gap: 10px; }
.pto-rem h3 { margin: 0; }
.pto-rem h3 i { font-style: normal; color: var(--ink3); font-weight: 500; margin-left: 6px; }
.pto-rem-sub { margin: 0; font-size: 11.5px; color: var(--ink3); line-height: 1.45; }
.pto-rem-text { width: 100%; min-height: 320px; flex: 1 1 auto; padding: 10px 12px; resize: vertical;
  font: 400 12.5px/1.55 var(--sans); white-space: pre-wrap; }

/* Высота этажей. */
.pto-lv-fill { display: inline-flex; align-items: center; gap: 6px; flex-wrap: wrap; font-size: 11px; color: var(--ink2); }
.pto-lv-fill .pos-in { width: 74px; height: 27px; border-color: var(--line2); }
.tbl.pto-lv thead th { top: 0; }
.tbl.pto-lv tbody th { text-align: left; font-weight: 600; color: var(--ink); white-space: nowrap; background: var(--card); }
.tbl.pto-lv .pos-in { width: 100%; }
.tbl.pto-lv .pos-in.num::placeholder { color: var(--ink3); opacity: .8; }
.tbl.pto-lv .pos-in.bad { box-shadow: inset 0 0 0 1px var(--bad); }
