/* Заявки Event store. Вёрстка «сначала телефон»: на складе и в машине смотрят с него,
   а на ноутбуке те же блоки просто разъезжаются в две колонки.

   Темы две — тёмная и светлая. Тёмная по умолчанию идёт за системой; выбор человека
   записывается в data-theme на <html> и живёт в настройках устройства.
   Неон здесь не ради красоты: свечение выделяет то, что сейчас важно — активную кнопку,
   срочный статус, нехватку на складе. Всё остальное намеренно приглушено. */

:root {
  color-scheme: light dark;

  /* Фирменные цвета Event store и их неоновые продолжения */
  --pink: #ff2e9a;
  --pink-deep: #e6117b;
  --cyan: #2ae6ff;
  --lime: #46f2a0;
  --amber: #ffb340;
  --red: #ff4d6a;

  --radius: 16px;
  --radius-small: 11px;
  --tap: 44px;                       /* палец на складе — не мышь */
}

/* ---- светлая тема ---- */
:root, :root[data-theme="light"] {
  --glass: rgba(255, 255, 255, .62);
  --glass-strong: rgba(255, 255, 255, .78);
  --hairline: rgba(255, 255, 255, .85);
  --edge: rgba(18, 21, 28, .08);
  --bg: #f2f3f7;
  --bg-glow: radial-gradient(1200px 600px at 15% -10%, rgba(255, 46, 154, .10), transparent 60%),
             radial-gradient(900px 500px at 110% 10%, rgba(42, 230, 255, .10), transparent 55%);
  --card: #ffffff;
  --card-2: #fbfbfd;
  --text: #12151c;
  --muted: #6b7280;
  --line: #e4e6ee;
  --accent: var(--pink-deep);
  --accent-text: #ffffff;
  --glow: 0 0 0 rgba(0, 0, 0, 0);    /* в светлой теме свечение почти не нужно */
  --glow-strong: 0 6px 18px rgba(230, 17, 123, .28);
  --shadow: 0 1px 2px rgba(18, 21, 28, .05), 0 10px 30px rgba(18, 21, 28, .07);
  --ok: #12a05f;
  --warn: #c2410c;
  --danger: #c81e3c;
  --chip: #eef0f6;
}

/* ---- тёмная тема ---- */
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) {
    --glass: rgba(22, 26, 35, .58);
    --glass-strong: rgba(22, 26, 35, .78);
    --hairline: rgba(255, 255, 255, .14);
    --edge: rgba(255, 255, 255, .06);
    --bg: #0a0c11;
    --bg-glow: radial-gradient(1000px 520px at 10% -15%, rgba(255, 46, 154, .18), transparent 60%),
               radial-gradient(900px 480px at 105% 0%, rgba(42, 230, 255, .14), transparent 55%);
    --card: #14171f;
    --card-2: #171b24;
    --text: #eef1f7;
    --muted: #98a0b0;
    --line: #262b36;
    --accent: var(--pink);
    --accent-text: #12151c;
    --glow: 0 0 18px rgba(255, 46, 154, .35);
    --glow-strong: 0 0 26px rgba(255, 46, 154, .55);
    --shadow: 0 1px 2px rgba(0, 0, 0, .5), 0 18px 40px rgba(0, 0, 0, .45);
    --ok: #46f2a0;
    --warn: #ffb340;
    --danger: #ff4d6a;
    --chip: #1c212b;
  }
}
:root[data-theme="dark"] {
  --glass: rgba(22, 26, 35, .58);
  --glass-strong: rgba(22, 26, 35, .78);
  --hairline: rgba(255, 255, 255, .14);
  --edge: rgba(255, 255, 255, .06);
  --bg: #0a0c11;
  --bg-glow: radial-gradient(1000px 520px at 10% -15%, rgba(255, 46, 154, .18), transparent 60%),
             radial-gradient(900px 480px at 105% 0%, rgba(42, 230, 255, .14), transparent 55%);
  --card: #14171f;
  --card-2: #171b24;
  --text: #eef1f7;
  --muted: #98a0b0;
  --line: #262b36;
  --accent: var(--pink);
  --accent-text: #12151c;
  --glow: 0 0 18px rgba(255, 46, 154, .35);
  --glow-strong: 0 0 26px rgba(255, 46, 154, .55);
  --shadow: 0 1px 2px rgba(0, 0, 0, .5), 0 18px 40px rgba(0, 0, 0, .45);
  --ok: #46f2a0;
  --warn: #ffb340;
  --danger: #ff4d6a;
  --chip: #1c212b;
}

