/* v3_1_10: targeted theme bridge.
   Purpose: connect known legacy blocks to design-builder color variables.
   Scope: color/background/border/shadow only. No layout, grid, width, height, PDF/Excel or order logic changes. */

/* Flash messages */
.flash {
  background: var(--section-bg);
  color: var(--text);
  border-color: var(--line);
}
.flash-wrap .flash {
  box-shadow: 0 10px 28px rgba(20, 16, 14, .06);
}

/* Filters and order list */
.filters-card,
.catalog-filter,
.bulk-column-filter,
.action-log-filters {
  background: var(--panel);
  color: var(--text);
  border-color: var(--line);
}
.filters-card label,
.catalog-filter label,
.bulk-column-filter label {
  color: var(--text);
}
.filters-card input,
.filters-card select,
.catalog-filter input,
.catalog-filter select,
.bulk-column-filter input,
.bulk-column-filter select {
  background: var(--field-bg);
  color: var(--text);
  border-color: var(--line);
}
.filters-card input::placeholder,
.catalog-filter input::placeholder {
  color: var(--muted);
}

/* Status pills: list of orders, dashboard and order cards */
.status,
.readonly-status,
.entity-status-v90 {
  background: var(--section-bg);
  color: var(--accent-dark);
  border-color: var(--line);
}
.technical-image-order-card img,
.current-image-preview-v76{
  background: var(--section-bg);
  border-color: var(--line);
}

/* Order form select/manual widgets */
.select-manual-widget,
.select-double-manual-widget-v74 {
  color: var(--text);
}
.select-manual-mode,
.select-manual-widget label.select-manual-mode,
.select-double-manual-widget-v74 .select-manual-mode {
  background: var(--field-bg);
  color: var(--text);
  border-color: var(--line);
}
.select-manual-mode:has(input:checked),
.select-double-manual-widget-v74 .select-manual-mode:has(input:checked) {
  background: var(--section-bg);
  color: var(--text);
  border-color: var(--dark);
}
.select-manual-widget select,
.select-manual-widget input,
.select-double-manual-widget-v74 select,
.select-double-manual-widget-v74 input:not([type="radio"]) {
  background: var(--field-bg);
  color: var(--text);
  border-color: var(--line);
}

/* v3_1_11: targeted theme bridge pass 2 based on screenshots.
   Scope: color/background/border/shadow only. No layout, sizing, grid, PDF/Excel, storage or order logic changes. */

/* Order view: first/top information section */
.order-view-page-v78 .order-top-horizontal-v79,
.order-view-page-v78 .order-side-card-v78,
.order-view-page-v78 .order-summary-card-v70,
.order-view-page-v78 .order-status-card-v70,
.order-view-page-v78 .order-reference-card-v70 {
  background: var(--section-bg);
  color: var(--text);
  border-color: var(--line);
}
.order-view-page-v78 .order-meta-grid-v70,
.order-view-page-v78 .order-meta-grid-v70 dt,
.order-view-page-v78 .order-meta-grid-v70 dd,
.order-view-page-v78 .order-value-row-v70,
.order-view-page-v78 .order-value-name-v70,
.order-view-page-v78 .order-value-content-v70 {
  border-color: var(--line);
  color: var(--text);
}
.order-view-page-v78 .order-meta-grid-v70 dt,
.order-view-page-v78 .order-value-name-v70 {
  background: color-mix(in srgb, var(--field-bg) 82%, var(--section-bg));
  color: var(--muted);
}
.order-view-page-v78 .order-meta-grid-v70 dd,
.order-view-page-v78 .order-value-content-v70,
.order-view-page-v78 .order-status-card-v70 select {
  background: var(--field-bg);
  color: var(--text);
  border-color: var(--line);
}
.order-view-page-v78 .order-reference-image-card,
.order-view-page-v78 .image-view-button,
.order-view-page-v78 .order-reference-image-card img {
  background: var(--field-bg);
  color: var(--text);
  border-color: var(--line);
}
.order-view-page-v78 .order-file-links-v70 .button,
.order-view-page-v78 .order-status-card-v70 .button:not(.primary) {
  background: var(--button-secondary-bg);
  color: var(--button-secondary-text);
  border-color: var(--line);
}

/* (Удалён мёртвый блок кнопок .jit-product-card-admin — классов нет в шаблонах.) */

