/* Режим «Приёмка» (returns.js). Каркас — классы сборки (assembly.css): те же экраны,
   карточки, строки, лента и лист снизу — приёмщик не должен учить второй интерфейс.
   Здесь — только то, чего у сборки нет: состояния единицы (ждём / вернулось /
   повреждено / потеряно / не отмечена при сборке), значки итогов, окно состояния и
   окно недостачи. Цвета — токены lab.css, тёмная тема приходит оттуда же. */

/* ---------- тоны состояний: залитый кружок, тёмный значок — как «собрано» у сборки */
.rf-ret-tone--ok { background: var(--good); color: var(--accent-ink); }
.rf-ret-tone--damaged { background: var(--mid); color: var(--accent-ink); }
.rf-ret-tone--lost { background: var(--bad); color: var(--accent-ink); }
.rf-ret-tone--wait { background: var(--surface-2); color: var(--muted); }

/* ---------- значки итогов: карточка списка и прогресс */
.rf-ret-badges { display: flex; flex-wrap: wrap; gap: 6px; }
.rf-ret-badge {
  display: inline-flex; align-items: center; gap: 4px;
  height: 26px; padding: 0 11px 0 8px; border-radius: 999px;
  font-size: 12px; font-weight: 700; white-space: nowrap;
}
.rf-ret-badge svg { width: 14px; height: 14px; flex: none; }
.rf-ret-badge--damaged { background: var(--warn-soft); color: var(--warn-ink); }
.rf-ret-badge--lost, .rf-ret-badge--missing { background: var(--danger-soft); color: var(--bad-ink); }
/* Чип завершённой приёмки — над названием: справа от него название сжималось до слова. */
.rf-ret-card__chip { display: flex; margin-bottom: -2px; }
/* У прогресса значки стоят под подписью — с тем же шагом, что строки над ними. Число
   «128 из 215 вернулось» с чипом в одну строку не влезает — тогда чип уходит вниз, а
   не за край капсулы. */
.rf-ret-progress .rf-ret-badges { margin-top: -2px; }
.rf-ret-progress .rf-asm-progress__top { flex-wrap: wrap; row-gap: 8px; }
.rf-ret-progress .rf-asm-progress__nums { min-width: 0; }

/* ---------- строки и единицы */
/* Под названием строки — только «повреждено N · потеряно N» (счёт «вернулось 2 из 3» стоит
   справа, assembly.css .rf-asm-line__count): их тон — тон худшего, даже у закрытой строки. */
.rf-ret-line .rf-asm-line__sub.is-warn { color: var(--warn-ink); }
.rf-ret-line .rf-asm-line__sub.is-bad { color: var(--bad-ink); }
/* Строка, по которой ничего не собирали: ждать нечего, но единицу, увезённую без скана,
   отметить можно — строка остаётся, только тише. */
.rf-ret-line.is-idle .rf-asm-line__name { color: var(--muted); }

.rf-ret-check { color: transparent; }
.rf-ret-unit.is-idle .rf-ret-check { border-style: dashed; border-color: var(--faint); }
.rf-ret-unit.is-ok .rf-ret-check { background: var(--good); border-color: var(--good); color: var(--accent-ink); }
.rf-ret-unit.is-damaged .rf-ret-check { background: var(--mid); border-color: var(--mid); color: var(--accent-ink); }
.rf-ret-unit.is-lost .rf-ret-check { background: var(--bad); border-color: var(--bad); color: var(--accent-ink); }
.rf-ret-unit.is-ok .rf-asm-unit__inv,
.rf-ret-unit.is-damaged .rf-asm-unit__inv { color: var(--muted); }
.rf-ret-unit.is-ok .rf-asm-unit__sub { color: var(--good-ink); }
.rf-ret-unit.is-damaged .rf-asm-unit__sub { color: var(--warn-ink); }
.rf-ret-unit.is-lost .rf-asm-unit__sub { color: var(--bad-ink); }
.rf-ret-unit__flag {
  display: inline-flex; align-items: center; height: 20px; padding: 0 8px;
  border-radius: 999px; background: var(--warn-soft); color: var(--warn-ink);
  font-size: 11px; font-weight: 700;
}

