/* ==========================================================================
   ArtCRM — облик в духе системных приложений Apple.
   Один файл, без сборки. Все цвета — через токены ниже; тёмная тема —
   своя палитра (чёрная подложка, приподнятые серые карточки), а не инверсия.
   Шрифты: Onest (текст и числа, tabular-nums), коды — системный моноширинный.
   ========================================================================== */
/* Onest — свой, с этого же сайта (7 октября 2026): раньше браузер ходил
   за ним на два домена Google и ждал их стилей до первой отрисовки.
   Один переменный файл на все толщины 400–700; браузер берёт только
   нужные наборы знаков — обычно кириллицу и латиницу, 62 КБ */
@font-face {
  font-family:"Onest"; font-style:normal; font-weight:400 700; font-display:swap;
  src:url(/static/fonts/onest-cyrillic-ext.woff2) format("woff2");
  unicode-range:U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
}
@font-face {
  font-family:"Onest"; font-style:normal; font-weight:400 700; font-display:swap;
  src:url(/static/fonts/onest-cyrillic.woff2) format("woff2");
  unicode-range:U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
@font-face {
  font-family:"Onest"; font-style:normal; font-weight:400 700; font-display:swap;
  src:url(/static/fonts/onest-math.woff2) format("woff2");
  unicode-range:U+0302-0303, U+0305, U+0307-0308, U+0310, U+0312, U+0315, U+031A, U+0326-0327, U+032C, U+032F-0330, U+0332-0333, U+0338, U+033A, U+0346, U+034D, U+0391-03A1, U+03A3-03A9, U+03B1-03C9, U+03D1, U+03D5-03D6, U+03F0-03F1, U+03F4-03F5, U+2016-2017, U+2034-2038, U+203C, U+2040, U+2043, U+2047, U+2050, U+2057, U+205F, U+2070-2071, U+2074-209F, U+20D0-20DC, U+20E1, U+20E5-20EF, U+2100-2112, U+2114-2115, U+2117-2121, U+2123-214F, U+2190, U+2192, U+2194-21AE, U+21B0-21E5, U+21F1-21F2, U+21F4-2211, U+2213-2214, U+2216-22FF, U+2308-230B, U+2310, U+2319, U+231C-2321, U+2336-237A, U+237C, U+2395, U+239B-23B7, U+23D0, U+23DC-23E1, U+2474-2475, U+25AF, U+25B3, U+25B7, U+25BD, U+25C1, U+25CA, U+25CC, U+25FB, U+266D-266F, U+27C0-27FF, U+2900-2AFF, U+2B0E-2B11, U+2B30-2B4C, U+2BFE, U+3030, U+FF5B, U+FF5D, U+1D400-1D7FF, U+1EE00-1EEFF;
}
@font-face {
  font-family:"Onest"; font-style:normal; font-weight:400 700; font-display:swap;
  src:url(/static/fonts/onest-symbols.woff2) format("woff2");
  unicode-range:U+0001-000C, U+000E-001F, U+007F-009F, U+20DD-20E0, U+20E2-20E4, U+2150-218F, U+2190, U+2192, U+2194-2199, U+21AF, U+21E6-21F0, U+21F3, U+2218-2219, U+2299, U+22C4-22C6, U+2300-243F, U+2440-244A, U+2460-24FF, U+25A0-27BF, U+2800-28FF, U+2921-2922, U+2981, U+29BF, U+29EB, U+2B00-2BFF, U+4DC0-4DFF, U+FFF9-FFFB, U+10140-1018E, U+10190-1019C, U+101A0, U+101D0-101FD, U+102E0-102FB, U+10E60-10E7E, U+1D2C0-1D2D3, U+1D2E0-1D37F, U+1F000-1F0FF, U+1F100-1F1AE, U+1F1E6-1F1FF, U+1F30D-1F30F, U+1F315, U+1F31C, U+1F31E, U+1F320-1F32C, U+1F336, U+1F378, U+1F37D, U+1F382, U+1F393-1F39F, U+1F3A7-1F3A8, U+1F3AC-1F3AF, U+1F3C2, U+1F3C4-1F3C6, U+1F3CA-1F3CE, U+1F3D4-1F3E0, U+1F3ED, U+1F3F1-1F3F3, U+1F3F5-1F3F7, U+1F408, U+1F415, U+1F41F, U+1F426, U+1F43F, U+1F441-1F442, U+1F444, U+1F446-1F449, U+1F44C-1F44E, U+1F453, U+1F46A, U+1F47D, U+1F4A3, U+1F4B0, U+1F4B3, U+1F4B9, U+1F4BB, U+1F4BF, U+1F4C8-1F4CB, U+1F4D6, U+1F4DA, U+1F4DF, U+1F4E3-1F4E6, U+1F4EA-1F4ED, U+1F4F7, U+1F4F9-1F4FB, U+1F4FD-1F4FE, U+1F503, U+1F507-1F50B, U+1F50D, U+1F512-1F513, U+1F53E-1F54A, U+1F54F-1F5FA, U+1F610, U+1F650-1F67F, U+1F687, U+1F68D, U+1F691, U+1F694, U+1F698, U+1F6AD, U+1F6B2, U+1F6B9-1F6BA, U+1F6BC, U+1F6C6-1F6CF, U+1F6D3-1F6D7, U+1F6E0-1F6EA, U+1F6F0-1F6F3, U+1F6F7-1F6FC, U+1F700-1F80B, U+1F810-1F847, U+1F850-1F859, U+1F860-1F887, U+1F890-1F8AD, U+1F8B0-1F8BB, U+1F8C0-1F8C1, U+1F8D0-1F8D8, U+1F900-1F90B, U+1F93B, U+1F946, U+1F984, U+1F996, U+1F9E9, U+1FA00-1FA6F, U+1FA70-1FA7C, U+1FA80-1FAC6, U+1FAC8, U+1FACC-1FADD, U+1FADF-1FAEB, U+1FAEF-1FAFA, U+1FB00-1FBFF;
}
@font-face {
  font-family:"Onest"; font-style:normal; font-weight:400 700; font-display:swap;
  src:url(/static/fonts/onest-latin-ext.woff2) format("woff2");
  unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family:"Onest"; font-style:normal; font-weight:400 700; font-display:swap;
  src:url(/static/fonts/onest-latin.woff2) format("woff2");
  unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
:root {
  color-scheme: light;

  --page:#F5F5F7;
  --surface:#FFFFFF;
  --surface-2:#FAFAFC;
  --surface-3:#F0F0F3;
  --field-bg:#FFFFFF;
  --empty-bg:#FAFAFC;

  --ink:#1D1D1F;
  --ink-2:#3A3A3C;
  --ink-3:#636366;
  --ink-4:#69696D;

  --line:#D9D9DE;
  --line-2:#E8E8ED;
  --line-3:#EDEDF0;
  --field-border:#8A8A8F;   /* 3.4:1 к белому (WCAG 1.4.11); было #C7C7CC — 1.7:1 */

  --accent:#0071E3;
  --accent-on:#FFFFFF;
  --accent-ink:#0062C4;
  --accent-bg:#E5F0FD;
  --accent-bg-2:#F0F6FE;
  --accent-line:#B3D2F7;
  --accent-track:#E3E3E8;
  --focus-ring:rgba(0,113,227,.28);

  --ok:#1E7B34;
  --ok-ink:#1A6B2E;
  --ok-bg:#EEF8F1;
  --ok-bg-2:#E2F3E7;
  --ok-line:#BEE2C8;

  --warn:#A35C00;
  --warn-ink:#8A4F00;
  --warn-text:#6B3D00;
  --warn-bg:#FFF6E5;
  --warn-bg-2:#FFEED0;
  --warn-line:#F2D49E;

  --danger:#D70015;
  --danger-ink:#B0000F;
  --danger-bg:#FFF0F0;
  --danger-bg-2:#FFE3E4;
  --danger-line:#F7C1C4;

  --owner:#8944AB;
  --owner-ink:#6C2E8C;
  --owner-head-bg:#F3EAF9;
  --owner-bg:#FAF5FD;
  --owner-bg-2:#F5EDFA;
  --owner-total-bg:#EEDFF7;
  --owner-line:#C29BDB;
  --owner-line-2:#E0CCEE;

  --disabled-bg:#E8E8ED;
  --disabled-field-bg:#F5F5F7;
  --disabled-field-line:#E5E5EA;

  --note-bg:#F2F2F5;
  --note-line:#E5E5EA;

  --shadow-card:0 1px 2px rgba(0,0,0,.05), 0 0 1px rgba(0,0,0,.04);
  --shadow-accent:0 0 0 1px var(--accent-line), 0 1px 3px rgba(0,113,227,.08);
  --shadow-btn:none;

  /* Новые токены — см. ИЗМЕНЕНИЯ.md. Шрифт: на Mac и iPhone — родной
     системный (SF, с кириллицей и цифрами одной ширины), на остальных — Onest */
  --font:-apple-system, BlinkMacSystemFont, "Onest", "Segoe UI", system-ui, sans-serif;
  --mono:ui-monospace, "SF Mono", SFMono-Regular, Menlo, Consolas, "Liberation Mono", monospace;
  --r-ctl:8px;
  --r-card:12px;
  --accent-fill:#0071E3;
  --accent-fill-hover:#0077ED;
  --accent-bg-hover:#D6E7FC;
  --side-bg:#EDEDF0;
  --side-on:#DCDCE1;
  --bar-bg:rgba(255,255,255,.86);
  --shadow-pop:0 12px 32px rgba(0,0,0,.12), 0 1px 3px rgba(0,0,0,.08);

  /* Шкала текста (разбор дизайна 25 октября 2026, С10) */
  --fs-cap:12px;   --lh-cap:16px;   /* подписи, время, ярлыки */
  --fs-meta:13px;  --lh-meta:18px;  /* вторые строки, причины, подписи полей */
  --fs-ui:14px;    --lh-ui:20px;    /* таблицы, кнопки, поля */
  --fs-body:15px;  --lh-body:22px;  /* основной текст, название закупки */
  --fs-key:17px;   --lh-key:22px;   /* дата, сумма на телефоне */
  --col-bg:var(--surface-3);        /* колонка доски «Сделок» */
  --tile-bg:var(--surface);         /* карточка на доске */
}

:root[data-theme="dark"] {
  color-scheme: dark;
  --page:#000000;
  --surface:#1C1C1E;
  --surface-2:#202022;
  --surface-3:#2C2C2E;
  --field-bg:#2C2C2E;
  --empty-bg:#161618;

  --ink:#F5F5F7;
  --ink-2:#D1D1D6;
  --ink-3:#AEAEB2;
  --ink-4:#98989D;

  --line:#3A3A3C;
  --line-2:#2C2C2E;
  --line-3:#2E2E31;
  --field-border:#76767B;   /* 3.1:1; было #48484A — 1.5:1 */

  --accent:#0A84FF;
  --accent-on:#FFFFFF;
  --accent-ink:#5AAEFF;
  --accent-bg:#0F2A47;
  --accent-bg-2:#0D2038;
  --accent-line:#1F4E85;
  --accent-track:#3A3A3C;
  --focus-ring:rgba(10,132,255,.42);

  --ok:#30D158;
  --ok-ink:#5EDB7E;
  --ok-bg:#0F2A17;
  --ok-bg-2:#12321C;
  --ok-line:#1F5A30;

  --warn:#FFB340;
  --warn-ink:#FFC566;
  --warn-text:#FFD48A;
  --warn-bg:#2E2210;
  --warn-bg-2:#382912;
  --warn-line:#5C4318;

  --danger:#FF6961;
  --danger-ink:#FF8F88;
  --danger-bg:#34161A;
  --danger-bg-2:#3E1A1F;
  --danger-line:#6A2A2E;

  --owner:#BF5AF2;
  --owner-ink:#D69CF7;
  --owner-head-bg:#2E1F3B;
  --owner-bg:#221A2B;
  --owner-bg-2:#261D30;
  --owner-total-bg:#33233F;
  --owner-line:#7A4A98;
  --owner-line-2:#4F3463;

  --disabled-bg:#2C2C2E;
  --disabled-field-bg:#232325;
  --disabled-field-line:#38383A;

  --note-bg:#2C2C2E;
  --note-line:#3A3A3C;

  --shadow-card:none;
  --shadow-accent:0 0 0 1px var(--accent-line);
  --shadow-btn:none;

  --accent-fill:#0A6FD8;
  --accent-fill-hover:#0A7AEA;
  --accent-bg-hover:#143459;
  --side-bg:#161618;
  --side-on:#2C2C2E;
  --bar-bg:rgba(28,28,30,.88);
  --shadow-pop:0 12px 32px rgba(0,0,0,.6), 0 0 0 1px #3A3A3C;
  --col-bg:var(--surface);          /* колонка — ниже, */
  --tile-bg:var(--surface-3);       /* карточка — выше и светлее (HIG: base/elevated) */
}

/* ==========================================================================
   Основа
   ========================================================================== */
* { box-sizing:border-box; }
[hidden] { display:none !important; }
html { -webkit-text-size-adjust:100%; }
body {
  margin:0; background:var(--page); color:var(--ink);
  font:400 15px/1.5 var(--font);
  -webkit-font-smoothing:antialiased; -moz-osx-font-smoothing:grayscale;
  text-rendering:optimizeLegibility;
}
/* Числа — табличными цифрами Onest: колонки сумм встают ровно.
   Коды, артикулы, номера — моноширинным. */
.num, .n { font-variant-numeric:tabular-nums; }
.n { font-weight:600; letter-spacing:-.015em; }
.mono { font-family:var(--mono); font-size:.92em; font-variant-numeric:tabular-nums; letter-spacing:-.01em; }
a { color:var(--accent-ink); text-decoration:none; }
a:hover { text-decoration:underline; text-underline-offset:2px; }
:focus-visible {
  outline:2px solid var(--accent); outline-offset:2px; border-radius:4px;
}
summary { cursor:pointer; }
b, strong { font-weight:600; }

/* ==========================================================================
   Каркас
   ========================================================================== */
.app { display:flex; align-items:stretch; min-height:100vh; }

.side {
  flex:0 0 220px; background:var(--side-bg);
  padding:22px 10px 16px; display:flex; flex-direction:column;
  position:sticky; top:0; align-self:flex-start; height:100vh;
  overflow-y:auto;
}
.side .brand { padding:0 10px; margin-bottom:18px; }
.side .brand b { display:block; font-size:19px; font-weight:700; letter-spacing:-.02em; }
.side nav { display:flex; flex-direction:column; gap:1px; }
.side nav a {
  display:block; padding:7px 10px; border-radius:var(--r-ctl);
  font-size:14.5px; font-weight:500; color:var(--ink-2); text-decoration:none;
  transition:background-color .12s ease, color .12s ease;
}
.side nav a:hover { background:var(--side-on); color:var(--ink); text-decoration:none; }
.side nav a.on { font-weight:600; color:var(--ink); background:var(--side-on); }
.side nav a .short { display:none; }
.side .foot {
  margin-top:auto; padding:14px 10px 0;
  font-size:12px; color:var(--ink-4);
}

.main { flex:1 1 auto; min-width:0; }
.wrap {
  padding:36px 44px 56px; display:flex; flex-direction:column; gap:24px;
  max-width:1440px;
}
/* Ноутбук — поля уже: таблице тендеров нужна ширина */
@media (min-width:861px) and (max-width:1500px) { .wrap { padding-left:28px; padding-right:28px; } }

/* --- заголовок экрана: Large Title --- */
.head { display:flex; align-items:flex-start; gap:20px; flex-wrap:wrap; }
.head.ruled { border-bottom:1px solid var(--line-2); padding-bottom:20px; }
.head .titles { flex:1 1 22rem; min-width:0; }
.head .steps { margin-top:6px; min-width:0; }
.eyebrow {
  font-size:13px; font-weight:600; line-height:1.2; letter-spacing:0;
  text-transform:none; color:var(--ink-3); margin-bottom:6px;
}
h1 {
  font-size:34px; font-weight:700; line-height:1.12;
  letter-spacing:-.022em; margin:0; text-wrap:balance;
}
.context {
  font-size:15px; line-height:1.5; color:var(--ink-3);
  margin:8px 0 0; max-width:62rem; text-wrap:pretty;
}

/* --- индикатор шага --- */
.steps { display:flex; align-items:center; gap:0; flex-wrap:wrap; }
.steps .st {
  display:flex; align-items:center; gap:7px;
  padding:6px 11px; border-radius:999px; font-size:13px; font-weight:500;
  border:0; background:transparent; color:var(--ink-4); white-space:nowrap;
}
/* будущий шаг — пустое кольцо */
.steps .st i {
  width:14px; height:14px; border-radius:50%; flex:none; position:relative;
  border:1.5px solid var(--ink-4); background:transparent;
}
/* пройденный — галочка в зелёном круге */
.steps .st.done { color:var(--ink-2); }
.steps .st.done i, .steps a.st i { background:var(--ok); border-color:var(--ok); }
.steps .st.done i::after, .steps a.st i::after {
  content:""; position:absolute; left:3.5px; top:1.5px; width:3.5px; height:6.5px;
  border:solid var(--surface); border-width:0 1.5px 1.5px 0; transform:rotate(45deg);
}
/* текущий — залитая плашка */
.steps .st.now { background:var(--accent-bg); color:var(--accent-ink); font-weight:600; }
.steps .st.now i { border-color:var(--accent); background:var(--accent); box-shadow:inset 0 0 0 2.5px var(--accent-bg); }
.steps .link { width:16px; height:1px; background:var(--line); flex:none; }
.steps a.st { text-decoration:none; color:var(--ink-2); cursor:pointer;
  transition:background-color .12s ease, color .12s ease; }
.steps a.st:hover { background:var(--accent-bg-2); color:var(--accent-ink); text-decoration:none; }
/* Шаг-ссылка без .done — «можно перейти»: пустое кольцо, галочка только у пройденного */
.steps a.st:not(.done):not(.now) i { background:transparent; border-color:var(--ink-4); }
.steps a.st:not(.done):not(.now) i::after { content:none; }
.steps a.st:not(.done):not(.now):hover { color:var(--accent-ink); text-decoration:none; }

/* ==========================================================================
   Карточки
   ========================================================================== */
.card {
  background:var(--surface); border:0;
  border-radius:var(--r-card); box-shadow:var(--shadow-card);
}
/* Карточка внутри карточки: в тёмной теме одинаковый фон — нужна рамка */
.card .card { box-shadow:0 0 0 1px var(--line-2); }
.card .body { padding:18px 20px; }
.card .head-bar {
  padding:13px 20px; background:transparent;
  border-bottom:1px solid var(--line-2); border-radius:var(--r-card) var(--r-card) 0 0;
  display:flex; align-items:center; gap:12px; flex-wrap:wrap; min-height:52px;
}
.card .head-bar h2 { margin:0; font-size:16px; font-weight:600; letter-spacing:-.01em; }
.card .head-bar .sub { font-size:13px; color:var(--ink-3); }
.card .foot-bar {
  padding:14px 20px; background:var(--surface-2);
  border-top:1px solid var(--line-2); border-radius:0 0 var(--r-card) var(--r-card);
  display:flex; align-items:center; gap:12px; flex-wrap:wrap;
}
/* Страницы списка тендеров: «← Назад 1 … 4 5 6 … 12 Вперёд →» */
.tn-pager { display:flex; align-items:center; gap:4px; flex-wrap:wrap; margin-left:auto; }
.tn-pager .pg { min-width:30px; height:30px; padding:0 6px; display:inline-flex; align-items:center;
  justify-content:center; border-radius:8px; font-size:13px; color:var(--ink-2); text-decoration:none; }
.tn-pager a.pg:hover { background:var(--line-3); }
.tn-pager .pg.cur { background:var(--accent); color:var(--accent-on); font-weight:600; }
.tn-pager .pg.gap { min-width:16px; color:var(--ink-3); }
.card.accent { box-shadow:var(--shadow-accent); }
h2.section { font-size:21px; font-weight:700; letter-spacing:-.015em; line-height:1.25; margin:0 0 4px; }
.rubric {
  font-size:13px; font-weight:600; line-height:1.3;
  letter-spacing:0; text-transform:none; color:var(--ink-2);
  margin-bottom:8px;
}
/* Прайс: блоки идут столбиком с тем же шагом, что и весь экран */
.quotebody, .quotebody > form { display:flex; flex-direction:column; gap:16px; }
.nested {
  background:var(--surface-2); border:1px solid var(--line-2);
  border-radius:var(--r-ctl); padding:10px 12px;
}

/* ==========================================================================
   Значки состояния: форма повторяет цвет.
   в порядке — круг · внимание — ромб · опасно — квадрат ·
   нет данных / нейтрально — тире · слой владельца — вертикальная черта
   (та же черта, что отделяет лиловые колонки в таблице).
   ========================================================================== */
.tile::before, .tile.big > div::before, .pill::before, .msg::before {
  content:""; flex:none; width:9px; height:2px; border-radius:1px;
  background:var(--ink-4);
}
.tile.ok::before, .pill.ok::before, .msg.ok::before {
  width:8px; height:8px; border-radius:50%; background:var(--ok); transform:none;
}
.tile.warn::before, .pill.warn::before, .msg.warn::before {
  width:7px; height:7px; border-radius:1px; background:var(--warn); transform:rotate(45deg);
}
.tile.risk::before, .pill.risk::before, .msg.risk::before {
  width:7.5px; height:7.5px; border-radius:1.5px; background:var(--danger); transform:none;
}
.tile.owner::before, .tile.big > div::before, .pill.owner::before {
  width:3px; height:12px; border-radius:1.5px; background:var(--owner); transform:none;
}

/* ==========================================================================
   Плитки с числами
   ========================================================================== */
.tiles {
  display:grid; gap:0;
  grid-template-columns:repeat(3, minmax(0, 1fr));
  background:var(--surface); border:0; box-shadow:var(--shadow-card);
  border-radius:var(--r-card); overflow:hidden;
}
.card .tiles { box-shadow:0 0 0 1px var(--line-2); }
body[data-section="market"] .tiles { grid-template-columns:repeat(4, minmax(0, 1fr)); }
.tile .s.tn-urgent { color:var(--warn-ink); cursor:pointer; }
.tile .s.tn-urgent:hover { text-decoration:underline; }
.tile .s.tn-urgent[hidden] { display:none; }
/* Плитка: значок и крупное число первой строкой, подпись под ними —
   как у виджетов. Сеткой, а не переносом: высота не зависит от того,
   уместилась ли подпись рядом с числом. */
.tile {
  background:var(--surface); border:0; border-radius:0; min-width:0;
  border-top:1px solid var(--line-2); border-left:1px solid var(--line-2);
  margin:-1px 0 0 -1px; padding:11px 14px 12px;
  display:grid; grid-template-columns:auto minmax(0,1fr);
  align-items:center; column-gap:8px; row-gap:1px; align-content:start;
}
.tile::before, .tile.big > div::before { grid-row:1; grid-column:1; }
.tile .k {
  grid-row:2; grid-column:1 / -1; font-size:13px; color:var(--ink-3); line-height:1.35;
  margin:0; letter-spacing:0; text-transform:none; min-width:0;
}
.tile .n {
  grid-row:1; grid-column:2; margin:0; min-width:0;
  font:600 19px/1.25 var(--font);
  font-variant-numeric:tabular-nums; letter-spacing:-.015em;
}
.tile .s { grid-row:3; grid-column:1 / -1; font-size:12.5px; color:var(--ink-3); margin-top:2px; }

.ask {
  display:inline-flex; align-items:center; justify-content:center;
  width:16px; height:16px; margin-left:5px; padding:0; vertical-align:-2px;
  border:0; border-radius:50%; background:var(--surface-3);
  color:var(--ink-3); font:600 10.5px/1 var(--font);
  cursor:help; box-shadow:none;
}
.ask:hover, .ask[aria-expanded="true"] {
  background:var(--accent-bg); color:var(--accent-ink); filter:none;
}
.hintpop {
  position:absolute; z-index:60; max-width:min(420px, calc(100vw - 32px));
  max-height:60vh; overflow-y:auto;
  padding:12px 14px; border-radius:var(--r-card); font-size:13.5px; line-height:1.5;
  background:var(--surface); border:0;
  color:var(--ink-2); box-shadow:var(--shadow-pop);
}
.hintpop b { color:var(--ink); }
.tile .k .ask { vertical-align:-3px; }

.tile[data-filter], a.tile { cursor:pointer; transition:background-color .12s ease; }
.tile[data-filter]:hover, a.tile:hover { background:var(--accent-bg-2); }
a.tile { color:inherit; text-decoration:none; }
a.tile:hover { text-decoration:none; }
a.tile:hover .k { color:var(--accent-ink); }
.tile.picked, .tile.picked:hover {
  background:var(--accent-bg); box-shadow:inset 0 -2px 0 var(--accent);
}
.tile.picked .n, .tile.picked .k { color:var(--accent-ink); }
.filterbar {
  display:flex; align-items:center; gap:12px; flex-wrap:wrap;
  margin:10px 0 0; padding:9px 10px 9px 14px; border-radius:10px; font-size:13.5px;
  background:var(--accent-bg); border:0; color:var(--accent-ink);
}
.filterbar button, .filterbar .btn { margin-left:auto; }
tr.off, .card.lot.off, .lot.folded .foldbody { display:none; }
.tile.risk .n { color:var(--danger-ink); }
/* Слой владельца в плитках: лиловый фон клетки, черта и число — видно сразу */
.tile.owner { background:var(--owner-bg); }
.tile.owner .n { color:var(--owner-ink); }
.tile.owner .k { color:var(--owner-ink); }
/* «Ваша прибыль» и «доля прибыли» — тоже слой владельца */
.tile.big { display:contents; }
.tile.big::before { content:none; }
.tile.big > div {
  background:var(--owner-bg); min-width:0; padding:11px 14px 12px;
  border-top:1px solid var(--line-2); border-left:1px solid var(--line-2);
  margin:-1px 0 0 -1px;
  display:grid; grid-template-columns:auto minmax(0,1fr);
  align-items:center; column-gap:8px; row-gap:1px; align-content:start;
}
.tile.big .k { color:var(--owner-ink); }
.tile.big .n { font-size:19px !important; letter-spacing:-.015em; color:var(--owner-ink); }
.tile.big .aside { margin-left:0; text-align:left; }

/* Этапы тендеров — одна строка «сегментов»: число и подпись рядом, срочные — меткой */
.tiles.seg-tiles { display:flex; flex-wrap:wrap; gap:2px; padding:5px;
  background:var(--surface); box-shadow:var(--shadow-card); border-radius:var(--r-card); }
.tiles.seg-tiles > .tile { flex:0 1 auto; margin:0; border:0; border-radius:9px;
  min-height:44px; padding:8px 10px; display:flex; align-items:center; gap:7px; }
.tiles.seg-tiles > .tile .n { font-size:var(--fs-key); line-height:1; order:1; }
.tiles.seg-tiles > .tile .k { order:2; font-size:var(--fs-meta); color:var(--ink-2); white-space:nowrap; }
.tiles.seg-tiles > .tile .s { order:3; margin:0; font-size:var(--fs-cap); font-weight:600;
  padding:2px 7px; border-radius:999px; background:var(--warn-bg); color:var(--warn-ink); white-space:nowrap; }
.tiles.seg-tiles > .tile::before { order:0; }
.tiles.seg-tiles > .tile.zero .n, .tiles.seg-tiles > .tile.zero .k { color:var(--ink-3); }
.tiles.seg-tiles > .tn-sep { flex:0 0 1px; align-self:stretch; margin:6px 4px; background:var(--line-2); }
.tiles.seg-tiles > .tile.picked { box-shadow:inset 0 0 0 1.5px var(--accent); }
.tiles.seg-tiles > .tile.picked .k { color:var(--accent-ink); font-weight:600; }
/* Ноутбук до 1440 px: те же сегменты плотнее, чтобы полоса осталась одной строкой */
@media (min-width:861px) and (max-width:1439px) {
  .tiles.seg-tiles { gap:0; padding:4px; }
  .tiles.seg-tiles > .tile { padding:8px 7px; gap:5px; }
  .tiles.seg-tiles > .tile .k { font-size:var(--fs-cap); }
  .tiles.seg-tiles > .tile .s { padding:2px 5px; }
  .tiles.seg-tiles > .tn-sep { margin:6px 2px; }
}
/* Уже 1280 px целиком не помещается — одна строка с прокруткой вбок, как на телефоне */
@media (min-width:861px) and (max-width:1279px) {
  .tiles.seg-tiles { flex-wrap:nowrap; overflow-x:auto; scrollbar-width:none; }
  .tiles.seg-tiles > .tile { flex:0 0 auto; }
}

/* ==========================================================================
   Таблицы
   ========================================================================== */
.tablewrap {
  overflow:auto; border:0; border-radius:var(--r-card);
  background:var(--surface); box-shadow:var(--shadow-card); max-height:70vh;
}
.card .tablewrap { border:none; border-radius:0; box-shadow:none; }
.card > .tablewrap:first-child { border-radius:var(--r-card) var(--r-card) 0 0; }
.card > .tablewrap:last-child { border-radius:0 0 var(--r-card) var(--r-card); }
.card > .tablewrap:only-child { border-radius:var(--r-card); }
table {
  border-collapse:separate; border-spacing:0; width:100%;
  font-size:14px; line-height:1.4;
}
th, td {
  text-align:left; padding:8px 12px;
  border-bottom:1px solid var(--line-3); white-space:nowrap;
}
th:first-child, td:first-child { padding-left:18px; }
th:last-child, td:last-child { padding-right:18px; }
thead th {
  position:sticky; top:0; z-index:2;
  background:var(--surface); color:var(--ink-3);
  font-size:12.5px; font-weight:600; letter-spacing:0; text-transform:none;
  border-bottom:1px solid var(--line); padding-top:10px; padding-bottom:9px;
}
tbody tr:last-child td { border-bottom:0; }
tbody tr:nth-child(even) td { background:var(--surface-2); }
tbody tr:hover td { background:var(--surface-3); }
td.num, th.num { text-align:right; font-variant-numeric:tabular-nums; }
td.row-no { color:var(--ink-4); font-variant-numeric:tabular-nums; font-size:13px; }
td.wrap-cell { white-space:normal; min-width:20rem; }
.nodata { color:var(--ink-4); font-size:13px; }

/* Слой владельца: сплошная лиловая граница на стыке слоёв, лиловая
   заливка колонок и лиловая шапка. Различие плотнее прежнего штриха. */
th.owner, td.owner { border-left:1px solid var(--owner-line-2); }
th:not(.owner) + th.owner, td:not(.owner) + td.owner { border-left:2px solid var(--owner-line); }
thead th.owner { background:var(--owner-head-bg); color:var(--owner-ink); }
tbody td.owner { background:var(--owner-bg); color:var(--owner-ink); }
tbody tr:nth-child(even) td.owner { background:var(--owner-bg-2); }
tbody tr:hover td.owner { background:var(--owner-head-bg); }

tr.loss td { background:var(--danger-bg) !important; }
tr.loss td:first-child { box-shadow:inset 3px 0 0 var(--danger); }
tr.loss td.owner-profit { color:var(--danger-ink); font-weight:600; }
tr.total td {
  background:var(--surface-3) !important; font-weight:600;
  border-top:1px solid var(--ink-4); border-bottom:none;
}
tr.total td.owner { background:var(--owner-total-bg) !important; }
tr.more td {
  background:var(--surface-2) !important; color:var(--ink-3);
  font-size:13px; text-align:center;
}
tr.marked td { background:var(--warn-bg) !important; color:var(--warn-text); }

/* ==========================================================================
   Поля
   ========================================================================== */
.field { display:block; margin-bottom:14px; }
.field > .lbl {
  display:block; font-size:13px; font-weight:500; color:var(--ink-2);
  margin-bottom:6px;
}
input[type=text], input[type=number], input[type=search], input[type=email],
input[type=password], input[type=date], select {
  width:100%; padding:8px 11px; font:inherit; font-size:15px; line-height:1.4;
  background:var(--field-bg); color:var(--ink);
  border:1px solid var(--field-border); border-radius:var(--r-ctl);
  transition:border-color .12s ease, box-shadow .12s ease;
}
input[type=search] { -webkit-appearance:none; appearance:none; }
input::placeholder, textarea::placeholder { color:var(--ink-4); opacity:1; }
select {
  appearance:none; -webkit-appearance:none; padding-right:32px; cursor:pointer;
  background-image:linear-gradient(45deg, transparent 50%, var(--ink-3) 50%),
                   linear-gradient(135deg, var(--ink-3) 50%, transparent 50%);
  background-position:calc(100% - 17px) 52%, calc(100% - 12px) 52%;
  background-size:5px 5px, 5px 5px;
  background-repeat:no-repeat;
}
select option { background:var(--surface); color:var(--ink); }
input:not([type="checkbox"]):not([type="radio"]):focus, select:focus, textarea:focus {
  outline:none; border-color:var(--accent);
  box-shadow:0 0 0 3px var(--focus-ring);
}
input:disabled, select:disabled, textarea:disabled {
  background:var(--disabled-field-bg); border-color:var(--disabled-field-line);
  color:var(--ink-4); cursor:not-allowed;
}
.check {
  display:flex; align-items:flex-start; gap:10px;
  font-size:14px; line-height:1.45; cursor:pointer; padding:6px 0;
  min-height:44px; align-content:center; flex-wrap:wrap;
}
.check input[type="checkbox"], .check input[type="radio"] { width:18px; height:18px; margin:1px 0 0; }
input[type="checkbox"], input[type="radio"] {
  width:16px; height:16px; accent-color:var(--accent);
  flex:none; margin:0; vertical-align:middle; cursor:pointer;
}
.filezone {
  border:1.5px dashed var(--field-border); background:var(--surface-2);
  border-radius:var(--r-card); padding:28px 24px; text-align:center;
}
.filezone .mark {
  width:40px; height:40px; margin:0 auto 12px; position:relative;
  border:0; border-radius:10px; background:var(--accent-bg);
}
/* стрелка «вверх» простыми линиями */
.filezone .mark::before {
  content:""; position:absolute; left:19px; top:11px; width:2px; height:18px;
  background:var(--accent); border-radius:1px;
}
.filezone .mark::after {
  content:""; position:absolute; left:14.5px; top:12px; width:9px; height:9px;
  border:solid var(--accent); border-width:2px 0 0 2px; transform:rotate(45deg);
}
.filezone .t { font-size:17px; font-weight:600; letter-spacing:-.01em; }
.filezone .limits {
  font-size:13px; line-height:1.4; font-variant-numeric:tabular-nums;
  color:var(--ink-3); margin:6px 0 14px;
}
.filezone input[type=file] { font-size:14px; max-width:100%; }
input[type=file] { font:inherit; color:var(--ink-2); }
input[type=file]::file-selector-button {
  font:500 14px/1.2 var(--font); margin-right:10px; cursor:pointer;
  padding:7px 12px; border:0; border-radius:var(--r-ctl);
  background:var(--accent-bg); color:var(--accent-ink);
}
input[type=file]::file-selector-button:hover { background:var(--accent-bg-hover); }

/* ==========================================================================
   Кнопки
   главная — залитая синяя · .ghost — бледно-синяя (tinted) ·
   button.small — маленькая tinted · .risk / .drop — бледно-красные
   ========================================================================== */
button, .btn {
  font:600 14.5px/1.25 var(--font); letter-spacing:-.005em; cursor:pointer;
  background:var(--accent-fill); color:var(--accent-on); border:1px solid transparent;
  border-radius:var(--r-ctl); padding:8px 16px; text-decoration:none;
  display:inline-block; box-shadow:none; text-align:center; white-space:nowrap;
  transition:background-color .12s ease, color .12s ease, opacity .12s ease;
}
.foot-bar > button, .foot-bar > .btn, .head-bar > button, .head-bar > .btn, .actions > button, .actions > .btn, .filterbar > button, .filterbar > .btn { flex-shrink:0; }
button:hover:not(:disabled), .btn:hover { background:var(--accent-fill-hover); text-decoration:none; filter:none; }
button:active:not(:disabled), .btn:active { opacity:.82; }
button.ghost, .btn.ghost {
  background:var(--accent-bg); color:var(--accent-ink); font-weight:500;
  border:1px solid transparent; border-radius:var(--r-ctl); padding:8px 14px; box-shadow:none;
}
button.ghost:hover:not(:disabled), .btn.ghost:hover {
  background:var(--accent-bg-hover); color:var(--accent-ink); filter:none;
}
/* Ссылка-кнопка .btn.small остаётся залитой (выбранное положение),
   .btn.small.ghost — бледной: как и раньше, только в новом облике */
.btn.small, button.small {
  font-size:13px; font-weight:500; padding:5px 10px; border-radius:7px;
}
button.small {
  background:var(--accent-bg); color:var(--accent-ink); border-color:transparent; box-shadow:none;
}
button.small:hover:not(:disabled) { background:var(--accent-bg-hover); filter:none; }
button.risk, .btn.risk {
  background:var(--danger-bg); color:var(--danger-ink);
  border-color:transparent; font-weight:500; box-shadow:none;
}
button.risk:hover:not(:disabled), .btn.risk:hover { background:var(--danger-bg-2); filter:none; }
button:disabled { background:var(--disabled-bg); color:var(--ink-4); cursor:not-allowed; box-shadow:none; opacity:1; }
button.ghost:disabled, button.small:disabled, button.risk:disabled {
  background:var(--disabled-bg); color:var(--ink-4); border-color:transparent;
}
.actions { display:flex; gap:10px; align-items:center; flex-wrap:wrap; }
.actions .right { margin-left:auto; }
/* Ссылки раздела справа от заголовка («Постоянные заказчики», «Реквизиты и опыт»):
   после .btn.ghost — та же сила правила, иначе отступы стали бы как у кнопки */
.head-links { display:flex; gap:6px; flex-wrap:wrap; align-self:flex-end; }
.head-links .btn { padding:6px 12px; font-size:var(--fs-ui); }

/* Переключатель темы — сегменты на серой дорожке */
.themepick {
  display:inline-flex; gap:2px; flex-wrap:wrap; padding:2px;
  background:var(--surface-3); border-radius:9px;
}
.themepick button {
  background:transparent; color:var(--ink-2); font-weight:500;
  border:0; box-shadow:none; padding:6px 16px; border-radius:7px;
}
.themepick button:hover:not(:disabled) { background:var(--side-on); filter:none; }
.themepick button.on, .themepick button.on:hover:not(:disabled) {
  background:var(--surface); color:var(--ink); font-weight:600;
  box-shadow:0 1px 3px rgba(0,0,0,.12), 0 0 0 .5px rgba(0,0,0,.06);
}
:root[data-theme="dark"] .themepick button.on { background:#636366; color:#FFFFFF; box-shadow:none; }

/* ==========================================================================
   Пилюли, сообщения, значки
   ========================================================================== */
.pill {
  display:inline-flex; align-items:center; gap:6px;
  font:500 13px/1.4 var(--font);
  letter-spacing:0; text-transform:none;
  padding:0; border:0; border-radius:0;
  color:var(--ink-3); background:transparent; white-space:normal;
}
.pill.ok { color:var(--ok-ink); }
.pill.warn { color:var(--warn-ink); }
.pill.risk { color:var(--danger-ink); }
.pill.owner { color:var(--owner-ink); }
button.pill {
  font:500 13px/1.4 var(--font); background:transparent; border:0; padding:0;
  cursor:pointer; box-shadow:none;
}
button.pill:hover:not(:disabled) { background:transparent; filter:none; color:var(--accent-ink); }
button.pill:disabled { background-color:transparent; color:var(--ink-3); cursor:default; }
button.pill.ok:disabled { color:var(--ok-ink); }

#toast {
  position:fixed; left:50%; bottom:28px; transform:translateX(-50%) translateY(8px);
  z-index:80; padding:10px 18px; border-radius:999px;
  background:var(--surface); border:0; color:var(--ink);
  box-shadow:var(--shadow-pop);
  font-size:14px; font-weight:500; opacity:0; pointer-events:none;
  transition:opacity .15s ease, transform .15s ease;
}
#toast.on { opacity:1; transform:translateX(-50%) translateY(0); }

/* Сообщение: значок нужной формы слева, текст рядом. Длинное — в пять
   строк — читается: строка до 75 знаков не ограничена, межстрочный 1.5. */
.msg {
  position:relative;
  padding:11px 14px 11px 34px; border-radius:10px; font-size:14px; line-height:1.5;
  border:0; background:var(--note-bg); color:var(--ink-2); text-wrap:pretty;
}
.msg::before { position:absolute; left:14px; top:calc(11px + .75em - 1px); }
.msg.ok::before, .msg.warn::before, .msg.risk::before { top:calc(11px + .75em - 4px); }
/* Предупреждение — без заливки: заметно, но не спорит с числами */
.msg.warn {
  background:transparent; border-radius:0;
  padding:2px 0 2px 22px; color:var(--warn-text);
}
.msg.warn::before { left:3px; top:calc(2px + .75em - 4px); }
.msg.risk { background:var(--danger-bg); color:var(--danger-ink); font-weight:500; }
.msg.ok { background:var(--ok-bg); color:var(--ok-ink); }
/* «🔔 Нашлось продолжение» — значок уже в тексте, второй не нужен */
.msg.tn-found { padding-left:14px; }
.msg.tn-found::before { display:none; }
.msgs { display:flex; flex-direction:column; gap:8px; }
.msgs:empty { display:none; }

.dot { display:inline-block; width:9px; height:9px; flex:none; vertical-align:middle; }
.dot.ok { border-radius:50%; background:var(--ok); }
.dot.warn { width:8px; height:8px; border-radius:1px; background:var(--warn); transform:rotate(45deg); }
.dot.risk { width:8.5px; height:8.5px; border-radius:1.5px; background:var(--danger); }
.dot.none { width:10px; height:2px; border-radius:1px; background:var(--ink-4); }

/* --- полоса хода работы --- */
.track { height:6px; border-radius:999px; background:var(--accent-track); overflow:hidden; }
.track i { display:block; height:100%; background:var(--accent); border-radius:999px; transition:width .4s ease; }
.track.waiting i { width:35% !important; animation:runs 1.1s ease-in-out infinite; }
@keyframes runs {
  0% { margin-left:-35%; }
  100% { margin-left:100%; }
}

/* --- пустое состояние --- */
.empty {
  border:0; background:var(--empty-bg);
  border-radius:var(--r-card); padding:30px 20px; text-align:center;
}
.card .body > .empty { box-shadow:inset 0 0 0 1px var(--line-2); }
.empty .mark {
  width:28px; height:28px; margin:0 auto 12px;
  border:1.5px solid var(--line); border-radius:50%;
}
.empty .t { font-size:15px; font-weight:600; }
.empty .s {
  font-size:13.5px; line-height:1.5; color:var(--ink-3);
  max-width:280px; margin:6px auto 0;
}

.muted { color:var(--ink-3); font-size:13.5px; }
.muted.small { font-size:12.5px; }

/* Список последних загрузок */
.joblist { max-height:24rem; overflow-y:auto; }
.joblist .job {
  display:flex; align-items:center; gap:12px; flex-wrap:wrap;
  padding:12px 20px; border-bottom:1px solid var(--line-2);
}
.joblist .job:last-child { border-bottom:none; }
.joblist .who { flex:1 1 12rem; min-width:0; }
.joblist .file { overflow:hidden; text-overflow:ellipsis; white-space:nowrap; font-weight:500; }
.joblist .meta { color:var(--ink-3); font-size:12.5px; margin-top:2px; font-variant-numeric:tabular-nums; }
.joblist .btn { flex:none; padding:5px 11px; font-size:13px; }
.joblist .job > .btn { margin-left:auto; }
.joblist .acts { display:flex; gap:8px; flex-wrap:wrap; margin-left:auto; }
.joblist .acts form { display:inline-flex; }
.joblist .pick { flex:none; width:16px; height:16px; margin:0; }
.joblist .nums { color:var(--ink-2); font-size:13px; margin-top:3px; font-variant-numeric:tabular-nums; }
.joblist .nums b { font-weight:600; }
.joblist .pill { flex:none; white-space:nowrap; }
.joblist .panel {
  flex:1 0 100%; margin-top:14px; padding-top:14px;
  border-top:1px solid var(--line-2);
}
.joblist .panel .card { margin-bottom:16px; }
.joblist .panel .card:last-child { margin-bottom:0; }
.chev {
  display:inline-block; width:0; height:0; vertical-align:middle;
  border-left:4px solid currentColor;
  border-top:4px solid transparent; border-bottom:4px solid transparent;
  transition:transform .12s ease;
}
[aria-expanded="true"] .chev { transform:rotate(90deg); }

/* ==========================================================================
   Окно фоновых работ и очередь опроса
   ========================================================================== */
.works { display:flex; flex-direction:column; gap:10px; }
.workrow {
  background:var(--surface); border:0; box-shadow:var(--shadow-accent);
  border-radius:var(--r-card); padding:14px 16px;
  display:grid; gap:12px 18px; align-items:center;
  grid-template-columns:minmax(0,1fr) auto;
}
.wr-left { min-width:0; }
.wr-title, .wr-now {
  overflow:hidden; text-overflow:ellipsis; white-space:nowrap;
  min-width:0; max-width:100%;
}
.wr-title { font-size:13px; color:var(--ink-3); }
.wr-line {
  display:flex; align-items:baseline; gap:12px;
  margin:4px 0 8px; min-width:0;
}
.wr-line .n { font-size:22px; font-weight:600; flex:none; letter-spacing:-.015em; }
.wr-now { color:var(--ink-3); font-size:13.5px; flex:1 1 auto; }
.wr-side { display:flex; gap:8px; align-items:center; flex-wrap:wrap; }

.queue { grid-column:1/-1; min-width:0; margin-top:2px; padding-top:12px;
  border-top:1px solid var(--line-2); display:grid; gap:4px; }
.queue .q {
  display:grid; grid-template-columns:auto minmax(0,1fr) auto auto;
  align-items:center; gap:10px;
  padding:7px 10px; border-radius:var(--r-ctl); background:var(--surface-2);
  border:1px solid transparent;
}
.queue .q.now { background:var(--accent-bg-2); border-color:var(--accent-line); }
.queue .q.over { border-color:var(--accent); }
.queue .q .name { min-width:0; font-size:13.5px;
  overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.queue .q .sub { font-size:12.5px; color:var(--ink-3); white-space:nowrap; }
.queue .q .moves { display:flex; gap:6px; }
.queue .q button { padding:4px 9px; font-size:12.5px; }
.queue .grip { cursor:grab; color:var(--ink-4); font:400 14px/1 monospace; letter-spacing:-1px; }
@media (pointer: coarse) { .queue .grip { display:none; } }
@media (pointer: fine) { .queue .q .moves { display:none; } }

.grid2 { display:grid; gap:24px; grid-template-columns:minmax(0,1fr); }
@media (min-width:1000px) {
  .grid2 { grid-template-columns:minmax(0,1fr) minmax(0,1fr); }
  .grid2.uneven { grid-template-columns:minmax(0,1fr) minmax(0,1.15fr); }
}

/* ==========================================================================
   Окно ожидания
   ========================================================================== */
#busy { position:fixed; inset:0; z-index:60; display:none; align-items:center; justify-content:center; }
#busy.on { display:flex; }
#busy::before { content:""; position:absolute; inset:0; background:var(--page); opacity:.8;
  -webkit-backdrop-filter:blur(6px); backdrop-filter:blur(6px); }
#busy .box {
  position:relative; background:var(--surface); border:0;
  border-radius:16px; padding:22px 26px; min-width:19rem; text-align:center;
  box-shadow:var(--shadow-pop);
}
#busy .ring {
  width:22px; height:22px; margin:0 auto 12px; border-radius:50%;
  border:2.5px solid var(--accent-track); border-top-color:var(--accent);
  animation:spin 900ms linear infinite;
}
@keyframes spin { to { transform:rotate(360deg); } }
#busy .what { font-size:15px; font-weight:600; }
#busy .clock {
  font:600 28px/1.2 var(--font); letter-spacing:-.02em;
  font-variant-numeric:tabular-nums; margin:8px 0 4px;
}
#busy .hint { font-size:13px; color:var(--ink-3); }