/* Product/order image upload internals: empty boxes, dropzones, file cards. */
.photo-upload-section,
.product-form .photo-upload-section,
.order-form-page-v78 .photo-upload-section,
.current-photo,
.small-current-photo,
.current-image-preview-v74,
.current-image-preview-v76,
.compact-file-control-v76,
.existing-file {
  background: var(--section-bg);
  color: var(--text);
  border-color: var(--line);
}
.dropzone,
.product-form .dropzone,
.order-form-page-v78 .dropzone,
.compact-dropzone,
.product-form .compact-dropzone,
.extra-photos-grid .dropzone,
.extra-photos-grid .compact-dropzone {
  background: var(--field-bg);
  background-image: none;
  color: var(--text);
  border-color: var(--line);
}
.dropzone:hover,
.product-form .dropzone:hover,
.order-form-page-v78 .dropzone:hover,
.compact-dropzone:hover {
  background: var(--button-secondary-bg);
  border-color: var(--accent);
}
.dropzone-title,
.dropzone-note,
.photo-upload-section .muted,
.photo-upload-section .hint,
.compact-file-control-v76 .hint {
  color: var(--muted);
}
.empty-photo,
.photo-empty,
.product-photo-empty,
.jit-product-photo-empty,
.bulk-product-placeholder-v74,
.technical-image-order-card img,
.technical-image-view-card img,
.photo-preview-tech img,
.order-value-image {
  background: var(--section-bg);
  color: var(--muted);
  border-color: var(--line);
}

/* Checkboxes/radios inside themed controls. */
.check-line,
.compact-check-v73,
.access-row-v69,
.allowed-companies-box-v73 label,
.photo-upload-section label,
.order-field-checkbox .check-line {
  color: var(--text);
  border-color: var(--line);
}
.check-line input[type="checkbox"],
.order-field-checkbox input[type="checkbox"],
.select-manual-mode input[type="radio"],
.radio-yesno-v38 input[type="radio"]{
  accent-color: var(--dark);
}

/* Yes/No radio pair for checkbox-type order fields */
.radio-yesno-v38 {
  display: flex;
  gap: 20px;
}
.radio-yn-label-v38 {
  display: flex;
  align-items: center;
  gap: 6px;
  cursor: pointer;
  color: var(--text);
  font-size: 14px;
}

/* v3_1_12: targeted theme bridge pass 3 based on screenshots.
   Scope: product structure, bulk field editor and product photo upload internals.
   Color/background/border/shadow only. No layout, sizing, order/PDF/Excel/storage logic changes. */

/* Product fields / sections editor */
.fields-panel,
.fields-panel .card,
.fields-section-card,
.structure-section-clean,
.fields-list-panel,
.fields-section-list,
.structure-list.fields-section-list {
  background: var(--panel);
  color: var(--text);
  border-color: var(--line);
}
.fields-section-card-head,
.fields-section-card-head h4,
.fields-panel h1,
.fields-panel h2,
.fields-panel h3,
.fields-panel h4 {
  color: var(--text);
  border-color: var(--line);
}
.field-row-card,
.fields-section-card .field-row-card,
.field-row-empty {
  background: var(--field-bg);
  color: var(--text);
  border-color: var(--line);
}
.field-row-card .muted,
.fields-section-card .muted,
.fields-panel .muted {
  color: var(--muted);
}
.field-badges span {
  background: var(--section-bg);
  color: var(--accent-dark);
  border-color: var(--line);
}
.field-row-actions .icon-action,
.fields-section-card .icon-action,
.fields-panel .icon-action {
  background: var(--button-secondary-bg);
  color: var(--button-secondary-text);
  border-color: var(--line);
}
.field-row-actions .icon-action.danger,
.fields-section-card .icon-action.danger,
.fields-panel .icon-action.danger {
  color: var(--danger);
  border-color: var(--danger);
}

/* Bulk field editor / configurable columns */
.bulk-column-filter,
.bulk-column-filter-v55,
.bulk-scroll-strong,
.bulk-edit-table,
.fields-bulk-panel,
.products-bulk-edit-panel {
  background: var(--panel);
  background-image: none;
  color: var(--text);
  border-color: var(--line);
}
.bulk-column-filter h3,
.bulk-column-filter-v55 h3,
.bulk-column-filter .muted,
.bulk-column-filter-v55 .muted {
  color: var(--text);
}
.bulk-column-grid label,
.bulk-column-filter-v55 .bulk-column-grid label,
.bulk-column-filter label,
.bulk-column-filter-v55 label {
  background: var(--field-bg);
  color: var(--text);
  border-color: var(--line);
}
.bulk-column-grid label:has(input:checked),
.bulk-column-filter-v55 .bulk-column-grid label:has(input:checked) {
  background: var(--section-bg);
  color: var(--text);
  border-color: var(--accent-dark);
}
.bulk-scroll-strong table,
.bulk-scroll-strong th,
.bulk-scroll-strong td,
.bulk-edit-table th,
.bulk-edit-table td {
  background: var(--field-bg);
  color: var(--text);
  border-color: var(--line);
}
.bulk-scroll-strong th,
.bulk-edit-table th {
  background: var(--section-bg);
  color: var(--muted);
}
.bulk-scroll-strong input:not([type="checkbox"]):not([type="radio"]),
.bulk-scroll-strong select,
.bulk-scroll-strong textarea,
.bulk-edit-table input:not([type="checkbox"]):not([type="radio"]),
.bulk-edit-table select,
.bulk-edit-table textarea {
  background: var(--field-bg);
  color: var(--text);
  border-color: var(--line);
}
.bulk-scroll-strong input[type="checkbox"],
.bulk-edit-table input[type="checkbox"],
.bulk-column-grid input[type="checkbox"] {
  accent-color: var(--dark);
}

