/* ===== расширенный рабочий процесс ===== */

#shiftSearch{
  direction:ltr;
  text-align:left;
}

#shiftSearch:focus::placeholder{
  color:transparent;
}

.employee-archive-button{
  margin-top:8px;
  color:var(--ink2);
  background:transparent;
}

.shift-period-seg{
  grid-template-columns:
    repeat(4,minmax(0,1fr));
}

.shift-period-seg button{
  min-width:0;
  padding-right:7px;
  padding-left:7px;
}

.shift-range-card .row{
  min-height:52px;
}

.shift-range-card input{
  width:74px;
  padding:5px 0;
  border:0;
  outline:0;
  background:transparent;
  color:var(--ink);
  text-align:right;
  font:inherit;
  font-variant-numeric:tabular-nums;
}

.payout-card{
  overflow:visible;
}

.payout-block{
  overflow:hidden;
  border-top:1px solid var(--line);
}

.payout-block:first-child{
  border-top:0;
  border-radius:var(--r) var(--r) 0 0;
}

.payout-block:last-child{
  border-radius:0 0 var(--r) var(--r);
}

.payout-summary{
  width:100%;
  min-height:66px;
  border-right:0;
  border-bottom:0;
  border-left:0;
  background:transparent;
  color:var(--ink);
  text-align:left;
  cursor:pointer;
}

.payout-block:first-child .payout-summary{
  border-top:0;
}

.payout-summary::after{
  content:"⌄";
  flex:none;
  margin-left:2px;
  color:var(--ink3);
  font-size:17px;
  transition:transform .22s ease;
}

.payout-block.open .payout-summary::after{
  transform:rotate(180deg);
}

.payout-summary-right{
  flex:none;
  display:grid;
  justify-items:end;
  gap:4px;
}

/* «3 250 из 6 250 ₽» не должно ломаться посередине. */
.payout-summary-right .v{
  white-space:nowrap;
}

.payout-status{
  color:var(--ink3);
  font-size:9.5px;
  font-weight:650;
  letter-spacing:.04em;
  white-space:nowrap;
}

.payout-status.partial{
  color:var(--gold);
}

.payout-status.paid{
  color:var(--green);
}

/*
  Подробности выплаты раскрываются высотой, как и остальные продолжения
  плиток (styles/inline-fields.css). Раньше блок появлялся в раскладке
  сразу на всю высоту и только потом проявлялся ключевыми кадрами: сам
  скачок layout это не смягчало, а при закрытии разметка убирала блок
  мгновенно, и обратного хода не было вовсе.
*/
.payout-expanded{
  overflow:hidden;
  border-top:1px solid var(--line);
  background:var(--tint-soft);

  opacity:1;
  transition:opacity .24s ease .04s;
}

.field-reveal:not(.on) .payout-expanded{
  opacity:0;
  transition:opacity .16s ease;
}

.payout-breakdown{
  padding:15px 16px 4px;
}

.payout-detail-title{
  margin-bottom:9px;
  color:var(--ink3);
  font-size:10px;
  font-weight:700;
  letter-spacing:.14em;
  text-transform:uppercase;
}

.payout-breakdown > .s{
  margin-top:3px;
  color:var(--ink2);
  font-size:12px;
}

.payout-source-list{
  margin-top:12px;
  overflow:hidden;
  border:1px solid var(--line);
  border-radius:12px;
  background:var(--surf);
}

.payout-source-row{
  min-height:57px;
  padding:10px 12px;
  display:flex;
  align-items:flex-start;
  justify-content:space-between;
  gap:12px;
  border-top:1px solid var(--line);
}

.payout-source-row:first-child{
  border-top:0;
}

.payout-source-main{
  min-width:0;
  display:grid;
  gap:2px;
}

.payout-source-main strong{
  overflow:hidden;
  color:var(--ink);
  font-size:12.5px;
  font-weight:550;
  line-height:1.35;
  text-overflow:ellipsis;
  white-space:nowrap;
}

.payout-source-main span,
.payout-source-main small{
  color:var(--ink2);
  font-size:10.5px;
  line-height:1.35;
}

.payout-source-main small{
  white-space:normal;
  overflow-wrap:anywhere;
}

.payout-source-row > b{
  flex:none;
  padding-top:1px;
  font-size:12.5px;
  font-weight:550;
  white-space:nowrap;
}

