/* Общий контракт оболочки. Подключать ПОСЛЕ остальных CSS.
   Не меняет --row/--head, grid, размеры таблиц и пользовательские цвета. */
:root {
  --ui-font:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",sans-serif;
  --ui-xs:11px; --ui-sm:12px; --ui-body:14px; --ui-control:16px; --ui-title:20px; --ui-display:24px;
  --ui-leading:1.35; --ui-close-size:44px; --ui-close-radius:8px;
}
:root:has(.mobile-head) { --ui-close-size:44px; }
@media (pointer:coarse) { :root { --ui-close-size:44px; } }
/* Повышенная специфичность нужна против компактности admin.css.
   Только компонент, не все кнопки окна. */
html :is(body,#roles-dialog,#madmin-sheet,#notifications-dialog) button.ui-close.ui-close {
  display:inline-flex; align-items:center; justify-content:center;
  flex:0 0 var(--ui-close-size); box-sizing:border-box;
  width:var(--ui-close-size); height:var(--ui-close-size);
  min-width:var(--ui-close-size); min-height:var(--ui-close-size);
  padding:0; margin:0; border:1px solid var(--rule); border-radius:var(--ui-close-radius);
  background:var(--surface); color:var(--ink); cursor:pointer;
  font:400 var(--ui-title)/var(--ui-leading) var(--ui-font);
  text-decoration:none; box-shadow:none;
}
html :is(body,#roles-dialog,#madmin-sheet,#notifications-dialog) button.ui-close.ui-close:hover { background:var(--hover, var(--surface-2)); }
html :is(body,#roles-dialog,#madmin-sheet,#notifications-dialog) button.ui-close.ui-close:focus-visible { outline:2px solid var(--accent); outline-offset:2px; }
/* Опт-ин для новых панелей; старую геометрию не нормализуем вслепую. */
.ui-panel { font:400 var(--ui-body)/var(--ui-leading) var(--ui-font); }
.ui-panel :is(input,select,textarea,button) { font-family:var(--ui-font); line-height:var(--ui-leading); }
.ui-panel h2 { font-size:var(--ui-title); line-height:var(--ui-leading); }
.ui-panel small { font-size:var(--ui-sm); }
.ui-number { font-variant-numeric:tabular-nums; }
/* Ошибки — контрастный текст, красный маркер сохраняет смысл. */
html body :is(.card-blocked-reason,.kb-blocked-reason,.dc-err,.error,.profile-message,[data-error],.btn.danger) { color:var(--danger-ink); }
html body .card-blocked-reason { line-height:var(--ui-leading); }
html body .late-badge.overdue { background:var(--danger-ink); color:var(--surface); }
/* Dialog имеет собственный цвет фона полей, не наследует мобильный surface-2. */
dialog { --field-bg:var(--surface); }
/* Контраст измеряется на поверхностях, а не только на белом фоне.
   --accent остаётся цветом марки; для заливки с белой надписью отдельный токен. */
html[data-theme="light"]:not([data-appearance="classic"]) { --muted:#526273; --accent:#805B20; --sidebar-title:#A5B4C3; }
html[data-theme="dark"]:not([data-appearance="classic"]) { --sidebar-title:#B7C4D4; }
html[data-appearance="classic"] { --sidebar-title:#B0B5BA; --action-bg:#B93414; }
html:not([data-appearance="classic"]) { --action-bg:#805B20; }
html[data-theme="dark"]:not([data-appearance="classic"]) { --action-bg:#805B20; }
html body .topbar :is(#btn-theme,#btn-notif) { color:var(--topbar-fg); }
html body .sidebar :is(.proj-meta,.da-chev) { color:var(--sidebar-title); }
html body #nd-back { color:var(--ink); }
html body .bar-label { color:var(--ink); }
html body .wl-leg { color:var(--ink); }
/* Белый на #B42318 = 6.57:1 — проходит; прежний --critical #FF3B30 давал 3.55:1. */
html body :is(.late-badge.overdue,.badge.overdue,.row-action.del) { background:#B42318; color:#FFFFFF; }
html body :is(.badge.cancelled,.row-action.hide) { background:#526273; color:#FFFFFF; }
html[data-appearance="classic"] body .btn.primary,
html body :is(.appr-choice-btn.active,.sb-btn.active,.kb-btn.active,.theme-btn.active,.btn-primary,.wave3-primary) { background:var(--action-bg); color:#FFFFFF; border-color:var(--action-bg); }
/* Активная вкладка мобильного таб-бара: белый на янтарном нечитаем (1.99:1) */
html body .tab-btn.active { color:#FFFFFF; background:var(--action-bg,#805B20); border-radius:8px; }
html body .tab-btn.active .tab-label { color:#FFFFFF; }
html body #logout { color:#FFFFFF; background:#B42318; border:1px solid #B42318; }
html body #logout:hover { background:#8F1D14; border-color:#8F1D14; }
html body #logout:focus-visible { outline:2px solid var(--topbar-fg); outline-offset:2px; }
html[data-theme="dark"][data-appearance="classic"] body .tab-btn.active { color:var(--accent); }
@media(max-width:600px) {
  html body #report-dialog :is(button,input,select),
  html body #approvals-dialog :is(button,input,select) { min-height:44px; }
}
:is(input,textarea)::placeholder { color:var(--muted); opacity:1; }
:is(input,textarea,select):is(:autofill,:-webkit-autofill) {
  box-shadow:0 0 0 1000px var(--field-bg, var(--surface)) inset !important;
  -webkit-text-fill-color:var(--ink) !important; caret-color:var(--ink);
}
