.admin-container{max-width:1200px;margin:0 auto;padding:20px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.admin-header{border-bottom:1px solid #e0e0e0;justify-content:space-between;align-items:center;margin-bottom:30px;padding-bottom:20px;display:flex}.admin-header h1{color:#333;margin:0;font-size:24px}.btn{cursor:pointer;border:none;border-radius:6px;padding:8px 16px;font-size:14px;text-decoration:none;transition:background-color .2s;display:inline-block}.btn-primary{color:#fff;background-color:#411b8d}.btn-primary:hover{background-color:#5a2db5}.btn-secondary{color:#333;background-color:#f0f0f0}.btn-secondary:hover{background-color:#e0e0e0}.btn-danger{color:#fff;background-color:#dc3545}.btn-danger:hover{background-color:#c82333}.btn-toggle{color:#333;background-color:#ffc107}.projects-section h2{color:#333;margin-bottom:20px}.empty-state{text-align:center;background-color:#f9f9f9;border-radius:8px;padding:60px 20px}.empty-state p{color:#666;margin-bottom:20px}.projects-grid{grid-template-columns:repeat(auto-fill,minmax(350px,1fr));gap:20px;display:grid}.project-card{background:#fff;border:1px solid #e0e0e0;border-radius:8px;padding:20px;box-shadow:0 2px 4px #0000000d}.project-card.disabled{opacity:.7;background-color:#f9f9f9}.project-header{justify-content:space-between;align-items:center;margin-bottom:10px;display:flex}.project-header h3{color:#333;margin:0;font-size:18px}.status-badge{border-radius:12px;padding:4px 8px;font-size:12px;font-weight:500}.status-badge.active{color:#155724;background-color:#d4edda}.status-badge.inactive{color:#721c24;background-color:#f8d7da}.project-description{color:#666;margin-bottom:15px;font-size:14px;line-height:1.5}.project-meta{color:#999;gap:15px;margin-bottom:15px;font-size:12px;display:flex}.project-meta .slug{background-color:#f0f0f0;border-radius:4px;padding:2px 6px;font-family:monospace}.project-actions{flex-wrap:wrap;gap:8px;display:flex}.project-actions .btn{padding:6px 12px;font-size:12px}.error-message{color:#721c24;background-color:#f8d7da;border-radius:6px;align-items:flex-start;gap:12px;margin-bottom:20px;padding:12px 16px;display:flex;position:relative}.error-message .dismiss-btn{color:#721c24;cursor:pointer;opacity:.7;background:0 0;border:none;padding:4px 8px;font-size:18px;line-height:1;position:absolute;top:8px;right:8px}.error-message .dismiss-btn:hover{opacity:1;background:#0000000d;border-radius:4px}.form-group{margin-bottom:20px}.form-group label{color:#333;margin-bottom:6px;font-weight:500;display:block}.form-group input,.form-group textarea,.form-group select{border:1px solid #ddd;border-radius:6px;width:100%;padding:10px 12px;font-size:14px}.form-group textarea{resize:vertical;min-height:100px}.form-group input:focus,.form-group textarea:focus,.form-group select:focus{border-color:#411b8d;outline:none;box-shadow:0 0 0 2px #411b8d1a}.form-help{color:#666;margin-top:4px;font-size:12px}.ingest-container{max-width:800px;margin:0 auto}.ingest-status{background-color:#f9f9f9;border-radius:8px;margin-bottom:20px;padding:20px}.ingest-stats{grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:15px;margin-top:15px;display:grid}.stat-item{text-align:center;background:#fff;border:1px solid #e0e0e0;border-radius:6px;padding:15px}.stat-value{color:#411b8d;font-size:24px;font-weight:700}.stat-label{color:#666;margin-top:4px;font-size:12px}.log-output{color:#d4d4d4;background-color:#1e1e1e;border-radius:6px;max-height:400px;margin-top:20px;padding:15px;font-family:monospace;font-size:13px;overflow-y:auto}.log-output p{margin:4px 0}.log-output .error{color:#f48771}.log-output .success{color:#89d185}.loader{margin:40px auto}.back-link{color:#411b8d;margin-bottom:10px;font-size:14px;text-decoration:none;display:inline-block}.back-link:hover{text-decoration:underline}.project-form{max-width:900px}.form-section{background:#fff;border:1px solid #e0e0e0;border-radius:8px;margin-bottom:24px;padding:24px}.form-section h2{color:#333;border-bottom:1px solid #e0e0e0;margin:0 0 20px;padding-bottom:12px;font-size:18px}.form-grid{grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:20px;display:grid}.form-group.full-width{grid-column:1/-1}.form-group small{color:#666;margin-top:4px;font-size:12px;display:block}.form-group input[type=checkbox]{width:auto;margin-right:8px}.form-group input[type=color]{cursor:pointer;width:60px;height:40px;padding:4px}.form-group input[type=range]{padding:0}.form-group input:disabled{cursor:not-allowed;background-color:#f5f5f5}.code-input{color:#d4d4d4;background-color:#1e1e1e;border-color:#333;font-family:Monaco,Menlo,Ubuntu Mono,monospace;font-size:13px;line-height:1.5}.code-input:focus{border-color:#411b8d}.form-actions{border-top:1px solid #e0e0e0;justify-content:flex-end;gap:12px;padding-top:20px;display:flex}.form-actions .btn{padding:12px 24px;font-size:14px}.btn:disabled{opacity:.6;cursor:not-allowed}.ingest-actions{background-color:#f9f9f9;border-radius:8px;margin-bottom:20px;padding:20px}.ingest-actions h2{margin:0 0 10px}.ingest-result{background-color:#f9f9f9;border-radius:8px;padding:20px}.ingest-result h2{margin:0 0 15px}.datasource-editor{background:#fafafa;border:1px solid #e0e0e0;border-radius:8px}.datasource-list{max-height:600px;overflow-y:auto}.datasource-item{border-bottom:1px solid #e0e0e0}.datasource-item:last-child{border-bottom:none}.datasource-header{cursor:pointer;align-items:center;padding:12px 16px;transition:background-color .15s;display:flex}.datasource-header:hover{background-color:#f0f0f0}.datasource-type{text-transform:uppercase;text-align:center;border-radius:4px;min-width:65px;margin-right:12px;padding:4px 10px;font-size:11px;font-weight:600;display:inline-block}.datasource-type.url{color:#1e40af;background-color:#dbeafe}.datasource-type.sitemap{color:#166534;background-color:#dcfce7}.datasource-type.api{color:#92400e;background-color:#fef3c7}.datasource-type.file{color:#7c3aed;background-color:#f3e8ff}.datasource-label{color:#333;text-overflow:ellipsis;white-space:nowrap;flex:1;font-size:14px;overflow:hidden}.datasource-actions{align-items:center;gap:8px;display:flex}.btn-icon{color:#dc2626;cursor:pointer;background:#fee2e2;border:none;border-radius:4px;justify-content:center;align-items:center;width:24px;height:24px;font-size:14px;line-height:1;display:flex}.btn-icon:hover{background:#fecaca}.expand-icon{color:#999;margin-left:8px;font-size:10px}.datasource-form{background:#fff;border-top:1px solid #e0e0e0;padding:16px}.source-form-content .form-group{margin-bottom:16px}.source-form-content .form-group:last-child{margin-bottom:0}.source-form-content label{color:#333;margin-bottom:6px;font-size:13px;font-weight:500;display:block}.source-form-content input,.source-form-content textarea,.source-form-content select{border:1px solid #ddd;border-radius:4px;width:100%;padding:8px 12px;font-size:14px}.source-form-content textarea{font-family:monospace;font-size:13px}.source-form-content small{color:#666;margin-top:4px;font-size:11px;display:block}.form-row{gap:16px;display:flex}.form-row .form-group{flex:1}.form-fieldset{background:#fafafa;border:1px solid #e0e0e0;border-radius:6px;margin:16px 0;padding:16px}.form-fieldset legend{color:#555;padding:0 8px;font-size:13px;font-weight:600}.scrape-config{background:#fafafa;border:1px solid #e0e0e0;border-radius:6px;margin-top:16px}.scrape-config summary{cursor:pointer;color:#555;padding:12px 16px;font-size:13px;font-weight:500}.scrape-config summary:hover{background:#f0f0f0}.scrape-config[open] summary{border-bottom:1px solid #e0e0e0}.scrape-config .form-group{padding:0 16px}.scrape-config .form-group:first-of-type{padding-top:16px}.scrape-config .form-group:last-of-type{padding-bottom:16px}.file-format-info{background:#f0f9ff;border:1px solid #bae6fd;border-radius:6px;margin-top:16px;padding:12px 16px;font-size:13px}.file-format-info strong{color:#0369a1;margin-bottom:8px;display:block}.file-format-info ul{color:#555;margin:0;padding-left:20px}.file-format-info li{margin:4px 0}.file-format-info code{background:#e0f2fe;border-radius:3px;padding:2px 6px;font-size:12px}.add-datasource{background:#f5f5f5;border-top:1px solid #e0e0e0;border-radius:0 0 8px 8px;align-items:center;gap:10px;padding:12px 16px;display:flex}.add-datasource span{color:#666;font-size:13px}.btn-sm{cursor:pointer;background:#fff;border:1px solid #ddd;border-radius:4px;padding:6px 12px;font-size:12px;transition:all .15s}.btn-sm:hover{color:#fff;background:#411b8d;border-color:#411b8d}.file-uploader{margin-top:16px}.upload-dropzone{text-align:center;cursor:pointer;background:#fafafa;border:2px dashed #d0d0d0;border-radius:8px;padding:40px 20px;transition:all .2s}.upload-dropzone:hover{background:#f5f0ff;border-color:#411b8d}.upload-dropzone.drag-over{background:#ede5ff;border-color:#411b8d;transform:scale(1.01)}.upload-dropzone.uploading{cursor:wait;opacity:.8}.dropzone-content{pointer-events:none}.upload-icon{margin-bottom:12px;font-size:48px}.dropzone-content p{color:#555;margin:8px 0}.upload-hint{color:#888;font-size:12px}.upload-spinner{border:3px solid #e0e0e0;border-top-color:#411b8d;border-radius:50%;width:32px;height:32px;margin:0 auto 12px;animation:1s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}.upload-error{color:#dc2626;white-space:pre-wrap;background:#fee2e2;border-radius:6px;justify-content:space-between;align-items:flex-start;margin-top:12px;padding:12px 16px;font-size:13px;display:flex}.upload-error button{color:#dc2626;cursor:pointer;background:0 0;border:none;padding:0 4px;font-size:18px;line-height:1}.upload-success{color:#166534;background:#dcfce7;border-radius:6px;margin-top:12px;padding:12px 16px;font-size:13px}.file-list{border:1px solid #e0e0e0;border-radius:8px;margin-top:20px;overflow:hidden}.file-list-header{background:#f5f5f5;border-bottom:1px solid #e0e0e0;justify-content:space-between;align-items:center;padding:12px 16px;display:flex}.file-list-header h4{color:#333;margin:0;font-size:14px;font-weight:600}.file-path-hint{color:#888;font-family:monospace;font-size:11px}.file-list-loading,.file-list-empty{text-align:center;color:#888;padding:24px 16px;font-size:13px}.file-items{max-height:300px;overflow-y:auto}.file-item{border-bottom:1px solid #f0f0f0;align-items:center;padding:10px 16px;transition:background-color .15s;display:flex}.file-item:last-child{border-bottom:none}.file-item:hover{background:#f9f9f9}.file-icon{margin-right:12px;font-size:20px}.file-info{flex:1;min-width:0}.file-name{color:#333;white-space:nowrap;text-overflow:ellipsis;font-size:13px;font-weight:500;display:block;overflow:hidden}.file-meta{color:#888;margin-top:2px;font-size:11px;display:block}.file-delete{color:#999;cursor:pointer;background:0 0;border:none;border-radius:4px;justify-content:center;align-items:center;width:24px;height:24px;font-size:18px;transition:all .15s;display:flex}.file-delete:hover{color:#dc2626;background:#fee2e2}.usage-hint{color:#0369a1;background:#f0f9ff;border:1px solid #bae6fd;border-radius:6px;margin-top:16px;padding:12px 16px;font-size:13px}.usage-hint code{background:#e0f2fe;border-radius:3px;padding:2px 6px;font-size:12px}.datasources-section{background:#f9f9f9;border-radius:8px;margin-top:20px;padding:20px}.datasources-header{justify-content:space-between;align-items:center;margin-bottom:16px;display:flex}.datasources-header h2{margin:0;font-size:18px}.datasources-actions{align-items:center;gap:8px;display:flex}.btn-text{color:#411b8d;cursor:pointer;background:0 0;border:none;padding:4px 8px;font-size:13px}.btn-text:hover{text-decoration:underline}.separator{color:#ccc}.no-sources{text-align:center;color:#666;padding:40px 20px}.no-sources p{margin-bottom:16px}.datasources-list{flex-direction:column;gap:12px;display:flex}.datasource-card{background:#fff;border:1px solid #e0e0e0;border-radius:8px;overflow:hidden}.datasource-card-header{cursor:pointer;align-items:center;padding:14px 16px;transition:background-color .15s;display:flex}.datasource-card-header:hover{background-color:#f5f5f5}.source-type-badge{text-align:center;border-radius:4px;min-width:70px;margin-right:12px;padding:4px 10px;font-size:11px;font-weight:600}.source-summary{color:#333;text-overflow:ellipsis;white-space:nowrap;flex:1;font-size:14px;overflow:hidden}.expand-arrow{color:#999;margin-left:12px;font-size:10px}.datasource-card-body{background:#fafafa;border-top:1px solid #e0e0e0;padding:16px}.source-details{font-size:13px}.detail-row{align-items:flex-start;margin-bottom:10px;display:flex}.detail-row:last-child{margin-bottom:0}.detail-label{color:#555;min-width:130px;margin-right:12px;font-weight:500}.detail-row code{word-break:break-all;background:#e8e8e8;border-radius:4px;padding:2px 8px;font-size:12px}.detail-row a{color:#411b8d;word-break:break-all}.url-list{margin:8px 0 16px;padding-left:20px;list-style:outside}.url-list li{margin:6px 0}.url-list a{color:#411b8d;word-break:break-all;font-size:13px}.url-list a:hover{text-decoration:underline}.no-data-message{color:#666;padding:20px 0;font-style:italic}.ingestion-progress{background:linear-gradient(135deg,#f5f0ff 0%,#e8f4fd 100%);border:1px solid #d4c5f0;border-radius:12px;margin-top:20px;padding:24px}.progress-header{justify-content:space-between;align-items:center;margin-bottom:12px;display:flex}.progress-stage{color:#411b8d;font-size:15px;font-weight:600}.progress-percent{color:#411b8d;font-size:14px;font-weight:600}.progress-bar-container{background:#e0e0e0;border-radius:6px;height:12px;overflow:hidden;box-shadow:inset 0 1px 3px #0000001a}.progress-bar-fill{background:linear-gradient(90deg,#411b8d 0%,#6b3fa0 50%,#8b5cf6 100%);border-radius:6px;height:100%;transition:width .5s ease-out;position:relative}.progress-bar-fill:after{content:"";background:linear-gradient(90deg,#0000 0%,#ffffff4d 50%,#0000 100%);animation:1.5s infinite shimmer;position:absolute;inset:0}@keyframes shimmer{0%{transform:translate(-100%)}to{transform:translate(100%)}}.progress-note{color:#666;text-align:center;margin-top:12px;font-size:13px}.warning-message{color:#92400e;background:#fef3c7;border:1px solid #f59e0b;border-radius:8px;flex-wrap:wrap;align-items:flex-start;gap:12px;margin-bottom:20px;padding:16px 20px;display:flex}.warning-message strong{color:#b45309}.dismiss-btn{color:#92400e;cursor:pointer;white-space:nowrap;background:0 0;border:1px solid #f59e0b;border-radius:4px;margin-left:auto;padding:6px 12px;font-size:13px}.dismiss-btn:hover{background:#fde68a}.job-history-section{background:#f9f9f9;border-radius:8px;margin-top:20px;padding:20px}.job-history-header{justify-content:space-between;align-items:center;margin-bottom:16px;display:flex}.job-history-header h2{margin:0;font-size:18px}.job-history-list{flex-direction:column;gap:8px;display:flex}.job-history-item{background:#fff;border:1px solid #e0e0e0;border-radius:6px;align-items:center;gap:12px;padding:12px 16px;display:flex}.job-history-item.running{background:#f5f0ff;border-color:#411b8d}.job-status-badge{border-radius:50%;justify-content:center;align-items:center;width:28px;height:28px;font-size:14px;font-weight:700;display:flex}.job-status-badge[data-status=completed]{color:#166534;background:#dcfce7}.job-status-badge[data-status=failed]{color:#dc2626;background:#fee2e2}.job-status-badge[data-status=running]{color:#4338ca;background:#e0e7ff;animation:1.5s infinite pulse}.job-status-badge[data-status=pending]{color:#666;background:#f0f0f0}@keyframes pulse{0%,to{opacity:1}50%{opacity:.5}}.job-info{flex:1}.job-date{color:#333;font-size:13px;font-weight:500}.job-details{color:#666;margin-top:2px;font-size:12px}.job-duration{color:#999;margin-left:8px}.job-error{color:#dc2626}.failed-urls-section{border:1px solid #fecaca;border-radius:8px;margin-top:24px;padding:20px;background:#fef2f2!important}.failed-urls-header{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;margin-bottom:16px;display:flex}.failed-urls-header h2{color:#991b1b;margin:0;font-size:16px}.failed-urls-actions{align-items:center;gap:16px;display:flex}.failed-urls-actions .btn-remove-all{color:#fff;cursor:pointer;background:#7c3aed;border:none;border-radius:4px;padding:6px 12px;font-size:13px}.failed-urls-actions .btn-remove-all:hover{background:#6d28d9}.failed-urls-actions .btn-remove-all:disabled{opacity:.5;cursor:not-allowed}.log-toggle{color:#666;cursor:pointer;align-items:center;gap:6px;font-size:13px;display:flex}.log-toggle input{cursor:pointer}.failed-urls-list{flex-direction:column;gap:8px;max-height:400px;display:flex;overflow-y:auto}.failed-url-item{background:#fff5f5;border:1px solid #fecaca;border-radius:6px;justify-content:space-between;align-items:center;gap:12px;padding:10px 12px;display:flex}.failed-url-info{flex-direction:column;flex:1;gap:4px;min-width:0;display:flex}.failed-url-link{color:#1e40af;word-break:break-all;font-size:13px;text-decoration:none}.failed-url-link:hover{text-decoration:underline}.failed-url-error{color:#dc2626;font-size:12px}.failed-url-item .btn-remove{color:#fff;cursor:pointer;opacity:.7;background:#7c3aed;border:none;border-radius:4px;flex-shrink:0;padding:4px 10px;font-size:16px;line-height:1;transition:opacity .2s}.failed-url-item .btn-remove:hover{opacity:1;background:#6d28d9}.failed-url-item .btn-remove:disabled{opacity:.3;cursor:not-allowed}