/* ==========================================================================
   Остальные компоненты
   ========================================================================== */
textarea {
  width:100%; padding:10px 12px;
  font-family:var(--mono); font-size:13px; line-height:1.55;
  background:var(--field-bg); color:var(--ink);
  border:1px solid var(--field-border); border-radius:var(--r-ctl);
  resize:vertical;
}

/* КуДиР: три поля файлов */
.drop {
  display:flex; align-items:center; gap:16px; flex-wrap:wrap;
  padding:13px 0; border-top:1px solid var(--line-2);
}
.drop:first-child { border-top:none; padding-top:2px; }
.drop .dlabel { display:flex; align-items:baseline; gap:6px; flex-wrap:wrap; }
.drop .dlabel b { font-size:15px; }
.drop .dnote { font-size:13px; line-height:1.4; color:var(--ink-3); flex-basis:100%; }
.drop input[type=file] { font-size:14px; max-width:100%; margin-left:auto; }

select.verdict {
  min-width:7.6rem; width:auto; padding:4px 24px 4px 9px;
  font-weight:600; font-size:13px; background-position:calc(100% - 14px) 52%, calc(100% - 9px) 52%;
}
select.verdict option { font-weight:600; background:var(--surface); }
select.v-keep  { color:var(--ok); }
select.v-check { color:var(--warn); }
select.v-skip  { color:var(--danger); }
option.v-keep  { color:var(--ok); }
option.v-check { color:var(--warn); }
option.v-skip  { color:var(--danger); }

