/* ==========================================================================
   GrainFlow ERP 3.0.20 — оформление Fluent (Microsoft Dynamics 365) поверх всего приложения.
   Цвета, шрифт и скругления — переменные в theme.css (--t-*); здесь — компоненты.
   Функции не меняются: RevoGrid (правка, фильтры, ширина колонок, копирование, вставка,
   удаление), окна и формы работают как раньше. Только вид.
   ========================================================================== */

:root {
  --fl-accent: #0F6CBD; --fl-accent-hover: #115EA3; --fl-accent-soft: #EBF3FC; --fl-accent-line: #B4D6FA;
  --fl-ink: #242424; --fl-ink-2: #424242; --fl-ink-3: #616161; --fl-ink-4: #707070;
  --fl-line: #E0E0E0; --fl-line-2: #F0F0F0; --fl-stroke: #D1D1D1; --fl-hover: #F5F5F5;
  --fl-bad: #B10E1C; --fl-bad-soft: #FDF3F4; --fl-warn: #8A3707; --fl-warn-soft: #FDF6F3; --fl-ok: #0E700E; --fl-ok-soft: #F1FAF1;
  --fl-shadow-2: 0 1px 2px rgba(0,0,0,.12), 0 0 2px rgba(0,0,0,.08);
  --fl-shadow-8: 0 4px 8px rgba(0,0,0,.14), 0 0 2px rgba(0,0,0,.12);
  --fl-shadow-28: 0 14px 28px rgba(0,0,0,.24), 0 0 8px rgba(0,0,0,.20);
}
body { background: #FAFAFA; color: var(--fl-ink); }

/* ---------- кнопки: основная — синяя, обычная — белая с серой рамкой, ссылка — синий текст ---------- */
.gf-btn, .ws-btn, button.btn, .btn-secondary {
  border-radius: 4px !important; border: 1px solid var(--fl-stroke) !important; background: #FFFFFF !important;
  color: var(--fl-ink) !important; font-weight: 600 !important; box-shadow: none !important;
}
.gf-btn:hover, .ws-btn:hover, button.btn:hover, .btn-secondary:hover { background: var(--fl-hover) !important; border-color: #C7C7C7 !important; }
.gf-btn-p, .ws-primary, .btn-primary, button.primary {
  background: var(--fl-accent) !important; border-color: var(--fl-accent) !important; color: #FFFFFF !important;
}
.gf-btn-p:hover, .ws-primary:hover, .btn-primary:hover, button.primary:hover { background: var(--fl-accent-hover) !important; border-color: var(--fl-accent-hover) !important; }
.ws-link { color: var(--fl-accent) !important; }
/* фокус с клавиатуры — только у кнопок и ссылок, тонкой синей рамкой (3.0.23: без лишних рамок у полей и ячеек) */
button:focus-visible, a:focus-visible, [role="tab"]:focus-visible { outline: 2px solid var(--fl-accent) !important; outline-offset: 1px; }

/* ---------- поля ввода: серая рамка, снизу — линия; в фокусе — синяя линия снизу ---------- */
input[type="text"], input[type="search"], input[type="number"], input[type="date"], input[type="password"], input:not([type]), select, textarea {
  border-radius: 4px; border-color: var(--fl-stroke); border-bottom-color: #616161;
}
input[type="text"]:focus, input[type="search"]:focus, input[type="number"]:focus, input[type="date"]:focus, input[type="password"]:focus, input:not([type]):focus, select:focus, textarea:focus {
  outline: none; border-bottom: 2px solid var(--fl-accent); box-shadow: none;
}

/* ---------- окна: скругление 8, глубокая тень Fluent ---------- */
dialog, [data-gf-dialog], .gf-dialog, .modal, .ws-dialog {
  border: 0 !important; border-radius: 8px !important; box-shadow: var(--fl-shadow-28) !important; background: #FFFFFF;
}
dialog::backdrop { background: rgba(0,0,0,.4); }
dialog h2, dialog h3 { font-weight: 600; }

/* ---------- всплывающие списки (выбор, фильтр по колонке, меню «···») ---------- */
.gf-pick { border: 0 !important; border-radius: 6px !important; box-shadow: var(--fl-shadow-8) !important; background: #FFFFFF !important; }
.gf-pick button { border-radius: 4px !important; }
.gf-pick button:hover, .gf-pick button[aria-selected="true"] { background: var(--fl-hover) !important; }
.gf-pick .gf-btn-p { color: #FFFFFF !important; }

/* ---------- боковое меню: светлое, выбранный пункт — синяя полоска слева ---------- */
aside.sidebar, aside { background: #FFFFFF; border-right: 1px solid var(--fl-line); }
aside .nav-item { border-radius: 4px !important; color: var(--fl-ink-2) !important; }
aside .nav-item:hover { background: var(--fl-hover) !important; color: var(--fl-ink) !important; }
aside .nav-item.is-active { background: var(--fl-accent-soft) !important; color: var(--fl-ink) !important; font-weight: 600; }
aside .nav-item.is-active svg { color: var(--fl-accent) !important; }
aside .nav-item.is-active::before { background: var(--fl-accent) !important; }

/* ---------- карточки и плитки других страниц — белые панели с мягкой тенью ---------- */
.card, .ws-card, .kpi, .tile, .panel, .rep-card, .dash-card { border-color: transparent !important; box-shadow: var(--fl-shadow-2) !important; border-radius: 8px !important; }

/* ==========================================================================
   Экран продажи и реестр
   ========================================================================== */
.gf-sheet-head h1, #workspaceHost h1 { font-weight: 600; letter-spacing: 0; }
.gf-sheet-sub { color: var(--fl-ink-3); }

/* разделы — белые панели */
.gf-sec { background: #FFFFFF; border-radius: 8px; box-shadow: var(--fl-shadow-2); padding: 14px 16px 16px; margin-top: 16px !important; }
.gf-sec > h2 { font-size: 16px !important; font-weight: 600 !important; color: var(--fl-ink); margin: 0 0 4px !important; }
.gf-sec > h2 .gf-sec-n, .gf-sec .gf-sec-n { color: var(--fl-ink-4); font-weight: 400; font-size: 12px; }
.gf-sec .gf-sec-act .gf-btn:not(.gf-btn-p) { border-color: transparent !important; background: transparent !important; color: var(--fl-accent) !important; }
.gf-sec .gf-sec-act .gf-btn:not(.gf-btn-p):hover { background: var(--fl-hover) !important; }
details.gf-log { background: #FFFFFF; border-radius: 8px; box-shadow: var(--fl-shadow-2); padding: 12px 16px; margin-top: 16px; }

/* ---------- таблицы RevoGrid в виде списков Fluent ---------- */
.gf-sec revo-grid, #workspaceHost revo-grid { border: 0 !important; font-family: var(--t-font); }
.gf-sec revo-grid .rgHeaderCell {
  background: #FFFFFF !important; color: var(--fl-ink-2) !important; font-weight: 600 !important; font-size: 12px !important;
  border-right: 0 !important; border-bottom: 1px solid var(--fl-line) !important; box-shadow: inset -1px 0 0 0 transparent;
}
/* разделитель колонок в шапке — короткая линия справа (не мешает ручке ширины) */
.gf-sec revo-grid .rgHeaderCell { box-shadow: inset -1px 0 0 0 var(--fl-line-2) !important; }
.gf-sec revo-grid .rgCell { border-right: 0 !important; border-bottom: 1px solid var(--fl-line-2) !important; background: #FFFFFF; color: var(--fl-ink); }
.gf-sec revo-grid .rgCell.disabled { background: #FFFFFF; }
.gf-sec revo-grid .rgRow:hover .rgCell { background: var(--fl-hover) !important; }
/* состояние строки — не заливкой, а цветной полоской слева (первая ячейка) */
.gf-sec revo-grid .rgRow.ev-ok .rgCell, .gf-sec revo-grid .rgRow.ev-ok .rgCell.disabled,
.gf-sec revo-grid .rgRow.ev-wait .rgCell, .gf-sec revo-grid .rgRow.ev-wait .rgCell.disabled,
.gf-sec revo-grid .rgRow.ev-bad .rgCell, .gf-sec revo-grid .rgRow.ev-bad .rgCell.disabled { background: #FFFFFF !important; }
.gf-sec revo-grid .rgRow.ev-ok .rgCell[data-rgcol="0"] { box-shadow: inset 3px 0 0 0 var(--fl-ok); }
.gf-sec revo-grid .rgRow.ev-wait .rgCell[data-rgcol="0"] { box-shadow: inset 3px 0 0 0 #E9A23B; }
.gf-sec revo-grid .rgRow.ev-bad .rgCell[data-rgcol="0"] { box-shadow: inset 3px 0 0 0 var(--fl-bad); }
.gf-sec revo-grid .rgRow.ev-ok:hover .rgCell, .gf-sec revo-grid .rgRow.ev-wait:hover .rgCell, .gf-sec revo-grid .rgRow.ev-bad:hover .rgCell { background: var(--fl-hover) !important; }
/* полоса второго контракта — едва заметная */
.gf-sec revo-grid .rgRow.gf-band .rgCell { background: #FAFAFA !important; }
/* итог — серый фон, жирный */
.gf-sec revo-grid revogr-data[type="rowPinEnd"] .rgCell, .gf-sec revo-grid .rgRow.gf-tot .rgCell { background: #FAFAFA !important; font-weight: 600; border-top: 1px solid var(--fl-line) !important; }
/* новая строка — серым курсивом */
.gf-sec revo-grid .rgRow.gf-new .rgCell { color: #9E9E9E !important; font-style: italic; background: #FFFFFF !important; }
/* правка: ячейка в фокусе — синяя рамка, как поле Fluent; диапазон — голубой */
.gf-sec revo-grid .focused-cell { border: 2px solid var(--fl-accent) !important; box-shadow: none !important; }
.gf-sec revo-grid .selection-border-range { border: 1px solid #8FC1F5 !important; background: rgba(15,108,189,.08) !important; }
.gf-sec revo-grid revogr-edit input { border: 0 !important; border-bottom: 2px solid var(--fl-accent) !important; border-radius: 0 !important; font-family: var(--t-font); }
/* расчётные — серым; ссылки (номер продажи) — синим */
.gf-sec revo-grid .rgCell.gf-calc { color: var(--fl-ink-3) !important; }
.gf-sec revo-grid .rgCell.gf-link { color: var(--fl-accent) !important; font-weight: 600; text-decoration: none !important; }
/* цветом — только текст, без заливки ячеек */
.gf-sec revo-grid .rgCell.gf-bad { color: var(--fl-bad) !important; font-weight: 600; }
.gf-sec revo-grid .rgCell.gf-warn-c { color: var(--fl-warn) !important; font-weight: 600; }
.gf-sec revo-grid .rgCell.gf-ok { color: var(--fl-ok) !important; font-weight: 600; }
.gf-sec revo-grid .rgCell.gf-late { background-color: transparent !important; color: var(--fl-bad) !important; font-weight: 600; }
.gf-sec revo-grid .rgCell.gf-vessel { color: var(--fl-accent) !important; }
.gf-sec revo-grid .rgCell.gf-vessel-none { color: #9E9E9E !important; }
/* удаление строки — «···» (меню действий строки, как во Fluent) */
.gf-sec revo-grid .rgCell.gf-x::before { background-image: url("data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='%23707070'%3E%3Ccircle cx='5' cy='12' r='1.8'/%3E%3Ccircle cx='12' cy='12' r='1.8'/%3E%3Ccircle cx='19' cy='12' r='1.8'/%3E%3C/svg%3E") !important; }
.gf-sec revo-grid .rgRow:hover .rgCell.gf-x::before, .gf-sec revo-grid .rgCell.gf-x:hover::before { background-image: url("data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='%230F6CBD'%3E%3Ccircle cx='5' cy='12' r='1.8'/%3E%3Ccircle cx='12' cy='12' r='1.8'/%3E%3Ccircle cx='19' cy='12' r='1.8'/%3E%3C/svg%3E") !important; }
/* заголовки с фильтром (реестр): серая стрелка; фильтр включён — синяя воронка */
.gf-sec revo-grid .rgHeaderCell.gf-hf:hover { background-color: var(--fl-hover) !important; }
.gf-sec revo-grid .rgHeaderCell.gf-hf-on, .gf-sec revo-grid .rgHeaderCell.gf-hs-asc, .gf-sec revo-grid .rgHeaderCell.gf-hs-desc { color: var(--fl-accent) !important; }

/* ---------- статус продажи — переключатель Fluent ---------- */
.gf-seg { border-color: var(--fl-stroke) !important; border-radius: 4px !important; }
.gf-seg button, .gf-seg span { color: var(--fl-ink-2) !important; border-left-color: var(--fl-stroke) !important; font-weight: 400 !important; }
.gf-seg .on { background: var(--fl-accent-soft) !important; color: var(--fl-accent) !important; font-weight: 600 !important; }
.gf-seg .on[data-st="done"] { background: var(--fl-ok-soft) !important; color: var(--fl-ok) !important; }
.gf-seg .on[data-st="cancelled"] { background: var(--fl-bad-soft) !important; color: var(--fl-bad) !important; }
.gf-seg [data-st="work"]::before { background: var(--fl-accent) !important; }
.gf-seg [data-st="done"]::before { background: var(--fl-ok) !important; }
.gf-seg [data-st="cancelled"]::before { background: var(--fl-bad) !important; }

/* ---------- реестр: строка команд, фильтры, сводка ---------- */
#workspaceHost .gf-reg-acts { background: #FFFFFF; border-radius: 8px; box-shadow: var(--fl-shadow-2); padding: 6px 8px; margin: 16px 0 12px !important; }
#workspaceHost .gf-reg-acts button { height: 32px !important; border-radius: 4px !important; border: 1px solid transparent !important; background: transparent !important; color: var(--fl-ink) !important; font-weight: 400 !important; padding: 0 12px !important; }
#workspaceHost .gf-reg-acts button:hover { background: var(--fl-hover) !important; }
#workspaceHost .gf-reg-acts button.ws-primary { background: var(--fl-accent) !important; color: #FFFFFF !important; font-weight: 600 !important; }
#workspaceHost .gf-reg-acts button.ws-primary:hover { background: var(--fl-accent-hover) !important; }
#workspaceHost .sl-f, #workspaceHost .sl-cols { border-radius: 4px !important; border-color: var(--fl-stroke) !important; }
#workspaceHost .sl-f:focus-within { border-color: var(--fl-stroke) !important; box-shadow: inset 0 -2px 0 0 var(--fl-accent) !important; }
#workspaceHost .gf-reg-sum { background: transparent !important; box-shadow: none !important; padding: 0 !important; }
#workspaceHost .gf-reg-sum-row > div { background: #FFFFFF; border-radius: 8px; box-shadow: var(--fl-shadow-2); padding: 4px; }
/* ответственный — буква в синем кружке */
#workspaceHost revo-grid[aria-label="reg-sales"] .rgCell[data-rgcol] .gf-ava { display: inline-flex; }
.gf-sec revo-grid .rgCell.gf-resp { color: var(--fl-accent) !important; font-weight: 600; }

/* ---------- всплывающее сообщение ---------- */
#toastHost > * { border-radius: 6px !important; box-shadow: var(--fl-shadow-8) !important; }

/* поправки 3.0.20 */
#workspaceHost .gf-reg-sum-row > div { padding: 0 !important; overflow: hidden; }
#workspaceHost .gf-reg-acts button:not(.ws-primary) { border-color: transparent !important; color: var(--fl-ink) !important; background: transparent !important; font-weight: 400 !important; }
#workspaceHost .gf-reg-acts button:not(.ws-primary):hover { background: var(--fl-hover) !important; }
#workspaceHost .gf-reg-acts button.ws-primary { border-color: var(--fl-accent) !important; }
#workspaceHost .sl-filters { grid-template-columns: minmax(240px, 2fr) repeat(3, minmax(190px, 1fr)) minmax(120px, .6fr) !important; }
#workspaceHost .sl-f select { text-overflow: ellipsis; }
/* текст строки — обычный; красным — только просроченное (ячейки gf-bad), метка состояния — полоска слева */
.gf-sec revo-grid .rgRow.ev-bad .rgCell, .gf-sec revo-grid .rgRow.ev-wait .rgCell, .gf-sec revo-grid .rgRow.ev-ok .rgCell { color: var(--fl-ink) !important; }
.gf-sec revo-grid .rgRow .rgCell.gf-bad { color: var(--fl-bad) !important; }
.gf-sec revo-grid .rgRow .rgCell.gf-ok { color: var(--fl-ok) !important; }
.gf-sec revo-grid .rgRow .rgCell.gf-warn-c { color: var(--fl-warn) !important; }
.gf-sec revo-grid .rgRow .rgCell.gf-link { color: var(--fl-accent) !important; }
.gf-sec revo-grid .rgRow.gf-new .rgCell { color: #9E9E9E !important; }
/* статус продажи: выбранный — без жёлтой рамки прежнего стиля */
.gf-seg button.on, .gf-seg span.on, .gf-seg .on[data-st] { border-color: var(--fl-stroke) !important; outline: 0 !important; box-shadow: none !important; }
.gf-seg button.on[data-st="new"] { background: #F5F5F5 !important; color: var(--fl-ink) !important; }
.gf-seg button.on[data-st="work"] { background: var(--fl-accent-soft) !important; color: var(--fl-accent) !important; }
.gf-seg button.on[data-st="done"] { background: var(--fl-ok-soft) !important; color: var(--fl-ok) !important; }
.gf-seg button.on[data-st="cancelled"] { background: var(--fl-bad-soft) !important; color: var(--fl-bad) !important; }
/* ручка ширины колонки — над текстом заголовка (иначе тянуть край колонки нельзя) */
.gf-sec revo-grid .rgHeaderCell .resizable, .gf-sec revo-grid .rgHeaderCell .resizable-r { z-index: 5 !important; }
.gf-sec revo-grid .rgHeaderCell .header-content { pointer-events: none; }   /* щелчок — по ячейке заголовка (меню фильтра), край — ручке ширины */
.gf-sec revo-grid .resizable-r { right: 0 !important; width: 8px !important; }   /* ручка — внутри своей ячейки: соседняя ячейка её не перекрывает */
.gf-sec revo-grid .resizable-r::after { left: 7px !important; }
#workspaceHost .sl-filters { grid-template-columns: minmax(220px, 1.6fr) minmax(240px, 1.15fr) repeat(2, minmax(170px, 1fr)) minmax(110px, .5fr) !important; }

/* ==========================================================================
   Дашборд 3.0.21 — рабочее пространство (Dynamics 365) и обзор для руководителя (SAP Fiori)
   ========================================================================== */
.d3 { font-variant-numeric: tabular-nums; }
.d3 .d3-bar { display: flex; justify-content: space-between; align-items: center; gap: 12px; flex-wrap: wrap; background: #FFFFFF; border-radius: 8px; box-shadow: var(--fl-shadow-2); padding: 6px 8px; }
.d3 .d3-bar .gf-reg-acts-l, .d3 .d3-bar .gf-reg-acts-r { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; }
.d3 .d3-bar > div > button { height: 32px; padding: 0 12px; border: 0; border-radius: 4px; background: transparent; color: var(--fl-ink); font: inherit; cursor: pointer; }
.d3 .d3-bar > div > button:hover { background: var(--fl-hover); }
.d3-pivot { display: inline-flex; gap: 18px; }
.d3-pivot button { height: 32px; padding: 0 2px; border: 0; border-bottom: 3px solid transparent; background: transparent; font: inherit; font-size: 14px; color: var(--fl-ink-2); cursor: pointer; }
.d3-pivot button.on { color: var(--fl-ink); font-weight: 600; border-bottom-color: var(--fl-accent); }
.d3-pivot.small { gap: 0; border: 1px solid var(--fl-stroke); border-radius: 4px; overflow: hidden; }
.d3-pivot.small button { padding: 0 12px; border-bottom: 0; font-size: 13px; }
.d3-pivot.small button + button { border-left: 1px solid var(--fl-stroke); }
.d3-pivot.small button.on { background: var(--fl-accent-soft); color: var(--fl-accent); }
.d3 .d3-season { height: 32px !important; min-height: 32px !important; }
.d3 .d3-season select { height: 28px !important; min-height: 28px !important; }
.d3-asof { color: var(--fl-ink-3); font-size: 12px; margin: 10px 2px 14px; }
.d3-h { display: inline-block; margin: 0 0 12px; padding-bottom: 6px; font-size: 14px; font-weight: 600; border-bottom: 2px solid var(--fl-accent); }
/* — рабочее пространство — */
.d3-pano { display: grid; grid-template-columns: 320px minmax(0, 1fr) 200px; gap: 20px; align-items: start; }
@media (max-width: 1280px) { .d3-pano { grid-template-columns: 300px minmax(0, 1fr); } .d3-links { grid-column: 1 / -1; } }
.d3-grp { font-size: 12px; font-weight: 600; color: var(--fl-ink-3); margin: 12px 0 8px; }
.d3-tiles { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; }
.d3-tile { position: relative; height: 104px; text-align: left; border: 0; border-radius: 4px; background: #FFFFFF; box-shadow: var(--fl-shadow-2); padding: 10px 12px; display: flex; flex-direction: column; gap: 2px; font: inherit; cursor: pointer; color: var(--fl-ink); }
.d3-tile:hover { box-shadow: var(--fl-shadow-8); }
.d3-tile .t { font-size: 13px; font-weight: 600; line-height: 1.3; padding-right: 8px; }
.d3-tile .a { font-size: 12px; color: var(--fl-ink-3); }
.d3-tile .c { position: absolute; right: 12px; bottom: 8px; font-size: 32px; font-weight: 300; line-height: 1; color: var(--fl-accent); }
.d3-tile.r .c { color: var(--t-bad); } .d3-tile.y .c { color: var(--t-warn); }
.d3-tile.on { box-shadow: 0 0 0 2px var(--fl-accent), var(--fl-shadow-8); }
.d3-tabs { display: flex; gap: 16px; border-bottom: 1px solid var(--fl-line); flex-wrap: wrap; }
.d3-tabs button { padding: 8px 2px; border: 0; border-bottom: 3px solid transparent; margin-bottom: -1px; background: transparent; font: inherit; font-size: 13px; color: var(--fl-ink-2); cursor: pointer; white-space: nowrap; }
.d3-tabs button.on { color: var(--fl-ink); font-weight: 600; border-bottom-color: var(--fl-accent); }
.d3-tabs button i { font-style: normal; color: var(--fl-ink-3); margin-left: 4px; font-weight: 400; }
.d3-list { margin-top: 12px !important; }
.d3-links h4 { margin: 0 0 4px; font-size: 12px; font-weight: 600; color: var(--fl-ink-3); }
.d3-links h4 + * { margin-top: 0; }
.d3-links button { display: block; width: 100%; text-align: left; padding: 6px 0; border: 0; background: transparent; color: var(--fl-accent); font: inherit; font-size: 13px; cursor: pointer; }
.d3-links button:hover { text-decoration: underline; }
.d3-links h4:not(:first-of-type) { margin-top: 16px; }
/* — обзор для руководителя — */
.d3-ovp { columns: 3 300px; column-gap: 16px; }
.d3-card { break-inside: avoid; background: #FFFFFF; border-radius: 8px; box-shadow: var(--fl-shadow-2); margin: 0 0 16px; overflow: hidden; }
.d3-card header { padding: 14px 16px 8px; }
.d3-card .t { display: flex; justify-content: space-between; gap: 8px; font-size: 14px; font-weight: 600; }
.d3-card .t i { font-style: normal; font-size: 12px; font-weight: 400; color: var(--fl-ink-3); white-space: nowrap; }
.d3-card .s { font-size: 12px; color: var(--fl-ink-3); margin-top: 2px; }
.d3-card .k { display: flex; align-items: baseline; gap: 8px; flex-wrap: wrap; margin-top: 10px; }
.d3-card .k .v { font-size: 24px; font-weight: 600; line-height: 1; }
.d3-card .k .v.r { color: var(--t-bad); } .d3-card .k .v.y { color: var(--t-warn); } .d3-card .k .v.g { color: var(--t-ok); } .d3-card .k .v.b { color: var(--fl-accent); }
.d3-card .k .u { font-size: 13px; color: var(--fl-ink-3); }
.d3-card .cmp { display: flex; gap: 16px; margin-top: 6px; font-size: 12px; color: var(--fl-ink-3); } .d3-card .cmp b { color: var(--fl-ink); }
.d3-card .b { padding: 2px 16px 12px; }
.d3-card footer { display: flex; justify-content: space-between; align-items: center; border-top: 1px solid var(--fl-line-2); padding: 8px 16px; font-size: 12px; color: var(--fl-ink-3); }
.d3 .bd { display: inline-flex; align-items: center; gap: 5px; font-size: 12px; padding: 1px 8px; border-radius: 999px; font-weight: 600; }
.d3 .bd.r { color: var(--fl-bad); background: var(--fl-bad-soft); } .d3 .bd.g { color: var(--fl-ok); background: var(--fl-ok-soft); }
.d3-go { border: 0; background: transparent; color: var(--fl-accent); font: inherit; font-size: 13px; font-weight: 600; padding: 0; cursor: pointer; }
.d3-li { display: flex; justify-content: space-between; gap: 10px; width: 100%; padding: 8px 0; border: 0; border-top: 1px solid var(--fl-line-2); background: transparent; font: inherit; font-size: 13px; text-align: left; color: var(--fl-ink); cursor: pointer; }
.d3-li.static { cursor: default; }
.d3-li:not(.static):hover { background: var(--fl-hover); }
.d3-li .m, .d3-li .x { display: flex; flex-direction: column; min-width: 0; }
.d3-li .x { text-align: right; white-space: nowrap; }
.d3-li span span, .d3-li .m span, .d3-li .x span { font-size: 12px; color: var(--fl-ink-3); }
.d3-li b.r { color: var(--t-bad); } .d3-li b.y { color: var(--t-warn); }
.d3-donut { display: flex; gap: 14px; align-items: center; font-size: 12px; line-height: 1.9; }
.d3-bars text { font-family: var(--t-font); font-size: 11px; }
.d3-bars text.l { fill: var(--fl-ink-2); } .d3-bars text.v { fill: var(--fl-ink-3); }
.d3-bars rect.p { fill: var(--fl-accent-soft); } .d3-bars rect.f { fill: var(--fl-accent); }
.d3-link { display: flex; justify-content: space-between; width: 100%; padding: 9px 0; border: 0; border-top: 1px solid var(--fl-line-2); background: transparent; color: var(--fl-accent); font: inherit; font-size: 13px; cursor: pointer; }
.d3-link:first-child { border-top: 0; }
@media (max-width: 1500px) {
  .d3-pano { grid-template-columns: 300px minmax(0, 1fr); }
  .d3-links { grid-column: 1 / -1; display: flex; gap: 6px 18px; flex-wrap: wrap; align-items: baseline; }
  .d3-links .d3-h { width: 100%; }
  .d3-links h4 { margin: 0 !important; }
  .d3-links button { display: inline; width: auto; padding: 4px 0; }
}
.d3 .d3-li.ws-link { color: var(--fl-ink) !important; }
.d3 .d3-season { height: 36px !important; min-height: 36px !important; }
.d3 .d3-season select { height: 32px !important; min-height: 32px !important; }

/* ===== 3.0.22: реестр — ровные заголовки, закреплённые колонки, многоточие, сворачиваемая сводка ===== */
#workspaceHost revo-grid[aria-label="reg-sales"] .rgHeaderCell { height: 40px; }
#workspaceHost revo-grid[aria-label="reg-sales"] .rgHeaderCell .header-content { padding: 0 26px 0 10px !important; display: flex; align-items: center; height: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
#workspaceHost revo-grid[aria-label="reg-sales"] .rgHeaderCell.gf-n .header-content { justify-content: flex-end; }
.gf-sec revo-grid .rgHeaderCell.gf-hf, .gf-sec revo-grid .rgHeaderCell.gf-hf-on, .gf-sec revo-grid .rgHeaderCell.gf-hs-asc, .gf-sec revo-grid .rgHeaderCell.gf-hs-desc { padding-right: 0 !important; background-position: right 8px center !important; background-size: 12px !important; }
#workspaceHost revo-grid[aria-label="reg-sales"] .rgCell { padding: 0 10px !important; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
#workspaceHost revo-grid[aria-label="reg-sales"] .rgCell.gf-n { text-align: right; }
/* закреплённые слева колонки — с тенью справа, чтобы было видно, что строки «уходят» под них */
/* сворачиваемая сводка */
.gf-sum-h { display: flex; align-items: baseline; gap: 10px; flex-wrap: wrap; }
.gf-sum-h .gf-sum-tg { order: 3; margin-left: auto; font-size: 13px; font-weight: 600; border: 0; background: transparent; cursor: pointer; padding: 0; }
.gf-sec revo-grid.gf-pinned revogr-data[col-type="rgCol"] .rgRow .rgCell[data-rgcol="0"] { box-shadow: none !important; }

/* ===== 3.0.23: активные поля — без лишних рамок и подсветки ===== */
input:focus, select:focus, textarea:focus { outline: none !important; box-shadow: none !important; }
input:focus-visible, select:focus-visible, textarea:focus-visible { outline: none !important; }
/* правка ячейки: одна синяя рамка у ячейки; поле внутри — без рамок, линий и теней */
.gf-sec revo-grid revogr-edit input, .gf-sec revo-grid revogr-edit textarea, #workspaceHost revo-grid revogr-edit input {
  border: 0 !important; border-bottom: 0 !important; box-shadow: none !important; outline: none !important; background: #FFFFFF !important; border-radius: 0 !important; padding: 0 10px !important; height: 100% !important; }
.gf-sec revo-grid revogr-edit { box-shadow: none !important; border: 0 !important; }
.gf-sec revo-grid revogr-focus { border: 0 !important; box-shadow: none !important; outline: none !important; }   /* служебный элемент шапки — без рамки */
.gf-sec revo-grid .rgCell:focus, .gf-sec revo-grid .rgCell:focus-visible, .gf-sec revo-grid revogr-data:focus, .gf-sec revo-grid:focus, .gf-sec revo-grid:focus-within { outline: none !important; box-shadow: none !important; }
.gf-sec revo-grid .selection-border-range { border: 1px solid var(--fl-accent-line) !important; background: rgba(15,108,189,.06) !important; box-shadow: none !important; }
/* выпадающий список в ячейке: поиск — линия снизу, без колец */
.gf-pick .gf-pick-q { border: 1px solid var(--fl-stroke) !important; border-radius: 4px !important; box-shadow: none !important; }
.gf-pick .gf-pick-q:focus { border-bottom: 2px solid var(--fl-accent) !important; }
/* поля фильтров: в фокусе — только синяя линия снизу */
#workspaceHost .sl-f:focus-within { box-shadow: inset 0 -2px 0 0 var(--fl-accent) !important; outline: none !important; }
#workspaceHost .sl-f input:focus, #workspaceHost .sl-f select:focus { border: 0 !important; box-shadow: none !important; }
/* правка ячейки — одна синяя рамка внутри ячейки (поле редактора), без рамки в шапке */
.gf-sec revo-grid revogr-edit input, #workspaceHost revo-grid revogr-edit input { box-shadow: inset 0 0 0 2px var(--fl-accent) !important; }
/* заголовок колонки ячейки в фокусе — без рамки (RevoGrid даёт ему тот же класс focused-cell) */
.gf-sec revo-grid .rgHeaderCell.focused-cell { border: 0 !important; border-bottom: 1px solid var(--fl-line) !important; box-shadow: inset -1px 0 0 0 var(--fl-line-2) !important; }

/* ===== 3.0.24 ===== */
/* судно, ответственный, номер продажи, просрочка — своим цветом и в строках с полоской состояния */
.gf-sec revo-grid .rgRow.ev-ok .rgCell.gf-vessel, .gf-sec revo-grid .rgRow.ev-wait .rgCell.gf-vessel, .gf-sec revo-grid .rgRow.ev-bad .rgCell.gf-vessel,
.gf-sec revo-grid .rgRow.ev-ok .rgCell.gf-resp, .gf-sec revo-grid .rgRow.ev-wait .rgCell.gf-resp, .gf-sec revo-grid .rgRow.ev-bad .rgCell.gf-resp,
.gf-sec revo-grid .rgRow.ev-ok .rgCell.gf-link, .gf-sec revo-grid .rgRow.ev-wait .rgCell.gf-link, .gf-sec revo-grid .rgRow.ev-bad .rgCell.gf-link { color: var(--fl-accent) !important; }
.gf-sec revo-grid .rgRow.ev-ok .rgCell.gf-vessel-none, .gf-sec revo-grid .rgRow.ev-wait .rgCell.gf-vessel-none, .gf-sec revo-grid .rgRow.ev-bad .rgCell.gf-vessel-none { color: #9E9E9E !important; }
.gf-sec revo-grid .rgRow.ev-ok .rgCell.gf-late, .gf-sec revo-grid .rgRow.ev-wait .rgCell.gf-late, .gf-sec revo-grid .rgRow.ev-bad .rgCell.gf-late { color: var(--fl-bad) !important; }
/* линии RevoGrid у строк и шапки — убраны: разделители рисуют сами ячейки (нет двойной линии под шапкой и полоски у края) */
.gf-sec revo-grid .rgRow, .gf-sec revo-grid .header-rgRow, .gf-sec revo-grid .actual-rgRow { box-shadow: none !important; border: 0 !important; }
/* сводка — всегда в один ряд: «Товар» и «Порт» — по содержимому, деньги — сколько осталось места (не хватит — прокрутка в панели) */
#workspaceHost .gf-reg-sum-row { flex-wrap: nowrap !important; }
#workspaceHost .gf-reg-sum-row > div { flex: 0 0 auto; }
#workspaceHost .gf-reg-sum-row > div:last-child { flex: 0 1 auto; min-width: 0; overflow-x: auto !important; }
/* «Свернуть» — мелкой ссылкой справа в строке заголовка; пояснение — строкой ниже */
.gf-sum-h { display: flex !important; align-items: baseline; justify-content: space-between; gap: 12px; }
.gf-sum-h h2 { margin: 0 !important; font-size: 16px !important; font-weight: 600 !important; }
.gf-sum-h .gf-sum-tg { order: 0 !important; margin: 0 !important; font-size: 12px !important; font-weight: 400 !important; color: var(--fl-accent) !important; border: 0; background: transparent; cursor: pointer; }
.gf-sum-h .gf-sum-tg:hover { text-decoration: underline; }
.gf-sum-note { margin: 2px 0 10px; font-size: 12px; color: var(--fl-ink-4); }
.gf-sum-note .gf-sec-n { font-size: 12px; }

/* ===== 3.0.25 ===== */
/* таблицы сводки — без полос прокрутки (на Windows они видны всегда): строк немного, ширина — ровно по колонкам */
/* 3.0.27: скрыть только полосы прокрутки (revogr-scroll-virtual); .vertical-inner — это контейнер строк, его не трогать
   (в 3.0.25–3.0.26 строки сводки были скрыты вместе с ним) */
.gf-sec revo-grid.gf-compact revogr-scroll-virtual { display: none !important; }
/* подзаголовок «Поступления» под счетами */
.gf-subh { font-size: 13px; font-weight: 600; color: var(--fl-ink-2); margin: 16px 0 6px; }
/* обзор для руководителя — ровная сетка: одинаковые колонки, карточки ряда — одной высоты, переходы — на одной линии (3.0.25) */
.d3-ovp { columns: auto !important; display: grid !important; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 16px; align-items: stretch; }
@media (max-width: 1500px) { .d3-ovp { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
.d3-card { margin: 0 !important; display: flex; flex-direction: column; break-inside: auto; }
.d3-card .b { flex: 1 1 auto; }
.d3-card footer { margin-top: auto; }

/* ===== 3.0.26: реестр — линии колонок; закреплённая часть без поднятого слоя (мышь проходит к остальным колонкам) ===== */
#workspaceHost revo-grid[aria-label="reg-sales"] .rgCell { border-right: 1px solid var(--fl-line-2) !important; }
#workspaceHost revo-grid[aria-label="reg-sales"] .rgHeaderCell { box-shadow: inset -1px 0 0 0 var(--fl-line) !important; }
#workspaceHost revo-grid[aria-label="reg-sales"] revogr-data[col-type="colPinStart"] .rgRow .rgCell:last-child,
#workspaceHost revo-grid[aria-label="reg-sales"] revogr-header[type="colPinStart"] .rgHeaderCell:last-child { border-right: 1px solid var(--fl-stroke) !important; }

/* ===== 3.0.28: горизонтальный свайп тачпада (Mac) — прокрутка таблицы, а не «назад / вперёд» в браузере ===== */
html, body { overscroll-behavior-x: none; }
/* 3.0.30: у таблиц прокрутка снова «переходит» на страницу (contain в 3.0.28 мешал прокрутке страницы на Mac) */

/* ===== 3.0.30: все кнопки — одного вида: белые, постоянная серая рамка; при наведении — чуть темнее серый ===== */
.gf-btn, .gf-btn-p, .ws-btn, .ws-primary, button.btn, .btn-primary, .btn-secondary, button.primary,
#workspaceHost .gf-reg-acts button, #workspaceHost .gf-reg-acts button.ws-primary, #workspaceHost .gf-reg-acts button:not(.ws-primary),
.gf-sec .gf-sec-act .gf-btn, .gf-sec .gf-sec-act .gf-btn:not(.gf-btn-p), .d3 .d3-bar > div > button, dialog button:not(.ws-link):not(.gf-pick-new) {
  height: 32px; padding: 0 14px !important; border: 1px solid var(--fl-stroke) !important; border-radius: 4px !important;
  background: #FFFFFF !important; color: var(--fl-ink) !important; font-weight: 600 !important; font-size: 13px; box-shadow: none !important; cursor: pointer;
}
.gf-btn:hover, .gf-btn-p:hover, .ws-btn:hover, .ws-primary:hover, button.btn:hover, .btn-primary:hover, .btn-secondary:hover, button.primary:hover,
#workspaceHost .gf-reg-acts button:hover, #workspaceHost .gf-reg-acts button.ws-primary:hover, #workspaceHost .gf-reg-acts button:not(.ws-primary):hover,
.gf-sec .gf-sec-act .gf-btn:hover, .gf-sec .gf-sec-act .gf-btn:not(.gf-btn-p):hover, .d3 .d3-bar > div > button:hover, dialog button:not(.ws-link):not(.gf-pick-new):hover {
  background: #F0F0F0 !important; border-color: #BDBDBD !important; color: var(--fl-ink) !important;
}
.gf-btn:active, .ws-btn:active, #workspaceHost .gf-reg-acts button:active, .gf-sec .gf-sec-act .gf-btn:active { background: #E6E6E6 !important; }
.gf-sec .gf-sec-act { display: inline-flex; gap: 8px; flex-wrap: wrap; }
.gf-sec > h2 { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; }
.gf-sec > h2 .gf-sec-act { margin-left: auto; }

/* ===================== 3.0.32: адаптивность — телефон, планшет, большой монитор ===================== */
/* карточки продаж (телефон) */
.gf-rcards { display: grid; gap: 10px; }
.gf-rcard { display: flex; flex-direction: column; gap: 4px; width: 100%; text-align: left; padding: 12px 14px; border: 0; border-radius: 8px; background: #FFFFFF; box-shadow: var(--fl-shadow-2); font: inherit; font-size: 13px; color: var(--fl-ink); cursor: pointer; }
.gf-rcard:active { background: var(--fl-hover); }
.gf-rcard-h { display: flex; justify-content: space-between; align-items: baseline; }
.gf-rcard-h b { color: var(--fl-accent); font-size: 15px; }
.gf-rcard-r { color: var(--fl-accent); font-weight: 600; font-size: 12px; }
.gf-rcard-b { color: var(--fl-ink-2); }
.gf-rcard-v { color: var(--fl-accent); font-weight: 600; } .gf-rcard-v.gf-vessel-none { color: #9E9E9E; font-weight: 400; font-style: italic; }
.gf-rcard-d { color: var(--fl-ink-3); } .gf-rcard-d.gf-late { color: var(--fl-bad); font-weight: 600; }
.gf-rcard-n { display: flex; gap: 16px; color: var(--fl-ink-3); } .gf-rcard-n b { color: var(--fl-ink); }
.gf-rcard-m { font-size: 12px; color: var(--fl-ink-3); } .gf-rcard-m.gf-bad { color: var(--fl-bad); font-weight: 600; } .gf-rcard-m.gf-ok { color: var(--fl-ok); }

/* планшет и узкое окно (до 1100): сводка реестра — переносится, фильтры — в два ряда */
@media (max-width: 1100px) {
  #workspaceHost .gf-reg-sum-row { flex-wrap: wrap !important; }
  #workspaceHost .gf-reg-sum-row > div:last-child { flex: 1 1 100%; }
  #workspaceHost .sl-filters { grid-template-columns: repeat(2, minmax(0, 1fr)) !important; }
  #workspaceHost .sl-filters > :first-child { grid-column: 1 / -1; }
}

/* телефон (до 700) */
@media (max-width: 700px) {
  #workspaceHost, #dashboardView, main section { padding-left: 10px !important; padding-right: 10px !important; }
  .gf-sec { padding: 12px !important; border-radius: 8px; }
  .gf-sec > h2 { font-size: 15px !important; }
  .gf-sec > h2 .gf-sec-act { margin-left: 0; width: 100%; }
  .gf-sec > h2 .gf-sec-act .gf-btn { flex: 1 1 auto; }
  /* реестр */
  #workspaceHost .gf-reg-sum-row > div { flex: 1 1 100% !important; overflow-x: auto !important; }
  #workspaceHost .gf-reg-acts { flex-direction: column; align-items: stretch !important; gap: 6px; }
  #workspaceHost .gf-reg-acts > div { display: flex; flex-wrap: wrap; gap: 6px; }
  #workspaceHost .gf-reg-acts button { flex: 1 1 auto; }
  #workspaceHost .sl-filters { grid-template-columns: 1fr !important; }
  .gf-sum-note { display: none; }
  /* экран продажи */
  .gf-sheet h1 { font-size: 20px !important; line-height: 1.25; }
  .gf-sheet-head { flex-wrap: wrap; gap: 8px; }
  .gf-seg { max-width: 100%; overflow-x: auto; white-space: nowrap; }
  .gf-sec revo-grid { max-width: 100%; }
  /* дашборд */
  .d3 .d3-bar { flex-direction: column; align-items: stretch; }
  .d3 .d3-bar .gf-reg-acts-l, .d3 .d3-bar .gf-reg-acts-r { justify-content: space-between; }
  .d3-pivot { overflow-x: auto; white-space: nowrap; max-width: 100%; }
  .d3-ovp { grid-template-columns: 1fr !important; }
  .d3-pano { grid-template-columns: 1fr !important; }
  .d3-tiles { grid-template-columns: 1fr 1fr; }
  .d3-tabs { flex-wrap: nowrap; overflow-x: auto; }
  .d3-links { grid-column: auto; }
}
/* большой монитор: таблицы — на всю ширину, но читаемо */
@media (min-width: 1920px) {
  .d3-ovp { grid-template-columns: repeat(4, minmax(0, 1fr)); }
}
/* карточка реестра — сильнее общих стилей кнопок */
#workspaceHost .gf-rcard { display: flex !important; flex-direction: column !important; align-items: stretch !important; text-align: left !important; height: auto !important; padding: 12px 14px !important; border: 0 !important; background: #FFFFFF !important; box-shadow: var(--fl-shadow-2) !important; font-weight: 400 !important; }
#workspaceHost .gf-rcard > span { display: block; text-align: left; }
#workspaceHost .gf-rcard .gf-rcard-h, #workspaceHost .gf-rcard .gf-rcard-n { display: flex !important; justify-content: space-between; gap: 12px; }
#workspaceHost .gf-rcard .gf-rcard-n { justify-content: flex-start; gap: 16px; }

/* ===== 3.0.33: отчёт «Деньги» — Fluent + ECharts ===== */
.rm-kpi { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 12px; margin-bottom: 4px; }
.rm-k { background: #FFFFFF; border-radius: 8px; box-shadow: var(--fl-shadow-2); padding: 12px 14px; display: flex; flex-direction: column; gap: 2px; border-left: 3px solid transparent; }
.rm-k span { font-size: 12px; color: var(--fl-ink-3); } .rm-k b { font-size: 20px; font-weight: 600; color: var(--fl-ink); } .rm-k i { font-style: normal; font-size: 12px; color: var(--fl-ink-4); }
.rm-k.r { border-left-color: var(--t-bad); } .rm-k.r b { color: var(--t-bad); } .rm-k.y { border-left-color: #E9A23B; }
.rm-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 16px; }
.rm-grid .gf-sec { margin-top: 16px !important; }
.rm-ch { width: 100%; height: 260px; }
@media (max-width: 1100px) { .rm-kpi { grid-template-columns: repeat(2, minmax(0, 1fr)); } .rm-grid { grid-template-columns: 1fr; } }
@media (max-width: 700px) { .rm-kpi { grid-template-columns: 1fr; } .rm-ch { height: 220px; } }
/* страница отчётов — в стиле Fluent: панель фильтров и вкладки */
#finMoney > .rounded-xl, #finProfit > .rounded-xl, #finExec > .rounded-xl { border: 0 !important; box-shadow: var(--fl-shadow-2); border-radius: 8px !important; }
#finMoney [data-fin-body] { background: transparent !important; box-shadow: none !important; border: 0 !important; padding: 0 !important; }

/* ===== 3.0.34: отчёт «Исполнение» ===== */
.rm-k.g b { color: var(--t-ok); }
.rm-wide { margin-top: 16px !important; }
.rm-legend { display: flex; gap: 16px; font-size: 12px; color: var(--fl-ink-3); padding: 4px 4px 0; }
.rm-legend i { display: inline-block; width: 10px; height: 10px; border-radius: 50%; margin-right: 6px; vertical-align: -1px; }
#finExec [data-fin-body] { background: transparent !important; box-shadow: none !important; border: 0 !important; padding: 0 !important; }

/* ===== 3.0.35: «Аналитика продаж» ===== */
#anaHost .an-bar { display: flex; flex-wrap: wrap; gap: 10px; align-items: center; background: #FFFFFF; border-radius: 8px; box-shadow: var(--fl-shadow-2); padding: 8px 10px; margin-bottom: 12px; }
#anaHost .an-bar .sl-f { min-width: 200px; }
#anaHost .an-tabs { overflow-x: auto; flex-wrap: nowrap; margin-bottom: 4px; }
#anaHost .an-body .gf-sec { margin-top: 12px !important; }
.d3-tabs button { height: 40px; box-sizing: border-box; display: inline-flex; align-items: center; }   /* 3.0.35: высота по шкале айдентики */
