/*
 * Дизайн-слой поверх Bootstrap 5.3.
 * Спокойная основа для работы с таблицами весь день; одна выразительная деталь —
 * артикул-бирка (.article). Цвета: бумага, чернила, линия, денимовый индиго.
 */

@font-face {
  font-family: 'Golos Text';
  font-style: normal;
  font-display: swap;
  font-weight: 400 900;
  src: url('../vendor/golos-text/golos-text-cyrillic-wght-normal.woff2') format('woff2-variations');
  unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}

@font-face {
  font-family: 'Golos Text';
  font-style: normal;
  font-display: swap;
  font-weight: 400 900;
  src: url('../vendor/golos-text/golos-text-latin-wght-normal.woff2') format('woff2-variations');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308,
    U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

/* ── Токены ─────────────────────────────────────────────────────────────── */

:root {
  --ow-paper: #f4f6f8;      /* фон страницы */
  --ow-surface: #ffffff;    /* таблицы, формы, шапка */
  --ow-ink: #1f2633;        /* основной текст */
  --ow-ink-muted: #5d6675;  /* подписи, второстепенное */
  --ow-ink-faint: #8a93a1;  /* разделители в артикуле, пустые значения */
  --ow-line: #dde2e8;       /* границы */
  --ow-line-soft: #eceff3;  /* строки таблиц */
  --ow-denim: #33478c;      /* акцент: ссылки, главные кнопки, активное */
  --ow-denim-dark: #263668;
  --ow-denim-tint: #eef1f9; /* выделенная строка, фон активного */
  --ow-ok: #2e7354;
  --ow-warn: #a86a12;
  --ow-bad: #b23a32;
  --ow-denim-solid: #33478c;       /* заливка под белый текст: главные кнопки, счётчики */
  --ow-denim-solid-hover: #263668;
  --ow-denim-line: #b9c2dd;        /* рамка акцентных кнопок */
  --ow-field-line: #cfd5dd;        /* рамка полей ввода */
  --ow-ok-tint: #edf6f1;   --ow-ok-ink: #1f5a40;     /* плашки и сообщения: фон и текст */
  --ow-warn-tint: #fbf4e8; --ow-warn-ink: #7a4d0d;
  --ow-bad-tint: #fbeeed;  --ow-bad-ink: #8a2b25;
  --ow-max: 1280px;         /* ширина интерфейса: на широких мониторах не расползается */

  --bs-body-font-family: 'Golos Text', system-ui, -apple-system, 'Segoe UI', sans-serif;
  --bs-body-font-size: 0.9375rem;   /* 15px — плотнее, но читаемо */
  --bs-body-line-height: 1.5;
  --bs-body-color: var(--ow-ink);
  --bs-body-bg: var(--ow-paper);
  --bs-secondary-color: var(--ow-ink-muted);
  --bs-border-color: var(--ow-line);
  --bs-border-radius: 0.375rem;
  --bs-border-radius-sm: 0.25rem;
  --bs-link-color: var(--ow-denim);
  --bs-link-color-rgb: 51, 71, 140;
  --bs-link-hover-color: var(--ow-denim-dark);
  --bs-link-hover-color-rgb: 38, 54, 104;
  --bs-primary: var(--ow-denim);
  --bs-primary-rgb: 51, 71, 140;
  --bs-success-rgb: 46, 115, 84;
  --bs-warning-rgb: 168, 106, 18;
  --bs-danger-rgb: 178, 58, 50;
  --bs-focus-ring-color: rgba(51, 71, 140, 0.28);
}

/* Тёмная тема: те же токены, другие значения. Включается атрибутом data-bs-theme="dark" на <html>
   (кнопка в шапке, static/ui/app.js); без выбора — как в системе. */
[data-bs-theme='dark'] {
  color-scheme: dark;
  --ow-paper: #14171c;
  --ow-surface: #1c2027;
  --ow-ink: #e6e9ee;
  --ow-ink-muted: #a3acb9;
  --ow-ink-faint: #717a88;
  --ow-line: #2f353f;
  --ow-line-soft: #262b33;
  --ow-denim: #93a6ea;           /* ссылки и акцент на тёмном — светлее */
  --ow-denim-dark: #b3c1f2;
  --ow-denim-tint: #232a40;
  --ow-denim-solid: #4a62b8;
  --ow-denim-solid-hover: #5a72c8;
  --ow-denim-line: #3d4a78;
  --ow-field-line: #3a414d;
  --ow-ok: #5fb894;
  --ow-warn: #d9a047;
  --ow-bad: #e07a72;
  --ow-ok-tint: #1d3329;   --ow-ok-ink: #8fd4b4;
  --ow-warn-tint: #3a2f1a; --ow-warn-ink: #e6bd77;
  --ow-bad-tint: #3b2220;  --ow-bad-ink: #f0a39c;

  --bs-link-color-rgb: 147, 166, 234;
  --bs-link-hover-color-rgb: 179, 193, 242;
  --bs-primary-rgb: 74, 98, 184;
  --bs-success-rgb: 95, 184, 148;
  --bs-warning-rgb: 217, 160, 71;
  --bs-danger-rgb: 224, 122, 114;
  --bs-focus-ring-color: rgba(147, 166, 234, 0.35);
  --bs-secondary-bg: var(--ow-line-soft);
  --bs-tertiary-bg: var(--ow-line-soft);
  --bs-emphasis-color: var(--ow-ink);
  --bs-heading-color: var(--ow-ink);
}
[data-bs-theme='dark'] .form-control::placeholder { color: var(--ow-ink-faint); }
[data-bs-theme='dark'] .ow-photo, [data-bs-theme='dark'] .ow-photo-zoom img { background: var(--ow-line); }
[data-bs-theme='dark'] .btn-close { filter: invert(1) grayscale(1) brightness(2); }
[data-bs-theme='dark'] .dropdown-menu, [data-bs-theme='dark'] .ow-confirm, [data-bs-theme='dark'] .ow-dialog {
  background: var(--ow-surface); color: var(--ow-ink); border-color: var(--ow-line);
}
.ow-theme-toggle .ow-icon { margin: 0; }
[data-bs-theme='dark'] .ow-theme-toggle [data-theme-icon='dark'],
html:not([data-bs-theme='dark']) .ow-theme-toggle [data-theme-icon='light'] { display: none; }

body {
  font-variant-numeric: tabular-nums;
  -webkit-font-smoothing: antialiased;
}

a { text-underline-offset: 0.2em; }
a:not(:hover) { text-decoration: none; }

:focus-visible { outline: 2px solid var(--ow-denim); outline-offset: 2px; }

/* ── Типографика: шкала 15 / 17 / 21 / 26 ──────────────────────────────── */

h1, .h1 { font-size: 1.625rem; font-weight: 600; letter-spacing: -0.01em; line-height: 1.25; }
h2, .h2 { font-size: 1.3125rem; font-weight: 600; line-height: 1.3; }
h3, .h3 { font-size: 1.0625rem; font-weight: 600; line-height: 1.35; }
.text-muted, .text-body-secondary { color: var(--ow-ink-muted) !important; }

/* ── Иконки (Lucide, спрайт в static/vendor/lucide) ─────────────────────── */

.ow-icon {
  width: 1.15em; height: 1.15em; flex-shrink: 0; vertical-align: -0.2em;
  fill: none; stroke: currentColor; stroke-width: 1.75; stroke-linecap: round; stroke-linejoin: round;
}
.btn .ow-icon, .nav-link .ow-icon { margin-right: 0.375rem; }
.ow-status .ow-icon, .ow-tag .ow-icon { width: 1em; height: 1em; margin-right: 0.25rem; vertical-align: -0.15em; }
.ow-empty-state { display: flex; flex-direction: column; align-items: flex-start; gap: 0.5rem; padding: 2rem 0; color: var(--ow-ink-faint); }
.ow-empty-state > .ow-icon { width: 2.25rem; height: 2.25rem; stroke-width: 1.5; }
.ow-empty-state p { margin: 0; color: var(--ow-ink-muted); }

/* ── Шапка ──────────────────────────────────────────────────────────────── */

.ow-nav {
  background: var(--ow-surface);
  border-bottom: 1px solid var(--ow-line);
}
.ow-nav .navbar-brand { font-weight: 700; color: var(--ow-ink); letter-spacing: -0.01em; }
.ow-nav .nav-link {
  color: var(--ow-ink-muted);
  padding-block: 1rem;
  border-bottom: 2px solid transparent;
  margin-bottom: -1px;
}
.ow-nav .nav-link:hover { color: var(--ow-ink); }
.ow-nav .nav-link.active { color: var(--ow-ink); border-bottom-color: var(--ow-denim); }
.ow-nav .navbar-nav { gap: 0.5rem; }
@media (max-width: 767.98px) {
  .ow-nav .nav-link { padding-block: 0.5rem; border-bottom: 0; }
  .ow-nav .nav-link.active { color: var(--ow-denim); }
}

/* ── Страница ───────────────────────────────────────────────────────────── */

/* Шапка и страница — одной ширины, по центру. */
.ow-page, .ow-nav > .container-fluid { max-width: var(--ow-max); margin-inline: auto; }
.ow-page { padding: 1.5rem 1rem 3rem; }
@media (min-width: 768px) {
  .ow-page { padding-inline: 1.5rem; }
  .ow-nav > .container-fluid { padding-inline: 1.5rem !important; }
}

.ow-page-head {
  display: flex; flex-wrap: wrap; align-items: flex-end; justify-content: space-between;
  gap: 0.75rem 1.5rem; margin-bottom: 1.5rem;
}
.ow-page-head h1 { margin: 0; }
.ow-page-head .ow-subtitle { color: var(--ow-ink-muted); margin-top: 0.25rem; }

.breadcrumb { font-size: 0.875rem; margin-bottom: 0.5rem; --bs-breadcrumb-divider-color: var(--ow-ink-faint); }
.breadcrumb-item.active { color: var(--ow-ink-muted); }

/* Раздел страницы: заголовок и содержимое на общем фоне, без плиток. */
* + .ow-section { margin-top: 2rem; }
.ow-section > h2 { font-size: 1.0625rem; margin-bottom: 0.75rem; }

/* Свойства объекта: подпись слева, значение справа. */
.ow-props { display: grid; grid-template-columns: minmax(9rem, max-content) 1fr; gap: 0.5rem 1.5rem; margin: 0; }
.ow-props dt { font-weight: 400; color: var(--ow-ink-muted); }
.ow-props dd { margin: 0; }
@media (max-width: 575.98px) {
  .ow-props { grid-template-columns: 1fr; gap: 0; }
  .ow-props dd { margin-bottom: 0.5rem; }
}

.ow-empty { color: var(--ow-ink-faint); }

/* ── Артикул-бирка ──────────────────────────────────────────────────────── */
/* SH0001-WHT-46: модель жирно, остальные части обычным, дефисы бледные. */

.article { white-space: nowrap; font-feature-settings: 'tnum', 'zero'; letter-spacing: 0.01em; }
.article .article-model { font-weight: 650; }
.article .article-sep { color: var(--ow-ink-faint); padding-inline: 0.05em; }
a .article .article-sep { color: inherit; opacity: 0.45; }
.article-lg { font-size: 1.625rem; }

/* ── Таблицы ────────────────────────────────────────────────────────────── */

.ow-table-wrap {
  background: var(--ow-surface);
  border: 1px solid var(--ow-line);
  border-radius: var(--bs-border-radius);
  overflow: auto;
}
.ow-table { margin: 0; --bs-table-bg: transparent; --bs-table-hover-bg: var(--ow-denim-tint); }
.ow-table > :not(caption) > * > * { padding: 0.5rem 0.75rem; border-bottom-color: var(--ow-line-soft); }
.ow-table thead th {
  position: sticky; top: 0; z-index: 1;
  background: var(--ow-surface);
  font-size: 0.8125rem; font-weight: 500; color: var(--ow-ink-muted);
  border-bottom: 1px solid var(--ow-line);
  white-space: nowrap;
}
.ow-table tbody tr:last-child > * { border-bottom: 0; }
.ow-table .num { text-align: right; }

/* Матрица цвет × размер. */
.ow-matrix th[scope='row'] { font-weight: 400; white-space: nowrap; }
.ow-matrix td { text-align: center; }
/* Внутри модели её часть артикула одинакова — приглушаем, видны цвет и размер. */
.ow-matrix .article-model { font-weight: 400; color: var(--ow-ink-faint); }

/* ── Формы и кнопки ─────────────────────────────────────────────────────── */

.form-label { font-weight: 500; margin-bottom: 0.375rem; }
.form-text { color: var(--ow-ink-muted); }
.form-control, .form-select { border-color: var(--ow-field-line); background-color: var(--ow-surface); }
.form-control:focus, .form-select:focus { border-color: var(--ow-denim); box-shadow: 0 0 0 0.2rem var(--bs-focus-ring-color); }
.form-check-input:checked { background-color: var(--ow-denim-solid); border-color: var(--ow-denim-solid); }
.form-check-inline { margin-right: 1.25rem; }

.ow-form { max-width: 40rem; }
.ow-form-wide { max-width: 48rem; }
.ow-form-actions { display: flex; gap: 0.5rem; margin-top: 1.5rem; }

.btn { font-weight: 500; }
.btn-primary {
  --bs-btn-bg: var(--ow-denim-solid); --bs-btn-border-color: var(--ow-denim-solid);
  --bs-btn-hover-bg: var(--ow-denim-solid-hover); --bs-btn-hover-border-color: var(--ow-denim-solid-hover);
  --bs-btn-active-bg: var(--ow-denim-solid-hover); --bs-btn-active-border-color: var(--ow-denim-solid-hover);
  --bs-btn-disabled-bg: var(--ow-denim-solid); --bs-btn-disabled-border-color: var(--ow-denim-solid);
}
.btn-outline-primary {
  --bs-btn-color: var(--ow-denim); --bs-btn-border-color: var(--ow-denim-line);
  --bs-btn-hover-bg: var(--ow-denim-tint); --bs-btn-hover-color: var(--ow-denim-dark);
  --bs-btn-hover-border-color: var(--ow-denim);
  --bs-btn-active-bg: var(--ow-denim-tint); --bs-btn-active-color: var(--ow-denim-dark);
  --bs-btn-active-border-color: var(--ow-denim);
}
.btn-outline-secondary {
  --bs-btn-color: var(--ow-ink-muted); --bs-btn-border-color: var(--ow-line);
  --bs-btn-hover-bg: var(--ow-line-soft); --bs-btn-hover-color: var(--ow-ink);
  --bs-btn-hover-border-color: var(--ow-field-line);
}

/* Фильтры над таблицей. */
.ow-filters { display: flex; flex-wrap: wrap; gap: 0.5rem 1rem; align-items: center; margin-bottom: 1rem; }
.ow-filters .form-control, .ow-filters .form-select { width: auto; min-width: 16rem; }
/* Дата в фильтрах: подпись «с»/«по» рядом с полем, поле узкое. */
.ow-filter-date { display: inline-flex; align-items: center; gap: 0.375rem; margin: 0; color: var(--ow-ink-muted); }
.ow-filters .ow-filter-date .form-control { min-width: 0; width: 10.5rem; }
@media (max-width: 575.98px) { .ow-filters .form-control, .ow-filters .form-select { min-width: 0; width: 100%; } }

/* ── Метки состояния ────────────────────────────────────────────────────── */

.ow-tag {
  display: inline-block; padding: 0.0625rem 0.5rem; border-radius: 999px;
  font-size: 0.8125rem; font-weight: 500; line-height: 1.5;
  background: var(--ow-line-soft); color: var(--ow-ink-muted);
  white-space: nowrap;
}

.ow-tag-warn { background: var(--ow-warn-tint); color: var(--ow-warn-ink); }
.ow-tag-ok { background: var(--ow-ok-tint); color: var(--ow-ok-ink); }
.ow-tag-bad { background: var(--ow-bad-tint); color: var(--ow-bad-ink); }
.ow-ok-text { color: var(--ow-ok); }
.ow-tag-primary { background: var(--ow-denim-tint); color: var(--ow-denim-dark); }

/* Штрихкод в списке: значение, метка, действия — в строку. */
.ow-barcode-row { display: flex; flex-wrap: wrap; align-items: baseline; gap: 0.25rem 0.75rem; }
.ow-barcode-row + .ow-barcode-row { margin-top: 0.25rem; }
.ow-inline-action > summary { list-style: none; }
.ow-inline-action > summary::-webkit-details-marker { display: none; }
.ow-inline-action[open] { flex-basis: 100%; }

/* Штрихкод под артикулом: цифры мельче и тише, чтобы не спорить с артикулом. */
.ow-barcode { font-size: 0.8125rem; color: var(--ow-ink-muted); letter-spacing: 0.02em; }

/* Статус заявки: цвет говорит, чей ход. */
.ow-status {
  display: inline-block; padding: 0.125rem 0.625rem; border-radius: 999px;
  font-size: 0.8125rem; font-weight: 500; line-height: 1.5; white-space: nowrap;
}
.ow-status-draft { background: var(--ow-line-soft); color: var(--ow-ink-muted); }
.ow-status-on_approval { background: var(--ow-warn-tint); color: var(--ow-warn-ink); }
.ow-status-approved { background: var(--ow-denim-tint); color: var(--ow-denim-dark); }
.ow-status-sent { background: var(--ow-ok-tint); color: var(--ow-ok-ink); }
.ow-status-cancelled { background: transparent; color: var(--ow-ink-faint); text-decoration: line-through; }
.ow-status-placed { background: var(--ow-ok-tint); color: var(--ow-ok-ink); }
h1 .ow-status { font-size: 0.875rem; margin-left: 0.5rem; }

/* Действия над объектом справа от заголовка; с комментарием — раскрываются. */
.ow-actions { display: flex; flex-wrap: wrap; align-items: flex-start; gap: 0.5rem; }
.ow-action-details { position: relative; }
.ow-action-details > summary { list-style: none; }
.ow-action-details > summary::-webkit-details-marker { display: none; }
.ow-action-panel {
  position: absolute; right: 0; z-index: 5; width: min(22rem, 90vw); margin-top: 0.375rem;
  padding: 1rem; background: var(--ow-surface); border: 1px solid var(--ow-line);
  border-radius: var(--bs-border-radius);
}

/* Шапка заявки в черновике — поля в две колонки. */
.ow-header-form { display: grid; grid-template-columns: repeat(auto-fit, minmax(14rem, 1fr)); gap: 0 1.5rem; align-items: start; }
.ow-header-form .mb-3:has(textarea) { grid-column: 1 / -1; }
.ow-header-form > button { justify-self: start; }

/* Новая заявка: заказ — только для дозаказа; белый ввоз — только для нового (у дозаказа он из заказа). */
.ow-request-create #group-id_order { display: none; }
.ow-request-create:has(input[name=kind][value=addition]:checked) #group-id_order { display: block; }
.ow-request-create:has(input[name=kind][value=addition]:checked) :is(#group-id_is_official, #group-id_promised_ready_date) { display: none; }

/* Выбор карточкой: радиокнопка с подробностями вместо пункта выпадающего списка. */
.ow-choice-cards { display: grid; gap: 0.5rem; }
.ow-choice-card { display: flex; gap: 0.75rem; align-items: flex-start; padding: 0.75rem 1rem; cursor: pointer;
  background: var(--ow-surface); border: 1px solid var(--ow-line); border-radius: var(--bs-border-radius); }
.ow-choice-card:hover { border-color: var(--ow-denim-line); }
.ow-choice-card:has(input:checked) { border-color: var(--ow-denim); background: var(--ow-denim-tint); }
.ow-choice-card .form-check-input { margin-top: 0.25rem; flex-shrink: 0; }
.ow-choice-body { display: grid; gap: 0.125rem; flex: 1; min-width: 0; }
.ow-choice-row { display: flex; flex-wrap: wrap; justify-content: space-between; gap: 0 1rem; }

/* Редактор позиций: узкие поля для цены и штук. */
.ow-input-price { width: 6.5rem; margin-left: auto; text-align: right; }
.ow-input-qty { width: 4.25rem; margin-inline: auto; text-align: center; }
/* Штуки — со стрелками «больше/меньше»; стрелки видны всегда, а не только под курсором. */
input[type=number].ow-input-qty { width: 4.75rem; padding-right: 0.25rem; }
input[type=number].ow-input-qty::-webkit-inner-spin-button { opacity: 1; }
/* Ошибку показываем рамкой: значок Bootstrap в узком поле закрывает цифры. */
.ow-input-qty.is-invalid, .ow-input-price.is-invalid { background-image: none; padding-right: 0.5rem; }
.ow-input-qty.is-invalid, .ow-input-price.is-invalid,
.ow-input-qty.is-invalid:focus, .ow-input-price.is-invalid:focus { border-color: var(--ow-bad); color: var(--ow-bad); }
/* Ткань и № её цвета: при длинной сетке таблица не должна сжимать их до нуля — пусть прокручивается. */
.ow-input-fabric { flex: 1 0 9rem; min-width: 9rem; }
.ow-input-fabricno { flex: 0 0 5.5rem; width: 5.5rem; text-align: center; }
.ow-request-table tfoot th, .ow-request-table tfoot td { border-top: 1px solid var(--ow-line); border-bottom: 0; }
.ow-editor-bar { display: flex; flex-wrap: wrap; justify-content: space-between; align-items: flex-end; gap: 1rem; margin-top: 1rem; }
.ow-product-picker { flex: 1 1 100%; }

/* Группа товара в заявке: строка с названием и размерами сетки, под ней — цвета. */
.ow-request-table .ow-product-row > * { background: var(--ow-paper); border-bottom-color: var(--ow-line); }
.ow-request-table .ow-product-row th { font-weight: 600; }
.ow-request-table .ow-product-group + .ow-product-group .ow-product-row > * { border-top: 1px solid var(--ow-line); }

/* Выбор товара: результаты поиска и цвета выбранного. */
.ow-picker-list { list-style: none; margin: 0.5rem 0 0; padding: 0; border: 1px solid var(--ow-line);
  border-radius: var(--bs-border-radius); background: var(--ow-surface); max-height: 18rem; overflow: auto; }
.ow-picker-item { display: flex; flex-direction: column; align-items: flex-start; gap: 0.125rem; width: 100%;
  padding: 0.5rem 0.75rem; border: 0; background: none; text-align: left; color: inherit; }
.ow-picker-list li + li .ow-picker-item { border-top: 1px solid var(--ow-line-soft); }
.ow-picker-item:hover, .ow-picker-item:focus-visible { background: var(--ow-denim-tint); }
.ow-picker-panel { margin-top: 0.75rem; padding: 0.75rem 1rem; background: var(--ow-surface);
  border: 1px solid var(--ow-line); border-radius: var(--bs-border-radius); }
.ow-picker-colors { display: flex; flex-wrap: wrap; gap: 0.25rem 1.25rem; }

/* Число открытых задач в меню. */
.ow-count { display: inline-block; min-width: 1.25rem; padding: 0 0.375rem; margin-left: 0.25rem; border-radius: 999px;
  background: var(--ow-denim-solid); color: #fff; font-size: 0.75rem; font-weight: 600; line-height: 1.25rem; text-align: center; }

/* Шаги процесса: сделанное приглушено, открытое выделено, ждущее — тише. */
.ow-steps { list-style: none; margin: 0; padding: 0; counter-reset: step; }
.ow-step { display: flex; gap: 1rem; align-items: flex-start; justify-content: space-between;
  padding: 0.625rem 0 0.625rem 2.25rem; position: relative; border-bottom: 1px solid var(--ow-line-soft); }
.ow-step::before { counter-increment: step; content: counter(step); position: absolute; left: 0; top: 0.625rem;
  width: 1.5rem; height: 1.5rem; border-radius: 50%; display: grid; place-items: center;
  font-size: 0.75rem; font-weight: 600; border: 1.5px solid var(--ow-line); color: var(--ow-ink-muted); background: var(--ow-surface); }
.ow-step-open::before { border-color: var(--ow-denim); color: var(--ow-denim); }
.ow-step-done::before { content: '✓'; background: var(--ow-ok); border-color: var(--ow-ok); color: #fff; }
.ow-step-done .ow-step-title { color: var(--ow-ink-muted); }
.ow-step-waiting .ow-step-title { color: var(--ow-ink-muted); }
.ow-step-cancelled .ow-step-title { color: var(--ow-ink-faint); text-decoration: line-through; }
.ow-step-open .ow-step-title { font-weight: 600; }
.ow-step-meta { display: flex; flex-wrap: wrap; gap: 0 0.75rem; font-size: 0.8125rem; color: var(--ow-ink-muted); }
.ow-step-hint { font-size: 0.8125rem; color: var(--ow-ink-muted); }
.ow-step-actions { display: flex; gap: 0.5rem; flex-shrink: 0; }

/* Сводка оплат заказа. */
.ow-paid { font-size: 1rem; }
.ow-advance { margin-top: 0.5rem; padding: 0.5rem 0.75rem; background: var(--ow-denim-tint); border-radius: var(--bs-border-radius); }

/* Полоса «оплачено из суммы». */
.ow-progress { height: 0.375rem; margin-top: 0.5rem; border-radius: 999px; background: var(--ow-line-soft); overflow: hidden; }
.ow-progress > span { display: block; height: 100%; max-width: 100%; background: var(--ow-ok); }

/* Лист заказа на странице заказа: шапка листа и его таблица во всю ширину карточки. */
.ow-sheet + .ow-sheet { border-top: 1px solid var(--ow-line); }
.ow-sheet-head { display: flex; flex-wrap: wrap; justify-content: space-between; align-items: baseline; gap: 0.25rem 1rem;
  padding: 0.75rem 1.25rem; background: var(--ow-paper); border-bottom: 1px solid var(--ow-line-soft); }
.ow-sheet-head .ow-status { margin-inline: 0.5rem; }

/* ── Зоны и карточки страницы объекта ───────────────────────────────────── */
/* Слева — что в объекте (деньги, позиции), справа — условия, шаги, история. */

.ow-zones { display: grid; gap: 1.25rem; align-items: start; }
@media (min-width: 992px) {
  .ow-zones { grid-template-columns: minmax(0, 1fr) minmax(19rem, 24rem); }
}
.ow-zone { display: grid; gap: 1.25rem; min-width: 0; }
.ow-zone > * { min-width: 0; } /* широкая таблица прокручивается в карточке, а не распирает колонку */

.ow-card { --ow-card-radius: 0.5rem; background: var(--ow-surface); border: 1px solid var(--ow-line);
  border-radius: var(--ow-card-radius); }
/* Без overflow: hidden — иначе обрезаются выпадающие панели («Готово» у шага). Углы скругляет последний блок. */
.ow-card > :last-child, .ow-card > :last-child > .ow-table-wrap:last-child {
  border-bottom-left-radius: calc(var(--ow-card-radius) - 1px); border-bottom-right-radius: calc(var(--ow-card-radius) - 1px); }
.ow-card-head { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 0.5rem 1rem;
  min-height: 3.25rem; padding: 0.625rem 1.25rem; border-bottom: 1px solid var(--ow-line); }
.ow-card-head h2 { display: flex; align-items: center; gap: 0.5rem; margin: 0; font-size: 1rem; font-weight: 600; }
.ow-card-head h2 .ow-icon { color: var(--ow-ink-faint); }
.ow-card-body { padding: 1rem 1.25rem; }
.ow-card-body-flush-y { padding-block: 0; }
.ow-card-body-flush-y .ow-step:last-child { border-bottom: 0; }
.ow-card-scroll { max-height: 26rem; overflow-y: auto; }
/* Таблица в карточке — без своей рамки: края даёт карточка. */
.ow-card .ow-table-wrap { border: 0; border-radius: 0; }
.ow-card-body + .ow-table-wrap { border-top: 1px solid var(--ow-line); }
/* В узкой колонке подпись и значение ближе друг к другу. */
.ow-props-narrow { grid-template-columns: minmax(6.5rem, max-content) 1fr; gap: 0.5rem 1rem; }

/* ── Сообщения ──────────────────────────────────────────────────────────── */

.alert { border-width: 0 0 0 3px; border-radius: var(--bs-border-radius-sm); padding-block: 0.75rem; }
.alert-success { --bs-alert-bg: var(--ow-ok-tint); --bs-alert-color: var(--ow-ok-ink); --bs-alert-border-color: var(--ow-ok); }
.alert-danger { --bs-alert-bg: var(--ow-bad-tint); --bs-alert-color: var(--ow-bad-ink); --bs-alert-border-color: var(--ow-bad); }
.alert-warning { --bs-alert-bg: var(--ow-warn-tint); --bs-alert-color: var(--ow-warn-ink); --bs-alert-border-color: var(--ow-warn); }

/* ── История: лента событий ─────────────────────────────────────────────── */

.ow-history { list-style: none; margin: 0; padding: 0 0 0 1rem; border-left: 2px solid var(--ow-line); }
.ow-history li { position: relative; padding-bottom: 1rem; }
.ow-history li::before {
  content: ''; position: absolute; left: calc(-1rem - 5px); top: 0.45rem;
  width: 8px; height: 8px; border-radius: 50%; background: var(--ow-surface); border: 2px solid var(--ow-ink-faint);
}
.ow-history li:first-child::before { border-color: var(--ow-denim); }
.ow-history .ow-history-meta { display: flex; flex-wrap: wrap; gap: 0 0.75rem; font-size: 0.8125rem; color: var(--ow-ink-muted); }
.ow-history .ow-history-comment { font-size: 0.875rem; color: var(--ow-ink-muted); margin-top: 0.125rem; }

/* ── htmx ───────────────────────────────────────────────────────────────── */

/* Пока htmx ждёт ответ, обновляемый блок приглушён. */
.htmx-request.htmx-dim, .htmx-request .htmx-dim { opacity: 0.5; transition: opacity 0.2s; }

@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { transition: none !important; animation: none !important; }
}

/* ── Грузы ──────────────────────────────────────────────────────────────── */

/* Штуки по размерам: размер, поле, «заказано / уже отгружено». */
.ow-size-cells { display: flex; flex-wrap: wrap; gap: 0.5rem 0.75rem; }
.ow-size-cell { display: grid; justify-items: center; gap: 0.125rem; margin: 0; }
.ow-size-name { font-size: 0.8125rem; font-weight: 600; }
.ow-size-hint { font-size: 0.75rem; color: var(--ow-ink-muted); white-space: nowrap; }
.ow-card-head h3 { display: flex; align-items: center; gap: 0.5rem; }
/* Шаги отгрузки под её таблицей. */
.ow-card-steps { border-top: 1px solid var(--ow-line); }
.ow-table tfoot td { border-top: 1px solid var(--ow-line); border-bottom: 0; }

/* ── Задачи: план по заказам и доска заказа ─────────────────────────────── */

.ow-tabs { display: flex; gap: 0.25rem; margin-bottom: 1.25rem; border-bottom: 1px solid var(--ow-line); }
.ow-tabs a { padding: 0.5rem 0.875rem; margin-bottom: -1px; color: var(--ow-ink-muted); text-decoration: none;
  border-bottom: 2px solid transparent; }
.ow-tabs a:hover { color: var(--ow-ink); }
.ow-tabs a[aria-current='page'] { color: var(--ow-ink); font-weight: 600; border-bottom-color: var(--ow-denim); }
.ow-tab-count { display: inline-block; min-width: 1.25rem; padding: 0 0.375rem; border-radius: 999px; text-align: center;
  font-size: 0.75rem; font-weight: 600; line-height: 1.25rem; background: var(--ow-line-soft); color: var(--ow-ink-muted); }

.ow-case + .ow-case { margin-top: 1rem; }
.ow-task-list { list-style: none; margin: 0; padding: 0; }
.ow-task-row { display: flex; align-items: center; justify-content: space-between; gap: 0.75rem 1.5rem;
  padding: 0.75rem 1.25rem; }
.ow-task-row + .ow-task-row { border-top: 1px solid var(--ow-line-soft); }
.ow-task-main { min-width: 0; }
.ow-task-title { font-weight: 500; }
.ow-task-meta { display: flex; flex-wrap: wrap; gap: 0 0.875rem; font-size: 0.8125rem; color: var(--ow-ink-muted); }
.ow-task-actions { display: flex; align-items: center; gap: 0.375rem; flex-shrink: 0; }
.ow-task-actions form { margin: 0; }

/* Доска: колонки — группы шагов; на узком экране прокручивается вбок. */
.ow-board { display: grid; grid-auto-flow: column; grid-auto-columns: minmax(15rem, 1fr); gap: 0.875rem;
  overflow-x: auto; padding-bottom: 0.25rem; margin-bottom: 1.25rem; }
.ow-board-column { display: flex; flex-direction: column; gap: 0.5rem; padding: 0.75rem; border-radius: 0.5rem;
  background: var(--ow-line-soft); min-width: 0; }
.ow-board-head { display: flex; align-items: center; justify-content: space-between; margin: 0 0 0.25rem;
  font-size: 0.875rem; font-weight: 600; }
.ow-board-head .ow-tab-count { background: var(--ow-surface); }
.ow-task-card { display: grid; gap: 0.375rem; padding: 0.625rem 0.75rem; background: var(--ow-surface);
  border: 1px solid var(--ow-line); border-left: 3px solid var(--ow-line); border-radius: 0.375rem; }
.ow-task-card-open { border-left-color: var(--ow-denim); }
.ow-task-card-waiting { background: transparent; border-style: dashed; border-left-style: solid; }
.ow-task-card-waiting .ow-task-title { color: var(--ow-ink-muted); font-weight: 400; }
.ow-task-card .ow-task-title { font-size: 0.875rem; line-height: 1.35; }
.ow-task-object { font-size: 0.8125rem; }
.ow-task-card .ow-task-actions { flex-wrap: wrap; }
.ow-board-done { font-size: 0.8125rem; color: var(--ow-ink-muted); }
.ow-board-done summary { cursor: pointer; padding: 0.25rem 0; }
.ow-board-done ul { list-style: none; margin: 0.25rem 0 0; padding: 0; display: grid; gap: 0.5rem; }
.ow-board-done li { display: grid; }
.ow-board-done li > span:first-child { color: var(--ow-ink); }

.ow-board-title { font-size: 1.0625rem; margin-bottom: 0.75rem; }
.ow-board-empty { margin: 0; padding: 0.5rem 0; font-size: 0.8125rem; color: var(--ow-ink-faint); }
.ow-board-done summary .ow-icon { margin-right: 0.25rem; }

/* «Задачи»: таймлайн — строка на заказ, полоса на задачу; на узком экране прокручивается вбок. */
.ow-timeline { overflow-x: auto; margin-bottom: 1.25rem; background: var(--ow-surface);
  border: 1px solid var(--ow-line); border-radius: 0.5rem; }
.ow-timeline-inner { position: relative; min-width: calc(21rem + var(--ow-days) * 1.75rem); }
.ow-timeline-grid { display: grid; grid-template-columns: 21rem repeat(var(--ow-days), minmax(1.75rem, 1fr)); }
.ow-timeline-back { position: absolute; inset: 0; pointer-events: none; }
.ow-timeline-back span + span { border-left: 1px solid var(--ow-line-soft); }
.ow-timeline-weekend { background: var(--ow-paper); }
.ow-timeline-today { background: var(--ow-denim-tint); }
.ow-timeline-days { position: relative; align-items: end; font-size: 0.6875rem; color: var(--ow-ink-muted); }
.ow-timeline-range { padding: 0.5rem 0.875rem; font-size: 0.8125rem; }
.ow-timeline-day { display: grid; justify-items: center; padding: 0.375rem 0; line-height: 1.2; text-transform: lowercase; }
.ow-timeline-day b { font-size: 0.8125rem; font-weight: 500; color: var(--ow-ink); }
.ow-timeline-day-today, .ow-timeline-day-today b { color: var(--ow-denim-dark); font-weight: 700; }
.ow-timeline-case { position: relative; display: flex; flex-wrap: wrap; align-items: baseline; gap: 0 0.75rem;
  padding: 0.5rem 0.875rem; background: var(--ow-line-soft); border-top: 1px solid var(--ow-line); }
.ow-timeline-case h2 { margin: 0; font-size: 0.9375rem; font-weight: 600; }
.ow-timeline-case h2 .ow-icon { margin-right: 0.375rem; }
.ow-timeline-line { position: relative; align-items: center; }
.ow-timeline-line + .ow-timeline-line { border-top: 1px solid var(--ow-line-soft); }
.ow-timeline-task { display: grid; gap: 0.25rem; min-width: 0; padding: 0.5rem 0.875rem; }
.ow-timeline-task .ow-task-title { font-size: 0.875rem; line-height: 1.35; }
.ow-timeline-task .ow-task-actions { flex-wrap: wrap; }
.ow-timeline-bar { height: 1rem; margin: 0 2px; border-radius: 999px; background: var(--ow-denim); }
.ow-timeline-bar-overdue { background: var(--ow-bad); }
.ow-timeline-bar-forecast { background: var(--ow-surface); border: 1.5px dashed var(--ow-denim); }
.ow-timeline-bar-cut-left { margin-left: 0; border-top-left-radius: 0; border-bottom-left-radius: 0; border-left-style: none; }
.ow-timeline-bar-cut-right { margin-right: 0; border-top-right-radius: 0; border-bottom-right-radius: 0; border-right-style: none; }
.ow-timeline-unknown summary { cursor: pointer; color: var(--ow-ink-muted); }
.ow-timeline-unknown summary .ow-icon { margin-right: 0.375rem; }

.ow-row-cancelled td { color: var(--ow-ink-faint); }
.ow-row-cancelled td.num { text-decoration: line-through; }

/* Окно подтверждения действия. */
.ow-confirm { width: min(28rem, 92vw); padding: 1.25rem 1.5rem; border: 1px solid var(--ow-line); border-radius: 0.5rem;
  background: var(--ow-surface); color: var(--ow-ink); box-shadow: 0 1rem 2.5rem rgb(31 38 51 / 0.2); }
.ow-confirm::backdrop { background: rgb(31 38 51 / 0.45); }
.ow-confirm h2 { margin: 0 0 0.5rem; font-size: 1.0625rem; font-weight: 600; }
.ow-confirm p { margin: 0 0 1.25rem; }
.ow-confirm-actions { display: flex; justify-content: flex-end; gap: 0.5rem; }

/* ── Страница объекта: разделы слева, раздел справа ─────────────────────── */

.ow-split { display: grid; gap: 1.25rem; align-items: start; }
@media (min-width: 992px) {
  .ow-split { grid-template-columns: 13.5rem minmax(0, 1fr); }
  .ow-sidenav { position: sticky; top: 1rem; }
}
.ow-split-main { display: grid; gap: 1.25rem; min-width: 0; }
.ow-split-main > * { min-width: 0; }
.ow-sidenav { display: grid; gap: 0.125rem; }
.ow-sidenav a { display: grid; gap: 0.0625rem; padding: 0.5rem 0.75rem; border-radius: 0.375rem;
  color: var(--ow-ink); text-decoration: none; border-left: 3px solid transparent; }
.ow-sidenav a:hover { background: var(--ow-line-soft); }
.ow-sidenav a[aria-current='page'] { background: var(--ow-surface); border-left-color: var(--ow-denim);
  box-shadow: 0 0 0 1px var(--ow-line); font-weight: 600; }
.ow-sidenav-title { display: flex; align-items: center; gap: 0.5rem; }
.ow-sidenav-title .ow-icon { color: var(--ow-ink-faint); margin: 0; }
.ow-sidenav a[aria-current='page'] .ow-icon { color: var(--ow-denim); }
.ow-sidenav-meta { padding-left: 1.65rem; font-size: 0.75rem; font-weight: 400; color: var(--ow-ink-muted); }
.ow-card-narrow { max-width: 44rem; }
.ow-split-main .ow-board { margin-bottom: 0; grid-auto-columns: minmax(12.5rem, 1fr); gap: 0.625rem; }
.ow-split-main .ow-board-column { padding: 0.625rem; }

/* Меню разделов свёрнуто до иконок (<html data-sidenav="collapsed">); название — в подсказке. */
.ow-sidenav-toggle { display: flex; align-items: center; gap: 0.5rem; padding: 0.375rem 0.75rem; margin-bottom: 0.25rem;
  border: 0; background: none; color: var(--ow-ink-muted); font-size: 0.8125rem; border-radius: 0.375rem; text-align: left; }
.ow-sidenav-toggle:hover { background: var(--ow-line-soft); color: var(--ow-ink); }
.ow-sidenav-toggle .ow-icon { margin: 0; }
.ow-when-collapsed { display: none; }
@media (max-width: 991.98px) { .ow-sidenav-toggle { display: none; } }
@media (min-width: 992px) {
  .ow-split { transition: grid-template-columns 0.15s ease; }
  :root[data-sidenav='collapsed'] .ow-split { grid-template-columns: 3.25rem minmax(0, 1fr); }
  :root[data-sidenav='collapsed'] .ow-sidenav-label,
  :root[data-sidenav='collapsed'] .ow-sidenav-meta { display: none; }
  :root[data-sidenav='collapsed'] .ow-sidenav a,
  :root[data-sidenav='collapsed'] .ow-sidenav-toggle { justify-content: center; padding-inline: 0; }
  :root[data-sidenav='collapsed'] .ow-sidenav-title { justify-content: center; }
  :root[data-sidenav='collapsed'] .ow-when-open { display: none; }
  :root[data-sidenav='collapsed'] .ow-when-collapsed { display: inline; }
}
@media (prefers-reduced-motion: reduce) { .ow-split { transition: none; } }

/* ── Главная ────────────────────────────────────────────────────────────── */

/* Сводка одной полосой: ячейки через разделитель, каждая — ссылка в свой раздел. */
.ow-summary { display: grid; grid-template-columns: repeat(auto-fit, minmax(12rem, 1fr)); margin-bottom: 1.25rem; }
.ow-summary-cell { display: grid; gap: 0.125rem; align-content: start; padding: 1rem 1.25rem; color: var(--ow-ink);
  text-decoration: none; border-left: 1px solid var(--ow-line-soft); }
.ow-summary-cell:first-child { border-left: 0; }
.ow-summary-cell:hover { background: var(--ow-denim-tint); }
.ow-summary-label { display: flex; align-items: center; gap: 0.375rem; font-size: 0.8125rem; color: var(--ow-ink-muted); }
.ow-summary-label .ow-icon { margin: 0; }
.ow-summary-value { font-size: 1.5rem; font-weight: 600; font-feature-settings: 'tnum'; line-height: 1.25; }
.ow-summary-value-more { font-size: 1rem; }
.ow-summary-note { font-size: 0.8125rem; color: var(--ow-ink-muted); }

/* Удалить черновик — тихая ссылка внизу меню разделов; подтверждение — панелью справа от меню. */
.ow-sidenav-danger { margin-top: 0.75rem; padding-top: 0.5rem; border-top: 1px solid var(--ow-line); }
.ow-sidenav-danger > summary { display: flex; align-items: center; gap: 0.5rem; padding: 0.375rem 0.75rem;
  border-radius: 0.375rem; font-size: 0.8125rem; color: var(--ow-ink-muted); cursor: pointer; }
.ow-sidenav-danger > summary:hover { color: var(--ow-bad); background: var(--ow-line-soft); }
.ow-sidenav-danger > summary .ow-icon { margin: 0; }
.ow-sidenav-danger .ow-action-panel { left: 0; right: auto; }
@media (min-width: 992px) {
  :root[data-sidenav='collapsed'] .ow-sidenav-danger > summary { justify-content: center; padding-inline: 0; }
}

/* Пустой лист: с чего начать. */
.ow-start { display: flex; gap: 0.875rem; align-items: center; padding: 1rem 1.25rem; margin-bottom: 1rem;
  background: var(--ow-denim-tint); border-radius: 0.5rem; }
.ow-start > .ow-icon { width: 2rem; height: 2rem; color: var(--ow-denim); margin: 0; }

/* Подбор товара карточками. */
.ow-picker-filters { display: grid; grid-template-columns: minmax(0, 1fr) 14rem; gap: 0.5rem; max-width: 48rem; }
.ow-product-cards { display: grid; grid-template-columns: repeat(auto-fill, minmax(15rem, 1fr)); gap: 0.625rem; margin-top: 0.75rem; }
.ow-product-card { display: grid; gap: 0.25rem; align-content: start; padding: 0.75rem 0.875rem; text-align: left;
  background: var(--ow-surface); border: 1px solid var(--ow-line); border-radius: 0.5rem; color: var(--ow-ink); }
.ow-product-card:hover, .ow-product-card:focus-visible { border-color: var(--ow-denim); background: var(--ow-denim-tint); }
.ow-product-card-top { display: flex; justify-content: space-between; gap: 0.5rem; font-size: 0.8125rem; }
.ow-product-card-name { font-weight: 600; line-height: 1.3; }
.ow-product-card-colors { display: flex; flex-wrap: wrap; gap: 0.25rem; margin-top: 0.125rem; }
.ow-chip { padding: 0 0.4rem; border-radius: 999px; background: var(--ow-line-soft); font-size: 0.75rem; line-height: 1.35rem; }
.ow-product-card-foot { display: flex; justify-content: space-between; align-items: center; font-size: 0.75rem;
  color: var(--ow-ink-muted); margin-top: 0.125rem; }

/* Окно «Каталог»: категории слева, карточки справа, выбранное — в шапке. */
.ow-dialog { width: min(72rem, 94vw); height: min(46rem, 90vh); padding: 0; border: 1px solid var(--ow-line);
  border-radius: 0.75rem; background: var(--ow-paper); color: var(--ow-ink); }
.ow-dialog[open] { display: flex; flex-direction: column; }
.ow-dialog::backdrop { background: rgb(31 38 51 / 0.45); }
.ow-dialog-head { display: flex; align-items: center; gap: 0.75rem; padding: 0.75rem 1rem; background: var(--ow-surface);
  border-bottom: 1px solid var(--ow-line); }
.ow-dialog-head h2 { margin: 0; font-size: 1.0625rem; white-space: nowrap; }
.ow-dialog-head input[type=search] { flex: 1 1 auto; max-width: 28rem; }
.ow-picked { margin-left: auto; white-space: nowrap; color: var(--ow-ink-muted); }
.ow-dialog-body { flex: 1; display: grid; grid-template-columns: 14rem minmax(0, 1fr); min-height: 0; }
.ow-catalog-cats { display: flex; flex-direction: column; gap: 0.125rem; padding: 0.75rem; overflow-y: auto;
  border-right: 1px solid var(--ow-line); background: var(--ow-surface); }
.ow-catalog-cat { display: flex; justify-content: space-between; align-items: center; gap: 0.5rem; padding: 0.4rem 0.625rem;
  border: 0; border-radius: 0.375rem; background: none; color: var(--ow-ink); text-align: left; }
.ow-catalog-cat:hover { background: var(--ow-line-soft); }
.ow-catalog-cat[aria-current] { background: var(--ow-denim-tint); font-weight: 600; }
.ow-catalog-items { padding: 1rem; overflow-y: auto; }
.ow-catalog-items .ow-product-cards { margin-top: 0; }
.ow-product-card { cursor: default; }
.ow-product-card-top { cursor: pointer; margin: 0; }
.ow-chip-pick { display: inline-flex; align-items: center; gap: 0.25rem; cursor: pointer; margin: 0; }
.ow-chip-pick input { margin: 0; accent-color: var(--ow-denim); }
.ow-chip-pick:has(input:checked) { background: var(--ow-denim-solid); color: #fff; }
.ow-chip-done { display: inline-flex; align-items: center; gap: 0.2rem; color: var(--ow-ok-ink); background: var(--ow-ok-tint); }
.ow-chip-done .ow-icon { width: 0.9em; height: 0.9em; margin: 0; }

/* Отменённые листы — свёрнуто под действующими. */
.ow-cancelled { padding: 0.625rem 1.25rem; border-top: 1px solid var(--ow-line); font-size: 0.875rem; }
.ow-cancelled summary { cursor: pointer; color: var(--ow-ink-muted); display: flex; align-items: center; gap: 0.375rem; }
.ow-cancelled summary .ow-icon { margin: 0; }
.ow-cancelled ul { margin: 0.5rem 0 0; padding-left: 1.5rem; }

/* Фото товара: 3:4, как на площадках. Нет фото — плашка того же размера. */
.ow-photo { display: block; aspect-ratio: 3 / 4; object-fit: cover; border-radius: 4px; background: var(--ow-line-soft); flex: none; }
.ow-photo-sm { width: 2.25rem; }
.ow-photo-md { width: 4.5rem; }
.ow-col-photo { width: 1%; padding-right: 0 !important; }
.ow-with-photo { display: flex; align-items: center; gap: 0.625rem; }

/* Кабинеты над списком карточек: когда обновлён и кнопка «Обновить». */
.ow-cabinets { display: flex; flex-wrap: wrap; gap: 0.75rem; margin-bottom: 1rem; }
.ow-cabinet { display: flex; align-items: center; gap: 1rem; padding: 0.625rem 0.875rem; background: var(--ow-surface);
  border: 1px solid var(--ow-line); border-radius: 6px; }
.ow-cabinet-name { font-weight: 500; }
.ow-pager { display: flex; align-items: center; gap: 0.75rem; margin-top: 0.75rem; }

/* Мусорная карточка или товар: в списке приглушены. */
.ow-row-junk > td { opacity: 0.55; }
.ow-row-junk > td:last-child { opacity: 1; }

/* Старые записи истории свёрнуты. */
.ow-history-more > summary { margin: 0 0 0.75rem; font-size: 0.875rem; color: var(--ow-denim); cursor: pointer; }
.ow-history-more[open] > summary { margin-bottom: 1rem; }

/* Крупное фото при наведении на миниатюру (static/ui/app.js). */
.ow-photo-zoom { position: fixed; z-index: 1080; padding: 0.25rem; background: var(--ow-surface);
  border: 1px solid var(--ow-line); border-radius: var(--bs-border-radius);
  box-shadow: 0 0.5rem 1.5rem rgb(31 38 51 / 0.18); pointer-events: none; }
.ow-photo-zoom img { display: block; width: 246px; aspect-ratio: 3 / 4; object-fit: cover; border-radius: 4px;
  background: var(--ow-line-soft); }
img.ow-photo { cursor: zoom-in; }
@media (hover: none) { .ow-photo-zoom { display: none; } }

/* Состав товара: строки «материал — процент» и счётчик до 100 %. */
.ow-composition-row { display: grid; grid-template-columns: minmax(0, 1fr) 7.5rem auto; gap: 0.5rem; align-items: center;
  margin-bottom: 0.5rem; max-width: 30rem; }
.ow-composition-foot { display: flex; align-items: center; gap: 1rem; }
.ow-composition-left { font-size: 0.875rem; color: var(--ow-ink-muted); }
.ow-composition-left[data-state=ok] { color: var(--ow-ok); font-weight: 500; }
.ow-composition-left[data-state=short] { color: var(--ow-warn); }
.ow-composition-left[data-state=over] { color: var(--ow-bad); font-weight: 500; }

/* Задачи: переключатель вида и календарь на месяц. */
.ow-tabs-row { display: flex; flex-wrap: wrap; align-items: flex-end; justify-content: space-between; gap: 0.5rem 1rem;
  margin-bottom: 1.25rem; border-bottom: 1px solid var(--ow-line); }
.ow-tabs-row .ow-tabs { margin-bottom: 0; border-bottom: 0; }
.ow-view-switch { display: flex; gap: 0.25rem; margin-bottom: 0.375rem; }
.ow-view-switch a { display: inline-flex; align-items: center; gap: 0.25rem; padding: 0.25rem 0.625rem; border-radius: var(--bs-border-radius);
  font-size: 0.875rem; color: var(--ow-ink-muted); text-decoration: none; }
.ow-view-switch a:hover { color: var(--ow-ink); background: var(--ow-line-soft); }
.ow-view-switch a[aria-current='true'] { color: var(--ow-ink); background: var(--ow-surface); box-shadow: inset 0 0 0 1px var(--ow-line); font-weight: 500; }

/* Календарь задач — FullCalendar; цвета берёт из наших токенов, поэтому работает и в тёмной теме. */
.ow-fc { margin-bottom: 1.25rem; padding: 0.75rem; background: var(--ow-surface); border: 1px solid var(--ow-line);
  border-radius: var(--bs-border-radius);
  --fc-border-color: var(--ow-line-soft); --fc-page-bg-color: var(--ow-surface);
  --fc-neutral-bg-color: var(--ow-paper); --fc-neutral-text-color: var(--ow-ink-muted);
  --fc-today-bg-color: var(--ow-denim-tint); --fc-list-event-hover-bg-color: var(--ow-denim-tint);
  --fc-event-bg-color: var(--ow-denim-solid); --fc-event-border-color: var(--ow-denim-solid); --fc-event-text-color: #fff;
  --fc-button-bg-color: var(--ow-surface); --fc-button-border-color: var(--ow-line); --fc-button-text-color: var(--ow-ink-muted);
  --fc-button-hover-bg-color: var(--ow-line-soft); --fc-button-hover-border-color: var(--ow-field-line);
  --fc-button-active-bg-color: var(--ow-denim-tint); --fc-button-active-border-color: var(--ow-denim);
  --fc-small-font-size: 0.8125rem; }
.ow-fc .fc-toolbar-title { font-size: 1.125rem; font-weight: 600; }
.ow-fc .fc-toolbar-title::first-letter { text-transform: uppercase; }
.ow-fc .fc-button { font-size: 0.875rem; font-weight: 500; box-shadow: none !important; text-transform: none; }
.ow-fc .fc-button:hover, .ow-fc .fc-button-active { color: var(--ow-ink) !important; }
.ow-fc .fc-col-header-cell-cushion, .ow-fc .fc-daygrid-day-number, .ow-fc .fc-list-day-text, .ow-fc .fc-list-day-side-text {
  color: var(--ow-ink-muted); text-decoration: none; font-weight: 500; }
.ow-fc .fc-col-header-cell-cushion { font-size: 0.75rem; text-transform: uppercase; letter-spacing: 0.04em; }
.ow-fc .fc-day-today .fc-daygrid-day-number { color: var(--ow-denim); font-weight: 700; }
.ow-fc .fc-day-sat, .ow-fc .fc-day-sun { background: var(--ow-paper); }
.ow-fc .fc-event { cursor: pointer; padding: 0.0625rem 0.25rem; font-size: 0.8125rem; border-radius: 4px; }
.ow-fc .fc-daygrid-event .fc-event-main { display: block; min-width: 0; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; }
.ow-fc .fc-daygrid-event .fc-event-title { display: inline; padding: 0; overflow: visible; }
.ow-fc .fc-event-title { font-weight: 500; }
.ow-fc .ow-fc-case { opacity: 0.85; font-weight: 400; }
.ow-fc .ow-fc-overdue { --fc-event-bg-color: var(--ow-bad); --fc-event-border-color: var(--ow-bad); }
.ow-fc .ow-fc-forecast { --fc-event-bg-color: var(--ow-surface); --fc-event-border-color: var(--ow-denim);
  --fc-event-text-color: var(--ow-ink-muted); border-style: dashed; }
.ow-fc .fc-list-event.ow-fc-overdue .fc-list-event-dot { border-color: var(--ow-bad); }
.ow-fc .fc-list-event-title, .ow-fc .fc-list-event-time { color: var(--ow-ink); }
.ow-fc .fc-daygrid-more-link { color: var(--ow-denim); }
.ow-fc .fc-popover { background: var(--ow-surface); border-color: var(--ow-line); }
.ow-fc .fc-popover-header { background: var(--ow-paper); color: var(--ow-ink); }
.ow-task-dialog h2 { margin: 0 0 0.5rem; font-size: 1.0625rem; }
.ow-task-dialog .ow-task-meta { flex-direction: column; align-items: flex-start; gap: 0.25rem; margin-bottom: 0.75rem; }
.ow-task-dialog .ow-task-actions { flex-wrap: wrap; margin-bottom: 0.75rem; }

.ow-fc-controls { display: flex; flex-wrap: wrap; align-items: center; gap: 0.5rem 1.25rem; margin-bottom: 0.75rem; }
.ow-fc-controls .ow-view-switch { margin: 0; }
.ow-view-switch button { padding: 0.25rem 0.625rem; border: 0; border-radius: var(--bs-border-radius); background: none;
  font-size: 0.875rem; color: var(--ow-ink-muted); }
.ow-view-switch button:hover { color: var(--ow-ink); background: var(--ow-line-soft); }
.ow-view-switch button[aria-pressed='true'] { color: var(--ow-ink); background: var(--ow-surface);
  box-shadow: inset 0 0 0 1px var(--ow-line); font-weight: 500; }
.ow-task-dialog [data-task-detail] + [data-task-detail] { margin-top: 1rem; padding-top: 1rem; border-top: 1px solid var(--ow-line-soft); }
.ow-task-dialog { max-height: 85vh; overflow-y: auto; }

/* Оплата со страницы заказа: видно, за какой заказ платим; разнос по другим — свёрнут. */
.ow-pay-target { display: flex; gap: 0.625rem; padding: 0.75rem 0.875rem; background: var(--ow-denim-tint);
  border: 1px solid var(--ow-denim-line); border-radius: var(--bs-border-radius); }
.ow-pay-target > .ow-icon { margin-top: 0.2rem; color: var(--ow-denim); flex: none; }
.ow-pay-other { cursor: pointer; color: var(--ow-denim); font-size: 0.9375rem; }
.ow-row-current > td { background: var(--ow-denim-tint); }
/* Груз со страницы заказа: остальные заказы фабрики свёрнуты; «Весь остаток» заполняет штуки. */
.ow-cargo-others > summary { margin-bottom: 0.75rem; cursor: pointer; color: var(--ow-denim); }
