*{box-sizing:border-box}:root{font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif;line-height:1.5;font-weight:400;color:#2d3748;background-color:#fff;font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body{margin:0;padding:0;min-width:320px;min-height:100vh}#root{width:100%;min-height:100vh}h1,h2,h3,h4,h5,h6{margin:0;line-height:1.2}a{color:#667eea;text-decoration:none}a:hover{text-decoration:underline}button{font-family:inherit;cursor:pointer}input,select,textarea{font-family:inherit}.user-management{padding:2rem;max-width:1400px;margin:0 auto}.user-management-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:2rem}.user-management-header h2{margin:0;color:#333}.btn-add-user{padding:.75rem 1.5rem;background-color:#d32f2f;color:#fff;border:none;border-radius:4px;cursor:pointer;font-weight:500;transition:background-color .3s}.btn-add-user:hover{background-color:#b71c1c}.add-user-form{background:#fff;padding:1.5rem;border-radius:8px;box-shadow:0 2px 8px #0000001a;margin-bottom:2rem}.form-row{display:grid;grid-template-columns:2fr 1.5fr 1fr;gap:1rem;margin-bottom:1rem}.form-group{display:flex;flex-direction:column}.form-group label{margin-bottom:.5rem;font-weight:500;color:#555}.form-group input[type=email],.form-group input[type=text]{padding:.75rem;border:1px solid #ddd;border-radius:4px;font-size:.95rem}.checkbox-group{justify-content:center}.checkbox-group label{display:flex;align-items:center;gap:.5rem;cursor:pointer}.checkbox-group input[type=checkbox]{width:18px;height:18px;cursor:pointer}.btn-submit{padding:.75rem 2rem;background-color:#d32f2f;color:#fff;border:none;border-radius:4px;cursor:pointer;font-weight:500;transition:background-color .3s}.btn-submit:hover{background-color:#b71c1c}.users-table-container{background:#fff;border-radius:8px;box-shadow:0 2px 8px #0000001a;overflow:hidden}.users-table{width:100%;border-collapse:collapse}.users-table thead{background-color:#d32f2f;color:#fff}.users-table th,.users-table td{padding:1rem;text-align:left;border-bottom:1px solid #eee}.users-table th{font-weight:600;font-size:.9rem;text-transform:uppercase;letter-spacing:.5px}.users-table tbody tr:hover{background-color:#f5f5f5}.role-badge,.status-badge{display:inline-block;padding:.25rem .75rem;border-radius:12px;font-size:.85rem;font-weight:500}.role-badge.admin{background-color:#ffd54f;color:#795548}.role-badge.user{background-color:#ffebee;color:#c62828}.status-badge.active{background-color:#c8e6c9;color:#2e7d32}.status-badge.inactive{background-color:#ffcdd2;color:#c62828}.actions{display:flex;gap:.5rem}.btn-action{background:none;border:none;font-size:1.2rem;cursor:pointer;padding:.25rem .5rem;border-radius:4px;transition:background-color .2s}.btn-action:hover{background-color:#f0f0f0}.btn-delete:hover{background-color:#ffebee}.error-message{background-color:#ffebee;color:#c62828;padding:1rem;border-radius:4px;margin-bottom:1rem;border-left:4px solid #c62828}.user-management-loading,.no-users{text-align:center;padding:3rem;color:#666;font-size:1.1rem}@media (max-width: 768px){.form-row{grid-template-columns:1fr}.users-table{font-size:.85rem}.users-table th,.users-table td{padding:.75rem .5rem}}.db-health-check{background:#fff;border-radius:12px;padding:24px;box-shadow:0 2px 8px #0000001a;max-width:600px;margin:20px auto}.health-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:20px}.health-header h3{margin:0;font-size:20px;font-weight:600;color:#333}.refresh-btn{background:#2196f3;color:#fff;border:none;padding:8px 16px;border-radius:6px;cursor:pointer;font-size:14px;transition:background .3s}.refresh-btn:hover:not(:disabled){background:#1976d2}.refresh-btn:disabled{background:#ccc;cursor:not-allowed}.health-status{margin-bottom:20px}.status-indicator{display:inline-flex;align-items:center;padding:12px 20px;border-radius:8px;color:#fff;font-weight:600;font-size:16px}.status-dot{width:12px;height:12px;border-radius:50%;background:#fff;margin-right:10px;animation:pulse 2s infinite}@keyframes pulse{0%,to{opacity:1}50%{opacity:.5}}.loading-spinner{text-align:center;padding:40px 0}.spinner{border:4px solid #f3f3f3;border-top:4px solid #2196f3;border-radius:50%;width:50px;height:50px;animation:spin 1s linear infinite;margin:0 auto 16px}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.health-details{margin-top:20px}.detail-card{background:#f8f9fa;border-radius:8px;padding:16px}.detail-row{display:flex;justify-content:space-between;align-items:center;padding:12px 0;border-bottom:1px solid #e0e0e0}.detail-row:last-child{border-bottom:none}.detail-label{font-weight:600;color:#666;font-size:14px}.detail-value{font-size:14px;color:#333;font-weight:500}.detail-value.success{color:#4caf50}.health-error{margin-top:20px}.error-card{background:#ffebee;border:1px solid #f44336;border-radius:8px;padding:20px}.error-card h4{margin:0 0 12px;color:#c62828;font-size:16px}.error-message{background:#fff;padding:12px;border-radius:6px;margin-bottom:16px;color:#d32f2f;font-family:monospace;font-size:13px;word-break:break-all}.error-details{margin-top:16px}.error-details p{margin:8px 0;font-weight:600;color:#333}.error-details ul{margin:8px 0;padding-left:24px}.error-details li{margin:6px 0;color:#555;font-size:14px}.last-checked{margin-top:16px;text-align:center;font-size:12px;color:#999;font-style:italic}@media (max-width: 768px){.db-health-check{margin:10px;padding:16px}.health-header{flex-direction:column;align-items:flex-start;gap:12px}.detail-row{flex-direction:column;align-items:flex-start;gap:4px}}.direct-query-container{max-width:1400px;margin:0 auto;padding:2rem}.direct-query-container h2{color:#2c3e50;margin-bottom:.5rem}.description{color:#7f8c8d;margin-bottom:2rem;font-size:.95rem}.query-form{background:#fff;padding:2rem;border-radius:8px;box-shadow:0 2px 8px #0000001a;margin-bottom:2rem}.form-group{margin-bottom:1.5rem}.form-group label{display:block;margin-bottom:.5rem;font-weight:600;color:#2c3e50}.form-group select{width:100%;padding:.75rem;border:1px solid #ddd;border-radius:4px;font-size:1rem;background-color:#fff}.form-group select:disabled{background-color:#f5f5f5;cursor:not-allowed}.form-actions{display:flex;gap:1rem;margin-top:2rem}.btn-primary{padding:.75rem 1.5rem;background-color:#3498db;color:#fff;border:none;border-radius:4px;font-size:1rem;font-weight:600;cursor:pointer;transition:background-color .3s}.btn-primary:hover:not(:disabled){background-color:#2980b9}.btn-primary:disabled{background-color:#95a5a6;cursor:not-allowed}.btn-success{padding:.75rem 1.5rem;background-color:#27ae60;color:#fff;border:none;border-radius:4px;font-size:1rem;font-weight:600;cursor:pointer;transition:background-color .3s}.btn-success:hover{background-color:#229954}.error-message{padding:1rem;background-color:#fee;border-left:4px solid #e74c3c;color:#c0392b;border-radius:4px;margin-bottom:1rem}.query-results{background:#fff;padding:2rem;border-radius:8px;box-shadow:0 2px 8px #0000001a}.query-results h3{color:#2c3e50;margin-bottom:1rem}.result-info{background-color:#f8f9fa;padding:1rem;border-radius:4px;margin-bottom:1.5rem}.result-info p{margin:.5rem 0;color:#2c3e50}.result-preview h4{color:#34495e;margin-bottom:1rem}.table-container{overflow-x:auto;max-height:500px;overflow-y:auto;border:1px solid #ddd;border-radius:4px}.result-table{width:100%;border-collapse:collapse;font-size:.9rem}.result-table thead{position:sticky;top:0;background-color:#34495e;color:#fff;z-index:10}.result-table th{padding:.75rem;text-align:left;font-weight:600;border-bottom:2px solid #2c3e50}.result-table td{padding:.75rem;border-bottom:1px solid #ecf0f1}.result-table tbody tr:hover{background-color:#f8f9fa}.result-table tbody tr:nth-child(2n){background-color:#fafafa}.app{min-height:100vh;display:flex;flex-direction:column;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,sans-serif}.app-header{background:linear-gradient(135deg,#ee3224,#d62c20);color:#fff;padding:1rem 2rem;display:flex;justify-content:space-between;align-items:center;box-shadow:0 2px 8px #0000001a;z-index:100}.header-logo svg{width:180px;height:auto}.header-divider{width:1px;height:40px;background:#ffffff4d}.header-title h1{margin:0 0 .25rem;font-size:1.5rem;font-weight:700;letter-spacing:-.5px}.header-title p{margin:0;font-size:.9rem;opacity:.9;font-weight:400}.header-user-info{display:flex;align-items:center;gap:1.5rem}.app-body{display:flex;flex:1;overflow:hidden}.sidebar{width:250px;background-color:#f8f9fa;border-right:1px solid #e9ecef;display:flex;flex-direction:column}.sidebar-nav{padding:1.5rem 0;display:flex;flex-direction:column;gap:.5rem}.sidebar-nav-item{display:flex;align-items:center;gap:1rem;padding:.875rem 1.5rem;background:none;border:none;border-left:3px solid transparent;cursor:pointer;font-size:1rem;color:#495057;transition:all .2s;text-align:left}.sidebar-nav-item:hover{background-color:#e9ecef;color:#212529}.sidebar-nav-item.active{background-color:#fff;border-left-color:#d32f2f;color:#d32f2f;font-weight:600}.nav-icon{font-size:1.25rem;width:24px;text-align:center}.app-main{flex:1;overflow-y:auto;background-color:#fff}.main-content{padding:2rem;max-width:1400px;margin:0 auto}.app-footer{background-color:#f8f9fa;color:#6c757d;padding:1.5rem 2rem;border-top:1px solid #e9ecef}.footer-content{max-width:1400px;margin:0 auto;display:flex;align-items:center;justify-content:space-between;gap:2rem}.footer-logo svg{width:150px;height:auto}.footer-info p{margin:0;font-size:.875rem;color:#6c757d}.extraction-form{background:#fff;padding:2rem;border-radius:16px;box-shadow:0 2px 8px #0000000f;margin-bottom:2rem;border:1px solid #e9ecef}.form-header{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:2rem;padding-bottom:1.5rem;border-bottom:2px solid #f8f9fa}.form-header-content h2{margin:0 0 .5rem;color:#212529;font-weight:700;font-size:1.75rem}.form-subtitle{margin:0;color:#6c757d;font-size:1rem;font-weight:400}.customer-count-badge{padding:.5rem 1rem;background:linear-gradient(135deg,#ee3224,#d62c20);color:#fff;border-radius:20px;font-size:.875rem;font-weight:600;white-space:nowrap}.form-step{margin-bottom:2rem;padding:1.5rem;background:#fafbfc;border-radius:12px;border:2px solid #e9ecef;transition:all .3s ease}.form-step:hover{border-color:#dee2e6;box-shadow:0 2px 8px #0000000a}.form-step.step-disabled{opacity:.6;pointer-events:none}.step-header{display:flex;align-items:flex-start;gap:1rem;margin-bottom:1.5rem}.step-number{width:36px;height:36px;background:linear-gradient(135deg,#ee3224,#d62c20);color:#fff;border-radius:50%;display:flex;align-items:center;justify-content:center;font-weight:700;font-size:1.1rem;flex-shrink:0;box-shadow:0 2px 8px #ee32244d}.step-info h3{margin:0 0 .25rem;color:#212529;font-size:1.1rem;font-weight:600}.step-info p{margin:0;color:#6c757d;font-size:.875rem}.step-content{padding-left:3rem}.loading-skeleton{display:flex;flex-direction:column;gap:.75rem}.skeleton-box{height:48px;background:linear-gradient(90deg,#f0f0f0 25%,#e8e8e8,#f0f0f0 75%);background-size:200% 100%;animation:loading 1.5s infinite;border-radius:10px}@keyframes loading{0%{background-position:200% 0}to{background-position:-200% 0}}.loading-text{color:#6c757d;font-size:.875rem;text-align:center}.dataset-info-card{display:flex;align-items:center;gap:1rem;margin-top:1rem;padding:1rem;background:linear-gradient(135deg,#e7f3ff,#f0f7ff);border-radius:10px;border:2px solid #bee3f8}.dataset-icon{width:32px;height:32px;background:#ee3224;color:#fff;border-radius:50%;display:flex;align-items:center;justify-content:center;font-weight:700;flex-shrink:0}.dataset-details{display:flex;flex-direction:column;gap:.25rem}.dataset-label{font-size:.75rem;color:#6c757d;text-transform:uppercase;font-weight:600;letter-spacing:.5px}.dataset-id{color:#ee3224;font-size:1rem;font-weight:600}.mode-options{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:1rem}.mode-option{position:relative;cursor:pointer;padding:1.25rem;background:#fff;border:2px solid #dee2e6;border-radius:12px;transition:all .2s ease;display:block}.mode-option:hover{border-color:#ee3224;box-shadow:0 4px 12px #ee32241a;transform:translateY(-2px)}.mode-option.selected{border-color:#ee3224;background:linear-gradient(135deg,#fff3f2,#fff);box-shadow:0 4px 12px #ee322426}.mode-option input[type=radio]{position:absolute;opacity:0;pointer-events:none}.mode-content{display:flex;align-items:center;gap:1rem}.mode-icon{font-size:2rem;flex-shrink:0}.mode-details h4{margin:0 0 .25rem;color:#212529;font-size:1rem;font-weight:600}.mode-details p{margin:0;color:#6c757d;font-size:.875rem}.format-options{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:1rem}.format-option{position:relative;cursor:pointer;padding:1.25rem;background:#fff;border:2px solid #dee2e6;border-radius:12px;transition:all .2s ease;display:block}.format-option:hover{border-color:#ee3224;box-shadow:0 4px 12px #ee32241a;transform:translateY(-2px)}.format-option.selected{border-color:#ee3224;background:linear-gradient(135deg,#fff3f2,#fff);box-shadow:0 4px 12px #ee322426}.format-option input[type=radio]{position:absolute;opacity:0;pointer-events:none}.format-content{display:flex;align-items:center;gap:1rem}.format-icon{font-size:2rem;flex-shrink:0}.format-details h4{margin:0 0 .25rem;color:#212529;font-size:1rem;font-weight:600}.format-details p{margin:0;color:#6c757d;font-size:.875rem}.pvc-selector-wrapper{margin-top:1.5rem;padding:1.5rem;background:#fff;border-radius:10px;border:2px dashed #dee2e6}.form-actions{margin-top:2rem;padding-top:2rem;border-top:2px solid #f8f9fa}.submit-btn{width:100%;padding:1rem 2rem;background:linear-gradient(135deg,#ee3224,#d62c20);color:#fff;border:none;border-radius:12px;font-size:1.1rem;font-weight:600;cursor:pointer;transition:all .3s ease;box-shadow:0 4px 12px #ee32244d;display:flex;align-items:center;justify-content:center;gap:.75rem}.submit-btn:hover:not(:disabled){transform:translateY(-2px);box-shadow:0 6px 20px #ee322466}.submit-btn:disabled{opacity:.5;cursor:not-allowed;transform:none}.btn-icon{font-size:1.25rem}.btn-spinner{width:18px;height:18px;border:3px solid rgba(255,255,255,.3);border-top-color:#fff;border-radius:50%;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.submit-hint{text-align:center;margin-top:1rem;color:#6c757d;font-size:.875rem}.error-message{display:flex;align-items:flex-start;gap:1rem;background:linear-gradient(135deg,#fed7d7,#fff5f5);color:#c53030;padding:1.25rem;border-radius:12px;margin-bottom:1.5rem;border-left:4px solid #fc8181;box-shadow:0 2px 8px #fc818133}.error-icon{font-size:1.5rem;flex-shrink:0}.error-content{flex:1}.error-content strong{display:block;margin-bottom:.25rem;font-weight:600}.error-content p{margin:0;font-size:.875rem}.form-group{margin-bottom:1.5rem;text-align:left}.form-group label{display:block;margin-bottom:.5rem;font-weight:500;color:#495057}.form-group input,.form-group select{width:100%;padding:.75rem;border:1px solid #ced4da;border-radius:8px;font-size:1rem;transition:all .2s;background-color:#fff}.form-group input:focus,.form-group select:focus{outline:none;border-color:#ee3224;box-shadow:0 0 0 .2rem #ee322426}.pvc-selector{margin-top:1rem;padding:1rem;background-color:#f7fafc;border-radius:4px;border:1px solid #e2e8f0}.pvc-selector label{display:block;margin-bottom:.5rem;font-weight:500;color:#4a5568}.pvc-controls{display:flex;gap:.5rem;margin-bottom:1rem}.search-input{flex:1;padding:.5rem;border:1px solid #e2e8f0;border-radius:4px}.select-all-btn{padding:.5rem 1rem;background-color:#edf2f7;border:1px solid #cbd5e0;border-radius:4px;cursor:pointer;transition:background-color .2s}.select-all-btn:hover{background-color:#e2e8f0}.code-list{max-height:300px;overflow-y:auto;border:1px solid #e2e8f0;border-radius:4px;padding:.5rem;background-color:#fff}.code-item{display:flex;align-items:center;padding:.5rem;cursor:pointer;transition:background-color .2s}.code-item:hover{background-color:#f7fafc}.code-item input[type=checkbox]{width:auto;margin-right:.5rem}.selected-count{margin-top:.5rem;font-size:.875rem;color:#718096}.job-list{background:#fff;padding:2rem;border-radius:16px;box-shadow:0 2px 8px #0000000f;border:1px solid #e9ecef}.filter-bar{display:flex;align-items:center;gap:1rem;padding:1.5rem;background:#f8f9fa;border-radius:12px;margin-bottom:2rem;flex-wrap:wrap;border:2px solid #e9ecef}.filter-group{display:flex;align-items:center;gap:.75rem;flex-wrap:wrap;flex:1}.search-group{display:flex;align-items:center;gap:.5rem;position:relative;background:#fff;padding:.625rem 1rem;border-radius:10px;border:2px solid #dee2e6;transition:all .2s}.search-group:focus-within{border-color:#ee3224;box-shadow:0 0 0 .2rem #ee322426}.search-icon{font-size:1rem;color:#6c757d}.search-input-field{border:none;outline:none;font-size:.875rem;color:#495057;background:transparent;width:250px;padding:0}.search-input-field::placeholder{color:#adb5bd}.clear-search-btn{background:none;border:none;color:#6c757d;cursor:pointer;padding:0;width:20px;height:20px;display:flex;align-items:center;justify-content:center;border-radius:50%;transition:all .2s;font-size:.875rem}.clear-search-btn:hover{background:#e9ecef;color:#495057}.job-list-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:2rem;padding-bottom:1.5rem;border-bottom:2px solid #f8f9fa;flex-wrap:wrap;gap:1rem}.header-title-section{display:flex;align-items:center;gap:1rem}.job-list-header h2{margin:0;color:#212529;font-weight:700;font-size:1.5rem}.job-count-indicator{padding:.375rem .875rem;background:linear-gradient(135deg,#e9ecef,#f8f9fa);color:#495057;border-radius:16px;font-size:.875rem;font-weight:600}.refresh-btn{padding:.625rem 1.25rem;background:linear-gradient(135deg,#f8f9fa,#e9ecef);border:2px solid #dee2e6;border-radius:10px;cursor:pointer;transition:all .2s;color:#495057;font-weight:600;display:flex;align-items:center;gap:.5rem}.refresh-btn:hover{background:linear-gradient(135deg,#e9ecef,#dee2e6);border-color:#adb5bd;transform:translateY(-1px);box-shadow:0 2px 8px #00000014}.refresh-icon{font-size:1rem}.download-excel-btn{padding:.625rem 1.25rem;background:linear-gradient(135deg,#28a745,#218838);border:2px solid #1e7e34;border-radius:10px;cursor:pointer;transition:all .2s;color:#fff;font-weight:600;display:flex;align-items:center;gap:.5rem}.download-excel-btn:hover:not(:disabled){background:linear-gradient(135deg,#218838,#1e7e34);transform:translateY(-1px);box-shadow:0 4px 12px #28a7454d}.download-excel-btn:disabled{background:linear-gradient(135deg,#e9ecef,#dee2e6);border-color:#dee2e6;color:#6c757d;cursor:not-allowed;opacity:.6}.download-icon{font-size:1rem}.header-controls,.filter-controls{display:flex;align-items:center;gap:1rem;flex-wrap:wrap}.filter-label{display:flex;align-items:center;gap:.5rem;padding:.5rem 1rem;background:#f8f9fa;border-radius:10px;border:2px solid #dee2e6;cursor:pointer;transition:all .2s}.filter-label:hover{border-color:#adb5bd}.filter-icon{font-size:1rem}.filter-select{padding:.375rem .75rem;border:none;background:transparent;font-size:.875rem;font-weight:600;color:#495057;cursor:pointer;outline:none}.checkbox-label{display:flex;align-items:center;gap:.5rem;padding:.5rem 1rem;background:#f8f9fa;border-radius:10px;border:2px solid #dee2e6;cursor:pointer;transition:all .2s;font-size:.875rem;font-weight:600;color:#495057}.checkbox-label:hover{border-color:#adb5bd}.checkbox-label input[type=checkbox]{cursor:pointer;width:18px;height:18px;accent-color:#EE3224}.no-jobs{text-align:center;padding:4rem 2rem;color:#6c757d}.no-jobs-icon{font-size:4rem;margin-bottom:1rem;opacity:.5}.no-jobs h3{margin:0 0 .5rem;color:#495057;font-weight:600;font-size:1.25rem}.no-jobs p{margin:0;color:#6c757d;font-size:1rem}.jobs-cards-container{display:flex;flex-direction:column;gap:2rem}.job-group{margin-bottom:0}.group-header-card{display:flex;justify-content:space-between;align-items:center;padding:1rem 1.5rem;background:linear-gradient(135deg,#ee3224,#d62c20);color:#fff;border-radius:12px;margin-bottom:1rem;box-shadow:0 2px 8px #ee322433}.group-header-card h3{margin:0;font-size:1.1rem;font-weight:600;display:flex;align-items:center;gap:.5rem}.job-count{font-size:.875rem;padding:.375rem .875rem;background-color:#ffffff40;border-radius:16px;font-weight:600}.jobs-cards-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(350px,1fr));gap:1.5rem}.job-card{background:#fff;border-radius:12px;border:2px solid #e9ecef;overflow:hidden;transition:all .3s ease;box-shadow:0 2px 8px #0000000a}.job-card:hover{box-shadow:0 4px 16px #00000014;transform:translateY(-2px)}.job-card.status-completed{border-left:4px solid #48bb78}.job-card.status-running{border-left:4px solid #4299e1}.job-card.status-pending{border-left:4px solid #ed8936}.job-card.status-failed{border-left:4px solid #f56565}.job-card-header{padding:1.25rem;border-bottom:2px solid #f8f9fa}.job-card-title{display:flex;justify-content:space-between;align-items:center;gap:1rem;margin-bottom:.75rem}.job-card-title h4{margin:0;font-size:1.1rem;font-weight:600;color:#212529;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.job-card-meta{display:flex;align-items:center;gap:.5rem;color:#6c757d;font-size:.875rem}.job-time{display:flex;align-items:center;gap:.25rem}.job-card-body{padding:1.25rem;display:flex;flex-direction:column;gap:1rem}.job-info-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:1rem}.job-info-item{display:flex;flex-direction:column;gap:.25rem}.info-label{font-size:.75rem;color:#6c757d;text-transform:uppercase;font-weight:600;letter-spacing:.5px}.info-value{font-size:.875rem;color:#495057;font-weight:500}.job-id-short{font-family:Courier New,monospace;background-color:#f7fafc;padding:.25rem .5rem;border-radius:4px;font-size:.75rem}.job-progress-section{display:flex;flex-direction:column;gap:.5rem;padding:1rem;background:#f8f9fa;border-radius:8px;margin-top:.5rem}.progress-bar-card{width:100%;height:10px;background-color:#e9ecef;border-radius:5px;overflow:hidden}.progress-fill-card{height:100%;background:linear-gradient(90deg,#48bb78,#38a169);transition:width .3s ease;border-radius:5px}.progress-text-card{font-size:.875rem;color:#495057;font-weight:600;text-align:center}.current-step-card{padding:.5rem;background-color:#fff3cd;border-left:3px solid #ffc107;border-radius:4px;font-size:.75rem;color:#856404;line-height:1.4;font-weight:500;animation:pulse 2s ease-in-out infinite}.error-message-card{display:flex;align-items:flex-start;gap:.75rem;padding:1rem;background:linear-gradient(135deg,#fed7d7,#fff5f5);border-radius:8px;border-left:3px solid #f56565;margin-top:.5rem}.error-icon{font-size:1.25rem;flex-shrink:0}.error-text{font-size:.875rem;color:#c53030;line-height:1.4;font-weight:500}.job-card-actions{display:flex;gap:.75rem;padding:1rem 1.25rem;background:#f8f9fa;border-top:2px solid #e9ecef}.card-action-btn{flex:1;padding:.75rem 1rem;border:none;border-radius:8px;font-size:.875rem;font-weight:600;cursor:pointer;transition:all .2s ease;display:flex;align-items:center;justify-content:center;gap:.5rem}.card-action-btn.preview-btn{background:#f8f9fa;color:#495057;border:2px solid #dee2e6}.card-action-btn.preview-btn:hover{background:#e9ecef;border-color:#adb5bd;transform:translateY(-1px)}.card-action-btn.download-btn-primary{background:linear-gradient(135deg,#ee3224,#d62c20);color:#fff;box-shadow:0 2px 8px #ee32244d}.card-action-btn.download-btn-primary:hover{background:linear-gradient(135deg,#d62c20,#c62828);transform:translateY(-2px);box-shadow:0 4px 12px #ee322466}.card-action-btn.pvc-view-btn{background:linear-gradient(135deg,#6c5ce7,#5f4fd1);color:#fff;box-shadow:0 2px 8px #6c5ce74d}.card-action-btn.pvc-view-btn:hover{background:linear-gradient(135deg,#5f4fd1,#5344bb);transform:translateY(-2px);box-shadow:0 4px 12px #6c5ce766}.card-action-btn.cancel-btn{background:#dc3545;color:#fff}.card-action-btn.cancel-btn:hover{background:#c82333;transform:translateY(-1px)}.jobs-table{overflow-x:auto}.jobs-table table{width:100%;border-collapse:collapse}.jobs-table th{background-color:#f8f9fa;padding:.75rem;text-align:left;font-weight:600;color:#495057;border-bottom:2px solid #dee2e6}.jobs-table td{padding:.75rem;border-bottom:1px solid #e9ecef;color:#212529}.job-id{font-family:Courier New,monospace;background-color:#f7fafc;padding:.25rem .5rem;border-radius:3px;font-size:.875rem}.status-badge{display:inline-block;padding:.25rem .75rem;border-radius:12px;font-size:.75rem;font-weight:500;text-transform:uppercase}.status-completed{background-color:#c6f6d5;color:#22543d}.status-failed{background-color:#fed7d7;color:#742a2a}.status-running{background-color:#bee3f8;color:#2c5282}.status-pending{background-color:#feebc8;color:#7c2d12}.mode-badge{display:inline-block;padding:.25rem .5rem;border-radius:4px;font-size:.75rem;text-transform:capitalize}.mode-basic{background-color:#e2e8f0;color:#2d3748}.mode-whitelist{background-color:#bee3f8;color:#2c5282}.mode-blacklist{background-color:#fed7d7;color:#742a2a}.progress-info{display:flex;flex-direction:column;gap:.25rem}.progress-bar{width:100px;height:8px;background-color:#e2e8f0;border-radius:4px;overflow:hidden}.progress-fill{height:100%;background:linear-gradient(90deg,#ee3224,#d62c20);transition:width .3s ease}.progress-text{font-size:.75rem;color:#718096;font-weight:500}.current-step{margin-top:.25rem;padding:.375rem .5rem;background-color:#fff3cd;border-left:3px solid #ffc107;border-radius:4px;font-size:.75rem;color:#856404;max-width:300px;line-height:1.3;font-weight:500;animation:pulse 2s ease-in-out infinite}@keyframes pulse{0%,to{opacity:1}50%{opacity:.8}}.actions-cell{text-align:center;display:flex;gap:.5rem;justify-content:center}.action-btn{padding:.375rem .75rem;border:none;border-radius:4px;font-size:.875rem;cursor:pointer;transition:opacity .2s}.action-btn:hover{opacity:.8}.preview-btn{background-color:#ee3224;color:#fff;border-radius:6px}.preview-btn:hover{background-color:#d62c20}.download-btn{background-color:#c62828;color:#fff;border-radius:6px}.download-btn:hover{background-color:#b71c1c}.cancel-btn{background-color:#dc3545;color:#fff;border-radius:6px}.cancel-btn:hover{background-color:#c82333}.error-tooltip{color:#e53e3e;cursor:help;text-decoration:underline dotted}.date-cell{font-size:.875rem;color:#718096}.loading,.error{padding:2rem;text-align:center;color:#718096}.error{color:#e53e3e}.modal-overlay{position:fixed;inset:0;background-color:#00000080;display:flex;justify-content:center;align-items:center;z-index:1000;padding:1rem}.modal-content{background:#fff;border-radius:12px;box-shadow:0 10px 40px #0003;max-width:95vw;max-height:90vh;display:flex;flex-direction:column;overflow:hidden}.modal-header{display:flex;justify-content:space-between;align-items:center;padding:1.5rem;border-bottom:1px solid #e9ecef}.modal-header h3{margin:0;color:#212529;font-weight:600}.close-btn{background:none;border:none;font-size:1.5rem;cursor:pointer;color:#6c757d;padding:0;width:2rem;height:2rem;display:flex;align-items:center;justify-content:center;border-radius:4px;transition:all .2s}.close-btn:hover{background-color:#f8f9fa;color:#212529}.modal-body{padding:1.5rem;overflow-y:auto;flex:1}.preview-loading{text-align:center;padding:2rem;color:#6c757d}.preview-content{width:100%}.preview-info{margin:0 0 1rem;padding:.75rem;background-color:#f8f9fa;border-radius:6px;font-size:.875rem;color:#495057}.file-preview{margin-bottom:2rem}.file-preview h4{margin:0 0 1rem;color:#212529;font-weight:600;font-size:1rem}.table-wrapper{overflow-x:auto;border:1px solid #dee2e6;border-radius:6px}.preview-table{width:100%;border-collapse:collapse;font-size:.875rem}.preview-table th{background-color:#f8f9fa;padding:.75rem;text-align:left;font-weight:600;color:#495057;border-bottom:2px solid #dee2e6;white-space:nowrap;position:sticky;top:0}.preview-table td{padding:.75rem;border-bottom:1px solid #e9ecef;color:#212529;max-width:300px;overflow:hidden;text-overflow:ellipsis}.preview-table tr:last-child td{border-bottom:none}.preview-table tr:hover{background-color:#f7fafc}.login-container{min-height:100vh;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,#f8f9fa,#fff);padding:2rem}.login-card{background:#fff;border-radius:16px;box-shadow:0 10px 40px #0003;max-width:520px;width:100%;overflow:hidden}.login-header{background:linear-gradient(135deg,#ee3224,#d62c20);color:#fff;padding:3rem 2rem;text-align:center;position:relative}.login-logo{display:flex;justify-content:center;margin-bottom:1.5rem}.login-logo svg{width:180px;height:auto}.login-title-group h1{margin:0 0 .5rem;font-size:2rem;font-weight:700;letter-spacing:-.5px}.login-title-group p{margin:0;opacity:.95;font-size:1rem;font-weight:400}.login-content{padding:3rem 2rem}.login-description{text-align:center;color:#495057;line-height:1.6;margin-bottom:2rem}.login-error{background-color:#fed7d7;color:#c53030;padding:1rem;border-radius:8px;margin-bottom:1.5rem;border-left:4px solid #fc8181;text-align:center}.google-login-btn{width:100%;padding:1rem;background:#fff;color:#444;border:2px solid #ddd;border-radius:8px;font-size:1rem;font-weight:500;cursor:pointer;transition:all .2s;display:flex;align-items:center;justify-content:center;gap:.75rem;box-shadow:0 2px 4px #0000001a}.google-login-btn:hover:not(:disabled){border-color:#ccc;box-shadow:0 4px 8px #00000026;transform:translateY(-1px)}.google-login-btn:disabled{opacity:.6;cursor:not-allowed}.google-icon{width:24px;height:24px}.google-login-btn-container{display:flex;justify-content:center;align-items:center;margin-bottom:1.5rem}.login-notice{text-align:center;color:#6c757d;font-size:.875rem;margin-top:1.5rem;margin-bottom:0}.user-info-header{display:flex;justify-content:space-between;align-items:center;padding:1rem 2rem;background-color:#f8f9fa;border-bottom:1px solid #e9ecef}.user-info{display:flex;align-items:center;gap:1rem}.user-name{font-weight:500;color:#212529}.user-email{font-size:.875rem;color:#6c757d}.logout-btn{padding:.5rem 1rem;background-color:#f8f9fa;border:1px solid #dee2e6;border-radius:6px;cursor:pointer;transition:all .2s;color:#495057;font-weight:500}.logout-btn:hover{background-color:#e9ecef;transform:translateY(-1px)}@media (max-width: 1024px){.main-content{padding:1.5rem}.mode-options,.format-options{grid-template-columns:1fr}.step-content{padding-left:0}.step-header{flex-direction:column;align-items:flex-start}}@media (max-width: 768px){.app-body{flex-direction:column}.sidebar{width:100%;border-right:none;border-bottom:1px solid #e9ecef}.sidebar-nav{flex-direction:row;overflow-x:auto;padding:1rem}.sidebar-nav-item{white-space:nowrap}.main-content{padding:1rem}.extraction-form,.job-list{padding:1.5rem}.form-header{flex-direction:column;align-items:stretch}.customer-count-badge{align-self:flex-start}.form-step{padding:1rem}.step-number{width:32px;height:32px;font-size:1rem}.job-list-header{flex-direction:column;align-items:stretch}.header-title-section{justify-content:space-between}.header-controls,.filter-controls{flex-direction:column;align-items:stretch}.pvc-controls{flex-direction:column}.filter-bar,.filter-group{flex-direction:column;align-items:stretch}.search-group,.search-input-field{width:100%}.jobs-cards-grid,.job-info-grid{grid-template-columns:1fr}.jobs-table{font-size:.875rem}.jobs-table th,.jobs-table td{padding:.5rem;font-size:.8rem}.modal-content{max-width:98vw}.modal-header,.modal-body{padding:1rem}.footer-content{flex-direction:column;align-items:center;text-align:center}.footer-logo svg{width:120px}.preview-table{font-size:.75rem}.preview-table th,.preview-table td{padding:.5rem}.mode-icon,.format-icon,.form-header-content h2{font-size:1.5rem}.job-list-header h2{font-size:1.25rem}}.nav-menu{display:flex;gap:.5rem;background-color:#ffffff1a;padding:.25rem;border-radius:8px}.nav-btn{padding:.5rem 1.25rem;background:none;border:none;color:#666;cursor:pointer;font-weight:500;border-radius:6px;transition:all .3s;font-size:.95rem}.nav-btn:hover{background-color:#d32f2f1a;color:#d32f2f}.nav-btn.active{background-color:#fff;color:#d32f2f;box-shadow:0 2px 4px #0000001a}.stored-data{padding:2rem}.stored-data-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:2rem}.stored-data-header h2{margin:0;color:#212529;font-weight:600}.search-input{padding:.5rem 1rem;border:1px solid #dee2e6;border-radius:6px;font-size:.875rem;width:300px}.no-data{text-align:center;color:#a0aec0;padding:3rem;font-size:1.1rem}.customers-list{display:flex;flex-direction:column;gap:1.5rem}.customer-card{background:#fff;border-radius:12px;box-shadow:0 2px 8px #00000014;overflow:hidden;transition:all .3s}.customer-card:hover{box-shadow:0 4px 16px #0000001f}.customer-header{display:flex;justify-content:space-between;align-items:center;padding:1.25rem 1.5rem;background:linear-gradient(135deg,#ee3224,#d62c20);color:#fff;cursor:pointer;transition:all .3s}.customer-header:hover{background:linear-gradient(135deg,#5568d3,#6a3f92)}.customer-info{display:flex;align-items:center;gap:1rem}.customer-info h3{margin:0;font-size:1.1rem;font-weight:600}.file-count{font-size:.875rem;padding:.25rem .75rem;background-color:#fff3;border-radius:12px}.expand-icon{transition:transform .3s;font-size:.875rem}.expand-icon.expanded{transform:rotate(180deg)}.files-list{padding:1.5rem;background-color:#f8f9fa}.files-list table{width:100%;border-collapse:collapse;background-color:#fff;border-radius:8px;overflow:hidden}.files-list th{background-color:#f1f3f5;padding:.75rem;text-align:left;font-weight:600;color:#495057;border-bottom:2px solid #dee2e6}.files-list td{padding:.75rem;border-bottom:1px solid #e9ecef;color:#212529}.file-name{font-family:Courier New,monospace;font-size:.875rem;color:#495057;font-weight:500}.tenant-management{padding:0}.tenant-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:2rem;padding:1.5rem;background:#fff;border-radius:16px;box-shadow:0 2px 8px #0000000f;border:1px solid #e9ecef}.tenant-header h2{margin:0;color:#212529;font-weight:700;font-size:1.75rem}.tenant-actions{display:flex;gap:1rem}.sync-btn,.add-btn{padding:.75rem 1.5rem;border:none;border-radius:10px;font-size:1rem;font-weight:600;cursor:pointer;transition:all .2s;display:flex;align-items:center;gap:.5rem}.sync-btn{background:linear-gradient(135deg,#f8f9fa,#e9ecef);color:#495057;border:2px solid #dee2e6}.sync-btn:hover{background:linear-gradient(135deg,#e9ecef,#dee2e6);transform:translateY(-1px);box-shadow:0 2px 8px #0000001a}.add-btn{background:linear-gradient(135deg,#ee3224,#d62c20);color:#fff;box-shadow:0 2px 8px #ee32244d}.add-btn:hover{background:linear-gradient(135deg,#d62c20,#c62828);transform:translateY(-2px);box-shadow:0 4px 12px #ee322466}.tenant-form-card{background:#fff;padding:2rem;border-radius:16px;box-shadow:0 2px 8px #0000000f;margin-bottom:2rem;border:1px solid #e9ecef}.tenant-form-card h3{margin:0 0 1.5rem;color:#212529;font-weight:600;font-size:1.25rem}.form-row{display:grid;grid-template-columns:repeat(2,1fr);gap:1.5rem;margin-bottom:1.5rem}.tenant-form-card .form-group label{display:block;margin-bottom:.5rem;font-weight:600;color:#495057;font-size:.875rem}.tenant-form-card .form-group input{width:100%;padding:.75rem;border:2px solid #dee2e6;border-radius:8px;font-size:1rem;transition:all .2s}.tenant-form-card .form-group input:focus{outline:none;border-color:#ee3224;box-shadow:0 0 0 .2rem #ee322426}.tenant-form-card .form-group input:disabled{background-color:#f8f9fa;cursor:not-allowed}.tenant-list-card{background:#fff;padding:2rem;border-radius:16px;box-shadow:0 2px 8px #0000000f;border:1px solid #e9ecef}.tenant-count{margin-bottom:1.5rem;color:#6c757d;font-weight:600;font-size:.875rem;text-transform:uppercase;letter-spacing:.5px}.tenants-table{overflow-x:auto}.tenants-table table{width:100%;border-collapse:collapse}.tenants-table th{background-color:#f8f9fa;padding:1rem;text-align:left;font-weight:600;color:#495057;border-bottom:2px solid #dee2e6;font-size:.875rem;text-transform:uppercase;letter-spacing:.5px}.tenants-table td{padding:1rem;border-bottom:1px solid #e9ecef;color:#212529}.tenants-table tr:last-child td{border-bottom:none}.tenants-table tr:hover{background-color:#f7fafc}.tenant-code,.dataset-id{font-family:Courier New,monospace;background-color:#f7fafc;padding:.25rem .5rem;border-radius:4px;font-size:.875rem;color:#495057}.no-tenants{text-align:center;padding:4rem 2rem;color:#6c757d}.no-tenants-icon{font-size:4rem;margin-bottom:1rem;opacity:.5}.no-tenants h3{margin:0 0 .5rem;color:#495057;font-weight:600;font-size:1.25rem}.no-tenants p{margin:0;color:#6c757d;font-size:1rem}.edit-btn,.delete-btn{padding:.5rem .75rem;border:none;border-radius:6px;cursor:pointer;transition:all .2s;font-size:1rem}.edit-btn{background-color:#f8f9fa;color:#495057;border:1px solid #dee2e6}.edit-btn:hover{background-color:#e9ecef;border-color:#adb5bd;transform:translateY(-1px)}.delete-btn{background-color:#fed7d7;color:#c53030;border:1px solid #fc8181}.delete-btn:hover{background-color:#fc8181;color:#fff;transform:translateY(-1px)}.pvc-codes-section{margin-top:1rem;padding:.75rem;border-radius:8px;background-color:#f8f9fa}.pvc-codes-section.success{background-color:#d4edda;border-left:4px solid #28a745}.pvc-codes-section.failed{background-color:#f8d7da;border-left:4px solid #dc3545}.pvc-codes-header{display:flex;align-items:center;justify-content:space-between;gap:.5rem;margin-bottom:.5rem;font-size:.875rem;transition:background-color .2s ease;padding:.5rem;border-radius:6px}.pvc-codes-header.clickable:hover{background-color:#0000000d}.pvc-codes-header .toggle-icon{font-size:.75rem;color:#6c757d;transition:transform .2s ease}.pvc-icon{font-size:1rem}.pvc-codes-list{display:flex;flex-wrap:wrap;gap:.5rem}.pvc-code-chip{display:inline-block;padding:.25rem .75rem;border-radius:12px;font-size:.75rem;font-weight:500;white-space:nowrap}.pvc-code-chip.success{background-color:#28a745;color:#fff}.pvc-code-chip.failed{background-color:#dc3545;color:#fff}.card-action-btn.delete-btn{background-color:#f8d7da;color:#dc3545;border:1px solid #dc3545}.card-action-btn.delete-btn:hover{background-color:#dc3545;color:#fff;transform:translateY(-2px)}.pvc-views-container{padding:2rem;max-width:1400px;margin:0 auto}.pvc-views-header{margin-bottom:2rem}.pvc-views-header h2{margin:0 0 .5rem;font-size:1.75rem;color:#212529}.pvc-views-header .header-description{margin:0;color:#6c757d;font-size:.95rem}.pvc-views-content{margin-top:2rem}.path-group{margin-bottom:2.5rem;background:#fff;border-radius:8px;box-shadow:0 1px 3px #0000001a;overflow:hidden}.path-header{display:flex;justify-content:space-between;align-items:center;padding:1rem 1.5rem;background:linear-gradient(135deg,#667eea,#764ba2);color:#fff}.path-header h3{margin:0;font-size:1.1rem;font-weight:600}.path-count{font-size:.9rem;opacity:.9}.views-table-wrapper{overflow-x:auto}.views-table{width:100%;border-collapse:collapse}.views-table thead th{background:#f8f9fa;padding:.75rem 1rem;text-align:left;font-weight:600;color:#495057;border-bottom:2px solid #dee2e6;font-size:.9rem}.views-table tbody tr.view-row{border-bottom:1px solid #dee2e6;transition:background .2s}.views-table tbody tr.view-row:hover{background:#f8f9fa}.views-table tbody td{padding:.875rem 1rem;vertical-align:middle}.views-table tbody td code{background:#e9ecef;padding:.25rem .5rem;border-radius:4px;font-family:Courier New,monospace;font-size:.85rem}.expand-icon{color:#6c757d;font-size:.8rem}.expanded-row{background:#f8f9fa!important}.expanded-row td{padding:1.5rem!important}.view-items h4{margin:0 0 1rem;font-size:.95rem;color:#495057;font-weight:600}.view-items-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:.75rem}.view-item-chip{display:flex;align-items:center;gap:.5rem;padding:.5rem .75rem;background:#fff;border:1px solid #dee2e6;border-radius:6px;font-size:.85rem}.view-item-number{display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;background:linear-gradient(135deg,#667eea,#764ba2);color:#fff;border-radius:50%;font-size:.75rem;font-weight:600;flex-shrink:0}.view-item-name{flex:1;color:#212529}.loading-message,.error-message{padding:2rem;text-align:center;background:#fff;border-radius:8px;box-shadow:0 1px 3px #0000001a}.error-message{color:#dc3545}.error-icon{font-size:1.5rem;margin-right:.5rem}.no-data{padding:4rem 2rem;text-align:center;background:#fff;border-radius:8px;box-shadow:0 1px 3px #0000001a}.no-data-icon{font-size:4rem;margin-bottom:1rem;opacity:.3}.no-data h3{margin:0 0 .5rem;color:#495057}.no-data p{margin:0;color:#6c757d}