.payout-progress{
  margin:11px 16px 0;
  padding:11px 0;
  display:flex;
  align-items:baseline;
  justify-content:space-between;
  gap:12px;
  border-top:1px solid var(--line);
  color:var(--ink2);
  font-size:11.5px;
}

/* Подпись состояния уступает место сумме, а не наоборот. */
.payout-progress > span{
  min-width:0;
}

.payout-progress strong{
  flex:none;
  color:var(--ink);
  font-weight:550;
  white-space:nowrap;
}

.payout-history{
  margin:0 16px 10px;
  overflow:hidden;
  border:1px solid var(--line);
  border-radius:12px;
  background:var(--surf);
}

.payout-record{
  min-height:50px;
  padding:9px 11px;
  display:grid;
  grid-template-columns:minmax(0,1fr) auto 28px;
  align-items:center;
  gap:9px;
  border-top:1px solid var(--line);
}

.payout-record:first-child{
  border-top:0;
}

.payout-record > div{
  min-width:0;
  display:grid;
  gap:2px;
}

.payout-record small{
  overflow-wrap:anywhere;
  color:var(--ink2);
  font-size:10.5px;
}

.payout-record > b{
  font-size:12.5px;
  font-weight:550;
  white-space:nowrap;
}

.payout-record > button{
  width:28px;
  height:28px;
  padding:0;
  border:0;
  border-radius:8px;
  background:transparent;
  color:var(--rust);
  font-size:18px;
  cursor:pointer;
}

.payout-editor{
  margin:0 16px 12px;
  padding:12px;
  display:grid;
  gap:10px;
  border:1px solid var(--line);
  border-radius:12px;
  background:var(--surf);
}

.payout-field{
  min-width:0;
  display:grid;
  grid-template-columns:108px minmax(0,1fr);
  align-items:center;
  gap:10px;
  color:var(--ink2);
  font-size:12px;
}

/*
  Поле формы задаёт свой размер текста, а не наследует 12px подписи.
  iOS увеличивает страницу при фокусе в поле меньше 16px и после этого
  не возвращает масштаб: дальше вся страница остаётся увеличенной.
*/
.payout-field-input{
  width:100%;
  min-width:0;
  max-width:100%;
  min-height:44px;
  padding:10px 12px;

  border:1px solid var(--line2);
  border-radius:10px;
  outline:0;

  background:var(--tint-soft);
  color:var(--ink);

  font-family:inherit;
  font-size:16px;
  line-height:1.25;
  text-align:left;

  appearance:none;
  -webkit-appearance:none;
}

.payout-field-input.amount{
  text-align:right;
  font-variant-numeric:tabular-nums;
}

.payout-field-input::placeholder{
  color:var(--ink3);
}

/*
  Дата выбирается тем же календарём, что и остальные даты приложения.
  Нативное поле type=date на iOS не укладывается в отведённую ширину
  и показывает дату в английском формате, чужом для остальных экранов.
*/
.payout-date{
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:10px;
  cursor:pointer;

  transition:
    background-color .18s ease,
    border-color .18s ease;
}

/* Нажатие отзывается так же, как у остальных строк-кнопок приложения. */
.payout-date.touch-active{
  background:var(--tint);
}

@media (hover:hover) and (pointer:fine){
  .payout-date:hover{
    background:var(--tint);
  }
}

.payout-date::after{
  content:"";

  width:7px;
  height:7px;
  flex:none;

  border-right:1.5px solid var(--ink3);
  border-bottom:1.5px solid var(--ink3);

  transform:rotate(45deg) translateY(-2px);
}

.payout-editor-actions{
  display:grid;
  grid-template-columns:1fr 1fr;
  gap:8px;
}

.payout-editor-actions .btn{
  margin-top:0;
}

.payout-editor-actions .primary{
  border-color:var(--gold-line);
  background:var(--gold-soft);
  color:var(--gold);
}

.payout-add{
  width:calc(100% - 32px);
  margin:0 16px 14px;
  border-color:var(--gold-line);
  color:var(--gold);
}

.payout-add:disabled{
  opacity:.48;
  pointer-events:none;
}

.payout-empty{
  padding:14px 12px;
  color:var(--ink3);
  font-size:11.5px;
  text-align:center;
}

