Files
product-import-ai/src/tailwind.css
T

301 lines
20 KiB
CSS
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
@import "tailwindcss";
@source "../public";
@theme {
--font-sans: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Arial, sans-serif;
--color-catalog-surface: #f4f6f8;
--color-catalog-panel: #22272e;
--color-catalog-panel-soft: #2d333b;
--color-catalog-accent: #7ee34d;
--color-catalog-accent-text: #10220b;
--color-catalog-danger: #e02424;
--color-catalog-focus: #2f6fed;
}
@layer base {
*, ::before, ::after {
box-sizing: border-box;
}
html {
color-scheme: light;
}
html.dark {
color-scheme: dark;
}
body {
margin: 0;
min-height: 100vh;
font-family: var(--font-sans);
color: #15181c;
background: var(--color-catalog-surface);
}
button,
input,
select {
font: inherit;
}
}
@layer components {
.catalog-screen { @apply relative grid min-h-screen bg-catalog-surface pl-72; --secondary-track: minmax(240px,292px); --workspace-track: minmax(0,1fr); grid-template-columns: var(--secondary-track) var(--workspace-track); }
.catalog-screen.sidebar-collapsed { @apply pl-11; }
.catalog-screen.secondary-collapsed { --secondary-track: 44px; }
.catalog-screen.workspace-collapsed { --workspace-track: 44px; }
.sidebar-drawer { @apply fixed inset-y-0 left-0 z-40 flex w-72 min-h-screen flex-col gap-1.5 overflow-y-auto bg-slate-900 p-1.5 text-[11px] text-slate-200 shadow-xl transition-transform duration-200 ease-out; }
.sidebar-drawer-header { @apply flex items-center justify-between border-b border-slate-700 pb-1; }
.sidebar-drawer-title { @apply px-1 text-[10px] font-semibold uppercase tracking-wide text-slate-400; }
.sidebar-close-button, .sidebar-open-button { @apply inline-flex h-7 w-7 items-center justify-center rounded border border-slate-700 bg-slate-800 text-slate-200 shadow-sm transition hover:border-slate-500 hover:bg-slate-700; }
.sidebar-close-button .sidebar-icon, .sidebar-open-button .sidebar-icon { @apply h-4 w-4; }
.sidebar-open-button { @apply fixed left-2 top-2 z-30; }
.sidebar-overlay { @apply fixed inset-0 z-30 bg-slate-950/50; }
.sidebar-overlay[hidden] { display: none; }
.sidebar-drawer[aria-hidden="true"] { @apply -translate-x-full; }
.sidebar-section { @apply border-t border-slate-700 pt-1; }
.drawer-trigger { @apply flex min-h-8 w-full items-center gap-2 rounded border border-slate-700 bg-slate-800 px-2 text-left text-[11px] font-semibold text-slate-100 transition hover:border-slate-500 hover:bg-slate-700; }
.drawer-trigger .drawer-chevron { @apply ml-auto text-sm text-slate-400; }
.parser-drawer[hidden] { display: none; }
.sidebar-icon { @apply inline-flex h-4 w-4 shrink-0 items-center justify-center text-sm leading-none text-slate-300; }
.action-button { @apply flex items-center justify-center gap-1.5; }
.action-button .sidebar-icon { @apply text-slate-400; }
.sidebar-footer { @apply mt-auto grid gap-1 border-t border-slate-700 pt-2; }
.app-status { @apply rounded border border-slate-700 bg-slate-950 p-1 text-[10px] leading-tight text-slate-100; }
.safe-mode, #modePill { @apply inline-block rounded bg-slate-100 px-1 py-0.5 text-[10px] font-semibold text-slate-800; }
#databaseStatus.database-error { @apply bg-red-100 text-red-700; }
.record-id { @apply flex h-10 items-center justify-center rounded border border-lime-700 bg-catalog-accent text-[26px] font-bold leading-none text-catalog-accent-text; }
.arrow-row { @apply grid grid-cols-2 gap-1; }
.arrow-button, .action-button, .input-like { @apply w-full rounded border border-slate-700 bg-slate-800 text-center text-slate-200 shadow-sm transition; }
.arrow-button, .action-button { @apply min-h-7 px-1 text-[11px]; }
.arrow-button { @apply relative text-transparent; }
.arrow-button::before { @apply absolute left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2 text-xl leading-none text-slate-100; content: ""; }
.arrow-button-prev::before { content: ""; }
.arrow-button-next::before { content: ""; }
.parser-actions { @apply grid gap-1; }
.parser-actions .action-button { @apply min-h-7; }
.action-button.primary { @apply min-h-8 font-semibold; }
.arrow-button:hover:not(:disabled), .action-button:hover:not(:disabled) { @apply border-slate-500 bg-slate-700 text-white; }
.arrow-button:disabled, .action-button:disabled { @apply cursor-not-allowed opacity-50; }
.input-like { @apply h-7 px-1 text-[11px]; }
.native-manufacturer-select { @apply hidden; }
.manufacturer-picker { @apply relative; }
.manufacturer-trigger { @apply flex h-7 w-full items-center justify-between rounded border border-slate-700 bg-slate-800 px-2 text-[11px] text-slate-200 shadow-sm; }
.manufacturer-trigger:hover { @apply border-slate-500 bg-slate-700; }
.manufacturer-trigger[aria-expanded="true"] { @apply border-catalog-focus ring-2 ring-catalog-focus/25; }
.manufacturer-trigger span:first-child { @apply min-w-0 truncate; }
.picker-chevron { @apply ml-2 text-slate-400; }
.manufacturer-menu { @apply absolute left-0 right-0 top-full z-50 mt-1 rounded border border-slate-300 bg-white p-1 shadow-xl; }
.manufacturer-menu[hidden] { display: none; }
.manufacturer-search { @apply mb-1 h-7 w-full rounded border border-slate-300 px-2 text-[11px] text-slate-800 outline-none focus:border-catalog-focus focus:ring-2 focus:ring-catalog-focus/25; }
.manufacturer-options { @apply max-h-60 overflow-y-auto; }
.manufacturer-option { @apply block min-h-7 w-full truncate rounded px-2 py-1 text-left text-[11px] text-slate-700 hover:bg-slate-100; }
.manufacturer-option[aria-selected="true"] { @apply bg-slate-200 font-medium text-slate-900; }
.manufacturer-empty { @apply px-2 py-2 text-[11px] text-slate-500; }
#scanInput { @apply bg-slate-700 placeholder:text-slate-400; }
.input-like:focus { @apply border-catalog-focus outline-none ring-2 ring-catalog-focus/25; }
.picture-slot { @apply aspect-square w-full overflow-hidden rounded border border-dashed border-slate-500 bg-catalog-panel-soft p-1 text-center text-[11px] text-slate-200; }
.picture-slot img { @apply h-full w-full object-contain; }
.mapping-box { @apply rounded border border-slate-500 bg-catalog-panel-soft; }
.mapping-details summary { @apply grid cursor-pointer grid-cols-[minmax(0,1fr)_22px] items-center px-1 py-1 list-none; }
.mapping-details summary::-webkit-details-marker { display: none; }
.mapping-toggle::before { content: ""; @apply inline-block text-center text-lg leading-none text-slate-100; }
.mapping-details[open] .mapping-toggle::before { content: "⌄"; }
.mapping-state { @apply block truncate rounded px-1 py-0.5 text-[10px] font-normal; }
.mapping-state.is-ready { @apply bg-slate-100 text-slate-800; }
.mapping-state.is-missing { @apply bg-red-100 text-red-700; }
.mapping-list { @apply grid gap-0.5 px-1 pb-1; }
.mapping-source-row { @apply grid grid-cols-[minmax(0,1fr)_auto] items-center gap-1 rounded bg-slate-100 px-1 py-0.5 text-[10px] text-slate-800; }
.mapping-source-row.is-disabled { @apply opacity-50; }
.mapping-source-name { @apply truncate; }
.mapping-source-status { @apply rounded px-1 text-[9px] font-semibold; }
.mapping-source-status.is-ok { @apply bg-emerald-100 text-emerald-700; }
.mapping-source-status.is-bad { @apply bg-red-100 text-red-700; }
.mapping-source-status.is-muted { @apply bg-slate-200 text-slate-600; }
.secondary-panel { @apply min-w-0 border-r border-slate-400 bg-slate-300; }
.column-header { @apply flex h-7 items-center justify-between gap-1 border-b border-slate-400 px-1 text-[10px] font-semibold uppercase tracking-wide text-slate-600; }
.column-toggle { @apply inline-flex h-5 w-5 items-center justify-center rounded border border-slate-400 bg-white text-sm leading-none text-slate-700 hover:bg-slate-200; }
.secondary-panel .field-grid { @apply overflow-hidden; }
.secondary-collapsed .secondary-panel .column-header { @apply h-full flex-col justify-start py-1; writing-mode: vertical-rl; }
.secondary-collapsed .secondary-panel .field-grid { display: none; }
.workspace-collapsed .main-workspace .workspace-header { @apply h-full flex-col justify-start py-1; writing-mode: vertical-rl; }
.workspace-collapsed .main-workspace .workspace-header span,
.workspace-collapsed .main-workspace .table-wrap { display: none; }
.field-grid { @apply grid grid-cols-[132px_minmax(0,168px)] content-start; }
.field-label, .field-value { @apply min-h-[22px] border-b border-slate-300 px-1 py-0.5 text-[11px] leading-tight; }
.field-label { @apply bg-slate-200 text-slate-800; }
.field-value { @apply bg-teal-50 text-right text-slate-900; }
.field-value[data-field="manufacturer_name"] { @apply font-medium; }
.main-workspace { @apply min-w-0 overflow-hidden bg-catalog-surface; }
.data-panel { @apply min-w-0 overflow-hidden bg-catalog-surface; }
.table-wrap { @apply h-full overflow-auto; }
.variant-grid { @apply min-w-0 text-[11px]; min-width: var(--variant-min-width, 820px); }
.variant-header, .variant-row { @apply grid; grid-template-columns: var(--variant-columns); }
.variant-header { @apply sticky top-0 z-10; }
.variant-header-cell { @apply h-[22px] whitespace-nowrap border-b border-r border-slate-300 bg-slate-200 px-1 py-0.5 font-medium text-slate-800; }
.variant-row { @apply min-h-[22px] border-b border-slate-300; }
.variant-row:nth-child(even) { @apply bg-slate-100; }
.variant-row:hover { @apply bg-slate-200; }
.variant-cell { @apply min-w-0 whitespace-nowrap border-r border-slate-300 px-1 py-0.5 text-center text-slate-800; }
.variant-cell[data-label=""] { @apply p-0; }
.empty-row { @apply py-4 text-center text-slate-500; }
.variant-cell.problem-ean { @apply bg-red-600 font-semibold text-white; }
.modal-backdrop { @apply fixed inset-0 z-50 flex items-center justify-center bg-slate-900/50 p-4; }
.modal-backdrop[hidden] { display: none; }
.suggested-dialog, .source-dialog, .settings-dialog { @apply max-h-[90vh] w-full overflow-hidden rounded-lg border border-slate-300 bg-slate-50 shadow-2xl; }
.suggested-dialog { @apply max-w-2xl; }
.source-dialog { @apply max-w-3xl; }
.settings-dialog { @apply max-w-md; }
.suggested-header { @apply flex items-center justify-between border-b border-slate-300 bg-slate-200 px-3 py-2; }
.suggested-header h2 { @apply m-0 text-sm font-semibold text-slate-800; }
.modal-close, .settings-test-button { @apply rounded border border-slate-300 bg-white px-2 py-1 text-[11px] text-slate-800 shadow-sm hover:bg-slate-100; }
.suggested-list, .source-list, .settings-content { @apply max-h-[calc(90vh-48px)] overflow-y-auto p-2; }
.settings-content { @apply grid gap-2; }
.settings-group { @apply m-0 rounded border border-slate-300 p-2; }
.settings-group legend { @apply px-1 text-xs font-semibold text-slate-700; }
.settings-option { @apply flex items-center gap-1 py-0.5 text-[11px] text-slate-700; }
.settings-option input { @apply accent-catalog-focus; }
.settings-option input:disabled + span { @apply text-slate-400; }
.local-db-fields { @apply grid gap-1; }
.local-db-fields[hidden] { display: none; }
.settings-field { @apply grid grid-cols-[72px_minmax(0,1fr)] items-center gap-2 text-[11px] text-slate-700; }
.settings-field input { @apply min-w-0 rounded border border-slate-300 bg-white px-1 py-1 text-[11px]; }
.settings-select { @apply min-w-0 rounded border border-slate-300 bg-white px-1 py-1 text-[11px] text-slate-800; }
.settings-note, .settings-permissions { @apply m-0 text-[10px] leading-tight text-slate-500; }
.settings-permissions { @apply grid gap-0.5; }
.connection-ok { @apply text-emerald-700; }
.connection-error { @apply text-red-700; }
.suggested-row { @apply grid grid-cols-[40px_minmax(0,1fr)_auto] items-center gap-2 border-b border-slate-200 px-1 py-1 text-[11px]; }
.suggested-row:nth-child(even) { @apply bg-slate-100; }
.suggested-row img { @apply h-9 w-9 object-contain; }
.suggested-id, .suggested-active { @apply text-slate-500; }
.suggested-name, .suggested-reference { @apply min-w-0 truncate; }
.suggested-pick, .source-row-action, .source-picture-action { @apply rounded border border-slate-300 bg-white px-1.5 py-0.5 text-[10px] hover:bg-slate-100; }
.source-section { @apply mb-2 overflow-hidden rounded border border-slate-300; }
.source-section-header, .source-row { @apply flex items-center justify-between gap-2 border-b border-slate-200 px-2 py-1 text-[11px]; }
.source-section-header { @apply bg-slate-200 font-semibold; }
.source-section-actions { @apply flex items-center gap-1; }
.source-row { @apply bg-white hover:bg-slate-100; }
.source-row-title { @apply min-w-0 flex-1 truncate; }
.source-status, .source-row-action { @apply shrink-0 rounded px-1 text-[10px]; }
.source-status.is-ok { @apply bg-emerald-100 text-emerald-700; }
.source-status.is-muted { @apply bg-slate-200 text-slate-600; }
.picture-candidate { @apply grid grid-cols-[72px_minmax(0,1fr)] items-center gap-2 border-b border-slate-200 p-1 text-[10px]; }
.picture-candidate img { @apply h-16 w-[72px] object-contain; }
.picture-candidate span { @apply min-w-0 truncate; }
@media (max-width: 980px) {
.catalog-screen { @apply flex flex-col pl-0; }
.catalog-screen.sidebar-collapsed { @apply pl-0; }
.sidebar-drawer { @apply w-[min(18rem,calc(100vw-1rem))] min-h-0; }
.sidebar-drawer:not([aria-hidden="true"]) { @apply max-h-screen; }
.sidebar-drawer[aria-hidden="true"] { @apply -translate-x-full; }
.sidebar-open-button { @apply left-2 top-2; }
.secondary-panel { @apply border-r-0 pt-0; }
.secondary-panel { @apply order-1; }
.main-workspace { @apply order-2; }
.table-wrap { @apply max-h-[70vh]; }
.column-header { @apply h-7; writing-mode: horizontal-tb; }
.secondary-collapsed .secondary-panel .column-header,
.workspace-collapsed .main-workspace .workspace-header { @apply h-7 flex-row py-0; writing-mode: horizontal-tb; }
.secondary-collapsed .secondary-panel .column-header span,
.workspace-collapsed .main-workspace .workspace-header span { display: inline; }
.workspace-collapsed .main-workspace .table-wrap { display: none; }
.variant-grid { @apply min-w-0; }
.variant-header { @apply hidden; }
.variant-row { @apply grid grid-cols-2 gap-x-2 border-b border-slate-300 p-2; grid-template-columns: repeat(2, minmax(0, 1fr)); }
.variant-cell { @apply flex min-h-7 items-center justify-between gap-2 border-b border-slate-200 px-1 py-1 text-right; white-space: normal; }
.variant-cell::before { content: attr(data-label); @apply shrink-0 text-left text-[10px] font-medium text-slate-500; }
.variant-cell[data-label=""]::before { content: none; }
.variant-cell[data-label=""] { @apply col-span-2; }
.variant-message-row { @apply block; }
html.dark .variant-row { @apply border-slate-700; }
html.dark .variant-cell { @apply border-slate-700; }
}
@media (min-width: 981px) {
.sidebar-overlay { display: none; }
}
html:not(.dark) .control-panel { @apply bg-slate-100 text-slate-700; }
html:not(.dark) .sidebar-drawer-header,
html:not(.dark) .sidebar-footer { @apply border-slate-300; }
html:not(.dark) .sidebar-drawer-title { @apply text-slate-500; }
html:not(.dark) .sidebar-close-button,
html:not(.dark) .sidebar-open-button,
html:not(.dark) .drawer-trigger,
html:not(.dark) .arrow-button,
html:not(.dark) .action-button,
html:not(.dark) .input-like { @apply border-slate-300 bg-white text-slate-700; }
html:not(.dark) .sidebar-close-button:hover,
html:not(.dark) .sidebar-open-button:hover,
html:not(.dark) .drawer-trigger:hover,
html:not(.dark) .arrow-button:hover:not(:disabled),
html:not(.dark) .action-button:hover:not(:disabled) { @apply border-slate-400 bg-slate-200 text-slate-900; }
html:not(.dark) .arrow-button::before { @apply text-slate-700; }
html:not(.dark) #scanInput { @apply bg-slate-200 placeholder:text-slate-500; }
html:not(.dark) .picture-slot,
html:not(.dark) .mapping-box { @apply border-slate-300 bg-white text-slate-600; }
html:not(.dark) .mapping-toggle::before { @apply text-slate-700; }
html:not(.dark) .app-status { @apply border-slate-300 bg-white text-slate-700; }
html:not(.dark) .manufacturer-trigger { @apply border-slate-300 bg-white text-slate-700; }
html:not(.dark) .manufacturer-trigger:hover { @apply border-slate-400 bg-slate-200; }
html:not(.dark) .column-header { @apply border-slate-300 text-slate-600; }
html.contrast-light-high:not(.dark) .control-panel { @apply bg-slate-200 text-slate-900; }
html.contrast-light-high:not(.dark) .action-button,
html.contrast-light-high:not(.dark) .arrow-button,
html.contrast-light-high:not(.dark) .input-like,
html.contrast-light-high:not(.dark) .manufacturer-trigger { @apply border-slate-500 text-slate-900; }
html.contrast-light-high:not(.dark) .sidebar-icon { @apply text-slate-700; }
html.dark body { @apply bg-slate-950 text-slate-100; }
html.dark .control-panel { @apply bg-slate-950; }
html.dark .secondary-panel { @apply border-slate-700 bg-slate-800; }
html.dark .data-panel { @apply bg-slate-950; }
html.dark .field-label { @apply border-slate-700 bg-slate-800 text-slate-200; }
html.dark .field-value { @apply border-slate-700 bg-slate-900 text-slate-100; }
html.dark .variant-header-cell { @apply border-slate-700 bg-slate-800 text-slate-100; }
html.dark .variant-row { @apply border-slate-700; }
html.dark .variant-row:nth-child(even) { @apply bg-slate-800; }
html.dark .variant-row:hover { @apply bg-slate-700; }
html.dark .variant-cell { @apply border-slate-700 text-slate-200; }
html.dark .arrow-button,
html.dark .action-button,
html.dark .input-like { @apply border-slate-600 bg-slate-800 text-slate-100; }
html.dark .arrow-button:hover:not(:disabled),
html.dark .action-button:hover:not(:disabled) { @apply border-slate-400 bg-slate-700; }
html.dark #scanInput { @apply bg-slate-700 placeholder:text-slate-400; }
html.dark .manufacturer-menu { @apply border-slate-700 bg-slate-900; }
html.dark .manufacturer-search { @apply border-slate-600 bg-slate-800 text-slate-100; }
html.dark .manufacturer-option { @apply text-slate-200 hover:bg-slate-800; }
html.dark .manufacturer-option[aria-selected="true"] { @apply bg-slate-700 text-white; }
html.dark .column-header { @apply border-slate-700 text-slate-300; }
html.contrast-dark-high.dark .control-panel { @apply bg-slate-950 text-white; }
html.contrast-dark-high.dark .action-button,
html.contrast-dark-high.dark .arrow-button,
html.contrast-dark-high.dark .input-like,
html.contrast-dark-high.dark .manufacturer-trigger { @apply border-slate-500 bg-slate-700 text-white; }
html.contrast-dark-high.dark .sidebar-icon { @apply text-slate-100; }
html.dark .settings-dialog,
html.dark .suggested-dialog,
html.dark .source-dialog { @apply border-slate-700 bg-slate-900; }
html.dark .suggested-header { @apply border-slate-700 bg-slate-800; }
html.dark .suggested-header h2,
html.dark .settings-group legend,
html.dark .settings-option,
html.dark .settings-field { @apply text-slate-100; }
html.dark .settings-group { @apply border-slate-700; }
html.dark .settings-field input { @apply border-slate-600 bg-slate-800 text-slate-100; }
html.dark .modal-close,
html.dark .settings-test-button,
html.dark .suggested-pick,
html.dark .source-row-action,
html.dark .source-picture-action { @apply border-slate-600 bg-slate-800 text-slate-100 hover:bg-slate-700; }
html.dark .source-section { @apply border-slate-700; }
html.dark .source-section-header { @apply border-slate-700 bg-slate-800 text-slate-100; }
html.dark .source-row { @apply border-slate-700 bg-slate-900 text-slate-100 hover:bg-slate-800; }
html.dark .suggested-row,
html.dark .picture-candidate { @apply border-slate-700; }
html.dark .suggested-row:nth-child(even) { @apply bg-slate-800; }
}