/* Root Variables */ :root { /* Light Mode Colors */ --primary-color: #3498db; --primary-dark: #2980b9; --secondary-color: #2ecc71; --secondary-dark: #27ae60; --accent-color: #9b59b6; --accent-dark: #8e44ad; --background-color: #f8f9fa; --surface-color: #ffffff; --text-primary: #2c3e50; --text-secondary: #7f8c8d; --border-color: #e0e0e0; --shadow-sm: 0 2px 4px rgba(0,0,0,0.05); --shadow-md: 0 4px 6px rgba(0,0,0,0.1); --shadow-lg: 0 10px 15px rgba(0,0,0,0.1); --radius-sm: 4px; --radius-md: 8px; --radius-lg: 12px; /* Enhanced Typography */ --font-heading: 'Montserrat', 'Segoe UI', system-ui, -apple-system, sans-serif; --font-body: 'Inter', 'Segoe UI', system-ui, -apple-system, sans-serif; --font-mono: 'JetBrains Mono', 'Courier New', monospace; } /* Dark Mode Colors */ [data-theme="dark"] { --primary-color: #60a5fa; --primary-dark: #3b82f6; --secondary-color: #10b981; --secondary-dark: #059669; --accent-color: #c084fc; --accent-dark: #a855f7; --background-color: #111827; --surface-color: #1f2937; --text-primary: #f9fafb; --text-secondary: #e5e7eb; --border-color: #374151; --shadow-sm: 0 2px 4px rgba(0,0,0,0.3); --shadow-md: 0 4px 6px rgba(0,0,0,0.4); --shadow-lg: 0 10px 15px rgba(0,0,0,0.5); } /* Reset & Base Styles */ * { margin: 0; padding: 0; box-sizing: border-box; } /* Font imports */ @import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&family=JetBrains+Mono:wght@400;500&family=Montserrat:wght@500;600;700&display=swap'); body { font-family: var(--font-body); background-color: var(--background-color); color: var(--text-primary); line-height: 1.6; transition: background-color 0.3s ease, color 0.3s ease; } h1, h2, h3, h4, h5, h6 { font-family: var(--font-heading); font-weight: 600; line-height: 1.3; margin-bottom: 0.5em; color: var(--text-primary); } code, pre { font-family: var(--font-mono); font-size: 0.9em; } /* Theme Toggle */ .theme-toggle { position: fixed; top: 1rem; right: 1rem; z-index: 1001; display: flex; align-items: center; gap: 0.5rem; background-color: var(--surface-color); border-radius: 2rem; padding: 0.35rem; box-shadow: var(--shadow-md); cursor: pointer; border: 1px solid var(--border-color); transition: all 0.2s ease; } .theme-toggle:hover { transform: translateY(-2px); box-shadow: var(--shadow-lg); } .theme-toggle-icon { display: flex; align-items: center; justify-content: center; width: 2rem; height: 2rem; font-size: 1.2rem; border-radius: 50%; color: var(--text-primary); transition: all 0.3s ease; } .theme-toggle-icon.light-icon { background-color: var(--primary-color); color: white; transform: var(--theme-light-transform, scale(1)); opacity: var(--theme-light-opacity, 1); } .theme-toggle-icon.dark-icon { background-color: transparent; transform: var(--theme-dark-transform, scale(0.8)); opacity: var(--theme-dark-opacity, 0.5); } [data-theme="dark"] .theme-toggle-icon.light-icon { background-color: transparent; transform: scale(0.8); opacity: 0.5; } [data-theme="dark"] .theme-toggle-icon.dark-icon { background-color: var(--accent-color); color: white; transform: scale(1); opacity: 1; } /* Layout */ .app-container { min-height: 100vh; display: flex; flex-direction: column; } .app-header { background-color: var(--surface-color); padding: 1rem 2rem; box-shadow: var(--shadow-sm); } .logo-container { display: flex; align-items: center; gap: 1rem; } .logo-icon { font-size: 2rem; color: var(--primary-color); } .main-content { flex: 1; max-width: 1400px; margin: 2rem auto; padding: 0 2rem; display: grid; gap: 2rem; grid-template-rows: auto minmax(0, 1fr); } /* Upload Panel */ .upload-panel { background-color: var(--surface-color); border-radius: var(--radius-lg); padding: 2rem; box-shadow: var(--shadow-md); max-height: fit-content; overflow: hidden; } .upload-section { display: grid; grid-template-columns: 2fr 1fr; gap: 2rem; margin-bottom: 2rem; } .upload-container { border: 2px dashed rgba(52, 152, 219, 0.3); border-radius: var(--radius-lg); padding: 2.5rem; text-align: center; transition: all 0.3s ease; cursor: pointer; background: linear-gradient(135deg, rgba(52, 152, 219, 0.02) 0%, rgba(52, 152, 219, 0.08) 100%); position: relative; overflow: hidden; } .upload-container::before { content: ""; position: absolute; top: 0; left: 0; right: 0; bottom: 0; background: radial-gradient(circle at center, rgba(52, 152, 219, 0.1) 0%, transparent 70%); opacity: 0; transition: opacity 0.3s ease; } .upload-container:hover { border-color: var(--primary-color); transform: translateY(-5px); box-shadow: 0 15px 30px -10px rgba(52, 152, 219, 0.15); } .upload-container:hover::before { opacity: 1; } .upload-icon-container { width: 80px; height: 80px; border-radius: 50%; background-color: rgba(52, 152, 219, 0.1); margin: 0 auto 1.5rem; display: flex; align-items: center; justify-content: center; transition: all 0.3s ease; } .upload-container:hover .upload-icon-container { background-color: rgba(52, 152, 219, 0.2); transform: scale(1.1); } .upload-icon { font-size: 2.5rem; color: var(--primary-color); transition: all 0.3s ease; } .upload-container:hover .upload-icon { transform: translateY(-5px); } .upload-text { font-family: var(--font-heading); font-size: 1.25rem; font-weight: 600; color: var(--text-primary); margin-bottom: 0.5rem; } .upload-subtext { font-size: 0.95rem; color: var(--text-secondary); max-width: 80%; margin: 0 auto; } /* Upload file particles */ .particles { position: absolute; top: 0; left: 0; width: 100%; height: 100%; pointer-events: none; opacity: 0; transition: opacity 0.3s ease; } .particle { position: absolute; width: 6px; height: 6px; border-radius: 50%; background-color: var(--primary-color); opacity: 0; } .upload-container:hover .particles { opacity: 1; } @keyframes particleAnimation { 0% { transform: translateY(0) scale(0); opacity: 0; } 50% { opacity: 0.8; } 100% { transform: translateY(-100px) scale(1); opacity: 0; } } /* Upload Progress Animations */ .upload-progress { width: 100%; height: 4px; margin-top: 1.5rem; background-color: rgba(52, 152, 219, 0.1); border-radius: 2px; overflow: hidden; opacity: 0; transition: opacity 0.3s ease; } .upload-progress-bar { height: 100%; width: 0; background: linear-gradient(90deg, var(--primary-color), var(--primary-dark)); border-radius: 2px; transition: width 0.3s ease; } .upload-container.uploading .upload-progress { opacity: 1; } /* Dark Mode Adjustments */ [data-theme="dark"] .upload-container { border-color: rgba(96, 165, 250, 0.3); background: linear-gradient(135deg, rgba(30, 41, 59, 0.5) 0%, rgba(30, 41, 59, 0.8) 100%); } [data-theme="dark"] .upload-container::before { background: radial-gradient(circle at center, rgba(96, 165, 250, 0.15) 0%, transparent 70%); } [data-theme="dark"] .upload-icon-container { background-color: rgba(96, 165, 250, 0.15); } /* Model Selector */ .model-selector { display: flex; flex-direction: column; gap: 0.5rem; } .model-label { font-weight: 500; color: var(--text-primary); } .select-wrapper { position: relative; } .select-wrapper select { width: 100%; padding: 0.75rem; border: 1px solid var(--border-color); border-radius: var(--radius-sm); appearance: none; background-color: var(--surface-color); font-size: 1rem; color: var(--text-primary); } .select-icon { position: absolute; right: 1rem; top: 50%; transform: translateY(-50%); color: var(--text-secondary); pointer-events: none; } .model-status { font-size: 0.9rem; color: var(--text-secondary); } /* Video Preview */ .video-preview { margin: 2rem 0; border-radius: var(--radius-md); overflow: hidden; background-color: #000; position: relative; box-shadow: 0 15px 25px -5px rgba(0, 0, 0, 0.15), 0 10px 10px -5px rgba(0, 0, 0, 0.05); } .video-preview video { width: 100%; object-fit: contain; display: block; } .video-preview::after { content: ''; position: absolute; bottom: 0; left: 0; right: 0; height: 90px; background: linear-gradient(to top, rgba(0,0,0,0.5) 0%, transparent 100%); pointer-events: none; opacity: 0; transition: opacity 0.3s ease; } .video-preview:hover::after { opacity: 1; } .video-controls { position: absolute; bottom: 0; left: 0; width: 100%; padding: 1rem; display: flex; align-items: center; gap: 1rem; z-index: 10; opacity: 0; transform: translateY(10px); transition: all 0.3s ease; } .video-preview:hover .video-controls { opacity: 1; transform: translateY(0); } .video-progress { flex: 1; height: 4px; background-color: rgba(255, 255, 255, 0.2); border-radius: 2px; overflow: hidden; cursor: pointer; position: relative; } .video-progress-bar { height: 100%; width: 0; background-color: var(--primary-color); border-radius: 2px; position: relative; } .video-progress-handle { position: absolute; right: -6px; top: 50%; transform: translateY(-50%); width: 12px; height: 12px; border-radius: 50%; background-color: white; box-shadow: 0 0 5px rgba(0, 0, 0, 0.3); opacity: 0; transition: opacity 0.2s ease; } .video-progress:hover .video-progress-handle { opacity: 1; } .video-control-button { background: transparent; border: none; color: white; cursor: pointer; width: 36px; height: 36px; display: flex; align-items: center; justify-content: center; border-radius: 50%; transition: all 0.2s ease; } .video-control-button:hover { background-color: rgba(255, 255, 255, 0.2); } .video-time { color: white; font-family: var(--font-mono); font-size: 0.85rem; min-width: 50px; text-align: center; } .video-preview.playing .video-play-icon { display: none; } .video-preview:not(.playing) .video-pause-icon { display: none; } /* Action Buttons */ .action-buttons { display: flex; gap: 1rem; margin-bottom: 1.5rem; } .primary-button, .secondary-button { padding: 0.75rem 1.5rem; border: none; border-radius: var(--radius-sm); font-size: 1rem; font-weight: 500; cursor: pointer; display: flex; align-items: center; gap: 0.5rem; transition: all 0.2s ease; } .primary-button { background-color: var(--primary-color); color: white; } .primary-button:hover { background-color: var(--primary-dark); } .secondary-button { background-color: var(--secondary-color); color: white; } .secondary-button:hover { background-color: var(--secondary-dark); } .primary-button:disabled, .secondary-button:disabled { background-color: var(--text-secondary); cursor: not-allowed; opacity: 0.7; } /* Progress Bar */ .progress-container { background-color: var(--background-color); padding: 1.5rem; border-radius: var(--radius-md); } .status-text { margin-bottom: 0.75rem; color: var(--text-secondary); } .progress-bar { height: 0.5rem; background-color: var(--border-color); border-radius: 999px; overflow: hidden; } .progress { height: 100%; background-color: var(--primary-color); transition: width 0.3s ease; } /* Results Panel */ .results-panel { display: grid; grid-template-columns: 1fr 1fr; gap: 2rem; max-height: calc(100vh - 600px); min-height: 500px; overflow: hidden; } .transcription-container, .topics-container { background-color: var(--surface-color); border-radius: var(--radius-lg); padding: 1.5rem; box-shadow: var(--shadow-md); display: flex; flex-direction: column; max-height: 100%; overflow: hidden; } h2 { display: flex; align-items: center; gap: 0.5rem; margin-bottom: 1rem; padding-bottom: 0.75rem; border-bottom: 2px solid var(--border-color); } .transcription-content, .topics-content { max-height: 500px; overflow-y: auto; padding: 1rem; background-color: var(--background-color); border-radius: var(--radius-md); font-size: 0.95rem; line-height: 1.7; height: 500px; overflow-y: auto; overflow-x: hidden; word-wrap: break-word; } /* Topic Styles */ .topic { margin-bottom: 1.5rem; padding: 1rem; background-color: var(--surface-color); border-left: 4px solid var(--primary-color); border-radius: 0 var(--radius-sm) var(--radius-sm) 0; box-shadow: var(--shadow-sm); } .topic-header { font-weight: 600; color: var(--text-primary); margin-bottom: 0.5rem; } .topic-content { color: var(--text-secondary); } /* Mindmap Overlay */ .mindmap-overlay { position: fixed; top: 0; left: 0; width: 100vw; height: 100vh; background-color: var(--background-color); z-index: 1000; display: none; } .mindmap-overlay.active { display: block; } .mindmap-content { display: flex; height: 100vh; } /* Video Section */ .video-section { width: 40%; padding: 2rem; background-color: var(--surface-color); border-right: 1px solid var(--border-color); display: none; } .video-section.active { display: block; } .video-player-container { border-radius: var(--radius-md); overflow: hidden; background-color: #000; margin-bottom: 1rem; } .video-player-container video { width: 100%; object-fit: contain; display: block; } .video-info { padding: 1rem; background-color: var(--background-color); border-radius: var(--radius-md); font-size: 0.9rem; color: var(--text-secondary); } /* Mindmap Section */ .mindmap-section { flex: 1; position: relative; overflow: hidden; } .mindmap-toolbar { position: absolute; top: 1rem; left: 1rem; z-index: 100; display: flex; gap: 0.5rem; background-color: var(--surface-color); padding: 0.5rem; border-radius: var(--radius-md); box-shadow: var(--shadow-md); } .tool-button { padding: 0.5rem 1rem; border: none; border-radius: var(--radius-sm); background-color: var(--surface-color); color: var(--text-primary); cursor: pointer; display: flex; align-items: center; gap: 0.5rem; transition: all 0.2s ease; } .tool-button:hover { background-color: var(--background-color); color: var(--primary-color); } .tool-button.active { background-color: var(--primary-color); color: white; } .fullscreen-mindmap { width: 100%; height: calc(100vh - 4rem); position: relative; overflow: hidden; } /* Responsive Design */ @media (max-width: 1200px) { .main-content { padding: 0 1rem; } .results-panel { grid-template-columns: 1fr; } } @media (max-width: 768px) { .upload-section { grid-template-columns: 1fr; } .mindmap-content { flex-direction: column; } .video-section { width: 100%; border-right: none; border-bottom: 1px solid var(--border-color); } .tool-button { padding: 0.5rem; } .tool-button span { display: none; } } @media (max-width: 480px) { .action-buttons { flex-direction: column; } .primary-button, .secondary-button { width: 100%; justify-content: center; } } /* Custom Mindmap Node Styles */ jmnode { box-shadow: var(--shadow-sm); border-radius: var(--radius-md); padding: 8px 12px !important; transition: all 0.2s ease; } jmnode:hover { box-shadow: var(--shadow-md); transform: translateY(-1px); } /* Improved Expand/Collapse Buttons */ jmexpander { width: 20px !important; height: 20px !important; border-radius: 50% !important; background-color: var(--surface-color) !important; box-shadow: 0 1px 3px rgba(0,0,0,0.2); display: flex !important; align-items: center; justify-content: center; font-size: 16px !important; font-weight: bold; color: var(--primary-color) !important; transition: all 0.2s ease; text-indent: -9999px !important; overflow: hidden !important; font-size: 0 !important; } jmexpander:hover { background-color: var(--primary-color) !important; color: white !important; transform: scale(1.1); } /* Custom icons for expander instead of +/- */ jmexpander.expand { background-image: url('data:image/svg+xml;utf8,') !important; background-position: center !important; background-repeat: no-repeat !important; background-size: 12px !important; } jmexpander.collapse { background-image: url('data:image/svg+xml;utf8,') !important; background-position: center !important; background-repeat: no-repeat !important; background-size: 12px !important; } jmexpander.expand:hover, jmexpander.collapse:hover { background-color: var(--primary-color) !important; background-image: url('data:image/svg+xml;utf8,') !important; background-size: 12px !important; } jmexpander.collapse:hover { background-image: url('data:image/svg+xml;utf8,') !important; } /* Video Close Button */ .video-close-button { position: absolute; top: 1rem; right: 1rem; width: 36px; height: 36px; border-radius: 50%; background-color: var(--surface-color); color: var(--text-primary); border: none; display: flex; align-items: center; justify-content: center; cursor: pointer; box-shadow: var(--shadow-sm); transition: all 0.2s ease; z-index: 10; } .video-close-button:hover { background-color: #f8f9fa; color: var(--primary-color); box-shadow: var(--shadow-md); } /* Line style improvements */ jmnode.root { background-color: var(--primary-color) !important; color: white !important; } jmnode.root jmexpander { background-color: white !important; } /* Connection lines styling */ jmexpander::before { border-color: var(--primary-color) !important; } /* Node Context Menu */ .node-context-menu { position: absolute; background-color: var(--surface-color); border-radius: var(--radius-md); box-shadow: var(--shadow-lg); padding: 0.5rem 0; z-index: 2000; min-width: 180px; font-size: 0.9rem; opacity: 0; transform: scale(0.95); transform-origin: top left; transition: opacity 0.15s ease, transform 0.15s ease; pointer-events: none; } .node-context-menu.visible { opacity: 1; transform: scale(1); pointer-events: auto; } .context-menu-item { padding: 0.6rem 1rem; display: flex; align-items: center; gap: 0.75rem; cursor: pointer; transition: all 0.15s ease; color: var(--text-primary); } .context-menu-item:hover { background-color: rgba(52, 152, 219, 0.1); color: var(--primary-color); } .context-menu-item i { width: 16px; text-align: center; } .context-menu-separator { height: 1px; background-color: var(--border-color); margin: 0.5rem 0; } /* Node color picker */ .color-picker-container { padding: 0.5rem 1rem; } .color-picker-label { display: block; margin-bottom: 0.5rem; font-size: 0.9rem; color: var(--text-secondary); } .color-options { display: flex; flex-wrap: wrap; gap: 0.5rem; } .color-option { width: 24px; height: 24px; border-radius: 50%; cursor: pointer; position: relative; transition: transform 0.2s ease; } .color-option:hover { transform: scale(1.15); } .color-option.selected::after { content: ''; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); width: 10px; height: 10px; border-radius: 50%; background-color: white; } /* Node edit input */ .node-edit-input { position: absolute; z-index: 2000; padding: 8px 12px; border: 2px solid var(--primary-color); border-radius: var(--radius-md); box-shadow: var(--shadow-md); font-family: inherit; font-size: 14px; background-color: var(--surface-color); width: auto; min-width: 150px; } /* Custom node colors */ jmnode.node-blue { background-color: #3498db !important; color: white !important; } jmnode.node-green { background-color: #2ecc71 !important; color: white !important; } jmnode.node-red { background-color: #e74c3c !important; color: white !important; } jmnode.node-purple { background-color: #9b59b6 !important; color: white !important; } jmnode.node-orange { background-color: #e67e22 !important; color: white !important; } jmnode.node-yellow { background-color: #f1c40f !important; color: #34495e !important; } jmnode.node-teal { background-color: #1abc9c !important; color: white !important; } jmnode.node-gray { background-color: #95a5a6 !important; color: white !important; } /* Node hover states with color indication */ jmnode.node-blue:hover, jmnode.node-green:hover, jmnode.node-red:hover, jmnode.node-purple:hover, jmnode.node-orange:hover, jmnode.node-yellow:hover, jmnode.node-teal:hover, jmnode.node-gray:hover { filter: brightness(1.1); } /* Floating Action Button (FAB) */ .fab-container { position: fixed; bottom: 2rem; right: 2rem; z-index: 999; display: flex; flex-direction: column-reverse; align-items: center; gap: 0.75rem; } .fab-button { width: 3.5rem; height: 3.5rem; border-radius: 50%; background-color: var(--primary-color); color: white; border: none; box-shadow: var(--shadow-lg); display: flex; align-items: center; justify-content: center; font-size: 1.5rem; cursor: pointer; transition: all 0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275); } .fab-button:hover { transform: scale(1.1); background-color: var(--primary-dark); } .fab-button:active { transform: scale(0.95); } .fab-options { display: flex; flex-direction: column; gap: 0.75rem; opacity: 0; pointer-events: none; transform: translateY(1rem); transition: all 0.3s ease; } .fab-container.active .fab-options { opacity: 1; pointer-events: auto; transform: translateY(0); } .fab-container.active .fab-button { transform: rotate(45deg); background-color: var(--accent-color); } .fab-option { width: 2.5rem; height: 2.5rem; border-radius: 50%; background-color: var(--surface-color); color: var(--text-primary); border: none; box-shadow: var(--shadow-md); display: flex; align-items: center; justify-content: center; font-size: 1rem; cursor: pointer; transition: all 0.2s ease; position: relative; } .fab-option:hover { transform: scale(1.1); color: var(--primary-color); } .fab-option:hover::after { content: attr(title); position: absolute; right: calc(100% + 0.75rem); background-color: var(--surface-color); color: var(--text-primary); padding: 0.25rem 0.5rem; border-radius: var(--radius-sm); font-size: 0.8rem; white-space: nowrap; box-shadow: var(--shadow-sm); } /* Results Gallery */ .gallery-container { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: rgba(0, 0, 0, 0.5); z-index: 2000; display: flex; align-items: center; justify-content: center; opacity: 0; pointer-events: none; transition: opacity 0.3s ease; } .gallery-container.active { opacity: 1; pointer-events: auto; } .gallery-content { width: 90%; max-width: 1200px; height: 80%; background-color: var(--surface-color); border-radius: var(--radius-lg); box-shadow: var(--shadow-lg); overflow: hidden; display: flex; flex-direction: column; transform: scale(0.95); transition: transform 0.3s ease; } .gallery-container.active .gallery-content { transform: scale(1); } .gallery-header { display: flex; align-items: center; justify-content: space-between; padding: 1rem 1.5rem; border-bottom: 1px solid var(--border-color); } .gallery-header h2 { margin: 0; font-size: 1.5rem; color: var(--text-primary); } .gallery-close { width: 2rem; height: 2rem; border-radius: 50%; background-color: transparent; color: var(--text-primary); border: none; display: flex; align-items: center; justify-content: center; font-size: 1.2rem; cursor: pointer; transition: all 0.2s ease; } .gallery-close:hover { background-color: rgba(0, 0, 0, 0.1); color: var(--primary-color); } .gallery-content { padding: 1.5rem; overflow-y: auto; display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: 1.5rem; } .gallery-item { border-radius: var(--radius-md); overflow: hidden; box-shadow: var(--shadow-md); background-color: var(--background-color); transition: all 0.2s ease; cursor: pointer; aspect-ratio: 16/9; position: relative; } .gallery-item:hover { transform: translateY(-0.5rem); box-shadow: var(--shadow-lg); } .gallery-item-preview { width: 100%; height: 75%; object-fit: cover; background-color: var(--primary-color); opacity: 0.8; } .gallery-item-info { padding: 0.75rem; display: flex; flex-direction: column; } .gallery-item-title { font-weight: 600; font-size: 1rem; color: var(--text-primary); margin-bottom: 0.25rem; display: -webkit-box; -webkit-line-clamp: 1; -webkit-box-orient: vertical; overflow: hidden; } .gallery-item-date { font-size: 0.8rem; color: var(--text-secondary); } /* Dark Mode Adjustments for existing components */ [data-theme="dark"] .app-header { background-color: var(--surface-color); border-bottom: 1px solid var(--border-color); } [data-theme="dark"] .logo-icon { color: var(--primary-color); } [data-theme="dark"] .transcription-content, [data-theme="dark"] .topics-content { background-color: #2d3748; border: 1px solid var(--border-color); } [data-theme="dark"] .progress-container { background-color: #2d3748; } [data-theme="dark"] .topic { background-color: #2d3748; border-left: 4px solid var(--primary-color); } [data-theme="dark"] jmnode { background-color: #2d3748 !important; color: var(--text-primary) !important; } [data-theme="dark"] jmnode.root { background-color: var(--primary-color) !important; color: white !important; } [data-theme="dark"] jmexpander { background-color: #4a5568 !important; } [data-theme="dark"] .node-context-menu { background-color: #2d3748; border: 1px solid var(--border-color); } [data-theme="dark"] .context-menu-separator { background-color: var(--border-color); } [data-theme="dark"] .context-menu-item:hover { background-color: #4a5568; } /* 1. Elevated Card Design System */ .card { background-color: var(--surface-color); border-radius: var(--radius-lg); box-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.05), 0 8px 10px -6px rgba(0, 0, 0, 0.02); overflow: hidden; border: 1px solid rgba(0, 0, 0, 0.04); transition: all 0.3s ease; } .card:hover { box-shadow: 0 15px 30px -5px rgba(0, 0, 0, 0.07), 0 10px 15px -3px rgba(0, 0, 0, 0.04); transform: translateY(-2px); } .card-header { padding: 1.25rem 1.5rem; border-bottom: 1px solid var(--border-color); display: flex; align-items: center; justify-content: space-between; } .card-title { font-family: var(--font-heading); font-weight: 600; font-size: 1.2rem; margin: 0; display: flex; align-items: center; gap: 0.75rem; color: var(--text-primary); } .card-title i { color: var(--primary-color); font-size: 1.3rem; } .card-body { padding: 1.5rem; } .card-footer { padding: 1.25rem 1.5rem; border-top: 1px solid var(--border-color); background-color: rgba(0, 0, 0, 0.01); } /* 2. Micro-Interactions & Transitions */ @keyframes fadeIn { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } } @keyframes pulse { 0% { transform: scale(1); } 50% { transform: scale(1.05); } 100% { transform: scale(1); } } @keyframes shimmer { 0% { background-position: -1000px 0; } 100% { background-position: 1000px 0; } } .animate-fade-in { animation: fadeIn 0.4s ease forwards; } .animate-pulse { animation: pulse 2s infinite ease-in-out; } /* 4. Custom Video Player Controls */ .video-preview { margin: 2rem 0; border-radius: var(--radius-md); overflow: hidden; background-color: #000; position: relative; box-shadow: 0 15px 25px -5px rgba(0, 0, 0, 0.15), 0 10px 10px -5px rgba(0, 0, 0, 0.05); } .video-preview::after { content: ''; position: absolute; bottom: 0; left: 0; right: 0; height: 90px; background: linear-gradient(to top, rgba(0,0,0,0.5) 0%, transparent 100%); pointer-events: none; opacity: 0; transition: opacity 0.3s ease; } .video-preview:hover::after { opacity: 1; } .video-controls { position: absolute; bottom: 0; left: 0; width: 100%; padding: 1rem; display: flex; align-items: center; gap: 1rem; z-index: 10; opacity: 0; transform: translateY(10px); transition: all 0.3s ease; } .video-preview:hover .video-controls { opacity: 1; transform: translateY(0); } .video-progress { flex: 1; height: 4px; background-color: rgba(255, 255, 255, 0.2); border-radius: 2px; overflow: hidden; cursor: pointer; position: relative; } .video-progress-bar { height: 100%; width: 0; background-color: var(--primary-color); border-radius: 2px; position: relative; } .video-progress-handle { position: absolute; right: -6px; top: 50%; transform: translateY(-50%); width: 12px; height: 12px; border-radius: 50%; background-color: white; box-shadow: 0 0 5px rgba(0, 0, 0, 0.3); opacity: 0; transition: opacity 0.2s ease; } .video-progress:hover .video-progress-handle { opacity: 1; } .video-control-button { background: transparent; border: none; color: white; cursor: pointer; width: 36px; height: 36px; display: flex; align-items: center; justify-content: center; border-radius: 50%; transition: all 0.2s ease; } .video-control-button:hover { background-color: rgba(255, 255, 255, 0.2); } .video-time { color: white; font-family: var(--font-mono); font-size: 0.85rem; min-width: 50px; text-align: center; } .video-preview.playing .video-play-icon { display: none; } .video-preview:not(.playing) .video-pause-icon { display: none; } /* 5. Streamlined Action Buttons */ .action-button { padding: 0.9rem 1.8rem; border: none; border-radius: var(--radius-md); font-size: 1rem; font-weight: 600; font-family: var(--font-heading); cursor: pointer; display: flex; align-items: center; justify-content: center; gap: 0.75rem; transition: all 0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275); position: relative; overflow: hidden; box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06); } .action-button::before { content: ''; position: absolute; top: 0; left: 0; width: 100%; height: 100%; background: linear-gradient(120deg, rgba(255,255,255,0) 30%, rgba(255,255,255,0.3) 50%, rgba(255,255,255,0) 70%); transform: translateX(-100%); transition: all 0.6s ease; } .action-button:hover::before { transform: translateX(100%); } .action-button i { font-size: 1.1rem; transition: transform 0.3s ease; } .action-button:hover i { transform: scale(1.2); } .action-button:active { transform: translateY(2px); box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05); } .action-button.primary { background: linear-gradient(135deg, var(--primary-color), var(--primary-dark)); color: white; } .action-button.primary:hover { background: linear-gradient(135deg, var(--primary-dark), var(--primary-color)); box-shadow: 0 10px 15px -3px rgba(52, 152, 219, 0.3), 0 4px 6px -2px rgba(52, 152, 219, 0.15); } .action-button.secondary { background: linear-gradient(135deg, var(--secondary-color), var(--secondary-dark)); color: white; } .action-button.secondary:hover { background: linear-gradient(135deg, var(--secondary-dark), var(--secondary-color)); box-shadow: 0 10px 15px -3px rgba(46, 204, 113, 0.3), 0 4px 6px -2px rgba(46, 204, 113, 0.15); } .action-button.disabled { opacity: 0.7; cursor: not-allowed; background: #95a5a6; } .action-button.disabled::before { display: none; } .action-button.processing { position: relative; overflow: hidden; } .action-button.processing::after { content: ""; position: absolute; top: 0; left: 0; width: 100%; height: 100%; background: linear-gradient(90deg, transparent 25%, rgba(255, 255, 255, 0.3) 50%, transparent 75%); background-size: 200% 100%; animation: shimmer 1.5s infinite linear; } /* 6. Content Container Improvements */ .content-container { background-color: var(--surface-color); border-radius: var(--radius-lg); overflow: hidden; box-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.05), 0 8px 10px -6px rgba(0, 0, 0, 0.02); display: flex; flex-direction: column; height: 100%; transition: all 0.3s ease; border: 1px solid var(--border-color); } .content-header { padding: 1.25rem 1.5rem; border-bottom: 1px solid var(--border-color); display: flex; align-items: center; gap: 0.75rem; } .content-title { font-family: var(--font-heading); font-weight: 600; font-size: 1.2rem; margin: 0; color: var(--text-primary); display: flex; align-items: center; gap: 0.75rem; } .content-title i { color: var(--primary-color); font-size: 1.3rem; } .content-body { flex: 1; overflow: hidden; position: relative; } .content-scroll { height: 100%; overflow-y: auto; padding: 1.5rem; scrollbar-width: thin; scrollbar-color: var(--border-color) transparent; } .content-scroll::-webkit-scrollbar { width: 6px; } .content-scroll::-webkit-scrollbar-track { background: transparent; } .content-scroll::-webkit-scrollbar-thumb { background-color: var(--border-color); border-radius: 20px; } .empty-state { display: flex; flex-direction: column; align-items: center; justify-content: center; padding: 3rem 1.5rem; color: var(--text-secondary); text-align: center; } .empty-state i { font-size: 3rem; margin-bottom: 1rem; opacity: 0.5; } .empty-state-title { font-weight: 600; margin-bottom: 0.5rem; color: var(--text-primary); } .empty-state-description { max-width: 300px; margin: 0 auto; font-size: 0.95rem; } /* 7. Status/Progress Visualization */ .status-progress { margin-top: 1.5rem; display: flex; flex-direction: column; gap: 0.75rem; } .status-text { display: flex; align-items: center; gap: 0.5rem; color: var(--text-secondary); font-size: 0.95rem; } .status-text i { color: var(--primary-color); } .progress-container { background-color: var(--background-color); padding: 1.5rem; border-radius: var(--radius-md); overflow: hidden; } .progress-steps { display: flex; margin-bottom: 1rem; position: relative; } .progress-step { flex: 1; text-align: center; position: relative; padding-bottom: 1.5rem; } .progress-step-indicator { width: 24px; height: 24px; border-radius: 50%; background-color: var(--surface-color); border: 2px solid var(--border-color); margin: 0 auto 0.5rem; display: flex; align-items: center; justify-content: center; position: relative; z-index: 2; transition: all 0.3s ease; } .progress-step-line { position: absolute; top: 12px; left: 0; right: 0; height: 2px; background-color: var(--border-color); z-index: 1; } .progress-step-icon { color: var(--text-secondary); font-size: 0.8rem; opacity: 0; transition: all 0.3s ease; } .progress-step-label { font-size: 0.8rem; font-weight: 500; color: var(--text-secondary); transition: all 0.3s ease; } .progress-step.active .progress-step-indicator { background-color: var(--primary-color); border-color: var(--primary-color); transform: scale(1.1); box-shadow: 0 0 0 4px rgba(52, 152, 219, 0.2); } .progress-step.active .progress-step-icon { opacity: 1; color: white; } .progress-step.active .progress-step-label { color: var(--primary-color); font-weight: 600; } .progress-step.completed .progress-step-indicator { background-color: var(--primary-color); border-color: var(--primary-color); } .progress-step.completed .progress-step-icon { opacity: 1; color: white; } .progress-step.completed + .progress-step .progress-step-line, .progress-step.active + .progress-step .progress-step-line { background: linear-gradient(to right, var(--primary-color) 0%, var(--border-color) 100%); } .progress-step.completed .progress-step-line { background-color: var(--primary-color); } .progress-bar { height: 6px; background-color: var(--border-color); border-radius: 3px; overflow: hidden; margin: 0.5rem 0; } .progress-bar-fill { height: 100%; background: linear-gradient(90deg, var(--primary-color), var(--primary-dark)); border-radius: 3px; transition: width 0.3s ease; position: relative; overflow: hidden; } .progress-bar-fill::after { content: ""; position: absolute; top: 0; left: 0; right: 0; bottom: 0; background: linear-gradient( 90deg, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.4) 50%, rgba(255, 255, 255, 0) 100% ); animation: shimmer 2s infinite linear; transform: translateX(-100%); } /* Dark mode adjustments */ [data-theme="dark"] .content-container { border-color: var(--border-color); } [data-theme="dark"] .progress-container { background-color: #2d3748; } [data-theme="dark"] .progress-step-indicator { background-color: #4a5568; border-color: #4a5568; } [data-theme="dark"] .progress-step-line { background-color: #4a5568; } [data-theme="dark"] .progress-bar { background-color: #4a5568; } .transcription-content { width: 100%; line-height: 1.6; } .transcription-content p { margin-bottom: 8px; padding: 8px; border-radius: var(--radius-sm); transition: background-color 0.2s ease; } .transcription-content p:hover { background-color: rgba(52, 152, 219, 0.1); }