/*
  Итоги без выбранного сотрудника. Строка объясняет пустоту, поэтому
  читается как обычный текст, а не как приглушённая сноска.
*/
.stats-empty{
  padding:20px 16px;
  color:var(--ink2);
  font-size:13px;
  line-height:1.45;
  text-align:center;
}

.tariff-history-actions{
  padding:10px 12px 12px;
  display:grid;
  grid-template-columns:1fr 1fr;
  gap:8px;
}

.tariff-history-actions button,
.tariff-inline-close{
  min-height:38px;
  padding:8px 12px;
  border:1px solid var(--line2);
  border-radius:10px;
  background:var(--surf);
  color:var(--ink2);
  font:inherit;
  font-size:12px;
  cursor:pointer;
}

.tariff-history-actions .warn{
  border-color:var(--rust-line);
  color:var(--rust);
}

.tariff-history-editing{
  padding:12px;
}

.tariff-history-edit-head{
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:12px;
}

.tariff-history-edit-head strong,
.tariff-history-edit-head small{
  display:block;
}

.tariff-history-edit-head strong{
  font-size:14px;
  font-weight:550;
}

.tariff-history-edit-head small{
  margin-top:2px;
  color:var(--ink2);
  font-size:10.5px;
}

.tariff-inline-close{
  flex:none;
  min-height:34px;
}

.tariff-history-edit-body{
  margin-top:11px;
}

.tariff-history-edit-body .card + .card{
  margin-top:10px;
}

.tariff-inline-save{
  margin-top:10px;
}

@media (max-width:480px){
  .shift-period-seg button{
    font-size:11px;
  }

  .payout-summary{
    gap:9px;
    padding-right:11px;
  }

  /*
    Сумма больше не делит ширину с подписью состояния, поэтому на телефоне
    подписи хватает места целиком: «Частично выплачено» перестало
    обрезаться на середине слова.
  */
  .payout-status{
    max-width:min(34vw,150px);
    overflow:hidden;
    text-overflow:ellipsis;
  }

  .payout-field{
    grid-template-columns:1fr;
    gap:6px;
  }
}

@media (prefers-reduced-motion:reduce){
  .payout-expanded{
    transition:none;
  }

  .payout-date{
    transition:none;
  }
}

/*
  У тарифа своё завершение: сохранить и отменить стоят парой внутри его
  блока, а не растворяются в кнопках всей карточки ПВЗ. Главное действие
  справа — там же, где «Готово» у карточки.
*/
.tariff-editor-actions{
  display:grid;
  grid-template-columns:1fr 1fr;
  gap:8px;
}

.tariff-editor-actions .btn{
  margin-top:10px;
}

/*
  Индивидуальная ставка живёт в строке своего ПВЗ.

  Отдельного списка ставок нет: назначение на пункт и условия работы на
  нём — одно и то же решение, и раздельные списки заставляли проходить по
  одним и тем же ПВЗ дважды. Поэтому строка состоит из двух кнопок:
  слева отметка «работает здесь», справа — ставка, которая эту строку и
  раскрывает.
*/
.employee-point-item{
  border-top:1px solid var(--line);
}

.employee-point-item:first-child{
  border-top:0;
}

.employee-point-line{
  display:flex;
  align-items:stretch;
}

/* Кнопка отметки внутри строки свою рамку уже не рисует. */
.employee-point-line .employee-point{
  flex:1;
  min-width:0;
  border-top:0;
}

.employee-point-rate{
  display:flex;
  align-items:center;
  gap:7px;
  flex:none;
  max-width:52%;

  padding:10px 15px 10px 8px;

  border:0;
  background:transparent;
  color:var(--ink2);

  font-size:12.5px;
  text-align:right;
  cursor:pointer;

  transition:color var(--ui-base) ease;
}

.employee-point-rate-value{
  min-width:0;

  overflow:hidden;
  text-overflow:ellipsis;
  white-space:nowrap;
}

/* Та же стрелка, что у остальных раскрывающихся строк приложения. */
.employee-point-rate::after{
  content:"";
  flex:none;

  width:6px;
  height:6px;

  border-right:1.5px solid var(--ink3);
  border-bottom:1.5px solid var(--ink3);

  transform:translateY(-2px) rotate(45deg);

  transition:transform .32s cubic-bezier(.32,.72,0,1);
}

