/* logos-ui-kit.css — классы .lk-* движка (server-rendered, без JS). Канон: UI-KIT-DESIGN §2. */
* { box-sizing: border-box; }
/* T-0685: письменности, которых системный шрифт может не покрывать, названы ЯВНО. Имена
   ПИСЬМЕННО-СПЕЦИФИЧНЫЕ (Armenian/Arabic), а не общее «Noto Sans»: общее перехватило бы и латиницу,
   изменив вид всего интерфейса. Браузер подбирает шрифт ПОСИМВОЛЬНО, поэтому знаки, которые системный
   шрифт уже рисует, продолжает рисовать он — уже работающее не меняется.
   ПРАВА (владелец 2026-07-29: «шрифт — объект безопасности и прав использования»): здесь стоят ТОЛЬКО
   ИМЕНА, ни одного байта шрифта клиенту не уезжает — раздачи нет, значит нет и вопроса о праве на
   распространение. Шрифт применится лишь у того, у кого он уже установлен. Семейства Noto лежат под
   OFL-1.1 (проверено в /usr/share/doc/fonts-noto-core/copyright), на сервере они нужны только чтобы
   наш собственный визуальный контроль не показывал квадрат там, где у пользователя знак. */
body { margin: 0; font-family: system-ui, -apple-system, "Noto Sans Armenian", "Noto Sans Arabic", sans-serif; background: var(--lk-bg); color: var(--lk-text); }
.lk-app { max-width: 1040px; margin: 0 auto; padding: 24px; }
.lk-app:focus { outline: none; }   /* skip-link прыгает на main(tabindex=-1) — рамку на нём не рисуем */

/* Брендированный app-bar (шапка арендатора): цвет = --lk-brand (SC Potsdam → синий, LOGOS → navy). */
.lk-appbar { display: flex; align-items: center; justify-content: space-between; gap: 16px;
  padding: 10px 24px; background: var(--lk-brand); color: #fff;
  border-bottom: 3px solid var(--lk-accent);   /* фирменный keyline: navy шапка + красный акцент = айдентика (как логотип) */
  position: sticky; top: 0; z-index: 30; }   /* владелец п.1: навигационная строка зафиксирована сверху */