/* Product form photo upload internals */
.product-edit-panel,
.product-edit-panel .form-block,
.product-edit-panel .photo-upload-section,
.product-edit-panel .photo-panel-sticky,
.product-form-right .photo-upload-section,
.product-form .photo-upload-section {
  background: var(--panel);
  color: var(--text);
  border-color: var(--line);
}
.photo-preview-frame,
.photo-preview-frame.is-empty,
.photo-preview-main,
.photo-preview-square,
.product-form .photo-preview-frame,
.product-form .photo-preview-frame.is-empty,
.selected-photo-preview,
.mini-selected-photo-preview,
.current-photo,
.current-image-preview-v76{
  background: var(--section-bg);
  color: var(--muted);
  border-color: var(--line);
}
.photo-preview-frame .selected-photo-caption,
.selected-photo-caption {
  background: color-mix(in srgb, var(--field-bg) 86%, transparent);
  color: var(--text);
  border-color: var(--line);
}
.image-dropzone,
.product-form .image-dropzone,
.product-form .dropzone.image-dropzone,
.product-form .compact-dropzone,
.photo-slot .dropzone,
.photo-slot .compact-dropzone {
  background: var(--field-bg);
  background-image: none;
  color: var(--text);
  border-color: var(--line);
}
.image-dropzone:hover,
.product-form .image-dropzone:hover,
.product-form .dropzone.image-dropzone:hover,
.product-form .compact-dropzone:hover {
  background: var(--button-secondary-bg);
  border-color: var(--accent);
}
.product-form .photo-delete-check,
.photo-delete-check,
.icon-only-delete {
  color: var(--danger);
  border-color: var(--danger);
}
.product-form input[type="checkbox"],
.product-form input[type="radio"],
.photo-delete-check input[type="checkbox"] {
  accent-color: var(--dark);
}
.jit-product-desc .muted-link,
.description-hover .muted-link,
.jit-product-desc .link,
.description-hover .link {
  color: var(--accent-dark);
  text-decoration: none;
  border-bottom: 1px dotted color-mix(in srgb, var(--accent-dark) 50%, transparent);
  cursor: help;
}
.jit-product-desc .muted-link:hover,
.description-hover .muted-link:hover,
.jit-product-desc .link:hover,
.description-hover .link:hover {
  color: var(--dark);
  border-bottom-color: var(--dark);
}

/* v3_1_14: targeted theme bridge pass 5 based on screenshots.
   Scope: order-data value rows, catalog CTA contrast, product photo upload clipping.
   Color + local containment only. No routes, storage, PDF/Excel logic or order flow changes. */

/* Order view: make the "Данные заказа" grid fully theme-aware. */
.order-view-page-v78 .order-top-summary-v79,
.order-view-page-v78 .order-top-summary-v79 .order-meta-grid-v70 {
  background: var(--section-bg);
  color: var(--text);
  border-color: var(--line);
}
.order-view-page-v78 .order-top-summary-v79 .order-meta-grid-v70 dt,
.order-view-page-v78 .order-top-summary-v79 .order-meta-grid-v70 dd {
  border-color: var(--line);
}
.order-view-page-v78 .order-top-summary-v79 .order-meta-grid-v70 dt {
  background: transparent;
  color: var(--muted);
}
.order-view-page-v78 .order-top-summary-v79 .order-meta-grid-v70 dd {
  background: var(--field-bg);
  color: var(--text);
}
.order-view-page-v78 .order-top-summary-v79 h3,
.order-view-page-v78 .order-top-summary-v79 strong {
  color: var(--text);
}

/* (Удалён мёртвый блок CTA-кнопок каталога — .jit-order-button/.primary-mini нет в шаблонах.) */

/* Product image upload: prevent inner upload controls from visually escaping cards. */
.product-form .photo-upload-section,
.product-form .photo-slot,
.product-form .main-photo-slot {
  overflow: hidden;
}
.product-form .photo-row-actions,
.product-form .extra-photos-grid,
.product-form .dropzone,
.product-form .compact-dropzone,
.product-form .image-dropzone {
  box-sizing: border-box;
  min-width: 0;
  max-width: 100%;
}
.product-form .photo-row-actions {
  border-color: var(--line);
}
.product-form .dropzone,
.product-form .compact-dropzone,
.product-form .image-dropzone {
  border-color: var(--line);
  color: var(--text);
}
.product-form .dropzone-title,
.product-form .dropzone-note {
  color: var(--muted);
}

