codebook / potato /static /css /embedding-viz.css
davidjurgens's picture
Deploy: Potato — Codebook Annotation
aceb1b2 verified
Raw
History Blame Contribute Delete
6.83 kB
/**
* 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;
}
}