/* Сайт операторов (1а): своё поверх утверждённых макетов — то, чего в макетах нет. Цвета — роли platform.css, размеры —
   токены сайта (/site/tokens.css). Вид макетов не правится здесь: правки макетов — в docs/design/mockups. */

/* Карточка «нет права / нет заведения / смените пароль» — по образцу карточки входа (.gate__card). */
.closed-card {
  display: grid; gap: var(--space-3); width: min(calc(100% - var(--gutter) * 2), calc(var(--space-8) * 6));
  margin: var(--space-6) auto; padding: var(--space-6); border: 1px solid var(--border); border-radius: var(--radius-lg);
  background: var(--panel); box-shadow: var(--shadow-1); color: var(--ink); text-align: center;
}
.closed-card p { margin: 0; }

/* Карта не загрузилась (нет WebGL, файла района, библиотеки): спокойные слова вместо пустоты — лента работает и так. */
.staff-side__empty {
  margin: 0; padding: var(--space-6) var(--space-4); color: var(--muted); font-size: var(--text-sm); text-align: center;
}

/* Строка-уведомление об отказе — тем же видом, цветом беды. */
.toast--error { background: var(--err); color: var(--on-accent); }

/* Выбор заведения сверху: список — под кнопкой. */
.staff-client { position: relative; }
.staff-client > .menu { position: absolute; top: calc(100% + var(--space-1)); left: 0; }

/* «Что вижу» в 1а — надпись, а не кнопка (выбор точек — позже): вид кнопки шапки без рамки, значок — её размером. */
.staff-rights:not(.btn) { display: inline-flex; align-items: center; gap: var(--space-2); min-height: var(--control-md); }
.staff-rights:not(.btn) > svg { flex: none; width: var(--icon-md); height: var(--icon-md); color: var(--gold); }

/* «Телефон — показать» в карточке — кнопка видом ссылки телефона (макет: ссылка с глазом), не кнопка-плашка. */
button.order-guest__phone { padding: 0; border: 0; background: none; font: inherit; cursor: pointer; }

/* «Списком»: заголовки столбцов без порядка — тем же видом, что кнопки порядка, но не кнопкой. */
.oc-lt__sort.is-still { cursor: default; }
.oc-lt__sort.is-still:hover { color: var(--muted); }

/* «Порядок в группах» на телефоне — подпись одной строкой (проверка куска 2, п.17); выбор при нехватке места — под ней,
   а не за край экрана. */
.oc-gsort__sel { flex-wrap: wrap; min-width: 0; max-width: 100%; }
.oc-gsort__sel > span { white-space: nowrap; }
.oc-gsort__sel .select { max-width: 100%; }
/* «вне отбора» в таблице (И377) — пометка, а не тревога: спокойным цветом, не красным «требует внимания». */
.oc-lt__why.is-quiet { color: var(--muted); }

/* ── Карта справа (кусок 3, Р250-1): своя карта района, зоны и метки поверх ─────────────────────────────────────────
   Зоны — цветом своей точки (Р277; `--v1`, `--v2` — макет, oc.css; третья и четвёртая точки — здесь), выключенная —
   цветом беды. Роли — light-dark(), тёмная тема берёт свои значения сама. */