/* v3_1_17: product additional-photo source fix.
   Root cause: additional photo tile wrapper was treated as a visual themed card.
   Fix: wrapper is structural; preview and dropzone are the visual/clickable elements.
   Scope: product create/edit additional photos only. No backend, storage, order, PDF/Excel logic changes. */
.product-form .extra-photos-grid {
  display: grid;
  grid-template-columns: repeat(3, minmax(176px, 220px));
  justify-content: start;
  align-items: start;
  gap: 12px;
}
.product-form .extra-photos-grid .additional-photo-slot {
  display: grid;
  grid-template-rows: auto auto;
  gap: 8px;
  width: 100%;
  max-width: 220px;
  min-width: 0;
  padding: 0;
  margin: 0;
  background: transparent;
  border: 0;
  box-shadow: none;
  overflow: visible;
  box-sizing: border-box;
}
.product-form .extra-photos-grid .additional-photo-slot .photo-preview-square {
  width: 100%;
  max-width: 220px;
  aspect-ratio: 1 / 1;
  box-sizing: border-box;
}
.product-form .extra-photos-grid .additional-photo-slot .extra-photo-row-actions {
  display: grid;
  grid-template-columns: minmax(0, 1fr);
  gap: 8px;
  width: 100%;
  max-width: 220px;
  min-width: 0;
  overflow: visible;
  box-sizing: border-box;
}
.product-form .extra-photos-grid .additional-photo-slot .extra-photo-row-actions:has(.photo-delete-check) {
  grid-template-columns: 38px minmax(0, 1fr);
}
.product-form .extra-photos-grid .additional-photo-slot .extra-photo-dropzone {
  width: 100%;
  max-width: 100%;
  min-width: 0;
  min-height: 58px;
  box-sizing: border-box;
}
.product-form .extra-photos-grid .additional-photo-slot .photo-delete-check.icon-only-delete {
  width: 38px;
  min-width: 38px;
  max-width: 38px;
  height: auto;
  min-height: 58px;
  padding: 0;
  margin: 0;
  align-self: stretch;
  justify-self: stretch;
  display: inline-grid;
  place-items: center;
  box-sizing: border-box;
}
.product-form .extra-photos-grid .additional-photo-slot .photo-delete-check.icon-only-delete input[type="checkbox"] {
  width: 13px;
  height: 13px;
  margin: 0;
}
@media (max-width: 900px) {
  .product-form .extra-photos-grid {
    grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));
  }
  .product-form .extra-photos-grid .additional-photo-slot,
  .product-form .extra-photos-grid .additional-photo-slot .photo-preview-square,
  .product-form .extra-photos-grid .additional-photo-slot .extra-photo-row-actions {
    max-width: 100%;
  }
}

/* v3.8.9 — удалены блоки v3_1_25 (order density: 3-колоночная сетка через) и v3_1_26 (select pass: 38px/font13/weight560 через).
   Оба перебивали редизайн v3.8.7 и приводили к 3 колонкам разделов, полям в
   1 столбец и крупным «жирным» селектам. Стиль формы заказа теперь полностью
   в pages/order_form.css (без). Стрелка select берётся из глобального
   select-правила в theme_v2.css. */

/* v3_1_34: settings/users field fill normalization.
   Scope: visual-only field backgrounds in settings/users pages.
   Purpose: restore a clearly readable filled state for text inputs/selects/textarea
   through theme variables after page-by-page CSS extraction.
   No layout, routes, backend, storage, PDF/Excel or access logic changes. */
