.modal-overlay{position:fixed;inset:0;background:rgba(0,0,0,.4);backdrop-filter:blur(6px);z-index:200;display:flex;align-items:flex-end;justify-content:center}
/* Оверлей НЕ скроллится: лист ограничен высотой окна (max-height) и скроллит
   только своё тело — иначе появлялся второй скроллбар справа от карточки. */
@media(min-width:500px){.modal-overlay{align-items:flex-start;padding:24px 0}}
/* Скроллится сам лист (не оверлей): иначе панель кнопок не прижать к низу,
   и в щель под ней просвечивают поля формы. */
.modal-sheet{--sheet-px:18px;--sheet-pb:36px;background:var(--c-bg);border-radius:var(--r-xl) var(--r-xl) 0 0;padding:20px var(--sheet-px) var(--sheet-pb);width:100%;max-height:92vh;overflow-y:auto;overscroll-behavior:contain;max-width:500px}
/* max-height:100% — от content-box оверлея (fixed inset:0 минус его падинги):
   всегда равен реальному видимому окну, в отличие от vh/dvh (клавиатура,
   масштаб, эмуляции). Лист никогда не вылезает за низ экрана. */
@media(min-width:500px){.modal-sheet{--sheet-px:20px;--sheet-pb:22px;border-radius:var(--r-xl);padding:22px var(--sheet-px) var(--sheet-pb);max-height:100%}}
/* Листы с док-панелью кнопок (has-dock): flex-колонка, скроллится только
   .modal-body, футер вне скролла — всегда виден и прижат к самому низу. */
.modal-sheet.has-dock{display:flex;flex-direction:column;padding:0;overflow:hidden}
/* Верхний отступ — на заголовке, а не на теле: иначе липкая навигация секций
   прилипает ниже верхнего края, и в щели над ней просвечивают поля. */
