/* CRM «Философ» — тёмно-синий и золото */

/* Шрифт Golos Text (OFL 1.1) — один переменный файл на все начертания 400–900,
   лежит локально, без внешних CDN. Пока файл не загрузится (или на медленной
   сети) — текст сразу показывается системным шрифтом, не «пропадает». */
@font-face {
  font-family: "Golos Text";
  src: url("fonts/GolosText-VF.woff2") format("woff2");
  font-weight: 400 900;
  font-style: normal;
  font-display: swap;
}

:root {
  --bg: #eef1f6;           /* светлый прохладный фон */
  --bg-soft: #e7ebf2;
  --card: #ffffff;
  --card-2: #f7f9fc;
  --ink: #1a2230;          /* графит-сапфир */
  --muted: #6b7480;
  --line: #e2e6ee;
  --accent: #1d3a66;       /* синий — ссылки/кнопки */
  --accent-ink: #142a4d;
  --sapphire: #16294a;     /* шапка */
  --sapphire-deep: #0f1d36;
  --gold: #cdb37e;
  --gold-bright: #e6d2a3;
  --gold-deep: #b07c2b;
  --danger: #c0392b;
  --warn: #b07d10;
  --ok: #2c7a4b;
  --radius: 14px;
  --shadow: 0 1px 2px rgba(20,40,80,.06), 0 6px 18px rgba(20,40,80,.07);
  --shadow-sm: 0 1px 3px rgba(20,40,80,.08);
}
html[data-theme="dark"] {
  --bg: #0c1320;
  --bg-soft: #111a29;
  --card: #16202f;
  --card-2: #1b2737;
  --ink: #e6eaf2;
  --muted: #93a0b3;
  --line: #28344700;       /* почти невидимая */
  --line: #273448;
  --accent: #5b8fd6;
  --accent-ink: #74a3e4;
  --sapphire: #0f1a2c;
  --sapphire-deep: #0a1320;
  --gold: #d8bd86;
  --gold-bright: #ecd6a4;
  --gold-deep: #d8bd86;
  --shadow: 0 1px 2px rgba(0,0,0,.3), 0 8px 24px rgba(0,0,0,.4);
  --shadow-sm: 0 1px 3px rgba(0,0,0,.35);
}
* { box-sizing: border-box; }
body {
  margin: 0; background: var(--bg); color: var(--ink);
  font: 16px/1.5 -apple-system, "Segoe UI", Roboto, "PT Sans", sans-serif;
  transition: background .2s ease, color .2s ease;
}
main { max-width: 1040px; margin: 0 auto; padding: 18px; }
main.wide { max-width: 1600px; }
h1 { font-size: 1.5rem; margin: 8px 0 16px; letter-spacing: -0.01em; }
h2 { font-size: 1.05rem; margin: 0 0 12px; }
a { color: var(--accent); }
.muted { color: var(--muted); font-weight: 400; }
.small { font-size: 0.85rem; }
.pad { padding: 12px; }

/* шапка */
.topbar {
  display: flex; align-items: center; gap: 16px; flex-wrap: wrap;
  background: var(--sapphire); color: var(--gold); padding: 15px 16px; font-weight: 500;
}
.brand { color: var(--gold); text-decoration: none; font-weight: 700; letter-spacing: 0.14em; }
.brand span { display: block; font-size: 0.6rem; font-weight: 400; letter-spacing: 0.2em; text-transform: uppercase; }
.topbar nav { display: flex; gap: 4px; flex-wrap: wrap; }
.topbar nav a {
  color: var(--gold); text-decoration: none; padding: 6px 10px; border-radius: 6px; font-size: 0.95rem; font-weight: 600;
}
.topbar nav a.on, .topbar nav a:hover { background: rgba(230,210,163,0.16); color: var(--gold-bright); }
.who { margin-left: auto; display: flex; gap: 12px; align-items: center; font-size: 0.9rem; }
.who a { color: var(--gold); text-decoration: none; }