/* ---------- окно состояния единицы */
.rf-ret-sheet__head { min-width: 0; }
.rf-ret-sheet__ico {
  width: 44px; height: 44px; flex: none; border-radius: 999px;
  display: grid; place-items: center;
}
.rf-ret-sheet__ico svg { width: 22px; height: 22px; }
.rf-asm-sheet .rf-ret-opts .rf-ret-opt { min-height: 68px; padding: 10px 18px 10px 14px; gap: 14px; }
/* Разделитель — от начала текста: 14 поле + 40 значок + 14 зазор. */
.rf-asm-sheet .rf-ret-opts .rf-grow + .rf-grow::before { left: 68px; right: 18px; }
.rf-ret-opt:disabled { cursor: default; opacity: .6; }
.rf-ret-opt .rf-grow__sub { font-size: 13px; line-height: 1.35; }
/* Выбранное состояние стоит на янтарной подложке (.rf-grow--on): серая подпись на ней в тёмной
   теме давала ~3:1 — подпись берёт чернила янтаря. */
.rf-asm-sheet .rf-ret-opt.rf-grow--on .rf-grow__sub { color: var(--accent-text); }
.rf-ret-opt__ico {
  width: 40px; height: 40px; flex: none; border-radius: 999px;
  display: grid; place-items: center;
}
.rf-ret-opt__ico svg { width: 20px; height: 20px; }
.rf-ret-field { gap: 6px; }
.rf-ret-field > span { padding-left: 20px; }
.rf-ret-comment {
  height: auto; min-height: 76px; padding: 14px 20px;
  border-radius: 22px; resize: none; line-height: 1.45;
}
.rf-ret-comment:disabled { opacity: .6; }
.rf-asm-sheet .rf-ret-unmark .rf-ret-unmark__btn {
  min-height: 52px; justify-content: center;
  color: var(--danger); font-weight: 600; font-size: 16px;
}
.rf-ret-unmark__btn:disabled { opacity: .5; cursor: default; }

/* ---------- окно недостачи при завершении */
/* Список недостачи прокручивается сам: кнопки решения не должны уезжать под палец.
   Блоком, а не сеткой: в сетке с max-height капсулы (overflow: hidden) сжимались по
   высоте и срезали подписи строк. */
.rf-asm-sheet [data-fin-list] { display: block; max-height: 36vh; overflow: auto; overscroll-behavior: contain; }
.rf-asm-sheet [data-fin-list] .rf-list__label { margin: 12px 0 6px; }
.rf-asm-sheet [data-fin-list] .rf-list__label:first-child { margin-top: 0; }
.rf-asm-sheet [data-fin-list]:empty { display: none; }
.rf-asm-sheet .rf-ret-miss { min-height: 56px; cursor: default; }
.rf-asm-sheet .rf-ret-miss:active { background: none; }
.rf-ret-miss .rf-row__name { font-size: 16px; font-weight: 500; }
.rf-ret-miss .rf-ret-miss__ok { color: var(--good-ink); }
.rf-ret-note { margin: 0; color: var(--muted); font-size: 13px; line-height: 1.45; }
.rf-ret-stack { display: grid; gap: 8px; margin-top: 4px; }
.rf-ret-stack .rf-btn--ghost { background: var(--surface-2); }
.rf-ret-stack .rf-btn--text { min-height: 44px; }

/* ---------- повреждения строки без поштучного учёта (returnComment) */
/* В идущей приёмке — кнопка: пустая зовёт «Повреждения», с текстом — сам текст, тап правит.
   44 px, как у степпера рядом: 32 px в строке списка пальцем в перчатке промахивались. */