.employee-point-rate[aria-expanded="true"]::after{
  transform:translateY(1px) rotate(-135deg);
}

.employee-point-item.is-open{
  background:var(--tint-soft);
}

/* Своя ставка отличается от «по тарифу ПВЗ» не только словами. */
.employee-rate-own{
  color:var(--gold);
  font-weight:600;
}

.employee-rate-editor .point-row > .t{
  flex:1;
  width:auto;
  min-width:0;

  overflow:hidden;
  text-overflow:ellipsis;
  white-space:nowrap;
}

/* У строки со ставкой подпись своей ширины, а растягивается поле. */
.employee-rate-editor label.row > .t{
  flex:none;
  width:auto;
}

.employee-rate-editor label.row > input{
  flex:1;
  min-width:0;
}

.employee-rate-editor .point-value{
  flex:none;
  max-width:60%;
}

.employee-rate-editor{
  padding:0 0 12px;
  border-top:1px solid var(--line);
}

.employee-rate-drop{
  width:calc(100% - 28px);
  margin:10px 14px 0;
}

.employee-rate-editor input{
  text-align:right;
}

.employee-rate-actions{
  display:grid;
  grid-template-columns:1fr 1fr;
  gap:8px;
  padding:0 14px;
}

.employee-rate-actions .btn{
  margin-top:10px;
}

.employee-rate-note{
  padding:12px 14px;
  color:var(--ink3);
  font-size:12.5px;
  line-height:1.45;
}

.employee-rate-history{
  margin-top:12px;
  padding:12px 14px 0;
  border-top:1px solid var(--line);
}

.employee-rate-history-title{
  margin-bottom:8px;

  color:var(--ink3);
  font-size:10.5px;
  font-weight:650;
  letter-spacing:.08em;
  text-transform:uppercase;
}

.employee-rate-history-row{
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:10px;

  padding:7px 0;
  border-top:1px solid var(--line);
}

.employee-rate-history-row:first-of-type{
  border-top:0;
}

.employee-rate-history-main{
  min-width:0;

  overflow:hidden;
  text-overflow:ellipsis;
  white-space:nowrap;

  font-size:13.5px;
}

.employee-rate-history-actions{
  display:flex;
  flex:none;
  gap:10px;
}

.employee-rate-history-actions button{
  border:0;
  padding:0;

  background:transparent;
  color:var(--ink2);

  font-size:12.5px;
  cursor:pointer;
}

.employee-rate-history-actions button.warn{
  color:var(--rust);
}

.employee-rate-hint{
  padding-top:8px;
}

/*
  Откуда ставка — строка расчёта, но не итог: тише суммы и рядом с ней.
*/
.calc-rate-source span{
  color:var(--ink3);
}

.calc-rate-source b{
  color:var(--ink2);
  font-weight:500;
}

/*
  Период команды в «Итогах» — строка выплаты в режиме «Все сотрудники».

  Шапку и раскрытие строка берёт у выплаты (payout-block,
  payout-summary, payout-expanded); здесь только то, что есть у периода
  сверх неё: состояние, расхождения, люди и управление. Состояние
  окрашено сдержанно — это статус процесса, а не предупреждение.
*/
.payroll-period-status{
  color:var(--ink3);
  white-space:nowrap;
}

.payroll-period-status.checked{
  color:var(--gold);
}

.payroll-period-status.closed,
.payroll-period-status.paid{
  color:var(--green);
}

.payroll-period-status.stale,
.payroll-period-status.mismatched{
  color:var(--rust);
}

/*
  Из кого складывается сумма периода — строка на человека. Нажатие
  открывает его расчёт: из общей картины в частную тем же выбором, что и
  сверху экрана.
*/
.payroll-person-row{
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:12px;
  width:100%;
  min-height:52px;

  padding:9px 12px;
  border:0;
  border-top:1px solid var(--line);
  background:transparent;
  color:var(--ink);
  text-align:left;
}

.payroll-person-row:first-child{
  border-top:0;
}

.payroll-person-main{
  display:grid;
  gap:2px;
  min-width:0;
}

.payroll-person-name{
  overflow:hidden;
  text-overflow:ellipsis;
  white-space:nowrap;

  font-size:12.5px;
  font-weight:550;
}

.payroll-person-meta{
  color:var(--ink3);
  font-size:11.5px;
}

