/* Плашки «Смены» живут вплотную к шапке экрана, поэтому верхний отступ у них
   снят: общий `.notice` рассчитан на положение между блоками (#191). */
#shift-stale,.shift-history-note{margin-top:0;margin-bottom:var(--space-4)}
.shift-head{display:flex;align-items:flex-start;justify-content:space-between;margin-bottom:var(--space-6)}
.shift-head h1{margin:0;text-transform:uppercase;font-size:var(--text-lg)}
.shift-head p,.section-heading p{margin:var(--space-1) 0 0;color:var(--ink-3)}
.mode-chip{padding:var(--space-1) var(--space-2);border:1px solid var(--line);border-radius:var(--radius-badge);font:700 var(--text-xs) var(--font-mono)}
.shift-summary{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));margin-bottom:var(--space-6);border:1px solid var(--line);border-radius:var(--radius-card);background:var(--surface);overflow:hidden}
/* Колонка «Холод» (#293) добавляет шестую плитку. Число колонок здесь жёсткое, и без
   этого правила плитка молча уезжала бы на вторую строку — сетка бы не сломалась, просто
   выглядела бы криво. Модификатор, а не auto-flow: мобильный @media ниже задаёт свои две
   колонки, и авто-поток пришлось бы гасить там отдельно. */
