@font-face{font-family:'Golos Text';font-style:normal;font-weight:400;font-display:swap;
  src:url('/vendor/fonts/golos-text-cyrillic-400-normal.woff2') format('woff2');unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}
@font-face{font-family:'Golos Text';font-style:normal;font-weight:400;font-display:swap;
  src:url('/vendor/fonts/golos-text-latin-400-normal.woff2') format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:'Golos Text';font-style:normal;font-weight:500;font-display:swap;
  src:url('/vendor/fonts/golos-text-cyrillic-500-normal.woff2') format('woff2');unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}
@font-face{font-family:'Golos Text';font-style:normal;font-weight:500;font-display:swap;
  src:url('/vendor/fonts/golos-text-latin-500-normal.woff2') format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:'Golos Text';font-style:normal;font-weight:600;font-display:swap;
  src:url('/vendor/fonts/golos-text-cyrillic-600-normal.woff2') format('woff2');unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}
@font-face{font-family:'Golos Text';font-style:normal;font-weight:600;font-display:swap;
  src:url('/vendor/fonts/golos-text-latin-600-normal.woff2') format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:'Golos Text';font-style:normal;font-weight:600;font-display:swap;
  src:url('/vendor/fonts/golos-text-cyrillic-700-normal.woff2') format('woff2');unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}
@font-face{font-family:'Golos Text';font-style:normal;font-weight:600;font-display:swap;
  src:url('/vendor/fonts/golos-text-latin-700-normal.woff2') format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
/* ==========================================================================
   GrainFlow — единая тема
   ----------------------------------------------------------------------------
   Раньше оформление складывалось из трёх наборов стилей: Tailwind-классы
   в разметке, design-system.css и workspace.css. У каждой страницы были
   свои плашки, кнопки и заголовки: 12 вариантов кнопок, числа в плашках
   от 14 до 24 пикселей, подписи 11px бледно-серым.

   Этот файл подключается последним и задаёт одно правило на всё.
   Смелое место одно — плашки: крупное число табличными цифрами и полоса
   состояния слева. Остальное намеренно тихое.
   ========================================================================== */

:root{
  --t-canvas:#FAFAFA;   /* фон страницы: холодный светлый, не белый — плашки на нём читаются */
  --t-surface:#FFFFFF;
  --t-sunken:#F5F5F5;   /* вложенные блоки внутри карточек */
  --t-ink:#242424;      /* основной текст: тёмно-морской */
  --t-ink-2:#424242;    /* подписи: заметно темнее прежнего #64748B */
  --t-ink-3:#616161;    /* второстепенное */
  --t-line:#E0E0E0;
  --t-line-strong:#D1D1D1;
  --t-accent:#0F6CBD;   /* глубокий синий вместо стандартного #2563EB */
  --t-accent-ink:#FFFFFF;
  --t-accent-soft:#EBF3FC;
  --t-ok:#0E700E;   --t-ok-soft:#F1FAF1;
  --t-warn:#BC4B09; --t-warn-soft:#FDF6F3;
  --t-bad:#C50F1F;  --t-bad-soft:#FDF3F4;
  --t-info:#0F6CBD; --t-info-soft:#EBF3FC;
  --t-font:'Segoe UI Variable','Segoe UI','Golos Text',-apple-system,BlinkMacSystemFont,system-ui,sans-serif;   /* 3.0.20: Fluent */
  --t-r-control:4px; --t-r-tile:6px; --t-r-card:8px;
  --t-h-control:40px;

  /* палитра прежних наборов стилей указывает на ту же тему */
  --gf-canvas:var(--t-canvas); --gf-panel:var(--t-surface); --gf-ink:var(--t-ink);
  --gf-muted:var(--t-ink-2); --gf-line:var(--t-line); --gf-accent:var(--t-accent);
  --gf-subtle:var(--t-sunken);
  --gf-ok:var(--t-ok); --gf-ok-bg:var(--t-ok-soft); --gf-warn:var(--t-warn); --gf-warn-bg:var(--t-warn-soft);
  --gf-bad:var(--t-bad); --gf-bad-bg:var(--t-bad-soft); --gf-accent-bg:var(--t-accent-soft);
  --gf-radius:var(--t-r-card); --gf-shadow:0 1px 2px rgba(0,0,0,.12),0 0 2px rgba(0,0,0,.08);
}
html.dark{
  --t-canvas:#0B1420; --t-surface:#121E2E; --t-sunken:#0F1926;
  --t-ink:#E7EDF4; --t-ink-2:#AEBACA; --t-ink-3:#7F8EA2;
  --t-line:#223249; --t-line-strong:#2E4260;
  --t-accent:#6FA8F5; --t-accent-ink:#0B1420; --t-accent-soft:#16304F;
  --t-ok:#5FD39A;  --t-ok-soft:#10301F;
  --t-warn:#F2B84B; --t-warn-soft:#33260C;
  --t-bad:#FF8A80; --t-bad-soft:#3A1614;
  --t-info:#6FA8F5; --t-info-soft:#16304F;
}

/* ---------- шрифт и цифры ---------- */
html,body{font-family:var(--t-font);color:var(--t-ink);background:var(--t-canvas)}
body{font-size:14px;line-height:1.5;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}
/* Табличные цифры везде, где стоят данные: разряды встают друг под другом */
td,th,input,select,.gf-tile__value,.tabular-nums,[class*="tabular"],.ws-num,.ws-metric strong{font-variant-numeric:tabular-nums}

/* ---------- шкала заголовков ---------- */
main h1,#pageTitle{font-size:20px;font-weight:600;letter-spacing:-.01em;line-height:1.25}
main h2{font-size:16px;font-weight:600;letter-spacing:-.005em;line-height:1.3;color:var(--t-ink)}
main h3{font-size:14px;font-weight:600;line-height:1.35}

/* ---------- поверхность ---------- */
main{background:var(--t-canvas)}
/* Тени убраны: разделяет рамка и фон, а не размытая тень под каждой карточкой */
.shadow-card,.shadow-soft,.shadow-sm,.shadow,.ws-card{box-shadow:none!important}
.ws-card{background:var(--t-surface);border-color:var(--t-line);border-radius:var(--t-r-card)}

/* ==========================================================================
   Плашка — главный элемент
   ========================================================================== */
.gf-tiles{display:grid;gap:12px;grid-template-columns:repeat(auto-fill,minmax(210px,1fr))}
.gf-tile{
  position:relative;display:flex;flex-direction:column;gap:6px;min-width:0;
  background:var(--t-surface);border:1px solid var(--t-line);border-radius:var(--t-r-tile);
  padding:14px 16px 14px 19px;
}
/* Полоса состояния: по ней глаз находит, что в норме, а что горит */
.gf-tile::before{content:'';position:absolute;left:0;top:10px;bottom:10px;width:3px;border-radius:0 3px 3px 0;background:var(--t-line-strong)}
.gf-tile[data-state=ok]::before{background:var(--t-ok)}
.gf-tile[data-state=warn]::before{background:var(--t-warn)}
.gf-tile[data-state=bad]::before{background:var(--t-bad)}
.gf-tile[data-state=info]::before{background:var(--t-accent)}
.gf-tile[data-state=bad]{background:linear-gradient(0deg,var(--t-bad-soft),var(--t-bad-soft)) padding-box}
.gf-tile[data-state=warn]{background:linear-gradient(0deg,var(--t-warn-soft),var(--t-warn-soft)) padding-box}

.gf-tile__label{font-size:13px;font-weight:500;line-height:1.3;color:var(--t-ink-2)}
.gf-tile__value{
  font-size:24px;font-weight:600;line-height:1.1;letter-spacing:-.015em;color:var(--t-ink);
  font-variant-numeric:tabular-nums;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
/* Единица мельче числа: «32 998 т» читается как число, а не как строка */
.gf-tile__unit{font-size:14px;font-weight:500;color:var(--t-ink-2);letter-spacing:0;margin-left:3px}
.gf-tile__unit--pre{margin-left:0;margin-right:1px}
.gf-tile[data-state=ok] .gf-tile__value{color:var(--t-ok)}
.gf-tile[data-state=warn] .gf-tile__value{color:var(--t-warn)}
.gf-tile[data-state=bad] .gf-tile__value{color:var(--t-bad)}
.gf-tile__sub{font-size:13px;line-height:1.35;color:var(--t-ink-3)}
/* Компактная плашка — внутри карточек, где их много */
.gf-tile--compact{padding:11px 13px 11px 16px;gap:4px;background:var(--t-sunken);border-color:transparent}
.gf-tile--compact .gf-tile__value{font-size:20px}
.gf-tile--compact .gf-tile__unit{font-size:13px}
/* Нажимаемая плашка: видно по курсору и рамке */
.gf-tile[data-clickable]{cursor:pointer}
.gf-tile[data-clickable]:hover{border-color:var(--t-accent)}
.gf-tile[data-active]{border-color:var(--t-accent);box-shadow:0 0 0 3px var(--t-accent-soft)}
@media (max-width:640px){.gf-tile__value{font-size:24px}}

/* ==========================================================================
   Элементы управления: одна высота, одно скругление
   ========================================================================== */
#workspaceHost button:not(.ws-link):not(.ws-expand),
.gf-button,
main .gf-btn{
  min-height:var(--t-h-control);border-radius:var(--t-r-control);font-size:14px;font-weight:500;
  padding:0 14px;display:inline-flex;align-items:center;justify-content:center;gap:6px;
  border:1px solid var(--t-line);background:var(--t-surface);color:var(--t-ink);line-height:1.2;
}
/* Нажатое состояние сильнее общего правила кнопки: у того тот же id и два :not,
   и выбранные «Продажи», «Исполнение», «Все» переставали подсвечиваться */
#workspaceHost button:not(.ws-link):not(.ws-expand)[aria-pressed=true],
#workspaceHost button:not(.ws-link):not(.ws-expand).ws-primary,.gf-button--primary{
  background:var(--t-accent);border-color:var(--t-accent);color:var(--t-accent-ink);font-weight:600;
}
#workspaceHost button:not(.ws-link):not(.ws-expand):not([aria-pressed=true]):not(.ws-primary):hover{border-color:var(--t-line-strong)}
#workspaceHost button:focus-visible,.gf-tile[data-clickable]:focus-visible,main button:focus-visible,
main input:focus-visible,main select:focus-visible{outline:2px solid var(--t-accent);outline-offset:2px}

main input:not([type=checkbox]):not([type=radio]),main select,.ws-dialog input,.ws-dialog select,#workspaceHost input,#workspaceHost select{
  height:var(--t-h-control);border-radius:var(--t-r-control);font-size:14px;
  border-color:var(--t-line);background:var(--t-surface);color:var(--t-ink);
}
main textarea{border-radius:var(--t-r-control);border-color:var(--t-line);font-size:14px}

