:root{--brand: #1d5c9e;--brand-dark: #143f6e;--ink: #1f2430;--muted: #6b7280;--line: #e5e7eb;--bg: #f4f6fa}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{background:var(--bg);color:var(--ink);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif}.app-center{display:grid;place-items:center;min-height:100vh}.app-header{display:flex;align-items:center;justify-content:space-between;background:var(--brand);padding:0 20px;height:62px;line-height:1.2}.app-brand{display:flex;align-items:center;gap:12px;color:#fff}.app-brand-mark{display:grid;place-items:center;width:36px;height:36px;border-radius:9px;background:#ffffff29;font-weight:700;letter-spacing:.5px}.app-brand-text{font-size:16px;font-weight:600}.app-brand-text small{display:block;font-size:12px;font-weight:400;opacity:.8}.app-user{color:#eaf2ff;font-size:14px}.app-content{padding:20px 24px 40px;min-width:0}.sider-foot{position:sticky;bottom:8px;padding:12px 16px}.kpi .ant-statistic-title{color:var(--muted)}@media (max-width: 991px){.app-content{padding:14px 12px 32px}}.login-wrap{display:grid;grid-template-columns:1.05fr .95fr;min-height:100vh}.login-side{background:linear-gradient(150deg,var(--brand-dark),var(--brand) 60%,#2b7cc9);padding:64px 56px;color:#fff}.login-form-side{display:grid;place-items:center;padding:32px 24px}.login-card{width:100%;max-width:420px;box-shadow:0 10px 40px #14233c14}.login-list{margin:28px 0 0;padding-left:20px;color:#d8e7f8;line-height:2}@media (max-width: 860px){.login-wrap{grid-template-columns:1fr}.login-side{padding:28px 22px}.login-list{display:none}}.print-page{--doc-ink: #101418;background:#fff;color:var(--doc-ink);font-family:"PT Serif",Times New Roman,Georgia,serif;font-size:10.5pt;line-height:1.35;max-width:200mm;margin:0 auto;padding:10mm 6mm 14mm}.print-toolbar{display:flex;gap:10px;justify-content:flex-end;padding:8px 0 14px;border-bottom:1px dashed var(--line);margin-bottom:12px;font-family:system-ui,sans-serif}.print-toolbar button{padding:8px 16px;border-radius:8px;border:1px solid var(--brand);background:var(--brand);color:#fff;font-size:14px;cursor:pointer}.print-toolbar button+button{background:#fff;color:var(--brand)}.print-error{padding:40px;font-family:system-ui,sans-serif;color:#b3261e}.doc-head{display:grid;grid-template-columns:34mm 1fr 34mm;gap:6mm;align-items:start;border-bottom:1.4pt solid var(--doc-ink);padding-bottom:3mm}.doc-logo{height:20mm;border:.6pt dashed #9aa5b1;display:grid;place-items:center;text-align:center;font-size:8pt;color:#7a8794}.doc-logo-img{max-width:100%;max-height:20mm;object-fit:contain}.doc-head-center{text-align:center}.doc-org{font-weight:700;font-size:11.5pt}.doc-org-sub{font-size:9pt;margin-bottom:2mm}.doc-title{font-size:14pt;font-weight:700;letter-spacing:.4pt;margin:2mm 0 1mm}.doc-subtitle{font-size:9.5pt}.doc-head-right{font-size:8.5pt;text-align:right;color:#46505c}.doc-fields{width:100%;margin:3mm 0 4mm;border-collapse:collapse}.doc-fields td{padding:1.4mm 2mm 1.4mm 0;vertical-align:top;font-size:9.5pt}h2{font-size:11pt;margin:5mm 0 2mm;padding-bottom:.8mm;border-bottom:.6pt solid #98a2ae}.doc-table{width:100%;border-collapse:collapse;font-size:8.8pt}.doc-table th,.doc-table td{border:.5pt solid #5c6673;padding:1.1mm 1.4mm;vertical-align:top}.doc-table th{background:#eef2f7;font-weight:700;text-align:center;font-size:8.3pt}.doc-table td:nth-child(n+2){text-align:left}.doc-total td{font-weight:700;background:#f7f9fc}.doc-fill{min-width:14mm}.doc-note{font-size:9pt;color:#333c47;margin:2.5mm 0 0;text-align:justify}.doc-lines{border-bottom:.5pt solid #98a2ae;height:7mm;margin-bottom:2mm}.doc-signs{width:100%;border-collapse:collapse;margin-top:2mm;font-size:9.5pt}.doc-signs td{padding:3mm 2mm;vertical-align:bottom}.doc-sign-line{min-width:60mm}.doc-foot{margin-top:6mm;padding-top:2mm;border-top:.6pt solid #98a2ae;font-size:8pt;color:#46505c}.logo-box{display:grid;place-items:center;min-height:120px;padding:12px;border:1px dashed var(--line);border-radius:10px;background:#fbfcfe;text-align:center}.logo-image{max-width:100%;max-height:110px;object-fit:contain}@page{size:A4 portrait;margin:12mm 10mm 14mm}@page label-pack-page{size:A4 portrait;margin:6mm}@media print{body{background:#fff}.no-print,.print-toolbar,.app-header,.ant-layout-header,.ant-layout-sider,.ant-layout-sider-children,.ant-layout-sider-zero-width-trigger,.sider-foot,.app-content>*:not(.print-page):not(.label-page-packs):not(.label-page):not(.print-sheet):not(.page){display:none!important}.kpi-row,.kpi-row-3{display:grid!important;grid-template-columns:repeat(4,minmax(0,1fr))!important;gap:4mm!important}.kpi-row .ant-card{border:.5pt solid #98a2ae!important}.page .ant-btn,.page .ant-segmented,.page .ant-pagination,.page .ant-alert-close-icon{display:none!important}.ant-table-content,.ant-table-body{overflow:visible!important}.ant-table-cell{white-space:normal!important}.ant-layout,.ant-layout-content,.app-content,.page,.stack,.split,.field-grid,.kpi-row,.ant-row,.ant-col{display:block!important;width:auto!important;max-width:none!important;min-height:0!important;padding:0!important;margin:0!important;background:#fff!important;overflow:visible!important}.print-page{max-width:none;padding:0;font-size:10pt}.doc-table thead{display:table-header-group}.doc-table tr,.doc-fields tr,.doc-signs tr,.doc-section,.doc-handover{break-inside:avoid;page-break-inside:avoid}.doc-table{break-inside:auto}.doc-signs,.doc-foot{break-inside:avoid}h2{break-after:avoid}a[href]:after{content:none!important}}.label-page{background:#fff;color:#101418;font-family:"PT Serif",Times New Roman,Georgia,serif;padding:10mm 6mm;max-width:200mm;margin:0 auto}.label-sheet{border:1.4pt solid #101418;padding:5mm 6mm 4mm;box-sizing:border-box;display:flex;flex-direction:column;gap:3mm}.label-a5{width:148mm;min-height:200mm}.label-a6{width:105mm;min-height:140mm}.label-sheet+.label-sheet{margin-top:8mm}.label-head{display:flex;justify-content:space-between;align-items:flex-start;gap:4mm;border-bottom:1.1pt solid #101418;padding-bottom:2mm}.label-org{font-size:12pt;font-weight:700;line-height:1.2}.label-org-sub{font-size:8pt;color:#333}.label-kind{font-size:15pt;font-weight:700;text-align:center;letter-spacing:.5pt}.label-number{font-size:20pt;font-weight:700;text-align:center}.label-a6 .label-number{font-size:16pt}.label-grid{width:100%;border-collapse:collapse;font-size:10pt}.label-a6 .label-grid{font-size:8.5pt}.label-grid th{text-align:left;font-weight:400;color:#444;padding:1mm 2mm 1mm 0;white-space:nowrap;vertical-align:top}.label-grid td{font-weight:700;padding:1mm 0;vertical-align:top}.label-signs{display:flex;justify-content:space-between;gap:4mm;font-size:9pt;border-top:.8pt solid #101418;padding-top:2mm;margin-top:auto}.label-stamp{border:1pt dashed #101418;min-width:42mm;min-height:16mm;padding:1mm 2mm;font-size:8pt;color:#444}.label-foot{font-size:7.5pt;color:#333;display:flex;justify-content:space-between}.doc-copy{break-after:page;page-break-after:always}.doc-copy:last-child{break-after:auto;page-break-after:auto}.doc-title-lg{font-size:14pt;font-weight:700;text-align:center;letter-spacing:.6pt}.doc-mark{display:inline-block;border:1pt solid #101418;padding:.5mm 2mm;font-size:8pt;margin-left:2mm}.doc-copy-note{font-size:8pt;color:#333;text-align:right}@media print{.label-page{padding:0;max-width:none}.label-sheet{break-after:page;page-break-after:always;margin:0!important}.label-sheet:last-child{break-after:auto;page-break-after:auto}}.doc-stamp-place{border:1pt dashed #101418;height:20mm;display:flex;align-items:center;justify-content:center;font-size:8pt;color:#444}.doc-section{margin:4mm 0 2mm;font-size:11.5pt;font-weight:600;border-bottom:.4mm solid #222;padding-bottom:1mm}.doc-note{margin:2mm 0 0;font-size:9.5pt;color:#333}.doc-handover{margin:0;min-height:12mm;padding:2mm 3mm;border:.3mm solid #999;font-size:10.5pt;white-space:pre-wrap}.print-landscape{max-width:277mm}.print-landscape .doc-table th,.print-landscape .doc-table td{font-size:9.5pt;padding:2px 4px}.doc-num{text-align:right;font-variant-numeric:tabular-nums;white-space:nowrap}.doc-strong{font-weight:700}.doc-total td{font-weight:700;background:#f3f5f7}.doc-table-compact th,.doc-table-compact td{white-space:nowrap}@media print{.print-landscape{max-width:none}}@page landscape-page{size:A4 landscape}@media print{.print-landscape{page:landscape-page}}.label-page-packs{max-width:none;padding:0;font-family:PT Sans,Segoe UI,Arial,sans-serif}.pack-labels-note{font-family:system-ui,sans-serif;font-size:12px;color:#3d3d3d;margin:0 0 6mm}.pack-label{width:198mm;height:142mm;box-sizing:border-box;border:1.6pt solid #000;background:#fff;color:#000;font-size:9pt;line-height:1.15;display:flex;flex-direction:column;overflow:hidden;margin:0 auto 6mm}.pack-label-head{display:grid;grid-template-columns:33mm 1fr 66mm;border-bottom:1.2pt solid #000}.pack-label-logo{border-right:1.2pt solid #000;display:flex;align-items:center;justify-content:center;padding:1.5mm;min-height:26mm}.pack-label-logo img{max-width:100%;max-height:23mm;object-fit:contain}.pack-label-logo-empty{font-size:7pt;color:#888;letter-spacing:.5pt}.pack-label-title{border-right:1.2pt solid #000;padding:1.5mm 2mm;display:flex;flex-direction:column;align-items:center;justify-content:space-between;text-align:center}.pack-label-kind{font-size:14pt;font-weight:700;line-height:1.1;padding-top:1mm}.pack-label-caption{font-size:8.5pt;align-self:flex-start}.pack-label-date{font-size:17pt;font-weight:700;align-self:stretch;text-align:center}.pack-label-norms{padding:1.5mm 2mm;display:flex;flex-direction:column;align-items:center;text-align:center}.pack-label-norm{font-size:12pt;font-weight:700;line-height:1.2}.pack-label-order{font-size:17pt;font-weight:700;align-self:stretch;text-align:center}.pack-label-norms .pack-label-caption{align-self:flex-start}.pack-label-row{display:grid;grid-template-columns:33mm 1fr;border-bottom:.8pt solid #000;min-height:7.5mm}.pack-label-row-key{border-right:1.2pt solid #000;padding:1mm 1.5mm;font-weight:600}.pack-label-row-value{padding:1mm 1.5mm}.pack-label-row-head{font-weight:700;min-height:5.5mm}.pack-label-table{width:100%;border-collapse:collapse;table-layout:fixed;flex:0 0 auto}.pack-label-table th,.pack-label-table td{border:.8pt solid #000;padding:.8mm 1mm;text-align:center;font-size:8.5pt;-webkit-hyphens:auto;hyphens:auto;word-break:break-word}.pack-label-table th{font-weight:600;font-size:8pt;line-height:1.1}.pack-label-empty td{height:5.4mm}.pack-label-total td{font-weight:700}.pack-label-foot{display:grid;grid-template-columns:66mm 1fr;margin-top:auto;border-top:.8pt solid #000}.pack-label-colors{border-collapse:collapse;width:100%}.pack-label-colors td{border:.8pt solid #000;padding:.8mm 1.5mm;font-size:9pt}.pack-label-color-key{font-weight:700;width:12mm}.pack-label-color-ral{width:12mm}.pack-label-color-value{font-weight:700}.pack-label-packs{display:flex;align-items:center;justify-content:center;font-size:15pt;font-weight:600;padding:1mm}@media print{.label-page-packs{display:block;page:label-pack-page}.label-page-packs .pack-label{break-inside:avoid;page-break-inside:avoid;margin:0 auto}.pack-labels-note{display:none}}.page{display:flex;flex-direction:column;gap:16px;width:100%;min-width:0}.page-head{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:12px 16px;align-items:start}.page-title{margin:0!important;font-size:24px!important;line-height:1.25!important}.page-sub{display:block;margin-top:6px;max-width:92ch;color:var(--muted);font-size:13px;line-height:1.5}.page-actions{display:flex;flex-wrap:wrap;justify-content:flex-end;align-items:center;gap:8px}.kpi-row{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:16px}.kpi-row-3{grid-template-columns:repeat(3,minmax(0,1fr))}.kpi-row .kpi,.kpi-row>*{height:100%}.kpi-row .ant-card-body{padding:16px 18px}.kpi-note{display:block;margin-top:2px;color:var(--muted);font-size:12.5px}.filter-bar{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:10px 12px;margin-bottom:12px}.filter-bar .ant-input-search,.filter-bar .filter-search{width:280px;max-width:100%}.filter-scroll{min-width:0;max-width:100%;overflow-x:auto;padding-bottom:2px}.split{display:grid;grid-template-columns:minmax(0,1.45fr) minmax(0,1fr);gap:16px;align-items:start}.stack{display:flex;flex-direction:column;gap:12px;min-width:0}.stack-sm{gap:6px}.note{margin:0;color:var(--muted);font-size:12.5px;line-height:1.5}.note-list{margin:0;padding-left:18px;color:var(--muted);font-size:12.5px;line-height:1.6}.field{display:flex;flex-direction:column;gap:4px;min-width:0}.field-label{color:var(--muted);font-size:12.5px;line-height:1.3}.field-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}.field-grid-wide{grid-template-columns:repeat(4,minmax(0,1fr))}.kv{display:grid;grid-template-columns:auto minmax(0,1fr);gap:3px 12px;margin:0;font-size:13px}.kv dt{color:var(--muted);white-space:nowrap}.kv dd{margin:0;min-width:0;overflow-wrap:anywhere}.table-wrap .ant-table-cell{vertical-align:top;overflow-wrap:anywhere}.table-wrap .ant-table-cell .cell-sub{display:block;color:var(--muted);font-size:12px}.nowrap{white-space:nowrap}.example-line{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:12.5px;line-height:1.5;background:#f4f6fa;border:1px solid var(--line);border-radius:8px;padding:8px 10px;overflow-wrap:anywhere}.ant-card .ant-card-head .ant-card-head-title{white-space:normal!important;overflow:visible!important;text-overflow:clip!important;padding-block:6px}.doc-center{text-align:center}.doc-fields-3{table-layout:fixed}.doc-fields-3 td{padding-right:3mm;word-break:break-word}.doc-table-fixed{table-layout:fixed}.doc-table-fixed td,.doc-table-fixed th{word-break:normal;overflow-wrap:break-word;-webkit-hyphens:none;hyphens:none}.doc-table-fixed .doc-break-anywhere{word-break:break-all;overflow-wrap:anywhere}.doc-table-fixed .doc-center{text-align:center}.doc-table-fixed th:first-child,.doc-table-fixed td:first-child,.doc-head-right{white-space:nowrap}.doc-table-dense th,.doc-table-dense td{font-size:8pt;padding:1mm}.doc-table-dense th{font-size:7.5pt;word-break:keep-all;overflow-wrap:normal;-webkit-hyphens:none;hyphens:none;line-height:1.15}.doc-table-dense .doc-num{white-space:nowrap}.doc-table-fixed .cell-sub,.doc-table-fixed small{display:block;font-size:7pt;color:#46505c}.doc-fill-row{display:flex;flex-direction:column;gap:1mm}.doc-fill-line{border-bottom:.5pt solid #5c6673;height:4.5mm;min-width:24mm}@media (max-width: 1400px){.split{grid-template-columns:minmax(0,1fr)}}@media (max-width: 1240px){.kpi-row,.kpi-row-3{grid-template-columns:repeat(2,minmax(0,1fr))}.field-grid-wide{grid-template-columns:repeat(3,minmax(0,1fr))}}@media (max-width: 1100px){.field-grid,.field-grid-wide{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (max-width: 900px){.page-head{grid-template-columns:minmax(0,1fr)}.page-actions{justify-content:flex-start}}@media (max-width: 720px){.field-grid,.field-grid-wide{grid-template-columns:minmax(0,1fr)}}@media (max-width: 620px){.kpi-row,.kpi-row-3{grid-template-columns:minmax(0,1fr)}.filter-bar{align-items:stretch}.filter-bar .ant-input-search,.filter-bar .filter-search{width:100%}}

/* ── Правка 22.09.2026 (запрос владельца: «текст в поле Расчёт выходит за границы») ──────────────
   Печатная форма ПН (2а), раздел «Из чего посчитано (для проверки раскроя)».
   Ячейки этой таблицы шли с запретом переноса (.doc-table-compact th/td { white-space: nowrap }),
   поэтому длинный текст («Размер», «Позиции заказа», «Расчёт») не переносился, а вылезал за границу
   колонки — в PDF строки налезали друг на друга. Разрешаем переносы только в этой таблице:
   она единственная, у кого сразу два класса — doc-table-fixed и doc-table-compact.
   Нумерация строк (первая колонка) и остальные печатные формы остаются как были. */
.doc-table-compact.doc-table-fixed th,
.doc-table-compact.doc-table-fixed td{white-space:normal}
.doc-table-compact.doc-table-fixed th:first-child,
.doc-table-compact.doc-table-fixed td:first-child{white-space:nowrap}
@media screen and (max-width:900px){
  .print-page{max-width:100%;padding:6mm 3mm 10mm}
  .print-toolbar{padding:6px 0 10px;margin-bottom:8px}
  .doc-head{grid-template-columns:1fr;gap:2mm}
  .doc-head-right{white-space:normal;text-align:left}
  .doc-title{font-size:12pt}
  .doc-table-fixed{table-layout:auto}
  .doc-table col,.doc-signs col{width:auto!important}
  .doc-table th,.doc-table td{white-space:normal!important;overflow-wrap:break-word;word-break:normal}
  .doc-table th,.doc-table td{font-size:7.5pt;padding:.6mm .7mm;line-height:1.25}
  .doc-table-compact th,.doc-table-compact td{font-size:7.2pt}
  .doc-table th{font-size:7pt}
  .doc-table-fixed th:first-child,.doc-table-fixed td:first-child{white-space:nowrap}
  .doc-signs td,.doc-signs th{white-space:normal!important;padding:2mm 1mm;font-size:9pt}
  .doc-sign-line{min-width:0}
  .doc-table-fixed th:first-child,.doc-table-fixed td:first-child{padding-right:.4mm}
  .doc-table-dense th,.doc-table-dense td{font-size:7pt;padding:.7mm}
}

/* Совсем узкий экран (телефон в портрете): строкам ПН тесно — прячем только нумерацию строк.
   На бумаге (A4) нумерация остаётся: это правило действует лишь для экрана. */
@media screen and (max-width:440px){
  .doc-table th,.doc-table td{padding:.45mm .5mm}
  .doc-table-fixed th:first-child,.doc-table-fixed td:first-child{display:none}
  /* совсем узко: переносы внутри длинных чисел («100*120*1200») — только если слово не влезает */
  .doc-table th,.doc-table td{overflow-wrap:break-word;word-break:normal}
  .print-page{padding:3mm 1.5mm 8mm}
}

/* Совсем узкие экраны (360–380 px): таблице ПН физически не хватает ширины на длинные слова
   («100*120*1200», «фрезеровать») — разрешаем перенос внутри слова только здесь. */
@media screen and (max-width:380px){
  .doc-table th,.doc-table td{overflow-wrap:anywhere}
  .doc-signs td,.doc-signs th{font-size:8pt;padding:1.5mm .5mm}
}
/* ── Экран «Заказы на производство»: фильтр периода и режимы списка (итерация 40, 22.09.2026) ──
   Владелец ведёт заказы в google-таблице и просил тот же набор колонок и выгрузку.
   Правила добавляются в конец файла, ничего существующего не переопределяют. */
.filter-period{display:flex;align-items:center;gap:8px}
.filter-period input[type="date"]{height:32px;padding:0 10px;border:1px solid #d9d9d9;border-radius:8px;background:#fff;font:inherit;font-size:14px;color:#1f1f1f}
.filter-period input[type="date"]:hover{border-color:#1d5c9e}
.filter-period input[type="date"]:focus{border-color:#1d5c9e;outline:0;box-shadow:0 0 0 2px rgba(29,92,158,.12)}
.filter-period-dash{color:#8c8c8c}
.filter-bar .ant-segmented{margin-left:auto}
.table-wrap .cell-sub{white-space:normal}
.filter-period-label{color:#5c6b7a;font-size:13px}
/* Длинные подписи (все длины пачек) — не больше трёх строк, полностью видно при наведении */
.cell-clamp{display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}
.ant-table-cell .cell-clamp{max-width:100%}

/* ── 41-я: печать списка заказов для планёрки (22.09.2026) ──────────────────────────────────
   Печатается текущий вид списка: «Компактно» — короткий лист, «Подробно» — колонки рабочей
   таблицы. Лист альбомный, таблица занимает всю ширину страницы (на экране — 100 %). */
.print-page table { width: 100%; }
.print-page .print-list-head { display: flex; justify-content: space-between; gap: 12px; align-items: flex-end; }
.print-error { padding: 24px; font-size: 15px; }
@media print {
  .print-page { max-width: none; padding: 0; }
  .print-page table { page-break-inside: auto; }
  .print-page tr { page-break-inside: avoid; }
  .print-page thead { display: table-header-group; }
}

/* ── 42-я: выкатка кровельных обложек на «ПК-40» (22.09.2026) ───────────────────────────────
   Блок в карточке заказа и разделы 1.1/1.2 печатного задания на смену. Печать — та же
   типографика, что у остальных разделов задания; правки только для читаемости таблиц. */
.page .ant-card .cell-sub { color: #5a6675; line-height: 1.5; }
.doc-table td.doc-fill { min-width: 46px; }
@media print {
  .doc-table { page-break-inside: auto; }
  .doc-table tr { page-break-inside: avoid; }
  .print-page h2 { page-break-after: avoid; }
}

/* ── 43-я: план производства → смены (22.09.2026) ────────────────────────────────────────────
   Колонка «Смена» в планшете плана: кнопка создания смены, метка «смена создана» и ссылка
   на задание. Правки только для читаемости на узких экранах — типографику не трогаем. */
.page .ant-table td .ant-space-vertical { gap: 4px; }
.page .ant-table td .ant-btn-sm { padding-inline: 8px; }
@media (max-width: 720px) {
  .page .page-actions { row-gap: 8px; flex-wrap: wrap; }
}

/* ── 44-я: план трёх горизонтов и работы смены (22.09.2026) ──────────────────────────────────
   Небольшие поля ввода и списки прямо в строках таблиц плана (день мастера, вид работы) —
   в стиле кабинета, без «чужой» библиотеки. */
.plan-select, .plan-input {
  border: 1px solid #d9dfe8; border-radius: 6px; background: #fff; color: #1f2430;
  font: inherit; font-size: 13px; padding: 4px 6px; min-height: 30px;
}
.plan-select:focus, .plan-input:focus { outline: 2px solid #b9d3ee; outline-offset: 0; border-color: #1d5c9e; }
.plan-input { min-width: 200px; }
.plan-input-sm { min-width: 90px; }
.plan-inline-form { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; margin-top: 12px; }
.plan-inline-form .note { font-size: 13.5px; color: #5a6675; }
.page .ant-card-small > .ant-card-head { border-bottom: 1px solid #eef1f6; }
@media print {
  .plan-select, .plan-input, .plan-inline-form { display: none !important; }
}

/* ── 45-я: смена дня — участки, отходы, свои причины, печать на A4 альбомной (22–23.09.2026) ────
   Экран мастера «Смена дня»: одно поле даты, кнопки смены цеха, таблицы участков и отходов.
   Печатный лист — альбомная A4: колонки таблицы владельца (заказ, заказчик, план/факт/отклонение,
   вид панелей, длина, ширина, шт., наполнитель, бухты, RAL) плюс итоги участка и смены. */
.sd-date {
  border: 1px solid #d9dfe8; border-radius: 6px; background: #fff; color: #1f2430;
  font: inherit; font-size: 14px; padding: 5px 8px; min-height: 32px;
}
.sd-form { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; margin-top: 12px; }
.sd-input { min-width: 240px; }
.sd-input-sm { min-width: 130px; }
.sd-list { margin: 0; padding-left: 18px; }
.sd-list li { margin-bottom: 2px; }
.sd-otkl-neg { color: #b42318; font-weight: 600; }
.sd-otkl-pos { color: #1a7f37; font-weight: 600; }
.sd-otkl-zero { color: #5a6675; }

/* Участок — отдельная таблица листа: подпись раздела и цифры участка в одну строку справа */
.sd-participant { margin-bottom: 6mm; break-inside: auto; }
.sd-section-right { float: right; font-weight: 400; font-size: 9pt; text-transform: none; letter-spacing: 0; }
.sd-summary { break-inside: avoid; margin-bottom: 5mm; }
.sd-works th, .sd-works td { font-size: 9pt; }
.print-landscape .doc-table { font-size: 8.6pt; }
.print-landscape .doc-table th, .print-landscape .doc-table td { padding: 1.6px 3.5px; }
.print-landscape .doc-section { margin-top: 3mm; }
.print-landscape .sd-summary .doc-table td { white-space: nowrap; }
@media print {
  .sd-form, .sd-date { display: none !important; }
  .sd-participant { page-break-inside: auto; }
  .sd-summary, .doc-signs { page-break-inside: avoid; }
}
/* 46-я итерация (23.09.2026): клей по маркам, прессы, ноги.
   Строка «Ноги» на ярлыке пачки A5 и пояснения по нормам на печатном листе смены. */

.pack-label-row-legs {
  margin-top: 1mm;
  border-top: 0.3mm solid #333;
  padding-top: 1mm;
}

.pack-label-row-legs .pack-label-row-key {
  font-weight: 600;
}

.pack-label-row-legs .pack-label-row-value {
  font-size: 8.5pt;
}

/* Пояснения по нормам (прессы 7,6 м, клей по участкам, ноги) — мелким шрифтом под листом смены */
.sd-print .doc-notes,
.print-page .doc-notes {
  margin-top: 3mm;
  page-break-inside: avoid;
}

.print-page .doc-notes .doc-note {
  margin: 0 0 1mm;
  font-size: 7.5pt;
  line-height: 1.35;
  color: #333;
}

/* На листе смены таблица стала шире (колонки «Прессов», «Клей», «Ноги») — даём прокрутку на экране */
.sd-print .doc-table,
.print-page .doc-table {
  table-layout: fixed;
}

.print-page .doc-table th,
.print-page .doc-table td {
  font-size: 7.2pt;
  padding: 0.8mm 1mm;
}

.print-page .doc-table th {
  line-height: 1.15;
}

@media screen and (max-width: 900px) {
  .sd-print .doc-table,
  .print-page .doc-table {
    table-layout: auto;
  }
}
/* 46-я итерация (23.09.2026): клей по маркам, прессы, ноги.
   Пояснения по нормам и более широкая таблица на печатном листе смены.
   Ноги на ярлыке пачки и в упаковочном листе не печатаются (уточнение владельца 23.09.2026). */

.sd-print .doc-notes,
.print-page .doc-notes {
  margin-top: 3mm;
  page-break-inside: avoid;
}

.print-page .doc-notes .doc-note {
  margin: 0 0 1mm;
  font-size: 7.5pt;
  line-height: 1.35;
  color: #333;
}

/* На листе смены таблица стала шире (колонки «Прессов», «Клей», «Ноги») — даём прокрутку на экране */
.sd-print .doc-table,
.print-page .doc-table {
  table-layout: fixed;
}

.print-page .doc-table th,
.print-page .doc-table td {
  font-size: 7.2pt;
  padding: 0.8mm 1mm;
}

.print-page .doc-table th {
  line-height: 1.15;
}

@media screen and (max-width: 900px) {
  .sd-print .doc-table,
  .print-page .doc-table {
    table-layout: auto;
  }
}
/* 47-я итерация (23.09.2026): печать плана производства — альбомная ориентация и таблица владельца.
   Владелец: «мне не нравится форма печать плана смены "План производства на смены участков (неделя)".
   печать должна быть в альбомной ориентации. на изображении во вложении то как я хочу видеть табличную
   часть плана в печати. Примерно так же я хочу видеть на экране плана производства».
   Колонки: Номер заказа · Дата · Участок · Позиции (Наименование · Длина, м · К-во, шт) ·
   План, м² · Мощность, м² · Загрузка · Смена. */

@page plan-landscape {
  size: A4 landscape;
  margin: 8mm 8mm 12mm;
}

@media print {
  .print-plan {
    page: plan-landscape;
  }
}

.print-plan {
  max-width: 277mm;
}

/* ── таблица плана: печать ──────────────────────────────────────────────────────────────── */
.print-plan .plan-table {
  width: 100%;
  border-collapse: collapse;
  font-size: 8.6pt;
  table-layout: fixed;
}

/* Ширины колонок заданы через colgroup: считаем их вместе с рамками и отступами,
   иначе последняя колонка («Смена») уезжает за правый край листа. */
.plan-table,
.plan-table th,
.plan-table td {
  box-sizing: border-box;
}

.plan-table th,
.plan-table td {
  border: 0.5pt solid #5c6673;
  padding: 1mm 1.4mm;
  vertical-align: top;
}

.plan-table th {
  background: #eef2f7;
  font-weight: 700;
  text-align: center;
  font-size: 8.2pt;
  line-height: 1.15;
}

.plan-table .plan-num {
  text-align: right;
  white-space: nowrap;
  font-variant-numeric: tabular-nums;
}

.plan-table .plan-name {
  text-align: left;
  overflow-wrap: break-word;
}

.plan-table .plan-merge {
  vertical-align: top;
}

.plan-table .plan-date .cell-sub {
  display: block;
  font-size: 7.4pt;
  color: #46505c;
}

@media print {
  .print-plan .print-toolbar {
    display: none !important;
  }
  .plan-table thead {
    display: table-header-group;
  }
  .plan-table tr,
  .plan-table th,
  .plan-table td {
    break-inside: avoid;
    page-break-inside: avoid;
  }
}

/* ── таблица плана: экран кабинета ──────────────────────────────────────────────────────── */
.plan-table-screen {
  width: 100%;
  border-collapse: collapse;
  font-size: 13px;
  background: #fff;
  table-layout: fixed;
}

.plan-table-screen th,
.plan-table-screen td {
  border: 1px solid #e3e8f0;
  padding: 6px 8px;
  vertical-align: top;
}

.plan-table-screen th {
  background: #f3f5f9;
  text-align: center;
  font-size: 12.5px;
  font-weight: 600;
  line-height: 1.2;
}

.plan-table-screen .plan-num {
  text-align: right;
  white-space: nowrap;
  font-variant-numeric: tabular-nums;
}

.plan-table-screen .plan-name {
  text-align: left;
  overflow-wrap: anywhere;
}

.plan-table-screen .plan-merge {
  background: #fbfcfe;
}

.plan-table-screen .plan-date .cell-sub {
  display: block;
  color: var(--muted);
  font-size: 12px;
}

.plan-table-screen tr:hover td {
  background: #f7faff;
}

/* Выбор дня в таблице недели: ширина по колонке, без «выпирания» на соседние Столбцы */
.plan-table-screen td .plan-select {
  width: 100%;
  max-width: 100%;
  min-width: 0;
  font-size: 12.5px;
  padding: 2px 4px;
}
/* 48-я итерация (23.09.2026): печать «Задание на смену» (форма 2) — альбомная ориентация.
   Владелец: «ЗАДАНИЕ НА СМЕНУ № ЗС-20260923-1-DU … тоже должно быть в А4 альбомный, сейчас книжный».

   Почему альбомная: в книжной ориентации таблица продукции сжимается — «Тип панели» слипается с толщиной
   («кровельная50»), RAL верх/низ ломается на восемь строк. В альбомной ширины хватает всем колонкам.
   Ширины колонок не задаём: таблица сама распределяет их по свободному месту. */

@page task-landscape {
  size: A4 landscape;
  margin: 10mm 9mm 12mm;
}

.print-task {
  max-width: 277mm;
}

@media print {
  .print-task {
    max-width: none;
    page: task-landscape;
  }

  /* шапка таблиц повторяется на каждой странице, строки не рвутся */
  .print-task .doc-table thead {
    display: table-header-group;
  }

  .print-task .doc-table tr,
  .print-task .doc-table th,
  .print-task .doc-table td {
    break-inside: avoid;
    page-break-inside: avoid;
  }
}

/* В альбомной ориентации места больше — читаемость чуть выше, чем на книжном листе */
.print-task .doc-table th,
.print-task .doc-table td {
  font-size: 9pt;
  padding: 2px 4.5px;
}

.print-task .doc-table-compact th,
.print-task .doc-table-compact td {
  font-size: 8.8pt;
}

/* Блок подписей держим вместе */
.print-task .doc-signs {
  page-break-inside: avoid;
  break-inside: avoid;
}

/* Раскладка колонок. Правило «.print-page .doc-table { table-layout: fixed }» из 46-й итерации
   (делалось для прокрутки широкого листа смены) на задании давало 13 равных колонок по 77 px:
   «№ заказа» и «Наполнитель» не влезали и налезали на соседние ячейки. В задании колонки
   разной ширины — возвращаем автоподбор и даём подсказки по самым узким местам. */
.print-task .doc-table {
  table-layout: auto;
}

.print-task .doc-table th,
.print-task .doc-table td {
  overflow-wrap: break-word;
  word-break: normal;
}

/* № заказа и клиент — короткие, но неразрывные строки: держим их целыми */
.print-task .doc-table td:nth-child(2),
.print-task .doc-table th:nth-child(2) {
  white-space: nowrap;
}

.print-task .doc-table td:nth-child(12),
.print-task .doc-table th:nth-child(12),
.print-task .doc-table td:nth-child(13),
.print-task .doc-table th:nth-child(13) {
  white-space: nowrap;
}

/* Ориентиры по ширине: в альбомной ориентации даём больше места «RAL верх / низ»
   (самый длинный текст) и клиенту — тогда таблица ниже и листов меньше. */
.print-task .doc-table th:nth-child(1), .print-task .doc-table td:nth-child(1) { width: 3%; }
.print-task .doc-table th:nth-child(2), .print-task .doc-table td:nth-child(2) { width: 9.5%; }
.print-task .doc-table th:nth-child(3), .print-task .doc-table td:nth-child(3) { width: 9%; }
.print-task .doc-table th:nth-child(4), .print-task .doc-table td:nth-child(4) { width: 7.5%; }
.print-task .doc-table th:nth-child(5), .print-task .doc-table td:nth-child(5) { width: 5%; }
.print-task .doc-table th:nth-child(6), .print-task .doc-table td:nth-child(6) { width: 5.5%; }
.print-task .doc-table th:nth-child(7), .print-task .doc-table td:nth-child(7) { width: 5.5%; }
.print-task .doc-table th:nth-child(8), .print-task .doc-table td:nth-child(8) { width: 6%; }
.print-task .doc-table th:nth-child(9), .print-task .doc-table td:nth-child(9) { width: 6.5%; }
.print-task .doc-table th:nth-child(10), .print-task .doc-table td:nth-child(10) { width: 17%; }
.print-task .doc-table th:nth-child(11), .print-task .doc-table td:nth-child(11) { width: 10%; }
.print-task .doc-table th:nth-child(12), .print-task .doc-table td:nth-child(12) { width: 6.5%; }
.print-task .doc-table th:nth-child(13), .print-task .doc-table td:nth-child(13) { width: 9%; }

/* Шапка: третья колонка была ровно 34 мм, и строка «Дата печати: 23.09.2026» (запрет переноса)
   вылезала за правый край листа — печаталось «23.09.20». В альбомной ориентации даём колонке
   ширину по содержимому. */
.print-task .doc-head {
  grid-template-columns: 34mm 1fr auto;
}
/* 49-я итерация (23.09.2026): сталь с партией и RAL, номер заказа «НФНФ-».
   Блок «Операции с бухтой» на экране склада — держим его компактным на планшете мастера. */
.field-grid .ant-input-group-addon {
  font-weight: 600;
  color: #0958d9;
  background: #f0f5ff;
}
.ant-card-small .ant-space-wrap {
  row-gap: 8px;
}
/* 50-я итерация (23.09.2026), пункт 2 — «Задание на смену» печатается на один лист.
   Владелец: «в задании на смену «Листов: 2» печатается жёстко - нужно все вместить в 1 лист»;
   уточнения: «сжать умеренно, шрифт читаемый, пояснительные абзацы убрать, поля минимальные;
   раскладку наполнителя и упаковку убрать; в сырье — только металл и общий объём наполнителя».

   Поля листа: 8 мм сверху/снизу = 193 мм полосы набора (729 px при 96 dpi) и 283 мм по ширине —
   эти же числа знает zle50ПодгонкаЛиста(): она меряет содержимое и ужимает лист целиком,
   если он не влезает. */

@page task-landscape {
  size: A4 landscape;
  margin: 8mm 7mm 9mm;
}

.print-page.print-task {
  max-width: 283mm;
  padding: 0;
  font-size: 9pt;
  line-height: 1.2;
}

/* Шапка: логотип, реквизиты и «Форма 2 / Дата печати / Лист 1 из 1» — компактно, но без обрезки */
.print-task .doc-head {
  grid-template-columns: 26mm 1fr auto;
  gap: 3mm;
  padding-bottom: 1.2mm;
}

.print-task .doc-logo,
.print-task .doc-logo-img {
  height: 13mm;
  max-height: 13mm;
}

.print-task .doc-org { font-size: 10pt; }
.print-task .doc-org-sub { font-size: 7.2pt; margin-bottom: 0.4mm; }
.print-task .doc-title { font-size: 11.5pt; margin: 0.6mm 0 0.2mm; letter-spacing: 0.3pt; }
.print-task .doc-subtitle { font-size: 7.6pt; }
.print-task .doc-head-right { font-size: 7pt; line-height: 1.25; }

/* Реквизиты смены — две строки по три колонки */
.print-task .doc-fields { margin: 1mm 0 1.4mm; }
.print-task .doc-fields td { font-size: 7.8pt; padding: 0.4mm 1.5mm 0.4mm 0; }

.print-task h2 {
  font-size: 8.8pt;
  margin: 0.9mm 0 0.4mm;
  break-after: avoid;
  page-break-after: avoid;
}

/* Таблицы: умеренно плотные, шрифт читаемый.
   Поля и междустрочный интервал ужимаем, а кегль — нет: на сколько сожмётся лист, столько
   «съест» и подгонка, поэтому читаемость выигрывает именно от плотности строк. */
.print-task .doc-table th,
.print-task .doc-table td {
  font-size: 7.6pt;
  line-height: 1.08;
  padding: 0.25mm 0.55mm;
}

.print-task .doc-table th {
  font-size: 7pt;
  line-height: 1.05;
}

.print-task .doc-table-compact th,
.print-task .doc-table-compact td { font-size: 7.2pt; }

/* Пояснительные абзацы на листе не печатаем (решение владельца) */
.print-task .doc-note { display: none; }

/* Указания по смене — две строки для записи, подписи — компактный блок */
.print-task .doc-lines { height: 5mm; margin-bottom: 0.8mm; }

.print-task .doc-signs { margin-top: 0.5mm; font-size: 7.8pt; }
.print-task .doc-signs td { font-size: 7.8pt; padding: 1.5mm 1.2mm; }

/* Прочие «мелочи» листа: тоже плотнее */
.print-task .doc-fields { margin: 0.8mm 0 1mm; }
.print-task .doc-fields td { padding: 0.3mm 1.5mm 0.3mm 0; }
.print-task .doc-logo,
.print-task .doc-logo-img { height: 11mm; max-height: 11mm; }
.print-task .doc-org-sub { margin-bottom: 0.2mm; }
.print-task .doc-title { margin: 0.4mm 0 0.1mm; }
.print-task .doc-head { padding-bottom: 0.8mm; }
.print-task .doc-foot { font-size: 6.5pt; }

.print-task .doc-fill { min-width: 11mm; }

/* Колонка «RAL верх / низ» самая длинная: при 17 % она переносилась на три строки и тянула за собой
   всю таблицу продукции. 20 % — и строки становятся ниже, а лист крупнее (проверено на «Дубне» и PRL). */
.print-task .doc-table th:nth-child(10),
.print-task .doc-table td:nth-child(10) { width: 20%; }

/* Переключатель над листом (в печать не попадает — он в блоке .no-print) */
.print-fit-toggle {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  margin-left: 12px;
  font: 13px/1.3 -apple-system, "Segoe UI", Roboto, Arial, sans-serif;
  color: #16324f;
  cursor: pointer;
}
