/* CSS Variables for theming */ :root { /* Base colors */ --bg-color: #f3f4f6; --text-color: #2d3748; /* Dashboard items */ --dashboard-bg: white; --dashboard-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); --dashboard-header-color: #2d3748; /* Content panels */ --content-bg: #f3f4f6; --content-border: 1px solid #e2e8f0; --content-text: #2d3748; /* Form elements */ --input-bg: white; --input-border: 1px solid #cbd5e0; --input-text: #4a5568; --label-color: #4a5568; /* Progress bar */ --progress-bg: #e2e8f0; --progress-fill: #4299e1; /* Sidebar */ --sidebar-bg: #1f2937; --sidebar-text: white; --sidebar-hover: #374151; /* Buttons */ --btn-primary-bg: #4299e1; --btn-primary-hover: #2b6cb0; --btn-warning-bg: #ef4444; --btn-warning-hover: #dc2626; --btn-caution-bg: #eab308; --btn-caution-hover: #ca8a04; --btn-success-bg: #22c55e; --btn-success-hover: #16a34a; --btn-disabled: #9ca3af; } @media (prefers-color-scheme: dark) { :root { /* Base colors */ --bg-color: #1e1e2e; --text-color: #e5e7eb; /* Dashboard items */ --dashboard-bg: #2e2e42; --dashboard-shadow: 0 2px 4px rgba(0, 0, 0, 0.3); --dashboard-header-color: #e2e8f0; /* Content panels */ --content-bg: #3b3b53; --content-border: none; --content-text: white; /* Form elements */ --input-bg: #2e2e42; --input-border: 2px solid #6b7280; --input-text: white; --label-color: #e2e8f0; /* Progress bar */ --progress-bg: #3b3b53; --progress-fill: #4299e1; /* Sidebar */ --sidebar-bg: #121220; --sidebar-text: #e5e7eb; --sidebar-hover: #374151; /* Buttons */ --btn-primary-bg: #4299e1; --btn-primary-hover: #2563eb; --btn-warning-bg: #f87171; --btn-warning-hover: #e11d48; --btn-caution-bg: #f59e0b; --btn-caution-hover: #d97706; --btn-success-bg: #34d399; --btn-success-hover: #059669; --btn-disabled: #9ca3af; } } /* General reset and body setup */ body, html { margin: 0; height: 100%; font-family: Arial, sans-serif; background-color: var(--bg-color); color: var(--text-color); } .flex { display: flex; } .h-screen { height: 100vh; } /* Flexbox centering for login */ .flex-center { display: flex; justify-content: center; align-items: center; height: 100vh; } .bg-gray { background-color: var(--bg-color); } /* Container setup for dashboard */ .container { display: flex; flex-direction: row; width: 100%; height: 100vh; } /* Sidebar styles */ .sidebar { width: 16rem; background-color: var(--sidebar-bg); color: var(--sidebar-text); padding: 1rem; display: flex; flex-direction: column; } .sidebar .title { font-size: 1.5rem; font-weight: bold; margin-bottom: 1.5rem; } .sidebar ul { list-style-type: none; } .sidebar a { color: var(--sidebar-text); text-decoration: none; padding: 0.5rem 0; display: block; margin-bottom: 0.5rem; border-radius: 0.25rem; } .sidebar a:hover { background-color: var(--sidebar-hover); } /* Main content area for dashboard */ .main-content { flex-grow: 1; padding: 2rem; display: flex; flex-direction: column; overflow-y: auto; } .header { display: flex; justify-content: flex-end; margin-bottom: 2rem; } .logout-btn { background-color: var(--btn-warning-bg); color: white; padding: 0.5rem 1rem; border: none; border-radius: 0.25rem; cursor: pointer; } .logout-btn:hover { background-color: var(--btn-warning-hover); } .content { background-color: var(--content-bg); color: var(--content-text); padding: 1.5rem; border: var(--content-border); border-radius: 0.5rem; box-shadow: var(--dashboard-shadow); flex-grow: 1; overflow-y: auto; } /* Login Container */ .login-container { background-color: var(--dashboard-bg); padding: 2rem; border-radius: 0.5rem; box-shadow: var(--dashboard-shadow); width: 24rem; } .login-title { font-size: 1.75rem; font-weight: bold; margin-bottom: 0.5rem; text-align: center; color: var(--dashboard-header-color); } .login-subtitle { font-size: 1.25rem; font-weight: normal; margin-bottom: 1.5rem; text-align: center; color: var(--label-color); } /* Input Fields */ .input-group { margin-bottom: 1rem; } .input-group label { display: block; color: var(--label-color); font-size: 0.875rem; font-weight: bold; margin-bottom: 0.5rem; } .input-field { width: 100%; padding: 0.5rem; border: var(--input-border); border-radius: 0.25rem; background-color: var(--input-bg); color: var(--input-text); font-size: 1rem; line-height: 1.5; box-shadow: 0 0 0 1px rgba(0, 0, 0, 0); transition: box-shadow 0.15s ease-in-out; } .input-field:focus { outline: none; box-shadow: 0 0 0 3px rgba(66, 153, 225, 0.5); } /* Inline input group for horizontal layout */ .inline-input-group { display: flex; flex-wrap: wrap; gap: 1rem; } .inline-input-group .input-group { flex: 1; min-width: 150px; } .card-input { width: 100%; padding: 0.5rem; border: var(--input-border); border-radius: 0.25rem; background-color: var(--input-bg); color: var(--input-text); font-size: 0.875rem; box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); transition: box-shadow 0.15s ease-in-out, border-color 0.15s ease-in-out; margin-bottom: 0.75rem; } .card-input:focus { outline: none; border-color: var(--btn-primary-bg); box-shadow: 0 0 0 3px rgba(66, 153, 225, 0.5); } /* Form Footer */ .form-footer { display: flex; justify-content: space-between; align-items: center; margin-top: 1rem; } .btn-primary { background-color: var(--btn-primary-bg); color: white; padding: 0.5rem 1rem; border-radius: 0.25rem; border: none; font-weight: bold; cursor: pointer; transition: background-color 0.2s; } .btn-primary:hover { background-color: var(--btn-primary-hover); } .forgot-password { color: var(--btn-primary-bg); font-size: 0.875rem; font-weight: bold; text-decoration: none; } .forgot-password:hover { color: var(--btn-primary-hover); } /* Login Message */ .login-message { margin-top: 1rem; text-align: center; font-size: 0.875rem; color: var(--label-color); } /* Dashboard-specific styles */ .dashboard-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); gap: 1rem; margin-top: 1rem; } .dashboard-item { background-color: var(--dashboard-bg); padding: 1rem; border-radius: 0.5rem; box-shadow: var(--dashboard-shadow); } .dashboard-item h2 { color: var(--dashboard-header-color); margin-top: 0; margin-bottom: 1rem; } .dashboard-item .content { background-color: var(--content-bg); color: var(--content-text); padding: 1.5rem; border-radius: 0.5rem; margin-bottom: 1rem; border: var(--content-border); } .dashboard-item .submenu-header { font-size: 1.25rem; font-weight: bold; margin-bottom: 1rem; color: var(--dashboard-header-color); } .dashboard-item .card-input { width: 100%; padding: 0.5rem; border: var(--input-border); border-radius: 0.25rem; background-color: var(--input-bg); color: var(--input-text); font-size: 0.875rem; margin-bottom: 0.75rem; } /* Document Upload Form Styling */ .document-row { margin-bottom: 1.5rem; } .document-field { margin-bottom: 1rem; } .document-field label { display: block; margin-bottom: 0.5rem; color: var(--label-color); } .document-field-row { display: flex; gap: 1.5rem; margin-top: 1rem; margin-bottom: 1rem; } .document-name-field { flex: 3; } .document-type-field { flex: 2; } #add-document { margin-top: 1rem; } /* Progress bar styling */ .progress { height: 20px; margin-bottom: 10px; overflow: hidden; background-color: var(--progress-bg, #e9ecef); border-radius: 4px; box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); } .progress-bar { float: left; width: 0; height: 100%; font-size: 12px; line-height: 20px; color: #fff; text-align: center; background-color: var(--progress-bar-bg, #0d6efd); box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); transition: width 0.6s ease; } /* Upload results styling */ .upload-results { margin-top: 20px; border: 1px solid var(--border-color); border-radius: 4px; padding: 15px; background-color: var(--card-bg); } .upload-results h4 { margin-top: 0; margin-bottom: 15px; color: var(--heading-color); } .job-result { margin-bottom: 15px; } .job-result h5 { margin-top: 0; margin-bottom: 10px; color: var(--subheading-color); } .job-result ul { list-style-type: none; padding-left: 0; margin-top: 0; margin-bottom: 0; } .job-result li { padding: 5px 0; } .job-result li.success { color: var(--success-color, #198754); } .job-result li.error { color: var(--error-color, #dc3545); } /* Loading indicator */ .loading-indicator { display: inline-block; width: 20px; height: 20px; border: 3px solid rgba(0, 0, 0, 0.3); border-radius: 50%; border-top-color: var(--progress-bar-bg, #0d6efd); animation: spin 1s ease-in-out infinite; vertical-align: middle; margin-left: 10px; } @keyframes spin { to { transform: rotate(360deg); } } /* Job list styling */ .job-list { list-style-type: none; padding-left: 0; max-height: 200px; overflow-y: auto; border: 1px solid var(--border-color); border-radius: 4px; padding: 10px; background-color: var(--input-bg); } .job-list li { padding: 5px 10px; cursor: pointer; transition: background-color 0.2s; } .job-list li:hover { background-color: var(--hover-bg); } .job-list li.selected { background-color: var(--selected-bg); color: var(--selected-text); } /* Style for error and not-found message display */ @keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } } .error, .not-found { text-align: center; padding: 0.75rem; border-radius: 0.25rem; font-size: 0.875rem; margin-top: 0.5rem; animation: fadeIn 0.3s ease-in-out; } .error { background-color: #fee2e2; border: 1px solid #ef4444; color: #b91c1c; } .not-found { background-color: #fef3c7; border: 1px solid #f59e0b; color: #92400e; } .error::before, .not-found::before { margin-right: 0.5rem; } .error::before { content: "⚠️"; } .not-found::before { content: "🔍"; } /* Fade effect for existing content */ .htmx-request .fade-me-out { opacity: 0.5; transition: opacity 0.3s ease-in-out; } /* Highlight effect for changed content */ @keyframes highlightBackground { 0% { background-color: #fef3c7; } 100% { background-color: transparent; } } .highlight-change { animation: highlightBackground 2s ease-in-out; } /* Button styles */ .warning-button { background-color: var(--btn-warning-bg); color: white; border: none; padding: 0.5rem 1rem; border-radius: 0.25rem; font-size: 0.875rem; cursor: pointer; transition: background-color 0.2s; margin-bottom: 1rem; } .warning-button:hover { background-color: var(--btn-warning-hover); } .warning-button:disabled { background-color: var(--btn-disabled); cursor: not-allowed; } .caution-button { background-color: var(--btn-caution-bg); color: #1f2937; border: none; padding: 0.5rem 1rem; border-radius: 0.25rem; font-size: 0.875rem; cursor: pointer; transition: background-color 0.2s; margin-bottom: 1rem; } .caution-button:hover { background-color: var(--btn-caution-hover); } .caution-button:disabled { background-color: var(--btn-disabled); cursor: not-allowed; } .success-button { background-color: var(--btn-success-bg); color: white; border: none; padding: 0.5rem 1rem; border-radius: 0.25rem; font-size: 0.875rem; cursor: pointer; transition: background-color 0.2s; margin-bottom: 1rem; } .success-button:hover { background-color: var(--btn-success-hover); } .success-button:disabled { background-color: var(--btn-disabled); cursor: not-allowed; } /* Multiple Invoice Styles */ .multiple-invoices { margin-top: 20px; } .invoice-summary { background-color: var(--dashboard-bg); padding: 10px 15px; border-radius: 4px; margin-bottom: 20px; border: var(--content-border); } .invoice-card { border: var(--content-border); border-radius: 6px; margin-bottom: 15px; box-shadow: var(--dashboard-shadow); overflow: hidden; background-color: var(--dashboard-bg); } .invoice-header { display: flex; justify-content: space-between; align-items: center; padding: 10px 15px; background-color: var(--content-bg); border-bottom: var(--content-border); } .invoice-header h4 { margin: 0; font-size: 16px; color: var(--dashboard-header-color); } .invoice-status { padding: 4px 8px; border-radius: 3px; font-size: 12px; font-weight: bold; text-transform: uppercase; } .invoice-status.ok { background-color: var(--btn-success-bg); color: white; opacity: 0.8; } .invoice-status.draft { background-color: var(--btn-primary-bg); color: white; opacity: 0.8; } .invoice-status.failed { background-color: var(--btn-warning-bg); color: white; opacity: 0.8; } .invoice-status.void { background-color: var(--btn-disabled); color: white; opacity: 0.8; } .invoice-status.pending_accounting { background-color: var(--btn-caution-bg); color: var(--text-color); opacity: 0.8; } .invoice-status.processed { background-color: var(--btn-primary-bg); color: white; opacity: 0.7; } .invoice-details { display: flex; padding: 15px; justify-content: space-between; align-items: flex-start; } .invoice-info { flex: 3; color: var(--content-text); } .invoice-info p { margin: 5px 0; font-size: 14px; } .invoice-actions { flex: 1; display: flex; justify-content: flex-end; padding-left: 10px; } .button-group { display: flex; flex-direction: column; gap: 5px; } .small-button { font-size: 12px; padding: 4px 8px; } .error-text { color: var(--btn-warning-bg); } .compact-button { width: 36px; height: 36px; border-radius: 50%; border: none; display: flex; align-items: center; justify-content: center; cursor: pointer; transition: all 0.2s ease; color: white; font-size: 16px; padding: 0; } .compact-button:hover { transform: scale(1.1); box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); } .compact-button:active { transform: scale(1); } .compact-button.success-button { background-color: var(--btn-success-bg); } .compact-button.warning-button { background-color: var(--btn-warning-bg); } .compact-button.caution-button { background-color: var(--btn-caution-bg); color: var(--text-color); } .invoice-items { margin-top: 15px; border-top: var(--content-border); padding-top: 10px; } .invoice-items h5 { margin: 0 0 8px 0; font-size: 14px; color: var(--dashboard-header-color); } .invoice-items ul { margin: 0; padding-left: 20px; font-size: 13px; } /* Responsive layout for mobile */ @media (max-width: 768px) { .invoice-details { flex-direction: column; } .invoice-actions { margin-top: 15px; justify-content: flex-start; padding-left: 0; } .button-group { flex-direction: row; flex-wrap: wrap; } } /* Mobile optimization */ @media (max-width: 768px) { .invoice-footer { justify-content: center; } .invoice-button { flex: 1 1 calc(50% - 8px); justify-content: center; } .invoice-button .label { display: none; } .invoice-button .icon { font-size: 18px; margin: 0; } } #csv-preview, #csv-preview-removal { background-color: var(--dashboard-bg); border-radius: 4px; margin-top: 15px; box-shadow: var(--dashboard-shadow); text-align: center; padding: 12px 15px 10px 15px; display: inline-block; width: 85%; margin-left: auto; margin-right: auto; } #csv-preview h4, #csv-preview-removal h4 { margin-top: 0; margin-bottom: 8px; font-size: 15px; color: var(--dashboard-header-color); font-weight: 600; } .job-list { background-color: transparent; padding: 0; font-size: 14px; } #csv-preview-content p, #csv-preview-content-removal p { margin: 0; font-weight: 500; color: var(--btn-primary-bg); } /* Class for the CSV preview to display properly when initialized */ .csv-preview-active { display: block; } /* Dashboard Drag and Drop Styles */ .dashboard-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 1rem; } .dashboard-header h2 { margin: 0; } .customize-btn { background-color: var(--btn-primary-bg); color: white; border: none; padding: 0.5rem 1rem; border-radius: 0.25rem; cursor: pointer; font-size: 0.875rem; transition: background-color 0.2s; } .customize-btn:hover { background-color: var(--btn-primary-hover); } .customize-btn.saving { background-color: var(--btn-success-bg); } .customize-btn.saving:hover { background-color: var(--btn-success-hover); } .customization-help { background-color: var(--content-bg); border: 1px solid var(--btn-primary-bg); border-radius: 0.25rem; padding: 0.75rem; margin-bottom: 1rem; color: var(--content-text); } .draggable-card { position: relative; transition: transform 0.2s ease, box-shadow 0.2s ease; } .draggable-card.customizable { cursor: move; } .draggable-card.customizable:hover { transform: translateY(-2px); box-shadow: 0 4px 8px rgba(0, 0, 0, 0.15); } .draggable-card.dragging { opacity: 0.5; transform: rotate(3deg); box-shadow: 0 8px 16px rgba(0, 0, 0, 0.2); } .drag-handle { position: absolute; top: 0.5rem; right: 0.5rem; font-size: 1.2rem; color: var(--btn-primary-bg); cursor: grab; background: var(--dashboard-bg); padding: 0.25rem; border-radius: 0.25rem; z-index: 10; } .drag-handle:active { cursor: grabbing; } /* Enhanced Invoices Page Styles */ .invoices-page { padding: 0; height: 100%; display: flex; flex-direction: column; } .invoices-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 1.5rem; padding-bottom: 1rem; border-bottom: 2px solid var(--content-border); } .invoices-header h2 { margin: 0; color: var(--dashboard-header-color); } .view-controls { display: flex; gap: 0.5rem; } .view-btn { padding: 0.5rem 1rem; border: 2px solid var(--btn-primary-bg); background: transparent; color: var(--btn-primary-bg); border-radius: 0.25rem; cursor: pointer; font-size: 0.875rem; transition: all 0.2s ease; } .view-btn:hover { background: var(--btn-primary-bg); color: white; } .view-btn.active { background: var(--btn-primary-bg); color: white; } /* View Sections */ .view-section { display: none; flex: 1; min-height: 0; } .view-section.active { display: flex; flex-direction: column; } /* Enhanced Search Styles */ .enhanced-search { display: flex; flex-direction: column; height: 100%; } .search-header { margin-bottom: 1.5rem; } .search-header h3 { margin: 0 0 0.5rem 0; color: var(--dashboard-header-color); } .search-tips { background: var(--content-bg); padding: 0.75rem; border-radius: 0.25rem; border: 1px solid var(--btn-primary-bg); color: var(--content-text); font-size: 0.875rem; } .search-container { margin-bottom: 1.5rem; } .search-input-group { position: relative; display: flex; align-items: center; } .enhanced-search-input { width: 100%; padding: 0.75rem 2.5rem 0.75rem 1rem; border: var(--input-border); border-radius: 0.5rem; background-color: var(--input-bg); color: var(--input-text); font-size: 1rem; transition: border-color 0.2s ease, box-shadow 0.2s ease; box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); } .enhanced-search-input:focus { outline: none; border-color: var(--btn-primary-bg); box-shadow: 0 0 0 3px rgba(66, 153, 225, 0.5); } .enhanced-search-input::placeholder { color: var(--label-color); opacity: 0.8; } .search-clear-btn { position: absolute; right: 0.75rem; background: none; border: none; color: var(--btn-disabled); cursor: pointer; font-size: 1.25rem; padding: 0.25rem; border-radius: 50%; transition: all 0.2s ease; } .search-clear-btn:hover { background: var(--btn-disabled); color: white; } .search-loading { display: none; align-items: center; gap: 0.75rem; margin-top: 1rem; padding: 0.75rem; background: var(--content-bg); border: 1px solid var(--input-border); border-radius: 0.25rem; color: var(--content-text); font-weight: 500; } /* HTMX will add htmx-request class to the indicator element directly */ .search-loading.htmx-request, #search-loading.htmx-request { display: flex !important; opacity: 1 !important; } .loading-spinner { width: 20px; height: 20px; border: 2px solid var(--progress-bg); border-top: 2px solid var(--btn-primary-bg); border-radius: 50%; animation: spin 1s linear infinite; } @keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } } .search-results { flex: 1; overflow-y: auto; min-height: 400px; } .no-search-state { display: flex; flex-direction: column; align-items: center; justify-content: center; height: 300px; text-align: center; color: var(--label-color); } .no-search-icon { font-size: 4rem; margin-bottom: 1rem; opacity: 0.5; } .no-search-state h4 { margin: 0 0 0.5rem 0; color: var(--dashboard-header-color); } /* Kanban Board Styles */ .board-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 1.5rem; } .board-header h3 { margin: 0; color: var(--dashboard-header-color); } .board-controls { display: flex; gap: 0.75rem; } .refresh-board-btn, .load-recent-btn, .clear-board-btn { padding: 0.5rem 1rem; border: none; border-radius: 0.25rem; cursor: pointer; font-size: 0.875rem; transition: background-color 0.2s ease; } .refresh-board-btn, .load-recent-btn { background: var(--btn-success-bg); color: white; } .refresh-board-btn:hover, .load-recent-btn:hover { background: var(--btn-success-hover); } .clear-board-btn { background: var(--btn-warning-bg); color: white; } .clear-board-btn:hover { background: #dc2626; } .invoice-kanban-board { display: grid; grid-template-columns: repeat(6, 1fr); gap: 1rem; height: calc(100vh - 280px); min-height: 400px; } .kanban-column { background: var(--dashboard-bg); border-radius: 0.5rem; box-shadow: var(--dashboard-shadow); display: flex; flex-direction: column; min-height: 0; } .column-header { display: flex; justify-content: space-between; align-items: center; padding: 1rem; border-bottom: 1px solid var(--content-border); background: var(--content-bg); border-radius: 0.5rem 0.5rem 0 0; } .column-header h4 { margin: 0; font-size: 0.875rem; color: var(--dashboard-header-color); } .invoice-count { background: var(--btn-primary-bg); color: white; padding: 0.25rem 0.5rem; border-radius: 1rem; font-size: 0.75rem; font-weight: bold; min-width: 1.5rem; text-align: center; } .invoice-drop-zone { flex: 1; padding: 0.5rem; min-height: 200px; transition: background-color 0.2s ease; overflow-y: auto; } .invoice-drop-zone.drag-over { background: rgba(66, 153, 225, 0.1); border: 2px dashed var(--btn-primary-bg); border-radius: 0.25rem; } .empty-column-message { display: flex; flex-direction: column; align-items: center; justify-content: center; height: 150px; text-align: center; color: var(--label-color); opacity: 0.6; } .empty-icon { font-size: 2rem; margin-bottom: 0.5rem; } .empty-column-message p { margin: 0; font-size: 0.875rem; } /* Board Invoice Card Styles */ .board-invoice-card { background: var(--input-bg); border-radius: 0.5rem; padding: 0.75rem; margin-bottom: 0.5rem; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); cursor: grab; transition: all 0.2s ease; position: relative; } .board-invoice-card:hover { transform: translateY(-2px); box-shadow: 0 4px 8px rgba(0, 0, 0, 0.15); } .board-invoice-card.dragging { opacity: 0.5; transform: rotate(5deg); box-shadow: 0 8px 16px rgba(0, 0, 0, 0.2); } .board-invoice-card:active { cursor: grabbing; } .board-card-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 0.5rem; } .invoice-number { font-weight: bold; color: var(--dashboard-header-color); font-size: 0.875rem; } .card-drag-handle { color: var(--label-color); font-size: 0.75rem; cursor: grab; } .card-drag-handle:active { cursor: grabbing; } .board-card-content { margin-bottom: 0.75rem; } .card-customer, .card-job, .card-total { font-size: 0.75rem; color: var(--content-text); margin-bottom: 0.25rem; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .card-total { font-weight: bold; color: var(--btn-success-bg); } .board-card-footer { display: flex; justify-content: space-between; align-items: center; } .status-indicator { padding: 0.25rem 0.5rem; border-radius: 0.25rem; font-size: 0.625rem; font-weight: bold; text-transform: uppercase; } .status-indicator.status-draft { background: var(--btn-primary-bg); color: white; } .status-indicator.status-ok { background: var(--btn-success-bg); color: white; } .status-indicator.status-pending_accounting { background: var(--btn-caution-bg); color: var(--text-color); } .status-indicator.status-processed { background: var(--btn-primary-bg); color: white; opacity: 0.8; } .status-indicator.status-failed { background: var(--btn-warning-bg); color: white; } .status-indicator.status-void { background: var(--btn-disabled); color: white; } .card-details-btn { background: none; border: none; cursor: pointer; padding: 0.25rem; border-radius: 0.25rem; transition: background-color 0.2s ease; } .card-details-btn:hover { background: var(--content-bg); } .board-loading { display: flex; align-items: center; justify-content: center; gap: 1rem; padding: 2rem; color: var(--content-text); } .card-loading-overlay { position: absolute; top: 0; left: 0; right: 0; bottom: 0; background: rgba(255, 255, 255, 0.8); display: flex; align-items: center; justify-content: center; border-radius: 0.5rem; } /* Responsive Design */ @media (max-width: 1200px) { .invoice-kanban-board { grid-template-columns: repeat(3, 1fr); } } @media (max-width: 768px) { .invoices-header { flex-direction: column; gap: 1rem; align-items: stretch; } .view-controls { justify-content: center; } .invoice-kanban-board { grid-template-columns: repeat(2, 1fr); } .board-controls { flex-direction: column; gap: 0.5rem; } } @media (max-width: 480px) { .invoice-kanban-board { grid-template-columns: 1fr; } } /* Page Header Styles */ .page-header { margin-bottom: 2rem; } .page-header h2 { color: var(--dashboard-header-color); margin: 0 0 0.5rem 0; font-size: 1.875rem; font-weight: bold; } .page-header p { color: var(--content-text); margin: 0; font-size: 1rem; opacity: 0.8; } .page-content { flex-grow: 1; } .submenu-header { color: var(--dashboard-header-color); margin: 0 0 1rem 0; font-size: 1.25rem; font-weight: 600; } /* Placeholder Content Styles */ .placeholder-content { display: flex; flex-direction: column; align-items: center; justify-content: center; padding: 3rem 2rem; text-align: center; background: var(--dashboard-bg); border-radius: 0.75rem; box-shadow: var(--dashboard-shadow); margin-top: 2rem; } .placeholder-icon { font-size: 3rem; margin-bottom: 1rem; opacity: 0.6; } .placeholder-content h4 { color: var(--dashboard-header-color); margin: 0 0 0.5rem 0; font-size: 1.25rem; font-weight: 600; } .placeholder-content p { color: var(--content-text); margin: 0; font-size: 0.875rem; opacity: 0.7; max-width: 400px; line-height: 1.5; } /* Invoice Details Modal */ .invoice-details-modal { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0, 0, 0, 0.5); display: flex; align-items: center; justify-content: center; z-index: 1001; opacity: 0; transition: opacity 0.3s ease; } .invoice-details-modal.show { opacity: 1; } .invoice-details-modal .modal-content { background: var(--content-bg); border-radius: 0.5rem; box-shadow: 0 4px 20px rgba(0, 0, 0, 0.3); max-width: 500px; width: 90%; max-height: 80vh; overflow-y: auto; transform: scale(0.9); transition: transform 0.3s ease; } .invoice-details-modal.show .modal-content { transform: scale(1); } .invoice-details-modal .modal-header { display: flex; justify-content: space-between; align-items: center; padding: 1rem 1.5rem; border-bottom: 1px solid var(--content-border); } .invoice-details-modal .modal-header h3 { margin: 0; color: var(--dashboard-header-color); } .invoice-details-modal .modal-close { background: none; border: none; font-size: 1.5rem; cursor: pointer; color: var(--label-color); padding: 0; width: 30px; height: 30px; display: flex; align-items: center; justify-content: center; border-radius: 50%; transition: background-color 0.2s ease; } .invoice-details-modal .modal-close:hover { background: var(--input-border); } .invoice-details-modal .modal-body { padding: 1.5rem; } .invoice-detail-grid { display: flex; flex-direction: column; gap: 1rem; } .detail-row { display: flex; justify-content: space-between; align-items: center; padding: 0.75rem 0; border-bottom: 1px solid var(--input-border); } .detail-row:last-child { border-bottom: none; } .detail-label { font-weight: bold; color: var(--label-color); min-width: 120px; } .detail-value { color: var(--content-text); text-align: right; flex: 1; } .total-amount { font-weight: bold; font-size: 1.1rem; color: var(--btn-success-bg); } .status-badge { padding: 0.25rem 0.75rem; border-radius: 1rem; font-size: 0.875rem; font-weight: bold; text-transform: uppercase; } .status-badge.status-draft { background: var(--btn-primary-bg); color: white; } .status-badge.status-ok { background: var(--btn-success-bg); color: white; } .status-badge.status-pending_accounting { background: var(--btn-caution-bg); color: var(--text-color); } .status-badge.status-processed { background: var(--btn-primary-bg); color: white; } .status-badge.status-failed { background: var(--btn-warning-bg); color: white; } .status-badge.status-void { background: var(--btn-disabled); color: white; } .invoice-details-modal .modal-footer { padding: 1rem 1.5rem; border-top: 1px solid var(--content-border); display: flex; justify-content: flex-end; } .btn-secondary { padding: 0.5rem 1rem; background: var(--card-bg); color: var(--content-text); border: 1px solid var(--input-border); border-radius: 0.25rem; cursor: pointer; transition: background-color 0.2s ease; } .btn-secondary:hover { background: var(--input-border); }