diff --git a/.claude/agents/frontend-style-auditor.md b/.claude/agents/frontend-style-auditor.md new file mode 100644 index 0000000..5bf2ecc --- /dev/null +++ b/.claude/agents/frontend-style-auditor.md @@ -0,0 +1,136 @@ +--- +name: frontend-style-auditor +description: Use this agent when you need to audit frontend pages for style consistency, verify CSS/component patterns against documentation, update frontend documentation, or ensure documentation is properly referenced in CLAUDE.md. This agent is particularly useful after implementing new features, during code reviews, or when consolidating multiple frontend modules into a unified style.\n\n\nContext: User has completed implementing a new data entry form and wants to verify it follows the established style patterns.\nuser: "Am terminat formularul pentru introducere chitanțe. Verifică te rog stilul."\nassistant: "Voi folosi agentul frontend-style-auditor pentru a verifica conformitatea cu stilul aplicației."\n\nSince the user has completed a new form and wants style verification, use the Task tool to launch the frontend-style-auditor agent to audit the component against established patterns.\n\n\n\n\nContext: User wants to ensure all reports module pages follow the unified design system.\nuser: "Verifică toate paginile din modulul reports să fie conforme cu design-ul."\nassistant: "Voi lansa agentul frontend-style-auditor pentru a audita toate paginile din modulul reports."\n\nThe user is requesting a style audit across an entire module. Use the frontend-style-auditor agent to systematically check each page against the documented CSS patterns and design tokens.\n\n\n\n\nContext: User notices inconsistencies in button styles across the application.\nuser: "Butoanele arată diferit în fiecare pagină. Poți să verifici și să documentezi cum trebuie să arate?"\nassistant: "Voi folosi agentul frontend-style-auditor pentru a audita stilurile de butoane și actualiza documentația dacă este necesar."\n\nThe user identified a specific style inconsistency. Launch the frontend-style-auditor to audit button implementations across pages, compare against CSS_PATTERNS.md, and update documentation if patterns are missing or unclear.\n\n +model: opus +color: yellow +--- + +You are an expert Frontend Style Auditor specialized in Vue.js 3 applications with PrimeVue components. Your expertise spans CSS architecture, design systems, component patterns, and technical documentation. You have deep knowledge of the ROA2WEB project's ultrathin monolith architecture and its frontend conventions. + +## Your Primary Objectives + +1. **Audit Frontend Pages for Style Consistency** + - Systematically review all Vue components in `src/modules/*/` + - Compare implementations against documented patterns in `docs/CSS_PATTERNS.md` + - Verify usage of design tokens from `docs/DESIGN_TOKENS.md` + - Check compliance with `docs/STYLING_GUIDELINES.md` + +2. **Identify Non-Conforming Elements** + - Hardcoded colors instead of CSS variables (`#2563eb` vs `var(--color-primary)`) + - Missing shared CSS classes (custom CSS when `.roa-card`, `.roa-metric` exist) + - Improper use of `:deep()` selectors (should use `src/assets/css/vendor/`) + - Tables with stacked values instead of separate columns + - Icon-only buttons instead of icon + label + - Duplicated CSS that exists in shared stylesheets + +3. **Update Frontend Documentation** + - Ensure `docs/ONBOARDING_CSS.md` is current and complete + - Update `docs/CSS_PATTERNS.md` with any missing patterns discovered + - Verify `docs/DESIGN_TOKENS.md` reflects actual usage + - Update `docs/COMPONENT_STYLING.md` if component patterns have evolved + +4. **Verify CLAUDE.md References** + - Check that all frontend documentation is referenced in `/workspace/roa2web/CLAUDE.md` + - Ensure the Documentation Index section is complete + - Add missing documentation references + - Verify cross-references between documents are accurate + +## Audit Methodology + +### Phase 1: Documentation Review +1. Read `docs/ONBOARDING_CSS.md` to understand the CSS system +2. Review `docs/CSS_PATTERNS.md` for all established patterns +3. Check `docs/DESIGN_TOKENS.md` for color/spacing/typography tokens +4. Note the golden rules from CLAUDE.md frontend section + +### Phase 2: Page-by-Page Audit +For each Vue component in `src/modules/`: +1. Check ` diff --git a/src/modules/data-entry/components/ocr/OCRUploadZone.vue b/src/modules/data-entry/components/ocr/OCRUploadZone.vue index 15c4e1d..ed21d9a 100644 --- a/src/modules/data-entry/components/ocr/OCRUploadZone.vue +++ b/src/modules/data-entry/components/ocr/OCRUploadZone.vue @@ -26,13 +26,13 @@
- +