.payroll-person-meta .neg{
  color:var(--rust);
}

.payroll-person-meta .over{
  color:var(--gold);
}

.payroll-person-row b{
  flex:none;
  font-size:13px;
  font-weight:550;
  white-space:nowrap;
}

/* Проверка, история, отчёты и действия — под списком людей. */
.payroll-period-manage{
  padding:4px 16px 14px;
}

/*
  Выплата сотрудника знает о периоде команды: его состояние, отчёт по
  этому человеку и дорога к самому периоду.
*/
.payout-period-note{
  display:flex;
  flex-wrap:wrap;
  align-items:center;
  justify-content:space-between;
  gap:0 12px;

  padding:4px 16px 6px;
  border-top:1px solid var(--line);

  color:var(--ink3);
  font-size:12px;
}

.payout-period-note b{
  font-weight:600;
}

.payout-period-links{
  display:flex;
  gap:12px;
}

.payroll-period-actions{
  display:flex;
  gap:8px;
  margin-top:10px;
}

.payroll-period-actions .btn{
  flex:1;
  margin-top:0;
  padding:10px;
  font-size:13.5px;
}

/*
  Проверка периода: одна строка с итогом и, если развернуть, находки.

  Находка — кнопка, потому что из неё идут смотреть проблему. Цвет
  сдержанный: это список того, что стоит посмотреть, а не тревога.
*/
.payroll-review-summary{
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:10px;
  width:100%;

  margin-top:10px;
  padding:9px 12px;
  border:1px solid var(--line);
  border-radius:12px;

  background:var(--tint-soft);
  color:var(--ink2);

  font-size:12.5px;
  text-align:left;
}

.payroll-review-summary.clean{
  color:var(--green);
  border-color:var(--green-line);
}

.payroll-review-summary.has-questions{
  color:var(--ink);
}

.payroll-review-count{
  flex:none;
  min-width:20px;
  padding:1px 6px;
  border-radius:999px;

  background:var(--rust);
  color:#fff;

  font-size:11px;
  font-weight:650;
  text-align:center;
}

.payroll-findings{
  display:flex;
  flex-direction:column;
  margin-top:8px;
}

.payroll-finding{
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:10px;
  width:100%;

  padding:9px 2px;
  border:0;
  border-top:1px solid var(--line);
  background:transparent;
  color:var(--ink);
  text-align:left;
}

.payroll-finding:first-child{
  border-top:0;
}

.payroll-finding-main{
  display:flex;
  flex-direction:column;
  gap:2px;
  min-width:0;
}

.payroll-finding-main strong{
  font-size:13.5px;
  font-weight:550;
}

.payroll-finding-main small{
  overflow:hidden;
  text-overflow:ellipsis;
  white-space:nowrap;

  color:var(--ink3);
  font-size:12px;
}

.payroll-finding-error .payroll-finding-main strong{
  color:var(--rust);
}

.payroll-finding-go{
  flex:none;
  color:var(--ink3);
  font-size:16px;
}

/*
  Лист перерасчёта: строка на смену со старой и новой суммой и выбором,
  что с ней сделать. Старая сумма зачёркнута — разница читается без
  подписи.
*/
.recalc-rows{
  padding:2px 0;
}

.recalc-row{
  padding:12px 14px;
  border-top:1px solid var(--line);
}

.recalc-row:first-child{
  border-top:0;
}

.recalc-row-head{
  display:flex;
  align-items:flex-start;
  justify-content:space-between;
  gap:12px;
}

.recalc-row-main{
  display:flex;
  flex-direction:column;
  gap:2px;
  min-width:0;
}

.recalc-row-main strong{
  font-size:14px;
  font-weight:550;
  letter-spacing:-.15px;
}

.recalc-row-main small{
  overflow:hidden;
  text-overflow:ellipsis;
  white-space:nowrap;

  color:var(--ink3);
  font-size:12px;
}

.recalc-row-sum{
  display:flex;
  flex-direction:column;
  align-items:flex-end;
  flex:none;
  gap:1px;
}

.recalc-row-sum s{
  color:var(--ink3);
  font-size:12px;
}

.recalc-row-sum b{
  font-size:15px;
  font-weight:600;
  letter-spacing:-.2px;
}

.recalc-row-modes{
  margin-top:10px;
  padding:0;
}