/* карточки и списки */
.card { background: var(--card); border: 1px solid var(--line); border-radius: var(--radius); padding: 18px; margin-bottom: 16px; box-shadow: var(--shadow); }
.rows .row {
  display: flex; justify-content: space-between; gap: 12px; align-items: center;
  padding: 10px 8px; border-bottom: 1px solid var(--line);
  color: inherit; text-decoration: none;
}
.rows .row:last-child, .rows .user-block:last-child .row { border-bottom: none; }
.user-block:not(:last-child) .rename-form.show { border-bottom: 1px solid var(--line); }
a.row:hover { background: var(--card-2); }
.row-main { display: flex; flex-direction: column; min-width: 0; }
.row-main .muted { font-size: 0.85rem; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.row-side { display: flex; gap: 10px; align-items: center; flex-shrink: 0; }
.due { font-variant-numeric: tabular-nums; font-size: 0.9rem; color: var(--muted); }
.row.overdue { border-left: 4px solid var(--danger); padding-left: 8px; }
.row.overdue .due { color: var(--danger); font-weight: 600; }
.row.soon { border-left: 4px solid var(--warn); padding-left: 8px; }
.row.soon .due { color: var(--warn); font-weight: 600; }
.row.off { opacity: 0.5; }
.overdue-text { color: var(--danger); font-weight: 600; }
.soon-text { color: var(--warn); font-weight: 600; }
.danger-h { color: var(--danger); }

/* статусы */
.chip {
  font-size: 0.78rem; padding: 3px 9px; border-radius: 99px; white-space: nowrap;
  background: #eef0f2; color: var(--ink);
}
.st-new        { background: #e8ecef; }
.st-senior_distribute { background: #fff1d6; color: #8a5a16; }
.st-distribute { background: #ede4f7; color: #5a3a82; }
.st-at_ceramist { background: #fde8d6; color: #8a4b16; }
.st-design     { background: #e3ecf7; color: #1d4e79; }
.st-approval   { background: #fdf1d7; color: #7a5708; }
.st-rework     { background: #fbe3e0; color: #8c2b22; }
.st-production { background: #e2eee7; color: #21603c; }
.st-ready      { background: #d8efe0; color: #1d5634; font-weight: 600; }
.st-shipped    { background: #f0f0f0; color: var(--muted); }

/* формы */
input, select, textarea {
  font: inherit; color: inherit; background: var(--card);
  border: 1px solid var(--line); border-radius: 8px; padding: 9px 10px; width: 100%;
}
input:focus, select:focus, textarea:focus, button:focus-visible {
  outline: 2px solid var(--accent); outline-offset: 1px;
}
label { display: flex; flex-direction: column; gap: 4px; font-size: 0.9rem; margin-bottom: 10px; }
.form-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 8px 16px; }
.form-grid .span2 { grid-column: 1 / -1; }
.form-narrow { max-width: 380px; }
.filters { display: flex; gap: 8px; flex-wrap: wrap; margin-bottom: 16px; align-items: center; }
.filters input, .filters select { width: auto; flex: 1 1 160px; max-width: 320px; }
.filters input[type="month"], .filters input[type="date"] { flex: 0 0 auto; width: 170px; }
.filters .btn { flex: 0 0 auto; }
.inline-form { display: flex; gap: 8px; margin-top: 12px; }
.inline-form select { width: auto; flex: 1; }
.inline { display: inline; }

.btn {
  display: inline-block; font: inherit; cursor: pointer; text-decoration: none;
  background: var(--card); color: var(--ink); border: 1px solid var(--line);
  border-radius: 9px; padding: 8px 15px; box-shadow: var(--shadow-sm);
}
.btn:hover { border-color: var(--muted); }
.btn.primary { background: var(--accent); border-color: var(--accent); color: #fff; }
.btn.primary:hover { background: var(--accent-ink); }
.btn.warn { background: #fff; border-color: var(--warn); color: var(--warn); }
.btn.wide { width: 100%; }
.link-btn { background: none; border: none; padding: 0; font: inherit; font-size: 0.85rem; color: var(--accent); cursor: pointer; text-decoration: underline; }
.link-btn.danger { color: var(--danger); }

/* детали заказа */
.page-head { display: flex; justify-content: space-between; align-items: center; gap: 12px; flex-wrap: wrap; }
.grid2 { display: grid; grid-template-columns: 1.05fr 0.95fr; gap: 20px; }
/* Карточка наряда (компьютер): слева — закреплённые «Выполненные работы» + инфо
   и остальное; справа — закреплённая панель «Материал → Протетика/аналоги →
   Загрузки». На телефоне всё в одну колонку без закрепления. */
.od-grid.od-wide { max-width: 1500px; margin: 0 auto; }
.od-grid { display: grid; grid-template-columns: minmax(0,1fr) 380px;
  gap: 16px 22px; align-items: start; }
.od-left { display: flex; flex-direction: column; gap: 16px; min-width: 0; }
.od-right { display: flex; flex-direction: column; gap: 14px; position: sticky;
  top: 12px; align-self: start; max-height: calc(100vh - 24px); overflow-y: auto;
  padding-right: 4px; }
.od-works-pin { position: sticky; top: 12px; z-index: 3; max-height: 44vh;
  overflow-y: auto; }
.od-works-pin > .card { border: 2px solid #cf9b3a; }
/* правая панель: карточки чуть компактнее */
.od-right > .card, .od-right > section.card { margin: 0; }
.od-right::-webkit-scrollbar, .od-works-pin::-webkit-scrollbar { width: 8px; }
.od-right::-webkit-scrollbar-thumb, .od-works-pin::-webkit-scrollbar-thumb { background: #cdd6e4; border-radius: 4px; }
@media (max-width: 1000px) {
  .od-grid { display: flex; flex-direction: column; }
  .od-left { display: flex; flex-direction: column; }
  .od-left > * { order: 3; }
  .od-left > .od-order { order: 1; }        /* на телефоне инфо — первой */
  .od-left > .od-works-pin { order: 2; }    /* затем выполненные работы */
  .od-right { position: static; max-height: none; overflow: visible; }
  .od-works-pin, .od-right { top: 0; }
  .od-works-pin { position: static; max-height: none; overflow: visible; }
}
.props { display: grid; grid-template-columns: 110px 1fr; gap: 6px 12px; margin: 0; }
.props dt { color: var(--muted); font-size: 0.88rem; }
.props dd { margin: 0; }
.approve-bar { display: flex; gap: 10px; margin-top: 14px; flex-wrap: wrap; align-items: center; }
.att { display: flex; gap: 12px; align-items: center; padding: 8px 0; border-bottom: 1px solid var(--line); flex-wrap: wrap; }
.att:last-of-type { border-bottom: none; }
.att-link { font-weight: 500; text-decoration: none; }
.att-link.is-3d {
  background: var(--accent); color: #fff; padding: 8px 14px; border-radius: 8px;
}
.att-link.is-3d:hover { background: var(--accent-ink); }
.upload-form { margin-top: 14px; display: flex; gap: 8px; flex-wrap: wrap; align-items: center; }
.upload-form input[type=file] { width: auto; flex: 1 1 200px; }
.upload-form p { width: 100%; margin: 2px 0 0; }

/* комментарии */
.comment { padding: 8px 0; border-bottom: 1px solid var(--line); }
.comment:last-of-type { border-bottom: none; }
.comment-form { display: flex; gap: 8px; margin-top: 12px; align-items: flex-start; }
.comment-form textarea { flex: 1; }

/* таблица */
.table { width: 100%; border-collapse: collapse; }
.table th, .table td { text-align: left; padding: 8px 10px; border-bottom: 1px solid var(--line); }
.table th { font-size: 0.85rem; color: var(--muted); font-weight: 500; }
.table .total td { font-weight: 700; border-top: 2px solid var(--ink); }
.table td:last-child, .table th:last-child { text-align: right; font-variant-numeric: tabular-nums; }

/* вход */
.login-box { max-width: 340px; margin: 12vh auto 0; }
.login-brand { text-align: center; font-weight: 700; letter-spacing: 0.16em; font-size: 1.4rem; margin-bottom: 24px; }
.login-brand span { display: block; font-size: 0.65rem; font-weight: 400; letter-spacing: 0.22em; color: var(--muted); text-transform: uppercase; margin-top: 4px; }
.login-box form { background: var(--card); border: 1px solid var(--line); border-radius: var(--radius); padding: 20px; }

/* флеши */
.flash { padding: 10px 14px; border-radius: 8px; margin-bottom: 12px; }
.flash.ok { background: #e2eee7; color: var(--ok); }
.flash.error { background: #fbe3e0; color: var(--danger); }

@media (max-width: 640px) {
  .grid2, .form-grid { grid-template-columns: 1fr; }
  .row-side { flex-direction: column; align-items: flex-end; gap: 4px; }
  .topbar { gap: 8px; }
  .who span { display: none; }
}
@media (prefers-reduced-motion: reduce) { * { transition: none !important; } }

/* галерея пациента */
.gallery { display: grid; grid-template-columns: repeat(auto-fill, minmax(140px, 1fr)); gap: 12px; margin-top: 12px; }
.thumb { display: flex; flex-direction: column; gap: 4px; text-decoration: none; color: inherit; }
.thumb img { width: 100%; aspect-ratio: 1; object-fit: cover; border-radius: 8px; border: 1px solid var(--line); }
.att-group { margin-bottom: 8px; }
.plain-link { color: inherit; text-decoration: none; border-bottom: 1px dashed var(--muted); }
.plain-link:hover { color: var(--accent); border-bottom-color: var(--accent); }
.check-label .check-line { display: flex; gap: 6px; align-items: center; padding: 9px 0; }
.check-label input { width: auto; }

/* логотип */
.brand { display: flex; align-items: center; gap: 10px; }
.logo { height: 42px; width: auto; display: block; }
.login-logo { height: 72px; margin-bottom: 8px; }
.material-ro { padding: 8px 10px; background: #faf9f6; border: 1px dashed var(--line); border-radius: 8px; }

/* логотип в шапке */
.brand { display: flex; align-items: center; gap: 10px; }
.logo { height: 42px; width: auto; display: block; }
.brand-t span { display: block; font-size: 0.6rem; font-weight: 400; letter-spacing: 0.2em; color: rgba(205,179,126,0.78); text-transform: uppercase; }
.topbar nav a { color: var(--gold); }
.who a { color: var(--gold); }

/* сводка */
.stat-row { display: grid; grid-template-columns: repeat(3, 1fr); gap: 12px; margin-bottom: 16px; }
.stat { display: flex; flex-direction: column; gap: 2px; }
.stat b { font-size: 1.25rem; }
.ok-text { color: var(--ok); }
.table-wrap { overflow-x: auto; }
.small-btn { padding: 5px 10px; font-size: 0.85rem; }
@media (max-width: 640px) { .stat-row { grid-template-columns: 1fr; } }

/* пациент: наряд-блок */
.patient-order .po-head { display: flex; justify-content: space-between; align-items: flex-start; gap: 12px; margin-bottom: 10px; }
.po-views { margin-bottom: 10px; }

/* пациент: наряды с файлами */
.patient-order .po-head { display: flex; justify-content: space-between; align-items: flex-start; gap: 12px; margin-bottom: 10px; }
.po-views { display: flex; gap: 8px; flex-wrap: wrap; margin-bottom: 10px; }

/* метка моделировщика в списках */
.modeler-tag { display: inline-block; margin-top: 3px; font-size: 0.78rem; color: var(--accent);
               background: #e7eefb; padding: 1px 8px; border-radius: 99px; width: fit-content; }
.modeler-tag.unassigned { color: #8a6d10; background: #fdf3d6; }

/* скан-файл */
.att-link.is-scan { background: #ede4f7; color: #5a3a82; padding: 8px 14px; border-radius: 8px; }
.att-link.is-scan:hover { background: #e0d3f0; }

/* делегирование */
.switch-label { display: flex; align-items: center; gap: 8px; cursor: pointer; font-size: 0.9rem; }
.switch-label input { width: 20px; height: 20px; }

/* карточка клиники */
.form-stack { display: flex; flex-direction: column; gap: 10px; }
.note-item { padding: 10px 12px; border: 1px solid var(--line); border-radius: 8px; margin-bottom: 8px; }
.note-important { background: #fdf3d6; border-color: #e6c860; }
.note-badge { display: inline-block; background: var(--danger); color: #fff; font-size: 0.72rem; font-weight: 700; padding: 1px 7px; border-radius: 99px; vertical-align: middle; }
.note-body { white-space: pre-wrap; margin-bottom: 6px; }
.note-meta { display: flex; justify-content: space-between; align-items: center; gap: 10px; }
.note-form { display: flex; flex-direction: column; gap: 8px; margin-top: 12px; }
.check-inline { display: flex; align-items: center; gap: 6px; font-size: 0.9rem; }
.check-inline input { width: auto; }

/* долги в карточке клиники */
.debt-head { display: flex; justify-content: space-between; align-items: center; gap: 12px; flex-wrap: wrap; }
.debt-total { font-size: 0.95rem; }
.debt-total.has-debt b { color: var(--danger); }
.doctor-debt { padding: 10px 0; border-bottom: 1px solid var(--line); }
.doctor-debt:last-child { border-bottom: none; }
.doctor-debt-head { display: flex; justify-content: space-between; gap: 12px; margin-bottom: 4px; }
.unpaid-list { display: flex; flex-direction: column; gap: 2px; padding-left: 10px; }
.unpaid-row { display: flex; justify-content: space-between; gap: 12px; padding: 4px 0; text-decoration: none; color: inherit; font-size: 0.9rem; border-bottom: 1px dotted var(--line); }
.unpaid-row:hover { color: var(--accent); }

/* инлайн-материал на лицевой стороне наряда */
.material-box { margin-top: 14px; padding: 12px; border: 1px solid var(--line); border-radius: 8px; background: #f7faff; }
.material-h { font-size: 0.95rem; margin: 0 0 10px; }
.material-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 8px 14px; margin-bottom: 10px; }
@media (max-width: 640px) { .material-grid { grid-template-columns: 1fr; } }

/* структура компании */
.org-wrap { overflow-x: auto; padding: 4px; }
.orgsvg { min-width: 760px; width: 100%; height: auto; display: block; }
.reg-dept { margin-bottom: 18px; }
.reg-dept-title { font-size: 1rem; color: var(--gold-deep); margin: 0 0 6px; padding-bottom: 4px; border-bottom: 2px solid #efe6d2; }
.reg-body { white-space: pre-wrap; line-height: 1.6; }

/* === задачи 1-12: новые элементы === */
/* шире карточку заказа на больших экранах */
.page-head + .grid2 { max-width: 1100px; }
@media (min-width: 1000px){ main, .content { } }

/* комментарий фрезеровщику */
.miller-comment { display:block; margin-top:10px; font-size:.9rem; }
.miller-comment textarea { width:100%; margin-top:4px; }
.hl-note { background:#fdf3d6; padding:4px 8px; border-radius:6px; }

/* скидка */
.discount-box { margin-top:12px; border:1px solid var(--line); border-radius:8px; padding:8px 12px; }
.discount-box summary { cursor:pointer; font-weight:600; }
.strike { text-decoration: line-through; }

/* приём работы */
.inline-form { margin-top:10px; }

/* сканы — всплывающее окошко */
.files-head { display:flex; justify-content:space-between; align-items:center; gap:12px; }
.scans-hover { position:relative; }
.scans-trigger { cursor:pointer; background:#ede4f7; color:#5a3a82; padding:6px 12px; border-radius:99px; font-size:.85rem; font-weight:600; }
.scans-pop { display:none; position:absolute; right:0; top:110%; z-index:20; width:340px; max-height:340px; overflow:auto;
  background:#fff; border:1px solid var(--line); border-radius:10px; box-shadow:0 8px 24px rgba(0,0,0,.14); padding:12px; }
.scans-hover:hover .scans-pop { display:block; }
.scans-pop-head { display:flex; justify-content:space-between; align-items:center; gap:10px; margin-bottom:8px; }
.scan-row { display:flex; align-items:center; gap:8px; justify-content:space-between; padding:4px 0; border-bottom:1px dotted var(--line); font-size:.85rem; }
.scan-row a { word-break:break-all; }

.btn.small { padding:4px 10px; font-size:.8rem; }
.files-sub { font-size:.95rem; margin:14px 0 6px; color:var(--muted); }
.project-area { margin:8px 0; }
.upload-row { display:flex; gap:14px; flex-wrap:wrap; margin:10px 0; }
.upload-row .upload-form { flex:1; min-width:240px; background:#f7faff; border:1px solid #e1e9f5; border-radius:8px; padding:10px; }
.upload-label { display:block; font-size:.82rem; color:var(--muted); margin-bottom:6px; }

/* переименование пользователя */
.rename-form { display:none; gap:8px; align-items:center; padding:8px 14px 14px; background:#f7faff; }
.rename-form.show { display:flex; flex-wrap:wrap; }

/* thumbnails: фото + кнопка удалить */
.gallery .thumb { display:flex; flex-direction:column; gap:4px; }
.gallery .thumb a { display:block; }
.thumb-meta { display:flex; justify-content:space-between; align-items:center; gap:8px; }

/* Смысл и принципы — аккордеон */
.creed-card .muted.small { margin: -4px 0 12px; }
.creed { margin: 6px 0; border: 1px solid var(--line); border-radius: 10px; background: #fff;
  transition: box-shadow .15s ease; overflow: hidden; }
.creed[open] { box-shadow: 0 2px 10px rgba(15, 82, 186, .08); border-color: #c9d4e8; }
.creed > summary { cursor: pointer; padding: 14px 18px; font-weight: 600; color: var(--gold-deep);
  list-style: none; display: flex; justify-content: space-between; align-items: center; gap: 12px;
  user-select: none; }
.creed > summary::-webkit-details-marker { display: none; }
.creed > summary::after { content: "+"; font-size: 1.4rem; line-height: 1; color: var(--muted);
  font-weight: 400; transition: transform .2s ease; }
.creed[open] > summary::after { content: "−"; transform: rotate(0deg); }
.creed > summary:hover { background: #f7faff; }
.creed-body { padding: 4px 18px 18px; white-space: pre-wrap; line-height: 1.65;
  color: #21262b; border-top: 1px solid var(--line); padding-top: 14px; }

/* === правки: КТ, фото-сворачивание, VITA-модалка, PDF-регламенты === */
.files-head-right { display:flex; gap:8px; align-items:center; }
.ct-trigger { background:#dceefb; color:#15577f; }

.files-sub-row { display:flex; justify-content:space-between; align-items:center; gap:12px; margin:14px 0 6px; }
.files-sub-row .files-sub { margin:0; }

.photos-extra { margin-top:10px; }
.expand-btn { display:inline-flex; align-items:center; gap:6px; margin-top:8px; background:#f0f4fb;
  border:1px solid #d7e2f2; border-radius:8px; padding:7px 14px; font:inherit; font-size:.85rem;
  color:var(--sapphire); cursor:pointer; }
.expand-btn:hover { background:#e6eefa; }
.expand-btn .chev { transition:transform .2s ease; }
.expand-btn.open .chev { transform:rotate(180deg); }

/* кнопка-подсказка "?" */
.help-btn { display:inline-flex; align-items:center; justify-content:center; width:20px; height:20px;
  border-radius:50%; border:1.5px solid var(--sapphire); background:#fff; color:var(--sapphire);
  font-size:.78rem; font-weight:700; cursor:pointer; vertical-align:middle; margin-left:8px; padding:0; line-height:1; }
.help-btn:hover { background:var(--sapphire); color:#fff; }

/* модалка VITA */
.modal-bg { display:none; position:fixed; inset:0; background:rgba(15,22,35,.6); z-index:100;
  align-items:center; justify-content:center; padding:20px; }
.modal-bg.show { display:flex; }
.modal-box { background:#fff; border-radius:14px; max-width:680px; width:100%; max-height:92vh;
  overflow:auto; box-shadow:0 16px 48px rgba(0,0,0,.3); }
.modal-head { display:flex; justify-content:space-between; align-items:center; gap:12px;
  padding:14px 18px; border-bottom:1px solid var(--line); position:sticky; top:0; background:#fff; }
.modal-close { background:none; border:0; font-size:1.6rem; line-height:1; cursor:pointer; color:var(--muted); }
.vita-img { display:block; width:100%; height:auto; }

/* PDF-просмотрщик регламента */
.pdf-frame { width:100%; height:78vh; border:1px solid var(--line); border-radius:10px; margin-top:8px; background:#f3f5f8; }
.reg-pdf-box { background:#f7faff; border:1px solid #e1e9f5; border-radius:10px; padding:12px 14px; display:flex; flex-direction:column; gap:8px; }

/* === Таблица переделок === */
.rw-add { margin-bottom: 14px; border: 1px solid var(--line); border-radius: 8px; padding: 10px 14px; }
.rw-add summary { cursor: pointer; font-weight: 600; color: var(--gold-deep); }
.rw-form { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; margin-top: 12px; }
.rw-form label { display: flex; flex-direction: column; font-size: .82rem; color: var(--muted); gap: 4px; }
.rw-form input, .rw-form select, .rw-form textarea { font: inherit; padding: 7px 9px; border: 1px solid var(--line); border-radius: 6px; }
.rw-form .rw-wide { grid-column: 1 / -1; }
.rw-form button { grid-column: 1 / -1; justify-self: start; }
.rw-legend { display: flex; gap: 8px; margin: 6px 0 12px; flex-wrap: wrap; }
.rw-tag { display: inline-block; padding: 2px 10px; border-radius: 99px; font-size: .8rem; font-weight: 600; white-space: nowrap; }
.rw-table-wrap { overflow-x: auto; }
.rw-table { width: 100%; border-collapse: collapse; font-size: .88rem; }
.rw-table th { text-align: left; padding: 8px 10px; border-bottom: 2px solid var(--line); color: var(--muted); font-weight: 600; white-space: nowrap; }
.rw-table td { padding: 9px 10px; border-bottom: 1px solid var(--line); vertical-align: top; }
.rw-table tbody tr:hover { background: #f7faff; }
.rw-nowrap { white-space: nowrap; }
.rw-text { max-width: 260px; }
@media (max-width: 800px){ .rw-form { grid-template-columns: 1fr; } }

/* фрезеровка — всплывашка и форма */
.mill-trigger { background:#dff3e6; color:#1d6b3a; }
.mill-form { border-color:#cfe6d6; background:#f5fbf7; }

/* печать моделей — Китай / Asiga */
.print-trigger { background:#e0ecff; color:#1d4e9e; }
.print-form { border-color:#cfe0f5; background:#f5f9ff; }

/* несколько видов работ в одном наряде */
#work-types { display:flex; flex-direction:column; gap:6px; margin-bottom:6px; }
.wt-row { display:flex; gap:6px; align-items:center; }
.wt-row .wt-select { flex:1; }
.wt-row .wt-del { flex:0 0 auto; padding:6px 10px; line-height:1; }
#wt-add { margin-top:2px; }

/* список видов работ в карточке заказа */
.wt-list { margin:0; padding-left:18px; }
.wt-list li { margin:1px 0; }

/* зубная формула (одонтограмма) */
#odontogram-wrap { margin-bottom:6px; }
#odontogram { margin-top:4px; }
.odontogram-svg { width:100%; height:auto; max-width:520px; display:block; }
.odontogram-svg .tooth rect { fill:#fff; stroke:#c7ccd6; stroke-width:1.5; cursor:pointer; transition:fill .1s; }
.odontogram-svg .tooth text { font-size:14px; font-weight:600; fill:#444; pointer-events:none; user-select:none; }
.odontogram-svg .tooth:hover rect { fill:#e0ecff; }
.odontogram-svg .tooth:focus { outline:none; }
.odontogram-svg .tooth:focus rect { stroke:#1d4e9e; stroke-width:2.5; }
.odontogram-svg .tooth.sel rect { fill:#1d4e9e; stroke:#1d4e9e; }
.odontogram-svg .tooth.sel text { fill:#fff; }
.odontogram-svg .og-mid { stroke:#e3e7ee; stroke-width:1.5; }

/* непринятый наряд у печатника — горит красным, гаснет после «Взять в работу» */
.row.hot { border-left: 4px solid var(--danger); padding-left: 8px; background: #fdf2f1; }
a.row.hot:hover { background: #fbe7e4; }

/* сводка по пациентам в карточке врача */
table.summary { width: 100%; border-collapse: collapse; font-size: 0.95rem; }
table.summary th, table.summary td { padding: 8px 10px; border-bottom: 1px solid var(--line); text-align: left; vertical-align: top; }
table.summary thead th { color: var(--gold-deep); font-weight: 700; border-bottom: 2px solid #efe6d2; }
table.summary td.num, table.summary th.num { text-align: right; white-space: nowrap; }
table.summary td.pat { font-weight: 700; border-right: 1px solid var(--line); }
table.summary tfoot td { font-weight: 700; border-top: 2px solid var(--line); border-bottom: none; }
table.summary tfoot tr.with-nds td { color: var(--gold-deep); }

/* позиции к оплате внутри наряда */
.bill-label { display:block; margin-bottom:4px; }
#bill-items { display:flex; flex-direction:column; gap:6px; }
.item-row { display:flex; gap:6px; align-items:center; }
.item-row .item-name { flex:1 1 60%; }
.item-row .item-amount { flex:1 1 40%; text-align:right; }
.item-row .item-del { flex:0 0 auto; padding:6px 10px; line-height:1; }
.item-foot { display:flex; justify-content:space-between; align-items:center; margin-top:8px; gap:10px; flex-wrap:wrap; }
.item-total { font-size:1.05rem; }
.item-total b { color:var(--gold-deep); }
.item-ro { display:flex; justify-content:space-between; gap:12px; padding:3px 0; border-bottom:1px solid var(--line); }
.item-ro:last-of-type { border-bottom:none; }
.item-ro-total { font-weight:700; border-top:2px solid var(--line); border-bottom:none; }

/* позиции в карточке наряда */
.detail-items { margin-top:6px; max-width:420px; }
.detail-items .item-ro { font-size:0.95rem; }

/* Склад протетики */
.wh-tabs { display:flex; flex-wrap:wrap; gap:6px; margin-bottom:14px; }
.wh-tabs a { padding:6px 12px; border-radius:7px; background:#fff; border:1px solid var(--line); color:var(--ink); text-decoration:none; font-size:0.92rem; }
.wh-tabs a.on { background:var(--sapphire); color:var(--gold); border-color:var(--sapphire); }
.wh-table th, .wh-table td { padding:7px 9px; }
.wh-minus { background:#fdecea; }
.wh-low { background:#fff8e6; }
.wh-minus-text { color:var(--danger); font-weight:700; }
.pros-block { background:var(--card); border:1px solid var(--line); border-radius:var(--radius); padding:14px; margin:14px 0; }
.pros-block h2 { color:var(--gold-deep); }
.pros-table th, .pros-table td { padding:6px 8px; }
.pros-returned { opacity:0.5; text-decoration:line-through; }
.pros-add { margin-top:10px; }
.pros-add > summary { cursor:pointer; color:var(--gold-deep); font-weight:600; }
.btn.small { padding:3px 8px; font-size:0.85rem; }
.row-edit > summary { display:inline-block; list-style:none; }
.edit-pop { margin:8px 0; }

/* сезонные подсказки автозаказа */
.season-note { padding:10px 14px; border-radius:8px; margin-bottom:12px; font-size:0.95rem; }
.season-weak { background:#fff8e6; border:1px solid #f0e2bd; }
.season-strong { background:#eaf4ec; border:1px solid #cfe6d5; }

/* поле закупочной цены в строке позиции (Протетика, Втулки) */
.item-row .item-purchase { flex:0 0 92px; text-align:right; background:#fffdf5; }
.item-row .item-amount[readonly] { background:#f4f4f2; color:var(--ink); }

/* список сотрудников */
.emp-group h2 { color:var(--gold-deep); margin-bottom:6px; }
.emp-list { list-style:none; margin:0; padding:0; display:flex; flex-wrap:wrap; gap:6px 18px; }
.emp-list li { padding:3px 0; min-width:200px; }

/* зарплата и выполненные работы */
.works-table, .rates-table, .pay-table { width:100%; border-collapse:collapse; }
.works-table th, .works-table td, .rates-table th, .rates-table td,
.pay-table th, .pay-table td { padding:6px 8px; border-bottom:1px solid #eee; text-align:left; }
.works-table th, .pay-table th, .rates-table th { color:var(--gold-deep); font-size:13px; }
.work-add { display:flex; gap:8px; align-items:center; flex-wrap:wrap; margin-top:8px; }
.pay-table .num { text-align:right; white-space:nowrap; }
.pay-table .prem-cell { display:block; font-size:11px; color:#888; }
.pay-table .pay-total td { border-top:2px solid var(--gold); font-size:15px; }
.pay-wrap { overflow-x:auto; }
.btn-link.danger { background:none; border:none; color:#c0392b; cursor:pointer; font-size:15px; }

/* личный кабинет «Мой заработок» */
.pay-summary { padding:14px 16px; }
.pay-line { display:flex; justify-content:space-between; padding:7px 0; border-bottom:1px solid #eee; }
.pay-line:last-child { border-bottom:none; }
.pay-grand { border-top:2px solid var(--gold); margin-top:4px; padding-top:10px; font-size:1.1em; }
.pay-grand b { color:var(--gold-deep); }

/* аналоги в наряде */
.mini-table { width:100%; border-collapse:collapse; margin-top:6px; }
.mini-table th, .mini-table td { text-align:left; padding:6px 8px; border-bottom:1px solid #eee; }

/* материалы (диски) */
.subtabs { display:flex; flex-wrap:wrap; gap:6px; margin:8px 0 16px; }
.subtabs a { padding:6px 12px; border-radius:8px; background:#f1ece2; color:var(--sapphire); text-decoration:none; font-size:.92em; }
.subtabs a.on { background:var(--sapphire); color:#fff; }
.mat-form summary { cursor:pointer; font-weight:600; padding:6px 0; }
.grid-form { display:grid; grid-template-columns:repeat(auto-fit,minmax(150px,1fr)); gap:10px; align-items:end; margin-top:10px; }
.grid-form label { display:flex; flex-direction:column; font-size:.85em; gap:3px; }
.grid-form button { grid-column:1/-1; justify-self:start; }
.two-forms { display:grid; grid-template-columns:1fr 1fr; gap:12px; margin:12px 0; }
@media (max-width:700px){ .two-forms { grid-template-columns:1fr; } }
.chips-row { display:flex; gap:6px; margin:10px 0; }
.chips-row .chip { padding:4px 12px; border-radius:14px; background:#f1ece2; color:var(--sapphire); text-decoration:none; font-size:.88em; }
.chips-row .chip.on { background:var(--gold); color:#000; }
.row-edit summary { cursor:pointer; color:var(--gold-deep); font-size:.88em; }
.dot { display:inline-block; width:10px; height:10px; border-radius:50%; margin-right:5px; vertical-align:middle; }
.dot-green{background:#2e9e5b;} .dot-amber{background:#7aa53a;} .dot-yellow{background:#e0a92b;} .dot-red{background:#cf3b3b;} .dot-grey{background:#bbb;}
.budget-cards { display:grid; grid-template-columns:repeat(auto-fit,minmax(150px,1fr)); gap:12px; margin-bottom:16px; }
.bcard { padding:12px 14px; display:flex; flex-direction:column; gap:4px; }
.bcard span { color:#666; font-size:.85em; } .bcard b { font-size:1.3em; color:var(--gold-deep); }
.bcard.total b { color:var(--sapphire); }
.tag-in { color:#2e9e5b; font-weight:600; } .tag-out { color:#b07c2b; font-weight:600; }
.tag-adjust { color:#5b6bb0; font-weight:600; }
/* Замороженные материалы (без движения > 3 мес) */
.frozen-banner { background:#fbe9df; border:1px solid #e6b48a; color:#8a4b1e; }
html[data-theme="dark"] .frozen-banner { background:rgba(200,120,50,.2); border-color:rgba(200,120,50,.5); color:#eab88f; }
.frozen-row > td { background:#fdf3ec; }
html[data-theme="dark"] .frozen-row > td { background:rgba(200,120,50,.1); }
.frozen-badge { display:inline-block; font-size:11px; font-weight:600; color:#8a4b1e;
  background:#f6d9c2; border-radius:6px; padding:1px 6px; vertical-align:middle; }
html[data-theme="dark"] .frozen-badge { background:rgba(200,120,50,.28); color:#eab88f; }
/* Обязательные поля (вид/цвет для циркония) */
label.req::after { content:" — обязательно"; color:var(--danger, #c0563f); font-size:11px; font-weight:600; }
/* Подсветка найденной строки в таблице работ */
tr.hl > td { background:#fff5d6; }
html[data-theme="dark"] tr.hl > td { background:rgba(212,175,55,.22); }

/* договор */
.contract-dl { display:flex; gap:10px; flex-wrap:wrap; margin-top:14px; }

/* выпадающее меню «Протетика» */
.topbar nav .nav-drop { position: relative; }
.topbar nav .nav-drop > summary {
  list-style: none; cursor: pointer; color: var(--gold);
  padding: 6px 10px; border-radius: 6px; font-size: 0.95rem; font-weight: 600;
}
.topbar nav .nav-drop > summary::-webkit-details-marker { display: none; }
.topbar nav .nav-drop > summary.on,
.topbar nav .nav-drop > summary:hover { background: rgba(230,210,163,0.16); color: var(--gold-bright); }
.topbar nav .nav-drop-menu {
  position: absolute; top: 100%; left: 0; margin-top: 0; z-index: 60;
  background: var(--sapphire); border: 1px solid rgba(230,210,163,0.25);
  border-radius: 8px; padding: 10px 6px 6px; min-width: 190px;
  box-shadow: 0 8px 24px rgba(0,0,0,0.35); display: flex; flex-direction: column; gap: 2px;
}
.topbar nav .nav-drop-menu a { white-space: nowrap; }
/* Баннер «Работа остановлена» на карточке наряда */
.stop-banner { display:flex; align-items:center; justify-content:space-between; gap:14px;
  flex-wrap:wrap; background:#fdf1d7; color:#7a5708; border:1px solid #e6c877;
  border-radius:12px; padding:12px 16px; margin-bottom:14px; }
html[data-theme="dark"] .stop-banner { background:#3a2f12; color:#e8c56a; border-color:#6a561f; }
.kan-stopped { display:inline-block; margin-top:4px; font-size:0.75rem; font-weight:600;
  background:#fdf1d7; color:#7a5708; border-radius:6px; padding:1px 7px; }
html[data-theme="dark"] .kan-stopped { background:#3a2f12; color:#e8c56a; }
/* Выполненные работы: режим «выбрать несколько» */
.multi-toggle{ display:flex; align-items:center; gap:9px; margin:4px 0 10px; cursor:pointer; }
.multi-toggle input{ width:18px; height:18px; }
.wk-multi-list{ display:flex; flex-direction:column; gap:6px; max-height:340px; overflow-y:auto; }
.wk-multi-row{ display:flex; align-items:center; gap:10px; padding:8px 10px;
  border:1px solid var(--line); border-radius:10px; cursor:pointer; }
.wk-multi-row input[type=checkbox]{ width:18px; height:18px; flex:0 0 auto; }
.wk-multi-name{ flex:1; min-width:0; }
.wk-multi-units{ width:80px; flex:0 0 auto; }
/* «Ещё ▾» — разделы-отделы: заголовок группы */
.topbar nav .nav-more { min-width: 230px; max-height: 78vh; overflow-y: auto; }
.nav-sec-h { font-size: 0.72rem; text-transform: uppercase; letter-spacing: 0.04em;
  color: var(--gold); opacity: 0.75; padding: 8px 10px 2px; font-weight: 700; }
.nav-sec-h.nav-sec-sep { border-top: 1px solid rgba(230,210,163,0.18); margin-top: 4px; }

/* меню-«колёсико» справа (настройки, уведомления, тема, пароль) */
.who .nav-drop { position: relative; }
.who .nav-drop > summary { list-style: none; cursor: pointer; color: var(--gold); display: inline-flex; align-items: center; gap: 4px; }
.who .nav-drop > summary::-webkit-details-marker { display: none; }
.who .nav-drop-menu {
  position: absolute; top: 100%; right: 0; z-index: 60; margin-top: 6px;
  background: var(--sapphire); border: 1px solid rgba(230,210,163,0.25);
  border-radius: 8px; padding: 6px; min-width: 200px;
  box-shadow: 0 8px 24px rgba(0,0,0,0.35); display: flex; flex-direction: column; gap: 2px;
}
.who .nav-drop-menu a, .who .nav-drop-menu button {
  white-space: nowrap; text-align: left; background: none; border: 0; color: var(--gold);
  padding: 8px 10px; border-radius: 6px; cursor: pointer; font: inherit; text-decoration: none;
  display: flex; align-items: center; gap: 6px; width: 100%;
}
.who .nav-drop-menu a:hover, .who .nav-drop-menu button:hover { background: rgba(230,210,163,0.16); color: var(--gold-bright); }

/* приглашения и дни рождения */
.invite-box { display:flex; gap:8px; margin-top:8px; }
.invite-box input { flex:1; padding:8px; font-size:.85em; }
.reg-box { max-width:440px; }
.reg-clinic { margin:12px 0; text-align:left; }
.reg-label { font-weight:600; margin-bottom:6px; }
.reg-clinic .radio { display:block; margin:4px 0; font-weight:400; }
.reg-clinic .radio input { width:auto; margin-right:6px; }
.bday-card { border-left:4px solid var(--gold); }
.bday-row { display:flex; justify-content:space-between; gap:10px; padding:6px 0; border-bottom:1px solid #eee; flex-wrap:wrap; }
.bday-row:last-child { border-bottom:none; }
.bday-when { color:var(--gold-deep); font-weight:600; white-space:nowrap; }

/* коррекции врача */
.rework-form textarea { width:100%; margin-bottom:6px; }
.corr-latest { border-left:3px solid var(--gold); padding:8px 12px; margin-bottom:12px; }
.corr-old { margin:6px 0; }
.corr-old > summary { cursor:pointer; color:var(--gold-deep); font-weight:600; }
.corr-files { display:flex; flex-wrap:wrap; gap:8px; margin:8px 0; }
.corr-media { max-width:180px; max-height:180px; border-radius:8px; border:1px solid #e5ddcd; }

/* поле количества единиц в позиции наряда */
.item-row .item-qty { flex:0 0 64px; text-align:center; background:#fffdf5; }

/* отдел продаж: контакты и активности */
.contact-ro { display:flex; justify-content:space-between; align-items:flex-start; gap:8px; padding:8px 0; border-bottom:1px solid #eee5d3; }
.chip.lpr { background:var(--gold-deep); color:#fff; }
.contact-form, .sales-form { display:flex; flex-wrap:wrap; gap:6px; margin-top:10px; }
.contact-form { display:grid; grid-template-columns:1fr 1fr; gap:8px; align-items:start; }
.contact-form input, .contact-form select { width:100%; flex:none; }
.contact-form .cf-actions { grid-column:1 / -1; display:flex; gap:14px; align-items:center; }
.contact-form .check-line { display:flex; align-items:center; gap:6px; white-space:nowrap; margin:0; }
.contact-form .check-line input { width:auto; }
.sales-form { flex-direction:column; }
.sales-row { display:flex; flex-wrap:wrap; gap:6px; }
.sales-row > * { flex:1 1 160px; }
.sales-remind { display:flex; align-items:center; gap:6px; white-space:nowrap; }
.sales-stat { display:flex; flex-wrap:wrap; gap:6px; margin-bottom:10px; }
.sales-feed { margin-top:14px; }
.sales-item { border-left:3px solid #ddd; padding:6px 12px; margin-bottom:10px; }
.sales-item.deal { border-left-color:#3a9b6b; }
.sales-item.reject { border-left-color:#c0563f; }
.sales-head { display:flex; align-items:center; gap:8px; }
.sales-next { margin-top:4px; background:#fbf6ea; padding:4px 8px; border-radius:6px; display:flex; align-items:center; gap:8px; flex-wrap:wrap; }
.btn.small { padding:2px 8px; font-size:.85em; }
.chip.small { font-size:.8em; }

/* аналитика продаж */
.table-wrap { overflow-x:auto; }
table.data { width:100%; border-collapse:collapse; font-size:.95em; }
table.data th, table.data td { padding:6px 10px; text-align:center; border-bottom:1px solid #eee5d3; }
table.data th { background:var(--card-2); color:var(--accent); font-weight:600; }
table.data td:first-child, table.data th:first-child { text-align:left; }
table.data .num-ok { color:#3a9b6b; font-weight:600; }
table.data .num-bad { color:#c0563f; font-weight:600; }
.reason-row { display:flex; justify-content:space-between; padding:6px 0; border-bottom:1px solid #eee5d3; }

/* дерево регионов */
.region-node { display:flex; justify-content:space-between; align-items:center; gap:10px; padding:6px 0; border-bottom:1px solid #f0e9da; flex-wrap:wrap; }
.region-name { font-weight:500; }
.region-actions { display:flex; gap:6px; align-items:center; flex-wrap:wrap; }
.region-rename { width:160px; }

/* ---------------- канбан-доска ---------------- */
.kan-alert { font-size:.85em; padding:5px 10px; border-radius:8px; margin-bottom:6px; }
.kan-alert.bday { background:#fbeede; }
.kan-alert.sales { background:#eaf3ff; }
.kan-alert a { color:inherit; }
.board-bleed { width:100vw; position:relative; left:50%; transform:translateX(-50%); padding:0 10px; }
.kanban {
  display:flex; gap:8px; align-items:stretch;
  height:calc(100vh - 150px); overflow:hidden;
}
.kan-col {
  flex:1 1 0; min-width:0; display:flex; flex-direction:column;
  background:var(--card-2); border-radius:12px; padding:6px;
}
.kan-head {
  position:relative; overflow:hidden; border-radius:8px; padding:6px 9px; min-height:42px;
  display:flex; align-items:center; justify-content:space-between; gap:5px; cursor:default;
  color:#fff; font-weight:600; font-size:.84em; line-height:1.18;
  text-shadow:0 1px 2px rgba(0,0,0,.3);
  background: hsl(var(--hue) 62% 46%);
  transition: filter .2s ease;
}
.kan-title { white-space:normal; overflow-wrap:break-word; word-break:keep-all; hyphens:none; }
.kan-head .kan-count {
  flex:none; background:rgba(255,255,255,.28); border-radius:20px; padding:0 7px; font-size:.92em;
}
/* фирменное переливание по радуге при наведении (с золотым акцентом «Философа») */
.kan-head::after {
  content:""; position:absolute; inset:0; opacity:0; transition:opacity .25s ease;
  background:linear-gradient(90deg,#e23b3b,#ef7d2e,#f2c531,#9bd13f,#3a9b6b,var(--gold,#cdb37e),#e23b3b);
  background-size:320% 100%;
}
.kan-head:hover { filter:saturate(1.15); }
.kan-head:hover::after { opacity:1; animation:kanSweep 1.6s linear infinite; }
.kan-head:hover .kan-title, .kan-head:hover .kan-count { position:relative; z-index:1; }
@keyframes kanSweep { from { background-position:0% 50%; } to { background-position:320% 50%; } }

.kan-body { margin-top:6px; display:flex; flex-direction:column; gap:6px; overflow-y:auto; flex:1; }
.kan-body::-webkit-scrollbar { width:6px; }
.kan-body::-webkit-scrollbar-thumb { background:#e0d6bf; border-radius:6px; }
.kan-card {
  display:block; background:var(--card); border-radius:8px; padding:6px 8px;
  border-left:4px solid #cfd8e3; box-shadow:0 1px 2px rgba(20,40,80,.07);
  text-decoration:none; color:inherit; transition:transform .1s ease, box-shadow .1s ease;
}
.kan-card:hover { transform:translateY(-1px); box-shadow:0 3px 9px rgba(20,40,80,.15); }
.kan-card.urg-over { border-left-color:#e23b3b; }
.kan-card.urg-soon { border-left-color:#f2c531; }
.kan-card.urg-ok   { border-left-color:#3a9b6b; }
.kan-patient { font-weight:600; color:var(--sapphire); font-size:.9em; line-height:1.2; }
.kan-meta { font-size:.78em; color:#7c715c; margin-top:1px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.kan-due { font-size:.76em; color:#9a6a2b; margin-top:2px; }
.kan-timer { font-size:.76em; margin-top:2px; font-weight:600; display:flex; align-items:center; gap:3px; }
.kan-timer svg { width:12px; height:12px; opacity:.85; }
.kan-timer.cp-timer-ok { color:#2f7d4f; }
.kan-timer.cp-timer-soon { color:#c07d14; }
.kan-timer.cp-timer-overdue { color:#e23b3b; }
.kan-timer.cp-timer-done { color:#9a9a9a; }
.kan-handler { font-size:.78em; margin-top:3px; padding-top:3px; border-top:1px solid #f0e9da; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }

/* Поиск на канбане */
.kan-search { display:flex; align-items:center; gap:8px; margin:0 0 12px; background:#fff; border:1px solid var(--line); border-radius:10px; padding:9px 12px; max-width:560px; }
.kan-search input { border:0; outline:none; font:inherit; flex:1; background:transparent; color:inherit; }
.kan-search svg { opacity:.55; flex:none; }

/* Стол фрезеровщика */
.mill-row { display:flex; gap:10px; align-items:center; justify-content:space-between; flex-wrap:wrap; padding:9px 0; border-bottom:1px solid var(--line); }
.mill-main { display:flex; flex-direction:column; gap:2px; text-decoration:none; color:inherit; flex:1 1 220px; min-width:0; }
.mill-main b { font-size:.98rem; }
.mill-actions { display:flex; gap:6px; align-items:center; flex-wrap:wrap; }
.mill-done .mill-main b { color:var(--muted); }

/* Путевой лист */
.wb-row { display:flex; flex-wrap:wrap; gap:8px; align-items:flex-end; padding:9px 0; border-bottom:1px solid var(--line); }
.wb-edit { display:contents; }
.wb-f { display:flex; flex-direction:column; gap:2px; font-size:.72rem; color:var(--muted); flex:1 1 130px; min-width:110px; }
.wb-f input { font-size:.9rem; padding:5px 7px; width:100%; }
.wb-btns { display:flex; gap:6px; align-items:center; flex:0 0 auto; }
.wb-head { display:none; }
.wb-add { border-bottom:0; }

/* зарплата продаж */
.pay-inline { display:flex; align-items:center; gap:5px; justify-content:center; flex-wrap:nowrap; }
.pay-num { width:80px; text-align:right; }
.pay-num2 { width:52px; text-align:right; }
.grand-total { text-align:right; font-size:1.05em; padding:6px 10px; }

/* переключатель темы */
.theme-toggle {
  background: rgba(230,210,163,0.14); border: 1px solid rgba(230,210,163,0.28);
  color: var(--gold); width: 34px; height: 34px; border-radius: 9px; cursor: pointer;
  font-size: 15px; line-height: 1; padding: 0; box-shadow: none;
}
.theme-toggle:hover { background: rgba(230,210,163,0.26); }

/* расщепление оплаты: наличные / по счёту */
.cash-split { margin-top:6px; }
.cash-form { display:flex; align-items:center; gap:6px; flex-wrap:wrap; }
.cash-form label { display:flex; align-items:center; gap:6px; font-size:.9em; }
.pay-line.pay-proj { color:var(--gold-deep); font-weight:600; border-top:1px dashed var(--line); margin-top:4px; padding-top:6px; }

/* плашки: цвета успех/отказ + читаемость в тёмной теме */
.chip.ok { background:#dcefe2; color:#1d5634; }
.chip.warn { background:#fbe3df; color:#8c2b22; }
html[data-theme="dark"] .chip { background:rgba(255,255,255,.09); color:var(--ink); }
html[data-theme="dark"] .chip.ok { background:rgba(60,155,107,.24); color:#86d8aa; }
html[data-theme="dark"] .chip.warn { background:rgba(192,86,63,.26); color:#f0a48f; }
html[data-theme="dark"] .chip.lpr { background:var(--gold-deep); color:#1a2230; }
html[data-theme="dark"] .chips-row .chip { background:rgba(255,255,255,.09); color:var(--ink); }
html[data-theme="dark"] .chips-row .chip.on { background:var(--gold); color:#1a2230; }
html[data-theme="dark"] .sales-next { background:rgba(255,255,255,.06); }
html[data-theme="dark"] .kan-alert.bday { background:rgba(216,189,134,.16); }
html[data-theme="dark"] .kan-alert.sales { background:rgba(91,143,214,.16); }
html[data-theme="dark"] .flash.ok { background:rgba(60,155,107,.2); color:#86d8aa; }
html[data-theme="dark"] .flash.error { background:rgba(192,86,63,.22); color:#f0a48f; }
html[data-theme="dark"] .hl-note { background:rgba(216,189,134,.14); }

/* план продаж */
.plan-prog { margin-top:10px; }
.plan-bar { height:16px; background:var(--card-2); border:1px solid var(--line); border-radius:99px; overflow:hidden; }
.plan-bar > span { display:block; height:100%; background:linear-gradient(90deg,#cdb37e,#3a9b6b); border-radius:99px; transition:width .4s ease; }
.plan-nums { margin-top:6px; font-size:.95em; }
.pipe-row { display:flex; justify-content:space-between; align-items:center; gap:10px; padding:8px 0; border-bottom:1px solid var(--line); flex-wrap:wrap; }
.pipe-side { display:flex; align-items:center; gap:10px; }

/* фикс: поля в подписях фильтров не должны растягиваться по высоте */
.filters label { flex-direction: row; align-items: center; gap: 6px; }
.sales-remind { flex-direction: row !important; align-items: center; }
.filters .pay-num, .filters .pay-num2, .sales-remind input, .filters label input {
  flex: 0 0 auto;
}
.pay-num { width: 110px; }

/* склад протетики в тёмной теме */
html[data-theme="dark"] .wh-low { background: #2c2714; }
html[data-theme="dark"] .wh-minus { background: #311b1b; }
html[data-theme="dark"] .wh-low td, html[data-theme="dark"] .wh-minus td { color: var(--ink); }
html[data-theme="dark"] .wh-tabs a { background: var(--card-2); color: var(--ink); border-color: var(--line); }
html[data-theme="dark"] .wh-tabs a.on { background: var(--sapphire); color: var(--gold); border-color: var(--sapphire); }
html[data-theme="dark"] .row.hot { background: rgba(207,59,59,.14); }
html[data-theme="dark"] table.summary thead th { border-bottom-color: var(--line); }
html[data-theme="dark"] .note-important,
html[data-theme="dark"] .modeler-tag.unassigned,
html[data-theme="dark"] .hl-note { background: rgba(216,189,134,.16); }
html[data-theme="dark"] .row.hot { background: rgba(207,59,59,.14); }
.cash-tag { background:rgba(176,124,43,.16); color:var(--gold-deep); padding:1px 8px; border-radius:99px; font-size:.9em; white-space:nowrap; }
html[data-theme="dark"] .cash-tag { background:rgba(216,189,134,.18); color:var(--gold-bright); }

/* калькулятор цен */
.calc-warn { background:rgba(176,124,43,.12); border:1px solid rgba(176,124,43,.3); border-radius:10px; padding:12px 14px; margin-bottom:14px; font-size:.95em; }
html[data-theme="dark"] .calc-warn { background:rgba(216,189,134,.12); border-color:rgba(216,189,134,.3); }
.calc-qty { width:70px; text-align:right; }
.calc-table .calc-line { white-space:nowrap; }

/* кликабельный счётчик заказов в карточке клиники */
.count-badge { font-size:.6em; vertical-align:middle; background:var(--accent); color:#fff; padding:4px 12px; border-radius:99px; text-decoration:none; font-weight:600; white-space:nowrap; }
.count-badge:hover { background:var(--accent-ink); }

/* кликабельные числа в аналитике */
.chip-link { text-decoration:none; cursor:pointer; transition:filter .15s ease; }
.chip-link:hover { filter:brightness(1.08); text-decoration:none; }
.reason-link { display:flex; justify-content:space-between; align-items:center; padding:8px 4px; border-bottom:1px solid var(--line); text-decoration:none; color:inherit; }
.reason-link:hover { background:var(--card-2); }

/* несколько материалов в наряде */
.mat-list { display:flex; flex-direction:column; gap:8px; margin-bottom:14px; }
.mat-item { display:flex; justify-content:space-between; align-items:center; gap:10px; background:var(--card); border:1px solid var(--line); border-radius:10px; padding:8px 12px; }
.mat-item-main { display:flex; flex-direction:column; min-width:0; }
.mat-add-form { border-top:1px dashed var(--line); padding-top:12px; margin-top:4px; }
.mat-add-title { font-weight:600; margin:0 0 8px; color:var(--accent); }
.miller-comment-form { margin-top:12px; }
html[data-theme="dark"] .mat-item { background:var(--card-2); }

/* чат с врачом (задача 1) — общие классы для order_detail.html-превью и doctor_chat.html */
.chat-badge {
  display:inline-flex; align-items:center; justify-content:center;
  background:var(--danger); color:#fff; font-size:.72rem; font-weight:700;
  min-width:18px; height:18px; padding:0 5px; border-radius:99px; line-height:1;
  vertical-align:middle;
}
.topbar nav a .chat-badge { margin-left:4px; }
.chat-card { padding:0; overflow:hidden; }
.chat-details { padding:18px; }
.chat-summary { cursor:pointer; list-style:none; }
.chat-summary::-webkit-details-marker { display:none; }
.chat-summary h2 { display:inline-block; margin:0; }
.chat-summary::after { content:'▾'; float:right; color:var(--muted); transition:transform .15s ease; }
.chat-details[open] .chat-summary::after { transform:rotate(180deg); }
.chat-body { margin-top:14px; }
.chat-participants { display:flex; flex-wrap:wrap; gap:6px; align-items:center; margin-bottom:8px; }
.chip.chat-participant { display:inline-flex; align-items:center; gap:4px; background:var(--card-2); border:1px solid var(--line); }
.chat-remove-form { display:inline; }
.chat-remove { background:none; border:none; cursor:pointer; color:var(--muted); font-size:1rem; line-height:1; padding:0 0 0 2px; }
.chat-remove:hover { color:var(--danger); }
.chat-add-participant { display:flex; gap:8px; margin-bottom:14px; }
.chat-feed {
  display:flex; flex-direction:column; gap:10px; max-height:480px; overflow-y:auto;
  background:var(--bg-soft); border:1px solid var(--line); border-radius:10px; padding:12px; margin-bottom:12px;
}
.chat-empty { margin:0; text-align:center; padding:16px; }
.chat-msg { background:var(--card); border:1px solid var(--line); border-radius:10px; padding:8px 10px; max-width:88%; align-self:flex-start; }
.chat-msg.mine { align-self:flex-end; background:var(--card-2); border-color:var(--accent); }
.chat-msg.deleted { opacity:.6; }
.chat-msg-head { margin-bottom:2px; }
.chat-msg-body { white-space:pre-wrap; word-break:break-word; }
.chat-reply-quote { border-left:3px solid var(--gold-deep); padding:2px 8px; margin-bottom:4px; font-size:.85em; color:var(--muted); background:var(--bg-soft); border-radius:4px; }
.chat-msg-atts { display:flex; flex-wrap:wrap; gap:8px; margin-top:6px; }
.chat-att-img img { max-width:180px; max-height:180px; border-radius:8px; display:block; object-fit:cover; }
.chat-att-video { max-width:260px; max-height:200px; border-radius:8px; display:block; }
.chat-att-doc { display:inline-flex; align-items:center; gap:4px; text-decoration:none; background:var(--bg-soft); border:1px solid var(--line); border-radius:8px; padding:4px 10px; color:var(--ink); }
.chat-msg-actions { display:flex; gap:10px; margin-top:6px; }
.chat-reply-btn, .chat-del-btn { background:none; border:none; cursor:pointer; color:var(--muted); font-size:.8rem; padding:0; }
.chat-reply-btn:hover { color:var(--accent); }
.chat-del-btn:hover { color:var(--danger); }
.chat-form { border-top:1px solid var(--line); padding-top:10px; }
.chat-reply-preview { background:var(--bg-soft); border-radius:8px; padding:6px 10px; margin-bottom:8px; font-size:.88em; }
.chat-reply-preview button { background:none; border:none; cursor:pointer; color:var(--muted); font-size:1rem; margin-left:6px; }
.chat-input-row { display:flex; gap:8px; align-items:flex-end; }
.chat-input-row textarea { flex:1; resize:vertical; }
.chat-attach-btn { display:flex; align-items:center; justify-content:center; padding:8px 12px; cursor:pointer; }
.chat-files-preview { min-height:1em; margin-top:4px; }
html[data-theme="dark"] .chip.chat-participant { background:var(--card-2); }
html[data-theme="dark"] .chat-att-doc { background:var(--card-2); }

/* превью «Чат с врачом» на карточке наряда */
.doctor-chat-card-row { display:flex; justify-content:space-between; align-items:center; gap:12px; flex-wrap:wrap; }
.doctor-chat-card-row h2 { margin-bottom:2px; }

/* полноценная страница чата с врачом (doctor_chat.html) */
.chat-page-card { padding:18px; }
.chat-feed-page { max-height:60vh; }
.chat-order-tag-label { display:block; margin-bottom:8px; }
.chat-order-tag-label select { margin-left:6px; }
.chat-order-chip { background:var(--gold-deep); color:#fff; }
.chip-current { outline:2px solid var(--accent); outline-offset:1px; }

/* контрольные точки наряда (задача 3, шаг 2) */
.cp-recalc-row { display:flex; gap:8px; flex-wrap:wrap; align-items:end; margin-bottom:14px; padding-bottom:14px; border-bottom:1px solid var(--line); }
.cp-recalc-row label { display:flex; flex-direction:column; gap:4px; font-size:.85rem; color:var(--muted); }
.cp-list { display:flex; flex-direction:column; gap:0; }
.cp-row { display:grid; grid-template-columns:28px 1fr auto; gap:12px; align-items:start; padding:11px 0; border-bottom:1px solid var(--line); }
.cp-row:last-child { border-bottom:none; }
.cp-dot { width:28px; height:28px; border-radius:50%; background:var(--sapphire,#16294a); color:#fff; display:flex; align-items:center; justify-content:center; font-weight:700; font-size:.76rem; flex:none; }
.cp-row.cp-done .cp-dot { background:var(--muted); }
.cp-name { font-weight:600; }
.cp-when { text-align:right; white-space:nowrap; }
.cp-left { font-size:.8rem; font-weight:600; margin-top:2px; }
.cp-left.overdue { color:var(--danger); }
.cp-left.soon { color:#c07d14; }
.cp-left.ok { color:#2f7d4f; }
.cp-left.done { color:var(--muted); }
.cp-risk-note { margin-top:6px; padding:8px 10px; background:#fff0ee; border:1px solid #f2c6c0; border-radius:8px; font-size:.85rem; color:#c0392b; }
html[data-theme="dark"] .cp-risk-note { background:rgba(192,57,43,.15); border-color:rgba(192,57,43,.4); }
.cp-actions { display:flex; gap:8px; flex-wrap:wrap; margin-top:8px; }
.cp-actions form { display:flex; gap:6px; align-items:center; }
.cp-actions input[type="datetime-local"] { font-size:.8rem; padding:3px 6px; }
.cp-risk-form { display:flex; gap:6px; align-items:flex-start; flex-wrap:wrap; margin-top:8px; }
.cp-risk-form select, .cp-risk-form input[type="text"] { font-size:.8rem; padding:3px 6px; }
.cp-risk-form textarea { font-size:.8rem; padding:4px 6px; min-width:220px; min-height:2.4em; resize:vertical; }
.cp-empty { padding:10px 0; }
html[data-theme="dark"] .chat-order-chip { background:var(--gold); color:#1a2230; }

/* большой таймер текущего этапа — главное, что видит сотрудник (задача 3, шаг 2) */
.cp-timer { border-radius:12px; padding:14px 16px; margin-bottom:12px; border:1px solid var(--line); background:var(--bg-soft); }
.cp-timer-stage { font-weight:600; font-size:.95rem; }
.cp-timer-text { font-size:1.6rem; font-weight:700; margin-top:2px; }
.cp-timer-ok .cp-timer-text { color:#2f7d4f; }
.cp-timer-soon .cp-timer-text { color:#c07d14; }
.cp-timer-overdue .cp-timer-text { color:var(--danger); }
.cp-timer-done .cp-timer-text { color:var(--muted); }
.cp-timer-actions { display:flex; gap:8px; flex-wrap:wrap; align-items:center; margin-top:10px; }
.cp-timer-actions form { display:inline; }
.cp-manage { margin-top:10px; }
.cp-manage summary { margin-bottom:10px; }
.cp-risk-details { margin-top:4px; }

/* ============================================================
   РЕДИЗАЙН · ЭТАП 1 — «быстрые победы» (2026-07-24)
   Слой уточнений поверх существующих правил (в CSS выигрывает то,
   что ниже) — шрифт, дополнительные токены, полировка кнопок, полей,
   карточек, бейджей, состояний и иконки. Ничего из вёрстки не ломает:
   меняется только внешний вид уже существующих классов.
   ============================================================ */

/* --- дополнительные токены (задел под следующие этапы) --- */
:root{
  /* сетка отступов 8px */
  --s1:4px; --s2:8px; --s3:12px; --s4:16px; --s5:24px; --s6:32px;
  /* семантические цвета статусов (фон + текст) */
  --ok-bg:#e2f3ea;   --ok-fg:#2f855a;
  --warn-bg:#fbf0d9; --warn-fg:#b7791f;
  --err-bg:#fbe6e4;  --err-fg:#c1392f;
  --info-bg:#e4eefb; --info-fg:#2b6cb0;
  --focus:#3d6098;
  /* движение */
  --dur:180ms; --ease:cubic-bezier(.2,.6,.2,1);
}
html[data-theme="dark"]{
  --ok-bg:rgba(60,155,107,.20);  --ok-fg:#7fd3a5;
  --warn-bg:rgba(216,175,99,.18);--warn-fg:#e0b463;
  --err-bg:rgba(192,86,63,.22);  --err-fg:#f0a48f;
  --info-bg:rgba(91,143,214,.18);--info-fg:#8bb5ea;
  --focus:#d8bd86;
}

/* --- шрифт: Golos Text как основной, системный — фолбэк --- */
body{
  font-family:"Golos Text", system-ui, -apple-system, "Segoe UI", Roboto, "PT Sans", sans-serif;
  -webkit-font-smoothing:antialiased; text-rendering:optimizeLegibility;
}
h1,h2,h3{ letter-spacing:-.015em; }
.num,.due,.pay-num,.pay-num2,.grand-total,.cp-timer-text{ font-variant-numeric:tabular-nums; }

/* --- кнопки: удобнее пальцу, чётче состояния --- */
.btn{
  display:inline-flex; align-items:center; justify-content:center; gap:6px;
  min-height:40px; font-weight:600; border-radius:10px;
  transition:background var(--dur) var(--ease), border-color var(--dur) var(--ease), transform var(--dur) var(--ease);
}
.btn:active{ transform:translateY(1px); }
.btn.small,.btn-link,.link-btn{ min-height:0; }
.btn.primary:hover{ filter:brightness(1.06); }

/* --- поля ввода: удобная высота на телефоне, мягкий фокус --- */
input,select,textarea{ border-radius:10px; }
@media (max-width:640px){
  input,select,textarea{ min-height:44px; font-size:16px; } /* 16px — чтобы iOS не зумил при фокусе */
  textarea{ min-height:auto; }
}
input:focus,select:focus,textarea:focus,button:focus-visible,a:focus-visible{
  outline:2px solid var(--focus); outline-offset:1px;
}

/* --- карточки: мягче тень, единый радиус --- */
.card{ box-shadow:0 1px 2px rgba(16,32,60,.05), 0 4px 14px rgba(16,32,60,.06); }
html[data-theme="dark"] .card{ box-shadow:0 1px 2px rgba(0,0,0,.3), 0 6px 16px rgba(0,0,0,.4); }

/* --- шапка: чуть отделить тенью, ссылки — спокойнее --- */
.topbar{ box-shadow:0 1px 0 rgba(0,0,0,.06), 0 2px 8px rgba(16,32,60,.08); }
.topbar nav a{ transition:background var(--dur) var(--ease), color var(--dur) var(--ease); }

/* --- бейджи/чипы: единый вес и форма --- */
.chip{ font-weight:600; letter-spacing:.005em; }

/* --- флеши: добавляем предупреждение/инфо + иконостойкий вид --- */
.flash{ display:flex; align-items:center; gap:8px; font-weight:500; border:1px solid transparent; }
.flash.ok{ background:var(--ok-bg); color:var(--ok-fg); border-color:color-mix(in srgb, var(--ok-fg) 24%, transparent); }
.flash.error{ background:var(--err-bg); color:var(--err-fg); border-color:color-mix(in srgb, var(--err-fg) 24%, transparent); }
.flash.warn{ background:var(--warn-bg); color:var(--warn-fg); }
.flash.info{ background:var(--info-bg); color:var(--info-fg); }

/* --- иконки (инлайновый SVG-спрайт), выравнивание с текстом --- */
.ic{ width:20px; height:20px; flex:none; vertical-align:-4px; }
.ic-sm{ width:16px; height:16px; flex:none; vertical-align:-3px; }
.ic-lg{ width:24px; height:24px; flex:none; vertical-align:-5px; }
.theme-toggle svg{ width:18px; height:18px; display:block; }
.topbar nav a svg, .who a svg{ vertical-align:-3px; }

/* --- канбан-карточка: чуть современнее (радиус/тень), без смены логики --- */
.kan-card{ border-radius:10px; transition:transform var(--dur) var(--ease), box-shadow var(--dur) var(--ease); }

/* --- мобильные зоны нажатия в навигации --- */
@media (max-width:640px){
  .topbar nav a, .topbar nav .nav-drop > summary{ padding:10px 12px; }
  .who .theme-toggle{ width:40px; height:40px; }
}

/* ============================================================
   РЕДИЗАЙН · ЭТАП 2 — ключевые экраны на телефоне (2026-07-24)
   1) Меню в шапке сворачивается за кнопку-бургер (на телефоне не занимает
      пол-экрана). 2) Канбан — свайп между колонками + вкладки-переходы.
   На десктопе всё как было: бургер и вкладки скрыты.
   ============================================================ */

/* кнопка-бургер (на десктопе скрыта) */
.nav-burger{
  display:none; background:rgba(230,210,163,.14); border:1px solid rgba(230,210,163,.28);
  color:var(--gold); width:40px; height:40px; border-radius:10px; cursor:pointer; padding:0;
  align-items:center; justify-content:center;
}
.nav-burger:hover{ background:rgba(230,210,163,.26); }
.nav-burger svg{ width:22px; height:22px; }

/* вкладки канбана (на десктопе скрыты) */
.kan-tabs{ display:none; }

@media (max-width:760px){
  /* --- шапка: меню за бургером --- */
  .nav-burger{ display:inline-flex; margin-left:auto; order:2; }
  .topbar{ flex-wrap:wrap; row-gap:0; }
  .topbar .brand{ order:1; }
  .topbar nav, .topbar .who{ order:3; flex-basis:100%; display:none; }
  .topbar.nav-open nav, .topbar.nav-open .who{ display:flex; }
  .topbar.nav-open nav{ flex-direction:column; align-items:stretch; gap:2px; margin-top:8px; }
  .topbar.nav-open nav a,
  .topbar.nav-open nav .nav-drop > summary{ padding:12px; border-radius:8px; font-size:1rem; }
  .topbar.nav-open nav .nav-drop{ position:static; }
  .topbar.nav-open nav .nav-drop-menu{
    position:static; box-shadow:none; border:none; min-width:0;
    background:rgba(255,255,255,.05); padding:4px 6px 6px 18px; margin-top:2px;
  }
  .topbar.nav-open .who{
    margin-top:10px; justify-content:flex-start; gap:18px; align-items:center;
    border-top:1px solid rgba(230,210,163,.2); padding-top:12px;
  }
  .topbar.nav-open .who span{ display:inline; }

  /* --- канбан: вкладки + горизонтальный свайп между колонками --- */
  .kan-tabs{
    display:flex; gap:6px; overflow-x:auto; padding:2px 10px 8px; margin:0 0 4px;
    -webkit-overflow-scrolling:touch; scrollbar-width:none;
  }
  .kan-tabs::-webkit-scrollbar{ display:none; }
  .kan-tabs button{
    flex:none; white-space:nowrap; border:1px solid var(--line); background:var(--card);
    color:var(--muted); font:inherit; font-size:.85rem; font-weight:600; padding:8px 13px;
    border-radius:99px; cursor:pointer; display:inline-flex; align-items:center; gap:6px; min-height:38px;
  }
  .kan-tabs button .kt-count{ background:var(--card-2); border-radius:20px; padding:0 7px; font-size:.85em; }
  .kan-tabs button.active{ background:hsl(var(--hue) 62% 46%); color:#fff; border-color:transparent; }
  .kan-tabs button.active .kt-count{ background:rgba(255,255,255,.28); }

  .kanban{
    height:auto; overflow-x:auto; overflow-y:visible; gap:10px; padding-bottom:8px;
    scroll-snap-type:x mandatory; -webkit-overflow-scrolling:touch; scrollbar-width:none;
  }
  .kanban::-webkit-scrollbar{ display:none; }
  .kan-col{ flex:0 0 90%; scroll-snap-align:center; }
  .kan-body{ max-height:none; overflow:visible; }
  .board-bleed{ padding:0 10px; }
}

/* ============================================================
   РЕДИЗАЙН · ЭТАП 2б — иерархия карточки наряда (2026-07-24)
   Самый плотный экран. Наводим читаемость: подписи-«микрокапс», чёткие
   заголовки блоков, выразительнее шапка, мягче вложенные рамки, иконки
   в заголовках (см. order_detail.html). Только внешний вид, логика та же.
   ============================================================ */

/* заголовок наряда: имя пациента крупно, номер — золотой акцент */
.page-head h1{ font-size:1.5rem; }
.page-head h1 .muted{ color:var(--gold-deep); font-weight:700; font-size:1.05rem; letter-spacing:.01em; }
html[data-theme="dark"] .page-head h1 .muted{ color:var(--gold); }

/* заголовки блоков в карточках: единый выразительный стиль с иконкой */
.card > h2, .card > h3.material-h{
  display:flex; align-items:center; gap:8px; font-size:1.12rem; margin-bottom:14px;
  padding-bottom:10px; border-bottom:1px solid var(--line);
}
.card > h2 svg, .card > h3 svg{ color:var(--gold-deep); }
html[data-theme="dark"] .card > h2 svg{ color:var(--gold); }

/* список «подпись — значение»: подписи микрокапсом, значения чётче */
.props{ grid-template-columns:132px 1fr; gap:11px 14px; align-items:start; }
.props dt{
  font-size:.72rem; text-transform:uppercase; letter-spacing:.045em; font-weight:600;
  color:var(--muted); padding-top:2px; line-height:1.35;
}
.props dd{ font-weight:500; font-variant-numeric:tabular-nums; }
.props dd b{ font-weight:700; }
@media (max-width:640px){ .props{ grid-template-columns:1fr; gap:2px 0; }
  .props dt{ margin-top:8px; } .props dd{ margin-bottom:2px; } }

/* цены и позиции — моноширинные цифры, тоньше разделители */
.item-ro{ font-variant-numeric:tabular-nums; }
.item-ro-total{ border-top:1px solid var(--border-strong,var(--line)); }

/* мягче вложенные «рамки в рамках» */
.material-box, .discount-box, .rw-add, .reg-pdf-box, .upload-row .upload-form{
  border-color:var(--line); background:var(--card-2);
}
.material-ro{ background:var(--card-2); border-style:solid; }
.mat-item{ box-shadow:none; }

/* «Взять в работу» и другие первичные действия — золотом, заметнее */
.card .inline-form > .btn:first-child{ }  /* без изменений логики, задел */

/* ============================================================
   РЕДИЗАЙН · ЭТАП 4 — «Мой заработок» плотными плитками (2026-07-24)
   Мотивационный экран для сотрудника: сумма-герой считывается мгновенно,
   рядом плитки KPI. Подробная раскладка — ниже, под «Из чего складывается».
   ============================================================ */
.earn-hero{ text-align:center; padding:22px 16px; }
.earn-hero .eh-label{ color:var(--muted); font-size:.9rem; font-weight:600; }
.earn-hero .eh-sum{ font-size:2.6rem; font-weight:800; letter-spacing:-.02em; margin:6px 0 6px; line-height:1.05; }
.earn-hero .eh-proj{
  display:inline-flex; align-items:center; gap:6px; font-size:.85rem; font-weight:600;
  color:var(--gold-deep); background:rgba(176,124,43,.10); padding:5px 13px; border-radius:99px;
}
html[data-theme="dark"] .earn-hero .eh-proj{ color:var(--gold); background:rgba(216,189,134,.14); }

.kpis{ display:grid; grid-template-columns:repeat(2,1fr); gap:12px; margin-bottom:16px; }
@media (min-width:600px){ .kpis{ grid-template-columns:repeat(4,1fr); } }
.kpis .kpi{ padding:14px 16px; margin-bottom:0; }
.kpi .k-lbl{ color:var(--muted); font-size:.72rem; font-weight:600; text-transform:uppercase; letter-spacing:.03em; }
.kpi .k-val{ font-size:1.5rem; font-weight:800; margin-top:6px; font-variant-numeric:tabular-nums; line-height:1.1; }
.kpi .k-sub{ color:var(--muted); font-size:.75rem; margin-top:3px; }

/* ============================================================
   РЕДИЗАЙН · ЭТАП 3 — иконки вместо эмодзи (пачка 1: частые экраны)
   Заменили цветные эмодзи на иконки в шапках/бейджах/метках доски, сводки,
   списка нарядов, пациента, врачей. Здесь — размеры иконок в компактных
   местах, чтобы они стояли ровно и не были великоваты. Стрелки (→ ← ▾)
   намеренно оставлены текстом — они и так читаются чисто.
   ============================================================ */
.kan-due svg, .kan-handler svg, .kan-meta svg{ width:13px; height:13px; vertical-align:-2px; opacity:.85; }
.modeler-tag svg{ width:13px; height:13px; vertical-align:-2px; }
.chat-badge svg{ width:12px; height:12px; vertical-align:-1px; }
.kan-alert svg{ width:15px; height:15px; vertical-align:-3px; }
.kan-alert.bday svg{ color:var(--gold-deep); }
h2 svg, h1 svg{ vertical-align:-3px; }

/* ============================================================
   РЕДИЗАЙН · ЭТАП 5 — пустые состояния и скелетоны (2026-07-24)
   Раньше пустой список = голая серая строчка. Теперь — аккуратный блок
   с иконкой, заголовком и подсказкой (как в макете). Скелетон загрузки —
   готовый компонент для будущих асинхронных мест (система серверная,
   поэтому массово он не нужен, но пусть будет под рукой).
   ============================================================ */
.empty-state{ text-align:center; padding:40px 20px; color:var(--muted); }
.empty-state .es-ic{ width:44px; height:44px; color:var(--muted); opacity:.45; margin-bottom:10px; }
.empty-state .es-title{ font-weight:700; color:var(--ink); font-size:1.05rem; }
.empty-state .es-sub{ font-size:.9rem; margin-top:4px; }
td .empty-state, .empty-state.compact{ padding:22px 16px; }

/* скелетон загрузки (для будущих асинхронных блоков) */
.skel{ background:linear-gradient(90deg, var(--card-2) 25%, var(--line) 37%, var(--card-2) 63%);
  background-size:400% 100%; animation:skelSweep 1.3s ease infinite; border-radius:8px; }
@keyframes skelSweep{ 0%{ background-position:100% 0 } 100%{ background-position:-100% 0 } }
@media (prefers-reduced-motion: reduce){ .skel{ animation:none } }

/* ============================================================
   РЕДИЗАЙН · ЭТАП 4-аналитика — плотные таблицы (2026-07-24)
   1) Ровные числа: в аналитике продаж числовые колонки — вправо и
      моноширинными, чтобы разряды стояли столбиком. 2) Липкие шапки:
      длинные таблицы (зарплата, склад, финансы) держат заголовок при
      прокрутке. Короткие таблицы не меняются — вертикальный скролл
      появляется, только если содержимое реально не влезло.
   ============================================================ */
/* контейнеры таблиц становятся прокручиваемыми при переполнении */
.table-wrap, .pay-wrap, .rw-table-wrap{ max-height:78vh; overflow:auto; }

/* липкая шапка + непрозрачный фон, чтобы строки не просвечивали под ней */
table.data th, .pay-table th, .works-table th, .rates-table th,
.rw-table th, .wh-table th, table.summary thead th{
  position:sticky; top:0; z-index:2;
}
table.data th{ background:var(--card-2); }
.pay-table th, .works-table th, .rates-table th, .rw-table th,
.wh-table th, table.summary thead th{ background:var(--card); }
html[data-theme="dark"] .pay-table th, html[data-theme="dark"] .works-table th,
html[data-theme="dark"] .rates-table th, html[data-theme="dark"] .rw-table th,
html[data-theme="dark"] .wh-table th, html[data-theme="dark"] table.summary thead th{ background:var(--card-2); }

/* аналитика: числа вправо и моноширинными, первая колонка (название) — влево */
table.data td, table.data th{ text-align:right; font-variant-numeric:tabular-nums; }
table.data td:first-child, table.data th:first-child{ text-align:left; }

/* ============================================================
   РЕДИЗАЙН · ЭТАП 6 — нижняя навигация на телефоне (2026-07-24)
   Панель снизу с 4 частыми для роли разделами + «Ещё» (открывает полное
   меню — то же, что бургер, чтобы ни один раздел не потерялся). Набор
   разделов зависит от роли (см. build_mobile_nav в app.py). На десктопе
   панель скрыта — там остаётся привычное верхнее меню.
   ============================================================ */
.botnav{ display:none; }

@media (max-width:760px){
  .botnav{
    display:flex; position:fixed; left:0; right:0; bottom:0; z-index:50;
    background:var(--card); border-top:1px solid var(--line);
    padding:6px 2px calc(6px + env(safe-area-inset-bottom));
    box-shadow:0 -2px 12px rgba(16,32,60,.10);
  }
  .botnav a, .botnav .botnav-more{
    flex:1 1 0; min-width:0; display:flex; flex-direction:column; align-items:center; gap:3px;
    background:none; border:0; cursor:pointer; text-decoration:none; font:inherit;
    color:var(--muted); font-size:10.5px; font-weight:600; line-height:1.1;
    padding:4px 2px; border-radius:10px; -webkit-tap-highlight-color:transparent;
  }
  .botnav a span, .botnav .botnav-more span{ max-width:100%; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
  .botnav a .ic, .botnav .botnav-more .ic{ width:23px; height:23px; }
  .botnav a.active, .botnav .botnav-more.active{ color:var(--sapphire); }
  html[data-theme="dark"] .botnav{ background:var(--card); }
  html[data-theme="dark"] .botnav a.active, html[data-theme="dark"] .botnav .botnav-more.active{ color:var(--gold); }

  /* место под панель, чтобы контент/футер не прятались под ней */
  body{ padding-bottom:66px; }

  /* «Ещё» заменяет бургер — верхний бургер на телефоне прячем */
  .nav-burger{ display:none !important; }
}
