: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); }