table.tight { font-size:13px; }
table.tight th, table.tight td { padding:7px 10px; }
table.tight th:first-child, table.tight td:first-child { padding-left:14px; }
table.tight th:last-child, table.tight td:last-child { padding-right:14px; }
table.tight td { vertical-align:top; }
table.tight td.wrap-cell { white-space:normal; min-width:14rem; max-width:24rem; }
table.tight input.cut { width:7rem; padding:4px 8px; font-size:13px; }
table.tight td .why {
  display:block; margin-top:3px; font-size:12px; line-height:1.45;
  color:var(--ink-3);
}
table.tight td.tight-cell { min-width:9rem; max-width:13rem; }

.inline-field { display:flex; align-items:center; gap:9px; font-size:13.5px; }
.inline-field span { color:var(--ink-2); }
.inline-field input { width:5.5rem; padding:5px 10px; }

.lister .listbody { padding-top:14px; }
.listtools {
  display:flex; align-items:center; gap:10px; flex-wrap:wrap;
  margin-bottom:12px;
}
.listtools .finder { flex:1 1 14rem; min-width:12rem; }
.listtools .adder { display:flex; align-items:center; gap:8px; flex-wrap:wrap; }
.listtools .adder input { padding:6px 10px; font-size:14px; }

.rowlist { display:flex; flex-direction:column; gap:2px; }
.lrow {
  display:flex; align-items:center; gap:8px; flex-wrap:wrap;
  padding:5px 8px; border-radius:var(--r-ctl); background:var(--surface-2);
  border:1px solid transparent;
}
.lrow:hover { background:var(--surface-3); }
.lrow.editing { border-color:var(--accent-line); background:var(--accent-bg-2); }
.lrow input[type=text] { flex:1 1 8rem; padding:5px 9px; font-size:14px; }
.lrow input[readonly] {
  background:transparent; border-color:transparent; color:var(--ink);
  cursor:default; box-shadow:none;
}
.lrow button { margin-left:0; }
.lrow .small.risk { background:transparent; color:var(--danger-ink); }
.lrow .small.risk:hover:not(:disabled) { background:var(--danger-bg); }