.shift-summary.has-cold{grid-template-columns:repeat(6,minmax(0,1fr))}
.shift-summary>div{min-width:0;padding:var(--space-3) var(--space-4);border-left:1px solid var(--line)}
.shift-summary>div:first-child{border:0}
.shift-summary span,.shift-summary small{display:block;color:var(--ink-3);font-size:var(--text-xs)}
.shift-summary b{display:block;margin:var(--space-1) 0;font:600 var(--text-2xl) var(--font-mono)}
.shift-progress{height:6px;margin:var(--space-1) 0;background:var(--surface-2);border-radius:var(--radius-xs);overflow:hidden}
.shift-progress i{display:block;height:100%;background:var(--progress)}
.shift-progress i.good{background:var(--progress-good)}
.shift-progress i.over{background:var(--progress-over)}
.section-heading{display:flex;align-items:end;justify-content:space-between}
.forecast{margin-bottom:var(--space-6)}
.forecast-grid{display:grid;grid-template-columns:repeat(3,1fr);margin-top:var(--space-2);border:1px solid var(--line);border-radius:var(--radius-card);background:var(--surface);overflow:hidden}
.forecast-grid article{display:flex;align-items:center;gap:var(--space-3);min-width:0;padding:var(--space-4) var(--space-4);border-left:1px solid var(--line)}
.forecast-grid article:first-child{border:0}
.forecast-grid article>b{color:var(--ink-4);font:600 var(--text-xl) var(--font-mono)}
.forecast-grid strong,.forecast-grid span{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.forecast-grid span{margin-top:var(--space-1);color:var(--ink-3);font-size:var(--text-xs)}
.teams-section>h2,.forecast h2,.luina-content>section>h2{margin:0 0 var(--space-2);font:600 var(--text-xs) var(--font-mono);text-transform:uppercase;letter-spacing:.05em;color:var(--ink-3)}
.shift-team{margin-bottom:var(--space-6)}
.shift-team>header{display:flex;align-items:center;gap:var(--space-2);margin-bottom:var(--space-2)}
.shift-team h3{margin:0;font-size:var(--text-sm)}
.shift-table{overflow:auto;border:1px solid var(--line);border-radius:var(--radius-card);background:var(--surface)}
.shift-table table{width:100%;border-collapse:collapse;font-variant-numeric:tabular-nums}
.shift-table th,.shift-table td{height:43px;padding:var(--space-3);text-align:left;border-top:1px solid var(--line);white-space:nowrap}
.shift-table thead th{border:0;background:var(--surface-2);color:var(--ink-3);font:600 var(--text-xs) var(--font-mono);letter-spacing:.07em;text-transform:uppercase}
.shift-table td:nth-child(n+4),.shift-table thead th:nth-child(n+4){text-align:right}
.shift-table td strong,.shift-table td small{display:block}
.shift-table td small{color:var(--ink-3)}
.is-away{opacity:.55}
.is-offhours{opacity:.72}
.routing-switch{display:inline-flex;align-items:center;min-height:34px;padding:5px 10px;border:0;background:transparent;cursor:pointer;border-radius:var(--radius-pill)}
.routing-switch:hover{background:var(--surface-2)}
.routing-switch:focus-visible,.shift-toast button:focus-visible,summary:focus-visible{outline:2px solid var(--ink);outline-offset:2px}
.switch-track{display:block;width:34px;height:20px;padding:2px;border-radius:var(--radius-pill);background:var(--ink);transition:background .12s}
.switch-knob{display:block;width:16px;height:16px;border-radius:50%;background:var(--surface);transform:translateX(14px);transition:transform .12s}
.routing-switch:disabled{cursor:wait;opacity:.45}
.routing-switch[aria-checked="false"] .switch-track{background:var(--ink-4)}
.routing-switch[aria-checked="false"] .switch-knob{transform:translateX(0)}
/* Итог отделён от таблицы воздухом, а не толщиной линии (#235). Замер показал, что
   линия и так вдвое толще обычного разделителя и заметно темнее его, — не хватало
   не контраста, а паузы перед итогом. Отступ ставится СНИЗУ предыдущей строки, а не
   сверху итоговой: тогда воздух остаётся над линией, и она читается верхней границей
   блока итогов, а не подчёркиванием последней строки данных.
   `:has` выбран потому, что перед итогом стоит то строка менеджера, то раскрывашка
   «Не работают сегодня»; nth-child здесь разъехался бы при первой смене состава.
   Браузер без `:has` просто игнорирует правило и показывает прежний вид. */
.shift-table tbody tr:has(+ .team-total)>*{padding-bottom:var(--space-5)}
.team-total td{border-top:2px solid var(--line-strong);background:var(--surface-2);font-family:var(--font-mono);font-weight:700}
.shift-table details>summary,.mobile-shift details>summary{padding:var(--space-2);color:var(--ink-3);cursor:pointer}
.shift-table details table{margin-top:var(--space-1)}
.shift-note{display:flex;justify-content:space-between;gap:var(--space-5);padding:var(--space-3) var(--space-3);border:1px solid var(--line);border-radius:var(--radius-md);background:var(--surface-2);color:var(--ink-2);font-size:var(--text-xs)}
.mobile-shift{display:none}
.shift-toast{position:fixed;right:24px;bottom:24px;z-index:var(--z-toast);display:flex;align-items:center;gap:var(--space-5);max-width:420px;padding:var(--space-3) var(--space-3);border-radius:9px;background:var(--ink);color:white;box-shadow:var(--shadow-pop)}
.shift-toast[hidden]{display:none}
.shift-toast button{border:0;background:transparent;color:white;text-decoration:underline;cursor:pointer}
.routing-static{display:inline-flex;align-items:center;justify-content:center;min-height:34px;padding:5px 10px;color:var(--ink-3);font:500 var(--text-xs) var(--font-sans)}
@media(max-width:700px){
  .shift-head{flex-direction:column;align-items:stretch}
  .shift-summary,.shift-summary.has-cold{grid-template-columns:repeat(2,minmax(0,1fr))}
  .shift-summary>div{border-top:1px solid var(--line)}
  .shift-summary>div:nth-child(odd){border-left:0}
  .shift-summary>div:nth-child(-n+2){border-top:0}
  .shift-summary>div:last-child{grid-column:1/-1}
  .shift-summary.has-cold>div:last-child{grid-column:auto}
  .forecast-grid{grid-template-columns:1fr}
  .forecast-grid article{border-left:0;border-top:1px solid var(--line)}
  .forecast-grid article:first-child{border-top:0}
  .desktop-shift{display:none}
  .mobile-shift{display:block}
  .shift-card{margin-bottom:var(--space-2);padding:var(--space-3);border:1px solid var(--line);border-radius:var(--radius-card);background:var(--surface)}
  .shift-card header,.shift-card footer,.card-metrics,.mobile-shift .mobile-total{display:flex;align-items:center;justify-content:space-between;gap:var(--space-2)}
  .shift-card header strong,.shift-card header small{display:block}
  .shift-card header small{color:var(--ink-3);font-size:var(--text-xs)}
  .shift-card .routing-switch{flex:none}
  .card-metrics{margin:var(--space-3) 0;color:var(--ink-3);font-size:var(--text-xs)}
  .card-metrics b,.shift-card footer b,.mobile-shift .mobile-total b{color:var(--ink);font-family:var(--font-mono)}
  .shift-card footer{padding-top:var(--space-2);border-top:1px solid var(--line);font-size:var(--text-xs)}
  .mobile-shift .mobile-total{flex-wrap:wrap;margin-top:var(--space-5);padding:var(--space-3);background:var(--surface-2);border-radius:var(--radius-md);font-size:var(--text-xs)}
  .mobile-shift .mobile-total strong{width:100%}
  .shift-note{display:block}
  .shift-note span{display:block}
  .shift-note span+span{margin-top:var(--space-1)}
  .shift-toast{inset:auto 12px 78px;max-width:none}
  .shift-head{gap:var(--space-3)}
  .shift-summary b{font-size:var(--text-xl)}
}
.shift-table table{min-width:1060px;table-layout:fixed}
/* Ширина «Раздачи» стоит по самому широкому, что в ней бывает, — это подпись
   строки итогов «10 в раздаче» (замер: 113px с отступами), а не тумблер (54px)
   и не заголовок (76px). Запас у колонки со свободной шириной один — «Менеджер»:
   при `table-layout:fixed` он забирает остаток, поэтому остальные колонки
   получают ровно объявленное и не раздуваются пропорционально ширине окна. */
.shift-columns .routing{width:116px}
.shift-columns .manager{width:auto}
.shift-columns .shift-hours{width:100px}
.shift-columns .received{width:80px}
.shift-columns .cold{width:70px}
.shift-columns .fact,.shift-columns .plan{width:70px}
.shift-columns .load{width:90px}
.shift-columns .last-lead{width:160px}
.shift-table .shift-disclosure>td{height:auto;padding:0}
.shift-table .shift-hidden-table{margin:0;border-top:1px solid var(--line)}
.forecast-grid .forecast-copy{min-width:0;overflow:hidden}
.forecast-grid .forecast-copy>strong,.forecast-grid .forecast-meta{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.forecast-grid .forecast-meta{margin-top:var(--space-1);color:var(--ink-3);font-size:var(--text-xs)}
.forecast-grid .forecast-meta>span{display:inline-flex;margin:0;overflow:visible;vertical-align:middle}
.forecast-grid .forecast-meta>.grade{display:inline-grid}
.shift-card header small .grade{vertical-align:middle}
.shift-card header>div{min-width:0}
.shift-card header strong{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
/* Флекс живёт во вложенном блоке, а не на самой ячейке: `display:flex` выбивает
   `th` из табличной модели, и при `border-collapse` её граница рисуется на 1px ниже
   схлопнутых границ соседей — линия над «Итого по группе» шла ступенькой (#235). */
.shift-table .manager-cell-box{display:flex;flex-wrap:wrap;align-items:center;gap:0 var(--space-2)}
.shift-table .manager-cell-box strong{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.shift-table .manager-cell-box small{flex-basis:100%;margin-left:28px}
.shift-table th small{display:block;color:var(--ink-3)}
.forecast-grid .forecast-number{color:var(--ink-2)}
.shift-table .team-total th{border-top:2px solid var(--line-strong);background:var(--surface-2);font-family:var(--font-mono);font-weight:700}
