Spaces:
Sleeping
Sleeping
| /* Reset and Base Styles */ | |
| * { | |
| margin: 0; | |
| padding: 0; | |
| box-sizing: border-box; | |
| } | |
| :root { | |
| --primary-color: #0066cc; | |
| --primary-hover: #0052a3; | |
| --secondary-color: #6c757d; | |
| --success-color: #28a745; | |
| --danger-color: #dc3545; | |
| --warning-color: #ffc107; | |
| --info-color: #17a2b8; | |
| --bg-primary: #0a0e1a; | |
| --bg-secondary: #1a1f2e; | |
| --bg-tertiary: #242938; | |
| --bg-card: rgba(26, 31, 46, 0.8); | |
| --bg-overlay: rgba(0, 0, 0, 0.7); | |
| --text-primary: #ffffff; | |
| --text-secondary: #b8c1d3; | |
| --text-muted: #6c757d; | |
| --border-color: rgba(255, 255, 255, 0.1); | |
| --border-active: rgba(0, 102, 204, 0.5); | |
| --shadow-sm: 0 2px 4px rgba(0, 0, 0, 0.1); | |
| --shadow-md: 0 4px 12px rgba(0, 0, 0, 0.15); | |
| --shadow-lg: 0 8px 24px rgba(0, 0, 0, 0.25); | |
| --shadow-xl: 0 12px 36px rgba(0, 0, 0, 0.35); | |
| --radius-sm: 6px; | |
| --radius-md: 8px; | |
| --radius-lg: 12px; | |
| --radius-xl: 16px; | |
| --transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); | |
| --transition-fast: all 0.15s ease; | |
| } | |
| body { | |
| font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; | |
| background: linear-gradient(135deg, var(--bg-primary) 0%, #0f1419 50%, var(--bg-secondary) 100%); | |
| color: var(--text-primary); | |
| line-height: 1.6; | |
| min-height: 100vh; | |
| overflow-x: hidden; | |
| font-feature-settings: 'kern' 1, 'liga' 1; | |
| } | |
| /* App Container */ | |
| .app-container { | |
| min-height: 100vh; | |
| display: flex; | |
| flex-direction: column; | |
| } | |
| /* Header */ | |
| .header { | |
| background: var(--bg-card); | |
| backdrop-filter: blur(20px); | |
| border-bottom: 1px solid var(--border-color); | |
| padding: 1rem 2rem; | |
| position: sticky; | |
| top: 0; | |
| z-index: 100; | |
| } | |
| .header-content { | |
| display: flex; | |
| justify-content: space-between; | |
| align-items: center; | |
| max-width: 1400px; | |
| margin: 0 auto; | |
| } | |
| .logo-section { | |
| display: flex; | |
| align-items: center; | |
| gap: 1rem; | |
| } | |
| .logo-icon { | |
| font-size: 2rem; | |
| background: linear-gradient(135deg, var(--primary-color), var(--info-color)); | |
| background-clip: text; | |
| -webkit-background-clip: text; | |
| -webkit-text-fill-color: transparent; | |
| } | |
| .header h1 { | |
| font-size: 1.5rem; | |
| font-weight: 700; | |
| margin: 0; | |
| background: linear-gradient(135deg, var(--primary-color), var(--info-color)); | |
| background-clip: text; | |
| -webkit-background-clip: text; | |
| -webkit-text-fill-color: transparent; | |
| } | |
| .subtitle { | |
| font-size: 0.875rem; | |
| color: var(--text-secondary); | |
| margin: 0; | |
| } | |
| .header-stats { | |
| display: flex; | |
| gap: 2rem; | |
| } | |
| .stat-item { | |
| text-align: center; | |
| } | |
| .stat-label { | |
| display: block; | |
| font-size: 0.75rem; | |
| color: var(--text-muted); | |
| text-transform: uppercase; | |
| letter-spacing: 0.5px; | |
| margin-bottom: 0.25rem; | |
| } | |
| .stat-value { | |
| display: block; | |
| font-size: 1.25rem; | |
| font-weight: 600; | |
| color: var(--text-primary); | |
| } | |
| /* Main Content */ | |
| .main-content { | |
| flex: 1; | |
| display: grid; | |
| grid-template-columns: 1fr 350px; | |
| gap: 2rem; | |
| padding: 2rem; | |
| max-width: 1400px; | |
| margin: 0 auto; | |
| width: 100%; | |
| } | |
| .video-section { | |
| display: flex; | |
| flex-direction: column; | |
| gap: 1.5rem; | |
| } | |
| /* Video Container */ | |
| .video-container { | |
| position: relative; | |
| background: var(--bg-tertiary); | |
| border-radius: var(--radius-xl); | |
| overflow: hidden; | |
| box-shadow: var(--shadow-xl); | |
| border: 1px solid var(--border-color); | |
| transition: var(--transition); | |
| } | |
| .video-container:hover { | |
| box-shadow: var(--shadow-xl), 0 0 0 1px var(--border-active); | |
| } | |
| #webcam { | |
| width: 100%; | |
| height: 480px; | |
| object-fit: cover; | |
| display: block; | |
| background: #000; | |
| } | |
| /* Video Overlay */ | |
| .video-overlay { | |
| position: absolute; | |
| inset: 0; | |
| pointer-events: none; | |
| display: flex; | |
| flex-direction: column; | |
| justify-content: space-between; | |
| } | |
| .overlay-top { | |
| display: flex; | |
| justify-content: space-between; | |
| align-items: flex-start; | |
| padding: 1rem; | |
| } | |
| .recording-indicator { | |
| display: flex; | |
| align-items: center; | |
| gap: 0.5rem; | |
| background: var(--bg-overlay); | |
| backdrop-filter: blur(10px); | |
| padding: 0.5rem 1rem; | |
| border-radius: var(--radius-lg); | |
| color: var(--danger-color); | |
| font-size: 0.875rem; | |
| font-weight: 600; | |
| opacity: 0; | |
| transition: var(--transition); | |
| } | |
| .recording-indicator.active { | |
| opacity: 1; | |
| } | |
| .recording-dot { | |
| width: 8px; | |
| height: 8px; | |
| background: var(--danger-color); | |
| border-radius: 50%; | |
| animation: pulse 2s infinite; | |
| } | |
| @keyframes pulse { | |
| 0%, 100% { opacity: 1; } | |
| 50% { opacity: 0.5; } | |
| } | |
| .quality-indicator { | |
| background: var(--bg-overlay); | |
| backdrop-filter: blur(10px); | |
| padding: 0.25rem 0.75rem; | |
| border-radius: var(--radius-md); | |
| font-size: 0.75rem; | |
| font-weight: 600; | |
| color: var(--success-color); | |
| } | |
| /* Caption Overlay */ | |
| .caption-overlay { | |
| padding: 2rem; | |
| background: linear-gradient( | |
| to top, | |
| var(--bg-overlay) 0%, | |
| rgba(0, 0, 0, 0.4) 70%, | |
| transparent 100% | |
| ); | |
| backdrop-filter: blur(10px); | |
| } | |
| .caption-content { | |
| max-width: 600px; | |
| } | |
| #caption-text { | |
| font-size: 1.5rem; | |
| font-weight: 600; | |
| line-height: 1.4; | |
| margin-bottom: 1rem; | |
| text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.8); | |
| min-height: 2.1rem; | |
| transition: var(--transition); | |
| } | |
| .caption-metadata { | |
| display: flex; | |
| align-items: center; | |
| gap: 1rem; | |
| font-size: 0.875rem; | |
| } | |
| .confidence-bar { | |
| flex: 1; | |
| height: 6px; | |
| background: rgba(255, 255, 255, 0.2); | |
| border-radius: 3px; | |
| overflow: hidden; | |
| } | |
| .confidence-fill { | |
| height: 100%; | |
| background: linear-gradient(90deg, var(--danger-color), var(--warning-color), var(--success-color)); | |
| border-radius: 3px; | |
| transition: width 0.5s ease; | |
| width: 0%; | |
| } | |
| .confidence-text { | |
| color: var(--text-secondary); | |
| font-weight: 600; | |
| min-width: 40px; | |
| } | |
| .timestamp { | |
| color: var(--text-muted); | |
| font-size: 0.75rem; | |
| } | |
| /* Controls */ | |
| .controls-section { | |
| display: flex; | |
| justify-content: space-between; | |
| align-items: center; | |
| gap: 1rem; | |
| flex-wrap: wrap; | |
| } | |
| .main-controls, .advanced-controls { | |
| display: flex; | |
| gap: 1rem; | |
| } | |
| /* Button Styles */ | |
| .btn { | |
| display: inline-flex; | |
| align-items: center; | |
| gap: 0.5rem; | |
| padding: 0.75rem 1.5rem; | |
| border: none; | |
| border-radius: var(--radius-md); | |
| font-size: 0.875rem; | |
| font-weight: 600; | |
| cursor: pointer; | |
| transition: var(--transition); | |
| text-decoration: none; | |
| white-space: nowrap; | |
| position: relative; | |
| overflow: hidden; | |
| } | |
| .btn::before { | |
| content: ''; | |
| position: absolute; | |
| top: 0; | |
| left: -100%; | |
| width: 100%; | |
| height: 100%; | |
| background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.1), transparent); | |
| transition: left 0.5s ease; | |
| } | |
| .btn:hover::before { | |
| left: 100%; | |
| } | |
| .btn-primary { | |
| background: linear-gradient(135deg, var(--primary-color), var(--primary-hover)); | |
| color: white; | |
| box-shadow: var(--shadow-md); | |
| } | |
| .btn-primary:hover:not(:disabled) { | |
| transform: translateY(-2px); | |
| box-shadow: var(--shadow-lg); | |
| } | |
| .btn-secondary { | |
| background: linear-gradient(135deg, var(--danger-color), #b02e3c); | |
| color: white; | |
| box-shadow: var(--shadow-md); | |
| } | |
| .btn-secondary:hover:not(:disabled) { | |
| transform: translateY(-2px); | |
| box-shadow: var(--shadow-lg); | |
| } | |
| .btn-outline { | |
| background: var(--bg-card); | |
| color: var(--text-secondary); | |
| border: 1px solid var(--border-color); | |
| } | |
| .btn-outline:hover { | |
| background: var(--bg-tertiary); | |
| color: var(--text-primary); | |
| border-color: var(--border-active); | |
| } | |
| .btn:disabled { | |
| opacity: 0.5; | |
| cursor: not-allowed; | |
| transform: none ; | |
| } | |
| .btn-icon { | |
| font-size: 1rem; | |
| } | |
| /* Sidebar */ | |
| .sidebar { | |
| display: flex; | |
| flex-direction: column; | |
| gap: 1.5rem; | |
| } | |
| .metrics-panel, .history-panel, .system-panel { | |
| background: var(--bg-card); | |
| backdrop-filter: blur(20px); | |
| border: 1px solid var(--border-color); | |
| border-radius: var(--radius-lg); | |
| padding: 1.5rem; | |
| box-shadow: var(--shadow-md); | |
| } | |
| .metrics-panel h3, .history-panel h3, .system-panel h3 { | |
| font-size: 1.125rem; | |
| font-weight: 600; | |
| margin-bottom: 1rem; | |
| color: var(--text-primary); | |
| display: flex; | |
| align-items: center; | |
| gap: 0.5rem; | |
| } | |
| /* Metrics Grid */ | |
| .metrics-grid { | |
| display: grid; | |
| grid-template-columns: 1fr 1fr; | |
| gap: 1rem; | |
| } | |
| .metric-item { | |
| text-align: center; | |
| padding: 1rem; | |
| background: var(--bg-tertiary); | |
| border-radius: var(--radius-md); | |
| border: 1px solid var(--border-color); | |
| transition: var(--transition); | |
| } | |
| .metric-item:hover { | |
| border-color: var(--border-active); | |
| transform: translateY(-2px); | |
| } | |
| .metric-value { | |
| font-size: 1.5rem; | |
| font-weight: 700; | |
| color: var(--primary-color); | |
| margin-bottom: 0.25rem; | |
| } | |
| .metric-label { | |
| font-size: 0.75rem; | |
| color: var(--text-muted); | |
| text-transform: uppercase; | |
| letter-spacing: 0.5px; | |
| } | |
| /* History Panel */ | |
| .history-list { | |
| max-height: 300px; | |
| overflow-y: auto; | |
| display: flex; | |
| flex-direction: column; | |
| gap: 0.75rem; | |
| } | |
| .history-list::-webkit-scrollbar { | |
| width: 6px; | |
| } | |
| .history-list::-webkit-scrollbar-track { | |
| background: var(--bg-tertiary); | |
| border-radius: 3px; | |
| } | |
| .history-list::-webkit-scrollbar-thumb { | |
| background: var(--border-color); | |
| border-radius: 3px; | |
| } | |
| .history-list::-webkit-scrollbar-thumb:hover { | |
| background: var(--border-active); | |
| } | |
| .history-item { | |
| padding: 1rem; | |
| background: var(--bg-tertiary); | |
| border-radius: var(--radius-md); | |
| border: 1px solid var(--border-color); | |
| transition: var(--transition); | |
| } | |
| .history-item:hover { | |
| border-color: var(--border-active); | |
| } | |
| .history-text { | |
| font-size: 0.875rem; | |
| margin-bottom: 0.5rem; | |
| line-height: 1.4; | |
| } | |
| .history-meta { | |
| display: flex; | |
| justify-content: space-between; | |
| align-items: center; | |
| font-size: 0.75rem; | |
| color: var(--text-muted); | |
| } | |
| .history-confidence { | |
| padding: 0.25rem 0.5rem; | |
| background: var(--success-color); | |
| color: white; | |
| border-radius: var(--radius-sm); | |
| font-weight: 600; | |
| } | |
| /* System Info */ | |
| .system-info { | |
| display: flex; | |
| flex-direction: column; | |
| gap: 0.75rem; | |
| } | |
| .info-item { | |
| display: flex; | |
| justify-content: space-between; | |
| align-items: center; | |
| padding: 0.75rem; | |
| background: var(--bg-tertiary); | |
| border-radius: var(--radius-md); | |
| border: 1px solid var(--border-color); | |
| } | |
| .info-label { | |
| font-weight: 600; | |
| color: var(--text-secondary); | |
| } | |
| .info-value { | |
| color: var(--text-primary); | |
| font-weight: 500; | |
| } | |
| /* Modal */ | |
| .modal { | |
| position: fixed; | |
| inset: 0; | |
| background: rgba(0, 0, 0, 0.8); | |
| backdrop-filter: blur(10px); | |
| display: none; | |
| align-items: center; | |
| justify-content: center; | |
| z-index: 1000; | |
| opacity: 0; | |
| transition: var(--transition); | |
| } | |
| .modal.active { | |
| display: flex; | |
| opacity: 1; | |
| } | |
| .modal-content { | |
| background: var(--bg-secondary); | |
| border-radius: var(--radius-xl); | |
| border: 1px solid var(--border-color); | |
| box-shadow: var(--shadow-xl); | |
| width: 90%; | |
| max-width: 500px; | |
| max-height: 80vh; | |
| overflow: hidden; | |
| transform: translateY(-20px); | |
| transition: var(--transition); | |
| } | |
| .modal.active .modal-content { | |
| transform: translateY(0); | |
| } | |
| .modal-header { | |
| padding: 1.5rem; | |
| border-bottom: 1px solid var(--border-color); | |
| display: flex; | |
| justify-content: space-between; | |
| align-items: center; | |
| } | |
| .modal-header h3 { | |
| font-size: 1.25rem; | |
| font-weight: 600; | |
| } | |
| .modal-close { | |
| background: none; | |
| border: none; | |
| color: var(--text-muted); | |
| font-size: 1.5rem; | |
| cursor: pointer; | |
| padding: 0; | |
| transition: var(--transition); | |
| } | |
| .modal-close:hover { | |
| color: var(--text-primary); | |
| } | |
| .modal-body { | |
| padding: 1.5rem; | |
| max-height: 400px; | |
| overflow-y: auto; | |
| } | |
| .modal-body::-webkit-scrollbar { | |
| width: 6px; | |
| } | |
| .modal-body::-webkit-scrollbar-track { | |
| background: var(--bg-tertiary); | |
| border-radius: 3px; | |
| } | |
| .modal-body::-webkit-scrollbar-thumb { | |
| background: var(--border-color); | |
| border-radius: 3px; | |
| } | |
| .modal-body::-webkit-scrollbar-thumb:hover { | |
| background: var(--border-active); | |
| } | |
| .modal-footer { | |
| padding: 1.5rem; | |
| border-top: 1px solid var(--border-color); | |
| display: flex; | |
| justify-content: flex-end; | |
| gap: 1rem; | |
| } | |
| /* Settings */ | |
| .setting-group { | |
| margin-bottom: 1.5rem; | |
| } | |
| .setting-group:last-child { | |
| margin-bottom: 0; | |
| } | |
| .setting-group label { | |
| display: block; | |
| font-weight: 600; | |
| margin-bottom: 0.5rem; | |
| color: var(--text-primary); | |
| } | |
| .setting-group select, | |
| .setting-group input[type="range"] { | |
| width: 100%; | |
| padding: 0.75rem; | |
| background: var(--bg-tertiary); | |
| border: 1px solid var(--border-color); | |
| border-radius: var(--radius-md); | |
| color: var(--text-primary); | |
| transition: var(--transition); | |
| } | |
| .setting-group select:focus, | |
| .setting-group input[type="range"]:focus { | |
| outline: none; | |
| border-color: var(--border-active); | |
| } | |
| .setting-group select { | |
| appearance: none; | |
| background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='m6 8 4 4 4-4'/%3e%3c/svg%3e"); | |
| background-position: right 0.5rem center; | |
| background-repeat: no-repeat; | |
| background-size: 1.5em 1.5em; | |
| padding-right: 2.5rem; | |
| } | |
| .setting-group input[type="range"] { | |
| /* -webkit-appearance: none; */ | |
| height: 8px; | |
| border-radius: 4px; | |
| background: var(--bg-tertiary); | |
| outline: none; | |
| } | |
| .setting-group input[type="range"]::-webkit-slider-thumb { | |
| -webkit-appearance: none; | |
| appearance: none; | |
| width: 20px; | |
| height: 20px; | |
| border-radius: 50%; | |
| background: var(--primary-color); | |
| cursor: pointer; | |
| border: 2px solid white; | |
| box-shadow: var(--shadow-sm); | |
| } | |
| .setting-group input[type="range"]::-moz-range-thumb { | |
| width: 20px; | |
| height: 20px; | |
| border-radius: 50%; | |
| background: var(--primary-color); | |
| cursor: pointer; | |
| border: 2px solid white; | |
| box-shadow: var(--shadow-sm); | |
| } | |
| /* Toggle Switch */ | |
| .toggle-switch { | |
| position: relative; | |
| display: inline-block; | |
| width: 50px; | |
| height: 24px; | |
| } | |
| .toggle-switch input { | |
| opacity: 0; | |
| width: 0; | |
| height: 0; | |
| } | |
| .toggle-slider { | |
| position: absolute; | |
| cursor: pointer; | |
| top: 0; | |
| left: 0; | |
| right: 0; | |
| bottom: 0; | |
| background: var(--bg-tertiary); | |
| border: 1px solid var(--border-color); | |
| transition: var(--transition); | |
| border-radius: 24px; | |
| } | |
| .toggle-slider::before { | |
| position: absolute; | |
| content: ""; | |
| height: 18px; | |
| width: 18px; | |
| left: 2px; | |
| top: 2px; | |
| background: var(--text-muted); | |
| transition: var(--transition); | |
| border-radius: 50%; | |
| } | |
| .toggle-switch input:checked + .toggle-slider { | |
| background: var(--primary-color); | |
| border-color: var(--primary-color); | |
| } | |
| .toggle-switch input:checked + .toggle-slider::before { | |
| transform: translateX(26px); | |
| background: white; | |
| } | |
| /* Status Bar */ | |
| .status-bar { | |
| background: var(--bg-card); | |
| backdrop-filter: blur(20px); | |
| border-top: 1px solid var(--border-color); | |
| padding: 0.75rem 2rem; | |
| display: flex; | |
| justify-content: space-between; | |
| align-items: center; | |
| font-size: 0.875rem; | |
| } | |
| .status-left { | |
| color: var(--text-primary); | |
| font-weight: 500; | |
| } | |
| .status-right { | |
| color: var(--text-muted); | |
| } | |
| .keyboard-hint { | |
| font-size: 0.75rem; | |
| } | |
| /* Toast Notifications */ | |
| .toast-container { | |
| position: fixed; | |
| top: 2rem; | |
| right: 2rem; | |
| z-index: 1100; | |
| display: flex; | |
| flex-direction: column; | |
| gap: 0.5rem; | |
| pointer-events: none; | |
| } | |
| .toast { | |
| background: var(--bg-secondary); | |
| border: 1px solid var(--border-color); | |
| border-radius: var(--radius-lg); | |
| padding: 1rem 1.5rem; | |
| box-shadow: var(--shadow-lg); | |
| backdrop-filter: blur(20px); | |
| display: flex; | |
| align-items: center; | |
| gap: 0.75rem; | |
| min-width: 300px; | |
| transform: translateX(400px); | |
| transition: var(--transition); | |
| pointer-events: auto; | |
| } | |
| .toast.show { | |
| transform: translateX(0); | |
| } | |
| .toast.hide { | |
| transform: translateX(400px); | |
| opacity: 0; | |
| } | |
| .toast-icon { | |
| font-size: 1.25rem; | |
| flex-shrink: 0; | |
| } | |
| .toast-content { | |
| flex: 1; | |
| } | |
| .toast-title { | |
| font-weight: 600; | |
| font-size: 0.875rem; | |
| margin-bottom: 0.25rem; | |
| color: var(--text-primary); | |
| } | |
| .toast-message { | |
| font-size: 0.8125rem; | |
| color: var(--text-secondary); | |
| line-height: 1.4; | |
| } | |
| .toast-close { | |
| background: none; | |
| border: none; | |
| color: var(--text-muted); | |
| cursor: pointer; | |
| padding: 0; | |
| font-size: 1rem; | |
| transition: var(--transition); | |
| flex-shrink: 0; | |
| } | |
| .toast-close:hover { | |
| color: var(--text-primary); | |
| } | |
| /* Toast Types */ | |
| .toast.success { | |
| border-left: 4px solid var(--success-color); | |
| } | |
| .toast.success .toast-icon { | |
| color: var(--success-color); | |
| } | |
| .toast.error { | |
| border-left: 4px solid var(--danger-color); | |
| } | |
| .toast.error .toast-icon { | |
| color: var(--danger-color); | |
| } | |
| .toast.warning { | |
| border-left: 4px solid var(--warning-color); | |
| } | |
| .toast.warning .toast-icon { | |
| color: var(--warning-color); | |
| } | |
| .toast.info { | |
| border-left: 4px solid var(--info-color); | |
| } | |
| .toast.info .toast-icon { | |
| color: var(--info-color); | |
| } | |
| /* Loading States */ | |
| .loading { | |
| position: relative; | |
| overflow: hidden; | |
| } | |
| .loading::after { | |
| content: ''; | |
| position: absolute; | |
| top: 0; | |
| left: -100%; | |
| width: 100%; | |
| height: 100%; | |
| background: linear-gradient( | |
| 90deg, | |
| transparent, | |
| rgba(255, 255, 255, 0.1), | |
| transparent | |
| ); | |
| animation: loading-shimmer 2s infinite; | |
| } | |
| @keyframes loading-shimmer { | |
| 0% { left: -100%; } | |
| 100% { left: 100%; } | |
| } | |
| /* Responsive Design */ | |
| @media (max-width: 1200px) { | |
| .main-content { | |
| grid-template-columns: 1fr 300px; | |
| gap: 1.5rem; | |
| } | |
| .sidebar { | |
| gap: 1rem; | |
| } | |
| .metrics-panel, .history-panel, .system-panel { | |
| padding: 1rem; | |
| } | |
| } | |
| @media (max-width: 768px) { | |
| .header { | |
| padding: 1rem; | |
| } | |
| .header-content { | |
| flex-direction: column; | |
| gap: 1rem; | |
| align-items: flex-start; | |
| } | |
| .header-stats { | |
| gap: 1rem; | |
| width: 100%; | |
| justify-content: space-around; | |
| } | |
| .main-content { | |
| grid-template-columns: 1fr; | |
| padding: 1rem; | |
| gap: 1rem; | |
| } | |
| #webcam { | |
| height: 300px; | |
| } | |
| .controls-section { | |
| flex-direction: column; | |
| align-items: stretch; | |
| } | |
| .main-controls, .advanced-controls { | |
| justify-content: center; | |
| flex-wrap: wrap; | |
| } | |
| .caption-overlay { | |
| padding: 1rem; | |
| } | |
| #caption-text { | |
| font-size: 1.25rem; | |
| } | |
| .metrics-grid { | |
| grid-template-columns: 1fr; | |
| } | |
| .status-bar { | |
| padding: 0.5rem 1rem; | |
| flex-direction: column; | |
| gap: 0.5rem; | |
| text-align: center; | |
| } | |
| .keyboard-hint { | |
| display: none; | |
| } | |
| .toast { | |
| min-width: 280px; | |
| margin: 0 1rem; | |
| } | |
| .modal-content { | |
| width: 95%; | |
| margin: 1rem; | |
| } | |
| } | |
| @media (max-width: 480px) { | |
| .header { | |
| padding: 0.75rem; | |
| } | |
| .logo-section { | |
| gap: 0.5rem; | |
| } | |
| .logo-icon { | |
| font-size: 1.5rem; | |
| } | |
| .header h1 { | |
| font-size: 1.25rem; | |
| } | |
| .subtitle { | |
| font-size: 0.8125rem; | |
| } | |
| .main-content { | |
| padding: 0.75rem; | |
| } | |
| #webcam { | |
| height: 250px; | |
| } | |
| .btn { | |
| padding: 0.625rem 1rem; | |
| font-size: 0.8125rem; | |
| } | |
| .main-controls, .advanced-controls { | |
| gap: 0.75rem; | |
| } | |
| #caption-text { | |
| font-size: 1.125rem; | |
| } | |
| .caption-metadata { | |
| flex-direction: column; | |
| align-items: flex-start; | |
| gap: 0.5rem; | |
| } | |
| .confidence-bar { | |
| width: 100%; | |
| } | |
| .toast { | |
| min-width: 260px; | |
| } | |
| } | |
| /* Dark mode enhancements */ | |
| @media (prefers-color-scheme: dark) { | |
| body { | |
| background: linear-gradient(135deg, var(--bg-primary) 0%, #0a0d14 50%, var(--bg-secondary) 100%); | |
| } | |
| } | |
| /* High contrast mode support */ | |
| @media (prefers-contrast: high) { | |
| :root { | |
| --border-color: rgba(255, 255, 255, 0.3); | |
| --border-active: var(--primary-color); | |
| --text-secondary: #d1d5db; | |
| } | |
| } | |
| /* Reduced motion support */ | |
| @media (prefers-reduced-motion: reduce) { | |
| * { | |
| animation-duration: 0.01ms ; | |
| animation-iteration-count: 1 ; | |
| transition-duration: 0.01ms ; | |
| } | |
| .recording-dot { | |
| animation: none; | |
| } | |
| .loading::after { | |
| animation: none; | |
| } | |
| } | |
| /* Print styles */ | |
| @media print { | |
| .header, .sidebar, .controls-section, .status-bar, .toast-container { | |
| display: none; | |
| } | |
| .main-content { | |
| grid-template-columns: 1fr; | |
| padding: 0; | |
| } | |
| .video-container { | |
| border: 2px solid #000; | |
| border-radius: 0; | |
| box-shadow: none; | |
| } | |
| } | |