/* ---------- таблицы ---------- */
.ws-table table,main table{font-size:14px}
.ws-table th,main th{font-size:12px;font-weight:600;color:var(--t-ink-2);background:var(--t-sunken);letter-spacing:0;text-transform:none}
.ws-table td{padding:12px 14px;border-color:var(--t-line);color:var(--t-ink)}
.ws-table th{padding:10px 14px}
.ws-table tbody tr:hover td{background:var(--t-accent-soft)}
.ws-muted,.ws-table .ws-muted{color:var(--t-ink-3);font-size:13px}

/* ---------- боковое меню: подписи групп без заглавных с разрядкой ---------- */
aside .uppercase,nav .uppercase{text-transform:none!important;letter-spacing:0!important;font-size:12px!important;font-weight:600!important;opacity:.75}

/* ---------- значки состояния ---------- */
.ws-badge{font-size:12px;font-weight:600;border-radius:999px;padding:2px 9px}

/* ---------- карточки рейсов ----------
   Вес — главное число карточки, а был набран 14px, как обычный текст */
.ship-weight{font-size:20px;font-weight:600;letter-spacing:-.01em;color:var(--t-ink);font-variant-numeric:tabular-nums}
.ship-weight-of{font-size:13px;color:var(--t-ink-2);font-variant-numeric:tabular-nums}
#shipmentsGrid > *{background:var(--t-surface);border-color:var(--t-line);border-radius:var(--t-r-tile);box-shadow:none}
#shipmentsGrid > *:hover{border-color:var(--t-accent)}

/* ---------- кнопки по всему приложению ----------
   Было семь видов: 28, 36, 38, 40, 42 пикселя со скруглением от 0 до 12.
   Кнопка — это элемент с отступами и скруглением; ссылки в таблицах
   (номер продажи, «Сбросить») остаются ссылками */
main button[class*="rounded"][class*="px-"],
section button[class*="rounded"][class*="px-"]{
  min-height:var(--t-h-control);height:var(--t-h-control);border-radius:var(--t-r-control)!important;
  font-size:14px;font-weight:500;padding-top:0;padding-bottom:0;
  display:inline-flex;align-items:center;justify-content:center;gap:6px;line-height:1.2;
}
/* Переключатели из нескольких кнопок (Все / Мои, вкладки справочников):
   одна высота с остальными кнопками, скругляется только группа */
#dashAll,#dashMine{height:var(--t-h-control);display:inline-flex;align-items:center}
#refsView [role=tablist] button,#refsView .ref-tab,#refsView button[data-ref]{height:var(--t-h-control);border-radius:var(--t-r-control)}
/* Главная кнопка экрана — цвет акцента темы, а не стандартный синий */
main .bg-blue-600,section .bg-blue-600{background:var(--t-accent)!important;color:var(--t-accent-ink)!important;border-color:var(--t-accent)!important}
main .bg-blue-600:hover,section .bg-blue-600:hover{filter:brightness(1.07)}
main .text-blue-600,section .text-blue-600{color:var(--t-accent)}

/* ---------- заголовки внутри страниц ---------- */
#dashboardView h2.text-2xl,#dashboardView h2[class*="text-3xl"]{font-size:20px!important}

/* ---------- реестр продаж ----------
   Строка была высотой в пять строк текста: короткие условия оплаты
   занимали 226px, а диапазон дат не помещался в 144px и рвался */