/* Ряд под шапкой строки: отступ слева — как у текста (16 поле + 28 кольцо + 12 зазор). */
.rf-ret-dmg-row { display: flex; padding: 0 12px 6px 56px; }
.rf-ret-dmg {
  display: inline-flex; align-items: center; gap: 6px;
  max-width: 100%; min-height: 44px; padding: 8px 14px 8px 10px;
  border: 0; border-radius: 16px; background: var(--surface-2); color: var(--accent-text);
  font: inherit; font-size: 13px; font-weight: 700; line-height: 1.4; text-align: left;
  cursor: pointer;
}
.rf-ret-dmg svg { width: 16px; height: 16px; flex: none; }
.rf-ret-dmg.is-static { min-height: 0; align-items: flex-start; padding: 6px 12px 6px 9px; }
.rf-ret-dmg.is-static svg { margin-top: 1px; }
.rf-ret-dmg span { min-width: 0; overflow-wrap: anywhere; white-space: pre-line; }
.rf-ret-dmg.has-text, .rf-ret-dmg.is-static { background: var(--warn-soft); color: var(--warn-ink); font-weight: 600; }
.rf-ret-dmg:active:not(.is-static) { filter: brightness(.96); }
.rf-ret-dmg.is-static { cursor: default; }
.rf-ret-dmg:focus-visible { outline: none; box-shadow: var(--ring); }

/* ---------- окна: «приёмку уже завершили» и коды, ещё не дошедшие до сервера */
.rf-ret-done, .rf-ret-queued { display: flex; align-items: flex-start; gap: 10px; }
.rf-ret-done svg, .rf-ret-queued svg { width: 20px; height: 20px; flex: none; margin-top: 0; }
.rf-ret-queued.is-bad { background: var(--danger-soft); color: var(--bad-ink); }
[data-fin-queue]:empty, [data-sheet-done]:empty, #ret-sheet [data-sheet-error]:empty { display: none; }
/* Кнопки окна записи в завершённой приёмке: длинная главная — сверху во всю ширину. */
.rf-asm-sheet__actions.rf-ret-actions--stack { flex-direction: column-reverse; align-items: stretch; }
.rf-asm-sheet__actions.rf-ret-actions--stack .rf-btn { flex: none; width: 100%; }

/* ---------- что приёмка видит с площадки (§А.7) и поиск по метке (§В.1) */

/* Пометка площадки у единицы: «повреждено» или «не нашли» с кем и когда. Янтарная — это
   предупреждение, а не отметка приёмки: решение «в ремонт» принимает человек на складе. */
.rf-ret-flag--venue {
  display: inline-flex; align-items: center; gap: 4px;
  max-width: 100%; height: auto; min-height: 20px; padding: 2px 8px;
  white-space: normal; text-align: left; line-height: 1.35;
}
.rf-ret-flag--venue svg { width: 12px; height: 12px; flex: none; }

/* Строка ленты «С площадки: повреждено» — два ответа в одной строке. На 360 px им остаётся
   ~150 px на двоих, поэтому поля уже обычных и подписи короткие. */
.rf-ret-vd { flex: none; display: flex; gap: 4px; }
.rf-asm-feed__act.rf-ret-vd__btn { padding: 0 10px; font-size: 13px; }
.rf-asm-feed__act.rf-ret-vd__btn--ok { background: var(--surface-2); color: var(--text); }
[data-theme="dark"] .rf-asm-feed__act.rf-ret-vd__btn--ok { background: var(--border-strong); }

/* Плашка «Список ещё на площадке»: приёмку не запрещает (первая машина могла вернуться
   раньше), но говорит, где отмечать остальное. */
/* Сеткой, а не рядом: на 360 px кнопка «Открыть «Площадку»» съедала половину ширины, и
   текст рвался по одному слову в строку. Кнопка встаёт под текстом. */
.rf-ret-venue { display: grid; grid-template-columns: 20px minmax(0, 1fr); gap: 8px 10px; align-items: start; margin-top: 8px; }
.rf-ret-venue svg { width: 20px; height: 20px; flex: none; margin-top: 1px; }
.rf-ret-venue span { min-width: 0; }
.rf-ret-venue .rf-asm-feed__act { grid-column: 2; justify-self: start; }