@media (max-width: 720px) {
  .drop input[type=file] { margin-left:0; }
  .lrow { align-items:stretch; }
}

/* Строка курса */
.ratebar .body {
  display:flex; align-items:baseline; gap:10px; flex-wrap:wrap;
  padding-top:13px; padding-bottom:13px;
}
.ratebar .big {
  font:700 26px/1 var(--font); letter-spacing:-.02em;
  color:var(--ink); font-variant-numeric:tabular-nums;
}
.ratebar .unit { color:var(--ink-2); font-size:13.5px; }
.ratebar .sep { width:1px; height:16px; background:var(--line);
  align-self:center; margin:0 4px; }
.ratebar .muted, .ratebar b { font-size:13.5px; }
.ratebar button { margin-left:auto; align-self:center; }

/* Поле наценки в строке прайса — лиловая рамка, слой владельца */
input.markup {
  width:88px; padding:3px 7px; text-align:right;
  font:500 13px/1.3 var(--font); font-variant-numeric:tabular-nums;
  border:1px solid var(--owner-line); border-radius:6px;
  background:var(--surface); color:var(--ink);
}
input.markup:focus { outline:none; border-color:var(--owner); box-shadow:0 0 0 3px var(--owner-line-2) !important; }
input.markup:not(:placeholder-shown), input.markup.set {
  background:var(--owner-head-bg); font-weight:600; color:var(--owner-ink);
}

/* Удаление прайса в списке — бледно-красная кнопка-крестик */
.joblist .job > form { flex:none; display:inline-flex; }
button.drop {
  padding:4px 10px; font-size:15px; line-height:1; font-weight:500;
  background:var(--danger-bg); color:var(--danger-ink);
  border:1px solid transparent; box-shadow:none;
}
button.drop:hover:not(:disabled) { background:var(--danger-bg-2); filter:none; }

/* Поля подготовки документов */
.fieldgrid {
  display:grid; gap:12px 20px;
  grid-template-columns:repeat(auto-fit, minmax(16.5rem, 1fr));
}
.fieldgrid .field { margin:0; }
.fieldgrid .field > .lbl { font-size:12.5px; margin-bottom:4px; }
.fieldgrid .field input { padding:6px 10px; font-size:14px; }
.fieldgrid .field > .sub { font-size:12px; margin-top:3px; }

/* Выбор колонок в разметке */
table.cols { table-layout:fixed; }
table.cols td.pick { white-space:normal; padding:8px 14px; }
table.cols td.pick select { min-width:0; max-width:100%; text-overflow:ellipsis; }
table.cols td.pick .what {
  font-size:13px; font-weight:600; color:var(--ink); margin-bottom:5px;
}
table.cols td.pick select { padding:5px 28px 5px 10px; font-size:13.5px; }
table.cols td.how {
  width:124px; vertical-align:middle; text-align:right; padding:8px 14px 8px 6px;
}
table.cols tbody tr:nth-child(even) td { background:transparent; }
table.cols tbody tr:hover td { background:var(--surface-2); }

.chosen {
  display:flex; flex-wrap:wrap; gap:6px; margin-top:8px; flex-basis:100%;
}
.chosen .chip {
  display:inline-flex; align-items:center; gap:6px;
  padding:3px 4px 3px 10px; border-radius:999px; font-size:12.5px;
  background:var(--surface-3); border:0;
  color:var(--ink-2); max-width:22rem;
  overflow:hidden; text-overflow:ellipsis; white-space:nowrap;
}
.chosen .chip button {
  width:auto; padding:0 6px; font-size:13px; line-height:1.4; border-radius:999px;
  background:transparent; color:var(--ink-3); box-shadow:none; border:none;
}
.chosen .chip button:hover:not(:disabled) { background:var(--danger-bg); color:var(--danger-ink); filter:none; }

/* ==========================================================================
   Тендеры: новая строка таблицы (образец — tenders-row.html).
   Все классы с приставкой tn- новые, список — в ИЗМЕНЕНИЯ.md.
   ========================================================================== */
/* «Сбор»: одна строка — заголовок, состояние, площадки по нажатию, кнопка */
.tn-collect { display:flex; align-items:center; gap:10px 14px; flex-wrap:wrap;
  padding:10px 12px 10px 20px; min-height:52px; }
.tn-collect h2 { margin:0; font-size:var(--fs-body); font-weight:600; }
.tn-collect .pill { font-size:var(--fs-meta); }
.tn-collect > details { font-size:var(--fs-meta); }
.tn-collect > details[open] { flex-basis:100%; order:9; padding:4px 0 6px; }
.tn-collect form { margin-left:auto; }

/* Поиск и фильтры — одна строка, у каждого списка видимая подпись */
.tn-tools { display:flex; align-items:center; gap:8px; flex-wrap:wrap; flex:1 1 auto; margin:0; }
.tn-tools .tn-search { display:flex; gap:8px; flex:1 1 260px; max-width:none; min-width:0; }
.tn-tools .tn-search input { padding:6px 10px; font-size:14px; }
.tn-tools .tn-search button { padding:6px 12px; font-size:14px; }
select.tn-pick {
  width:auto; padding:6px 30px 6px 10px; font-size:14px; font-weight:500;
  background-color:var(--surface-3); border-color:transparent;
}
select.tn-pick:hover { background-color:var(--line-2); }
.tn-picks { display:flex; gap:8px; flex-wrap:wrap; }
.tn-field { display:inline-flex; align-items:center; gap:0; border-radius:var(--r-ctl);
  background:var(--surface-3); padding-left:10px; }
.tn-field > span { font-size:var(--fs-meta); color:var(--ink-3); white-space:nowrap; }
.tn-field select.tn-pick { background-color:transparent; padding-left:6px; field-sizing:content; }
.tn-field:hover { background:var(--line-2); }
/* Включённый фильтр видно сразу: выбрано не «все» (у первого пункта value="").
   «Порядок» — не фильтр, его не подсвечиваем */
.tn-field:not(:has(select[name="sort"])):has(option:checked:not([value=""])) { background:var(--accent-bg); }
.tn-field:not(:has(select[name="sort"])):has(option:checked:not([value=""])) > span { color:var(--accent-ink); }

/* Без своей прокрутки: страница листается одна, шапка таблицы прилипает к окну */
@media (min-width:1200px) {
  .card .tablewrap.tn-wrap { max-height:none; overflow:clip; }
}
@media (max-width:1199px) and (min-width:861px) {
  .card .tablewrap.tn-wrap { max-height:none; overflow-x:auto; overflow-y:hidden; }
}
table.tenders { table-layout:auto; }
table.tenders th, table.tenders td { padding-left:8px; padding-right:8px; }
table.tenders th:first-child, table.tenders td:first-child { padding-left:14px; }
table.tenders th:last-child, table.tenders td:last-child { padding-right:14px; }
table.tenders td { vertical-align:top; white-space:normal; padding-top:14px; padding-bottom:14px;
  border-bottom:1px solid var(--line); font-size:var(--fs-meta); line-height:var(--lh-meta); }
table.tenders tbody tr:nth-child(even) td { background:transparent; }
table.tenders tbody tr:hover td { background:var(--surface-2); }
tr.closed > td { opacity:.6; }

.tn-due { width:10.5rem; min-width:10.5rem; }   /* «На рассмотрении» в списке целиком */
/* «Приём до»: дата → сколько осталось → статус → развернуть */
.tn-date {
  display:block; font-size:var(--fs-key); font-weight:600; line-height:var(--lh-key);
  letter-spacing:-.015em; font-variant-numeric:tabular-nums; color:var(--ink);
}
.tn-date small { display:block; font-size:var(--fs-meta); font-weight:500; color:var(--ink-3); letter-spacing:0; }
.tn-due .pill { margin-top:3px; font-size:var(--fs-meta); font-weight:500; align-items:baseline; }
.tn-due .pill::before { align-self:center; }
.tn-due .tender-status { margin:10px 0 0; }
.tender-status select {
  width:100%; max-width:none; min-width:0 !important;
  padding:5px 20px 5px 8px; font-size:var(--fs-meta); font-weight:500;
  background-position:calc(100% - 12px) 52%, calc(100% - 7px) 52%;
}
/* Статус окрашен по смыслу — видно, что уже решено (в «Новых» все серые) */
.tender-status[data-st="review"] select { background-color:var(--warn-bg); border-color:var(--warn-line); color:var(--warn-ink); }
.tender-status[data-st="work"] select,
.tender-status[data-st="filed"] select { background-color:var(--accent-bg); border-color:var(--accent-line); color:var(--accent-ink); }
.tender-status[data-st="won"] select { background-color:var(--ok-bg); border-color:var(--ok-line); color:var(--ok-ink); }
.tender-status[data-st="skip"] select,
.tender-status[data-st="nofit"] select,
.tender-status[data-st="lost"] select { color:var(--ink-3); }
table.tenders button.tn-open { margin-top:8px; padding:0; background:none; color:var(--accent-ink);
  font:500 var(--fs-meta)/var(--lh-meta) var(--font); width:auto; min-height:0; }
table.tenders button.tn-open:hover:not(:disabled) { background:none; text-decoration:underline; }
button.tn-open::after { content:" ▾"; }
tr.open button.tn-open::after { content:" ▴"; }
.tn-back { margin:6px 0 0; }
.tn-back button { padding:3px 10px; font-size:12.5px; }
.tn-refresh { margin:6px 0 0; display:flex; flex-wrap:wrap; align-items:baseline; gap:3px 8px; }
.tn-refresh button { padding:3px 10px; font-size:12.5px; }
.tn-when { font-size:12px; line-height:1.3; color:var(--ink-3); font-variant-numeric:tabular-nums; }

.tn-what { min-width:16rem; overflow-wrap:anywhere; }
/* «Закупка»: название крупнее и плотнее, длинное — в три строки */
a.tn-title {
  display:block; color:var(--ink); font-weight:600; font-size:var(--fs-body);
  line-height:20px; letter-spacing:-.005em; text-wrap:pretty;
}
a.tn-title:hover { color:var(--accent-ink); text-decoration:underline; }
.tn-what a.tn-title.tn-clamp3, .tn-clamp3 { display:-webkit-box; -webkit-box-orient:vertical; -webkit-line-clamp:3; line-clamp:3; overflow:hidden; }
.tn-clamp2 { display:-webkit-box; -webkit-box-orient:vertical; -webkit-line-clamp:2; line-clamp:2; overflow:hidden; }
tr.open .tn-what a.tn-title.tn-clamp3, tr.open .tn-clamp3, tr.open .tn-clamp2 {
  -webkit-line-clamp:unset; line-clamp:none; display:block; overflow:visible; }
.tn-who { margin-top:6px; font-size:var(--fs-meta); line-height:var(--lh-meta); color:var(--ink-2); }
.tn-who span { color:var(--ink-3); }
.tn-meta { margin-top:2px; font-size:var(--fs-cap); line-height:var(--lh-cap); color:var(--ink-3); }
/* «Как взять» — путь к договору (web._take_path): путь — серой меткой,
   цвет только у исключения «напрямую»; одна строка дела */
.pill.accent { color:var(--accent-ink); }
.tn-take { margin-top:8px; font-size:var(--fs-meta); color:var(--ink-2); line-height:var(--lh-meta); }
.tn-path { display:inline-block; margin-right:6px; padding:0 7px; border-radius:6px;
  font-size:var(--fs-cap); line-height:20px; font-weight:600; background:var(--surface-3); color:var(--ink-2); }
