* { margin: 0; padding: 0; box-sizing: border-box; } :root { --bg-primary: #1c1c1e; --bg-secondary: #ffffff; --bg-tertiary: #f7f7f8; --bg-quaternary: #fafafa; --text-primary: #111111; --text-secondary:#6b7280; --border-color: #e8e8ed; --accent-blue: #1d1d1f; --accent-blue-hover: #2d2d2f; --accent-green: #10b981; --accent-green-hover: #059669; --accent-red: #ef4444; --accent-red-hover: #dc2626; --shadow: 0 1px 4px rgba(0,0,0,0.08); --shadow-sm: 0 1px 2px rgba(0,0,0,0.05); --radius: 10px; } html { height: 100%; width: 100%; } body { width: 100%; overflow-x: hidden; } body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif; background-color: var(--bg-primary); color: var(--text-primary); } .container { display: flex; height: 100vh; gap: 12px; padding: 12px; } /* Left Panel */ .left-panel { width: 280px; background-color: var(--bg-secondary); border: 1px solid var(--border-color); border-radius: var(--radius); padding: 20px; overflow-y: auto; box-shadow: var(--shadow-sm); flex-shrink: 0; display: flex; flex-direction: column; } .logo-section { text-align: center; margin-bottom: 32px; } .logo { max-width: 140px; height: auto; border-radius: 8px; } .result-section { margin-bottom: 24px; } .result-section h3, .stats-section h3, .admin-section h3 { font-size: 10px; font-weight: 700; margin-bottom: 10px; color: var(--text-secondary); border-bottom: 1px solid var(--border-color); padding-bottom: 8px; text-transform: uppercase; letter-spacing: 0.8px; } .stats-section { margin-bottom: 24px; } .stats-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; } .stat-card { background: var(--bg-tertiary); border: 1px solid var(--border-color); border-radius: 8px; padding: 12px; text-align: center; } .stat-label { font-size: 10px; font-weight: 600; color: var(--text-secondary); text-transform: uppercase; letter-spacing: 0.5px; margin-bottom: 4px; } .stat-value { font-size: 24px; font-weight: 700; color: var(--text-primary); } .form-group { margin-bottom: 16px; } .form-group label { display: block; margin-bottom: 8px; font-weight: 500; font-size: 13px; color: var(--text-secondary); text-transform: uppercase; letter-spacing: 0.3px; } .form-group select, .form-group input { width: 100%; padding: 12px; border: 1px solid var(--border-color); border-radius: 8px; font-size: 14px; background-color: var(--bg-tertiary); color: var(--text-primary); transition: all 0.2s ease; } .form-group select:focus, .form-group input:focus { outline: none; border-color: var(--accent-blue); box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1); background-color: var(--bg-tertiary); } .result-card { background: var(--bg-tertiary); border: 1px solid var(--border-color); border-radius: 8px; padding: 16px; text-align: center; display: flex; flex-direction: column; justify-content: center; align-items: center; gap: 8px; } .result-logo { max-width: 100%; width: 100%; height: auto; border-radius: 6px; display: block !important; margin: 0 auto 16px auto; } .result-card.pass { background: #f0fdf4; border-color: var(--accent-green); } .result-card.fail { background: #fef2f2; border-color: var(--accent-red); } .result-card.fail .result-uid-box { border-color: var(--accent-red); } .result-card.fail .result-name { border-color: var(--accent-red); } .result-uid-box { display: flex; align-items: center; justify-content: center; gap: 6px; border: 1px solid var(--border-color); border-radius: 6px; padding: 8px 12px; background-color: #fff; min-width: 180px; } .result-uid { font-size: 11px; color: var(--text-secondary); text-transform: uppercase; letter-spacing: 0.5px; font-weight: 600; font-family: monospace; } .result-name { font-size: 15px; color: var(--text-primary); border: 1px solid var(--border-color); border-radius: 6px; padding: 8px 14px; background-color: #fff; font-weight: 600; min-width: 180px; text-align: center; } .copy-btn { background: none; border: none; padding: 0; cursor: pointer; color: var(--text-secondary); display: flex; align-items: center; justify-content: center; transition: color 0.2s ease; } .copy-btn:hover { color: var(--accent-blue); } .copy-btn svg { transition: transform 0.2s ease; } .copy-btn:hover svg { transform: scale(1.15); } .result-status { font-size: 22px; font-weight: 700; letter-spacing: 1px; } .result-card.pass .result-status { color: var(--accent-green); } .result-card.fail .result-status { color: var(--accent-red); } /* Right Panel */ .right-panel { flex: 1; background-color: var(--bg-secondary); border: 1px solid var(--border-color); border-radius: var(--radius); padding: 0; overflow: hidden; display: flex; flex-direction: column; box-shadow: var(--shadow-sm); min-width: 0; } /* Admin Section */ .admin-section { margin-top: auto; padding-top: 24px; } .admin-btn { width: 100%; padding: 11px; font-size: 13px; font-weight: 600; border: 1px solid var(--border-color); border-radius: 8px; cursor: pointer; transition: background 0.2s, color 0.2s; text-transform: uppercase; letter-spacing: 0.5px; background-color: var(--bg-tertiary); color: var(--text-primary); } .admin-btn:hover { background-color: var(--accent-blue); color: #fff; border-color: var(--accent-blue); } .admin-btn.active { background-color: var(--accent-green); color: #ffffff; border-color: var(--accent-green); } .admin-btn.active:hover { background-color: var(--accent-green-hover); border-color: var(--accent-green-hover); } /* Tab Navigation */ .tab-nav { display: flex; gap: 0; border-bottom: 1px solid var(--border-color); background-color: var(--bg-tertiary); padding: 0 8px; } .tab-nav-btn { padding: 13px 18px; background: transparent; border: none; border-bottom: 2px solid transparent; color: var(--text-secondary); font-size: 13px; font-weight: 600; cursor: pointer; transition: color 0.15s, border-color 0.15s; text-transform: uppercase; letter-spacing: 0.5px; white-space: nowrap; margin-bottom: -1px; } .tab-nav-btn:hover { color: var(--text-primary); } .tab-nav-btn.active { color: var(--text-primary); border-bottom-color: var(--text-primary); } /* Tab Panels */ .tab-panel { display: none; flex: 1; overflow: hidden; background-color: var(--bg-secondary); flex-direction: column; min-height: 0; } .tab-panel.active { display: flex; } .tab-panel::-webkit-scrollbar { width: 8px; } .tab-panel::-webkit-scrollbar-track { background: var(--bg-tertiary); } .tab-panel::-webkit-scrollbar-thumb { background: var(--border-color); border-radius: 4px; } .tab-panel::-webkit-scrollbar-thumb:hover { background: var(--text-secondary); } /* ===== UNIFIED TOOLBAR ===== */ .toolbar { display: flex; align-items: center; gap: 10px; padding: 0 14px; height: 46px; border-bottom: 1px solid var(--border-color); background: var(--bg-secondary); flex-shrink: 0; min-width: 0; overflow: hidden; } .toolbar-stacked { height: auto; flex-direction: column; align-items: stretch; gap: 0; padding: 8px 14px; overflow: visible; } .toolbar-row { display: flex; align-items: center; gap: 6px; min-height: 36px; } .toolbar-row + .toolbar-row { border-top: 1px solid var(--border-color); padding-top: 6px; margin-top: 2px; } .toolbar-stacked .toolbar-actions { margin-left: auto; } .toolbar-stacked .tf-quick { margin-left: 0; } .toolbar-title { font-size: 12px; font-weight: 700; color: var(--text-secondary); text-transform: uppercase; letter-spacing: 0.6px; white-space: nowrap; flex-shrink: 0; padding-right: 10px; border-right: 1px solid var(--border-color); margin-right: 4px; line-height: 46px; } .toolbar-filters { display: flex; align-items: center; gap: 6px; flex: 1; min-width: 0; overflow: hidden; } .tf-group { display: flex; align-items: center; gap: 4px; flex-shrink: 0; } .tf-group label { font-size: 10px; font-weight: 600; color: var(--text-secondary); text-transform: uppercase; letter-spacing: 0.3px; white-space: nowrap; } .tf-group select, .tf-group input[type="date"] { height: 30px; padding: 0 8px; border: 1px solid var(--border-color); border-radius: 5px; font-size: 12px; background: var(--bg-tertiary); color: var(--text-primary); cursor: pointer; outline: none; transition: border-color 0.15s; } .tf-group select:focus, .tf-group input[type="date"]:focus { border-color: var(--text-primary); } .tf-quick { display: flex; align-items: center; gap: 3px; margin-left: 4px; } .toolbar-actions { display: flex; align-items: center; gap: 6px; flex-shrink: 0; margin-left: auto; } /* Toolbar buttons */ .tb-btn { height: 30px; padding: 0 12px; width: auto; margin: 0; flex-shrink: 0; border: 1px solid var(--border-color); border-radius: 5px; background: var(--bg-tertiary); color: var(--text-primary); font-size: 11px; font-weight: 600; cursor: pointer; white-space: nowrap; text-transform: uppercase; letter-spacing: 0.3px; transition: background 0.15s, color 0.15s, border-color 0.15s; display: inline-flex; align-items: center; } .tb-btn:hover { background: var(--text-primary); color: #fff; border-color: var(--text-primary); } .tb-btn-primary { background: var(--text-primary); color: #fff; border-color: var(--text-primary); } .tb-btn-primary:hover { background: #333; border-color: #333; } /* Panel Content */ .panel-content { flex: 1; padding: 14px; overflow-y: auto; min-height: 0; } /* table fills from top, scrolls inside panel-content */ .panel-content > .table-container { height: 100%; overflow-y: auto; } .panel-content > .table-container table { width: 100%; } /* Filter legacy compat */ .filter-group { display: flex; flex-direction: row; gap: 6px; align-items: center; flex: 1; min-width: 0; } .filter-group label { font-weight: 600; font-size: 11px; color: var(--text-secondary); text-transform: uppercase; letter-spacing: 0.3px; white-space: nowrap; flex-shrink: 0; } .filter-group select, .filter-group input { padding: 0 8px; border: 1px solid var(--border-color); border-radius: 5px; font-size: 12px; background: var(--bg-tertiary); color: var(--text-primary); cursor: pointer; transition: border-color 0.15s; flex: 1; min-width: 0; height: 30px; } .filter-group select:focus, .filter-group input:focus { outline: none; border-color: var(--text-primary); } .btn-filter { height: 28px; padding: 0 10px; background: transparent; color: var(--text-secondary); border: 1px solid var(--border-color); border-radius: 5px; font-size: 11px; font-weight: 700; cursor: pointer; transition: all 0.15s; white-space: nowrap; flex-shrink: 0; display: flex; align-items: center; } .btn-filter:hover { background: var(--text-primary); color: #fff; border-color: var(--text-primary); } .btn-quick-filter { height: 28px; padding: 0 9px; background: transparent; color: var(--text-secondary); border: 1px solid var(--border-color); border-radius: 5px; font-size: 11px; font-weight: 600; cursor: pointer; transition: all 0.15s; text-transform: uppercase; letter-spacing: 0.3px; white-space: nowrap; display: flex; align-items: center; } .btn-quick-filter:hover { color: var(--text-primary); border-color: var(--text-primary); } .btn-quick-filter.active { background: var(--text-primary); color: #fff; border-color: var(--text-primary); } .table-container { overflow-x: auto; border: 1px solid var(--border-color); border-radius: 8px; background-color: var(--bg-secondary); -webkit-overflow-scrolling: touch; } table { width: 100%; border-collapse: collapse; font-size: 13px; table-layout: auto; } table thead { background-color: var(--bg-tertiary); position: sticky; top: 0; z-index: 10; } table th { padding: 12px 14px; text-align: left; font-weight: 600; color: var(--text-secondary); border-bottom: 2px solid var(--border-color); text-transform: uppercase; letter-spacing: 0.4px; font-size: 11px; word-wrap: break-word; background-color: var(--bg-tertiary); } table td { padding: 11px 14px; border-bottom: 1px solid #f0f0f0; word-wrap: break-word; overflow-wrap: break-word; color: var(--text-primary); font-size: 13px; } table td[style*="display: none"], table th[style*="display: none"] { display: none !important; width: 0 !important; padding: 0 !important; border: none !important; } table tbody tr { background-color: var(--bg-secondary); transition: background-color 0.15s ease; } table tbody tr:nth-child(even) { background-color: #fafafa; } table tbody tr:hover { background-color: #f3f4f6; } table tbody tr.expired { background-color: #fef2f2; border-left: 3px solid var(--accent-red); } table tbody tr.expired:hover { background-color: #ffe5e5; } table .pass { color: var(--accent-green); font-weight: 600; } table .fail { color: var(--accent-red); font-weight: 600; } table .manual { color: #8b5cf6; font-weight: 600; } table tbody tr.duplicate-warning { background-color: #fffbf0; border-left: 3px solid #f59e0b; } table tbody tr.duplicate-warning:hover { background-color: #fffaf5; } .action-btn { padding: 5px 11px; margin-right: 4px; font-size: 11px; font-weight: 600; border: 1px solid var(--border-color); border-radius: 5px; cursor: pointer; transition: all 0.15s; text-transform: uppercase; letter-spacing: 0.3px; background: var(--bg-tertiary); color: var(--text-primary); } .edit-btn { background-color: var(--bg-tertiary); color: var(--text-primary); border-color: var(--border-color); } .edit-btn:hover { background-color: var(--text-primary); color: #fff; border-color: var(--text-primary); } .delete-btn { background-color: transparent; color: var(--accent-red); border-color: #fca5a5; } .delete-btn:hover { background-color: var(--accent-red); color: #fff; border-color: var(--accent-red); } .btn { width: 100%; padding: 10px 14px; margin-bottom: 10px; border: none; border-radius: 7px; font-size: 13px; font-weight: 600; cursor: pointer; transition: background 0.15s; text-transform: uppercase; letter-spacing: 0.4px; } .btn-primary { background-color: var(--text-primary); color: #ffffff; } .btn-primary:hover { background-color: #333; } /* Modal */ .modal { display: none; position: fixed; z-index: 1000; left: 0; top: 0; width: 100%; height: 100%; background-color: rgba(0, 0, 0, 0.7); backdrop-filter: blur(4px); } .modal.show { display: flex; align-items: center; justify-content: center; } .modal-content { background-color: var(--bg-secondary); padding: 32px; border-radius: 8px; border: 1px solid var(--border-color); width: 90%; max-width: 420px; box-shadow: 0 10px 30px rgba(0, 0, 0, 0.2); } .modal-content h2 { margin-bottom: 20px; color: var(--text-primary); font-weight: 700; font-size: 16px; letter-spacing: 0; } .close { float: right; font-size: 28px; font-weight: bold; cursor: pointer; color: var(--text-secondary); transition: color 0.2s ease; line-height: 1; margin-top: -4px; } .close:hover { color: var(--text-primary); } /* Login Modal Styling */ #loginModal .modal-content { background: linear-gradient(135deg, var(--bg-secondary) 0%, var(--bg-tertiary) 100%); border: 2px solid var(--accent-blue); box-shadow: 0 8px 32px rgba(0, 0, 0, 0.2); } #loginModal .modal-content h2 { color: var(--accent-blue); margin-bottom: 28px; text-align: center; font-size: 18px; } #loginModal .form-group label { color: var(--accent-blue); font-weight: 700; font-size: 12px; margin-bottom: 10px; } #loginModal .form-group input { padding: 14px 16px; font-size: 15px; border: 2px solid var(--border-color); border-radius: 8px; transition: all 0.3s ease; background-color: var(--bg-secondary); } #loginModal .form-group input:focus { border-color: var(--accent-blue); box-shadow: 0 0 0 4px rgba(59, 130, 246, 0.15); background-color: var(--bg-secondary); } #loginModal .form-group input::placeholder { color: var(--text-secondary); } #loginModal .btn-primary { background: linear-gradient(135deg, #3A3A3C 0%, #2a2a2c 100%); border: 2px solid transparent; font-size: 13px; letter-spacing: 1px; padding: 14px; margin-top: 8px; } #loginModal .btn-primary:hover { background: linear-gradient(135deg, #2a2a2c 0%, #1a1a1c 100%); border-color: var(--accent-blue); } /* Scrollbar */ ::-webkit-scrollbar { width: 8px; height: 8px; } ::-webkit-scrollbar-track { background: var(--bg-tertiary); } ::-webkit-scrollbar-thumb { background: var(--border-color); border-radius: 4px; } ::-webkit-scrollbar-thumb:hover { background: var(--text-secondary); } /* Desktop View */ @media (min-width: 1024px) { .container { gap: 14px; padding: 14px; } .left-panel { width: 290px; padding: 20px; } } /* Tablet View */ @media (min-width: 769px) and (max-width: 1023px) { .container { gap: 14px; padding: 14px; } .left-panel { width: 300px; padding: 20px; } .right-panel { padding: 20px; } .tab-btn { padding: 10px 16px; font-size: 13px; } } /* Login Modal Mobile */ @media (max-width: 768px) { #loginModal .modal-content { padding: 28px; max-width: 85%; } #loginModal .modal-content h2 { font-size: 16px; margin-bottom: 24px; } .admin-bar { padding: 12px 16px; gap: 8px; } .admin-bar span { font-size: 10px; } .btn-admin { padding: 8px 16px; font-size: 11px; } } /* Mobile View */ @media (max-width: 768px) { html, body { height: auto; min-height: 100vh; } .container { flex-direction: column; gap: 12px; padding: 12px; height: auto; } .tab-layout { flex-direction: column; gap: 12px; } .tab-left-column { width: 100%; flex-shrink: 0; } .left-panel { width: 100%; padding: 16px; min-height: auto; } .right-panel { width: 100%; padding: 16px; min-height: 60vh; } .logo-section { margin-bottom: 20px; } .logo { max-width: 100px; } .result-section { margin-bottom: 24px; } .result-card { min-height: 120px; padding: 16px; } .result-status { font-size: 24px; } .tabs { gap: 4px; margin-bottom: 16px; } .tab-btn { padding: 10px 14px; font-size: 12px; } .add-section, .list-section { margin-bottom: 20px; } .action-btn { padding: 6px 10px; font-size: 11px; margin-right: 4px; } .table-container { font-size: 12px; overflow-x: auto; -webkit-overflow-scrolling: touch; width: 100%; border-radius: 8px; } table { min-width: 600px; table-layout: auto; } table th, table td { padding: 10px 12px; font-size: 12px; word-wrap: break-word; white-space: normal; } .filters-container { grid-template-columns: 1fr; gap: 12px; } .filter-group { width: 100%; } .filter-group select, .filter-group input { width: 100%; } .btn-filter { width: 100%; } .controls-section { flex-direction: column; } .btn { padding: 10px; font-size: 13px; margin-bottom: 10px; } .modal-content { padding: 24px; max-width: 90%; } } /* Small Mobile View */ @media (max-width: 480px) { .container { padding: 8px; gap: 8px; } .left-panel, .right-panel { padding: 12px; } .logo { max-width: 80px; } .form-group { margin-bottom: 12px; } .action-btn { padding: 6px 8px; font-size: 10px; margin-bottom: 4px; display: inline-block; margin-right: 2px; } .tab-btn { padding: 8px 12px; font-size: 11px; } .modal-content { padding: 20px; } } /* High DPI / Retina Display */ @media (-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi) { * { -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } } /* Landscape Mobile */ @media (max-height: 600px) and (orientation: landscape) { .container { height: auto; min-height: 100vh; } .left-panel, .right-panel { padding: 12px; } .result-card { min-height: auto; padding: 12px; } .tab-content { flex: auto; } } /* Dark Mode - Additional refinements for better readability */ @media (prefers-color-scheme: dark) { /* Already using dark mode as default */ } /* Documents Grid */ .documents-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(160px, 1fr)); gap: 20px; padding: 4px; } .document-card { display: flex; flex-direction: column; align-items: center; gap: 12px; padding: 24px 16px; background: var(--bg-tertiary); border: 1px solid var(--border-color); border-radius: 8px; text-align: center; } .document-icon { color: var(--text-secondary); } .document-name { font-size: 13px; font-weight: 500; color: var(--text-primary); word-break: break-word; line-height: 1.4; } .document-print-btn { width: 100%; padding: 8px 12px; font-size: 13px; } /* ===== STORE ===== */ .store-balance-chip { display: inline-flex; align-items: center; gap: 6px; background: var(--bg-tertiary); border: 1px solid var(--border-color); border-radius: 5px; padding: 0 12px; height: 30px; flex-shrink: 0; } .store-balance-label { font-size: 10px; font-weight: 700; color: var(--text-secondary); text-transform: uppercase; letter-spacing: 0.5px; } .store-balance-value { font-size: 13px; font-weight: 700; color: var(--text-primary); } .store-tab-scroll { display: flex; flex-direction: column; gap: 0; min-height: 0; } .store-layout { display: grid; grid-template-columns: 1fr 340px; align-items: stretch; gap: 20px; flex: 1; min-height: 0; } .store-inventory, .store-cart { display: flex; flex-direction: column; gap: 12px; overflow: hidden; } .store-inventory { overflow-y: auto; } .store-cart-header { display: flex; justify-content: space-between; align-items: center; flex-shrink: 0; padding-bottom: 10px; border-bottom: 1px solid var(--border-color); margin-bottom: 4px; } .store-cart-title { font-size: 11px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.6px; color: var(--text-secondary); } .inventory-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(170px, 1fr)); gap: 12px; align-content: start; padding-bottom: 4px; } .inventory-card { background: #fff; border: 1px solid var(--border-color); border-radius: 12px; overflow: hidden; display: flex; flex-direction: column; transition: border-color 0.15s; cursor: default; } .inventory-card:hover { border-color: var(--accent-blue); } .inventory-card.out-of-stock { opacity: 0.45; } /* Image area */ .inventory-card-img-wrap { position: relative; width: 100%; height: 120px; background: #fff; overflow: hidden; flex-shrink: 0; } .inventory-card-img { width: 100%; height: 100%; object-fit: cover; display: block; } .inventory-card-img-placeholder { width: 100%; height: 100%; display: flex; align-items: center; justify-content: center; color: var(--border-color); } .inventory-card-body { padding: 10px 12px 6px; display: flex; flex-direction: column; gap: 6px; flex: 1; background: var(--bg-tertiary); border-top: 1px solid var(--border-color); } .inventory-card-name { font-size: 13px; font-weight: 600; color: var(--text-primary); word-break: break-word; line-height: 1.3; } .inventory-card-meta { display: flex; align-items: baseline; justify-content: space-between; gap: 6px; } .inventory-card-price { font-size: 15px; font-weight: 700; color: var(--text-primary); } .inventory-card-stock { font-size: 11px; color: var(--text-secondary); background: var(--bg-tertiary); border-radius: 4px; padding: 1px 6px; white-space: nowrap; } .inventory-card-stock.stock-empty { color: var(--accent-red); background: rgba(239,68,68,0.08); font-weight: 600; } .inventory-card-actions { display: flex; flex-direction: column; gap: 5px; padding: 6px 12px 12px; background: var(--bg-tertiary); } .inventory-add-btn { width: 100%; margin: 0; padding: 8px; font-size: 12px; border-radius: 7px; } .inventory-add-btn:disabled { opacity: 0.4; cursor: not-allowed; } .inventory-card-admin-actions { display: flex; gap: 5px; } .inventory-card-admin-actions .action-btn { flex: 1; margin: 0; padding: 5px 6px; font-size: 11px; text-align: center; } /* Inventory sections */ .inventory-section { display: flex; flex-direction: column; gap: 8px; } .inventory-section-header { font-size: 11px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.6px; color: var(--text-secondary); padding-bottom: 6px; border-bottom: 1px solid var(--border-color); } .inventory-card-stock.service-label { color: var(--accent-blue, #3b82f6); background: rgba(59,130,246,0.1); font-weight: 600; } /* Dual price buttons on inventory card */ .inventory-dual-btns { display: flex; gap: 6px; } .inventory-dual-btns .inventory-add-btn { flex: 1; font-size: 11px; padding: 7px 4px; } .inventory-add-btn-secondary { background: var(--bg-secondary) !important; color: var(--text-primary) !important; border: 1px solid var(--border-color) !important; } .inventory-add-btn-secondary:hover:not(:disabled) { background: var(--bg-tertiary) !important; } /* Dual price checkbox label */ .dual-price-label { display: flex !important; align-items: center; gap: 8px; font-size: 13px; cursor: pointer; user-select: none; margin-bottom: 0 !important; } .dual-price-label input[type="checkbox"] { width: 15px; height: 15px; margin: 0; accent-color: var(--accent-blue); cursor: pointer; flex-shrink: 0; } /* Item type toggle */ .item-type-toggle { display: flex; gap: 6px; } .item-type-btn { flex: 1; padding: 7px 12px; border: 1px solid var(--border-color); border-radius: 6px; background: var(--bg-secondary); color: var(--text-secondary); font-size: 13px; cursor: pointer; transition: background 0.15s, color 0.15s, border-color 0.15s; } .item-type-btn.active { background: var(--accent-blue, #3b82f6); color: #fff; border-color: var(--accent-blue, #3b82f6); } /* Image upload */ .image-upload-area { border: 2px dashed var(--border-color); border-radius: 8px; cursor: pointer; overflow: hidden; min-height: 100px; display: flex; align-items: center; justify-content: center; transition: border-color 0.2s ease; background: var(--bg-tertiary); } .image-upload-area:hover { border-color: var(--accent-blue); } .image-upload-placeholder { display: flex; flex-direction: column; align-items: center; gap: 8px; padding: 20px; color: var(--text-secondary); font-size: 12px; font-weight: 500; text-align: center; } .btn-remove-image { margin-top: 6px; padding: 4px 10px; background: var(--accent-red); color: #fff; border: none; border-radius: 4px; font-size: 11px; font-weight: 600; cursor: pointer; text-transform: uppercase; letter-spacing: 0.3px; } .btn-remove-image:hover { background: var(--accent-red-hover); } .payment-history-toolbar { display: flex; justify-content: space-between; align-items: center; padding: 10px 14px; border-bottom: 1px solid var(--border-color); background: var(--bg-tertiary); } .history-toolbar { display: flex; align-items: center; gap: 8px; padding: 10px 0 12px; flex-shrink: 0; } /* Monthly modal */ .monthly-modal-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 16px; } .monthly-modal-header h2 { margin: 0; } .monthly-modal-header .close { float: none; margin: 0; } .monthly-modal-toolbar { display: flex; align-items: center; gap: 16px; padding-bottom: 16px; border-bottom: 1px solid var(--border-color); margin-bottom: 16px; flex-wrap: nowrap; } .monthly-modal-body { overflow-y: auto; max-height: calc(80vh - 180px); padding-right: 4px; } /* Checkout modal summary */ .checkout-summary { background: var(--bg-tertiary); border: 1px solid var(--border-color); border-radius: 8px; padding: 14px 16px; margin-bottom: 16px; display: flex; flex-direction: column; gap: 8px; } .checkout-summary-row { display: flex; justify-content: space-between; font-size: 14px; color: var(--text-secondary); } .checkout-total-val { font-size: 20px; font-weight: 700; color: var(--accent-blue); } .checkout-balance-val { font-weight: 600; color: var(--accent-green); } /* Wide modal for monthly overview */ .modal-content-wide { max-width: 720px; width: 95%; max-height: 90vh; display: flex; flex-direction: column; overflow: hidden; padding-bottom: 20px; } .monthly-summary-total { font-size: 15px; font-weight: 600; color: var(--text-primary); padding: 10px 0 14px; border-bottom: 1px solid var(--border-color); margin-bottom: 14px; } .monthly-section-title { font-size: 12px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.5px; color: var(--text-secondary); margin: 14px 0 8px; } /* Cart */ .store-cart { background: var(--bg-quaternary); border: 1px solid var(--border-color); border-radius: 8px; padding: 16px; overflow: hidden; align-self: stretch; } .cart-items { flex: 1; overflow-y: auto; min-height: 0; } .cart-item { display: flex; align-items: center; gap: 8px; padding: 10px 0; border-bottom: 1px solid var(--border-color); } .cart-item-name { flex: 1; font-size: 13px; font-weight: 500; color: var(--text-primary); word-break: break-word; } .cart-item-controls { display: flex; align-items: center; gap: 6px; flex-shrink: 0; } .cart-qty-btn { width: 26px; height: 26px; border: 1px solid var(--border-color); border-radius: 4px; background: var(--bg-secondary); color: var(--text-primary); font-size: 16px; font-weight: 600; cursor: pointer; display: flex; align-items: center; justify-content: center; transition: all 0.15s ease; line-height: 1; padding: 0; } .cart-qty-btn:hover { background: var(--accent-blue); color: #fff; border-color: var(--accent-blue); } .cart-qty { min-width: 22px; text-align: center; font-size: 13px; font-weight: 600; } .cart-item-subtotal { font-size: 13px; font-weight: 700; color: var(--accent-blue); min-width: 52px; text-align: right; flex-shrink: 0; } .cart-total { border-top: 2px solid var(--border-color); padding-top: 12px; margin-top: 4px; display: flex; flex-direction: column; gap: 6px; flex-shrink: 0; } .cart-total-row { display: flex; justify-content: space-between; align-items: center; font-size: 14px; font-weight: 600; color: var(--text-primary); } .cart-balance-row { font-size: 12px; color: var(--text-secondary); font-weight: 500; } .cart-total-amount { font-size: 20px; font-weight: 700; color: var(--accent-blue); } .cart-balance-after { font-weight: 600; color: var(--accent-green); } .cart-balance-after.negative { color: var(--accent-red); } .cart-pay-btn { margin: 8px 0 0 0; width: 100%; padding: 12px; font-size: 14px; } @media (max-width: 900px) { .store-layout { grid-template-columns: 1fr; } .store-cart { min-height: 300px; } } /* Print Styles */ @media print { @page { size: A4 portrait; margin: 18mm 22mm; } body { background: #fff !important; color: #000 !important; -webkit-print-color-adjust: exact; print-color-adjust: exact; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; } /* ---- DEFAULT: print the scan logs ---- */ body * { visibility: hidden; } #print-header, #print-header *, #logs-tab, #logs-tab * { visibility: visible; } #print-header { position: fixed; top: 0; left: 0; width: 100%; text-align: center; padding: 16px 0 8px; background: #fff; border: none !important; box-shadow: none !important; visibility: visible !important; display: block !important; } #print-header img { height: 64px; display: block; margin: 0 auto 8px; } #logs-tab { position: absolute; top: 160px; left: 0; width: 100%; background: #fff !important; border: none !important; box-shadow: none !important; } .panel-header { border: none !important; box-shadow: none !important; } .panel-content, .table-container { border: none !important; box-shadow: none !important; overflow: visible !important; } .panel-header .header-actions, .panel-filters, .action-btn, #logs-actions-header { display: none !important; } .toolbar { display: none !important; } .tb-btn { display: none !important; } .table-container { border: 1px solid #e0e0e0; border-radius: 8px; background: #fff; overflow: visible !important; } table { width: 100%; border-collapse: collapse; font-size: 13px; table-layout: auto; } table thead { background-color: #f5f5f5 !important; } table th { padding: 14px 12px; text-align: left; font-weight: 600; color: #000 !important; border-bottom: 2px solid #e0e0e0 !important; text-transform: uppercase; letter-spacing: 0.3px; font-size: 12px; background-color: #f5f5f5 !important; } table td { padding: 12px; border-bottom: 1px solid #f0f0f0 !important; color: #000 !important; background-color: #fff !important; } table tbody tr:nth-child(even) td { background-color: #fafafa !important; } table .pass { color: #10b981 !important; font-weight: 600; } table .fail { color: #ef4444 !important; font-weight: 600; } table .manual { color: #8b5cf6 !important; font-weight: 600; } /* ---- RECEIPT / MONTHLY: override default ---- */ body.printing-receipt * { visibility: hidden; } body.printing-receipt #receiptPrintArea, body.printing-receipt #receiptPrintArea * { visibility: visible !important; } body.printing-receipt #receiptPrintArea { position: absolute; top: 0; left: 0; width: 100%; background: #fff; z-index: 9999; padding: 0; display: block !important; } /* ---- Shared print page wrapper ---- */ .rp-page { max-width: 155mm; margin: 0 auto; padding: 6mm 0 0; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; font-size: 14px; color: #000; } .rp-monthly { max-width: 100%; padding: 0; } .rp-logo-block { text-align: center; margin-bottom: 20px; } .rp-logo { height: 80px; object-fit: contain; } .rp-divider { border: none; border-top: 2px solid #111; margin: 12px 0; } .rp-divider-dashed { border: none; border-top: 2px dashed #999; margin: 12px 0; } .rp-title { text-align: center; font-size: 20px; font-weight: 700; letter-spacing: 2px; text-transform: uppercase; margin: 12px 0 8px; } .rp-meta { display: flex; justify-content: space-between; font-size: 12px; color: #555; margin-bottom: 8px; } .rp-table { width: 100%; border-collapse: collapse; margin: 12px 0; font-size: 13px; } .rp-table th { font-size: 11px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.4px; border-bottom: 1.5px solid #333; padding: 7px 5px; background: #f5f5f5; } .rp-table td { padding: 7px 5px; border-bottom: 1px solid #e8e8e8; vertical-align: top; } .rp-td-name { width: 50%; } .rp-td-qty { width: 10%; text-align: center; } .rp-td-price{ width: 20%; text-align: right; } .rp-td-sub { width: 20%; text-align: right; font-weight: 600; } .rp-total { display: flex; justify-content: space-between; font-size: 18px; font-weight: 700; padding: 10px 0; } .rp-footer { text-align: center; font-size: 12px; letter-spacing: 0.5px; color: #555; padding-top: 12px; } /* Monthly-specific */ .rp-monthly-kpi { display: flex; gap: 20px; margin: 14px 0; } .rp-kpi-box { flex: 1; border: 1px solid #ddd; border-radius: 6px; padding: 12px 16px; text-align: center; } .rp-kpi-label { font-size: 11px; text-transform: uppercase; letter-spacing: 0.4px; color: #666; margin-bottom: 5px; } .rp-kpi-value { font-size: 22px; font-weight: 700; } .rp-section-title { font-size: 11px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.5px; color: #555; border-bottom: 1px solid #ccc; padding-bottom: 5px; margin: 16px 0 8px; } } /* Reduced Motion */ @media (prefers-reduced-motion: reduce) { * { animation-duration: 0.01ms !important; animation-iteration-count: 1 !important; transition-duration: 0.01ms !important; } }