/* page.css — проектный слой gidstroy.pro. Канон (tokens/components) НЕ трогаем.
   Здесь только: раскладка портала (сайдбар/шапка/контент) и переназначение
   бренд-акцента на синий токен канона (зелёный — айдентика Emailzavr). */

:root {
  /* акцент gidstroy = синий канона (--c-ai), без новых цветов */
  --c-brand: var(--c-ai);
  --c-brand-hover: var(--c-ai-hover);
  --c-brand-soft: var(--c-ai-soft);
  --c-brand-glow: rgba(47, 109, 240, 0.28);
  --accent: var(--c-brand);
  --accent-hover: var(--c-brand-hover);
  --focus: var(--c-brand);
  --ring: rgba(47, 109, 240, 0.22);
  --color-brand: var(--c-brand);
  --color-brand-soft: var(--c-brand-soft);
  /* наведение на пункт меню (не клик) — синий на 10% непрозрачности, не общий --bg-hover (тот ещё нужен для таблиц и т.п.) */
  --nav-hover-bg: rgba(47, 109, 240, 0.10);
  --nav-hover-border: rgba(47, 109, 240, 0.10);
  /* канвас-градиент в синих тонах акцента */
  --grad-canvas:
    radial-gradient(1100px 600px at 92% -8%, rgba(47, 109, 240, 0.06), transparent 60%),
    radial-gradient(900px 520px at -5% 0%, rgba(47, 109, 240, 0.05), transparent 55%);
}

* { box-sizing: border-box; }
html, body { margin: 0; padding: 0; }
/* iOS Safari сам увеличивает мелкий текст («text autosizing») вопреки заданному font-size —
   из-за этого низ меню («Выйти»/сервер/дизайн, 10.5px в CSS) на телефоне выглядел крупным. Отключаем. */
html { -webkit-text-size-adjust: 100%; text-size-adjust: 100%; }
body {
  font-family: var(--font-sans);
  font-size: var(--fs-base);
  color: var(--fg-default);
  background: var(--bg-app);
  background-image: var(--grad-canvas);
  background-attachment: fixed;
  min-height: 100vh;
  -webkit-font-smoothing: antialiased;
}

/* ---------------------------- Раскладка ---------------------------- */
.app {
  display: grid;
  grid-template-columns: var(--sidebar-w) minmax(0, 1fr);
  min-height: 100vh;
}

/* Сайдбар */
.side {
  background: var(--bg-sidebar);
  color: var(--fg-on-sidebar);
  border-right: 1px solid var(--border-default);
  display: flex;
  flex-direction: column;
  padding: var(--sp-5) var(--sp-4);
  gap: var(--sp-6);
  position: sticky;
  top: 0;
  height: 100vh;
}
/* Растягивание ширины меню — видно только в режиме «Настроить меню», у каждого сотрудника своя ширина (26.09.2026) */
.side__resize {
  display: none; position: absolute; top: 0; right: -3px; bottom: 0; width: 6px;
  cursor: col-resize; z-index: var(--z-sticky); touch-action: none;
}
.side__resize::before { content: ""; position: absolute; top: 0; bottom: 0; left: 2px; width: 2px; background: var(--c-brand); border-radius: var(--r-full); opacity: 0; transition: opacity var(--t-fast); }
.side__resize:hover::before, .side__resize.is-dragging::before { opacity: .6; }
body.is-menu-editing .side__resize { display: block; }
.side__brand {
  display: flex;
  align-items: center;
  gap: var(--sp-3);
  padding: var(--sp-2) var(--sp-2) var(--sp-4);
  border-bottom: 1px solid var(--border-default);
}
.side__logo {
  width: 36px; height: 36px; flex: none;
  border-radius: var(--r-md);
  overflow: hidden;
  display: grid; place-items: center;
  box-shadow: 0 6px 16px var(--c-brand-glow);
}
.side__logo img { width: 100%; height: 100%; object-fit: cover; display: block; }
.side__name { color: var(--fg-on-sidebar-strong); font-weight: var(--fw-bold); font-size: var(--fs-lg); }
.side__sub { color: var(--fg-on-sidebar); font-size: var(--fs-xs); margin-top: 2px; }

