| :root { |
| --bg: #0f1117; |
| --bg2: #1a1d27; |
| --bg3: #252836; |
| --border: #2d3148; |
| --text: #e2e8f0; |
| --muted: #8892a4; |
| --accent: #6366f1; |
| --accent2: #818cf8; |
| --success: #10b981; |
| --warning: #f59e0b; |
| --danger: #ef4444; |
| --radius: 8px; |
| } |
|
|
| .app { display: flex; flex-direction: column; height: 100vh; overflow: hidden; } |
|
|
| .header { |
| display: flex; align-items: center; justify-content: space-between; |
| padding: 0 20px; height: 52px; |
| background: var(--bg2); border-bottom: 1px solid var(--border); |
| flex-shrink: 0; |
| } |
| .header-left { display: flex; align-items: center; gap: 12px; } |
| .logo { font-size: 18px; font-weight: 700; color: var(--accent2); letter-spacing: -0.5px; } |
| .subtitle { font-size: 12px; color: var(--muted); } |
| .header-right { display: flex; align-items: center; gap: 8px; } |
|
|
| .neo4j-badge { |
| display: flex; align-items: center; gap: 4px; |
| font-size: 11px; padding: 3px 8px; border-radius: 99px; |
| background: var(--bg3); border: 1px solid var(--border); color: var(--muted); |
| } |
| .neo4j-badge.ok { color: var(--success); border-color: var(--success); } |
| .neo4j-badge.error { color: var(--danger); border-color: var(--danger); } |
|
|
| .icon-btn { |
| background: transparent; border: 1px solid var(--border); |
| color: var(--muted); cursor: pointer; padding: 6px; |
| border-radius: var(--radius); display: flex; align-items: center; |
| transition: all 0.15s; |
| } |
| .icon-btn:hover { color: var(--text); border-color: var(--accent); } |
|
|
| .body { display: flex; flex: 1; overflow: hidden; } |
|
|
| .sidebar { |
| width: 280px; background: var(--bg2); border-right: 1px solid var(--border); |
| overflow-y: auto; padding: 16px; flex-shrink: 0; |
| } |
|
|
| .main { flex: 1; display: flex; flex-direction: column; overflow: hidden; } |
|
|
| .tabs { |
| display: flex; gap: 4px; padding: 12px 16px 0; |
| background: var(--bg2); border-bottom: 1px solid var(--border); |
| flex-shrink: 0; |
| } |
|
|
| .tab-btn { |
| display: flex; align-items: center; gap: 6px; |
| padding: 8px 16px; font-size: 13px; font-weight: 500; |
| background: transparent; border: none; color: var(--muted); |
| cursor: pointer; border-radius: var(--radius) var(--radius) 0 0; |
| border-bottom: 2px solid transparent; |
| transition: all 0.15s; |
| } |
| .tab-btn:hover { color: var(--text); } |
| .tab-btn.active { color: var(--accent2); border-bottom-color: var(--accent2); } |
|
|
| .tab-content { flex: 1; overflow-y: auto; padding: 20px; } |
|
|
| .empty-state { |
| display: flex; flex-direction: column; align-items: center; |
| justify-content: center; height: 200px; gap: 12px; color: var(--muted); |
| } |
|
|
| .btn-primary { |
| background: var(--accent); color: white; border: none; |
| padding: 8px 16px; border-radius: var(--radius); cursor: pointer; |
| font-size: 13px; font-weight: 500; transition: opacity 0.15s; |
| } |
| .btn-primary:hover { opacity: 0.85; } |
| .btn-primary:disabled { opacity: 0.5; cursor: not-allowed; } |
|
|
| .btn-secondary { |
| background: var(--bg3); color: var(--text); border: 1px solid var(--border); |
| padding: 8px 16px; border-radius: var(--radius); cursor: pointer; |
| font-size: 13px; font-weight: 500; transition: all 0.15s; |
| } |
| .btn-secondary:hover { border-color: var(--accent); color: var(--accent2); } |
|
|
| .card { |
| background: var(--bg2); border: 1px solid var(--border); |
| border-radius: var(--radius); padding: 16px; |
| } |
|
|
| .label { font-size: 11px; font-weight: 600; color: var(--muted); text-transform: uppercase; letter-spacing: 0.5px; margin-bottom: 6px; } |
|
|
| .badge { |
| display: inline-flex; align-items: center; |
| padding: 2px 8px; border-radius: 99px; font-size: 11px; font-weight: 500; |
| background: var(--bg3); border: 1px solid var(--border); color: var(--muted); |
| } |
| .badge.causes { color: #f87171; border-color: #f87171; } |
| .badge.increases { color: #34d399; border-color: #34d399; } |
| .badge.decreases { color: #fb923c; border-color: #fb923c; } |
| .badge.enables { color: #60a5fa; border-color: #60a5fa; } |
| .badge.prevents { color: #a78bfa; border-color: #a78bfa; } |
| .badge.depends_on { color: #fbbf24; border-color: #fbbf24; } |
|
|
| input, select, textarea { |
| background: var(--bg3); border: 1px solid var(--border); |
| color: var(--text); padding: 8px 12px; border-radius: var(--radius); |
| font-size: 13px; width: 100%; outline: none; |
| transition: border-color 0.15s; |
| } |
| input:focus, select:focus, textarea:focus { border-color: var(--accent); } |
|
|
| .spinner { |
| width: 20px; height: 20px; border: 2px solid var(--border); |
| border-top-color: var(--accent); border-radius: 50%; |
| animation: spin 0.8s linear infinite; display: inline-block; |
| } |
| @keyframes spin { to { transform: rotate(360deg); } } |
|
|
| .error-msg { color: var(--danger); font-size: 13px; padding: 8px 12px; background: rgba(239,68,68,0.1); border: 1px solid rgba(239,68,68,0.3); border-radius: var(--radius); } |
|
|