.tn-path.direct { background:var(--ok-bg); color:var(--ok-ink); }
.tn-take .pill { font-size:12.5px; font-weight:600; margin-right:4px; }
.tn-take-sole .tn-take-todo { color:var(--ink-3); }
.tn-take-more { margin-top:2px; }
.tn-take-more ul { margin:4px 0 2px 16px; padding:0; }
.tn-take-more li { margin:2px 0; }
.tn-flags { display:block; flex-wrap:wrap; gap:5px 6px; margin-top:6px; line-height:24px; }
/* Метка длиннее строки переносится как выделение текста, а не распухшей плашкой */
.tn-tag {
  display:inline; align-items:center; gap:4px; margin-right:4px;
  padding:2px 7px; border-radius:6px; font-size:var(--fs-cap); font-weight:500; line-height:24px;
  background:var(--surface-3); color:var(--ink-2);
  -webkit-box-decoration-break:clone; box-decoration-break:clone;
}
.tn-tag.warn { background:var(--warn-bg); color:var(--warn-ink); }
/* «⚠ документы изменены … — перечитаны …»: уже учтено, действий не требует — серым */
.tn-tag.info { background:none; padding-left:0; padding-right:0; color:var(--ink-3); }
.tn-line { margin-top:5px; font-size:var(--fs-meta); line-height:var(--lh-meta); color:var(--ink-2); }
.tn-line .tn-back { display:inline; margin:0 4px; }
.tn-line .tn-back button { padding:1px 8px; font-size:var(--fs-cap); }
/* На рассмотрении: кто отправил и кнопки решения владельца под статусом */
.tn-review { margin-top:6px; display:flex; flex-direction:column; gap:5px; }
.tn-review-pick { display:flex; gap:6px; flex-wrap:wrap; margin:0; }
/* Слежка за продолжением и откуда продолжение (app/follow.py) */
.tn-follow { color:var(--warn-ink); }
.tn-watch-act { margin-top:4px; }
/* Подпись и печать в «Реквизитах и опыте» — на белом, как на бумаге */
.marks { display:flex; flex-wrap:wrap; gap:14px; }
.mark-box { width:230px; }
.mark-box img, .mark-empty { display:block; width:100%; height:130px; object-fit:contain;
  background:#fff; border-radius:10px; box-shadow:0 0 0 1px var(--line-2); padding:8px; box-sizing:border-box; }
.mark-empty { display:flex; align-items:center; justify-content:center; color:#888; font-size:13px; }
.mark-box .lbl { font-size:13px; color:var(--ink-3); margin-bottom:6px; }
.tn-line b { font-weight:600; color:var(--ink); }
.tn-line span { color:var(--ink-3); }

.tn-sum { width:7.5rem; white-space:normal !important; min-width:7.5rem; font-weight:600; font-size:14.5px; letter-spacing:-.01em; }
/* «Сумма»: число крупно, копейки и валюта — тише */
td.tn-sum { white-space:nowrap !important; font-size:var(--fs-body); line-height:20px; }
.tn-money { font-weight:600; }
.tn-cents { font-weight:400; color:var(--ink-3); }
.tn-cur { display:block; margin-top:2px; font-size:var(--fs-cap); font-weight:500; color:var(--ink-3); letter-spacing:.02em; }

.tn-info { width:12rem; min-width:12rem; max-width:none; overflow-wrap:anywhere; }
dl.kv { margin:0; display:grid; gap:8px; }
dl.kv > div { font-size:var(--fs-meta); line-height:var(--lh-meta); }
dl.kv dt { display:inline; margin:0; color:var(--ink-3); }
dl.kv dt::after { content:": "; }
dl.kv dd { display:inline; margin:0; color:var(--ink); font-variant-numeric:tabular-nums; }
dl.kv .pill { display:inline; font-size:13px; }
dl.kv .pill::before { display:inline-block; margin-right:6px; vertical-align:middle; position:relative; top:-1px; }
dl.kv a[href^="tel:"] { white-space:nowrap; }
/* Без цветных точек у «не требуется»; контакты — по строкам */
dl.kv .pill.ok { color:inherit; font-weight:400; }
dl.kv .pill.ok::before { display:none; }
dl.kv .kv-c > * { display:block; }
dl.kv .kv-c a { white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.kv-note { display:block; margin-top:1px; font-size:12px; color:var(--ink-3); }

.tn-part { width:11rem; min-width:11rem; }
/* «Участие»: вердикт — единственная залитая метка в строке */
td.tn-part > .pill { display:inline-flex; gap:5px; padding:3px 8px; border-radius:7px; white-space:nowrap;
  font-size:var(--fs-meta); font-weight:600; line-height:18px; }
td.tn-part > .pill.ok   { background:var(--ok-bg);     color:var(--ok-ink); }
td.tn-part > .pill.warn { background:var(--warn-bg);   color:var(--warn-ink); }
td.tn-part > .pill.risk { background:var(--danger-bg); color:var(--danger-ink); }
td.tn-part details.disclose { margin-top:6px; }
.tn-reason { margin-top:6px; font-size:var(--fs-meta); line-height:var(--lh-meta); color:var(--ink-2); }
/* Причина красной и жёлтой метки — обычным текстом: цвет уже несёт метка над ней */
.tn-reason.risk, .tn-reason.warn { font-weight:400; color:var(--ink-2); }
.tn-reason + .tn-reason { padding-top:6px; border-top:1px dashed var(--line-2); }
/* Подсказка итога поданной: «похоже, вы выиграли» (app/results.py) */
.tn-reason.ok { color:var(--ok-ink); font-weight:600; }

.tn-docs { width:8rem; min-width:8rem; }
.tn-docs > * + * { margin-top:4px; }
.tn-docs > a { font-size:13px; }
.tn-docs .tn-refresh { margin-top:10px; padding-top:8px; border-top:1px solid var(--line-3);
  display:block; }
.tn-docs .tn-refresh .tn-when { display:block; font-size:var(--fs-cap); }

/* Раскрывающиеся списки: шеврон вместо системного треугольника */
details.disclose { font-size:13px; }
details.disclose > summary {
  list-style:none; display:block; color:var(--accent-ink); cursor:pointer;
  line-height:1.4; border-radius:4px;
}
details.disclose > summary::-webkit-details-marker { display:none; }
details.disclose > summary::before {
  content:""; display:inline-block; width:5px; height:5px; margin:0 7px 2px 1px;
  border:solid currentColor; border-width:0 1.5px 1.5px 0; transform:rotate(-45deg);
  transition:transform .12s ease;
}
details.disclose[open] > summary::before { transform:rotate(45deg); margin-bottom:3px; }
details.disclose > summary:hover { text-decoration:underline; text-underline-offset:2px; }
details.disclose .ai-note { display:block; padding-left:14px; font-size:12px; color:var(--ink-3); }
details.disclose .ai-note b { color:var(--warn-ink); font-weight:600; }
details.disclose ul {
  margin:6px 0 2px; padding-left:16px; font-size:12.5px; line-height:1.45;
  color:var(--ink-2); overflow-wrap:anywhere;
}
details.disclose li + li { margin-top:3px; }
details.disclose li .w { color:var(--warn-ink); }
/* Выжимка ТЗ под строкой закупки на всю ширину — см. tenders.html */
table.tenders tr.tn-wide td { padding:0 14px 14px; border-top:none; }
table.tenders tbody tr.tn-wide:hover td { background:transparent; }
.tn-wide .tn-summary-body {
  margin:0; padding:10px 14px 10px 30px; max-width:110ch; font-size:13px; line-height:1.5;
  color:var(--ink-2); background:var(--surface-2); border-radius:10px; overflow-wrap:anywhere;
}
.tn-wide .tn-summary-body li + li { margin-top:4px; }
.tn-wide .tn-summary-body .w { color:var(--warn-ink); }
/* «Требования» к участнику (18 октября 2026): ✗ красным, ⚠ янтарным, ✓ зелёным */
.tn-reqs { margin-top:4px; }
.tn-reqs summary b.rq-no { color:var(--danger-ink); }
.tn-reqs summary b.rq-warn { color:var(--warn-ink); }
.tn-reqs summary b.rq-ok { color:var(--ok-ink); }
.rq-body { margin-top:6px; padding:10px 12px; max-width:110ch; font-size:13px; line-height:1.45;
  background:var(--surface-2); border-radius:10px; overflow-wrap:anywhere; }
.rq-head { font-weight:600; font-size:14px; margin-bottom:2px; }
.rq-head.rq-no { color:var(--danger-ink); }
.rq-head.rq-warn { color:var(--warn-ink); }
.rq-head.rq-ok { color:var(--ok-ink); }
.rq-list { margin:8px 0 4px; padding-left:0; list-style:none; }
.rq-list li { padding:5px 0 5px 10px; border-left:3px solid var(--line, #ddd); }
.rq-list li + li { margin-top:4px; }
.rq-list li.rq-no { border-left-color:var(--danger); }
.rq-list li.rq-warn { border-left-color:var(--warn); }
.rq-list li.rq-ok { border-left-color:var(--ok); }
.rq-list .rq-wrong { margin-left:6px; width:auto; min-height:0; padding:2px 10px; }
.rq-quote { margin-top:2px; }
.rq-line { margin-top:6px; }
.rq-line.rq-warn { color:var(--warn-ink); }
.rq-eval { margin-top:6px; color:var(--ink-2); }
.tn-wide [data-slot] + [data-slot] { margin-top:10px; }
/* Документы для заявки — кнопка в колонке «Документы», раскрытый пакет —
   под строкой, как выжимка */
.tn-package { margin-top:6px; }
.tn-package-body { font-size:12.5px; line-height:1.45; color:var(--ink-2); overflow-wrap:anywhere; }
.tn-package-body > div + div { margin-top:6px; }
.tn-package-body .w { color:var(--warn-ink); }
/* Главное о подаче и часть заявки у файла */
.tn-facts ul { margin:4px 0 6px; padding-left:18px; }
.tn-facts li { margin:1px 0; }
.tn-pkg-part { color:var(--ink); font-weight:600; white-space:nowrap; }
/* Состав заявки по документации: пункт · как закрыть · что сделать */
.tn-comp { margin:6px 0; }
.tn-comp-table { width:100%; border-collapse:collapse; margin-top:4px; }
.tn-comp-table td { padding:3px 8px 3px 0; vertical-align:top; border-top:1px solid var(--line); }
.tn-comp-table td:nth-child(2) { white-space:nowrap; color:var(--ink-3, var(--ink-2)); }
.tn-comp-table tr.how-check td:nth-child(2), .tn-comp-table tr.how-upload td:nth-child(2),
.tn-comp-table tr.how-obtain td:nth-child(2) { color:var(--warn-ink); }
.tn-comp-table tr.how-skip td { color:var(--ink-3, var(--ink-2)); }
@media (max-width:860px) {
  .tn-comp-table td { display:block; border-top:0; padding:0; }
  .tn-comp-table tr { display:block; padding:4px 0; border-top:1px solid var(--line); }
}
.tn-package-bar { display:flex; flex-wrap:wrap; align-items:center; gap:8px; margin:6px 0 4px; }
.tn-package-bar .sub { flex:1 1 220px; }
.tn-wide .tn-package-body {
  margin:0; padding:12px 14px; max-width:110ch; font-size:13px; line-height:1.5;
  background:var(--surface-2); border-radius:10px;
}
.tn-wide .tn-package-body ul { margin:6px 0; padding-left:18px; }
/* «Наша цена» над пакетом — в узкой колонке подпись строкой выше поля */
.tn-price { display:flex; flex-wrap:wrap; align-items:center; gap:4px 6px; margin:0 0 6px; }
.tn-price label { flex:1 1 100%; font-size:12.5px; color:var(--ink-2); }
.tn-price input[type=text] { flex:1 1 5rem; width:auto; min-width:0; padding:4px 8px; }
.tn-price button { flex:none; }
/* Подсказка к цене — отдельной строкой под полем */
.tn-price .tn-hint { flex:1 1 100%; font-size:12px; line-height:1.4; }
@media (min-width:861px) { .tn-price input[type=text] { font-size:13px; } }

/* ==========================================================================
   Телефон: таблицы — строки-карточки, кнопки и поля крупнее
   ========================================================================== */
.topbar { display:none; }
@media (max-width:860px) {
  .app { display:block; }
  .wrap { padding:18px 16px 24px; gap:16px; }
  h1 { font-size:28px; letter-spacing:-.02em; }
  h2.section { font-size:19px; }
  .head { align-items:flex-start; gap:12px; }
  .head.ruled { padding-bottom:14px; }
  .workrow { grid-template-columns:minmax(0,1fr); }
  .workrow .wr-side { width:100%; }
  .tiles { grid-template-columns:repeat(2, minmax(0,1fr)); }
  body[data-section="market"] .tiles { grid-template-columns:repeat(2, minmax(0,1fr)); }
  /* Телефон: этапы — одной строкой, листаются вбок, как сегменты; список
     начинается сразу под ней */
  .tiles.seg-tiles { flex-wrap:nowrap; overflow-x:auto; scroll-snap-type:x proximity;
                    -webkit-overflow-scrolling:touch; scrollbar-width:none; }
  .tiles.seg-tiles::-webkit-scrollbar { display:none; }
  .tiles.seg-tiles > .tile { flex:0 0 auto; min-width:0; scroll-snap-align:start; }
  .tiles.seg-tiles > .tile:last-child:nth-child(odd) { grid-column:auto; }
  .tiles.seg-tiles > .tn-sep { display:none; }
  .grid2, .grid2.uneven { grid-template-columns:minmax(0,1fr); gap:16px; }

  button:not(.ask):not(.pill), .btn { width:auto; min-height:44px; padding:10px 14px; font-size:15px; border-radius:10px; text-align:center; white-space:normal; }
  .actions button, .actions .btn { width:100%; }
  .actions .right { margin-left:0; }
  /* Кнопки — по ширине надписи (разбор дизайна, Б2); на всю ширину — только .wide:
     «Разобрать», «Войти» и т. п. */
  button.wide:not(.ask):not(.pill), .btn.wide { width:100%; }
  .card .body { padding:14px 16px; }
  .card .head-bar { padding:12px 16px; }
  .card .foot-bar { padding:12px 16px; }
  .card .head-bar > form, .card .head-bar > div { flex:1 1 100% !important; max-width:none !important; margin-left:0 !important; }
  .card .head-bar > .btn, .card .head-bar > a { flex:1 1 100%; margin-left:0 !important; }
  input[type=search] ~ button:not(.ask) { width:auto; flex:none; padding-left:16px; padding-right:16px; }
  .themepick { display:flex; width:100%; }
  .themepick button:not(.ask) { width:auto; flex:1 1 0; padding:8px 6px; font-size:15px; }
  .chosen .chip button:not(.ask) { width:auto; padding:0 6px; font-size:13px; }

  .joblist .job { display:block; padding:12px 16px; }
  .joblist .btn { width:100%; margin-top:10px; padding:11px 16px; font-size:15px; }

  /* Строки-карточки: разметка та же. Каждая строка — отдельная группа
     на белом, значения справа от подписи, как в «Настройках» iPhone.
     Длинный текст (ячейки с блоками внутри) — подпись над содержимым. */
  table.cards, table.cards tbody, table.cards tr, table.cards td { display:block; width:auto; }
  table.cards thead { display:none; }
  table.cards { border-spacing:0; }
  table.cards tr {
    border:0; border-bottom:1px solid var(--line-2); border-radius:0;
    margin:0; padding:12px 16px; background:var(--surface);
  }
  table.cards tr:last-child { border-bottom:0; }
  table.cards tr:nth-child(even) td, table.cards tr:hover td { background:transparent; }
  table.cards td {
    border:none; padding:3px 0; white-space:normal; text-align:left;
    display:flex; flex-wrap:wrap; gap:2px 10px; align-items:baseline; justify-content:flex-end;
    min-width:0 !important; max-width:none !important; overflow-wrap:anywhere;
  }
  table.cards td:first-child, table.cards td:last-child { padding-left:0; padding-right:0; }
  table.cards td::before {
    content:attr(data-label); flex:0 0 40%; min-width:0; margin-right:auto;
    font-size:13px; font-weight:400; letter-spacing:0; text-transform:none;
    color:var(--ink-3); text-align:left;
  }
  table.cards td.num { text-align:right; }
  table.cards td.wrap-cell, table.cards td.stack,
  table.cards td:has(> div, > details, > form, > ul, > dl) { display:block; }
  table.cards td.wrap-cell::before, table.cards td.stack::before,
  table.cards td:has(> div, > details, > form, > ul, > dl)::before {
    display:block; margin-bottom:3px; font-size:12.5px;
  }
  table.cards td.wrap-cell { font-weight:500; }
  /* Слой владельца в карточке: лиловая полоса слева и лиловый фон —
     различие остаётся мгновенным и на телефоне */
  table.cards td.owner {
    border-left:0; background:var(--owner-bg) !important; color:var(--owner-ink);
    margin:0 -8px; padding:3px 8px 3px 11px; box-shadow:inset 3px 0 0 var(--owner);
  }
  table.cards td.owner::before { color:var(--owner-ink); }
  table.cards td:not(.owner) + td.owner { margin-top:6px; padding-top:6px; border-radius:6px 6px 0 0; }
  table.cards td.owner:last-child { padding-bottom:6px; border-radius:0 0 6px 6px; }
  table.cards tr.loss { background:var(--danger-bg); box-shadow:inset 3px 0 0 var(--danger); }
  table.cards tr.loss td { background:transparent !important; }
  table.cards tr.loss td.owner { background:var(--owner-bg) !important; }
  table.cards tr.loss td:first-child { box-shadow:none; }
  table.cards tr.total { background:var(--surface-3); }
  table.cards tr.total td { border-top:0; background:transparent !important; }
  table.cards tr.more td { justify-content:center; }
  table.cards tr.more td::before { content:none; }
  table.cards tr.marked { background:var(--warn-bg); }
  table.cards tr.marked td { background:transparent !important; }
  table.cards input.markup { width:100px; }
  table.cols td.how { width:108px; padding-left:4px; padding-right:12px; }
  table.cols td.pick { padding-left:14px; padding-right:4px; }

  /* Карточки — без собственной прокрутки; предпросмотр файла и другие
     таблицы без .cards остаются таблицей и ездят вбок внутри рамки */
  .tablewrap.cards { max-height:none; background:var(--surface); overflow:hidden; }
  .card .tablewrap.cards { background:transparent; }
  .tablewrap { max-height:none; -webkit-overflow-scrolling:touch; }

  /* Тендеры */
  .tn-tools .tn-search { flex:1 1 100%; max-width:none; }
  .tn-tools .tn-search button { width:auto; flex:none; padding:8px 14px; }
  select.tn-pick { flex:1 1 40%; }
  .tn-back button, .tn-refresh button { width:auto !important; padding:8px 14px !important; font-size:14px !important; }
}

/* ==========================================================================
   Тендеры: кнопки-ссылки и телефон (разбор дизайна 25 октября 2026).
   Стоят после общих телефонных правил: правило кнопок телефона
   (button:not(.ask):not(.pill)) той же силы и иначе перебило бы их
   ========================================================================== */
/* «Документы»: ссылки и действия без заливки — 40 строк не дают 120 плашек */
.btn-plain, .tn-docs button.btn-plain { display:inline-flex; align-items:center; width:auto; min-height:24px;
  padding:2px 0; background:none; color:var(--accent-ink); font:500 var(--fs-meta)/var(--lh-meta) var(--font); }
.btn-plain:hover:not(:disabled), .tn-docs button.btn-plain:hover:not(:disabled) { background:none; text-decoration:underline; }

/* Телефон: короткая карточка + «Подробнее» */
@media (max-width:860px) {
  .head-links { width:100%; }
  .card .head-bar > form.tn-tools { min-width:0; }
  .tn-picks { flex:1 1 100%; min-width:0; flex-wrap:nowrap; overflow-x:auto; scrollbar-width:none; margin:0 -16px; padding:0 16px; }
  .tn-picks::-webkit-scrollbar { display:none; }
  .tn-picks .tn-field { flex:0 0 auto; }
  .tn-collect h2 { font-size:var(--fs-ui); }

  table.tenders tbody tr {
    display:grid; grid-template-columns:minmax(0,1fr) auto; column-gap:12px;
    grid-template-areas:
      "dl   sum"
      "what what"
      "part part"
      "st   open"
      "rev  rev"
      "info info"
      "docs docs";
    padding:14px 16px;
  }
  table.tenders tbody td { border:0 !important; padding:0 !important; }
  table.tenders td::before { display:none !important; }
  table.tenders td.tn-due { display:contents; }
  .tn-due .tn-dl { grid-area:dl; display:flex; align-items:baseline; gap:4px 10px; flex-wrap:wrap; }
  .tn-due .tn-dl .tn-date small { display:inline; margin-left:4px; }
  .tn-due .tender-status { grid-area:st; margin-top:12px; }
  .tn-due .tender-status select { min-height:44px; width:100%; min-width:11.5rem !important; }
  .tn-due .tn-review { grid-area:rev; margin-top:10px; }
  table.tenders button.tn-open { grid-area:open; align-self:end; margin:12px 0 0; min-height:44px; padding:0 4px; }
  table.tenders td.tn-sum { grid-area:sum; width:auto; text-align:right; font-size:var(--fs-key); padding:0 !important; border:0 !important; }
  table.tenders td.tn-what { grid-area:what; margin-top:8px; }
  table.tenders td.tn-part { grid-area:part; margin-top:10px; width:auto; }
  table.tenders td.tn-info { grid-area:info; margin-top:14px; padding-top:12px !important; border-top:1px solid var(--line-3) !important; }
  table.tenders td.tn-docs { grid-area:docs; margin-top:12px; width:auto; }
  .tn-docs > * { display:inline-flex; margin:0 14px 6px 0 !important; }
  .tn-docs .tn-refresh { display:block; width:100%; margin-right:0 !important; }
  .tn-docs button.btn-plain { min-height:44px; }

  /* Свёрнута: срок, сумма, название, заказчик, вердикт с причиной, статус */
  tr:not(.open) td.tn-info, tr:not(.open) td.tn-docs,
  tr:not(.open) .tn-what > :not(.tn-title):not(.tn-who) { display:none !important; }
  tr:not(.open) .tn-who { display:-webkit-box; -webkit-box-orient:vertical; -webkit-line-clamp:1; overflow:hidden; }
  table.tenders tbody tr + tr { border-top:1px solid var(--line); }
  table.tenders tbody tr { content-visibility:auto; contain-intrinsic-size:auto 300px; }
}

/* ==========================================================================
   Уменьшить движение
   ========================================================================== */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { transition-duration:0s !important; scroll-behavior:auto !important; }
  #busy .ring { animation:none; border-top-color:var(--accent); }
  .track.waiting i { animation:none; margin-left:0; width:100% !important; opacity:.4; }
}

/* ==========================================================================
   Устройства Apple и упрощения — 5 октября 2026, поверх облика Claude Design
   ========================================================================== */
/* Нажатие на iPhone без серой вспышки поверх кнопок и ссылок */
a, button, summary, select, label { -webkit-tap-highlight-color:transparent; }

/* Строка площадки в блоке «Сбор» */
.tn-run { display:flex; gap:10px; align-items:baseline; flex-wrap:wrap; padding:3px 0; }

@media (max-width:860px) {
  /* Safari на iPhone увеличивает страницу, если шрифт поля меньше 16 px */
  input:not([type="checkbox"]):not([type="radio"]):not([type="file"]),
  select, textarea { font-size:16px !important; }
}

/* ===== Вход, восстановление пароля, пользователи (7 октября 2026) =====
   Вход — одна карточка посреди экрана, как вход в учётную запись Apple:
   значок, крупный заголовок, поля во всю ширину, одна синяя кнопка */
/* dvh — видимая высота: в Safari на iPhone 100vh выше экрана на панель
   адреса, и страница входа прокручивалась без нужды */
body.auth { min-height:100vh; min-height:100dvh; display:flex; align-items:center; justify-content:center; }
.auth-wrap { width:100%; max-width:400px; padding:32px 16px; box-sizing:border-box; }
.auth-card {
  background:var(--surface); border-radius:22px; padding:36px 32px 28px;
  box-shadow:0 0 0 1px var(--line-2), 0 12px 40px rgba(0,0,0,.08); text-align:center;
}
.auth-logo { display:block; margin:0 auto 18px; border-radius:16px; }
.auth-card h1 { margin:0 0 6px; font-size:26px; font-weight:700; letter-spacing:-.02em; color:var(--ink); }
.auth-sub { margin:0 0 22px; font-size:15px; line-height:1.45; color:var(--ink-3); }
.auth-form { text-align:left; }
.auth-form .field { margin-bottom:14px; }
.auth-form input[type=email], .auth-form input[type=password] {
  width:100%; box-sizing:border-box; height:46px; font-size:16px; border-radius:12px; padding:0 14px;
}
.auth-remember { margin:4px 0 20px; font-size:14px; color:var(--ink-2); }
/* Надпись — по центру при любом отступе: на телефоне общее правило кнопок
   даёт им отступ 12 px, и при высоте 46 px «Войти» уезжало вниз */
.auth-submit, a.auth-submit {
  display:flex; align-items:center; justify-content:center; width:100%;
  box-sizing:border-box; height:46px; border-radius:980px; padding:0 16px !important;
  font-size:16px; font-weight:600; text-align:center; line-height:1.2;
}
a.auth-submit { background:var(--accent-fill); color:var(--accent-on); margin-top:6px; }
a.auth-submit:hover { background:var(--accent-fill-hover); text-decoration:none; }
.auth-link { margin:18px 0 0; font-size:14px; }
.auth-hint { margin:0 0 18px; font-size:13px; color:var(--ink-3); text-align:left; }
.auth-note { margin:0 0 16px; padding:10px 12px; border-radius:10px; font-size:14px; text-align:left; }
.auth-note.ok { background:var(--ok-bg); color:var(--ok-ink); }
.auth-note.bad { background:var(--danger-bg); color:var(--danger-ink); }
.auth-foot { margin:18px 0 0; text-align:center; font-size:12px; color:var(--ink-4, var(--ink-3)); }
@media (max-width:480px) { .auth-card { padding:28px 20px 22px; border-radius:18px; } }

/* Кто вошёл — внизу бокового меню */
.side .foot .who { display:flex; align-items:center; gap:8px; margin:0; }
.side .foot .who-name { flex:1; min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }

/* Ноутбук 861–1365 px: меню узкое, с короткими названиями (полное — в подсказке);
   ширина нужнее таблице: «Закупке» на 1280 достаётся ≈ +124 px (разбор дизайна, К1;
   решение владельца 26 октября 2026) */
@media (min-width:861px) and (max-width:1365px) {
  .side { flex-basis:96px; padding:20px 6px 14px; }
  .side .brand { padding:0; margin-bottom:14px; text-align:center; }
  .side .brand b { font-size:15px; }
  .side nav { gap:2px; }
  .side nav a { padding:8px 2px; text-align:center; font-size:12.5px; line-height:1.25; letter-spacing:-.01em; }
  .side nav a .full { display:none; }
  .side nav a .short { display:inline; }
  .side .foot { padding:12px 0 0; text-align:center; }
  .side .foot .who { flex-direction:column; gap:6px; }
  .side .foot .who-name { flex:none; width:100%; font-size:11px; }
  .side .foot .who button { padding:4px 8px; font-size:12px; }
}

/* Смена пароля в настройках */
.pwform { display:grid; grid-template-columns:repeat(3, minmax(0, 1fr)); gap:0 14px; }
.pwform .field input { width:100%; box-sizing:border-box; }
.pwform-foot { grid-column:1 / -1; display:flex; align-items:center; gap:14px; flex-wrap:wrap; }
@media (max-width:760px) { .pwform { grid-template-columns:1fr; } }

/* Пользователи: права по разделам */
.userform .grid2 .field input { width:100%; box-sizing:border-box; }
.presets { display:flex; align-items:center; gap:8px; flex-wrap:wrap; margin:0 0 12px; }
.userform-foot { display:flex; gap:10px; flex-wrap:wrap; align-items:center; margin-top:16px; }
.linkbox { display:flex; gap:8px; }
.linkbox input { flex:1; min-width:0; font-family:var(--mono); font-size:13px; }

/* Права — переключатель на три положения у каждого раздела, как сегменты
   в настройках iPhone. Радиокнопки те же, форма та же: меняется вид */
.perms { display:flex; flex-direction:column; }
.perm-row {
  display:flex; align-items:center; justify-content:space-between; flex-wrap:wrap;
  gap:8px 16px; padding:9px 0; border-top:1px solid var(--line-2);
}
.perm-row:first-child { border-top:0; }
.perm-name { flex:1 1 200px; min-width:0; font-size:14.5px; }
.seg {
  display:inline-flex; flex:none; gap:2px; padding:2px;
  background:var(--surface-3); border-radius:9px;
}
.seg label { position:relative; display:flex; cursor:pointer; }
.seg input { position:absolute; inset:0; opacity:0; margin:0; cursor:pointer; }
.seg span {
  min-width:64px; padding:6px 14px; border-radius:7px; text-align:center;
  font-size:13.5px; font-weight:500; color:var(--ink-2);
  transition:background-color .15s ease, color .15s ease;
}
.seg label:hover span { color:var(--ink); }
.seg input:checked + span {
  background:var(--surface); color:var(--ink); font-weight:600;
  box-shadow:0 1px 3px rgba(0,0,0,.12), 0 0 0 .5px rgba(0,0,0,.06);
}
:root[data-theme="dark"] .seg input:checked + span { background:#636366; color:#FFFFFF; box-shadow:none; }
.seg input:focus-visible + span { outline:2px solid var(--accent); outline-offset:1px; }

/* Пользователи — строка на человека: имя и почта, доступ, состояние.
   Нажатие раскрывает настройку под строкой (решение владельца 7 октября 2026) */
.ulist { display:flex; flex-direction:column; gap:10px; }
.urow { background:var(--surface); border-radius:var(--r-card); box-shadow:var(--shadow-card); overflow:hidden; }
.urow.off { opacity:.62; }
.urow-sum {
  display:grid; grid-template-columns:minmax(0,1fr) minmax(0,1.3fr) minmax(0,.8fr) 14px;
  gap:4px 18px; align-items:center; padding:14px 18px; cursor:pointer; list-style:none;
}
.urow-sum::-webkit-details-marker { display:none; }
.urow.admin .urow-sum { cursor:default; }
.urow-sum:hover .urow-who b { color:var(--accent-ink); }
.urow.admin .urow-sum:hover .urow-who b { color:inherit; }
.urow-who { display:flex; flex-direction:column; min-width:0; }
.urow-who b { font-size:15px; font-weight:600; letter-spacing:-.01em; }
.urow-who span { font-size:13px; color:var(--ink-3); overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.urow-access { font-size:14px; color:var(--ink-2); line-height:1.4; }
.urow-state { font-size:13px; color:var(--ink-3); text-align:right; }
.urow-chev {
  width:7px; height:7px; justify-self:end; margin-right:3px;
  border-right:1.6px solid var(--ink-3); border-bottom:1.6px solid var(--ink-3);
  transform:rotate(-45deg); transition:transform .2s ease;
}
.urow[open] .urow-chev { transform:rotate(45deg); }
.urow[open] .urow-sum { border-bottom:1px solid var(--line-2); }
.urow-body { padding:16px 18px 18px; }
/* «Пригласить человека» — та же строка, только с формой внутри */
.urow.invite { margin-bottom:6px; }
.urow.invite .urow-sum { grid-template-columns:minmax(0,1fr) 14px; }
.urow.invite .urow-who b { color:var(--accent-ink); }

/* Google Диск — три состояния в ряд, одна отметка у каждого */
.tiles.status3 { grid-template-columns:repeat(3, minmax(0,1fr)); }
.tiles.status3 .n { font-size:15px; }

/* ==========================================================================
   Телефон: меню за кнопкой (7 октября 2026)
   Вместо полосы курсов сверху и шести вкладок снизу — тонкая полоса
   с названием и кнопкой меню, как на apple.com. Меню — разделы крупно,
   под ними курсы и выход. Нижней панели больше нет: экран целиком
   под работу
   ========================================================================== */
.burger, .menu-rates { display:none; }
@media (max-width:860px) {
  .app { padding-bottom:env(safe-area-inset-bottom); }
  #toast { bottom:calc(20px + env(safe-area-inset-bottom)); }

  .topbar {
    display:flex; align-items:center; justify-content:space-between; flex-wrap:nowrap; gap:12px;
    height:52px; box-sizing:content-box; padding:env(safe-area-inset-top) 6px 0 16px;
    background:var(--bar-bg); border-bottom:1px solid var(--line-2);
    position:sticky; top:0; z-index:50;
    -webkit-backdrop-filter:saturate(180%) blur(20px); backdrop-filter:saturate(180%) blur(20px);
  }
  .topbar .t {
    display:block; min-width:0; font-size:18px; font-weight:700; letter-spacing:-.02em;
    color:var(--ink); text-decoration:none;
  }
  .burger {
    display:inline-flex; position:relative; flex:none;
    width:44px !important; height:44px; padding:0 !important;
    border:0; border-radius:50% !important; background:transparent; box-shadow:none; color:var(--ink);
  }
  .burger:hover:not(:disabled), .burger:active { background:var(--side-on); filter:none; }
  .burger i {
    position:absolute; left:13px; top:21px; width:18px; height:1.6px;
    border-radius:1px; background:currentColor;
    transition:transform .28s cubic-bezier(.4,0,.2,1);
  }
  .burger i:first-child { transform:translateY(-3.5px); }
  .burger i:last-child { transform:translateY(3.5px); }
  body.menu-open .burger i:first-child { transform:rotate(45deg); }
  body.menu-open .burger i:last-child { transform:rotate(-45deg); }

  /* Меню закрыто — панели нет совсем; открыто — во весь экран под полосой */
  .side { display:none; }
  body.menu-open { overflow:hidden; }
  body.menu-open .side {
    display:flex; flex-direction:column; gap:0;
    position:fixed; z-index:45; left:0; right:0; bottom:0;
    top:calc(52px + env(safe-area-inset-top)); height:auto;
    /* align-self у компьютерной панели сжал бы меню по содержимому */
    align-self:stretch;
    padding:6px 28px calc(24px + env(safe-area-inset-bottom));
    background:var(--bar-bg); border:0;
    -webkit-backdrop-filter:saturate(180%) blur(24px); backdrop-filter:saturate(180%) blur(24px);
    overflow-y:auto; overscroll-behavior:contain;
    animation:menu-in .22s ease-out;
  }
  body.menu-open .side .brand { display:none; }
  body.menu-open .side nav { display:flex; flex-direction:column; gap:0; }
  body.menu-open .side nav a {
    display:block; min-height:0; padding:12px 0; border-radius:0; text-align:left;
    font-size:26px; font-weight:600; letter-spacing:-.02em; line-height:1.2;
    color:var(--ink); background:transparent;
    animation:menu-item .32s ease-out both;
  }
  body.menu-open .side nav a.on { color:var(--accent-ink); }
  body.menu-open .side nav a:hover { background:transparent; color:var(--accent-ink); }
  body.menu-open .side nav a:nth-child(2) { animation-delay:.02s; }
  body.menu-open .side nav a:nth-child(3) { animation-delay:.04s; }
  body.menu-open .side nav a:nth-child(4) { animation-delay:.06s; }
  body.menu-open .side nav a:nth-child(5) { animation-delay:.08s; }
  body.menu-open .side nav a:nth-child(6) { animation-delay:.10s; }

  body.menu-open .menu-rates {
    display:flex; gap:28px; margin-top:26px; padding-top:18px;
    border-top:1px solid var(--line-2);
  }
  .menu-rates div { display:flex; flex-direction:column; gap:2px; }
  .menu-rates b { font:600 17px/1.2 var(--font); font-variant-numeric:tabular-nums; }
  .menu-rates span { font-size:12px; color:var(--ink-3); }
  body.menu-open .side .foot {
    display:block; margin-top:auto; padding:22px 0 0; color:var(--ink-3); font-size:14px;
  }
  body.menu-open .side .foot .who-name { font-size:15px; color:var(--ink-2); }
  body.menu-open .side .foot .who button { width:auto; padding:9px 18px; font-size:15px; }

  /* Права — название над переключателем, переключатель во всю ширину */
  .perm-row { flex-direction:column; align-items:stretch; gap:8px; padding:12px 0; }
  .perm-name { flex:none; }
  .seg { display:flex; }
  .seg label { flex:1 1 0; }
  .seg span { flex:1; min-width:0; padding:8px 4px; font-size:14px; }

  /* Строка пользователя — столбиком, стрелка справа */
  .urow-sum { grid-template-columns:minmax(0,1fr) 14px; gap:3px 12px; padding:13px 16px; }
  .urow-who, .urow-access, .urow-state { grid-column:1; }
  .urow-state { text-align:left; }
  .urow-chev { grid-column:2; grid-row:1 / span 3; }
  .urow-body { padding:14px 16px 16px; }

  /* Готовые наборы прав — чипами в строку, а не четырьмя полосами */
  .presets button:not(.ask) { width:auto; padding:8px 14px; font-size:14px; }

  /* Нечётная последняя плитка — на всю строку, без пустой клетки рядом */
  .tiles > .tile:last-child:nth-child(odd) { grid-column:1 / -1; }
  .tiles.status3 { grid-template-columns:repeat(3, minmax(0,1fr)); }
  .tiles.status3 > .tile:last-child:nth-child(odd) { grid-column:auto; }
  .tiles.status3 .tile { padding:10px 12px 11px; }

  /* Кнопки посчитанного прайса — ровной сеткой два на два */
  .joblist .acts { display:grid; grid-template-columns:repeat(2, minmax(0,1fr)); gap:8px; width:100%; margin-top:10px; }
  .joblist .acts form { display:flex; }
  .joblist .acts .btn, .joblist .acts form .btn { width:100%; margin:0; padding:11px 8px; font-size:14px; }
}
@keyframes menu-in { from { opacity:0; } to { opacity:1; } }
@keyframes menu-item { from { opacity:0; transform:translateY(-8px); } to { opacity:1; transform:none; } }
@media (prefers-reduced-motion:reduce) {
  body.menu-open .side, body.menu-open .side nav a, .burger i { animation:none !important; transition:none !important; }
}

/* «Почему» и «документы» приходят по нажатию — пока грузятся, тихая строка */
.lazy-wait { font-size:13px; color:var(--ink-3); padding:6px 0 2px; }

/* Проверка пакета (ТЗ ИИ-подготовки, этап 6): жёлтые поля и текст ИИ */
.tn-pkg-review { margin:8px 0; padding:10px 12px; border:1px solid var(--line); border-radius:12px; background:var(--surface); }
.tn-pkg-review fieldset { margin:8px 0 0; padding:6px 10px 8px; border:1px solid var(--line); border-radius:10px; }
.tn-pkg-review legend { padding:0 4px; font-weight:600; }
.tn-pkg-review label { display:block; margin:3px 0; }
.tn-pkg-review input[type=text] { width:min(420px, 100%); }
.tn-pkg-review textarea { width:100%; box-sizing:border-box; font:inherit; }
.tn-pkg-review button { margin-top:8px; }

/* ==========================================================================
   Сделки (ТЗ «Сделки», 13 октября 2026): доска по этапам, карточка сделки,
   быстрое создание, архив, настройки. Всё внутри .dl — общий облик
   остальных разделов не трогается. Цвет этапа — переменная --stage
   ========================================================================== */
.dl { --stage:var(--accent); }
.dl .sr { position:absolute; width:1px; height:1px; overflow:hidden; clip:rect(0 0 0 0); white-space:nowrap; }
.dl .small { font-size:12.5px; }
.dl input[type=datetime-local], .dl input[type=time], .dl textarea {
  width:100%; padding:8px 11px; font:inherit; font-size:15px; line-height:1.4;
  background:var(--field-bg); color:var(--ink); border:1px solid var(--field-border); border-radius:var(--r-ctl);
}
.dl input[type=color] { width:38px; height:34px; padding:2px; border:1px solid var(--field-border);
  border-radius:var(--r-ctl); background:var(--field-bg); cursor:pointer; flex:none; }
.dl fieldset { border:0; margin:0; padding:0; min-width:0; }
.dl .dl-dot { display:inline-block; width:9px; height:9px; border-radius:50%; background:var(--stage); flex:none; }

/* Меню раздела */
.dl-nav { display:flex; gap:4px; align-items:center; flex-wrap:wrap; margin:0 0 16px; }
.dl-nav a:not(.btn) { padding:6px 12px; border-radius:var(--r-ctl); color:var(--ink-2); text-decoration:none; font-size:14.5px; }
.dl-nav a:not(.btn):hover { background:var(--side-on); }
.dl-nav a.on { background:var(--surface); color:var(--ink); font-weight:600; box-shadow:var(--shadow-card); }
.dl-nav .dl-plus { margin-left:auto; }

/* Доска: колонки этапов в ряд, лишнее — прокруткой вбок */
.dl-tabs { display:none; }
.dl-board { display:flex; gap:10px; overflow-x:auto; padding-bottom:10px; align-items:flex-start; }
.dl-col { flex:0 0 268px; background:var(--col-bg); border-radius:var(--r-card); padding:8px; min-height:120px;
  border-top:3px solid var(--stage); transition:background-color .12s ease; }
.dl-col.over { background:var(--accent-bg); }
.dl-col-head { display:flex; align-items:center; gap:7px; padding:4px 4px 8px; font-size:var(--fs-ui); }
.dl-col-head b { font-weight:600; }
.dl-col-head .dl-sum:empty { display:none; }
/* Пустой этап — той же ширины, что и с заявками: доска читается одинаково
   (решение владельца 26 октября 2026; узкие полоски с 23 октября сняты) */
.dl-count { color:var(--ink-3); font-size:12.5px; font-variant-numeric:tabular-nums; }
.dl-sum { margin-left:auto; color:var(--ink-2); font-size:12.5px; font-variant-numeric:tabular-nums; }
.dl-col-body { display:flex; flex-direction:column; gap:8px; }
.dl-empty { color:var(--ink-4); font-size:13px; text-align:center; padding:14px 0; }
.dl-more { display:block; text-align:center; font-size:13px; padding:6px; }
.dl-hint { margin-top:10px; }
.dl-list { display:grid; grid-template-columns:repeat(auto-fill, minmax(260px, 1fr)); gap:10px; }

/* Свёрнутая карточка: кто → причина рамки (сразу под именем) → что → откуда */
.dl-tile { display:flex; flex-direction:column; gap:2px; background:var(--tile-bg); border-radius:10px;
  padding:10px 12px; box-shadow:var(--shadow-card), 0 0 0 1px var(--line-3); color:var(--ink);
  text-decoration:none; font-size:13.5px; line-height:1.35; cursor:pointer; }
.dl-tile:hover { text-decoration:none; box-shadow:0 0 0 1px var(--accent-line); }
.dl-tile.drag { opacity:.45; }
.dl-tile.late { box-shadow:0 0 0 1.5px var(--danger-line); }
/* Клиент ждёт ответа дольше срока — красная рамка (ТЗ, 7.1) */
.dl-tile.waitlate { box-shadow:0 0 0 2px var(--danger-ink); }
.dl-wait { align-self:flex-start; margin:2px 0 4px; padding:1px 7px; border-radius:6px;
  font-size:var(--fs-cap); line-height:18px; color:var(--warn-ink); font-weight:500; background:var(--warn-bg); }
.dl-wait.late { color:var(--danger-ink); background:var(--danger-bg); }
.dl-waitline form.dl-inline { display:inline-block; margin-left:6px; }
.dl-tile-top { display:flex; align-items:baseline; gap:8px; }
.dl-who { font-weight:600; font-size:var(--fs-ui); overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.dl-ch { margin-left:auto; flex:none; font-size:11.5px; color:var(--ink-3); background:var(--surface-3);
  border-radius:5px; padding:1px 6px; }
.dl-svc { font-size:var(--fs-meta); color:var(--ink-2); }
.dl-amount { font-weight:600; font-variant-numeric:tabular-nums; }
.dl-next { color:var(--ink-2); }
.dl-next.late { color:var(--danger-ink); font-weight:500; }
.dl-foot { display:flex; gap:6px; flex-wrap:wrap; align-items:center; color:var(--ink-3); font-size:var(--fs-cap); margin-top:2px; }
.dl-flag { display:inline-block; font-size:11.5px; font-weight:500; padding:0 6px; border-radius:5px;
  background:var(--surface-3); color:var(--ink-2); line-height:1.6; }
.dl-flag.warn { background:var(--warn-bg); color:var(--warn-ink); }
/* Значки «Сайт», «Бот» и серые флажки — на тон ниже карточки (в тёмной теме иначе сливаются) */
.dl-tile .dl-ch, .dl-tile .dl-flag:not(.warn):not(.risk) { background:var(--col-bg); }

/* Карточка сделки */
.dl-headcard { border-top:3px solid var(--stage); margin-bottom:16px; }
.dl-headline { display:flex; flex-wrap:wrap; gap:10px; align-items:center; }
.dl-stage { display:inline-flex; align-items:center; gap:7px; font-weight:600; }
.dl-headsum { margin-left:auto; font-size:20px; font-weight:700; font-variant-numeric:tabular-nums; }
.dl-wholine { margin-top:8px; color:var(--ink-2); }
.dl-nextline { margin-top:6px; color:var(--ink-2); }
.dl-nextline.late { color:var(--danger-ink); }
.dl-headactions { display:flex; flex-wrap:wrap; gap:8px; align-items:center; margin-top:14px; }
.dl-headactions form { margin:0; }
.dl-stageform { display:flex; gap:8px; align-items:center; }
.dl-stageform select { width:auto; min-width:180px; }
.dl-grid { display:grid; grid-template-columns:minmax(0, 1.15fr) minmax(0, 1fr); gap:16px; align-items:start; }
.dl-side { display:flex; flex-direction:column; gap:16px; }
.dl-grid2 { display:grid; grid-template-columns:repeat(2, minmax(0, 1fr)); gap:16px; margin-top:16px; }
.dl-grid3 { display:grid; grid-template-columns:repeat(auto-fill, minmax(200px, 1fr)); gap:0 14px; margin-top:10px; }
.dl-narrow { max-width:620px; }
.dl-form .field { margin-bottom:12px; }
.dl-row { display:flex; gap:8px; align-items:center; flex-wrap:wrap; }
.dl-row > input[type=text] { flex:1 1 200px; width:auto; }
.dl-row2 { display:grid; grid-template-columns:minmax(0, 1fr) minmax(0, 1fr); gap:10px; }
.dl-bar { display:flex; gap:8px; align-items:center; flex-wrap:wrap; margin-top:8px; }
.dl-bar select, .dl-bar input, .dl-row select { width:auto; }
/* На широком экране лента переписки остаётся на виду, пока листаете
   блоки справа; длинная — прокручивается внутри */
@media (min-width:1001px) {
  .dl-feed { position:sticky; top:16px; }
  .dl-feed > .body { max-height:calc(100vh - 110px); overflow:auto; }
}
.dl-inline { display:inline; margin:0; }
.dl-mini { font-size:12.5px; }
.dl section.card + section.card { margin-top:16px; }
.dl .dl-side section.card + section.card { margin-top:0; }

/* Лента переписки */
.dl-msg { border-radius:10px; padding:8px 11px; margin-bottom:8px; background:var(--surface-2);
  box-shadow:0 0 0 1px var(--line-3); max-width:92%; }
.dl-msg.in { margin-right:auto; }
.dl-msg.out { margin-left:auto; background:var(--accent-bg-2); box-shadow:0 0 0 1px var(--accent-line); }
.dl-msg.note { margin-left:auto; background:var(--warn-bg); box-shadow:0 0 0 1px var(--warn-line); }
.dl-msg.system { margin:0 auto 8px; background:transparent; box-shadow:none; color:var(--ink-3); text-align:center; }
.dl-meta { font-size:12px; color:var(--ink-3); margin-bottom:3px; }
.dl-text { white-space:pre-wrap; overflow-wrap:anywhere; }
.dl-compose { margin-top:12px; }
.dl-compose textarea { resize:vertical; }
/* Автоответ бота — серым и свёрнутым: клиент его получил, но это не ответ */
.dl-msg.auto { margin-left:auto; background:transparent; box-shadow:0 0 0 1px var(--line-3); color:var(--ink-3); }
.dl-msg.auto summary { cursor:pointer; margin:0; }
.dl-msg.failed { box-shadow:0 0 0 1px var(--danger-line); }
.dl-attach { margin-top:6px; }
.dl-attach img { display:block; max-width:min(260px, 100%); max-height:260px; border-radius:8px; }
.dl-attach audio { width:min(280px, 100%); }
.dl-attach video { display:block; max-width:min(320px, 100%); border-radius:8px; }
.dl-status { font-size:12px; color:var(--ink-3); margin-top:4px; }
.dl-status.error, .dl-status.unknown { color:var(--danger-ink); }
.dl-msg form.dl-inline { margin-top:6px; }
.dl-file { font-size:13px; color:var(--ink-2); display:inline-flex; gap:6px; align-items:center; }
.dl-file input { max-width:200px; font-size:12.5px; }
.dl-noreply { margin:12px 0 0; }
.dl-visitors { list-style:none; margin:0; padding:0; }
.dl-visitors li { display:flex; gap:12px; align-items:center; justify-content:space-between;
  padding:10px 0; border-bottom:1px solid var(--line-3); }
.dl-visitors li:last-child { border-bottom:0; }

/* Клиент, задачи, файлы, история */
.dl-contacts, .dl-tasks, .dl-files, .dl-history, .dl-others { list-style:none; margin:0; padding:0; }
.dl-contacts li, .dl-tasks li, .dl-files li { display:flex; flex-wrap:wrap; gap:6px 8px; align-items:baseline;
  padding:6px 0; border-bottom:1px solid var(--line-3); }
.dl-contacts li:last-child, .dl-tasks li:last-child, .dl-files li:last-child { border-bottom:0; }
.dl-contacts form, .dl-tasks form, .dl-files form { margin-left:auto; }
.dl-tasks li.late .dl-task-text { color:var(--danger-ink); }
.dl-tasks li.done .dl-task-text { color:var(--ink-4); text-decoration:line-through; }
.dl-task-text { flex:1 1 auto; }
.dl-others li { padding:3px 0; font-size:13.5px; }
.dl-history { margin-top:8px; font-size:13px; line-height:1.45; }
.dl-history li { padding:3px 0; }
.dl-linkout { display:flex; gap:12px; flex-wrap:wrap; margin-top:4px; font-size:13.5px; }
.dl-link + .dl-link { margin-top:6px; }

/* Выбор услуг — «таблетки» с галочкой */
.dl-chips { display:flex; flex-wrap:wrap; gap:6px; }
.dl-chip { position:relative; cursor:pointer; }
.dl-chip input { position:absolute; opacity:0; pointer-events:none; }
.dl-chip span { display:inline-block; padding:6px 12px; border-radius:999px; font-size:14px; background:var(--surface-3);
  color:var(--ink-2); box-shadow:0 0 0 1px var(--line-2); }
.dl-chip.small span { padding:3px 9px; font-size:12.5px; }
.dl-chip input:checked + span { background:var(--accent-bg); color:var(--accent-ink); box-shadow:0 0 0 1px var(--accent-line); font-weight:500; }
.dl-chip input:focus-visible + span { box-shadow:0 0 0 3px var(--focus-ring); }

/* Быстрое создание */
.dl-found { margin:-4px 0 12px; font-size:13.5px; }
.dl-found-deals { margin-top:6px; }

/* Настройки этапов */
.dl-stagerow { padding:12px 0; border-bottom:1px solid var(--line-3); }
.dl-stagerow.off { opacity:.7; }
.dl-stagehead { display:flex; gap:10px; align-items:center; flex-wrap:wrap; }
.dl-stagehead input[type=text] { flex:0 1 240px; width:auto; }
.dl-stagereq { display:flex; flex-wrap:wrap; gap:6px; margin-top:8px; }
.dl .check.small { min-height:0; padding:2px 0; font-size:13px; }

@media (max-width:1000px) {
  .dl-grid { grid-template-columns:minmax(0, 1fr); }
}
@media (max-width:860px) {
  /* На телефоне доска — одна колонка на экран, этапы — вкладками сверху */
  .dl-tabs { display:flex; gap:6px; overflow-x:auto; margin:0 -16px 12px; padding:0 16px 4px; scrollbar-width:none; }
  .dl-tabs::-webkit-scrollbar { display:none; }
  .dl .dl-tabs button { width:auto; flex:none; display:inline-flex; gap:6px; align-items:center; padding:7px 12px;
    font-size:14px; border-radius:999px; background:var(--surface); color:var(--ink-2); box-shadow:0 0 0 1px var(--line-2); }
  .dl .dl-tabs button.on { background:var(--ink); color:var(--surface); box-shadow:none; }
  .dl .dl-tabs button.on .dl-count { color:inherit; opacity:.75; }
  .dl-board { display:block; overflow:visible; }
  .dl-col { display:none; padding:6px; }
  .dl-col.on { display:block; }
  .dl-col-head { display:none; }
  .dl-grid2, .dl-row2 { grid-template-columns:minmax(0, 1fr); }
  .dl-nav { gap:2px; }
  .dl-nav a:not(.btn) { padding:6px 8px; }
  /* «+ Сделка» — в конце второй строки меню, не на всю ширину */
  .dl-nav .dl-plus { width:auto; margin:0 0 0 auto; flex:none; padding:8px 12px; }
  /* Мелкие кнопки раздела — по своей ширине, а не на всю строку */
  .dl button.inl, .dl .btn.inl, .dl button.small { width:auto; padding:9px 14px; font-size:15px; }
  .dl .dl-headactions > form, .dl .dl-headactions > .btn { flex:1 1 auto; }
  .dl .dl-headactions .dl-stageform { flex:1 1 100%; }
  .dl .dl-stageform select { flex:1 1 auto; min-width:0; }
  .dl-headsum { width:100%; margin-left:0; }
  .dl-msg { max-width:100%; }
  .dl input[type=datetime-local], .dl input[type=time], .dl textarea { font-size:16px; }
}

/* Панель сделки поверх доски — как карточка в Битрикс24 (просьба владельца
   13 октября 2026): выезжает справа, доска под ней остаётся на месте */
body.dl-locked { overflow:hidden; }
.dl-panel { position:fixed; inset:0; z-index:200; }
.dl-panel[hidden] { display:none; }
.dl-panel-back { position:absolute; inset:0; background:rgba(0,0,0,.32); opacity:0; transition:opacity .2s ease; }
.dl-panel-box { position:absolute; top:0; right:0; bottom:0; width:min(920px, 92vw); background:var(--page);
  box-shadow:-12px 0 40px rgba(0,0,0,.18); display:flex; flex-direction:column;
  transform:translateX(100%); transition:transform .22s ease; }
.dl-panel.on .dl-panel-back { opacity:1; }
.dl-panel.on .dl-panel-box { transform:none; }
.dl-panel-bar { display:flex; align-items:center; gap:12px; padding:10px 14px 10px 20px; flex:none;
  border-bottom:1px solid var(--line-2); background:var(--surface); }
.dl-panel-title { font-weight:600; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; flex:1 1 auto; min-width:0; }
.dl-panel-full { font-size:13.5px; flex:none; }
.dl-panel button.dl-panel-x { flex:none; width:34px; height:34px; padding:0; border-radius:50%; background:var(--surface-3);
  color:var(--ink-2); font-size:20px; font-weight:400; line-height:1; }
.dl-panel button.dl-panel-x:hover:not(:disabled) { background:var(--side-on); }
.dl-panel-frame { flex:1 1 auto; width:100%; border:0; background:var(--page); }
/* На широком экране панель уже, завеса светлее: доска под ней читается */
@media (min-width:1280px) {
  .dl-panel-box { width:min(720px, calc(100vw - 360px)); }
  .dl-panel-back { background:rgba(0,0,0,.12); }
}
@media (prefers-reduced-motion:reduce) { .dl-panel-back, .dl-panel-box { transition:none; } }

/* Страница сделки внутри панели — без меню и боковой полосы */
body.embed { background:var(--page); }
.dl-embed { padding:16px 20px 40px; }
.dl-embed-title { font-size:22px; line-height:1.25; margin:0 0 14px; }

@media (max-width:860px) {
  .dl-panel-box { width:100vw; box-shadow:none; }
  .dl-panel-full { display:none; }
  .dl-panel button.dl-panel-x { width:44px; height:44px; padding:0; font-size:22px; border-radius:50%; }
  .dl-embed { padding:12px 16px 32px; }
  .dl-embed-title { font-size:20px; }
}


/* Сделки, шаг 4: склейка клиентов */
.dl-same { margin-top:14px; padding:10px 12px; border-radius:10px; background:var(--warn-bg);
  box-shadow:0 0 0 1px var(--warn-line); }
.dl-same-row { display:flex; flex-wrap:wrap; gap:6px 10px; align-items:center; justify-content:space-between;
  padding:4px 0; font-size:13.5px; }
.dl-same-actions { display:inline-flex; gap:6px; align-items:center; }
.dl-move { margin-top:4px; font-size:12px; color:var(--ink-3); }
.dl-move summary { cursor:pointer; }
.dl-move form { margin-top:4px; }
.dl-flag.risk { background:var(--danger-bg, rgba(255,59,48,.12)); color:var(--danger-ink); }

/* Сделки, шаг 6: график платежей и отчёт */
.dl-pay { width:100%; border-collapse:collapse; font-size:13.5px; }
.dl-pay td, .dl-pay th { padding:6px 4px; border-bottom:1px solid var(--line-3); text-align:left; vertical-align:top; }
.dl-pay th { font-weight:500; color:var(--ink-3); font-size:12px; }
.dl-pay tr.late td { color:var(--danger-ink); }
.dl-pay tr.paid td { color:var(--ink-3); }
.dl-pay tr.canceled td { color:var(--ink-4); text-decoration:line-through; }
.dl-pay .num { text-align:right; white-space:nowrap; }
.dl-pay details summary { cursor:pointer; font-size:12.5px; color:var(--accent-ink); }
.dl-pay details form { margin-top:6px; display:grid; gap:6px; }
.dl-paytotal { margin-top:8px; font-size:13.5px; }
.dl-cards { display:grid; grid-template-columns:repeat(4, minmax(0, 1fr)); gap:10px; margin-bottom:16px; }
.dl-cards > div { background:var(--surface); border-radius:12px; padding:12px 14px; }
.dl-cards b { display:block; font-size:19px; font-weight:600; margin-top:2px; }
.dl-cards .late b { color:var(--danger-ink); }
.dl-months td.now { font-weight:600; }
@media (max-width: 760px) { .dl-cards { grid-template-columns:repeat(2, minmax(0, 1fr)); } }
.dl-payrow { padding:8px 0; border-bottom:1px solid var(--line-3); font-size:13.5px; }
.dl-payrow:last-child { border-bottom:0; }
.dl-payhead { display:flex; justify-content:space-between; gap:10px; }
.dl-payhead .num { white-space:nowrap; }
.dl-paystate { margin-top:2px; }
.dl-payrow.late .dl-paystate, .dl-payrow.late .dl-payhead { color:var(--danger-ink); }
.dl-payrow.paid .dl-paystate { color:var(--ok-ink); }
.dl-payrow.canceled { color:var(--ink-4); text-decoration:line-through; }
.dl-payactions { display:flex; flex-wrap:wrap; gap:6px 12px; align-items:flex-start; margin-top:4px; }
.dl-payactions summary { cursor:pointer; font-size:12.5px; color:var(--accent-ink); }
.dl-payactions details form { margin-top:6px; display:grid; gap:6px; }

/* Сделки, шаг 7: источники */
.dl-srcshort { font-size:var(--fs-cap); color:var(--ink-3); }
.dl-src + .dl-src { margin-top:12px; padding-top:12px; border-top:1px solid var(--line-3); }
.dl-srcname { margin-top:6px; }
#sources textarea { font-family:var(--mono, ui-monospace, monospace); font-size:12.5px; }

/* Сделки, шаг 8: поиск, фильтры, клиенты */
.dl-filters { margin-bottom:12px; display:grid; gap:8px; }
.dl-search { display:flex; gap:8px; align-items:center; flex-wrap:wrap; }
.dl-search input[type=search] { flex:1 1 280px; min-width:0; }
.dl-quick { display:flex; flex-wrap:wrap; gap:6px; }
/* Быстрые отборы — с числом; «Ждут ответа» краснеет, если есть кого ждать */
.dl-chip-link { display:inline-flex; align-items:center; gap:6px; min-height:30px; font-size:var(--fs-meta);
  padding:4px 12px; border-radius:999px; background:var(--surface); color:var(--ink-2); box-shadow:0 0 0 1px var(--line-2); }
.dl-chip-link:hover { text-decoration:none; background:var(--accent-bg-2); }
.dl-chip-link.on { background:var(--accent-bg-2); color:var(--accent-ink); box-shadow:0 0 0 1px var(--accent-line); }
.dl-chip-link .dl-count { font-weight:600; color:var(--ink-2); }
.dl-chip-link.hot { background:var(--danger-bg); box-shadow:0 0 0 1px var(--danger-line); color:var(--danger-ink); }
.dl-chip-link.hot .dl-count { color:inherit; }
.dl-chip-link.zero .dl-count { color:var(--ink-3); font-weight:400; }
.dl-fields { flex-wrap:wrap; gap:6px; margin-top:8px; }
.dl-fields select, .dl-fields input[type=date] { width:auto; }
.dl-chips-on { display:flex; flex-wrap:wrap; gap:6px; align-items:center; }
.dl-chip-on { font-size:12.5px; padding:2px 9px; border-radius:999px; background:var(--accent-bg-2); color:var(--accent-ink); }
.dl-found-list { list-style:none; margin:0; padding:0; }
.dl-found-list li { padding:8px 0; border-bottom:1px solid var(--line-3); }
.dl-found-list li:last-child { border-bottom:0; }
.dl-found-list mark { background:var(--warn-bg); color:inherit; border-radius:3px; padding:0 1px; }
.dl-col.dl-virtual { display:none; }
@media (max-width: 860px) {
  .dl .dl-col.dl-virtual.on { display:block; }
  /* Поиск и быстрые отборы — одной строкой, отборы листаются вбок */
  .dl-search { flex-wrap:nowrap; }
  .dl-search input[type=search] { flex:1 1 0; }
  .dl-quick { flex-wrap:nowrap; overflow-x:auto; scrollbar-width:none; margin:0 -16px; padding:0 16px; }
  .dl-quick::-webkit-scrollbar { display:none; }
  .dl-chip-link { flex:none; white-space:nowrap; min-height:36px; }
}
.rq-topics { margin-top:4px; }
.rq-topics details + details { margin-top:2px; }

/* ==========================================================================
   Планы закупок (19 октября 2026; облик — разбор дизайна 25 октября 2026):
   строка-сетка «когда · что и чьё · сумма · отметки», «Ночи» свёрнуты
   ========================================================================== */
.pl-bar { display:flex; align-items:center; gap:8px 16px; flex-wrap:wrap; font-size:var(--fs-meta); color:var(--ink-2); }
.pl-bar .pl-hint { flex:1 1 100%; color:var(--ink-3); }
/* Тема — те же три ссылки, что сейчас («все · сайты и реклама · системы и разработка»),
   оформленные сегментом; выбранная — <b aria-current="page"> */
.seg-nav { display:inline-flex; gap:2px; padding:2px; margin-left:auto; border-radius:9px; background:var(--surface-3); }
.seg-nav > a, .seg-nav > b { padding:5px 12px; border-radius:7px; font-size:var(--fs-meta); line-height:18px;
  font-weight:500; color:var(--ink-2); text-decoration:none; white-space:nowrap; }
.seg-nav > a:hover { color:var(--ink); }
.seg-nav > b { background:var(--surface); color:var(--ink); font-weight:600;
  box-shadow:0 1px 3px rgba(0,0,0,.12), 0 0 0 .5px rgba(0,0,0,.06); }
:root[data-theme="dark"] .seg-nav > b { background:#636366; color:#FFFFFF; box-shadow:none; }
details.pl-nights > summary { list-style:none; border-bottom:0; cursor:pointer; }
details.pl-nights > summary::-webkit-details-marker { display:none; }
details.pl-nights > summary h2::after { content:" ▾"; color:var(--accent-ink); font-weight:500; }
details.pl-nights[open] > summary h2::after { content:" ▴"; }
details.pl-nights[open] > summary { border-bottom:1px solid var(--line-2); }
details.pl-nights > .body { overflow-x:auto; }   /* таблица шире телефона — прокрутка вбок внутри */
.pl-list { padding:0 20px; }
.pl-row { display:grid; grid-template-columns:7.5rem minmax(0,1fr) 8.5rem auto;
  grid-template-areas:"when main sum acts"; column-gap:20px; padding:14px 0;
  border-bottom:1px solid var(--line-2); }
.pl-row:last-child { border-bottom:0; }
/* Позиции одного заказчика подряд: первая на виду, «ещё N позиций» — под ней (К3) */
.pl-row:has(+ .pl-group) { border-bottom:0; padding-bottom:4px; }
.pl-group { border-bottom:1px solid var(--line-2); }
.pl-group:last-child { border-bottom:0; }
.pl-group > summary { list-style:none; cursor:pointer; padding:0 0 12px calc(7.5rem + 20px);
  font-size:var(--fs-meta); line-height:var(--lh-meta); color:var(--accent-ink); }
.pl-group > summary::-webkit-details-marker { display:none; }
.pl-group > summary::after { content:" ▾"; }
.pl-group[open] > summary::after { content:" ▴"; }
.pl-group > summary:hover { text-decoration:underline; text-underline-offset:2px; }
.pl-group[open] > summary { border-bottom:1px solid var(--line-2); }
.pl-group > .pl-row { border-bottom:1px solid var(--line-2); }
.pl-group > .pl-row:last-child { border-bottom:0; }
/* Длинный список: строки за экраном не рисуются */
.pl-row { content-visibility:auto; contain-intrinsic-size:auto 140px; }
.pl-when { grid-area:when; display:flex; flex-direction:column; gap:3px; }
.pl-when b { font-size:var(--fs-ui); line-height:var(--lh-ui); }
.pl-when .pill { font-size:var(--fs-cap); }
.pl-when .pl-seen { font-size:var(--fs-cap); line-height:var(--lh-cap); color:var(--ink-3); }
.pl-main { grid-area:main; min-width:0; }
a.pl-title { display:block; color:var(--ink); font-weight:600; font-size:var(--fs-body); line-height:20px; text-wrap:pretty; }
a.pl-title:hover { color:var(--accent-ink); }
.pl-who { margin-top:4px; font-size:var(--fs-meta); line-height:var(--lh-meta); color:var(--ink-2); }
.pl-tags { margin-top:2px; font-size:var(--fs-cap); line-height:var(--lh-cap); color:var(--ink-3); }
.pl-again { margin-top:6px; font-size:var(--fs-meta); line-height:var(--lh-meta); color:var(--ink-2); }
.pl-again b { font-weight:600; }
.pl-foot { margin-top:6px; display:flex; gap:4px 16px; flex-wrap:wrap; align-items:baseline; font-size:var(--fs-meta); }
.pl-sum { grid-area:sum; text-align:right; font-size:var(--fs-body); line-height:20px; font-weight:600;
  font-variant-numeric:tabular-nums; white-space:nowrap; }
.pl-sum .tn-cur { font-weight:500; }
.pl-acts { grid-area:acts; display:flex; flex-direction:column; gap:6px; margin:0; }
.pl-acts button { padding:5px 10px; font-size:var(--fs-meta); }
.pl-search { display:flex; gap:8px; flex:1 1 320px; max-width:420px; margin:0 0 0 12px; }
.pl-search input { padding:6px 10px; font-size:var(--fs-ui); }
.pl-search button { padding:6px 12px; font-size:var(--fs-ui); }
@media (max-width:860px) {
  .pl-list { padding:0 16px; }
  .pl-row { grid-template-columns:minmax(0,1fr) auto;
    grid-template-areas:"when sum" "main main" "acts acts"; row-gap:8px; }
  .pl-when { flex-direction:row; flex-wrap:wrap; align-items:baseline; gap:2px 8px; }
  .pl-acts { flex-direction:row; }
  .pl-acts button { flex:1 1 0; }
  .pl-search { margin:0; max-width:none; }
  .pl-search input { font-size:16px; }   /* меньше 16 px — iPhone увеличивает страницу при вводе */
  .seg-nav { margin-left:0; }
  .pl-group > summary { padding-left:0; }
}