.modal-body{flex:1 1 auto;min-height:0;overflow-y:auto;overscroll-behavior:contain;padding:0 var(--sheet-px) 16px}
.has-dock .modal-title{padding-top:20px}
@media(min-width:500px){.has-dock .modal-title{padding-top:22px}}
.patient-form-nav{position:sticky;top:0;background:var(--c-bg);z-index:2;display:flex;gap:6px;overflow-x:auto;padding:2px 0 8px;margin-bottom:8px}
.pf-nav-btn{border:1px solid var(--c-border);background:var(--c-bg);color:var(--c-text-2);border-radius:999px;padding:6px 10px;font-size:12px;font-weight:600;white-space:nowrap;cursor:pointer}
.pf-nav-btn.active{background:var(--c-primary);color:#fff;border-color:var(--c-primary)}
.modal-handle{display:none}
.seg-ctrl{display:flex;background:var(--c-bg-2);border-radius:var(--r-md);padding:3px;margin-bottom:14px;gap:2px}
.seg-btn{flex:1;padding:7px 0;font-size:13px;font-weight:500;border:none;border-radius:var(--r-sm);background:transparent;cursor:pointer;color:var(--c-text-3);transition:all var(--t-normal);display:flex;align-items:center;justify-content:center;gap:4px}
.seg-btn.active{background:var(--c-bg);color:var(--c-text);font-weight:600;box-shadow:0 1px 4px rgba(0,0,0,.12)}
.modal-title{font-size:17px;font-weight:700;margin-bottom:4px}
.modal-subtitle{font-size:12px;color:var(--c-text-2);margin-bottom:12px}
.row2{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.hint{font-size:11px;color:var(--c-primary);margin-top:3px}
.form-err{font-size:12px;color:var(--c-danger);background:var(--c-danger-bg);border-radius:var(--r-sm);padding:8px 12px;margin-bottom:10px;border:1px solid #ffcccc}
.section-divider{font-size:11px;font-weight:600;color:var(--c-text-2);text-transform:uppercase;letter-spacing:.04em;padding:8px 0 4px;margin-top:4px;border-top:.5px solid var(--c-border-light)}
/* Док-панель кнопок: непрозрачная плашка во всю ширину листа с рамкой и тенью.
   Снизу на телефоне — запас под «полоску» iPhone (без запаса кнопки лежат
   вплотную к краю экрана). */
.modal-footer{display:flex;gap:8px;align-items:center;flex-wrap:wrap;background:var(--c-bg);padding:10px var(--sheet-px) max(20px,env(safe-area-inset-bottom));border-top:1px solid var(--c-border-light);box-shadow:0 -8px 20px rgba(0,0,0,.15)}
@media(min-width:500px){.modal-footer{padding-bottom:12px}}
/* На телефоне три кнопки («Отменить госп.» + Закрыть + Сохранить) в один ряд
   не влезают и режутся по краям — «Отменить»/«Восстановить» на свою строку. */
@media(max-width:499px){.btn-cancel-patient,.btn-restore-patient{flex:1 1 100%}}
.btn-cf{flex:1;padding:12px;font-size:15px;background:var(--c-bg-2);border:none;border-radius:var(--r-md);cursor:pointer;font-weight:500}
.btn-save{flex:2;padding:12px;font-size:15px;font-weight:700;background:var(--c-primary);color:#fff;border:none;border-radius:var(--r-md);cursor:pointer}
.btn-cancel-patient{padding:12px 14px;font-size:13px;background:var(--c-danger-bg);border:1px solid var(--c-danger);border-radius:var(--r-md);cursor:pointer;color:var(--c-danger);font-weight:600;white-space:nowrap}
.btn-restore-patient{padding:12px 14px;font-size:13px;background:#eef9f1;border:1px solid #9ad8aa;border-radius:var(--r-md);cursor:pointer;color:#248a3d;font-weight:600;white-space:nowrap}.cancel-options{display:flex;flex-direction:column;gap:7px;margin-bottom:12px}
.cancel-opt-btn{padding:12px 14px;border-radius:var(--r-md);border:1.5px solid var(--c-border);background:var(--c-bg);cursor:pointer;text-align:left;font-size:14px;font-weight:500}
.cancel-opt-btn.selected{border-color:var(--c-danger);background:var(--c-danger-bg);color:var(--c-danger)}
.readonly-notice{font-size:12px;color:var(--c-text-3);background:var(--c-bg-3);border-radius:var(--r-sm);padding:8px 12px;margin-bottom:12px;border:1px solid var(--c-border)}
.send-link-row{display:flex;gap:8px;align-items:stretch;flex-wrap:wrap}
.btn-send-link{flex:1 1 140px;min-height:42px;display:inline-flex;align-items:center;justify-content:center;gap:7px;padding:10px 14px;font-size:13.5px;font-weight:600;background:var(--c-bg);color:var(--c-text);border:1px solid var(--c-border);border-radius:11px;cursor:pointer;text-align:center;transition:border-color .15s ease,background .15s ease,color .15s ease}
.btn-send-link .ic{width:16px;height:16px;flex-shrink:0}
.btn-send-link:hover{border-color:var(--c-primary);color:var(--c-primary);background:var(--c-primary-bg)}
.btn-send-link--primary{background:var(--c-primary);border-color:var(--c-primary);color:#fff}
.btn-send-link--primary:hover{background:var(--c-primary);color:#fff;opacity:.92}
.btn-send-link:disabled{opacity:.5;cursor:not-allowed}
.btn-show-qr{width:46px;min-width:46px;min-height:42px;padding:0;font-size:17px;font-weight:700;background:var(--c-bg);color:var(--c-text);border:1px solid var(--c-border);border-radius:11px;cursor:pointer;display:none;align-items:center;justify-content:center;transition:border-color .15s ease,color .15s ease}
.btn-show-qr:hover{border-color:var(--c-primary);color:var(--c-primary)}

/* ── Better shadows ── */
.modal-sheet{box-shadow:var(--shadow-lg)}

/* ── Кнопки темпа операции (молния/средняя/песочные часы/extra) ── */
.pace-btn{flex:1;min-width:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;padding:8px 4px;border:1.5px solid var(--c-border);border-radius:12px;background:var(--c-bg);font-size:13px;color:var(--c-text-2);cursor:pointer;-webkit-tap-highlight-color:transparent}
.pace-btn .pace-icon{margin-right:0}/* flex-gap уже даёт 4px — иначе двойной зазор, и подпись вылезает за рамку */
.pace-sub{font-size:10px;opacity:.72;font-weight:400;white-space:nowrap}
@media(max-width:499px){.pace-btn{font-size:12px;padding:7px 2px}.pace-sub{font-size:9px}}
/* На телефонных ширинах 4 кнопки в ряд не помещаются («Быстрая» шире рамки) —
   складываем сеткой 2×2; с 420px свободно встают в один ряд. */
@media(max-width:419px){
  #f-pace-wrap [role="radiogroup"]{flex-wrap:wrap}
  .pace-btn{flex:1 1 calc(50% - 4px)}
}

/* ── Desktop: wider modal + 2-column form grid ── */
@media(min-width:800px){
  .modal-sheet{max-width:760px}
  .patient-form-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px}
  .patient-form-grid .field.wide,
  .patient-form-grid .field:has(textarea),
  .patient-form-grid .row2,
  .patient-form-grid .section-divider,
  .patient-form-grid #f-pace-wrap,
  .patient-form-grid #f-flags-row,
  .patient-form-grid #f-difficult-wrap{grid-column:1 / -1}
}

/* Доклад дежурного */
.duty-modal{position:fixed;inset:0;background:rgba(0,0,0,.5);display:flex;align-items:center;justify-content:center;z-index:1000;padding:16px}
.duty-box{background:var(--c-bg);color:var(--c-text);border-radius:14px;max-width:560px;width:100%;max-height:88vh;overflow:auto;box-shadow:0 20px 60px rgba(0,0,0,.35)}
.duty-head{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-bottom:1px solid var(--c-border);font-size:17px}
.duty-x{border:0;background:none;font-size:24px;line-height:1;cursor:pointer;color:var(--c-text-3)}
.duty-body{padding:18px 20px}
.duty-hint{font-size:13px;color:var(--c-text-2);line-height:1.5;margin:0 0 14px}
.duty-file{display:block;margin-bottom:14px}
.duty-file input{width:100%;font-size:14px}
.duty-primary{border:0;border-radius:10px;padding:11px 18px;background:var(--c-primary);color:#fff;font-weight:800;font-size:14px;cursor:pointer}
.duty-primary:disabled{opacity:.6;cursor:wait}
.duty-result{margin-top:16px;font-size:13px;line-height:1.5}
.duty-ok{background:var(--c-success-bg);border:1px solid color-mix(in srgb,var(--c-success) 45%,var(--c-border));color:#176438;border-radius:10px;padding:11px 13px}
.duty-warn{background:var(--c-danger-bg);border:1px solid color-mix(in srgb,var(--c-danger) 40%,var(--c-border));color:var(--c-text);border-radius:10px;padding:11px 13px}
.duty-warn ul,.duty-counts ul{padding-left:18px;margin:6px 0}
.duty-counts{margin-top:12px}
.duty-muted{color:var(--c-text-3);font-size:12px;margin-top:6px}
.duty-download{display:inline-block;margin-top:14px;padding:11px 16px;border:1px solid var(--c-primary);border-radius:10px;color:var(--c-primary);font-weight:800;text-decoration:none}
.duty-field{display:block;margin-bottom:12px}
.duty-field span{display:block;font-size:12px;font-weight:700;color:var(--c-text-2);margin-bottom:4px}
.duty-field input{width:100%;font-size:14px}
