:root { color-scheme: light; --surface: #f4f6f8; --panel: #22272e; --panel-soft: #2d333b; --panel-line: #3e4651; --detail-label: #e2e6ea; --detail-value: #eefdf9; --detail-border: #c8d3d9; --table-head: #d9dee4; --table-row: #f5f6f7; --table-row-alt: #eceff2; --table-line: #cfd6dd; --text: #15181c; --muted: #68717d; --accent: #7ee34d; --accent-text: #10220b; --safe: #0f7b4d; --danger: #e02424; --focus: #2f6fed; } * { box-sizing: border-box; } body { margin: 0; min-height: 100vh; color: var(--text); font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Arial, sans-serif; background: var(--surface); } button, input, select { font: inherit; } .catalog-screen { min-height: 100vh; display: grid; grid-template-columns: 172px 292px minmax(720px, 1fr); } .control-panel { min-height: 100vh; max-height: 100vh; padding: 6px; background: var(--panel); display: flex; flex-direction: column; gap: 6px; overflow-y: auto; } .control-panel > #settingsButton { order: 99; } .app-status { order: 98; margin-top: auto; display: flex; flex-wrap: wrap; gap: 3px; padding: 5px; border: 1px solid var(--panel-line); border-radius: 6px; background: var(--panel-soft); color: #f3f6f8; font-size: 11px; line-height: 1.2; } .record-id { height: 39px; display: grid; place-items: center; border: 1px solid rgba(126, 227, 77, 0.42); border-radius: 6px; background: linear-gradient(180deg, #9aff60, var(--accent)); color: var(--accent-text); font-size: 26px; font-weight: 700; line-height: 1; font-variant-numeric: tabular-nums; } .arrow-row { display: grid; grid-template-columns: 1fr 1fr; gap: 5px; } .arrow-button, .action-button, .input-like { width: 100%; border: 1px solid var(--panel-line); border-radius: 5px; background: #f8fafc; color: #111827; } .arrow-button, .action-button { cursor: pointer; } .arrow-button { height: 31px; position: relative; display: grid; place-items: center; } .arrow-button::before { content: ""; width: 0; height: 0; border-top: 8px solid transparent; border-bottom: 8px solid transparent; } .arrow-button-prev::before { border-right: 11px solid #111827; } .arrow-button-next::before { border-left: 11px solid #111827; } .arrow-button:disabled::before { opacity: 0.55; } .parser-actions { display: grid; gap: 4px; } .parser-actions .action-button { min-height: 28px; font-size: 11px; } .action-button { min-height: 32px; padding: 0 8px; font-size: 12px; display: grid; place-items: center; text-align: center; } .action-button.primary { min-height: 34px; font-size: 14px; font-weight: 700; } .arrow-button:hover:not(:disabled), .action-button:hover:not(:disabled) { border-color: #7a8492; background: #ffffff; } .arrow-button:disabled, .action-button:disabled { cursor: default; opacity: 0.45; } .input-like { height: 28px; padding: 3px 7px; font-size: 12px; outline: none; } select.input-like { text-align: center; text-align-last: center; } #scanInput { background: #e5e8ec; text-align: center; } .input-like:focus { border-color: var(--focus); box-shadow: 0 0 0 2px rgba(47, 111, 237, 0.18); } .input-like::placeholder { color: #8b95a1; } .picture-slot { aspect-ratio: 1 / 1; width: 100%; min-height: 0; display: grid; place-items: center; border: 1px dashed #6d7784; border-radius: 5px; background: var(--panel-soft); color: #b8c0ca; font-size: 12px; overflow: hidden; } .picture-slot img { width: 100%; height: 100%; display: block; object-fit: contain; } .mapping-box { display: grid; gap: 3px; font-size: 11px; } .mapping-state { height: 28px; display: flex; align-items: center; min-width: 0; padding: 3px 7px; border: 1px solid var(--panel-line); border-right: 0; border-radius: 5px 0 0 5px; background: #f8fafc; color: #111827; font-weight: 400; line-height: 1.15; } .mapping-state.is-ready { background: #f8fafc; color: #111827; } .mapping-state.is-missing { background: #fff0f0; color: #b42318; font-weight: 700; } .mapping-list { display: grid; gap: 3px; } .mapping-details { min-width: 0; } .mapping-details summary { display: grid; grid-template-columns: minmax(0, 1fr) 22px; align-items: center; cursor: pointer; list-style: none; } .mapping-details summary::-webkit-details-marker { display: none; } .mapping-details summary:hover { filter: brightness(1.04); } .mapping-toggle { width: 22px; height: 28px; display: grid; place-items: center; border: 1px solid var(--panel-line); border-left: 0; border-radius: 0 5px 5px 0; background: #f8fafc; } .mapping-toggle::before { content: ">"; color: #111827; font-size: 11px; font-weight: 900; line-height: 1; } .mapping-details[open] .mapping-toggle::before { transform: rotate(90deg); } .mapping-source-row { min-width: 0; max-width: 100%; display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: center; gap: 4px; padding: 3px 4px; border: 1px solid #46505c; border-radius: 5px; background: #1b2026; color: #f3f6f8; } .mapping-source-row.is-disabled { opacity: 0.55; } .mapping-source-name { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-weight: 800; } .mapping-source-status { flex: 0 0 auto; padding: 1px 4px; border-radius: 4px; font-size: 9px; font-weight: 400; } .mapping-source-status.is-ok { background: #e8edf3; color: #303944; } .mapping-source-status.is-bad { background: #ffe0dc; color: #b42318; font-weight: 700; } .mapping-source-status.is-muted { background: #4b5563; color: #e5e7eb; } .product-panel { min-width: 0; padding: 22px 0 8px; background: #d3d8de; border-right: 1px solid #bdc6cf; } .field-grid { display: grid; grid-template-columns: 132px minmax(0, 168px); } .field-label, .field-value { min-height: 22px; padding: 4px 8px; border-bottom: 1px solid var(--detail-border); font-size: 12px; line-height: 1.15; } .field-label { color: #26313d; background: var(--detail-label); } .field-value { background: var(--detail-value); text-align: right; overflow-wrap: anywhere; font-variant-numeric: tabular-nums; } .field-value[data-field="manufacturer_name"] { color: #b42318; font-weight: 700; } .data-panel { min-width: 0; background: var(--surface); } .safe-mode, #modePill { padding: 2px 6px; border-radius: 5px; background: #e8f7ef; color: var(--safe); font-weight: 700; } #databaseStatus.database-error { background: #fde8e7; color: #b42318; } #modePill { background: #edf1f5; color: #4d5966; font-weight: 600; } .table-wrap { height: 100vh; overflow: auto; } .variant-table { width: 100%; min-width: 820px; border-collapse: separate; border-spacing: 0; table-layout: fixed; font-size: 12px; background: var(--table-row); } .variant-table th, .variant-table td { height: 22px; border-right: 1px solid var(--table-line); border-bottom: 1px solid var(--table-line); padding: 2px 7px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; font-variant-numeric: tabular-nums; } .variant-table th { position: sticky; top: 0; z-index: 2; background: var(--table-head); color: #303944; font-weight: 700; text-align: center; } .variant-table td { background: var(--table-row); } .variant-table tr:nth-child(even) td { background: var(--table-row-alt); } .variant-table tr:hover td { background: #fff7df; } .empty-row { color: var(--muted); text-align: center; font-style: italic; } .variant-table .problem-ean { background: var(--danger) !important; color: #ffffff; font-weight: 700; } .modal-backdrop { position: fixed; inset: 0; z-index: 20; display: grid; place-items: center; padding: 24px; background: rgba(17, 24, 39, 0.38); } .modal-backdrop[hidden] { display: none; } .suggested-dialog { width: min(900px, 94vw); max-height: min(620px, 88vh); display: grid; grid-template-rows: auto minmax(0, 1fr); border: 1px solid #9aa5b1; border-radius: 8px; overflow: hidden; background: #f8fafc; box-shadow: 0 18px 60px rgba(15, 23, 42, 0.34); } .source-dialog { width: min(820px, 94vw); max-height: min(620px, 88vh); display: grid; grid-template-rows: auto minmax(0, 1fr); border: 1px solid #9aa5b1; border-radius: 8px; overflow: hidden; background: #f8fafc; box-shadow: 0 18px 60px rgba(15, 23, 42, 0.34); } .settings-dialog { width: min(520px, 94vw); max-height: 92vh; display: grid; grid-template-rows: auto minmax(0, 1fr); border: 1px solid #9aa5b1; border-radius: 8px; overflow: hidden; background: #f8fafc; box-shadow: 0 18px 60px rgba(15, 23, 42, 0.34); } .settings-content { display: grid; gap: 8px; padding: 10px; overflow: visible; } .settings-group { display: grid; gap: 6px; margin: 0; padding: 8px; border: 1px solid var(--table-line); border-radius: 6px; background: #ffffff; } .settings-group legend { padding: 0 5px; font-size: 12px; font-weight: 700; } .settings-option { display: flex; align-items: center; gap: 8px; font-size: 12px; } .local-db-fields { display: grid; gap: 6px; padding: 8px; border: 1px solid var(--table-line); border-radius: 5px; background: #f7f9fb; } .local-db-fields[hidden] { display: none; } .settings-field { display: grid; grid-template-columns: 82px minmax(0, 1fr); align-items: center; gap: 8px; font-size: 11px; } .settings-field input { min-width: 0; padding: 4px 6px; border: 1px solid #cbd3dc; border-radius: 4px; font: inherit; } .settings-test-button { width: 100%; padding: 5px 8px; border: 1px solid #b8c3ce; border-radius: 4px; background: #eef2f5; color: #26323d; cursor: pointer; } .settings-test-button:disabled { opacity: 0.6; cursor: wait; } .connection-ok { color: #18794e; } .connection-error { color: #b42318; font-weight: 600; } .settings-option input { margin: 0; } .settings-option input:disabled + span { color: var(--muted); } .settings-note, .settings-permissions { margin: 0; color: var(--muted); font-size: 11px; line-height: 1.35; } .settings-permissions { display: grid; gap: 3px; padding-top: 3px; } .suggested-header { min-height: 42px; display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 8px 10px; border-bottom: 1px solid var(--table-line); background: #e8edf3; } .suggested-header h2 { margin: 0; font-size: 14px; } .modal-close { border: 1px solid #b6c0ca; border-radius: 5px; padding: 5px 10px; background: #ffffff; cursor: pointer; font-size: 12px; } .suggested-list { overflow: auto; } .suggested-row { display: grid; grid-template-columns: 58px 92px 1fr 160px 64px 84px; align-items: center; gap: 8px; padding: 6px 10px; border-bottom: 1px solid var(--table-line); font-size: 12px; } .suggested-row:nth-child(even) { background: #eef2f6; } .suggested-row img { width: 46px; height: 46px; object-fit: contain; border: 1px solid #d3dae2; background: #ffffff; } .suggested-id, .suggested-active { text-align: center; font-variant-numeric: tabular-nums; } .suggested-name, .suggested-reference { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .suggested-pick { border: 1px solid #2f6fed; border-radius: 5px; padding: 5px 8px; background: #2f6fed; color: #ffffff; cursor: pointer; font-size: 12px; } .source-list { display: grid; gap: 8px; padding: 10px; overflow: auto; } .source-section { display: grid; gap: 4px; border: 1px solid var(--table-line); border-radius: 6px; overflow: hidden; background: #ffffff; } .source-section-header, .source-row { display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: center; gap: 10px; min-height: 32px; padding: 6px 8px; font-size: 12px; } .source-section-header { background: #e8edf3; } .source-section-actions { display: flex; align-items: center; gap: 6px; } .source-picture-action { border: 1px solid #9aa8b7; border-radius: 4px; padding: 3px 6px; background: #ffffff; color: #172033; cursor: pointer; font-size: 10px; } .source-picture-action:hover { background: #e9f2ff; border-color: #2f6fed; } .source-row { color: #172033; text-decoration: none; border-top: 1px solid var(--table-line); } .source-row:hover { background: #fff7df; } .source-row-title { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .source-status, .source-row-action { padding: 2px 6px; border-radius: 5px; font-size: 10px; font-weight: 800; } .picture-candidate { display: grid; grid-template-rows: 132px auto; gap: 6px; color: inherit; text-decoration: none; font-size: 11px; min-width: 132px; } .picture-candidate img { width: 132px; height: 132px; object-fit: contain; background: #fff; border: 1px solid #d5dce5; } .picture-candidate span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .source-status.is-ok { background: #dff7e7; color: #0f7b4d; } .source-status.is-muted, .source-row-action { background: #edf1f5; color: #4d5966; } @media (max-width: 980px) { .catalog-screen { grid-template-columns: 1fr; } .control-panel { min-height: auto; display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); } .record-id, .arrow-row, .parser-actions, .app-status, .mapping-box, .picture-slot { grid-column: span 2; } .product-panel { padding: 0; } .field-grid { grid-template-columns: 160px minmax(0, 1fr); } .table-wrap { height: auto; max-height: 70vh; } }