.lk-brand { display: inline-flex; align-items: center; gap: 10px; color: #fff; text-decoration: none; font-weight: 700; }
.lk-brand-mark { width: 1.6em; height: 1.6em; }             /* герб-глиф (fallback, наследует белый) */
.lk-brand-logo { height: 34px; width: auto; display: block; }  /* реальный логотип арендатора (SVG) */
.lk-brand-name { font-size: 1.15rem; letter-spacing: 0.02em; }
.lk-brand-o { color: var(--lk-accent); }  /* §Фирменный знак: вторая O в «LOGOS» = акцент-красная буква (брендбук, как logos-erp.de) */
.lk-appbar-nav { display: flex; align-items: center; gap: 6px; }
.lk-appbar-link { display: inline-flex; align-items: center; gap: 0.4em; color: #fff; text-decoration: none;
  padding: 6px 10px; border-radius: var(--lk-radius); font-size: 0.9rem; }
.lk-appbar-link:hover { background: rgba(255, 255, 255, 0.16); }
.lk-appbar-logout { display: inline-flex; margin: 0; }
.lk-appbar-nav button.lk-appbar-link { background: transparent; border: 0; cursor: pointer; font: inherit; }  /* SEC-1: логаут-кнопка = вид ссылки */
.lk-appbar-left { display: inline-flex; align-items: center; gap: 12px; }
.lk-appbar-toggle-form { display: inline-flex; margin: 0; }
/* тумблер левой панели (hamburger) — квадратная кнопка в app-bar (POST-форма, Аудит #73). Сброс дефолт-хрома button. */
.lk-appbar-toggle { display: inline-flex; align-items: center; justify-content: center; width: 38px; height: 38px;
  color: #fff; text-decoration: none; border-radius: 8px; flex: none;
  background: transparent; border: 0; cursor: pointer; font: inherit; padding: 0; }
.lk-appbar-toggle:hover { background: rgba(255, 255, 255, 0.16); }
.lk-appbar-toggle svg { width: 22px; height: 22px; }
/* утилита «Печать» — нейтральная кнопка в ЕДИНОЙ панели тулбара (после разделителя), не семафор */
.lk-util-link { background: var(--lk-surface); color: var(--lk-text); border: 1px solid var(--lk-border); }
.lk-util-link:hover { border-color: var(--lk-brand); color: var(--lk-brand); }
/* R1: секция файлов документа */
.lk-files-table { max-width: 720px; }
.lk-file-name { display: flex; align-items: center; gap: 0.5em; }
.lk-file-name svg { width: 1.05em; height: 1.05em; color: var(--lk-muted); flex: none; }
/* T-0211: thumbnail превью прикреплённой картинки (чек) — квадрат с обрезкой, не ломает строку */
.lk-file-thumb { width: 2.4em; height: 2.4em; object-fit: cover; border-radius: 6px;
                 border: 1px solid var(--lk-border); flex: none; background: var(--lk-bg); }
.lk-file-size { color: var(--lk-muted); white-space: nowrap; text-align: right; }
.lk-file-actions { text-align: right; width: 1%; white-space: nowrap; }
.lk-file-del { display: inline; margin: 0; }
.lk-file-del-btn { padding: 5px 9px; }
.lk-file-upload { display: flex; align-items: center; gap: 10px; margin-top: 14px; flex-wrap: wrap; }
.lk-file-input { font-size: 0.9rem; max-width: 320px; }
/* T-0179: сырую браузерную file-кнопку → в стиль app-кнопки (текст «Choose File»/«Datei auswählen» = browser-locale, не CSS) */
.lk-file-input::file-selector-button { margin-right: 10px; padding: 6px 12px; border: 1px solid var(--lk-border);
  border-radius: 6px; background: var(--lk-surface); color: var(--lk-text); font-weight: 600; cursor: pointer; }
.lk-file-input::file-selector-button:hover { background: var(--lk-bg); }
.lk-toolbar-sep { width: 1px; align-self: stretch; background: var(--lk-border); margin: 2px 4px; }  /* разделитель действия|утилиты в единой панели */

/* App-shell: сайдбар (сгруппированная навигация) + область контента — единый каркас на каждой странице */
.lk-shell { display: flex; align-items: stretch; }
.lk-shell-nav-collapsed .lk-sidebar { display: none; }          /* свёрнута: панель скрыта, контент во всю ширину */
/* владелец п.2 (уточн.): основная часть адаптивна + центрирована ПО ГОРИЗОНТАЛИ, ПРИЖАТА К ВЕРХУ (не по
   вертикали — контент поднимается к верху экрана). margin: 0 auto = центр по H, top-align по V. */
.lk-content { min-height: calc(100vh - var(--lk-appbar-h)); }
.lk-content-inner { width: 100%; max-width: 1160px; margin: 0 auto; }
.lk-sidebar { flex: none; width: 236px; padding: 20px 12px; border-right: 1px solid var(--lk-border);
  background: var(--lk-surface); min-height: calc(100vh - var(--lk-appbar-h)); }
.lk-content { flex: 1; min-width: 0; padding: 24px 32px; }   /* max-width → .lk-content-inner (центрирование) */
.lk-nav-group { margin-bottom: 4px; }
.lk-nav-group-title { display: flex; align-items: center; gap: 0.5em; padding: 6px 10px; cursor: pointer;
  font-size: 0.72rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.06em; color: var(--lk-muted);
  list-style: none; user-select: none; border-radius: var(--lk-radius); }
.lk-nav-group-title:hover { background: var(--lk-bg); }
.lk-nav-group-title::-webkit-details-marker { display: none; }   /* убрать дефолт-маркер details */
.lk-nav-group-title::after { content: "▸"; margin-left: auto; font-size: 0.75rem; }   /* свёрнута */
details[open] > .lk-nav-group-title::after { content: "▾"; }     /* раскрыта */
.lk-nav-group-title .lk-ico { width: 0.95em; height: 0.95em; }
.lk-nav-group-items { padding-bottom: 6px; }
.lk-nav-group-label { flex: 1; }   /* п.3: толкает бейдж-счётчик секции вправо (перед маркером ▸/▾) */
/* 1.5: разделитель видов внутри подсистемы (Документы | Отчёты | НСИ) */
.lk-nav-divider { height: 1px; background: var(--lk-border, #e2e4e8); margin: 5px 10px; }
.lk-nav-link { display: flex; align-items: center; justify-content: space-between; gap: 8px;
  padding: 7px 10px; border-radius: var(--lk-radius); color: var(--lk-text);
  text-decoration: none; font-size: 0.9rem; }
/* п.3: бейдж-счётчик задач (индикатор внимания) — пилюля справа от пункта/на заголовке секции */
.lk-nav-badge { display: inline-block; min-width: 1.5em; padding: 0 6px; border-radius: 999px;
  font-size: 0.72rem; font-weight: 700; text-align: center; line-height: 1.6; }
.lk-nav-badge-red { background: var(--lk-danger); color: #fff; }
.lk-nav-badge-gray { background: var(--lk-muted); color: #fff; }
.lk-nav-link-active .lk-nav-badge { background: #fff; color: var(--lk-brand); }   /* контраст на активном (брендовом) пункте */
.lk-nav-link:hover { background: var(--lk-bg); }
.lk-nav-link-active { background: var(--lk-brand); color: #fff; font-weight: 600; }
/* 1.7: активный (красный) пункт при ховере НЕ должен светлеть — иначе белый текст исчезал. Держим бренд-фон
   (чуть темнее), текст белый. Специфичнее generic :hover → перекрывает его. */
.lk-nav-link-active:hover { background: var(--lk-brand); filter: brightness(0.92); color: #fff; }
@media (max-width: 900px) {
  .lk-sidebar { display: none; }                 /* T-0209: телефон — панель ЗАКРЫТА по умолчанию (второстепенная нав в меню) */
  .lk-content { padding: 16px; }
  /* T-0209: на телефоне гамбургер ОТКРЫВАЕТ боковое меню оверлей-ДРОВЕРОМ. Cookie-семантика ИНВЕРТИРОВАНА
     против десктопа: состояние `collapsed` = дровер ОТКРЫТ (тап из закрытого-дефолта → открывает; тап снова → закрывает).
     app-bar (z-30, sticky) остаётся СВЕРХУ дровера/бэкдропа → гамбургер всегда тапабелен. Бэкдроп = box-shadow. */
  .lk-shell-nav-collapsed .lk-sidebar {
    display: block; position: fixed; top: 0; left: 0; bottom: 0; z-index: 20;
    width: 84%; max-width: 300px; padding-top: 64px; overflow-y: auto;
    background: var(--lk-surface, var(--lk-bg, #fff)); border-right: 1px solid var(--lk-border);
    box-shadow: 0 0 0 100vw rgba(0, 0, 0, 0.45);   /* затемняющий бэкдроп позади дровера */
  }
}

/* Идентификация (login) — bare: центрированная карточка с лого ВНУТРИ, без хедера */
.lk-auth-main { display: flex; align-items: center; justify-content: center; min-height: 100vh; padding: 24px; }
.lk-auth-card { background: var(--lk-surface); border: 1px solid var(--lk-border); border-radius: 14px;
  padding: 32px 30px; width: 100%; max-width: 400px; box-shadow: 0 10px 34px rgba(0, 0, 0, 0.09); }
.lk-auth-brand { display: flex; flex-direction: column; align-items: center; gap: 12px; margin-bottom: 24px; }
.lk-auth-logo { height: 68px; width: auto; }
.lk-auth-name { font-size: 1.3rem; font-weight: 700; color: var(--lk-navy); letter-spacing: 0.01em; }
.lk-auth-card .lk-field { flex-direction: column; align-items: stretch; gap: 5px; }
.lk-auth-card .lk-field-label { min-width: 0; }
.lk-auth-error { color: #fff; background: var(--lk-action-delete); padding: 9px 12px; border-radius: var(--lk-radius);
  margin-bottom: 14px; font-size: 0.9rem; }
.lk-btn-block { width: 100%; justify-content: center; margin-top: 6px; }

/* --- FND-10 · a11y (BFSG): skip-link · sr-only · видимый фокус (см. канон UI-ENGINE-A11Y.md) --- */
.lk-sr-only {   /* только для скринридера: убрано из потока, но НЕ display:none (иначе AT не прочтёт) */
  position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px;
  overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0; }
.lk-skip {   /* 2.4.1: скрыт до :focus, при табе — всплывает в левый-верх, перекрывая шапку */
  position: absolute; left: 8px; top: -48px; z-index: 1000; padding: 8px 14px;
  background: var(--lk-surface); color: var(--lk-text); border: 1px solid var(--lk-border);
  border-radius: var(--lk-radius); text-decoration: none; transition: top 0.12s ease; }
.lk-skip:focus { top: 8px; }
/* 2.4.7 Focus Visible — единая видимая рамка для КЛАВИАТУРЫ (мышь :focus-visible не триггерит) */
a:focus-visible, button:focus-visible, input:focus-visible, select:focus-visible,
textarea:focus-visible, summary:focus-visible, [tabindex]:focus-visible {
  outline: 2px solid var(--lk-focus); outline-offset: 2px; border-radius: 2px; }

.lk-page-header { display: flex; flex-direction: column; gap: 6px; margin-bottom: 16px; }
.lk-page-title { font-size: 1.5rem; margin: 0; color: var(--lk-navy); }
/* 4.1 ①: статус документа (проведение) — точка+метка рядом с заголовком (ортогонален wf-callout ②) */
.lk-page-title-row { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 12px; }
.lk-page-ic { flex: none; display: inline-flex; color: var(--lk-brand); }   /* Iconografika: глиф объекта у заголовка (дуотон-подложка --lk-icon-accent) */
.lk-page-ic svg { width: 1.5rem; height: 1.5rem; }
.lk-docstatus { display: inline-flex; align-items: center; gap: 6px; font-size: 0.85rem; font-weight: 600; color: var(--lk-muted); }
.lk-docstatus-dot { width: 10px; height: 10px; border-radius: 50%; background: var(--lk-dot-neutral); flex: 0 0 auto; }
.lk-docstatus-green .lk-docstatus-dot { background: var(--lk-success); }
.lk-docstatus-gray .lk-docstatus-dot { background: var(--lk-dot-neutral); }
.lk-docstatus-tomato .lk-docstatus-dot { background: var(--lk-danger); }
.lk-docstatus-green { color: var(--lk-success); }
.lk-docstatus-tomato { color: var(--lk-danger); }
.lk-docstatus-amber .lk-docstatus-dot { background: #f59e0b; }   /* T-0177: помечен на удаление = ЖЁЛТЫЙ (деталь) */
.lk-docstatus-amber { color: #b45309; }

/* Навигация окна (N-nav): «назад» (came-from) + хлебные крошки пути (сохранение последовательности окон). */
.lk-header-nav { display: flex; align-items: center; flex-wrap: wrap; gap: var(--lk-gap); }
.lk-crumbs { display: flex; align-items: center; flex-wrap: wrap; gap: 6px; font-size: 0.85rem; }
.lk-crumb { color: var(--lk-muted); text-decoration: none; }
.lk-crumb:hover { color: var(--lk-navy); text-decoration: underline; }
.lk-crumb-sep { color: var(--lk-border); }

.lk-btn { display: inline-flex; align-items: center; justify-content: center; gap: 0.45em; padding: 8px 14px;
  border: 1px solid var(--lk-border); border-radius: var(--lk-radius);
  background: var(--lk-surface); color: var(--lk-text); text-decoration: none; cursor: pointer; font-size: 0.9rem; }
/* V1.5.1 (owner): disabled-кнопка (форма-предусловие не выполнено, напр. ПДн-тип не выбран) — серая, не кликаема.
   Перебивает пресет-цвета (.lk-action-create зелёная и пр.) через :disabled-специфичность + !important фон. */
.lk-btn:disabled, .lk-btn[disabled] { opacity: 0.5; cursor: not-allowed; pointer-events: none;
  background: var(--lk-hover) !important; color: var(--lk-muted) !important; border-color: var(--lk-border) !important; }
.lk-ico { flex: none; display: block; width: 1em; height: 1em; }   /* глиф: currentColor, центрируется в flex-кнопке */
/* LOGOS Iconografika — ДУОТОН-АКЦЕНТ (сигнатура): акцент-подложка `.lk-ico-fill` скрыта по умолчанию
   (штриховая иконка чистая в тулбарах); в `.lk-ico-accent`-контексте (разделы/KPI/пусто/статус) —
   показывается брендовым акцентом → иконка «дуотон». Один глиф, два режима. */
.lk-ico-fill { fill: none; stroke: none; }
.lk-ico-accent .lk-ico-fill { fill: var(--lk-icon-accent); stroke: none; }
/* глиф в НЕ-flex контексте (заголовок раздела / пустое состояние) — инлайн, с отступом от текста */
/* owner 0.6: глиф в заголовке секции (скрепка Dateien) — В ОДНУ ЛИНИЮ с текстом (базовый .lk-ico=display:block
   ломал строку в h2). inline-block + vertical-align. */
.lk-section-title .lk-ico, .lk-empty .lk-ico { display: inline-block; vertical-align: -0.12em; margin-right: 0.45em; }
/* U6 (owner UI-аудит): Empfänger — сетка КАРТОЧЕК реквизитов (метка-caps + значение), адаптив 2→1 колонка. */
.lk-req-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
@media (max-width: 560px) { .lk-req-grid { grid-template-columns: 1fr; } }
.lk-req { border: 1px solid var(--lk-border); border-radius: var(--lk-radius); padding: 10px 12px; background: var(--lk-surface); }
.lk-req-lbl { font-size: 0.72rem; text-transform: uppercase; letter-spacing: .06em; color: var(--lk-muted); font-weight: 700; margin-bottom: 3px; }
.lk-req-val { font-size: 0.95rem; white-space: pre-line; }   /* owner 1.5: многострочные реквизиты (Zahlungskonto: IBAN/BIC/Bank/Inhaber построчно) */
.lk-empty .lk-ico { color: var(--lk-muted); }
/* пустое состояние — дуотон-иконка (акцент-подложка): «пусто» читается инфографикой, не только текстом
   (владелец п.1: иконка+текст в ОДНУ строку сохранены; акцент лишь добавляет брендовость). */
.lk-empty .lk-ico.lk-ico-accent { color: var(--lk-brand); }
.lk-btn-back { background: transparent; }
.lk-action-primary { background: var(--lk-brand); color: #fff; border-color: transparent; }  /* нейтральный primary = БРЕНД (login/Anwenden/Passwort) */
.lk-action-primary:hover { filter: brightness(0.93); }
.lk-action-edit { background: var(--lk-action-edit); color: #fff; border-color: transparent; }
.lk-action-mark { background: var(--lk-action-mark); color: var(--lk-text); border-color: transparent; }  /* FND-10: тёмный текст на оранжевом = AA (5.64:1) */
.lk-action-delete { background: var(--lk-action-delete); color: #fff; border-color: transparent; }
/* 4.5: workflow-danger-команды (Stornieren/unpost, reject) — slate, ОТЛИЧНО от tomato-«Löschen» (необратимого) */
.lk-action-caution { background: var(--lk-action-caution); color: #fff; border-color: transparent; }
.lk-action-caution:hover { filter: brightness(0.93); }
.lk-action-create { background: var(--lk-action-create); color: #fff; border-color: transparent; }
/* owner 3.7: роли кнопок формы. muted = ВТОРИЧНАЯ (Черновик — серая); danger-outline = отмена (красный контур+крест). */
.lk-btn-muted { background: var(--lk-surface); color: var(--lk-muted); border-color: var(--lk-border); }
.lk-btn-muted:hover { background: var(--lk-hover); color: var(--lk-text); }
.lk-btn-danger { background: transparent; color: var(--lk-action-delete); border-color: var(--lk-action-delete); text-decoration: none; }
.lk-btn-danger:hover { background: color-mix(in srgb, var(--lk-action-delete) 10%, transparent); }
/* «ФИШКА»-акцент (owner 2026-07-13): выделять УСКОРИТЕЛИ/мастера (мастер быстрого ввода и т.п.), НЕ рутину —
   золотой фон + ЧЁРНЫЙ текст/обвод + жирный (эффект «драгоценность», ловит глаз). ПЕРЕИСПОЛЬЗУЕМЫЙ: любая
   кнопка-фишка = `lk-btn lk-btn-feature` (обычно + icon("wand")). Иконка наследует currentColor (#1a1a1a). */
.lk-btn-feature { background: var(--lk-feature); color: #1a1a1a; border-color: #1a1a1a; font-weight: 600; }
.lk-btn-feature:hover { background: color-mix(in srgb, var(--lk-feature) 84%, #000); border-color: #000; }

.lk-toolbar { display: flex; flex-wrap: wrap; gap: var(--lk-gap); margin-bottom: 16px; }
.lk-action-form { display: inline-flex; margin: 0; }   /* workflow-команда: форма-обёртка не ломает flex-тулбар */
.lk-section { background: var(--lk-surface); border: 1px solid var(--lk-border); border-radius: var(--lk-radius);
  padding: 16px; margin-bottom: 16px; }
.lk-section-title { font-size: 1rem; margin: 0 0 12px; color: var(--lk-navy); }
/* item 2: заголовок секции + CTA-действие в одну строку (напр. «Routenschritte» + «Route bearbeiten»);
   действие семантически живёт с данными секции, не в общем тулбаре. Заголовок внутри — без нижнего отступа. */
.lk-section-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-bottom: 12px; flex-wrap: wrap; }
.lk-section-head > .lk-section-title { margin: 0; }
/* владелец п.10: на лендинге иконка раздела + название — В ОДНУ СТРОКУ (flex; svg по умолчанию block ⇒
   в обычном h2 переносил текст под иконку). Детальные секции (без иконки) не затронуты. */
.lk-nav-section > .lk-section-title { display: flex; align-items: center; gap: 0.45em; }
.lk-nav-section > .lk-section-title svg { width: 1.05em; height: 1.05em; flex: none; }

.lk-fields { margin: 0; }
.lk-field { display: flex; flex-wrap: wrap; gap: var(--lk-gap); padding: 6px 0; border-bottom: 1px solid var(--lk-border); }
.lk-field:last-child { border-bottom: 0; }
.lk-field-label { min-width: 220px; color: var(--lk-muted); }
.lk-field-label-strong { font-weight: 600; color: var(--lk-text); }   /* V1.8.3 (owner): «Empfängerdaten wählen» жирным */
/* T-0658 (owner): ЗНАК ОБЯЗАТЕЛЬНОСТИ. Отступ слева — чтобы звёздочка не слипалась с последней буквой метки
   и не читалась как часть слова. Цвет — акцент опасности: тот же, которым форма красит незаполненное
   обязательное поле (:invalid), чтобы «обязательно» до отправки и «не заполнено» после были ОДНИМ цветом,
   а не двумя разными сигналами об одном. Знак декоративный (aria-hidden) — семантику несёт сам контрол. */
.lk-required-mark { margin-left: 2px; color: var(--lk-danger); font-weight: 700; }
/* V1.7 (owner): поля-пары в ОДНУ строку (Vorname+Nachname, Abteilung+Position) — метка НАД контролом, 50/50 */
.lk-field-row { display: flex; gap: var(--lk-gap); }
.lk-field-row > .lk-field { flex: 1 1 0; min-width: 0; flex-direction: column; align-items: stretch; border-bottom: 0; }
.lk-field-row > .lk-field > .lk-field-label { min-width: 0; }
@media (max-width: 640px) { .lk-field-row { flex-direction: column; } }
/* Единый Паспорт (presentation, шов D): help_text — пояснение под контролом, во всю ширину строки (flex-basis:100%
   переносит на новую строку), выровнено под контрол (отступ = ширина метки + gap). Мобильный сбрасывает отступ. */
.lk-field-help { flex-basis: 100%; margin: 0 0 0 calc(220px + var(--lk-gap)); color: var(--lk-muted); font-size: 0.82rem; line-height: 1.3; }
/* V1.2.1 / V1.7 (owner): ФОРМЫ (create/edit) — БЕЗ линий-разделителей между полями (чище); детали (label:value)
   линии сохраняют. Универсально для всех форм (.lk-form-обёртка, flat + tabs). Spacing держит .lk-field padding. */
.lk-form .lk-field { border-bottom: 0; }
.lk-field-value { color: var(--lk-text); margin: 0; }   /* <dd> сброс дефолтного margin-inline-start */
/* БЛОК20 (owner 1.3): акцентное поле детали — ключевые поля документа (Zeitraum/Gesamt) читаются первыми.
   Универсально: любой объект помечает поле display.emphasis=True. Метка полужирная, значение крупнее/жирнее. */
.lk-field-emph > .lk-field-label { color: var(--lk-text); font-weight: 600; }
.lk-field-emph > .lk-field-value { font-weight: 700; font-size: 1.15rem; line-height: 1.35; }
/* 1.3.2: json-словарь-значение → таблица Ключ:Значение (2 колонки через grid+display:contents) */
.lk-kv { display: grid; grid-template-columns: max-content 1fr; gap: 2px 14px; }
.lk-kv-row { display: contents; }
.lk-kv-key { color: var(--lk-muted); }
.lk-kv-val { color: var(--lk-text); }
/* 16.1.5.2: РЕДАКТИРУЕМАЯ структура Ключ/Значение (форма ПДн по типу) — метка|input в строку, метка = колонка. */
.lk-kv-form { display: flex; flex-direction: column; gap: 8px; }
.lk-kv-input-row { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; }
.lk-kv-input-label { flex: 0 0 auto; min-width: 9rem; color: var(--lk-muted); font-size: 0.9rem; }
.lk-kv-input-row .lk-input { flex: 1 1 12rem; min-width: 0; width: auto; }
.lk-kv-input-row .lk-field-value { flex: 1 1 12rem; }
/* S2.3 (этап 3): picker выбора реквизита получателя — select на тип (Zahlungskonto/Anschrift/…). */
.lk-picker-form { display: flex; flex-direction: column; gap: 8px; }
.lk-picker-row { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; }
/* T-0179: метка КАТЕГОРИИ PD-пикера (Empfänger) = ПЛОСКАЯ подпись, НЕ бокс-инпут. Скоуп .lk-picker-form
   перебивает коллизию с .lk-picker-label компонента 1С-lookup (line ~455, border/padding) — тот остаётся боксом. */
.lk-picker-form .lk-picker-label { flex: 0 0 auto; min-width: 9rem; color: var(--lk-muted); font-size: 0.9rem;
  border: 0; padding: 0; background: none; border-radius: 0; min-height: 0; font-weight: 600; }
.lk-picker-row .lk-input { flex: 1 1 14rem; min-width: 0; width: auto; }
/* owner 3.3: deep-link «дополнить перс.данные» под picker-группой (→ /me, новая вкладка) */
.lk-picker-edit { display: inline-block; margin-top: 6px; font-size: 0.9rem; }
/* БЛОК21 (owner 0.1): месяц-степпер «‹ Januar 2026 ›» — стрелки + ЖИРНЫЙ месяц по центру. */
.lk-month-stepper { display: inline-flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.lk-month-nav { min-width: 2.6rem; padding: 6px 14px; font-size: 1.25rem; line-height: 1; font-weight: 700; }
.lk-month-label { font-weight: 700; font-size: 1.05rem; min-width: 9rem; text-align: center; }
/* 1.8 (owner): степпер-РЯД — метка слева, контролы справа, по центру вертикали (было «криво» из-за stack). */
.lk-field-period { align-items: center; }
.lk-masked { letter-spacing: 2px; color: var(--lk-muted); }
/* T-9181: ВЫВЕДЕННОЕ значение поля-отступления («пусто = выведи»). Приглушено намеренно: оно
   отвечает на вопрос, но его никто не вводил, и выглядеть как введённое оно не вправе. Подпись
   рядом несёт бейдж набора — цвет здесь только у самого значения. */
.lk-derived { display: inline-flex; align-items: baseline; gap: 8px; flex-wrap: wrap; }
.lk-derived-val { color: var(--lk-muted); font-style: italic; }

/* Бейдж статуса (F1): цвет-по-статусу из SSOT workflow.constants (Radix-палитра, soft-look). */
.lk-badge { display: inline-block; padding: 2px 10px; border-radius: 999px; font-size: 0.8rem; font-weight: 600; }
.lk-badge-gray   { background: #e5e7eb; color: #374151; }
.lk-badge-amber  { background: #fef3c7; color: #92400e; }
.lk-badge-green  { background: #d1fae5; color: #065f46; }
.lk-badge-violet { background: #ede9fe; color: #5b21b6; }
.lk-badge-red    { background: #fee2e2; color: #991b1b; }
.lk-badge-orange { background: #ffedd5; color: #9a3412; }
.lk-badge-teal   { background: #ccfbf1; color: #115e57; }
.lk-badge-blue   { background: #dbeafe; color: #1e40af; }
/* T-2643: purple и slate объявлены дескрипторами (review · rejected), а бейджа у них не было — оба
   статуса красились серым везде, где появлялись, включая очередь ревью. Значения взяты из ТОЙ ЖЕ
   шкалы, что и восемь соседей выше (ступени 100/800: amber #fef3c7/#92400e, violet #ede9fe/#5b21b6),
   а не подобраны на глаз — второй генератор цвета в одном файле разошёлся бы с первым. */
.lk-badge-purple { background: #f3e8ff; color: #6b21a8; }
.lk-badge-slate  { background: #f1f5f9; color: #1e293b; }
/* Д-2: статус① документа в СПИСКЕ — только цветная точка (проведение), метка — sr-only (a11y) */
.lk-status-dot { display: inline-block; width: 11px; height: 11px; border-radius: 50%; vertical-align: middle; }
.lk-status-dot-green { background: var(--lk-success); }
.lk-status-dot-gray  { background: var(--lk-dot-neutral); }
.lk-status-dot-red   { background: var(--lk-danger); }
.lk-status-dot-amber { background: #f59e0b; }   /* T-0177: помечен на удаление = ЖЁЛТЫЙ (owner-модель: draft-серый · posted-зелёный · deletion-жёлтый) */

.lk-table { width: 100%; border-collapse: collapse; background: var(--lk-surface);
  border: 1px solid var(--lk-border); border-radius: var(--lk-radius); overflow: hidden; }
.lk-th { text-align: center; vertical-align: middle; padding: 10px 12px; background: var(--lk-navy); color: #fff; font-weight: 600; font-size: 0.85rem; }  /* п.7.1 шапка — центр h+v */
.lk-td { padding: 10px 12px; border-top: 1px solid var(--lk-border); font-size: 0.9rem; }
/* Инк-2 ③: компактная плотность строк (кноб «Kompakt») — уплотнённые ячейки, чуть меньше кегль */
.lk-table-compact .lk-td, .lk-table-compact .lk-th { padding: 4px 8px; font-size: 0.82rem; }
.lk-num { text-align: right; font-variant-numeric: tabular-nums; }   /* п.7.2 числа тела/подвала — вправо, моноширинные цифры */
.lk-total .lk-td { border-top: 2px solid var(--lk-border); font-weight: 600; background: var(--lk-hover); }   /* п.4 итоговая строка ТЧ (нейтральная подсветка = единый токен) */
/* R2: ситуативный wf-статус-callout документа */
/* 2.5.2: отступ между callout «Информация о согласовании» и секцией «Основное» (все document-детали). */
.lk-callout { display: flex; flex-wrap: wrap; align-items: baseline; gap: 6px 14px; padding: 10px 14px; border-radius: 8px; border-left: 4px solid; margin-bottom: var(--lk-gap); }
.lk-callout-title { font-weight: 600; }
.lk-callout-detail { color: var(--lk-muted); font-size: 0.9rem; }
/* T6: причина отклонения/отмены — своя строка (full-width), выделена (не muted), метка полужирная */
.lk-callout-reason { flex-basis: 100%; font-size: 0.92rem; color: var(--lk-text); margin-top: 2px; }
.lk-callout-reason-label { font-weight: 600; }
/* Д-4: ссылка «К маршруту →» в баннере — справа, акцент-цвет (переход на страницу процесса) */
.lk-callout-route { margin-left: auto; font-weight: 600; color: var(--lk-action-edit); text-decoration: none; white-space: nowrap; }
.lk-callout-route:hover { text-decoration: underline; }
/* owner 1.2b: форма решения подписанта ПРЯМО в callout (Genehmigen/Ablehnen + комментарий) — своя строка под статусом */
.lk-callout-decide { flex-basis: 100%; margin-top: 8px; padding-top: 10px; border-top: 1px solid rgba(0,0,0,0.10); display: flex; flex-direction: column; gap: 8px; }
.lk-callout-decide .lk-field { margin: 0; }
.lk-callout-decide textarea.lk-input { width: 100%; max-width: 560px; }
/* V1.9 (owner): кнопка «Rezension setzen» подписанта — своя строка в callout (была инлайн-форма); открывает CSP-модалку решения */
.lk-callout .lk-modal-wrap { flex-basis: 100%; margin-top: 6px; }
.lk-callout-review-btn { display: inline-flex; align-items: center; gap: 6px; }
.lk-callout-decide .lk-toolbar { gap: 8px; flex-wrap: wrap; }
.lk-callout-blue { background: #eef4ff; border-color: var(--lk-info); }
.lk-callout-red { background: #fdecec; border-color: var(--lk-danger); }
.lk-callout-green { background: #eaf7ee; border-color: var(--lk-success); }
.lk-callout-gray { background: #f2f3f5; border-color: var(--lk-dot-neutral); }
/* БЛОК5 инк A: чек-лист готовности онбординга (карточка platform-user) — amber=есть пробелы; корень пустого UI -3 */
.lk-callout-amber { background: #fff6e6; border-color: #e0a233; }
/* re-review UX: компактный бейдж «N× ранее отклонён» НАД лентой Ablauf. Иконка-внимание выровнена по строке
   (callout=baseline → SVG чуть приподнимаем), тон amber наследуется от .lk-callout-amber. */
.lk-flow-reject-badge { padding: 8px 12px; }
.lk-flow-reject-badge .lk-callout-icon { align-self: center; color: #b9791d; flex: 0 0 auto; }
.lk-flow-reject-badge .lk-callout-title { color: #8a5a12; }
.lk-readiness { display: block; }
.lk-ready-list { list-style: none; margin: 8px 0 0; padding: 0; display: flex; flex-direction: column; gap: 6px; }
.lk-ready-item { display: flex; align-items: baseline; flex-wrap: wrap; gap: 8px; font-size: 0.92rem; }
.lk-ready-mark { font-size: 1.05rem; line-height: 1; }
.lk-ready-gap .lk-ready-mark { color: #d08700; }
.lk-ready-ok .lk-ready-mark { color: var(--lk-success); }
.lk-ready-ok .lk-ready-label { color: var(--lk-muted); }
.lk-ready-detail { color: #b56a00; font-weight: 600; }
.lk-ready-fix { margin-left: 4px; }
/* БЛОК5 инк B: предложение грантнуть недостающие ws на AssignmentScreen (users/profiles) */
.lk-suggest { margin-bottom: var(--lk-gap); }
.lk-suggest-list { display: flex; flex-direction: column; gap: 6px; margin-top: 8px; }
.lk-suggest-item { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin: 0; }
.lk-suggest-name { font-weight: 600; min-width: 8rem; }
.lk-tr:hover { background: var(--lk-hover); cursor: pointer; }   /* 1.4: строка кликабельна → деталь */
.lk-link { color: var(--lk-action-edit); text-decoration: none; font-weight: 600; }
.lk-link:hover { text-decoration: underline; }
/* 1.4: ссылка-строка заполняет ячейку целиком (padding+отриц.margin = поверх padding td) → клик в любом
   месте строки ведёт в деталь. Обычный цвет текста (не «ссылка»); первая ячейка (идентификатор) — акцент. */
.lk-row-link { display: block; padding: 10px 12px; margin: -10px -12px; color: inherit; text-decoration: none; }
/* 2.6: первая ячейка (идентификатор) — только АКЦЕНТ-ВЕС, без ссылка-цвета: клик по ВСЕЙ строке открывает
   запись, отдельная «ссылка с имени» неактуальна и путала (проект-wide для всех списков). */
.lk-row-link-lead { color: inherit; font-weight: 700; }
/* владелец п.1: пустое состояние — иконка + текст В ОДНУ СТРОКУ, ЦЕНТРИРОВАНО (svg по умолчанию block ⇒
   раньше переносил текст под иконку). flex-row + justify-center. */
.lk-empty { color: var(--lk-muted); padding: 32px 16px; display: flex; align-items: center;
  justify-content: center; gap: 0.5em; }
.lk-empty svg { width: 1.2em; height: 1.2em; flex: none; }

/* Отчёт (СКД-композер): числа — right-align моно, итог/подытог — жирный фон. */
.lk-grid-num { text-align: right; font-variant-numeric: tabular-nums; }
.lk-num-neg { color: var(--lk-action-delete); }   /* отрицательное число — красный знак (accounting) */
.lk-grid-total { font-weight: 700; background: var(--lk-hover); }
.lk-grid-total .lk-td { border-top: 2px solid var(--lk-border); }

.lk-form { background: var(--lk-surface); border: 1px solid var(--lk-border); border-radius: var(--lk-radius);
  padding: 16px; max-width: 540px; display: flex; flex-direction: column; gap: var(--lk-gap); }
/* 0.1 (owner): форма ВНУТРИ модалки (фильтр/период) — БЕЗ карточной обёртки: панель модалки уже карточка,
   иначе «карточка в карточке» (двойная рамка/фон, кривая мобильная компоновка). Убираем border/bg/padding/ширину. */
.lk-modal-panel .lk-form { background: none; border: 0; border-radius: 0; padding: 0; max-width: none; }

/* КАРТОЧКА ЗАПИСИ (создание/правка объекта) — ВО ВСЮ ШИРИНУ КОЛОНКИ, как карточка показа того же объекта
   (владелец 2026-08-06). На 1440px форма занимала треть экрана при полноширинной детали рядом, и разрыв
   был виден именно на паре «посмотрел → правлю». Ширину колонки держит .lk-content-inner — своего потолка
   карточке записи не нужно.
   ОТДЕЛЬНЫЙ КЛАСС, А НЕ ОБЩЕЕ ПРАВИЛО .lk-form: `.lk-form` носят и мелкие карточки-формы (смена пароля,
   вход, отбор в модалке), которым ширина колонки не нужна и вредна — они стекают метку НАД контролом.
   Замерено при снятии общего потолка: форма пароля на /me получила метку шириной 220px в КОЛОНОЧНОМ
   контейнере, где flex-basis задаёт высоту, — метка стала 220px ростом, а поля ввода выросли в квадраты.
   Здесь стоял модификатор ширины `lk-form-wide` (1000px «для форм с ТЧ») — он называл ту же вещь более
   узким числом и снят вместе с потолком.
   ШИРИНА У КАРТОЧКИ, МЕРА ЧТЕНИЯ У КОНТРОЛА: метка слева, контрол справа — та же грамматика, что у детали
   (однотипность edit↔detail, owner 07-14). Без ограничения контрола строка ввода растянулась бы на тысячу
   пикселей и читалась бы хуже, чем в прежней узкой форме. Контрол переносится под метку сам, когда места
   нет (flex-basis), поэтому отдельного мобильного правила не нужно.
   Второй селектор — поля во ВКЛАДКЕ формы (документ с ТЧ): та же карточка записи, тот же ряд. Пара
   side-by-side (.lk-field-row) сюда не попадает по построению — её поля не прямые дети контейнера. */
.lk-form-record { max-width: none; }
.lk-form-record > .lk-field,
.lk-form-record .lk-tab-panel > .lk-field { align-items: center; }
.lk-form-record > .lk-field > .lk-field-label,
.lk-form-record .lk-tab-panel > .lk-field > .lk-field-label { flex: 0 0 220px; }
.lk-form-record > .lk-field > *:not(.lk-field-label):not(.lk-field-help),
.lk-form-record .lk-tab-panel > .lk-field > *:not(.lk-field-label):not(.lk-field-help) {
  flex: 1 1 20rem; min-width: 0; max-width: 40rem; }
/* 2.4: «Сохранить» канон-размер — auto-width в actions-контейнере (не растянут на всю форму). */
.lk-form-actions { display: flex; flex-wrap: wrap; gap: 8px; justify-content: flex-end; }   /* 3b: Speichern/Abbrechen к правому краю */
/* 1.1: тулбар ТЧ — «+ строка» СЛЕВА над таблицей (стандартная позиция панели инструментов). */
.lk-tabedit .lk-section-title { margin: 0 0 8px; }
.lk-tabedit-toolbar { display: flex; justify-content: flex-start; gap: 8px; margin-bottom: 8px; }
.lk-tabedit-add { background: var(--lk-action-create); color: #fff; border-color: var(--lk-action-create); }   /* 5: «+ Zeile» = create-семафор (зелёная, с глифом) */
.lk-tabedit-add:hover { filter: brightness(0.94); }
/* T-10: панель действий ТЧ-хедера (дублировать + добавить) справа; dup — вторичная (не оттягивает от «+ Zeile») */
.lk-tabedit-actions { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.lk-tabedit-dup { background: var(--lk-surface); color: var(--lk-text); border-color: var(--lk-border); }
.lk-tabedit-dup:hover { background: var(--lk-hover); border-color: var(--lk-brand); }
/* T-9: ячейка статуса② + доп-строка «текущий шаг · кто ждёт» под бейджем (важностно-ориентир). */
.lk-cell-stack { display: inline-flex; flex-direction: column; gap: 3px; align-items: flex-start; }
.lk-cell-sub { font-size: 0.75rem; color: var(--lk-muted); font-weight: 500; line-height: 1.2; }
/* 1.4 (owner): строчные ✎/✕ — В РЯД С ОТСТУПОМ (не слипшиеся). Общий контейнер строк-действий. */
.lk-rowactions { display: inline-flex; align-items: center; gap: 8px; justify-content: flex-end; }
/* owner 1.5: клик по ЛЮБОЙ ячейке строки ТЧ-модалки открывает правку (label[for=etid], CSP-safe, ✎ убрана).
   Обёртка тянется на весь td → кликабелен весь столбец, не только текст. Ряд уже несёт .lk-tr:hover (курсор-палец +
   подсветка) — теперь аффорданс корректен (строка ДЕЙСТВИТЕЛЬНО кликабельна). Цвет наследуется (число справа не ломается). */
.lk-cell-open { display: block; width: 100%; cursor: pointer; color: inherit; text-align: inherit; }
.lk-tabedit-table .lk-td-rowdel .lk-btn { min-width: 2.4rem; }   /* иконочные строчные кнопки — не микроскопические */
/* owner: строчная ✕-кнопка удаления ТЧ = outline (белый фон + красная обводка), НЕ сплошной красный — слишком сильный акцент.
   Зеркалит .lk-btn-danger; скоуп .lk-td-rowdel → только строчное удаление (док-delete и пр. .lk-action-delete не трогаем). */
.lk-td-rowdel .lk-btn.lk-action-delete { background: transparent; color: var(--lk-action-delete); border-color: var(--lk-action-delete); }
.lk-td-rowdel .lk-btn.lk-action-delete:hover,
.lk-td-rowdel .lk-btn.lk-action-delete:focus-visible { background: color-mix(in srgb, var(--lk-action-delete) 10%, transparent); }
/* owner 1.6: модалка «Mehrere Tage» — CSP-сетка дней месяца (checkbox-hack, без JS). Отметить дни → строка на день. */
/* owner 3.5: кнопка «много дат» (Mehrere Tage/Zeilen) — ЗЕЛЁНАЯ ОБВОДКА (вторичный create-акцент, отличима от filled Hinzufügen). */
.lk-tabedit-cal { background: transparent; color: var(--lk-action-create); border-color: var(--lk-action-create); }
.lk-tabedit-cal:hover { background: color-mix(in srgb, var(--lk-action-create) 10%, transparent); border-color: var(--lk-action-create); }
/* owner 1.1: КОМПАКТНЫЙ календарь — модалка должна помещаться на экран (день ≈ 1.6rem, не квадрат-аспект). */
.lk-cal-monthlabel { font-weight: 700; font-size: 0.92rem; text-align: center; margin: 0 0 3px; color: var(--lk-navy); }
.lk-cal-hint { font-size: 0.72rem; color: var(--lk-muted); margin: 0 0 6px; text-align: center; }
.lk-cal-grid { width: 100%; border-collapse: collapse; margin-bottom: 8px; table-layout: fixed; }
.lk-cal-wd { font-size: 0.62rem; font-weight: 700; color: var(--lk-muted); text-transform: uppercase; padding: 2px 0; text-align: center; }
.lk-cal-cell { padding: 2px; text-align: center; }
.lk-cal-cb { position: absolute; width: 1px; height: 1px; opacity: 0; pointer-events: none; }   /* sr-hidden, в tab-order (клавиатура) */
.lk-cal-day { display: flex; align-items: center; justify-content: center; min-height: 1.6rem; padding: 3px 0;
  border: 1px solid var(--lk-border); border-radius: 5px; cursor: pointer; font-variant-numeric: tabular-nums;
  font-size: 0.82rem; font-weight: 600; color: var(--lk-navy); background: var(--lk-surface); }
.lk-cal-day:hover { border-color: var(--lk-brand); background: var(--lk-hover); }
.lk-cal-weekend .lk-cal-day { background: var(--lk-hover); color: var(--lk-muted); }   /* owner 1.2: Sa/So выходные — серый фон */
.lk-cal-cb:checked + .lk-cal-day { background: var(--lk-brand); border-color: var(--lk-brand); color: #fff; }   /* отмеченный день — бренд-заливка */
.lk-cal-weekend .lk-cal-cb:checked + .lk-cal-day { background: var(--lk-brand); color: #fff; }   /* отмеченный выходной — всё равно бренд (перебивает серый) */
.lk-cal-cb:focus-visible + .lk-cal-day { outline: 2px solid var(--lk-accent); outline-offset: 2px; }
.lk-cal-shared { margin-top: 6px; }
/* 4: значения статус-колонок (Status ①, Genehmigung ②) центрируются, как и заголовки */
.lk-td:has(.lk-badge), .lk-td:has(.lk-docstatus), .lk-td:has(.lk-status-dot) { text-align: center; }
.lk-tabedit .lk-td .lk-input { min-width: 5.5rem; }   /* ячейки ТЧ — не микроскопические (комфортный ввод) */
/* 1.3: подвал ТЧ — строка-итог (Сумма), выделена. */
.lk-tr-total td { font-weight: 700; background: var(--lk-hover); border-top: 2px solid var(--lk-border); }
.lk-tabedit-total-label { color: var(--lk-muted); font-weight: 600; }
.lk-tabedit-total-amt { font-weight: 800; color: var(--lk-navy); }   /* owner 1.4/1.6: итог-Сумма выделена (охват одним взглядом) */
/* БЛОК20 (owner 1.1ч2б, реш. A): ТЧ МОДАЛ-режим (1С-стиль) — строки=компактные read-only карточки + модалка ввода. */
.lk-linecards { display: flex; flex-direction: column; gap: 8px; margin-bottom: 10px; }
.lk-linecard { position: relative; border: 1px solid var(--lk-border); border-radius: var(--lk-radius); padding: 10px 42px 10px 12px; background: var(--lk-surface); }
.lk-linecard-body { display: flex; flex-wrap: wrap; gap: 3px 16px; align-items: baseline; }
.lk-linecard-cell { display: inline-flex; gap: 5px; align-items: baseline; font-size: 0.9rem; }
.lk-linecard-lbl { color: var(--lk-muted); font-size: 0.76rem; }
.lk-linecard-val { font-weight: 500; }
.lk-linecard-amt .lk-linecard-val { font-weight: 700; }
/* owner 0.10: карточка-строка КЛИКАБЕЛЬНА (правка через ту же модалку, что и добавление) — аффорданс:
   курсор-указатель на теле + подсветка всей карточки при hover/focus (нейтральный токен). */
.lk-linecard-edit { cursor: pointer; }
.lk-linecard:has(> .lk-linecard-edit:hover), .lk-linecard:has(> .lk-linecard-edit:focus-visible) {
  border-color: var(--lk-brand); background: var(--lk-hover); }
/* owner 0.3: удаление строки-карточки — СУБТИЛЬНЫЙ ✕ (маленький, приглушённый; не крупный красный бокс),
   красный лишь на hover/focus. Не отвлекает при многих строках. */
.lk-linecard-del { position: absolute; top: 5px; right: 5px; padding: 2px 7px; font-size: 0.95rem; line-height: 1.1;
  background: transparent; color: var(--lk-muted); border-color: transparent; }
.lk-linecard-del:hover, .lk-linecard-del:focus-visible { background: transparent; color: var(--lk-action-delete); }
.lk-linecards-empty { color: var(--lk-muted); font-style: italic; }
.lk-linecards-total { display: flex; justify-content: space-between; font-weight: 700; padding: 8px 12px; border-top: 2px solid var(--lk-border); background: var(--lk-hover); border-radius: var(--lk-radius); margin-bottom: 10px; }
.lk-linemodal-fields { display: flex; flex-direction: column; gap: 12px; }
.lk-linemodal-field { display: flex; flex-direction: column; gap: 4px; }
.lk-linemodal-lbl { font-size: 0.82rem; color: var(--lk-muted); font-weight: 600; }
.lk-linemodal-field .lk-input { width: 100%; min-height: 2.6rem; font-size: 1rem; box-sizing: border-box; }
/* V1.4 (owner): красивая модалка строки — числа ввод+показ СПРАВА; Stunden+TE РЯДОМ (2 колонки); Betrag ЖИРНЫЙ. */
.lk-linemodal-field .lk-input[type="number"] { text-align: right; font-variant-numeric: tabular-nums; }
.lk-linemodal-two { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }
/* owner 1.5: ГОРИЗОНТАЛЬНАЯ группа полей строки с ВЕСАМИ (напр. Aktivität:Satz = 4:1, Stunden:TE = 1:1) —
   компактно. Веса — классы lk-w1..lk-w4 (без inline-style: strict-CSP). Универсально: descriptor объявляет группы. */
.lk-linemodal-row { display: flex; gap: 12px; align-items: flex-end; }
.lk-linemodal-row .lk-linemodal-field { flex: 1 1 0; min-width: 0; }
.lk-w1 { flex: 1 1 0; } .lk-w2 { flex: 2 1 0; } .lk-w3 { flex: 3 1 0; } .lk-w4 { flex: 4 1 0; }
.lk-linemodal-amt .lk-input { font-weight: 800; font-size: 1.15rem; color: var(--lk-navy); }
.lk-linemodal-amt .lk-linemodal-lbl { color: var(--lk-text); font-weight: 700; }
/* owner 1.4: тулбар ТЧ ВЛЕВО (кнопки add→multi→dup слева-сверху, стандарт для любых ТЧ). */
.lk-tabedit-header { display: flex; align-items: center; justify-content: flex-start; gap: 10px; margin-bottom: 10px; }
.lk-tabedit-header .lk-section-title { margin: 0; }
/* 1.2: «Отмена» — нейтральная (secondary) кнопка рядом с «Сохранить». */
.lk-btn-cancel { background: var(--lk-surface); color: var(--lk-text); border-color: var(--lk-border); text-decoration: none; }
.lk-btn-cancel:hover { background: var(--lk-hover); }
.lk-input { width: 100%; padding: 8px 10px; border: 1px solid var(--lk-border); border-radius: 6px; font-size: 0.9rem; }
/* owner 1.1: ОБЯЗАТЕЛЬНОЕ незаполненное поле «светится красным» (glow «заполни меня», не error-крик). :invalid у
   required срабатывает сразу на пустом (select без выбора «—» / пустой number/date) → тренер видит пробел ДО сабмита.
   Универсально: любой .lk-input[required] в движке (Aktivität/Satz/Stunden/TE ТЧ-модалки + любые будущие). Граница
   краснеет всегда; мягкое свечение — прогрессивно (color-mix; нет поддержки → просто красная рамка). */
.lk-input:required:invalid { border-color: var(--lk-danger); box-shadow: 0 0 0 3px color-mix(in srgb, var(--lk-danger) 16%, transparent); }
.lk-input:required:invalid:focus { outline: none; box-shadow: 0 0 0 3px color-mix(in srgb, var(--lk-danger) 30%, transparent); }
/* T-0185: ВЫЧИСЛЯЕМОЕ readonly-поле ТЧ (Betrag=Satz×Stunden [product_of], TE=Stunden [mirror_of]) — визуально ОТЛИЧНО
   от вводимых: приглушённый фон + пунктир-граница + курсор default → «считается автоматически», не редактируется руками
   (island синхронит на лету; сервер авторитетно на save). Универсально для любого product_of/mirror_of поля движка. */
.lk-input.lk-calc-out { background: var(--lk-surface); border-style: dashed; cursor: default; font-weight: 600; }
.lk-input.lk-calc-out:focus { outline: none; box-shadow: none; border-color: var(--lk-border); }
/* owner 2.2.2: степпер number-поля ТЧ (Stunden) — [−][input][+] в ряд для ТАЧ-ввода (нативные спиннеры на мобильном
   скрыты/мелки). Кнопки квадратные (тап-цель ≈40px), инпут по центру растягивается. Универс. для любого stepper-поля. */
.lk-stepper { display: flex; align-items: stretch; gap: 4px; }
.lk-stepper .lk-input { flex: 1 1 auto; min-width: 0; text-align: center; }
.lk-stepper-btn { flex: 0 0 auto; width: 2.5rem; min-width: 2.5rem; padding: 0; display: inline-flex;
  align-items: center; justify-content: center; background: var(--lk-surface); }
.lk-stepper-btn:active { background: var(--lk-border); }
/* 16.1.2/1.3: поле пароля — инпут + глазик (показать/скрыть) + опц. генератор надёжного пароля. Прогрессивно:
   без JS кнопки инертны, инпут type=password работает. */
.lk-pw-wrap { display: flex; flex-wrap: wrap; align-items: stretch; gap: 8px; }
.lk-pw-input { flex: 1 1 12rem; min-width: 0; width: auto; }
.lk-pw-eye { flex: 0 0 auto; display: inline-flex; align-items: center; justify-content: center; width: 40px;
  background: var(--lk-surface); border: 1px solid var(--lk-border); border-radius: 6px; color: var(--lk-muted); cursor: pointer; }
.lk-pw-eye:hover { color: var(--lk-action-edit); border-color: var(--lk-action-edit); }
.lk-pw-eye[aria-pressed="true"] { color: var(--lk-action-edit); border-color: var(--lk-action-edit); }
.lk-pw-eye:focus-visible { outline: 2px solid var(--lk-action-edit); outline-offset: 1px; }
.lk-pw-gen { flex: 0 0 auto; white-space: nowrap; }
/* V1.3 (owner): генератор пароля — ССЫЛКА ПОД полем подтверждения (не инлайн-кнопка), заполняет оба поля. */
.lk-pw-gen-row { margin-top: 6px; }
.lk-pw-gen-link { display: inline-flex; align-items: center; gap: 0.35em; padding: 0; border: 0; background: none;
  color: var(--lk-brand); cursor: pointer; font-size: 0.85rem; text-decoration: underline; }
.lk-pw-gen-link:hover { color: var(--lk-action-edit); }
.lk-pw-gen-link svg { width: 1em; height: 1em; }
/* 1.5: поле ДАТЫ в форме-строке (не в ТЧ) — компактное, не растянуто на всю ширину. */
.lk-form > .lk-field .lk-input[type="date"] { max-width: 14rem; }

/* «Форма выбора» (1С-подбор): текущая метка + компактная «…»-кнопка открытия lookup. */
.lk-picker { display: inline-flex; align-items: center; gap: 8px; width: 100%; }
.lk-picker-label { flex: 1; padding: 8px 10px; border: 1px solid var(--lk-border); border-radius: 6px;
  background: var(--lk-surface); color: var(--lk-text); font-size: 0.9rem; min-height: 20px; }
.lk-picker-btn { padding: 8px 12px; font-weight: 700; }

/* T-0399 — выбор связи ОКНОМ (объявление поля picker=modal|auto). Варианты лежат радио-инпутами прямо в
   поле: выбор попадает в форму нативно, без JS и без ухода со страницы. Видна метка ВЫБРАННОГО — одним
   правилом на любое число вариантов, поэтому список опций не удваивается разметкой ради подписи. */
.lk-fkpick .lk-fkopt { position: absolute; width: 1px; height: 1px; opacity: 0; pointer-events: none; }
.lk-fkpick .lk-fkopt-name { display: none; }
.lk-fkpick .lk-fkopt:checked + .lk-fkopt-name { display: block; flex: 1; }
.lk-fkpick-list { display: flex; flex-direction: column; gap: 2px; padding: 8px 4px; max-height: 60vh; overflow-y: auto; }
.lk-fkpick-item { padding: 10px 12px; border-radius: 6px; cursor: pointer; color: var(--lk-text); }
.lk-fkpick-item:hover { background: var(--lk-hover, rgba(0,0,0,0.05)); }

/* Поиск + сортировка динсписка (P1b): поле поиска над таблицей + кликабельные заголовки (▲/▼). */
.lk-search { display: flex; gap: 8px; margin-bottom: 16px; max-width: 480px; }
.lk-search-input { flex: 1; }
/* owner 4.2: поиск-модалка — поле на всю ширину + кнопка Suchen под ним (внутри оверлея). */
.lk-search-modal { flex-direction: column; gap: 12px; max-width: none; margin-bottom: 0; }
.lk-search-modal .lk-search-input { width: 100%; }
/* owner: кнопка поиска в канон-подвале (.lk-modal-foot) — выравнивание держит подвал (justify-content:flex-end), не align-self */
.lk-th-sort { color: #fff; text-decoration: none; display: inline-block; white-space: nowrap; }
.lk-th-sort:hover { text-decoration: underline; }

/* Срез 7 (aggregate-verb): живой итог документа в модалке правки строки — слева (margin-right:auto держит Speichern справа),
   обновляется островом при правке. Консистентно с live-Betrag: редактируя строку, видишь эффект на весь документ. */
.lk-modal-totals { display: flex; flex-wrap: wrap; align-items: center; gap: 12px; margin-right: auto; font-size: 0.85rem; }
.lk-modal-total-lbl { color: var(--lk-muted); }
.lk-modal-total-val { font-weight: 700; color: var(--lk-navy); font-variant-numeric: tabular-nums; }

/* Группировка динсписка (P2: «список = композер»): чипы осей → композер даёт count-подытоги. */
.lk-group-bar { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; margin-bottom: 16px; }
.lk-group-label { color: var(--lk-muted); font-size: 0.85rem; }
.lk-group-chip { padding: 4px 12px; border: 1px solid var(--lk-border); border-radius: 999px;
  color: var(--lk-navy); text-decoration: none; font-size: 0.85rem; background: var(--lk-surface); }
.lk-group-chip:hover { border-color: var(--lk-navy); background: var(--lk-hover); }
/* Композитор Этап 3: пикер re-pivot отчёта «Nach:» — видимые чипы осей, активная ось выделена (navy fill) */
.lk-pivot-bar { display: flex; align-items: center; flex-wrap: wrap; gap: 8px; margin-bottom: 16px; }
.lk-pivot-label { font-size: 0.8rem; color: var(--lk-navy); font-weight: 700; letter-spacing: 0.02em; }
.lk-pivot-chips { display: flex; flex-wrap: wrap; gap: 8px; }
.lk-group-chip-active, .lk-group-chip-active:hover { border-color: var(--lk-navy); background: var(--lk-navy); color: #fff; font-weight: 600; }
/* F169.1: цепочка полна (кап осей) — чип-«добавить» отключён: приглушён, курсор-запрет, без hover-подсветки */
.lk-group-chip-disabled { opacity: 0.45; cursor: not-allowed; }
/* Этап 3·3: автономная панель отборов no-period отчёта (rights) — селекты (метка над полем) + «Anwenden» в ряд.
   Scoped на .lk-filter-bar, чтобы не задеть .lk-filter в period_picker (там метка инлайн). */
.lk-filter-bar { display: flex; align-items: flex-end; flex-wrap: wrap; gap: 12px; margin-bottom: 16px; }
.lk-filter-bar .lk-filter { display: flex; flex-direction: column; gap: 4px; }
.lk-filter-bar .lk-filter-label { font-size: 0.8rem; color: var(--lk-navy); font-weight: 600; }
/* Этап 3·4: пикер сохранённых вариантов отчёта (1С «структуры настроек») — чипы-ссылки; общие помечены точкой */
.lk-variant-bar { display: flex; align-items: center; flex-wrap: wrap; gap: 8px; margin-bottom: 16px; }
.lk-variant-label { font-size: 0.8rem; color: var(--lk-navy); font-weight: 700; letter-spacing: 0.02em; }
.lk-variant-chips { display: flex; flex-wrap: wrap; gap: 8px; }
.lk-variant-chip { padding: 4px 12px; border: 1px solid var(--lk-border); border-radius: 999px;
  color: var(--lk-navy); text-decoration: none; font-size: 0.85rem; background: var(--lk-surface); }
.lk-variant-chip:hover { border-color: var(--lk-navy); background: var(--lk-hover); }
.lk-variant-chip-shared::before { content: "\25CF\A0"; opacity: 0.45; }  /* ● общий (стандарт арендатора) */
/* Инк-2 ①: управление видами — строка (применить-чип + переименовать-инпут + удалить) */
.lk-variant-manage-row { display: flex; align-items: center; flex-wrap: wrap; gap: 6px; width: 100%; }
.lk-variant-del, .lk-variant-ren { display: inline-flex; align-items: center; gap: 4px; margin: 0; }
.lk-variant-ren-name { width: 140px; padding: 3px 8px; font-size: 0.82rem; }
.lk-op-del { color: var(--lk-danger, #b3261e); }
/* T-41502: РУЧКИ ВИДА — чипы-ссылки. `lk-pick-*` = выбрать НЕСКОЛЬКО (колонки · виджеты полосы),
   `lk-knob-*` = выбрать ОДНО (плотность). Правила общие: разной у них семантика выбора, не вид. */
.lk-pick-knobs, .lk-knob { display: flex; align-items: center; flex-wrap: wrap; gap: 8px; margin-bottom: 14px; }
.lk-pick-knob-chips, .lk-knob-chips { display: flex; flex-wrap: wrap; gap: 6px; }
.lk-pick-knob, .lk-knob-chip { display: inline-flex; align-items: center; gap: 5px; padding: 3px 10px;
  border: 1px solid var(--lk-border); border-radius: 999px; color: var(--lk-navy); text-decoration: none;
  font-size: 0.82rem; background: var(--lk-surface); }
.lk-pick-knob:hover, .lk-knob-chip:hover { border-color: var(--lk-navy); background: var(--lk-hover); }
.lk-pick-knob-on, .lk-knob-chip-on { background: var(--lk-navy); color: #fff; border-color: var(--lk-navy); }
.lk-pick-knob-off { opacity: 0.6; }
/* Этап 3·4: форма «Сохранить как вариант» — имя + кнопка в ряд */
.lk-variant-save { display: flex; align-items: center; flex-wrap: wrap; gap: 8px; margin-bottom: 16px; }
.lk-variant-save-name { max-width: 260px; }
/* Этап 3·4 D: условное оформление — подсветка строк отчёта по правилу над мерой (warn=высокое, crit=критич.) */
.lk-tr.lk-row-warn td { background: #fff3e0; }
.lk-tr.lk-row-crit td { background: #fdecea; }
.lk-gt-leaf.lk-row-warn { background: #fff3e0; }
.lk-gt-leaf.lk-row-crit { background: #fdecea; }
.lk-gt-node.lk-row-warn > summary { background: #fff3e0; }   /* группа-подытог (multi-axis) — только summary, не поддерево */
.lk-gt-node.lk-row-crit > summary { background: #fdecea; }

/* владелец п.5: ЕДИНАЯ компактная панель инструментов списка (Создать + поиск-лупа + группировка-иконка) */
/* T-0176: сегменты-переключатель режима списка (инбокс Offen|Erledigt|Alle) — GET-навигация, iOS-стиль пилюли */
.lk-segments { display: inline-flex; gap: 2px; margin: 2px 0 14px; padding: 3px; background: var(--lk-surface);
  border: 1px solid var(--lk-border); border-radius: 9px; max-width: 100%; overflow-x: auto; }
.lk-segment { padding: 6px 16px; border-radius: 7px; font-size: 0.9rem; font-weight: 600; color: var(--lk-muted);
  text-decoration: none; white-space: nowrap; }
.lk-segment:hover { color: var(--lk-text); }
.lk-segment-on { background: var(--lk-bg); color: var(--lk-brand); box-shadow: 0 1px 3px rgba(0,0,0,0.10); }
.lk-listbar { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; margin-bottom: 16px; }
.lk-listbar > .lk-toolbar { margin-bottom: 0; }
.lk-listbar > .lk-segments { margin: 0; }   /* T-0184: сегменты в единой панели — сброс standalone-отступа, выравнивание с refresh */
.lk-listbar > .lk-search { margin-bottom: 0; max-width: 320px; gap: 0; }
.lk-listbar .lk-search-input { border-top-right-radius: 0; border-bottom-right-radius: 0; }  /* CSS-DUP: scope — не течь в standalone .lk-search */
.lk-search-btn { border-top-left-radius: 0; border-bottom-left-radius: 0; padding: 8px 12px;
  background: var(--lk-surface); border: 1px solid var(--lk-border); border-left: 0; color: var(--lk-muted); }
.lk-search-btn:hover { color: var(--lk-brand); border-color: var(--lk-brand); }
.lk-search-btn svg { width: 1.15em; height: 1.15em; }
/* группировка = иконка-dropdown (details, CSP-safe) */
.lk-group-menu { position: relative; }
.lk-group-summary { list-style: none; cursor: pointer; background: var(--lk-surface);
  color: var(--lk-text); border: 1px solid var(--lk-border); }
.lk-group-summary::-webkit-details-marker { display: none; }
.lk-group-summary:hover { border-color: var(--lk-brand); color: var(--lk-brand); }
.lk-group-drop { position: absolute; top: calc(100% + 4px); left: 0; z-index: 25; min-width: 210px;
  display: flex; flex-direction: column; gap: 4px; padding: 8px; background: var(--lk-surface);
  border: 1px solid var(--lk-border); border-radius: var(--lk-radius); box-shadow: 0 6px 20px rgba(0,0,0,.12); }
.lk-group-drop .lk-group-chip { border-radius: var(--lk-radius); }

/* владелец п.3 + R4: чипы-контролы у заголовка (период/фильтр) + общий overlay-модал (DUP-3) */
.lk-controls { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; margin: 0 0 16px; }
.lk-modal-wrap { position: relative; display: inline-flex; }
.lk-period-modal { display: inline-flex; }
.lk-filter-trigger { position: relative; }
.lk-filter-badge { display: inline-flex; align-items: center; justify-content: center; min-width: 18px; height: 18px;
  padding: 0 5px; border-radius: 999px; background: var(--lk-brand); color: #fff; font-size: 0.72rem; font-weight: 700; }
.lk-filter-form .lk-field { flex-direction: column; align-items: stretch; gap: 4px; border-bottom: 0; padding: 4px 0; }
.lk-filter-form .lk-field-label { min-width: 0; }
/* V1.1 (owner): кнопки фильтр-модалки переехали в канон .lk-modal-foot (border-top/bg/bleed); .lk-filter-actions удалён. */
.lk-modal-toggle { position: absolute; width: 1px; height: 1px; opacity: 0; margin: 0; pointer-events: none; }
.lk-chip { display: inline-flex; align-items: center; gap: 6px; padding: 6px 12px; cursor: pointer;
  border: 1px solid var(--lk-border); border-radius: 999px; background: var(--lk-surface); color: var(--lk-text);
  font-size: 0.9rem; user-select: none; }
.lk-chip:hover { border-color: var(--lk-brand); color: var(--lk-brand); }
.lk-chip svg { width: 1.05em; height: 1.05em; }
.lk-period-trigger::after { content: "▾"; margin-left: 2px; color: var(--lk-muted); }
.lk-modal-overlay { display: none; position: fixed; inset: 0; z-index: 100; align-items: center; justify-content: center; padding: 20px; }
.lk-modal-toggle:checked ~ .lk-modal-overlay { display: flex; }        /* :checked → показать overlay */
.lk-modal-backdrop { position: absolute; inset: 0; background: rgba(15, 23, 42, 0.45); cursor: pointer; }
.lk-modal-panel { position: relative; z-index: 1; background: var(--lk-surface); border-radius: var(--lk-radius);
  box-shadow: 0 20px 60px rgba(0, 0, 0, 0.28); padding: 20px 22px; max-width: 640px; width: 100%; overflow: hidden; }
/* 1.6 (owner, КАНОН модалки): БРЕНД-хедер во всю ширину панели (negative-margin bleed поверх padding) + белый текст.
   Работает для ВСЕХ модалок (`_overlay_modal`): единый брендированный хедер. */
.lk-modal-head { display: flex; align-items: center; justify-content: space-between; gap: 12px;
  margin: -20px -22px 16px; padding: 13px 20px; background: var(--lk-brand); color: #fff;
  border-radius: var(--lk-radius) var(--lk-radius) 0 0; }
.lk-modal-title { font-size: 1.15rem; font-weight: 800; color: #fff; letter-spacing: -.01em; }
.lk-modal-close { display: inline-flex; cursor: pointer; color: rgba(255, 255, 255, 0.85); border-radius: 6px; }
.lk-modal-close:hover { color: #fff; }
.lk-modal-close svg { width: 1.4em; height: 1.4em; }
/* 1.6: КАНОН-подвал модалки — сабмит-кнопка справа, разделитель, bleed во всю ширину (симметрично хедеру). */
.lk-modal-foot { display: flex; justify-content: flex-end; gap: 8px; align-items: center;
  margin: 16px -22px -20px; padding: 12px 20px; border-top: 1px solid var(--lk-border); background: var(--lk-hover);
  border-radius: 0 0 var(--lk-radius) var(--lk-radius); }
/* T-0183 (owner 2.2.3): в ТЧ-модалке «Speichern» сжималась до иконки («зелёный кружок») — .lk-td-rowdel .lk-btn
   min-width-правило (для иконочной мусорки) + flex-shrink рушили текст. Кнопка подвала = ПО КОНТЕНТУ, не сжимается. */
.lk-modal-foot .lk-btn { flex: 0 0 auto; min-width: max-content; white-space: nowrap; }
/* T-0188 (owner 1.1): в МОДАЛКЕ контейнер периода = сама панель, НЕ вложенный surface-бокс (иначе двойная рамка +
   -22px-подвал не совпадает с краем панели). Сброс bg/border/padding/margin → пресеты и дата-ряд edge-to-edge. */
.lk-modal-panel .lk-period { flex-direction: column; align-items: stretch; gap: 12px;
  background: transparent; border: 0; padding: 0; margin: 0; }

/* владелец п.4: панель виджетов закрываема — «×» (checkbox-hack, сброс на навигации) */
.lk-kpi-wrap { position: relative; }
.lk-kpi-toggle { position: absolute; width: 1px; height: 1px; opacity: 0; margin: 0; pointer-events: none; }
.lk-kpi-x { position: absolute; top: -6px; right: -6px; z-index: 2; display: inline-flex; cursor: pointer;
  color: var(--lk-muted); background: var(--lk-surface); border: 1px solid var(--lk-border); border-radius: 999px; }
.lk-kpi-x:hover { color: var(--lk-action-delete); border-color: var(--lk-action-delete); }
.lk-kpi-x svg { width: 1.25em; height: 1.25em; }
.lk-kpi-toggle:checked ~ .lk-kpi-strip { display: none; }              /* × → скрыть полосу виджетов */
.lk-kpi-toggle:checked ~ .lk-kpi-x { display: none; }                  /* и сам крестик (панель убрана целиком) */

/* Сворачиваемый отчёт (P1c): ROLLUP-уровни через нативный <details> — сворачивание БЕЗ JS (item 3). */
.lk-grid-collapsible { background: var(--lk-surface); border: 1px solid var(--lk-border);
  border-radius: var(--lk-radius); overflow: hidden; }
.lk-gt-headers, .lk-gt-head { display: flex; align-items: baseline; gap: var(--lk-gap); }
.lk-gt-headers { padding: 10px 12px; background: var(--lk-navy); color: #fff; font-weight: 600; font-size: 0.85rem; }
.lk-gt-hlabel, .lk-gt-label { flex: 1; }
.lk-gt-hvals, .lk-gt-vals { display: inline-flex; gap: 18px; font-variant-numeric: tabular-nums; }
.lk-gt-hcol, .lk-gt-val { min-width: 90px; text-align: right; }
.lk-gt-sum { cursor: pointer; padding: 8px 12px; list-style: none; border-top: 1px solid var(--lk-border); }
.lk-gt-sum::-webkit-details-marker { display: none; }
.lk-gt-sum::before { content: "▸"; display: inline-block; width: 1em; color: var(--lk-muted); }
.lk-gt-node[open] > .lk-gt-sum::before { content: "▾"; }
.lk-gt-sum:hover { background: var(--lk-hover); }
.lk-gt-children { margin-left: 18px; border-left: 2px solid var(--lk-border); }
.lk-gt-leaf { padding: 8px 12px 8px 24px; border-top: 1px solid var(--lk-border); }
.lk-grid-collapsible .lk-grid-total > .lk-gt-sum, .lk-grid-collapsible .lk-gt-leaf.lk-grid-total { font-weight: 700; }

/* Пагинация динсписка (P1a keyset): «дальше» по курсору — по центру под таблицей. */
.lk-list-more { display: flex; justify-content: center; align-items: center; gap: 16px; margin-top: 16px; }   /* item 8: счётчик + «дальше» */
.lk-list-count { color: var(--lk-muted, #6b7280); font-size: 0.9rem; font-variant-numeric: tabular-nums; }

/* Период (DP): единый выбор — пресеты-чипы + произвольный диапазон (нативные date). Однотипно везде. */
.lk-period { display: flex; flex-wrap: wrap; align-items: center; gap: var(--lk-gap);
  background: var(--lk-surface); border: 1px solid var(--lk-border); border-radius: var(--lk-radius);
  padding: 10px 12px; margin-bottom: 16px; }
.lk-period-presets { display: inline-flex; flex-wrap: wrap; gap: 6px; }
.lk-period-preset { padding: 5px 12px; border: 1px solid var(--lk-border); border-radius: 999px;
  color: var(--lk-text); text-decoration: none; font-size: 0.85rem; background: var(--lk-bg); }
.lk-period-preset:hover { border-color: var(--lk-navy); }
.lk-period-active { background: var(--lk-navy); color: #fff; border-color: transparent; }
.lk-period-range { display: inline-flex; align-items: center; gap: 8px; margin: 0; }
/* T-0182: период В МОДАЛКЕ — блок (дата-ряд + канон-подвал), чтобы «Anwenden» не обрезалась inline-flex-переполнением на моб */
.lk-period-range-modal { display: block; }
.lk-period-daterow { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; }
.lk-period-date { width: auto; }
/* T-0188 (owner 1.1 «раздел выбора периодов растяни по ширине»): в модалке дата-ряд von–bis РАСТЯГИВАЕТСЯ на всю
   ширину (было width:auto → узкие боксы слева + пустота справа). Каждый date flex:1 → «von» и «bis» по половине. */
.lk-period-range-modal .lk-period-daterow { width: 100%; }
.lk-period-range-modal .lk-period-date { flex: 1 1 0; min-width: 0; }
.lk-period-dash { color: var(--lk-muted); flex: 0 0 auto; }

/* Дерево (T-tree): иерархич. справочник через нативный <details>/<summary> — сворачивание БЕЗ JS. */
.lk-tree { display: flex; flex-direction: column; gap: 2px; }
.lk-tree-node { border-left: 2px solid var(--lk-border); }
.lk-tree-node[open] > .lk-tree-sum { color: var(--lk-navy); }
.lk-tree-sum { cursor: pointer; padding: 8px 10px; list-style: none; border-radius: var(--lk-radius); }
.lk-tree-sum::-webkit-details-marker { display: none; }
.lk-tree-sum::before { content: "▸"; display: inline-block; width: 1em; color: var(--lk-muted); transition: none; }
.lk-tree-node[open] > .lk-tree-sum::before { content: "▾"; }
.lk-tree-sum:hover { background: var(--lk-hover); }
.lk-tree-children { margin-left: 16px; display: flex; flex-direction: column; gap: 2px; }
.lk-tree-leaf { padding: 8px 10px 8px 26px; }   /* отступ под ширину маркера листа (выравнивание с узлами) */
.lk-tree-headline { display: inline-flex; align-items: baseline; gap: 10px; flex-wrap: wrap; }
.lk-tree-sec { color: var(--lk-muted); font-size: 0.85rem; }

/* Страницы ошибок (§5a): единый блок, дизайн-система; вертикальный стек заголовок/текст/«назад». */
/* Экспресс-аудит 2.1: страница ошибки/пустого доступа — ЦЕНТРИРОВАНА (гориз. margin auto + верт. отступ +
   контент по центру), брендированный app_page-шелл вокруг. Применяется ко ВСЕМ 4xx/5xx-макетам. */
.lk-error { display: flex; flex-direction: column; gap: var(--lk-gap); align-items: center; text-align: center;
  justify-content: center; background: var(--lk-surface); border: 1px solid var(--lk-border);
  border-radius: var(--lk-radius); padding: 40px 24px; max-width: 540px; margin: 12vh auto 0; }
.lk-error .lk-empty { justify-content: center; }
/* owner «ярче, оформи»: акцент-полоса сверху + крупный статус-бейдж по тону + Fehler-Referenz (T-0155). */
.lk-error { border-top: 4px solid var(--lk-border); }
.lk-error--server { border-top-color: var(--lk-danger); }
.lk-error--denied { border-top-color: var(--lk-accent); }
.lk-error--missing { border-top-color: var(--lk-muted); }
.lk-error-badge { display: inline-flex; align-items: center; justify-content: center;
  width: 88px; height: 88px; border-radius: 50%; margin-bottom: 4px; color: #fff;
  font-size: 32px; font-weight: 800; letter-spacing: -0.02em; font-variant-numeric: tabular-nums;
  background: var(--lk-muted); }
.lk-error--server .lk-error-badge { background: var(--lk-danger);
  box-shadow: 0 10px 30px color-mix(in srgb, var(--lk-danger) 34%, transparent); }
.lk-error--denied .lk-error-badge { background: var(--lk-accent);
  box-shadow: 0 10px 30px color-mix(in srgb, var(--lk-accent) 34%, transparent); }
.lk-error-actions { display: flex; gap: 10px; flex-wrap: wrap; justify-content: center; }
.lk-error-ref { margin-top: 10px; font-size: 13px; color: var(--lk-muted); }
.lk-error-ref-id { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-weight: 700;
  color: var(--lk-text); background: var(--lk-bg); border: 1px solid var(--lk-border);
  border-radius: 6px; padding: 1px 7px; margin: 0 2px; user-select: all; }
.lk-error-ref-hint { display: block; margin-top: 3px; font-size: 12px; }
/* owner 1.1: уведомление валидации (документ неполон) — НЕ крах: тёплый warning-тон, мягкая иконка ⚠, без Fehler-Ref. */
.lk-notice { border-top-color: var(--lk-feature, #d99a00); }
.lk-notice-badge { display: inline-flex; align-items: center; justify-content: center; width: 68px; height: 68px;
  border-radius: 50%; margin-bottom: 4px; font-size: 30px; line-height: 1;
  background: color-mix(in srgb, var(--lk-feature) 18%, transparent); color: #9a6b00; }

/* Рабочий стол: шапка + секции по виду + адаптивная сетка карточек (когнит. нагрузка/узнаваемость). */
.lk-home-head { margin-bottom: 20px; }
.lk-home-hint { color: var(--lk-muted); margin: 4px 0 0; }
.lk-nav-section { margin-bottom: 24px; }
.lk-nav-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: var(--lk-gap); }
.lk-nav-card { display: block; padding: 14px 16px; background: var(--lk-surface);
  border: 1px solid var(--lk-border); border-radius: var(--lk-radius); color: var(--lk-navy);
  text-decoration: none; font-weight: 600; }
.lk-nav-card:hover { border-color: var(--lk-navy); background: var(--lk-hover); }

/* Адаптивность: горизонтальный скролл таблицы на узких, поля стекаются, тулбар переносится. */
.lk-table-wrap { overflow-x: auto; -webkit-overflow-scrolling: touch; }
/* БЛОК20 (решение A): переключатель список↔вкладки детали — компактная кнопка справа над телом документа. */
.lk-view-toggle-form { display: flex; justify-content: flex-end; margin: -4px 0 8px; }
.lk-view-toggle { font-size: 0.82rem; padding: 4px 10px; color: var(--lk-muted); }
/* owner 1.6: ГРУППА печатных форм — CSP-safe dropdown (<details>) в тулбаре: «Drucken ▾» → выбор формы. */
.lk-print-group { position: relative; display: inline-block; }
.lk-print-group > summary { list-style: none; cursor: pointer; }
.lk-print-group > summary::-webkit-details-marker { display: none; }
.lk-print-group > summary::marker { content: ""; }
.lk-print-menu { position: absolute; z-index: 30; right: 0; margin: 4px 0 0; padding: 4px; list-style: none;
  background: var(--lk-surface); border: 1px solid var(--lk-border); border-radius: var(--lk-radius);
  box-shadow: 0 6px 20px rgba(0,0,0,.14); min-width: 190px; }
.lk-print-item { display: block; padding: 8px 12px; border-radius: 6px; color: var(--lk-text); text-decoration: none; white-space: nowrap; }
.lk-print-item:hover, .lk-print-item:focus-visible { background: var(--lk-hover); }
/* БЛОК20 (owner 1.3b): баннер успешного создания документа — nudge к согласованию (зелёный, над телом). */
.lk-created-banner { background: color-mix(in srgb, var(--lk-ok, #2f8b4e) 12%, var(--lk-surface));
  border: 1px solid color-mix(in srgb, var(--lk-ok, #2f8b4e) 34%, var(--lk-border)); border-left: 3px solid var(--lk-ok, #2f8b4e);
  border-radius: var(--lk-radius); padding: 10px 14px; margin-bottom: 14px; font-weight: 600; color: var(--lk-text); }
@media (max-width: 640px) {
  .lk-app { padding: 12px; }
  .lk-page-title { font-size: 1.2rem; }
  .lk-toolbar { flex-wrap: wrap; }
  /* owner 4.1/4.3/4.2: на мобайле чипы Filter/Suchen/Gruppieren — ТОЛЬКО ИКОНКА (текст скрыт; иконка+бейдж остаются). */
  .lk-filter-trigger .lk-chip-label,
  .lk-search-trigger .lk-chip-label,
  .lk-group-summary .lk-btn-label { display: none; }
  .lk-field { flex-direction: column; gap: 2px; }
  .lk-field-label { min-width: 0; font-size: 0.8rem; }
  .lk-field-help { margin-left: 0; }   /* Единый Паспорт: мобильный (колонка) — подсказка без отступа под меткой */
  /* РЯД КАРТОЧКИ ЗАПИСИ ЗДЕСЬ СНИМАЕТСЯ ЦЕЛИКОМ, И ЭТО НЕ УКРАШЕНИЕ. Строкой выше объявлена КОЛОНКА, а в
     колоночном flex-контейнере `flex-basis` задаёт ВЫСОТУ: метка с основой 220px становится 220px РОСТОМ,
     контрол с основой 20rem — прямоугольником в треть экрана. Замерено на 420px до этой строки. Соседний
     `min-width: 0` выше — ровно такой же снимок горизонтального правила, сделанный по той же причине. */
  .lk-form-record > .lk-field,
  .lk-form-record .lk-tab-panel > .lk-field { align-items: stretch; }
  .lk-form-record > .lk-field > .lk-field-label,
  .lk-form-record .lk-tab-panel > .lk-field > .lk-field-label { flex: 0 1 auto; }
  .lk-form-record > .lk-field > *:not(.lk-field-label):not(.lk-field-help),
  .lk-form-record .lk-tab-panel > .lk-field > *:not(.lk-field-label):not(.lk-field-help) {
    flex: 0 1 auto; max-width: none; }
  /* БЛОК20 (owner 1.1, мобильный комфорт): ТЧ с opt-in .lk-table-cards на узких → строки-КАРТОЧКИ вместо
     сжатой N-колоночной таблицы. Заголовок берётся из data-label ячейки (::before). Универсально: любая
     таблица, включившая card_mobile (ТЧ документов, потенц. компактные списки). thead скрыт визуально (sr — цел). */
  .lk-table-cards thead { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); }
  .lk-table-cards, .lk-table-cards tbody, .lk-table-cards tfoot, .lk-table-cards tr, .lk-table-cards .lk-td { display: block; width: 100%; }
  .lk-table-cards tr { border: 1px solid var(--lk-border); border-radius: var(--lk-radius); padding: 6px 10px; margin-bottom: 10px; background: var(--lk-surface); }
  .lk-table-cards .lk-td { display: flex; justify-content: space-between; gap: 12px; align-items: baseline; padding: 5px 0; border-top: 0; border-bottom: 1px solid var(--lk-border); text-align: right; }
  .lk-table-cards tr > .lk-td:last-child { border-bottom: 0; }
  .lk-table-cards .lk-td::before { content: attr(data-label); font-size: 0.78rem; color: var(--lk-muted); font-weight: 600; text-align: left; flex: none; }
  .lk-table-cards .lk-td:empty { display: none; }   /* пустая ячейка-филлер (нет значения) — скрыть карточную строку */
  .lk-table-cards .lk-total { border: 2px solid var(--lk-border); background: var(--lk-hover); font-weight: 600; }
  /* owner 1.5: РЕДИЗАЙН карточки read-only ТЧ (.lk-cards-rich) — ИЕРАРХИЯ вместо плоского стека равного веса.
     Роль ячейки (data-card-role, эвристика движка): header=дата/идентификатор (жирный заголовок) · body=суть
     работ (подзаголовок) · metric=числа (Satz/Stunden/TE/Betrag компактной строкой). tr→flex-wrap: header
     занимает 100% → метрики переносятся общим рядом под ним. Универсально для ЛЮБОЙ ТЧ (без per-field конфига). */
  .lk-cards-rich tr { display: flex; flex-wrap: wrap; align-items: baseline; row-gap: 3px; column-gap: 16px; padding: 8px 12px; }
  .lk-cards-rich .lk-td[data-card-role="header"] { flex: 0 0 100%; justify-content: flex-start; font-weight: 700;
    font-size: 0.98rem; color: var(--lk-text); border-bottom: 1px solid var(--lk-border); padding: 0 0 5px; margin-bottom: 2px; }
  .lk-cards-rich .lk-td[data-card-role="header"]::before { display: none; }   /* дата — заголовок, без префикса-метки */
  .lk-cards-rich .lk-td[data-card-role="body"] { flex: 0 0 100%; justify-content: flex-start; border-bottom: 0;
    padding: 1px 0; color: var(--lk-muted); font-size: 0.9rem; }
  .lk-cards-rich .lk-td[data-card-role="body"]::before { display: none; }     /* суть работ — подзаголовок, без метки */
  .lk-cards-rich .lk-td[data-card-role="metric"] { flex: 1 1 auto; width: auto; min-width: 56px; flex-direction: column;
    align-items: flex-start; gap: 0; border-bottom: 0; padding: 4px 0 0; text-align: left; font-variant-numeric: tabular-nums; }
  .lk-cards-rich .lk-td[data-card-role="metric"]::before { order: -1; content: attr(data-label);
    font-size: 0.68rem; color: var(--lk-muted); font-weight: 600; text-align: left; }   /* метка МАЛЫМ сверху, значение снизу */
  .lk-cards-rich .lk-td[data-card-role="metric"]:last-child { font-weight: 700; color: var(--lk-text); }  /* сумма (Betrag) жирная */
  .lk-cards-rich .lk-total { padding: 8px 12px; }
  /* owner 07-14: карточка СПИСКА = 3 ЯРУСА (scoped .lk-list-cards → ТЧ .lk-cards-rich НЕ задет). Разрыв ярусов =
     tr::before/::after как flex-item flex-basis:100% с order МЕЖДУ группами. Ярус1 ШАПКА(точка+№+статус справа) ·
     Ярус2 ИНФО(кто/подразделение/даты инлайн) · Ярус3 МЕТРИКИ(сумма жирная). Универсально всем спискам. */
  .lk-list-cards.lk-cards-rich tr { padding: 9px 12px 10px; column-gap: 8px; row-gap: 2px; position: relative; }
  /* owner 2.4: клик реагирует на ВСЮ КАРТОЧКУ (строку), не отдельную ячейку — растянутая ссылка титула (CSP-safe,
     ::after покрывает tr; ссылки ячеек z-index выше → свой клик; зазоры/разделитель → ссылка титула). */
  .lk-list-cards.lk-cards-rich .lk-row-link-lead::after { content: ""; position: absolute; inset: 0; z-index: 0; }
  .lk-list-cards.lk-cards-rich .lk-td .lk-row-link { position: relative; z-index: 1; }
  .lk-list-cards.lk-cards-rich tr::before { content: ""; order: 4; flex-basis: 100%; height: 0; border-top: 1px solid var(--lk-border); margin: 6px 0 5px; }   /* разрыв ШАПКА→инфо (тонкая линия); ярусы СУММА/ШАГ — свой ряд flex-basis:100% */
  .lk-list-cards.lk-cards-rich .lk-td { width: auto; }   /* сброс width:100% базовой card-td → flex-basis по контенту */
  .lk-list-cards.lk-cards-rich .lk-td::before { display: none; }   /* owner 1.2: data-label префиксы (метки) в карточке списка не нужны */
  .lk-list-cards.lk-cards-rich .lk-td[data-card-role="dot"] { order: 0; flex: 0 0 auto; padding: 0; border: 0; align-self: center; }
  .lk-list-cards.lk-cards-rich .lk-td[data-card-role="header"] { order: 1; flex: 0 0 auto; padding: 0; border: 0; font-weight: 700; font-size: 1.02rem; color: var(--lk-text); }
  .lk-list-cards.lk-cards-rich .lk-td[data-card-role="subhead"] { order: 2; flex: 0 0 auto; padding: 0; border: 0; color: var(--lk-muted); font-size: 0.85rem; }   /* дата — в шапке рядом с № */
  .lk-list-cards.lk-cards-rich .lk-td[data-card-role="status"] { order: 3; flex: 0 0 auto; margin-left: auto; padding: 0; border: 0; }
  /* ЯРУС 2 ИНФО (owner 1.1): кто(жирн.акцент) | подразделение | период — «|»-разделители */
  .lk-list-cards.lk-cards-rich .lk-td[data-card-role="subject"] { order: 5; flex: 0 0 auto; padding: 0; border: 0; font-weight: 700; color: var(--lk-text); }   /* owner 1.1: кто — просто жирный, обычный чёрный (не акцент) */
  .lk-list-cards.lk-cards-rich .lk-td[data-card-role="body"] { order: 6; flex: 0 0 auto; padding: 0; border: 0; color: var(--lk-muted); font-size: 0.9rem; }
  .lk-list-cards.lk-cards-rich .lk-td[data-card-role="body"]::before { display: inline; content: "|"; color: var(--lk-muted); margin-right: 6px; font-weight: 400; opacity: 0.6; }
  /* ЯРУС 3 СУММА (owner 1.2): жирная, СПРАВА, без метки, свой ряд (валюта € через ::after) */
  .lk-list-cards.lk-cards-rich .lk-td[data-card-role="metric"] { order: 7; flex: 1 1 100%; flex-direction: row; align-items: baseline; justify-content: flex-end; padding: 3px 0 0; font-weight: 700; font-size: 1.02rem; color: var(--lk-text); }
  .lk-list-cards.lk-cards-rich .lk-td[data-card-role="metric"] .lk-row-link { width: auto; }   /* ссылка по контенту → «€» (::after) остаётся в строке, не переносится */
  .lk-list-cards.lk-cards-rich .lk-td[data-card-role="metric"]::after { content: " €"; margin-left: 3px; }
  /* ЯРУС 4 ШАГ согласования (owner 1.3): курсив, СЛЕВА, свой ряд */
  .lk-list-cards.lk-cards-rich .lk-td[data-card-role="step"] { order: 8; flex: 1 1 100%; justify-content: flex-start; text-align: left; padding: 2px 0 0; font-style: italic; color: var(--lk-muted); font-size: 0.85rem; }   /* owner 1.2: шаг — курсив, по ЛЕВОМУ краю */
  .lk-list-cards.lk-cards-rich .lk-td[data-card-role="step"] .lk-row-link { width: auto; text-align: left; }
  /* T-0174: ИНБОКС /my-tasks — карточка задачи (те же .lk-list-cards ярусы, свои роли). L1 №(header)+Дата(subhead)
     +SLA-срок(sla, правый угол, цвет по срочности); L2 Автор(author)+Сумма(money, справа; € уже в значении → БЕЗ ::after);
     L3 «что делать»(step, курсив). Двойной € и € на дате устранены: сумма=money(без css-€), дата/срок=не-metric. */
  .lk-list-cards.lk-cards-rich .lk-td[data-card-role="sla"] { order: 3; flex: 0 0 auto; margin-left: auto; padding: 0; border: 0; font-size: 0.8rem; color: var(--lk-muted); align-self: center; }
  .lk-list-cards.lk-cards-rich .lk-td[data-card-role="author"] { order: 5; flex: 0 0 auto; padding: 0; border: 0; font-weight: 700; color: var(--lk-text); }
  .lk-list-cards.lk-cards-rich .lk-td[data-card-role="money"] { order: 6; flex: 0 0 auto; margin-left: auto; text-align: right; padding: 0; border: 0; font-weight: 700; font-size: 1.02rem; color: var(--lk-text); }
  .lk-list-cards.lk-cards-rich .lk-td[data-card-role="money"] .lk-row-link { width: auto; }
  /* T-0210(а): EYEBROW — ТИП дока над № (мелкий uppercase muted, свой ряд сверху). Десктоп — обычная колонка «Art». */
  .lk-list-cards.lk-cards-rich .lk-td[data-card-role="eyebrow"] { order: 0; flex: 0 0 100%; padding: 0 0 1px; border: 0; font-size: 0.72rem; text-transform: uppercase; letter-spacing: 0.04em; font-weight: 600; color: var(--lk-muted); }
  .lk-list-cards.lk-cards-rich .lk-td[data-card-role="eyebrow"]::before { display: none; }
  /* БЛОК20 (owner 1.1 ЧАСТЬ-2): РЕДАКТИРУЕМАЯ ТЧ (.lk-tabedit-table) в карточном режиме — ячейка со ВВОДОМ
     стопкой (метка сверху, КРУПНЫЙ инпут на всю ширину — тач-комфорт), не сжато-вправо как read-only. */
  .lk-tabedit-table .lk-td { flex-direction: column; align-items: stretch; gap: 4px; text-align: left; padding: 7px 0; }
  .lk-tabedit-table .lk-td::before { text-align: left; }
  .lk-tabedit-table .lk-td .lk-input { width: 100%; min-width: 0; min-height: 2.6rem; font-size: 1rem; box-sizing: border-box; }
  /* 1.5 (owner): строчные ✎/✕ в карточке — КОМПАКТНЫЕ иконки СПРАВА В РЯД, не громадные полосы на всю ширину. */
  .lk-tabedit-table .lk-td-rowdel { flex-direction: row; justify-content: flex-end; align-items: center; }
  .lk-tabedit-table .lk-td-rowdel::before { align-self: center; margin-right: auto; }
  .lk-tabedit-table .lk-td-rowdel .lk-btn { width: auto; min-height: 2.3rem; min-width: 2.7rem; padding: 6px 12px; justify-content: center; }
  /* owner (моб): в КАРТОЧКЕ (rich) кнопка удаления строки — в правом-верхнем углу (уровень даты), компактнее; метка «Aktionen» убрана. */
  .lk-tabedit-table.lk-cards-rich tr { position: relative; }   /* якорь для абсолютной кнопки удаления */
  .lk-cards-rich .lk-td-rowdel { position: absolute; top: 5px; right: 8px; width: auto; min-width: 0; padding: 0; border-bottom: 0; z-index: 1; }
  .lk-cards-rich .lk-td-rowdel::before { display: none; }   /* «Aktionen» лейба не нужна (кнопка сама очевидна; aria-label цел) */
  /* T-0183 (owner 2.2.3/2.2.5): открытая edit-модалка строки ТЧ ПОВЕРХ формы — иначе зелёные кнопки формы
     (Einreichen/upload) и мусорки СОСЕДНИХ строк ПРОСВЕЧИВАЮТ (оверлей заперт в stacking-контексте .lk-td-rowdel z-1).
     :has(:checked) поднимает ТОЛЬКО открытую строку; закрытые остаются z-1. */
  .lk-cards-rich .lk-td-rowdel:has(.lk-modal-toggle:checked) { z-index: 500; }
  /* T-0183: КРУГ-стиль ТОЛЬКО у иконочной мусорки (.lk-rowactions), НЕ у save-кнопки edit-модалки строки (та тоже
     .lk-td-rowdel .lk-btn → раньше сжималась в «зелёный кружок», текст «Speichern» терялся). */
  .lk-cards-rich .lk-td-rowdel .lk-rowactions .lk-btn { min-height: 1.45rem; min-width: 1.45rem; width: 1.45rem; height: 1.45rem; padding: 0; border-radius: 50%; }   /* owner 07-14: −25% + КРУГ (иконка-мусорка) */
  .lk-cards-rich .lk-td-rowdel .lk-rowactions .lk-btn svg { width: 0.92rem; height: 0.92rem; }
  .lk-tabedit-table tfoot .lk-td { flex-direction: row; justify-content: space-between; font-weight: 600; }
  /* T-0180 (owner 07-14, реверс 1.2): подписи кнопок add/dup/cal ТЧ ВИДНЫ на узком — иконки без метки криптичны
     («жёлтая палочка»); контейнер .lk-tabedit-actions уже flex-wrap → лишние переносятся на строку. */
  .lk-tabedit-actions .lk-btn { padding: 9px 12px; gap: 6px; }
  /* 3.2 — узкий экран: тулбар-кнопки становятся ИКОНОЧНЫМИ (метка визуально скрыта, но остаётся для
     скринридера — доступное имя кнопки не теряется). Глиф центрируется, паддинг квадратный. */
  .lk-toolbar .lk-btn-label {
    position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px;
    overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0;
  }
  .lk-toolbar .lk-btn { padding: 9px 11px; gap: 0; }
  .lk-toolbar .lk-ico { width: 1.2em; height: 1.2em; }
  .lk-appbar { padding: 10px 14px; }
  .lk-appbar-link .lk-btn-label { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px;
    overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0; }   /* аккаунт → иконки */
  /* owner 07-14: в форме на моб «Abbrechen» = иконочная (× без метки); Entwurf/Einreichen — с метками. aria цел. */
  .lk-form-actions .lk-btn-label { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px;
    overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0; }
}

/* §6 экспорт-бар (кнопки xlsx/csv/pdf при праве .export) */
.lk-export-bar { display: flex; align-items: center; gap: 8px; margin: 8px 0; }
.lk-export-label { color: var(--lk-muted); font-size: 0.85rem; }
.lk-export-link { padding: 4px 10px; font-size: 0.8rem; border-color: var(--lk-brand); color: var(--lk-brand); }

/* §7 server-SVG диаграмма (CSP-safe, без JS) */
.lk-chart-wrap { margin: 12px 0 4px; padding: 8px 4px; background: var(--lk-surface); border: 1px solid var(--lk-border); border-radius: var(--lk-radius); }
.lk-chart-title { display: block; font-size: 0.85rem; color: var(--lk-muted); margin: 0 0 4px 6px; }
.lk-chart { width: 100%; height: auto; max-height: 260px; display: block; }
.lk-chart-bar rect { transition: opacity .15s; }
.lk-chart-bar:hover rect { opacity: .82; }
.lk-chart-val { font-size: 10px; fill: var(--lk-text); font-weight: 600; }
.lk-chart-lbl { font-size: 10px; fill: var(--lk-muted); }

/* §7 кольцевая диаграмма (структура доли от Σ) + HTML-легенда (текст+процент, не только цвет — §5).
   Палитра .lk-cat-N: fill для SVG-секторов, background для swatch легенды — из --lk-cat-N (brand-слой).
   Инлайн-style НЕ используем (CSP style-src 'self') — цвет через класс. */
.lk-donut-wrap { display: flex; flex-wrap: wrap; align-items: center; gap: 20px; padding: 4px 8px; }
.lk-donut { width: 200px; height: 200px; flex: 0 0 auto; }
.lk-seg { transition: opacity .15s; }
.lk-seg:hover { opacity: .82; }
.lk-donut-total { font-size: 18px; font-weight: 700; fill: var(--lk-brand); }
.lk-donut-legend { flex: 1 1 240px; min-width: 220px; display: flex; flex-direction: column; gap: 4px; }
.lk-legend-item { display: grid; grid-template-columns: 14px 1fr auto auto; align-items: center; gap: 8px; font-size: 0.85rem; }
.lk-legend-swatch { width: 12px; height: 12px; border-radius: 3px; display: inline-block; }
.lk-legend-lbl { color: var(--lk-text); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.lk-legend-val { color: var(--lk-text); font-variant-numeric: tabular-nums; }
.lk-legend-pct { color: var(--lk-muted); font-variant-numeric: tabular-nums; min-width: 3.4em; text-align: right; }
.lk-cat-1 { fill: var(--lk-cat-1); background: var(--lk-cat-1); }
.lk-cat-2 { fill: var(--lk-cat-2); background: var(--lk-cat-2); }
.lk-cat-3 { fill: var(--lk-cat-3); background: var(--lk-cat-3); }
.lk-cat-4 { fill: var(--lk-cat-4); background: var(--lk-cat-4); }
.lk-cat-5 { fill: var(--lk-cat-5); background: var(--lk-cat-5); }
.lk-cat-6 { fill: var(--lk-cat-6); background: var(--lk-cat-6); }
.lk-cat-7 { fill: var(--lk-cat-7); background: var(--lk-cat-7); }
.lk-cat-8 { fill: var(--lk-cat-8); background: var(--lk-cat-8); }
.lk-cat-masked { fill: var(--lk-muted); background: var(--lk-muted); }   /* F-CHT1: k-anon сегмент приглушён */

/* T-3299 ПЛИТКИ ВХОДНОЙ ПОВЕРХНОСТИ (рабочий стол) — глиф ведёт, подпись называет, число подтверждает.
   Владелец 2026-08-06: «иконки большие, узнаваемые, ассоциативные, с подписями — реальная инфографика».
   Отличие от .lk-kpi намеренное и структурное, а не размерное: там глиф стоит ПЕРЕД надписью строкой,
   здесь он КРУПНЫЙ и ведёт колонку, а число необязательно (на вход выходят и объекты без виджета). */
.lk-entry-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(168px, 1fr)); gap: 14px; margin: 18px 0 26px; }
.lk-entry-tile { display: flex; flex-direction: column; align-items: center; gap: 6px; text-align: center;
                 background: var(--lk-surface); border: 1px solid var(--lk-border); border-radius: var(--lk-radius);
                 padding: 18px 14px 16px; position: relative; overflow: hidden; }
.lk-entry-link { color: inherit; text-decoration: none; cursor: pointer; transition: border-color .12s ease, box-shadow .12s ease, transform .12s ease; }
.lk-entry-link:hover { border-color: var(--lk-brand); box-shadow: 0 4px 14px rgba(0,0,0,0.10); transform: translateY(-1px); }
.lk-entry-link:focus-visible { outline: 2px solid var(--lk-brand); outline-offset: 2px; }
/* ГЛИФ — предмет узнавания: дуотон-подложка бренда + крупный штрих. 56px на десктопе, не мельче 48 на моб. */
.lk-entry-ico { display: inline-flex; align-items: center; justify-content: center; color: var(--lk-brand);
                width: 76px; height: 76px; border-radius: 50%;
                background: color-mix(in srgb, var(--lk-brand) 10%, transparent); }
.lk-entry-ico svg { width: 44px; height: 44px; stroke-width: 1.7; }
/* ДЛИННОЕ НЕМЕЦКОЕ СЛОВО ПЕРЕНОСИТСЯ ПО СЛОГАМ, А НЕ РЕЖЕТСЯ ГДЕ ПОПАЛО: `anywhere` рвал
   «Ausgangsrechnunge|n» посреди слова — проверено рендером. `break-word` рвёт только когда иначе
   не помещается, а `hyphens: auto` ставит перенос по правилам языка страницы (lang=de). */
.lk-entry-label { font-size: 0.86rem; font-weight: 600; line-height: 1.25; color: var(--lk-text);
                  overflow-wrap: break-word; hyphens: auto; }
.lk-entry-value { font-size: 1.45rem; font-weight: 700; line-height: 1.1; color: var(--lk-brand); }
.lk-entry-sub { font-size: 0.74rem; color: var(--lk-muted); }
/* Семафор: плитка, ждущая решения актора, несёт верхнюю полосу и перекрашенный глиф. Цвет НЕ единственный
   носитель смысла — под ним стоит подпись-сравнение («zur Bearbeitung»). */
.lk-entry-tile::before { content: ""; position: absolute; left: 0; right: 0; top: 0; height: 3px; background: transparent; }
.lk-entry-red::before { background: var(--lk-action-delete); }
.lk-entry-red .lk-entry-ico { color: var(--lk-action-delete); background: color-mix(in srgb, var(--lk-action-delete) 12%, transparent); }
.lk-entry-red .lk-entry-value { color: var(--lk-action-delete); }
.lk-entry-green::before { background: var(--lk-action-create); }
.lk-entry-green .lk-entry-ico { color: var(--lk-action-create); background: color-mix(in srgb, var(--lk-action-create) 12%, transparent); }
/* Тон `gray` = «сообщает, не зовёт»: глиф остаётся БРЕНДОВЫМ (узнавание — работа иконки, а не сигнал
   тревоги), приглушается только число. Серый глиф читался бы как «выключено». */
.lk-entry-gray .lk-entry-value { color: var(--lk-text); }
@media (max-width: 520px) {
  .lk-entry-grid { grid-template-columns: repeat(auto-fit, minmax(136px, 1fr)); gap: 10px; }
  .lk-entry-ico { width: 62px; height: 62px; }
  .lk-entry-ico svg { width: 36px; height: 36px; }
  .lk-entry-value { font-size: 1.2rem; }
}

/* §8 KPI-карточки (адаптивная сетка auto-fit — §5 адаптив без JS) + спарклайн */
/* owner 4.4/1.1: виджеты компактнее + число ЦЕНТРИРОВАНО, полоса виджетов ЦЕНТРИРОВАНА. */
.lk-kpi-strip { display: grid; grid-template-columns: repeat(auto-fit, minmax(155px, auto)); gap: 10px; margin: 12px 0; justify-content: center; }
.lk-kpi { position: relative; background: var(--lk-surface); border: 1px solid var(--lk-border); border-radius: var(--lk-radius); padding: 10px 12px; overflow: hidden; }
/* owner 4.4: KPI-карточка = КНОПКА-фильтр по стадии (клик сужает список) — сброс link-стилей + hover-affordance */
.lk-kpi-link { display: block; color: inherit; text-decoration: none; cursor: pointer; transition: border-color .12s ease, box-shadow .12s ease; }
.lk-kpi-link:hover { border-color: var(--lk-brand); box-shadow: 0 2px 8px rgba(0,0,0,0.10); }
.lk-kpi-link:focus-visible { outline: 2px solid var(--lk-brand); outline-offset: 2px; }
.lk-kpi::before { content: ""; position: absolute; left: 0; top: 0; bottom: 0; width: 3px; background: var(--lk-brand); }
.lk-kpi-green::before { background: var(--lk-action-create); }
.lk-kpi-red::before { background: var(--lk-action-delete); }
.lk-kpi-gray::before { background: var(--lk-muted); }
.lk-kpi-blue::before { background: var(--lk-info); }   /* T5: статус «submitted/Eingereicht» — семафор процесса (document_state) */
/* T-2643: ПЛИТКА УМЕЛА ЧЕТЫРЕ ТОНА ИЗ ДЕСЯТИ ОБЪЯВЛЕННЫХ, и это молчало: `.lk-kpi-purple` не
   совпадает ни с одним правилом, браузер не красит ничего, а объявивший уверен, что показал цвет.
   На /development-task «На ревью» (purple) и «В работе» (amber) выходили КРАСНЫМИ — то есть цветом
   удаления, — потому что красной была ближайшая существующая полоса. Состав словаря — единственный
   дом ui_engine/kit/vocab.py; §3-пара к нему проверяет, что у КАЖДОГО тона есть оба правила (полоса
   и глиф), иначе тон работал бы наполовину так же незаметно.
   ЗНАЧЕНИЯ НЕ ВЫДУМАНЫ: где семантический токен уже есть — берётся он (slate = --lk-action-caution,
   orange = --lk-action-mark, оба так и подписаны в tokens.css); остальным взята ТЁМНАЯ ступень того
   же бейджевого набора (ступень 800), чтобы полоса и бейдж одного статуса были одним цветом. */
.lk-kpi-amber::before  { background: #92400e; }
.lk-kpi-purple::before { background: #6b21a8; }
.lk-kpi-violet::before { background: #5b21b6; }
.lk-kpi-teal::before   { background: #115e57; }
.lk-kpi-orange::before { background: var(--lk-action-mark); }
.lk-kpi-slate::before  { background: var(--lk-action-caution); }
.lk-kpi-head { display: flex; align-items: center; justify-content: center; gap: 6px; }   /* owner 4.4: метка по центру */
.lk-kpi-label { display: block; font-size: 0.72rem; color: var(--lk-muted); text-transform: uppercase; letter-spacing: .03em; text-align: center; min-width: 0; overflow-wrap: anywhere; }   /* owner 07-14: длинные нем. слова (ÜBUNGSLEITERABRECHNUNGEN) переносятся, не обрезаются в 2-up сетке на моб */
.lk-kpi-ic { flex: none; display: inline-flex; color: var(--lk-brand); }   /* Iconografika: доменный глиф KPI (дуотон-подложка --lk-icon-accent) */
.lk-kpi-ic svg { width: 1.3rem; height: 1.3rem; }
/* статус-карточка: глиф И его дуотон-подложка перекрашиваются в тон семафора (не бренд) — цвет+форма кодируют статус */
.lk-kpi-green .lk-kpi-ic { color: var(--lk-action-create); --lk-icon-accent: color-mix(in srgb, var(--lk-action-create) 20%, transparent); }
.lk-kpi-red   .lk-kpi-ic { color: var(--lk-action-delete); --lk-icon-accent: color-mix(in srgb, var(--lk-action-delete) 20%, transparent); }
.lk-kpi-blue  .lk-kpi-ic { color: var(--lk-info); --lk-icon-accent: color-mix(in srgb, var(--lk-info) 20%, transparent); }
.lk-kpi-gray  .lk-kpi-ic { color: var(--lk-muted); --lk-icon-accent: color-mix(in srgb, var(--lk-muted) 20%, transparent); }
/* T-2643, вторая половина правила тона: глиф красится тем же цветом, что и полоса. Тон, у которого
   есть полоса и нет этой строки, работает наполовину — и именно так незаметно, как работал сам тон. */
.lk-kpi-amber  .lk-kpi-ic { color: #92400e; --lk-icon-accent: color-mix(in srgb, #92400e 20%, transparent); }
.lk-kpi-purple .lk-kpi-ic { color: #6b21a8; --lk-icon-accent: color-mix(in srgb, #6b21a8 20%, transparent); }
.lk-kpi-violet .lk-kpi-ic { color: #5b21b6; --lk-icon-accent: color-mix(in srgb, #5b21b6 20%, transparent); }
.lk-kpi-teal   .lk-kpi-ic { color: #115e57; --lk-icon-accent: color-mix(in srgb, #115e57 20%, transparent); }
.lk-kpi-orange .lk-kpi-ic { color: var(--lk-action-mark); --lk-icon-accent: color-mix(in srgb, var(--lk-action-mark) 20%, transparent); }
.lk-kpi-slate  .lk-kpi-ic { color: var(--lk-action-caution); --lk-icon-accent: color-mix(in srgb, var(--lk-action-caution) 20%, transparent); }
.lk-kpi-value { display: block; font-size: 1.35rem; font-weight: 700; color: var(--lk-brand); line-height: 1.2; text-align: center; font-variant-numeric: tabular-nums; }   /* owner 4.4: число по центру, компактнее под 130px */
/* owner 1.3: проводка (Bewegungen/Buchungen) — Дт(1)/Кт(3)/Сумма(5) ЖИРНЫМ; субконто(2,4) с переводом строки, приглушённо. */
.lk-acc-postings .lk-td:nth-child(odd) { font-weight: 700; }
.lk-acc-postings .lk-td:nth-child(even) { white-space: pre-line; font-size: 0.88rem; color: var(--lk-muted); }
.lk-kpi-foot { display: flex; align-items: center; justify-content: center; gap: 6px; margin-top: 2px; }
.lk-kpi-sub { font-size: 0.72rem; color: var(--lk-muted); text-align: center; }
.lk-spark { width: 88px; height: 24px; }

/* self-service «мой аккаунт» (/me): сетка карточек + нотис результата смены пароля (§ Profile) */
.lk-profile { display: grid; grid-template-columns: repeat(auto-fit, minmax(320px, 1fr)); gap: var(--lk-gap); align-items: start; }
/* owner 1.3: правая колонка задачи-решения — «Ход согласования» НАД «Решением» (вертикальный стек в одной ячейке грида) */
.lk-task-decision-col { display: flex; flex-direction: column; gap: var(--lk-gap); }
/* owner 1.1: карточка «Решение» идёт во всю ширину колонки, иначе она уже «Хода согласования» → разрыв
   справа. Снятие общего потолка .lk-form здесь больше не нужно — потолка нет вовсе (см. .lk-form). */
/* owner 1.2: «Открыть документ» — иконка-действие У ЗАГОЛОВКА (title_action). Канон: акцент-цвет, кликабельна. */
.lk-title-action { display: inline-flex; align-items: center; justify-content: center; color: var(--lk-action-edit);
  padding: 4px; border-radius: 6px; text-decoration: none; flex: 0 0 auto; }
.lk-title-action:hover { background: var(--lk-hover, rgba(0,0,0,0.05)); }
.lk-title-action .lk-ico { width: 20px; height: 20px; }
/* owner 1.3: КОМПАКТНАЯ лента «Ход согласования» на странице задачи — плотнее step-карточек Ablauf (форма решения
   остаётся на экране). Цвет левой границы = состояние шага (переиспользуем маркер-палитру lk-flow-*). */
.lk-ap { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 10px; }
.lk-ap-row { border-left: 3px solid var(--lk-border); padding: 2px 0 2px 10px; }
.lk-ap-row.lk-flow-passed { border-left-color: var(--lk-success); }
.lk-ap-row.lk-flow-current { border-left-color: #e0a233; }
.lk-ap-row.lk-flow-rejected, .lk-ap-row.lk-flow-cancelled { border-left-color: var(--lk-danger); }
.lk-ap-head { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.lk-ap-head .lk-flow-step-num { flex: 0 0 auto; }
.lk-ap-title { font-weight: 600; flex: 1 1 auto; min-width: 0; }
.lk-ap-meta { color: var(--lk-muted); font-size: 0.88rem; margin-top: 2px; }
.lk-ap-note { font-size: 0.9rem; margin-top: 2px; }
.lk-card { background: var(--lk-surface); border: 1px solid var(--lk-border); border-radius: var(--lk-radius); padding: 16px; display: flex; flex-direction: column; gap: 8px; }
.lk-wf-edit-title { font-size: 1rem; font-weight: 700; color: var(--lk-brand); margin: 0; }  /* §5.1 редактор шагов: заголовок карточки-шага */
.lk-wf-edit-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; }  /* §5.1 2b */
.lk-wf-edit-ops { display: flex; gap: 4px; }
.lk-btn-icon { border: 1px solid var(--lk-border); background: var(--lk-surface); border-radius: var(--lk-radius); padding: 4px 9px; cursor: pointer; color: inherit; font-size: 0.85rem; line-height: 1.1; }
.lk-btn-icon:hover { background: rgba(0, 0, 0, 0.04); }
.lk-op-del:hover { border-color: var(--lk-accent); color: var(--lk-accent); background: transparent; }
.lk-wf-edit-actions { display: flex; gap: 10px; align-items: center; margin-top: 4px; }
/* БЛОК18-2 — редактор маршрута НА ВСЮ ШИРИНУ: шаги в ГОРИЗОНТАЛЬНЫЙ ряд (процесс читается в одну строку на
   большом экране; переносится на узком). `wide`-страница снимает cap контента; форма-route — плоский контейнер. */
.lk-content-inner.lk-content-wide { max-width: none; }
.lk-form-route { max-width: none; background: transparent; border: 0; padding: 0; }
/* Шаги — ОДИН В РЯД (владелец 2026-08-03: «карточки Шага не надо две рядом»). Горизонтальный ряд
   экономил высоту и платил шириной: карточка сжималась до 440px, и ветки — самая плотная часть
   экрана — ломались по три строки каждая. Маршрут читается сверху вниз, как и исполняется. */
.lk-wf-steps { display: flex; flex-direction: column; gap: 16px; }
.lk-wf-steps > .lk-card { width: 100%; max-width: none; }
/* Паспорт шага в строку: кто · сколько времени. Сетка, а не ручные ширины — на узком экране колонки
   схлопываются сами (auto-fit), и правила «под этот экран» здесь не заводится. */
.lk-wf-step-scalars { display: grid; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); gap: 8px 16px; }
.lk-wf-step-goal { min-height: 62px; resize: vertical; font-family: inherit; }
/* §5.1 инкр.4b — редактор ПЕРЕХОДОВ: строка «verb-бейдж · метка · → · след.шаг» (переносится на узком экране) */
.lk-field-stack { flex-direction: column; align-items: stretch; gap: 6px; }   /* секция во всю ширину (метка над) */
.lk-wf-opts { display: flex; flex-direction: column; gap: 8px; }
.lk-wf-opt-row { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.lk-wf-opt-verb { flex: none; min-width: 88px; text-align: center; }
.lk-wf-opt-label { flex: 1 1 120px; min-width: 100px; }
.lk-wf-opt-arrow { color: var(--lk-muted, #6b7280); font-weight: 700; flex: none; }
.lk-wf-opt-next { flex: 0 1 190px; min-width: 130px; }
/* §5.1 инкр.4c — ветка = карточка (левый акцент по verb) с 2 строками: (1) verb·метка·→·переход·🗑 (2) исход */
.lk-wf-opt-card { border: 1px solid var(--lk-border); border-left: 3px solid var(--lk-border); border-radius: var(--lk-radius); padding: 8px 10px; display: flex; flex-direction: column; gap: 6px; }
.lk-acc-green  { border-left-color: #10b981; }
.lk-acc-red    { border-left-color: #ef4444; }
.lk-acc-violet { border-left-color: #8b5cf6; }
.lk-acc-orange { border-left-color: #f59e0b; }
.lk-acc-blue   { border-left-color: #3b82f6; }
.lk-acc-gray   { border-left-color: #9ca3af; }
.lk-wf-opt-sel { flex: 0 1 150px; min-width: 110px; }
.lk-wf-opt-verb-sel { flex: 0 1 150px; min-width: 120px; font-weight: 600; }
.lk-wf-opt-effects { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; padding-left: 4px; }
.lk-wf-opt-eff-lbl { color: var(--lk-muted, #6b7280); font-size: 0.82rem; flex: none; }
.lk-wf-opt-doc { flex: 0 1 170px; min-width: 120px; }
.lk-wf-opt-warn { color: #b45309; font-size: 1.05rem; flex: none; cursor: help; }
/* §5.1 create-flow — форма создания шаблона: чек-лист документов (адаптивная сетка) + подсказка */
.lk-check-list { display: grid; grid-template-columns: repeat(auto-fill, minmax(210px, 1fr)); gap: 6px 14px; }
.lk-check-item { display: flex; align-items: center; gap: 8px; cursor: pointer; }
.lk-hint { color: var(--lk-muted, #6b7280); font-size: 0.85rem; }
/* item 7 — паспорт объекта (дескриптор на закладках): голова секции + список миксинов + code-таблицы */
.lk-passport-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; }
.lk-mixin-list { display: flex; flex-wrap: wrap; gap: 8px; }
.lk-empty-inline { color: var(--lk-muted, #6b7280); font-size: 0.9rem; margin: 4px 0; }
.lk-table-static td { vertical-align: top; }
.lk-table-static td:nth-child(2) { font-family: ui-monospace, "SFMono-Regular", Menlo, Consolas, monospace; font-size: 0.85rem; color: var(--lk-text); }
/* 1.1: сортируемые заголовки паспорта (static_table sortable=True) — кнопка во всю ячейку; клиентский остров
   lk-islands.js пере-упорядочивает УЖЕ отрисованные строки (презентационно, §«Условия контролируемости»).
   Стрелка = состояние aria-sort (WAI-ARIA). Без JS кнопка инертна (данные малы, читаемы без сортировки). */
.lk-table-sortable th { padding: 0; }
.lk-th-sort { display: inline-flex; align-items: center; width: 100%; box-sizing: border-box; margin: 0;
  padding: 10px 12px; background: none; border: 0; font: inherit; font-weight: 600; color: inherit;
  text-align: left; cursor: pointer; }
.lk-th-sort::after { content: "\2195"; margin-left: 5px; opacity: 0.4; font-size: 0.8em; font-weight: 400; }  /* ⇅ нейтральный аффорданс */
.lk-table-sortable th[aria-sort="ascending"]  .lk-th-sort::after { content: "\25B2"; opacity: 0.9; }  /* ▲ */
.lk-table-sortable th[aria-sort="descending"] .lk-th-sort::after { content: "\25BC"; opacity: 0.9; }  /* ▼ */
.lk-th-sort:hover { color: var(--lk-action-edit); }
.lk-th-sort:focus-visible { outline: 2px solid var(--lk-action-edit); outline-offset: -2px; }
.lk-notice { border-radius: var(--lk-radius); padding: 8px 12px; font-size: 0.9rem; border: 1px solid var(--lk-border); }
.lk-notice-ok { background: #e9f6ec; border-color: #b6ddc0; color: #1c6b34; }
.lk-notice-err { background: #fdecec; border-color: #f2c0c2; color: #a5282c; }
/* T-0466: третий тон нотиса — «проверить нечем». НЕ зелёный и не красный намеренно: подпись без отпечатка
   не является ни подтверждением целостности, ни тревогой, и цвет обязан это различать. */
.lk-notice-neutral { background: #f2f3f5; border-color: #d7dade; color: #4a4f57; }
.lk-profile-name { font-size: 1.15rem; font-weight: 700; color: var(--lk-text); }
/* T-0212: перс-данные /me КАРТОЧКАМИ-ВИДЖЕТАМИ (не таблица) — «мои реквизиты» с иконкой типа+значением+правкой.
   Адаптивная сетка: карточки в ряд на десктопе, одна колонка на мобильном (auto-fill minmax). */
.lk-pd-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: 12px; margin-bottom: 16px; }
.lk-pd-widget { display: flex; flex-direction: column; gap: 8px; padding: 14px 16px; border: 1px solid var(--lk-border);
  border-radius: 12px; background: var(--lk-surface, var(--lk-bg, #fff)); }
.lk-pd-w-head { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.lk-pd-w-ico { flex: none; display: inline-flex; align-items: center; justify-content: center; width: 2.2em; height: 2.2em;
  border-radius: 10px; color: var(--lk-brand); background: color-mix(in srgb, var(--lk-brand) 8%, transparent);
  --lk-icon-accent: color-mix(in srgb, var(--lk-brand) 22%, transparent); }   /* дуотон-подложка глифа реквизита */
.lk-pd-w-type { font-weight: 600; color: var(--lk-text); flex: 1 1 auto; min-width: 0; }
.lk-pd-w-primary { flex: none; margin-left: auto; }   /* узкая карточка (длинный «Bankverbindung»): бейдж переносится — прижат вправо, не слева */
.lk-pd-w-value { color: var(--lk-text); font-size: 1.05rem; line-height: 1.4; overflow-wrap: anywhere; }   /* адрес/IBAN переносится */
.lk-pd-w-foot { margin-top: auto; }
.lk-pd-w-foot .lk-pd-manage { display: inline-flex; align-items: center; gap: 6px; }
/* Д-4: таймлайн маршрута процесса (ProcessFlowVM) — упорядоченный список шагов-карточек с номером-маркером */
.lk-flow { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 12px; }
.lk-flow-step { gap: 6px; }
.lk-flow-step-head { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.lk-flow-step-num { flex: none; width: 1.7em; height: 1.7em; border-radius: 999px; background: var(--lk-navy);
  color: #fff; font-size: 0.85rem; font-weight: 700; display: inline-flex; align-items: center; justify-content: center; }
.lk-flow-step-head .lk-profile-name { font-size: 1rem; flex: 1 1 auto; }
/* owner 1.2: Ablauf = МАРШРУТ (google-maps): узел(кружок №) + левая полоса карточки + коннектор в зазоре — цвет по СОСТОЯНИЮ.
   passed=зелёный · current=жёлтый(amber) · planned/skipped=серый · rejected/cancelled=красный. */
/* owner (2026-07-12): БЕЗ межблокового коннектора — в rejected-потоке разноцветные сегменты зазоров читались
   «шахматкой». Карточки-статусы = ОТДЕЛЬНЫЕ скруглённые блоки (радиусы по ВСЕМ углам, дефолт .lk-card),
   состояние несёт ЛЕВАЯ полоса (6px) + цвет номера. auto_skipped (АВТОПРОХОД) = ЗЕЛЁНЫЙ (как passed). */
.lk-flow-step { border-left-width: 6px; }
.lk-flow-passed, .lk-flow-auto_skipped { border-left-color: var(--lk-action-create); }
.lk-flow-passed > .lk-flow-step-head > .lk-flow-step-num,
.lk-flow-auto_skipped > .lk-flow-step-head > .lk-flow-step-num { background: var(--lk-action-create); }
.lk-flow-current { border-left-color: var(--lk-action-mark); box-shadow: 0 0 0 1px var(--lk-action-mark) inset; }
.lk-flow-current > .lk-flow-step-head > .lk-flow-step-num { background: var(--lk-action-mark); color: var(--lk-text); }
.lk-flow-rejected, .lk-flow-cancelled { border-left-color: var(--lk-action-delete); }
.lk-flow-rejected > .lk-flow-step-head > .lk-flow-step-num,
.lk-flow-cancelled > .lk-flow-step-head > .lk-flow-step-num { background: var(--lk-action-delete); }
.lk-flow-planned, .lk-flow-skipped { border-left-color: var(--lk-border); }
.lk-flow-planned > .lk-flow-step-head > .lk-flow-step-num,
.lk-flow-skipped > .lk-flow-step-head > .lk-flow-step-num { background: var(--lk-muted); }
/* owner 1.3: История прошлых циклов согласования — свёрнутый <details> (CSP-safe, без JS) */
.lk-flow-history { margin-top: 16px; border-top: 1px solid var(--lk-border); padding-top: 12px; }
.lk-flow-history-summary { cursor: pointer; display: flex; align-items: center; gap: 8px; font-weight: 600;
  color: var(--lk-navy); padding: 4px 0; list-style: none; }
.lk-flow-history-summary::-webkit-details-marker { display: none; }
.lk-flow-history-summary::before { content: "▸"; color: var(--lk-muted); font-size: 0.8rem; }
.lk-flow-history[open] .lk-flow-history-summary::before { content: "▾"; }
.lk-flow-cycle { margin-top: 12px; padding: 12px; border: 1px solid var(--lk-border); border-radius: 8px;
  background: var(--lk-surface-2, rgba(0,0,0,0.02)); }
.lk-flow-cycle-head { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin-bottom: 8px; }
.lk-flow-cycle-title { font-weight: 600; flex: 1 1 auto; }
/* форма внутри карточки (смена пароля/язык): поля стекаются — метка над полем, input во всю ширину */
.lk-tabs .lk-form { max-width: 520px; }
.lk-tabs .lk-form .lk-field { flex-direction: column; align-items: stretch; gap: 4px; padding: 4px 0; border-bottom: 0; }
.lk-tabs .lk-form .lk-field-label { min-width: 0; }
.lk-form-hint { color: var(--lk-muted); font-size: 0.85rem; margin: 0 0 4px; }

/* ── CSS-only вкладки /me (radio + :checked, CSP-safe, БЕЗ JS) ─────────────────────────────────── */
.lk-tabs { position: relative; }
/* radio-триггеры sr-only, но фокусируемы (клавиатура: Tab→радио, стрелки листают) */
.lk-tab-radio { position: absolute; width: 1px; height: 1px; opacity: 0; margin: 0; }
.lk-tablist { display: flex; flex-wrap: wrap; gap: 2px; border-bottom: 1px solid var(--lk-border); margin-bottom: 20px; }
.lk-tab-label { display: inline-flex; align-items: center; gap: 6px; padding: 10px 16px; cursor: pointer;
                color: var(--lk-muted); font-weight: 600; font-size: 0.92rem; border-bottom: 2px solid transparent;
                margin-bottom: -1px; user-select: none; }
.lk-tab-label:hover { color: var(--lk-text); }
/* U4 (owner UI-аудит): счётчик записей на вкладке ТЧ «Sitzungen [N]» — приглушённый бейдж-пилюля. */
.lk-tab-count { font-size: 0.72rem; font-weight: 700; background: var(--lk-hover); color: var(--lk-muted);
                border-radius: 20px; padding: 1px 7px; line-height: 1.5; }
.lk-tab-panel { display: none; }
/* §UI-Kit lk.tabs — ПОЗИЦИОННЫЙ CSS-only toggle (radio:nth-of-type(N) ~ panel/label:nth-child(N)); работает
   для ЛЮБОГО набора закладок (до 8) без per-instance-правил. Радио — прямые сиблинги .tablist/.tab-panels. */
.lk-tab-radio:nth-of-type(1):checked ~ .lk-tab-panels > .lk-tab-panel:nth-child(1),
.lk-tab-radio:nth-of-type(2):checked ~ .lk-tab-panels > .lk-tab-panel:nth-child(2),
.lk-tab-radio:nth-of-type(3):checked ~ .lk-tab-panels > .lk-tab-panel:nth-child(3),
.lk-tab-radio:nth-of-type(4):checked ~ .lk-tab-panels > .lk-tab-panel:nth-child(4),
.lk-tab-radio:nth-of-type(5):checked ~ .lk-tab-panels > .lk-tab-panel:nth-child(5),
.lk-tab-radio:nth-of-type(6):checked ~ .lk-tab-panels > .lk-tab-panel:nth-child(6),
.lk-tab-radio:nth-of-type(7):checked ~ .lk-tab-panels > .lk-tab-panel:nth-child(7),
.lk-tab-radio:nth-of-type(8):checked ~ .lk-tab-panels > .lk-tab-panel:nth-child(8) { display: block; }
.lk-tab-radio:nth-of-type(1):checked ~ .lk-tablist > .lk-tab-label:nth-child(1),
.lk-tab-radio:nth-of-type(2):checked ~ .lk-tablist > .lk-tab-label:nth-child(2),
.lk-tab-radio:nth-of-type(3):checked ~ .lk-tablist > .lk-tab-label:nth-child(3),
.lk-tab-radio:nth-of-type(4):checked ~ .lk-tablist > .lk-tab-label:nth-child(4),
.lk-tab-radio:nth-of-type(5):checked ~ .lk-tablist > .lk-tab-label:nth-child(5),
.lk-tab-radio:nth-of-type(6):checked ~ .lk-tablist > .lk-tab-label:nth-child(6),
.lk-tab-radio:nth-of-type(7):checked ~ .lk-tablist > .lk-tab-label:nth-child(7),
.lk-tab-radio:nth-of-type(8):checked ~ .lk-tablist > .lk-tab-label:nth-child(8) { color: var(--lk-brand); border-bottom-color: var(--lk-brand); }
/* видимый фокус на активной вкладке (клавиатура) — та же позиционная схема */
.lk-tab-radio:nth-of-type(1):focus-visible ~ .lk-tablist > .lk-tab-label:nth-child(1),
.lk-tab-radio:nth-of-type(2):focus-visible ~ .lk-tablist > .lk-tab-label:nth-child(2),
.lk-tab-radio:nth-of-type(3):focus-visible ~ .lk-tablist > .lk-tab-label:nth-child(3),
.lk-tab-radio:nth-of-type(4):focus-visible ~ .lk-tablist > .lk-tab-label:nth-child(4),
.lk-tab-radio:nth-of-type(5):focus-visible ~ .lk-tablist > .lk-tab-label:nth-child(5),
.lk-tab-radio:nth-of-type(6):focus-visible ~ .lk-tablist > .lk-tab-label:nth-child(6),
.lk-tab-radio:nth-of-type(7):focus-visible ~ .lk-tablist > .lk-tab-label:nth-child(7),
.lk-tab-radio:nth-of-type(8):focus-visible ~ .lk-tablist > .lk-tab-label:nth-child(8) { outline: 2px solid var(--lk-brand); outline-offset: 2px; border-radius: 4px; }

/* группа радио (выбор языка) */
.lk-radio-group { display: flex; flex-direction: column; gap: 4px; margin: 4px 0 12px; }
.lk-radio-row { display: flex; align-items: center; gap: 10px; padding: 8px 10px; border: 1px solid var(--lk-border);
                border-radius: var(--lk-radius); cursor: pointer; color: var(--lk-text); }
.lk-radio-row:hover { border-color: var(--lk-brand); }
.lk-radio { accent-color: var(--lk-brand); width: 16px; height: 16px; }

/* Слой 0 — экран НАЗНАЧЕНИЯ связей (universal junction-редактор): toggle-список владелец↔цели (no-JS) */
.lk-assign-list { display: flex; flex-direction: column; }
/* Admin-9: строка-назначение — метка усекается (ellipsis), бейдж/кнопка НЕ сжимаются (не обрезаются на узком) */
.lk-assign-row { display: flex; align-items: center; gap: 12px; padding: 9px 0; border-bottom: 1px solid var(--lk-border); }
.lk-assign-row:last-child { border-bottom: 0; }
.lk-assign-main { flex: 1 1 auto; min-width: 0; overflow: hidden; }
.lk-assign-label { font-weight: 600; color: var(--lk-text); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.lk-assign-sub { color: var(--lk-muted); font-size: 0.8rem; margin-left: 8px; }
.lk-assign-row > .lk-badge { flex-shrink: 0; }
.lk-assign-form { display: inline-flex; margin: 0; flex-shrink: 0; }
/* T-UI-2 (БЛОК 15): headed-таблица назначения — ячейки по центру-вертикали, Status центр, Aktion вправо.
   Метка больше НЕ усекается (в ячейке места достаточно; узко → гориз.скролл .lk-table-wrap). */
.lk-table-assign td { vertical-align: middle; }
.lk-table-assign .lk-assign-main { overflow: visible; }
.lk-table-assign .lk-assign-label { white-space: normal; overflow: visible; }
.lk-assign-status { text-align: center; white-space: nowrap; }
.lk-assign-action { text-align: right; white-space: nowrap; }
/* §2.1 — матрица прав роли: цель гранта выделена + чипы-действия (toggle) */
.lk-perm-target { font-weight: 600; color: var(--lk-navy); }
.lk-perm-chips { display: flex; flex-wrap: wrap; gap: 5px; }
.lk-perm-chipform { display: inline-flex; margin: 0; }
.lk-perm-chip { font-size: 0.72rem; padding: 3px 9px; border-radius: 999px; border: 1px solid var(--lk-border);
  background: var(--lk-surface); color: var(--lk-muted); cursor: pointer; line-height: 1.5; white-space: nowrap; }
.lk-perm-on { background: color-mix(in srgb, var(--lk-success) 15%, transparent); border-color: var(--lk-success);
  color: var(--lk-success); font-weight: 700; }
.lk-perm-off:hover { border-color: var(--lk-brand); color: var(--lk-brand); }
.lk-perm-on:hover { filter: brightness(0.95); }
.lk-perm-ro, .lk-perm-ro:hover { cursor: default; border-color: var(--lk-border); color: var(--lk-muted); filter: none; }


/* §5.1(b): read-only таблица шагов маршрута согласования (Routenschritte) */
.lk-mini-table { width: 100%; border-collapse: collapse; font-size: 0.92rem; }
.lk-mini-table th { text-align: left; padding: 4px 14px 6px 0; border-bottom: 2px solid var(--lk-border); color: var(--lk-muted); font-weight: 600; white-space: nowrap; }
.lk-mini-table td { padding: 8px 14px 8px 0; border-bottom: 1px solid var(--lk-border); vertical-align: top; }
.lk-mini-table tr:last-child td { border-bottom: none; }
.lk-mini-table th:first-child, .lk-mini-table td:first-child { width: 2.5rem; text-align: center; color: var(--lk-muted); }

/* ── T-0552: ЛЕСЕНКА ШИРИН КОЛОНКИ. Ширина объявлена дескриптором поля и приезжает КЛАССОМ на <col>:
      инлайн-стиль запрещён политикой безопасности (style-src 'self'), поэтому свободного значения тут быть
      не может. Словарь допустимых значений — ЯДРО (schema.COLUMN_WIDTHS); каждое его значение обязано иметь
      правило ЗДЕСЬ, и парность в ОБЕ стороны держит lint_column_appearance. ── */
.lk-col-w-32px  { width: 32px; }
.lk-col-w-80px  { width: 80px; }
.lk-col-w-120px { width: 120px; }
.lk-col-w-130px { width: 130px; }
.lk-col-w-160px { width: 160px; }
.lk-col-w-5rem  { width: 5rem; }
.lk-col-w-6rem  { width: 6rem; }
.lk-col-w-7rem  { width: 7rem; }
.lk-col-w-8rem  { width: 8rem; }
.lk-col-w-9rem  { width: 9rem; }
.lk-col-w-10rem { width: 10rem; }
.lk-col-w-12rem { width: 12rem; }
.lk-col-w-14rem { width: 14rem; }
.lk-col-w-16rem { width: 16rem; }
.lk-col-w-20rem { width: 20rem; }

/* Глиф ПОЛЯ в шапке колонки (appearance.icon дескриптора) — декоративный, смысл несёт метка рядом. */
.lk-th-ico { width: 14px; height: 14px; vertical-align: -2px; opacity: 0.75; margin-right: 5px; }

/* Глиф ЗНАЧЕНИЯ в ячейке списка (иконка опции перечисления / icon_map булева признака) — перед текстом. */
.lk-cell-ico { width: 15px; height: 15px; flex: 0 0 auto; }
/* Глиф и текст — ОДНА строка. Без этого svg внутри пилюли-бейджа уезжал на вторую строку: у бейджа
   inline-block, и глиф с меткой переносились друг под друга. Обёртка держит их в ряд, не трогая бейджи
   без глифа (класс появляется только вместе с ним). */
.lk-cell-val, .lk-badge-inner { display: inline-flex; align-items: center; gap: 5px; white-space: nowrap; }

/* T-0552: «прятать на узком экране» — объявление display.hidden_xs дескриптора. Одно правило на обе
   поверхности: колонка списка (th+td вместе, иначе шапка разъедется с телом) и поле детали/формы. */
@media (max-width: 640px) { .lk-xs-hide { display: none !important; } }

/* T-3313 K1 — налоговая сводка счёта по ставкам (§ 14 Abs. 4 Nr. 8 UStG). Разбивка обязана читаться
   и на бумаге: печатная форма берёт тот же .lk-table, поэтому здесь только то, чего у таблицы нет —
   основание освобождения рядом со своей ставкой и выделенный итог к оплате. */
.lk-tax-summary { max-width: 32rem; margin-left: auto; }
.lk-tax-note { display: block; font-size: 0.8rem; color: var(--lk-muted); }
.lk-tax-gross .lk-td { font-weight: 700; border-top: 2px solid var(--lk-border); }

/* T-5044 K3 — АДРЕСНЫЙ БЛОК DIN 5008. Числа здесь не декоративные: норма фиксирует геометрию, чтобы
   поле получателя попадало в окно конверта. Обратный адрес — одной строкой 8 pt над полем; поле
   получателя — 85 мм шириной и 27,3 мм высотой. Поэтому размеры в МИЛЛИМЕТРАХ, а не в rem: rem
   зависит от шрифта читателя, а конверт — нет. */
.lk-addr-block { max-width: 85mm; }
.lk-addr-return { font-size: 8pt; border-bottom: 1px solid var(--lk-border);
                  padding-bottom: 1mm; margin-bottom: 2mm; color: var(--lk-muted); }
.lk-addr-recipient { min-height: 27.3mm; line-height: 1.35; }
.lk-addr-name { font-weight: 600; }
.lk-addr-sender-detail { margin-top: 6mm; font-size: 0.85rem; color: var(--lk-muted); }
.lk-addr-meta { font-size: 0.85rem; color: var(--lk-muted); }

/* T-5044 K4 — УСЛОВИЯ ОПЛАТЫ. Метка ‖ значение в две колонки: подпись и величина обязаны читаться
   парой, иначе IBAN и срок склеиваются в строку, которую глазом не разобрать. */
.lk-payment-terms { max-width: 32rem; }
.lk-pay-grid { display: grid; grid-template-columns: max-content 1fr; gap: 0.25rem 1rem; }
.lk-pay-label { color: var(--lk-muted); }
.lk-pay-value { font-variant-numeric: tabular-nums; }
.lk-pay-note { margin-top: 0.5rem; color: var(--lk-muted); }