* { box-sizing: border-box; -webkit-tap-highlight-color: transparent; }
html, body { margin: 0; padding: 0; max-width: 100%; overflow-x: hidden; }
body {
  font: 16px/1.45 -apple-system, BlinkMacSystemFont, "SF Pro Text", "Segoe UI", Roboto, sans-serif;
  color: var(--text);
  background: var(--bg);
  background-image: var(--bg-glow);
  background-attachment: fixed;
  padding-bottom: env(safe-area-inset-bottom);
  -webkit-font-smoothing: antialiased;
}
a { color: var(--accent); }
button, input, select, textarea { font: inherit; color: inherit; }

/* ---- шапка ---- */
header.top {
  position: sticky; top: 0; z-index: 20;
  display: flex; align-items: center; gap: 10px;
  padding: max(env(safe-area-inset-top), 10px) 16px 10px;
  background: var(--glass-strong);
  backdrop-filter: blur(28px) saturate(180%);
  -webkit-backdrop-filter: blur(28px) saturate(180%);
  border-bottom: 1px solid var(--edge);
}
header.top img { height: 24px; }
header.top .spacer { flex: 1; }
header.top .who { font-size: 12px; color: var(--muted); text-align: right; line-height: 1.25; }
header.top .who div:first-child { color: var(--text); font-weight: 600; font-size: 13px; }

main {
  padding: 14px;
  max-width: 1200px;
  margin: 0 auto;
  /* Снизу оставляем место панели, иначе она закрывает последнюю карточку. */
  padding-bottom: calc(96px + env(safe-area-inset-bottom));
}

/* ---- нижняя панель: плавающее стекло с тремя экранами ---- */
nav.tabbar {
  position: fixed; z-index: 40;
  left: 50%; transform: translateX(-50%);
  bottom: calc(10px + env(safe-area-inset-bottom));
  display: flex; gap: 4px; padding: 6px;
  border-radius: 999px;
  background: var(--glass-strong);
  backdrop-filter: blur(30px) saturate(190%);
  -webkit-backdrop-filter: blur(30px) saturate(190%);
  border: 1px solid var(--edge);
  box-shadow: inset 0 1px 0 var(--hairline), 0 12px 40px rgba(0, 0, 0, .28);
}
nav.tabbar .tab {
  position: relative; display: flex; flex-direction: column; align-items: center; gap: 3px;
  min-width: 86px; padding: 9px 14px 7px; border: 0; border-radius: 999px;
  background: transparent; color: var(--muted); cursor: pointer;
  transition: color .18s, background .18s, box-shadow .18s;
}
/* На узких телефонах (SE, mini) четыре вкладки по 86 пикселей не помещались —
   панель уезжала за край, и «Настройки» оставались без половины подписи.
   Здесь она растягивается по ширине экрана, а вкладки делят место поровну. */
@media (max-width: 400px) {
  nav.tabbar {
    left: 8px; right: 8px; transform: none;
    justify-content: space-between; gap: 2px;
  }
  nav.tabbar .tab { min-width: 0; flex: 1 1 0; padding: 9px 4px 7px; }
  nav.tabbar .tab .lbl { font-size: 10.5px; }
  nav.tabbar .tab .badge { right: 4px; }
}
nav.tabbar .tab .ic { display: block; width: 22px; height: 22px; }
nav.tabbar .tab .ic svg { width: 100%; height: 100%; display: block; }
nav.tabbar .tab .lbl { font-size: 11px; font-weight: 600; letter-spacing: .01em; }
nav.tabbar .tab.on {
  color: #fff;
  background: linear-gradient(135deg, var(--pink), var(--pink-deep));
  box-shadow: var(--glow-strong);
}
nav.tabbar .tab .badge {
  position: absolute; top: 4px; right: 12px; min-width: 18px; height: 18px; padding: 0 5px;
  border-radius: 999px; background: var(--cyan); color: #04202a;
  font-size: 11px; font-weight: 700; line-height: 18px; text-align: center;
  box-shadow: 0 0 12px color-mix(in srgb, var(--cyan) 60%, transparent);
}

/* ---- крупный заголовок экрана ---- */
.hero { padding: 6px 4px 16px; }
.hero h1 { margin: 0 0 4px; font-size: 30px; letter-spacing: -.02em; }
.screen-title { display: flex; align-items: center; gap: 10px; padding: 2px 0 14px; }
.screen-title h1 { margin: 0; font-size: 26px; letter-spacing: -.02em; }
.iconbtn {
  width: 38px; height: 38px; border-radius: 999px; border: 1px solid var(--edge);
  background: var(--glass); backdrop-filter: blur(18px); -webkit-backdrop-filter: blur(18px);
  color: var(--text); cursor: pointer; display: grid; place-items: center; padding: 0;
}
.iconbtn svg { width: 20px; height: 20px; }