.recalc-row-modes .seg button{
  font-size:12px;
}

.recalc-row-manual{
  margin-top:8px;
  padding-right:0;
  padding-left:0;
  border-top:0;
}

.recalc-row-manual input{
  text-align:right;
}

.recalc-row-note{
  margin-top:6px;
  color:var(--ink3);
  font-size:11.5px;
}

.recalc-summary .total .v.pos{
  color:var(--green);
}

.recalc-summary .total .v.neg{
  color:var(--rust);
}

/*
  Перерасчёт открывается поверх карточки, из которой пришёл: ставка уже
  сохранена, а решение про смены — следующий шаг того же действия.
  Поэтому лист и его шторка стоят слоем выше обычных листов, как окно
  подтверждения поверх формы.
*/
#recalcVeil{
  z-index:46;
}

#recalcSheet{
  z-index:47;
}

/*
  Недоплата и переплата — это факты периода, а не предупреждения формы:
  стоят рядом с его цифрами и окрашены по смыслу.
*/
.payroll-period-gaps{
  display:flex;
  flex-wrap:wrap;
  gap:6px;
  margin-top:6px;
}

.payroll-gap{
  padding:3px 9px;
  border:1px solid var(--line2);
  border-radius:999px;
  font-size:11.5px;
  font-weight:600;
}

.payroll-gap.underpaid{
  border-color:var(--rust-line);
  color:var(--rust);
}

.payroll-gap.overpaid{
  border-color:var(--gold-line);
  color:var(--gold);
}

/* История периода: события списком, с эффектом и временем. */
.payroll-history-toggle{
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:10px;
  width:100%;

  margin-top:10px;
  padding:9px 12px;
  border:1px solid var(--line);
  border-radius:12px;

  background:transparent;
  color:var(--ink2);
  font-size:12.5px;
  text-align:left;
}

.payroll-history-count{
  flex:none;
  padding:1px 7px;
  border-radius:999px;
  background:var(--tint2);
  color:var(--ink3);
  font-size:11px;
  font-weight:650;
}

.payroll-events{
  margin-top:8px;
}

.payroll-event{
  padding:9px 2px;
  border-top:1px solid var(--line);
}

.payroll-event:first-child{
  border-top:0;
}

.payroll-event-head{
  display:flex;
  align-items:baseline;
  justify-content:space-between;
  gap:10px;
}

.payroll-event-head strong{
  font-size:13.5px;
  font-weight:550;
}

.payroll-event-effect{
  flex:none;
  font-size:13px;
  font-weight:600;
}

.payroll-event-effect.pos{
  color:var(--green);
}

.payroll-event-effect.neg{
  color:var(--rust);
}

.payroll-event-body{
  margin-top:2px;
  color:var(--ink2);
  font-size:12.5px;
}

/*
  Причина правки закрытого периода: человек вводил её отдельно, и до
  сих пор она нигде не показывалась. Отбита слева волоском — это
  цитата, а не ещё одна строка данных.
*/
.payroll-event-reason{
  margin-top:4px;
  padding-left:9px;
  border-left:2px solid var(--gold-line);

  color:var(--ink2);
  font-size:12.5px;
  line-height:1.4;
}

.payroll-event-meta{
  display:flex;
  align-items:center;
  flex-wrap:wrap;
  gap:6px;

  margin-top:4px;
  color:var(--ink3);
  font-size:11.5px;
}

/*
  «После закрытия» — самый весомый признак записи: он отделяет обычное
  действие от правки утверждённого расчёта. Подписью в общем ряду он
  терялся, поэтому стоит отдельной меткой.
*/
.payroll-event-after{
  padding:1px 7px;
  border:1px solid var(--rust-line);
  border-radius:999px;

  color:var(--rust);
  font-size:10.5px;
  font-weight:600;
  white-space:nowrap;
}

/*
  Отчёты периода — второстепенные действия, ссылками, а не кнопками.

  Выглядят они ссылками, но нажимать их всё равно пальцем: без внутренних
  отступов цель была высотой в одну строку, 15 px, — вдвое ниже минимума
  для указателя. Отступы поднимают цель почти до 40 px, а отрицательные
  поля по краям и уменьшенный отступ сверху оставляют рисунок прежним.
*/
.payroll-report-actions{
  display:flex;
  flex-wrap:wrap;
  gap:6px;
  margin-top:0;
}

