/* MOXIE Admin UI Styles */ * { box-sizing: border-box; margin: 0; padding: 0; } body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif; background: #0f0f0f; color: #e0e0e0; min-height: 100vh; } /* Navbar */ .navbar { background: #1a1a1a; padding: 1rem 2rem; display: flex; justify-content: space-between; align-items: center; border-bottom: 1px solid #333; } .nav-brand { font-size: 1.25rem; font-weight: bold; color: #7c3aed; } .nav-links { display: flex; gap: 1.5rem; } .nav-links a { color: #a0a0a0; text-decoration: none; transition: color 0.2s; } .nav-links a:hover { color: #7c3aed; } /* Container */ .container { max-width: 1200px; margin: 0 auto; padding: 2rem; } /* Typography */ h1 { font-size: 2rem; margin-bottom: 1.5rem; color: #fff; } h2 { font-size: 1.5rem; margin-bottom: 1rem; color: #e0e0e0; } h3 { font-size: 1.25rem; margin-bottom: 0.5rem; color: #e0e0e0; } p { color: #a0a0a0; margin-bottom: 1rem; } .help-text { font-size: 0.875rem; color: #888; margin-bottom: 1.5rem; } /* Status Grid */ .status-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 1rem; margin-bottom: 2rem; } .status-card { background: #1a1a1a; border: 1px solid #333; border-radius: 8px; padding: 1.5rem; text-align: center; } .status-card h3 { margin-bottom: 0.5rem; } .status-indicator, .status-value { display: inline-block; padding: 0.25rem 0.75rem; border-radius: 4px; font-size: 0.875rem; font-weight: 500; } .status-indicator.connected { background: #059669; color: #fff; } .status-indicator.disconnected { background: #dc2626; color: #fff; } .status-indicator.checking { background: #d97706; color: #fff; } .status-value { background: #333; color: #fff; font-size: 1.5rem; } /* Info Section */ .info-section { background: #1a1a1a; border: 1px solid #333; border-radius: 8px; padding: 1.5rem; margin-bottom: 1.5rem; } .info-section ol, .info-section ul { margin-left: 1.5rem; color: #a0a0a0; } .info-section li { margin-bottom: 0.5rem; } .info-section code { background: #333; padding: 0.25rem 0.5rem; border-radius: 4px; color: #7c3aed; } /* Forms */ .form { background: #1a1a1a; border: 1px solid #333; border-radius: 8px; padding: 1.5rem; } .form-section { margin-bottom: 2rem; padding-bottom: 1.5rem; border-bottom: 1px solid #333; } .form-section:last-of-type { border-bottom: none; margin-bottom: 1rem; } .form-group { margin-bottom: 1rem; } .form-group label { display: block; margin-bottom: 0.5rem; color: #a0a0a0; font-size: 0.875rem; } .form-group input, .form-group select { width: 100%; padding: 0.75rem; background: #0f0f0f; border: 1px solid #333; border-radius: 4px; color: #e0e0e0; font-size: 1rem; } .form-group input:focus { outline: none; border-color: #7c3aed; } .form-inline { display: flex; gap: 1rem; align-items: flex-end; flex-wrap: wrap; } .form-inline .form-group { margin-bottom: 0; } /* Buttons */ .btn { padding: 0.75rem 1.5rem; border: none; border-radius: 4px; font-size: 1rem; cursor: pointer; transition: all 0.2s; } .btn-primary { background: #7c3aed; color: #fff; } .btn-primary:hover { background: #6d28d9; } .btn-danger { background: #dc2626; color: #fff; } .btn-danger:hover { background: #b91c1c; } .btn-sm { padding: 0.5rem 1rem; font-size: 0.875rem; } .form-actions { margin-top: 1rem; } /* Tables */ .documents-table { width: 100%; border-collapse: collapse; background: #1a1a1a; border-radius: 8px; overflow: hidden; } .documents-table th, .documents-table td { padding: 1rem; text-align: left; border-bottom: 1px solid #333; } .documents-table th { background: #252525; color: #a0a0a0; font-weight: 500; } .documents-table tr:last-child td { border-bottom: none; } .empty-message { text-align: center; color: #666; font-style: italic; } /* Workflows Grid */ .workflows-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 1.5rem; margin-bottom: 2rem; } .workflow-card { background: #1a1a1a; border: 1px solid #333; border-radius: 8px; padding: 1.5rem; } .workflow-card p { font-size: 0.875rem; color: #666; } .workflow-card code { background: #333; padding: 0.125rem 0.375rem; border-radius: 4px; color: #7c3aed; font-size: 0.875rem; } .workflow-status { padding: 0.5rem; border-radius: 4px; margin: 1rem 0; text-align: center; font-size: 0.875rem; } .workflow-status.success { background: #05966933; color: #059669; } .workflow-status.warning { background: #d9770633; color: #d97706; } .workflow-actions { display: flex; gap: 0.5rem; margin-bottom: 1rem; } .workflow-upload-form { display: flex; gap: 0.5rem; margin-top: 1rem; } .workflow-upload-form input[type="file"] { flex: 1; padding: 0.5rem; background: #0f0f0f; border: 1px solid #333; border-radius: 4px; color: #e0e0e0; } /* Toast */ .toast { position: fixed; bottom: 2rem; right: 2rem; padding: 1rem 1.5rem; border-radius: 8px; font-size: 0.875rem; z-index: 1000; animation: slideIn 0.3s ease; } .toast.success { background: #059669; color: #fff; } .toast.error { background: #dc2626; color: #fff; } .toast.hidden { display: none; } @keyframes slideIn { from { transform: translateY(100%); opacity: 0; } to { transform: translateY(0); opacity: 1; } } /* Modal */ .modal { position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: rgba(0, 0, 0, 0.8); display: flex; align-items: center; justify-content: center; z-index: 1000; } .modal.hidden { display: none; } .modal-content { background: #1a1a1a; border-radius: 8px; max-width: 800px; max-height: 80vh; overflow: auto; padding: 1.5rem; } .modal-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 1rem; } .modal-close { background: none; border: none; color: #a0a0a0; font-size: 1.5rem; cursor: pointer; } .modal-close:hover { color: #fff; } #modal-json { background: #0f0f0f; padding: 1rem; border-radius: 4px; overflow-x: auto; font-family: monospace; font-size: 0.875rem; color: #e0e0e0; } /* Upload Section */ .upload-section { background: #1a1a1a; border: 1px solid #333; border-radius: 8px; padding: 1.5rem; margin-bottom: 1.5rem; } .documents-section { background: #1a1a1a; border: 1px solid #333; border-radius: 8px; padding: 1.5rem; } /* ComfyUI Specific Styles */ .config-section { background: #1a1a1a; border: 1px solid #333; border-radius: 8px; padding: 1.5rem; margin-bottom: 1.5rem; } .config-section h2 { margin-bottom: 1rem; } .workflow-section { background: #1a1a1a; border: 1px solid #333; border-radius: 8px; overflow: hidden; } .workflow-tabs { display: flex; border-bottom: 1px solid #333; } .tab-btn { flex: 1; padding: 1rem; background: transparent; border: none; color: #a0a0a0; font-size: 1rem; cursor: pointer; transition: all 0.2s; } .tab-btn:hover { background: #252525; } .tab-btn.active { background: #252525; color: #7c3aed; border-bottom: 2px solid #7c3aed; } .tab-content { display: none; padding: 1.5rem; } .tab-content.active { display: block; } .workflow-header { display: flex; align-items: center; gap: 1rem; margin-bottom: 1.5rem; } .workflow-header h3 { margin: 0; } .badge { padding: 0.25rem 0.75rem; border-radius: 4px; font-size: 0.75rem; font-weight: 500; } .badge.success { background: #05966933; color: #059669; } .badge.warning { background: #d9770633; color: #d97706; } .workflow-form { display: flex; flex-direction: column; gap: 1.5rem; } .file-upload { display: flex; gap: 0.5rem; align-items: center; } .file-upload input[type="file"] { flex: 1; padding: 0.5rem; background: #0f0f0f; border: 1px solid #333; border-radius: 4px; color: #e0e0e0; } .node-mappings { background: #0f0f0f; border: 1px solid #333; border-radius: 8px; padding: 1rem; } .node-mappings h4 { margin: 0 0 0.5rem 0; color: #e0e0e0; } .node-mappings .help-text { margin-bottom: 1rem; } .mapping-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 1rem; margin-bottom: 1rem; } .mapping-grid .form-group { margin-bottom: 0; } .mapping-grid input { width: 100%; } /* Modal */ .modal { position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: rgba(0, 0, 0, 0.8); display: flex; align-items: center; justify-content: center; z-index: 1000; } .modal.hidden { display: none; } .modal-content { background: #1a1a1a; border-radius: 8px; max-width: 800px; max-height: 80vh; width: 90%; overflow: hidden; display: flex; flex-direction: column; } .modal-header { display: flex; justify-content: space-between; align-items: center; padding: 1rem 1.5rem; border-bottom: 1px solid #333; } .modal-header h3 { margin: 0; } .modal-close { background: none; border: none; color: #a0a0a0; font-size: 1.5rem; cursor: pointer; } .modal-close:hover { color: #fff; } #modal-json { padding: 1rem; margin: 0; overflow: auto; font-family: monospace; font-size: 0.875rem; color: #e0e0e0; white-space: pre-wrap; word-break: break-all; } /* Responsive */ @media (max-width: 768px) { .navbar { flex-direction: column; gap: 1rem; } .container { padding: 1rem; } .form-inline { flex-direction: column; } .workflows-grid { grid-template-columns: 1fr; } .mapping-grid { grid-template-columns: 1fr; } .file-upload { flex-wrap: wrap; } }