/* ---- строка-ссылка в настройках ---- */
.rowbtn {
  display: flex; align-items: center; gap: 12px; width: 100%; text-align: left;
  padding: 14px 4px; background: transparent; border: 0; border-bottom: 1px solid var(--edge);
  color: var(--text); cursor: pointer;
}
.rowbtn:last-child { border-bottom: 0; }
.rowbtn-name { font-weight: 600; }
.rowbtn-hint { font-size: 13px; color: var(--muted); }
.rowbtn .chev { color: var(--muted); display: grid; place-items: center; transform: rotate(180deg); }
.rowbtn .chev svg { width: 18px; height: 18px; }
.rowbtn .badge {
  min-width: 22px; height: 22px; padding: 0 7px; border-radius: 999px;
  background: var(--cyan); color: #04202a; font-size: 12px; font-weight: 700; line-height: 22px; text-align: center;
}

/* ---- карточки ---- */
/* Стекло: полупрозрачная поверхность с размытием и светлой кромкой сверху —
   под ней просвечивает неоновый фон, отчего экран кажется многослойным. */
.card {
  background: var(--glass);
  backdrop-filter: blur(26px) saturate(180%);
  -webkit-backdrop-filter: blur(26px) saturate(180%);
  border: 1px solid var(--edge);
  border-radius: var(--radius);
  box-shadow: inset 0 1px 0 var(--hairline), var(--shadow);
  padding: 16px; margin-bottom: 14px;
}
.card h2 { margin: 0 0 12px; font-size: 15px; letter-spacing: .02em; text-transform: uppercase; color: var(--muted); }
.row { display: flex; gap: 8px; flex-wrap: wrap; align-items: center; }
.grow { flex: 1; min-width: 0; }
.right { text-align: right; }
.muted { color: var(--muted); }
.small { font-size: 13px; }
.warn { color: var(--warn); }
.ok { color: var(--ok); }

/* ---- поля ---- */
label.f { display: block; margin-bottom: 12px; }
label.f > span { display: block; font-size: 12px; color: var(--muted); margin-bottom: 5px; }
input, select, textarea {
  width: 100%; max-width: 100%; min-width: 0;
  padding: 11px 13px; border: 1px solid var(--line); border-radius: var(--radius-small);
  background: var(--bg); outline: none; transition: border-color .15s, box-shadow .15s;
  /* Safari задаёт полям даты и времени собственную ширину и рисует свои рамки —
     из-за этого поле вылезало из колонки. Сбрасываем и растягиваем по месту. */
  -webkit-appearance: none; appearance: none;
  font-size: 16px;              /* меньше 16px — и iOS увеличивает страницу при наборе */
}
input:focus, select:focus, textarea:focus {
  border-color: var(--accent);
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent) 22%, transparent), var(--glow);
}
input[type="date"], input[type="time"] { min-height: var(--tap); text-align: left; }
input[type="date"]::-webkit-date-and-time-value { text-align: left; }
input[type="checkbox"] { width: auto; min-width: 0; -webkit-appearance: auto; appearance: auto; }
textarea { min-height: 68px; resize: vertical; }