/* Разбор недостачи «из них: не приехали 2 · не погрузили 1» в окне завершения. */
.rf-ret-where { margin: -6px 0 0; color: var(--muted); font-size: 14px; line-height: 1.45; }
/* «С площадки повреждено, принято целым: N» — своим блоком над списком недостачи. */
.rf-ret-vdbox { display: grid; gap: 8px; }
.rf-ret-vdbox .rf-ret-note b { color: var(--text); }
.rf-asm-sheet .rf-ret-vdrow { cursor: default; }
.rf-asm-sheet .rf-ret-vdrow:active { background: none; }
[data-fin-venue]:empty, [data-fin-where]:empty { display: none; }

/* «Найти (N)» — в нижнем ряду рядом с «Приёмка завершена» (§В.1, ред. 2): до шапки
   большой палец с рукоятью H103 не дотягивается. Значок с числом: ряд делит ширину с
   кнопками источника. */
/* Пока «Найти» в ряду, он переносится: «Приёмка завершена» рядом с «Подключить» и «Найти»
   сжималась до кружка (то же, что у площадки). Без «Найти» ряд прежний, в одну строку. */
#ret-bottom .rf-actbar__row:has(.rf-ret-acts) { flex-wrap: wrap; }
#ret-bottom .rf-actbar__row:has(.rf-ret-acts) > #ret-actions { flex: 1 1 100%; }
#ret-bottom .rf-actbar__row:has(.rf-ret-acts) > #ret-src { flex: 1 1 auto; justify-content: flex-end; }
.rf-ret-acts { display: flex; align-items: center; gap: 6px; min-width: 0; }
.rf-ret-acts > .rf-btn:first-child { flex: 1 1 auto; min-width: 0; }
/* width: auto обязателен: у .rf-btn базовая ширина 100 % (shell.css). */
.rf-asm-actions .rf-btn.rf-ret-find {
  flex: 0 0 auto; gap: 4px; width: auto; min-width: 0; padding: 0 12px;
  background: var(--surface); color: var(--accent-text); font-weight: 700;
}
.rf-ret-find svg { width: 20px; height: 20px; }
.rf-ret-find span { font-variant-numeric: tabular-nums; }
[data-theme="dark"] .rf-asm-actions .rf-btn.rf-ret-find { background: var(--surface-2); }
/* Вдвоём с «Найти (N)» подписи перестают помещаться раньше, чем срабатывает порог
   одиночной кнопки (178 px, assembly.css): измерено — при 242 px «Приёмка завершена»
   теряет последний знак. Свой порог 250. Контейнер — .rf-asm-actions (#ret-actions),
   container-type у него уже есть. */
@container (width < 250px) {
  .rf-ret-acts .rf-asm-finish__full { display: none; }
  .rf-ret-acts .rf-asm-finish__short { display: inline; }
}

/* Значок «Найти» у заголовка строки: 44 px, как у степпера рядом. */
.rf-ret-line__find {
  flex: none; align-self: center;
  width: 44px; height: 44px; padding: 0;
  display: grid; place-items: center;
  border: 0; border-radius: 999px; background: var(--surface-2); color: var(--accent-text);
  cursor: pointer;
}
.rf-ret-line__find svg { width: 20px; height: 20px; }
.rf-ret-line__find:active { filter: brightness(.95); }
.rf-ret-line__find:focus-visible { outline: none; box-shadow: var(--ring); }
[data-theme="dark"] .rf-ret-line__find { background: var(--border-strong); }

/* «Найти сканером» в окне единицы — строка капсулы, как «Снять отметку». */
.rf-asm-sheet .rf-ret-find__btn {
  min-height: 52px; justify-content: center;
  color: var(--accent-text); font-weight: 600; font-size: 16px;
}

/* Комментарий площадки в списке «принято целым» — то, ради чего строку и читают: он
   переносится, а не режется многоточием. Сам список ограничен по высоте, чтобы кнопки
   завершения не уезжали под палец. */
.rf-ret-vdrow .rf-row__sub { white-space: normal; overflow: visible; text-overflow: clip; }
.rf-ret-vdbox .rf-group { max-height: 24vh; overflow: auto; overscroll-behavior: contain; }
