/* Dependency Graph Modal */ .dependency-graph-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; padding: 24px; } .dependency-graph-content { background: var(--bg-secondary); border: 1px solid var(--border-primary); border-radius: var(--radius-lg); width: 100%; max-width: 1200px; height: 80vh; display: flex; flex-direction: column; overflow: hidden; } .dependency-graph-header { display: flex; align-items: center; gap: 16px; padding: 16px 20px; border-bottom: 1px solid var(--border-primary); background: var(--bg-tertiary); } .dependency-graph-header h2 { margin: 0; font-size: 1.125rem; font-weight: 600; color: var(--text-primary); } .dependency-graph-info { display: flex; align-items: center; gap: 12px; flex: 1; font-size: 0.875rem; color: var(--text-secondary); } .graph-stats { color: var(--text-muted); font-size: 0.8125rem; } .close-btn { background: transparent; border: none; color: var(--text-secondary); cursor: pointer; padding: 4px; border-radius: var(--radius-sm); display: flex; align-items: center; justify-content: center; } .close-btn:hover { background: var(--bg-hover); color: var(--text-primary); } .dependency-graph-toolbar { display: flex; align-items: center; gap: 8px; padding: 12px 20px; border-bottom: 1px solid var(--border-primary); background: var(--bg-secondary); } .zoom-level { margin-left: auto; font-size: 0.8125rem; color: var(--text-muted); font-family: 'JetBrains Mono', monospace; } .dependency-graph-container { flex: 1; overflow: hidden; position: relative; background: linear-gradient(90deg, var(--border-primary) 1px, transparent 1px), linear-gradient(var(--border-primary) 1px, transparent 1px); background-size: 20px 20px; background-position: center center; } .graph-canvas { padding: 40px; min-width: 100%; min-height: 100%; transform-origin: center center; transition: transform 0.1s ease-out; } /* Graph Nodes */ .graph-node-container { display: flex; flex-direction: column; align-items: flex-start; } .graph-node { background: var(--bg-tertiary); border: 2px solid var(--border-primary); border-radius: var(--radius-md); padding: 12px 16px; min-width: 200px; cursor: pointer; transition: all var(--transition-fast); position: relative; } .graph-node:hover { border-color: var(--accent-primary); box-shadow: 0 4px 12px rgba(16, 185, 129, 0.2); } .graph-node--root { background: linear-gradient(135deg, rgba(16, 185, 129, 0.15) 0%, rgba(5, 150, 105, 0.15) 100%); border-color: var(--accent-primary); } .graph-node--hovered { transform: scale(1.02); } .graph-node__header { display: flex; align-items: center; gap: 8px; margin-bottom: 4px; } .graph-node__name { font-weight: 600; color: var(--accent-primary); font-family: 'JetBrains Mono', monospace; font-size: 0.875rem; } .graph-node__toggle { background: var(--bg-hover); border: 1px solid var(--border-primary); border-radius: 4px; width: 20px; height: 20px; display: flex; align-items: center; justify-content: center; cursor: pointer; font-size: 0.875rem; color: var(--text-secondary); font-weight: 600; margin-left: auto; } .graph-node__toggle:hover { background: var(--bg-tertiary); color: var(--text-primary); } .graph-node__details { display: flex; align-items: center; gap: 12px; font-size: 0.75rem; color: var(--text-muted); } .graph-node__version { font-family: 'JetBrains Mono', monospace; color: var(--text-secondary); } .graph-node__size { color: var(--text-muted); } /* Graph Children / Tree Structure */ .graph-children { display: flex; padding-left: 24px; margin-top: 8px; position: relative; } .graph-connector { position: absolute; left: 12px; top: 0; bottom: 50%; width: 12px; border-left: 2px solid var(--border-primary); border-bottom: 2px solid var(--border-primary); border-bottom-left-radius: 8px; } .graph-children-list { display: flex; flex-direction: column; gap: 8px; position: relative; } .graph-children-list::before { content: ''; position: absolute; left: -12px; top: 20px; bottom: 20px; border-left: 2px solid var(--border-primary); } .graph-children-list > .graph-node-container { position: relative; } .graph-children-list > .graph-node-container::before { content: ''; position: absolute; left: -12px; top: 20px; width: 12px; border-top: 2px solid var(--border-primary); } /* Loading, Error, Empty States */ .graph-loading, .graph-error, .graph-empty { display: flex; flex-direction: column; align-items: center; justify-content: center; height: 100%; gap: 16px; color: var(--text-muted); } .graph-loading .spinner { width: 32px; height: 32px; border: 3px solid var(--border-primary); border-top-color: var(--accent-primary); border-radius: 50%; animation: spin 1s linear infinite; } @keyframes spin { to { transform: rotate(360deg); } } .graph-error { color: var(--error-color, #ef4444); } .graph-error svg { opacity: 0.6; } .graph-error p { max-width: 400px; text-align: center; line-height: 1.5; } /* Tooltip */ .graph-tooltip { position: fixed; bottom: 24px; left: 50%; transform: translateX(-50%); background: var(--bg-tertiary); border: 1px solid var(--border-primary); border-radius: var(--radius-md); padding: 12px 16px; font-size: 0.8125rem; box-shadow: 0 8px 24px rgba(0, 0, 0, 0.4); z-index: 1001; } .graph-tooltip strong { display: block; color: var(--accent-primary); font-family: 'JetBrains Mono', monospace; margin-bottom: 4px; } .graph-tooltip div { color: var(--text-secondary); margin-top: 2px; } .tooltip-hint { margin-top: 8px; padding-top: 8px; border-top: 1px solid var(--border-primary); color: var(--text-muted); font-size: 0.75rem; } /* Responsive */ @media (max-width: 768px) { .dependency-graph-modal { padding: 0; } .dependency-graph-content { height: 100vh; border-radius: 0; max-width: none; } .dependency-graph-header { flex-wrap: wrap; } .dependency-graph-info { flex-basis: 100%; order: 3; margin-top: 8px; } }