/* ═══ Тема раздела /workflow/ — загрузка, обработка, ошибка, результаты ═══
   Подключается последним в <head>: перекрывает и base.html, и локальные <style> страниц.
   Тему держит атрибут data-wf-theme на <html> (ставится до отрисовки в includes/wf_theme.html).

   Правило файла: структура (сетки, размеры, переносы) пишется один раз на обе темы,
   цвет берётся только из токенов. Мимо токенов идёт лишь то, что печатается на бумаге
   (этикетка в предпросмотре, подложка плиток ШК, поля с текстом этикетки в таблице)
   и статусные красный/зелёный — они одинаковы в обеих темах.

   Тёмная — цеховая зона главной и посадочных: грунт #0e1015, плитки на кромке, выбор янтарём.
   Светлая — палитра остального сайта: белый лист, серые канты, выбор синим. */

/* ══════════════ Токены ══════════════ */
:root {   /* тёмная — умолчание: не сработал скрипт — страница всё равно одета */
    --wf-bg:#0e1015; --wf-ink:#e8eaee; --wf-soft:#cfd3da; --wf-dim:#9aa3ae;
    --wf-amber:#ffc107; --wf-ok:#8fe8a0; --wf-warn:#ffe08a; --wf-danger:#ff9b9b;
    --wf-rim:rgba(255,255,255,.09); --wf-rim-hi:rgba(255,255,255,.18); --wf-card-rim:rgba(255,255,255,.09);
    --wf-glass:linear-gradient(180deg, rgba(255,255,255,.055), rgba(255,255,255,.02));
    --wf-glass-hi:linear-gradient(180deg, rgba(255,255,255,.10), rgba(255,255,255,.045));
    --wf-hover:rgba(255,255,255,.07); --wf-sunk:rgba(255,255,255,.02); --wf-chip:rgba(255,255,255,.05);
    --wf-head:rgba(0,0,0,.22); --wf-well:rgba(0,0,0,.28); --wf-check:rgba(0,0,0,.35);
    --wf-menu:#2d3135; --wf-menu-shadow:0 14px 34px rgba(0,0,0,.55);
    --wf-inset:inset 0 1px 0 rgba(255,255,255,.05); --wf-inset-hi:inset 0 1px 0 rgba(255,255,255,.10);
    --wf-drop:0 10px 26px rgba(0,0,0,.30);
    --wf-tint:radial-gradient(1100px 620px at 50% -14%, rgba(255,193,7,.10), transparent 62%);
    --wf-pick-bg:linear-gradient(180deg, rgba(255,179,71,.22), rgba(255,179,71,.07));
    --wf-pick-rim:rgba(255,179,71,.45); --wf-pick-rim-hi:rgba(255,179,71,.75); --wf-pick-ink:#ffd9ab;
    --wf-pick-accent:#f09030; --wf-pick-glow:rgba(255,179,71,.5);
    --wf-pick-halo:0 4px 14px rgba(255,179,71,.10); --wf-pick-halo-bc:0 4px 16px rgba(255,179,71,.18);
    --wf-pick-focus:rgba(255,179,71,.16);
    --wf-nested-radius:calc(var(--ctr-radius) - 1px);   /* угол шапки внутри канта карточки */
    --wf-code:rgba(255,255,255,.10);
    --wf-tile-rim:none; --wf-amber-rim:rgba(255,193,7,.22); --wf-warn-rim:rgba(255,193,7,.20);
    --wf-danger-bg:var(--wf-glass); --wf-danger-rim:var(--wf-rim);
    --wf-err-bg:rgba(220,53,69,.09); --wf-err-rim:rgba(220,53,69,.30);
}
:root[data-wf-theme="light"] {
    --wf-bg:#fff; --wf-ink:#212529; --wf-soft:#343a40; --wf-dim:#6c757d;
    --wf-amber:#c8860a; --wf-ok:#1e9e38; --wf-warn:#96690a; --wf-danger:#dc3545;
    --wf-rim:#dee2e6; --wf-rim-hi:#adb5bd; --wf-card-rim:#9aa1a8;   /* кант карточки погуще — эхо старой .settings-block */
    --wf-glass:linear-gradient(180deg, #fafbfc, #f2f4f6);   /* карточка серая — эхо прежней .settings-block */
    --wf-glass-hi:linear-gradient(180deg, #fff, #e9ecef);
    --wf-hover:rgba(0,0,0,.05); --wf-sunk:#f8f9fa; --wf-chip:#fff;
    --wf-head:#eef0f2; --wf-well:#fff; --wf-check:#fff;
    --wf-menu:#fff; --wf-menu-shadow:0 12px 30px rgba(0,0,0,.18);
    --wf-inset:inset 0 1px 0 rgba(255,255,255,.9); --wf-inset-hi:inset 0 1px 0 #fff;
    --wf-drop:0 2px 8px rgba(0,0,0,.10);
    --wf-tint:none;
    --wf-pick-bg:linear-gradient(180deg, #e7f1ff, #d5e6ff);
    --wf-pick-rim:#0d6efd; --wf-pick-rim-hi:#0d6efd; --wf-pick-ink:#084298;
    --wf-pick-accent:#0d6efd; --wf-pick-glow:rgba(13,110,253,.5);
    --wf-pick-halo:0 3px 10px rgba(13,110,253,.14); --wf-pick-halo-bc:0 3px 12px rgba(13,110,253,.18);
    --wf-pick-focus:rgba(13,110,253,.18);
    --wf-code:#e9ecef;
    --wf-tile-rim:inset 0 0 0 1px #dee2e6;   /* бумага плитки ШК на белом листе теряется без канта */
    --wf-amber-rim:rgba(255,193,7,.55); --wf-warn-rim:rgba(255,193,7,.55);
    --wf-danger-bg:#fff5f5; --wf-danger-rim:#f1b8be;   /* плашка отклонённых файлов — розовая, как на прежней странице */
    --wf-err-bg:#fff8f8; --wf-err-rim:#f0c0c0;
}

body { background:var(--wf-bg); }

.compact-container {
    max-width:1600px; color:var(--wf-soft);
    background-image:var(--wf-tint);
}

/* ── Микрозаголовок раздела ── */
.wfd-h { display:flex; align-items:center; gap:7px; margin:0 0 4px;
         font-size:7px; font-weight:700; letter-spacing:.12em; text-transform:uppercase;
         color:var(--wf-soft); line-height:1; }
.wfd-h::after { content:''; flex:1; height:1px; background:var(--wf-rim); }
.wfd-h--plain::after { display:none; }

/* ── Сетка рабочей зоны: левая колонка шириной предпросмотра ── */
.wfd-work { display:grid; grid-template-columns:484px minmax(0,1fr); gap:14px; align-items:start; margin-bottom:12px; }
.wfd-left, .wfd-right { display:flex; flex-direction:column; gap:10px; min-width:0; }
/* Левая колонка литая: предпросмотр, кнопки и готовые файлы одной ширины и всегда стопкой */
.wfd-left { width:484px; }
.wfd-card { background:var(--wf-glass); border:1px solid var(--wf-card-rim); border-radius:var(--ctr-radius);
            padding:9px 11px 11px; box-shadow:var(--wf-inset), var(--wf-drop); }

/* ── Предпросмотр: бумага остаётся бумагой ── */
/* Пока этикетки нет — окно пустое; бумагу приносит сам предпросмотр */
#previewContainer { position:relative; height:294px; display:flex; align-items:center; justify-content:center;
                    overflow:hidden; background:var(--wf-glass); border:1px solid var(--wf-card-rim); border-radius:var(--ctr-radius);
                    box-shadow:var(--wf-inset), var(--wf-drop); }
#previewFrame { background:#fff; }
/* Лента автопредпросмотра: одна этикетка на окно, snap; PNG на белой бумаге */
#previewStrip { display:none; width:100%; height:100%; overflow-y:auto; overflow-x:hidden; scroll-snap-type:y mandatory; scrollbar-width:thin; }
#previewStrip > div { display:flex; width:100%; height:100%; align-items:center; justify-content:center; scroll-snap-align:start; padding:6px; }
#previewStrip img { max-width:100%; max-height:100%; background:#fff; box-shadow:0 1px 6px rgba(0,0,0,.25); }
.wf-strip-more { text-align:center; font-size:13px; line-height:1.5; color:var(--wf-dim); text-decoration:none; border:1px dashed var(--wf-card-rim); border-radius:var(--ctr-radius); padding:18px 24px; }
.wf-strip-more:hover { color:inherit; }
#previewAuto, #previewCnt { position:absolute; font-size:11px; color:#fff; background:rgba(0,0,0,.55); padding:2px 7px; border-radius:6px; user-select:none; z-index:2; }  /* плашка — читается и поверх белой этикетки */
#previewAuto { top:5px; left:8px; display:flex; align-items:center; gap:4px; cursor:pointer; margin:0; }
#previewAuto input { margin:0; width:12px; height:12px; cursor:pointer; }
#previewCnt { bottom:6px; right:14px; }
#previewPlaceholder { color:var(--wf-dim); font-size:13px; line-height:1.5; text-align:center; padding:20px; }
.wfd-ph-ico { font-size:1.55rem; margin-bottom:6px; }

/* ── Кнопки действий одной группой ── */
.wfd-gen { display:flex; gap:8px; }
.wfd-gen .btn { flex:1 1 auto; white-space:nowrap; }
.gen-btn .btn-cost { font-weight:400; opacity:.85; }
/* Блок скачивания — как на боевой: подпись слева, три клавиши, пунктир до готовности */
.download-block { display:flex; align-items:center; justify-content:space-evenly; gap:8px; margin:0;
                  padding:6px 12px; border:1px dashed var(--wf-rim-hi); border-radius:var(--ctr-radius);
                  background:var(--wf-sunk); opacity:.4;
                  transition:opacity .3s, border-color .3s, background .3s; }
.download-block.active { opacity:1; border-style:solid; border-color:rgba(30,158,56,.55); background:rgba(30,158,56,.09); }
.download-block .btn { padding:4px 12px !important; font-size:13px; font-weight:700; line-height:1.4; }
.download-block .btn-3d-ghost { color:var(--wf-dim) !important; border-color:var(--wf-rim-hi) !important; }
.download-buttons { display:flex; gap:8px; align-items:center; }
.wfd-dl-note { font-size:10px; line-height:1.2; color:var(--wf-dim); }

/* ── Карточка настроек ── */
.wfd-set-head { display:flex; align-items:center; gap:10px; flex-wrap:wrap;
                margin:-9px -11px 10px; padding:7px 11px; background:var(--wf-head);
                border-radius:var(--wf-nested-radius) var(--wf-nested-radius) 0 0;
                box-shadow:inset 0 -1px 0 var(--wf-rim); }   /* волосяная черта отделяет шапку от настроек */
.wfd-set-t { font-size:13px; font-weight:700; color:var(--wf-ink); white-space:nowrap; }
.wfd-old { margin-left:8px; font-size:11px; font-weight:400; color:var(--wf-dim); text-decoration:underline dotted; }
.wfd-old:hover { color:var(--wf-amber); }
.wfd-presets { margin-left:auto; display:flex; align-items:center; gap:6px; min-width:0; }
.wfd-presets .wfd-h { margin:0; }
/* ── Набор настроек: имя в шапке, список по клику, звёздочка у того, что открывается сам ── */
.wfd-preset { position:relative; display:flex; }   /* не inline: строчный контекст добавлял пилюле полпикселя снизу */
.wfd-preset-cur { display:inline-flex; align-items:center; gap:5px; height:24px; padding:0 9px;
                  border:1px solid var(--wf-rim); border-radius:999px; background:var(--wf-glass);
                  color:var(--wf-ink); font-weight:500; font-size:11px; cursor:pointer; white-space:nowrap; }
.wfd-preset-cur:hover { border-color:var(--wf-rim-hi); }
.wfd-preset-cur i { font-style:normal; font-size:9px; color:var(--wf-dim); }
.wfd-preset-menu { position:absolute; top:calc(100% + 5px); right:0; z-index:70; min-width:210px; padding:4px;
                   background:var(--wf-menu); border:1px solid var(--wf-rim-hi); border-radius:var(--ctr-radius);
                   box-shadow:var(--wf-menu-shadow); }
.wfd-preset-row { display:flex; align-items:center; gap:7px; padding:4px 5px; border-radius:6px;
                  font-size:12px; color:var(--wf-soft); cursor:pointer; }
.wfd-preset-row:hover { background:var(--wf-hover); color:var(--wf-ink); }
.wfd-preset-row.sel { color:var(--wf-pick-ink); font-weight:600; }
.wfd-preset-nm { flex:1; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.wfd-star { flex:none; width:16px; padding:0; border:none; background:none; line-height:1;
            font-size:13px; color:var(--wf-rim-hi); cursor:pointer; }
.wfd-star:hover { color:var(--wf-warn); }
.wfd-star.on { color:var(--wf-amber); }
.wfd-preset-cur .wfd-star { width:auto; font-size:11px; pointer-events:none; }
.wfd-preset-del { flex:none; padding:0 2px; border:none; background:none; color:var(--wf-dim); font-size:12px; cursor:pointer; }
.wfd-preset-del:hover { color:var(--wf-danger); }
/* Есть несохранённое — дискетка загорается и пульсирует ореолом */
@keyframes wfdSaveAttract {
    0%, 100% { box-shadow:var(--wf-inset-hi), 0 0 0 0 var(--wf-pick-glow); }
    50%      { box-shadow:var(--wf-inset-hi), 0 0 0 5px transparent; }
}
#presetSaveBtn.dirty { border-color:var(--wf-pick-rim); background:var(--wf-pick-bg); color:var(--wf-pick-ink);
                       animation:wfdSaveAttract 1.5s ease-in-out infinite; }
@media (prefers-reduced-motion: reduce) { #presetSaveBtn.dirty { animation:none; } }
.wfd-set-grid { display:grid; grid-template-columns:repeat(2, minmax(0,1fr)); gap:10px 20px; }
.wfd-sec--wide { grid-column:1 / -1; }
.wfd-opts { display:flex; flex-wrap:wrap; align-items:center; gap:5px; }
.wfd-note-line { margin-top:4px; font-size:11px; line-height:1.3; color:var(--wf-dim); }
/* «Начинать с» и пояснение — всегда одной строкой */
.wfd-numline { display:flex; align-items:center; gap:8px; margin-top:4px; }
.wfd-numline .wfd-num { flex:none; }
.wfd-numline .wfd-num input { flex:none; width:64px; }
.wfd-numline .wfd-note-line { margin-top:0; }
.wfd-hidden { display:none !important; }

/* ── Кнопка-опция: покой — фон карточки, выбор — заливка ── */
.wfd-opt { position:relative; display:inline-flex; align-items:center; justify-content:center; gap:5px;
           min-height:26px; padding:2px 8px; border:1px solid var(--wf-rim); border-radius:6px;
           background:var(--wf-glass); color:var(--wf-soft); font-weight:500; font-size:12px; line-height:1.15;
           cursor:pointer; user-select:none; white-space:nowrap;
           box-shadow:var(--wf-inset);
           transition:border-color .12s, background .12s, color .12s, box-shadow .12s, transform .05s; }
.wfd-opt:hover:not([disabled]):not(.on) { border-color:var(--wf-rim-hi); color:var(--wf-ink);
           background:var(--wf-glass-hi); }
.wfd-opt:active:not([disabled]) { transform:translateY(1px); }
.wfd-opt.on { border-color:var(--wf-pick-rim); color:var(--wf-pick-ink); font-weight:600; background:var(--wf-pick-bg);
              box-shadow:var(--wf-inset-hi), var(--wf-pick-halo); }
.wfd-opt[disabled] { opacity:.36; cursor:not-allowed; }
.wfd-opt--icon { min-height:24px; height:24px; padding:0 7px; font-size:12px; }
.wfd-ico { display:block; width:13px; height:13px; }
.wfd-opt--del { color:var(--wf-danger); }
.wfd-opt--size { min-height:22px; padding:2px 7px; font-size:11px; gap:4px; }
.wfd-opt .ratio { display:inline-block; background:currentColor; border-radius:1px; opacity:.4; flex:none; }
.wfd-opt.on .ratio { opacity:.75; }

/* Плитки штрих-кодов: мини-этикетка на бумаге, подпись под ней */
.wfd-opt--bc { flex-direction:column; gap:3px; width:92px; height:50px; padding:3px; }
.wfd-opt--bc .bc-art { display:block; width:100%; height:30px; border-radius:2px; background:#fff; color:#1a1a1a;
                       opacity:.6; box-shadow:var(--wf-tile-rim); transition:opacity .12s; pointer-events:none; }
.wfd-opt--bc .bc-cap { font-size:10px; line-height:1; letter-spacing:.01em; }
.wfd-opt--bc:hover:not([disabled]):not(.on) .bc-art { opacity:.82; }
.wfd-opt--bc.on .bc-art { opacity:1; }
.wfd-opt--bc.on { border-color:var(--wf-pick-rim-hi); box-shadow:var(--wf-pick-halo-bc); }

/* Знаки: логотип и подпись в строку */
.wfd-opt--logo { gap:6px; padding:2px 8px; }
.wfd-opt--logo img { height:15px; width:auto; object-fit:contain; }
.wfd-opt--logo:not(.on) img, .wfd-opt--logo:not(.on) .wrap-arrow { opacity:.4; }
.wrap-arrow { width:14px; height:11px; flex:none; }

/* ── Поля и галочки ── */
.wfd-num { display:inline-flex; align-items:center; gap:5px; font-size:11.5px; color:var(--wf-dim); white-space:nowrap; }
.wfd-num input { width:54px; height:26px; padding:2px 5px; text-align:center; font-size:12px; font-weight:600;
                 border:1px solid var(--wf-rim); border-radius:6px; background:var(--wf-well); color:var(--wf-ink); outline:none; }
.wfd-num input:focus { border-color:var(--wf-pick-rim); box-shadow:0 0 0 2px var(--wf-pick-focus); }
/* Ряд из двух подразделов: размеры тянутся, адрес доставки держит свою ширину.
   Складывается по ширине самой карточки, а не окна: колонка бывает узкой и на большом мониторе */
.wfd-set { container-type:inline-size; }
.wfd-row { display:grid; grid-template-columns:minmax(0,1fr) 250px; gap:8px 20px; align-items:start; }
.wfd-row > .wfd-sub { min-width:0; }
.wfd-row--bc { grid-template-columns:auto minmax(0,1fr); }   /* плитки ШК не переносятся, ужимается колонка значков */
@container (max-width:820px) { .wfd-row--bc { grid-template-columns:1fr; } }
@container (max-width:560px) {
    .wfd-row { grid-template-columns:1fr; }
    .wfd-mailbox { order:-1; }        /* сложились — адрес доставки встаёт над размерами */
}
.wfd-mailbox .wfd-opts { flex-wrap:nowrap; }
.wfd-mailbox .wfd-mail { flex:0 1 300px; }   /* половина ряда — под заголовок, поле адреса столько не просит */
.wfd-mailbox label { display:flex; margin:0; }
.wfd-mailbox input[type=checkbox] { width:15px; height:15px; margin:0; accent-color:var(--wf-pick-accent); cursor:pointer; flex:none;
                                    background-color:var(--wf-check); border-color:var(--wf-rim-hi); }
.wfd-mail { position:relative; display:inline-flex; align-items:center; flex:0 1 180px; }
.wfd-mail input { width:100%; height:26px; padding:2px 26px 2px 9px; font-size:12px;
                  border:1px solid var(--wf-rim); border-radius:6px; background:var(--wf-well); color:var(--wf-ink); outline:none; }
.wfd-mail input:focus { border-color:var(--wf-pick-rim); box-shadow:0 0 0 2px var(--wf-pick-focus); }
.wfd-mail button { position:absolute; right:5px; border:none; background:none; font-size:13px; line-height:1;
                   padding:0; color:var(--wf-dim); cursor:pointer; }
.wfd-mail button:hover { color:var(--wf-amber); }
#resultEmailPopup { display:none; position:absolute; top:100%; left:0; margin-top:3px; padding:2px 8px;
                    border-radius:6px; font-size:12px; white-space:nowrap; z-index:30; color:#fff; }

/* ── Набор значков ухода: значки печатаются чёрным, поэтому лежат на бумаге ── */
.wfd-iconset { display:flex; align-items:center; justify-content:center; gap:1px; min-width:160px; height:32px;   /* 32 + 4 + строка пояснения = высота плитки ШК */
               padding:0 4px; background:var(--wf-glass); border:1px solid var(--wf-rim); border-radius:6px; cursor:pointer; }
.wfd-iconset:has(img) { background:#fff; box-shadow:var(--wf-tile-rim); }
.wfd-iconset:hover { border-color:var(--wf-rim-hi); }
.wfd-iconset img { width:28px; height:28px; object-fit:contain; }
.wfd-iconset span { color:var(--wf-dim); font-size:11.5px; font-style:italic; }

/* ── Памятка ── */
.wfd-memo > summary { cursor:pointer; list-style:none; }
.wfd-memo > summary::-webkit-details-marker { display:none; }
.wfd-memo .wfd-caret { font-style:normal; font-size:9px; color:var(--wf-dim); transition:transform .15s; }
.wfd-memo[open] .wfd-caret { transform:rotate(180deg); }
.wfd-memo .wfd-more { font-style:normal; color:var(--wf-dim); }
.wfd-memo .wfd-more::after { content:'свернуть'; }
.wfd-memo:not([open]) .wfd-more::after { content:'развернуть'; }
.wfd-memo > summary:hover .wfd-more, .wfd-memo > summary:hover .wfd-caret { color:var(--wf-amber); }
.wfd-memo:not([open]) { padding-bottom:9px; }
.wfd-memo:not([open]) > summary { margin-bottom:0; }
.wfd-memo ul { columns:2; column-gap:22px; margin:0; padding:0; list-style:none;
               font-size:11.5px; line-height:1.5; color:var(--wf-soft); }
.wfd-memo li { position:relative; padding-left:11px; margin-bottom:3px; break-inside:avoid; }
.wfd-memo li::before { content:'•'; position:absolute; left:2px; color:var(--wf-dim); }
.wfd-memo b { color:var(--wf-ink); }
.wfd-memo-cta { margin:0 0 8px; padding:6px 9px; border-radius:6px; font-size:11.5px; line-height:1.5; color:var(--wf-ink);
                background:rgba(255,193,7,.10); border:1px solid var(--wf-amber-rim); }
.wfd-memo:not([open]) .wfd-memo-cta { margin-bottom:0; }

/* ── Плашки-уведомления: тяжесть несёт заголовок, а не рамка ── */
.wfd-note { background:var(--wf-glass); border:1px solid var(--wf-rim); border-radius:var(--ctr-radius);
            padding:8px 12px; margin-bottom:10px; font-size:12.5px; line-height:1.5; color:var(--wf-soft);
            box-shadow:var(--wf-inset); }
.wfd-note b { color:var(--wf-ink); }
.wfd-note--danger { background:var(--wf-danger-bg); border-color:var(--wf-danger-rim); }
.wfd-note--danger .wfd-h { color:var(--wf-danger); }
.wfd-note--warn { background:rgba(255,193,7,.07); border-color:var(--wf-warn-rim); }
.wfd-note--warn .wfd-h { color:var(--wf-warn); }

/* ── Статусы КИЗ: слева действие, справа — чья сессия ЧЗ отвечает за ответ ── */
/* Шапка тремя долями: действие слева, чья сессия — ровно по центру панели, стрелка справа.
   1fr | auto | 1fr держит середину серединой, чем бы ни отличались ширины краёв. */
.kiz-head { display:grid; grid-template-columns:minmax(0,1fr) auto minmax(0,1fr); align-items:center;
            gap:9px; padding:6px 11px !important; }
.kiz-left { justify-self:start; display:inline-flex; align-items:center; gap:7px; min-width:0; }
.kiz-go { padding:3px 12px !important; font-size:12px; line-height:1.4; }
/* Служебная кнопка персонала: намеренно неприметна — рядом с боевой её быть не должно видно первой */
.kiz-demo { padding:2px 8px; border:1px dashed var(--wf-rim-hi); border-radius:6px; background:transparent;
            color:var(--wf-dim); font:inherit; font-size:11px; line-height:1.4; cursor:pointer; }
.kiz-demo:hover { color:var(--wf-amber); border-color:var(--wf-amber); }
.kiz-sess { justify-self:center; min-width:0; }
.kiz-toggle { justify-self:end; display:inline-flex; align-items:center; justify-content:center; flex:none;
              width:22px; height:22px; padding:0; border:1px solid var(--wf-rim); border-radius:6px;
              background:transparent; color:var(--wf-dim); cursor:pointer;
              transition:color .12s, border-color .12s, transform .15s; }
.kiz-toggle:hover { color:var(--wf-ink); border-color:var(--wf-rim-hi); }
.kiz-toggle svg { width:13px; height:13px; }
.kiz-toggle.is-closed { transform:rotate(-90deg); }   /* свёрнуто — стрелка смотрит вбок */
.kiz-org-label, .kiz-inactive-label { display:inline-flex; align-items:center; gap:6px; font-size:12.5px;
                                      max-width:100%; white-space:nowrap; }
.kiz-org-label::before, .kiz-inactive-label::before { content:''; width:7px; height:7px; border-radius:999px; }
.kiz-org-label { color:var(--wf-soft); }
.kiz-org-label::before { background:var(--wf-ok); }
.kiz-inactive-label { color:var(--wf-danger); }
.kiz-inactive-label::before { background:var(--wf-danger); }

/* Ответ ЧЗ: плитка на категорию — цветная точка, подпись приглушена, число самое яркое */
.kiz-body { padding:8px 11px !important; }
.kiz-res { display:flex; align-items:center; flex-wrap:wrap; gap:6px; }
.kiz-chip { display:inline-flex; align-items:center; gap:7px; padding:3px 10px 3px 8px;
            border:1px solid var(--wf-rim); border-radius:999px; background:var(--wf-chip);
            font-size:12px; line-height:1.45; color:var(--wf-soft); white-space:nowrap; }
.kiz-chip::before { content:''; flex:none; width:7px; height:7px; border-radius:999px; background:var(--wf-dim); }
.kiz-chip b { font-weight:700; font-size:13px; color:var(--wf-ink); font-variant-numeric:tabular-nums; }
.kiz-chip--ok::before   { background:var(--wf-ok); }
.kiz-chip--warn::before { background:var(--wf-amber); }
.kiz-chip--bad::before  { background:var(--wf-danger); }
.kiz-chip--zero { opacity:.45; }   /* ноль в категории — не новость, пусть не спорит с ненулевыми */
.kiz-dl { display:inline-flex; align-items:center; gap:6px; margin-left:4px; padding:3px 11px;
          border:1px solid var(--wf-pick-rim); border-radius:999px; background:var(--wf-pick-bg);
          color:var(--wf-pick-ink); font-size:12px; line-height:1.45; font-weight:600;
          text-decoration:none; white-space:nowrap; transition:border-color .12s, box-shadow .12s; }
.kiz-dl:hover { color:var(--wf-pick-ink); border-color:var(--wf-pick-rim-hi); box-shadow:var(--wf-pick-halo); }
.kiz-dl svg { width:12px; height:12px; flex:none; }
/* Кнопка действия в той же строке: тот же силуэт, что у выгрузки, но зелёная — она меняет коды в ЧЗ */
button.kiz-dl { font-family:inherit; cursor:pointer; }
.kiz-dl--go { border-color:rgba(30,158,56,.55); background:linear-gradient(180deg, rgba(30,158,56,.26), rgba(30,158,56,.10));
              color:var(--wf-ok); }
.kiz-dl--go:hover { color:var(--wf-ok); border-color:rgba(30,158,56,.85); box-shadow:0 4px 14px rgba(30,158,56,.18); }
.kiz-wait, .kiz-err { display:inline-flex; align-items:center; gap:8px; font-size:12px; }
.kiz-wait { color:var(--wf-dim); }
.kiz-err { color:var(--wf-danger); }
.kiz-wait .spinner-border { width:13px; height:13px; border-width:2px; }

/* ── Окно ввода в оборот. Скин эталонный (.gm-modal), но шире и с таблицей: диалог всегда тёмный
      в обеих темах, поэтому цвета тут свои, а не из токенов страницы. ── */
.ki-dialog { max-width:1020px; }
.ki-common { display:flex; flex-wrap:wrap; justify-content:center; gap:10px; margin:12px 0 10px; }
.ki-common label, .ki-cert { display:inline-flex; align-items:center; gap:7px; font-size:12px; color:#b9c6bd; }
.ki-cert { justify-content:center; margin-top:10px; }
.ki-common :is(input, select), .ki-cert select { height:26px; padding:2px 7px; font-size:12px; color:#eaf1ea;
    background:rgba(0,0,0,.30); border:1px solid rgba(255,255,255,.16); border-radius:6px; outline:none; }
.ki-common :is(input, select):focus, .ki-cert select:focus { border-color:var(--gm-rim); }
.ki-cert select { max-width:420px; }
.ki-wrap { max-height:46vh; overflow:auto; border:1px solid rgba(255,255,255,.12); border-radius:8px;
           background:rgba(0,0,0,.20); }
.ki-table { width:100%; border-collapse:collapse; font-size:12px; text-align:left; }
.ki-table th { position:sticky; top:0; z-index:1; padding:5px 8px; font-size:10px; font-weight:700;
    letter-spacing:.06em; text-transform:uppercase; color:#9fb0a4; background:#1b2430;
    border-bottom:1px solid rgba(255,255,255,.12); white-space:nowrap; }
.ki-table td { padding:4px 8px; border-bottom:1px solid rgba(255,255,255,.06); color:#dbe3dd; vertical-align:middle; }
.ki-table tr:last-child td { border-bottom:none; }
.ki-num, .ki-table td.ki-num { text-align:center; }
.ki-table .ki-gtin { font-family:ui-monospace, Menlo, Consolas, monospace; white-space:nowrap; }
/* Способ выпуска: не поле ввода, а факт из кода — потому подписью под GTIN, а не отдельной колонкой */
.ki-emi { display:block; font-family:system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;
          font-style:normal; font-size:10px; line-height:1.4; color:#8b9690; }
.ki-table td.ki-num b { font-size:13px; color:#fff; }
.ki-table input, .ki-table select { height:24px; padding:1px 6px; font-size:12px; color:#eaf1ea;
    background:rgba(0,0,0,.32); border:1px solid rgba(255,255,255,.16); border-radius:5px; outline:none; }
.ki-table input:focus, .ki-table select:focus { border-color:var(--gm-rim); }
.ki-table input.ki-bad, .ki-common input.ki-bad { border-color:#ff9b9b; background:rgba(220,53,69,.16); }
.ki-doc { display:flex; align-items:center; gap:5px; flex-wrap:wrap; }
.ki-doc .ki-no { flex:1 1 150px; min-width:0; }   /* номер тянется: иначе документ уезжает на вторую строку */
.ki-doc .ki-dt { flex:0 0 125px; }
.ki-tnved { width:104px; text-align:center; }
/* Строка, которую пока не умеем вводить: видна, но выключена — исчезнувшую строку человек ищет и не находит */
.ki-off td { color:#8b9690; }
.ki-off .ki-why { font-style:italic; color:#ffcd78; }
.ki-dash { color:#6d7873; }
.ki-note { margin-top:9px; font-size:11.5px; line-height:1.5; color:#b9c6bd; }
.ki-note b { color:#eaf1ea; }
.ki-beta { margin-top:8px; padding:6px 10px; border:1px solid rgba(255,205,120,.34); border-radius:8px;
           background:rgba(255,205,120,.08); font-size:11.5px; line-height:1.5; color:#e6d9bd; }
.ki-beta a { color:#ffcd78; text-decoration:underline; }
.ki-beta a:hover { color:#fff; }
.ki-progress { margin-top:8px; font-size:11.5px; min-height:16px; color:#b9c6bd; }
.ki-res { margin-top:8px; font-size:12px; text-align:left; }
.ki-res div { padding:2px 0; }
.ki-res .ok { color:#8fe8a0; }
.ki-res .bad { color:#ff9b9b; }
@media (max-width:760px) {
    .ki-doc .ki-no, .ki-doc .ki-dt { width:100%; }
    .ki-wrap { max-height:52vh; }
}
@media (max-width:620px) {   /* в один ряд три доли не встают: кнопка и стрелка сверху, организация под ними */
    .kiz-head { grid-template-columns:minmax(0,1fr) auto; row-gap:6px; }
    .kiz-go { grid-area:1 / 1; }
    .kiz-toggle { grid-area:1 / 2; }
    .kiz-sess { grid-area:2 / 1 / 3 / -1; }
}

/* ── Панель управления гридом ── */
.compact-controls { margin-top:14px; }   /* отступ был на снятом заголовке «Товары и количества» */
.fmt-sep { width:1px; height:20px; background:var(--wf-rim-hi); }


/* ══════════════ Переключатель темы ══════════════ */
.wf-theme-btn { display:inline-flex; align-items:center; justify-content:center; flex:none;
                width:24px; height:24px; padding:0; border:1px solid var(--wf-rim); border-radius:6px;
                background:var(--wf-glass); color:var(--wf-dim); cursor:pointer; box-shadow:var(--wf-inset);
                transition:color .12s, border-color .12s, background .12s; }
.wf-theme-btn:hover { color:var(--wf-amber); border-color:var(--wf-rim-hi); background:var(--wf-glass-hi); }
.wf-theme-btn svg { width:14px; height:14px; }
/* Значок показывает, куда уйдём: в тёмной — солнце, в светлой — луна */
.wf-theme-btn .wf-ico-moon { display:none; }
:root[data-wf-theme="light"] .wf-theme-btn .wf-ico-sun { display:none; }
:root[data-wf-theme="light"] .wf-theme-btn .wf-ico-moon { display:block; }
/* На цветной шапке обработки и ошибки кнопка лежит на тёмной подложке в любой теме */
.progress-header .wf-theme-btn, .error-header .wf-theme-btn { color:rgba(255,255,255,.72);
    border-color:rgba(255,255,255,.28); background:rgba(255,255,255,.10); box-shadow:none; }
.progress-header .wf-theme-btn:hover, .error-header .wf-theme-btn:hover { color:#fff;
    border-color:rgba(255,255,255,.5); background:rgba(255,255,255,.2); }

/* Заголовок страницы и кнопка темы в одной строке */
.wf-head { position:relative; display:flex; align-items:center; justify-content:center; margin-bottom:4px; }
.wf-head h1 { margin:0; padding:0 112px; color:var(--wf-ink); text-align:center; }   /* симметричные поля под пару «Демо + тема» держат заголовок по центру */
.wf-head .wf-theme-btn { position:absolute; right:0; }
.wf-head-actions { position:absolute; right:0; display:flex; align-items:center; gap:6px; }
.wf-head-actions .wf-theme-btn { position:static; }

/* ══════════════ Кнопки СУЗ и переходов (includes/wf_suz_buttons.html) ══════════════ */
.wf-links { display:flex; justify-content:center; gap:12px; margin:0 0 14px; }
.wf-links .btn { flex:0 1 340px; font-size:14px; }
/* на результатах — под памяткой, к правому краю; две колонки одной ширины по самой длинной подписи; отбивку даёт gap колонки */
.wfd-right .wf-links { display:inline-grid; grid-auto-flow:column; grid-auto-columns:1fr; align-self:flex-end; margin:0; }   /* inline-grid + 1fr: колонки равны самой широкой подписи, сам блок ужат по тексту */
.wfd-right .wf-links .btn { padding-left:14px; padding-right:14px; font-size:13px; }
/* на тёмном грунте «чернильная» кнопка теряется — переворачиваем в белую */
:root:not([data-wf-theme="light"]) .btn-3d-ink { --c1:#fff; --c2:#e8eaee; --c3:#c9cdd3; --c4:#a9aeb5; color:#212529 !important; text-shadow:none; }
:root:not([data-wf-theme="light"]) .btn-3d-ink:hover { color:#000 !important; }
.wf-suz { display:flex; align-items:center; gap:6px; }
/* Ряд под дропзоной — второстепенный: жёлтый гасим в блёклый песочный, чтобы не спорил с основным сценарием «бросить файл» */
.wfu-corner .btn-3d-yellow { --c1:#e6dfc0; --c2:#d6cca0; --c3:#bfb488; --c4:#a0965f; color:#5a533a !important; text-shadow:none; opacity:.85; }
.wfu-corner .btn-3d-yellow:hover { opacity:1; }
.wfu-corner .wf-beta { background:#5a533a; color:#efe8c8; }   /* на загрузке — в углу дропзоны за «Выбрать папку», на результатах — под генерацией */
.wf-suz-ico { width:31px; padding-left:0 !important; padding-right:0 !important; text-align:center; }
.wf-beta { margin-left:7px; padding:0 5px; border-radius:999px; background:#1c1c1c; color:#ffc107; font-size:10px; font-weight:700; line-height:15px; vertical-align:1px; text-shadow:none; }
.suz-dialog { max-width:560px; }
.suz-form { margin-top:12px; text-align:left; }
.suz-form label { display:block; margin-bottom:8px; font-size:12px; color:#b9c6bd; }
.suz-form .form-control { margin-top:3px; background:rgba(255,255,255,.08); border-color:rgba(255,255,255,.16); color:#e8eaee; }
.suz-hint { margin-top:6px; font-size:11.5px; line-height:1.45; color:#9aa3ae; }
.suz-err { margin-top:6px; min-height:1em; font-size:12px; color:#ff9b9b; }
.suz-tabs { display:flex; justify-content:center; gap:4px; margin-top:10px; }
.suz-tab { padding:4px 14px; border:1px solid rgba(255,255,255,.16); border-radius:999px; background:transparent; color:#b9c6bd; font-size:12px; font-weight:600; }
.suz-tab.on { background:rgba(150,190,255,.18); border-color:rgba(150,190,255,.45); color:#fff; }
.suz-body { max-height:52vh; overflow:auto; margin-top:10px; text-align:left; }
.suz-wait { padding:18px; text-align:center; color:#9aa3ae; font-size:13px; }
.suz-order { margin-bottom:10px; border:1px solid rgba(255,255,255,.12); border-radius:8px; overflow:hidden; }
.suz-oh { display:flex; justify-content:space-between; padding:5px 10px; background:rgba(0,0,0,.25); font-size:12px; color:#96beff; font-weight:600; }
.suz-row { display:flex; align-items:center; gap:10px; margin:0; padding:6px 10px; border-top:1px solid rgba(255,255,255,.07); font-size:13px; color:#e8eaee; cursor:default; }
.suz-row--p { border-top:none; border-bottom:1px solid rgba(255,255,255,.07); cursor:pointer; }
.suz-g { flex:1; min-width:0; }
.suz-g small { display:block; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; color:#9aa3ae; font-size:11px; }
.suz-av { min-width:36px; text-align:right; color:#b9c6bd; }
.suz-q { width:74px; text-align:right; background:rgba(255,255,255,.08); border-color:rgba(255,255,255,.16); color:#e8eaee; }
.suz-left { color:#9aa3ae; font-size:11px; white-space:nowrap; }

/* ══════════════ Экран загрузки ══════════════ */
/* Бриф о порядке работы: сложенное состояние помнит браузер */
.wfu-brief { max-width:820px; margin:0 auto 14px; border:1px solid var(--wf-rim); border-radius:var(--ctr-radius);
             background:var(--wf-glass); color:var(--wf-soft); font-size:13px; box-shadow:var(--wf-inset); }
.wfu-brief > summary { display:flex; align-items:center; justify-content:center; gap:7px; padding:9px 14px;
                       color:var(--wf-dim); font-weight:600; cursor:pointer; list-style:none; }
.wfu-brief > summary::-webkit-details-marker { display:none; }
.wfu-brief > summary::after { content:''; flex:none; border:4px solid transparent; border-left-color:currentColor;
                              transition:transform .15s; }
.wfu-brief > summary:hover, .wfu-brief[open] > summary { color:var(--wf-ink); }
.wfu-brief[open] > summary { border-bottom:1px solid var(--wf-rim); }
.wfu-brief[open] > summary::after { transform:rotate(90deg); }
.wfu-brief-steps { margin:0; padding:12px 18px 14px; display:flex; flex-direction:column; gap:8px;
                   list-style:none; counter-reset:wfb; line-height:1.5; }
.wfu-brief-steps li { counter-increment:wfb; position:relative; padding-left:30px; }
.wfu-brief-steps li::before { content:counter(wfb); position:absolute; left:0; top:1px; width:21px; height:21px;
    display:flex; align-items:center; justify-content:center; border-radius:50%; font-size:11px; font-weight:700;
    background:var(--wf-pick-bg); border:1px solid var(--wf-pick-rim); color:var(--wf-pick-ink); }
.wfu-brief b { color:var(--wf-ink); }

.wfu-help { margin-top:1rem; padding:16px 20px; border:1px solid var(--wf-rim); border-radius:var(--ctr-radius);
            background:var(--wf-glass); color:var(--wf-soft); font-size:13px; box-shadow:var(--wf-inset); }
.wfu-cols { display:flex; gap:32px; flex-wrap:wrap; }
.wfu-col { flex:1; min-width:220px; }
.wfu-col--n { flex:1; min-width:200px; }
.wfu-col--fix { min-width:150px; }
.wfu-h { margin-bottom:6px; font-weight:600; color:var(--wf-ink); }
.wfu-l { margin-bottom:4px; }
.wfu-l--t { margin-bottom:2px; }
.wfu-help b { color:var(--wf-ink); }
.wfu-dim { color:var(--wf-dim); }
.wfu-code { padding:2px 6px; border-radius:4px; background:var(--wf-code); font-size:12px; }
.wfu-code--sm { font-size:11px; }
.wfu-gs { color:#dc3545; font-weight:700; }   /* разделитель GS всюду красный: он и на светлой был таким */

/* ══════════════ Экран обработки ══════════════ */
.progress-card { border:none; border-radius:var(--ctr-radius); overflow:hidden; background:var(--wf-glass);
                 box-shadow:var(--wf-drop); }
/* Шапка — ночная в обеих темах: она и на светлой странице была тёмной */
.progress-header { display:flex; align-items:center; gap:10px;
                   background:linear-gradient(135deg, #1a1a2e 0%, #16213e 50%, #0f3460 100%);
                   color:#fff; padding:18px 24px; }
.progress-header.is-error { background:linear-gradient(135deg, #b02a37, #8b1a25); }
.progress-header h5 { flex:1; margin:0; font-size:17px; letter-spacing:0.3px; }
.progress-card .card-body { color:var(--wf-soft); }
.files-panel { border:1px solid var(--wf-rim); border-radius:var(--ctr-radius); overflow:hidden; box-shadow:var(--wf-inset); }
.files-panel-header { background:var(--wf-head); padding:8px 14px; font-weight:600; font-size:13px;
                      color:var(--wf-ink); border-bottom:1px solid var(--wf-rim); }
.files-panel table { margin:0; }
.files-panel table thead th { background:var(--wf-head); color:var(--wf-soft); font-size:12px; font-weight:600;
                              text-transform:uppercase; letter-spacing:0.5px;
                              border-bottom:2px solid var(--wf-rim); padding:6px 8px; }
.files-panel table tbody td { padding:5px 8px; font-size:13px; vertical-align:middle; }
.spinner-glow { width:3.5rem; height:3.5rem; color:#ffc107; filter:drop-shadow(0 0 8px rgba(255,193,7,0.4)); }
#progress-text { color:var(--wf-ink); }
:is(.progress-card, .error-card) .text-muted { color:var(--wf-dim) !important; }
.error-box { border-radius:var(--ctr-radius); border:1px solid var(--wf-err-rim);
             background:var(--wf-err-bg); color:var(--wf-danger); }

/* ══════════════ Экран ошибки ══════════════ */
.error-card { border:none; border-radius:var(--ctr-radius); overflow:hidden; background:var(--wf-glass);
              box-shadow:var(--wf-drop); }
.error-header { display:flex; align-items:center; gap:10px;
                background:linear-gradient(135deg, #4a1a1a 0%, #6b2030 50%, #8b2040 100%);
                color:#fff; padding:18px 24px; }
.error-header h5 { flex:1; margin:0; font-size:17px; letter-spacing:0.3px; }
.error-card .card-body { color:var(--wf-soft); }
.error-item { border:1px solid var(--wf-err-rim); border-radius:var(--ctr-radius);
              background:var(--wf-err-bg); padding:12px 16px; }
.error-item + .error-item { margin-top:10px; }
.error-filename { font-weight:600; font-size:14px; color:var(--wf-ink); }
.error-msg { font-size:13px; color:var(--wf-danger); margin-top:4px; }

/* ══════════════ Тёмная ветка: то, что бутстрап и AG Grid рисуют светлым ══════════════
   Метится через :not([data-wf-theme="light"]) — без атрибута ветка тоже в силе */

/* Знак ЕАС нарисован чёрным по прозрачному — на тёмном его выворачивают */
:root:not([data-wf-theme="light"]) .wfd-opt--logo[data-mark="eac"] img { filter:invert(1); }

/* Подсказки: движок общий, из base.html. На тёмной странице чёрная плашка терялась,
   поэтому подложка светлее — панельный чёрный под стеклом цеховой зоны */
:root:not([data-wf-theme="light"]) #tipFloat { background:#2d3135; box-shadow:0 12px 30px rgba(0,0,0,.55), inset 0 0 0 1px rgba(255,255,255,.14); }
:root:not([data-wf-theme="light"]) #tipFloat::before { border-bottom-color:#2d3135; }
:root:not([data-wf-theme="light"]) #tipFloat.up::before { border-top-color:#2d3135; }

/* Панели статусов КИЗ и повторов */
:root:not([data-wf-theme="light"]) :is(.kiz-active, .kiz-inactive, #kizDupPanel, #kizInnerDupPanel) {
    border:1px solid var(--wf-rim) !important;
    border-radius:var(--ctr-radius) !important; background:var(--wf-glass) !important; color:var(--wf-soft); }
:root:not([data-wf-theme="light"]) .kiz-inactive { background:rgba(220,53,69,.07) !important; }
:root:not([data-wf-theme="light"]) :is(.kiz-active, .kiz-inactive) .card-header { background:transparent !important;
    border-bottom:1px solid var(--wf-rim) !important; }
:root:not([data-wf-theme="light"]) :is(#kizDupPanel, #kizInnerDupPanel) .card-header { background:rgba(255,193,7,.09) !important;
    border-bottom:1px solid var(--wf-rim) !important; color:var(--wf-warn); }
:root:not([data-wf-theme="light"]) .dup-item { color:var(--wf-soft); }
:root:not([data-wf-theme="light"]) .dup-item:hover { background:var(--wf-hover) !important; }
:root:not([data-wf-theme="light"]) .dup-gtin-wrap { background:rgba(255,255,255,.07) !important; }

/* Панель управления гридом */
:root:not([data-wf-theme="light"]) .compact-controls { background:var(--wf-glass) !important; border:1px solid var(--wf-rim) !important;
                    border-radius:var(--ctr-radius) !important; padding:6px 10px !important; }
:root:not([data-wf-theme="light"]) .compact-controls .btn-glass { height:26px; display:inline-flex; align-items:center; color:var(--wf-soft);
    background:var(--wf-glass); border-color:var(--wf-rim); box-shadow:var(--wf-inset); }
:root:not([data-wf-theme="light"]) .compact-controls .btn-glass:hover { color:#fff; border-color:var(--wf-rim-hi); transform:none;
    background:var(--wf-glass-hi); }
:root:not([data-wf-theme="light"]) .compact-controls .btn-glass.active { color:var(--wf-pick-ink); border-color:var(--wf-pick-rim); background:var(--wf-pick-bg);
    box-shadow:var(--wf-inset-hi); }
:root:not([data-wf-theme="light"]) .compact-controls .search-well { color:var(--wf-ink); background:var(--wf-well); border-color:var(--wf-rim);
    box-shadow:inset 0 2px 4px rgba(0,0,0,.35); }
:root:not([data-wf-theme="light"]) .compact-controls .search-well::placeholder { color:var(--wf-dim); }
:root:not([data-wf-theme="light"]) .compact-controls .text-muted { color:var(--wf-dim) !important; }
:root:not([data-wf-theme="light"]) .compact-controls .btn-outline-secondary { color:var(--wf-soft); border-color:var(--wf-rim); }
:root:not([data-wf-theme="light"]) .compact-controls .btn-outline-secondary:hover { background:rgba(255,255,255,.10); color:#fff; border-color:var(--wf-rim-hi); }
:root:not([data-wf-theme="light"]) .compact-controls .form-select { background-color:var(--wf-well); color:var(--wf-ink); border-color:var(--wf-rim); }

/* Таблица: тот же цех; бумага остаётся в полях, где живёт текст этикетки */
:root:not([data-wf-theme="light"]) #resultsGrid.ag-theme-quartz {
    --ag-background-color:#14171e !important; --ag-odd-row-background-color:rgba(255,255,255,.025) !important;
    --ag-foreground-color:#cfd3da !important; --ag-data-color:#cfd3da !important; --ag-border-color:rgba(255,255,255,.08) !important;
    --ag-row-border-color:rgba(255,255,255,.07) !important; --ag-row-hover-color:rgba(255,255,255,.05) !important;
    --ag-selected-row-background-color:rgba(30,158,56,.15) !important;   /* плёнка отметки: тема красит синим, у нас зелёный */
    --ag-checkbox-checked-color:#1e9e38 !important;              /* отмечено — цеховой зелёный; синего в этой зоне нет */
    --ag-checkbox-unchecked-color:rgba(255,255,255,.34) !important;
    --ag-checkbox-background-color:rgba(0,0,0,.3) !important;
    --ag-input-focus-border-color:#f09030 !important;
    border:1px solid var(--wf-rim) !important; border-radius:var(--ctr-radius) !important; }
/* Строка: общий css гриду прописывает светло-серую заливку и чёрный шов — на тёмном это
   делало неотмеченные строки нечитаемыми. Заливку снимаем, шов переводим в волосяной */
:root:not([data-wf-theme="light"]) #resultsGrid .ag-row:not(.dup-clamp-flash) { background-color:transparent !important; }   /* :not — иначе important перебьёт вспышку повтора */
:root:not([data-wf-theme="light"]) #resultsGrid .ag-row { box-shadow:inset 0 -1px 0 rgba(255,255,255,.07) !important; }
:root:not([data-wf-theme="light"]) #resultsGrid .ag-row-odd { background-color:rgba(255,255,255,.025) !important; }
:root:not([data-wf-theme="light"]) #resultsGrid .ag-row.ag-row-hover { background-color:rgba(255,255,255,.06) !important; }
/* Шапка: чёрные швы между ячейками на тёмном читались как разрывы */
:root:not([data-wf-theme="light"]) #resultsGrid .ag-header-cell { border-color:rgba(255,255,255,.07) !important; }
/* Галочка строки: цвет темы зашит в её css мимо переменных, поэтому правим прямо */
:root:not([data-wf-theme="light"]) #resultsGrid .ag-checkbox-input-wrapper { background-color:rgba(0,0,0,.32) !important;
    box-shadow:inset 0 0 0 1px rgba(255,255,255,.28) !important; }
:root:not([data-wf-theme="light"]) #resultsGrid .ag-checkbox-input-wrapper.ag-checked { background-color:#1e9e38 !important;
    box-shadow:inset 0 0 0 1px #166d28 !important; }
:root:not([data-wf-theme="light"]) #resultsGrid .ag-checkbox-input-wrapper.ag-checked::after { color:#fff !important; }
/* Поля с текстом этикетки — бумага: чернила тёмные, кант волосяной вместо двухпиксельного */
:root:not([data-wf-theme="light"]) #resultsGrid [col-id="name"] [contenteditable] { color:#1a1a1a; }
:root:not([data-wf-theme="light"]) #resultsGrid :is([col-id="name"] [contenteditable], [col-id="bcode"] input, .count-cell-wrap),
:root:not([data-wf-theme="light"]) #resultsGrid .ag-row-selected [col-id="name"] [contenteditable] {
    border-width:1px !important; border-color:#d7dbe0 !important; background:#e9ebee !important; }
:root:not([data-wf-theme="light"]) #resultsGrid .row-modified :is([col-id="bcode"] input, [col-id="name"] [contenteditable]) {
    background:#ffe6a3 !important; }   /* правленая строка остаётся жёлтой поверх притушенной бумаги */
:root:not([data-wf-theme="light"]) #resultsGrid .count-cell-wrap.group-incomplete { border-color:#dc3545 !important; }
:root:not([data-wf-theme="light"]) #resultsGrid [col-id="iconset_id"] span { color:var(--wf-dim) !important; }
:root:not([data-wf-theme="light"]) #resultsGrid [col-id="del"] button { color:#ff9b9b !important; }                /* тёмно-красный крестик на тёмном пропадал */
:root:not([data-wf-theme="light"]) #resultsGrid [col-id="del"] button:hover { background:rgba(220,53,69,.18) !important; }

/* ── Экран загрузки: бутстраповские карточка, плашки и зона приёма файлов ── */
:root:not([data-wf-theme="light"]) .drop-zone { border-color:var(--wf-rim-hi); background:var(--wf-glass); }
:root:not([data-wf-theme="light"]) .drop-zone:hover { border-color:var(--wf-pick-rim); background:var(--wf-glass-hi); }
:root:not([data-wf-theme="light"]) .drop-zone-title { color:var(--wf-ink); }
:root:not([data-wf-theme="light"]) :is(.drop-zone-icon, .drop-zone-subtitle, .file-size, .drag-handle) { color:var(--wf-dim) !important; }
:root:not([data-wf-theme="light"]) .file-item { background:rgba(255,255,255,.055); color:var(--wf-soft); }
:root:not([data-wf-theme="light"]) .file-item:hover { background:rgba(255,255,255,.10); }
:root:not([data-wf-theme="light"]) .file-item.dragging { background-color:rgba(255,255,255,.02) !important; }
:root:not([data-wf-theme="light"]) .file-item.drag-over { background-color:rgba(59,130,217,.18) !important; }
:root:not([data-wf-theme="light"]) .card { background:var(--wf-glass); border-color:var(--wf-rim); color:var(--wf-soft); }
:root:not([data-wf-theme="light"]) .card-header.bg-light { background:var(--wf-head) !important;
    color:var(--wf-ink); border-color:var(--wf-rim); }
:root:not([data-wf-theme="light"]) .card-footer { background:var(--wf-head); border-color:var(--wf-rim); }
:root:not([data-wf-theme="light"]) .alert-warning { background:rgba(255,193,7,.09); border-color:var(--wf-warn-rim); color:var(--wf-warn); }
:root:not([data-wf-theme="light"]) .alert-info { background:rgba(59,130,217,.12); border-color:rgba(59,130,217,.30); color:#a8caf0; }

/* ── Экран обработки: полосатая таблица файлов ── */
:root:not([data-wf-theme="light"]) .files-panel .table { --bs-table-color:var(--wf-soft); --bs-table-bg:transparent;
    --bs-table-striped-color:var(--wf-soft); --bs-table-striped-bg:rgba(255,255,255,.035);
    --bs-table-border-color:var(--wf-rim); }

/* ══ Ужимается только правая колонка: сначала настройки в один столбец, потом уходят под левую ══ */
@media (max-width: 1140px) { .wfd-set-grid { grid-template-columns:1fr; } }
@media (max-width: 900px)  { .wfd-work { grid-template-columns:1fr; } }
/* ══ Смартфон ══ */
@media (max-width: 640px) {
    .wfd-left { width:auto; }
    .wfd-memo ul { columns:1; }
    .wfd-set-head { gap:8px; }
    .wfd-presets { margin-left:0; width:100%; }
    .wfd-preset { flex:1; }
    .wfd-preset-cur { width:100%; justify-content:space-between; height:26px; }
    .wfd-preset-menu { left:0; right:auto; }
    .wfd-opt { min-height:32px; font-size:12.5px; }
    .wfd-opt--size, .wfd-opt--bc, .wfd-opt--logo { flex:1 1 calc(33.333% - 5px); width:auto; }
    .wfd-opt--num, .wfd-opt--file { flex:1 1 calc(50% - 5px); }
    .wfd-num { flex:1 1 100%; min-height:32px; }
    .wfd-num input { flex:0 1 140px; width:auto; height:32px; }
    .wfd-iconset { flex:1 0 auto; }
    .wfd-gen { flex-wrap:wrap; }
    .wfd-gen .btn { flex:1 1 100%; }
    .download-block { flex-wrap:wrap; justify-content:center; }
    .download-buttons { flex-wrap:wrap; justify-content:center; }
    #fmtToolbar { flex:1 1 100% !important; flex-wrap:wrap; justify-content:flex-start; }
    #previewContainer { height:240px; }
}
