feat: Add PWA support and consolidate CSS design system

- Add PWA manifest, icons (192x192, 512x512), and service worker
- Register service worker in index.html with Apple mobile web app support
- Consolidate CSS variables and design tokens documentation
- Update PrimeVue overrides for consistent theming
- Refactor data-entry components to use shared CSS patterns
- Add frontend-style-auditor agent for style consistency checks
- Minor OCR validation and job worker improvements
- Update start-prod.sh configuration

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Claude Agent
2026-01-06 14:00:21 +00:00
parent b2fe26da3a
commit 1bb3a382de
33 changed files with 1846 additions and 513 deletions

View File

@@ -80,17 +80,17 @@
transition: background-color var(--transition-fast) !important;
}
/* DataTable Striped Rows - Global Pattern */
/* DataTable Striped Rows - Global Pattern (Dark Mode Compatible) */
.p-datatable .p-datatable-tbody > tr:nth-child(odd) {
background-color: #ffffff !important;
background-color: var(--surface-card) !important;
}
.p-datatable .p-datatable-tbody > tr:nth-child(even) {
background-color: #f8f9fa !important;
background-color: var(--surface-ground) !important;
}
.p-datatable .p-datatable-tbody > tr:hover {
background-color: #e3f2fd !important;
background-color: var(--surface-hover) !important;
cursor: pointer;
}
@@ -112,6 +112,7 @@
/* ===== Card ===== */
.p-card {
background: var(--surface-card) !important;
box-shadow: var(--shadow-sm) !important;
border: 1px solid var(--color-border) !important;
border-radius: var(--card-radius, 8px) !important;
@@ -125,6 +126,11 @@
.p-card .p-card-body {
padding: var(--space-lg) !important;
background: var(--surface-card) !important;
}
.p-card .p-card-content {
background: var(--surface-card) !important;
}
/* ===== Mobile Optimizations ===== */
@@ -136,3 +142,104 @@
font-size: 16px !important; /* Prevent iOS zoom */
}
}
/* ===== Compact DataTable (ReceiptsListView) ===== */
.compact-table .p-datatable-tbody > tr > td {
padding: 0.5rem 0.5rem;
font-size: 0.875rem;
}
.compact-table .p-datatable-thead > tr > th {
padding: 0.5rem 0.5rem;
font-size: 0.8rem;
}
.compact-table .p-paginator {
padding: 0.5rem;
}
.compact-table .p-datatable-wrapper {
overflow-x: auto;
}
/* ===== Receipt Form InputNumber (ReceiptCreateView) ===== */
.value-item-total .p-inputnumber {
width: 100% !important;
max-width: 130px !important;
}
.value-item-total .p-inputnumber-input {
width: 100% !important;
}
.payment-method-item .p-inputnumber {
width: 100% !important;
max-width: 110px !important;
}
.payment-method-item .p-inputnumber-input {
width: 100% !important;
}
.dropdown-payment {
width: 100% !important;
max-width: 190px !important;
}
.dropdown-payment .p-dropdown {
width: 100% !important;
}
.input-tva {
width: 110px !important;
}
.input-tva .p-inputnumber-input {
width: 110px !important;
}
/* ===== Receipt Form Mobile (ReceiptCreateView) ===== */
@media (max-width: 768px) {
.form-field .p-dropdown,
.form-field .p-autocomplete,
.form-field .p-calendar {
width: 100% !important;
}
}
/* ===== OCR Preview Mobile (OCRPreview) ===== */
@media (max-width: 768px) {
.preview-actions .p-button {
width: 100%;
}
}
/* ===== OCR Engine Selector (OCRUploadZone) ===== */
.engine-selector .p-dropdown-label {
padding: 0.5rem 0.75rem !important;
font-size: 0.875rem;
color: var(--text-color-secondary);
}
.engine-selector .p-dropdown-trigger {
width: 2rem !important;
}
/* ===== Table Card Striped Rows (InvoicesView) ===== */
/* Note: Uses design tokens for dark mode compatibility */
.table-card .p-datatable .p-datatable-tbody > tr {
transition: background-color 0.2s ease;
}
.table-card .p-datatable .p-datatable-tbody > tr:nth-child(odd) {
background-color: var(--surface-card, #ffffff);
}
.table-card .p-datatable .p-datatable-tbody > tr:nth-child(even) {
background-color: var(--surface-ground, #f8f9fa);
}
.table-card .p-datatable .p-datatable-tbody > tr:hover {
background-color: var(--surface-hover, #e3f2fd) !important;
cursor: pointer;
}