/** * ConversationEmbeddingPanel.css * * Styles for the draggable, resizable embedding projector panel. * Based on InstitutionInfoPanel.css and RdfNodeDetailsPanel.css patterns. */ /* ============================================================================ Main Panel Container ============================================================================ */ .conversation-embedding-panel { position: fixed; top: 0; left: 0; background: white; border: 1px solid var(--border-color, #e5e5e5); border-radius: 12px; box-shadow: 0 8px 32px rgba(0, 0, 0, 0.12); display: flex; flex-direction: column; overflow: hidden; z-index: 150; transition: box-shadow 0.2s ease; will-change: transform; } .conversation-embedding-panel--dragging, .conversation-embedding-panel--resizing { box-shadow: 0 12px 48px rgba(0, 0, 0, 0.18); cursor: grabbing !important; } .conversation-embedding-panel--minimized { height: 48px !important; } .conversation-embedding-panel--simple { /* Width/height handled inline by component */ } /* ============================================================================ Resize Handles ============================================================================ */ .conversation-embedding-panel__resize-handle { position: absolute; background: transparent; z-index: 10; } /* North and South edges */ .conversation-embedding-panel__resize-handle--n, .conversation-embedding-panel__resize-handle--s { left: 12px; right: 12px; height: 8px; cursor: ns-resize; } .conversation-embedding-panel__resize-handle--n { top: -4px; } .conversation-embedding-panel__resize-handle--s { bottom: -4px; } /* East and West edges */ .conversation-embedding-panel__resize-handle--e, .conversation-embedding-panel__resize-handle--w { top: 12px; bottom: 12px; width: 8px; cursor: ew-resize; } .conversation-embedding-panel__resize-handle--e { right: -4px; } .conversation-embedding-panel__resize-handle--w { left: -4px; } /* Corner handles */ .conversation-embedding-panel__resize-handle--ne, .conversation-embedding-panel__resize-handle--nw, .conversation-embedding-panel__resize-handle--se, .conversation-embedding-panel__resize-handle--sw { width: 16px; height: 16px; } .conversation-embedding-panel__resize-handle--ne { top: -4px; right: -4px; cursor: nesw-resize; } .conversation-embedding-panel__resize-handle--nw { top: -4px; left: -4px; cursor: nwse-resize; } .conversation-embedding-panel__resize-handle--se { bottom: -4px; right: -4px; cursor: nwse-resize; } .conversation-embedding-panel__resize-handle--sw { bottom: -4px; left: -4px; cursor: nesw-resize; } /* Visual indicator for SE corner (most commonly used for resize) */ .conversation-embedding-panel__resize-handle--se::after { content: ''; position: absolute; right: 6px; bottom: 6px; width: 12px; height: 12px; border-right: 2px solid rgba(0, 0, 0, 0.15); border-bottom: 2px solid rgba(0, 0, 0, 0.15); border-radius: 0 0 3px 0; pointer-events: none; } .conversation-embedding-panel__resize-handle--se:hover::after { border-color: rgba(10, 61, 250, 0.4); } /* ============================================================================ Header (Drag Handle) ============================================================================ */ .conversation-embedding-panel__header { display: flex; justify-content: space-between; align-items: center; padding: 12px 16px; border-bottom: none; background: linear-gradient(135deg, #0a3dfa 0%, #1e50ff 100%); flex-shrink: 0; user-select: none; } .conversation-embedding-panel--minimized .conversation-embedding-panel__header { border-bottom: none; } .conversation-embedding-panel__title { display: flex; align-items: center; gap: 8px; font-size: 0.9375rem; font-weight: 600; color: white; margin: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .conversation-embedding-panel__title svg { color: rgba(255, 255, 255, 0.9); flex-shrink: 0; } /* ============================================================================ Controls - Larger, clearer buttons ============================================================================ */ .conversation-embedding-panel__controls { display: flex; align-items: center; gap: 6px; flex-shrink: 0; } .conversation-embedding-panel__sources-badge { display: inline-flex; align-items: center; padding: 4px 10px; background: linear-gradient(135deg, #22c55e 0%, #16a34a 100%); color: white; border-radius: 12px; font-size: 0.75rem; font-weight: 500; white-space: nowrap; margin-right: 4px; } .conversation-embedding-panel__control-btn, .conversation-embedding-panel__close-btn { display: flex; align-items: center; justify-content: center; width: 32px; height: 32px; background: rgba(255, 255, 255, 0.2); border: 1px solid rgba(255, 255, 255, 0.3); border-radius: 6px; color: white; cursor: pointer; transition: all 0.15s ease; } .conversation-embedding-panel__control-btn svg, .conversation-embedding-panel__close-btn svg { width: 18px; height: 18px; } .conversation-embedding-panel__control-btn:hover { background: rgba(255, 255, 255, 0.35); border-color: rgba(255, 255, 255, 0.5); transform: scale(1.05); } .conversation-embedding-panel__control-btn--active { background: rgba(255, 255, 255, 0.4); border-color: rgba(255, 255, 255, 0.6); } .conversation-embedding-panel__close-btn:hover { background: rgba(220, 38, 38, 0.9); border-color: rgba(220, 38, 38, 1); transform: scale(1.05); } /* ============================================================================ Content ============================================================================ */ .conversation-embedding-panel__content { flex: 1; overflow: hidden; position: relative; } .conversation-embedding-panel__loading, .conversation-embedding-panel__empty { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 12px; height: 100%; color: #666; font-size: 0.875rem; } .conversation-embedding-panel__loading-icon { animation: spin 1s linear infinite; color: var(--primary-blue, #0a3dfa); } @keyframes spin { from { transform: rotate(0deg); } to { transform: rotate(360deg); } } .conversation-embedding-panel__empty svg { color: #999; } .conversation-embedding-panel__empty p { margin: 0; text-align: center; } /* ============================================================================ Dark Theme ============================================================================ */ [data-theme="dark"] .conversation-embedding-panel { background: var(--bg-primary-dark, #1a1a2e); border-color: var(--border-color-dark, #333); } [data-theme="dark"] .conversation-embedding-panel__header { background: linear-gradient(135deg, #1a4fff 0%, #3366ff 100%); } [data-theme="dark"] .conversation-embedding-panel__title { color: white; } [data-theme="dark"] .conversation-embedding-panel__control-btn, [data-theme="dark"] .conversation-embedding-panel__close-btn { color: white; background: rgba(255, 255, 255, 0.15); border-color: rgba(255, 255, 255, 0.25); } [data-theme="dark"] .conversation-embedding-panel__control-btn:hover { background: rgba(255, 255, 255, 0.3); border-color: rgba(255, 255, 255, 0.4); } [data-theme="dark"] .conversation-embedding-panel__close-btn:hover { background: rgba(220, 38, 38, 0.9); border-color: rgba(220, 38, 38, 1); } [data-theme="dark"] .conversation-embedding-panel__loading, [data-theme="dark"] .conversation-embedding-panel__empty { color: #999; } [data-theme="dark"] .conversation-embedding-panel__resize-handle--se::after { border-color: rgba(255, 255, 255, 0.2); } [data-theme="dark"] .conversation-embedding-panel__resize-handle--se:hover::after { border-color: rgba(100, 150, 255, 0.5); } /* ============================================================================ Responsive Adjustments ============================================================================ */ @media (max-width: 768px) { .conversation-embedding-panel { width: calc(100vw - 32px) !important; max-width: 500px; } .conversation-embedding-panel__sources-badge { display: none; } .conversation-embedding-panel__resize-handle { display: none; } } @media (max-width: 480px) { .conversation-embedding-panel { width: calc(100vw - 16px) !important; left: 8px !important; right: 8px !important; transform: translateY(var(--panel-y, 0)) !important; } .conversation-embedding-panel__title { font-size: 0.875rem; } .conversation-embedding-panel__control-btn, .conversation-embedding-panel__close-btn { width: 28px; height: 28px; } }