.users-settings-panel-v72 input:not([type="checkbox"]):not([type="radio"]):not([type="color"]),
.users-settings-panel-v72 select,
.users-settings-panel-v72 textarea,
.user-edit-panel-v72 input:not([type="checkbox"]):not([type="radio"]):not([type="color"]),
.user-edit-panel-v72 select,
.user-edit-panel-v72 textarea,
.employee-create-card-v72 input:not([type="checkbox"]):not([type="radio"]):not([type="color"]),
.employee-create-card-v72 select,
.employee-create-card-v72 textarea,
.user-edit-form-v72 input:not([type="checkbox"]):not([type="radio"]):not([type="color"]),
.user-edit-form-v72 select,
.user-edit-form-v72 textarea,
.entity-settings-panel-v90 input:not([type="checkbox"]):not([type="radio"]):not([type="color"]),
.entity-settings-panel-v90 select,
.entity-settings-panel-v90 textarea,
.design-form input:not([type="checkbox"]):not([type="radio"]):not([type="color"]),
.design-form select,
.design-form textarea {
  /* v3.8.43: убран background-shorthand (затирал chevron у select); оставлен
     только background-color longhand. Тень убрана → единый плоский вид с сайтом. */
  background-color: color-mix(in srgb, var(--field-bg) 88%, #ffffff);
  color: var(--text);
  border-color: color-mix(in srgb, var(--line) 82%, var(--accent));
}

/* v3.8.43: ЕДИНЫЙ ПЛОСКИЙ outline-стиль для ВСЕХ <select> на платформе.
   Раньше здесь был neumorphism-raised (box-shadow + border:none + background-
   shorthand), из-за чего селекты выглядели «приподнятыми пузырями» без рамки и
   без стрелки (shorthand затирал chevron из theme_v2). Теперь — плоская рамка
   0.5px, без тени; background-color (longhand!) НЕ затирает chevron. `.main
   select` = (0,1,1), грузится после field-bridge → задаёт единый вид всем
   селектам. сохранён, т.к. перебивает field-fill (v3_1_34) и
   пер-страничные правила; переедет в .field-компонент при рефакторинге полей. */
.main select {
  border: 0.5px solid var(--line, #e8e8e8);
  border-radius: 8px;
  background-color: var(--panel, #fff);
  box-shadow: none;
  transition: border-color .12s ease;
}
.main select:hover { border-color: var(--accent, #111); }
.main select:focus { border-color: var(--accent, #111); }

/* v3_1_40: product form layout/photo controls final bridge.
   Temporary final-layer override until old product upload rules are fully removed from theme_bridge. */
.product-form-page-v40.product-edit-wide {
  width: 100%;
  max-width: min(1520px, 100%);
  box-sizing: border-box;
}
.product-form-page-v40 .product-form-split {
  grid-template-columns: minmax(0, 1fr) minmax(500px, 620px);
  gap: 24px;
}
.product-form-page-v40 .extra-photos-grid {
  grid-template-columns: repeat(3, minmax(0, 1fr));
  justify-content: stretch;
  width: 100%;
  max-width: 100%;
}
.product-form-page-v40 .extra-photos-grid .additional-photo-slot,
.product-form-page-v40 .extra-photos-grid .additional-photo-slot .photo-preview-square,
.product-form-page-v40 .extra-photos-grid .additional-photo-slot .extra-photo-row-actions {
  width: 100%;
  max-width: 100%;
  min-width: 0;
  box-sizing: border-box;
}
.product-form-page-v40 .extra-photos-grid .additional-photo-slot .extra-photo-row-actions:has(.photo-delete-check) {
  grid-template-columns: 34px minmax(0, 1fr);
}
.product-form-page-v40 .extra-photos-grid .additional-photo-slot .photo-delete-check.icon-only-delete {
  width: 34px;
  min-width: 34px;
  max-width: 34px;
  height: 50px;
  min-height: 50px;
  max-height: 50px;
  align-self: start;
  justify-self: start;
}
.product-form-page-v40 .extra-photos-grid .additional-photo-slot .extra-photo-dropzone {
  min-height: 50px;
  height: 50px;
  overflow: hidden;
}
@media (max-width: 1420px) {
  .product-form-page-v40 .product-form-split {
    grid-template-columns: minmax(0, 0.95fr) minmax(460px, 0.75fr);
  }
}
@media (max-width: 1180px) {
  .product-form-page-v40 .product-form-split {
    grid-template-columns: 1fr;
  }
}

/* v3_1_43: final cascade fix for product photo delete component.
   Root cause: theme_bridge is loaded after product_form.css and contained older stretch rules.
   This block intentionally lives at the end of theme_bridge to normalize the reusable delete control after legacy rules. */
.product-form-page-v43 .photo-row-actions.extra-photo-row-actions {
  display: grid;
  grid-template-columns: 32px minmax(0, 1fr);
  align-items: center;
  column-gap: 8px;
  row-gap: 0;
  min-height: 0;
  height: auto;
  align-self: start;
}
.product-form-page-v43 .photo-row-actions.extra-photo-row-actions .jit-photo-delete-control,
.product-form-page-v43 .photo-row-actions.extra-photo-row-actions .photo-delete-check.icon-only-delete,
.product-form-page-v43 .additional-photo-slot .jit-photo-delete-control,
.product-form-page-v43 .additional-photo-slot .photo-delete-check.icon-only-delete {
  width: 28px;
  min-width: 28px;
  max-width: 28px;
  height: 28px;
  min-height: 28px;
  max-height: 28px;
  inline-size: 28px;
  block-size: 28px;
  flex: 0 0 28px;
  padding: 0;
  margin: 0;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  align-self: center;
  justify-self: center;
  box-sizing: border-box;
  border-radius: 999px;
  line-height: 1;
  overflow: hidden;
  transform: none;
}
.product-form-page-v43 .photo-row-actions.extra-photo-row-actions .jit-photo-delete-control span,
.product-form-page-v43 .additional-photo-slot .jit-photo-delete-control span {
  display: block;
  width: auto;
  height: auto;
  line-height: 1;
  font-size: 12px;
  transform: none;
}
.product-form-page-v43 .photo-row-actions.extra-photo-row-actions .jit-photo-delete-control input[type="checkbox"],
.product-form-page-v43 .additional-photo-slot .jit-photo-delete-control input[type="checkbox"] {
  position: absolute;
  width: 1px;
  height: 1px;
  min-width: 1px;
  min-height: 1px;
  max-width: 1px;
  max-height: 1px;
  opacity: 0;
  pointer-events: none;
  margin: 0;
}
.product-form-page-v43 .photo-row-actions.extra-photo-row-actions .extra-photo-dropzone {
  min-height: 50px;
  height: 50px;
  max-height: 50px;
  align-self: center;
}

/* v3_2_2 — action component bridge.
   Базовый вид текстовых кнопок (.button/.btn + .primary/.small/.danger-button/.link.danger)
   ПЕРЕЕХАЛ в components/ui.css (единый источник, загружается последним).
   Здесь остаются только иконочные кнопки (.icon-action) — отдельный компонент. */
.icon-button,
a.icon-button,
button.icon-button,
.icon-action,
a.icon-action,
button.icon-action {
  display: inline-grid;
  place-items: center;
  width: var(--jit-icon-action-size, 34px);
  height: var(--jit-icon-action-size, 34px);
  min-width: var(--jit-icon-action-size, 34px);
  min-height: var(--jit-icon-action-size, 34px);
  padding: 0;
  margin-right: 4px;
  border: 1px solid var(--line);
  border-radius: var(--jit-icon-action-radius, 8px);
  background: var(--button-secondary-bg);
  color: var(--button-secondary-text);
  text-decoration: none;
  font: inherit;
  font-size: 16px;
  line-height: 1;
  cursor: pointer;
  box-sizing: border-box;
}

.icon-button:hover,
a.icon-button:hover,
button.icon-button:hover,
.icon-action:hover,
a.icon-action:hover,
button.icon-action:hover {
  color: var(--text);
  border-color: var(--accent);
  text-decoration: none;
}

.icon-button.danger,
a.icon-button.danger,
button.icon-button.danger,
.icon-action.danger,
a.icon-action.danger,
button.icon-action.danger {
  color: var(--danger);
  border-color: var(--danger);
}

.link,
a.link,
button.link,
.muted-link,
a.muted-link {
  color: var(--accent-dark);
  background: transparent;
  border: 0;
  padding: 0;
  text-decoration: none;
  cursor: pointer;
}

.link:hover,
a.link:hover,
button.link:hover,
.muted-link:hover,
a.muted-link:hover {
  text-decoration: underline;
}

/* v3_2_2 — product additional-photo upload containment fix.
   Root cause: the v3_1_43 row normalization made every .extra-photo-row-actions a two-column grid.
   Empty additional-photo rows have no delete control, so the upload dropzone fell into the 32px first column.
   Scope: product form additional photos only. No upload logic, backend, storage or HTML changes. */
.product-form-page-v43 .photo-row-actions.extra-photo-row-actions:not(:has(.jit-photo-delete-control)) {
  display: block;
}

.product-form-page-v43 .photo-row-actions.extra-photo-row-actions:not(:has(.jit-photo-delete-control)) .extra-photo-dropzone {
  display: grid;
  width: 100%;
  max-width: 100%;
  min-width: 0;
  min-height: 50px;
  height: 50px;
  max-height: 50px;
  box-sizing: border-box;
}

.jit-icon-delete::before {
  content: "×";
  display: block;
  line-height: 1;
  font-size: 14px;
  font-weight: 500;
}

.jit-icon-delete:has(span)::before,
.jit-icon-delete:has(.jit-icon-delete__icon)::before {
  content: none;
}

/* v3_2_3 — transition field component bridge.
   Scope: normalize visual tokens for text-like fields only.
   Exclusions are intentional: checkbox/radio/file/color controls keep their existing specialized UI. */
input:not([type="checkbox"]):not([type="radio"]):not([type="file"]):not([type="color"]),
select,
textarea {
  /* v3.8.43: background-color (longhand!) вместо background-shorthand — иначе затирает chevron у <select> из theme_v2 на всём сайте. */
  background-color: var(--jit-field-bg, var(--field-bg));
  color: var(--jit-field-text, var(--text));
  border-color: var(--jit-field-border, var(--line));
  border-radius: var(--jit-field-radius, 8px);
  box-sizing: border-box;
  /* v3.8.50: было `font: inherit` — из-за высокой специфичности (:not[]×4 = 0,4,1)
     поля наследовали font-size родителя (напр. 9px лейбла формы заказа → инпуты
     с крошечным текстом). Наследуем ТОЛЬКО семейство; размер берётся из правил
     поля (база 12px / пер-страничные). */
  font-family: inherit;
}

input:not([type="checkbox"]):not([type="radio"]):not([type="file"]):not([type="color"]):focus,
select:focus,
textarea:focus,
input:not([type="checkbox"]):not([type="radio"]):not([type="file"]):not([type="color"]):focus-visible,
select:focus-visible,
textarea:focus-visible {
  outline: 2px solid var(--jit-field-focus-ring, rgba(155, 122, 74, .18));
  border-color: var(--jit-field-border-focus, var(--accent));
}

input::placeholder,
textarea::placeholder {
  color: var(--jit-field-muted, var(--muted));
  opacity: .82;
}

textarea {
  resize: vertical;
}

/* v3_2_4 — conservative surface component bridge.
   Scope: visual tokens only: background, color, border-color, shadow.
   No layout, display, grid, width, height, padding, margin or order-flow rules.
   This is intentionally explicit to avoid the v3_1_28/v3_1_29 regression where broad
   card/panel selectors were moved into page CSS without real usage audit. */
:where(
  .card,
  .panel,
  .filters-card,
  .entity-card,
  .entity-card-clean,
  .inactive-card,
  .access-card,
  .employee-create-card,
  .employee-create-card-v72,
  .user-main-card-v72,
  .user-access-card-v72,
  .allowed-companies-box-v73,
  .form-block,
  .photo-upload-section,
  .order-section,
  .order-summary-card-v70,
  .order-status-card-v70,
  .order-reference-card-v70,
  .order-side-card-v78,
  .product-preview,
  .technical-image-order-card-v71,
  .catalog-panel,
  .factories-panel,
  .catalog-factory-section,
  .jit-factory-section,
  .jit-product-card,
  .catalog-product-card,
  .factory-product-card,
  .design-group,
  .design-preset-card-v319,
  .design-presets-v319,
  .field-row-card,
  .order-card,
  .order-product-card
) {
  background-color: var(--jit-surface-bg, var(--panel));
  color: var(--jit-surface-text, var(--text));
  border-color: var(--jit-surface-border, var(--line));
}

:where(
  .card,
  .panel,
  .entity-card,
  .form-block,
  .photo-upload-section,
  .catalog-panel,
  .factories-panel,
  .jit-factory-section,
  .jit-product-card,
  .catalog-product-card,
  .factory-product-card
) {
  box-shadow: var(--jit-surface-shadow, var(--shadow));
}

:where(
  .card .muted,
  .panel .muted,
  .filters-card .muted,
  .entity-card .muted,
  .form-block .muted,
  .photo-upload-section .muted,
  .order-section .muted,
  .catalog-panel .muted,
  .factories-panel .muted,
  .jit-factory-section .muted,
  .jit-product-card .muted,
  .catalog-product-card .muted,
  .factory-product-card .muted
) {
  color: var(--jit-surface-muted, var(--muted));
}

/* v3_2_5 — modal / confirmation / flash transition bridge.
   Scope: visual tokens only. Runtime behavior remains in app.js. */
.jit-confirm-overlay {
  background: var(--jit-modal-overlay-bg, rgba(18, 14, 16, .46));
  backdrop-filter: blur(var(--jit-modal-backdrop-blur, 3px));
}

.jit-confirm-dialog {
  background: var(--jit-surface-bg, var(--panel));
  color: var(--jit-surface-text, var(--text));
  border-color: var(--jit-surface-border, var(--line));
  border-radius: var(--jit-modal-radius, 12px);
  box-shadow: var(--jit-modal-shadow, 0 28px 80px rgba(20, 14, 18, .28));
}

.jit-confirm-message {
  color: var(--jit-surface-muted, var(--muted));
}

.jit-confirm-actions .jit-confirm-cancel {
  background: var(--button-secondary-bg, transparent);
  color: var(--button-secondary-text, var(--text));
  border-color: var(--line, currentColor);
}

.flash-wrap .flash,
.flash {
  border-radius: var(--jit-flash-radius, 12px);
}

/* v3_2_6 — tables / badges / statuses transition bridge.
   Scope: color, background, border and text tone only. No table-layout, widths,
   sticky behavior, wrapping, ordering, filters, routes or data logic changes. */
table,
.compact-table,
.bulk-table,
.bulk-table-wide,
.bulk-edit-table,
.action-log-table-v35,
.documentation-panel table,
.order-log-card-v76 table,
.order-values-card table {
  color: var(--jit-table-text);
  border-color: var(--jit-table-border);
}

thead,
.bulk-edit-table thead,
.action-log-table-v35 thead {
  color: var(--jit-table-muted);
}

th,
td,
.compact-table th,
.compact-table td,
.bulk-table th,
.bulk-table td,
.bulk-table-wide th,
.bulk-table-wide td,
.bulk-edit-table th,
.bulk-edit-table td,
.action-log-table-v35 th,
.action-log-table-v35 td,
.documentation-panel th,
.documentation-panel td,
.order-log-card-v76 th,
.order-log-card-v76 td,
.order-values-card th,
.order-values-card td {
  color: var(--jit-table-text);
  border-color: var(--jit-table-border);
}

th,
.bulk-edit-table th,
.action-log-table-v35 th,
.documentation-panel th {
  color: var(--jit-table-muted);
  background-color: var(--jit-table-head-bg);
}

tbody tr:hover td,
.compact-table tbody tr:hover td,
.bulk-table tbody tr:hover td,
.bulk-table-wide tbody tr:hover td,
.bulk-edit-table tbody tr:hover td,
.action-log-table-v35 tbody tr:hover td {
  background-color: var(--jit-table-row-hover-bg);
}

/* .badge переехал в components/ui.css (канон, без). Здесь — статусы. */
.status,
.readonly-status,
.entity-status-v90,
.field-badges span {
  display: inline-flex;
  align-items: center;
  width: fit-content;
  max-width: 100%;
  background: var(--jit-badge-bg);
  color: var(--jit-badge-text);
  border: 1px solid var(--jit-badge-border);
  border-radius: var(--jit-status-radius);
}

.status.status-draft{
  background: color-mix(in srgb, var(--accent) 14%, var(--field-bg));
  color: var(--text);
  border-color: color-mix(in srgb, var(--accent) 34%, var(--line));
}
/* v3_2_7 — delete / upload visual components transition bridge.
   Scope: visual tokens and existing product/order upload classes only. No file input wiring,
   upload routes, delete routes, storage, preview logic or product-form grid changes. */
.dropzone,
.compact-dropzone,
.image-dropzone,
.extra-photo-dropzone,
.product-form .dropzone,
.product-form .compact-dropzone,
.product-form .image-dropzone,
.product-form .extra-photo-dropzone,
.order-form-page-v78 .dropzone,
.order-form-page-v78 .compact-dropzone {
  background: var(--jit-upload-bg);
  color: var(--jit-upload-text);
  border-color: var(--jit-upload-border);
  border-radius: var(--jit-upload-radius);
}

.dropzone:hover,
.compact-dropzone:hover,
.image-dropzone:hover,
.extra-photo-dropzone:hover,
.product-form .dropzone:hover,
.product-form .compact-dropzone:hover,
.product-form .image-dropzone:hover,
.product-form .extra-photo-dropzone:hover,
.order-form-page-v78 .dropzone:hover,
.order-form-page-v78 .compact-dropzone:hover {
  background: var(--jit-upload-hover-bg);
  border-color: var(--jit-upload-border-hover);
}

.dropzone-title,
.dropzone-note,
.photo-upload-section .muted,
.photo-upload-section .hint,
.compact-file-control-v76 .hint {
  color: var(--jit-upload-muted);
}

.photo-delete-check.icon-only-delete,
.icon-only-delete.jit-photo-delete-control,
.jit-photo-delete-control {
  background: var(--jit-delete-bg);
  color: var(--jit-delete-text);
  border-color: var(--jit-delete-border);
}

.photo-delete-check.icon-only-delete:has(input:checked),
.icon-only-delete.jit-photo-delete-control:has(input:checked),
.jit-photo-delete-control:has(input:checked) {
  background: var(--jit-delete-bg-active);
  color: var(--jit-delete-text-active);
  border-color: var(--jit-delete-border-active);
}

/* v3_2_8 — status colors, product active checkbox and field palette builder. */
/* v3.8.49: статус-бейджи БЕЗ рамки (как .order-badge канон); видимый нейтральный
   фон по умолчанию (#f1efe8 = .badge--muted), кастомный цвет статуса (--jit-status-bg)
   перебивает фолбэк. Раньше была 1px-рамка + почти невидимый #FAFAFA → бейджи
   выглядели как кнопки и отличались от заказов/дашборда. */
.status,
.readonly-status,
.entity-status-v90 {
  background: var(--jit-status-bg, #f1efe8);
  color: var(--text);
  border: none;
}

.status.status-draft{
  background: var(--jit-status-bg, #f1efe8);
  color: var(--text);
  border: none;
}

.palette-builder-card-v328 {
  display: none;
  margin-top: -4px;
}

.palette-builder-grid-v328 {
  display: grid;
  grid-template-columns: 1fr 76px 1fr auto;
  gap: 8px;
  align-items: end;
  margin-top: 10px;
}

.palette-builder-grid-v328 input[type="color"] {
  min-height: 42px;
  padding: 4px;
}

@media (max-width: 760px) {
  .palette-builder-grid-v328 {
    grid-template-columns: 1fr;
  }
}

/* v3_4_17: force-hidden manual/list order controls must stay hidden even under legacy field CSS. */
.order-form-page-v78 [data-select-manual-select][hidden],
.order-form-page-v78 [data-select-manual-input][hidden],
.order-form-page-v78 [data-double-factory][hidden],
.order-form-page-v78 [data-double-client][hidden] {
  display: none;
}
