/** * Embedding Visualization Styles * * Styles for the admin dashboard embedding visualization feature, * including scatter plot container, selection panels, and controls. */ /* Stats Bar */ #embedding-viz-stats { display: grid; grid-template-columns: repeat(auto-fit, minmax(120px, 1fr)); gap: 1rem; margin-bottom: 1rem; } #embedding-viz-stats .stat-item { background: white; border-radius: var(--radius, 8px); padding: 1rem; box-shadow: var(--box-shadow, 0 1px 3px rgba(0, 0, 0, 0.1)); text-align: center; border: 1px solid var(--border, #e5e7eb); } #embedding-viz-stats .stat-value { font-size: 1.5rem; font-weight: 600; color: var(--heading-color, #1f2937); display: block; } #embedding-viz-stats .stat-label { font-size: 0.75rem; color: var(--muted-foreground, #6b7280); text-transform: uppercase; letter-spacing: 0.05em; margin-top: 0.25rem; } /* Chart Container */ #embedding-viz-chart { width: 100%; height: 500px; border-radius: var(--radius, 8px); } #embedding-viz-chart.loading { opacity: 0.5; pointer-events: none; } /* Loading Overlay */ #embedding-viz-loader { position: absolute; top: 0; left: 0; right: 0; bottom: 0; background: rgba(255, 255, 255, 0.9); display: flex; justify-content: center; align-items: center; z-index: 10; border-radius: var(--radius, 8px); } #embedding-viz-loader .loading-spinner { width: 40px; height: 40px; border: 4px solid #e5e7eb; border-top-color: #3b82f6; border-radius: 50%; animation: spin 1s ease-in-out infinite; } @keyframes spin { to { transform: rotate(360deg); } } /* Error Message */ #embedding-viz-error { display: none; } #embedding-viz-error .error-message { background: #fef2f2; border: 1px solid #fecaca; color: #dc2626; padding: 1rem; border-radius: var(--radius, 8px); margin: 1rem 0; } /* Preview Panel */ #embedding-viz-preview { min-height: 100px; } #embedding-viz-preview .preview-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 0.5rem; padding-bottom: 0.5rem; border-bottom: 1px solid var(--border, #e5e7eb); } #embedding-viz-preview .preview-label { padding: 0.25rem 0.5rem; border-radius: var(--radius, 4px); font-size: 0.75rem; font-weight: 500; color: white; } #embedding-viz-preview .preview-label.unannotated { background-color: #94a3b8; } #embedding-viz-preview .preview-body { margin: 0.5rem 0; } #embedding-viz-preview .preview-text { font-size: 0.875rem; line-height: 1.5; color: var(--text-color, #374151); max-height: 150px; overflow-y: auto; word-wrap: break-word; } #embedding-viz-preview .preview-image { max-width: 100%; max-height: 150px; border-radius: var(--radius, 4px); } #embedding-viz-preview .preview-meta { font-size: 0.75rem; color: var(--muted-foreground, #6b7280); margin-top: 0.5rem; } /* Selection Panel */ #embedding-viz-selection-panel { min-height: 80px; } .selection-empty { text-align: center; padding: 1rem 0; } .selection-empty p { margin: 0.25rem 0; } .current-selection { background: #f0f9ff; border: 1px solid #bae6fd; border-radius: var(--radius, 8px); padding: 0.75rem; margin-bottom: 0.75rem; } .current-selection .selection-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 0.5rem; } .current-selection .selection-count { font-size: 0.75rem; color: #0369a1; background: #e0f2fe; padding: 0.125rem 0.5rem; border-radius: 9999px; } .current-selection .selection-preview { font-size: 0.75rem; color: var(--muted-foreground, #6b7280); margin-bottom: 0.75rem; word-break: break-all; } .current-selection .selection-actions { display: flex; gap: 0.5rem; } /* Queued Selections */ .queued-selections h4 { font-size: 0.875rem; font-weight: 600; color: var(--heading-color, #1f2937); margin: 0 0 0.75rem 0; } .queued-selection { background: #f9fafb; border: 1px solid var(--border, #e5e7eb); border-radius: var(--radius, 8px); padding: 0.5rem 0.75rem; margin-bottom: 0.5rem; } .queued-selection-header { display: flex; align-items: center; gap: 0.5rem; margin-bottom: 0.25rem; } .priority-badge { font-size: 0.75rem; font-weight: 500; color: white; background: #6366f1; padding: 0.125rem 0.5rem; border-radius: 9999px; } .queued-selection .selection-count { font-size: 0.75rem; color: var(--muted-foreground, #6b7280); flex: 1; } .queued-selection .btn-icon { background: none; border: none; color: var(--muted-foreground, #6b7280); cursor: pointer; font-size: 1.25rem; line-height: 1; padding: 0.125rem; } .queued-selection .btn-icon:hover { color: #dc2626; } .queued-selection-preview { font-size: 0.75rem; color: var(--muted-foreground, #6b7280); word-break: break-all; } /* Queue Actions */ .queue-actions { display: flex; gap: 0.5rem; margin-top: 0.75rem; padding-top: 0.75rem; border-top: 1px solid var(--border, #e5e7eb); } .queue-actions .btn { flex: 1; padding: 0.5rem; font-size: 0.875rem; } /* Buttons */ .btn { display: inline-flex; align-items: center; justify-content: center; padding: 0.5rem 1rem; border-radius: var(--radius, 8px); font-size: 0.875rem; font-weight: 500; cursor: pointer; transition: all 0.15s ease; border: 1px solid transparent; } .btn-sm { padding: 0.25rem 0.75rem; font-size: 0.75rem; } .btn-primary { background-color: #3b82f6; color: white; } .btn-primary:hover { background-color: #2563eb; } .btn-secondary { background-color: white; border-color: var(--border, #e5e7eb); color: var(--text-color, #374151); } .btn-secondary:hover { background-color: #f9fafb; } .btn-success { background-color: #22c55e; color: white; } .btn-success:hover { background-color: #16a34a; } /* Notifications */ .notification { position: fixed; bottom: 20px; right: 20px; padding: 0.75rem 1.5rem; border-radius: var(--radius, 8px); font-size: 0.875rem; font-weight: 500; box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); z-index: 1000; animation: slideIn 0.2s ease-out; } .notification-success { background-color: #22c55e; color: white; } .notification-error { background-color: #ef4444; color: white; } .notification-warning { background-color: #f59e0b; color: white; } .notification-info { background-color: #3b82f6; color: white; } @keyframes slideIn { from { transform: translateX(100%); opacity: 0; } to { transform: translateX(0); opacity: 1; } } /* Responsive Design */ @media (max-width: 768px) { #embedding-viz-chart { height: 350px; } #embedding-viz-stats { grid-template-columns: repeat(2, 1fr); } .queue-actions { flex-direction: column; } }