:root { --zone-off: var(--err); }
.smap--venues { --v3: light-dark(#8A3FB8, #CDA2F2); --v4: light-dark(#0F7A73, #5FCFC6); }
.smap__sw--v3 { --sc: var(--v3); }
.smap__sw--v4 { --sc: var(--v4); }
.ops-map { height: 100%; border-radius: var(--radius-lg); }
/* Метка заказа (Р324, И605; макет `order-marks.html`) — флажок, как у точки (`placePin` сайта): кружок цвета заказа с
   номером жирно, белая рамка, ножка и точка того же цвета; точка — ровно на адресе (якорь — низ, сдвиг на полточки).
   Корень метки (`.ops-mark`) двигает сама карта: она пишет ему `transform` и `opacity` — здесь у корня только слой и
   цвет. Выбранная (открытый заказ, «На карте», отмечен для курьера) — кружок крупнее, растёт от своего низа: ножка и
   точка на месте; «везут» — оранжевое кольцо вокруг кружка; «!» — опаздывает, в углу кружка поверх рамки; бледная (не в
   отборе ленты) — прозрачные кружок, ножка и точка. Номер из четырёх и больше знаков — «таблеткой» той же высоты. */
.ops-mark { --oc: var(--ok); position: relative; z-index: 2; display: grid; justify-items: center; }
.ops-mark.is-selected { z-index: 4; }
.ops-mark.is-dim { z-index: 1; }
.ops-mark--h1 { --oc: var(--hue-1); }
.ops-mark--h2 { --oc: var(--hue-2); }
.ops-mark--h3 { --oc: var(--hue-3); }
.ops-mark--h4 { --oc: var(--hue-4); }
.ops-mark--h5 { --oc: var(--hue-5); }
.ops-mark--h6 { --oc: var(--hue-6); }
.ops-mark--h7 { --oc: var(--hue-7); }
.ops-mark--h8 { --oc: var(--hue-8); }
.ops-mark .ops-pin {
  position: relative; display: grid; place-items: center; box-sizing: border-box; min-width: var(--control-sm); height: var(--control-sm);
  margin: 0; padding: 0 var(--space-1); border: 2px solid var(--panel); border-radius: var(--radius-pill); background: var(--oc);
  box-shadow: var(--shadow-1); color: var(--on-accent); font: inherit; font-size: var(--text-sm); font-weight: var(--weight-bold);
  font-variant-numeric: tabular-nums; line-height: 1; white-space: nowrap; cursor: pointer;
  transform-origin: 50% 100%; transition: transform var(--motion-fast) var(--ease), opacity var(--motion-fast) var(--ease);
}
.ops-mark.is-three .ops-pin { font-size: 13px; letter-spacing: -0.03em; }
.ops-mark.is-long .ops-pin { padding: 0 var(--space-2); font-size: 13px; }
.ops-mark .place-pin__stick { width: 2px; height: var(--space-3); margin-top: -1px; background: var(--oc); }
.ops-mark .place-pin__dot { box-sizing: border-box; width: 10px; height: 10px; border: 2px solid var(--panel); border-radius: var(--radius-pill); background: var(--oc); box-shadow: var(--shadow-1); }
.ops-mark .ops-pin.is-going { box-shadow: 0 0 0 3px var(--going), var(--shadow-1); }
.ops-mark .ops-pin.is-selected { transform: scale(1.3); box-shadow: 0 0 0 2px var(--accent), var(--shadow-2); }
.ops-mark .ops-pin.is-going.is-selected { box-shadow: 0 0 0 3px var(--going), 0 0 0 5px var(--accent), var(--shadow-2); }
.ops-mark.is-dim > * { opacity: 0.38; }
/* Закрытый заказ (проход владельца 22.10) — серая полупрозрачная метка: раскрыты «Завершены» или «На карте» у него. */
.ops-mark.is-closed { --oc: var(--muted); z-index: 1; }
.ops-mark.is-closed > * { opacity: 0.55; }
.ops-mark.is-closed.is-selected > * { opacity: 0.9; }
.ops-mark.is-dim .ops-pin { filter: saturate(0.4); }
.ops-mark.is-dim:hover > * { opacity: 0.8; }
.ops-mark .ops-pin:focus-visible { outline: 2px solid var(--focus); outline-offset: 3px; }
.ops-mark .smap__late { top: -7px; right: -7px; width: var(--space-4); height: var(--space-4); font-size: 11px; }
@media (pointer: coarse) { .ops-mark .ops-pin::before { content: ""; position: absolute; inset: calc(var(--space-2) * -1); } }
/* Подпись карты — знаки того же вида, что на метке: кружок, кольцо «везут», «!», бледный. */
.ops-map .smap__mini { box-sizing: border-box; width: 14px; height: 14px; border: 2px solid var(--panel); border-radius: var(--radius-pill); }
.ops-map .smap__mini--dim { opacity: 0.38; filter: saturate(0.4); }
/* Слова «зоны не загрузились» — внизу слева: справа внизу — подпись карты. */
.ops-map .smap__note { right: auto; left: var(--space-2); max-width: calc(100% - var(--space-4)); z-index: var(--z-above); color: var(--err); }
.ops-map .smap__legend { pointer-events: none; }
/* Флажок точки (Р277) — значок заведения, как у Гостя (`placePin` сайта, `web/components.css` `.place-pin`), в размерах
   макета: кружок со знаком, палочка, точка в самом месте, имя под ней — цветом точки; выбранная — с кольцом. Под
   метками заказов: метку не закрывает. */
.ops-flag { position: relative; z-index: 1; display: grid; justify-items: center; }
.ops-flag--v1 { --fc: var(--v1); }
.ops-flag--v2 { --fc: var(--v2); }
.ops-flag--v3 { --fc: var(--v3); }
.ops-flag--v4 { --fc: var(--v4); }
.ops-flag .place-pin__face {
  display: grid; place-items: center; width: var(--control-sm); height: var(--control-sm); margin: 0; padding: 0; overflow: hidden;
  border: 2px solid var(--fc); border-radius: var(--radius-pill); background: var(--panel); box-shadow: var(--shadow-1);
  color: var(--fc); font: inherit; cursor: pointer;
}
.ops-flag .place-pin__letter { font-family: var(--font-title); font-size: var(--text-md); font-weight: var(--weight-bold); line-height: 1; }
/* Логотип бренда точки (Р287-4) — во весь кружок, как у Гостя (`.place-pin__face > img`). */
.ops-flag .place-pin__logo { width: 100%; height: 100%; padding: 2px; object-fit: contain; background: var(--panel); }
.ops-flag .place-pin__face:focus-visible { outline: 2px solid var(--focus); outline-offset: 2px; }
.ops-flag .place-pin__stick { width: 2px; height: var(--space-3); background: var(--fc); }
.ops-flag .place-pin__dot { width: 10px; height: 10px; border: 2px solid var(--panel); border-radius: var(--radius-pill); background: var(--fc); }
.ops-flag .place-pin__name {
  position: absolute; top: calc(100% + 2px); left: 50%; transform: translateX(-50%); white-space: nowrap;
  color: var(--fc); font-size: var(--text-sm); font-weight: var(--weight-semibold); line-height: var(--leading-title);
  text-shadow: 0 0 2px var(--panel), 0 0 4px var(--panel), 0 0 6px var(--panel); pointer-events: none;
}
.ops-flag.is-on .place-pin__face { box-shadow: 0 0 0 3px color-mix(in srgb, var(--fc) 35%, transparent), var(--shadow-1); }
/* 1100–1280 колонка курьеров лежит поверх левого края карты (макет; с Р352-5 — всегда) — ниже выбора точки и подписи
   сроков (orders.css): они на своём месте, сверху слева; адреса точек — только названиями (полностью — в подсказке
   кнопки), чтобы выбор занимал меньше строк и колонка начиналась выше. */
@media (min-width: 1100px) and (max-width: 1280px) {
  body:not(.has-card):not(.is-list) .smap__sw-addr { display: none; }
}


/* ── Касса в шапке (кусок 3, И308): «нет ответа iiko» — не беда, а неизвестность: цветом предупреждения ── */
.iiko-state.is-unknown { color: var(--warn); font-weight: var(--weight-semibold); }
.iiko-state.is-unknown::before { background: var(--warn); }

/* ── «Назначить курьера» (кусок 4, И294): раскладка колонки курьеров, где теперь живёт сборка рейса, — orders.css. ── */

/* ── «Назначить курьера» по шагам (кусок 3в-2): кто успевает, порядок остановок, «Отправить» ───────────────────────
   Кандидат — кнопкой во всю ширину: точка-буква, имя, где и сколько везёт, итог «успеваем / опоздаем» зелёным или
   красным; больше его числа за раз — серым, выбрать нельзя, почему — под строкой. Кнопки шага — внизу колонки и
   остаются видны, пока список прокручивается. */
.oc-as__step { margin: 0; font-size: var(--text-md); font-weight: var(--weight-semibold); line-height: var(--leading-title); }
.oc-as__step:focus { outline: none; }
.oc-cand {
  display: grid; grid-template-columns: auto minmax(0, 1fr); align-items: start; gap: var(--space-1) var(--space-3); width: 100%;
  margin: 0; padding: var(--space-3); border: 1px solid var(--border2); border-radius: var(--radius-md); background: var(--panel);
  color: var(--ink); font: inherit; text-align: left; cursor: pointer;
}
.oc-cand:hover:not(:disabled) { border-color: var(--accent); box-shadow: inset 0 0 0 1px var(--accent); }
.oc-cand:focus-visible { outline: 2px solid var(--focus); outline-offset: 2px; }
.oc-cand .courier-card__dot { grid-row: span 2; }
.oc-cand__verdict { grid-column: 2; font-size: var(--text-sm); font-weight: var(--weight-semibold); line-height: var(--leading-title); }
.oc-cand__verdict.is-ok, .oc-as__verdict.is-ok { color: var(--ok); }
.oc-cand__verdict.is-late, .oc-as__verdict.is-late { color: var(--err); }
.oc-cand__verdict.is-tight, .oc-as__verdict.is-tight { color: var(--warn); }
.oc-cand:disabled { background: var(--cream); color: var(--muted); cursor: not-allowed; }
.oc-cand:disabled .courier-card__dot { opacity: 0.45; filter: grayscale(1); }
.oc-cand:disabled .oc-pick__text span, .oc-cand:disabled .oc-cand__verdict { color: var(--muted); }
.oc-cand__over { margin: var(--space-1) 0 0 var(--space-3); color: var(--muted); font-size: var(--text-sm); line-height: var(--leading-title); }
.oc-as__none { margin: 0; padding: var(--space-3); border: 1px dashed var(--border2); border-radius: var(--radius-md); color: var(--muted);
  font-size: var(--text-sm); }
.oc-as__refused { display: flex; align-items: flex-start; gap: var(--space-2); padding: var(--space-2) var(--space-3); border: 1px solid var(--err);
  border-radius: var(--radius-md); color: var(--err); font-size: var(--text-sm); font-weight: var(--weight-semibold); line-height: var(--leading-title); }
.oc-as__refused:focus { outline: none; }
.oc-as__refused svg { flex: none; width: var(--icon-md); height: var(--icon-md); }
.oc-as__refused ul { display: grid; gap: var(--space-1); margin: 0; padding: 0; list-style: none; overflow-wrap: anywhere; }
.oc-as__busy { color: var(--muted); }
.oc-as__foot > .oc-as__busy, .oc-as__foot > .oc-as__refused { flex: 1 1 100%; margin: 0; }
.oc-as .route-stop__text b { font-weight: var(--weight-semibold); }
/* Время вручения и знак «впритык» / «опаздывает» (Р423) — одной строкой; тесно — знак переносится целиком. */
.oc-as .route-stop__when { display: flex; flex-wrap: wrap; align-items: center; gap: 0 var(--space-1); min-width: 0; }
.oc-as .route-stop__when .oc-hint { margin-block: calc(var(--space-1) * -1); }
.oc-as .switch { font-size: var(--text-sm); }
.oc-as:not([data-step="pick"]) > .oc-as__foot { position: sticky; bottom: calc(var(--space-4) * -1); z-index: 1;
  margin: 0 calc(var(--space-4) * -1) calc(var(--space-4) * -1); padding: var(--space-3) var(--space-4) var(--space-4);
  border-top: 1px solid var(--border2); background: var(--panel); }
/* ПК: кнопки «выше / ниже» мельче — время остановки помещается в строку. */
@media (min-width: 768px) {
  .oc-as .route-stop__move .icon-btn { width: var(--control-sm); height: var(--control-sm); }
}
/* Телефон: перетаскивать пальцем нечем — порядок кнопками «выше / ниже» (у макета их на телефоне нет — договор 3в-2). */
@media (max-width: 767px) {
  .oc-as .route-stop { grid-template-columns: auto minmax(0, 1fr) auto !important; }
  .oc-as .route-stop__grip { display: none; }
  .oc-as .route-stop__move { display: flex; }
}
@media (max-width: 1099px) {
  .oc-as:not([data-step="pick"]) > .oc-as__foot { margin-inline: calc(var(--gutter) * -1); padding-inline: var(--gutter); }
}

/* ── Р287: «Что вижу» — выбор точек (макет oc.css, десятая редакция); «когда звенит» — в окошке звука (Р351, alerts.css) ── */
.oc-sees, .oc-sound { position: relative; display: inline-flex; align-items: center; gap: var(--space-1); min-width: 0; }
.oc-sees__menu { position: absolute; top: calc(100% + var(--space-1)); left: 0; width: max-content; min-width: calc(var(--space-8) * 4.5); }
.oc-sees__menu .menu__head { display: grid; gap: var(--space-1); }
.oc-sees__hint, .oc-sees__foot { color: var(--muted); font-size: var(--text-sm); font-weight: var(--weight-regular); white-space: normal; }
.oc-sees__foot { margin: var(--space-2) var(--space-3) var(--space-1); }
.oc-sees__menu .menu__item { gap: var(--space-2); }
@media (max-width: 720px) {
  .oc-sees__menu { position: fixed; top: calc(var(--space-8) + var(--space-4)); left: var(--space-4); right: var(--space-4);
    width: auto; min-width: 0; }
}

/* ── Р290: квадратик цвета заказа у строки (тот же цвет, что метка на карте), «На карте» и «Открыть» словами (макет
   `r290-map`) ───────────────────────────────────────────────────────────────────────────────────────────────────── */
.oc-hue { display: inline-block; flex: none; width: var(--space-3); height: var(--space-3); border-radius: 3px; }
.oc-hue--1 { background: var(--hue-1); }
.oc-hue--2 { background: var(--hue-2); }
.oc-hue--3 { background: var(--hue-3); }
.oc-hue--4 { background: var(--hue-4); }
.oc-hue--5 { background: var(--hue-5); }
.oc-hue--6 { background: var(--hue-6); }
.oc-hue--7 { background: var(--hue-7); }
.oc-hue--8 { background: var(--hue-8); }
/* «На карте» нажата — адрес заказа на карте выделен. Раскладка строки — orders.css (Р356). */
.order-row__act .oc-tomap.is-on { background: var(--tint); box-shadow: inset 0 0 0 1px var(--accent); }
/* «Курьеры» старшего смены (часть 3а-2): вход курьеров — строки, список своих курьеров, ссылка с QR-кодом. */
#couriers { padding: var(--space-4) max(var(--space-4), env(safe-area-inset-right, 0px)) var(--space-6) max(var(--space-4), env(safe-area-inset-left, 0px)); }
.oc-off li > svg { width: var(--icon-md); height: var(--icon-md); color: var(--muted); }
.oc-off li > span { min-width: 0; overflow-wrap: anywhere; }
.oc-off li small { color: var(--muted); font-size: var(--text-xs); }
.oc-confirm { padding: var(--space-3); border-radius: var(--radius-md); background: var(--tint); font-size: var(--text-sm); }
.oc-confirm p { margin: 0; }
.oc-courier-link { display: grid; gap: var(--space-2); padding: var(--space-3) var(--space-4); border: 1px solid var(--border2); border-radius: var(--radius-lg); background: var(--panel); }
.oc-courier-link__row { display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-2); min-width: 0; }
.oc-courier-link__row code { min-width: 0; overflow-wrap: anywhere; font-size: var(--text-sm); }
.oc-qr { justify-self: start; max-width: 100%; height: auto; border-radius: var(--radius-md); }

/* «Курьеры» → «На смене» (кусок 3б-2, макет couriers.html `shift`, `forgot-close` — без рейсов и наличных): сводка по
   точкам кнопками, строки исполнения, карточки на смене с явками по точкам, «Не на смене», окно «Закончить смену за …». */
.oc-shift-sum { justify-self: start; flex-wrap: wrap; max-width: 100%; }
.oc-shift-sum .segments__item { display: grid; justify-items: start; gap: 0; min-height: var(--control-lg); padding: var(--space-1) var(--space-3); line-height: var(--leading-title); text-align: left; }
.oc-shift-sum .segments__item small { color: var(--muted); font-size: var(--text-xs); font-weight: var(--weight-regular); white-space: nowrap; }
/* Телефон: точки строками во всю ширину — название слева, числа справа. */
@media (max-width: 559px) {
  .oc-shift-sum { display: grid; grid-template-columns: minmax(0, 1fr); width: 100%; }
  .oc-shift-sum .segments__item { display: flex; justify-content: space-between; align-items: baseline; gap: var(--space-2); min-height: var(--tap); white-space: normal; }
}
/* Строки «Курьеров» — одной строкой, как «Требуют внимания» на «Заказах» (Р354-2): attention.css. */
.oc-onshift .courier-card__fresh { display: inline-flex; align-items: center; gap: var(--space-1); }
.oc-onshift .courier-card__fresh svg { flex: none; width: var(--icon-sm); height: var(--icon-sm); }
.oc-onshift .courier-card__name { margin: 0; }
.oc-atts { display: grid; gap: 2px; margin: 0; padding: var(--space-2) var(--space-3); border-radius: var(--radius-sm); background: var(--tint); list-style: none; font-size: var(--text-sm); }
.oc-att { display: flex; align-items: flex-start; gap: var(--space-2); min-width: 0; line-height: var(--leading-title); }
.oc-att > span { min-width: 0; overflow-wrap: anywhere; }
.oc-att > svg { flex: none; width: var(--icon-sm); height: var(--icon-sm); margin-top: 2px; }
.oc-att.is-ok > svg, .oc-att.is-ok b { color: var(--ok); }
.oc-att.is-wait > svg { color: var(--muted); }
.oc-att.is-warn > svg, .oc-att.is-warn b { color: var(--warn); }
.oc-att.is-bad > svg, .oc-att.is-bad b { color: var(--err); }
.oc-att.is-calm { color: var(--muted); }
.oc-shift-said { display: flex; align-items: center; gap: var(--space-2); margin: 0; padding: var(--space-1) var(--space-1) var(--space-1) var(--space-3);
  border: 1px solid var(--ok); border-radius: var(--radius-md); background: var(--panel); font-size: var(--text-sm); }
.oc-shift-said > svg { flex: none; width: var(--icon-md); height: var(--icon-md); color: var(--ok); }
.oc-shift-said > span { flex: 1 1 auto; min-width: 0; overflow-wrap: anywhere; }
.oc-shift-said.is-warn { border-color: var(--warn); }
.oc-shift-said.is-warn > svg { color: var(--warn); }
.oc-end-for .dialog__body { display: grid; gap: var(--space-3); }
.oc-end-for .dialog__body > p { margin: 0; }
.oc-end-for__span { font-size: var(--text-lg); font-weight: var(--weight-semibold); }
.oc-end-for__span.is-warn { color: var(--warn); font-size: var(--text-sm); }

/* «Курьеры» → «Расписание» (кусок 3б-1, макет couriers.html `oc-plan`): вид таблицы и окна — oc.css (макет); здесь то,
   чего в макете нет: клетка-кнопка, несколько смен в одной клетке, строка «поставили» с предупреждением, отказ двери
   красным, одна точка подписью, сегодня среди дней на телефоне. */
.oc-couriers__plan { min-width: 0; }
@media (max-width: 767px) {
  .oc-couriers__top > .oc-couriers__views { display: grid; grid-auto-columns: minmax(0, 1fr); grid-auto-flow: column; width: 100%; }
  .oc-couriers__views .segments__item { justify-content: center; padding: 0 var(--space-1); font-size: var(--text-sm); }
  /* Три вкладки на телефоне — без значков, иначе «Расписание» упирается в край. */
  .oc-couriers__views:has(> :nth-child(3)) svg { display: none; }
}
.oc-plan__head .oc-plan__gone { margin-left: auto; }
.oc-plan__week b { min-width: calc(var(--space-8) * 2); text-align: center; white-space: nowrap; }
.oc-plan__week .icon-btn:disabled { opacity: 0.45; cursor: default; }
button.oc-cell { width: 100%; margin: 0; border: 0; font: inherit; text-align: left; cursor: pointer; }
button.oc-cell--add { border: 1px dashed var(--border); }
button.oc-cell:hover { outline: 1px solid var(--accent); }
button.oc-cell:focus-visible { outline: 2px solid var(--focus); outline-offset: 2px; }
.oc-cell + .oc-cell { margin-top: var(--space-1); }
.oc-cell > span { min-width: 0; overflow-wrap: anywhere; }
.oc-week__who { align-items: flex-start; min-width: 0; }
.oc-week__who .courier-card__dot { flex: none; }
.oc-plan__name { display: grid; min-width: 0; overflow-wrap: anywhere; line-height: var(--leading-title); }
.oc-plan__closed { color: var(--muted); font-size: var(--text-xs); font-weight: var(--weight-regular); }
.oc-dayplan__text { gap: var(--space-1); min-width: 0; }
.oc-dayplan__text > .oc-cell { min-height: var(--tap); color: var(--ink); }
.oc-dayplan__text > .oc-cell--off { min-height: 0; padding: 0; color: var(--muted); }
.oc-days7__d { cursor: pointer; }
.oc-days7__d[aria-current="date"]:not([aria-pressed="true"]) { border-color: var(--accent); color: var(--accent); }
.oc-plan__said { position: relative; display: grid; gap: var(--space-1); padding: var(--space-2) calc(var(--tap) + var(--space-2)) var(--space-2) var(--space-3);
  border: 1px solid var(--border2); border-radius: var(--radius-md); background: var(--panel); font-size: var(--text-sm); }
.oc-plan__said p { display: flex; align-items: flex-start; gap: var(--space-2); margin: 0; }
.oc-plan__said p > svg { flex: none; width: var(--icon-md); height: var(--icon-md); }
.oc-plan__said-done > svg { color: var(--ok); }
.oc-plan__said:has(.oc-plan__said-warn) { border-color: var(--warn); box-shadow: inset var(--space-1) 0 0 var(--warn); }
.oc-plan__said-hide { position: absolute; top: 0; right: 0; }
/* Опрос не удался — прежняя неделя на месте, над ней строка цветом предупреждения. */
.oc-plan__stale { display: flex; align-items: flex-start; gap: var(--space-2); margin: 0; padding: var(--space-2) var(--space-3);
  border: 1px solid var(--warn); border-radius: var(--radius-md); background: var(--panel); font-size: var(--text-sm); }
.oc-plan__stale > svg { flex: none; width: var(--icon-md); height: var(--icon-md); color: var(--warn); }
.oc-plan__one { margin: 0; padding: var(--space-2) var(--space-3); border-radius: var(--radius-md); background: var(--cream); font-size: var(--text-sm); font-weight: var(--weight-medium); }
.oc-plan__point { display: grid; gap: var(--space-2); min-width: 0; }
.oc-plan__points .segments__item:disabled { opacity: 0.55; cursor: not-allowed; }
.oc-plan__points .segments__item { min-width: 0; overflow: hidden; text-overflow: ellipsis; }
.oc-plan__warn, .oc-plan__complaint { margin: 0; font-size: var(--text-sm); }
.oc-plan__complaint { color: var(--err); font-weight: var(--weight-semibold); scroll-margin-bottom: calc(var(--space-8) * 1.5); }
.oc-plan__going { display: flex; align-items: center; gap: var(--space-1); }
.oc-plan-dlg .oc-time .input:disabled { opacity: 0.55; }
/* Вопрос «Убрать смену?» прокручивается в окно целиком — над липким низом окна, а не под ним. */
.oc-plan-dlg .oc-confirm { display: grid; gap: var(--space-1); scroll-margin-bottom: calc(var(--space-8) * 1.5); }

/* ── Пачка 1б (Р351-1, ЗВ16): срок «с 11:10» на месте галочки «для курьера», строка карточки «Курьера — с …», полоса
   причины отказа и отмены ───────────────────────────────────────────────────────────────────────────────────────── */
/* Срок — значком-подсказкой общего окошка (hint.js) с надписью вместо знака: «с» (завтра — «завтра», дальше — дата) над
   временем; мелко, двумя строками — помещается в колонку галочки, а не наезжает на номер. */
.order-pick-from .oc-hint__btn { width: auto; min-width: var(--control-sm); height: auto; min-height: var(--control-sm); padding: 2px 0;
  border-radius: var(--radius-sm); color: var(--muted); }
.order-pick-from__face { display: grid; justify-items: center; font-size: calc(var(--text-xs) - 1px); font-weight: var(--weight-semibold);
  line-height: 1.1; letter-spacing: -0.01em; white-space: nowrap; font-variant-numeric: tabular-nums; }
.order-pick-from__face b { color: var(--ink); font-weight: var(--weight-semibold); }
@media (max-width: 767px) { .order-pick-from .oc-hint__btn { min-width: var(--tap); min-height: var(--tap); } }
.order-assign-from small { color: var(--muted); font-size: var(--text-xs); font-weight: var(--weight-regular); }
/* ЗВ16: причина — поле во всю ширину, под ним кнопки своей полосой с промежутком; узко — переносятся, текст кнопки — тоже. */
.order-reason { display: grid; gap: var(--space-2); flex: 1 1 100%; min-width: 0; }
.order-reason .input { height: var(--control-md); }
.order-reason__acts { display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-2) var(--space-3); min-width: 0; }
.order-reason__acts .btn { max-width: 100%; white-space: normal; text-align: center; line-height: var(--leading-title); }
/* ЗВ16: телефон и планшет — открытый заказ встаёт вместо ленты; лист курьеров снизу в это время не показывается
   (orders.css), отметки те же. */
/* ЗВ10: «Списком» на 1024–1152 таблица не помещалась — «Оплата» уходила под край; длинное (кто везёт под номером, точка,
   способ, оплата) переносится, номер и зона — нет. Узко (строка — карточкой) колонка галочки — по ней самой: место нажатия
   (44) не ложится на время. */
.oc-lt td.oc-lt__no, .oc-lt td.oc-lt__point, .oc-lt td.oc-lt__method, .oc-lt td.oc-lt__pay { white-space: normal; }
.oc-lt td.oc-lt__no > a { white-space: nowrap; }
/* ЗВ10: строка ленты при любой ширине ленты — одной линией (от 460) или двумя, действия значками: orders.css (Р356). */
