/* Фирменная тема First Recycling (docs/CRM-REDESIGN.md). Палитры primary и gray - в AdminPanelProvider, здесь то, чего палитрой не задать. */
:root { --td-brand-dark: #0E3B22; --td-accent: #51AF2F; --td-field-line: #86948C; --td-link: #1D6B3E; }
.dark { --td-link: var(--primary-300); }

/* Логотип: тёмный на светлом, белый в тёмной теме. */
.td-logo { height: 100%; width: auto; max-width: 100%; }
.td-logo-light, .dark .td-logo-dark { display: none; }
.dark .td-logo-light { display: block; }

/* Боковое меню на фоне страницы; подписи групп - зелёный капс, как надписи над заголовками в презентации, активный пункт - мятная подложка и полоска бренда. */
.fi-sidebar, .fi-sidebar .fi-sidebar-header { background-color: var(--gray-50); }
.fi-sidebar { border-inline-end: 1px solid var(--gray-200); }
.dark .fi-sidebar { border-color: rgb(255 255 255 / .1); }
.dark .fi-sidebar, .dark .fi-sidebar .fi-sidebar-header { background-color: var(--gray-950); }
.fi-sidebar .fi-sidebar-group-label { color: var(--td-link); font-size: .75rem; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; }
.fi-sidebar .fi-sidebar-group-btn .fi-icon { color: var(--td-link); }
.fi-sidebar .fi-sidebar-item-btn > .fi-icon { color: var(--td-link); }
.fi-sidebar .fi-sidebar-item-btn:hover, .fi-sidebar .fi-sidebar-item-btn:focus-visible,
.fi-sidebar .fi-sidebar-item.fi-sidebar-item-has-url > .fi-sidebar-item-btn:hover { background-color: var(--primary-50); }
.fi-sidebar .fi-sidebar-item.fi-active > .fi-sidebar-item-btn { background-color: var(--primary-100); box-shadow: inset 3px 0 0 var(--td-accent); }
.fi-sidebar .fi-sidebar-item.fi-active > .fi-sidebar-item-btn > .fi-sidebar-item-label { color: var(--primary-600); font-weight: 700; }
.fi-sidebar .fi-sidebar-item.fi-active > .fi-sidebar-item-btn > .fi-icon { color: var(--td-accent); }
.dark .fi-sidebar .fi-sidebar-item-btn:hover, .dark .fi-sidebar .fi-sidebar-item.fi-active > .fi-sidebar-item-btn { background-color: rgb(255 255 255 / .06); }
.dark .fi-sidebar .fi-sidebar-item.fi-active > .fi-sidebar-item-btn > .fi-sidebar-item-label { color: #fff; }

/* Вход: зелёная полоса бренда сверху, карточка входа поверх. */
.fi-simple-layout { background: linear-gradient(180deg, var(--td-brand-dark) 0 16rem, var(--gray-50) 16rem); }
.dark .fi-simple-layout { background: linear-gradient(180deg, var(--td-brand-dark) 0 16rem, var(--gray-950) 16rem); }

/* Карточки плоские, с тонкой рамкой бренда вместо тени. */
.fi-section:not(.fi-section-not-contained), .fi-ta-ctn, .fi-wi-stats-overview-stat, .fi-ta-record {
    --tw-shadow: 0 0 #0000; --tw-ring-color: var(--gray-200);
}
.dark .fi-section:not(.fi-section-not-contained), .dark .fi-ta-ctn, .dark .fi-wi-stats-overview-stat, .dark .fi-ta-record { --tw-ring-color: rgb(255 255 255 / .1); }

/* Рамка полей заметна на белом (контраст 3:1); при фокусе и ошибке Filament красит её сам. */
.fi-input-wrp:not(.fi-invalid):not(:focus-within):not(.fi-disabled) { --tw-ring-color: var(--td-field-line); }
.dark .fi-input-wrp:not(.fi-invalid):not(:focus-within):not(.fi-disabled) { --tw-ring-color: rgb(255 255 255 / .25); }

/* Сведения карточки полосой сверху (InfoHeader): плотнее строки, подпись мельче значения. */
.td-info .fi-sc { row-gap: .9rem; column-gap: 1.5rem; }
.td-info .fi-in-entry-label, .td-info .fi-in-entry .fi-in-entry-label-ctn { font-size: .78rem; color: var(--gray-600); font-weight: 500; }

/* Видимый фокус с клавиатуры. */
.fi-btn:focus-visible, .fi-icon-btn:focus-visible, .fi-link:focus-visible, .fi-sidebar-item-btn:focus-visible, .fi-tabs-item:focus-visible {
    outline: 3px solid var(--td-accent); outline-offset: 2px;
}

/* Кнопки в карточках списка переносятся на новую строку, а не вылезают за край карточки. */
.fi-ta-record .fi-ta-actions { flex-wrap: wrap; }
.fi-ta-record .fi-ta-actions .fi-ac-new-line { flex-basis: 100%; justify-content: flex-start; }

/* Партия лежит дольше 7 / 30 дней - полоска слева на карточке. */
.fi-ta-record.td-age-warning, .td-card.td-age-warning { border-left: 4px solid var(--warning-500); }
.fi-ta-record.td-age-danger, .td-card.td-age-danger { border-left: 4px solid var(--danger-500); }

/* Карточки «Ждут приёмки»: утилит Tailwind в собранном CSS Filament нет, поэтому свои классы. */
.td-cards { display: grid; gap: .75rem; grid-template-columns: repeat(auto-fill, minmax(15rem, 1fr)); }
.td-card { display: flex; flex-direction: column; gap: .25rem; padding: .75rem; border: 1px solid var(--gray-200); border-radius: .75rem; color: inherit; text-decoration: none; }
.dark .td-card { border-color: var(--gray-700); }
.td-card:hover { border-color: var(--primary-500); }
.td-card-head { display: flex; justify-content: space-between; align-items: center; gap: .5rem; font-weight: 600; }
.td-muted { color: var(--gray-500); font-size: .875rem; }
.td-muted.td-text-warning { color: var(--warning-600); }
.td-muted.td-text-danger { color: var(--danger-600); }

/* Просмотр фото партии: на телефоне кнопки листания уходят под фото и становятся крупнее. */
.td-gallery-counter { text-align: center; margin-bottom: .5rem; }
.td-gallery-stage { display: flex; align-items: center; gap: .5rem; }
.td-gallery-img { flex: 1; min-width: 0; max-width: 100%; max-height: 70vh; object-fit: contain; margin: 0 auto; border-radius: .5rem; }
.td-gallery-nav { flex: none; min-height: 44px; min-width: 44px; padding: .5rem .75rem; border: 1px solid var(--gray-300); border-radius: .5rem; background: transparent; color: inherit; font-weight: 600; }
.dark .td-gallery-nav { border-color: var(--gray-600); }
.td-gallery-nav:disabled { opacity: .35; cursor: default; }
.td-gallery-meta { display: flex; flex-direction: column; gap: .25rem; margin-top: .75rem; font-size: .875rem; overflow-wrap: anywhere; }
.td-gallery-badge { display: inline-block; padding: 0 .5rem; border-radius: .375rem; background: var(--gray-100); font-weight: 600; }
.dark .td-gallery-badge { background: var(--gray-800); }
.td-gallery-links { display: flex; flex-wrap: wrap; gap: 1rem; margin-top: .25rem; }
.td-gallery-links a { color: var(--primary-600); text-decoration: underline; }
@media (max-width: 640px) {
    .td-gallery-stage { flex-wrap: wrap; }
    .td-gallery-img { order: 1; flex-basis: 100%; }
    .td-gallery-nav { order: 2; flex: 1; min-height: 48px; }
}

/* «Подробнее» у строки разборки: заходы и план-факт блоками строк, чтобы на телефоне не было прокрутки вбок. */
.td-details { display: flex; flex-direction: column; gap: .5rem; padding-top: .5rem; font-size: .875rem; overflow-wrap: anywhere; }
.td-details-title { font-weight: 600; margin-top: .25rem; }
.td-portion { display: flex; flex-direction: column; gap: .125rem; padding: .5rem; border: 1px solid var(--gray-200); border-radius: .5rem; }
.dark .td-portion { border-color: var(--gray-700); }
.td-portion-head { font-weight: 600; }
.td-portion-cancelled { color: var(--gray-500); text-decoration: line-through; }
.td-portion-cancel { text-decoration: none; display: inline-block; color: var(--gray-500); }
.td-text-danger { color: var(--danger-600); }
.td-text-warning { color: var(--warning-600); }
.td-files { display: flex; flex-wrap: wrap; gap: .5rem; align-items: flex-start; }
.td-file { display: flex; flex-direction: column; gap: .125rem; max-width: 100%; overflow-wrap: anywhere; }
.td-file-thumb { width: 4rem; height: 4rem; object-fit: cover; border-radius: .375rem; }
.td-file-photo { background: none; border: 0; padding: 0; cursor: zoom-in; align-self: flex-start; }
.td-file-link { color: var(--primary-600); text-decoration: underline; }
.td-portion-review { text-decoration: none; display: inline-flex; }

/* Телефон: кнопки действий не ниже 40 px и не жмутся друг к другу (в карточках они были текстовыми по 20 px). */
@media (max-width: 640px) {
    .fi-main .fi-ac-btn-action, .fi-modal .fi-btn { min-height: 40px; }
    .fi-ta-record .fi-ta-actions { gap: .5rem .625rem; }
    .fi-ta-record .fi-ac-link-action {
        display: inline-flex; align-items: center; justify-content: center; min-height: 40px; padding: .5rem .875rem;
        border: 1px solid currentColor; border-radius: .5rem; text-decoration: none;
    }
    /* «Принять» - сплошная зелёная, «На переразбор» - красный контур: рядом их не спутать. */
    .fi-ta-record .fi-ac-link-action.td-accept { background: var(--success-600); border-color: var(--success-600); color: #fff; }
    .dark .fi-ta-record .fi-ac-link-action.td-accept { background: var(--success-500); border-color: var(--success-500); }
    .fi-topbar .fi-icon-btn, .fi-topbar .fi-user-menu-trigger { min-width: 44px; min-height: 44px; }
    .td-link { display: inline-flex; align-items: center; min-height: 40px; }
    /* Шапка группы в окне («Экспериментальное оборудование…» + «Отметить все» + свёртка) не помещалась и выталкивала кнопку
       за окно на 8 px - внизу окна была горизонтальная полоса. Кнопки переносятся на вторую строку. */
    .fi-modal .fi-section-header { flex-wrap: wrap; row-gap: .25rem; }
}

/* Итог «Выбрано: N» в длинных окнах остаётся на виду, пока список прокручивается под ним. Липнет «дедушка» блока: его собственная обёртка ниже одной строки, и липкость не работала бы. */
*:has(> * > .td-sticky-summary) { position: sticky; top: 0; z-index: 5; padding: .375rem 0; background: #fff; border-bottom: 1px solid var(--gray-200); }
.dark *:has(> * > .td-sticky-summary) { background: var(--gray-900); border-bottom-color: var(--gray-700); }

/* Ряд ссылок к вкладкам карточки: переносится на вторую строку, чтобы все ссылки были на виду. */
.td-jumps { display: flex; flex-wrap: wrap; gap: .5rem; }
.td-jump { flex: none; min-height: 40px; padding: .375rem .875rem; border: 1px solid var(--gray-300); border-radius: 999px; background: transparent; color: var(--primary-600); font-size: .875rem; font-weight: 500; white-space: nowrap; cursor: pointer; }
.td-jump:hover { border-color: var(--primary-500); }
.dark .td-jump { border-color: var(--gray-600); color: var(--primary-400); }

/* Склад временного хранения: панель выбранных партий закреплена внизу экрана, кнопка запуска всегда под рукой. */
.td-raw-stock { padding-bottom: 5.5rem; }
.td-raw-stock .fi-ta-selection-indicator {
    position: fixed; bottom: .75rem; left: 50%; transform: translateX(-50%); z-index: 30;
    width: min(44rem, calc(100% - 1.5rem)); box-sizing: border-box;
    display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: .5rem .75rem;
    padding: .625rem .875rem; border: 1px solid var(--gray-300); border-radius: .75rem;
    background: #fff; box-shadow: 0 8px 24px rgb(0 0 0 / .18);
}
.dark .td-raw-stock .fi-ta-selection-indicator { background: var(--gray-900); border-color: var(--gray-700); }
.td-raw-stock .fi-ta-selection-indicator[hidden], .td-raw-stock .fi-ta-selection-indicator[style*="display: none"] { display: none; }
/* Свой счётчик «Выбрано: N» вместо «Выбрано N записей». */
.td-raw-stock .fi-ta-selection-indicator > div:first-child { display: none; }
.td-raw-stock .fi-ta-selection-indicator > div:last-child { display: flex; flex-wrap: wrap; align-items: center; gap: .5rem .75rem; flex: 1 1 auto; justify-content: space-between; }
.td-raw-stock .td-bulk-start { display: none !important; }
.td-pick-summary { font-size: .875rem; }
.td-pick-start {
    min-height: 40px; padding: .5rem 1rem; border-radius: .5rem; border: 0; cursor: pointer;
    background: var(--primary-600); color: #fff; font-weight: 600; font-size: .9375rem;
}
.td-pick-start:hover { background: var(--primary-500); }

/* Окно «Заходы» отчёта «Выработка». */
.td-portions { display: flex; flex-direction: column; gap: .5rem; font-size: .875rem; overflow-wrap: anywhere; }
.td-link { color: var(--primary-600); text-decoration: underline; }
.dark .td-link { color: var(--primary-400); }

/* Окно «Мои фильтры». */
.td-saved { display: flex; flex-direction: column; gap: .75rem; }
.td-saved-new, .td-saved-line { display: flex; flex-wrap: wrap; align-items: center; gap: .5rem; }
.td-saved-input { flex: 1 1 12rem; min-width: 0; }
.td-saved-apply { flex: 1 1 10rem; justify-content: flex-start; text-align: left; min-height: 40px; }
.td-saved-empty { font-size: .875rem; color: var(--gray-500); }
.td-saved button { min-height: 40px; }
/* Метка набора на кнопке: длинное имя обрезается, строку поиска не раздвигает (полное имя - в title). */
.td-saved-btn { max-width: 100%; }
.td-saved-btn .fi-badge { max-width: min(14rem, 45vw); min-width: 0; }
.td-saved-btn .fi-badge-label-ctn, .td-saved-btn .fi-badge-label { display: block; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

/* Подробное пояснение окна под «Как считается»: коротко видно сразу, остальное по клику. */
.td-more { margin-top: .35rem; }
.td-more > summary { cursor: pointer; color: var(--td-link); font-weight: 600; min-height: 32px; display: inline-flex; align-items: center; }

/* Мелкая ссылка под значением в строке таблицы («История партии»): видно, что это ссылка. */
.td-link-sm { font-size: .8rem; font-weight: 500; color: var(--td-link); text-decoration: underline; text-underline-offset: 2px; }

/* Таблицы отчётов (DataTable): числа справа, итог жирным; на телефоне строка - карточка «подпись: значение». */
.td-table-wrap { overflow-x: auto; }
.td-table { width: 100%; border-collapse: collapse; font-size: .9rem; }
.td-table th { text-align: left; font-size: .78rem; font-weight: 600; color: var(--gray-600); padding: .5rem .75rem; border-bottom: 1px solid var(--gray-200); white-space: nowrap; }
.td-table td { padding: .55rem .75rem; border-bottom: 1px solid var(--gray-200); vertical-align: top; }
.td-table .td-num { text-align: right; white-space: nowrap; font-variant-numeric: tabular-nums; }
.td-table tbody tr:hover { background: var(--primary-50); }
.td-table tfoot td { font-weight: 700; border-bottom: 0; border-top: 2px solid var(--gray-300); }
.td-table .td-tone-success { color: var(--success-700); }
.td-table .td-tone-danger { color: var(--danger-600); }
.td-table tr.td-tone-muted td, .td-table td.td-tone-muted { color: var(--gray-500); font-size: .82rem; }
.td-table tr.td-tone-strong td { font-weight: 700; }
.td-table-empty { color: var(--gray-500); }
.dark .td-table th, .dark .td-table td { border-color: rgb(255 255 255 / .1); }
.dark .td-table tbody tr:hover { background: rgb(255 255 255 / .04); }
@media (max-width: 640px) {
    .td-table thead { display: none; }
    .td-table tr { display: block; padding: .5rem 0; border-bottom: 1px solid var(--gray-200); }
    .td-table td { display: flex; justify-content: space-between; gap: 1rem; border: 0; padding: .15rem 0; text-align: right; }
    .td-table td::before { content: attr(data-label); color: var(--gray-600); font-size: .78rem; text-align: left; }
    .td-table td:first-child { font-weight: 600; }
}
.td-table .td-tone-warning { color: var(--warning-700); }

/* Таблица на телефоне (stackedOnMobile): строка - карточка, подпись и значение в одну строку, пустые поля скрыты. */
@media (max-width: 639px) {
    .fi-ta-table-stacked-on-mobile td.fi-ta-cell { display: flex; justify-content: space-between; align-items: baseline; gap: 1rem; padding-block: .2rem; }
    .fi-ta-table-stacked-on-mobile td.fi-ta-cell > .fi-ta-cell-label { flex: none; font-size: .78rem; color: var(--gray-600); }
    .fi-ta-table-stacked-on-mobile td.fi-ta-cell > .fi-ta-cell-content { min-width: 0; text-align: right; }
    .fi-ta-table-stacked-on-mobile td.fi-ta-cell > .fi-ta-cell-content .fi-ta-text { align-items: flex-end; }
    .fi-ta-table-stacked-on-mobile td.fi-ta-cell:has(.fi-ta-text):not(:has(.fi-ta-text-item)) { display: none; }
}

/* Полоса главных цифр карточки (KeyFigures): число крупно, подпись мелко; на телефоне по 2 в ряд. */
/* Заголовок с полосой цифр занимает всю ширину рядом с кнопками, иначе Filament сжимает его по тексту. */
.fi-header:has(.td-kpis) > div:first-child { flex: 1 1 auto; min-width: 0; }
.td-kpis { display: grid; grid-template-columns: repeat(auto-fit, minmax(9.5rem, 1fr)); gap: .75rem; margin-top: .75rem; }
.td-kpi { background: #fff; border: 1px solid var(--gray-200); border-radius: .75rem; padding: .6rem .85rem; }
.dark .td-kpi { background: rgb(255 255 255 / .04); border-color: rgb(255 255 255 / .1); }
.td-kpi-label { font-size: .75rem; color: var(--gray-600); }
.td-kpi-value { font-size: 1.35rem; font-weight: 800; line-height: 1.25; color: var(--gray-900); font-variant-numeric: tabular-nums; }
.dark .td-kpi-value { color: #fff; }
.td-kpi-hint { font-size: .75rem; color: var(--gray-500); }
.td-kpi-success .td-kpi-value { color: var(--success-700); }
.td-kpi-danger .td-kpi-value { color: var(--danger-600); }
.td-kpi-warning .td-kpi-value { color: var(--warning-700); }
@media (max-width: 640px) { .td-kpis { grid-template-columns: repeat(2, 1fr); gap: .5rem; } .td-kpi-value { font-size: 1.1rem; } }

/* Чек-лист «Закрытие партии»: крестик - что мешает, галочка - можно закрыть. */
.td-check { list-style: none; margin: 0; padding: 0; display: grid; gap: .45rem; }
.td-check li { position: relative; padding-left: 1.6rem; line-height: 1.45; }
.td-check li::before { position: absolute; left: 0; top: 0; width: 1.15rem; height: 1.15rem; border-radius: 999px; display: grid; place-items: center; font-size: .7rem; font-weight: 800; }
.td-check-no::before { content: '✕'; background: var(--warning-100); color: var(--warning-700); }
.td-check-ok { color: var(--success-700); font-weight: 600; }
.td-check-ok::before { content: '✓'; background: var(--success-100); color: var(--success-700); }

/* Полоса «факт / план» в таблице выхода по материалам. */
.td-bar { display: inline-block; width: 6rem; height: .45rem; border-radius: 999px; background: var(--gray-200); overflow: hidden; vertical-align: middle; }
.td-bar > span { display: block; height: 100%; background: var(--td-accent); }
.td-bar-warning > span { background: var(--warning-500); }
.td-bar-danger > span { background: var(--danger-500); }

/* Телефон: кнопки шапки карточки (главная, частые, «⋯») - панелью внизу экрана, всегда под пальцем. */
@media (max-width: 640px) {
    .fi-resource-view-record-page .fi-header-actions-ctn {
        position: fixed; left: 0; right: 0; bottom: 0; z-index: 25;
        padding: .6rem .75rem calc(.6rem + env(safe-area-inset-bottom));
        background: rgb(255 255 255 / .96); border-top: 1px solid var(--gray-200); box-shadow: 0 -4px 16px rgb(16 32 26 / .08);
    }
    .dark .fi-resource-view-record-page .fi-header-actions-ctn { background: rgb(8 18 14 / .96); border-color: rgb(255 255 255 / .1); }
    .fi-resource-view-record-page .fi-header-actions-ctn > .fi-ac { flex-wrap: nowrap; overflow-x: auto; gap: .5rem; }
    .fi-resource-view-record-page .fi-header-actions-ctn > .fi-ac > .fi-btn { white-space: nowrap; }
    .fi-resource-view-record-page .fi-header-actions-ctn > .fi-ac > .fi-btn:not(.fi-outlined) { flex: 1 0 auto; }
    .fi-resource-view-record-page { padding-bottom: 5rem; }
}

/* Кнопка действия в строке таблицы («Принять партию», «Внести выход»). */
.td-row-btn { display: inline-flex; align-items: center; min-height: 34px; padding: .3rem .75rem; border-radius: .5rem; background: var(--primary-600); color: #fff; font-size: .85rem; font-weight: 600; text-decoration: none; white-space: nowrap; }
.td-row-btn:hover { background: var(--primary-500); }
.td-row-btn-secondary { background: transparent; color: var(--td-link); box-shadow: inset 0 0 0 1px var(--gray-300); }
.td-row-btn-secondary:hover { background: var(--primary-50); }
@media (max-width: 640px) { .td-row-btn { min-height: 40px; } }

/* Партия строгой отчётности (Production\StrictReporting): рамка слева, как у подсветки возраста, но другого цвета. */
.fi-ta-record.td-strict, .td-card.td-strict { border-left: 4px solid var(--strict-500); }