.fields { display: grid; gap: 0 14px; grid-template-columns: minmax(0, 1fr); }
.fields > label { min-width: 0; }
@media (min-width: 760px) {
  .fields.two { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .fields.three { grid-template-columns: repeat(3, minmax(0, 1fr)); }
}

/* ---- кнопки ---- */
button.btn {
  border: 1px solid var(--line); background: var(--card); border-radius: var(--radius-small);
  padding: 11px 15px; cursor: pointer; font-weight: 550; min-height: var(--tap);
  max-width: 100%; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
  transition: transform .08s, box-shadow .15s, border-color .15s;
}
button.btn:hover { border-color: color-mix(in srgb, var(--accent) 45%, var(--line)); }
button.btn:active { transform: translateY(1px); }
button.btn.main {
  background: linear-gradient(135deg, var(--pink), var(--pink-deep));
  border-color: transparent; color: #fff;
  box-shadow: var(--glow-strong);
}
button.btn.ghost { background: transparent; border-color: transparent; }
button.btn.ghost:hover { border-color: var(--line); }
button.btn.danger { color: var(--danger); border-color: color-mix(in srgb, var(--danger) 35%, var(--line)); }
button.btn:disabled { opacity: .45; cursor: default; box-shadow: none; }

/* Ссылка, которая выглядит кнопкой. Нужна там, где нажатие должно именно открыть
   файл: на айфоне только настоящая ссылка отдаёт его системе. */
a.btn {
  display: block; text-align: center; text-decoration: none; color: var(--text);
  border: 1px solid var(--line); background: var(--card); border-radius: var(--radius-small);
  padding: 12px 15px; font-weight: 550;
}
a.btn.main {
  background: linear-gradient(135deg, var(--pink), var(--pink-deep));
  border-color: transparent; color: #fff; box-shadow: var(--glow-strong);
}

.chip {
  display: inline-flex; align-items: center; gap: 6px; padding: 7px 13px; border-radius: 999px;
  background: var(--chip); border: 1px solid transparent; font-size: 13px; cursor: pointer; white-space: nowrap;
  color: var(--muted); transition: color .15s, border-color .15s, box-shadow .15s;
}
.chip:hover { color: var(--text); }
.chip.on {
  background: linear-gradient(135deg, var(--pink), var(--pink-deep));
  color: #fff; border-color: transparent; box-shadow: var(--glow);
}
.chip.warn { color: var(--warn); border-color: color-mix(in srgb, var(--warn) 40%, transparent); }

/* ---- количества и галочки на складе ---- */
.qty-input { width: 84px; max-width: 84px; text-align: center; padding: 9px 6px; }
input.check {
  width: 28px; height: 28px; accent-color: var(--accent);
  filter: drop-shadow(0 0 6px color-mix(in srgb, var(--accent) 45%, transparent));
}
.dot { width: 9px; height: 9px; border-radius: 50%; background: var(--accent); box-shadow: var(--glow); flex: none; }
.pick.unread { background: color-mix(in srgb, var(--accent) 10%, transparent); border-radius: var(--radius-small); padding-left: 10px; padding-right: 10px; }

/* ---- статусы: цвет + мягкое свечение, чтобы читались с расстояния ---- */
.status {
  display: inline-block; padding: 4px 11px; border-radius: 999px; font-size: 12px; font-weight: 650;
  border: 1px solid transparent; white-space: nowrap;
}
.status.draft { background: var(--chip); color: var(--muted); border-color: var(--line); }
.status.confirmed { background: color-mix(in srgb, var(--pink) 16%, transparent); color: var(--accent); border-color: color-mix(in srgb, var(--pink) 40%, transparent); box-shadow: var(--glow); }
.status.picking { background: color-mix(in srgb, var(--amber) 16%, transparent); color: var(--warn); border-color: color-mix(in srgb, var(--amber) 40%, transparent); }
.status.packed { background: color-mix(in srgb, var(--cyan) 16%, transparent); color: color-mix(in srgb, var(--cyan) 75%, var(--text)); border-color: color-mix(in srgb, var(--cyan) 40%, transparent); }
.status.issued { background: color-mix(in srgb, var(--amber) 22%, transparent); color: var(--warn); border-color: color-mix(in srgb, var(--amber) 50%, transparent); }
.status.accepted { background: color-mix(in srgb, var(--lime) 16%, transparent); color: var(--ok); border-color: color-mix(in srgb, var(--lime) 40%, transparent); }
.status.cancelled { background: color-mix(in srgb, var(--red) 14%, transparent); color: var(--danger); border-color: color-mix(in srgb, var(--red) 35%, transparent); }

/* ---- список заявок ---- */
.orders { display: grid; gap: 12px; grid-template-columns: 1fr; }
@media (min-width: 900px) { .orders { grid-template-columns: 1fr 1fr; } }
.order-card {
  position: relative; overflow: hidden;
  background: var(--glass);
  backdrop-filter: blur(22px) saturate(170%);
  -webkit-backdrop-filter: blur(22px) saturate(170%);
  border: 1px solid var(--edge); border-radius: var(--radius);
  box-shadow: inset 0 1px 0 var(--hairline), var(--shadow);
  padding: 15px 17px; cursor: pointer;
  transition: border-color .16s, box-shadow .16s, transform .1s;
}
/* Тонкая неоновая полоса слева — она же индикатор «этой заявкой сейчас занимаются» */
.order-card::before {
  content: ''; position: absolute; left: 0; top: 0; bottom: 0; width: 3px;
  background: linear-gradient(180deg, var(--pink), var(--cyan)); opacity: 0; transition: opacity .15s;
}
.order-card:hover { border-color: color-mix(in srgb, var(--accent) 40%, var(--line)); transform: translateY(-1px); }
.order-card:hover::before { opacity: 1; }
.order-card .line1 { display: flex; align-items: center; gap: 9px; }
.order-card .num { font-weight: 700; color: var(--muted); font-variant-numeric: tabular-nums; }
.order-card .client { font-weight: 650; flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.order-card .when { font-size: 13px; color: var(--muted); margin-top: 4px; }
.order-card .sum { font-weight: 700; white-space: nowrap; font-variant-numeric: tabular-nums; }

/* ---- позиции заявки ---- */
table.items { width: 100%; border-collapse: collapse; }
table.items th {
  font-size: 11px; color: var(--muted); text-align: left; font-weight: 600; letter-spacing: .04em;
  text-transform: uppercase; padding: 8px 6px; border-bottom: 1px solid var(--line);
}
table.items td { padding: 9px 6px; border-bottom: 1px solid var(--line); vertical-align: middle; }
table.items tr:last-child td { border-bottom: 0; }
table.items td.n { font-size: 15px; }
table.items td.money { text-align: right; white-space: nowrap; font-variant-numeric: tabular-nums; }
table.items tr.short td { border: 0; }
.pos-name { display: block; }
.pos-cat { font-size: 12px; color: var(--muted); }

/* На телефоне строка таблицы разворачивается в карточку: название сверху, под ним
   количество и деньги в одну строку с подписями, комментарий во всю ширину. */
@media (max-width: 700px) {
  table.items thead { display: none; }
  table.items, table.items tbody, table.items tr { display: block; width: 100%; }
  table.items tr { border-bottom: 1px solid var(--line); padding: 12px 0; position: relative; }
  table.items td { display: inline-flex; align-items: center; gap: 6px; border: 0; padding: 3px 14px 3px 0; width: auto; }
  table.items td.n { display: block; padding: 0 40px 6px 0; }
  table.items td[data-l]::before { content: attr(data-l); font-size: 11px; color: var(--muted); text-transform: uppercase; letter-spacing: .04em; }
  table.items td.cmt { display: block; width: 100%; padding-right: 0; }
  table.items td.act { position: absolute; right: 0; top: 10px; padding: 0; }
  table.items td.money { text-align: left; }
  .qty-input { width: 74px; max-width: 74px; }
  main { padding: 11px; }
  .card { padding: 13px; }
}

/* ---- итоги ---- */
.totals { display: grid; gap: 8px; margin-top: 14px; }
.totals div { display: flex; justify-content: space-between; gap: 12px; font-variant-numeric: tabular-nums; }
.totals .big {
  font-size: 19px; font-weight: 700; border-top: 1px solid var(--line); padding-top: 10px; margin-top: 2px;
}
.totals .accent { color: var(--accent); font-weight: 650; }

/* ---- окна поверх ---- */
.modal-bg {
  position: fixed; inset: 0; z-index: 50; display: flex; align-items: flex-end; justify-content: center;
  background: rgba(6, 8, 12, .55); backdrop-filter: blur(6px); -webkit-backdrop-filter: blur(6px);
}
@media (min-width: 760px) { .modal-bg { align-items: center; } }
.modal {
  background: var(--glass-strong);
  backdrop-filter: blur(34px) saturate(190%);
  -webkit-backdrop-filter: blur(34px) saturate(190%);
  border: 1px solid var(--edge); border-bottom: 0;
  box-shadow: inset 0 1px 0 var(--hairline), var(--shadow);
  width: 100%; max-width: 720px; max-height: 92vh; display: flex; flex-direction: column;
  border-radius: 20px 20px 0 0; overflow: hidden; box-shadow: var(--shadow);
}
/* На айфоне в режиме приложения проценты высоты считаются от экрана вместе с
   панелями, поэтому берём «живую» высоту: иначе низ окна уезжает за край. */
@supports (max-height: 92dvh) { .modal { max-height: 92dvh; } }
.modal header { flex: 0 0 auto; }
.modal footer { flex: 0 0 auto; }
.modal .list { flex: 1 1 auto; min-height: 0; }

/* Сканер: картинка с камеры высокая, поэтому ограничиваем её и оставляем место
   журналу и кнопке «Готово». Раньше низ окна уходил за экран и закрыть было нечем. */
.сканер header video { max-height: 38vh; object-fit: cover; }
@supports (max-height: 38dvh) { .сканер header video { max-height: 38dvh; } }
.сканер header { max-height: 62vh; overflow: auto; -webkit-overflow-scrolling: touch; }
.btn.закрыть {
  flex: none; width: 38px; height: 38px; padding: 0; font-size: 17px; line-height: 1;
  display: flex; align-items: center; justify-content: center; border-radius: 12px;
}
@media (min-width: 760px) { .modal { border-radius: 20px; border-bottom: 1px solid var(--line); } }
.modal header { padding: 14px; border-bottom: 1px solid var(--line); }
.modal .list { overflow: auto; -webkit-overflow-scrolling: touch; padding: 6px 14px 14px; }
.modal footer {
  padding: 12px 14px calc(12px + env(safe-area-inset-bottom));
  border-top: 1px solid var(--line); display: flex; gap: 9px; flex-wrap: wrap;
}
/* Кнопок внизу окна бывает четыре-пять, а телефон узкий. Раньше они сжимались до
   «В…» и «Прив…» — подписи пропадали. Теперь ряд переносится на вторую строку,
   а длинная подпись при нужде ложится в две строки, но не обрезается. */
.modal footer > button.btn {
  flex: 1 1 auto; min-width: max(84px, 22%);
  white-space: normal; overflow: visible; text-overflow: clip;
  line-height: 1.2; text-align: center;
}
.cats { display: flex; gap: 7px; overflow-x: auto; padding: 10px 0 3px; scrollbar-width: none; }
.cats::-webkit-scrollbar { display: none; }
.pick { display: flex; align-items: center; gap: 11px; padding: 11px 0; border-bottom: 1px solid var(--line); }
.pick:last-child { border-bottom: 0; }
.pick .stock { font-size: 12px; white-space: nowrap; }
.pick .add {
  width: 44px; height: 38px; border-radius: var(--radius-small); border: 1px solid var(--line);
  background: var(--chip); cursor: pointer; font-size: 18px; color: var(--accent);
}
.pick .add:active { box-shadow: var(--glow); }
.pick input.q { width: 62px; text-align: center; padding: 8px; }

/* ---- наборы: несколько позиций под одним QR ---- */
.btn.раскрыть { padding: 2px 0; font-size: 12px; color: var(--accent); min-height: 0; }
.состав { margin: 4px 0 2px 10px; padding-left: 8px; border-left: 2px solid var(--line); }

/* ---- общая приёмка ---- */
/* Отложенная смета остаётся на экране, но глаз за неё не цепляется. */
.card.тусклая { opacity: .55; }
input.заметка { margin: 2px 0 10px; }

/* ---- всплывающие сообщения ---- */
#toasts { position: fixed; left: 14px; right: 14px; bottom: calc(14px + env(safe-area-inset-bottom)); z-index: 90; display: grid; gap: 9px; pointer-events: none; }
.toast {
  background: color-mix(in srgb, var(--card) 92%, transparent); color: var(--text);
  border: 1px solid var(--line); border-left: 3px solid var(--accent);
  padding: 12px 15px; border-radius: var(--radius-small); box-shadow: var(--shadow), var(--glow);
  font-size: 14px; backdrop-filter: blur(10px); -webkit-backdrop-filter: blur(10px);
}
.toast.bad { border-left-color: var(--danger); box-shadow: var(--shadow); }

/* ---- вход ---- */
.login { max-width: 380px; margin: 12vh auto; padding: 0 16px; }
.login img { width: 100%; max-width: 250px; display: block; margin: 0 auto 22px; }
/* Логотип нарисован чёрным по белому — на тёмном фоне выворачиваем его в белый,
   иначе половина надписи пропадает. */
:root[data-theme="dark"] .login img, :root[data-theme="dark"] header.top img { filter: brightness(0) invert(1); }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .login img,
  :root:not([data-theme="light"]) header.top img { filter: brightness(0) invert(1); }
}

/* ---- этикетки со штрихкодом (всегда на белом: их печатают) ---- */
.labels, .print-labels {
  /* Сетка, а не флекс: у сетки браузер честно не рвёт ячейку между страницами.
     С флексом наклейку резало пополам — половина кода на одном листе, половина на другом. */
  display: grid; grid-template-columns: repeat(auto-fill, 50mm); gap: 2mm;
}
/* Наклейка ровно 50 × 30 мм — под готовую нарезку и под рулон термопринтера. */
.label {
  position: relative;
  width: 50mm; height: 30mm; box-sizing: border-box; overflow: hidden;
  border: 1px solid #d8d8de; border-radius: 1.5mm; padding: 1.2mm;
  background: #fff; color: #000;
  display: flex; flex-direction: column; gap: 0.8mm;
  page-break-inside: avoid; break-inside: avoid;
}
.label svg { max-width: 100%; height: auto; }
.label-top { display: flex; gap: 1.5mm; align-items: flex-start; flex: 1; min-height: 0; }
.label-qr { flex: none; }
.label-qr svg { display: block; width: 17mm; height: 17mm; }
.label-text {
  min-width: 0; flex: 1; text-align: left; align-self: stretch;
  display: flex; flex-direction: column; position: relative;
}
/* Марка по всей наклейке — косой сеткой, как на фирменном бланке. Коды рисуются
   поверх со своим белым полем, поэтому сканеру фон не мешает. */
.label-mark {
  position: absolute; inset: -40%; transform: rotate(-24deg); z-index: 0;
  display: flex; flex-wrap: wrap; align-content: center; justify-content: center;
  gap: 1.1mm 2.4mm; overflow: hidden; pointer-events: none;
  font-size: 4.4pt; font-weight: 800; letter-spacing: 0.12em; line-height: 1.2;
  color: #e0e0e0; text-transform: uppercase; white-space: nowrap;
}
.label-top, .label-bars { position: relative; z-index: 1; }
.label-name {
  position: relative; flex: 1; min-height: 0; overflow: hidden;
  font-size: 7pt; font-weight: 600; line-height: 1.1;
}
.label-cat {
  position: relative; flex: none; font-size: 7.5pt; font-weight: 700; color: #000;
  margin-top: 0.6mm; overflow: hidden; white-space: nowrap; text-overflow: ellipsis;
}
.label-bars { flex: none; }
.label-bars svg { display: block; width: 100%; height: 7.5mm; }
.print-labels { display: none; }

/* ---- печать: на бумаге нужен только сам бланк ---- */
@media print {
  header.top, nav.tabbar, .noprint { display: none !important; }
  body { background: #fff; color: #000; background-image: none; }
  .card { box-shadow: none; border: 1px solid #ddd; background: #fff; color: #000; page-break-inside: avoid; }
  .card h2 { color: #000; }
  input, textarea, select { background: #fff; color: #000; border-color: #ccc; }
  body.printing-labels > *:not(.print-labels) { display: none !important; }
  body.printing-labels .print-labels { display: grid !important; }
  .label { page-break-inside: avoid; break-inside: avoid; }
  /* Рулон: каждая наклейка — своя страница 50 × 30, без полей и рамки. */
  body.printing-roll .print-labels { display: block !important; }
  body.printing-roll .label { border: none; border-radius: 0; page-break-after: always; break-after: page; }
  body.printing-roll .label:last-child { page-break-after: auto; break-after: auto; }
  @page { size: A4; margin: 5mm; }
}

/* ---- приёмка возврата: одна кнопка на позицию, жмётся по кругу ---- */
.отметка {
  width: 42px; height: 42px; border-radius: 14px; font-size: 20px; line-height: 1;
  display: flex; align-items: center; justify-content: center;
  border: 1.5px solid var(--line); background: transparent; color: var(--muted);
  cursor: pointer; transition: transform .08s ease, background .15s ease;
}
.отметка:active { transform: scale(.93); }
.отметка.есть { border-color: #2fbf71; background: rgba(47, 191, 113, .16); color: #2fbf71; }
.отметка.нету { border-color: #e2464a; background: rgba(226, 70, 74, .16); color: #e2464a; }
.отметка.беда { border-color: #e8a42c; background: rgba(232, 164, 44, .18); color: #e8a42c; }
/* Проблему обязаны описать — пустое поле подсвечиваем, чтобы не проскочило. */
input.нужен { border-color: #e8a42c; }

/* ---- чат ---- */
.чат-лента { max-height: 62vh; overflow: auto; -webkit-overflow-scrolling: touch; display: flex; flex-direction: column; gap: 8px; }
@supports (max-height: 62dvh) { .чат-лента { max-height: 62dvh; } }
.чат-день { align-self: center; font-size: 12px; color: var(--muted); padding: 2px 10px; }
.чат-строка { display: flex; }
.чат-строка.своё { justify-content: flex-end; }
.чат-пузырь {
  max-width: 82%; padding: 9px 12px; border-radius: 16px;
  background: var(--glass); border: 1px solid var(--line);
}
.чат-строка.своё .чат-пузырь { background: rgba(230, 17, 123, .16); border-color: rgba(230, 17, 123, .35); }
.чат-кто { font-size: 11px; color: var(--muted); margin-bottom: 3px; }
.чат-текст { font-size: 15px; line-height: 1.35; white-space: pre-wrap; word-break: break-word; }
.чат-время { font-size: 10px; color: var(--muted); text-align: right; margin-top: 3px; }
.чат-поле { flex: 1; min-height: 42px; max-height: 120px; resize: none; }
.чат-низ { position: sticky; bottom: 0; }

/* ---- печатный лист сметы: тот же бланк, что и в файле Excel ---- */
.print-sheet { display: none; font-family: "Times New Roman", Times, serif; color: #000; }
.бланк-шапка { display: flex; align-items: stretch; border: 0.3mm solid #000; margin-bottom: 2mm; }
.бланк-лого { flex: 1; display: flex; flex-direction: column; align-items: center; justify-content: center; padding: 2mm; }
.бланк-лого img { height: 15mm; }
.бланк-номер { font-size: 9pt; margin-top: 1mm; }
.бланк-ярлык {
  width: 34%; background: #e6117b; color: #fff; font-weight: 700; font-size: 13pt;
  display: flex; align-items: center; justify-content: center; text-align: center; padding: 3mm;
}
.бланк-верх { display: flex; gap: 0; align-items: stretch; }
.бланк-поля, .бланк-деньги, .бланк-широкие { border-collapse: collapse; font-size: 9pt; }
.бланк-поля { width: 52%; }
.бланк-деньги { width: 48%; }
.бланк-широкие { width: 100%; margin-bottom: 2mm; }
.бланк-поля td, .бланк-деньги td, .бланк-широкие td { border: 0.25mm solid #000; padding: 1.4mm 2mm; }
.бланк-поля .п-имя, .бланк-широкие .п-имя { font-weight: 700; width: 54%; }
.бланк-поля .п-знач, .бланк-широкие .п-знач { text-align: center; font-weight: 700; }
.бланк-широкие .п-имя { width: 26%; }
.бланк-деньги .д-имя { font-weight: 700; text-align: center; width: 66%; }
.бланк-деньги .д-знач { text-align: center; font-weight: 700; }
.бланк-деньги .розовая td { background: #e6117b; color: #fff; }
.бланк-товары { width: 100%; border-collapse: collapse; font-size: 8.5pt; }
.бланк-товары th, .бланк-товары td { border: 0.25mm solid #000; padding: 1mm 1.5mm; text-align: center; }
.бланк-товары th { font-weight: 700; }
.бланк-товары .т-имя { text-align: left; width: 34%; }
.бланк-товары .т-комм { text-align: left; width: 16%; }
.бланк-товары .тара td { font-style: italic; font-weight: 700; }
.бланк-товары .полоса td { background: #e6117b; padding: 0; height: 2mm; border-color: #e6117b; }
.бланк-полоса-надпись {
  background: #e6117b; color: #fff; font-weight: 700; font-size: 11pt;
  text-align: center; padding: 1.5mm; margin: 2mm 0 0;
}
.бланк-подписи { width: 100%; border-collapse: collapse; font-size: 8.5pt; }
.бланк-подписи td { border: 0.25mm solid #000; padding: 2mm; width: 50%; text-align: center; font-weight: 700; }
.бланк-линия { border-bottom: 0.25mm solid #000; margin: 6mm 0 2mm; }
.бланк-от { margin-top: 1mm; }
.бланк-примечание { border: 0.25mm solid #000; border-top: 0; padding: 3mm 2mm 10mm; font-size: 9pt; font-weight: 700; }

@media print {
  body.printing-sheet > *:not(.print-sheet) { display: none !important; }
  body.printing-sheet .print-sheet { display: block !important; color: #000; }
  body.printing-sheet { background: #fff; }
  .бланк-ярлык, .бланк-деньги .розовая td, .бланк-товары .полоса td, .бланк-полоса-надпись {
    -webkit-print-color-adjust: exact; print-color-adjust: exact;
  }
}

/* Числа в приёмке: «вернулось» и «из них битых». Без подписи два поля рядом
   читаются как загадка, а ошибиться тут дорого — это деньги за утерю. */
.счётчик { display: flex; flex-direction: column; align-items: center; gap: 2px; }
/* Своё display сильнее браузерного [hidden] — иначе спрятанные поля остаются на виду. */
.счётчик[hidden] { display: none; }
.счётчик > span { font-size: 11px; color: var(--muted); white-space: nowrap; }