.side__nav { display: flex; flex-direction: column; gap: var(--sp-1); }
.nav-item {
  display: flex; align-items: center; gap: var(--sp-3);
  width: 100%;
  padding: 0 var(--sp-3);
  height: 42px;
  border: 1px solid transparent;
  border-radius: var(--r-md);
  background: transparent;
  color: var(--fg-on-sidebar);
  font-family: var(--font-sans);
  font-size: var(--fs-md);
  font-weight: var(--fw-medium);
  cursor: pointer;
  text-align: left;
  transition: background var(--t-fast), color var(--t-fast);
}
.nav-item:hover { background: var(--nav-hover-bg); border-color: var(--nav-hover-border); color: var(--fg-on-sidebar-strong); }
.nav-item.is-active {
  background: var(--c-brand);
  color: var(--fg-on-accent);
  box-shadow: none;   /* без тени на кнопках (25.09.2026, по просьбе Артёма) */
}
.nav-item__ico { width: 18px; height: 18px; flex: none; }
.nav-item__label { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.side__toggle {
  width: 36px; height: 36px; flex: none;
  display: flex; align-items: center; justify-content: center;
  border: 1px solid transparent; border-radius: var(--r-md);
  background: transparent; color: var(--fg-on-sidebar);
  cursor: pointer; transition: background var(--t-fast), color var(--t-fast);
}
.side__toggle:hover { background: var(--bg-hover); color: var(--fg-on-sidebar-strong); }
.side__toggle svg { width: 20px; height: 20px; flex: none; }
.side__foot {
  margin-top: auto;
  padding-top: var(--sp-4);
  border-top: 1px solid var(--border-default);
  font-size: var(--fs-xs);
  color: var(--fg-on-sidebar);
  line-height: 1.5;
}

/* Основная колонка */
.main { display: flex; flex-direction: column; min-width: 0; }
.top {
  position: sticky; top: 0; z-index: var(--z-sticky);
  height: var(--topbar-h);
  flex-shrink: 0;   /* иначе во flex-колонке .main длинный .content (у него min-height:0) отбирает высоту у шапки вместо своего скролла — заголовок в разных разделах становился разной высоты (26.09.2026) */
  display: flex; align-items: center; justify-content: space-between;
  gap: var(--sp-4);
  padding: 0 var(--sp-8);
  background: color-mix(in srgb, var(--bg-surface) 88%, transparent);
  backdrop-filter: blur(8px);
  border-bottom: 1px solid var(--border-default);
}
.top__title { font-size: var(--fs-h4); font-weight: var(--fw-bold); }
.top__actions { display: flex; align-items: center; gap: var(--sp-2); }

.content {
  padding: var(--sp-8);
  max-width: var(--content-max);
  width: 100%;
  margin: 0 auto;
}
.page-head { margin-bottom: var(--sp-6); }
.page-head h1 { font-size: var(--fs-h2); font-weight: var(--fw-semibold); font-family: var(--font-serif); margin: 0 0 var(--sp-2); }
.page-head p { color: var(--fg-muted); margin: 0; font-size: calc(var(--fs-lg) - 3px); max-width: 68ch; }
/* На широком экране заголовок раздела дублирует верхнюю строку (.top__title) — прячем дубль в контенте,
   на телефоне он остаётся: там сама верхняя строка прячется вместо него (см. body.has-page-head выше). */
@media (min-width: 901px) {
  .page-head h1 { display: none; }
}

.grid { display: grid; gap: var(--sp-5); }
.grid--2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.grid--3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.grid--4 { grid-template-columns: repeat(4, minmax(0, 1fr)); }
.card + .card { margin-top: 0; }
.stack { display: flex; flex-direction: column; gap: var(--sp-5); }

/* ---- Тендеры: колонка «в работе» / «необработанные» ---- */
.grid--split { align-items: start; }
.col-head { display: flex; align-items: center; justify-content: space-between; gap: var(--sp-3); margin-bottom: var(--sp-3); }
.col-head__title { font-size: var(--fs-lg); font-weight: var(--fw-bold); }
.panel-note { font-size: var(--fs-sm); margin: 0 0 var(--sp-4); line-height: var(--lh-normal); }
.md-view { background: var(--bg-subtle); border-radius: var(--r-md); padding: var(--sp-3) var(--sp-4); margin: var(--sp-2) 0; line-height: var(--lh-normal); }
.md-view h4 { font-size: var(--fs-md); font-weight: var(--fw-semibold); }
.md-view ul, .md-view ol { line-height: var(--lh-normal); }

.tender-mini__top { display: flex; align-items: flex-start; justify-content: space-between; gap: var(--sp-3); }
.tender-mini__title { font-weight: var(--fw-semibold); }
.tender-mini__meta { color: var(--fg-muted); font-size: var(--fs-sm); margin-top: var(--sp-2); }
.tender-mini__foot { display: flex; align-items: center; justify-content: space-between; gap: var(--sp-3); margin-top: var(--sp-4); }

/* Списки правил внутри карточек */
.rules { margin: 0; padding: 0; list-style: none; display: flex; flex-direction: column; gap: var(--sp-3); }
.rules li { display: flex; gap: var(--sp-3); align-items: flex-start; line-height: var(--lh-normal); }
.rules li::before {
  content: ""; flex: none; width: 7px; height: 7px; margin-top: 8px;
  border-radius: var(--r-full); background: var(--c-brand);
}
.rules--codex li::before { background: var(--c-status-contract); }
.rules b { font-weight: var(--fw-semibold); }
.muted { color: var(--fg-muted); }
.mono { font-family: var(--font-mono); font-size: var(--fs-sm); }

/* Карточка «Codex» — визуально отделена (по требованию: не перепутать) */
.card--codex { border-color: color-mix(in srgb, var(--c-status-contract) 40%, var(--border-default)); }
.card--codex .card__header { background: color-mix(in srgb, var(--c-status-contract) 8%, transparent); border-top-left-radius: var(--r-lg); border-top-right-radius: var(--r-lg); }

.kv { display: grid; grid-template-columns: 180px 1fr; gap: var(--sp-2) var(--sp-4); }
.kv dt { color: var(--fg-muted); }
.kv dd { margin: 0; }

.keyval { font-family: var(--font-mono); letter-spacing: 2px; color: var(--fg-muted); }

.theme-btn { background: transparent; border: none; color: var(--fg-default); padding: 4px; display: flex; align-items: center; justify-content: center; width: fit-content; margin: 0 auto; }
.theme-btn__icon { width: 60px; height: 60px; }
.theme-btn__icon circle.theme-btn__dot--light { opacity: .35; }
.theme-btn__icon circle.theme-btn__dot--dark { opacity: 1; }
.theme-btn.is-dark .theme-btn__icon circle.theme-btn__dot--light { opacity: 1; }
.theme-btn.is-dark .theme-btn__icon circle.theme-btn__dot--dark { opacity: .35; }

/* ---------------------------- Адаптив ---------------------------- */
@media (max-width: 900px) {
  .app { grid-template-columns: 1fr; }
  .side {
    position: static; height: auto; flex-direction: column;
    padding: var(--sp-4);
  }
  .side__foot { margin-top: var(--sp-3); }
  .side__nav { flex-direction: row; flex-wrap: wrap; }
  .nav-item { width: auto; flex: 1 1 auto; justify-content: center; }
  .grid--2, .grid--4 { grid-template-columns: 1fr; }
  .kv { grid-template-columns: 1fr; gap: var(--sp-1); }
  .kv dt { margin-top: var(--sp-2); }
}
@media (max-width: 560px) {
  .top { padding: 0 var(--sp-4); }
  .content { padding: var(--sp-4); }
  .page-head h1 { font-size: var(--fs-h3); }
}

@media (prefers-reduced-motion: reduce) {
  * { animation-duration: 0.001ms !important; transition-duration: 0.001ms !important; }
}

/* ---------------------------- Экран входа ---------------------------- */
.login {
  min-height: 100vh;
  display: grid;
  place-items: center;
  padding: var(--sp-6);
}
.login__card {
  width: 100%;
  max-width: 400px;
  background: var(--bg-surface);
  border: 1px solid var(--border-default);
  border-radius: var(--r-xl);
  box-shadow: var(--shadow-lg);
  padding: var(--sp-8);
}
.login__brand {
  display: flex; align-items: center; gap: var(--sp-3);
  margin-bottom: var(--sp-6);
}
.login__brand .side__logo { width: 44px; height: 44px; font-size: var(--fs-lg); }
.login__title { font-size: var(--fs-h4); font-weight: var(--fw-extrabold); }
.login__sub { color: var(--fg-muted); font-size: var(--fs-sm); margin-top: 2px; }
.login__form { display: flex; flex-direction: column; gap: var(--sp-4); margin-top: var(--sp-2); }
.login__err {
  display: none;
  background: var(--c-danger-bg); color: var(--c-danger);
  border: 1px solid color-mix(in srgb, var(--c-danger) 30%, transparent);
  border-radius: var(--r-md);
  padding: var(--sp-2) var(--sp-3);
  font-size: var(--fs-sm); font-weight: var(--fw-medium);
}
.login__err.is-on { display: block; }
.login__foot { margin-top: var(--sp-5); text-align: center; color: var(--fg-subtle); font-size: var(--fs-xs); }

/* Окно карточки тендера: атрибут hidden должен скрывать оверлей канона (у .overlay задан display:grid) */
.overlay[hidden] { display: none; }
[data-pane][hidden] { display: none; }

/* ссылка в виде кнопки */
a.btn { text-decoration: none; background: var(--bg-surface-2); color: var(--fg-default); border-color: var(--border-default); }

/* тендеры: блок «Участие» (берём) — зелёный приоритет */
.take-box { border: 2px solid var(--c-success); background: var(--c-success-bg); border-radius: var(--r-lg); padding: var(--sp-4); }
.take-box .col-head__title { color: var(--c-success); }
.tender-take { border-left: 4px solid var(--c-success); }
.take-more { margin-top: var(--sp-3); width: 100%; }
@media (max-width: 1000px) { .decide-row { grid-template-columns: 1fr; } }
.skip-box { border: 2px solid var(--border-strong, var(--border-default)); background: var(--bg-surface-2); border-radius: var(--r-lg); padding: var(--sp-4); }
.skip-box .col-head__title { color: var(--fg-muted); }
.tender-skip { opacity: .85; border-left: 4px solid var(--fg-muted); }
/* кнопки внутри карточек тендеров — меньше на 1/4 */
.tender-mini .btn, .take-more { height: calc(var(--h-sm) * .75); min-height: calc(var(--h-sm) * .75); font-size: calc(var(--fs-md) * .75); padding: 0 var(--sp-2); }
/* «Берём» — красная */
.btn--take { background: var(--c-success); color: #fff; border-color: transparent; }
.btn--skip { background: var(--c-danger); color: #fff; border-color: transparent; }
.btn--take:hover, .btn--skip:hover { filter: brightness(.92); }
.take-more[hidden] { display: none; }
/* «Не взяли»: в свёрнутом виде — одна строка с названием (10 px), остальное по «Показать больше» */
.tender-skip--compact .card__body { padding: var(--sp-2) var(--sp-3); }
.tender-skip--compact .tender-mini__top { display: flex; align-items: center; gap: var(--sp-2); margin: 0; }
.tender-skip--compact .tender-mini__title { font-size: 10px; font-weight: var(--fw-medium); flex: 1; min-width: 0; }
.tender-skip--compact:not(.is-open) .tender-mini__title { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.tender-skip--compact:not(.is-open) .card__body > :not(.tender-mini__top) { display: none !important; }
.tender-skip--compact .tender-mini__top .btn { flex: none; }

/* канбан тендеров: 4 колонки; «Не взяли» уже остальных */
.tk-board { display: grid; grid-template-columns: minmax(0, 1.15fr) minmax(0, 1.15fr) minmax(0, 1.15fr) minmax(0, .75fr); gap: var(--sp-3); align-items: start; }
.tk-col { background: var(--bg-surface-2); border: 1px solid var(--border-default); border-radius: var(--r-lg); padding: var(--sp-3); min-width: 0; }
.tk-col.take-box { border: 2px solid var(--c-success); background: var(--c-success-bg); padding: var(--sp-3); }
.tk-col.skip-box { padding: var(--sp-2) var(--sp-3); }
.tk-col.is-target { outline: 2px dashed var(--c-brand); outline-offset: -3px; }
.tk-col .tender-mini[draggable="true"] { cursor: grab; }
.tender-mini.is-drag { opacity: .45; }
.tk-col .tender-mini__foot { flex-wrap: wrap; gap: var(--sp-2); }
@media (max-width: 1300px) { .tk-board { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (max-width: 700px) { .tk-board { grid-template-columns: 1fr; } }
.tender-mini__badges { margin-bottom: var(--sp-1); }
.tender-mini__badges .badge { font-size: 11px; }
.tender-mini__title { overflow-wrap: anywhere; }
/* в узких колонках подпись над значением, чтобы цена и срок не переносились по словам */
.tk-col .kv { grid-template-columns: 1fr; row-gap: 0; }
.tk-col .kv dt { font-size: 11px; margin-top: var(--sp-2); }
.tk-col .kv dd { margin: 0; }
/* размеры на главном экране: название −2, ссылка в «Берём» −1 */
.tk-col:not(.skip-box) .tender-mini__title { font-size: calc(var(--fs-md) - 2px); }
.take-box .tender-mini__meta, .take-box .tender-mini__meta a { font-size: calc(var(--fs-sm) - 1px); }
.kv__pre { white-space: pre-line; }

/* плитки статистики тендеров: ровный уровень, шрифт мельче */
.tstats { align-items: stretch; }
.tstat { display: flex; flex-direction: column; padding: var(--sp-3) var(--sp-4); }
.tstat .stat__label { font-size: 11px; min-height: 2.6em; line-height: 1.3; }
.tstat__num { font-size: calc(var(--fs-3xl) - 6px); margin-top: var(--sp-1); line-height: 1.15; }
.tstat .stat__delta { font-size: 11px; margin-top: var(--sp-2); }
.tyear { display: grid; grid-template-columns: 44px 1fr 1fr; gap: var(--sp-2); font-size: 13px; padding: 3px 0; border-bottom: 1px solid var(--border-default); }
.tyear--h { font-size: 10px; color: var(--fg-muted); text-transform: uppercase; letter-spacing: .03em; }
.tyear span { text-align: center; }
.tstat__years { margin-top: var(--sp-1); max-height: 130px; overflow-y: auto; }
.tratio { display: flex; height: 22px; border-radius: 11px; overflow: hidden; margin-top: var(--sp-3); font-size: 11px; color: #fff; font-weight: var(--fw-semibold); }
.tratio span { display: flex; align-items: center; justify-content: center; min-width: 0; }
.tratio__take { background: var(--c-success); } .tratio__skip { background: var(--c-danger); }
.tratio span[hidden] { display: none; }
.tfunnel { display: flex; align-items: center; gap: var(--sp-3); margin-top: 0; }
.tfunnel__svg { width: 125px; flex: none; height: auto; }
.tf--all { fill: #4f7fd6; } .tf--work { fill: #3a9bb8; } .tf--take { fill: var(--c-success); } .tf--skip { fill: var(--c-danger); }
.tfunnel__dot.tf--all { background: #4f7fd6; } .tfunnel__dot.tf--work { background: #3a9bb8; } .tfunnel__dot.tf--take { background: var(--c-success); } .tfunnel__dot.tf--skip { background: var(--c-danger); }
.tf--skip-cancel { fill: var(--fg-muted); } .tfunnel__dot.tf--skip-cancel { background: var(--fg-muted); }
.tfunnel__row--sub { padding-left: 15px; font-size: 10px; color: var(--fg-muted); }
.tfunnel__row--sub .tfunnel__dot { width: 6px; height: 6px; }
.tf__sep { stroke: var(--bg-surface); stroke-width: 2; }
.tf__n { fill: #fff; font-size: 22px; font-weight: 700; } .tf__n--s { font-size: 17px; }
.tfunnel__leg { display: flex; flex-direction: column; gap: 4px; font-size: 11px; min-width: 0; flex: 1; }
.tfunnel__row { display: flex; align-items: center; gap: 6px; } .tfunnel__row b { margin-left: auto; }
.tfunnel__dot { width: 9px; height: 9px; border-radius: 50%; flex: none; }
@media (max-width: 1300px) { .tstats { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
.side__logout { color: inherit; text-decoration: underline; opacity: .85; }

/* инструкция по тендерам */
.guide { display: flex; flex-direction: column; gap: var(--sp-4); max-width: 980px; }
.guide p { margin: 0 0 var(--sp-3); }
.guide ul, .guide ol { margin: 0; padding-left: var(--sp-5); }
.guide li { margin: 0 0 var(--sp-2); line-height: 1.5; }
.guide-cols li { padding-left: var(--sp-1); }
.guide-steps { list-style: none; padding-left: 0 !important; display: flex; flex-direction: column; gap: var(--sp-3); }
.guide-step { border: 1px solid var(--border-default); border-radius: var(--r-md); padding: var(--sp-3) var(--sp-4); background: var(--bg-surface); margin: 0 !important; }
.guide-step__head { margin-bottom: var(--sp-2); font-size: var(--fs-md); }
.guide-step ul { padding-left: var(--sp-6); }
.guide-note { margin: var(--sp-3) 0 0 !important; padding: var(--sp-2) var(--sp-3); border-left: 3px solid var(--c-brand); background: var(--bg-surface-2); border-radius: var(--r-sm); font-size: var(--fs-sm); color: var(--fg-muted); }
.guide-h { font-weight: var(--fw-semibold); margin-bottom: var(--sp-2); }
.guide .card__header { display: flex; justify-content: space-between; align-items: center; gap: var(--sp-3); }

/* подпункт меню («Инструкция: тендеры» — часть раздела тендеров): мельче и с отступом */
.nav-item--sub { height: 32px; margin-top: -4px; padding-left: var(--sp-6); font-size: 12px; font-weight: var(--fw-regular, 400); opacity: .9; }
.nav-item--sub .nav-item__ico { width: 14px; height: 14px; }
@media (max-width: 900px) { .nav-item--sub { padding-left: var(--sp-3); } }

/* курсор-«рука» на ссылках и кнопках в карточках тендеров (в Safari внутри перетаскиваемой карточки курсор оставался стрелкой) */
.tk-board a, .tk-board a:hover, .tender-mini a { cursor: pointer !important; -webkit-user-drag: none; }
.tk-board .btn, .tk-board button, .tender-mini__title { cursor: pointer !important; }
#tenderModal a { cursor: pointer; }

/* ===== окно переписки с агентами (в духе чата Claude) ===== */
.chat { border: 1px solid var(--border-default); border-radius: var(--r-lg); background: var(--bg-surface); display: flex; flex-direction: column; overflow: hidden; }
.chat.is-drop { outline: 2px dashed var(--c-brand); outline-offset: -3px; }
.chat__head { display: flex; justify-content: space-between; align-items: center; gap: var(--sp-3); padding: var(--sp-3) var(--sp-4); border-bottom: 1px solid var(--border-default); background: var(--bg-surface-2); }
/* переключатель «показать/скрыть историю»: обычная ссылка, без рамки и фона — не должна выглядеть отдельной кнопкой-«таблеткой» */
.link-toggle { background: none; border: 0; padding: 0; margin: 0; height: auto; min-height: 0; font-size: 12px; font-weight: var(--fw-regular, 400); color: var(--fg-muted); text-decoration: underline; text-decoration-style: dotted; text-underline-offset: 2px; cursor: pointer; border-radius: 0; }
.link-toggle:hover { color: var(--fg-default); transform: none; }
.chat__head .link-toggle { margin-left: auto; }
.chat__who { font-size: var(--fs-sm); color: var(--fg-muted); }
.chat__who.is-run { color: var(--c-success); font-weight: var(--fw-semibold); }
.chat__who.is-wait { color: var(--c-warning); font-weight: var(--fw-semibold); }
.chat__thread { display: flex; flex-direction: column; gap: var(--sp-3); padding: var(--sp-4); min-height: 180px; max-height: 420px; overflow-y: auto; scroll-behavior: smooth; }
.chat__row { display: flex; gap: var(--sp-2); align-items: flex-end; max-width: 100%; }
.chat__row--me { justify-content: flex-end; }
.chat__bubble { max-width: min(760px, 86%); padding: var(--sp-2) var(--sp-3); border-radius: 16px; border: 1px solid var(--border-default); background: var(--bg-surface-2); font-size: var(--fs-md); line-height: 1.45; }
.chat__row--me .chat__bubble { background: color-mix(in srgb, var(--c-brand) 12%, var(--bg-surface)); border-color: color-mix(in srgb, var(--c-brand) 30%, transparent); border-bottom-right-radius: 4px; }
.chat__row--agent .chat__bubble { border-bottom-left-radius: 4px; }
.chat__bubble.is-ask { background: var(--c-warning-bg); border-color: color-mix(in srgb, var(--c-warning) 45%, transparent); }
.chat__bubble.is-void { opacity: .55; text-decoration: line-through; }
.chat__meta { font-size: 11px; color: var(--fg-muted); margin-bottom: 2px; }
.chat__ask { font-size: 11px; font-weight: var(--fw-semibold); color: var(--c-warning); margin-bottom: 2px; }
.chat__text { white-space: pre-wrap; overflow-wrap: anywhere; }
.chat__foot { font-size: 11px; color: var(--fg-muted); margin-top: 4px; }
.chat__file { display: inline-block; margin: 4px 6px 0 0; padding: 2px 8px; border-radius: var(--r-full); background: var(--bg-surface); border: 1px solid var(--border-default); font-size: 12px; text-decoration: none; cursor: pointer; overflow-wrap: anywhere; }
.chat__void { background: none; border: 0; padding: 0; margin-left: var(--sp-3); font-size: 11px; color: var(--fg-muted); text-decoration: underline; cursor: pointer; }
.chat__status { align-self: center; font-size: 11px; color: var(--fg-muted); background: var(--bg-surface-2); padding: 2px 10px; border-radius: var(--r-full); max-width: 92%; text-align: center; overflow-wrap: anywhere; }
.chat__status.is-err { color: var(--c-danger); background: var(--c-danger-bg); }
.chat__avatar { flex: none; width: 30px; height: 30px; border-radius: 50%; display: flex; align-items: center; justify-content: center; font-size: 10px; font-weight: 700; color: #fff; background: #6b7280; }
.chat__avatar--cco { background: #4f7fd6; } .chat__avatar--legal { background: #8b5cf6; } .chat__avatar--cfo { background: #1a8f5e; } .chat__avatar--ceo { background: #d9822b; } .chat__avatar--system { background: #6b7280; }
.chat__avatar.is-pulse { animation: chatPulse 1.4s ease-in-out infinite; }
@keyframes chatPulse { 0%, 100% { box-shadow: 0 0 0 0 rgba(79,127,214,.55); } 50% { box-shadow: 0 0 0 7px rgba(79,127,214,0); } }
.chat__typing { display: inline-flex; align-items: center; gap: var(--sp-2); }
.chat__typing.is-queue { opacity: .75; font-style: italic; }
.chat__dots { display: inline-flex; gap: 3px; }
.chat__dots i { width: 6px; height: 6px; border-radius: 50%; background: var(--fg-muted); display: block; animation: chatDots 1.2s infinite ease-in-out; }
.chat__dots i:nth-child(2) { animation-delay: .2s; } .chat__dots i:nth-child(3) { animation-delay: .4s; }
@keyframes chatDots { 0%, 80%, 100% { transform: translateY(0); opacity: .35; } 40% { transform: translateY(-4px); opacity: 1; } }
.chat__composer { border-top: 1px solid var(--border-default); padding: var(--sp-3); display: flex; flex-direction: column; gap: var(--sp-2); background: var(--bg-surface); }
.chat__input { min-height: 56px; max-height: 180px; resize: vertical; border-radius: 14px; }
.chat__bar { display: flex; flex-wrap: wrap; align-items: center; gap: var(--sp-2); }
.chat__attach { width: 34px; height: 34px; border-radius: 50%; border: 1px solid var(--border-default); background: var(--bg-surface-2); color: var(--fg-default); display: inline-flex; align-items: center; justify-content: center; cursor: pointer; flex: none; }
.chat__attach:hover { background: var(--bg-surface); border-color: var(--c-brand); }
.chat__mode { display: inline-flex; align-items: center; gap: var(--sp-2); font-size: var(--fs-sm); color: var(--fg-muted); }
.chat__mode select { height: 30px; font-size: var(--fs-sm); padding: 0 var(--sp-2); width: auto; }
.chat__msg-hint { font-size: var(--fs-sm); flex: 1; min-width: 120px; }
.chat__send { margin-left: auto; }
.chat__tip { font-size: 11px; }
.chat__files { display: flex; flex-wrap: wrap; gap: var(--sp-2); }
.chat__files:empty { display: none; }
.chat__hint { font-size: var(--fs-sm); padding: var(--sp-2) var(--sp-3); border-radius: var(--r-md); background: var(--c-warning-bg); border: 1px solid color-mix(in srgb, var(--c-warning) 45%, transparent); line-height: 1.4; }
.chat__pending { display: inline-flex; align-items: center; gap: 6px; padding: 2px 4px 2px 10px; border-radius: var(--r-full); background: var(--bg-surface-2); border: 1px solid var(--border-default); font-size: 12px; }
.chat__x { border: 0; background: none; cursor: pointer; font-size: 16px; line-height: 1; color: var(--fg-muted); padding: 0 6px; }
.chat button, .chat a, .chat select, .chat__attach { cursor: pointer; }

/* канбан тендеров: всё пропорционально мельче на 1/15; цветные кнопки чуть приглушены (прозрачность 10%) */
.tk-board { zoom: 0.9333; }
.tk-board .btn--primary, .btn--take, .btn--skip { opacity: .9; }
.tk-board .btn--primary:hover, .btn--take:hover, .btn--skip:hover { opacity: 1; }

/* верхние плитки тендеров: всё по центру, воронка и её подписи помещаются в плитку */
.tstat { overflow: hidden; align-items: center; text-align: center; }
.tstat .stat__label, .tstat .stat__delta, .tstat__num { text-align: center; width: 100%; }
#tsSumValue { font-size: calc(var(--fs-3xl) - 8px); }
.tstat__years { width: 100%; }
.tratio { width: 100%; }
.tfunnel { width: 100%; justify-content: center; gap: var(--sp-2); }
.tfunnel__svg { width: 96px; }
.tfunnel__leg { flex: 0 1 auto; font-size: 10.5px; text-align: left; gap: 3px; }
.tfunnel__row { gap: 5px; }
.tfunnel__row span:nth-child(2) { min-width: 0; overflow-wrap: anywhere; }
.tfunnel__row b { margin-left: var(--sp-2); }
.tfunnel { margin: 0 auto; }
.tfunnel__leg { flex: 0 0 auto; }
/* верхние плитки тендеров — содержимое по центру и по высоте */
.tstat { justify-content: center; }
.tstat .stat__label { min-height: 0; }
/* воронка: чуть крупнее, вместе с подписями строго по центру плитки */
.tfunnel { justify-content: center; align-items: center; gap: var(--sp-3); }
.tfunnel__svg { width: 116px; }
.tfunnel__leg { font-size: 11px; gap: 4px; }
.tfunnel { margin-top: var(--sp-2); }

/* атрибут hidden всегда скрывает элемент (классы .btn/.tab/.chat__composer задают display и перебивали его) */
button[hidden], .btn[hidden], .tab[hidden], .chat__composer[hidden] { display: none !important; }
.chat__thread[hidden], #tmLog[hidden], #tmOpenQ[hidden] { display: none !important; }   /* .chat__thread и .stack задают display:flex — тот же баг, что уже был у .chat__composer */

/* кнопки итога тендера в окне (выиграли / проиграли / отменён) */
.btn--res { background: transparent; border: 1px solid var(--border-default); }
.btn--res-won { color: var(--c-success); border-color: var(--c-success); }
.btn--res-lost { color: var(--c-danger); border-color: var(--c-danger); }
.btn--res-cancel { color: var(--fg-muted); }
.btn--res-won.is-active { background: var(--c-success); color: #fff; }
.btn--res-lost.is-active { background: var(--c-danger); color: #fff; }
.btn--res-cancel.is-active { background: var(--fg-muted); color: #fff; }
.tender-mini__badges { display: flex; flex-wrap: wrap; gap: var(--sp-1); }

/* окно тендера: кнопки итога — отдельной строкой ниже; все кнопки подвала мельче примерно на 1/4 */
#tenderModal .modal__footer { flex-wrap: wrap; row-gap: var(--sp-2); }
#tenderModal .modal__footer .tm-resrow { flex: 0 0 100%; display: flex; justify-content: flex-end; flex-wrap: wrap; gap: var(--sp-2); }
#tenderModal .modal__footer .tm-resrow[hidden] { display: none; }
#tenderModal .modal__footer .btn { height: calc(var(--h-sm) * .76); min-height: calc(var(--h-sm) * .76); font-size: calc(var(--fs-md) * .78); padding: 0 var(--sp-2); }
#tmSave.is-saved { background: var(--c-success-bg); color: var(--c-success); border-color: color-mix(in srgb, var(--c-success) 40%, transparent); opacity: 1; }

/* карточка тендера открывается не всплывающим окном, а полноценной страницей
   (во весь экран, без затемнения/скругления/тени) — возврат к списку тендеров
   только кнопкой-стрелкой в шапке, как у карточки объекта CRM */
#tenderModal.overlay { background: var(--bg-app); backdrop-filter: none; padding: 0; place-items: stretch; }
#tenderModal .modal { max-width: none !important; width: 100%; height: 100vh; max-height: 100vh; border: 0; border-radius: 0; box-shadow: none; }
#tenderModal .modal__header { justify-content: flex-start; gap: var(--sp-3); }
@media (min-width: 901px) {
  #tenderModal.overlay { left: var(--sidebar-w); }
  .app.is-collapsed ~ #tenderModal.overlay { left: 72px; }
}
.tm-back {
  display: flex; align-items: center; justify-content: center;
  width: 40px; height: 40px; flex: none;
  border: 2px solid var(--fg-default); border-radius: 50%;
  background: var(--c-surface); color: var(--fg-default);
  line-height: 1;
  cursor: pointer; transition: background var(--t-fast), transform var(--t-fast);
}
.tm-back:hover { background: var(--bg-hover); }
.tm-back:active { transform: scale(0.94); }

/* карточка «в работе» на главном экране — по умолчанию одна строка (название + статус),
   остальное (ссылка, цена, срок) раскрывается кнопкой «Ещё» в самой карточке, без отдельного окна;
   дата/автор добавления (.tender-mini__added) остаются видны всегда, в любом состоянии карточки */
.tender-mini--collapsible:not(.is-open) .tender-mini__meta,
.tender-mini--collapsible:not(.is-open) .kv {
  display: none;
}

/* дата и автор добавления тендера — маленьким шрифтом в правом нижнем углу карточки,
   видны и у свёрнутой («в работе»/«Не взяли»), и у развёрнутой карточки (01.10.2026) */
.tender-mini__added {
  display: block;
  text-align: right;
  font-size: 11px;
  font-family: var(--font-mono);
  color: var(--fg-muted);
  padding: 0 var(--sp-5) var(--sp-3);
  margin-top: calc(-1 * var(--sp-2));
}
.tender-skip--compact .tender-mini__added {
  padding: 0 var(--sp-3) var(--sp-2);
}

/* ---------------- Группы меню: «Тендеры» / «CRM объекты» с подразделами ---------------- */
.nav-group { display: flex; flex-direction: column; gap: var(--sp-1); }
.nav-sub { display: flex; flex-direction: column; gap: var(--sp-1); }
/* компьютер: подразделы (инструкции) скрыты и выпадают только по нажатию на раздел (без наведения); у активного раздела остаются открытыми */
@media (min-width: 901px) {
  .nav-group.has-parent > .nav-sub { display: none; }
  .nav-group.has-parent.is-open > .nav-sub { display: flex; }
  .nav-group.has-parent > .nav-item--parent::after { content: "▾"; font-size: 11px; opacity: .6; margin-left: auto; }
  .nav-group.has-parent.is-open > .nav-item--parent::after { content: "▴"; }
  .nav-group--nested > .nav-sub .nav-item--sub { padding-left: calc(var(--sp-6) + var(--sp-4)); }
}
/* ---------------- Сворачиваемое меню: узкая полоска-иконки, только по клику на «гамбургер» (без наведения) ---------------- */
@media (min-width: 901px) {
  .app.is-collapsed { grid-template-columns: 72px minmax(0, 1fr); }
  .app.is-collapsed .side { width: 72px; padding-left: var(--sp-2); padding-right: var(--sp-2); }
  .app.is-collapsed .side__brand { justify-content: center; padding-left: var(--sp-2); padding-right: var(--sp-2); }
  .app.is-collapsed .side__logo,
  .app.is-collapsed .side__brandtext,
  .app.is-collapsed .nav-item__label,
  .app.is-collapsed .nav-sub,
  .app.is-collapsed .nav-group.has-parent > .nav-item--parent::after,
  .app.is-collapsed .side__foot {
    display: none;
  }
  .app.is-collapsed .nav-item { justify-content: center; padding: 0; gap: 0; }
}
@media (max-width: 900px) {
  .side__resize { display: none !important; }   /* на телефоне меню на всю ширину, растягивать нечего */
  /* Гамбургер на телефоне: сворачивает/разворачивает список разделов. Строка с гамбургером — position:fixed
     (28.09.2026), намертво прибита к верху экрана при любом скролле и в любом состоянии меню — sticky тут
     не годится: как только список свёрнут, .side укорачивается и sticky-элемент уезжает вместе с ним, едва
     кончится родительский блок. Список и кнопка темы остаются в обычном потоке под шапкой, показываются
     только пока меню развёрнуто. */
  .side__toggle { display: flex; width: 42px; height: 42px; }   /* уже на 1/4 против прежних 55px (28.09.2026) */
  .side__toggle svg { width: 21px; height: 21px; }
  .app.is-collapsed .side__nav { display: none; }
  .app.is-collapsed .side__theme { display: none; }
  /* Заголовок раздела (.top, sticky top:0) иначе прилипает поверх фиксированной шапки гамбургера —
     сдвигаем точку прилипания вниз ровно на высоту этой шапки (42px кнопка + 2×12px паддинга). */
  .top { top: 66px; }
  /* В разделах со своим заголовком в контенте (.page-head h1) верхняя строка .top дублирует его —
     на телефоне прячем дубль (app.js ставит body.has-page-head по текущему разделу). */
  body.has-page-head .top { display: none; }
  /* Мобильное меню: ровный список по левому краю; инструкции раскрываются под своим разделом.
     Селектор `.app .side`/`.app .side__brand` (не просто `.side`) — иначе более поздние
     безусловные правила `.side{padding:...}` и `.side__brand{padding:...}` ниже по файлу
     (та же специфичность, но написаны позже) перебивали бы этот отступ и фиксацию шапки. */
  .app .side { padding: calc(42px + var(--sp-3) * 2) var(--sp-4) var(--sp-3); gap: var(--sp-3); align-items: stretch; }
  .app .side__brand { justify-content: flex-start; text-align: left; position: fixed; top: 0; left: 0; right: 0; z-index: var(--z-dropdown); background: var(--bg-sidebar); padding: var(--sp-3) var(--sp-4); border-bottom: 1px solid var(--border-default); }
  .side__nav { flex-direction: column; flex-wrap: nowrap; align-items: stretch; gap: 2px; width: 100%; }
  .nav-group { display: flex; flex-direction: column; gap: 2px; }
  .nav-item { width: 100%; flex: none; height: 44px; padding: 0 var(--sp-3); gap: 12px; font-size: 15px; justify-content: flex-start; text-align: left; }
  .nav-item--sub { height: 40px; margin-top: 0; padding: 0 var(--sp-3) 0 44px; font-size: 14px; opacity: 1; }
  .nav-group:not(.has-parent) > .nav-sub { display: flex; flex-direction: column; gap: 2px; }
  .nav-group.has-parent > .nav-sub { display: none; }
  .nav-group.has-parent.is-open > .nav-sub { display: flex; flex-direction: column; gap: 2px; }
  .nav-group.has-parent > .nav-item--parent::after { content: "▾"; font-size: 12px; opacity: .7; margin-left: auto; }
  .nav-group.has-parent.is-open > .nav-item--parent::after { content: "▴"; }
  .nav-group--nested > .nav-sub .nav-item--sub { padding-left: 60px; }
  .side__foot { margin-top: 0; padding-top: var(--sp-3); text-align: left; width: 100%; }
}
/* ---------------- Тендеры на телефоне: плитки и карточки без обрезания и наложения текста ---------------- */
@media (max-width: 560px) {
  .tstats { grid-template-columns: 1fr; gap: var(--sp-3); }
  .tstat { padding: var(--sp-3) var(--sp-4); }
  .tstat .stat__label { min-height: 0; text-align: center; }
  .tstat__num { font-size: calc(var(--fs-3xl) - 4px); text-align: center; }
  .tstat .stat__delta { text-align: center; }
  .tyear { grid-template-columns: 56px 1fr 1fr; gap: var(--sp-3); font-size: 14px; }
  .tyear--h { font-size: 10px; line-height: 1.2; align-items: end; }
  .tyear--h span, .tyear span { text-align: center; overflow-wrap: normal; word-break: normal; hyphens: none; }
  .tstat__years { max-height: 180px; }
  .tfunnel { justify-content: center; gap: var(--sp-4); }
  .tfunnel__svg { width: 140px; }
  .tfunnel__leg { flex: 0 1 auto; font-size: 13px; gap: 6px; }
  .tfunnel__row { white-space: nowrap; }
  .tender-mini__title, .tender-mini__meta, .tender-mini a { overflow-wrap: anywhere; }
  .tender-skip--compact:not(.is-open) .tender-mini__title { white-space: normal; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; }
  .tk-col { padding: var(--sp-3); }
  .tk-col .kv dd { overflow-wrap: anywhere; }
}

/* окна (карточка тендера и др.) на телефоне: на всю ширину, шапка и вкладки без обрезания */
@media (max-width: 560px) {
  .overlay { padding: 8px; }
  .modal--tall { height: 94vh; max-height: 94vh; }
  .modal { border-radius: var(--r-lg); }
  .modal__header { padding: 12px 14px; gap: 10px; align-items: flex-start; }
  .modal__header > div { min-width: 0; }
  .modal__header .btn { flex: none; white-space: nowrap; }
  .modal__header .card__title { font-size: 15px; line-height: 1.3; overflow-wrap: anywhere; }
  .modal__body { padding: 12px 14px; }
  .modal__footer { padding: 10px 14px; }
  .tabs { flex-wrap: wrap; gap: 0; }
  .tab { flex: 1 1 45%; justify-content: center; text-align: center; font-size: 13px; padding: 6px 8px; min-height: 36px; }
}

/* широкие таблицы на телефоне прокручиваются внутри карточки и не раздвигают страницу */
@media (max-width: 900px) {
  .content, .content > section, .card, .card__body { min-width: 0; max-width: 100%; }
  .table-wrap { overflow-x: auto; -webkit-overflow-scrolling: touch; }
}
@media (max-width: 900px) { .grid--2, .grid--3, .grid--4 { grid-template-columns: minmax(0, 1fr); } }
.tender-skip__reason { flex: none; font-size: 9px; padding: 1px 6px; }

/* Переключатель темы живёт внизу бокового меню, над подписью сервера */
.side__theme {
  width: 100%; justify-content: center;
  background: transparent; border-color: transparent;
  color: var(--fg-on-sidebar-strong);
}
.side__theme:hover { background: var(--bg-active); }
.side__theme + .side__foot { margin-top: var(--sp-3); }

/* «Настроить меню»: доступно всем сотрудникам, позволяет перетаскивать разделы (26.09.2026) */
.side__menuedit {
  margin-top: auto; display: flex; align-items: center; justify-content: space-between; gap: var(--sp-2);
  padding: var(--sp-2) var(--sp-3); border-radius: var(--r-md); cursor: pointer;
  font-size: var(--fs-sm); color: var(--fg-on-sidebar-strong);
}
.side__menuedit:hover { background: var(--bg-hover); }

/* «Настроить меню» теперь лежит ВНУТРИ списка разделов (в nav), поэтому на широком экране nav тянется
   на всю высоту сайдбара, а сама кнопка margin-top:auto прижимается к низу — ровно как раньше, когда
   она стояла отдельным блоком под меню. */
@media (min-width: 901px) {
  .side__nav { flex: 1; }
  .app.is-collapsed .side__menuedit { display: none; }   /* в свёрнутой полоске-иконок ей нет места */
}

/* На телефоне «Настроить меню» выглядит как обычный пункт меню (последний в списке) и прячется вместе
   с меню, когда бургер свёрнут — раньше кнопка торчала под шапкой отдельно от свёрнутого меню. */
@media (max-width: 900px) {
  .side__menuedit { margin-top: 0; width: 100%; height: 44px; padding: 0 var(--sp-3); font-size: 15px; }
  .app.is-collapsed .side__foot { display: none; }   /* подпись сервера и «Выйти» тоже часть меню, а не шапки */
}
.nav-item__grip {
  display: none; margin-left: auto; padding-left: var(--sp-2); opacity: .8; cursor: grab; touch-action: none;
  font-size: 14px; letter-spacing: 1px; line-height: 1;
}
.side__nav.is-reorder-mode .nav-item__grip { display: inline-flex; }   /* грипы есть только у перетаскиваемых юнитов на любом уровне вложенности */
.side__nav.is-reorder-mode .is-dragging { opacity: .5; }
.side__nav.is-reorder-mode .nav-item:has(> .nav-item__grip) { cursor: default; }

/* Прокрутка только внутри блоков: страница целиком не скроллится.
   Меню крутится в себе, рабочая область — в себе, верхняя строка стоит на месте.
   Только широкий экран — на телефоне меню и контент идут друг под другом одной колонкой,
   и жёсткая высота 100vh на каждом блоке обрезала бы контент (viewport целиком занимало меню). */
@media (min-width: 901px) {
  .app { height: 100vh; overflow: hidden; }
  .side { height: 100vh; overflow-y: auto; overscroll-behavior: contain; }
  .main { height: 100vh; min-height: 0; overflow: hidden; }
  .content { flex: 1 1 auto; min-height: 0; overflow-y: auto; overscroll-behavior: contain; }
  .content--wide { overflow: hidden; height: auto; }
}

/* Пункты меню на компьютере — текст на один размер мельче (мобильную раскладку не трогаем,
   у неё свой font-size 15px внутри @media (max-width:900px) выше). */
@media (min-width: 901px) {
  .nav-item { font-size: var(--fs-sm); }
}

/* Разделов стало больше — меню сжато так, чтобы целиком помещалось на экран без прокрутки */
.nav-item { height: 36px; }
.nav-item__ico { width: 16px; height: 16px; }
.side { padding: var(--sp-4) var(--sp-3); }
.side__nav { gap: 2px; }
.side__head { margin-bottom: var(--sp-3); }
.side__foot { font-size: 11px; padding-top: var(--sp-3); }

/* Полоса прокрутки бокового меню не показывается: при малой высоте экрана меню
   всё равно прокручивается колесом, но рамка остаётся чистой. */
.side { scrollbar-width: none; -ms-overflow-style: none; }
.side::-webkit-scrollbar { width: 0; height: 0; display: none; }
/* Ещё 26 px: шапка и подпись меню занимали больше высоты, чем оставалось под список
   разделов, и нижняя строка футера обрезалась. */
.side { gap: var(--sp-4); }
.side__brand { padding: var(--sp-1) var(--sp-2) var(--sp-3); }
.side__foot { font-size: 10.5px; line-height: 1.45; }

/* Встроенные модули (карты, модули кабинета) показывают своё название сами,
   поэтому верхняя полоса портала на них скрыта, а модуль занимает всю высоту. */
body.no-top .top { display: none; }
body.no-top .content--wide { height: 100vh; }

/* ---------------- Оргструктура: черновик (details-аккордеон по вехам) ---------------- */
.org-phase { margin-bottom: var(--sp-4); }
.org-phase > summary {
  cursor: pointer; font-weight: var(--fw-bold); font-size: var(--fs-lg);
  padding: var(--sp-3) var(--sp-4); background: var(--bg-surface);
  border: 1px solid var(--border-default); border-radius: var(--r-lg); list-style: none;
}
.org-phase > summary::-webkit-details-marker { display: none; }
.org-phase > summary::before { content: "▸  "; color: var(--fg-muted); }
.org-phase[open] > summary::before { content: "▾  "; }
.org-phase[open] > summary { border-radius: var(--r-lg) var(--r-lg) 0 0; border-bottom: 0; }
.org-blocks {
  display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: var(--sp-4);
  padding: var(--sp-4); border: 1px solid var(--border-default); border-top: 0;
  border-radius: 0 0 var(--r-lg) var(--r-lg); background: var(--bg-surface-2);
}
.org-block { background: var(--bg-surface); border: 1px solid var(--border-default); border-radius: var(--r-md); padding: var(--sp-3) var(--sp-4); }
.org-block__title { font-weight: var(--fw-bold); margin-bottom: var(--sp-2); }
.org-role { padding: var(--sp-2) 0; border-top: 1px solid var(--border-default); }
.org-role:first-of-type { border-top: 0; padding-top: 0; }
.org-role__title { font-weight: 600; }
.org-role__who { color: var(--fg-default); }
.org-role__who--vacant { color: var(--fg-muted); font-style: italic; }
.org-role__note { color: var(--fg-muted); font-size: var(--fs-sm); margin-top: 2px; }
.org-ai-tag { display: inline-block; font-size: 11px; font-weight: var(--fw-regular, 400); padding: 1px 8px; border-radius: var(--r-full); background: var(--c-brand-soft); color: var(--c-brand-hover); margin-left: 6px; vertical-align: middle; }

/* ---------------- CRM объекты: путь объекта (черновик воронки) ---------------- */
.crmd-board { display: flex; gap: var(--sp-4); overflow-x: auto; padding-bottom: var(--sp-2); }
.crmd-col { flex: 0 0 200px; min-width: 0; display: flex; flex-direction: column; gap: var(--sp-2); background: var(--bg-surface-2); border-radius: var(--r-lg); padding: var(--sp-2); overflow-wrap: break-word; border: 2px dashed transparent; transition: border-color .12s, background .12s; }
.crmd-col.is-dragover { border-color: var(--c-brand); background: var(--c-brand-soft); }
.crmd-col .crm-card[draggable="true"] { cursor: grab; }
.crmd-col .crm-card[draggable="true"]:active { cursor: grabbing; }
.crmd-col .crm-card { margin: 0; min-width: 0; }
/* компактная карточка доски (по умолчанию свёрнута — «Развернуть» показывает полную) */
.crm-card--compact .card__header { padding: var(--sp-2) var(--sp-3); }
.crm-card--compact .card__title { font-size: 11px; line-height: 1.25; }
.crm-card--compact .card__body { padding: var(--sp-2) var(--sp-3); }
.crm-card--compact .card__footer { padding: var(--sp-2) var(--sp-3); }
.crm-compact-row { font-size: 10px; margin-top: 2px; }
.crmd-col__head { font-weight: var(--fw-bold); margin-bottom: var(--sp-3); display: flex; align-items: baseline; justify-content: space-between; gap: var(--sp-2); }
.crmd-col__n { font-size: 12px; font-weight: var(--fw-regular, 400); color: var(--fg-muted); }
.crmd-card { background: var(--bg-surface); border: 1px solid var(--border-default); border-radius: var(--r-md); padding: var(--sp-3); margin-bottom: var(--sp-3); }
.crmd-card--example { border-style: dashed; opacity: .8; }
.crmd-card__title { font-weight: 600; margin-bottom: var(--sp-2); }
.crmd-card__row { font-size: 13px; margin-top: 4px; }
.crmd-stars { color: #f59e0b; letter-spacing: 1px; font-size: 14px; }
.crmd-stars .off { color: var(--border-strong); }
.crmd-tag { display: inline-block; font-size: 11px; padding: 1px 8px; border-radius: var(--r-full); background: var(--bg-surface-2); border: 1px solid var(--border-default); margin-right: 4px; }
.crmd-doccats { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: var(--sp-3); margin-top: var(--sp-3); }
.crmd-doccat { border: 1px solid var(--border-default); border-radius: var(--r-md); padding: var(--sp-3); background: var(--bg-surface-2); }
.crmd-doccat .muted { font-size: 12px; margin-top: 4px; }

/* Скрытый раздел обязан быть скрыт: иначе при рассинхроне версий один раздел
   (например, радар) остаётся видимым и накрывает собой тот, что открыл сотрудник. */
.section[hidden] { display: none !important; }

/* ============================================================================
   27.09.2026 — «Язычок» ассистента: дремлющая вкладка у правого края экрана
   вместо пункта в боковом меню. Никаких таймеров/периодического выезжания —
   Артём просил не отвлекать от работы: раскрывается только на hover/фокус,
   на телефоне (нет hover) — просто иконка, тап сразу открывает панель.
   ============================================================================ */
:root { --at-peek: 34px; }
.assist-tab {
  position: fixed;
  top: 50%;
  right: 0;
  z-index: 2100; /* выше модалок/листов (--z-modal 2000), ниже тостов (3000) — язычок виден и поверх листа «Финансы» */
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 7px;
  padding: 16px 13px;
  border: 1px solid var(--border-default);
  border-right: none;
  border-radius: var(--r-md) 0 0 var(--r-md);
  background: var(--c-surface);
  box-shadow: var(--shadow-md);
  color: var(--fg-default);
  cursor: pointer;
  transform: translate(calc(100% - var(--at-peek)), -50%);
  transition: transform .2s ease;
}
.assist-tab__chevron { width: 13px; height: 13px; flex: none; color: var(--fg-muted); }
.assist-tab__ico { width: 22px; height: 22px; flex: none; }
.assist-tab__label {
  font-size: 11px;
  font-weight: var(--fw-bold);
  letter-spacing: .02em;
}
.assist-tab:hover,
.assist-tab:focus-visible { transform: translate(0, -50%); }
body.assist-open .assist-tab { display: none; }

@media (max-width: 900px) {
  /* внизу справа, чуть выше нижней кромки (просьба Артёма — было слишком низко,
     почти у самого края); без вертикального -50% из десктопной transform — иначе
     повиснет выше заданного отступа; и никакого раскрытия по «hover» — на тапе
     оно не нужно. Подпись AI оставлена (тоже вертикально, как на десктопе),
     стрелка убрана — на тапе подсказка «потяни» ни к чему. */
  .assist-tab,
  .assist-tab:hover,
  .assist-tab:focus-visible {
    top: auto;
    bottom: calc(90px + env(safe-area-inset-bottom, 0px));
    padding: 12px 12px;
    transform: translateX(calc(100% - var(--at-peek)));
  }
  .assist-tab__chevron { display: none; }
}

/* Пока открыта полноэкранная карточка/панель/лист «Ещё» — страница под ними зафиксирована
   ровно на текущей прокрутке (JS выставляет top:-scrollY), чтобы палец не «протягивал»
   скролл сквозь них на список позади (см. блокировку скролла в конце app.js). */
body.gs-scroll-locked { position: fixed; left: 0; right: 0; width: 100%; overflow: hidden; }

/* ============================================================================
   29.09.2026 — Нижняя таб-панель телефона (по мотивам iOS) вместо длинного
   списка сверху: 4 главных раздела одним тапом + «Ещё» со всем остальным.
   Список «Ещё» (бывший «гамбургер») теперь не толкает страницу вниз, а
   ложится поверх неё полноэкранным листом — задел под это ниже.
   ============================================================================ */
:root { --tabbar-h: 58px; }
.tabbar { display: none; }
@media (max-width: 900px) {
  .tabbar {
    display: flex;
    position: fixed; left: 0; right: 0; bottom: 0;
    z-index: var(--z-dropdown);
    background: var(--c-surface);
    border-top: 1px solid var(--border-default);
    padding: 6px 4px calc(6px + env(safe-area-inset-bottom, 0px));
    gap: 2px;
  }
  .tabbar__item {
    flex: 1 1 0; min-width: 0;
    display: flex; flex-direction: column; align-items: center; justify-content: center;
    gap: 3px; height: calc(var(--tabbar-h) - 12px);
    border: none; background: transparent; color: var(--fg-muted);
    font-family: var(--font-sans); cursor: pointer; -webkit-tap-highlight-color: transparent;
  }
  .tabbar__item:hover { background: transparent; }
  .tabbar__item.is-active { color: var(--c-brand); background: transparent; }
  .tabbar__ico { width: 21px; height: 21px; flex: none; }
  .tabbar__label { font-size: 10px; font-weight: var(--fw-medium); line-height: 1; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 100%; }

  /* место под таб-панель снизу, чтобы последняя карточка раздела не пряталась под ней */
  .content { padding-bottom: calc(var(--tabbar-h) + env(safe-area-inset-bottom, 0px) + var(--sp-4)); }
  /* язычок ассистента поднимается над таб-панелью, а не ложится поверх неё */
  .assist-tab, .assist-tab:hover, .assist-tab:focus-visible {
    bottom: calc(var(--tabbar-h) + 14px + env(safe-area-inset-bottom, 0px));
  }

  /* Список «Ещё» — не в потоке страницы, а полноэкранный лист поверх контента (ниже фиксированной
     шапки-гамбургера по z-index, чтобы кнопка сворачивания оставалась видна и кликабельна сверху). */
  .app:not(.is-collapsed) .side {
    position: fixed; inset: 0; z-index: calc(var(--z-dropdown) - 1);
    height: 100vh; overflow-y: auto; -webkit-overflow-scrolling: touch;
    padding-bottom: calc(var(--sp-4) + env(safe-area-inset-bottom, 0px));
    animation: ez-slide-up .18s ease both;
  }
  .app .side__brand { z-index: var(--z-dropdown); }

  /* Пока открыт лист «Ещё», панель ассистента или полноэкранная карточка тендера/CRM-объекта —
     таб-панель прячется, как системный tab bar под полноэкранным экраном в iOS.
     .tabbar лежит в разметке РЯДОМ с .app (не внутри него), поэтому проверяем через body:has(). */
  body:has(.app:not(.is-collapsed)) .tabbar,
  body.assist-open .tabbar,
  body:has(.overlay:not([hidden])) .tabbar {
    display: none;
  }
}