.ws-registry{table-layout:fixed;min-width:1040px}
.ws-registry th{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ws-registry th:nth-child(1){width:15%}   /* продажа / контракты */
.ws-registry th:nth-child(2){width:15%}   /* покупатель */
.ws-registry th:nth-child(3){width:19%}   /* отгрузка: диапазон дат в одну строку */
.ws-registry th:nth-child(4){width:11%}   /* ответственный */
.ws-registry th:nth-child(5){width:12%}   /* условия оплаты */
.ws-registry th:nth-child(6){width:12%}   /* план / факт */
.ws-registry th:nth-child(7){width:16%}   /* деньги */
.ws-registry td{overflow-wrap:break-word}
.ws-nowrap{white-space:nowrap}
.ws-money{display:flex;align-items:baseline;gap:6px;white-space:nowrap}
.ws-money span:first-child{font-weight:600;font-variant-numeric:tabular-nums}
.ws-money + .ws-money{margin-top:2px}

/* Подпись плашки в одну строку: иначе у плашки с длинной подписью число
   оказывается ниже соседних, и ряд теряет общую линию */
.gf-tile__label{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}

/* ==========================================================================
   Боковое меню
   ========================================================================== */
aside .nav-item{
  color:var(--t-ink-2);border:0;background:transparent;font-weight:500;
  min-height:40px;position:relative;transition:background-color .12s,color .12s;
}
aside .nav-item:hover{background:var(--t-sunken);color:var(--t-ink)}
/* Выбранный пункт: был фон #F5F7F9 на белом — почти не виден, а рамка
   добавляла 2px высоты, и меню прыгало при переходе */
aside .nav-item.is-active{background:var(--t-accent-soft);color:var(--t-accent);font-weight:600}
aside .nav-item.is-active::before{content:'';position:absolute;left:0;top:9px;bottom:9px;width:3px;border-radius:0 3px 3px 0;background:var(--t-accent)}
aside .nav-item.is-active svg{color:var(--t-accent)}
aside .nav-head{color:var(--t-ink-3);padding-top:18px;padding-bottom:6px}
aside .nav-group + .nav-group{margin-top:2px}

/* Свёрнутое меню: карточка пользователя была шире самого меню,
   кнопка выхода вылезала за край. В свёрнутом виде — столбиком, без фона */
.sidebar-collapsed .user{flex-direction:column;gap:8px;padding:8px 0;background:transparent!important;border:0!important}
.sidebar-collapsed aside .nav-item.is-active::before{display:none}
.sidebar-collapsed .nav-group{border-top-color:var(--t-line)!important}
/* В старых стилях .sidebar .nav-item задаёт цвет с !important —
   без такого же веса выбранный пункт оставался серым */
.sidebar .nav-item:hover{color:var(--t-ink)!important}
.sidebar .nav-item.is-active,.sidebar .nav-item.is-active:hover{color:var(--t-accent)!important}
/* Разделитель нужен между группами, а не над первой */
.sidebar-collapsed nav .nav-group:first-child{border-top:0!important;margin-top:0!important;padding-top:0!important}
/* На телефоне плашки по две в ряд: по одной они занимали пол-экрана */
@media (max-width:640px){
  .gf-tiles{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}
  .gf-tile{padding:12px 12px 12px 15px}
  .gf-tile__value{font-size:24px}
}

/* ---------- карточки справа от меню ----------
   Карточки контракта, рейса, покупателя и пользователей открывались
   поверх всего окна и закрывали меню */
@media (min-width:1024px){
  #contractPage,#shipmentPage,#buyerPage,#usersPage{left:var(--sidebar-w,248px)!important}
}

/* Дата контракта рядом с номером: номера повторяются — MW0405/2 это два
   контракта, от 04.05 и от 14.05 — и без даты их не различить */
.ws-cdate{color:var(--t-ink-3);font-size:13px;white-space:nowrap}

/* ==========================================================================
   Сквозной процесс: Продажа / Контракт / Рейс — плотный ERP-экран.
   Поля и таблицы вместо плашек, одна строка действий, тонкие разделы.
   ========================================================================== */
.deal-head{display:grid;grid-template-columns:1fr auto;gap:4px 16px;align-items:end;margin-bottom:10px}
.deal-crumbs{grid-column:1/-1;display:flex;flex-wrap:wrap;align-items:center;gap:6px;font-size:13px;color:var(--t-ink-3)}
.deal-crumbs b{color:var(--t-ink);font-weight:600}
.deal-title{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap;min-width:0}
.deal-title h2{font-size:20px;margin:0}
.deal-actions{display:flex;flex-wrap:wrap;gap:6px;justify-content:flex-end}
.deal-panel{display:grid;gap:10px;margin-bottom:14px}
.deal-tabs{display:flex;flex-wrap:wrap;gap:4px;border-bottom:1px solid var(--t-line);padding-bottom:6px}
#workspaceHost .deal-tabs button{min-height:32px;height:32px;padding:0 12px;border-color:transparent;background:transparent;font-size:14px}
#workspaceHost .deal-tabs button[aria-pressed=true]{background:var(--t-accent-soft);color:var(--t-accent);border-color:transparent;font-weight:600}
.deal-sec{background:var(--t-surface);border:1px solid var(--t-line);border-radius:var(--t-r-tile);padding:12px 14px}
.deal-sec.is-editing{border-color:var(--t-accent);box-shadow:0 0 0 3px var(--t-accent-soft)}
.deal-sec-head{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:8px}
.deal-sec-head h3{font-size:16px;font-weight:600;margin:0}
#workspaceHost .deal-sec-head button,#workspaceHost .deal-btns button{min-height:32px;height:32px;padding:0 12px;font-size:14px}
.deal-btns{display:flex;gap:6px;justify-content:flex-end;flex-wrap:wrap}
.deal-dl{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:6px 18px;margin:0}
.dl-row{display:flex;flex-direction:column;min-width:0}
.dl-row dt{font-size:12px;color:var(--t-ink-3)}
.dl-row dd{margin:0;font-size:14px;color:var(--t-ink);overflow-wrap:anywhere}
.deal-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:8px 14px}
.deal-grid label{display:flex;flex-direction:column;gap:4px;font-size:12px;color:var(--t-ink-3);min-width:0}
.deal-grid label.wide{grid-column:1/-1}
.deal-grid label input:not([type=checkbox]),.deal-grid label select,.deal-grid label textarea{width:100%;box-sizing:border-box;color:var(--t-ink)}
.deal-grid label input[type=checkbox]{width:18px;height:18px}
.deal-facts{display:flex;flex-wrap:wrap;gap:4px 18px;font-size:14px;padding:8px 2px;border-bottom:1px solid var(--t-line)}
.deal-facts em{font-style:normal;color:var(--t-ink-3);margin-right:4px}
.deal-table{min-width:0!important}
.deal-table td,.deal-table th{padding:8px 10px!important}
.deal-edit-table input{height:34px!important;min-width:70px;width:100%;box-sizing:border-box}
.deal-center{text-align:center}
.deal-result{margin:8px 0 0;font-size:13px}
.deal-empty{margin:4px 0}
.deal-chip{display:inline-block;font-size:12px;font-weight:600;border-radius:999px;padding:1px 8px;background:var(--t-sunken);color:var(--t-ink-2)}
.deal-chip.is-warn{background:var(--t-warn-soft);color:var(--t-warn)}
.deal-dialog{width:min(640px,94vw)}
.deal-dialog h3{margin:0 0 8px;font-size:16px}
.deal-intro{margin-bottom:10px;font-size:13px}
.deal-changes{margin:6px 0 0;padding-left:18px}
.deal-dialog .deal-btns{margin-top:14px}
@media (max-width:760px){.deal-head{grid-template-columns:1fr}.deal-actions{justify-content:flex-start}}
/* Вкладки разделов — подчёркивание, а не кнопки: иначе они неотличимы от
   вкладок таблиц продажи ниже. Вес правила выше общего правила кнопок */
#workspaceHost .deal-tabs button:not(.ws-link):not(.ws-expand){min-height:34px;height:34px;padding:0 12px;border:0;border-bottom:2px solid transparent;border-radius:0!important;background:transparent;color:var(--t-ink-2);font-weight:500}
#workspaceHost .deal-tabs button:not(.ws-link):not(.ws-expand)[aria-pressed=true]{background:transparent;color:var(--t-accent);border-bottom-color:var(--t-accent);font-weight:600}
#workspaceHost .deal-tabs button:not(.ws-link):not(.ws-expand):hover{color:var(--t-ink);border-bottom-color:var(--t-line-strong)}
.deal-tabs{gap:2px;padding-bottom:0}

/* Окна подтверждения и выбора: их ширина задана классами max-w-[420px] и
   max-w-[480px], которых нет в готовой сборке стилей, — окно растягивалось
   на всю ширину экрана, а варианты выбора — на 1 400 пикселей */
[data-gf-dialog] > .relative{width:100%;max-width:480px;margin:0 auto}
[data-gf-dialog] .gf-choice{display:block}

/* Окна выбора и подтверждения: ширина задавалась классами max-w-[480px] и
   max-w-[420px], которых нет в готовой сборке Tailwind, — окно растягивалось
   на весь экран. Задаём здесь */
[data-gf-dialog] > div.relative{width:100%;max-width:480px;margin:auto}
[data-gf-dialog] [data-role="list"]{max-height:50vh;overflow-y:auto}
[data-gf-dialog] .gf-choice{display:block;width:100%;text-align:left;border:0;background:transparent;color:var(--t-ink);cursor:pointer}
[data-gf-dialog] .gf-choice:hover:not(:disabled),[data-gf-dialog] .gf-choice:focus-visible{background:var(--t-sunken)}
/* display:block у вариантов перебивал атрибут hidden — поиск ничего не скрывал */
[data-gf-dialog] .gf-choice[hidden]{display:none}

/* Даты ДД.ММ.ГГГГ: машинное поле скрыто, видимое — текстовое той же высоты */
.gf-date-backing{display:none!important}
.gf-date-input{font-variant-numeric:tabular-nums}

/* Вкладка «Фрахт»: рейс за рейсом, статьи и доли по весу B/L */
.ws-freight{padding:4px 0 14px;border-bottom:1px solid var(--t-line);margin-bottom:12px}
.ws-freight:last-of-type{border-bottom:0}
.ws-freight-title{font-size:16px;font-weight:600;margin:6px 0 8px}
.ws-freight .ws-table + .ws-table{margin-top:10px}