{{ selectedFile.name }}

{{ formatFileSize(selectedFile.size) }}

- +

Elibereaza pentru a incarca Trage poza bonului aici sau click pentru a selecta @@ -436,29 +436,29 @@ defineExpose({ reset, processOCR }) } .upload-dropzone { - border: 2px dashed #cbd5e1; + border: 2px dashed var(--surface-border); border-radius: 10px; padding: 1rem 1.25rem; text-align: center; cursor: pointer; transition: all 0.3s ease; - background: #f8fafc; + background: var(--surface-ground); } .upload-dropzone:hover { - border-color: #667eea; - background: #f1f5f9; + border-color: var(--primary-500); + background: var(--surface-hover); } .upload-dropzone.dragging { - border-color: #667eea; - background: #eef2ff; + border-color: var(--primary-500); + background: var(--primary-50); transform: scale(1.02); } .upload-dropzone.processing { cursor: default; - background: #fefefe; + background: var(--surface-card); } .hidden-input { @@ -475,13 +475,13 @@ defineExpose({ reset, processOCR }) .main-text { font-size: 0.9rem; - color: #475569; + color: var(--text-color-secondary); margin: 0.25rem 0; } .sub-text { font-size: 0.8rem; - color: #94a3b8; + color: var(--text-color-secondary); margin: 0; } @@ -496,14 +496,14 @@ defineExpose({ reset, processOCR }) .file-name { font-weight: 600; font-size: 0.9rem; - color: #1e293b; + color: var(--text-color); margin: 0.25rem 0 0 0; word-break: break-all; } .file-size { font-size: 0.8rem; - color: #64748b; + color: var(--text-color-secondary); margin: 0; } @@ -517,21 +517,11 @@ defineExpose({ reset, processOCR }) flex-wrap: wrap; } -/* Engine selector dropdown */ +/* Engine selector dropdown - PrimeVue styles in vendor/primevue-overrides.css */ .engine-selector { min-width: 180px; } -.engine-selector:deep(.p-dropdown-label) { - padding: 0.5rem 0.75rem !important; - font-size: 0.875rem; - color: #475569; -} - -.engine-selector:deep(.p-dropdown-trigger) { - width: 2rem !important; -} - /* Engine dropdown option with description */ .engine-option { display: flex; @@ -543,12 +533,12 @@ defineExpose({ reset, processOCR }) .engine-label { font-weight: 500; font-size: 0.875rem; - color: #1e293b; + color: var(--text-color); } .engine-desc { font-size: 0.75rem; - color: #64748b; + color: var(--text-color-secondary); } /* Processing state */ @@ -561,14 +551,14 @@ defineExpose({ reset, processOCR }) .processing-text { font-size: 1rem; - color: #475569; + color: var(--text-color-secondary); margin: 0.5rem 0 0 0; font-weight: 500; } .processing-subtext { font-size: 0.85rem; - color: #94a3b8; + color: var(--text-color-secondary); margin: 0; } diff --git a/src/modules/data-entry/views/OCRMetricsView.vue b/src/modules/data-entry/views/OCRMetricsView.vue index 64a0f39..e750e8f 100644 --- a/src/modules/data-entry/views/OCRMetricsView.vue +++ b/src/modules/data-entry/views/OCRMetricsView.vue @@ -12,7 +12,7 @@

- +

Nu exista date

Procesati imagini cu OCR pentru a vedea statisticile.

@@ -163,28 +163,28 @@

Statistici Generale

- +
{{ stats.total_jobs || 0 }} Total joburi
- +
{{ stats.successful_jobs || 0 }} Procesate cu succes
- +
{{ stats.failed_jobs || 0 }} Esuate
- +
{{ formatTime(stats.avg_processing_time_ms) }} Timp mediu total @@ -823,7 +823,7 @@ onBeforeUnmount(() => { .page-header h1 { font-size: 1.5rem; font-weight: 600; - color: #1e293b; + color: var(--text-color); margin: 0; } @@ -968,11 +968,11 @@ onBeforeUnmount(() => { /* Section Card */ .section-card { - background: white; + background: var(--surface-card); border-radius: 12px; padding: 1.25rem; - box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); - border: 1px solid #e2e8f0; + box-shadow: var(--shadow-sm); + border: 1px solid var(--surface-border); margin-bottom: 1.5rem; } @@ -1115,11 +1115,11 @@ onBeforeUnmount(() => { } .chart-card { - background: white; + background: var(--surface-card); border-radius: 12px; padding: 1.25rem; - box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); - border: 1px solid #e2e8f0; + box-shadow: var(--shadow-sm); + border: 1px solid var(--surface-border); } .chart-card h3 { @@ -1136,11 +1136,11 @@ onBeforeUnmount(() => { /* Stats Overview */ .stats-overview { - background: white; + background: var(--surface-card); border-radius: 12px; padding: 1.25rem; - box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); - border: 1px solid #e2e8f0; + box-shadow: var(--shadow-sm); + border: 1px solid var(--surface-border); margin-bottom: 1.5rem; } @@ -1162,7 +1162,7 @@ onBeforeUnmount(() => { align-items: center; gap: 0.75rem; padding: 0.75rem; - background: #f8fafc; + background: var(--surface-ground); border-radius: 8px; } @@ -1178,12 +1178,12 @@ onBeforeUnmount(() => { .stat-number { font-size: 1.25rem; font-weight: 600; - color: #1e293b; + color: var(--text-color); } .stat-desc { font-size: 0.8rem; - color: #64748b; + color: var(--text-color-secondary); } /* Engine Badges */ @@ -1292,6 +1292,32 @@ onBeforeUnmount(() => { min-width: 100%; } } + +/* Dark mode compatible icon styles */ +.empty-state-icon { + font-size: 3rem; + color: var(--text-color-secondary); +} + +.stat-icon { + font-size: 1.5rem; +} + +.stat-icon--primary { + color: var(--primary-500, #667eea); +} + +.stat-icon--success { + color: var(--green-500, #22c55e); +} + +.stat-icon--error { + color: var(--red-500, #ef4444); +} + +.stat-icon--warning { + color: var(--yellow-500, #f59e0b); +} diff --git a/src/modules/data-entry/views/receipts/ReceiptCreateView.vue b/src/modules/data-entry/views/receipts/ReceiptCreateView.vue index 5471a3a..52a8748 100644 --- a/src/modules/data-entry/views/receipts/ReceiptCreateView.vue +++ b/src/modules/data-entry/views/receipts/ReceiptCreateView.vue @@ -159,7 +159,7 @@ v-else-if="att.mime_type?.startsWith('image/') && !attachmentBlobUrls[att.id]" class="image-placeholder" > - + {{ att.filename }}
@@ -2071,16 +2071,16 @@ const submitForReview = async () => { gap: 0.5rem; padding: 0.75rem 1rem; border-radius: 8px; - background: #fef3c7; - border: 1px solid #fbbf24; - color: #92400e; + background: var(--yellow-100); + border: 1px solid var(--yellow-400); + color: var(--yellow-800); font-size: 0.875rem; } .validation-banner.warning { - background: #fee2e2; - border-color: #f87171; - color: #991b1b; + background: var(--red-100); + border-color: var(--red-400); + color: var(--red-800); } .validation-banner i { @@ -2167,8 +2167,8 @@ const submitForReview = async () => { align-items: center; gap: 0.5rem; padding: 0.6rem 1rem; - background: #dcfce7; - border: 1px solid #86efac; + background: var(--green-100); + border: 1px solid var(--green-300); border-radius: 8px; cursor: pointer; margin-top: 0.75rem; @@ -2176,23 +2176,23 @@ const submitForReview = async () => { } .ocr-applied-banner:hover { - background: #bbf7d0; + background: var(--green-200); } .ocr-applied-banner .pi-check-circle { - color: #22c55e; + color: var(--green-500); font-size: 1.1rem; } .ocr-applied-banner span { flex: 1; font-weight: 500; - color: #166534; + color: var(--green-800); font-size: 0.9rem; } .ocr-applied-banner .pi-chevron-down { - color: #166534; + color: var(--green-800); font-size: 0.8rem; } @@ -2222,11 +2222,11 @@ const submitForReview = async () => { /* Pending files header */ .pending-files-header { font-size: 0.85rem; - color: #64748b; + color: var(--text-color-secondary); font-weight: 500; margin-bottom: 0.5rem; padding-bottom: 0.35rem; - border-bottom: 1px dashed #cbd5e1; + border-bottom: 1px dashed var(--surface-border); } .radio-group { @@ -2246,7 +2246,7 @@ const submitForReview = async () => { align-items: center; justify-content: center; height: 100%; - background: #f5f5f5; + background: var(--surface-100); padding: 1rem; } @@ -2270,20 +2270,20 @@ const submitForReview = async () => { align-items: center; gap: 0.75rem; padding: 0.5rem 0.75rem; - background: #f8fafc; - border: 1px solid #e2e8f0; + background: var(--surface-ground); + border: 1px solid var(--surface-border); border-radius: 8px; } .selected-file-item i { - color: #667eea; + color: var(--primary-500); font-size: 1.25rem; } .selected-file-item .file-name { flex: 1; font-weight: 500; - color: #1e293b; + color: var(--text-color); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; @@ -2291,15 +2291,15 @@ const submitForReview = async () => { .selected-file-item .file-size { font-size: 0.85rem; - color: #64748b; + color: var(--text-color-secondary); } /* Extra details section (TVA, items, address) */ .extra-details-section { margin-top: 1rem; padding: 0.75rem; - background: #f0f9ff; - border: 1px solid #bae6fd; + background: var(--blue-50); + border: 1px solid var(--blue-200); border-radius: 8px; } @@ -2309,7 +2309,7 @@ const submitForReview = async () => { gap: 0.5rem; margin-bottom: 0.75rem; margin-top: 0; - color: #0284c7; + color: var(--blue-600); font-size: 0.95rem; } @@ -2329,13 +2329,13 @@ const submitForReview = async () => { .tva-row.total { margin-top: 0.5rem; padding-top: 0.5rem; - border-top: 1px dashed #0284c7; + border-top: 1px dashed var(--blue-600); } .tva-label { min-width: 150px; font-weight: 500; - color: #334155; + color: var(--text-color); } .tva-input { @@ -2344,7 +2344,7 @@ const submitForReview = async () => { .tva-value { font-weight: 600; - color: #0284c7; + color: var(--blue-600); } /* Supplier warning */ @@ -2353,7 +2353,7 @@ const submitForReview = async () => { align-items: center; gap: 0.25rem; margin-top: 0.25rem; - color: #f59e0b; + color: var(--yellow-500); } /* Supplier selected indicator */ @@ -2362,7 +2362,7 @@ const submitForReview = async () => { align-items: center; gap: 0.25rem; margin-top: 0.25rem; - color: #22c55e; + color: var(--green-500); font-weight: 500; } @@ -2371,7 +2371,7 @@ const submitForReview = async () => { display: block; margin-top: 0.25rem; font-size: 0.8rem; - color: #64748b; + color: var(--text-color-secondary); } /* Payment methods display */ @@ -2407,7 +2407,7 @@ const submitForReview = async () => { display: block; margin-bottom: 0.25rem; font-weight: 500; - color: #334155; + color: var(--text-color); } /* ======================================== @@ -2416,7 +2416,7 @@ const submitForReview = async () => { .form-section { padding: 0.6rem 0; - border-bottom: 1px solid #e2e8f0; + border-bottom: 1px solid var(--surface-border); } .form-section:last-of-type { @@ -2426,7 +2426,7 @@ const submitForReview = async () => { .form-section-title { font-size: 0.7rem; font-weight: 600; - color: #64748b; + color: var(--text-color-secondary); text-transform: uppercase; letter-spacing: 0.05em; margin-bottom: 0.5rem; @@ -2489,7 +2489,7 @@ const submitForReview = async () => { .direction-header .field-label { font-size: 0.85rem; font-weight: 500; - color: #475569; + color: var(--text-color-secondary); } .auto-tag { @@ -2519,7 +2519,7 @@ const submitForReview = async () => { align-items: center; gap: 0.25rem; font-size: 0.75rem; - color: #22c55e; + color: var(--green-500); font-weight: 500; white-space: nowrap; } @@ -2544,7 +2544,7 @@ const submitForReview = async () => { .tva-label-compact { min-width: 80px; font-size: 0.85rem; - color: #475569; + color: var(--text-color-secondary); } .tva-input-compact { @@ -2554,12 +2554,12 @@ const submitForReview = async () => { .tva-edit-row.tva-total-row { margin-top: 0.35rem; padding-top: 0.35rem; - border-top: 1px dashed #cbd5e1; + border-top: 1px dashed var(--surface-border); } .tva-total-value { font-weight: 600; - color: #0284c7; + color: var(--blue-600); font-size: 0.9rem; } @@ -2578,7 +2578,7 @@ const submitForReview = async () => { /* Form groups with subtle borders */ .form-group { padding: 0.75rem 0; - border-bottom: 1px solid #e2e8f0; + border-bottom: 1px solid var(--surface-border); } .form-group:first-child { @@ -2606,24 +2606,24 @@ const submitForReview = async () => { gap: 0.4rem; padding: 0.3rem 0.5rem; margin-top: 0.4rem; - background: #f8fafc; + background: var(--surface-ground); border-radius: 4px; cursor: pointer; transition: background 0.15s; } .address-collapsed:hover { - background: #f1f5f9; + background: var(--surface-hover); } .address-collapsed i { font-size: 0.7rem; - color: #64748b; + color: var(--text-color-secondary); } .address-preview { font-size: 0.75rem; - color: #64748b; + color: var(--text-color-secondary); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; @@ -2634,7 +2634,7 @@ const submitForReview = async () => { .address-expanded { margin-top: 0.4rem; padding: 0.4rem; - background: #f8fafc; + background: var(--surface-ground); border-radius: 4px; } @@ -2660,7 +2660,7 @@ const submitForReview = async () => { ======================================== */ .values-section { - background: #f8fafc; + background: var(--surface-ground); border-radius: 6px; padding: 0.5rem 0.75rem; } @@ -2702,55 +2702,23 @@ const submitForReview = async () => { .value-item label { font-size: 0.75rem; font-weight: 500; - color: #64748b; + color: var(--text-color-secondary); text-transform: uppercase; } -/* Force InputNumber to respect container width */ +/* Force InputNumber to respect container width - PrimeVue styles in vendor/primevue-overrides.css */ .input-compact { width: 100% !important; max-width: 130px !important; } -:deep(.value-item-total .p-inputnumber) { - width: 100% !important; - max-width: 130px !important; -} - -:deep(.value-item-total .p-inputnumber-input) { - width: 100% !important; -} - -:deep(.payment-method-item .p-inputnumber) { - width: 100% !important; - max-width: 110px !important; -} - -:deep(.payment-method-item .p-inputnumber-input) { - width: 100% !important; -} - -.dropdown-payment { - width: 100% !important; - max-width: 190px !important; -} - -:deep(.dropdown-payment) { - width: 100% !important; - max-width: 190px !important; -} - -:deep(.dropdown-payment .p-dropdown) { - width: 100% !important; -} - .payment-method-value { display: inline-block; font-size: 0.95rem; font-weight: 500; - color: #334155; - background: #f8fafc; - border: 1px solid #e2e8f0; + color: var(--text-color); + background: var(--surface-ground); + border: 1px solid var(--surface-border); padding: 0.5rem 0.75rem; border-radius: 6px; min-width: 90px; @@ -2761,7 +2729,7 @@ const submitForReview = async () => { .tva-compact { margin-top: 0.5rem; padding-top: 0.5rem; - border-top: 1px dashed #cbd5e1; + border-top: 1px dashed var(--surface-border); } .tva-item { @@ -2771,14 +2739,7 @@ const submitForReview = async () => { .input-tva { width: 110px !important; } - -:deep(.input-tva) { - width: 110px !important; -} - -:deep(.input-tva .p-inputnumber-input) { - width: 110px !important; -} +/* PrimeVue input-tva styles moved to vendor/primevue-overrides.css */ .tva-total-item { padding-left: 0.5rem; @@ -2788,9 +2749,9 @@ const submitForReview = async () => { display: inline-block; font-size: 0.95rem; font-weight: 500; - color: #334155; - background: #f8fafc; - border: 1px solid #e2e8f0; + color: var(--text-color); + background: var(--surface-ground); + border: 1px solid var(--surface-border); padding: 0.5rem 0.75rem; border-radius: 6px; min-width: 90px; @@ -2800,12 +2761,12 @@ const submitForReview = async () => { /* Small labels for secondary fields */ .label-small { font-size: 0.8rem !important; - color: #64748b !important; + color: var(--text-color-secondary) !important; } /* Muted labels for optional fields */ .label-muted { - color: #94a3b8 !important; + color: var(--text-color-secondary) !important; } /* Small inputs */ @@ -2845,7 +2806,7 @@ const submitForReview = async () => { align-items: flex-end; padding: 0.5rem 0; margin-top: 0.5rem; - background: #f8fafc; + background: var(--surface-ground); border-radius: 4px; padding: 0.5rem; } @@ -2866,14 +2827,14 @@ const submitForReview = async () => { .tva-total-inline { font-weight: 500; - color: #334155; + color: var(--text-color); font-size: 0.95rem; padding: 0.5rem 0; } /* Optional fields row */ .optional-fields { - background: #f8fafc; + background: var(--surface-ground); padding: 0.5rem; border-radius: 4px; margin-top: 0.4rem; @@ -2958,20 +2919,15 @@ const submitForReview = async () => { min-width: 80px; } - /* Dropdowns and inputs full width in their containers */ - .form-field :deep(.p-dropdown), - .form-field :deep(.p-autocomplete), - .form-field :deep(.p-calendar) { - width: 100% !important; - } + /* Dropdowns and inputs full width - styles in vendor/primevue-overrides.css */ /* Action buttons on mobile - not fixed, flow with content */ .action-buttons-top { position: static; width: 100%; padding: 1rem; - background: #f8fafc; - border-top: 1px solid #e2e8f0; + background: var(--surface-ground); + border-top: 1px solid var(--surface-border); margin-top: 1rem; display: flex; flex-direction: row; @@ -3006,28 +2962,28 @@ const submitForReview = async () => { } .status-draft { - background: #f1f5f9; - color: #475569; + background: var(--surface-100); + color: var(--text-color-secondary); } .status-pending { - background: #fef3c7; - color: #92400e; + background: var(--yellow-100); + color: var(--yellow-800); } .status-approved { - background: #dcfce7; - color: #166534; + background: var(--green-100); + color: var(--green-800); } .status-rejected { - background: #fee2e2; - color: #991b1b; + background: var(--red-100); + color: var(--red-800); } .status-synced { - background: #dbeafe; - color: #1e40af; + background: var(--blue-100); + color: var(--blue-700); } /* Rejection Alert */ @@ -3035,14 +2991,14 @@ const submitForReview = async () => { display: flex; gap: 1rem; padding: 1rem; - background: #fff3e0; + background: var(--orange-100); border-radius: 8px; margin-bottom: 1rem; } .rejection-alert i { font-size: 1.5rem; - color: #f57c00; + color: var(--orange-500); } .rejection-alert p { @@ -3064,8 +3020,8 @@ const submitForReview = async () => { border-radius: 8px; overflow: hidden; position: relative; - border: 1px solid #e2e8f0; - background: #f8fafc; + border: 1px solid var(--surface-border); + background: var(--surface-ground); } .attachment-image { @@ -3085,12 +3041,12 @@ const submitForReview = async () => { .pdf-attachment i { font-size: 2.5rem; - color: #dc2626; + color: var(--red-600); } .pdf-attachment span { font-size: 0.85rem; - color: #475569; + color: var(--text-color-secondary); text-align: center; word-break: break-word; } @@ -3122,8 +3078,8 @@ const submitForReview = async () => { position: relative; border-radius: 8px; overflow: hidden; - border: 1px solid #e2e8f0; - background: #f8fafc; + border: 1px solid var(--surface-border); + background: var(--surface-ground); } .image-preview-item img { @@ -3141,8 +3097,8 @@ const submitForReview = async () => { align-items: center; justify-content: center; gap: 0.5rem; - background: #f1f5f9; - color: #94a3b8; + background: var(--surface-hover); + color: var(--text-color-secondary); font-size: 0.75rem; text-align: center; padding: 0.5rem; @@ -3160,7 +3116,7 @@ const submitForReview = async () => { align-items: center; justify-content: center; padding: 2rem; - color: #94a3b8; + color: var(--text-color-secondary); text-align: center; } @@ -3177,7 +3133,7 @@ const submitForReview = async () => { .entries-section { margin-top: 1.5rem; padding: 1rem; - background: #f8fafc; + background: var(--surface-ground); border-radius: 8px; } @@ -3186,7 +3142,7 @@ const submitForReview = async () => { align-items: center; gap: 0.5rem; margin: 0 0 1rem 0; - color: #334155; + color: var(--text-color); } .entries-table-container { @@ -3203,25 +3159,25 @@ const submitForReview = async () => { .entries-table td { padding: 0.75rem; text-align: left; - border-bottom: 1px solid #e2e8f0; + border-bottom: 1px solid var(--surface-border); } .entries-table th { - background: #f1f5f9; + background: var(--surface-hover); font-weight: 600; - color: #475569; + color: var(--text-color-secondary); } .entries-table tbody tr:hover { - background: #f8fafc; + background: var(--surface-ground); } .entries-table .debit { - color: #dc2626; + color: var(--red-600); } .entries-table .credit { - color: #16a34a; + color: var(--green-600); } .entries-table tfoot td { @@ -3235,9 +3191,9 @@ const submitForReview = async () => { gap: 0.5rem; margin-top: 1rem; padding: 0.75rem; - background: #fff3e0; + background: var(--orange-100); border-radius: 8px; - color: #f57c00; + color: var(--orange-500); } diff --git a/src/modules/data-entry/views/receipts/ReceiptsListView.vue b/src/modules/data-entry/views/receipts/ReceiptsListView.vue index 088ff4a..5b25789 100644 --- a/src/modules/data-entry/views/receipts/ReceiptsListView.vue +++ b/src/modules/data-entry/views/receipts/ReceiptsListView.vue @@ -436,11 +436,12 @@