diff options
Diffstat (limited to 'admin-panel/src/client/styles/main.css')
| -rw-r--r-- | admin-panel/src/client/styles/main.css | 724 |
1 files changed, 724 insertions, 0 deletions
diff --git a/admin-panel/src/client/styles/main.css b/admin-panel/src/client/styles/main.css new file mode 100644 index 0000000..d2fe35b --- /dev/null +++ b/admin-panel/src/client/styles/main.css @@ -0,0 +1,724 @@ +/* Cyberpunk Dark Theme */ +:root { + --bg-deep: #0A0D1F; + --bg-card: #1A1A2E; + --accent: #7B2FBE; + --accent-glow: #A855F7; + --alert: #FF2D78; + --text-secondary: #8B9BB4; + --text-primary: #E8ECF4; + --bg-input: #12152a; + --border: #2a2a4a; + --success: #22c55e; + --warning: #eab308; +} + +* { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +html, body { + height: 100%; + background: var(--bg-deep); + color: var(--text-primary); + font-family: 'Segoe UI', system-ui, -apple-system, sans-serif; + font-size: 14px; + line-height: 1.5; +} + +#app { + display: flex; + flex-direction: column; + height: 100vh; +} + +/* Navbar */ +#navbar { + display: flex; + align-items: center; + padding: 0 24px; + height: 52px; + background: var(--bg-card); + border-bottom: 1px solid var(--border); + flex-shrink: 0; +} + +.nav-brand { + font-size: 18px; + font-weight: 700; + letter-spacing: 3px; + color: var(--accent-glow); + text-decoration: none; + margin-right: 32px; +} + +.nav-links { + display: flex; + gap: 4px; +} + +.nav-links a { + color: var(--text-secondary); + text-decoration: none; + padding: 6px 14px; + border-radius: 6px; + font-size: 13px; + transition: all 0.15s; +} + +.nav-links a:hover, +.nav-links a.active { + color: var(--text-primary); + background: rgba(123, 47, 190, 0.15); +} + +.nav-links a.active { + color: var(--accent-glow); +} + +/* Main content */ +#main-content { + flex: 1; + overflow: auto; + padding: 24px; +} + +/* Scrollbar */ +::-webkit-scrollbar { + width: 8px; + height: 8px; +} + +::-webkit-scrollbar-track { + background: var(--bg-deep); +} + +::-webkit-scrollbar-thumb { + background: var(--border); + border-radius: 4px; +} + +::-webkit-scrollbar-thumb:hover { + background: var(--text-secondary); +} + +/* Buttons */ +.btn { + display: inline-flex; + align-items: center; + gap: 6px; + padding: 8px 16px; + border: none; + border-radius: 6px; + font-size: 13px; + font-weight: 500; + cursor: pointer; + transition: all 0.15s; +} + +.btn-primary { + background: var(--accent); + color: white; +} + +.btn-primary:hover { + background: var(--accent-glow); + box-shadow: 0 0 20px rgba(168, 85, 247, 0.3); +} + +.btn-secondary { + background: var(--border); + color: var(--text-primary); +} + +.btn-secondary:hover { + background: var(--text-secondary); +} + +.btn-danger { + background: transparent; + color: var(--alert); + border: 1px solid var(--alert); +} + +.btn-danger:hover { + background: var(--alert); + color: white; +} + +.btn-sm { + padding: 4px 10px; + font-size: 12px; +} + +.btn-icon { + padding: 6px; + background: transparent; + color: var(--text-secondary); + border: none; + border-radius: 4px; + cursor: pointer; +} + +.btn-icon:hover { + color: var(--text-primary); + background: var(--border); +} + +/* Form elements */ +input, textarea, select { + background: var(--bg-input); + border: 1px solid var(--border); + color: var(--text-primary); + padding: 8px 12px; + border-radius: 6px; + font-size: 13px; + font-family: inherit; + outline: none; + transition: border-color 0.15s; +} + +input:focus, textarea:focus, select:focus { + border-color: var(--accent); +} + +textarea { + resize: vertical; + min-height: 80px; +} + +label { + display: block; + font-size: 12px; + font-weight: 500; + color: var(--text-secondary); + margin-bottom: 4px; +} + +.form-group { + margin-bottom: 16px; +} + +.form-group input, +.form-group textarea, +.form-group select { + width: 100%; +} + +/* Cards */ +.card { + background: var(--bg-card); + border: 1px solid var(--border); + border-radius: 8px; + padding: 20px; +} + +/* Modal */ +.modal-overlay { + position: fixed; + inset: 0; + background: rgba(0, 0, 0, 0.7); + display: flex; + align-items: center; + justify-content: center; + z-index: 1000; + animation: fadeIn 0.15s; +} + +.modal { + background: var(--bg-card); + border: 1px solid var(--border); + border-radius: 12px; + width: 90%; + max-width: 540px; + max-height: 90vh; + overflow-y: auto; + padding: 24px; + animation: slideUp 0.2s; +} + +.modal-header { + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 20px; +} + +.modal-header h2 { + font-size: 18px; + font-weight: 600; +} + +.modal-footer { + display: flex; + justify-content: flex-end; + gap: 8px; + margin-top: 20px; + padding-top: 16px; + border-top: 1px solid var(--border); +} + +@keyframes fadeIn { + from { opacity: 0; } + to { opacity: 1; } +} + +@keyframes slideUp { + from { transform: translateY(20px); opacity: 0; } + to { transform: translateY(0); opacity: 1; } +} + +/* Dashboard */ +.dashboard-header { + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 24px; +} + +.dashboard-header h1 { + font-size: 24px; + font-weight: 600; +} + +.project-grid { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(320px, 1fr)); + gap: 16px; +} + +.project-card { + background: var(--bg-card); + border: 1px solid var(--border); + border-radius: 8px; + padding: 20px; + cursor: pointer; + transition: all 0.15s; + text-decoration: none; + color: inherit; + display: block; +} + +.project-card:hover { + border-color: var(--accent); + box-shadow: 0 0 20px rgba(123, 47, 190, 0.15); + transform: translateY(-1px); +} + +.project-card h3 { + font-size: 16px; + font-weight: 600; + margin-bottom: 4px; +} + +.project-card .project-name { + font-size: 12px; + color: var(--text-secondary); + margin-bottom: 8px; + font-family: monospace; +} + +.project-card .project-desc { + color: var(--text-secondary); + font-size: 13px; + margin-bottom: 12px; +} + +.project-card .project-stats { + display: flex; + gap: 12px; + font-size: 12px; + color: var(--text-secondary); +} + +.project-card .stat { + display: flex; + align-items: center; + gap: 4px; +} + +.stat-dot { + width: 8px; + height: 8px; + border-radius: 50%; +} + +.stat-dot.todo { background: var(--text-secondary); } +.stat-dot.active { background: var(--accent-glow); } +.stat-dot.done { background: var(--success); } + +/* Kanban Board */ +.board-header { + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 16px; +} + +.board-header h1 { + font-size: 20px; + font-weight: 600; +} + +.board-container { + display: flex; + gap: 12px; + overflow-x: auto; + height: calc(100vh - 140px); + padding-bottom: 16px; +} + +.board-column { + flex: 0 0 260px; + display: flex; + flex-direction: column; + background: rgba(26, 26, 46, 0.3); + border-radius: 8px; + overflow: hidden; +} + +.column-header { + padding: 12px 14px; + background: var(--bg-card); + border-bottom: 2px solid var(--accent-glow); + display: flex; + align-items: center; + justify-content: space-between; + flex-shrink: 0; +} + +.column-header h3 { + font-size: 12px; + font-weight: 600; + text-transform: uppercase; + letter-spacing: 1px; +} + +.column-count { + font-size: 11px; + color: var(--text-secondary); + background: var(--border); + padding: 1px 8px; + border-radius: 10px; +} + +.column-body { + flex: 1; + overflow-y: auto; + padding: 8px; + display: flex; + flex-direction: column; + gap: 8px; +} + +.column-body.drag-over { + background: rgba(123, 47, 190, 0.08); +} + +/* Task Cards */ +.task-card { + background: var(--bg-card); + border: 1px solid var(--border); + border-left: 3px solid var(--accent); + border-radius: 6px; + padding: 12px; + cursor: pointer; + transition: all 0.15s; + user-select: none; +} + +.task-card:hover { + border-color: var(--accent); + box-shadow: 0 2px 12px rgba(0, 0, 0, 0.3); +} + +.task-card.dragging { + opacity: 0.5; + transform: rotate(2deg); +} + +.task-card.pipeline-active { + animation: pulseGlow 2s infinite; +} + +@keyframes pulseGlow { + 0%, 100% { box-shadow: 0 0 5px rgba(168, 85, 247, 0.2); } + 50% { box-shadow: 0 0 20px rgba(168, 85, 247, 0.5); } +} + +.task-card-header { + display: flex; + align-items: flex-start; + justify-content: space-between; + margin-bottom: 6px; +} + +.task-id { + font-size: 11px; + color: var(--text-secondary); + font-family: monospace; +} + +.task-title { + font-size: 13px; + font-weight: 500; + line-height: 1.4; + margin-bottom: 8px; +} + +.task-meta { + display: flex; + align-items: center; + gap: 6px; + flex-wrap: wrap; +} + +.badge { + font-size: 10px; + font-weight: 600; + padding: 2px 8px; + border-radius: 10px; + text-transform: uppercase; + letter-spacing: 0.5px; +} + +.badge-high { background: var(--alert); color: white; } +.badge-medium { background: var(--accent); color: white; } +.badge-low { background: var(--border); color: var(--text-secondary); } + +.badge-level { + background: var(--border); + color: var(--text-secondary); +} + +.badge-agent { + background: rgba(168, 85, 247, 0.2); + color: var(--accent-glow); +} + +.tag { + font-size: 10px; + padding: 1px 6px; + border-radius: 3px; + background: var(--border); + color: var(--text-secondary); +} + +/* Task Detail Modal */ +.task-modal { + max-width: 800px; +} + +.task-modal .modal-header { + flex-direction: column; + align-items: flex-start; + gap: 8px; +} + +.task-modal .modal-header .top-row { + display: flex; + width: 100%; + justify-content: space-between; + align-items: center; +} + +.task-modal .tabs { + display: flex; + gap: 2px; + border-bottom: 1px solid var(--border); + margin-bottom: 16px; +} + +.task-modal .tab { + padding: 8px 16px; + font-size: 13px; + color: var(--text-secondary); + cursor: pointer; + border-bottom: 2px solid transparent; + transition: all 0.15s; + background: none; + border-top: none; + border-left: none; + border-right: none; +} + +.task-modal .tab:hover { + color: var(--text-primary); +} + +.task-modal .tab.active { + color: var(--accent-glow); + border-bottom-color: var(--accent-glow); +} + +.tab-content { + min-height: 200px; +} + +.lifecycle-bar { + display: flex; + gap: 4px; + margin-bottom: 16px; +} + +.lifecycle-step { + flex: 1; + height: 4px; + border-radius: 2px; + background: var(--border); +} + +.lifecycle-step.completed { + background: var(--accent-glow); +} + +.lifecycle-step.current { + background: var(--accent-glow); + animation: pulseGlow 2s infinite; +} + +/* Agent Log */ +.agent-log { + display: flex; + flex-direction: column; + gap: 12px; +} + +.log-entry { + display: flex; + gap: 12px; + padding: 12px; + background: var(--bg-deep); + border-radius: 6px; + font-size: 13px; +} + +.log-entry .log-time { + color: var(--text-secondary); + font-family: monospace; + font-size: 11px; + white-space: nowrap; +} + +.log-entry .log-agent { + color: var(--accent-glow); + font-weight: 500; + white-space: nowrap; +} + +.log-entry .log-message { + color: var(--text-secondary); +} + +/* Diff Viewer */ +.diff-viewer { + font-family: 'Consolas', 'Monaco', monospace; + font-size: 12px; + background: var(--bg-card); + border: 1px solid var(--border); + border-radius: 6px; + overflow: auto; + max-height: 500px; +} + +.diff-line { + padding: 1px 12px; + white-space: pre; +} + +.diff-add { + background: rgba(34, 197, 94, 0.1); + color: #4ade80; +} + +.diff-del { + background: rgba(255, 45, 120, 0.1); + color: #ff6b9d; +} + +.diff-hunk { + color: var(--accent-glow); + background: rgba(168, 85, 247, 0.05); +} + +/* Pipeline Controls */ +.pipeline-controls { + display: flex; + gap: 8px; + align-items: center; +} + +/* Settings Page */ +.settings-container { + max-width: 600px; +} + +.settings-section { + margin-bottom: 32px; +} + +.settings-section h2 { + font-size: 16px; + margin-bottom: 16px; + padding-bottom: 8px; + border-bottom: 1px solid var(--border); +} + +/* Empty state */ +.empty-state { + text-align: center; + padding: 48px 24px; + color: var(--text-secondary); +} + +.empty-state h3 { + font-size: 16px; + margin-bottom: 8px; + color: var(--text-primary); +} + +/* Toast notifications */ +.toast-container { + position: fixed; + bottom: 24px; + right: 24px; + display: flex; + flex-direction: column; + gap: 8px; + z-index: 2000; +} + +.toast { + background: var(--bg-card); + border: 1px solid var(--border); + border-radius: 8px; + padding: 12px 16px; + font-size: 13px; + animation: slideUp 0.2s; + max-width: 360px; +} + +.toast.error { + border-color: var(--alert); +} + +.toast.success { + border-color: var(--success); +} + +/* Responsive */ +@media (max-width: 768px) { + .board-container { + gap: 8px; + } + + .board-column { + flex: 0 0 220px; + } + + .project-grid { + grid-template-columns: 1fr; + } +} |