/* Шапки таблицей: строка подписей и строка значений вместо сетки-плашек */
.deal-head-table{min-width:0!important;table-layout:fixed;width:100%}
.deal-head-table th{font-size:12px;padding:7px 10px!important;text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.deal-head-table td{padding:8px 10px!important;font-size:14px;overflow-wrap:anywhere;vertical-align:top}
.deal-head-table tr.h:not(:first-child) th{border-top:8px solid var(--t-surface)}
.deal-facts{border-bottom:0;padding:0}
.deal-panel > .ws-table{margin-bottom:2px}

/* Тестовый стенд: заметная, но тонкая полоса вверху экрана */
#testStandBar{position:fixed;top:0;left:0;right:0;z-index:300;height:22px;line-height:22px;text-align:center;
  font-size:12px;font-weight:600;color:#7A4B00;background:#FFE7A8;border-bottom:1px solid #F0C75E;pointer-events:none}
html.is-test-stand body{padding-top:22px}
html.dark #testStandBar{color:#FFD98A;background:#3D2E0A;border-bottom-color:#6B5216}
/* Закреплённые у верхнего края элементы сдвигаются под плашку стенда:
   боковое меню и карточки контракта, рейса, покупателя, пользователей */
html.is-test-stand aside{top:22px!important;height:calc(100% - 22px)!important}
html.is-test-stand #buyerPage,html.is-test-stand #usersPage{top:22px!important}

/* Строка этапа сделки над вкладками (макет 2.6.0): этап и следующее действие одной строкой */
.deal-stage{display:flex;flex-wrap:wrap;gap:6px 10px;align-items:baseline;font-size:14px;padding:10px 14px;
  background:var(--t-surface);border:1px solid var(--t-line);border-radius:10px}

/* Вкладка «Условия» контракта: три колонки (Стороны · Поставка · Деньги) */
.deal-cols{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:24px}
@media (max-width:980px){.deal-cols{grid-template-columns:1fr}}
.deal-col h4{margin:0 0 6px;font-size:13px;font-weight:600;color:var(--t-ink-2)}
.deal-kv{width:100%;border-collapse:collapse;font-size:14px}
.deal-kv th{width:46%;text-align:left;font-weight:400;color:var(--t-ink-3);padding:6px 8px 6px 0;border-bottom:1px solid var(--t-line);vertical-align:top}
.deal-kv td{padding:6px 0;border-bottom:1px solid var(--t-line);vertical-align:top;overflow-wrap:anywhere}
.deal-grid-1{grid-template-columns:1fr!important}

/* 2.7: две колонки реквизитов закупки; «сходится» — спокойный зелёный */
.deal-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))!important}
.ws-ok{color:#1F7A4D}
html.dark .ws-ok{color:#5CC18C}

/* 2.7: две колонки реквизитов закупки; «сходится» — спокойный зелёный */
.deal-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))!important}
.ws-ok{color:#1F7A4D}
html.dark .ws-ok{color:#5CC18C}

/* Реестр продаж: судно и рейс — заметно, первой строкой ячейки */
.ws-vessel{font-weight:600;color:var(--t-ink,#0F1B2D)}
/* Спокойная пометка без рамки: «отменён», «сборная поставка» */
.ws-note{font-size:13px;color:var(--t-ink-3,#64748B);font-style:normal}

/* Панель уровней «Продажа → Контракт → Отгрузка» (2.7.6): крупно, текущий уровень выделен */
.deal-levels{gap:8px!important;font-size:14px!important;align-items:stretch!important}
.deal-lvl{display:flex;flex-direction:column;justify-content:center;gap:1px;min-height:44px;padding:4px 12px;
  border:1px solid var(--t-line);border-radius:10px;background:var(--t-surface)}
.deal-lvl.is-current{border-color:var(--t-accent,#1E5AA8);background:color-mix(in srgb,var(--t-accent,#1E5AA8) 7%,var(--t-surface))}
.deal-lvl.is-empty{border-style:dashed}
.deal-lvl-k{font-size:12px;color:var(--t-ink-3);line-height:1.2}
.deal-lvl-v{font-weight:600;color:var(--t-ink);line-height:1.3;text-align:left}
button.deal-lvl-v{padding:0;min-height:0;border:0;background:none;font:inherit;font-weight:600;cursor:pointer}
.deal-lvl-arrow{align-self:center;color:var(--t-ink-3);font-size:16px;padding:0 2px}
.deal-lvl-back{min-height:44px;padding:0 12px;border:1px solid var(--t-line);border-radius:10px;background:var(--t-surface);font:inherit;cursor:pointer}
.deal-lvl-pick{align-self:center;min-height:36px;max-width:220px;padding:0 8px;border:1px solid var(--t-line);border-radius:8px;background:var(--t-surface);font:inherit;font-size:13px;color:var(--t-ink-2)}

/* =====================================================================
 * АЙДЕНТИКА GrainFlow (2.7.16) — правила в IDENTITY.md. Этот слой последний
 * и главный: шкала 12·13·14·16·20·24, начертания 400·500·600, высоты 40/32,
 * скругления 8/12, один акцент. Навигация тише содержимого.
 * ===================================================================== */
:root{--t-fs-caption:12px;--t-fs-note:13px;--t-fs-body:14px;--t-fs-block:16px;--t-fs-section:20px;--t-fs-object:24px;
  --t-h-compact:32px;--t-r-surface:12px}

/* Вкладки — навигация: без заливки, рамок и теней; выбранная — 600 и линия 2 снизу */
#workspaceHost .deal-tabs{gap:4px!important;padding:0!important;border:0!important;border-bottom:1px solid var(--t-line)!important;
  border-radius:0!important;background:transparent!important;margin-top:4px}
#workspaceHost .deal-tabs button:not(.ws-link):not(.ws-expand){min-height:40px!important;height:40px!important;padding:0 12px!important;
  border:0!important;border-bottom:2px solid transparent!important;border-radius:0!important;background:transparent!important;
  box-shadow:none!important;margin-bottom:-1px;font-size:var(--t-fs-body)!important;font-weight:500!important;color:var(--t-ink-2)!important}
#workspaceHost .deal-tabs button:not(.ws-link):not(.ws-expand):hover{color:var(--t-ink)!important;border-bottom-color:var(--t-line-strong)!important}
#workspaceHost .deal-tabs button:not(.ws-link):not(.ws-expand)[aria-pressed=true]{color:var(--t-ink)!important;font-weight:600!important;
  border-bottom-color:var(--t-accent)!important;background:transparent!important}
#workspaceHost .deal-tabs button:not(.ws-link):not(.ws-expand):focus-visible{outline:2px solid var(--t-accent);outline-offset:-2px}

/* Панель уровней — навигация: рамка line, у текущего — акцентная, без заливки; высота 40, списки 32 */
.deal-lvl{min-height:40px!important;padding:2px 12px!important;border-radius:var(--t-r-control)!important}
.deal-lvl.is-current{background:transparent!important;border-color:var(--t-accent)!important}
.deal-lvl-k{font-size:var(--t-fs-caption)!important;font-weight:500;color:var(--t-ink-3)!important}
.deal-lvl-v{font-size:var(--t-fs-body)!important;font-weight:600!important}
.deal-lvl-back{min-height:40px!important;border-radius:var(--t-r-control)!important;font-size:var(--t-fs-body)!important;font-weight:500}
.deal-lvl-pick{min-height:var(--t-h-compact)!important;border-radius:var(--t-r-control)!important;font-size:var(--t-fs-note)!important}

/* Заголовок объекта — 24/600, пояснение рядом — 13 ink-3 */
#workspaceHost .deal-title h2{font-size:var(--t-fs-object)!important;font-weight:600!important;line-height:32px}
#workspaceHost [data-deal-sub]{font-size:var(--t-fs-note)!important;color:var(--t-ink-3)!important}

/* Кнопки: обычная 40, в заголовке блока — компактная 32; главная — акцент 600, обычная — 500 */
#workspaceHost .deal-actions button{min-height:40px;border-radius:var(--t-r-control)!important;font-size:var(--t-fs-body)!important;font-weight:500}
#workspaceHost .deal-actions .ws-primary,#workspaceHost .ws-primary{font-weight:600!important}
#workspaceHost .deal-sec-head button,#workspaceHost .deal-btns button{min-height:var(--t-h-compact)!important;height:var(--t-h-compact)!important;
  border-radius:var(--t-r-control)!important;font-size:var(--t-fs-body)!important}

/* Блоки и таблицы: скругление 12; заголовок блока 16/600; заголовки колонок — подпись 12/500 ink-3 */
#workspaceHost .deal-sec{border-radius:var(--t-r-surface)!important}
#workspaceHost .deal-sec-head h3{font-size:var(--t-fs-block)!important;font-weight:600!important}
#workspaceHost .deal-col h4{font-size:var(--t-fs-note)!important;font-weight:600;color:var(--t-ink-2)!important}
#workspaceHost th{font-size:var(--t-fs-caption)!important;font-weight:500!important;color:var(--t-ink-3)!important}
#workspaceHost .deal-kv th{font-size:var(--t-fs-note)!important;font-weight:400!important}

/* Старые экраны на утилитах Tailwind — к токенам: серые — два смысловых, красный — один */
.text-slate-500,.text-slate-400,.text-gray-500,.text-gray-400{color:var(--t-ink-3)!important}
.text-slate-600,.text-slate-700,.text-gray-600,.text-gray-700{color:var(--t-ink-2)!important}
.text-slate-300,.text-slate-200{color:var(--t-ink-3)!important}
.text-red-500,.text-red-600,.text-red-700{color:var(--t-bad)!important}
.font-bold,.font-extrabold{font-weight:600!important}
.text-\[11px\],.text-\[10px\]{font-size:var(--t-fs-caption)!important}
/* хвосты айдентики: жирное по умолчанию, статусный янтарный, кнопки шапки 40, ссылки-кнопки 8 */
b,strong{font-weight:600}
.text-amber-500,.text-amber-600,.text-amber-700{color:var(--t-warn)!important}
#sidebarBtn,#themeBtn{min-height:40px!important;height:40px!important;min-width:40px}
.deal-lvl-back{height:40px!important;box-sizing:border-box}
#workspaceHost .ws-link,.deal-lvl-v.ws-link{border-radius:var(--t-r-control)!important}
/* блоки — скругление 12: строка этапа продажи и карточки старых экранов (rounded-2xl) */
#workspaceHost .deal-stage{border-radius:var(--t-r-surface)!important}
.rounded-2xl,.rounded-xl{border-radius:var(--t-r-surface)!important}
/* Статус — короткая плашка 12/500 на мягком фоне статуса (IDENTITY.md, «Пометки») */
.gf-status{display:inline-block;padding:1px 8px;border-radius:var(--t-r-control);font-size:var(--t-fs-caption);font-weight:500;line-height:18px;white-space:nowrap}
.gf-status.is-ok{color:var(--t-ok);background:var(--t-ok-soft)}
.gf-status.is-warn{color:var(--t-warn);background:var(--t-warn-soft)}
.gf-status.is-bad{color:var(--t-bad);background:var(--t-bad-soft)}
.ws-ok{color:var(--t-ok)!important}
/* Документы (2.7.19): кнопка «Загрузить» — компактная обычная; вид документа — компактный список; действия — ссылки */
.deal-doc-upload{display:inline-flex;align-items:center;min-height:var(--t-h-compact);padding:0 14px;border:1px solid var(--t-line-strong);
  border-radius:var(--t-r-control);background:var(--t-surface);color:var(--t-ink);font-size:var(--t-fs-body);font-weight:500;cursor:pointer}
.deal-doc-upload:hover{background:var(--t-sunken)}
.deal-doc-upload:focus-within{outline:2px solid var(--t-accent);outline-offset:2px}
.deal-doc-type{min-height:var(--t-h-compact);height:var(--t-h-compact);padding:0 8px;border:1px solid var(--t-line-strong);border-radius:var(--t-r-control);
  background:var(--t-surface);color:var(--t-ink);font-size:var(--t-fs-note)}
.deal-row-acts{white-space:nowrap;text-align:right}
.deal-doc-hint{margin:0 0 8px}
#workspaceHost .deal-doc-type{min-height:var(--t-h-compact)!important;height:var(--t-h-compact)!important}
.deal-row-acts .ws-link + .ws-link{margin-left:12px}
/* Отчёты — отдельные страницы (2.7.20): заголовок у страницы, внутренний повтор не нужен (IDENTITY.md: один заголовок) */
#reportsView [data-report] > div:first-child > h2,#reportsView [data-report] > div:first-child > div > h2{display:none}
/* Легенда графиков — кружки (скругления по айдентике: 8 · 12 · круг) */
#reportsView i.is-paid,#reportsView i.is-open,#reportsView i[class^="is-"]{border-radius:50%!important}
/* Вкладки страниц отчётов (2.9) — как вкладки продажи: навигация, тише содержимого */
.gf-tabs{display:flex;gap:4px;flex-wrap:wrap;border-bottom:1px solid var(--t-line)}
.gf-tabs button{min-height:40px;height:40px;padding:0 12px;border:0;border-bottom:2px solid transparent;background:transparent;margin-bottom:-1px;
  font:inherit;font-size:var(--t-fs-body);font-weight:500;color:var(--t-ink-2);border-radius:0;cursor:pointer}
.gf-tabs button:hover{color:var(--t-ink);border-bottom-color:var(--t-line-strong)}
.gf-tabs button[aria-pressed=true]{color:var(--t-ink);font-weight:600;border-bottom-color:var(--t-accent)}
/* таблицы финансовых отчётов — без переноса по слогам; широкая прокручивается вбок (2.9) */
[data-fin-body] th,[data-fin-body] td{white-space:nowrap}
/* Реестр продаж вписывается в ширину окна (2.9.4): на Mac (≈1210) таблица была шире и прокручивалась —
   начало колонки «Продажа» уезжало за левый край. Колонки — доли ширины, длинный текст переносится в ячейке */
#ws-list-body .ws-table>table,#ws-list-body table{table-layout:fixed;width:100%}
#ws-list-body table th,#ws-list-body table td{overflow-wrap:anywhere;word-break:normal;padding-left:8px!important;padding-right:8px!important}
#ws-list-body table th:nth-child(1){width:13%}#ws-list-body table th:nth-child(2){width:13%}#ws-list-body table th:nth-child(3){width:17%}
#ws-list-body table th:nth-child(4){width:11%}#ws-list-body table th:nth-child(5){width:12%}#ws-list-body table th:nth-child(6){width:13%}#ws-list-body table th:nth-child(7){width:21%}
/* деньги: сумма целиком (неразрывные пробелы), подпись «получено / ожидается» — под ней */
#ws-list-body table td:nth-child(7) b,#ws-list-body table td:nth-child(7) strong{display:block;white-space:nowrap}
#ws-list-body table td .ws-nowrap{white-space:normal}
@media (min-width: 900px){ #ws-list-body table,#ws-list-body table.ws-registry{min-width:0!important} }
/* реестр: сумма и подпись «получено / ожидается» — в столбик, сумма целиком */
#ws-list-body .ws-money{display:flex;flex-direction:column;align-items:flex-start;gap:0}
#ws-list-body .ws-money>span:first-child{white-space:nowrap;font-weight:600}
/* имена менеджеров и прочие слова переносятся по словам, а не посередине */
#ws-list-body table th,#ws-list-body table td{overflow-wrap:break-word}
/* Кнопка выбора файла (2.9.4): была браузерной («Choose File» / «Выберите файл») — теперь как обычная кнопка */
input[type=file]{font:inherit;font-size:var(--t-fs-note);color:var(--t-ink-3)}
input[type=file]::file-selector-button{min-height:var(--t-h-compact);padding:0 12px;margin-right:10px;border:1px solid var(--t-line-strong);
  border-radius:var(--t-r-control);background:var(--t-surface);color:var(--t-ink);font:inherit;font-size:var(--t-fs-body);font-weight:500;cursor:pointer}
input[type=file]::file-selector-button:hover{border-color:var(--t-accent);color:var(--t-accent)}

/* ===== Экран продажи на RevoGrid (2.11.0-revogrid) ===== */
.gf-sheet{max-width:1320px;margin:0 auto;padding:4px 0 48px;color:var(--t-ink);font-variant-numeric:tabular-nums}
.gf-sheet-top{margin-bottom:6px}
.gf-sheet-head{display:flex;justify-content:space-between;align-items:center;gap:16px;flex-wrap:wrap}
.gf-sheet-head h1{margin:0;font-size:24px;font-weight:600}
.gf-sheet-sub{font-size:14px;color:var(--t-ink-3);margin-top:4px}
.gf-sheet-act{display:flex;gap:8px;align-items:center}
.gf-seg{display:inline-flex;border:1px solid var(--t-line-strong);border-radius:8px;overflow:hidden}
.gf-seg span{height:30px;display:inline-flex;align-items:center;padding:0 12px;border-left:1px solid var(--t-line);font-size:13px;color:var(--t-ink-3);background:var(--t-surface)}
.gf-seg span:first-child{border-left:0}
.gf-seg span.on{background:#FFF4D6;color:#8A4B00;font-weight:600}
.gf-btn{height:32px;padding:0 12px;border-radius:8px;border:1px solid var(--t-line-strong);background:var(--t-surface);font:inherit;font-size:13px;font-weight:500;color:var(--t-ink);cursor:pointer}
.gf-sec{margin-top:24px}
.gf-sec h2{margin:0 0 8px;font-size:16px;font-weight:600}
.gf-sec-n{font-size:13px;font-weight:400;color:var(--t-ink-3)}
.gf-sec revo-grid{display:block;width:100%;border:1px solid #D0D5DD;font-family:inherit;font-size:13px}
.gf-sec revo-grid .rgHeaderCell{background:#F2F4F7;color:#344054;font-weight:600;font-size:12px}
.gf-sec revo-grid .rgCell{color:#101828}
.gf-sec revo-grid .rgCell.gf-n,.gf-sec revo-grid .rgHeaderCell.gf-n{text-align:right;justify-content:flex-end}
.gf-sec revo-grid .rgRow.ev-ok,.gf-sec revo-grid .rgRow.ev-ok .rgCell{background:#EAF6EE}
.gf-sec revo-grid .rgRow.ev-bad,.gf-sec revo-grid .rgRow.ev-bad .rgCell{background:#FBEDEC}
.gf-sec revo-grid .rgRow.ev-bad .rgCell{color:#8A2B23}
.gf-sec revo-grid .rgRow.ev-wait,.gf-sec revo-grid .rgRow.ev-wait .rgCell{background:#FFF4D6}
.gf-sec revo-grid .rgRow.gf-tot .rgCell{font-weight:600;background:#F9FAFB}
.gf-sec revo-grid{min-height:0!important}   /* у RevoGrid по умолчанию 300 точек — для коротких таблиц пусто */
.gf-warn{color:#8A4B00}
/* правка как в Excel: без подчёркиваний; редактор — во всю ячейку, тем же шрифтом, тонкая рамка (2.11.4) */
.gf-sec revo-grid .rgCell.gf-ed{cursor:cell}
/* RevoGrid — цвета и сетка из макетов (2.11.2-revogrid) */
.gf-sec revo-grid revogr-attribution{display:none!important}
.gf-sec revo-grid .rv-filter,.gf-sec revo-grid .filter-button-wrapper{display:none!important}
.gf-sec revo-grid .rgHeaderCell{border-right:1px solid #D0D5DD;border-bottom:1px solid #D0D5DD}
.gf-sec revo-grid .rgCell{border-right:1px solid #E4E7EC;border-bottom:1px solid #E4E7EC;background:#FFFFFF}
.gf-sec revo-grid .rgCell.disabled{background:#FFFFFF;color:#101828}
.gf-sec revo-grid .rgCell.gf-k{background:#F9FAFB!important;color:#475467}
.gf-sec revo-grid .rgCell.gf-calc{background:#F5F8FD;color:#1E5AA8}
.gf-sec revo-grid .rgRow.ev-ok .rgCell,.gf-sec revo-grid .rgRow.ev-ok .rgCell.disabled{background:#EAF6EE}
.gf-sec revo-grid .rgRow.ev-bad .rgCell,.gf-sec revo-grid .rgRow.ev-bad .rgCell.disabled{background:#FBEDEC;color:#8A2B23}
.gf-sec revo-grid .rgRow.ev-wait .rgCell,.gf-sec revo-grid .rgRow.ev-wait .rgCell.disabled{background:#FFF4D6}
.gf-sec revo-grid .rgRow.gf-tot .rgCell{font-weight:600;background:#F9FAFB;border-top:1px solid #98A2B3}
/* ширина колонки — как в Excel: граница заголовка, при наведении — тонкая синяя линия; при перетаскивании — направляющая и «Ширина: N» (2.11.6) */
.gf-sec revo-grid .resizable-r{width:9px!important;right:-4px!important;cursor:col-resize}
.gf-sec revo-grid .resizable-r::after{content:"";position:absolute;left:4px;top:0;bottom:0;width:1px;background:transparent}
.gf-sec revo-grid .resizable-r:hover::after{background:#1E5AA8}
.gf-guide{position:fixed;width:1px;background:#1E5AA8;z-index:2000;pointer-events:none}
.gf-guide-tip{position:fixed;z-index:2001;pointer-events:none;background:#101828;color:#FFFFFF;font-size:12px;line-height:1;padding:5px 8px;border-radius:6px;white-space:nowrap}
/* новая строка: серая подсказка; начали заполнять — жёлтая; отказ сервера — красная */
.gf-sec revo-grid .rgRow.gf-new .rgCell{color:#98A2B3;background:#FCFCFD}
.gf-sec revo-grid .rgRow.gf-new-on .rgCell{color:#101828;background:#FFF4D6}
.gf-sec revo-grid .rgRow.gf-new-bad .rgCell{color:#8A2B23;background:#FBEDEC}
/* этап 3: статус нажатием, кнопки разделов, комментарий */
.gf-seg button{height:30px;padding:0 12px;border:0;border-left:1px solid var(--t-line);background:var(--t-surface);font:inherit;font-size:13px;color:var(--t-ink-3);cursor:pointer}
.gf-seg button:first-child{border-left:0}
.gf-seg button.on{background:#FFF4D6;color:#8A4B00;font-weight:600}
.gf-sec-act{display:inline-flex;gap:8px;margin-left:10px;vertical-align:middle}
.gf-btn-p{background:var(--t-accent);border-color:var(--t-accent);color:#FFFFFF}
.gf-cm{display:flex;gap:8px;align-items:flex-end;margin-top:8px}
.gf-cm textarea{flex:1;border:1px solid var(--t-line-strong);border-radius:8px;padding:8px 10px;font:inherit;font-size:14px;resize:vertical}

.gf-sec revo-grid{width:auto;max-width:100%}
.gf-sec revo-grid revogr-edit input,.gf-sec revo-grid revogr-edit textarea{width:100%!important;height:100%!important;box-sizing:border-box;border:0!important;border-radius:0!important;padding:0 8px!important;margin:0;font:inherit!important;font-size:13px!important;color:#101828;background:#FFFFFF;outline:none!important;box-shadow:inset 0 0 0 2px #1E5AA8!important}
.gf-sec revo-grid .rgCell.gf-n ~ revogr-edit input{text-align:right}
.gf-sec revo-grid revogr-focus .focused-cell{border:2px solid #1E5AA8!important;box-shadow:none!important}
.gf-sec revo-grid revogr-overlay-selection .selection-border-range{border:1px solid #1E5AA8!important;box-shadow:none!important}
/* своя подсветка ручки RevoGrid — толстая голубая полоса — не нужна: есть тонкая линия и направляющая (2.11.6) */
.gf-sec revo-grid{--rg-theme-header-resize-hover:transparent}
.gf-sec revo-grid .resizable,.gf-sec revo-grid .resizable:hover,.gf-sec revo-grid .resizable.active{background-color:transparent!important}
/* шлифовка под макет (2.11.6): заголовок раздела — в строку с кнопками; статус — мягкий жёлтый */
.gf-sec h2{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap}
.gf-sec h2 .gf-sec-act{margin-left:auto;align-self:center}
.gf-sheet .gf-seg button,.gf-sheet .gf-seg button:hover{background:#FFFFFF!important;color:#475467!important;border-radius:0!important;box-shadow:none!important}
.gf-sheet .gf-seg button.on{background:#FFF4D6!important;color:#8A4B00!important;font-weight:600}
.gf-sheet .gf-btn{border-radius:8px}
/* 2.11.7: подсветка отдельных ячеек — как в макете (строка чисел не красится целиком) */
.gf-sec revo-grid .rgCell.gf-bad{color:#B42318;font-weight:600}
.gf-sec revo-grid .rgCell.gf-ok{color:#1F6B3A;font-weight:600}
.gf-sec revo-grid .rgCell.gf-warn-c{color:#8A4B00;font-weight:600}

/* ===== Реестр продаж на RevoGrid (2.11.8-revogrid) ===== */
.sl-filters{display:flex;gap:8px;flex-wrap:wrap;align-items:center;margin:4px 0 6px}
.sl-search{flex:1 1 280px;display:flex}
.sl-search input{width:100%;height:34px;box-sizing:border-box;border:1px solid var(--t-line-strong);border-radius:999px;padding:0 16px;font:inherit;font-size:14px;color:var(--t-ink);background:var(--t-surface)}
.sl-chip{display:inline-flex;align-items:center;gap:4px;height:34px;box-sizing:border-box;padding:0 4px 0 12px;border:1px solid var(--t-line-strong);border-radius:999px;background:var(--t-surface);font-size:14px;color:var(--t-ink-2)}
.sl-chip.on{border-color:var(--t-accent);background:#F1F6FC;color:var(--t-accent)}
.sl-chip-l{font-size:13px;color:var(--t-ink-3)}
.sl-chip.on .sl-chip-l{color:var(--t-accent)}
.sl-chip select{border:0!important;background:transparent!important;font:inherit;font-size:14px;font-weight:600;color:inherit;height:30px;padding:0 6px;cursor:pointer;max-width:220px;box-shadow:none!important}
.gf-reg-sum-row{display:grid;grid-template-columns:minmax(250px,1fr) minmax(250px,1fr) minmax(420px,1.5fr);gap:16px;align-items:start}
@media (max-width:1180px){.gf-reg-sum-row{grid-template-columns:1fr 1fr}.gf-reg-sum-row>div:last-child{grid-column:1/-1}}
.gf-sec revo-grid .rgCell.gf-link{color:#1E5AA8;font-weight:600;cursor:pointer;text-decoration:underline;text-underline-offset:2px}

/* ===== 3.0.1: выпадающий список у ячейки, чередование по контрактам ===== */
.gf-pick{position:fixed;z-index:1000;min-width:200px;max-height:320px;overflow:auto;background:#FFFFFF;border:1px solid #C9D0D9;border-radius:8px;padding:4px;box-shadow:0 8px 24px rgba(15,27,45,.14);display:flex;flex-direction:column}
.gf-pick button{text-align:left;padding:7px 10px;border:0;background:none;border-radius:6px;font:inherit;font-size:13px;color:#101828;cursor:pointer}
.gf-pick button:hover,.gf-pick button:focus{background:#E6EEF8;outline:none}
.gf-pick button[aria-selected="true"]{font-weight:600;color:#1E5AA8}
.gf-sec revo-grid .rgCell.gf-sel{background-image:linear-gradient(45deg,transparent 50%,#667085 50%),linear-gradient(135deg,#667085 50%,transparent 50%);background-position:calc(100% - 12px) 50%,calc(100% - 8px) 50%;background-size:4px 4px;background-repeat:no-repeat;padding-right:22px}
.gf-sec revo-grid .rgRow.gf-band .rgCell{filter:brightness(0.955)}
/* 3.0.2: поиск в списке, «новое», колонки реестра, журнал свёрнут */
.gf-pick-q{margin:2px 2px 6px;height:30px;border:1px solid #C9D0D9;border-radius:6px;padding:0 8px;font:inherit;font-size:13px}
.gf-pick-l{display:flex;flex-direction:column;overflow:auto}
.gf-pick .gf-pick-new{color:#1E5AA8;font-weight:600}
.gf-pick-c{display:flex;gap:8px;align-items:center;padding:6px 10px;font-size:13px;color:#101828;cursor:pointer}
.gf-log>summary{cursor:pointer;list-style:none}
.gf-log>summary::-webkit-details-marker{display:none}
.gf-log>summary h2::before{content:"▸ ";color:#667085}
.gf-log[open]>summary h2::before{content:"▾ "}
/* 3.0.3: расстояния — одинаковые между разделами; кнопки реестра под сводкой */
.gf-reg-acts{display:flex;gap:8px;flex-wrap:wrap;margin:20px 0 12px}
.gf-sec{margin-top:32px}
.gf-sec>h2{margin:0 0 10px}
.gf-sec>p.gf-sec-n{margin:6px 0 0}
.gf-sheet-head + div > .gf-sec:first-child{margin-top:20px}
.sl-filters{margin:0 0 12px}
/* 3.0.4: числовое поле с ошибкой — мягкая красная рамка */
input[data-num][aria-invalid="true"]{border-color:#B42318!important;background:#FEF3F2}

/* ===== 3.0.4: фильтры реестра — один стиль, без синих рамок ===== */
.sl-filters{display:flex;gap:8px;flex-wrap:wrap;align-items:center}
.sl-search{flex:1 1 300px}
.sl-search input,.sl-chip,.sl-filters [data-reg-cols]{height:36px;box-sizing:border-box;border:1px solid #D0D5DD!important;border-radius:8px!important;background:#FFFFFF!important;
  font:inherit;font-size:14px;color:#101828;box-shadow:none!important;outline:none!important}
.sl-search input{width:100%;padding:0 12px}
.sl-chip{display:inline-flex;align-items:center;gap:6px;padding:0 4px 0 12px}
.sl-chip.on{background:#F2F4F7!important;color:#101828}
.sl-chip .sl-chip-l,.sl-chip.on .sl-chip-l{font-size:13px;color:#667085}
.sl-chip select{height:32px;border:0!important;background:transparent!important;font:inherit;font-size:14px;font-weight:600;color:#101828;padding:0 6px;box-shadow:none!important;outline:none!important;cursor:pointer}
.sl-filters [data-reg-cols]{padding:0 12px;font-weight:500;cursor:pointer}
.sl-search input:focus,.sl-chip:focus-within,.sl-filters [data-reg-cols]:focus{border-color:#98A2B3!important;box-shadow:none!important;outline:none!important}
.sl-chip select:focus,.sl-search input:focus-visible{outline:none!important;box-shadow:none!important}
#workspaceHost .sl-filters input,#workspaceHost .sl-filters button,#workspaceHost .sl-filters .sl-chip{height:36px!important;min-height:36px!important}
/* 3.0.10: корзина удаления строки — отдельным слоем (цвет строки ev-ok/ev-wait/ev-bad её больше не затирает) */
.gf-sec revo-grid .rgCell.gf-x{cursor:pointer;padding:0!important;position:relative}
.gf-sec revo-grid .rgCell.gf-x::before{content:"";position:absolute;inset:0;background:url("data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%23667085' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 6h18'/%3E%3Cpath d='M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6'/%3E%3Cpath d='M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2'/%3E%3Cline x1='10' x2='10' y1='11' y2='17'/%3E%3Cline x1='14' x2='14' y1='11' y2='17'/%3E%3C/svg%3E") center/16px no-repeat;pointer-events:none}
.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='none' stroke='%23B42318' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 6h18'/%3E%3Cpath d='M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6'/%3E%3Cpath d='M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2'/%3E%3Cline x1='10' x2='10' y1='11' y2='17'/%3E%3Cline x1='14' x2='14' y1='11' y2='17'/%3E%3C/svg%3E")}

/* ===== 3.0.8: кнопки и фильтры реестра — как на экране-образце ===== */
#workspaceHost .gf-reg-acts{display:flex;justify-content:space-between;align-items:center;gap:12px;flex-wrap:wrap;margin:24px 0 12px}
#workspaceHost .gf-reg-acts-l,#workspaceHost .gf-reg-acts-r{display:flex;gap:8px;flex-wrap:wrap}
#workspaceHost .gf-reg-acts button{height:40px;padding:0 18px;border:1px solid #1E5AA8;border-radius:8px;background:#FFFFFF;color:#1E5AA8;font:inherit;font-size:14px;font-weight:500;cursor:pointer;box-shadow:none}
#workspaceHost .gf-reg-acts button:hover{background:#F1F6FC}
#workspaceHost .gf-reg-acts button.ws-primary{background:#1E5AA8;color:#FFFFFF}
#workspaceHost .gf-reg-acts button.ws-primary:hover{background:#174A8C}
#workspaceHost .sl-filters{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px;margin:0 0 12px}
#workspaceHost .sl-filters .sl-search{grid-column:span 2}
#workspaceHost .sl-f{display:flex;align-items:center;gap:8px;height:40px!important;min-height:40px!important;box-sizing:border-box;padding:0 12px;border:1px solid #D0D5DD!important;border-radius:8px!important;background:#FFFFFF!important;box-shadow:none!important}
#workspaceHost .sl-f .sl-f-l{font-size:13px;color:#667085;white-space:nowrap}
#workspaceHost .sl-f select{flex:1;min-width:0;height:36px!important;border:0!important;background:transparent url("data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%23475467' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E") right center/16px no-repeat!important;
  -webkit-appearance:none;appearance:none;padding:0 22px 0 0;font:inherit;font-size:14px;font-weight:500;color:#101828;box-shadow:none!important;outline:none!important;cursor:pointer}
#workspaceHost .sl-f input{flex:1;min-width:0;height:36px!important;border:0!important;background:transparent!important;padding:0;font:inherit;font-size:14px;color:#101828;box-shadow:none!important;outline:none!important}
#workspaceHost .sl-f:focus-within{border-color:#98A2B3!important}
#workspaceHost .sl-cols{height:40px!important;min-height:40px!important;box-sizing:border-box;padding:0 12px;border:1px solid #1E5AA8!important;border-radius:8px!important;background:#FFFFFF;color:#1E5AA8;font:inherit;font-size:14px;font-weight:500;text-align:left;cursor:pointer;box-shadow:none!important;outline:none!important}
#workspaceHost .sl-cols::after{content:"";display:inline-block;width:14px;height:14px;margin-left:6px;vertical-align:-2px;background:url("data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%231E5AA8' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E") center/14px no-repeat}
#workspaceHost .sl-cols:hover{background:#F1F6FC}
@media (max-width:1100px){#workspaceHost .sl-filters{grid-template-columns:repeat(2,minmax(0,1fr))}}
#workspaceHost .gf-reg-sum-row{grid-template-columns:minmax(230px,.85fr) minmax(230px,.85fr) minmax(470px,1.6fr)!important}
#workspaceHost .gf-reg-acts button:not(.ws-primary){border-color:#1E5AA8!important;color:#1E5AA8!important;background:#FFFFFF!important}
#workspaceHost .gf-reg-acts button.ws-primary{border-color:#1E5AA8!important;background:#1E5AA8!important;color:#FFFFFF!important}
#workspaceHost .sl-cols{text-align:left!important;display:flex;align-items:center}
#workspaceHost .sl-cols{justify-content:flex-start!important}
/* 3.0.10: реестр — «Судно · рейс» выделено */
.gf-sec revo-grid .rgCell.gf-vessel{color:#1E5AA8!important;font-weight:600}
.gf-sec revo-grid .rgCell.gf-vessel-none{color:#98A2B3!important;font-style:italic}

/* ===== 3.0.12: реестр — фильтр по заголовку, как в Excel ===== */
.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{cursor:pointer;padding-right:24px!important;background-repeat:no-repeat!important;background-position:right 10px center!important;background-size:14px!important}
.gf-sec revo-grid .rgHeaderCell.gf-hf{background-image:url("data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 24 24' fill='none' stroke='%2398A2B3' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E")!important}
.gf-sec revo-grid .rgHeaderCell.gf-hf:hover{background-color:#E9EDF2!important}
.gf-sec revo-grid .rgHeaderCell.gf-hf-on{background-image:url("data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 24 24' fill='%231E5AA8' stroke='%231E5AA8' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolygon points='22 3 2 3 10 12.46 10 19 14 21 14 12.46 22 3'/%3E%3C/svg%3E")!important;color:#1E5AA8!important}
.gf-sec revo-grid .rgHeaderCell.gf-hs-asc{background-image:url("data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 24 24' fill='none' stroke='%231E5AA8' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m5 12 7-7 7 7'/%3E%3Cpath d='M12 19V5'/%3E%3C/svg%3E")!important;color:#1E5AA8!important}
.gf-sec revo-grid .rgHeaderCell.gf-hs-desc{background-image:url("data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 24 24' fill='none' stroke='%231E5AA8' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M12 5v14'/%3E%3Cpath d='m19 12-7 7-7-7'/%3E%3C/svg%3E")!important;color:#1E5AA8!important}
.gf-xf{width:300px;padding:6px}
.gf-xf-t{font-size:12px;font-weight:600;color:#667085;padding:4px 10px 6px}
.gf-xf .gf-xf-s{display:block;width:100%;text-align:left;padding:7px 10px;border:0;background:none;border-radius:6px;font:inherit;font-size:13px;color:#101828;cursor:pointer}
.gf-xf .gf-xf-s:hover{background:#E6EEF8}
.gf-xf .gf-xf-s.on{color:#1E5AA8;font-weight:600}
.gf-xf .gf-pick-q{margin:6px 2px}
.gf-xf-l{max-height:240px;overflow:auto;border:1px solid #E4E7EC;border-radius:6px;margin:0 2px}
.gf-xf-all{font-weight:600}
.gf-xf-n{margin-left:auto;color:#98A2B3;font-size:12px}
.gf-xf-b{display:flex;justify-content:space-between;gap:8px;padding:8px 2px 2px}
.gf-pick.gf-xf{max-height:min(580px,86vh)!important;overflow:auto;display:block}
.gf-xf>*{flex-shrink:0}
.gf-xf-t{line-height:18px}
.gf-xf .gf-pick-q{display:block;width:calc(100% - 4px);box-sizing:border-box}
.gf-xf .gf-pick-q:focus{outline:none!important;border-color:#98A2B3!important;box-shadow:none!important}
/* 3.0.13: реестр — просроченный период отгрузки */
.gf-sec revo-grid .rgCell.gf-late{color:#B42318!important;font-weight:600;background-color:#FBEDEC!important}
.gf-late-n{color:#B42318}

/* ===== 3.0.17: фильтры реестра — один ряд; «Колонки» — та же рамка, что у полей ===== */
#workspaceHost .sl-filters{grid-template-columns:minmax(260px,2.2fr) repeat(3,minmax(170px,1fr)) minmax(130px,.7fr)!important}
#workspaceHost .sl-filters .sl-search{grid-column:auto!important}
#workspaceHost .sl-cols{border:1px solid #D0D5DD!important;color:#101828!important;background:#FFFFFF!important;font-weight:500}
#workspaceHost .sl-cols::after{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='none' stroke='%23475467' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E")!important;margin-left:auto}
#workspaceHost .sl-cols:hover,#workspaceHost .sl-cols:focus{border-color:#98A2B3!important;background:#FFFFFF!important}
@media (max-width:1180px){#workspaceHost .sl-filters{grid-template-columns:repeat(3,minmax(0,1fr))!important}}

/* ===== 3.0.17: статус продажи — у каждого свой цвет ===== */
.gf-seg{display:inline-flex;border:1px solid #D0D5DD;border-radius:8px;overflow:hidden;background:#FFFFFF}
.gf-seg button,.gf-seg span{height:34px;padding:0 14px;border:0;border-left:1px solid #E4E7EC;background:#FFFFFF;font:inherit;font-size:13px;font-weight:500;color:#667085;display:inline-flex;align-items:center;gap:6px;cursor:pointer}
.gf-seg>:first-child{border-left:0}
.gf-seg button:hover{background:#F9FAFB;color:#101828}
.gf-seg [data-st]::before{content:"";width:7px;height:7px;border-radius:50%;background:#D0D5DD}
.gf-seg [data-st="new"]::before{background:#98A2B3}
.gf-seg [data-st="work"]::before{background:#1E5AA8}
.gf-seg [data-st="done"]::before{background:#2E8B57}
.gf-seg [data-st="cancelled"]::before{background:#B42318}
.gf-seg .on[data-st="new"]{background:#F2F4F7;color:#344054;font-weight:600}
.gf-seg .on[data-st="work"]{background:#E6EEF8;color:#1E5AA8;font-weight:600}
.gf-seg .on[data-st="done"]{background:#EAF6EE;color:#1F6B3A;font-weight:600}
.gf-seg .on[data-st="cancelled"]{background:#FBEDEC;color:#B42318;font-weight:600}
.gf-stage-mode{font-size:12px;color:#667085;margin-left:8px;white-space:nowrap}
.gf-stage-mode.manual{color:#8A4B00}
/* 3.0.17: по шкале айдентики — заголовок 24, поля внутри фильтров 32, переключатель статуса 32 */
.gf-sheet-head h1,#workspaceHost .gf-sheet h1{font-size:24px!important}
#workspaceHost .sl-f select,#workspaceHost .sl-f input{height:32px!important;min-height:32px!important}
.gf-seg button,.gf-seg span{height:32px!important}
#workspaceHost .sl-filters .sl-cols{height:40px!important;min-height:40px!important}
/* 3.0.18: сводка реестра — «Товар» и «Порт / станция» рядом, деньги — во втором ряду на всю ширину */
#workspaceHost .gf-reg-sum-row{grid-template-columns:minmax(0,1fr) minmax(0,1fr)!important}
#workspaceHost .gf-reg-sum-row>div:last-child{grid-column:1/-1}
/* 3.0.19: сводка реестра — три таблицы в ряд шириной по содержимому, компактно; не помещается — перенос */
#workspaceHost .gf-reg-sum-row{display:flex!important;flex-wrap:wrap;gap:16px;align-items:flex-start;grid-template-columns:none!important}
#workspaceHost .gf-reg-sum-row>div,#workspaceHost .gf-reg-sum-row>div:last-child{flex:0 0 auto;max-width:100%;grid-column:auto}
.gf-sec revo-grid.gf-compact .rgCell,.gf-sec revo-grid.gf-compact .rgHeaderCell{padding:0 8px!important;font-size:13px}
.gf-sec revo-grid.gf-compact{max-width:100%}
.gf-sec revo-grid.gf-compact .rgHeaderCell .header-content{padding:0!important}
.gf-sec revo-grid.gf-compact .rgHeaderCell{padding:0!important}
.gf-sec revo-grid.gf-compact .rgHeaderCell .header-content{padding:0 8px!important}