.payroll-report-link{
  min-height:38px;
  padding:11px 6px;
  margin:0 -6px;
  border:0;
  background:transparent;
  color:var(--ink2);
  font-size:12.5px;
  text-decoration:underline;
  text-underline-offset:3px;
}


/*
  Массовый выбор смен.

  Список остаётся тем же: меняется только то, что нажатие помечает
  строку, а не открывает её. Галочка стоит слева, на месте, которое
  иначе занимает пустое поле, — строка не съезжает и не меняет высоту.
*/
.ml-action-row{
  display:flex;
  align-items:baseline;
  justify-content:space-between;
  gap:12px;
}

.ml-action{
  padding:0;
  border:0;
  background:transparent;

  color:var(--gold);
  font-size:10px;
  font-weight:700;
  letter-spacing:.19em;
  text-transform:uppercase;
}

/*
  Режим выбора — строка управления над списком, а не ещё одна плитка.

  Своей поверхности у неё нет: ни фона, ни рамки. Раньше панель была
  приставлена к карточке списка и залита тем же тёплым оттенком, что и
  выбранные строки, — и читалась одной большой выбранной строкой, будто
  нажимается целиком. Теперь реагирует только то, что действительно
  нажимается: общий флажок и «Удалить».

  Флажок стоит в одном столбце с флажками строк: к отступу строки
  добавлен пиксель рамки карточки.
*/
.shift-select-bar{
  flex:none;

  display:flex;
  align-items:center;
  gap:12px;

  min-height:44px;
  margin:0 0 6px;
  padding:0 0 0 calc(var(--select-inline) + 1px);
}

/*
  Отступ повторяет отступ строк списка по тем же ступеням ширины
  (refinement.css, interaction-core.css). Им же пользуется флажок в
  панели выбора дней календаря.
*/
.shift-select-bar,
.sv-panel-pick{
  --select-inline:14px;
}

@media (max-width:420px){
  .shift-select-bar,
  .sv-panel-pick{
    --select-inline:12px;
  }
}

@media (max-width:370px){
  .shift-select-bar,
  .sv-panel-pick{
    --select-inline:10px;
  }
}

.shift-select-all{
  flex:none;

  display:flex;
  align-items:center;
  gap:10px;

  min-height:36px;
  padding:0;

  border:0;
  background:transparent;
  color:var(--ink);

  font-size:13.5px;
  font-weight:550;
  letter-spacing:-.1px;
}

.shift-select-count{
  flex:1;
  min-width:0;

  overflow:hidden;
  text-overflow:ellipsis;
  white-space:nowrap;

  color:var(--ink3);
  font-size:12.5px;
  font-variant-numeric:tabular-nums;
  text-align:right;
}

.shift-select-bar .shift-select-delete{
  flex:none;
  width:auto;
  min-height:36px;
  margin:0;
  padding:0 16px;

  border-radius:11px;
  font-size:13px;
}

.sh-check{
  flex:none;
  display:flex;
  align-items:center;
  justify-content:center;

  width:20px;
  height:20px;

  border:1.5px solid var(--line2);
  border-radius:6px;

  color:var(--bg);
  font-size:12px;
  font-weight:700;
  line-height:1;

  transition:
    background-color var(--ui-base) ease,
    border-color var(--ui-base) ease;
}

.sh .sh-check{
  margin-right:-2px;
}

.sh.chosen .sh-check,
.sh-check.all,
.sh-check.some{
  border-color:var(--gold);
  background:var(--gold);
}

/*
  Выбор говорит галочка, а строка лишь чуть теплеет. Раньше выбранная
  строка заливалась --gold-soft — той же заливкой, что у активной кнопки
  и открытого пункта списка, — и выглядела нажатой или наведённой, а не
  отмеченной; несколько выбранных подряд сливались в сплошную полосу.
  Наведение выбор не перекрашивает: без отдельного правила общий hover
  строки менял тёплый фон на серый, и выбранная строка под курсором
  казалась снятой.
*/
.sh.chosen{
  background:color-mix(in srgb,var(--gold) 5%,transparent);
}

@media (hover:hover) and (pointer:fine){
  .sh.chosen:hover{
    background:color-mix(in srgb,var(--gold) 8%,transparent);
  }
}
