/* Upload Section */ .upload-section { margin-bottom: 32px; background: linear-gradient(135deg, rgba(16, 185, 129, 0.05) 0%, rgba(5, 150, 105, 0.05) 100%); border: 1px solid rgba(16, 185, 129, 0.2); } .upload-section h3 { margin-bottom: 20px; color: var(--text-primary); font-size: 1rem; font-weight: 600; display: flex; align-items: center; gap: 8px; } .upload-section h3::before { content: ''; display: block; width: 4px; height: 20px; background: var(--accent-gradient); border-radius: 2px; } .upload-form { display: flex; gap: 16px; align-items: flex-end; flex-wrap: wrap; } .upload-form .form-group { margin-bottom: 0; flex: 1; min-width: 200px; } .upload-form .form-group input[type="file"] { padding: 10px 16px; background: var(--bg-tertiary); cursor: pointer; } .upload-form .form-group input[type="file"]::file-selector-button { background: var(--accent-gradient); color: white; border: none; padding: 6px 12px; border-radius: var(--radius-sm); margin-right: 12px; cursor: pointer; font-weight: 500; font-size: 0.8125rem; } /* Section Headers */ h2 { margin-bottom: 16px; color: var(--text-primary); font-size: 1.25rem; font-weight: 600; display: flex; align-items: center; gap: 10px; } /* Tags Table */ .tags-table { background: var(--bg-secondary); border: 1px solid var(--border-primary); border-radius: var(--radius-lg); overflow: hidden; margin-bottom: 32px; } .tags-table table { width: 100%; border-collapse: collapse; } .tags-table th, .tags-table td { padding: 14px 20px; text-align: left; border-bottom: 1px solid var(--border-primary); } .tags-table th { background: var(--bg-tertiary); font-weight: 600; font-size: 0.75rem; text-transform: uppercase; letter-spacing: 0.05em; color: var(--text-tertiary); } .tags-table tr:last-child td { border-bottom: none; } .tags-table tbody tr { transition: background var(--transition-fast); } .tags-table tbody tr:hover { background: var(--bg-tertiary); } .tags-table td strong { color: var(--accent-primary); font-weight: 600; } .artifact-id { font-family: 'JetBrains Mono', 'Fira Code', 'Consolas', monospace; font-size: 0.8125rem; color: var(--text-tertiary); background: var(--bg-tertiary); padding: 4px 8px; border-radius: var(--radius-sm); } .btn-small { padding: 6px 12px; font-size: 0.75rem; } /* Action buttons in table */ .action-buttons { display: flex; gap: 8px; } /* Download by Artifact ID Section */ .download-by-id-section { margin-top: 32px; background: var(--bg-secondary); } .download-by-id-section h3 { margin-bottom: 12px; color: var(--text-primary); font-size: 1rem; font-weight: 600; } .download-by-id-form { display: flex; gap: 12px; align-items: center; } .artifact-id-input { flex: 1; padding: 10px 16px; background: var(--bg-tertiary); border: 1px solid var(--border-primary); border-radius: var(--radius-md); font-family: 'JetBrains Mono', 'Fira Code', 'Consolas', monospace; font-size: 0.8125rem; color: var(--text-primary); } .artifact-id-input::placeholder { color: var(--text-muted); } .artifact-id-input:focus { outline: none; border-color: var(--accent-primary); } .btn-disabled { opacity: 0.5; cursor: not-allowed; pointer-events: none; } .validation-hint { margin-top: 8px; margin-bottom: 0; font-size: 0.75rem; color: var(--warning-color, #f59e0b); } /* Copy button for code blocks (optional enhancement) */ .code-block { position: relative; } .code-block .copy-btn { position: absolute; top: 8px; right: 8px; background: var(--bg-tertiary); border: 1px solid var(--border-primary); color: var(--text-secondary); padding: 4px 8px; border-radius: var(--radius-sm); font-size: 0.6875rem; cursor: pointer; opacity: 0; transition: opacity var(--transition-fast); } .code-block:hover .copy-btn { opacity: 1; } .code-block .copy-btn:hover { background: var(--bg-hover); color: var(--text-primary); } /* Section header */ .section-header { margin-bottom: 16px; } .section-header h2 { margin-bottom: 0; } /* Package header stats */ .package-header-stats { display: flex; gap: 20px; margin-top: 12px; font-size: 0.875rem; color: var(--text-secondary); } .stat-item strong { color: var(--text-primary); } .stat-item strong.accent { color: var(--accent-primary); } /* Artifact ID cell */ .artifact-id-cell { display: flex; align-items: center; gap: 8px; } /* Copy button */ .copy-btn { display: flex; align-items: center; justify-content: center; width: 24px; height: 24px; padding: 0; background: transparent; border: none; border-radius: var(--radius-sm); color: var(--text-muted); cursor: pointer; opacity: 0; transition: all var(--transition-fast); } .artifact-id-cell:hover .copy-btn, tr:hover .copy-btn { opacity: 1; } .copy-btn:hover { background: var(--bg-hover); color: var(--accent-primary); } /* Content type */ .content-type { font-size: 0.75rem; color: var(--text-muted); } /* Version badge */ .version-badge { font-family: 'JetBrains Mono', 'Fira Code', 'Consolas', monospace; font-size: 0.8125rem; color: var(--accent-primary); background: rgba(16, 185, 129, 0.1); padding: 2px 8px; border-radius: var(--radius-sm); } /* Create Tag Section */ .create-tag-section { margin-top: 32px; background: var(--bg-secondary); } .create-tag-section h3 { margin-bottom: 4px; color: var(--text-primary); font-size: 1rem; font-weight: 600; } .section-description { color: var(--text-muted); font-size: 0.875rem; margin-bottom: 16px; } .create-tag-form .form-row { display: flex; gap: 12px; align-items: flex-end; flex-wrap: wrap; } .create-tag-form .form-group { flex: 1; min-width: 150px; } .create-tag-form .form-group--wide { flex: 2; min-width: 300px; } .create-tag-form .form-group label { display: block; margin-bottom: 6px; font-size: 0.75rem; font-weight: 500; color: var(--text-secondary); text-transform: uppercase; letter-spacing: 0.05em; } .create-tag-form .form-group input { width: 100%; padding: 10px 14px; background: var(--bg-tertiary); border: 1px solid var(--border-primary); border-radius: var(--radius-md); color: var(--text-primary); font-size: 0.875rem; } .create-tag-form .form-group input:focus { outline: none; border-color: var(--accent-primary); } .create-tag-form .form-group input:disabled { opacity: 0.6; cursor: not-allowed; } .create-tag-form button { flex-shrink: 0; } /* Created cell */ .created-cell { display: flex; flex-direction: column; gap: 2px; } .created-by { font-size: 0.75rem; color: var(--text-muted); } /* Cell truncate */ .cell-truncate { max-width: 150px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } /* Dependencies Section */ .dependencies-section { margin-top: 32px; background: var(--bg-secondary); } .dependencies-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: 12px; } .dependencies-header h3 { margin: 0; color: var(--text-primary); font-size: 1rem; font-weight: 600; } .dependencies-controls { display: flex; align-items: center; gap: 8px; } .dependencies-controls .btn { display: inline-flex; align-items: center; } .dependencies-tag-select { margin-bottom: 16px; } .tag-selector { padding: 8px 12px; background: var(--bg-tertiary); border: 1px solid var(--border-primary); border-radius: var(--radius-md); color: var(--text-primary); font-size: 0.875rem; cursor: pointer; min-width: 200px; } .tag-selector:focus { outline: none; border-color: var(--accent-primary); } .deps-loading { color: var(--text-muted); font-size: 0.875rem; padding: 16px 0; } .deps-error { color: var(--error-color, #ef4444); font-size: 0.875rem; padding: 12px 16px; background: rgba(239, 68, 68, 0.1); border-radius: var(--radius-md); } .deps-empty { color: var(--text-muted); font-size: 0.875rem; padding: 16px 0; } .deps-summary { color: var(--text-secondary); font-size: 0.875rem; margin-bottom: 12px; } .deps-summary strong { color: var(--accent-primary); } .deps-items { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 8px; } .dep-item { display: flex; align-items: center; gap: 12px; padding: 12px 16px; background: var(--bg-tertiary); border-radius: var(--radius-md); border: 1px solid var(--border-primary); } .dep-link { color: var(--accent-primary); font-weight: 500; text-decoration: none; font-family: 'JetBrains Mono', 'Fira Code', 'Consolas', monospace; font-size: 0.875rem; } .dep-link:hover { text-decoration: underline; } .dep-constraint { color: var(--text-muted); font-size: 0.8125rem; font-family: 'JetBrains Mono', 'Fira Code', 'Consolas', monospace; } .dep-status { margin-left: auto; font-size: 0.875rem; font-weight: 600; } .dep-status--ok { color: var(--success-color, #10b981); } .dep-status--missing { color: var(--warning-color, #f59e0b); } /* Tag name link in table */ .tag-name-link { color: var(--accent-primary); transition: opacity var(--transition-fast); } .tag-name-link:hover { opacity: 0.8; } .tag-name-link.selected { text-decoration: underline; } /* Used By (Reverse Dependencies) Section */ .used-by-section { margin-top: 32px; background: var(--bg-secondary); } .used-by-section h3 { margin-bottom: 16px; color: var(--text-primary); font-size: 1rem; font-weight: 600; } .reverse-dep-item { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; } .dep-version { color: var(--accent-primary); font-family: 'JetBrains Mono', 'Fira Code', 'Consolas', monospace; font-size: 0.8125rem; background: rgba(16, 185, 129, 0.1); padding: 2px 8px; border-radius: var(--radius-sm); } .dep-requires { color: var(--text-muted); font-size: 0.8125rem; font-family: 'JetBrains Mono', 'Fira Code', 'Consolas', monospace; margin-left: auto; } .reverse-deps-pagination { display: flex; align-items: center; justify-content: center; gap: 16px; margin-top: 16px; padding-top: 16px; border-top: 1px solid var(--border-primary); } .pagination-info { color: var(--text-secondary); font-size: 0.875rem; } /* Ensure File Modal */ .modal-overlay { position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: rgba(0, 0, 0, 0.7); display: flex; align-items: center; justify-content: center; z-index: 1000; padding: 20px; } /* Ensure file modal needs higher z-index when opened from deps modal */ .modal-overlay:has(.ensure-file-modal) { z-index: 1100; } .ensure-file-modal { background: var(--bg-secondary); border: 1px solid var(--border-primary); border-radius: var(--radius-lg); max-width: 700px; width: 100%; max-height: 80vh; display: flex; flex-direction: column; box-shadow: 0 20px 50px rgba(0, 0, 0, 0.5); } .ensure-file-header { display: flex; align-items: center; justify-content: space-between; padding: 16px 20px; border-bottom: 1px solid var(--border-primary); } .ensure-file-header h3 { margin: 0; color: var(--text-primary); font-size: 1rem; font-weight: 600; } .ensure-file-actions { display: flex; align-items: center; gap: 8px; } .ensure-file-actions .copy-btn { opacity: 1; width: 32px; height: 32px; } .modal-close { display: flex; align-items: center; justify-content: center; width: 32px; height: 32px; padding: 0; background: transparent; border: none; border-radius: var(--radius-sm); color: var(--text-muted); cursor: pointer; transition: all var(--transition-fast); } .modal-close:hover { background: var(--bg-hover); color: var(--text-primary); } .ensure-file-content { flex: 1; overflow: auto; padding: 20px; } .ensure-file-loading { color: var(--text-muted); text-align: center; padding: 40px 20px; } .ensure-file-error { color: var(--error-color, #ef4444); padding: 16px; background: rgba(239, 68, 68, 0.1); border-radius: var(--radius-md); } .ensure-file-empty { color: var(--text-muted); text-align: center; padding: 40px 20px; font-style: italic; } .ensure-file-yaml { margin: 0; padding: 16px; background: #0d0d0f; border: 1px solid var(--border-primary); border-radius: var(--radius-md); overflow-x: auto; } .ensure-file-yaml code { font-family: 'JetBrains Mono', 'Fira Code', 'Consolas', monospace; font-size: 0.8125rem; color: #e2e8f0; white-space: pre; } .ensure-file-footer { padding: 16px 20px; border-top: 1px solid var(--border-primary); background: var(--bg-tertiary); border-radius: 0 0 var(--radius-lg) var(--radius-lg); } .ensure-file-hint { margin: 0; color: var(--text-muted); font-size: 0.8125rem; } .ensure-file-hint code { background: rgba(0, 0, 0, 0.2); padding: 2px 6px; border-radius: var(--radius-sm); font-family: 'JetBrains Mono', 'Fira Code', 'Consolas', monospace; color: var(--accent-primary); } /* Responsive adjustments */ @media (max-width: 768px) { .upload-form { flex-direction: column; align-items: stretch; } .upload-form .form-group { min-width: 100%; } .package-header-stats { flex-wrap: wrap; gap: 12px; } .dependencies-header { flex-direction: column; align-items: flex-start; gap: 12px; } .tag-selector { width: 100%; } .ensure-file-modal { max-height: 90vh; } .action-menu-dropdown { right: 0; left: auto; } } /* Header upload button */ .header-upload-btn { margin-left: auto; } /* Tag/Version cell */ .tag-version-cell { display: flex; flex-direction: column; gap: 4px; } .tag-version-cell .version-badge { font-size: 0.75rem; color: var(--text-muted); } /* Icon buttons */ .btn-icon { display: flex; align-items: center; justify-content: center; width: 32px; height: 32px; padding: 0; background: transparent; border: 1px solid transparent; border-radius: var(--radius-sm); color: var(--text-secondary); cursor: pointer; transition: all var(--transition-fast); } .btn-icon:hover { background: var(--bg-hover); color: var(--text-primary); } /* Action menu */ .action-buttons { display: flex; align-items: center; gap: 4px; } .action-menu { position: relative; } /* Action menu backdrop for click-outside */ .action-menu-backdrop { position: fixed; top: 0; left: 0; right: 0; bottom: 0; z-index: 999; } .action-menu-dropdown { position: fixed; z-index: 1000; min-width: 180px; padding: 4px 0; background: var(--bg-secondary); border: 1px solid var(--border-primary); border-radius: var(--radius-md); box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); } .action-menu-dropdown button { display: block; width: 100%; padding: 8px 12px; background: none; border: none; text-align: left; font-size: 0.875rem; color: var(--text-primary); cursor: pointer; transition: background var(--transition-fast); } .action-menu-dropdown button:hover { background: var(--bg-hover); } /* Upload Modal */ .upload-modal, .create-tag-modal { background: var(--bg-secondary); border-radius: var(--radius-lg); width: 90%; max-width: 500px; max-height: 90vh; overflow: hidden; } .modal-header { display: flex; align-items: center; justify-content: space-between; padding: 16px 20px; border-bottom: 1px solid var(--border-primary); } .modal-header h3 { margin: 0; font-size: 1.125rem; font-weight: 600; } .modal-body { padding: 20px; } .modal-description { margin-bottom: 16px; color: var(--text-secondary); font-size: 0.875rem; } .modal-actions { display: flex; justify-content: flex-end; gap: 12px; margin-top: 20px; padding-top: 16px; border-top: 1px solid var(--border-primary); } /* Dependencies Modal */ .deps-modal { background: var(--bg-secondary); border-radius: var(--radius-lg); width: 90%; max-width: 600px; max-height: 80vh; overflow: hidden; display: flex; flex-direction: column; } .deps-modal .modal-body { overflow-y: auto; flex: 1; } .deps-modal-controls { display: flex; gap: 8px; margin-bottom: 16px; } /* Artifact ID Modal */ .artifact-id-modal { background: var(--bg-secondary); border-radius: var(--radius-lg); width: 90%; max-width: 500px; } .artifact-id-display { display: flex; align-items: center; gap: 12px; padding: 16px; background: var(--bg-tertiary); border-radius: var(--radius-md); border: 1px solid var(--border-primary); } .artifact-id-display code { font-family: 'JetBrains Mono', 'Fira Code', 'Consolas', monospace; font-size: 0.8125rem; color: var(--text-primary); word-break: break-all; flex: 1; } .artifact-id-display .copy-btn { opacity: 1; flex-shrink: 0; }